@vlian/framework 1.2.59 → 1.2.60

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 +7 -3
@@ -1,147 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "EncryptionUtils", {
6
- enumerable: true,
7
- get: function() {
8
- return EncryptionUtils;
9
- }
10
- });
11
- const _utils = require("@vlian/utils");
12
- let EncryptionUtils = class EncryptionUtils {
13
- /**
14
- * 生成加密密钥
15
- */ static async generateKey() {
16
- if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {
17
- throw new _utils.StorageError('加密功能需要浏览器支持 Web Crypto API');
18
- }
19
- try {
20
- return await window.crypto.subtle.generateKey({
21
- name: 'AES-GCM',
22
- length: 256
23
- }, true, [
24
- 'encrypt',
25
- 'decrypt'
26
- ]);
27
- } catch (error) {
28
- throw new _utils.StorageError('生成加密密钥失败', error instanceof Error ? error : undefined);
29
- }
30
- }
31
- /**
32
- * 使用 PBKDF2 派生密钥
33
- */ static async deriveKey(password, salt, iterations = 100000) {
34
- if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {
35
- throw new _utils.StorageError('加密功能需要浏览器支持 Web Crypto API');
36
- }
37
- try {
38
- // 导入密码
39
- const encoder = new TextEncoder();
40
- const passwordKey = await window.crypto.subtle.importKey('raw', encoder.encode(password), 'PBKDF2', false, [
41
- 'deriveBits',
42
- 'deriveKey'
43
- ]);
44
- // 使用 PBKDF2 派生密钥
45
- // 确保 salt 是 BufferSource 类型(使用类型断言)
46
- const saltBuffer = salt instanceof Uint8Array ? salt : new Uint8Array(salt);
47
- return await window.crypto.subtle.deriveKey({
48
- name: 'PBKDF2',
49
- salt: saltBuffer,
50
- iterations: iterations,
51
- hash: 'SHA-256'
52
- }, passwordKey, {
53
- name: 'AES-GCM',
54
- length: 256
55
- }, false, [
56
- 'encrypt',
57
- 'decrypt'
58
- ]);
59
- } catch (error) {
60
- throw new _utils.StorageError('密钥派生失败', error instanceof Error ? error : undefined);
61
- }
62
- }
63
- /**
64
- * 从字符串导入密钥(使用 PBKDF2 派生)
65
- *
66
- * 注意:如果没有提供 salt,每次调用都会生成新的 salt,导致密钥不一致。
67
- * 建议在生产环境中使用固定的 salt 或从安全存储中获取。
68
- */ static async importKey(keyString, salt) {
69
- if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {
70
- throw new _utils.StorageError('加密功能需要浏览器支持 Web Crypto API');
71
- }
72
- try {
73
- // 如果没有提供 salt,尝试从 sessionStorage 获取或生成一个固定的
74
- let keySalt = salt;
75
- if (!keySalt) {
76
- // 尝试从 sessionStorage 获取固定的 salt(用于当前会话)
77
- const saltKey = '__encryption_salt__';
78
- const storedSalt = sessionStorage.getItem(saltKey);
79
- if (storedSalt) {
80
- // 从存储中恢复 salt
81
- const saltArray = Uint8Array.from(JSON.parse(storedSalt));
82
- keySalt = saltArray;
83
- } else {
84
- // 生成新的 salt 并存储(用于当前会话)
85
- keySalt = window.crypto.getRandomValues(new Uint8Array(16));
86
- sessionStorage.setItem(saltKey, JSON.stringify(Array.from(keySalt)));
87
- }
88
- }
89
- // 使用 PBKDF2 派生密钥
90
- return await this.deriveKey(keyString, keySalt);
91
- } catch (error) {
92
- throw new _utils.StorageError('导入加密密钥失败', error instanceof Error ? error : undefined);
93
- }
94
- }
95
- /**
96
- * 加密数据
97
- */ static async encrypt(data, key) {
98
- if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {
99
- throw new _utils.StorageError('加密功能需要浏览器支持 Web Crypto API');
100
- }
101
- try {
102
- const encoder = new TextEncoder();
103
- const dataBuffer = encoder.encode(data);
104
- // 生成随机 IV
105
- const iv = window.crypto.getRandomValues(new Uint8Array(12));
106
- const encrypted = await window.crypto.subtle.encrypt({
107
- name: 'AES-GCM',
108
- iv: iv
109
- }, key, dataBuffer);
110
- // 将 IV 和加密数据组合
111
- const combined = new Uint8Array(iv.length + encrypted.byteLength);
112
- combined.set(iv);
113
- combined.set(new Uint8Array(encrypted), iv.length);
114
- // 转换为 Base64
115
- return btoa(String.fromCharCode(...combined));
116
- } catch (error) {
117
- throw new _utils.StorageError('加密数据失败', error instanceof Error ? error : undefined);
118
- }
119
- }
120
- /**
121
- * 解密数据
122
- */ static async decrypt(encryptedData, key) {
123
- if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {
124
- throw new _utils.StorageError('解密功能需要浏览器支持 Web Crypto API');
125
- }
126
- try {
127
- // 从 Base64 解码
128
- const combined = Uint8Array.from(atob(encryptedData), (c)=>c.charCodeAt(0));
129
- // 提取 IV 和加密数据
130
- const iv = combined.slice(0, 12);
131
- const encrypted = combined.slice(12);
132
- const decrypted = await window.crypto.subtle.decrypt({
133
- name: 'AES-GCM',
134
- iv: iv
135
- }, key, encrypted);
136
- const decoder = new TextDecoder();
137
- return decoder.decode(decrypted);
138
- } catch (error) {
139
- throw new _utils.StorageError('解密数据失败', error instanceof Error ? error : undefined);
140
- }
141
- }
142
- /**
143
- * 检查字段是否需要加密
144
- */ static shouldEncrypt(key) {
145
- return _utils.SecurityUtils.isSensitiveField(key);
146
- }
147
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"EncryptionUtils",{enumerable:true,get:function(){return EncryptionUtils}});const _utils=require("@vlian/utils");let EncryptionUtils=class EncryptionUtils{static async generateKey(){if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new _utils.StorageError("加密功能需要浏览器支持 Web Crypto API")}try{return await window.crypto.subtle.generateKey({name:"AES-GCM",length:256},true,["encrypt","decrypt"])}catch(error){throw new _utils.StorageError("生成加密密钥失败",error instanceof Error?error:undefined)}}static async deriveKey(password,salt,iterations=1e5){if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new _utils.StorageError("加密功能需要浏览器支持 Web Crypto API")}try{const encoder=new TextEncoder;const passwordKey=await window.crypto.subtle.importKey("raw",encoder.encode(password),"PBKDF2",false,["deriveBits","deriveKey"]);const saltBuffer=salt instanceof Uint8Array?salt:new Uint8Array(salt);return await window.crypto.subtle.deriveKey({name:"PBKDF2",salt:saltBuffer,iterations:iterations,hash:"SHA-256"},passwordKey,{name:"AES-GCM",length:256},false,["encrypt","decrypt"])}catch(error){throw new _utils.StorageError("密钥派生失败",error instanceof Error?error:undefined)}}static async importKey(keyString,salt){if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new _utils.StorageError("加密功能需要浏览器支持 Web Crypto API")}try{let keySalt=salt;if(!keySalt){const saltKey="__encryption_salt__";const storedSalt=sessionStorage.getItem(saltKey);if(storedSalt){const saltArray=Uint8Array.from(JSON.parse(storedSalt));keySalt=saltArray}else{keySalt=window.crypto.getRandomValues(new Uint8Array(16));sessionStorage.setItem(saltKey,JSON.stringify(Array.from(keySalt)))}}return await this.deriveKey(keyString,keySalt)}catch(error){throw new _utils.StorageError("导入加密密钥失败",error instanceof Error?error:undefined)}}static async encrypt(data,key){if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new _utils.StorageError("加密功能需要浏览器支持 Web Crypto API")}try{const encoder=new TextEncoder;const dataBuffer=encoder.encode(data);const iv=window.crypto.getRandomValues(new Uint8Array(12));const encrypted=await window.crypto.subtle.encrypt({name:"AES-GCM",iv:iv},key,dataBuffer);const combined=new Uint8Array(iv.length+encrypted.byteLength);combined.set(iv);combined.set(new Uint8Array(encrypted),iv.length);return btoa(String.fromCharCode(...combined))}catch(error){throw new _utils.StorageError("加密数据失败",error instanceof Error?error:undefined)}}static async decrypt(encryptedData,key){if(typeof window==="undefined"||!window.crypto||!window.crypto.subtle){throw new _utils.StorageError("解密功能需要浏览器支持 Web Crypto API")}try{const combined=Uint8Array.from(atob(encryptedData),c=>c.charCodeAt(0));const iv=combined.slice(0,12);const encrypted=combined.slice(12);const decrypted=await window.crypto.subtle.decrypt({name:"AES-GCM",iv:iv},key,encrypted);const decoder=new TextDecoder;return decoder.decode(decrypted)}catch(error){throw new _utils.StorageError("解密数据失败",error instanceof Error?error:undefined)}}static shouldEncrypt(key){return _utils.SecurityUtils.isSensitiveField(key)}};
@@ -1,124 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get EncryptionUtils () {
13
- return _encryption.EncryptionUtils;
14
- },
15
- get MultiLevelCache () {
16
- return _cache.MultiLevelCache;
17
- },
18
- get storage () {
19
- return storage;
20
- }
21
- });
22
- const _utils = require("@vlian/utils");
23
- const _cache = require("./cache");
24
- const _encryption = require("./encryption");
25
- function _define_property(obj, key, value) {
26
- if (key in obj) {
27
- Object.defineProperty(obj, key, {
28
- value: value,
29
- enumerable: true,
30
- configurable: true,
31
- writable: true
32
- });
33
- } else {
34
- obj[key] = value;
35
- }
36
- return obj;
37
- }
38
- let Storage = class Storage {
39
- get local() {
40
- return this._local;
41
- }
42
- get session() {
43
- return this._session;
44
- }
45
- get indexedDB() {
46
- return this._indexedDB;
47
- }
48
- /**
49
- * 获取本地存储缓存
50
- */ get localCache() {
51
- return this._localCache;
52
- }
53
- /**
54
- * 获取会话存储缓存
55
- */ get sessionCache() {
56
- return this._sessionCache;
57
- }
58
- /**
59
- * 获取单例实例
60
- *
61
- * @returns Singleton 实例
62
- */ static getInstance() {
63
- if (!Storage.instance) {
64
- Storage.instance = new Storage();
65
- }
66
- return Storage.instance;
67
- }
68
- initialize(options) {
69
- const local = (0, _utils.createStorage)({
70
- type: 'local',
71
- prefix: options?.prefix || 'vlian',
72
- defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000
73
- });
74
- const session = (0, _utils.createStorage)({
75
- type: 'session',
76
- prefix: options?.prefix || 'vlian',
77
- defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000
78
- });
79
- const indexedDB = (0, _utils.createStorage)({
80
- type: 'indexedDB',
81
- prefix: options?.prefix || 'vlian',
82
- defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,
83
- dbName: options?.tableName
84
- });
85
- this._local = local;
86
- this._session = session;
87
- this._indexedDB = indexedDB;
88
- // 初始化缓存
89
- this.cacheEnabled = options?.cache?.enabled ?? false;
90
- if (this.cacheEnabled) {
91
- this._localCache = new _cache.MultiLevelCache(local, {
92
- defaultTTL: options?.cache?.defaultTTL,
93
- maxSize: options?.cache?.maxSize
94
- });
95
- this._sessionCache = new _cache.MultiLevelCache(session, {
96
- defaultTTL: options?.cache?.defaultTTL,
97
- maxSize: options?.cache?.maxSize
98
- });
99
- }
100
- }
101
- /**
102
- * 清理过期缓存
103
- */ async cleanupCache() {
104
- if (this._localCache) {
105
- await this._localCache.cleanup();
106
- }
107
- if (this._sessionCache) {
108
- await this._sessionCache.cleanup();
109
- }
110
- }
111
- /**
112
- * 私有构造函数,防止外部直接实例化
113
- */ constructor(){
114
- _define_property(this, "_local", void 0);
115
- _define_property(this, "_session", void 0);
116
- _define_property(this, "_indexedDB", void 0);
117
- _define_property(this, "_localCache", void 0);
118
- _define_property(this, "_sessionCache", void 0);
119
- _define_property(this, "cacheEnabled", false);
120
- // 私有构造函数
121
- }
122
- };
123
- _define_property(Storage, "instance", null);
124
- const storage = Storage.getInstance();
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 EncryptionUtils(){return _encryption.EncryptionUtils},get MultiLevelCache(){return _cache.MultiLevelCache},get storage(){return storage}});const _utils=require("@vlian/utils");const _cache=require("./cache");const _encryption=require("./encryption");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 Storage=class Storage{get local(){return this._local}get session(){return this._session}get indexedDB(){return this._indexedDB}get localCache(){return this._localCache}get sessionCache(){return this._sessionCache}static getInstance(){if(!Storage.instance){Storage.instance=new Storage}return Storage.instance}initialize(options){const local=(0,_utils.createStorage)({type:"local",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3});const session=(0,_utils.createStorage)({type:"session",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3});const indexedDB=(0,_utils.createStorage)({type:"indexedDB",prefix:options?.prefix||"vlian",defaultExpire:options?.defaultExpire||24*60*60*1e3,dbName:options?.tableName});this._local=local;this._session=session;this._indexedDB=indexedDB;this.cacheEnabled=options?.cache?.enabled??false;if(this.cacheEnabled){this._localCache=new _cache.MultiLevelCache(local,{defaultTTL:options?.cache?.defaultTTL,maxSize:options?.cache?.maxSize});this._sessionCache=new _cache.MultiLevelCache(session,{defaultTTL:options?.cache?.defaultTTL,maxSize:options?.cache?.maxSize})}}async cleanupCache(){if(this._localCache){await this._localCache.cleanup()}if(this._sessionCache){await this._sessionCache.cleanup()}}constructor(){_define_property(this,"_local",void 0);_define_property(this,"_session",void 0);_define_property(this,"_indexedDB",void 0);_define_property(this,"_localCache",void 0);_define_property(this,"_sessionCache",void 0);_define_property(this,"cacheEnabled",false)}};_define_property(Storage,"instance",null);const storage=Storage.getInstance();
@@ -1,166 +1 @@
1
- /**
2
- * 状态管理器主类
3
- *
4
- * 这是状态管理器的核心入口,提供统一的状态管理 API
5
- */ "use strict";
6
- Object.defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- Object.defineProperty(exports, "StateManager", {
10
- enumerable: true,
11
- get: function() {
12
- return StateManager;
13
- }
14
- });
15
- const _AdapterFactory = require("./adapters/AdapterFactory");
16
- const _StateRegistry = require("./core/StateRegistry");
17
- const _DerivedStateInstance = require("./core/DerivedStateInstance");
18
- function _define_property(obj, key, value) {
19
- if (key in obj) {
20
- Object.defineProperty(obj, key, {
21
- value: value,
22
- enumerable: true,
23
- configurable: true,
24
- writable: true
25
- });
26
- } else {
27
- obj[key] = value;
28
- }
29
- return obj;
30
- }
31
- let StateManager = class StateManager {
32
- /**
33
- * 创建状态实例
34
- */ createState(initialValue, options) {
35
- if (this.destroyed) {
36
- throw new Error('StateManager has been destroyed');
37
- }
38
- // 合并默认作用域
39
- const mergedOptions = {
40
- ...options,
41
- scope: options?.scope ?? this.defaultScope,
42
- devMode: options?.devMode ?? this.devMode
43
- };
44
- // 使用适配器创建状态实例
45
- const instance = this.adapter.createInstance(initialValue, mergedOptions);
46
- // 如果启用了注册表,注册实例
47
- if (this.registry) {
48
- // 类型转换:注册表接受 IStateInstance<unknown>,但实际类型是 IStateInstance<T>
49
- this.registry.register(instance);
50
- }
51
- return instance;
52
- }
53
- /**
54
- * 创建派生状态
55
- */ createDerivedState(config, options) {
56
- if (this.destroyed) {
57
- throw new Error('StateManager has been destroyed');
58
- }
59
- const mergedOptions = {
60
- ...options,
61
- scope: options?.scope ?? this.defaultScope
62
- };
63
- const instance = new _DerivedStateInstance.DerivedStateInstance(config, mergedOptions);
64
- // 如果启用了注册表,注册实例
65
- if (this.registry) {
66
- this.registry.register(instance);
67
- }
68
- return instance;
69
- }
70
- /**
71
- * 获取状态实例(如果启用了注册表)
72
- */ getState(id) {
73
- if (!this.registry) {
74
- throw new Error('Registry is not enabled. Enable it in StateManagerOptions.');
75
- }
76
- return this.registry.getInstance(id);
77
- }
78
- /**
79
- * 根据作用域获取所有状态实例
80
- */ getStatesByScope(scope) {
81
- if (!this.registry) {
82
- throw new Error('Registry is not enabled. Enable it in StateManagerOptions.');
83
- }
84
- return this.registry.getInstancesByScope(scope);
85
- }
86
- /**
87
- * 获取所有状态实例
88
- */ getAllStates() {
89
- if (!this.registry) {
90
- throw new Error('Registry is not enabled. Enable it in StateManagerOptions.');
91
- }
92
- return this.registry.getAllInstances();
93
- }
94
- /**
95
- * 销毁指定作用域的所有状态实例
96
- */ destroyScope(scope) {
97
- if (!this.registry) {
98
- throw new Error('Registry is not enabled. Enable it in StateManagerOptions.');
99
- }
100
- this.registry.destroyScope(scope);
101
- }
102
- /**
103
- * 销毁状态管理器
104
- */ destroy() {
105
- if (this.destroyed) {
106
- return;
107
- }
108
- this.destroyed = true;
109
- // 销毁注册表中的所有实例
110
- if (this.registry) {
111
- this.registry.destroyAll();
112
- }
113
- // 销毁适配器
114
- this.adapter.destroy();
115
- if (this.devMode) {
116
- console.debug('[StateManager] Destroyed');
117
- }
118
- }
119
- /**
120
- * 检查状态管理器是否已销毁
121
- */ isDestroyed() {
122
- return this.destroyed;
123
- }
124
- /**
125
- * 获取当前使用的适配器
126
- */ getAdapter() {
127
- return this.adapter;
128
- }
129
- /**
130
- * 获取注册表(如果启用)
131
- */ getRegistry() {
132
- return this.registry;
133
- }
134
- /**
135
- * 构造函数
136
- *
137
- * @param options - 状态管理器配置选项
138
- */ constructor(options = {}){
139
- /**
140
- * 默认适配器
141
- */ _define_property(this, "adapter", void 0);
142
- /**
143
- * 状态注册表(如果启用)
144
- */ _define_property(this, "registry", void 0);
145
- /**
146
- * 默认作用域
147
- */ _define_property(this, "defaultScope", void 0);
148
- /**
149
- * 是否启用开发模式
150
- */ _define_property(this, "devMode", void 0);
151
- /**
152
- * 是否已销毁
153
- */ _define_property(this, "destroyed", false);
154
- this.adapter = options.defaultAdapter ?? _AdapterFactory.AdapterFactory.getDefaultAdapter();
155
- this.defaultScope = options.defaultScope;
156
- this.devMode = options.devMode ?? false;
157
- this.registry = options.enableRegistry !== false ? new _StateRegistry.StateRegistry() : null;
158
- if (this.devMode) {
159
- console.debug('[StateManager] Initialized', {
160
- adapter: this.adapter.getName(),
161
- registryEnabled: !!this.registry,
162
- defaultScope: this.defaultScope
163
- });
164
- }
165
- }
166
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"StateManager",{enumerable:true,get:function(){return StateManager}});const _AdapterFactory=require("./adapters/AdapterFactory");const _StateRegistry=require("./core/StateRegistry");const _DerivedStateInstance=require("./core/DerivedStateInstance");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 StateManager=class StateManager{createState(initialValue,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope,devMode:options?.devMode??this.devMode};const instance=this.adapter.createInstance(initialValue,mergedOptions);if(this.registry){this.registry.register(instance)}return instance}createDerivedState(config,options){if(this.destroyed){throw new Error("StateManager has been destroyed")}const mergedOptions={...options,scope:options?.scope??this.defaultScope};const instance=new _DerivedStateInstance.DerivedStateInstance(config,mergedOptions);if(this.registry){this.registry.register(instance)}return instance}getState(id){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstance(id)}getStatesByScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getInstancesByScope(scope)}getAllStates(){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}return this.registry.getAllInstances()}destroyScope(scope){if(!this.registry){throw new Error("Registry is not enabled. Enable it in StateManagerOptions.")}this.registry.destroyScope(scope)}destroy(){if(this.destroyed){return}this.destroyed=true;if(this.registry){this.registry.destroyAll()}this.adapter.destroy();if(this.devMode){console.debug("[StateManager] Destroyed")}}isDestroyed(){return this.destroyed}getAdapter(){return this.adapter}getRegistry(){return this.registry}constructor(options={}){_define_property(this,"adapter",void 0);_define_property(this,"registry",void 0);_define_property(this,"defaultScope",void 0);_define_property(this,"devMode",void 0);_define_property(this,"destroyed",false);this.adapter=options.defaultAdapter??_AdapterFactory.AdapterFactory.getDefaultAdapter();this.defaultScope=options.defaultScope;this.devMode=options.devMode??false;this.registry=options.enableRegistry!==false?new _StateRegistry.StateRegistry:null;if(this.devMode){console.debug("[StateManager] Initialized",{adapter:this.adapter.getName(),registryEnabled:!!this.registry,defaultScope:this.defaultScope})}}};
@@ -1,89 +1 @@
1
- /**
2
- * 状态适配器工厂
3
- */ "use strict";
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- Object.defineProperty(exports, "AdapterFactory", {
8
- enumerable: true,
9
- get: function() {
10
- return AdapterFactory;
11
- }
12
- });
13
- const _DefaultAdapter = require("./DefaultAdapter");
14
- function _define_property(obj, key, value) {
15
- if (key in obj) {
16
- Object.defineProperty(obj, key, {
17
- value: value,
18
- enumerable: true,
19
- configurable: true,
20
- writable: true
21
- });
22
- } else {
23
- obj[key] = value;
24
- }
25
- return obj;
26
- }
27
- let AdapterFactory = class AdapterFactory {
28
- /**
29
- * 获取默认适配器
30
- */ static getDefaultAdapter() {
31
- if (!this.defaultAdapter) {
32
- this.defaultAdapter = new _DefaultAdapter.DefaultAdapter();
33
- }
34
- return this.defaultAdapter;
35
- }
36
- /**
37
- * 创建适配器实例
38
- *
39
- * @param adapterName - 适配器名称,如果不提供则使用默认适配器
40
- * @returns 适配器实例
41
- */ static createAdapter(adapterName) {
42
- if (!adapterName) {
43
- return this.getDefaultAdapter();
44
- }
45
- const factory = this.customAdapters.get(adapterName);
46
- if (!factory) {
47
- throw new Error(`Adapter "${adapterName}" not found. Available adapters: ${Array.from(this.customAdapters.keys()).join(', ')}`);
48
- }
49
- return factory();
50
- }
51
- /**
52
- * 注册自定义适配器
53
- *
54
- * @param name - 适配器名称
55
- * @param factory - 适配器工厂函数
56
- */ static registerAdapter(name, factory) {
57
- if (this.customAdapters.has(name)) {
58
- console.warn(`[AdapterFactory] Adapter "${name}" already registered, replacing...`);
59
- }
60
- this.customAdapters.set(name, factory);
61
- }
62
- /**
63
- * 注销适配器
64
- *
65
- * @param name - 适配器名称
66
- */ static unregisterAdapter(name) {
67
- this.customAdapters.delete(name);
68
- }
69
- /**
70
- * 获取所有已注册的适配器名称
71
- */ static getRegisteredAdapters() {
72
- return Array.from(this.customAdapters.keys());
73
- }
74
- /**
75
- * 重置工厂(主要用于测试)
76
- */ static reset() {
77
- if (this.defaultAdapter) {
78
- this.defaultAdapter.destroy();
79
- this.defaultAdapter = null;
80
- }
81
- this.customAdapters.clear();
82
- }
83
- };
84
- /**
85
- * 默认适配器实例
86
- */ _define_property(AdapterFactory, "defaultAdapter", null);
87
- /**
88
- * 自定义适配器映射
89
- */ _define_property(AdapterFactory, "customAdapters", new Map());
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"AdapterFactory",{enumerable:true,get:function(){return AdapterFactory}});const _DefaultAdapter=require("./DefaultAdapter");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 AdapterFactory=class AdapterFactory{static getDefaultAdapter(){if(!this.defaultAdapter){this.defaultAdapter=new _DefaultAdapter.DefaultAdapter}return this.defaultAdapter}static createAdapter(adapterName){if(!adapterName){return this.getDefaultAdapter()}const factory=this.customAdapters.get(adapterName);if(!factory){throw new Error(`Adapter "${adapterName}" not found. Available adapters: ${Array.from(this.customAdapters.keys()).join(", ")}`)}return factory()}static registerAdapter(name,factory){if(this.customAdapters.has(name)){console.warn(`[AdapterFactory] Adapter "${name}" already registered, replacing...`)}this.customAdapters.set(name,factory)}static unregisterAdapter(name){this.customAdapters.delete(name)}static getRegisteredAdapters(){return Array.from(this.customAdapters.keys())}static reset(){if(this.defaultAdapter){this.defaultAdapter.destroy();this.defaultAdapter=null}this.customAdapters.clear()}};_define_property(AdapterFactory,"defaultAdapter",null);_define_property(AdapterFactory,"customAdapters",new Map);
@@ -1,75 +1 @@
1
- /**
2
- * 默认状态适配器
3
- *
4
- * 这是 Secra Framework 内置的默认状态适配器实现
5
- * 不依赖任何外部状态管理库,提供基础的状态管理能力
6
- */ "use strict";
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- Object.defineProperty(exports, "DefaultAdapter", {
11
- enumerable: true,
12
- get: function() {
13
- return DefaultAdapter;
14
- }
15
- });
16
- const _StateInstance = require("../core/StateInstance");
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 DefaultAdapter = class DefaultAdapter {
31
- /**
32
- * 创建状态实例
33
- */ createInstance(initialValue, options) {
34
- if (this.destroyed) {
35
- throw new Error('Adapter has been destroyed');
36
- }
37
- const instance = new _StateInstance.StateInstance(initialValue, {
38
- id: options?.id,
39
- scope: options?.scope,
40
- devMode: options?.devMode,
41
- middleware: options?.middleware
42
- });
43
- this.instances.add(instance);
44
- return instance;
45
- }
46
- /**
47
- * 销毁适配器
48
- */ destroy() {
49
- if (this.destroyed) {
50
- return;
51
- }
52
- // 销毁所有创建的状态实例
53
- for (const instance of this.instances){
54
- instance.destroy();
55
- }
56
- this.instances.clear();
57
- this.destroyed = true;
58
- }
59
- /**
60
- * 获取适配器名称
61
- */ getName() {
62
- return this.name;
63
- }
64
- constructor(){
65
- /**
66
- * 适配器名称
67
- */ _define_property(this, "name", 'DefaultAdapter');
68
- /**
69
- * 是否已销毁
70
- */ _define_property(this, "destroyed", false);
71
- /**
72
- * 创建的状态实例集合(用于销毁时清理)
73
- */ _define_property(this, "instances", new Set());
74
- }
75
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"DefaultAdapter",{enumerable:true,get:function(){return DefaultAdapter}});const _StateInstance=require("../core/StateInstance");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 DefaultAdapter=class DefaultAdapter{createInstance(initialValue,options){if(this.destroyed){throw new Error("Adapter has been destroyed")}const instance=new _StateInstance.StateInstance(initialValue,{id:options?.id,scope:options?.scope,devMode:options?.devMode,middleware:options?.middleware});this.instances.add(instance);return instance}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","DefaultAdapter");_define_property(this,"destroyed",false);_define_property(this,"instances",new Set)}};