{"_id":"@cute-me-on-repos/sst-analyzer","_rev":"3-4e65061402fa404226a7725d3266ac19","name":"@cute-me-on-repos/sst-analyzer","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.1":{"name":"@cute-me-on-repos/sst-analyzer","version":"0.1.1","keywords":["sst","serverless","validation","typescript","cli"],"author":{"name":"Ly Luong Thien"},"_id":"@cute-me-on-repos/sst-analyzer@0.1.1","maintainers":[{"name":"lyluongthien-tiki","email":"thien.ly@tiki.vn"},{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"}],"homepage":"https://github.com/lyluongthien/sst-vscode-extension/tree/main/packages/analyzer","bugs":{"url":"https://github.com/lyluongthien/sst-vscode-extension/issues"},"bin":{"sst-analyzer":"cli/sst-analyzer","cute-sst-analyzer":"cli/sst-analyzer"},"dist":{"shasum":"d6626fdfb05d61ae485f12fa49dbac093f324c04","tarball":"https://registry.npmjs.org/@cute-me-on-repos/sst-analyzer/-/sst-analyzer-0.1.1.tgz","fileCount":18,"integrity":"sha512-Bnc/ByJmfAkj2sYqTsMxLdlt7wAsX8Ur1bnOIWpry3/pDRATe3EDTlp1eyCwqXhK10x5qJP/pyRpKjTuabv/zw==","signatures":[{"sig":"MEQCIFHVzbNWnJP793EiXANF0e5nhuUPdGLxwlnYJ1a6SFW7AiAy99puuPV63O9Ihh+NSsV3xeTZrgCLGUSDVrIq6X09EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148708},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"78f549a6b1120417c2217f2921362d2f8545de47","scripts":{"dev":"tsc -p . --watch","lint":"biome check","test":"vitest run","build":"pnpm run build:lib && pnpm run build:cli","cspell":"cspell -c ../../.cspell.json './**/*' '!*lock.yaml' '!**/*.mermaid' '!**/*.svg'","validate":"node cli/sst-analyzer","build:cli":"esbuild ./src/cli/index.ts --bundle --outfile=cli/sst-analyzer --platform=node --format=cjs --define:process.env.NODE_ENV='\"production\"' --minify","build:lib":"rm -rf dist && tsc -p .","check-types":"tsc --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"},"repository":{"url":"git+https://github.com/lyluongthien/sst-vscode-extension.git","type":"git","directory":"packages/analyzer"},"_npmVersion":"10.9.2","description":"Core validation library for SST projects with CLI support","directories":{},"_nodeVersion":"22.14.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^10.3.0","chalk":"^5.3.0","vitest":"^3.2.0","esbuild":"^0.25.9","commander":"^11.0.0","typescript":"catalog:","@types/node":"^22.17.2"},"_npmOperationalInternal":{"tmp":"tmp/sst-analyzer_0.1.1_1756023824429_0.5001511584485889","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cute-me-on-repos/sst-analyzer","version":"0.1.2","keywords":["sst","serverless","validation","typescript","cli"],"author":{"name":"Ly Luong Thien"},"_id":"@cute-me-on-repos/sst-analyzer@0.1.2","maintainers":[{"name":"lyluongthien-tiki","email":"thien.ly@tiki.vn"},{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"}],"homepage":"https://github.com/lyluongthien/sst-vscode-extension/tree/main/packages/analyzer","bugs":{"url":"https://github.com/lyluongthien/sst-vscode-extension/issues"},"bin":{"sst-analyzer":"cli/sst-analyzer","cute-sst-analyzer":"cli/sst-analyzer"},"dist":{"shasum":"af28dac366dca118fb312d535d5173ccd15fd824","tarball":"https://registry.npmjs.org/@cute-me-on-repos/sst-analyzer/-/sst-analyzer-0.1.2.tgz","fileCount":18,"integrity":"sha512-K9DdjM20faltP3gtNQz16SbUcaSk9C3E17bg8turHWfrnR8MUzx8XyuOofWJfxKOJQJf7gyK7VJgrmUZjc6+pw==","signatures":[{"sig":"MEUCIAoqD51Qobqfy45lqq7tmteHivSq+pqS/TqLnsZjwqIDAiEAtfC5TNWbqsKEftGMrsPfHQH42y/1T1bwxSQI0DtVMsk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148708},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18.0.0"},"gitHead":"78f549a6b1120417c2217f2921362d2f8545de47","scripts":{"dev":"tsc -p . --watch","lint":"biome check","test":"vitest run","build":"pnpm run build:lib && pnpm run build:cli","cspell":"cspell -c ../../.cspell.json './**/*' '!*lock.yaml' '!**/*.mermaid' '!**/*.svg'","validate":"node cli/sst-analyzer","build:cli":"esbuild ./src/cli/index.ts --bundle --outfile=cli/sst-analyzer --platform=node --format=cjs --define:process.env.NODE_ENV='\"production\"' --minify","build:lib":"rm -rf dist && tsc -p .","check-types":"tsc --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"},"repository":{"url":"git+https://github.com/lyluongthien/sst-vscode-extension.git","type":"git","directory":"packages/analyzer"},"_npmVersion":"10.9.3","description":"Core validation library for SST projects with CLI support","directories":{},"_nodeVersion":"22.18.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^10.3.0","chalk":"^5.3.0","vitest":"^3.2.0","esbuild":"^0.25.9","commander":"^11.0.0","typescript":"catalog:","@types/node":"^22.17.2"},"_npmOperationalInternal":{"tmp":"tmp/sst-analyzer_0.1.2_1756024103426_0.14613144226491404","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cute-me-on-repos/sst-analyzer","version":"0.1.3","description":"Core validation library for SST projects with CLI support","main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","author":{"name":"Kai"},"repository":{"type":"git","url":"git+https://github.com/lltpkg/sst-vscode-extension.git","directory":"packages/analyzer"},"homepage":"https://github.com/lltpkg/sst-vscode-extension/tree/main/packages/analyzer","type":"commonjs","bin":{"sst-analyzer":"cli/sst-analyzer","cute-sst-analyzer":"cli/sst-analyzer"},"keywords":["sst","serverless","validation","typescript","cli"],"dependencies":{},"devDependencies":{"@types/node":"^22.17.2","chalk":"^5.3.0","commander":"^11.0.0","glob":"^10.3.0","typescript":"5.9.1-rc","vitest":"^3.2.0","esbuild":"^0.25.9"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"scripts":{"build:lib":"rm -rf dist && tsc -p .","build:cli":"esbuild ./src/cli/index.ts --bundle --outfile=cli/sst-analyzer --platform=node --format=cjs --define:process.env.NODE_ENV='\"production\"' --minify","build":"pnpm run build:lib && pnpm run build:cli","dev":"tsc -p . --watch","test":"vitest run","check-types":"tsc --noEmit && tsc -p tsconfig.test.json --noEmit","lint":"biome check","cspell":"cspell -c ../../.cspell.json './**/*' '!*lock.yaml' '!**/*.mermaid' '!**/*.svg'","validate":"node cli/sst-analyzer"},"_id":"@cute-me-on-repos/sst-analyzer@0.1.3","bugs":{"url":"https://github.com/lltpkg/sst-vscode-extension/issues"},"_integrity":"sha512-hz7CgFgYjVol/XAqoWLLlTQ7ZabrW4FOTCzHnL1iDgInhSnuz00z7YR0n0Pd3OfDLyqeeu4tloZefEVnanxVig==","_resolved":"/tmp/396360d541acaa549912f010b1c85b2a/cute-me-on-repos-sst-analyzer-0.1.3.tgz","_from":"file:cute-me-on-repos-sst-analyzer-0.1.3.tgz","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-hz7CgFgYjVol/XAqoWLLlTQ7ZabrW4FOTCzHnL1iDgInhSnuz00z7YR0n0Pd3OfDLyqeeu4tloZefEVnanxVig==","shasum":"5b9f5a8398b907eaaece396632af802c0116bc0d","tarball":"https://registry.npmjs.org/@cute-me-on-repos/sst-analyzer/-/sst-analyzer-0.1.3.tgz","fileCount":18,"unpackedSize":151182,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBJ6eY1iQCZCRz6wy+H3y405FYm4pKYmfnHf/Bp4bERUAiEAqeDP2ahPr3gh7UyCWKjEbZ2Xg2c1RhIS2BUDbz407Yg="}]},"_npmUser":{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"},"directories":{},"maintainers":[{"name":"lyluongthien-tiki","email":"thien.ly@tiki.vn"},{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sst-analyzer_0.1.3_1756044269815_0.23189307389595992"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-24T08:23:44.320Z","modified":"2025-08-24T14:04:30.201Z","0.1.1":"2025-08-24T08:23:44.641Z","0.1.2":"2025-08-24T08:28:23.644Z","0.1.3":"2025-08-24T14:04:29.996Z"},"bugs":{"url":"https://github.com/lltpkg/sst-vscode-extension/issues"},"author":{"name":"Kai"},"homepage":"https://github.com/lltpkg/sst-vscode-extension/tree/main/packages/analyzer","keywords":["sst","serverless","validation","typescript","cli"],"repository":{"type":"git","url":"git+https://github.com/lltpkg/sst-vscode-extension.git","directory":"packages/analyzer"},"description":"Core validation library for SST projects with CLI support","maintainers":[{"name":"lyluongthien-tiki","email":"thien.ly@tiki.vn"},{"name":"lyluongthien","email":"lyluongthien1002@gmail.com"}],"readme":"# SST Core\n\nCore validation library for SST (Serverless Stack) projects with CLI support.\n\n## Features\n\n- **Universal Handler Validation**: Supports Function, Cron, Queue, and Bucket handlers\n- **Template Literal Support**: Resolves variables in template literals like `` `functions/${pathName}.handler` ``\n- **Real-time Error Detection**: Catches invalid file paths and function names\n- **Smart Suggestions**: Provides \"Did you mean...\" suggestions for typos\n- **CLI Interface**: Command-line tool for CI/CD integration\n- **TypeScript AST Analysis**: Accurate parsing using TypeScript compiler API\n\n## Installation\n\n```bash\n# As a dependency\npnpm add sst-analyzer\n\n# Global CLI installation\npnpm add -g sst-analyzer\n```\n\n## CLI Usage\n\n### Validate Project\n\n```bash\n# Validate current directory\nsst-validate validate\n\n# Validate specific project\nsst-validate validate --path /path/to/sst-project\n\n# JSON output for CI/CD\nsst-validate validate --json\n```\n\n### Scan Handlers\n\n```bash\n# List all handler files\nsst-validate scan\n\n# JSON output\nsst-validate scan --json\n```\n\n### Check Specific File\n\n```bash\n# Validate a single file\nsst-validate check-file src/functions/upload.ts\n\n# With custom project path\nsst-validate check-file src/functions/upload.ts --project /path/to/project\n```\n\n## Programmatic Usage\n\n```typescript\nimport { SSTValidator } from \"sst-analyzer\";\n\n// Create validator\nconst validator = new SSTValidator(\"/path/to/sst-project\");\n\n// Validate entire project\nconst result = await validator.validateProject();\n\nif (result.isValid) {\n  console.log(\"✅ All handlers are valid!\");\n} else {\n  for (const error of result.errors) {\n    console.error(`❌ ${error.message}`);\n    if (error.suggestions) {\n      console.log(`💡 Suggestions: ${error.suggestions.join(\", \")}`);\n    }\n  }\n}\n```\n\n## Supported Handler Types\n\n### 1. SST Function Handlers\n\n```typescript\n// Static strings\nnew sst.aws.Function(\"upload\", {\n  handler: \"functions/upload.handler\",\n});\n\n// Template literals with variables\nconst serviceName = \"upload\";\nnew sst.aws.Function(\"upload\", {\n  handler: `functions/${serviceName}.handler`,\n});\n```\n\n### 2. SST Cron Handlers\n\n```typescript\n// Static strings\nnew sst.aws.Cron(\"cleanup\", {\n  schedule: \"rate(1 day)\",\n  function: \"functions/cleanup.handler\",\n});\n\n// Template literals\nconst taskName = \"cleanup\";\nnew sst.aws.Cron(\"cleanup\", {\n  schedule: \"rate(1 day)\",\n  function: `functions/${taskName}.handler`,\n});\n```\n\n### 3. Queue Subscribe Handlers\n\n```typescript\n// Static strings\nqueue.subscribe(\"functions/processor.handler\");\n\n// Template literals\nconst processorName = \"processor\";\nqueue.subscribe(`functions/${processorName}.handler`);\n```\n\n### 4. Bucket Notification Handlers\n\n```typescript\n// Static strings\npublicBucket.notify({\n  notifications: [{\n    function: \"functions/uploader.handler\",\n  }],\n});\n\n// Template literals\nconst handlerName = \"uploader\";\npublicBucket.notify({\n  notifications: [{\n    function: `functions/${handlerName}.handler`,\n  }],\n});\n```\n\n## Error Types\n\n### File Not Found\n\n```\n❌ Handler file not found: \"functions/nonexistent.ts\". Make sure the file exists in your project.\n💡 Suggestions: functions/upload, functions/details\n```\n\n### Function Not Found\n\n```\n❌ Function \"wrongFunction\" not found in \"functions/upload.ts\". Available functions: handler, otherFunction\n💡 Suggestions: handler, otherFunction\n```\n\n### Invalid Format\n\n```\n❌ Invalid handler format: \"invalid-format\". Expected format: \"path/to/file.functionName\"\n```\n\n## Configuration\n\nThe validator automatically detects SST projects by looking for `sst.config.ts` and respects `tsconfig.json` include/exclude patterns.\n\n### Example tsconfig.json\n\n```json\n{\n  \"include\": [\"**/*.ts\"],\n  \"exclude\": [\"node_modules/**\", \"dist/**\", \"**/*.test.ts\"]\n}\n```\n\n## CI/CD Integration\n\nUse in your CI/CD pipeline:\n\n```bash\n# GitHub Actions, GitLab CI, etc.\nsst-validate validate --json > validation-results.json\n\n# Exit codes:\n# 0 = validation passed\n# 1 = validation failed\n```\n\n## Advanced Features\n\n- **Variable Resolution**: Resolves `const pathName = \"details\"` in template literals\n- **Multiple Variables**: Supports `${dir}/${file}.${func}` patterns\n- **Smart Similarity**: Uses advanced algorithms for typo suggestions\n- **Performance Optimized**: Efficient AST parsing and file scanning\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build the package\npnpm build\n\n# Run tests\npnpm test\n\n# Development mode\npnpm dev\n```\n\n","readmeFilename":"README.md"}