{"_id":"@dallanj/pinia-hydrate","_rev":"5-df014b51072941ed7ab84df1af5782c7","name":"@dallanj/pinia-hydrate","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.0":{"name":"@dallanj/pinia-hydrate","version":"0.2.0","license":"MIT","_id":"@dallanj/pinia-hydrate@0.2.0","maintainers":[{"name":"dallanj","email":"dallanjones@pm.me"}],"homepage":"https://github.com/dallanj/pinia-hydrate#readme","bugs":{"url":"https://github.com/dallanj/pinia-hydrate/issues"},"dist":{"shasum":"2d70926b50c0001afa19c48d444656f8167c44c8","tarball":"https://registry.npmjs.org/@dallanj/pinia-hydrate/-/pinia-hydrate-0.2.0.tgz","fileCount":6,"integrity":"sha512-EplfEYwweg3jcAUKxywJU+MmN5V9/jYGQ9gj7mUgii6DVzoz4QCUa7ejwkf3cNI0aO6X4Ewl6SxY1FwQJvLGhA==","signatures":[{"sig":"MEUCIQDVC8JQ8BbzXnoJCN3gCSsmK0ZC5BoVt9ZP3wreklXz9wIgFzDQjTc3GiQKFg5NOmqWKIbDmpN8O/JgsA29HISu+K8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12518},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"ff5126a4b5e4c3e7a2c4c2e3b1eb85dcc8781cc5","scripts":{"test":"vitest run","build":"vite build && tsc","format":"prettier --write .","format:test":"prettier --check .","prepublishOnly":"npm test && npm run build"},"_npmUser":{"name":"dallanj","email":"dallanjones@pm.me"},"repository":{"url":"git+https://github.com/dallanj/pinia-hydrate.git","type":"git","directory":"packages/javascript"},"_npmVersion":"11.19.1","description":"Explicit Pinia hydration from versioned server payloads","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^7.0.0","pinia":"^3.0.0","vitest":"^3.2.0","prettier":"^3.6.0","typescript":"^5.9.0","@vitejs/plugin-vue":"^6.0.0"},"peerDependencies":{"vue":"^3.3.0","pinia":"^2.0.0 || ^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pinia-hydrate_0.2.0_1788051771452_0.21794353298090585","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dallanj/pinia-hydrate","version":"0.2.1","description":"Explicit Pinia hydration from versioned server payloads","license":"MIT","repository":{"type":"git","url":"git+https://github.com/dallanj/pinia-hydrate.git","directory":"packages/javascript"},"homepage":"https://github.com/dallanj/pinia-hydrate#readme","bugs":{"url":"https://github.com/dallanj/pinia-hydrate/issues"},"publishConfig":{"access":"public"},"sideEffects":false,"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"vite build && tsc","format":"prettier --write .","format:test":"prettier --check .","prepublishOnly":"npm test && npm run build"},"peerDependencies":{"pinia":"^2.0.0 || ^3.0.0","vue":"^3.3.0"},"devDependencies":{"@vitejs/plugin-vue":"^6.0.0","pinia":"^3.0.0","prettier":"^3.6.0","typescript":"^5.9.0","vite":"^7.0.0","vitest":"^3.2.0","vue":"^3.5.0"},"gitHead":"0e7ceb16ac8fe2540e8c54cf96e125948c64edb0","_id":"@dallanj/pinia-hydrate@0.2.1","_nodeVersion":"22.22.1","_npmVersion":"11.19.1","dist":{"integrity":"sha512-3qj32OaD8dclOZ8pFrJeLLe4Ek76zq0kpJIIEIldnsJMNwguimB/iWMBjVUPNt2+9Lv+xJBDSyQax4zEzyBsfA==","shasum":"990259ccb1ccdbcd9c256a9d2a21ca764165ec9b","tarball":"https://registry.npmjs.org/@dallanj/pinia-hydrate/-/pinia-hydrate-0.2.1.tgz","fileCount":6,"unpackedSize":13512,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDts+4wQisp47FDWsPnBQO0wnVKC70YOWP/1QBkb5QLBAIgU0yXMgwHKDzg7F613JivJsVL1pQTlbmpaGMyeJFl9h4="}]},"_npmUser":{"name":"dallanj","email":"dallanjones@pm.me"},"directories":{},"maintainers":[{"name":"dallanj","email":"dallanjones@pm.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pinia-hydrate_0.2.1_1788067022587_0.20726177661208722"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T01:02:51.332Z","modified":"2026-08-30T05:17:02.900Z","0.1.0":"2026-08-29T19:50:51.625Z","0.1.1":"2026-08-29T19:57:38.556Z","0.2.0":"2026-08-30T01:02:51.609Z","0.2.1":"2026-08-30T05:17:02.730Z"},"bugs":{"url":"https://github.com/dallanj/pinia-hydrate/issues"},"license":"MIT","homepage":"https://github.com/dallanj/pinia-hydrate#readme","repository":{"type":"git","url":"git+https://github.com/dallanj/pinia-hydrate.git","directory":"packages/javascript"},"description":"Explicit Pinia hydration from versioned server payloads","maintainers":[{"name":"dallanj","email":"dallanjones@pm.me"}],"readme":"# @dallanj/pinia-hydrate\n\nHydrate explicitly mapped Pinia stores from Laravel response payloads.\n\n## Installation\n\n```bash\nnpm install @dallanj/pinia-hydrate pinia vue\n```\n\nVue 3 and Pinia are peer dependencies.\n\n## Usage\n\n```ts\nimport { createPiniaHydrator } from \"@dallanj/pinia-hydrate\";\nimport { useCartStore } from \"./stores/cart\";\nimport { useSessionStore } from \"./stores/session\";\n\nconst hydratePinia = createPiniaHydrator({\n  cart: useCartStore,\n  session: useSessionStore,\n});\n\nhydratePinia({\n  version: 1,\n  modules: {\n    cart: {\n      mode: \"patch\",\n      state: {\n        items: [],\n      },\n    },\n  },\n});\n```\n\nDirect payloads, JSON strings, Inertia props containing `$pinia` or `pinia`, and\nAxios response data are accepted:\n\n```ts\nhydratePinia(JSON.stringify(payload));\nhydratePinia(page.props, { resetMissing: true });\nhydratePinia(response.data);\n```\n\n## Hydration modes\n\n- `patch` imports supplied state keys. Unspecified keys remain unchanged.\n- `replace` imports supplied state keys and resets keys omitted from the\n  payload. Stores with a key-aware `$reset(key)` reset each omitted key;\n  standard Pinia stores reset before the supplied keys are imported.\n\nStores marked with `_isLazyLoaded` preserve omitted keys during hydration.\nWhen a store has no `$reset()`, omitted keys fall back to `null`.\n\nBy default, omitted stores are not reset. Pass `{ resetMissing: true }` for a\nfull page hydration. A mapped store can opt out with\n`{ useStore, resetOnFullHydration: false }`.\n\n## Axios example\n\n```ts\nconst responseInterceptor = [\n  (response) => {\n    hydratePinia(response.data);\n    return response;\n  },\n];\n```\n\nAxios and Inertia are optional and are not package dependencies.\n\n## Axios interceptor\n\nThe package includes the equivalent of your application's\n`piniaInterceptor.js` without depending on Axios:\n\n```ts\nimport { createPiniaResponseInterceptor } from \"@dallanj/pinia-hydrate\";\nimport { hydratePinia } from \"./pinia\";\n\nexport default {\n  response: [createPiniaResponseInterceptor(hydratePinia)],\n};\n```\n\nOnly modules included in the response are patched. Omitted stores are never\nreset by the response interceptor.\n\n## Inertia lifecycle\n\nCall `watchInertiaHydration()` after installing Pinia. It performs a full\ninitial hydration, resets omitted stores after full visits, and preserves them\nafter partial visits:\n\n```ts\nimport { createApp, h } from \"vue\";\nimport { createPinia } from \"pinia\";\nimport { createInertiaApp } from \"@inertiajs/vue3\";\nimport {\n  createPiniaHydrator,\n  watchInertiaHydration,\n} from \"@dallanj/pinia-hydrate\";\nimport { useDashboardStore } from \"./stores/dashboard\";\n\nconst pinia = createPinia();\nconst hydratePinia = createPiniaHydrator({\n  dashboard: useDashboardStore,\n});\n\ncreateInertiaApp({\n  // title and resolve omitted\n  setup({ el, App, props, plugin }) {\n    let stopHydrationWatch: (() => void) | undefined;\n    const app = createApp({\n      mounted() {\n        stopHydrationWatch = watchInertiaHydration(hydratePinia, {\n          router: this.$inertia,\n          pinia,\n          getProps: () => this.$page.props,\n        });\n      },\n      unmounted() {\n        stopHydrationWatch?.();\n      },\n      render: () => h(App, props),\n    });\n    app.use(plugin).use(pinia).mount(el);\n  },\n});\n```\n\nIf your application already exposes current page props differently, make\n`getProps` return that current value. The helper deliberately accepts an\nInertia-shaped router instead of importing Inertia.\n\n## Local installation\n\nBuild this package once, then install it from the consuming application:\n\n```bash\ncd ../pinia-hydrate\nnpm run build --prefix packages/javascript\n\ncd ../record-and-translate\nnpm install ../pinia-hydrate/packages/javascript\n```\n\nThe equivalent persistent `package.json` entry is:\n\n```json\n{\n  \"dependencies\": {\n    \"@dallanj/pinia-hydrate\": \"file:../pinia-hydrate/packages/javascript\"\n  }\n}\n```\n\n## Payload schema\n\n```ts\ninterface HydrationPayload {\n  version: 1;\n  modules: Record<\n    string,\n    {\n      mode: \"patch\" | \"replace\";\n      state: Record<string, unknown>;\n    }\n  >;\n}\n```\n\nStore names must exist in the explicit map passed to `createPiniaHydrator()`.\n\n## Related package\n\nLaravel payloads can be generated with\n[`dallanj/laravel-pinia-hydrate`](https://github.com/dallanj/pinia-hydrate/tree/main/packages/laravel).\n\n## License\n\nMIT\n","readmeFilename":"README.md"}