@vlian/framework 1.2.59 → 1.2.61

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 (154) hide show
  1. package/dist/analytics/index.cjs +1 -22
  2. package/dist/analytics.umd.js +1 -1
  3. package/dist/components/LocaleSwitch.cjs +1 -116
  4. package/dist/components/ThemeSwitch.cjs +1 -115
  5. package/dist/components/index.cjs +1 -20
  6. package/dist/components/persistence.cjs +1 -58
  7. package/dist/core/Test.cjs +1 -64
  8. package/dist/core/app/AppContext.cjs +1 -348
  9. package/dist/core/app/AppContext.types.cjs +1 -4
  10. package/dist/core/app/BasicLayout.cjs +1 -122
  11. package/dist/core/app/DefaultApp.cjs +1 -150
  12. package/dist/core/app/index.cjs +1 -41
  13. package/dist/core/config/AppConfig.cjs +1 -139
  14. package/dist/core/config/ConfigLoader.cjs +1 -323
  15. package/dist/core/config/ConfigValidator.cjs +2 -133
  16. package/dist/core/config/index.cjs +1 -28
  17. package/dist/core/dev/DevTools.cjs +1 -226
  18. package/dist/core/error/ErrorBoundary.cjs +1 -401
  19. package/dist/core/error/ErrorHandler.cjs +1 -275
  20. package/dist/core/error/index.cjs +1 -34
  21. package/dist/core/event/AppEventBus.cjs +1 -444
  22. package/dist/core/event/frameworkEvents.cjs +1 -141
  23. package/dist/core/event/hooks.cjs +1 -69
  24. package/dist/core/event/index.cjs +1 -41
  25. package/dist/core/event/types.cjs +1 -62
  26. package/dist/core/event/useEventBus.cjs +1 -25
  27. package/dist/core/index.cjs +1 -140
  28. package/dist/core/initialization/InitializationErrorThrower.cjs +1 -75
  29. package/dist/core/initialization/index.cjs +1 -26
  30. package/dist/core/initialization/initialization.cjs +1 -64
  31. package/dist/core/initialization/initializationErrorState.cjs +1 -66
  32. package/dist/core/kernel/defaultAdapters.cjs +1 -184
  33. package/dist/core/kernel/errors.cjs +1 -69
  34. package/dist/core/kernel/index.cjs +1 -20
  35. package/dist/core/kernel/startKernel.cjs +1 -200
  36. package/dist/core/kernel/types.cjs +1 -4
  37. package/dist/core/middleware.cjs +1 -73
  38. package/dist/core/plugin/PluginEventBus.cjs +1 -298
  39. package/dist/core/plugin/PluginSandbox.cjs +1 -137
  40. package/dist/core/plugin.cjs +1 -494
  41. package/dist/core/router/RouterManager.cjs +1 -286
  42. package/dist/core/router/adapter/AdapterManager.cjs +1 -235
  43. package/dist/core/router/adapter/index.cjs +1 -22
  44. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -128
  45. package/dist/core/router/adapter/react-router/index.cjs +1 -20
  46. package/dist/core/router/adapter/types.cjs +1 -6
  47. package/dist/core/router/dev/RouterDevTools.cjs +1 -260
  48. package/dist/core/router/dev/index.cjs +1 -20
  49. package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -193
  50. package/dist/core/router/dynamic/index.cjs +1 -20
  51. package/dist/core/router/errors/RouterError.cjs +1 -61
  52. package/dist/core/router/errors/index.cjs +1 -20
  53. package/dist/core/router/index.cjs +1 -36
  54. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -144
  55. package/dist/core/router/lifecycle/index.cjs +1 -20
  56. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -193
  57. package/dist/core/router/middleware/auth.cjs +1 -66
  58. package/dist/core/router/middleware/index.cjs +1 -22
  59. package/dist/core/router/middleware/types.cjs +1 -6
  60. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -227
  61. package/dist/core/router/monitoring/index.cjs +1 -20
  62. package/dist/core/router/navigation/RouterNavigation.cjs +1 -239
  63. package/dist/core/router/navigation/index.cjs +1 -20
  64. package/dist/core/router/performance/RouteCache.cjs +1 -305
  65. package/dist/core/router/performance/RoutePreloader.cjs +1 -292
  66. package/dist/core/router/performance/index.cjs +1 -21
  67. package/dist/core/router/plugin/RouterPluginManager.cjs +1 -262
  68. package/dist/core/router/plugin/index.cjs +1 -21
  69. package/dist/core/router/plugin/types.cjs +1 -39
  70. package/dist/core/router/types.cjs +1 -4
  71. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -129
  72. package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -250
  73. package/dist/core/router/utils/transform.cjs +1 -780
  74. package/dist/core/router/validation/RouterConfigValidator.cjs +2 -83
  75. package/dist/core/router/validation/index.cjs +1 -21
  76. package/dist/core/router/validation/schema.cjs +1 -159
  77. package/dist/core/router/version/RouteVersionManager.cjs +1 -205
  78. package/dist/core/router/version/index.cjs +1 -20
  79. package/dist/core/splash/SplashScreen.cjs +1 -341
  80. package/dist/core/splash/index.cjs +1 -22
  81. package/dist/core/splash/splashScreenUtils.cjs +1 -38
  82. package/dist/core/startup/AppInstance.cjs +1 -239
  83. package/dist/core/startup/environment.cjs +1 -169
  84. package/dist/core/startup/index.cjs +1 -23
  85. package/dist/core/startup/initializeServices.cjs +1 -226
  86. package/dist/core/startup/performanceTracker.cjs +1 -179
  87. package/dist/core/startup/renderApp.cjs +1 -314
  88. package/dist/core/startup/startApp.cjs +1 -317
  89. package/dist/core/types.cjs +1 -4
  90. package/dist/index.cjs +1 -52
  91. package/dist/index.umd.cjs +1 -27
  92. package/dist/index.umd.js +1 -1
  93. package/dist/kernel/constants.cjs +1 -65
  94. package/dist/kernel/index.cjs +1 -38
  95. package/dist/kernel/kernel.cjs +1 -295
  96. package/dist/kernel/manager/cacheManager.cjs +1 -46
  97. package/dist/kernel/manager/i18n/I18nManager.cjs +1 -91
  98. package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -60
  99. package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -86
  100. package/dist/kernel/manager/i18n/index.cjs +1 -11
  101. package/dist/kernel/manager/i18nManager.cjs +1 -11
  102. package/dist/kernel/manager/index.cjs +1 -28
  103. package/dist/kernel/manager/logger/LoggerManager.cjs +1 -107
  104. package/dist/kernel/manager/logger/index.cjs +1 -11
  105. package/dist/kernel/manager/logger/logger.persistence.cjs +1 -62
  106. package/dist/kernel/manager/logger/logger.schema.cjs +1 -74
  107. package/dist/kernel/manager/loggerManager.cjs +1 -11
  108. package/dist/kernel/manager/theme/ThemeManager.cjs +1 -84
  109. package/dist/kernel/manager/theme/index.cjs +1 -11
  110. package/dist/kernel/manager/theme/theme.dom.cjs +1 -61
  111. package/dist/kernel/manager/theme/theme.persistence.cjs +1 -57
  112. package/dist/kernel/manager/theme/theme.schema.cjs +1 -122
  113. package/dist/kernel/manager/themeManager.cjs +1 -11
  114. package/dist/kernel/types.cjs +1 -4
  115. package/dist/library/index.cjs +1 -19
  116. package/dist/library/locale/index.cjs +1 -39
  117. package/dist/library/locale/langs/en-us/index.cjs +1 -32
  118. package/dist/library/locale/langs/zh-cn/index.cjs +1 -32
  119. package/dist/library/locale/types.cjs +1 -4
  120. package/dist/library/storage/cache.cjs +1 -243
  121. package/dist/library/storage/encryption.cjs +1 -147
  122. package/dist/library/storage/index.cjs +1 -124
  123. package/dist/state/StateManager.cjs +1 -166
  124. package/dist/state/adapters/AdapterFactory.cjs +1 -89
  125. package/dist/state/adapters/DefaultAdapter.cjs +1 -75
  126. package/dist/state/adapters/ReduxAdapter.cjs +1 -443
  127. package/dist/state/adapters/ZustandAdapter.cjs +1 -69
  128. package/dist/state/adapters/index.cjs +1 -44
  129. package/dist/state/adapters/types.cjs +1 -20
  130. package/dist/state/core/DerivedStateInstance.cjs +1 -174
  131. package/dist/state/core/StateInstance.cjs +1 -170
  132. package/dist/state/core/StateRegistry.cjs +1 -110
  133. package/dist/state/core/StateScope.cjs +1 -137
  134. package/dist/state/core/index.cjs +1 -30
  135. package/dist/state/index.cjs +1 -30
  136. package/dist/state/types.cjs +1 -12
  137. package/dist/state.umd.js +1 -1
  138. package/dist/types.cjs +1 -4
  139. package/dist/utils/analytics.cjs +1 -217
  140. package/dist/utils/configSecurity.cjs +3 -182
  141. package/dist/utils/csrf.cjs +1 -18
  142. package/dist/utils/errors/ErrorCodes.cjs +1 -25
  143. package/dist/utils/errors.cjs +1 -111
  144. package/dist/utils/index.cjs +1 -135
  145. package/dist/utils/logger.cjs +1 -25
  146. package/dist/utils/logger.types.cjs +1 -11
  147. package/dist/utils/monitoring.cjs +1 -18
  148. package/dist/utils/performance.cjs +1 -22
  149. package/dist/utils/resourceLoader.cjs +1 -22
  150. package/dist/utils/runtimeSecurity.cjs +1 -11
  151. package/dist/utils/security.cjs +1 -19
  152. package/dist/utils/traceId.cjs +1 -37
  153. package/dist/utils/validation.cjs +1 -19
  154. package/package.json +12 -3
@@ -1,443 +1 @@
1
- /**
2
- * Redux Toolkit 适配器
3
- *
4
- * 将 Redux Toolkit store 映射到 Secra 状态抽象
5
- *
6
- * 使用说明:
7
- * 1. 需要安装 @reduxjs/toolkit 作为 peerDependency
8
- * 2. 每个状态实例对应一个 Redux slice
9
- * 3. 支持 Redux DevTools 集成(如果可用)
10
- * 4. 支持中间件和开发模式
11
- *
12
- * @example
13
- * ```typescript
14
- * import { ReduxAdapter } from '@vlian/framework/state';
15
- *
16
- * const adapter = new ReduxAdapter({ devMode: true });
17
- * const state = adapter.createInstance(0, { id: 'counter' });
18
- *
19
- * state.set(1);
20
- * console.log(state.get()); // 1
21
- * ```
22
- */ "use strict";
23
- Object.defineProperty(exports, "__esModule", {
24
- value: true
25
- });
26
- Object.defineProperty(exports, "ReduxAdapter", {
27
- enumerable: true,
28
- get: function() {
29
- return ReduxAdapter;
30
- }
31
- });
32
- function _define_property(obj, key, value) {
33
- if (key in obj) {
34
- Object.defineProperty(obj, key, {
35
- value: value,
36
- enumerable: true,
37
- configurable: true,
38
- writable: true
39
- });
40
- } else {
41
- obj[key] = value;
42
- }
43
- return obj;
44
- }
45
- /**
46
- * Redux 状态实例实现
47
- *
48
- * 将 Redux slice 映射到 IStateInstance 接口
49
- *
50
- * @template T - 状态值类型
51
- */ let ReduxStateInstance = class ReduxStateInstance {
52
- /**
53
- * 获取当前状态值
54
- */ get() {
55
- if (this.destroyed) {
56
- throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`);
57
- }
58
- const state = this.store.getState();
59
- return state[this.sliceName] ?? this.previousValue;
60
- }
61
- /**
62
- * 更新状态值
63
- */ set(valueOrUpdater) {
64
- if (this.destroyed) {
65
- throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`);
66
- }
67
- const currentValue = this.get();
68
- let newValue;
69
- // 处理函数式更新
70
- if (typeof valueOrUpdater === 'function') {
71
- newValue = valueOrUpdater(currentValue);
72
- } else {
73
- newValue = valueOrUpdater;
74
- }
75
- // 应用中间件
76
- let processedValue = newValue;
77
- for (const middleware of this.middleware){
78
- processedValue = middleware(processedValue, currentValue);
79
- }
80
- // 如果值没有变化,跳过更新
81
- if (processedValue === currentValue) {
82
- return;
83
- }
84
- // 保存之前的值
85
- this.previousValue = currentValue;
86
- // 通过 Redux action 更新状态
87
- const action = this.actions.setValue(processedValue);
88
- this.store.dispatch(action);
89
- if (this.devMode) {
90
- console.debug(`[ReduxStateInstance] Updated: ${String(this.id)}`, {
91
- previous: currentValue,
92
- current: processedValue,
93
- action
94
- });
95
- }
96
- }
97
- /**
98
- * 订阅状态变化
99
- */ subscribe(subscriber) {
100
- if (this.destroyed) {
101
- throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`);
102
- }
103
- this.subscribers.add(subscriber);
104
- if (this.devMode) {
105
- console.debug(`[ReduxStateInstance] Subscribed: ${String(this.id)}`, {
106
- subscriberCount: this.subscribers.size
107
- });
108
- }
109
- // 返回取消订阅函数
110
- return ()=>{
111
- this.subscribers.delete(subscriber);
112
- if (this.devMode) {
113
- console.debug(`[ReduxStateInstance] Unsubscribed: ${String(this.id)}`, {
114
- subscriberCount: this.subscribers.size
115
- });
116
- }
117
- };
118
- }
119
- /**
120
- * 获取状态实例标识符
121
- */ getId() {
122
- return this.id;
123
- }
124
- /**
125
- * 获取状态作用域
126
- */ getScope() {
127
- return this.scope;
128
- }
129
- /**
130
- * 销毁状态实例
131
- */ destroy() {
132
- if (this.destroyed) {
133
- return;
134
- }
135
- this.destroyed = true;
136
- // 取消 Redux store 订阅
137
- if (this.unsubscribeStore) {
138
- this.unsubscribeStore();
139
- this.unsubscribeStore = undefined;
140
- }
141
- // 清理订阅者
142
- this.subscribers.clear();
143
- if (this.devMode) {
144
- console.debug(`[ReduxStateInstance] Destroyed: ${String(this.id)}`);
145
- }
146
- }
147
- /**
148
- * 检查状态实例是否已销毁
149
- */ isDestroyed() {
150
- return this.destroyed;
151
- }
152
- /**
153
- * 通知所有订阅者
154
- */ notifySubscribers() {
155
- if (this.destroyed) {
156
- return;
157
- }
158
- try {
159
- const currentValue = this.get();
160
- // 如果值没有变化,跳过通知
161
- if (currentValue === this.previousValue) {
162
- return;
163
- }
164
- const previousValue = this.previousValue;
165
- this.previousValue = currentValue;
166
- // 使用数组副本避免在迭代过程中修改集合
167
- const subscribers = Array.from(this.subscribers);
168
- for (const subscriber of subscribers){
169
- try {
170
- subscriber(currentValue, previousValue);
171
- } catch (error) {
172
- console.error(`[ReduxStateInstance] Error in subscriber for ${String(this.id)}:`, error);
173
- }
174
- }
175
- } catch (error) {
176
- console.error(`[ReduxStateInstance] Error getting state for ${String(this.id)}:`, error);
177
- }
178
- }
179
- /**
180
- * 构造函数
181
- *
182
- * @param store - Redux store 实例
183
- * @param sliceName - Redux slice 名称
184
- * @param actions - Redux slice actions
185
- * @param initialValue - 初始状态值
186
- * @param options - 状态实例配置选项
187
- */ constructor(store, sliceName, actions, initialValue, options = {}){
188
- /**
189
- * 状态实例标识符
190
- */ _define_property(this, "id", void 0);
191
- /**
192
- * 状态作用域
193
- */ _define_property(this, "scope", void 0);
194
- /**
195
- * Redux store 引用
196
- */ _define_property(this, "store", void 0);
197
- /**
198
- * Redux slice 名称(在 store 中的路径)
199
- */ _define_property(this, "sliceName", void 0);
200
- /**
201
- * Redux slice actions
202
- */ _define_property(this, "actions", void 0);
203
- /**
204
- * 订阅者集合
205
- */ _define_property(this, "subscribers", new Set());
206
- /**
207
- * Redux store 订阅取消函数
208
- */ _define_property(this, "unsubscribeStore", void 0);
209
- /**
210
- * 是否已销毁
211
- */ _define_property(this, "destroyed", false);
212
- /**
213
- * 开发模式标志
214
- */ _define_property(this, "devMode", void 0);
215
- /**
216
- * 中间件函数数组
217
- */ _define_property(this, "middleware", void 0);
218
- /**
219
- * 上一次的状态值(用于订阅通知)
220
- */ _define_property(this, "previousValue", void 0);
221
- this.store = store;
222
- this.sliceName = sliceName;
223
- this.actions = actions;
224
- this.id = options.id ?? Symbol('ReduxStateInstance');
225
- this.scope = options.scope;
226
- this.devMode = options.devMode ?? false;
227
- this.middleware = options.middleware ?? [];
228
- this.previousValue = initialValue;
229
- // 订阅 Redux store 变化
230
- this.unsubscribeStore = this.store.subscribe(()=>{
231
- this.notifySubscribers();
232
- });
233
- if (this.devMode) {
234
- console.debug(`[ReduxStateInstance] Created: ${String(this.id)}`, {
235
- scope: this.scope,
236
- sliceName: this.sliceName,
237
- initialValue
238
- });
239
- }
240
- }
241
- };
242
- /**
243
- * 动态 Reducer 管理器
244
- *
245
- * 用于管理动态添加和移除的 Redux reducer
246
- */ let DynamicReducerManager = class DynamicReducerManager {
247
- /**
248
- * 添加 reducer
249
- */ addReducer(key, reducer) {
250
- this.reducers.set(key, reducer);
251
- }
252
- /**
253
- * 移除 reducer
254
- */ removeReducer(key) {
255
- this.reducers.delete(key);
256
- }
257
- /**
258
- * 获取根 reducer
259
- */ getRootReducer() {
260
- return this.rootReducer;
261
- }
262
- /**
263
- * 检查 reducer 是否存在
264
- */ hasReducer(key) {
265
- return this.reducers.has(key);
266
- }
267
- /**
268
- * 构造函数
269
- */ constructor(){
270
- /**
271
- * 当前 reducer 映射
272
- */ _define_property(this, "reducers", new Map());
273
- /**
274
- * 根 reducer 函数
275
- */ _define_property(this, "rootReducer", void 0);
276
- this.rootReducer = (state, action)=>{
277
- const stateRecord = state ?? {};
278
- const newState = {
279
- ...stateRecord
280
- };
281
- // 处理每个 reducer
282
- for (const [key, reducer] of this.reducers.entries()){
283
- newState[key] = reducer(stateRecord[key], action);
284
- }
285
- return newState;
286
- };
287
- }
288
- };
289
- let ReduxAdapter = class ReduxAdapter {
290
- /**
291
- * 检查 Redux 是否可用
292
- */ checkReduxAvailable() {
293
- // 这里不抛出错误,允许延迟加载
294
- // 实际使用时会在 createInstance 时检查
295
- }
296
- /**
297
- * 获取或创建 Redux store
298
- */ getOrCreateStore() {
299
- if (this.store) {
300
- return this.store;
301
- }
302
- // 尝试创建 Redux store
303
- try {
304
- // 动态导入 Redux Toolkit
305
- // 注意:这里使用类型断言,实际运行时需要确保 Redux 已安装
306
- // eslint-disable-next-line @typescript-eslint/no-require-imports
307
- const { configureStore } = require('@reduxjs/toolkit');
308
- this.store = configureStore({
309
- reducer: this.reducerManager.getRootReducer(),
310
- devTools: this.devMode,
311
- middleware: undefined
312
- });
313
- if (this.devMode) {
314
- console.debug('[ReduxAdapter] Redux store created');
315
- }
316
- return this.store;
317
- } catch (error) {
318
- throw new Error('ReduxAdapter requires @reduxjs/toolkit to be installed. ' + 'Please install it: npm install @reduxjs/toolkit\n' + `Original error: ${error instanceof Error ? error.message : String(error)}`);
319
- }
320
- }
321
- /**
322
- * 创建 Redux slice
323
- */ createSlice(sliceName, initialValue) {
324
- try {
325
- // 动态导入 Redux Toolkit
326
- // eslint-disable-next-line @typescript-eslint/no-require-imports
327
- const { createSlice } = require('@reduxjs/toolkit');
328
- const slice = createSlice({
329
- name: sliceName,
330
- initialState: initialValue,
331
- reducers: {
332
- setValue: (_state, action)=>{
333
- return action.payload ?? initialValue;
334
- }
335
- }
336
- });
337
- return slice;
338
- } catch (error) {
339
- throw new Error('ReduxAdapter requires @reduxjs/toolkit to be installed. ' + 'Please install it: npm install @reduxjs/toolkit\n' + `Original error: ${error instanceof Error ? error.message : String(error)}`);
340
- }
341
- }
342
- /**
343
- * 创建状态实例
344
- */ createInstance(initialValue, options) {
345
- if (this.destroyed) {
346
- throw new Error('ReduxAdapter has been destroyed');
347
- }
348
- // 获取或创建 Redux store
349
- const store = this.getOrCreateStore();
350
- // 生成唯一的 slice 名称
351
- const sliceName = options?.id ? `secra_${String(options.id)}` : `secra_slice_${++this.sliceCounter}`;
352
- // 创建 Redux slice
353
- const slice = this.createSlice(sliceName, initialValue);
354
- // 将 slice reducer 添加到动态 reducer 管理器
355
- if (!this.reducerManager.hasReducer(sliceName)) {
356
- this.reducerManager.addReducer(sliceName, slice.reducer);
357
- // 更新 store 的 reducer(使用 replaceReducer)
358
- store.replaceReducer(this.reducerManager.getRootReducer());
359
- }
360
- // 创建状态实例
361
- const instance = new ReduxStateInstance(store, sliceName, slice.actions, initialValue, {
362
- id: options?.id,
363
- scope: options?.scope,
364
- devMode: options?.devMode ?? this.devMode,
365
- middleware: options?.middleware
366
- });
367
- this.instances.add(instance);
368
- this.sliceToInstance.set(sliceName, instance);
369
- if (this.devMode) {
370
- console.debug(`[ReduxAdapter] Created instance: ${String(instance.getId())}`, {
371
- sliceName,
372
- scope: options?.scope
373
- });
374
- }
375
- return instance;
376
- }
377
- /**
378
- * 销毁适配器
379
- */ destroy() {
380
- if (this.destroyed) {
381
- return;
382
- }
383
- // 销毁所有创建的状态实例
384
- for (const instance of this.instances){
385
- instance.destroy();
386
- }
387
- // 从 reducer 管理器中移除所有 reducer
388
- for (const sliceName of this.sliceToInstance.keys()){
389
- this.reducerManager.removeReducer(sliceName);
390
- }
391
- // 更新 store 的 reducer
392
- if (this.store) {
393
- this.store.replaceReducer(this.reducerManager.getRootReducer());
394
- }
395
- this.instances.clear();
396
- this.sliceToInstance.clear();
397
- this.store = null;
398
- this.destroyed = true;
399
- if (this.devMode) {
400
- console.debug('[ReduxAdapter] Destroyed');
401
- }
402
- }
403
- /**
404
- * 获取适配器名称
405
- */ getName() {
406
- return this.name;
407
- }
408
- /**
409
- * 构造函数
410
- *
411
- * @param options - 适配器配置选项
412
- */ constructor(options){
413
- /**
414
- * 适配器名称
415
- */ _define_property(this, "name", 'ReduxAdapter');
416
- /**
417
- * 是否已销毁
418
- */ _define_property(this, "destroyed", false);
419
- /**
420
- * 创建的状态实例集合
421
- */ _define_property(this, "instances", new Set());
422
- /**
423
- * Redux store 实例
424
- */ _define_property(this, "store", null);
425
- /**
426
- * Redux slice 名称计数器(用于生成唯一的 slice 名称)
427
- */ _define_property(this, "sliceCounter", 0);
428
- /**
429
- * Redux slice 名称到状态实例的映射
430
- */ _define_property(this, "sliceToInstance", new Map());
431
- /**
432
- * 动态 reducer 管理器
433
- */ _define_property(this, "reducerManager", void 0);
434
- /**
435
- * 是否启用开发模式
436
- */ _define_property(this, "devMode", void 0);
437
- this.devMode = options?.devMode ?? false;
438
- this.reducerManager = new DynamicReducerManager();
439
- this.store = options?.store ?? null;
440
- // 检查 Redux 是否可用
441
- this.checkReduxAvailable();
442
- }
443
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ReduxAdapter",{enumerable:true,get:function(){return ReduxAdapter}});function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ReduxStateInstance=class ReduxStateInstance{get(){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const state=this.store.getState();return state[this.sliceName]??this.previousValue}set(valueOrUpdater){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}const currentValue=this.get();let newValue;if(typeof valueOrUpdater==="function"){newValue=valueOrUpdater(currentValue)}else{newValue=valueOrUpdater}let processedValue=newValue;for(const middleware of this.middleware){processedValue=middleware(processedValue,currentValue)}if(processedValue===currentValue){return}this.previousValue=currentValue;const action=this.actions.setValue(processedValue);this.store.dispatch(action);if(this.devMode){console.debug(`[ReduxStateInstance] Updated: ${String(this.id)}`,{previous:currentValue,current:processedValue,action})}}subscribe(subscriber){if(this.destroyed){throw new Error(`ReduxStateInstance ${String(this.id)} has been destroyed`)}this.subscribers.add(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Subscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size})}return()=>{this.subscribers.delete(subscriber);if(this.devMode){console.debug(`[ReduxStateInstance] Unsubscribed: ${String(this.id)}`,{subscriberCount:this.subscribers.size})}}}getId(){return this.id}getScope(){return this.scope}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.unsubscribeStore){this.unsubscribeStore();this.unsubscribeStore=undefined}this.subscribers.clear();if(this.devMode){console.debug(`[ReduxStateInstance] Destroyed: ${String(this.id)}`)}}isDestroyed(){return this.destroyed}notifySubscribers(){if(this.destroyed){return}try{const currentValue=this.get();if(currentValue===this.previousValue){return}const previousValue=this.previousValue;this.previousValue=currentValue;const subscribers=Array.from(this.subscribers);for(const subscriber of subscribers){try{subscriber(currentValue,previousValue)}catch(error){console.error(`[ReduxStateInstance] Error in subscriber for ${String(this.id)}:`,error)}}}catch(error){console.error(`[ReduxStateInstance] Error getting state for ${String(this.id)}:`,error)}}constructor(store,sliceName,actions,initialValue,options={}){_define_property(this,"id",void 0);_define_property(this,"scope",void 0);_define_property(this,"store",void 0);_define_property(this,"sliceName",void 0);_define_property(this,"actions",void 0);_define_property(this,"subscribers",new Set);_define_property(this,"unsubscribeStore",void 0);_define_property(this,"destroyed",false);_define_property(this,"devMode",void 0);_define_property(this,"middleware",void 0);_define_property(this,"previousValue",void 0);this.store=store;this.sliceName=sliceName;this.actions=actions;this.id=options.id??Symbol("ReduxStateInstance");this.scope=options.scope;this.devMode=options.devMode??false;this.middleware=options.middleware??[];this.previousValue=initialValue;this.unsubscribeStore=this.store.subscribe(()=>{this.notifySubscribers()});if(this.devMode){console.debug(`[ReduxStateInstance] Created: ${String(this.id)}`,{scope:this.scope,sliceName:this.sliceName,initialValue})}}};let DynamicReducerManager=class DynamicReducerManager{addReducer(key,reducer){this.reducers.set(key,reducer)}removeReducer(key){this.reducers.delete(key)}getRootReducer(){return this.rootReducer}hasReducer(key){return this.reducers.has(key)}constructor(){_define_property(this,"reducers",new Map);_define_property(this,"rootReducer",void 0);this.rootReducer=(state,action)=>{const stateRecord=state??{};const newState={...stateRecord};for(const[key,reducer]of this.reducers.entries()){newState[key]=reducer(stateRecord[key],action)}return newState}}};let ReduxAdapter=class ReduxAdapter{checkReduxAvailable(){}getOrCreateStore(){if(this.store){return this.store}try{const{configureStore}=require("@reduxjs/toolkit");this.store=configureStore({reducer:this.reducerManager.getRootReducer(),devTools:this.devMode,middleware:undefined});if(this.devMode){console.debug("[ReduxAdapter] Redux store created")}return this.store}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createSlice(sliceName,initialValue){try{const{createSlice}=require("@reduxjs/toolkit");const slice=createSlice({name:sliceName,initialState:initialValue,reducers:{setValue:(_state,action)=>{return action.payload??initialValue}}});return slice}catch(error){throw new Error("ReduxAdapter requires @reduxjs/toolkit to be installed. "+"Please install it: npm install @reduxjs/toolkit\n"+`Original error: ${error instanceof Error?error.message:String(error)}`)}}createInstance(initialValue,options){if(this.destroyed){throw new Error("ReduxAdapter has been destroyed")}const store=this.getOrCreateStore();const sliceName=options?.id?`secra_${String(options.id)}`:`secra_slice_${++this.sliceCounter}`;const slice=this.createSlice(sliceName,initialValue);if(!this.reducerManager.hasReducer(sliceName)){this.reducerManager.addReducer(sliceName,slice.reducer);store.replaceReducer(this.reducerManager.getRootReducer())}const instance=new ReduxStateInstance(store,sliceName,slice.actions,initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode??this.devMode,middleware:options?.middleware});this.instances.add(instance);this.sliceToInstance.set(sliceName,instance);if(this.devMode){console.debug(`[ReduxAdapter] Created instance: ${String(instance.getId())}`,{sliceName,scope:options?.scope})}return instance}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy()}for(const sliceName of this.sliceToInstance.keys()){this.reducerManager.removeReducer(sliceName)}if(this.store){this.store.replaceReducer(this.reducerManager.getRootReducer())}this.instances.clear();this.sliceToInstance.clear();this.store=null;this.destroyed=true;if(this.devMode){console.debug("[ReduxAdapter] Destroyed")}}getName(){return this.name}constructor(options){_define_property(this,"name","ReduxAdapter");_define_property(this,"destroyed",false);_define_property(this,"instances",new Set);_define_property(this,"store",null);_define_property(this,"sliceCounter",0);_define_property(this,"sliceToInstance",new Map);_define_property(this,"reducerManager",void 0);_define_property(this,"devMode",void 0);this.devMode=options?.devMode??false;this.reducerManager=new DynamicReducerManager;this.store=options?.store??null;this.checkReduxAvailable()}};
@@ -1,69 +1 @@
1
- /**
2
- * Zustand 适配器(占位实现)
3
- *
4
- * 这是一个适配器接口示例,展示如何将 Zustand 集成到 Secra 状态管理器
5
- *
6
- * ⚠️ 注意:这是一个占位实现,实际使用时需要安装 zustand 依赖
7
- */ "use strict";
8
- Object.defineProperty(exports, "__esModule", {
9
- value: true
10
- });
11
- Object.defineProperty(exports, "ZustandAdapter", {
12
- enumerable: true,
13
- get: function() {
14
- return ZustandAdapter;
15
- }
16
- });
17
- function _define_property(obj, key, value) {
18
- if (key in obj) {
19
- Object.defineProperty(obj, key, {
20
- value: value,
21
- enumerable: true,
22
- configurable: true,
23
- writable: true
24
- });
25
- } else {
26
- obj[key] = value;
27
- }
28
- return obj;
29
- }
30
- let ZustandAdapter = class ZustandAdapter {
31
- /**
32
- * 创建状态实例
33
- *
34
- * ⚠️ 占位实现:实际使用时需要创建 Zustand store 并映射到 IStateInstance
35
- */ createInstance(_initialValue, _options) {
36
- if (this.destroyed) {
37
- throw new Error('Adapter has been destroyed');
38
- }
39
- throw new Error('ZustandAdapter is a placeholder implementation. ' + 'To use Zustand, you need to:\n' + '1. Install zustand\n' + '2. Implement a complete Zustand store integration\n' + '3. Map Zustand store methods to IStateInstance interface\n' + 'See docs/state-manager.md for implementation guide.');
40
- }
41
- /**
42
- * 销毁适配器
43
- */ destroy() {
44
- if (this.destroyed) {
45
- return;
46
- }
47
- for (const instance of this.instances){
48
- instance.destroy();
49
- }
50
- this.instances.clear();
51
- this.destroyed = true;
52
- }
53
- /**
54
- * 获取适配器名称
55
- */ getName() {
56
- return this.name;
57
- }
58
- constructor(){
59
- /**
60
- * 适配器名称
61
- */ _define_property(this, "name", 'ZustandAdapter');
62
- /**
63
- * 是否已销毁
64
- */ _define_property(this, "destroyed", false);
65
- /**
66
- * 创建的状态实例集合
67
- */ _define_property(this, "instances", new Set());
68
- }
69
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ZustandAdapter",{enumerable:true,get:function(){return ZustandAdapter}});function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ZustandAdapter=class ZustandAdapter{createInstance(_initialValue,_options){if(this.destroyed){throw new Error("Adapter has been destroyed")}throw new Error("ZustandAdapter is a placeholder implementation. "+"To use Zustand, you need to:\n"+"1. Install zustand\n"+"2. Implement a complete Zustand store integration\n"+"3. Map Zustand store methods to IStateInstance interface\n"+"See docs/state-manager.md for implementation guide.")}destroy(){if(this.destroyed){return}for(const instance of this.instances){instance.destroy()}this.instances.clear();this.destroyed=true}getName(){return this.name}constructor(){_define_property(this,"name","ZustandAdapter");_define_property(this,"destroyed",false);_define_property(this,"instances",new Set)}};
@@ -1,44 +1 @@
1
- /**
2
- * 状态适配器模块导出
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- function _export(target, all) {
8
- for(var name in all)Object.defineProperty(target, name, {
9
- enumerable: true,
10
- get: Object.getOwnPropertyDescriptor(all, name).get
11
- });
12
- }
13
- _export(exports, {
14
- get AdapterFactory () {
15
- return _AdapterFactory.AdapterFactory;
16
- },
17
- get DefaultAdapter () {
18
- return _DefaultAdapter.DefaultAdapter;
19
- },
20
- get ReduxAdapter () {
21
- return _ReduxAdapter.ReduxAdapter;
22
- },
23
- get ZustandAdapter () {
24
- return _ZustandAdapter.ZustandAdapter;
25
- }
26
- });
27
- const _DefaultAdapter = require("./DefaultAdapter");
28
- const _AdapterFactory = require("./AdapterFactory");
29
- const _ReduxAdapter = require("./ReduxAdapter");
30
- const _ZustandAdapter = require("./ZustandAdapter");
31
- _export_star(require("./types"), exports);
32
- function _export_star(from, to) {
33
- Object.keys(from).forEach(function(k) {
34
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
35
- Object.defineProperty(to, k, {
36
- enumerable: true,
37
- get: function() {
38
- return from[k];
39
- }
40
- });
41
- }
42
- });
43
- return from;
44
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get AdapterFactory(){return _AdapterFactory.AdapterFactory},get DefaultAdapter(){return _DefaultAdapter.DefaultAdapter},get ReduxAdapter(){return _ReduxAdapter.ReduxAdapter},get ZustandAdapter(){return _ZustandAdapter.ZustandAdapter}});const _DefaultAdapter=require("./DefaultAdapter");const _AdapterFactory=require("./AdapterFactory");const _ReduxAdapter=require("./ReduxAdapter");const _ZustandAdapter=require("./ZustandAdapter");_export_star(require("./types"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
@@ -1,20 +1 @@
1
- /**
2
- * 状态适配器类型定义
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- _export_star(require("../types"), exports);
8
- function _export_star(from, to) {
9
- Object.keys(from).forEach(function(k) {
10
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
11
- Object.defineProperty(to, k, {
12
- enumerable: true,
13
- get: function() {
14
- return from[k];
15
- }
16
- });
17
- }
18
- });
19
- return from;
20
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("../types"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}