{"_id":"@canmi/seam-vite","_rev":"8-f3e1cbb63711eb2dfd4ef6baf10ac827","name":"@canmi/seam-vite","dist-tags":{"latest":"0.5.38"},"versions":{"0.4.15":{"name":"@canmi/seam-vite","version":"0.4.15","license":"MIT","_id":"@canmi/seam-vite@0.4.15","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"94c00b24919231136b3485614b7a4d6d36b3d4a9","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.4.15.tgz","fileCount":6,"integrity":"sha512-o/HiAjhVW0oXU2IpjRi25KNxFramAiNxQR9XGns9+wkCd+t3miNFIH6+csW9O/bnoUGgBZ2/sqaOpcLFlXdAqw==","signatures":[{"sig":"MEUCIQDslu/D2AP8w63ThOfD5LBEL0DW+gwXbcFI5ixyZ+zfxwIgT/wAsm/5/uVj5QaJT35PX14IXLxUvvsjqRO837Pvf7g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15944},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"c9d0c3fef3f141ba2d2f2098fc83b7289f3d3b89","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.9.0","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3"},"peerDependencies":{"vite":">=5"},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.4.15_1772439594371_0.09898755926080582","host":"s3://npm-registry-packages-npm-production"}},"0.4.16":{"name":"@canmi/seam-vite","version":"0.4.16","license":"MIT","_id":"@canmi/seam-vite@0.4.16","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"f6e2e55fd8767746bcff17339bd6e9fb5bbcac67","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.4.16.tgz","fileCount":6,"integrity":"sha512-f/dZaHn6G+AOmpNTGNniS5+8F21KgyOLTQMr2cICrmwlOOL32jclaX4J+/m6nAWI9ninvHhuJYyksIDVkAzWPw==","signatures":[{"sig":"MEUCIQC2+MjbROQiocN5xCbUtUCIebOp1vpfvgF3S1lS/dSkWQIgfB993pRNwoes8cWLZV1TrNIB+SFX1E6EGqbdbvTOqmM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15944},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"f358b16f411599df2cd005e7e5193d8dce4771f1","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.9.0","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3"},"peerDependencies":{"vite":">=5"},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.4.16_1772445999633_0.8023674314629925","host":"s3://npm-registry-packages-npm-production"}},"0.4.18":{"name":"@canmi/seam-vite","version":"0.4.18","license":"MIT","_id":"@canmi/seam-vite@0.4.18","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"77b7aa7421dc0f991dbf7f6525be9b361edc21dc","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.4.18.tgz","fileCount":6,"integrity":"sha512-q8sW3XU9Mzhm/AX50Hvpb7KaMmm079USi9TZzMSbmK06L2nQsYl2jVdW9tR8gf446RCca7lLC/vGEgjMTJzfSg==","signatures":[{"sig":"MEQCIEYiQ63+WvXhhzPH0hGr9PxL2sd44WVJmoqfNSSieq8nAiA35IczAW+b/im+x9hJUk25nIblaidzxg4TXQuk8YejgA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15997},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"0185984c0403718e0ed67c3132c0cfcd417a2083","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3"},"peerDependencies":{"vite":">=5"},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.4.18_1772555125122_0.168631201460977","host":"s3://npm-registry-packages-npm-production"}},"0.5.10":{"name":"@canmi/seam-vite","version":"0.5.10","license":"MIT","_id":"@canmi/seam-vite@0.5.10","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"11380551aeabbd87d809501a4ab43b71a55840a0","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.5.10.tgz","fileCount":6,"integrity":"sha512-v6YyfN/9Wb9T9x7cUYUibtN1/zlA33XQEk/LWrVEO2Xy9aRZMu+F9Vq13cuAvkKoWFOY7wt7UCMYpOq1IM8ekw==","signatures":[{"sig":"MEUCIQDtZrWUv9i59eIf5n4dvF52BUrgW+lg/wQKZ5pCOFliaAIgOsQUIzCMIMuaseHnpa74a93nBRSG4oad0EZv5ts3REo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15887},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"e7b80153466d2e30f3d48575a623c19c54a33d86","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3"},"peerDependencies":{"vite":">=5"},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.5.10_1772723768459_0.8725795231866107","host":"s3://npm-registry-packages-npm-production"}},"0.5.27":{"name":"@canmi/seam-vite","version":"0.5.27","license":"MIT","_id":"@canmi/seam-vite@0.5.27","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"2af8898c3768eaee5ce4e2254a77d4cea84ed2b0","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.5.27.tgz","fileCount":6,"integrity":"sha512-QQ5Da0RmOzWqK7aUa/EKcC8hDaMlabOcURQxh9f/LMj+R1qodzj9kAsawuCsEJZNiv3qrq/5/EC2xdg8oSn8Ug==","signatures":[{"sig":"MEUCIDzWFJau1mxGmlNYPj3hD0C5zbGT5uimX8dXPz9XsCDGAiEA6B60thQ+IFXvdYr1GVafGB5iy8sfRZ1X0wrQuMmHr5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29974},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"1705ff3a7600e73f5bddf95c93ace3a823ef6dfe","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3","@canmi/seam-server":"0.5.27"},"peerDependencies":{"vite":">=5","@canmi/seam-server":">=0.5.0"},"peerDependenciesMeta":{"@canmi/seam-server":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.5.27_1773023072355_0.938183776971147","host":"s3://npm-registry-packages-npm-production"}},"0.5.31":{"name":"@canmi/seam-vite","version":"0.5.31","license":"MIT","_id":"@canmi/seam-vite@0.5.31","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"40be32203cd97d5b4bd1cfe641792e7256c0139b","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.5.31.tgz","fileCount":6,"integrity":"sha512-8r+ubyMiTebVN7X/POA4s2uRtaE+Efw8klu6/5xVYlY3Tzx/ZesCWuJblGuwDBxTwWVrlyksehTD35OG1OYQ1A==","signatures":[{"sig":"MEUCIHvWqrOgrm6t0fEKRoWYqxvVdBuQNkwBscbbavIE4famAiEAiEaVw21Eo+3dqRwbiYo6wfL7WXObicNC9OF2NtfU2EY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29974},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"ff754819c953803f0abd339f665b20a11c9db01f","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^7.0.3","tsdown":"^0.20.3","vitest":"^4.0.18","typescript":"^5.9.3","@types/node":"^25.3.3","@canmi/seam-server":"0.5.31"},"peerDependencies":{"vite":">=5","@canmi/seam-server":">=0.5.0"},"peerDependenciesMeta":{"@canmi/seam-server":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.5.31_1773114493844_0.8834720330991994","host":"s3://npm-registry-packages-npm-production"}},"0.5.36":{"name":"@canmi/seam-vite","version":"0.5.36","license":"MIT","_id":"@canmi/seam-vite@0.5.36","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"dist":{"shasum":"d73f50b835f1acf1949b152d8c9f4175514a70eb","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.5.36.tgz","fileCount":6,"integrity":"sha512-iEEzXYnde4vu0gFncOTEqydklW2Hzc3P+pMHZJypm8htE8+poW9eLVjXOlOOUmE8AHdZ5VInwaYf96oiNaX7BA==","signatures":[{"sig":"MEUCIECtx6U6Xx6fERzUh/sRRcPjMTeMLnIvsUiDlgOpZaMGAiEAn0JwFrd4ZSFGG+J4xm4o1FTYCJWihtrVRW912pUkz40=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37960},"type":"module","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"gitHead":"443e119f48f399adf6abd49ad50749b9a3b6461c","scripts":{"test":"vitest run","build":"tsdown"},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"_npmVersion":"11.10.1","description":"Vite plugin for SeamJS per-page code splitting","directories":{},"_nodeVersion":"25.7.0","_hasShrinkwrap":false,"devDependencies":{"vite":"7","tsdown":"0.21","vitest":"4","typescript":"5","@types/node":"25","@canmi/seam-server":"0.5.36"},"peerDependencies":{"vite":"5","@canmi/seam-server":">=0.5.0"},"peerDependenciesMeta":{"@canmi/seam-server":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/seam-vite_0.5.36_1773336864739_0.638094419863994","host":"s3://npm-registry-packages-npm-production"}},"0.5.38":{"name":"@canmi/seam-vite","version":"0.5.38","license":"MIT","description":"Vite plugin for SeamJS per-page code splitting","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsdown","test":"vitest run"},"devDependencies":{"@canmi/seam-server":"0.5.38","@types/node":"25","tsdown":"0.21","typescript":"6","vite":"8","vitest":"4"},"peerDependencies":{"vite":"8","@canmi/seam-server":">=0.5.0"},"peerDependenciesMeta":{"@canmi/seam-server":{"optional":true}},"gitHead":"baed9724d9970829be89599297fcb11023a8aa05","_id":"@canmi/seam-vite@0.5.38","_nodeVersion":"25.8.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-H/8boM2tPOP7SAdh+Pcp7RzDumi9aZgIiWQXUJhnfQmZrP5ZjNrYaWnLX/LyRamIXze4bmCWtFZ2aAlVfiU8kw==","shasum":"d44c693dab0299b83f9130fb59245e69446ea7a8","tarball":"https://registry.npmjs.org/@canmi/seam-vite/-/seam-vite-0.5.38.tgz","fileCount":6,"unpackedSize":39107,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHVUctO447mA+N/d7DPXEchPoUSPojlJh0eMIl7wsINRAiB8lKYoiD33Nvn7Ajqsb/Xl0wIeaabj9wJxSL5LRzszTQ=="}]},"_npmUser":{"name":"canmi","email":"t@canmi.icu"},"directories":{},"maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seam-vite_0.5.38_1774684400118_0.8731983148460183"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-02T08:19:54.298Z","modified":"2026-03-28T07:53:20.404Z","0.4.15":"2026-03-02T08:19:54.525Z","0.4.16":"2026-03-02T10:06:39.770Z","0.4.18":"2026-03-03T16:25:25.275Z","0.5.10":"2026-03-05T15:16:08.624Z","0.5.27":"2026-03-09T02:24:32.507Z","0.5.31":"2026-03-10T03:48:13.979Z","0.5.36":"2026-03-12T17:34:24.925Z","0.5.38":"2026-03-28T07:53:20.289Z"},"license":"MIT","description":"Vite plugin for SeamJS per-page code splitting","maintainers":[{"name":"canmi","email":"t@canmi.icu"}],"readme":"# @canmi/seam-vite\n\nVite plugin suite for SeamJS. Provides build configuration, virtual module resolution, per-page code splitting, RPC obfuscation, and dev reload — all composed into a single `seam()` call.\n\n## Usage\n\n```ts\n// vite.config.ts\nimport { seam } from '@canmi/seam-vite'\n\nexport default defineConfig({\n\tplugins: [react(), ...seam()],\n})\n```\n\n## Exports\n\n| Export                  | Signature                                 | Purpose                                                           |\n| ----------------------- | ----------------------------------------- | ----------------------------------------------------------------- |\n| `seam`                  | `(options?: SeamOptions) => Plugin[]`     | Composite plugin (recommended). Options: `{ devOutDir?: string }` |\n| `seamVirtual`           | `() => Plugin`                            | Resolves `virtual:seam/*` imports to `.seam/generated/` files     |\n| `seamPageSplit`         | `() => Plugin`                            | Per-page code splitting (static to dynamic imports)               |\n| `parseComponentImports` | `(source: string) => Map<string, string>` | Parse import statements (internal utility)                        |\n\n## Composed Sub-Plugins\n\n`seam()` returns an array containing these internal plugins (not exported individually):\n\n- **seamConfigPlugin** -- auto-sets Vite build config from `SEAM_*` env vars (`SEAM_DIST_DIR`, `SEAM_ENTRY`, `SEAM_OBFUSCATE`, `SEAM_SOURCEMAP`, `SEAM_HASH_LENGTH`, `SEAM_TYPE_HINT`); uses `rolldownOptions` (Vite 8+) with `rollupOptions` fallback for older configs\n- **seamRpcPlugin** -- RPC procedure name to hash transform for obfuscation (reads `SEAM_RPC_MAP_PATH`)\n- **seamReloadPlugin** -- dev-only HMR full-reload on `.seam/dev-output` changes (imports `watchReloadTrigger` from `@canmi/seam-server`)\n\n## Virtual Modules\n\nResolved by `seamVirtual()` (also included in `seam()`):\n\n| Module                | Resolves to                 | Fallback                          |\n| --------------------- | --------------------------- | --------------------------------- |\n| `virtual:seam/client` | `.seam/generated/client.ts` | `export const DATA_ID = \"__data\"` |\n| `virtual:seam/routes` | `.seam/generated/routes.ts` | `export default []`               |\n| `virtual:seam/meta`   | `.seam/generated/meta.ts`   | `export const DATA_ID = \"__data\"` |\n| `virtual:seam/hooks`  | `.seam/generated/hooks.ts`  | (empty)                           |\n\nSeam packages (`@canmi/seam-react`, `@canmi/seam-tanstack-router`, `@canmi/seam-client`) are automatically excluded from Vite's esbuild pre-bundling so linked workspace packages keep normal dev-server behavior. Seam also force-includes the top-level runtime entries it expects linked packages to consume in dev (`@tanstack/react-router`, `react-dom/client`) so Vite still pre-bundles the TanStack + hydration chain.\n\n## Per-Page Splitting\n\nWhen `seam build` runs, the `seamPageSplit` plugin:\n\n1. Reads `SEAM_ROUTES_FILE` (set by the CLI) to identify page components from the routes definition\n2. Adds each page component as a separate Rolldown entry point\n3. Transforms static page imports into dynamic `() => import(...)` loaders with `__seamLazy` flag\n4. Sets `base: \"/_seam/static/\"` so runtime chunk resolution matches the SeamJS static serving path\n\nThe result: Vite produces per-page chunks instead of one monolithic bundle. The SeamJS build pipeline then maps each route to its specific chunks via `route-manifest.json`, and the engine injects the correct `<script>`, `<link>`, and `<link rel=\"prefetch\">` tags at render time.\n\nSplitting activates only when 2 or more page components are referenced in routes.\n\n## Requirements\n\n- Vite 8 or later\n- `seam build` must set the `SEAM_ROUTES_FILE` environment variable for page splitting (automatic when using the CLI)\n- `SEAM_VITE_CACHE_DIR` isolates Vite's dev cache by dependency fingerprint, preventing stale cache conflicts across branch switches or dependency updates\n\n## Development\n\n- Build: `just build-ts`\n- Part of the [SeamJS CLI toolchain](../../../docs/architecture/logic-layer.md#cli)\n","readmeFilename":"README.md"}