@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,298 +1 @@
1
- /**
2
- * 插件事件总线
3
- * 用于插件间通信
4
- */ /**
5
- * 事件监听器类型
6
- */ "use strict";
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- function _export(target, all) {
11
- for(var name in all)Object.defineProperty(target, name, {
12
- enumerable: true,
13
- get: Object.getOwnPropertyDescriptor(all, name).get
14
- });
15
- }
16
- _export(exports, {
17
- get PluginEventBus () {
18
- return PluginEventBus;
19
- },
20
- get pluginEventBus () {
21
- return pluginEventBus;
22
- }
23
- });
24
- function _define_property(obj, key, value) {
25
- if (key in obj) {
26
- Object.defineProperty(obj, key, {
27
- value: value,
28
- enumerable: true,
29
- configurable: true,
30
- writable: true
31
- });
32
- } else {
33
- obj[key] = value;
34
- }
35
- return obj;
36
- }
37
- let PluginEventBus = class PluginEventBus {
38
- /**
39
- * 订阅事件
40
- *
41
- * @param event - 事件名称
42
- * @param listener - 事件监听器(可以接收 EventWrapper 或直接数据)
43
- * @returns 取消订阅函数
44
- */ on(event, listener) {
45
- if (!this.listeners.has(event)) {
46
- this.listeners.set(event, new Set());
47
- }
48
- const listeners = this.listeners.get(event);
49
- listeners.add(listener);
50
- // 返回取消订阅函数
51
- return ()=>{
52
- listeners.delete(listener);
53
- if (listeners.size === 0) {
54
- this.listeners.delete(event);
55
- }
56
- };
57
- }
58
- /**
59
- * 取消订阅事件
60
- *
61
- * @param event - 事件名称
62
- * @param listener - 事件监听器
63
- */ off(event, listener) {
64
- const listeners = this.listeners.get(event);
65
- if (listeners) {
66
- listeners.delete(listener);
67
- if (listeners.size === 0) {
68
- this.listeners.delete(event);
69
- }
70
- }
71
- }
72
- /**
73
- * 发布事件
74
- *
75
- * @param event - 事件名称
76
- * @param data - 事件数据
77
- * @param metadata - 事件元数据(可选)
78
- */ async emit(event, data, metadata) {
79
- // 事件验证
80
- if (this.config.enableValidation && !this.config.validator(event, data)) {
81
- console.warn(`事件 ${event} 验证失败,已忽略`);
82
- return;
83
- }
84
- // 构建事件元数据
85
- const eventMetadata = {
86
- source: metadata?.source,
87
- timestamp: metadata?.timestamp ?? Date.now(),
88
- eventId: metadata?.eventId ?? `event_${++this.eventCounter}`,
89
- priority: metadata?.priority ?? 0
90
- };
91
- // 记录事件历史
92
- if (this.config.enableTracking) {
93
- this.eventHistory.push({
94
- event,
95
- data,
96
- metadata: eventMetadata
97
- });
98
- // 限制历史记录大小
99
- if (this.eventHistory.length > this.config.maxHistorySize) {
100
- this.eventHistory.shift();
101
- }
102
- }
103
- const listeners = this.listeners.get(event);
104
- if (!listeners || listeners.size === 0) {
105
- return;
106
- }
107
- // 创建事件包装器
108
- const eventWrapper = {
109
- data: data,
110
- metadata: eventMetadata
111
- };
112
- // 按优先级排序监听器(如果有优先级)
113
- const sortedListeners = Array.from(listeners);
114
- // 并行执行所有监听器
115
- const promises = sortedListeners.map((listener)=>{
116
- try {
117
- return Promise.resolve(listener(eventWrapper));
118
- } catch (error) {
119
- console.error(`事件 ${event} 的监听器执行失败:`, error);
120
- return Promise.resolve();
121
- }
122
- });
123
- await Promise.allSettled(promises);
124
- }
125
- /**
126
- * 发布事件(仅数据,向后兼容)
127
- *
128
- * @param event - 事件名称
129
- * @param data - 事件数据
130
- */ async emitData(event, data) {
131
- return this.emit(event, data);
132
- }
133
- /**
134
- * 一次性订阅事件
135
- *
136
- * @param event - 事件名称
137
- * @param listener - 事件监听器
138
- */ once(event, listener) {
139
- const wrappedListener = async (data)=>{
140
- // 处理 EventWrapper 或直接数据
141
- const actualData = data.data !== undefined ? data.data : data;
142
- await listener(actualData);
143
- this.off(event, wrappedListener);
144
- };
145
- this.on(event, wrappedListener);
146
- }
147
- /**
148
- * 清空所有事件监听器
149
- */ clear() {
150
- this.listeners.clear();
151
- }
152
- /**
153
- * 获取事件监听器数量
154
- *
155
- * @param event - 事件名称,如果不提供则返回所有事件的监听器总数
156
- */ listenerCount(event) {
157
- if (event) {
158
- return this.listeners.get(event)?.size || 0;
159
- }
160
- let count = 0;
161
- for (const listeners of this.listeners.values()){
162
- count += listeners.size;
163
- }
164
- return count;
165
- }
166
- /**
167
- * 获取所有事件名称
168
- */ eventNames() {
169
- return Array.from(this.listeners.keys());
170
- }
171
- /**
172
- * 获取事件历史记录
173
- *
174
- * @param event - 事件名称(可选,如果提供则只返回该事件的历史)
175
- * @param limit - 限制返回的记录数
176
- * @returns 事件历史记录
177
- */ getEventHistory(event, limit) {
178
- if (!this.config.enableTracking) {
179
- return [];
180
- }
181
- let history = this.eventHistory;
182
- if (event) {
183
- history = history.filter((h)=>h.event === event);
184
- }
185
- if (limit) {
186
- history = history.slice(-limit);
187
- }
188
- return [
189
- ...history
190
- ];
191
- }
192
- /**
193
- * 清空事件历史记录
194
- */ clearHistory() {
195
- this.eventHistory = [];
196
- }
197
- /**
198
- * 请求-响应模式:发送请求并等待响应
199
- *
200
- * @param event - 事件名称
201
- * @param data - 请求数据
202
- * @param timeout - 超时时间(毫秒)
203
- * @returns 响应数据
204
- */ async request(event, data, timeout = 5000) {
205
- return new Promise((resolve, reject)=>{
206
- const responseEvent = `${event}:response`;
207
- const requestId = `req_${Date.now()}_${Math.random()}`;
208
- // 设置超时
209
- const timeoutId = setTimeout(()=>{
210
- this.off(responseEvent, responseHandler);
211
- reject(new Error(`请求 ${event} 超时`));
212
- }, timeout);
213
- // 响应处理器
214
- const responseHandler = (response)=>{
215
- // 处理 EventWrapper 或直接数据
216
- const actualResponse = response.data !== undefined ? response.data : response;
217
- if (actualResponse.requestId === requestId) {
218
- clearTimeout(timeoutId);
219
- this.off(responseEvent, responseHandler);
220
- resolve(actualResponse.data);
221
- }
222
- };
223
- // 订阅响应事件
224
- this.on(responseEvent, responseHandler);
225
- // 发送请求
226
- this.emit(`${event}:request`, {
227
- requestId,
228
- data
229
- });
230
- });
231
- }
232
- /**
233
- * 请求-响应模式:注册请求处理器
234
- *
235
- * @param event - 事件名称
236
- * @param handler - 请求处理器
237
- * @returns 取消注册函数
238
- */ onRequest(event, handler) {
239
- const requestEvent = `${event}:request`;
240
- const responseEvent = `${event}:response`;
241
- return this.on(requestEvent, async (wrapper)=>{
242
- try {
243
- // 处理 EventWrapper 或直接数据
244
- const actualWrapper = wrapper.data !== undefined ? wrapper : {
245
- data: wrapper,
246
- metadata: {
247
- timestamp: Date.now()
248
- }
249
- };
250
- const response = await handler(actualWrapper.data.data, actualWrapper.metadata);
251
- this.emit(responseEvent, {
252
- requestId: actualWrapper.data.requestId,
253
- data: response
254
- });
255
- } catch (error) {
256
- const actualWrapper = wrapper.data !== undefined ? wrapper : {
257
- data: wrapper
258
- };
259
- this.emit(`${responseEvent}:error`, {
260
- requestId: actualWrapper.data.requestId,
261
- error: error instanceof Error ? error.message : String(error)
262
- });
263
- }
264
- });
265
- }
266
- /**
267
- * 获取配置
268
- */ getConfig() {
269
- return {
270
- ...this.config
271
- };
272
- }
273
- /**
274
- * 更新配置
275
- */ updateConfig(config) {
276
- this.config = {
277
- ...this.config,
278
- ...config
279
- };
280
- }
281
- constructor(config = {}){
282
- _define_property(this, "listeners", new Map());
283
- _define_property(this, "eventHistory", []);
284
- _define_property(this, "config", void 0);
285
- _define_property(this, "eventCounter", 0);
286
- this.config = {
287
- enableTracking: config.enableTracking ?? false,
288
- maxHistorySize: config.maxHistorySize ?? 100,
289
- enableValidation: config.enableValidation ?? false,
290
- validator: config.validator ?? (()=>true)
291
- };
292
- }
293
- };
294
- const pluginEventBus = new PluginEventBus({
295
- enableTracking: process.env.NODE_ENV === 'development',
296
- maxHistorySize: 100,
297
- enableValidation: false
298
- });
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 PluginEventBus(){return PluginEventBus},get pluginEventBus(){return pluginEventBus}});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 PluginEventBus=class PluginEventBus{on(event,listener){if(!this.listeners.has(event)){this.listeners.set(event,new Set)}const listeners=this.listeners.get(event);listeners.add(listener);return()=>{listeners.delete(listener);if(listeners.size===0){this.listeners.delete(event)}}}off(event,listener){const listeners=this.listeners.get(event);if(listeners){listeners.delete(listener);if(listeners.size===0){this.listeners.delete(event)}}}async emit(event,data,metadata){if(this.config.enableValidation&&!this.config.validator(event,data)){console.warn(`事件 ${event} 验证失败,已忽略`);return}const eventMetadata={source:metadata?.source,timestamp:metadata?.timestamp??Date.now(),eventId:metadata?.eventId??`event_${++this.eventCounter}`,priority:metadata?.priority??0};if(this.config.enableTracking){this.eventHistory.push({event,data,metadata:eventMetadata});if(this.eventHistory.length>this.config.maxHistorySize){this.eventHistory.shift()}}const listeners=this.listeners.get(event);if(!listeners||listeners.size===0){return}const eventWrapper={data:data,metadata:eventMetadata};const sortedListeners=Array.from(listeners);const promises=sortedListeners.map(listener=>{try{return Promise.resolve(listener(eventWrapper))}catch(error){console.error(`事件 ${event} 的监听器执行失败:`,error);return Promise.resolve()}});await Promise.allSettled(promises)}async emitData(event,data){return this.emit(event,data)}once(event,listener){const wrappedListener=async data=>{const actualData=data.data!==undefined?data.data:data;await listener(actualData);this.off(event,wrappedListener)};this.on(event,wrappedListener)}clear(){this.listeners.clear()}listenerCount(event){if(event){return this.listeners.get(event)?.size||0}let count=0;for(const listeners of this.listeners.values()){count+=listeners.size}return count}eventNames(){return Array.from(this.listeners.keys())}getEventHistory(event,limit){if(!this.config.enableTracking){return[]}let history=this.eventHistory;if(event){history=history.filter(h=>h.event===event)}if(limit){history=history.slice(-limit)}return[...history]}clearHistory(){this.eventHistory=[]}async request(event,data,timeout=5e3){return new Promise((resolve,reject)=>{const responseEvent=`${event}:response`;const requestId=`req_${Date.now()}_${Math.random()}`;const timeoutId=setTimeout(()=>{this.off(responseEvent,responseHandler);reject(new Error(`请求 ${event} 超时`))},timeout);const responseHandler=response=>{const actualResponse=response.data!==undefined?response.data:response;if(actualResponse.requestId===requestId){clearTimeout(timeoutId);this.off(responseEvent,responseHandler);resolve(actualResponse.data)}};this.on(responseEvent,responseHandler);this.emit(`${event}:request`,{requestId,data})})}onRequest(event,handler){const requestEvent=`${event}:request`;const responseEvent=`${event}:response`;return this.on(requestEvent,async wrapper=>{try{const actualWrapper=wrapper.data!==undefined?wrapper:{data:wrapper,metadata:{timestamp:Date.now()}};const response=await handler(actualWrapper.data.data,actualWrapper.metadata);this.emit(responseEvent,{requestId:actualWrapper.data.requestId,data:response})}catch(error){const actualWrapper=wrapper.data!==undefined?wrapper:{data:wrapper};this.emit(`${responseEvent}:error`,{requestId:actualWrapper.data.requestId,error:error instanceof Error?error.message:String(error)})}})}getConfig(){return{...this.config}}updateConfig(config){this.config={...this.config,...config}}constructor(config={}){_define_property(this,"listeners",new Map);_define_property(this,"eventHistory",[]);_define_property(this,"config",void 0);_define_property(this,"eventCounter",0);this.config={enableTracking:config.enableTracking??false,maxHistorySize:config.maxHistorySize??100,enableValidation:config.enableValidation??false,validator:config.validator??(()=>true)}}};const pluginEventBus=new PluginEventBus({enableTracking:process.env.NODE_ENV==="development",maxHistorySize:100,enableValidation:false});
@@ -1,137 +1 @@
1
- /**
2
- * 插件沙箱
3
- * 用于插件隔离和权限控制
4
- */ "use strict";
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- function _export(target, all) {
9
- for(var name in all)Object.defineProperty(target, name, {
10
- enumerable: true,
11
- get: Object.getOwnPropertyDescriptor(all, name).get
12
- });
13
- }
14
- _export(exports, {
15
- get PluginPermission () {
16
- return PluginPermission;
17
- },
18
- get PluginSandbox () {
19
- return PluginSandbox;
20
- }
21
- });
22
- function _define_property(obj, key, value) {
23
- if (key in obj) {
24
- Object.defineProperty(obj, key, {
25
- value: value,
26
- enumerable: true,
27
- configurable: true,
28
- writable: true
29
- });
30
- } else {
31
- obj[key] = value;
32
- }
33
- return obj;
34
- }
35
- var PluginPermission = /*#__PURE__*/ function(PluginPermission) {
36
- /**
37
- * 访问配置
38
- */ PluginPermission["ACCESS_CONFIG"] = "access_config";
39
- /**
40
- * 访问状态管理器
41
- */ PluginPermission["ACCESS_STATE_MANAGER"] = "access_state_manager";
42
- /**
43
- * 访问存储
44
- */ PluginPermission["ACCESS_STORAGE"] = "access_storage";
45
- /**
46
- * 发布事件
47
- */ PluginPermission["EMIT_EVENTS"] = "emit_events";
48
- /**
49
- * 订阅事件
50
- */ PluginPermission["SUBSCRIBE_EVENTS"] = "subscribe_events";
51
- return PluginPermission;
52
- }({});
53
- let PluginSandbox = class PluginSandbox {
54
- /**
55
- * 检查权限
56
- *
57
- * @param permission - 权限
58
- * @returns 是否有权限
59
- */ hasPermission(permission) {
60
- if (!this.config.strictMode) {
61
- return true; // 非严格模式,允许所有权限
62
- }
63
- return this.permissions.has(permission);
64
- }
65
- /**
66
- * 检查是否可以访问配置键
67
- *
68
- * @param key - 配置键
69
- * @returns 是否可以访问
70
- */ canAccessConfig(key) {
71
- if (!this.hasPermission("access_config")) {
72
- return false;
73
- }
74
- if (this.config.configWhitelist && this.config.configWhitelist.length > 0) {
75
- return this.config.configWhitelist.includes(key);
76
- }
77
- return true;
78
- }
79
- /**
80
- * 检查是否可以访问状态作用域
81
- *
82
- * @param scope - 状态作用域
83
- * @returns 是否可以访问
84
- */ canAccessStateScope(scope) {
85
- if (!this.hasPermission("access_state_manager")) {
86
- return false;
87
- }
88
- if (this.config.stateScopeWhitelist && this.config.stateScopeWhitelist.length > 0) {
89
- return this.config.stateScopeWhitelist.includes(scope);
90
- }
91
- return true;
92
- }
93
- /**
94
- * 过滤配置(根据白名单)
95
- *
96
- * @param config - 完整配置
97
- * @returns 过滤后的配置
98
- */ filterConfig(config) {
99
- if (!this.hasPermission("access_config")) {
100
- return {};
101
- }
102
- if (!this.config.configWhitelist || this.config.configWhitelist.length === 0) {
103
- return config;
104
- }
105
- const filtered = {};
106
- for (const key of this.config.configWhitelist){
107
- if (key in config) {
108
- filtered[key] = config[key];
109
- }
110
- }
111
- return filtered;
112
- }
113
- /**
114
- * 获取沙箱配置
115
- */ getConfig() {
116
- return {
117
- ...this.config
118
- };
119
- }
120
- /**
121
- * 更新权限
122
- *
123
- * @param permissions - 权限列表
124
- */ updatePermissions(permissions) {
125
- this.permissions = new Set(permissions);
126
- this.config.permissions = permissions;
127
- }
128
- constructor(config){
129
- _define_property(this, "config", void 0);
130
- _define_property(this, "permissions", void 0);
131
- this.config = {
132
- strictMode: true,
133
- ...config
134
- };
135
- this.permissions = new Set(config.permissions || []);
136
- }
137
- };
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 PluginPermission(){return PluginPermission},get PluginSandbox(){return PluginSandbox}});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}var PluginPermission=/*#__PURE__*/function(PluginPermission){PluginPermission["ACCESS_CONFIG"]="access_config";PluginPermission["ACCESS_STATE_MANAGER"]="access_state_manager";PluginPermission["ACCESS_STORAGE"]="access_storage";PluginPermission["EMIT_EVENTS"]="emit_events";PluginPermission["SUBSCRIBE_EVENTS"]="subscribe_events";return PluginPermission}({});let PluginSandbox=class PluginSandbox{hasPermission(permission){if(!this.config.strictMode){return true}return this.permissions.has(permission)}canAccessConfig(key){if(!this.hasPermission("access_config")){return false}if(this.config.configWhitelist&&this.config.configWhitelist.length>0){return this.config.configWhitelist.includes(key)}return true}canAccessStateScope(scope){if(!this.hasPermission("access_state_manager")){return false}if(this.config.stateScopeWhitelist&&this.config.stateScopeWhitelist.length>0){return this.config.stateScopeWhitelist.includes(scope)}return true}filterConfig(config){if(!this.hasPermission("access_config")){return{}}if(!this.config.configWhitelist||this.config.configWhitelist.length===0){return config}const filtered={};for(const key of this.config.configWhitelist){if(key in config){filtered[key]=config[key]}}return filtered}getConfig(){return{...this.config}}updatePermissions(permissions){this.permissions=new Set(permissions);this.config.permissions=permissions}constructor(config){_define_property(this,"config",void 0);_define_property(this,"permissions",void 0);this.config={strictMode:true,...config};this.permissions=new Set(config.permissions||[])}};