@stainless-code/persist
Version:
Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes
362 lines (361 loc) • 10.4 kB
JSON
{
"name": "@stainless-code/persist",
"version": "0.4.1",
"description": "Hydration-aware persistence for any reactive store — zero-dep persistSource core; codecs, backends, cross-tab transport, source + framework hydration adapters ship as opt-in recipes",
"keywords": [
"alpine",
"angular",
"broadcastchannel",
"codec",
"compression",
"cross-tab",
"encryption",
"hydration",
"indexeddb",
"jotai",
"lit",
"localstorage",
"middleware",
"migration",
"mmkv",
"mobx",
"persistence",
"pinia",
"preact",
"react",
"react-native",
"reactive",
"redux",
"seroval",
"solid",
"state-management",
"store",
"svelte",
"tanstack",
"tanstack-intent",
"tanstack-store",
"typescript",
"valtio",
"vue",
"zod",
"zustand"
],
"homepage": "https://stainless-code.com/persist",
"bugs": {
"url": "https://github.com/stainless-code/persist/issues"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/stainless-code/persist.git"
},
"workspaces": [
".",
"apps/*"
],
"files": [
"dist",
"skills"
],
"type": "module",
"sideEffects": false,
"exports": {
".": {
"types": "./dist/core/index.d.mts",
"import": "./dist/core/index.mjs"
},
"./codecs/seroval": {
"types": "./dist/codecs/seroval.d.mts",
"import": "./dist/codecs/seroval.mjs"
},
"./codecs/standard-schema": {
"types": "./dist/codecs/standard-schema.d.mts",
"import": "./dist/codecs/standard-schema.mjs"
},
"./backends/idb": {
"types": "./dist/backends/idb.d.mts",
"import": "./dist/backends/idb.mjs"
},
"./backends/async-storage": {
"types": "./dist/backends/async-storage.d.mts",
"import": "./dist/backends/async-storage.mjs"
},
"./backends/mmkv": {
"types": "./dist/backends/mmkv.d.mts",
"import": "./dist/backends/mmkv.mjs"
},
"./backends/secure-store": {
"types": "./dist/backends/secure-store.d.mts",
"import": "./dist/backends/secure-store.mjs"
},
"./backends/encrypted": {
"types": "./dist/backends/encrypted.d.mts",
"import": "./dist/backends/encrypted.mjs"
},
"./backends/compressed": {
"types": "./dist/backends/compressed.d.mts",
"import": "./dist/backends/compressed.mjs"
},
"./backends/node-fs": {
"types": "./dist/backends/node-fs.d.mts",
"import": "./dist/backends/node-fs.mjs"
},
"./transport/crosstab": {
"types": "./dist/transport/crosstab.d.mts",
"import": "./dist/transport/crosstab.mjs"
},
"./sources/tanstack-store": {
"types": "./dist/sources/tanstack-store.d.mts",
"import": "./dist/sources/tanstack-store.mjs"
},
"./sources/zustand": {
"types": "./dist/sources/zustand.d.mts",
"import": "./dist/sources/zustand.mjs"
},
"./sources/jotai": {
"types": "./dist/sources/jotai.d.mts",
"import": "./dist/sources/jotai.mjs"
},
"./sources/valtio": {
"types": "./dist/sources/valtio.d.mts",
"import": "./dist/sources/valtio.mjs"
},
"./sources/mobx": {
"types": "./dist/sources/mobx.d.mts",
"import": "./dist/sources/mobx.mjs"
},
"./sources/pinia": {
"types": "./dist/sources/pinia.d.mts",
"import": "./dist/sources/pinia.mjs"
},
"./sources/redux": {
"types": "./dist/sources/redux.d.mts",
"import": "./dist/sources/redux.mjs"
},
"./frameworks/react": {
"types": "./dist/frameworks/react.d.mts",
"import": "./dist/frameworks/react.mjs"
},
"./frameworks/preact": {
"types": "./dist/frameworks/preact.d.mts",
"import": "./dist/frameworks/preact.mjs"
},
"./frameworks/solid": {
"types": "./dist/frameworks/solid.d.mts",
"import": "./dist/frameworks/solid.mjs"
},
"./frameworks/angular": {
"types": "./dist/frameworks/angular.d.mts",
"import": "./dist/frameworks/angular.mjs"
},
"./frameworks/vue": {
"types": "./dist/frameworks/vue.d.mts",
"import": "./dist/frameworks/vue.mjs"
},
"./frameworks/lit": {
"types": "./dist/frameworks/lit.d.mts",
"import": "./dist/frameworks/lit.mjs"
},
"./frameworks/alpine": {
"types": "./dist/frameworks/alpine.d.mts",
"import": "./dist/frameworks/alpine.mjs"
},
"./frameworks/svelte": {
"types": "./dist/frameworks/svelte.d.mts",
"import": "./dist/frameworks/svelte.mjs"
},
"./frameworks/svelte-store": {
"types": "./dist/frameworks/svelte-store.d.mts",
"import": "./dist/frameworks/svelte-store.mjs"
}
},
"publishConfig": {
"access": "public",
"provenance": true
},
"scripts": {
"build": "tsdown",
"check": "bun run build && bun run --parallel format:check lint:ci test test:dom typecheck",
"check-updates": "bun update -i --latest",
"check:pack": "attw --pack . --profile esm-only && publint && knip",
"clean": "git clean -xdf -e .env",
"docs:api": "bun apps/docs/scripts/rewrite-api-links.ts --clean && typedoc && bun apps/docs/scripts/rewrite-api-links.ts",
"docs:audit": "bun run --filter '@stainless-code/persist-docs' audit",
"docs:build": "bun run --filter '@stainless-code/persist-docs' build",
"docs:check": "bun run --filter '@stainless-code/persist-docs' check",
"docs:dev": "bun run --filter '@stainless-code/persist-docs' dev",
"docs:preview": "bun run --filter '@stainless-code/persist-docs' preview",
"docs:validate": "bun run --filter '@stainless-code/persist-docs' validate",
"fix": "bun run lint:fix && bun run format",
"fix:changes": "bun run lint:fix:changes && bun run format:changes",
"format": "oxfmt --no-error-on-unmatched-pattern",
"format:changes": "bun scripts/run-on-changed-files.ts format",
"format:check": "oxfmt --check --no-error-on-unmatched-pattern",
"intent:stale": "intent stale",
"intent:validate": "intent validate",
"lint": "oxlint --no-error-on-unmatched-pattern",
"lint-staged": "lint-staged",
"lint:changes": "bun scripts/run-on-changed-files.ts lint",
"lint:ci": "oxlint --quiet",
"lint:fix": "bun run lint --fix",
"lint:fix:changes": "bun scripts/run-on-changed-files.ts lint:fix",
"prepare": "husky || true",
"prepublishOnly": "bun run check && bun run intent:validate && bun run check:pack && bun run size && bun run test:coverage",
"release": "changeset publish",
"size": "size-limit",
"test": "bun test ./src",
"test:coverage": "bun test ./src --coverage --coverage-threshold=0.90",
"test:dom": "vitest run",
"typecheck": "tsgo --noEmit",
"version": "changeset version && bun scripts/sync-skill-versions.ts && bun run format CHANGELOG.md"
},
"devDependencies": {
"@angular/core": "22.0.5",
"@arethetypeswrong/cli": "0.18.4",
"@changesets/changelog-github": "0.7.0",
"@changesets/cli": "2.31.0",
"@react-native-async-storage/async-storage": "3.1.1",
"@reduxjs/toolkit": "2.11.2",
"@size-limit/preset-small-lib": "12.1.0",
"@stainless-code/codemap": "0.11.1",
"@tanstack/intent": "0.3.5",
"@tanstack/store": "0.11.0",
"@testing-library/dom": "10.4.1",
"@testing-library/react": "16.3.2",
"@types/alpinejs": "3.13.11",
"@types/bun": "1.3.14",
"@types/node": "26.1.0",
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"@typescript/native-preview": "7.0.0-dev.20260705.1",
"alpinejs": "3.15.12",
"expo-secure-store": "57.0.0",
"husky": "9.1.7",
"idb-keyval": "6.2.6",
"jotai": "2.20.1",
"jsdom": "29.1.1",
"knip": "6.24.0",
"lint-staged": "17.0.8",
"lit": "3.3.3",
"mobx": "6.16.1",
"oxfmt": "0.57.0",
"oxlint": "1.72.0",
"pinia": "3.0.4",
"preact": "10.29.4",
"publint": "0.3.21",
"react": "19.2.7",
"react-dom": "19.2.7",
"react-native-mmkv": "4.3.2",
"redux": "5.0.1",
"seroval": "1.5.4",
"size-limit": "12.1.0",
"solid-js": "1.9.14",
"svelte": "5.56.4",
"tsdown": "0.22.3",
"typedoc": "0.28.19",
"typedoc-plugin-frontmatter": "1.3.1",
"typedoc-plugin-markdown": "4.12.0",
"typescript": "6.0.3",
"valtio": "2.3.2",
"vitest": "4.1.9",
"vue": "3.5.39",
"zod": "4.4.3",
"zustand": "5.0.14"
},
"peerDependencies": {
"@angular/core": ">=17.0.0",
"@react-native-async-storage/async-storage": ">=1.0.0",
"@tanstack/store": ">=0.10.0",
"alpinejs": ">=3.0.0",
"expo-secure-store": ">=12.0.0",
"idb-keyval": ">=4.0.0",
"jotai": ">=2.0.0",
"lit": ">=3.0.0",
"mobx": ">=6.0.0",
"pinia": ">=2.0.0",
"preact": ">=10.19.0",
"react": "^18.0.0 || ^19.0.0",
"react-native-mmkv": ">=4.0.0",
"redux": ">=5.0.0",
"seroval": ">=1.0.0",
"solid-js": ">=1.6.0",
"svelte": ">=3.0.0",
"valtio": ">=1.0.0",
"vue": ">=3.3.0",
"zustand": ">=4.0.0"
},
"peerDependenciesMeta": {
"seroval": {
"optional": true
},
"idb-keyval": {
"optional": true
},
"@tanstack/store": {
"optional": true
},
"react": {
"optional": true
},
"solid-js": {
"optional": true
},
"svelte": {
"optional": true
},
"@angular/core": {
"optional": true
},
"preact": {
"optional": true
},
"vue": {
"optional": true
},
"lit": {
"optional": true
},
"alpinejs": {
"optional": true
},
"@react-native-async-storage/async-storage": {
"optional": true
},
"react-native-mmkv": {
"optional": true
},
"expo-secure-store": {
"optional": true
},
"zustand": {
"optional": true
},
"jotai": {
"optional": true
},
"valtio": {
"optional": true
},
"mobx": {
"optional": true
},
"pinia": {
"optional": true
},
"redux": {
"optional": true
}
},
"overrides": {
"@ai-sdk/provider-utils": "4.0.40",
"@hono/node-server": "2.0.11",
"fast-uri": "3.1.4",
"path-to-regexp": "6.3.0",
"uuid": ">=11.1.1"
},
"engines": {
"bun": ">=1.0.0",
"node": "^20.19.0 || >=22.12.0"
},
"packageManager": "bun@1.3.14"
}