{"_id":"@baicie/storage","_rev":"5-85fa98e2457e62f4266d1ef19513c95e","name":"@baicie/storage","dist-tags":{"latest":"0.0.7"},"versions":{"0.0.3":{"name":"@baicie/storage","version":"0.0.3","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"license":"MIT","_id":"@baicie/storage@0.0.3","maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"dist":{"shasum":"934711cca55355b50c848749bed1ae699123bc7c","tarball":"https://registry.npmjs.org/@baicie/storage/-/storage-0.0.3.tgz","fileCount":9,"integrity":"sha512-HLmLumhDU+3AYfxgjBVFIWkjZRB1/AF4ucXv6OdVTnNQfcXZ8uJD7y7LqLzsPpGsSb5RRWJHPyNkBp6pGXIUCQ==","signatures":[{"sig":"MEUCIQCbYzMdB+b06GYDGAEs40yms8zaBVt5XX9ppGanZj1aGAIgRS3k/ckkMYTrpSTGYMtOipkruDCEZiUmh3LEaykSZnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99759},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6f75e13494ac15d8943acbd795c1971eb046d121","scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --incremental --noEmit","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"baicie2","email":"2055572879@qq.com"},"_npmVersion":"11.6.2","description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","directories":{},"_nodeVersion":"24.11.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.23.0","devDependencies":{"tsdown":"^0.16.6","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/storage_0.0.3_1764318553651_0.24601507218991903","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@baicie/storage","version":"0.0.4","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"license":"MIT","_id":"@baicie/storage@0.0.4","maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"dist":{"shasum":"d514c2c8e0484c6230c57a1d206ed380abc2a2e4","tarball":"https://registry.npmjs.org/@baicie/storage/-/storage-0.0.4.tgz","fileCount":10,"integrity":"sha512-R+Cc/x3Bbd57g1VI/X3Kto/Wg8zvThgAhhPEWB1QfGseaTeqGyMZWLVBiMczXfVNsuZCZT0eahk4TmKEhAtGpw==","signatures":[{"sig":"MEYCIQCtqsuoS895rIV5dDciLEUm7RE6W7KxcCMmycd3DMua3AIhALVov/qEcbFuHV+a2XjEi4bNkI6lhNO/aPBvECWp7+bx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24461},"type":"module","_from":"file:baicie-storage-0.0.4.tgz","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --incremental --noEmit"},"_npmUser":{"name":"baicie2","email":"2055572879@qq.com"},"_resolved":"/tmp/80a7bd1be168e2721671b44446f0b5b3/baicie-storage-0.0.4.tgz","_integrity":"sha512-R+Cc/x3Bbd57g1VI/X3Kto/Wg8zvThgAhhPEWB1QfGseaTeqGyMZWLVBiMczXfVNsuZCZT0eahk4TmKEhAtGpw==","_npmVersion":"11.6.4","description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","directories":{},"_nodeVersion":"24.11.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.16.6","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/storage_0.0.4_1764322042105_0.5672309348750078","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@baicie/storage","version":"0.0.5","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"license":"MIT","_id":"@baicie/storage@0.0.5","maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"dist":{"shasum":"4cbd19f82fcf100b7afe1c65dbb3b49ac7992957","tarball":"https://registry.npmjs.org/@baicie/storage/-/storage-0.0.5.tgz","fileCount":11,"integrity":"sha512-HyX5Bkdaezt0wNbwqfEMEl7n6XB9pt5/55bdYzkUcVwCXemjNfxR3Z2t2tv1zirIjSoM/4BrEwzJjICfoAFWgA==","signatures":[{"sig":"MEUCIQDyvCE80TAwD/pGstvXPNXOAu6Krilsvj/l0CWMhvIHHwIgMYq3duhEQxVgswOkxn2ou0vyMQYdJu2rixaqByspF1Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73282},"main":"dist/index.mjs","type":"module","_from":"file:baicie-storage-0.0.5.tgz","types":"dist/index.d.mts","unpkg":"dist/index.iife.js","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --incremental --noEmit"},"_npmUser":{"name":"baicie2","email":"2055572879@qq.com"},"jsdelivr":"dist/index.iife.js","_resolved":"/tmp/d93464f8d5404f588f677f4011dd89ef/baicie-storage-0.0.5.tgz","_integrity":"sha512-HyX5Bkdaezt0wNbwqfEMEl7n6XB9pt5/55bdYzkUcVwCXemjNfxR3Z2t2tv1zirIjSoM/4BrEwzJjICfoAFWgA==","_npmVersion":"11.6.4","description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","directories":{},"_nodeVersion":"24.11.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.17.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/storage_0.0.5_1764937121251_0.7111666846767803","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@baicie/storage","version":"0.0.6","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"license":"MIT","_id":"@baicie/storage@0.0.6","maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"dist":{"shasum":"971e5f4e4844c607d43fbffc79e95de71759e2f1","tarball":"https://registry.npmjs.org/@baicie/storage/-/storage-0.0.6.tgz","fileCount":11,"integrity":"sha512-Mzv1POkdNho9ZwoNB9wxiAbEkaL8VTnDCA2w0joCr+KUL72XebuZ9/OFVXCx/jm7DGDS+Ar4vbogLeLAtH9+kA==","signatures":[{"sig":"MEYCIQDVU6sG3duc81WIPSA0oCcNPEzq10H1du1HuSYYwzOmxgIhALyGR1NTBXhA5tjuaclN6VcVd4OXgiR2LG+F2Z29l8PF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70807},"main":"dist/index.mjs","type":"module","_from":"file:baicie-storage-0.0.6.tgz","types":"dist/index.d.mts","unpkg":"dist/index.iife.js","module":"dist/index.mjs","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"scripts":{"dev":"tsdown --watch","build":"tsdown","typecheck":"tsc --incremental --noEmit"},"_npmUser":{"name":"baicie2","email":"2055572879@qq.com"},"jsdelivr":"dist/index.iife.js","_resolved":"/tmp/649d88436c4b02760ffe6fe77c68dbcb/baicie-storage-0.0.6.tgz","_integrity":"sha512-Mzv1POkdNho9ZwoNB9wxiAbEkaL8VTnDCA2w0joCr+KUL72XebuZ9/OFVXCx/jm7DGDS+Ar4vbogLeLAtH9+kA==","_npmVersion":"11.6.4","description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","directories":{},"_nodeVersion":"24.11.1","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.17.0","typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/storage_0.0.6_1764951392667_0.24830984366664244","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@baicie/storage","version":"0.0.7","type":"module","description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"license":"MIT","main":"dist/index.mjs","module":"dist/index.mjs","types":"dist/index.d.mts","unpkg":"dist/index.iife.js","jsdelivr":"dist/index.iife.js","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"engines":{"node":">=18"},"devDependencies":{"tsdown":"^0.19.0","typescript":"^5.9.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsdown","dev":"tsdown --watch","typecheck":"tsc --incremental --noEmit"},"_id":"@baicie/storage@0.0.7","_integrity":"sha512-wsqmWUmVjWfwlb9KPGk5ncDIucdoD69KJne4+Q8b+MKVbLwoFGxBxlWAjOdQ5pALPssZJL+dtJFOETg2SsV4nA==","_resolved":"/tmp/62ba68f3b3004dbac15b745de4832dfd/baicie-storage-0.0.7.tgz","_from":"file:baicie-storage-0.0.7.tgz","_nodeVersion":"24.12.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-wsqmWUmVjWfwlb9KPGk5ncDIucdoD69KJne4+Q8b+MKVbLwoFGxBxlWAjOdQ5pALPssZJL+dtJFOETg2SsV4nA==","shasum":"82276166a07bac65d14e8096c3d076d8be16705b","tarball":"https://registry.npmjs.org/@baicie/storage/-/storage-0.0.7.tgz","fileCount":11,"unpackedSize":73751,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFtYqLaBWTe9CkdQpRKhXjtDriKXSSNl1dO9fRS9jH1nAiEA1jyyHlYJBdQLWknxaGDmLcHkO6AK+yiK2fd+o0/G/cg="}]},"_npmUser":{"name":"baicie2","email":"2055572879@qq.com"},"directories":{},"maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/storage_0.0.7_1768816713230_0.5696000088012816"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-28T08:29:13.579Z","modified":"2026-01-19T09:58:33.528Z","0.0.3":"2025-11-28T08:29:13.865Z","0.0.4":"2025-11-28T09:27:22.306Z","0.0.5":"2025-12-05T12:18:41.399Z","0.0.6":"2025-12-05T16:16:32.849Z","0.0.7":"2026-01-19T09:58:33.383Z"},"license":"MIT","keywords":["storage","localStorage","sessionStorage","cookie","indexeddb","reactive","typescript"],"description":"轻量响应式数据存储代理，统一 localStorage / sessionStorage / Cookie / IndexedDB","maintainers":[{"name":"baicie2","email":"2055572879@qq.com"}],"readme":"# @baicie/storage\n\n极简 Web Storage 劫持与通知工具。模块加载后自动接管 `localStorage`/`sessionStorage` 的 `setItem`、`removeItem`、`clear`，对原生 API 完全零侵入；你只需要订阅事件即可实时接收任何 key 的变更。\n\n## 特性\n\n- 🛰️ **零改造**：业务仍旧调用原生 API，本库只做监听与广播\n- 📡 **同标签页补完**：原有 `storage` 事件只覆盖跨标签页，这里补齐同标签页场景\n- 🪶 **轻量实现**：只有劫持 + 事件调度，没有上下文和依赖\n- 🔄 **可撤销**：调用 `stopNativeHijack()` 即可恢复所有原始方法\n\n## 快速开始\n\n```ts\nimport { subscribeStorageChanges } from '@baicie/storage'\n\nconst unsubscribe = subscribeStorageChanges(change => {\n  console.info(\n    `[storage][${change.source}] ${change.key} ->`,\n    change.value,\n    change.type,\n  )\n})\n\n// 业务代码保持原状\nlocalStorage.setItem('token', 'abc123')\n\n// 完成时取消订阅\nunsubscribe()\n```\n\n> 订阅函数内部会自动启动劫持逻辑；模块初始化时也会尝试一次，无需手动调用。\n\n## API 速览\n\n| API                                       | 说明                                                 |\n| ----------------------------------------- | ---------------------------------------------------- |\n| `subscribeStorageChanges(listener)`       | 订阅全部变更，返回取消函数                           |\n| `startNativeHijack(options?)`             | 手动启动劫持，可注入 `windowRef` 或自定义 `storages` |\n| `stopNativeHijack()`                      | 停止劫持并恢复所有原始方法                           |\n| `hijackWebStorage(storage, id, listener)` | 仅针对单个 `Storage` 实例劫持，返回 `restore()` 句柄 |\n\n### StorageChange\n\n```ts\ninterface StorageChange {\n  key: string\n  value: string | null\n  type: 'write' | 'remove' | 'clear'\n  source: string // 例如 'local-storage'\n}\n```\n\n## 常见问题\n\n- **是否影响原生行为？** 不会。劫持仅包裹原函数，在执行后发送通知，返回值与异常保持一致。\n- **可以监听 Cookie/IndexedDB 吗？** 当前专注 Web Storage。可参考 `hijackWebStorage` 的实现自行扩展。\n- **SSR 会报错吗？** 不会。如果 `window` 不存在则不会启动劫持，等到客户端调用 `subscribeStorageChanges` 或 `startNativeHijack` 时再尝试一次。\n","readmeFilename":"README.md"}