{"_id":"@_mustachio/ghost-viewer","_rev":"11-13b3500c931f8b98842c98c9af459815","name":"@_mustachio/ghost-viewer","dist-tags":{"latest":"1.6.0"},"versions":{"1.0.2":{"name":"@_mustachio/ghost-viewer","version":"1.0.2","_id":"@_mustachio/ghost-viewer@1.0.2","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"0766bd55b40755ec1f9c672fc8fad08712eef1a3","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.2.tgz","fileCount":5,"integrity":"sha512-Qt91RcY76EzWsGWeKzc9fBMyCJJ8B3N5OP777aU/dZ/pjQE+HZdsgZ/FSOuCn9AZt+ShbehSeuBbg9s1cm+ZvA==","signatures":[{"sig":"MEUCIA3wISMySzf6Ero/fIXkUWw4laLMgOgtpW6FKhukYTFYAiEA2QA2fu+s9da9px5eviyGtq2yYm4+TLmmhzPTX5MGrv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":222694},"type":"module","gitHead":"9a7536bd321134d03cb4c6ad1dd758be63368ecd","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.2_1766550520128_0.6658524707213922","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@_mustachio/ghost-viewer","version":"1.0.3","_id":"@_mustachio/ghost-viewer@1.0.3","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"8716ad3f1f1452754365a384c14ae40479ac1960","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.3.tgz","fileCount":5,"integrity":"sha512-Qx/XKFqTMHPQGmo/OY3v57XSqadXoPr4wZQTlDt7KCMD6ykhebE84TH2NG9ysmwNttzzWn0jEpoggd0bufG39g==","signatures":[{"sig":"MEQCIHm2aZm48Xncu13nlDxhyRQgvJbapc0eg0tL7X5J2MFYAiBWXkUuib8EIwWevscvSGfkmRhuavXBxX8ZZGUlWUr4MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225601},"type":"module","gitHead":"dae856c2173539ab6984fde7ea6b799016221507","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.3_1766553715100_0.7273556472624017","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@_mustachio/ghost-viewer","version":"1.0.4","_id":"@_mustachio/ghost-viewer@1.0.4","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"378a1e7db3a15bc2b9440b72072f76d73653d05f","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.4.tgz","fileCount":5,"integrity":"sha512-D3tOj6I24dyEWIDZGM/NVzJ9I8uIRuU7viuWC3iqLsRiegSK35I7cbryNbvcP10y3BvdIS8Y4TB7hjbLO0EvRQ==","signatures":[{"sig":"MEUCIQC8AsIbghUZH6WUT3nkFpv2zIB0JFk9n/AZltzHWl+00AIgMBt1j9P3EbEh7HmErevPpZn4SoeuvYYFBoB/30/3LUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236698},"type":"module","gitHead":"c89ff40e050358234e49b755f253e87a4ef2b0d1","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.4_1766558712416_0.5664033993008311","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@_mustachio/ghost-viewer","version":"1.0.5","_id":"@_mustachio/ghost-viewer@1.0.5","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"af290d046be71c088fbe61ce87618f9183839413","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.5.tgz","fileCount":6,"integrity":"sha512-LmUK6yVF8NyBBR+ox6mGYdPgs103wUHuMs3DhN/2a/9SRFG+TdoHRVuFKUi7MVsmVwOFPAh5v+nGKUfh21INHw==","signatures":[{"sig":"MEUCIEce4fvbc3m6LRERWRHm2EpLHF2xwsnK9vZcBYDENlD7AiEA4tZ8SNnKMcNexnbxVg1o6oACDwl/aJBWXA9DjSd/Faw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240097},"type":"module","gitHead":"3046da349e41b7497fc1fef140c80f3e7215240a","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.5_1766559576901_0.4183962775671386","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@_mustachio/ghost-viewer","version":"1.0.7","_id":"@_mustachio/ghost-viewer@1.0.7","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"5b22f1cdf5b4a5f0d1cd165a91028104c69bbcfd","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.7.tgz","fileCount":6,"integrity":"sha512-/C1mplircVyEtiTFJQq2PHdek7m5NEG0+ldWYpZ36LLNpo/S8Qp/mB6fARdoq3TlWBknNHWy2ctZONpzfMjfDw==","signatures":[{"sig":"MEUCIEVg41TZkcCbA3cXZaLF+kMlhztS3epUxHBOEymi3FykAiEA33PlSNfjvNb7fRbLYfTBKGbu03ll+SckvOblbkYcKS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247503},"type":"module","gitHead":"a281cc7aa32a3592d180e8c9897e82a0c50e4fe0","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.7_1766607156583_0.9619212020991053","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@_mustachio/ghost-viewer","version":"1.0.11","_id":"@_mustachio/ghost-viewer@1.0.11","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"d7f8955defb1730009398001285a1c450f856b7d","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.0.11.tgz","fileCount":6,"integrity":"sha512-KbYIjX2KyjrSYjLUbJC65ec0O6dzLLlYqAJrPA5Q/LzTce439bC5AdPUK3pYX60/7BA4AjLhogZPImNQ2YXfug==","signatures":[{"sig":"MEYCIQCCkxtRPOj93+XN7PhvrLPmXbgPGgpKBfbJ+CEiAWKxRAIhAPKf5bGc6RSe5VmelLgKpBqEkKsiQmSkFV49WeXnTsMt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251444},"type":"module","gitHead":"1fa4e1d65b946aebaea0dea236e371fbde1df022","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","release":"npm version","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","postversion":"git push origin main --follow-tags && npm publish","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build"},"_npmUser":{"name":"_mustachio","email":"mattpuccio1001@gmail.com"},"_npmVersion":"10.9.2","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"22.14.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","update-notifier":"^7.3.1","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","@vitejs/plugin-react":"^4.2.1","@types/update-notifier":"^6.0.8"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.0.11_1766653653764_0.8121637041539922","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@_mustachio/ghost-viewer","version":"1.2.1","_id":"@_mustachio/ghost-viewer@1.2.1","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"9025cc741667feb7f631797570b38d278a19a04a","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.2.1.tgz","fileCount":7,"integrity":"sha512-z5TX/Z08I0dST42HK6mI552C4W+sLS08Pql9IK79rG0/1Qi33YxDi0xcKq/qajfF5Ta7jS/SEF87A4oUiKhk6Q==","signatures":[{"sig":"MEUCIQDQJsQWmmZ4efm/ksLxVrplIQMVYJWO82aZtljmty3CYAIgZ2TCr0rKOPgTUK0To/aS1Npu6XySsKPA1XUni3ow7uQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_mustachio%2fghost-viewer@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255365},"type":"module","gitHead":"0b6fc2efb24e4339eb2c47b7e0f9c27af8909ac3","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:51c0b4f1-ce1a-4550-a808-6721aad24095"}},"repository":{"url":"git+https://github.com/the-human-mustachio/ghost-viewer.git","type":"git"},"_npmVersion":"11.7.0","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","update-notifier":"^7.3.1","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","semantic-release":"^25.0.2","@vitejs/plugin-react":"^4.2.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@types/update-notifier":"^6.0.8","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.2.1_1766709213542_0.3468271518982742","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@_mustachio/ghost-viewer","version":"1.3.0","_id":"@_mustachio/ghost-viewer@1.3.0","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"daea80749792422d7dfa56b244f2410da0a198f6","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.3.0.tgz","fileCount":7,"integrity":"sha512-qU6tf74cZyW10mbdaiDpbC9n8DgJoVVr378YfCmOxHdZs90pHXe2IjD59LfBuFf/LEhe2nIkvZN+mvgNCntgtg==","signatures":[{"sig":"MEYCIQC66gQxGhktAkn3B0n12nwajuAN8JeyAxBTAQp03ilYpgIhALhy4AjaNvmg533scKLpXeapBRJ9z114Ram+gLWncksV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_mustachio%2fghost-viewer@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255357},"type":"module","gitHead":"4f7f23c2ad31ca10056b70e37877da9f2523284d","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:51c0b4f1-ce1a-4550-a808-6721aad24095"}},"repository":{"url":"git+https://github.com/the-human-mustachio/ghost-viewer.git","type":"git"},"_npmVersion":"11.7.0","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"24.12.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","update-notifier":"^7.3.1","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","semantic-release":"^25.0.2","@vitejs/plugin-react":"^4.2.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@types/update-notifier":"^6.0.8","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.3.0_1766736672472_0.07424246334368245","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@_mustachio/ghost-viewer","version":"1.4.0","_id":"@_mustachio/ghost-viewer@1.4.0","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"c2a0032cce01066bc4bfe4d5e82df742558b025d","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.4.0.tgz","fileCount":7,"integrity":"sha512-yRsQrUKRmpOa2XT/VBEmlQReuYsfitulyRJ512Wifc1mGOV4wYQ/naRMjWIjDA8nVlL3KpCiurkGNM0izfzWxA==","signatures":[{"sig":"MEUCIHFE450mwYSatp5BC1peffIEltcsdiBjVl0lpvxCJEeXAiEApLMg9ev4t/B6klsEXUMXfT4uQ6irdHhEnZuij+9MTps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_mustachio%2fghost-viewer@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":267958},"type":"module","gitHead":"1ccce44fa79995d549686a07c1514803232e234b","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:51c0b4f1-ce1a-4550-a808-6721aad24095"}},"repository":{"url":"git+https://github.com/the-human-mustachio/ghost-viewer.git","type":"git"},"_npmVersion":"11.7.0","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","update-notifier":"^7.3.1","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-ssm":"^3.985.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","semantic-release":"^25.0.2","@vitejs/plugin-react":"^4.2.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@types/update-notifier":"^6.0.8","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.4.0_1770665046906_0.3101824130576605","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@_mustachio/ghost-viewer","version":"1.5.0","_id":"@_mustachio/ghost-viewer@1.5.0","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"bin":{"ghost-viewer":"dist/cli.js"},"dist":{"shasum":"11c8c64c038dfae48f8f3bcf7e61e92694b30793","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.5.0.tgz","fileCount":7,"integrity":"sha512-htopWNL+2W63eJNqcD9AhEyRdRRPj9rCV7u28i0IhVOzRO7VXNcKCwQ1vqHzTUVprGG1xJIs/5CpjbvmuSKcEQ==","signatures":[{"sig":"MEQCIEY5X95WgaGFjWIFe7I/aCLfDgGggX2AhlxXs40mZgZmAiB/JdmYra13MHp+snd6UO6fizLGBzPJNCz1JwcLTeQeEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_mustachio%2fghost-viewer@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":268108},"type":"module","gitHead":"23cee8a5c70ae18a4469a0aaf5f9ba26ea6f0b02","scripts":{"dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build":"npm run build:ui && npm run build:server","start":"node dist/cli.js","dev:ui":"vite","preview":"vite preview","build:ui":"tsc && vite build","dev:server":"tsx watch server/index.ts","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","prepublishOnly":"npm run build","semantic-release":"semantic-release"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:51c0b4f1-ce1a-4550-a808-6721aad24095"}},"repository":{"url":"git+https://github.com/the-human-mustachio/ghost-viewer.git","type":"git"},"_npmVersion":"11.7.0","description":"Visualizer and Orphan Hunter for SST State","directories":{},"_nodeVersion":"24.13.0","dependencies":{"cors":"^2.8.5","open":"^10.0.0","chalk":"^5.3.0","react":"^18.2.0","express":"^4.18.2","fuse.js":"^7.0.0","react-dom":"^18.2.0","lucide-react":"^0.300.0","update-notifier":"^7.3.1","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-ssm":"^3.985.0","@aws-sdk/client-resource-groups-tagging-api":"^3.500.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.7.0","tsup":"^8.5.1","vite":"^5.0.8","postcss":"^8.4.32","typescript":"^5.3.3","@types/cors":"^2.8.17","@types/node":"^20.10.0","tailwindcss":"^3.3.6","@types/react":"^18.2.43","autoprefixer":"^10.4.16","concurrently":"^9.2.1","@types/express":"^4.17.21","@types/react-dom":"^18.2.17","semantic-release":"^25.0.2","@vitejs/plugin-react":"^4.2.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.3","@types/update-notifier":"^6.0.8","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3"},"_npmOperationalInternal":{"tmp":"tmp/ghost-viewer_1.5.0_1770674182449_0.4025015097408362","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@_mustachio/ghost-viewer","version":"1.6.0","description":"Visualizer and Orphan Hunter for SST State","type":"module","repository":{"type":"git","url":"git+https://github.com/the-human-mustachio/ghost-viewer.git"},"publishConfig":{"access":"public"},"bin":{"ghost-viewer":"dist/cli.js"},"scripts":{"dev:ui":"vite","dev:server":"tsx watch server/index.ts","dev":"concurrently \"npm run dev:server\" \"npm run dev:ui\"","build:ui":"tsc && vite build","build:server":"tsup server/cli.ts --format esm --out-dir dist --target node20 --no-splitting --minify","build":"npm run build:ui && npm run build:server","semantic-release":"semantic-release","prepublishOnly":"npm run build","preview":"vite preview","start":"node dist/cli.js"},"dependencies":{"@aws-sdk/client-resource-groups-tagging-api":"^3.500.0","@aws-sdk/client-s3":"^3.958.0","@aws-sdk/client-ssm":"^3.985.0","chalk":"^5.3.0","cors":"^2.8.5","express":"^4.18.2","fuse.js":"^7.0.0","lucide-react":"^0.300.0","open":"^10.0.0","react":"^18.2.0","react-dom":"^18.2.0","update-notifier":"^7.3.1"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/npm":"^13.1.3","@types/cors":"^2.8.17","@types/express":"^4.17.21","@types/node":"^20.10.0","@types/react":"^18.2.43","@types/react-dom":"^18.2.17","@types/update-notifier":"^6.0.8","@vitejs/plugin-react":"^4.2.1","autoprefixer":"^10.4.16","concurrently":"^9.2.1","postcss":"^8.4.32","semantic-release":"^25.0.2","tailwindcss":"^3.3.6","tsup":"^8.5.1","tsx":"^4.7.0","typescript":"^5.3.3","vite":"^5.0.8"},"gitHead":"f9f5b66377386d8a2c2845bc861ac3fd4ae9e888","_id":"@_mustachio/ghost-viewer@1.6.0","bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","_nodeVersion":"24.13.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-402H00GEm8IojAmbYjzBUmg3X/yAitH4ZEN5R7rqj/KBijUGSzDawKmvU+vNXtA6iWRBgGUJLV503JTlcb5EDQ==","shasum":"f17f94d5b0dc8e21f8511c4c5b8eea147d3ea392","tarball":"https://registry.npmjs.org/@_mustachio/ghost-viewer/-/ghost-viewer-1.6.0.tgz","fileCount":7,"unpackedSize":268363,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@_mustachio%2fghost-viewer@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCLiIc2/yAMmMXtvNmBeFSHhw2npyHyNBENsJQHv7EMIgIgZgykGmHYEr+xYcNv57YgoK1r4afh1AszY5qFh0xws9w="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:51c0b4f1-ce1a-4550-a808-6721aad24095"}},"directories":{},"maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ghost-viewer_1.6.0_1770675705334_0.7493040338735224"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-24T04:28:40.056Z","modified":"2026-02-09T22:21:45.733Z","1.0.2":"2025-12-24T04:28:40.323Z","1.0.3":"2025-12-24T05:21:55.264Z","1.0.4":"2025-12-24T06:45:12.558Z","1.0.5":"2025-12-24T06:59:37.056Z","1.0.7":"2025-12-24T20:12:36.720Z","1.0.11":"2025-12-25T09:07:33.931Z","1.2.1":"2025-12-26T00:33:33.699Z","1.3.0":"2025-12-26T08:11:12.609Z","1.4.0":"2026-02-09T19:24:07.060Z","1.5.0":"2026-02-09T21:56:22.620Z","1.6.0":"2026-02-09T22:21:45.467Z"},"bugs":{"url":"https://github.com/the-human-mustachio/ghost-viewer/issues"},"homepage":"https://github.com/the-human-mustachio/ghost-viewer#readme","repository":{"type":"git","url":"git+https://github.com/the-human-mustachio/ghost-viewer.git"},"description":"Visualizer and Orphan Hunter for SST State","maintainers":[{"name":"_mustachio","email":"mattpuccio1001@gmail.com"}],"readme":"# Ghost Viewer 👻\n\n**Ghost Viewer** is a specialized tool designed to visualize your [SST (Serverless Stack)](https://sst.dev/) state and \"hunt\" for orphaned resources in your AWS account. It provides a modern web interface to explore your local state file and compare it against live AWS resources to identify items that may have been left behind after deployments or manual removals.\n\n![Explorer View](images/explorer.png)\n![Hunter View](images/hunter.png)\n\nBuilt for both **SST v2 (Pulumi-based)** and **SST v3 (Ion)**.\n\n---\n\n## 🚀 Quick Start\n\nRun it directly in your SST project root:\n\n```bash\nnpx @_mustachio/ghost-viewer\n```\n\nThis will:\n1. Auto-detect your SST state file (supporting Ion's `.sst/state.json` and v2's Pulumi stacks).\n2. Start a local server on port 3001.\n3. Open your browser to the Ghost Viewer dashboard.\n\n### 🛠 Manual Configuration\nIf Ghost Viewer cannot auto-detect your state file, or if you want to view a specific state file from another directory:\n- Click the **Settings (gear icon)** in the top right of the dashboard.\n- Enter the absolute or relative path to your `state.json` or `.json` Pulumi stack file.\n- **S3 Support**: You can also provide an S3 URI (e.g., `s3://my-bucket/path/to/state.json`).\n- **Region Selection**: When an S3 path is detected, a dropdown will appear to select the bucket's region (defaults to `us-west-2`).\n- Click the checkmark to save and reload.\n\n---\n\n## 🔐 Prerequisites & Permissions\n\nGhost Viewer uses your local AWS configuration to scan for resources. \n\n- **AWS Credentials**: Ensure your terminal session has active AWS credentials (e.g., run `aws sso login` or export your keys).\n- **Permissions**: \n    - The user/role must have `tag:GetResources` permissions to perform the Ghost Hunt.\n    - If using an S3-hosted state file, `s3:GetObject` permission is required for that bucket/key.\n\n---\n\n## ✨ Key Features\n\n### 🔍 State Explorer\nVisualize your `state.json` or Pulumi stack file in a searchable, categorized tree or flat list view.\n- **Deep Linking**: One-click navigation to the AWS Console for almost any resource (Lambda, S3, DynamoDB, API Gateway, EC2, VPC, etc.).\n- **Smart Filtering**: Filter by source (AWS vs SST) or specific resource types.\n- **Metadata Inspection**: View the full outputs and metadata for every resource managed by your stack.\n\n### 🏹 Ghost Hunter\nScan your live AWS account for resources tagged with your SST app and stage to identify \"orphans\"—resources that exist in AWS but are no longer tracked in your local state.\n- **Grouped Views**: See orphans categorized by resource type.\n- **Persistent Scans**: Scan results stay active as you navigate the app.\n- **Wide Coverage**: Detects orphans across a wide range of AWS services.\n\n### 🛠 CLI First\nDesigned to be zero-config. It automatically resolves your app name, stage, and region by parsing `.sst/stage`, `sst.config.ts`, or your Pulumi environment.\n\n---\n\n## 🛠 Tech Stack\n\n- **Frontend**: React (Vite), Tailwind CSS, Lucide React, Fuse.js.\n- **Backend**: Node.js (Express), AWS SDK v3.\n- **Bundling**: `tsup` for the CLI, `vite` for the UI.\n\n---\n\n## 💻 Local Development\n\nIf you want to contribute or run Ghost Viewer from source:\n\n1. **Clone the repo**:\n   ```bash\n   git clone https://github.com/the-human-mustachio/ghost-viewer.git\n   cd ghost-viewer\n   ```\n\n2. **Install dependencies**:\n   ```bash\n   npm install\n   ```\n\n3. **Run in development mode**:\n   ```bash\n   npm run dev\n   ```\n   This starts the Vite frontend (port 5173) and the Express backend (port 3001) concurrently with hot-reloading.\n\n4. **Build the project**:\n   ```bash\n   npm run build\n   ```\n\n---\n\n## 📦 Automated Releases\n\nThis project uses **Semantic Release** to automate versioning and publishing. To trigger a release, your commit messages must follow the [Conventional Commits](https://www.conventionalcommits.org/) specification:\n\n- **`feat: ...`**: Triggers a **minor** release (e.g., 1.0.0 -> 1.1.0).\n- **`fix: ...`**: Triggers a **patch** release (e.g., 1.0.0 -> 1.0.1).\n- **`perf: ...`**: Triggers a **patch** release.\n- **`docs: ...`**: No release.\n- **`chore: ...`**: No release.\n- **`BREAKING CHANGE: ...`**: Triggers a **major** release (e.g., 1.0.0 -> 2.0.0).\n\nTo run a release manually (requires `NPM_TOKEN` and `GITHUB_TOKEN`):\n```bash\nnpm run semantic-release\n```\n\n---\n\n## 📄 License\n\nMIT © [Matt Puccio](https://github.com/the-human-mustachio)\n","readmeFilename":"README.md"}