@composy/store-vue 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +169 -154
  3. package/dist/index.js +151 -53
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.min.js +242 -170
  6. package/dist/index.min.js.map +1 -1
  7. package/es/.dts-output-manifest.json +1 -0
  8. package/es/.dts.tsbuildinfo +1 -0
  9. package/es/composables/defineSetupStore.d.ts +0 -1
  10. package/es/composables/defineSetupStore.d.ts.map +1 -1
  11. package/es/composables/defineSetupStore.js +1 -1
  12. package/es/composables/defineSetupStore.js.map +1 -1
  13. package/es/composables/index.d.ts +8 -9
  14. package/es/composables/index.d.ts.map +1 -1
  15. package/es/composables/index.js +1 -1
  16. package/es/composables/useFormStore.d.ts +0 -1
  17. package/es/composables/useFormStore.d.ts.map +1 -1
  18. package/es/composables/useFormStore.js +1 -1
  19. package/es/composables/useFormStore.js.map +1 -1
  20. package/es/composables/useOptimistic.d.ts +1 -52
  21. package/es/composables/useOptimistic.d.ts.map +1 -1
  22. package/es/composables/useOptimistic.js +35 -20
  23. package/es/composables/useOptimistic.js.map +1 -1
  24. package/es/composables/usePersist.d.ts +0 -1
  25. package/es/composables/usePersist.d.ts.map +1 -1
  26. package/es/composables/usePersist.js +16 -7
  27. package/es/composables/usePersist.js.map +1 -1
  28. package/es/composables/usePersistedState.d.ts +0 -1
  29. package/es/composables/usePersistedState.d.ts.map +1 -1
  30. package/es/composables/usePersistedState.js +16 -3
  31. package/es/composables/usePersistedState.js.map +1 -1
  32. package/es/composables/useSharedState.d.ts +0 -1
  33. package/es/composables/useSharedState.d.ts.map +1 -1
  34. package/es/composables/useSharedState.js +25 -8
  35. package/es/composables/useSharedState.js.map +1 -1
  36. package/es/composables/useStore.d.ts +0 -1
  37. package/es/composables/useStore.js +1 -1
  38. package/es/composables/useStore.js.map +1 -1
  39. package/es/composables/useStoreDevtools.d.ts +0 -1
  40. package/es/composables/useStoreDevtools.d.ts.map +1 -1
  41. package/es/composables/useStoreDevtools.js +1 -1
  42. package/es/composables/useStoreDevtools.js.map +1 -1
  43. package/es/composables/useStoreSnapshot.d.ts +0 -1
  44. package/es/composables/useStoreSnapshot.d.ts.map +1 -1
  45. package/es/composables/useStoreSnapshot.js +18 -8
  46. package/es/composables/useStoreSnapshot.js.map +1 -1
  47. package/es/composables/useSubscribe.d.ts +0 -1
  48. package/es/composables/useSubscribe.d.ts.map +1 -1
  49. package/es/composables/useSubscribe.js +1 -1
  50. package/es/composables/useSubscribe.js.map +1 -1
  51. package/es/context/injection-keys.d.ts +0 -1
  52. package/es/context/injection-keys.d.ts.map +1 -1
  53. package/es/context/injection-keys.js +1 -1
  54. package/es/context/injection-keys.js.map +1 -1
  55. package/es/index.d.ts +1 -2
  56. package/es/index.js +2 -2
  57. package/es/index.js.map +1 -1
  58. package/es/plugins/engine-plugin.d.ts +1 -2
  59. package/es/plugins/engine-plugin.d.ts.map +1 -1
  60. package/es/plugins/engine-plugin.js +2 -2
  61. package/es/plugins/engine-plugin.js.map +1 -1
  62. package/es/plugins/enhanced-persist-plugin.d.ts +0 -1
  63. package/es/plugins/enhanced-persist-plugin.js +1 -1
  64. package/es/plugins/index.d.ts +0 -1
  65. package/es/plugins/index.js +1 -1
  66. package/es/plugins/pinia-plugin.d.ts +0 -1
  67. package/es/plugins/pinia-plugin.d.ts.map +1 -1
  68. package/es/plugins/pinia-plugin.js +24 -6
  69. package/es/plugins/pinia-plugin.js.map +1 -1
  70. package/es/plugins/registry-plugin.d.ts +0 -1
  71. package/es/plugins/registry-plugin.js +1 -1
  72. package/es/plugins/vue-plugin.d.ts +0 -1
  73. package/es/plugins/vue-plugin.d.ts.map +1 -1
  74. package/es/plugins/vue-plugin.js +1 -1
  75. package/es/plugins/vue-plugin.js.map +1 -1
  76. package/es/runtime/install-store-app.d.ts +0 -1
  77. package/es/runtime/install-store-app.js +1 -1
  78. package/es/runtime/install-store-app.js.map +1 -1
  79. package/es/runtime/store-plugin-options.d.ts +0 -1
  80. package/es/runtime/store-plugin-options.js +1 -1
  81. package/es/runtime/store-plugin-options.js.map +1 -1
  82. package/es/runtime/store-registry.d.ts +0 -1
  83. package/es/runtime/store-registry.d.ts.map +1 -1
  84. package/es/runtime/store-registry.js +14 -4
  85. package/es/runtime/store-registry.js.map +1 -1
  86. package/es/runtime/store-runtime.d.ts +1 -2
  87. package/es/runtime/store-runtime.d.ts.map +1 -1
  88. package/es/runtime/store-runtime.js +8 -2
  89. package/es/runtime/store-runtime.js.map +1 -1
  90. package/es/types.d.ts +2 -1
  91. package/es/types.d.ts.map +1 -1
  92. package/es/types.js +1 -1
  93. package/esm/composables/defineSetupStore.d.ts.map +1 -1
  94. package/esm/composables/defineSetupStore.js +1 -1
  95. package/esm/composables/defineSetupStore.js.map +1 -1
  96. package/esm/composables/index.d.ts +8 -8
  97. package/esm/composables/index.d.ts.map +1 -1
  98. package/esm/composables/index.js +1 -1
  99. package/esm/composables/useFormStore.d.ts.map +1 -1
  100. package/esm/composables/useFormStore.js +1 -1
  101. package/esm/composables/useFormStore.js.map +1 -1
  102. package/esm/composables/useOptimistic.d.ts +1 -51
  103. package/esm/composables/useOptimistic.d.ts.map +1 -1
  104. package/esm/composables/useOptimistic.js +35 -20
  105. package/esm/composables/useOptimistic.js.map +1 -1
  106. package/esm/composables/usePersist.d.ts.map +1 -1
  107. package/esm/composables/usePersist.js +16 -7
  108. package/esm/composables/usePersist.js.map +1 -1
  109. package/esm/composables/usePersistedState.d.ts.map +1 -1
  110. package/esm/composables/usePersistedState.js +16 -3
  111. package/esm/composables/usePersistedState.js.map +1 -1
  112. package/esm/composables/useSharedState.d.ts.map +1 -1
  113. package/esm/composables/useSharedState.js +25 -8
  114. package/esm/composables/useSharedState.js.map +1 -1
  115. package/esm/composables/useStore.js +1 -1
  116. package/esm/composables/useStore.js.map +1 -1
  117. package/esm/composables/useStoreDevtools.d.ts.map +1 -1
  118. package/esm/composables/useStoreDevtools.js +1 -1
  119. package/esm/composables/useStoreDevtools.js.map +1 -1
  120. package/esm/composables/useStoreSnapshot.d.ts.map +1 -1
  121. package/esm/composables/useStoreSnapshot.js +18 -8
  122. package/esm/composables/useStoreSnapshot.js.map +1 -1
  123. package/esm/composables/useSubscribe.d.ts.map +1 -1
  124. package/esm/composables/useSubscribe.js +1 -1
  125. package/esm/composables/useSubscribe.js.map +1 -1
  126. package/esm/context/injection-keys.d.ts.map +1 -1
  127. package/esm/context/injection-keys.js +1 -1
  128. package/esm/context/injection-keys.js.map +1 -1
  129. package/esm/index.d.ts +1 -1
  130. package/esm/index.js +2 -2
  131. package/esm/index.js.map +1 -1
  132. package/esm/plugins/engine-plugin.d.ts +1 -1
  133. package/esm/plugins/engine-plugin.d.ts.map +1 -1
  134. package/esm/plugins/engine-plugin.js +2 -2
  135. package/esm/plugins/engine-plugin.js.map +1 -1
  136. package/esm/plugins/enhanced-persist-plugin.js +1 -1
  137. package/esm/plugins/index.js +1 -1
  138. package/esm/plugins/pinia-plugin.d.ts.map +1 -1
  139. package/esm/plugins/pinia-plugin.js +24 -6
  140. package/esm/plugins/pinia-plugin.js.map +1 -1
  141. package/esm/plugins/registry-plugin.js +1 -1
  142. package/esm/plugins/vue-plugin.d.ts.map +1 -1
  143. package/esm/plugins/vue-plugin.js +1 -1
  144. package/esm/plugins/vue-plugin.js.map +1 -1
  145. package/esm/runtime/install-store-app.js +1 -1
  146. package/esm/runtime/install-store-app.js.map +1 -1
  147. package/esm/runtime/store-plugin-options.js +1 -1
  148. package/esm/runtime/store-plugin-options.js.map +1 -1
  149. package/esm/runtime/store-registry.d.ts.map +1 -1
  150. package/esm/runtime/store-registry.js +14 -4
  151. package/esm/runtime/store-registry.js.map +1 -1
  152. package/esm/runtime/store-runtime.d.ts +1 -1
  153. package/esm/runtime/store-runtime.d.ts.map +1 -1
  154. package/esm/runtime/store-runtime.js +8 -2
  155. package/esm/runtime/store-runtime.js.map +1 -1
  156. package/esm/types.d.ts +2 -0
  157. package/esm/types.d.ts.map +1 -1
  158. package/esm/types.js +1 -1
  159. package/lib/composables/defineSetupStore.cjs +1 -1
  160. package/lib/composables/defineSetupStore.cjs.map +1 -1
  161. package/lib/composables/{defineSetupStore.d.ts → defineSetupStore.d.cts} +0 -1
  162. package/lib/composables/defineSetupStore.d.cts.map +1 -0
  163. package/lib/composables/index.cjs +1 -1
  164. package/lib/composables/{index.d.ts → index.d.cts} +8 -9
  165. package/lib/composables/index.d.cts.map +1 -0
  166. package/lib/composables/useFormStore.cjs +1 -1
  167. package/lib/composables/useFormStore.cjs.map +1 -1
  168. package/lib/composables/{useFormStore.d.ts → useFormStore.d.cts} +0 -1
  169. package/lib/composables/useFormStore.d.cts.map +1 -0
  170. package/lib/composables/useOptimistic.cjs +35 -20
  171. package/lib/composables/useOptimistic.cjs.map +1 -1
  172. package/lib/composables/useOptimistic.d.cts +16 -0
  173. package/lib/composables/useOptimistic.d.cts.map +1 -0
  174. package/lib/composables/usePersist.cjs +16 -7
  175. package/lib/composables/usePersist.cjs.map +1 -1
  176. package/lib/composables/{usePersist.d.ts → usePersist.d.cts} +0 -1
  177. package/lib/composables/usePersist.d.cts.map +1 -0
  178. package/lib/composables/usePersistedState.cjs +16 -3
  179. package/lib/composables/usePersistedState.cjs.map +1 -1
  180. package/lib/composables/{usePersistedState.d.ts → usePersistedState.d.cts} +0 -1
  181. package/lib/composables/usePersistedState.d.cts.map +1 -0
  182. package/lib/composables/useSharedState.cjs +24 -7
  183. package/lib/composables/useSharedState.cjs.map +1 -1
  184. package/lib/composables/{useSharedState.d.ts → useSharedState.d.cts} +0 -1
  185. package/lib/composables/useSharedState.d.cts.map +1 -0
  186. package/lib/composables/useStore.cjs +1 -1
  187. package/lib/composables/useStore.cjs.map +1 -1
  188. package/lib/composables/{useStore.d.ts → useStore.d.cts} +0 -1
  189. package/lib/composables/useStore.d.cts.map +1 -0
  190. package/lib/composables/useStoreDevtools.cjs +1 -1
  191. package/lib/composables/useStoreDevtools.cjs.map +1 -1
  192. package/lib/composables/{useStoreDevtools.d.ts → useStoreDevtools.d.cts} +0 -1
  193. package/lib/composables/useStoreDevtools.d.cts.map +1 -0
  194. package/lib/composables/useStoreSnapshot.cjs +18 -8
  195. package/lib/composables/useStoreSnapshot.cjs.map +1 -1
  196. package/lib/composables/{useStoreSnapshot.d.ts → useStoreSnapshot.d.cts} +0 -1
  197. package/lib/composables/useStoreSnapshot.d.cts.map +1 -0
  198. package/lib/composables/useSubscribe.cjs +1 -1
  199. package/lib/composables/useSubscribe.cjs.map +1 -1
  200. package/lib/composables/{useSubscribe.d.ts → useSubscribe.d.cts} +0 -1
  201. package/lib/composables/useSubscribe.d.cts.map +1 -0
  202. package/lib/context/injection-keys.cjs +1 -1
  203. package/lib/context/injection-keys.cjs.map +1 -1
  204. package/lib/context/{injection-keys.d.ts → injection-keys.d.cts} +0 -1
  205. package/lib/context/injection-keys.d.cts.map +1 -0
  206. package/lib/index.cjs +2 -2
  207. package/lib/index.cjs.map +1 -1
  208. package/lib/{index.d.ts → index.d.cts} +1 -2
  209. package/lib/index.d.cts.map +1 -0
  210. package/lib/plugins/engine-plugin.cjs +2 -2
  211. package/lib/plugins/engine-plugin.cjs.map +1 -1
  212. package/lib/plugins/{engine-plugin.d.ts → engine-plugin.d.cts} +1 -2
  213. package/lib/plugins/engine-plugin.d.cts.map +1 -0
  214. package/lib/plugins/enhanced-persist-plugin.cjs +1 -1
  215. package/lib/plugins/{enhanced-persist-plugin.d.ts → enhanced-persist-plugin.d.cts} +0 -1
  216. package/lib/plugins/enhanced-persist-plugin.d.cts.map +1 -0
  217. package/lib/plugins/index.cjs +1 -1
  218. package/lib/plugins/{index.d.ts → index.d.cts} +0 -1
  219. package/lib/plugins/index.d.cts.map +1 -0
  220. package/lib/plugins/pinia-plugin.cjs +24 -6
  221. package/lib/plugins/pinia-plugin.cjs.map +1 -1
  222. package/lib/plugins/{pinia-plugin.d.ts → pinia-plugin.d.cts} +0 -1
  223. package/lib/plugins/pinia-plugin.d.cts.map +1 -0
  224. package/lib/plugins/registry-plugin.cjs +1 -1
  225. package/lib/plugins/{registry-plugin.d.ts → registry-plugin.d.cts} +0 -1
  226. package/lib/plugins/registry-plugin.d.cts.map +1 -0
  227. package/lib/plugins/vue-plugin.cjs +1 -1
  228. package/lib/plugins/vue-plugin.cjs.map +1 -1
  229. package/lib/plugins/{vue-plugin.d.ts → vue-plugin.d.cts} +0 -1
  230. package/lib/plugins/vue-plugin.d.cts.map +1 -0
  231. package/lib/runtime/install-store-app.cjs +1 -1
  232. package/lib/runtime/install-store-app.cjs.map +1 -1
  233. package/lib/runtime/{install-store-app.d.ts → install-store-app.d.cts} +0 -1
  234. package/lib/runtime/install-store-app.d.cts.map +1 -0
  235. package/lib/runtime/store-plugin-options.cjs +1 -1
  236. package/lib/runtime/store-plugin-options.cjs.map +1 -1
  237. package/lib/runtime/{store-plugin-options.d.ts → store-plugin-options.d.cts} +0 -1
  238. package/lib/runtime/store-plugin-options.d.cts.map +1 -0
  239. package/lib/runtime/store-registry.cjs +14 -4
  240. package/lib/runtime/store-registry.cjs.map +1 -1
  241. package/lib/runtime/{store-registry.d.ts → store-registry.d.cts} +0 -1
  242. package/lib/runtime/store-registry.d.cts.map +1 -0
  243. package/lib/runtime/store-runtime.cjs +8 -2
  244. package/lib/runtime/store-runtime.cjs.map +1 -1
  245. package/lib/runtime/{store-runtime.d.ts → store-runtime.d.cts} +1 -2
  246. package/lib/runtime/store-runtime.d.cts.map +1 -0
  247. package/lib/types.cjs +1 -1
  248. package/lib/{types.d.ts → types.d.cts} +2 -1
  249. package/lib/types.d.cts.map +1 -0
  250. package/package.json +19 -16
  251. package/lib/composables/useOptimistic.d.ts +0 -67
@@ -1 +1 @@
1
- {"version":3,"file":"store-registry.cjs","names":[],"sources":["../../src/runtime/store-registry.ts"],"sourcesContent":["/* ============================================================\n * store-registry.ts\n * Store 注册表模块\n * 管理所有活跃的 Pinia Store 实例,提供注册/注销/查询/重置能力\n * 通过 patch $dispose 方法实现 Store 销毁时自动注销\n * ============================================================ */\n\n/* 从 Pinia 导入类型 */\nimport type { Pinia, PiniaPluginContext, StoreGeneric } from 'pinia'\n/* 导入全局 Store API 类型 */\nimport type { GlobalStoreAPI } from '../types'\n\n/* 用于标记 store 的 $dispose 是否已被 patch 的 Symbol 键 */\nconst STORE_DISPOSE_PATCH_KEY = Symbol('ldesign-store-registry-dispose')\n\n/* 可被 patch $dispose 的 Store 扩展类型 */\ntype DisposableStore = StoreGeneric & {\n [STORE_DISPOSE_PATCH_KEY]?: () => void /* 恢复原始 $dispose 的函数 */\n}\n\n/* 扩展 Pinia 类型,访问内部的 _s(Store 实例映射) */\ntype PiniaWithStores = Pinia & {\n _s?: Map<string, StoreGeneric>\n}\n\n/**\n * Store 注册表接口\n * 提供对所有活跃 Store 的集中管理能力\n * @property stores - Store 实例映射(storeId → Store)\n * @property register - 注册一个 Store\n * @property unregister - 注销一个 Store\n * @property hasStore - 检查 Store 是否已注册\n * @property getStore - 获取指定 ID 的 Store\n * @property getStoreIds - 获取所有已注册的 Store ID\n * @property resetAll - 重置所有 Store 到初始状态\n * @property clear - 清空注册表(不重置 Store)\n * @property registerExistingStores - 从 Pinia 实例中批量注册已有的 Store\n * @property createStoreAPI - 创建全局 Store API 对象\n */\nexport interface StoreRegistry {\n readonly stores: Map<string, StoreGeneric>\n register: (store: StoreGeneric) => void\n unregister: (storeId: string) => void\n hasStore: (storeId: string) => boolean\n getStore: <T = unknown>(storeId: string) => T | undefined\n getStoreIds: () => string[]\n resetAll: () => void\n clear: () => void\n registerExistingStores: (pinia: Pinia) => void\n createStoreAPI: (pinia: Pinia) => GlobalStoreAPI\n}\n\n/**\n * 为 Store 的 $dispose 方法打补丁\n * 在 Store 被销毁时自动从注册表中注销\n * 确保注册表中的 Store 引用不会过期\n *\n * @param store - 目标 Store\n * @param unregister - 注销回调函数\n */\nfunction patchStoreDispose(store: DisposableStore, unregister: (storeId: string) => void): void {\n /* 如果之前已有补丁,先恢复原始方法 */\n const restorePatchedDispose = store[STORE_DISPOSE_PATCH_KEY]\n if (restorePatchedDispose) {\n restorePatchedDispose()\n }\n\n /* 保存原始 $dispose 方法 */\n const originalDispose = store.$dispose\n /* 替换为带注销逻辑的版本 */\n store.$dispose = function patchedDispose() {\n unregister(store.$id) /* 从注册表注销 */\n return originalDispose.call(this) /* 调用原始 dispose */\n }\n\n /* 保存恢复函数,供后续补丁使用 */\n store[STORE_DISPOSE_PATCH_KEY] = () => {\n store.$dispose = originalDispose\n delete store[STORE_DISPOSE_PATCH_KEY]\n }\n}\n\n/**\n * 创建 Store 注册表实例\n * @returns StoreRegistry 注册表对象\n */\nexport function createStoreRegistry(): StoreRegistry {\n /* Store 实例映射(storeId → Store) */\n const stores = new Map<string, StoreGeneric>()\n\n /**\n * 注销指定 ID 的 Store\n * @param storeId - Store ID\n */\n const unregister = (storeId: string): void => {\n stores.delete(storeId)\n }\n\n /**\n * 注册一个 Store\n * 同时为 $dispose 打补丁,确保销毁时自动注销\n * @param store - 要注册的 Store 实例\n */\n const register = (store: StoreGeneric): void => {\n stores.set(store.$id, store)\n patchStoreDispose(store as DisposableStore, unregister)\n }\n\n /**\n * 检查 Store 是否已注册\n * @param storeId - Store ID\n * @returns 是否已注册\n */\n const hasStore = (storeId: string): boolean => {\n return stores.has(storeId)\n }\n\n /**\n * 获取指定 ID 的 Store\n * @param storeId - Store ID\n * @returns Store 实例或 undefined\n */\n const getStore = <T = unknown>(storeId: string): T | undefined => {\n return stores.get(storeId) as T | undefined\n }\n\n /**\n * 获取所有已注册的 Store ID 列表\n * @returns Store ID 数组\n */\n const getStoreIds = (): string[] => {\n return Array.from(stores.keys())\n }\n\n /**\n * 重置所有 Store 到初始状态\n * 调用每个 Store 的 $reset() 方法\n * 注意:Setup stores 可能不支持 $reset\n */\n const resetAll = (): void => {\n stores.forEach((store) => {\n /* 检查是否有 $reset 方法 */\n if (typeof store.$reset !== 'function') {\n return\n }\n\n try {\n store.$reset()\n }\n catch {\n /* Setup stores 可能暴露了 $reset 但实际拒绝直接重置 */\n }\n })\n }\n\n /**\n * 清空注册表\n * 只清除映射,不重置 Store\n */\n const clear = (): void => {\n stores.clear()\n }\n\n /**\n * 从 Pinia 实例中批量注册已有的 Store\n * 访问 Pinia 内部的 _s 映射(所有已创建的 Store)\n * @param pinia - Pinia 实例\n */\n const registerExistingStores = (pinia: Pinia): void => {\n const typedPinia = pinia as PiniaWithStores\n typedPinia._s?.forEach(store => register(store))\n }\n\n /**\n * 创建全局 Store API 对象\n * 提供只读的 Store 查询和管理能力\n * @param pinia - Pinia 实例\n * @returns GlobalStoreAPI 对象\n */\n const createStoreAPI = (pinia: Pinia): GlobalStoreAPI => {\n return {\n pinia, /* Pinia 实例引用 */\n getStore, /* 获取 Store */\n hasStore, /* 检查 Store 是否存在 */\n getStoreIds, /* 获取所有 Store ID */\n resetAll, /* 重置所有 Store */\n }\n }\n\n /* 返回完整的注册表对象 */\n return {\n stores,\n register,\n unregister,\n hasStore,\n getStore,\n getStoreIds,\n resetAll,\n clear,\n registerExistingStores,\n createStoreAPI,\n }\n}\n\n/* ── 全局注册表单例 ── */\n\n/* 全局注册表实例(模块级单例) */\nlet globalRegistry = createStoreRegistry()\n\n/**\n * 设置全局注册表\n * 传 null 则创建新的空注册表\n * @param registry - 新的注册表或 null\n */\nexport function setGlobalStoreRegistry(registry: StoreRegistry | null): void {\n globalRegistry = registry ?? createStoreRegistry()\n}\n\n/**\n * 获取全局 Store 映射(兼容旧接口)\n * @returns Store 映射(类型擦除版)\n */\nexport function getStoreRegistry(): Map<string, unknown> {\n return globalRegistry.stores as Map<string, unknown>\n}\n\n/**\n * 创建注册表方法集合\n * 从注册表中提取常用的查询方法\n * @param registry - 注册表实例,默认使用全局注册表\n * @returns 方法集合对象\n */\nexport function createRegistryMethods(registry: StoreRegistry = globalRegistry) {\n return {\n getStore: registry.getStore,\n hasStore: registry.hasStore,\n getStoreIds: registry.getStoreIds,\n resetAll: registry.resetAll,\n }\n}\n\n/**\n * 创建注册表 Pinia 插件\n * 当 Store 被创建/使用时自动注册到注册表\n * @param registry - 注册表实例,默认使用全局注册表\n * @returns Pinia 插件函数\n */\nexport function createStoreRegistryPlugin(registry: StoreRegistry = globalRegistry) {\n return ({ store }: PiniaPluginContext): void => {\n registry.register(store)\n }\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAM,0BAA0B,uBAAO,gCAAgC;AA+CvE,SAAS,kBAAkB,OAAwB,YAA6C;CAE9F,MAAM,wBAAwB,MAAM;CACpC,IAAI,uBACF,sBAAsB;CAIxB,MAAM,kBAAkB,MAAM;CAE9B,MAAM,WAAW,SAAS,iBAAiB;EACzC,WAAW,MAAM,GAAG;EACpB,OAAO,gBAAgB,KAAK,IAAI;CAClC;CAGA,MAAM,iCAAiC;EACrC,MAAM,WAAW;EACjB,OAAO,MAAM;CACf;AACF;AAMO,SAAS,sBAAqC;CAEnD,MAAM,yBAAS,IAAI,IAA0B;CAM7C,MAAM,cAAc,YAA0B;EAC5C,OAAO,OAAO,OAAO;CACvB;CAOA,MAAM,YAAY,UAA8B;EAC9C,OAAO,IAAI,MAAM,KAAK,KAAK;EAC3B,kBAAkB,OAA0B,UAAU;CACxD;CAOA,MAAM,YAAY,YAA6B;EAC7C,OAAO,OAAO,IAAI,OAAO;CAC3B;CAOA,MAAM,YAAyB,YAAmC;EAChE,OAAO,OAAO,IAAI,OAAO;CAC3B;CAMA,MAAM,oBAA8B;EAClC,OAAO,MAAM,KAAK,OAAO,KAAK,CAAC;CACjC;CAOA,MAAM,iBAAuB;EAC3B,OAAO,SAAS,UAAU;GAExB,IAAI,OAAO,MAAM,WAAW,YAC1B;GAGF,IAAI;IACF,MAAM,OAAO;GACf,QACM,CAEN;EACF,CAAC;CACH;CAMA,MAAM,cAAoB;EACxB,OAAO,MAAM;CACf;CAOA,MAAM,0BAA0B,UAAuB;EAErD,MAAW,IAAI,SAAQ,UAAS,SAAS,KAAK,CAAC;CACjD;CAQA,MAAM,kBAAkB,UAAiC;EACvD,OAAO;GACL;GACA;GACA;GACA;GACA;EACF;CACF;CAGA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAKA,IAAI,iBAAiB,oBAAoB;AAOlC,SAAS,uBAAuB,UAAsC;CAC3E,iBAAiB,YAAY,oBAAoB;AACnD;AAMO,SAAS,mBAAyC;CACvD,OAAO,eAAe;AACxB;AAQO,SAAS,sBAAsB,WAA0B,gBAAgB;CAC9E,OAAO;EACL,UAAU,SAAS;EACnB,UAAU,SAAS;EACnB,aAAa,SAAS;EACtB,UAAU,SAAS;CACrB;AACF;AAQO,SAAS,0BAA0B,WAA0B,gBAAgB;CAClF,QAAQ,EAAE,YAAsC;EAC9C,SAAS,SAAS,KAAK;CACzB;AACF"}
1
+ {"version":3,"file":"store-registry.cjs","names":[],"sources":["../../src/runtime/store-registry.ts"],"sourcesContent":["/* ============================================================\r\n * store-registry.ts\r\n * Store 注册表模块\r\n * 管理所有活跃的 Pinia Store 实例,提供注册/注销/查询/重置能力\r\n * 通过 patch $dispose 方法实现 Store 销毁时自动注销\r\n * ============================================================ */\r\n\r\n/* 从 Pinia 导入类型 */\r\nimport type { Pinia, PiniaPluginContext, StoreGeneric } from 'pinia'\r\n/* 导入全局 Store API 类型 */\r\nimport type { GlobalStoreAPI } from '../types'\r\n\r\n/* 用于标记 store 的 $dispose 是否已被 patch 的 Symbol 键 */\r\nconst STORE_DISPOSE_PATCH_KEY = Symbol('ldesign-store-registry-dispose')\r\n\r\n/* 可被 patch $dispose 的 Store 扩展类型 */\r\ntype DisposableStore = StoreGeneric & {\r\n [STORE_DISPOSE_PATCH_KEY]?: () => void /* 恢复原始 $dispose 的函数 */\r\n}\r\n\r\n/* 扩展 Pinia 类型,访问内部的 _s(Store 实例映射) */\r\ntype PiniaWithStores = Pinia & {\r\n _s?: Map<string, StoreGeneric>\r\n}\r\n\r\n/**\r\n * Store 注册表接口\r\n * 提供对所有活跃 Store 的集中管理能力\r\n * @property stores - Store 实例映射(storeId → Store)\r\n * @property register - 注册一个 Store\r\n * @property unregister - 注销一个 Store\r\n * @property hasStore - 检查 Store 是否已注册\r\n * @property getStore - 获取指定 ID 的 Store\r\n * @property getStoreIds - 获取所有已注册的 Store ID\r\n * @property resetAll - 重置所有 Store 到初始状态\r\n * @property clear - 清空注册表(不重置 Store)\r\n * @property registerExistingStores - 从 Pinia 实例中批量注册已有的 Store\r\n * @property createStoreAPI - 创建全局 Store API 对象\r\n */\r\nexport interface StoreRegistry {\r\n readonly stores: Map<string, StoreGeneric>\r\n register: (store: StoreGeneric) => void\r\n unregister: (storeId: string) => void\r\n hasStore: (storeId: string) => boolean\r\n getStore: <T = unknown>(storeId: string) => T | undefined\r\n getStoreIds: () => string[]\r\n resetAll: () => void\r\n clear: () => void\r\n registerExistingStores: (pinia: Pinia) => void\r\n createStoreAPI: (pinia: Pinia) => GlobalStoreAPI\r\n}\r\n\r\n/**\r\n * 为 Store 的 $dispose 方法打补丁\r\n * 在 Store 被销毁时自动从注册表中注销\r\n * 确保注册表中的 Store 引用不会过期\r\n *\r\n * @param store - 目标 Store\r\n * @param unregister - 注销回调函数\r\n */\r\nfunction patchStoreDispose(\r\n store: DisposableStore,\r\n unregister: () => void\r\n): void {\r\n /* 如果之前已有补丁,先恢复原始方法 */\r\n const restorePatchedDispose = store[STORE_DISPOSE_PATCH_KEY]\r\n if (restorePatchedDispose) {\r\n restorePatchedDispose()\r\n }\r\n\r\n /* 保存原始 $dispose 方法 */\r\n const originalDispose = store.$dispose\r\n /* 替换为带注销逻辑的版本 */\r\n store.$dispose = function patchedDispose() {\r\n unregister()\r\n return originalDispose.call(this) /* 调用原始 dispose */\r\n }\r\n\r\n /* 保存恢复函数,供后续补丁使用 */\r\n store[STORE_DISPOSE_PATCH_KEY] = () => {\r\n store.$dispose = originalDispose\r\n delete store[STORE_DISPOSE_PATCH_KEY]\r\n }\r\n}\r\n\r\n/**\r\n * 创建 Store 注册表实例\r\n * @returns StoreRegistry 注册表对象\r\n */\r\nexport function createStoreRegistry(): StoreRegistry {\r\n /* Store 实例映射(storeId → Store) */\r\n const stores = new Map<string, StoreGeneric>()\r\n\r\n /**\r\n * 注销指定 ID 的 Store\r\n * @param storeId - Store ID\r\n */\r\n const unregister = (storeId: string, expectedStore?: StoreGeneric): void => {\r\n const store = stores.get(storeId)\r\n if (!store || (expectedStore && store !== expectedStore)) {\r\n return\r\n }\r\n\r\n stores.delete(storeId)\r\n ;(store as DisposableStore)[STORE_DISPOSE_PATCH_KEY]?.()\r\n }\r\n\r\n /**\r\n * 注册一个 Store\r\n * 同时为 $dispose 打补丁,确保销毁时自动注销\r\n * @param store - 要注册的 Store 实例\r\n */\r\n const register = (store: StoreGeneric): void => {\r\n const existingStore = stores.get(store.$id)\r\n if (existingStore && existingStore !== store) {\r\n unregister(store.$id, existingStore)\r\n }\r\n\r\n stores.set(store.$id, store)\r\n patchStoreDispose(store as DisposableStore, () =>\r\n unregister(store.$id, store)\r\n )\r\n }\r\n\r\n /**\r\n * 检查 Store 是否已注册\r\n * @param storeId - Store ID\r\n * @returns 是否已注册\r\n */\r\n const hasStore = (storeId: string): boolean => {\r\n return stores.has(storeId)\r\n }\r\n\r\n /**\r\n * 获取指定 ID 的 Store\r\n * @param storeId - Store ID\r\n * @returns Store 实例或 undefined\r\n */\r\n const getStore = <T = unknown>(storeId: string): T | undefined => {\r\n return stores.get(storeId) as T | undefined\r\n }\r\n\r\n /**\r\n * 获取所有已注册的 Store ID 列表\r\n * @returns Store ID 数组\r\n */\r\n const getStoreIds = (): string[] => {\r\n return Array.from(stores.keys())\r\n }\r\n\r\n /**\r\n * 重置所有 Store 到初始状态\r\n * 调用每个 Store 的 $reset() 方法\r\n * 注意:Setup stores 可能不支持 $reset\r\n */\r\n const resetAll = (): void => {\r\n stores.forEach(store => {\r\n /* 检查是否有 $reset 方法 */\r\n if (typeof store.$reset !== 'function') {\r\n return\r\n }\r\n\r\n try {\r\n store.$reset()\r\n } catch {\r\n /* Setup stores 可能暴露了 $reset 但实际拒绝直接重置 */\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * 清空注册表\r\n * 只清除映射,不重置 Store\r\n */\r\n const clear = (): void => {\r\n stores.forEach(store => {\r\n ;(store as DisposableStore)[STORE_DISPOSE_PATCH_KEY]?.()\r\n })\r\n stores.clear()\r\n }\r\n\r\n /**\r\n * 从 Pinia 实例中批量注册已有的 Store\r\n * 访问 Pinia 内部的 _s 映射(所有已创建的 Store)\r\n * @param pinia - Pinia 实例\r\n */\r\n const registerExistingStores = (pinia: Pinia): void => {\r\n const typedPinia = pinia as PiniaWithStores\r\n typedPinia._s?.forEach(store => register(store))\r\n }\r\n\r\n /**\r\n * 创建全局 Store API 对象\r\n * 提供只读的 Store 查询和管理能力\r\n * @param pinia - Pinia 实例\r\n * @returns GlobalStoreAPI 对象\r\n */\r\n const createStoreAPI = (pinia: Pinia): GlobalStoreAPI => {\r\n return {\r\n pinia /* Pinia 实例引用 */,\r\n getStore /* 获取 Store */,\r\n hasStore /* 检查 Store 是否存在 */,\r\n getStoreIds /* 获取所有 Store ID */,\r\n resetAll /* 重置所有 Store */,\r\n }\r\n }\r\n\r\n /* 返回完整的注册表对象 */\r\n return {\r\n stores,\r\n register,\r\n unregister,\r\n hasStore,\r\n getStore,\r\n getStoreIds,\r\n resetAll,\r\n clear,\r\n registerExistingStores,\r\n createStoreAPI,\r\n }\r\n}\r\n\r\n/* ── 全局注册表单例 ── */\r\n\r\n/* 全局注册表实例(模块级单例) */\r\nlet globalRegistry = createStoreRegistry()\r\n\r\n/**\r\n * 设置全局注册表\r\n * 传 null 则创建新的空注册表\r\n * @param registry - 新的注册表或 null\r\n */\r\nexport function setGlobalStoreRegistry(registry: StoreRegistry | null): void {\r\n if (registry === globalRegistry) {\r\n return\r\n }\r\n\r\n globalRegistry.clear()\r\n globalRegistry = registry ?? createStoreRegistry()\r\n}\r\n\r\n/**\r\n * 获取全局 Store 映射(兼容旧接口)\r\n * @returns Store 映射(类型擦除版)\r\n */\r\nexport function getStoreRegistry(): Map<string, unknown> {\r\n return globalRegistry.stores as Map<string, unknown>\r\n}\r\n\r\n/**\r\n * 创建注册表方法集合\r\n * 从注册表中提取常用的查询方法\r\n * @param registry - 注册表实例,默认使用全局注册表\r\n * @returns 方法集合对象\r\n */\r\nexport function createRegistryMethods(\r\n registry: StoreRegistry = globalRegistry\r\n) {\r\n return {\r\n getStore: registry.getStore,\r\n hasStore: registry.hasStore,\r\n getStoreIds: registry.getStoreIds,\r\n resetAll: registry.resetAll,\r\n }\r\n}\r\n\r\n/**\r\n * 创建注册表 Pinia 插件\r\n * 当 Store 被创建/使用时自动注册到注册表\r\n * @param registry - 注册表实例,默认使用全局注册表\r\n * @returns Pinia 插件函数\r\n */\r\nexport function createStoreRegistryPlugin(\r\n registry: StoreRegistry = globalRegistry\r\n) {\r\n return ({ store }: PiniaPluginContext): void => {\r\n registry.register(store)\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;AAaA,MAAM,0BAA0B,uBAAO,gCAAgC;AA+CvE,SAAS,kBACP,OACA,YACM;CAEN,MAAM,wBAAwB,MAAM;CACpC,IAAI,uBACF,sBAAsB;CAIxB,MAAM,kBAAkB,MAAM;CAE9B,MAAM,WAAW,SAAS,iBAAiB;EACzC,WAAW;EACX,OAAO,gBAAgB,KAAK,IAAI;CAClC;CAGA,MAAM,iCAAiC;EACrC,MAAM,WAAW;EACjB,OAAO,MAAM;CACf;AACF;AAMO,SAAS,sBAAqC;CAEnD,MAAM,yBAAS,IAAI,IAA0B;CAM7C,MAAM,cAAc,SAAiB,kBAAuC;EAC1E,MAAM,QAAQ,OAAO,IAAI,OAAO;EAChC,IAAI,CAAC,SAAU,iBAAiB,UAAU,eACxC;EAGF,OAAO,OAAO,OAAO;EACnB,MAA0B,wBAAuB,GAAI;CACzD;CAOA,MAAM,YAAY,UAA8B;EAC9C,MAAM,gBAAgB,OAAO,IAAI,MAAM,GAAG;EAC1C,IAAI,iBAAiB,kBAAkB,OACrC,WAAW,MAAM,KAAK,aAAa;EAGrC,OAAO,IAAI,MAAM,KAAK,KAAK;EAC3B,kBAAkB,aAChB,WAAW,MAAM,KAAK,KAAK,CAC7B;CACF;CAOA,MAAM,YAAY,YAA6B;EAC7C,OAAO,OAAO,IAAI,OAAO;CAC3B;CAOA,MAAM,YAAyB,YAAmC;EAChE,OAAO,OAAO,IAAI,OAAO;CAC3B;CAMA,MAAM,oBAA8B;EAClC,OAAO,MAAM,KAAK,OAAO,KAAK,CAAC;CACjC;CAOA,MAAM,iBAAuB;EAC3B,OAAO,SAAQ,UAAS;GAEtB,IAAI,OAAO,MAAM,WAAW,YAC1B;GAGF,IAAI;IACF,MAAM,OAAO;GACf,QAAQ,CAER;EACF,CAAC;CACH;CAMA,MAAM,cAAoB;EACxB,OAAO,SAAQ,UAAS;GACpB,MAA0B,wBAAuB,GAAI;EACzD,CAAC;EACD,OAAO,MAAM;CACf;CAOA,MAAM,0BAA0B,UAAuB;EAErD,MAAW,IAAI,SAAQ,UAAS,SAAS,KAAK,CAAC;CACjD;CAQA,MAAM,kBAAkB,UAAiC;EACvD,OAAO;GACL;GACA;GACA;GACA;GACA;EACF;CACF;CAGA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAKA,IAAI,iBAAiB,oBAAoB;AAOlC,SAAS,uBAAuB,UAAsC;CAC3E,IAAI,aAAa,gBACf;CAGF,eAAe,MAAM;CACrB,iBAAiB,YAAY,oBAAoB;AACnD;AAMO,SAAS,mBAAyC;CACvD,OAAO,eAAe;AACxB;AAQO,SAAS,sBACd,WAA0B,gBAC1B;CACA,OAAO;EACL,UAAU,SAAS;EACnB,UAAU,SAAS;EACnB,aAAa,SAAS;EACtB,UAAU,SAAS;CACrB;AACF;AAQO,SAAS,0BACd,WAA0B,gBAC1B;CACA,QAAQ,EAAE,YAAsC;EAC9C,SAAS,SAAS,KAAK;CACzB;AACF"}
@@ -61,4 +61,3 @@ export declare function createRegistryMethods(registry?: StoreRegistry): {
61
61
  * @returns Pinia 插件函数
62
62
  */
63
63
  export declare function createStoreRegistryPlugin(registry?: StoreRegistry): ({ store }: PiniaPluginContext) => void;
64
- //# sourceMappingURL=store-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-registry.d.cts","sourceRoot":"","sources":["../../src/runtime/store-registry.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAe9C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;IACtC,QAAQ,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAA;IACzD,WAAW,EAAE,MAAM,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,cAAc,CAAA;CACjD;AAmCD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAmInD;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAO3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,GAAE,aAA8B;eApN7B,CAAC,qBAAqB,MAAM,KAAK,CAAC,GAAG,SAAS;wBADrC,MAAM,KAAK,OAAO;uBAEnB,MAAM,EAAE;oBACX,IAAI;EA0NrB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,GAAE,aAA8B,IAEhC,WAAW,kBAAkB,KAAG,IAAI,CAG7C"}
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/store-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:39:29 *
5
+ * Build time: 2024-10-12 17:40:04 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -28,11 +28,15 @@ function createStoreRuntime(options = {}) {
28
28
  const pinia$1 = resolvedOptions.pinia ?? (0, pinia.createPinia)();
29
29
  if (pinia$1[STORE_RUNTIME_KEY]) return pinia$1[STORE_RUNTIME_KEY];
30
30
  const registry = require_store_registry.createStoreRegistry();
31
+ let isActive = true;
31
32
  const persistController = resolvedOptions.persist ? require_pinia_plugin.createPersistPluginController({
32
33
  ...resolvedOptions.persistOptions,
33
34
  debug: resolvedOptions.debug || resolvedOptions.persistOptions.debug
34
35
  }) : null;
35
- pinia$1.use(require_store_registry.createStoreRegistryPlugin(registry));
36
+ const registryPlugin = require_store_registry.createStoreRegistryPlugin(registry);
37
+ pinia$1.use((context) => {
38
+ if (isActive) registryPlugin(context);
39
+ });
36
40
  persistController && pinia$1.use(persistController.plugin);
37
41
  registry.registerExistingStores(pinia$1);
38
42
  const runtime = {
@@ -45,6 +49,8 @@ function createStoreRuntime(options = {}) {
45
49
  * 释放所有资源:清除运行时标记、持久化插件、注册表
46
50
  */
47
51
  dispose: () => {
52
+ if (!isActive) return;
53
+ isActive = false;
48
54
  if (pinia$1[STORE_RUNTIME_KEY] === runtime) delete pinia$1[STORE_RUNTIME_KEY];
49
55
  persistController?.dispose();
50
56
  registry.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"store-runtime.cjs","names":[],"sources":["../../src/runtime/store-runtime.ts"],"sourcesContent":["/* ============================================================\n * store-runtime.ts\n * Store 运行时模块\n * 负责创建和管理 Store 运行时实例,包括 Pinia 创建、\n * 注册表初始化、持久化插件配置和生命周期管理\n * ============================================================ */\n\n/* 从 Pinia 导入类型 */\nimport type { Pinia, StoreGeneric } from 'pinia'\n/* 全局 Store API 类型 */\nimport type { GlobalStoreAPI } from '../types'\n/* 运行时选项类型 */\nimport type {\n ResolvedStoreRuntimeOptions, /* 解析后的运行时选项 */\n StoreRuntimeOptions, /* 原始运行时选项 */\n} from './store-plugin-options'\n/* 注册表类型 */\nimport type { StoreRegistry } from './store-registry'\n/* 从 Pinia 导入创建实例函数 */\nimport { createPinia } from 'pinia'\n/* 导入持久化插件控制器 */\nimport { createPersistPluginController } from '../plugins/pinia-plugin'\n/* 导入选项规范化函数 */\nimport {\n normalizeStoreRuntimeOptions,\n} from './store-plugin-options'\n/* 导入注册表相关函数 */\nimport {\n createStoreRegistry,\n createStoreRegistryPlugin,\n setGlobalStoreRegistry,\n} from './store-registry'\n\n/* 用于标记 Pinia 实例上已绑定的运行时的 Symbol 键 */\nconst STORE_RUNTIME_KEY = Symbol('ldesign-store-runtime')\n\n/* 扩展 Pinia 类型,添加运行时和 Store 映射引用 */\ntype PiniaWithRuntime = Pinia & {\n _s?: Map<string, StoreGeneric> /* Pinia 内部的 Store 实例映射 */\n [STORE_RUNTIME_KEY]?: StoreRuntime /* 绑定的运行时 */\n}\n\n/**\n * Store 运行时接口\n * 封装了 Pinia、注册表、API 和生命周期管理\n * @property pinia - Pinia 实例\n * @property registry - Store 注册表\n * @property storeAPI - 全局 Store API\n * @property options - 解析后的运行时选项\n * @property dispose - 清理函数,释放所有资源\n */\nexport interface StoreRuntime {\n pinia: Pinia\n registry: StoreRegistry\n storeAPI: GlobalStoreAPI\n options: ResolvedStoreRuntimeOptions\n dispose: () => void\n}\n\n/* 全局运行时实例(模块级单例) */\nlet globalStoreRuntime: StoreRuntime | null = null\n\n/**\n * 获取全局 Store API\n * @returns 全局 Store API 或 null(运行时未初始化时)\n */\nexport function getGlobalStoreAPI(): GlobalStoreAPI | null {\n return globalStoreRuntime?.storeAPI ?? null\n}\n\n/**\n * 设置全局运行时\n * 同步更新全局注册表引用\n * @param runtime - 新的运行时实例或 null\n */\nexport function setGlobalStoreRuntime(runtime: StoreRuntime | null): void {\n globalStoreRuntime = runtime\n /* 同步更新全局注册表 */\n setGlobalStoreRegistry(runtime?.registry ?? null)\n}\n\n/**\n * 创建 Store 运行时实例\n * 这是 Store 系统的核心工厂函数,负责:\n * 1. 规范化配置选项\n * 2. 创建或复用 Pinia 实例\n * 3. 创建 Store 注册表\n * 4. 配置持久化插件\n * 5. 注册 Pinia 插件\n * 6. 组装运行时对象\n *\n * @param options - 运行时配置选项\n * @returns StoreRuntime 实例\n */\nexport function createStoreRuntime(\n options: StoreRuntimeOptions = {},\n): StoreRuntime {\n /* 规范化配置选项(填充默认值) */\n const resolvedOptions = normalizeStoreRuntimeOptions(options)\n /* 创建或复用 Pinia 实例,扩展为带运行时标记的类型 */\n const pinia = (resolvedOptions.pinia ?? createPinia()) as PiniaWithRuntime\n\n /* 如果 Pinia 实例上已有运行时,直接复用(防止重复创建) */\n if (pinia[STORE_RUNTIME_KEY]) {\n return pinia[STORE_RUNTIME_KEY]\n }\n\n /* 创建 Store 注册表 */\n const registry = createStoreRegistry()\n\n /* 如果启用了持久化,创建持久化插件控制器 */\n const persistController = resolvedOptions.persist\n ? createPersistPluginController({\n ...resolvedOptions.persistOptions, /* 透传持久化选项 */\n debug: resolvedOptions.debug || resolvedOptions.persistOptions.debug, /* 调试模式 */\n })\n : null\n\n /* 注册注册表插件(自动注册新创建的 Store) */\n pinia.use(createStoreRegistryPlugin(registry))\n /* 如果有持久化插件,也注册到 Pinia */\n persistController && pinia.use(persistController.plugin)\n /* 批量注册 Pinia 中已有的 Store */\n registry.registerExistingStores(pinia)\n\n /* 组装运行时对象 */\n const runtime: StoreRuntime = {\n pinia, /* Pinia 实例 */\n registry, /* Store 注册表 */\n storeAPI: registry.createStoreAPI(pinia), /* 全局 Store API */\n options: resolvedOptions, /* 解析后的选项 */\n\n /**\n * 清理函数\n * 释放所有资源:清除运行时标记、持久化插件、注册表\n */\n dispose: () => {\n /* 清除 Pinia 上的运行时标记 */\n if (pinia[STORE_RUNTIME_KEY] === runtime) {\n delete pinia[STORE_RUNTIME_KEY]\n }\n\n /* 销毁持久化插件(取消订阅、移除事件监听等) */\n persistController?.dispose()\n /* 清空注册表 */\n registry.clear()\n\n /* 如果当前是全局运行时,也清除全局引用 */\n if (globalStoreRuntime === runtime) {\n setGlobalStoreRuntime(null)\n }\n },\n }\n\n /* 在 Pinia 实例上保存运行时引用(防止重复创建) */\n pinia[STORE_RUNTIME_KEY] = runtime\n return runtime\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkCA,MAAM,oBAAoB,uBAAO,uBAAuB;AA0BxD,IAAI,qBAA0C;AAMvC,SAAS,oBAA2C;CACzD,OAAO,oBAAoB,YAAY;AACzC;AAOO,SAAS,sBAAsB,SAAoC;CACxE,qBAAqB;CAErB,uBAAA,uBAAuB,SAAS,YAAY,IAAI;AAClD;AAeO,SAAS,mBACd,UAA+B,CAAC,GAClB;CAEd,MAAM,kBAAkB,6BAAA,6BAA6B,OAAO;CAE5D,MAAM,UAAS,gBAAgB,UAAA,GAAA,MAAA,YAAA,CAAqB;CAGpD,IAAI,QAAM,oBACR,OAAO,QAAM;CAIf,MAAM,WAAW,uBAAA,oBAAoB;CAGrC,MAAM,oBAAoB,gBAAgB,UACtC,qBAAA,8BAA8B;EAC5B,GAAG,gBAAgB;EACnB,OAAO,gBAAgB,SAAS,gBAAgB,eAAe;CACjE,CAAC,IACD;CAGJ,QAAM,IAAI,uBAAA,0BAA0B,QAAQ,CAAC;CAE7C,qBAAqB,QAAM,IAAI,kBAAkB,MAAM;CAEvD,SAAS,uBAAuB,OAAK;CAGrC,MAAM,UAAwB;EAC5B,OAAA;EACA;EACA,UAAU,SAAS,eAAe,OAAK;EACvC,SAAS;;;;;EAMT,eAAe;GAEb,IAAI,QAAM,uBAAuB,SAC/B,OAAO,QAAM;GAIf,mBAAmB,QAAQ;GAE3B,SAAS,MAAM;GAGf,IAAI,uBAAuB,SACzB,sBAAsB,IAAI;EAE9B;CACF;CAGA,QAAM,qBAAqB;CAC3B,OAAO;AACT"}
1
+ {"version":3,"file":"store-runtime.cjs","names":[],"sources":["../../src/runtime/store-runtime.ts"],"sourcesContent":["/* ============================================================\r\n * store-runtime.ts\r\n * Store 运行时模块\r\n * 负责创建和管理 Store 运行时实例,包括 Pinia 创建、\r\n * 注册表初始化、持久化插件配置和生命周期管理\r\n * ============================================================ */\r\n\r\n/* 从 Pinia 导入类型 */\r\nimport type { Pinia, StoreGeneric } from 'pinia'\r\n/* 全局 Store API 类型 */\r\nimport type { GlobalStoreAPI } from '../types'\r\n/* 运行时选项类型 */\r\nimport type {\r\n ResolvedStoreRuntimeOptions /* 解析后的运行时选项 */,\r\n StoreRuntimeOptions /* 原始运行时选项 */,\r\n} from './store-plugin-options'\r\n/* 注册表类型 */\r\nimport type { StoreRegistry } from './store-registry'\r\n/* 从 Pinia 导入创建实例函数 */\r\nimport { createPinia } from 'pinia'\r\n/* 导入持久化插件控制器 */\r\nimport { createPersistPluginController } from '../plugins/pinia-plugin'\r\n/* 导入选项规范化函数 */\r\nimport { normalizeStoreRuntimeOptions } from './store-plugin-options'\r\n/* 导入注册表相关函数 */\r\nimport {\r\n createStoreRegistry,\r\n createStoreRegistryPlugin,\r\n setGlobalStoreRegistry,\r\n} from './store-registry'\r\n\r\n/* 用于标记 Pinia 实例上已绑定的运行时的 Symbol 键 */\r\nconst STORE_RUNTIME_KEY = Symbol('ldesign-store-runtime')\r\n\r\n/* 扩展 Pinia 类型,添加运行时和 Store 映射引用 */\r\ntype PiniaWithRuntime = Pinia & {\r\n _s?: Map<string, StoreGeneric> /* Pinia 内部的 Store 实例映射 */\r\n [STORE_RUNTIME_KEY]?: StoreRuntime /* 绑定的运行时 */\r\n}\r\n\r\n/**\r\n * Store 运行时接口\r\n * 封装了 Pinia、注册表、API 和生命周期管理\r\n * @property pinia - Pinia 实例\r\n * @property registry - Store 注册表\r\n * @property storeAPI - 全局 Store API\r\n * @property options - 解析后的运行时选项\r\n * @property dispose - 清理函数,释放所有资源\r\n */\r\nexport interface StoreRuntime {\r\n pinia: Pinia\r\n registry: StoreRegistry\r\n storeAPI: GlobalStoreAPI\r\n options: ResolvedStoreRuntimeOptions\r\n dispose: () => void\r\n}\r\n\r\n/* 全局运行时实例(模块级单例) */\r\nlet globalStoreRuntime: StoreRuntime | null = null\r\n\r\n/**\r\n * 获取全局 Store API\r\n * @returns 全局 Store API 或 null(运行时未初始化时)\r\n */\r\nexport function getGlobalStoreAPI(): GlobalStoreAPI | null {\r\n return globalStoreRuntime?.storeAPI ?? null\r\n}\r\n\r\n/**\r\n * 设置全局运行时\r\n * 同步更新全局注册表引用\r\n * @param runtime - 新的运行时实例或 null\r\n */\r\nexport function setGlobalStoreRuntime(runtime: StoreRuntime | null): void {\r\n globalStoreRuntime = runtime\r\n /* 同步更新全局注册表 */\r\n setGlobalStoreRegistry(runtime?.registry ?? null)\r\n}\r\n\r\n/**\r\n * 创建 Store 运行时实例\r\n * 这是 Store 系统的核心工厂函数,负责:\r\n * 1. 规范化配置选项\r\n * 2. 创建或复用 Pinia 实例\r\n * 3. 创建 Store 注册表\r\n * 4. 配置持久化插件\r\n * 5. 注册 Pinia 插件\r\n * 6. 组装运行时对象\r\n *\r\n * @param options - 运行时配置选项\r\n * @returns StoreRuntime 实例\r\n */\r\nexport function createStoreRuntime(\r\n options: StoreRuntimeOptions = {}\r\n): StoreRuntime {\r\n /* 规范化配置选项(填充默认值) */\r\n const resolvedOptions = normalizeStoreRuntimeOptions(options)\r\n /* 创建或复用 Pinia 实例,扩展为带运行时标记的类型 */\r\n const pinia = (resolvedOptions.pinia ?? createPinia()) as PiniaWithRuntime\r\n\r\n /* 如果 Pinia 实例上已有运行时,直接复用(防止重复创建) */\r\n if (pinia[STORE_RUNTIME_KEY]) {\r\n return pinia[STORE_RUNTIME_KEY]\r\n }\r\n\r\n /* 创建 Store 注册表 */\r\n const registry = createStoreRegistry()\r\n /* Pinia 不提供插件移除 API,因此释放后必须让已安装插件失效。 */\r\n let isActive = true\r\n\r\n /* 如果启用了持久化,创建持久化插件控制器 */\r\n const persistController = resolvedOptions.persist\r\n ? createPersistPluginController({\r\n ...resolvedOptions.persistOptions /* 透传持久化选项 */,\r\n debug:\r\n resolvedOptions.debug ||\r\n resolvedOptions.persistOptions.debug /* 调试模式 */,\r\n })\r\n : null\r\n\r\n /* 注册注册表插件(自动注册新创建的 Store) */\r\n const registryPlugin = createStoreRegistryPlugin(registry)\r\n pinia.use(context => {\r\n if (isActive) {\r\n registryPlugin(context)\r\n }\r\n })\r\n /* 如果有持久化插件,也注册到 Pinia */\r\n persistController && pinia.use(persistController.plugin)\r\n /* 批量注册 Pinia 中已有的 Store */\r\n registry.registerExistingStores(pinia)\r\n\r\n /* 组装运行时对象 */\r\n const runtime: StoreRuntime = {\r\n pinia /* Pinia 实例 */,\r\n registry /* Store 注册表 */,\r\n storeAPI: registry.createStoreAPI(pinia) /* 全局 Store API */,\r\n options: resolvedOptions /* 解析后的选项 */,\r\n\r\n /**\r\n * 清理函数\r\n * 释放所有资源:清除运行时标记、持久化插件、注册表\r\n */\r\n dispose: () => {\r\n if (!isActive) {\r\n return\r\n }\r\n\r\n isActive = false\r\n\r\n /* 清除 Pinia 上的运行时标记 */\r\n if (pinia[STORE_RUNTIME_KEY] === runtime) {\r\n delete pinia[STORE_RUNTIME_KEY]\r\n }\r\n\r\n /* 销毁持久化插件(取消订阅、移除事件监听等) */\r\n persistController?.dispose()\r\n /* 清空注册表 */\r\n registry.clear()\r\n\r\n /* 如果当前是全局运行时,也清除全局引用 */\r\n if (globalStoreRuntime === runtime) {\r\n setGlobalStoreRuntime(null)\r\n }\r\n },\r\n }\r\n\r\n /* 在 Pinia 实例上保存运行时引用(防止重复创建) */\r\n pinia[STORE_RUNTIME_KEY] = runtime\r\n return runtime\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;AAgCA,MAAM,oBAAoB,uBAAO,uBAAuB;AA0BxD,IAAI,qBAA0C;AAMvC,SAAS,oBAA2C;CACzD,OAAO,oBAAoB,YAAY;AACzC;AAOO,SAAS,sBAAsB,SAAoC;CACxE,qBAAqB;CAErB,uBAAA,uBAAuB,SAAS,YAAY,IAAI;AAClD;AAeO,SAAS,mBACd,UAA+B,CAAC,GAClB;CAEd,MAAM,kBAAkB,6BAAA,6BAA6B,OAAO;CAE5D,MAAM,UAAS,gBAAgB,UAAA,GAAA,MAAA,YAAA,CAAqB;CAGpD,IAAI,QAAM,oBACR,OAAO,QAAM;CAIf,MAAM,WAAW,uBAAA,oBAAoB;CAErC,IAAI,WAAW;CAGf,MAAM,oBAAoB,gBAAgB,UACtC,qBAAA,8BAA8B;EAC5B,GAAG,gBAAgB;EACnB,OACE,gBAAgB,SAChB,gBAAgB,eAAe;CACnC,CAAC,IACD;CAGJ,MAAM,iBAAiB,uBAAA,0BAA0B,QAAQ;CACzD,QAAM,KAAI,YAAW;EACnB,IAAI,UACF,eAAe,OAAO;CAE1B,CAAC;CAED,qBAAqB,QAAM,IAAI,kBAAkB,MAAM;CAEvD,SAAS,uBAAuB,OAAK;CAGrC,MAAM,UAAwB;EAC5B,OAAA;EACA;EACA,UAAU,SAAS,eAAe,OAAK;EACvC,SAAS;;;;;EAMT,eAAe;GACb,IAAI,CAAC,UACH;GAGF,WAAW;GAGX,IAAI,QAAM,uBAAuB,SAC/B,OAAO,QAAM;GAIf,mBAAmB,QAAQ;GAE3B,SAAS,MAAM;GAGf,IAAI,uBAAuB,SACzB,sBAAsB,IAAI;EAE9B;CACF;CAGA,QAAM,qBAAqB;CAC3B,OAAO;AACT"}
@@ -1,6 +1,6 @@
1
1
  import type { Pinia } from 'pinia';
2
2
  import type { GlobalStoreAPI } from '../types';
3
- import type { ResolvedStoreRuntimeOptions, /* 解析后的运行时选项 */ StoreRuntimeOptions } from './store-plugin-options';
3
+ import type { ResolvedStoreRuntimeOptions, StoreRuntimeOptions } from './store-plugin-options';
4
4
  import type { StoreRegistry } from './store-registry';
5
5
  /**
6
6
  * Store 运行时接口
@@ -43,4 +43,3 @@ export declare function setGlobalStoreRuntime(runtime: StoreRuntime | null): voi
43
43
  * @returns StoreRuntime 实例
44
44
  */
45
45
  export declare function createStoreRuntime(options?: StoreRuntimeOptions): StoreRuntime;
46
- //# sourceMappingURL=store-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-runtime.d.cts","sourceRoot":"","sources":["../../src/runtime/store-runtime.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE9C,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAuBrD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAA;IACxB,OAAO,EAAE,2BAA2B,CAAA;IACpC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAKD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAIxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,mBAAwB,GAChC,YAAY,CA4Ed"}
package/lib/types.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  * ***********************************
3
3
  * @composy/store-vue v0.0.1 *
4
4
  * Built with rollup *
5
- * Build time: 2024-08-17 11:39:29 *
5
+ * Build time: 2024-10-12 17:40:04 *
6
6
  * Build mode: production *
7
7
  * Minified: No *
8
8
  * ***********************************
@@ -99,6 +99,8 @@ export interface UsePersistOptions {
99
99
  defaultValue?: unknown;
100
100
  serialize?: (value: unknown) => string;
101
101
  deserialize?: (value: string) => unknown;
102
+ /** 是否在 mounted 时自动恢复;组合式工具需要 setup 阶段恢复时可关闭 */
103
+ restoreOnMounted?: boolean;
102
104
  }
103
105
  /**
104
106
  * usePersist 返回值接口
@@ -164,4 +166,3 @@ export interface GlobalStoreAPI {
164
166
  getStoreIds: () => string[];
165
167
  resetAll: () => void;
166
168
  }
167
- //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@composy/store-vue",
3
3
  "type": "module",
4
- "version": "0.0.1",
4
+ "version": "0.0.2",
5
5
  "description": "Vue 3 状态管理适配器 - 基于 Pinia 的增强版状态管理解决方案",
6
6
  "author": "ldesign",
7
7
  "license": "MIT",
@@ -79,36 +79,39 @@
79
79
  "build:watch": "ldesign-builder build --watch",
80
80
  "clean": "rimraf es esm lib dist",
81
81
  "dev": "ldesign-builder build --watch",
82
- "lint": "eslint . --fix",
83
- "lint:check": "eslint . --max-warnings 0",
84
- "lint:fix": "eslint . --fix",
82
+ "lint": "eslint . --cache --max-warnings 0",
83
+ "lint:check": "eslint . --cache --max-warnings 0",
84
+ "lint:fix": "eslint . --cache --fix",
85
85
  "test": "ltesting run:unit",
86
86
  "test:run": "ltesting run:unit",
87
- "type-check": "vue-tsc -p tsconfig.typecheck.json --noEmit",
87
+ "type-check": "vue-tsc -p .ldesign/tsconfig.typecheck.json --noEmit",
88
88
  "test:watch": "ltesting run:unit --watch",
89
89
  "test:coverage": "ltesting run:unit --coverage",
90
90
  "test:changed": "ltesting run:unit --changed",
91
91
  "test:failed": "ltesting run:unit --failed",
92
- "test:ui": "ltesting dashboard"
92
+ "test:ui": "ltesting dashboard",
93
+ "release": "ldesign-release publish --package-dir ."
93
94
  },
94
95
  "peerDependencies": {
95
- "pinia": "^2.1.0",
96
- "vue": "^3.5.32"
96
+ "pinia": "3.0.4",
97
+ "vue": "3.5.32"
97
98
  },
98
99
  "dependencies": {
99
- "@composy/store-core": "^0.0.1",
100
- "pinia": "^3.0.4"
100
+ "@composy/store-core": "^0.0.2"
101
101
  },
102
102
  "devDependencies": {
103
103
  "@antfu/eslint-config": "9.1.0",
104
- "@composy/builder": "^0.0.1",
105
- "@composy/testing": "^0.0.1",
106
- "@types/node": "26.1.1",
107
- "@vue/test-utils": "^2.4.11",
104
+ "@composy/builder": "^0.1.0",
105
+ "@composy/testing": "^0.0.2",
106
+ "@types/node": "26.6.3",
107
+ "@vitest/coverage-v8": "4.1.10",
108
+ "@vue/test-utils": "2.4.11",
109
+ "pinia": "3.0.4",
108
110
  "eslint": "10.7.0",
109
111
  "typescript": "5.9.3",
110
- "vue": "3.5.39",
111
- "vue-tsc": "^3.3.7"
112
+ "vue": "3.5.32",
113
+ "vue-tsc": "3.3.11",
114
+ "@composy/release": "^0.1.0"
112
115
  },
113
116
  "typings": "./es/index.d.ts",
114
117
  "browser": "./dist/index.js"
@@ -1,67 +0,0 @@
1
- /**
2
- * useOptimistic - 乐观更新 Hook
3
- *
4
- * 提供乐观更新模式:先立即更新 UI,再异步确认,失败时自动回滚
5
- * @module composables/useOptimistic
6
- */
7
- import type { Ref } from 'vue';
8
- /**
9
- * 乐观更新操作记录
10
- */
11
- export interface OptimisticEntry<T> {
12
- /** 操作 ID */
13
- id: string;
14
- /** 提交前的快照 */
15
- snapshot: T;
16
- /** 操作状态 */
17
- status: 'pending' | 'confirmed' | 'rolled-back';
18
- /** 时间戳 */
19
- timestamp: number;
20
- }
21
- /**
22
- * useOptimistic 返回值
23
- */
24
- export interface UseOptimisticReturn<T> {
25
- /** 响应式状态 */
26
- state: Ref<T>;
27
- /** 是否有挂起的操作 */
28
- isPending: Ref<boolean>;
29
- /** 挂起的操作记录 */
30
- pending: Ref<OptimisticEntry<T>[]>;
31
- /** 最近一次操作是否已回滚 */
32
- isRolledBack: Ref<boolean>;
33
- /** 执行乐观更新: 先 apply 新值,然后 confirm 异步确认 */
34
- mutate: (optimisticValue: T | ((prev: T) => T), confirm: () => Promise<void>) => Promise<void>;
35
- }
36
- /**
37
- * 乐观更新 Hook
38
- *
39
- * 先立即更新 UI(乐观),再执行异步确认操作。
40
- * 若确认失败则自动回滚到更新前的状态。
41
- *
42
- * @template T - 状态类型
43
- * @param initialState - 初始状态
44
- * @returns 乐观更新 API
45
- *
46
- * @example
47
- * ```typescript
48
- * const { state, isPending, isRolledBack, mutate } = useOptimistic({
49
- * items: ['Apple', 'Banana'],
50
- * })
51
- *
52
- * // 乐观添加
53
- * await mutate(
54
- * (prev) => ({ ...prev, items: [...prev.items, 'Cherry'] }),
55
- * async () => {
56
- * await fetch('/api/items', {
57
- * method: 'POST',
58
- * body: JSON.stringify({ name: 'Cherry' }),
59
- * })
60
- * }
61
- * )
62
- * // 成功: state 保持新值
63
- * // 失败: state 自动回滚到添加之前
64
- * ```
65
- */
66
- export declare function useOptimistic<T>(initialState: T): UseOptimisticReturn<T>;
67
- //# sourceMappingURL=useOptimistic.d.ts.map