{"_id":"@cmdoss/cryptoguard-manifest-tanstack-start","_rev":"5-2f5f7a37c2025c79394246ba93758deb","name":"@cmdoss/cryptoguard-manifest-tanstack-start","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@cmdoss/cryptoguard-manifest-tanstack-start","version":"0.1.0","keywords":["tanstack-start","tanstack-router","cryptoguard","manifest","binary-transparency","verification"],"author":{"name":"CryptoGuard Team"},"license":"MIT","_id":"@cmdoss/cryptoguard-manifest-tanstack-start@0.1.0","maintainers":[{"name":"margo_cmdoss","email":"Margo.tran@commandoss.com"},{"name":"daniellam258","email":"daniellamhoang@gmail.com"},{"name":"toanzzz","email":"me@toan.io"}],"dist":{"shasum":"f3dd99a2a3bf1cf5616e991ad88af61d4d6ff2e7","tarball":"https://registry.npmjs.org/@cmdoss/cryptoguard-manifest-tanstack-start/-/cryptoguard-manifest-tanstack-start-0.1.0.tgz","fileCount":22,"integrity":"sha512-H068BDsAcpvDLrbIEHx0cIe2OnYDo/wVnW9xQyy+xiDnJzjuhid8aClPDyFUjms4eqf0hxQZV6cmkaBJP7LLtg==","signatures":[{"sig":"MEUCIQC9JoX4AuVNY37NIlHfRMs1juzfe4y9TePaZVqPTzB/egIgOufDIGhkiwdTQm4KlEyAvjUyEvj7TpnMoRQTFtDprBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17430},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"81f96eaab3b28f82b7f806c1a0bc0815e1644e4c","scripts":{"dev":"tsc --watch","build":"tsc","clean":"rm -rf dist","build:watch":"tsc --watch","prepublishOnly":"pnpm run clean && pnpm run build"},"_npmUser":{"name":"margo_cmdoss","email":"Margo.tran@commandoss.com"},"_npmVersion":"11.6.0","description":"TanStack Start plugin for CryptoGuard manifest generation","directories":{},"_nodeVersion":"24.8.0","dependencies":{"@cmdoss/cryptoguard-manifest-core":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","typescript":"^5.3.0","@types/node":"^20.0.0","@tanstack/react-start":"^1.0.0"},"peerDependencies":{"vite":">=5.0.0","@tanstack/react-start":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cryptoguard-manifest-tanstack-start_0.1.0_1765870391563_0.5004102941795667","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-12-16T07:33:11.480Z","modified":"2026-05-27T18:41:57.237Z","0.1.0":"2025-12-16T07:33:11.718Z"},"author":{"name":"CryptoGuard Team"},"license":"MIT","keywords":["tanstack-start","tanstack-router","cryptoguard","manifest","binary-transparency","verification"],"description":"TanStack Start plugin for CryptoGuard manifest generation","maintainers":[{"email":"lequocuyit@gmail.com","name":"uydev"},{"email":"mauduckiengiang@gmail.com","name":"ducnmm"},{"email":"aaron.phan@commandoss.com","name":"aaronphancommandoss"},{"email":"rowan.nguyen@commandoss.com","name":"rowanng"},{"email":"Margo.tran@commandoss.com","name":"margo_cmdoss"},{"email":"daniellamhoang@gmail.com","name":"daniellam258"},{"email":"me@toan.io","name":"toanzzz"}],"readme":"# @cryptoguard/manifest-tanstack-start\n\nTanStack Start plugin for CryptoGuard manifest generation. Automatically generates a manifest file mapping your TanStack Start build output to served URL paths for binary transparency verification.\n\n## Installation\n\n```bash\npnpm add @cryptoguard/manifest-tanstack-start\n```\n\n## Usage\n\nAdd the plugin to your `vite.config.ts`:\n\n```typescript\nimport { defineConfig } from 'vite';\nimport { tanstackStart } from '@tanstack/react-start/plugin/vite';\nimport viteReact from '@vitejs/plugin-react';\nimport { nitroV2Plugin } from '@tanstack/nitro-v2-vite-plugin';\nimport { cryptoGuardManifest } from '@cryptoguard/manifest-tanstack-start';\n\nexport default defineConfig({\n  plugins: [\n    nitroV2Plugin(),\n    tanstackStart(),\n    viteReact(),\n    cryptoGuardManifest()\n  ]\n});\n```\n\n## Configuration\n\n### With TanStack Start Config\n\nPass your configuration to the plugin:\n\n```typescript\nimport { defineConfig } from 'vite';\nimport { tanstackStart } from '@tanstack/react-start/plugin/vite';\nimport { cryptoGuardManifest } from '@cryptoguard/manifest-tanstack-start';\n\nconst tanstackConfig = {\n  base: '/docs'\n};\n\nexport default defineConfig({\n  base: tanstackConfig.base,\n  plugins: [\n    tanstackStart(),\n    cryptoGuardManifest(tanstackConfig)\n  ]\n});\n```\n\n### Plugin Options\n\n```typescript\ncryptoGuardManifest(tanstackConfig, {\n  verbose: true,   // Enable detailed logging\n  disabled: false, // Disable manifest generation\n  projectRoot: process.cwd() // Project root directory\n})\n```\n\n### Environment Variables\n\nYou can use environment variables for dynamic configuration:\n\n```typescript\nconst tanstackConfig = {\n  base: process.env.PUBLIC_BASE_PATH || ''\n};\n\nexport default defineConfig({\n  base: tanstackConfig.base || undefined,\n  plugins: [\n    tanstackStart(),\n    cryptoGuardManifest(tanstackConfig, {\n      verbose: process.env.MANIFEST_VERBOSE === 'true',\n      disabled: process.env.MANIFEST_DISABLED === 'true'\n    })\n  ]\n});\n```\n\n## Generated Manifest\n\nThe plugin generates a `manifest.json` file in your project root:\n\n```json\n{\n  \"version\": \"1.0\",\n  \"framework\": \"tanstack-start\",\n  \"frameworkVersion\": \"1.132.0\",\n  \"sources\": [\n    {\n      \"dir\": \".output/public\",\n      \"serveAt\": \"/\"\n    }\n  ]\n}\n```\n\n### With Base Path\n\nWhen using `base` configuration:\n\n```json\n{\n  \"version\": \"1.0\",\n  \"framework\": \"tanstack-start\",\n  \"frameworkVersion\": \"1.132.0\",\n  \"sources\": [\n    {\n      \"dir\": \".output/public\",\n      \"serveAt\": \"/docs\"\n    }\n  ]\n}\n```\n\n## How It Works\n\n1. **Build Hook**: Runs after TanStack Start build completes (`closeBundle`)\n2. **Path Detection**: Extracts `base` and `outDir` from your config\n3. **Manifest Generation**: Maps `.output/public/` to the appropriate serve path\n4. **Smart Updates**: Only updates manifest.json when content changes\n5. **Validation**: Ensures manifest security (no path traversal, proper structure)\n\n## TanStack Start Build Output Structure\n\nTanStack Start (with Nitro) generates:\n- `.output/public/` - All client-side assets\n- `.output/public/assets/` - Bundled JavaScript and CSS (hashed filenames)\n- `.output/server/` - Server-side rendering code (not served to clients)\n\nThe plugin maps the `.output/public/` directory to your configured base path, as TanStack Start serves all client assets (including `assets/` subdirectory) from this location.\n\n### URL Mapping Example\n\n```\nFile on Disk                              URL in Browser\n──────────────────────────────────────────────────────────────\n.output/public/assets/main-DzvKBgP-.js  → /assets/main-DzvKBgP-.js\n.output/public/assets/styles-D0UYo-87.css → /assets/styles-D0UYo-87.css\n.output/public/favicon.ico              → /favicon.ico\n.output/public/logo192.png              → /logo192.png\n```\n\nWith `base: \"/docs\"`:\n```\n.output/public/assets/main.js → /docs/assets/main.js\n.output/public/favicon.ico    → /docs/favicon.ico\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}