@vlian/framework 1.2.56 → 1.2.59

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 (685) hide show
  1. package/README.md +15 -3
  2. package/dist/analytics/index.cjs +0 -2
  3. package/dist/analytics/index.js +1 -3
  4. package/dist/analytics.umd.js +8 -208
  5. package/dist/components/LocaleSwitch.cjs +0 -2
  6. package/dist/components/LocaleSwitch.js +1 -103
  7. package/dist/components/ThemeSwitch.cjs +0 -2
  8. package/dist/components/ThemeSwitch.js +1 -102
  9. package/dist/components/index.cjs +0 -2
  10. package/dist/components/index.js +1 -4
  11. package/dist/components/persistence.cjs +0 -2
  12. package/dist/components/persistence.js +1 -39
  13. package/dist/core/Test.cjs +0 -2
  14. package/dist/core/Test.js +1 -15
  15. package/dist/core/app/AppContext.cjs +0 -2
  16. package/dist/core/app/AppContext.js +1 -339
  17. package/dist/core/app/AppContext.types.cjs +0 -2
  18. package/dist/core/app/AppContext.types.js +1 -5
  19. package/dist/core/app/BasicLayout.cjs +0 -2
  20. package/dist/core/app/BasicLayout.js +1 -74
  21. package/dist/core/app/DefaultApp.cjs +0 -2
  22. package/dist/core/app/DefaultApp.js +1 -143
  23. package/dist/core/app/index.cjs +0 -2
  24. package/dist/core/app/index.js +1 -7
  25. package/dist/core/config/AppConfig.cjs +0 -2
  26. package/dist/core/config/AppConfig.js +1 -133
  27. package/dist/core/config/ConfigLoader.cjs +0 -2
  28. package/dist/core/config/ConfigLoader.js +1 -311
  29. package/dist/core/config/ConfigValidator.cjs +0 -2
  30. package/dist/core/config/ConfigValidator.js +2 -121
  31. package/dist/core/config/index.cjs +0 -2
  32. package/dist/core/config/index.js +1 -7
  33. package/dist/core/dev/DevTools.cjs +0 -2
  34. package/dist/core/dev/DevTools.js +1 -210
  35. package/dist/core/error/ErrorBoundary.cjs +0 -2
  36. package/dist/core/error/ErrorBoundary.js +1 -399
  37. package/dist/core/error/ErrorHandler.cjs +0 -2
  38. package/dist/core/error/ErrorHandler.js +1 -261
  39. package/dist/core/error/index.cjs +0 -2
  40. package/dist/core/error/index.js +1 -6
  41. package/dist/core/event/AppEventBus.cjs +0 -2
  42. package/dist/core/event/AppEventBus.js +1 -438
  43. package/dist/core/event/frameworkEvents.cjs +0 -2
  44. package/dist/core/event/frameworkEvents.js +1 -135
  45. package/dist/core/event/hooks.cjs +0 -2
  46. package/dist/core/event/hooks.js +1 -95
  47. package/dist/core/event/index.cjs +0 -2
  48. package/dist/core/event/index.js +1 -10
  49. package/dist/core/event/types.cjs +0 -2
  50. package/dist/core/event/types.js +1 -56
  51. package/dist/core/event/useEventBus.cjs +0 -2
  52. package/dist/core/event/useEventBus.js +1 -39
  53. package/dist/core/index.cjs +0 -2
  54. package/dist/core/index.js +1 -69
  55. package/dist/core/initialization/InitializationErrorThrower.cjs +0 -2
  56. package/dist/core/initialization/InitializationErrorThrower.js +1 -30
  57. package/dist/core/initialization/index.cjs +0 -2
  58. package/dist/core/initialization/index.js +1 -7
  59. package/dist/core/initialization/initialization.cjs +0 -2
  60. package/dist/core/initialization/initialization.js +1 -78
  61. package/dist/core/initialization/initializationErrorState.cjs +0 -2
  62. package/dist/core/initialization/initializationErrorState.js +1 -60
  63. package/dist/core/kernel/defaultAdapters.cjs +0 -2
  64. package/dist/core/kernel/defaultAdapters.js +1 -176
  65. package/dist/core/kernel/errors.cjs +0 -2
  66. package/dist/core/kernel/errors.js +1 -53
  67. package/dist/core/kernel/index.cjs +0 -2
  68. package/dist/core/kernel/index.js +1 -4
  69. package/dist/core/kernel/startKernel.cjs +0 -2
  70. package/dist/core/kernel/startKernel.js +1 -192
  71. package/dist/core/kernel/types.cjs +0 -2
  72. package/dist/core/kernel/types.js +1 -3
  73. package/dist/core/middleware.cjs +0 -2
  74. package/dist/core/middleware.js +1 -61
  75. package/dist/core/plugin/PluginEventBus.cjs +0 -2
  76. package/dist/core/plugin/PluginEventBus.js +1 -286
  77. package/dist/core/plugin/PluginSandbox.cjs +0 -2
  78. package/dist/core/plugin/PluginSandbox.js +1 -125
  79. package/dist/core/plugin.cjs +0 -2
  80. package/dist/core/plugin.js +1 -438
  81. package/dist/core/router/RouterManager.cjs +0 -2
  82. package/dist/core/router/RouterManager.js +1 -272
  83. package/dist/core/router/adapter/AdapterManager.cjs +0 -2
  84. package/dist/core/router/adapter/AdapterManager.js +1 -221
  85. package/dist/core/router/adapter/index.cjs +0 -2
  86. package/dist/core/router/adapter/index.js +1 -7
  87. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +0 -2
  88. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -116
  89. package/dist/core/router/adapter/react-router/index.cjs +0 -2
  90. package/dist/core/router/adapter/react-router/index.js +1 -5
  91. package/dist/core/router/adapter/types.cjs +0 -2
  92. package/dist/core/router/adapter/types.js +1 -7
  93. package/dist/core/router/dev/RouterDevTools.cjs +0 -2
  94. package/dist/core/router/dev/RouterDevTools.js +1 -211
  95. package/dist/core/router/dev/index.cjs +0 -2
  96. package/dist/core/router/dev/index.js +1 -5
  97. package/dist/core/router/dynamic/DynamicRouteManager.cjs +0 -2
  98. package/dist/core/router/dynamic/DynamicRouteManager.js +1 -179
  99. package/dist/core/router/dynamic/index.cjs +0 -2
  100. package/dist/core/router/dynamic/index.js +1 -5
  101. package/dist/core/router/errors/RouterError.cjs +0 -2
  102. package/dist/core/router/errors/RouterError.js +1 -48
  103. package/dist/core/router/errors/index.cjs +0 -2
  104. package/dist/core/router/errors/index.js +1 -5
  105. package/dist/core/router/index.cjs +0 -2
  106. package/dist/core/router/index.js +1 -32
  107. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +0 -2
  108. package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -130
  109. package/dist/core/router/lifecycle/index.cjs +0 -2
  110. package/dist/core/router/lifecycle/index.js +1 -5
  111. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +0 -2
  112. package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -179
  113. package/dist/core/router/middleware/auth.cjs +0 -2
  114. package/dist/core/router/middleware/auth.js +1 -63
  115. package/dist/core/router/middleware/index.cjs +0 -2
  116. package/dist/core/router/middleware/index.js +1 -7
  117. package/dist/core/router/middleware/types.cjs +0 -2
  118. package/dist/core/router/middleware/types.js +1 -7
  119. package/dist/core/router/monitoring/RouterMonitoring.cjs +0 -2
  120. package/dist/core/router/monitoring/RouterMonitoring.js +1 -213
  121. package/dist/core/router/monitoring/index.cjs +0 -2
  122. package/dist/core/router/monitoring/index.js +1 -5
  123. package/dist/core/router/navigation/RouterNavigation.cjs +0 -2
  124. package/dist/core/router/navigation/RouterNavigation.js +1 -192
  125. package/dist/core/router/navigation/index.cjs +0 -2
  126. package/dist/core/router/navigation/index.js +1 -5
  127. package/dist/core/router/performance/RouteCache.cjs +0 -2
  128. package/dist/core/router/performance/RouteCache.js +1 -291
  129. package/dist/core/router/performance/RoutePreloader.cjs +0 -2
  130. package/dist/core/router/performance/RoutePreloader.js +1 -277
  131. package/dist/core/router/performance/index.cjs +0 -2
  132. package/dist/core/router/performance/index.js +1 -6
  133. package/dist/core/router/plugin/RouterPluginManager.cjs +0 -2
  134. package/dist/core/router/plugin/RouterPluginManager.js +1 -248
  135. package/dist/core/router/plugin/index.cjs +0 -2
  136. package/dist/core/router/plugin/index.js +1 -6
  137. package/dist/core/router/plugin/types.cjs +0 -2
  138. package/dist/core/router/plugin/types.js +1 -33
  139. package/dist/core/router/types.cjs +0 -2
  140. package/dist/core/router/types.js +1 -5
  141. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +0 -2
  142. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -121
  143. package/dist/core/router/utils/adapters/react-router/transform.cjs +0 -2
  144. package/dist/core/router/utils/adapters/react-router/transform.js +1 -242
  145. package/dist/core/router/utils/transform.cjs +0 -2
  146. package/dist/core/router/utils/transform.js +1 -791
  147. package/dist/core/router/validation/RouterConfigValidator.cjs +0 -2
  148. package/dist/core/router/validation/RouterConfigValidator.js +2 -77
  149. package/dist/core/router/validation/index.cjs +0 -2
  150. package/dist/core/router/validation/index.js +1 -6
  151. package/dist/core/router/validation/schema.cjs +0 -2
  152. package/dist/core/router/validation/schema.js +1 -151
  153. package/dist/core/router/version/RouteVersionManager.cjs +0 -2
  154. package/dist/core/router/version/RouteVersionManager.js +1 -191
  155. package/dist/core/router/version/index.cjs +0 -2
  156. package/dist/core/router/version/index.js +1 -5
  157. package/dist/core/splash/SplashScreen.cjs +0 -2
  158. package/dist/core/splash/SplashScreen.js +1 -293
  159. package/dist/core/splash/index.cjs +0 -2
  160. package/dist/core/splash/index.js +1 -6
  161. package/dist/core/splash/splashScreenUtils.cjs +0 -2
  162. package/dist/core/splash/splashScreenUtils.js +1 -30
  163. package/dist/core/startup/AppInstance.cjs +0 -2
  164. package/dist/core/startup/AppInstance.js +1 -226
  165. package/dist/core/startup/environment.cjs +0 -2
  166. package/dist/core/startup/environment.js +1 -154
  167. package/dist/core/startup/index.cjs +0 -2
  168. package/dist/core/startup/index.js +1 -8
  169. package/dist/core/startup/initializeServices.cjs +0 -2
  170. package/dist/core/startup/initializeServices.js +1 -188
  171. package/dist/core/startup/performanceTracker.cjs +0 -2
  172. package/dist/core/startup/performanceTracker.js +1 -167
  173. package/dist/core/startup/renderApp.cjs +0 -2
  174. package/dist/core/startup/renderApp.js +1 -267
  175. package/dist/core/startup/startApp.cjs +0 -2
  176. package/dist/core/startup/startApp.js +1 -315
  177. package/dist/core/types.cjs +0 -2
  178. package/dist/core/types.js +1 -5
  179. package/dist/index.cjs +0 -2
  180. package/dist/index.js +1 -11
  181. package/dist/index.umd.cjs +0 -2
  182. package/dist/index.umd.js +362 -13230
  183. package/dist/kernel/constants.cjs +0 -2
  184. package/dist/kernel/constants.js +1 -43
  185. package/dist/kernel/index.cjs +0 -2
  186. package/dist/kernel/index.js +1 -4
  187. package/dist/kernel/kernel.cjs +1 -3
  188. package/dist/kernel/kernel.js +1 -273
  189. package/dist/kernel/manager/cacheManager.cjs +0 -2
  190. package/dist/kernel/manager/cacheManager.js +1 -38
  191. package/dist/kernel/manager/i18n/I18nManager.cjs +0 -2
  192. package/dist/kernel/manager/i18n/I18nManager.js +1 -83
  193. package/dist/kernel/manager/i18n/i18n.persistence.cjs +4 -3
  194. package/dist/kernel/manager/i18n/i18n.persistence.js +1 -38
  195. package/dist/kernel/manager/i18n/i18n.schema.cjs +0 -2
  196. package/dist/kernel/manager/i18n/i18n.schema.js +1 -64
  197. package/dist/kernel/manager/i18n/index.cjs +0 -2
  198. package/dist/kernel/manager/i18n/index.js +1 -3
  199. package/dist/kernel/manager/i18nManager.cjs +0 -2
  200. package/dist/kernel/manager/i18nManager.js +1 -3
  201. package/dist/kernel/manager/index.cjs +0 -2
  202. package/dist/kernel/manager/index.js +1 -6
  203. package/dist/kernel/manager/logger/LoggerManager.cjs +0 -2
  204. package/dist/kernel/manager/logger/LoggerManager.js +1 -99
  205. package/dist/kernel/manager/logger/index.cjs +0 -2
  206. package/dist/kernel/manager/logger/index.js +1 -3
  207. package/dist/kernel/manager/logger/logger.persistence.cjs +0 -2
  208. package/dist/kernel/manager/logger/logger.persistence.js +1 -43
  209. package/dist/kernel/manager/logger/logger.schema.cjs +0 -2
  210. package/dist/kernel/manager/logger/logger.schema.js +1 -55
  211. package/dist/kernel/manager/loggerManager.cjs +0 -2
  212. package/dist/kernel/manager/loggerManager.js +1 -3
  213. package/dist/kernel/manager/theme/ThemeManager.cjs +0 -2
  214. package/dist/kernel/manager/theme/ThemeManager.js +1 -76
  215. package/dist/kernel/manager/theme/index.cjs +0 -2
  216. package/dist/kernel/manager/theme/index.js +1 -3
  217. package/dist/kernel/manager/theme/theme.dom.cjs +0 -2
  218. package/dist/kernel/manager/theme/theme.dom.js +1 -45
  219. package/dist/kernel/manager/theme/theme.persistence.cjs +0 -2
  220. package/dist/kernel/manager/theme/theme.persistence.js +1 -38
  221. package/dist/kernel/manager/theme/theme.schema.cjs +0 -2
  222. package/dist/kernel/manager/theme/theme.schema.js +1 -97
  223. package/dist/kernel/manager/themeManager.cjs +0 -2
  224. package/dist/kernel/manager/themeManager.js +1 -3
  225. package/dist/kernel/types.cjs +0 -2
  226. package/dist/kernel/types.js +1 -3
  227. package/dist/library/index.cjs +0 -2
  228. package/dist/library/index.js +1 -4
  229. package/dist/library/locale/index.cjs +0 -2
  230. package/dist/library/locale/index.js +1 -12
  231. package/dist/library/locale/langs/en-us/index.cjs +0 -2
  232. package/dist/library/locale/langs/en-us/index.js +1 -24
  233. package/dist/library/locale/langs/zh-cn/index.cjs +0 -2
  234. package/dist/library/locale/langs/zh-cn/index.js +1 -24
  235. package/dist/library/locale/types.cjs +0 -2
  236. package/dist/library/locale/types.js +1 -3
  237. package/dist/library/storage/cache.cjs +0 -2
  238. package/dist/library/storage/cache.js +1 -237
  239. package/dist/library/storage/encryption.cjs +0 -2
  240. package/dist/library/storage/encryption.js +1 -141
  241. package/dist/library/storage/index.cjs +0 -2
  242. package/dist/library/storage/index.js +1 -106
  243. package/dist/state/StateManager.cjs +0 -2
  244. package/dist/state/StateManager.js +1 -160
  245. package/dist/state/adapters/AdapterFactory.cjs +0 -2
  246. package/dist/state/adapters/AdapterFactory.js +1 -85
  247. package/dist/state/adapters/DefaultAdapter.cjs +0 -2
  248. package/dist/state/adapters/DefaultAdapter.js +1 -71
  249. package/dist/state/adapters/ReduxAdapter.cjs +0 -2
  250. package/dist/state/adapters/ReduxAdapter.js +1 -439
  251. package/dist/state/adapters/ZustandAdapter.cjs +0 -2
  252. package/dist/state/adapters/ZustandAdapter.js +1 -70
  253. package/dist/state/adapters/index.cjs +0 -2
  254. package/dist/state/adapters/index.js +1 -9
  255. package/dist/state/adapters/types.cjs +0 -2
  256. package/dist/state/adapters/types.js +1 -5
  257. package/dist/state/core/DerivedStateInstance.cjs +0 -2
  258. package/dist/state/core/DerivedStateInstance.js +1 -173
  259. package/dist/state/core/StateInstance.cjs +0 -2
  260. package/dist/state/core/StateInstance.js +1 -168
  261. package/dist/state/core/StateRegistry.cjs +0 -2
  262. package/dist/state/core/StateRegistry.js +1 -106
  263. package/dist/state/core/StateScope.cjs +0 -2
  264. package/dist/state/core/StateScope.js +1 -133
  265. package/dist/state/core/index.cjs +0 -2
  266. package/dist/state/core/index.js +1 -8
  267. package/dist/state/index.cjs +0 -2
  268. package/dist/state/index.js +1 -12
  269. package/dist/state/types.cjs +0 -2
  270. package/dist/state/types.js +1 -13
  271. package/dist/state.umd.js +22 -1395
  272. package/dist/types.cjs +0 -2
  273. package/dist/types.js +1 -3
  274. package/dist/utils/analytics.cjs +0 -2
  275. package/dist/utils/analytics.js +1 -204
  276. package/dist/utils/configSecurity.cjs +0 -2
  277. package/dist/utils/configSecurity.js +3 -176
  278. package/dist/utils/csrf.cjs +0 -2
  279. package/dist/utils/csrf.js +1 -3
  280. package/dist/utils/errors/ErrorCodes.cjs +0 -2
  281. package/dist/utils/errors/ErrorCodes.js +1 -3
  282. package/dist/utils/errors.cjs +0 -2
  283. package/dist/utils/errors.js +1 -18
  284. package/dist/utils/index.cjs +0 -2
  285. package/dist/utils/index.js +1 -48
  286. package/dist/utils/logger.cjs +0 -2
  287. package/dist/utils/logger.js +1 -3
  288. package/dist/utils/logger.types.cjs +0 -2
  289. package/dist/utils/logger.types.js +1 -3
  290. package/dist/utils/monitoring.cjs +0 -2
  291. package/dist/utils/monitoring.js +1 -3
  292. package/dist/utils/performance.cjs +0 -2
  293. package/dist/utils/performance.js +1 -3
  294. package/dist/utils/resourceLoader.cjs +0 -2
  295. package/dist/utils/resourceLoader.js +1 -3
  296. package/dist/utils/runtimeSecurity.cjs +0 -2
  297. package/dist/utils/runtimeSecurity.js +1 -3
  298. package/dist/utils/security.cjs +0 -2
  299. package/dist/utils/security.js +1 -3
  300. package/dist/utils/traceId.cjs +0 -2
  301. package/dist/utils/traceId.js +1 -3
  302. package/dist/utils/validation.cjs +0 -2
  303. package/dist/utils/validation.js +1 -3
  304. package/package.json +3 -4
  305. package/dist/analytics/index.cjs.map +0 -1
  306. package/dist/analytics/index.js.map +0 -1
  307. package/dist/analytics.umd.js.map +0 -1
  308. package/dist/components/LocaleSwitch.cjs.map +0 -1
  309. package/dist/components/LocaleSwitch.js.map +0 -1
  310. package/dist/components/ThemeSwitch.cjs.map +0 -1
  311. package/dist/components/ThemeSwitch.js.map +0 -1
  312. package/dist/components/index.cjs.map +0 -1
  313. package/dist/components/index.js.map +0 -1
  314. package/dist/components/persistence.cjs.map +0 -1
  315. package/dist/components/persistence.js.map +0 -1
  316. package/dist/core/Test.cjs.map +0 -1
  317. package/dist/core/Test.js.map +0 -1
  318. package/dist/core/app/AppContext.cjs.map +0 -1
  319. package/dist/core/app/AppContext.js.map +0 -1
  320. package/dist/core/app/AppContext.types.cjs.map +0 -1
  321. package/dist/core/app/AppContext.types.js.map +0 -1
  322. package/dist/core/app/BasicLayout.cjs.map +0 -1
  323. package/dist/core/app/BasicLayout.js.map +0 -1
  324. package/dist/core/app/DefaultApp.cjs.map +0 -1
  325. package/dist/core/app/DefaultApp.js.map +0 -1
  326. package/dist/core/app/index.cjs.map +0 -1
  327. package/dist/core/app/index.js.map +0 -1
  328. package/dist/core/config/AppConfig.cjs.map +0 -1
  329. package/dist/core/config/AppConfig.js.map +0 -1
  330. package/dist/core/config/ConfigLoader.cjs.map +0 -1
  331. package/dist/core/config/ConfigLoader.js.map +0 -1
  332. package/dist/core/config/ConfigValidator.cjs.map +0 -1
  333. package/dist/core/config/ConfigValidator.js.map +0 -1
  334. package/dist/core/config/index.cjs.map +0 -1
  335. package/dist/core/config/index.js.map +0 -1
  336. package/dist/core/dev/DevTools.cjs.map +0 -1
  337. package/dist/core/dev/DevTools.js.map +0 -1
  338. package/dist/core/error/ErrorBoundary.cjs.map +0 -1
  339. package/dist/core/error/ErrorBoundary.js.map +0 -1
  340. package/dist/core/error/ErrorHandler.cjs.map +0 -1
  341. package/dist/core/error/ErrorHandler.js.map +0 -1
  342. package/dist/core/error/index.cjs.map +0 -1
  343. package/dist/core/error/index.js.map +0 -1
  344. package/dist/core/event/AppEventBus.cjs.map +0 -1
  345. package/dist/core/event/AppEventBus.js.map +0 -1
  346. package/dist/core/event/frameworkEvents.cjs.map +0 -1
  347. package/dist/core/event/frameworkEvents.js.map +0 -1
  348. package/dist/core/event/hooks.cjs.map +0 -1
  349. package/dist/core/event/hooks.js.map +0 -1
  350. package/dist/core/event/index.cjs.map +0 -1
  351. package/dist/core/event/index.js.map +0 -1
  352. package/dist/core/event/types.cjs.map +0 -1
  353. package/dist/core/event/types.js.map +0 -1
  354. package/dist/core/event/useEventBus.cjs.map +0 -1
  355. package/dist/core/event/useEventBus.js.map +0 -1
  356. package/dist/core/index.cjs.map +0 -1
  357. package/dist/core/index.js.map +0 -1
  358. package/dist/core/initialization/InitializationErrorThrower.cjs.map +0 -1
  359. package/dist/core/initialization/InitializationErrorThrower.js.map +0 -1
  360. package/dist/core/initialization/index.cjs.map +0 -1
  361. package/dist/core/initialization/index.js.map +0 -1
  362. package/dist/core/initialization/initialization.cjs.map +0 -1
  363. package/dist/core/initialization/initialization.js.map +0 -1
  364. package/dist/core/initialization/initializationErrorState.cjs.map +0 -1
  365. package/dist/core/initialization/initializationErrorState.js.map +0 -1
  366. package/dist/core/kernel/defaultAdapters.cjs.map +0 -1
  367. package/dist/core/kernel/defaultAdapters.js.map +0 -1
  368. package/dist/core/kernel/errors.cjs.map +0 -1
  369. package/dist/core/kernel/errors.js.map +0 -1
  370. package/dist/core/kernel/index.cjs.map +0 -1
  371. package/dist/core/kernel/index.js.map +0 -1
  372. package/dist/core/kernel/startKernel.cjs.map +0 -1
  373. package/dist/core/kernel/startKernel.js.map +0 -1
  374. package/dist/core/kernel/types.cjs.map +0 -1
  375. package/dist/core/kernel/types.js.map +0 -1
  376. package/dist/core/middleware.cjs.map +0 -1
  377. package/dist/core/middleware.js.map +0 -1
  378. package/dist/core/plugin/PluginEventBus.cjs.map +0 -1
  379. package/dist/core/plugin/PluginEventBus.js.map +0 -1
  380. package/dist/core/plugin/PluginSandbox.cjs.map +0 -1
  381. package/dist/core/plugin/PluginSandbox.js.map +0 -1
  382. package/dist/core/plugin.cjs.map +0 -1
  383. package/dist/core/plugin.js.map +0 -1
  384. package/dist/core/router/RouterManager.cjs.map +0 -1
  385. package/dist/core/router/RouterManager.js.map +0 -1
  386. package/dist/core/router/adapter/AdapterManager.cjs.map +0 -1
  387. package/dist/core/router/adapter/AdapterManager.js.map +0 -1
  388. package/dist/core/router/adapter/index.cjs.map +0 -1
  389. package/dist/core/router/adapter/index.js.map +0 -1
  390. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs.map +0 -1
  391. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +0 -1
  392. package/dist/core/router/adapter/react-router/index.cjs.map +0 -1
  393. package/dist/core/router/adapter/react-router/index.js.map +0 -1
  394. package/dist/core/router/adapter/types.cjs.map +0 -1
  395. package/dist/core/router/adapter/types.js.map +0 -1
  396. package/dist/core/router/dev/RouterDevTools.cjs.map +0 -1
  397. package/dist/core/router/dev/RouterDevTools.js.map +0 -1
  398. package/dist/core/router/dev/index.cjs.map +0 -1
  399. package/dist/core/router/dev/index.js.map +0 -1
  400. package/dist/core/router/dynamic/DynamicRouteManager.cjs.map +0 -1
  401. package/dist/core/router/dynamic/DynamicRouteManager.js.map +0 -1
  402. package/dist/core/router/dynamic/index.cjs.map +0 -1
  403. package/dist/core/router/dynamic/index.js.map +0 -1
  404. package/dist/core/router/errors/RouterError.cjs.map +0 -1
  405. package/dist/core/router/errors/RouterError.js.map +0 -1
  406. package/dist/core/router/errors/index.cjs.map +0 -1
  407. package/dist/core/router/errors/index.js.map +0 -1
  408. package/dist/core/router/index.cjs.map +0 -1
  409. package/dist/core/router/index.js.map +0 -1
  410. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs.map +0 -1
  411. package/dist/core/router/lifecycle/RouterLifecycleManager.js.map +0 -1
  412. package/dist/core/router/lifecycle/index.cjs.map +0 -1
  413. package/dist/core/router/lifecycle/index.js.map +0 -1
  414. package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +0 -1
  415. package/dist/core/router/middleware/RouterMiddlewareManager.js.map +0 -1
  416. package/dist/core/router/middleware/auth.cjs.map +0 -1
  417. package/dist/core/router/middleware/auth.js.map +0 -1
  418. package/dist/core/router/middleware/index.cjs.map +0 -1
  419. package/dist/core/router/middleware/index.js.map +0 -1
  420. package/dist/core/router/middleware/types.cjs.map +0 -1
  421. package/dist/core/router/middleware/types.js.map +0 -1
  422. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +0 -1
  423. package/dist/core/router/monitoring/RouterMonitoring.js.map +0 -1
  424. package/dist/core/router/monitoring/index.cjs.map +0 -1
  425. package/dist/core/router/monitoring/index.js.map +0 -1
  426. package/dist/core/router/navigation/RouterNavigation.cjs.map +0 -1
  427. package/dist/core/router/navigation/RouterNavigation.js.map +0 -1
  428. package/dist/core/router/navigation/index.cjs.map +0 -1
  429. package/dist/core/router/navigation/index.js.map +0 -1
  430. package/dist/core/router/performance/RouteCache.cjs.map +0 -1
  431. package/dist/core/router/performance/RouteCache.js.map +0 -1
  432. package/dist/core/router/performance/RoutePreloader.cjs.map +0 -1
  433. package/dist/core/router/performance/RoutePreloader.js.map +0 -1
  434. package/dist/core/router/performance/index.cjs.map +0 -1
  435. package/dist/core/router/performance/index.js.map +0 -1
  436. package/dist/core/router/plugin/RouterPluginManager.cjs.map +0 -1
  437. package/dist/core/router/plugin/RouterPluginManager.js.map +0 -1
  438. package/dist/core/router/plugin/index.cjs.map +0 -1
  439. package/dist/core/router/plugin/index.js.map +0 -1
  440. package/dist/core/router/plugin/types.cjs.map +0 -1
  441. package/dist/core/router/plugin/types.js.map +0 -1
  442. package/dist/core/router/types.cjs.map +0 -1
  443. package/dist/core/router/types.js.map +0 -1
  444. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +0 -1
  445. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +0 -1
  446. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +0 -1
  447. package/dist/core/router/utils/adapters/react-router/transform.js.map +0 -1
  448. package/dist/core/router/utils/transform.cjs.map +0 -1
  449. package/dist/core/router/utils/transform.js.map +0 -1
  450. package/dist/core/router/validation/RouterConfigValidator.cjs.map +0 -1
  451. package/dist/core/router/validation/RouterConfigValidator.js.map +0 -1
  452. package/dist/core/router/validation/index.cjs.map +0 -1
  453. package/dist/core/router/validation/index.js.map +0 -1
  454. package/dist/core/router/validation/schema.cjs.map +0 -1
  455. package/dist/core/router/validation/schema.js.map +0 -1
  456. package/dist/core/router/version/RouteVersionManager.cjs.map +0 -1
  457. package/dist/core/router/version/RouteVersionManager.js.map +0 -1
  458. package/dist/core/router/version/index.cjs.map +0 -1
  459. package/dist/core/router/version/index.js.map +0 -1
  460. package/dist/core/splash/SplashScreen.cjs.map +0 -1
  461. package/dist/core/splash/SplashScreen.js.map +0 -1
  462. package/dist/core/splash/index.cjs.map +0 -1
  463. package/dist/core/splash/index.js.map +0 -1
  464. package/dist/core/splash/splashScreenUtils.cjs.map +0 -1
  465. package/dist/core/splash/splashScreenUtils.js.map +0 -1
  466. package/dist/core/startup/AppInstance.cjs.map +0 -1
  467. package/dist/core/startup/AppInstance.js.map +0 -1
  468. package/dist/core/startup/environment.cjs.map +0 -1
  469. package/dist/core/startup/environment.js.map +0 -1
  470. package/dist/core/startup/index.cjs.map +0 -1
  471. package/dist/core/startup/index.js.map +0 -1
  472. package/dist/core/startup/initializeServices.cjs.map +0 -1
  473. package/dist/core/startup/initializeServices.js.map +0 -1
  474. package/dist/core/startup/performanceTracker.cjs.map +0 -1
  475. package/dist/core/startup/performanceTracker.js.map +0 -1
  476. package/dist/core/startup/renderApp.cjs.map +0 -1
  477. package/dist/core/startup/renderApp.js.map +0 -1
  478. package/dist/core/startup/startApp.cjs.map +0 -1
  479. package/dist/core/startup/startApp.js.map +0 -1
  480. package/dist/core/types.cjs.map +0 -1
  481. package/dist/core/types.js.map +0 -1
  482. package/dist/index.cjs.map +0 -1
  483. package/dist/index.js.map +0 -1
  484. package/dist/index.umd.cjs.map +0 -1
  485. package/dist/index.umd.js.map +0 -1
  486. package/dist/kernel/constants.cjs.map +0 -1
  487. package/dist/kernel/constants.js.map +0 -1
  488. package/dist/kernel/index.cjs.map +0 -1
  489. package/dist/kernel/index.js.map +0 -1
  490. package/dist/kernel/kernel.cjs.map +0 -1
  491. package/dist/kernel/kernel.js.map +0 -1
  492. package/dist/kernel/manager/cacheManager.cjs.map +0 -1
  493. package/dist/kernel/manager/cacheManager.js.map +0 -1
  494. package/dist/kernel/manager/i18n/I18nManager.cjs.map +0 -1
  495. package/dist/kernel/manager/i18n/I18nManager.js.map +0 -1
  496. package/dist/kernel/manager/i18n/i18n.persistence.cjs.map +0 -1
  497. package/dist/kernel/manager/i18n/i18n.persistence.js.map +0 -1
  498. package/dist/kernel/manager/i18n/i18n.schema.cjs.map +0 -1
  499. package/dist/kernel/manager/i18n/i18n.schema.js.map +0 -1
  500. package/dist/kernel/manager/i18n/index.cjs.map +0 -1
  501. package/dist/kernel/manager/i18n/index.js.map +0 -1
  502. package/dist/kernel/manager/i18nManager.cjs.map +0 -1
  503. package/dist/kernel/manager/i18nManager.js.map +0 -1
  504. package/dist/kernel/manager/index.cjs.map +0 -1
  505. package/dist/kernel/manager/index.js.map +0 -1
  506. package/dist/kernel/manager/logger/LoggerManager.cjs.map +0 -1
  507. package/dist/kernel/manager/logger/LoggerManager.js.map +0 -1
  508. package/dist/kernel/manager/logger/index.cjs.map +0 -1
  509. package/dist/kernel/manager/logger/index.js.map +0 -1
  510. package/dist/kernel/manager/logger/logger.persistence.cjs.map +0 -1
  511. package/dist/kernel/manager/logger/logger.persistence.js.map +0 -1
  512. package/dist/kernel/manager/logger/logger.schema.cjs.map +0 -1
  513. package/dist/kernel/manager/logger/logger.schema.js.map +0 -1
  514. package/dist/kernel/manager/loggerManager.cjs.map +0 -1
  515. package/dist/kernel/manager/loggerManager.js.map +0 -1
  516. package/dist/kernel/manager/persistence.cjs +0 -78
  517. package/dist/kernel/manager/persistence.cjs.map +0 -1
  518. package/dist/kernel/manager/persistence.d.ts +0 -3
  519. package/dist/kernel/manager/persistence.js +0 -60
  520. package/dist/kernel/manager/persistence.js.map +0 -1
  521. package/dist/kernel/manager/theme/ThemeManager.cjs.map +0 -1
  522. package/dist/kernel/manager/theme/ThemeManager.js.map +0 -1
  523. package/dist/kernel/manager/theme/index.cjs.map +0 -1
  524. package/dist/kernel/manager/theme/index.js.map +0 -1
  525. package/dist/kernel/manager/theme/theme.dom.cjs.map +0 -1
  526. package/dist/kernel/manager/theme/theme.dom.js.map +0 -1
  527. package/dist/kernel/manager/theme/theme.persistence.cjs.map +0 -1
  528. package/dist/kernel/manager/theme/theme.persistence.js.map +0 -1
  529. package/dist/kernel/manager/theme/theme.schema.cjs.map +0 -1
  530. package/dist/kernel/manager/theme/theme.schema.js.map +0 -1
  531. package/dist/kernel/manager/themeManager.cjs.map +0 -1
  532. package/dist/kernel/manager/themeManager.js.map +0 -1
  533. package/dist/kernel/types.cjs.map +0 -1
  534. package/dist/kernel/types.js.map +0 -1
  535. package/dist/library/index.cjs.map +0 -1
  536. package/dist/library/index.js.map +0 -1
  537. package/dist/library/locale/index.cjs.map +0 -1
  538. package/dist/library/locale/index.js.map +0 -1
  539. package/dist/library/locale/langs/en-us/index.cjs.map +0 -1
  540. package/dist/library/locale/langs/en-us/index.js.map +0 -1
  541. package/dist/library/locale/langs/zh-cn/index.cjs.map +0 -1
  542. package/dist/library/locale/langs/zh-cn/index.js.map +0 -1
  543. package/dist/library/locale/types.cjs.map +0 -1
  544. package/dist/library/locale/types.js.map +0 -1
  545. package/dist/library/storage/cache.cjs.map +0 -1
  546. package/dist/library/storage/cache.js.map +0 -1
  547. package/dist/library/storage/encryption.cjs.map +0 -1
  548. package/dist/library/storage/encryption.js.map +0 -1
  549. package/dist/library/storage/index.cjs.map +0 -1
  550. package/dist/library/storage/index.js.map +0 -1
  551. package/dist/request/adapter/RequestAdapter.d.ts +0 -85
  552. package/dist/request/adapter/RequestAdapter.js +0 -70
  553. package/dist/request/adapter/RequestAdapter.js.map +0 -1
  554. package/dist/request/adapter/axiosAdapter.d.ts +0 -10
  555. package/dist/request/adapter/axiosAdapter.js +0 -115
  556. package/dist/request/adapter/axiosAdapter.js.map +0 -1
  557. package/dist/request/adapter/fetchAdapter.d.ts +0 -10
  558. package/dist/request/adapter/fetchAdapter.js +0 -126
  559. package/dist/request/adapter/fetchAdapter.js.map +0 -1
  560. package/dist/request/adapter/index.d.ts +0 -9
  561. package/dist/request/adapter/index.js +0 -14
  562. package/dist/request/adapter/index.js.map +0 -1
  563. package/dist/request/adapter/kyAdapter.d.ts +0 -10
  564. package/dist/request/adapter/kyAdapter.js +0 -142
  565. package/dist/request/adapter/kyAdapter.js.map +0 -1
  566. package/dist/request/adapter/undiciAdapter.d.ts +0 -10
  567. package/dist/request/adapter/undiciAdapter.js +0 -164
  568. package/dist/request/adapter/undiciAdapter.js.map +0 -1
  569. package/dist/request/adapter.d.ts +0 -1
  570. package/dist/request/core/RequestClient.d.ts +0 -134
  571. package/dist/request/core/RequestClient.js +0 -509
  572. package/dist/request/core/RequestClient.js.map +0 -1
  573. package/dist/request/core/index.d.ts +0 -5
  574. package/dist/request/core/index.js +0 -5
  575. package/dist/request/core/index.js.map +0 -1
  576. package/dist/request/core.d.ts +0 -1
  577. package/dist/request/index.d.ts +0 -1
  578. package/dist/request/index.js +0 -50
  579. package/dist/request/index.js.map +0 -1
  580. package/dist/request/plugin/RequestPlugin.d.ts +0 -170
  581. package/dist/request/plugin/RequestPlugin.js +0 -203
  582. package/dist/request/plugin/RequestPlugin.js.map +0 -1
  583. package/dist/request/plugin/cache.d.ts +0 -33
  584. package/dist/request/plugin/cache.js +0 -264
  585. package/dist/request/plugin/cache.js.map +0 -1
  586. package/dist/request/plugin/csrfPlugin.d.ts +0 -21
  587. package/dist/request/plugin/csrfPlugin.js +0 -44
  588. package/dist/request/plugin/csrfPlugin.js.map +0 -1
  589. package/dist/request/plugin/index.d.ts +0 -11
  590. package/dist/request/plugin/index.js +0 -12
  591. package/dist/request/plugin/index.js.map +0 -1
  592. package/dist/request/plugin/monitoring.d.ts +0 -112
  593. package/dist/request/plugin/monitoring.js +0 -205
  594. package/dist/request/plugin/monitoring.js.map +0 -1
  595. package/dist/request/plugin/queue.d.ts +0 -91
  596. package/dist/request/plugin/queue.js +0 -156
  597. package/dist/request/plugin/queue.js.map +0 -1
  598. package/dist/request/plugin/retry.d.ts +0 -34
  599. package/dist/request/plugin/retry.js +0 -93
  600. package/dist/request/plugin/retry.js.map +0 -1
  601. package/dist/request/plugin/validation.d.ts +0 -26
  602. package/dist/request/plugin/validation.js +0 -116
  603. package/dist/request/plugin/validation.js.map +0 -1
  604. package/dist/request/plugin.d.ts +0 -1
  605. package/dist/request/runtime/RequestContext.d.ts +0 -50
  606. package/dist/request/runtime/RequestContext.js +0 -86
  607. package/dist/request/runtime/RequestContext.js.map +0 -1
  608. package/dist/request/runtime/index.d.ts +0 -4
  609. package/dist/request/runtime/index.js +0 -5
  610. package/dist/request/runtime/index.js.map +0 -1
  611. package/dist/request/runtime.d.ts +0 -1
  612. package/dist/request/types.d.ts +0 -1
  613. package/dist/request/types.js +0 -97
  614. package/dist/request/types.js.map +0 -1
  615. package/dist/request/utils/RequestQueueManager.d.ts +0 -74
  616. package/dist/request/utils/RequestQueueManager.js +0 -160
  617. package/dist/request/utils/RequestQueueManager.js.map +0 -1
  618. package/dist/request/utils/dependencyCheck.d.ts +0 -63
  619. package/dist/request/utils/dependencyCheck.js +0 -192
  620. package/dist/request/utils/dependencyCheck.js.map +0 -1
  621. package/dist/request/utils/index.d.ts +0 -5
  622. package/dist/request/utils/index.js +0 -6
  623. package/dist/request/utils/index.js.map +0 -1
  624. package/dist/request/utils.d.ts +0 -1
  625. package/dist/state/StateManager.cjs.map +0 -1
  626. package/dist/state/StateManager.js.map +0 -1
  627. package/dist/state/adapters/AdapterFactory.cjs.map +0 -1
  628. package/dist/state/adapters/AdapterFactory.js.map +0 -1
  629. package/dist/state/adapters/DefaultAdapter.cjs.map +0 -1
  630. package/dist/state/adapters/DefaultAdapter.js.map +0 -1
  631. package/dist/state/adapters/ReduxAdapter.cjs.map +0 -1
  632. package/dist/state/adapters/ReduxAdapter.js.map +0 -1
  633. package/dist/state/adapters/ZustandAdapter.cjs.map +0 -1
  634. package/dist/state/adapters/ZustandAdapter.js.map +0 -1
  635. package/dist/state/adapters/index.cjs.map +0 -1
  636. package/dist/state/adapters/index.js.map +0 -1
  637. package/dist/state/adapters/types.cjs.map +0 -1
  638. package/dist/state/adapters/types.js.map +0 -1
  639. package/dist/state/core/DerivedStateInstance.cjs.map +0 -1
  640. package/dist/state/core/DerivedStateInstance.js.map +0 -1
  641. package/dist/state/core/StateInstance.cjs.map +0 -1
  642. package/dist/state/core/StateInstance.js.map +0 -1
  643. package/dist/state/core/StateRegistry.cjs.map +0 -1
  644. package/dist/state/core/StateRegistry.js.map +0 -1
  645. package/dist/state/core/StateScope.cjs.map +0 -1
  646. package/dist/state/core/StateScope.js.map +0 -1
  647. package/dist/state/core/index.cjs.map +0 -1
  648. package/dist/state/core/index.js.map +0 -1
  649. package/dist/state/index.cjs.map +0 -1
  650. package/dist/state/index.js.map +0 -1
  651. package/dist/state/types.cjs.map +0 -1
  652. package/dist/state/types.js.map +0 -1
  653. package/dist/state.umd.js.map +0 -1
  654. package/dist/types.cjs.map +0 -1
  655. package/dist/types.js.map +0 -1
  656. package/dist/utils/analytics.cjs.map +0 -1
  657. package/dist/utils/analytics.js.map +0 -1
  658. package/dist/utils/configSecurity.cjs.map +0 -1
  659. package/dist/utils/configSecurity.js.map +0 -1
  660. package/dist/utils/csrf.cjs.map +0 -1
  661. package/dist/utils/csrf.js.map +0 -1
  662. package/dist/utils/errors/ErrorCodes.cjs.map +0 -1
  663. package/dist/utils/errors/ErrorCodes.js.map +0 -1
  664. package/dist/utils/errors.cjs.map +0 -1
  665. package/dist/utils/errors.js.map +0 -1
  666. package/dist/utils/index.cjs.map +0 -1
  667. package/dist/utils/index.js.map +0 -1
  668. package/dist/utils/logger.cjs.map +0 -1
  669. package/dist/utils/logger.js.map +0 -1
  670. package/dist/utils/logger.types.cjs.map +0 -1
  671. package/dist/utils/logger.types.js.map +0 -1
  672. package/dist/utils/monitoring.cjs.map +0 -1
  673. package/dist/utils/monitoring.js.map +0 -1
  674. package/dist/utils/performance.cjs.map +0 -1
  675. package/dist/utils/performance.js.map +0 -1
  676. package/dist/utils/resourceLoader.cjs.map +0 -1
  677. package/dist/utils/resourceLoader.js.map +0 -1
  678. package/dist/utils/runtimeSecurity.cjs.map +0 -1
  679. package/dist/utils/runtimeSecurity.js.map +0 -1
  680. package/dist/utils/security.cjs.map +0 -1
  681. package/dist/utils/security.js.map +0 -1
  682. package/dist/utils/traceId.cjs.map +0 -1
  683. package/dist/utils/traceId.js.map +0 -1
  684. package/dist/utils/validation.cjs.map +0 -1
  685. package/dist/utils/validation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/kernel/manager/theme/theme.schema.ts"],"sourcesContent":["import type { ThemeSnapshot } from '../../types';\n\nexport type ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;\n\nconst VALID_THEME_MODES = new Set<ThemeSnapshot['mode']>(['light', 'dark', 'system']);\nconst TOKEN_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*$/;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction hasOwnProperty<T extends object>(value: T, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nexport function cloneTheme(theme: ThemeSnapshot): ThemeSnapshot {\n return {\n ...theme,\n ...(theme.tokens ? { tokens: { ...theme.tokens } } : {}),\n };\n}\n\nexport function sanitizeTokens(tokens: unknown): ThemeSnapshot['tokens'] {\n if (!isPlainObject(tokens)) {\n return undefined;\n }\n\n const sanitizedTokens: NonNullable<ThemeSnapshot['tokens']> = {};\n\n for (const [token, tokenValue] of Object.entries(tokens)) {\n if (!TOKEN_NAME_PATTERN.test(token)) {\n continue;\n }\n\n if (typeof tokenValue === 'string' || typeof tokenValue === 'number') {\n sanitizedTokens[token] = tokenValue;\n }\n }\n\n return Object.keys(sanitizedTokens).length > 0 ? sanitizedTokens : undefined;\n}\n\nexport function normalizeTheme(\n value: unknown,\n fallback: ThemeSnapshot\n): ThemeSnapshot {\n const source = isPlainObject(value) ? value : {};\n const mode = VALID_THEME_MODES.has(source.mode as ThemeSnapshot['mode'])\n ? (source.mode as ThemeSnapshot['mode'])\n : fallback.mode;\n const primaryColor = typeof source.primaryColor === 'string' && source.primaryColor.trim()\n ? source.primaryColor\n : fallback.primaryColor;\n const fallbackTokens = sanitizeTokens(fallback.tokens);\n const incomingTokens = sanitizeTokens(source.tokens);\n\n return {\n mode,\n ...(primaryColor ? { primaryColor } : {}),\n ...(incomingTokens || fallbackTokens\n ? { tokens: { ...(fallbackTokens || {}), ...(incomingTokens || {}) } }\n : {}),\n };\n}\n\nexport function mergeTheme(current: ThemeSnapshot, next: Partial<ThemeSnapshot>): ThemeSnapshot {\n const mergedTheme: ThemeSnapshot = {\n mode: hasOwnProperty(next, 'mode') && VALID_THEME_MODES.has(next.mode as ThemeSnapshot['mode'])\n ? (next.mode as ThemeSnapshot['mode'])\n : current.mode,\n ...(hasOwnProperty(next, 'primaryColor')\n ? (typeof next.primaryColor === 'string' && next.primaryColor.trim()\n ? { primaryColor: next.primaryColor }\n : {})\n : (current.primaryColor ? { primaryColor: current.primaryColor } : {})),\n ...(hasOwnProperty(next, 'tokens')\n ? (sanitizeTokens(next.tokens) ? { tokens: sanitizeTokens(next.tokens) } : {})\n : (current.tokens ? { tokens: { ...current.tokens } } : {})),\n };\n\n return normalizeTheme(mergedTheme, DEFAULT_EMPTY_THEME);\n}\n\nconst DEFAULT_EMPTY_THEME: ThemeSnapshot = { mode: 'light' };\n\nexport function isThemeEqual(left: ThemeSnapshot, right: ThemeSnapshot): boolean {\n if (left.mode !== right.mode || left.primaryColor !== right.primaryColor) {\n return false;\n }\n\n const leftTokens = left.tokens || {};\n const rightTokens = right.tokens || {};\n const leftKeys = Object.keys(leftTokens);\n const rightKeys = Object.keys(rightTokens);\n\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n for (const key of leftKeys) {\n if (leftTokens[key] !== rightTokens[key]) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":["cloneTheme","isThemeEqual","mergeTheme","normalizeTheme","sanitizeTokens","VALID_THEME_MODES","Set","TOKEN_NAME_PATTERN","isPlainObject","value","Object","prototype","toString","call","hasOwnProperty","key","theme","tokens","undefined","sanitizedTokens","token","tokenValue","entries","test","keys","length","fallback","source","mode","has","primaryColor","trim","fallbackTokens","incomingTokens","current","next","mergedTheme","DEFAULT_EMPTY_THEME","left","right","leftTokens","rightTokens","leftKeys","rightKeys"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/kernel/manager/theme/theme.schema.ts"],"sourcesContent":["import type { ThemeSnapshot } from '../../types';\n\nexport type ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;\n\nconst VALID_THEME_MODES = new Set<ThemeSnapshot['mode']>(['light', 'dark', 'system']);\nconst TOKEN_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_-]*$/;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction hasOwnProperty<T extends object>(value: T, key: PropertyKey): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nexport function cloneTheme(theme: ThemeSnapshot): ThemeSnapshot {\n return {\n ...theme,\n ...(theme.tokens ? { tokens: { ...theme.tokens } } : {}),\n };\n}\n\nexport function sanitizeTokens(tokens: unknown): ThemeSnapshot['tokens'] {\n if (!isPlainObject(tokens)) {\n return undefined;\n }\n\n const sanitizedTokens: NonNullable<ThemeSnapshot['tokens']> = {};\n\n for (const [token, tokenValue] of Object.entries(tokens)) {\n if (!TOKEN_NAME_PATTERN.test(token)) {\n continue;\n }\n\n if (typeof tokenValue === 'string' || typeof tokenValue === 'number') {\n sanitizedTokens[token] = tokenValue;\n }\n }\n\n return Object.keys(sanitizedTokens).length > 0 ? sanitizedTokens : undefined;\n}\n\nexport function normalizeTheme(\n value: unknown,\n fallback: ThemeSnapshot\n): ThemeSnapshot {\n const source = isPlainObject(value) ? value : {};\n const mode = VALID_THEME_MODES.has(source.mode as ThemeSnapshot['mode'])\n ? (source.mode as ThemeSnapshot['mode'])\n : fallback.mode;\n const primaryColor = typeof source.primaryColor === 'string' && source.primaryColor.trim()\n ? source.primaryColor\n : fallback.primaryColor;\n const fallbackTokens = sanitizeTokens(fallback.tokens);\n const incomingTokens = sanitizeTokens(source.tokens);\n\n return {\n mode,\n ...(primaryColor ? { primaryColor } : {}),\n ...(incomingTokens || fallbackTokens\n ? { tokens: { ...(fallbackTokens || {}), ...(incomingTokens || {}) } }\n : {}),\n };\n}\n\nexport function mergeTheme(current: ThemeSnapshot, next: Partial<ThemeSnapshot>): ThemeSnapshot {\n const mergedTheme: ThemeSnapshot = {\n mode: hasOwnProperty(next, 'mode') && VALID_THEME_MODES.has(next.mode as ThemeSnapshot['mode'])\n ? (next.mode as ThemeSnapshot['mode'])\n : current.mode,\n ...(hasOwnProperty(next, 'primaryColor')\n ? (typeof next.primaryColor === 'string' && next.primaryColor.trim()\n ? { primaryColor: next.primaryColor }\n : {})\n : (current.primaryColor ? { primaryColor: current.primaryColor } : {})),\n ...(hasOwnProperty(next, 'tokens')\n ? (sanitizeTokens(next.tokens) ? { tokens: sanitizeTokens(next.tokens) } : {})\n : (current.tokens ? { tokens: { ...current.tokens } } : {})),\n };\n\n return normalizeTheme(mergedTheme, DEFAULT_EMPTY_THEME);\n}\n\nconst DEFAULT_EMPTY_THEME: ThemeSnapshot = { mode: 'light' };\n\nexport function isThemeEqual(left: ThemeSnapshot, right: ThemeSnapshot): boolean {\n if (left.mode !== right.mode || left.primaryColor !== right.primaryColor) {\n return false;\n }\n\n const leftTokens = left.tokens || {};\n const rightTokens = right.tokens || {};\n const leftKeys = Object.keys(leftTokens);\n const rightKeys = Object.keys(rightTokens);\n\n if (leftKeys.length !== rightKeys.length) {\n return false;\n }\n\n for (const key of leftKeys) {\n if (leftTokens[key] !== rightTokens[key]) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":["VALID_THEME_MODES","Set","TOKEN_NAME_PATTERN","isPlainObject","value","Object","prototype","toString","call","hasOwnProperty","key","cloneTheme","theme","tokens","sanitizeTokens","undefined","sanitizedTokens","token","tokenValue","entries","test","keys","length","normalizeTheme","fallback","source","mode","has","primaryColor","trim","fallbackTokens","incomingTokens","mergeTheme","current","next","mergedTheme","DEFAULT_EMPTY_THEME","isThemeEqual","left","right","leftTokens","rightTokens","leftKeys","rightKeys"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["export { ThemeManager } from './theme';\n"],"names":["ThemeManager"],"mappings":";;;;+BAASA;;;eAAAA,mBAAY;;;uBAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["export { ThemeManager } from './theme';\n"],"names":["ThemeManager"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/kernel/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/kernel/types.ts"],"sourcesContent":["import type { LogLevel } from '@vlian/logger';\nimport type { StartOptions as CoreStartOptions } from '../core/types';\nimport type { StorageOptions } from '../types';\nimport type {StorageInstance} from \"@vlian/utils\"\nimport type { Resource } from \"i18next\";\n\nexport type KernelInstanceId = string;\nexport type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';\n\nexport interface ThemeSnapshot {\n mode: 'light' | 'dark' | 'system';\n primaryColor?: string;\n tokens?: Record<string, string | number>;\n}\n\nexport interface I18nSnapshot {\n locale: string;\n resources?: Resource;\n}\n\nexport interface PersistenceOptions {\n enabled?: boolean;\n storage?: KernelStorageDriver;\n key?: string;\n}\n\nexport interface LoggerManagerConfig {\n level?: LogLevel;\n persistence?: PersistenceOptions;\n}\n\nexport interface CacheManagerConfig {\n enabled?: boolean;\n storageOptions?: Partial<StorageOptions>;\n}\n\nexport interface ThemeManagerConfig {\n initial?: ThemeSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface I18nManagerConfig {\n initial?: I18nSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface KernelConfig {\n logger: LoggerManagerConfig;\n cache: CacheManagerConfig;\n theme: ThemeManagerConfig;\n i18n: I18nManagerConfig;\n}\n\nexport interface KernelTimingMetric {\n phase: string;\n startTime: number;\n endTime: number;\n duration: number;\n}\n\nexport interface KernelManagerContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n cacheManager: StorageInstance;\n}\n\nexport interface KernelManager<TSnapshot = unknown> {\n initialize: (context: KernelManagerContext) => Promise<void> | void;\n getSnapshot?: () => TSnapshot;\n destroy?: () => Promise<void> | void;\n}\n\nexport interface KernelRenderContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n}\n\nexport interface StartupHooks {\n initialize?: () => Promise<void> | void;\n}\n\nexport interface StartOptions extends CoreStartOptions {\n config?: Partial<KernelConfig>;\n configLoader?: () => Promise<Partial<KernelConfig> | void> | Partial<KernelConfig> | void;\n render?: (context: KernelRenderContext) => Promise<void> | void;\n customManagers?: Record<string, KernelManager>;\n hooks?: StartupHooks;\n}\n\nexport type KernelStartOptions = StartOptions;\n"],"names":[],"mappings":"AAyFA,WAA8C"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/library/index.ts"],"sourcesContent":["export * from './locale/index';\nexport * from './storage/index';"],"names":[],"mappings":";;;;qBAAc;qBACA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/library/index.ts"],"sourcesContent":["export * from './locale/index';\nexport * from './storage/index';"],"names":[],"mappings":"AAAA,cAAc,iBAAiB;AAC/B,cAAc,kBAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport type { Callback, InitOptions } from \"i18next\";\nexport const reactI18nextInstance = i18n.use(initReactI18next);\n\n\n/** Setup plugin i18n */\nexport async function setupI18n <T = unknown>(options: InitOptions<T>, callback?: Callback): Promise<void> {\n await reactI18nextInstance.init(options, callback);\n}\n\nexport const $t = i18n.t;\n\nexport async function setLang(locale: string, callback?: Callback) {\n await i18n.changeLanguage(locale, callback);\n}\n"],"names":["$t","reactI18nextInstance","setLang","setupI18n","i18n","use","initReactI18next","options","callback","init","t","locale","changeLanguage"],"mappings":";;;;;;;;;;;QAWaA;eAAAA;;QARAC;eAAAA;;QAUSC;eAAAA;;QANAC;eAAAA;;;gEAPL;8BACgB;;;;;;AAE1B,MAAMF,uBAAuBG,gBAAI,CAACC,GAAG,CAACC,8BAAgB;AAItD,eAAeH,UAAwBI,OAAuB,EAAEC,QAAmB;IACtF,MAAMP,qBAAqBQ,IAAI,CAACF,SAASC;AAC7C;AAEO,MAAMR,KAAKI,gBAAI,CAACM,CAAC;AAEjB,eAAeR,QAAQS,MAAc,EAAEH,QAAmB;IAC7D,MAAMJ,gBAAI,CAACQ,cAAc,CAACD,QAAQH;AACtC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport type { Callback, InitOptions } from \"i18next\";\nexport const reactI18nextInstance = i18n.use(initReactI18next);\n\n\n/** Setup plugin i18n */\nexport async function setupI18n <T = unknown>(options: InitOptions<T>, callback?: Callback): Promise<void> {\n await reactI18nextInstance.init(options, callback);\n}\n\nexport const $t = i18n.t;\n\nexport async function setLang(locale: string, callback?: Callback) {\n await i18n.changeLanguage(locale, callback);\n}\n"],"names":["i18n","initReactI18next","reactI18nextInstance","use","setupI18n","options","callback","init","$t","t","setLang","locale","changeLanguage"],"mappings":"AAAA,OAAOA,UAAU,UAAU;AAC3B,SAASC,gBAAgB,QAAQ,gBAAgB;AAEjD,OAAO,MAAMC,uBAAuBF,KAAKG,GAAG,CAACF,kBAAkB;AAG/D,sBAAsB,GACtB,OAAO,eAAeG,UAAwBC,OAAuB,EAAEC,QAAmB;IACtF,MAAMJ,qBAAqBK,IAAI,CAACF,SAASC;AAC7C;AAEA,OAAO,MAAME,KAAKR,KAAKS,CAAC,CAAC;AAEzB,OAAO,eAAeC,QAAQC,MAAc,EAAEL,QAAmB;IAC7D,MAAMN,KAAKY,cAAc,CAACD,QAAQL;AACtC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/library/locale/langs/en-us/index.ts"],"sourcesContent":["import { Schema } from \"../../types\"\n\nconst local: Schema['translation'] = {\n notfound: {\n home: \"Back to Home\"\n },\n defaultApp: {\n title: \"Welcome to Secra Framework\",\n description: \"Framework has been successfully started! Please provide your app component to get started.\",\n quickStart: {\n title: \"Quick Start\",\n description: \"Provide the app option in your startup configuration to render your application:\",\n code: \"import { start } from '@vlian/framework';\\nimport App from './App';\\n\\nstart({\\n app: <App />,\\n});\"\n },\n nextSteps: {\n title: \"Next Steps\",\n step1: \"Create your application root component (e.g., App.tsx)\",\n step2: \"Pass the app option in your startup configuration\",\n step3: \"Start developing your application features\"\n },\n footer: \"Secra Framework - Modern Low-Code Frontend Application Framework\"\n }\n};\n\nexport default local;\n"],"names":["local","notfound","home","defaultApp","title","description","quickStart","code","nextSteps","step1","step2","step3","footer"],"mappings":";;;;+BAwBA;;;eAAA;;;AAtBA,MAAMA,QAA+B;IACjCC,UAAU;QACNC,MAAM;IACV;IACAC,YAAY;QACRC,OAAO;QACPC,aAAa;QACbC,YAAY;YACRF,OAAO;YACPC,aAAa;YACbE,MAAM;QACV;QACAC,WAAW;YACPJ,OAAO;YACPK,OAAO;YACPC,OAAO;YACPC,OAAO;QACX;QACAC,QAAQ;IACZ;AACJ;MAEA,WAAeZ"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/library/locale/langs/en-us/index.ts"],"sourcesContent":["import { Schema } from \"../../types\"\n\nconst local: Schema['translation'] = {\n notfound: {\n home: \"Back to Home\"\n },\n defaultApp: {\n title: \"Welcome to Secra Framework\",\n description: \"Framework has been successfully started! Please provide your app component to get started.\",\n quickStart: {\n title: \"Quick Start\",\n description: \"Provide the app option in your startup configuration to render your application:\",\n code: \"import { start } from '@vlian/framework';\\nimport App from './App';\\n\\nstart({\\n app: <App />,\\n});\"\n },\n nextSteps: {\n title: \"Next Steps\",\n step1: \"Create your application root component (e.g., App.tsx)\",\n step2: \"Pass the app option in your startup configuration\",\n step3: \"Start developing your application features\"\n },\n footer: \"Secra Framework - Modern Low-Code Frontend Application Framework\"\n }\n};\n\nexport default local;\n"],"names":["local","notfound","home","defaultApp","title","description","quickStart","code","nextSteps","step1","step2","step3","footer"],"mappings":"AAEA,MAAMA,QAA+B;IACjCC,UAAU;QACNC,MAAM;IACV;IACAC,YAAY;QACRC,OAAO;QACPC,aAAa;QACbC,YAAY;YACRF,OAAO;YACPC,aAAa;YACbE,MAAM;QACV;QACAC,WAAW;YACPJ,OAAO;YACPK,OAAO;YACPC,OAAO;YACPC,OAAO;QACX;QACAC,QAAQ;IACZ;AACJ;AAEA,eAAeZ,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/library/locale/langs/zh-cn/index.ts"],"sourcesContent":["import { Schema } from \"../../types\"\n\nconst local: Schema['translation'] = {\n notfound: {\n home: \"回到首页\"\n },\n defaultApp: {\n title: \"欢迎使用 Secra Framework\",\n description: \"框架已成功启动!请提供您的应用组件以开始使用。\",\n quickStart: {\n title: \"快速开始\",\n description: \"在启动配置中提供 app 选项来渲染您的应用:\",\n code: \"import { start } from '@vlian/framework';\\nimport App from './App';\\n\\nstart({\\n app: <App />,\\n});\"\n },\n nextSteps: {\n title: \"下一步\",\n step1: \"创建您的应用根组件(如 App.tsx)\",\n step2: \"在启动配置中传入 app 选项\",\n step3: \"开始开发您的应用功能\"\n },\n footer: \"Secra Framework - 现代化的低代码前端应用框架\"\n }\n};\n\nexport default local;\n"],"names":["local","notfound","home","defaultApp","title","description","quickStart","code","nextSteps","step1","step2","step3","footer"],"mappings":";;;;+BAwBA;;;eAAA;;;AAtBA,MAAMA,QAA+B;IACjCC,UAAU;QACNC,MAAM;IACV;IACAC,YAAY;QACRC,OAAO;QACPC,aAAa;QACbC,YAAY;YACRF,OAAO;YACPC,aAAa;YACbE,MAAM;QACV;QACAC,WAAW;YACPJ,OAAO;YACPK,OAAO;YACPC,OAAO;YACPC,OAAO;QACX;QACAC,QAAQ;IACZ;AACJ;MAEA,WAAeZ"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../../src/library/locale/langs/zh-cn/index.ts"],"sourcesContent":["import { Schema } from \"../../types\"\n\nconst local: Schema['translation'] = {\n notfound: {\n home: \"回到首页\"\n },\n defaultApp: {\n title: \"欢迎使用 Secra Framework\",\n description: \"框架已成功启动!请提供您的应用组件以开始使用。\",\n quickStart: {\n title: \"快速开始\",\n description: \"在启动配置中提供 app 选项来渲染您的应用:\",\n code: \"import { start } from '@vlian/framework';\\nimport App from './App';\\n\\nstart({\\n app: <App />,\\n});\"\n },\n nextSteps: {\n title: \"下一步\",\n step1: \"创建您的应用根组件(如 App.tsx)\",\n step2: \"在启动配置中传入 app 选项\",\n step3: \"开始开发您的应用功能\"\n },\n footer: \"Secra Framework - 现代化的低代码前端应用框架\"\n }\n};\n\nexport default local;\n"],"names":["local","notfound","home","defaultApp","title","description","quickStart","code","nextSteps","step1","step2","step3","footer"],"mappings":"AAEA,MAAMA,QAA+B;IACjCC,UAAU;QACNC,MAAM;IACV;IACAC,YAAY;QACRC,OAAO;QACPC,aAAa;QACbC,YAAY;YACRF,OAAO;YACPC,aAAa;YACbE,MAAM;QACV;QACAC,WAAW;YACPJ,OAAO;YACPK,OAAO;YACPC,OAAO;YACPC,OAAO;QACX;QACAC,QAAQ;IACZ;AACJ;AAEA,eAAeZ,MAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/locale/types.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/locale/types.ts"],"sourcesContent":["export type LangType = 'en-US' | 'zh-CN';\n\nexport type Schema = {\n translation: {\n notfound: {\n home: string\n },\n defaultApp: {\n title: string;\n description: string;\n quickStart: {\n title: string;\n description: string;\n code: string;\n };\n nextSteps: {\n title: string;\n step1: string;\n step2: string;\n step3: string;\n };\n footer: string;\n };\n };\n};\n\nexport type GetI18nKey<T extends Record<string, unknown>, K extends keyof T = keyof T> = K extends string\n ? T[K] extends Record<string, unknown>\n ? `${K}.${GetI18nKey<T[K]>}`\n : K\n : never;\n\nexport type I18nKey = GetI18nKey<Schema['translation']>;\n\nexport type TranslateOptions<Locales extends string> = import('react-i18next').TranslationProps<Locales>;\n\nexport interface $T {\n (key: I18nKey): string;\n\n (key: I18nKey, plural: number, options?: TranslateOptions<LangType>): string;\n\n (key: I18nKey, defaultMsg: string, options?: TranslateOptions<I18nKey>): string;\n\n (key: I18nKey, list: unknown[], options?: TranslateOptions<I18nKey>): string;\n\n (key: I18nKey, list: unknown[], plural: number): string;\n\n (key: I18nKey, list: unknown[], defaultMsg: string): string;\n\n (key: I18nKey, named: Record<string, unknown>, options?: TranslateOptions<LangType>): string;\n\n (key: I18nKey, named: Record<string, unknown>, plural: number): string;\n\n (key: I18nKey, named: Record<string, unknown>, defaultMsg: string): string;\n}\n"],"names":[],"mappings":"AAoCA,WAkBC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/cache.ts"],"sourcesContent":["import type { StorageInstance } from '@vlian/utils';\n\n/**\n * 缓存项\n */\ninterface CacheItem<T> {\n /**\n * 数据\n */\n data: T;\n /**\n * 过期时间戳\n */\n expiresAt: number;\n /**\n * 创建时间戳\n */\n createdAt: number;\n}\n\n/**\n * 缓存配置\n */\nexport interface CacheConfig {\n /**\n * 默认过期时间(毫秒)\n */\n defaultTTL?: number;\n /**\n * 最大缓存项数量\n */\n maxSize?: number;\n}\n\n/**\n * LRU 缓存节点\n */\ninterface LRUNode<T> {\n key: string;\n value: CacheItem<T>;\n prev: LRUNode<T> | null;\n next: LRUNode<T> | null;\n}\n\n/**\n * 多级缓存管理器(使用 LRU 策略)\n */\nexport class MultiLevelCache {\n private memoryCache: Map<string, LRUNode<unknown>> = new Map();\n private storage: StorageInstance;\n private config: Required<CacheConfig>;\n private head: LRUNode<unknown> | null = null;\n private tail: LRUNode<unknown> | null = null;\n\n constructor(storage: StorageInstance, config: CacheConfig = {}) {\n this.storage = storage;\n this.config = {\n defaultTTL: config.defaultTTL ?? 24 * 60 * 60 * 1000, // 24小时\n maxSize: config.maxSize ?? 100,\n };\n }\n\n /**\n * 将节点移到链表头部(最近使用)\n */\n private moveToHead<T>(node: LRUNode<T>): void {\n const nodeAsUnknown = node as unknown as LRUNode<unknown>;\n if (nodeAsUnknown === this.head) {\n return;\n }\n\n // 从当前位置移除\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (nodeAsUnknown === this.tail) {\n this.tail = node.prev as unknown as LRUNode<unknown> | null;\n }\n\n // 移到头部\n node.prev = null;\n node.next = this.head as unknown as LRUNode<T> | null;\n if (this.head) {\n this.head.prev = nodeAsUnknown;\n }\n this.head = nodeAsUnknown;\n if (!this.tail) {\n this.tail = nodeAsUnknown;\n }\n }\n\n /**\n * 移除尾部节点(最久未使用)\n */\n private removeTail(): void {\n if (!this.tail) {\n return;\n }\n\n const key = this.tail.key;\n this.memoryCache.delete(key);\n\n if (this.tail.prev) {\n this.tail.prev.next = null;\n this.tail = this.tail.prev;\n } else {\n this.head = null;\n this.tail = null;\n }\n }\n\n /**\n * 获取缓存\n */\n async get<T>(key: string): Promise<T | null> {\n // 先检查内存缓存\n const node = this.memoryCache.get(key);\n if (node) {\n const item = node.value;\n if (item.expiresAt > Date.now()) {\n // 移到头部(最近使用)\n this.moveToHead(node as unknown as LRUNode<T>);\n return item.data as T;\n } else {\n // 已过期,删除\n this.memoryCache.delete(key);\n if (node === this.head) {\n this.head = node.next;\n }\n if (node === this.tail) {\n this.tail = node.prev;\n }\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n }\n }\n\n // 检查存储缓存\n try {\n const stored = await (this.storage as any).get(key);\n if (stored) {\n const item: CacheItem<T> = JSON.parse(stored);\n if (item.expiresAt > Date.now()) {\n // 更新内存缓存(使用 LRU)\n this.setInMemory(key, item);\n return item.data;\n } else {\n // 已过期,删除\n await (this.storage as any).remove(key);\n }\n }\n } catch (error) {\n // 忽略解析错误\n }\n\n return null;\n }\n\n /**\n * 在内存中设置缓存(LRU)\n */\n private setInMemory<T>(key: string, item: CacheItem<T>): void {\n let node = this.memoryCache.get(key);\n\n if (node) {\n // 更新现有节点\n node.value = item as unknown as CacheItem<unknown>;\n this.moveToHead(node as unknown as LRUNode<T>);\n } else {\n // 创建新节点\n node = {\n key,\n value: item as unknown as CacheItem<unknown>,\n prev: null,\n next: this.head,\n } as LRUNode<unknown>;\n\n if (this.head) {\n this.head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n\n this.memoryCache.set(key, node);\n\n // 如果超过最大大小,移除最久未使用的\n if (this.memoryCache.size > this.config.maxSize) {\n this.removeTail();\n }\n }\n }\n\n /**\n * 设置缓存\n */\n async set<T>(key: string, data: T, ttl?: number): Promise<void> {\n const expiresAt = Date.now() + (ttl || this.config.defaultTTL);\n const item: CacheItem<T> = {\n data,\n expiresAt,\n createdAt: Date.now(),\n };\n\n // 更新内存缓存(使用 LRU)\n this.setInMemory(key, item);\n\n // 更新存储缓存\n try {\n await (this.storage as any).set(key, item);\n } catch (error) {\n // 忽略存储错误\n }\n }\n\n /**\n * 删除缓存\n */\n async delete(key: string): Promise<void> {\n const node = this.memoryCache.get(key);\n if (node) {\n // 从链表中移除\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next;\n }\n if (node === this.tail) {\n this.tail = node.prev;\n }\n this.memoryCache.delete(key);\n }\n\n try {\n await (this.storage as any).remove(key);\n } catch (error) {\n // 忽略删除错误\n }\n }\n\n /**\n * 清空缓存\n */\n async clear(): Promise<void> {\n this.memoryCache.clear();\n // 注意:这里不清空 storage,因为可能包含其他数据\n }\n\n /**\n * 清理过期项(优化版本:批量删除,减少 DOM 操作)\n */\n async cleanup(): Promise<void> {\n const now = Date.now();\n const keysToDelete: string[] = [];\n const nodesToRemove: LRUNode<unknown>[] = [];\n\n // 批量收集需要删除的项\n for (const [key, node] of this.memoryCache.entries()) {\n if (node.value.expiresAt <= now) {\n keysToDelete.push(key);\n nodesToRemove.push(node);\n }\n }\n\n // 批量删除(优化性能)\n if (keysToDelete.length > 0) {\n // 从链表中移除节点\n for (const node of nodesToRemove) {\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next as unknown as LRUNode<unknown> | null;\n }\n if (node === this.tail) {\n this.tail = node.prev as unknown as LRUNode<unknown> | null;\n }\n }\n\n // 批量删除 Map 中的项\n keysToDelete.forEach((key) => this.memoryCache.delete(key));\n }\n\n // 注意:存储缓存的清理由存储系统自己处理(通过过期时间)\n }\n}\n"],"names":["MultiLevelCache","moveToHead","node","nodeAsUnknown","head","prev","next","tail","removeTail","key","memoryCache","delete","get","item","value","expiresAt","Date","now","data","stored","storage","JSON","parse","setInMemory","remove","error","set","size","config","maxSize","ttl","defaultTTL","createdAt","clear","cleanup","keysToDelete","nodesToRemove","entries","push","length","forEach","Map"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/cache.ts"],"sourcesContent":["import type { StorageInstance } from '@vlian/utils';\n\n/**\n * 缓存项\n */\ninterface CacheItem<T> {\n /**\n * 数据\n */\n data: T;\n /**\n * 过期时间戳\n */\n expiresAt: number;\n /**\n * 创建时间戳\n */\n createdAt: number;\n}\n\n/**\n * 缓存配置\n */\nexport interface CacheConfig {\n /**\n * 默认过期时间(毫秒)\n */\n defaultTTL?: number;\n /**\n * 最大缓存项数量\n */\n maxSize?: number;\n}\n\n/**\n * LRU 缓存节点\n */\ninterface LRUNode<T> {\n key: string;\n value: CacheItem<T>;\n prev: LRUNode<T> | null;\n next: LRUNode<T> | null;\n}\n\n/**\n * 多级缓存管理器(使用 LRU 策略)\n */\nexport class MultiLevelCache {\n private memoryCache: Map<string, LRUNode<unknown>> = new Map();\n private storage: StorageInstance;\n private config: Required<CacheConfig>;\n private head: LRUNode<unknown> | null = null;\n private tail: LRUNode<unknown> | null = null;\n\n constructor(storage: StorageInstance, config: CacheConfig = {}) {\n this.storage = storage;\n this.config = {\n defaultTTL: config.defaultTTL ?? 24 * 60 * 60 * 1000, // 24小时\n maxSize: config.maxSize ?? 100,\n };\n }\n\n /**\n * 将节点移到链表头部(最近使用)\n */\n private moveToHead<T>(node: LRUNode<T>): void {\n const nodeAsUnknown = node as unknown as LRUNode<unknown>;\n if (nodeAsUnknown === this.head) {\n return;\n }\n\n // 从当前位置移除\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (nodeAsUnknown === this.tail) {\n this.tail = node.prev as unknown as LRUNode<unknown> | null;\n }\n\n // 移到头部\n node.prev = null;\n node.next = this.head as unknown as LRUNode<T> | null;\n if (this.head) {\n this.head.prev = nodeAsUnknown;\n }\n this.head = nodeAsUnknown;\n if (!this.tail) {\n this.tail = nodeAsUnknown;\n }\n }\n\n /**\n * 移除尾部节点(最久未使用)\n */\n private removeTail(): void {\n if (!this.tail) {\n return;\n }\n\n const key = this.tail.key;\n this.memoryCache.delete(key);\n\n if (this.tail.prev) {\n this.tail.prev.next = null;\n this.tail = this.tail.prev;\n } else {\n this.head = null;\n this.tail = null;\n }\n }\n\n /**\n * 获取缓存\n */\n async get<T>(key: string): Promise<T | null> {\n // 先检查内存缓存\n const node = this.memoryCache.get(key);\n if (node) {\n const item = node.value;\n if (item.expiresAt > Date.now()) {\n // 移到头部(最近使用)\n this.moveToHead(node as unknown as LRUNode<T>);\n return item.data as T;\n } else {\n // 已过期,删除\n this.memoryCache.delete(key);\n if (node === this.head) {\n this.head = node.next;\n }\n if (node === this.tail) {\n this.tail = node.prev;\n }\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n }\n }\n\n // 检查存储缓存\n try {\n const stored = await (this.storage as any).get(key);\n if (stored) {\n const item: CacheItem<T> = JSON.parse(stored);\n if (item.expiresAt > Date.now()) {\n // 更新内存缓存(使用 LRU)\n this.setInMemory(key, item);\n return item.data;\n } else {\n // 已过期,删除\n await (this.storage as any).remove(key);\n }\n }\n } catch (error) {\n // 忽略解析错误\n }\n\n return null;\n }\n\n /**\n * 在内存中设置缓存(LRU)\n */\n private setInMemory<T>(key: string, item: CacheItem<T>): void {\n let node = this.memoryCache.get(key);\n\n if (node) {\n // 更新现有节点\n node.value = item as unknown as CacheItem<unknown>;\n this.moveToHead(node as unknown as LRUNode<T>);\n } else {\n // 创建新节点\n node = {\n key,\n value: item as unknown as CacheItem<unknown>,\n prev: null,\n next: this.head,\n } as LRUNode<unknown>;\n\n if (this.head) {\n this.head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n\n this.memoryCache.set(key, node);\n\n // 如果超过最大大小,移除最久未使用的\n if (this.memoryCache.size > this.config.maxSize) {\n this.removeTail();\n }\n }\n }\n\n /**\n * 设置缓存\n */\n async set<T>(key: string, data: T, ttl?: number): Promise<void> {\n const expiresAt = Date.now() + (ttl || this.config.defaultTTL);\n const item: CacheItem<T> = {\n data,\n expiresAt,\n createdAt: Date.now(),\n };\n\n // 更新内存缓存(使用 LRU)\n this.setInMemory(key, item);\n\n // 更新存储缓存\n try {\n await (this.storage as any).set(key, item);\n } catch (error) {\n // 忽略存储错误\n }\n }\n\n /**\n * 删除缓存\n */\n async delete(key: string): Promise<void> {\n const node = this.memoryCache.get(key);\n if (node) {\n // 从链表中移除\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next;\n }\n if (node === this.tail) {\n this.tail = node.prev;\n }\n this.memoryCache.delete(key);\n }\n\n try {\n await (this.storage as any).remove(key);\n } catch (error) {\n // 忽略删除错误\n }\n }\n\n /**\n * 清空缓存\n */\n async clear(): Promise<void> {\n this.memoryCache.clear();\n // 注意:这里不清空 storage,因为可能包含其他数据\n }\n\n /**\n * 清理过期项(优化版本:批量删除,减少 DOM 操作)\n */\n async cleanup(): Promise<void> {\n const now = Date.now();\n const keysToDelete: string[] = [];\n const nodesToRemove: LRUNode<unknown>[] = [];\n\n // 批量收集需要删除的项\n for (const [key, node] of this.memoryCache.entries()) {\n if (node.value.expiresAt <= now) {\n keysToDelete.push(key);\n nodesToRemove.push(node);\n }\n }\n\n // 批量删除(优化性能)\n if (keysToDelete.length > 0) {\n // 从链表中移除节点\n for (const node of nodesToRemove) {\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next as unknown as LRUNode<unknown> | null;\n }\n if (node === this.tail) {\n this.tail = node.prev as unknown as LRUNode<unknown> | null;\n }\n }\n\n // 批量删除 Map 中的项\n keysToDelete.forEach((key) => this.memoryCache.delete(key));\n }\n\n // 注意:存储缓存的清理由存储系统自己处理(通过过期时间)\n }\n}\n"],"names":["MultiLevelCache","moveToHead","node","nodeAsUnknown","head","prev","next","tail","removeTail","key","memoryCache","delete","get","item","value","expiresAt","Date","now","data","stored","storage","JSON","parse","setInMemory","remove","error","set","size","config","maxSize","ttl","defaultTTL","createdAt","clear","cleanup","keysToDelete","nodesToRemove","entries","push","length","forEach","Map"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/encryption.ts"],"sourcesContent":["import { SecurityUtils, StorageError } from '@vlian/utils';\n\n/**\n * 加密配置\n */\nexport interface EncryptionConfig {\n /**\n * 是否启用加密\n */\n enabled: boolean;\n /**\n * 加密密钥(可选,如果不提供则使用默认密钥)\n */\n key?: string;\n}\n\n/**\n * 加密工具类\n */\nexport class EncryptionUtils {\n\n /**\n * 生成加密密钥\n */\n static async generateKey(): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n return await window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt']\n );\n } catch (error) {\n throw new StorageError('生成加密密钥失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 使用 PBKDF2 派生密钥\n */\n static async deriveKey(\n password: string,\n salt: Uint8Array,\n iterations: number = 100000\n ): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 导入密码\n const encoder = new TextEncoder();\n const passwordKey = await window.crypto.subtle.importKey(\n 'raw',\n encoder.encode(password),\n 'PBKDF2',\n false,\n ['deriveBits', 'deriveKey']\n );\n\n // 使用 PBKDF2 派生密钥\n // 确保 salt 是 BufferSource 类型(使用类型断言)\n const saltBuffer: BufferSource = (salt instanceof Uint8Array \n ? salt \n : new Uint8Array(salt)) as BufferSource;\n return await window.crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: saltBuffer,\n iterations: iterations,\n hash: 'SHA-256',\n },\n passwordKey,\n {\n name: 'AES-GCM',\n length: 256,\n },\n false,\n ['encrypt', 'decrypt']\n );\n } catch (error) {\n throw new StorageError('密钥派生失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 从字符串导入密钥(使用 PBKDF2 派生)\n * \n * 注意:如果没有提供 salt,每次调用都会生成新的 salt,导致密钥不一致。\n * 建议在生产环境中使用固定的 salt 或从安全存储中获取。\n */\n static async importKey(keyString: string, salt?: Uint8Array): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 如果没有提供 salt,尝试从 sessionStorage 获取或生成一个固定的\n let keySalt = salt;\n \n if (!keySalt) {\n // 尝试从 sessionStorage 获取固定的 salt(用于当前会话)\n const saltKey = '__encryption_salt__';\n const storedSalt = sessionStorage.getItem(saltKey);\n \n if (storedSalt) {\n // 从存储中恢复 salt\n const saltArray = Uint8Array.from(JSON.parse(storedSalt));\n keySalt = saltArray;\n } else {\n // 生成新的 salt 并存储(用于当前会话)\n keySalt = window.crypto.getRandomValues(new Uint8Array(16));\n sessionStorage.setItem(saltKey, JSON.stringify(Array.from(keySalt)));\n }\n }\n \n // 使用 PBKDF2 派生密钥\n return await this.deriveKey(keyString, keySalt);\n } catch (error) {\n throw new StorageError('导入加密密钥失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 加密数据\n */\n static async encrypt(data: string, key: CryptoKey): Promise<string> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n const encoder = new TextEncoder();\n const dataBuffer = encoder.encode(data);\n\n // 生成随机 IV\n const iv = window.crypto.getRandomValues(new Uint8Array(12));\n\n const encrypted = await window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n },\n key,\n dataBuffer\n );\n\n // 将 IV 和加密数据组合\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n // 转换为 Base64\n return btoa(String.fromCharCode(...combined));\n } catch (error) {\n throw new StorageError('加密数据失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 解密数据\n */\n static async decrypt(encryptedData: string, key: CryptoKey): Promise<string> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('解密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 从 Base64 解码\n const combined = Uint8Array.from(atob(encryptedData), (c) => c.charCodeAt(0));\n\n // 提取 IV 和加密数据\n const iv = combined.slice(0, 12);\n const encrypted = combined.slice(12);\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n },\n key,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch (error) {\n throw new StorageError('解密数据失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 检查字段是否需要加密\n */\n static shouldEncrypt(key: string): boolean {\n return SecurityUtils.isSensitiveField(key);\n }\n}\n"],"names":["EncryptionUtils","generateKey","window","crypto","subtle","StorageError","name","length","error","Error","undefined","deriveKey","password","salt","iterations","encoder","TextEncoder","passwordKey","importKey","encode","saltBuffer","Uint8Array","hash","keyString","keySalt","saltKey","storedSalt","sessionStorage","getItem","saltArray","from","JSON","parse","getRandomValues","setItem","stringify","Array","encrypt","data","key","dataBuffer","iv","encrypted","combined","byteLength","set","btoa","String","fromCharCode","decrypt","encryptedData","atob","c","charCodeAt","slice","decrypted","decoder","TextDecoder","decode","shouldEncrypt","SecurityUtils","isSensitiveField"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/encryption.ts"],"sourcesContent":["import { SecurityUtils, StorageError } from '@vlian/utils';\n\n/**\n * 加密配置\n */\nexport interface EncryptionConfig {\n /**\n * 是否启用加密\n */\n enabled: boolean;\n /**\n * 加密密钥(可选,如果不提供则使用默认密钥)\n */\n key?: string;\n}\n\n/**\n * 加密工具类\n */\nexport class EncryptionUtils {\n\n /**\n * 生成加密密钥\n */\n static async generateKey(): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n return await window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt']\n );\n } catch (error) {\n throw new StorageError('生成加密密钥失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 使用 PBKDF2 派生密钥\n */\n static async deriveKey(\n password: string,\n salt: Uint8Array,\n iterations: number = 100000\n ): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 导入密码\n const encoder = new TextEncoder();\n const passwordKey = await window.crypto.subtle.importKey(\n 'raw',\n encoder.encode(password),\n 'PBKDF2',\n false,\n ['deriveBits', 'deriveKey']\n );\n\n // 使用 PBKDF2 派生密钥\n // 确保 salt 是 BufferSource 类型(使用类型断言)\n const saltBuffer: BufferSource = (salt instanceof Uint8Array \n ? salt \n : new Uint8Array(salt)) as BufferSource;\n return await window.crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: saltBuffer,\n iterations: iterations,\n hash: 'SHA-256',\n },\n passwordKey,\n {\n name: 'AES-GCM',\n length: 256,\n },\n false,\n ['encrypt', 'decrypt']\n );\n } catch (error) {\n throw new StorageError('密钥派生失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 从字符串导入密钥(使用 PBKDF2 派生)\n * \n * 注意:如果没有提供 salt,每次调用都会生成新的 salt,导致密钥不一致。\n * 建议在生产环境中使用固定的 salt 或从安全存储中获取。\n */\n static async importKey(keyString: string, salt?: Uint8Array): Promise<CryptoKey> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 如果没有提供 salt,尝试从 sessionStorage 获取或生成一个固定的\n let keySalt = salt;\n \n if (!keySalt) {\n // 尝试从 sessionStorage 获取固定的 salt(用于当前会话)\n const saltKey = '__encryption_salt__';\n const storedSalt = sessionStorage.getItem(saltKey);\n \n if (storedSalt) {\n // 从存储中恢复 salt\n const saltArray = Uint8Array.from(JSON.parse(storedSalt));\n keySalt = saltArray;\n } else {\n // 生成新的 salt 并存储(用于当前会话)\n keySalt = window.crypto.getRandomValues(new Uint8Array(16));\n sessionStorage.setItem(saltKey, JSON.stringify(Array.from(keySalt)));\n }\n }\n \n // 使用 PBKDF2 派生密钥\n return await this.deriveKey(keyString, keySalt);\n } catch (error) {\n throw new StorageError('导入加密密钥失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 加密数据\n */\n static async encrypt(data: string, key: CryptoKey): Promise<string> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('加密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n const encoder = new TextEncoder();\n const dataBuffer = encoder.encode(data);\n\n // 生成随机 IV\n const iv = window.crypto.getRandomValues(new Uint8Array(12));\n\n const encrypted = await window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n },\n key,\n dataBuffer\n );\n\n // 将 IV 和加密数据组合\n const combined = new Uint8Array(iv.length + encrypted.byteLength);\n combined.set(iv);\n combined.set(new Uint8Array(encrypted), iv.length);\n\n // 转换为 Base64\n return btoa(String.fromCharCode(...combined));\n } catch (error) {\n throw new StorageError('加密数据失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 解密数据\n */\n static async decrypt(encryptedData: string, key: CryptoKey): Promise<string> {\n if (typeof window === 'undefined' || !window.crypto || !window.crypto.subtle) {\n throw new StorageError('解密功能需要浏览器支持 Web Crypto API');\n }\n\n try {\n // 从 Base64 解码\n const combined = Uint8Array.from(atob(encryptedData), (c) => c.charCodeAt(0));\n\n // 提取 IV 和加密数据\n const iv = combined.slice(0, 12);\n const encrypted = combined.slice(12);\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: iv,\n },\n key,\n encrypted\n );\n\n const decoder = new TextDecoder();\n return decoder.decode(decrypted);\n } catch (error) {\n throw new StorageError('解密数据失败', error instanceof Error ? error : undefined);\n }\n }\n\n /**\n * 检查字段是否需要加密\n */\n static shouldEncrypt(key: string): boolean {\n return SecurityUtils.isSensitiveField(key);\n }\n}\n"],"names":["SecurityUtils","StorageError","EncryptionUtils","generateKey","window","crypto","subtle","name","length","error","Error","undefined","deriveKey","password","salt","iterations","encoder","TextEncoder","passwordKey","importKey","encode","saltBuffer","Uint8Array","hash","keyString","keySalt","saltKey","storedSalt","sessionStorage","getItem","saltArray","from","JSON","parse","getRandomValues","setItem","stringify","Array","encrypt","data","key","dataBuffer","iv","encrypted","combined","byteLength","set","btoa","String","fromCharCode","decrypt","encryptedData","atob","c","charCodeAt","slice","decrypted","decoder","TextDecoder","decode","shouldEncrypt","isSensitiveField"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/index.ts"],"sourcesContent":["import { createStorage } from '@vlian/utils';\nimport type { StorageInstance } from '@vlian/utils';\nimport type { StorageOptions } from '../../types';\nimport type { EncryptionConfig } from './encryption';\nimport { MultiLevelCache } from './cache';\n\n\nexport {\n StorageInstance\n}\n\n/**\n * 增强的存储选项\n */\nexport interface EnhancedStorageOptions extends StorageOptions {\n /**\n * 加密配置\n */\n encryption?: EncryptionConfig;\n /**\n * 缓存配置\n */\n cache?: {\n enabled?: boolean;\n defaultTTL?: number;\n maxSize?: number;\n };\n}\n\nclass Storage {\n private static instance: Storage | null = null;\n\n private _local!: StorageInstance;\n private _session!: StorageInstance;\n private _indexedDB!: StorageInstance;\n private _localCache?: MultiLevelCache;\n private _sessionCache?: MultiLevelCache;\n private cacheEnabled: boolean = false;\n\n public get local(): StorageInstance {\n return this._local;\n }\n\n public get session(): StorageInstance {\n return this._session;\n }\n\n public get indexedDB(): StorageInstance {\n return this._indexedDB;\n }\n\n /**\n * 获取本地存储缓存\n */\n public get localCache(): MultiLevelCache | undefined {\n return this._localCache;\n }\n\n /**\n * 获取会话存储缓存\n */\n public get sessionCache(): MultiLevelCache | undefined {\n return this._sessionCache;\n }\n\n /**\n * 私有构造函数,防止外部直接实例化\n */\n private constructor() {\n // 私有构造函数\n }\n\n /**\n * 获取单例实例\n *\n * @returns Singleton 实例\n */\n public static getInstance(): Storage {\n if (!Storage.instance) {\n Storage.instance = new Storage();\n }\n return Storage.instance;\n }\n\n public initialize(options?: EnhancedStorageOptions): void {\n const local = createStorage({\n type: 'local',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n });\n const session = createStorage({\n type: 'session',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n });\n const indexedDB = createStorage({\n type: 'indexedDB',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n dbName: options?.tableName,\n });\n\n this._local = local;\n this._session = session;\n this._indexedDB = indexedDB;\n\n // 初始化缓存\n this.cacheEnabled = options?.cache?.enabled ?? false;\n if (this.cacheEnabled) {\n this._localCache = new MultiLevelCache(local, {\n defaultTTL: options?.cache?.defaultTTL,\n maxSize: options?.cache?.maxSize,\n });\n this._sessionCache = new MultiLevelCache(session, {\n defaultTTL: options?.cache?.defaultTTL,\n maxSize: options?.cache?.maxSize,\n });\n }\n }\n\n /**\n * 清理过期缓存\n */\n public async cleanupCache(): Promise<void> {\n if (this._localCache) {\n await this._localCache.cleanup();\n }\n if (this._sessionCache) {\n await this._sessionCache.cleanup();\n }\n }\n}\n\nexport const storage = Storage.getInstance();\n\n// 导出加密和缓存相关类型\nexport type { EncryptionConfig } from './encryption';\nexport type { CacheConfig } from './cache';\nexport { MultiLevelCache } from './cache';\nexport { EncryptionUtils } from './encryption';\n"],"names":["EncryptionUtils","MultiLevelCache","storage","Storage","local","_local","session","_session","indexedDB","_indexedDB","localCache","_localCache","sessionCache","_sessionCache","getInstance","instance","initialize","options","createStorage","type","prefix","defaultExpire","dbName","tableName","cacheEnabled","cache","enabled","defaultTTL","maxSize","cleanupCache","cleanup"],"mappings":";;;;;;;;;;;QA2ISA;eAAAA,2BAAe;;QADfC;eAAAA,sBAAe;;QALXC;eAAAA;;;uBArIiB;uBAIE;4BAuIA;;;;;;;;;;;;;;AA9GhC,IAAA,AAAMC,UAAN,MAAMA;IAUF,IAAWC,QAAyB;QAChC,OAAO,IAAI,CAACC,MAAM;IACtB;IAEA,IAAWC,UAA2B;QAClC,OAAO,IAAI,CAACC,QAAQ;IACxB;IAEA,IAAWC,YAA6B;QACpC,OAAO,IAAI,CAACC,UAAU;IAC1B;IAEA;;KAEC,GACD,IAAWC,aAA0C;QACjD,OAAO,IAAI,CAACC,WAAW;IAC3B;IAEA;;KAEC,GACD,IAAWC,eAA4C;QACnD,OAAO,IAAI,CAACC,aAAa;IAC7B;IASA;;;;GAID,GACC,OAAcC,cAAuB;QACjC,IAAI,CAACX,QAAQY,QAAQ,EAAE;YACnBZ,QAAQY,QAAQ,GAAG,IAAIZ;QAC3B;QACA,OAAOA,QAAQY,QAAQ;IAC3B;IAEOC,WAAWC,OAAgC,EAAQ;QACtD,MAAMb,QAAQc,IAAAA,oBAAa,EAAC;YACxBC,MAAM;YACNC,QAAQH,SAASG,UAAU;YAC3BC,eAAeJ,SAASI,iBAAiB,KAAK,KAAK,KAAK;QAC5D;QACA,MAAMf,UAAUY,IAAAA,oBAAa,EAAC;YAC1BC,MAAM;YACNC,QAAQH,SAASG,UAAU;YAC3BC,eAAeJ,SAASI,iBAAiB,KAAK,KAAK,KAAK;QAC5D;QACA,MAAMb,YAAYU,IAAAA,oBAAa,EAAC;YAC5BC,MAAM;YACNC,QAAQH,SAASG,UAAU;YAC3BC,eAAeJ,SAASI,iBAAiB,KAAK,KAAK,KAAK;YACxDC,QAAQL,SAASM;QACrB;QAEA,IAAI,CAAClB,MAAM,GAAGD;QACd,IAAI,CAACG,QAAQ,GAAGD;QAChB,IAAI,CAACG,UAAU,GAAGD;QAElB,QAAQ;QACR,IAAI,CAACgB,YAAY,GAAGP,SAASQ,OAAOC,WAAW;QAC/C,IAAI,IAAI,CAACF,YAAY,EAAE;YACnB,IAAI,CAACb,WAAW,GAAG,IAAIV,sBAAe,CAACG,OAAO;gBAC1CuB,YAAYV,SAASQ,OAAOE;gBAC5BC,SAASX,SAASQ,OAAOG;YAC7B;YACA,IAAI,CAACf,aAAa,GAAG,IAAIZ,sBAAe,CAACK,SAAS;gBAC9CqB,YAAYV,SAASQ,OAAOE;gBAC5BC,SAASX,SAASQ,OAAOG;YAC7B;QACJ;IACJ;IAEA;;KAEC,GACD,MAAaC,eAA8B;QACvC,IAAI,IAAI,CAAClB,WAAW,EAAE;YAClB,MAAM,IAAI,CAACA,WAAW,CAACmB,OAAO;QAClC;QACA,IAAI,IAAI,CAACjB,aAAa,EAAE;YACpB,MAAM,IAAI,CAACA,aAAa,CAACiB,OAAO;QACpC;IACJ;IAjEA;;KAEC,GACD,aAAsB;QApCtB,uBAAQzB,UAAR,KAAA;QACA,uBAAQE,YAAR,KAAA;QACA,uBAAQE,cAAR,KAAA;QACA,uBAAQE,eAAR,KAAA;QACA,uBAAQE,iBAAR,KAAA;QACA,uBAAQW,gBAAwB;IAgC5B,SAAS;IACb;AA6DJ;AArGI,iBADErB,SACaY,YAA2B;AAuGvC,MAAMb,UAAUC,QAAQW,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/library/storage/index.ts"],"sourcesContent":["import { createStorage } from '@vlian/utils';\nimport type { StorageInstance } from '@vlian/utils';\nimport type { StorageOptions } from '../../types';\nimport type { EncryptionConfig } from './encryption';\nimport { MultiLevelCache } from './cache';\n\n\nexport {\n StorageInstance\n}\n\n/**\n * 增强的存储选项\n */\nexport interface EnhancedStorageOptions extends StorageOptions {\n /**\n * 加密配置\n */\n encryption?: EncryptionConfig;\n /**\n * 缓存配置\n */\n cache?: {\n enabled?: boolean;\n defaultTTL?: number;\n maxSize?: number;\n };\n}\n\nclass Storage {\n private static instance: Storage | null = null;\n\n private _local!: StorageInstance;\n private _session!: StorageInstance;\n private _indexedDB!: StorageInstance;\n private _localCache?: MultiLevelCache;\n private _sessionCache?: MultiLevelCache;\n private cacheEnabled: boolean = false;\n\n public get local(): StorageInstance {\n return this._local;\n }\n\n public get session(): StorageInstance {\n return this._session;\n }\n\n public get indexedDB(): StorageInstance {\n return this._indexedDB;\n }\n\n /**\n * 获取本地存储缓存\n */\n public get localCache(): MultiLevelCache | undefined {\n return this._localCache;\n }\n\n /**\n * 获取会话存储缓存\n */\n public get sessionCache(): MultiLevelCache | undefined {\n return this._sessionCache;\n }\n\n /**\n * 私有构造函数,防止外部直接实例化\n */\n private constructor() {\n // 私有构造函数\n }\n\n /**\n * 获取单例实例\n *\n * @returns Singleton 实例\n */\n public static getInstance(): Storage {\n if (!Storage.instance) {\n Storage.instance = new Storage();\n }\n return Storage.instance;\n }\n\n public initialize(options?: EnhancedStorageOptions): void {\n const local = createStorage({\n type: 'local',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n });\n const session = createStorage({\n type: 'session',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n });\n const indexedDB = createStorage({\n type: 'indexedDB',\n prefix: options?.prefix || 'vlian',\n defaultExpire: options?.defaultExpire || 24 * 60 * 60 * 1000,\n dbName: options?.tableName,\n });\n\n this._local = local;\n this._session = session;\n this._indexedDB = indexedDB;\n\n // 初始化缓存\n this.cacheEnabled = options?.cache?.enabled ?? false;\n if (this.cacheEnabled) {\n this._localCache = new MultiLevelCache(local, {\n defaultTTL: options?.cache?.defaultTTL,\n maxSize: options?.cache?.maxSize,\n });\n this._sessionCache = new MultiLevelCache(session, {\n defaultTTL: options?.cache?.defaultTTL,\n maxSize: options?.cache?.maxSize,\n });\n }\n }\n\n /**\n * 清理过期缓存\n */\n public async cleanupCache(): Promise<void> {\n if (this._localCache) {\n await this._localCache.cleanup();\n }\n if (this._sessionCache) {\n await this._sessionCache.cleanup();\n }\n }\n}\n\nexport const storage = Storage.getInstance();\n\n// 导出加密和缓存相关类型\nexport type { EncryptionConfig } from './encryption';\nexport type { CacheConfig } from './cache';\nexport { MultiLevelCache } from './cache';\nexport { EncryptionUtils } from './encryption';\n"],"names":["createStorage","MultiLevelCache","Storage","local","_local","session","_session","indexedDB","_indexedDB","localCache","_localCache","sessionCache","_sessionCache","getInstance","instance","initialize","options","type","prefix","defaultExpire","dbName","tableName","cacheEnabled","cache","enabled","defaultTTL","maxSize","cleanupCache","cleanup","storage","EncryptionUtils"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,aAAa,QAAQ,eAAe;AAI7C,SAASC,eAAe,QAAQ,UAAU;AAyB1C,IAAA,AAAMC,UAAN,MAAMA;IAUF,IAAWC,QAAyB;QAChC,OAAO,IAAI,CAACC,MAAM;IACtB;IAEA,IAAWC,UAA2B;QAClC,OAAO,IAAI,CAACC,QAAQ;IACxB;IAEA,IAAWC,YAA6B;QACpC,OAAO,IAAI,CAACC,UAAU;IAC1B;IAEA;;KAEC,GACD,IAAWC,aAA0C;QACjD,OAAO,IAAI,CAACC,WAAW;IAC3B;IAEA;;KAEC,GACD,IAAWC,eAA4C;QACnD,OAAO,IAAI,CAACC,aAAa;IAC7B;IASA;;;;GAID,GACC,OAAcC,cAAuB;QACjC,IAAI,CAACX,QAAQY,QAAQ,EAAE;YACnBZ,QAAQY,QAAQ,GAAG,IAAIZ;QAC3B;QACA,OAAOA,QAAQY,QAAQ;IAC3B;IAEOC,WAAWC,OAAgC,EAAQ;QACtD,MAAMb,QAAQH,cAAc;YACxBiB,MAAM;YACNC,QAAQF,SAASE,UAAU;YAC3BC,eAAeH,SAASG,iBAAiB,KAAK,KAAK,KAAK;QAC5D;QACA,MAAMd,UAAUL,cAAc;YAC1BiB,MAAM;YACNC,QAAQF,SAASE,UAAU;YAC3BC,eAAeH,SAASG,iBAAiB,KAAK,KAAK,KAAK;QAC5D;QACA,MAAMZ,YAAYP,cAAc;YAC5BiB,MAAM;YACNC,QAAQF,SAASE,UAAU;YAC3BC,eAAeH,SAASG,iBAAiB,KAAK,KAAK,KAAK;YACxDC,QAAQJ,SAASK;QACrB;QAEA,IAAI,CAACjB,MAAM,GAAGD;QACd,IAAI,CAACG,QAAQ,GAAGD;QAChB,IAAI,CAACG,UAAU,GAAGD;QAElB,QAAQ;QACR,IAAI,CAACe,YAAY,GAAGN,SAASO,OAAOC,WAAW;QAC/C,IAAI,IAAI,CAACF,YAAY,EAAE;YACnB,IAAI,CAACZ,WAAW,GAAG,IAAIT,gBAAgBE,OAAO;gBAC1CsB,YAAYT,SAASO,OAAOE;gBAC5BC,SAASV,SAASO,OAAOG;YAC7B;YACA,IAAI,CAACd,aAAa,GAAG,IAAIX,gBAAgBI,SAAS;gBAC9CoB,YAAYT,SAASO,OAAOE;gBAC5BC,SAASV,SAASO,OAAOG;YAC7B;QACJ;IACJ;IAEA;;KAEC,GACD,MAAaC,eAA8B;QACvC,IAAI,IAAI,CAACjB,WAAW,EAAE;YAClB,MAAM,IAAI,CAACA,WAAW,CAACkB,OAAO;QAClC;QACA,IAAI,IAAI,CAAChB,aAAa,EAAE;YACpB,MAAM,IAAI,CAACA,aAAa,CAACgB,OAAO;QACpC;IACJ;IAjEA;;KAEC,GACD,aAAsB;QApCtB,uBAAQxB,UAAR,KAAA;QACA,uBAAQE,YAAR,KAAA;QACA,uBAAQE,cAAR,KAAA;QACA,uBAAQE,eAAR,KAAA;QACA,uBAAQE,iBAAR,KAAA;QACA,uBAAQU,gBAAwB;IAgC5B,SAAS;IACb;AA6DJ;AArGI,iBADEpB,SACaY,YAA2B;AAuG9C,OAAO,MAAMe,UAAU3B,QAAQW,WAAW,GAAG;AAK7C,SAASZ,eAAe,QAAQ,UAAU;AAC1C,SAAS6B,eAAe,QAAQ,eAAe"}
@@ -1,85 +0,0 @@
1
- /**
2
- * 请求适配器抽象接口
3
- *
4
- * 适配器负责将框架请求抽象映射到具体的 HTTP 实现(如 axios、ky、fetch 等)
5
- */
6
- import type { RequestOptions, Response, AdapterCapabilities } from '../types';
7
- /**
8
- * 请求适配器接口
9
- *
10
- * 所有具体的 HTTP 实现(axios、ky、fetch 等)都需要通过适配器接入
11
- */
12
- export interface RequestAdapter {
13
- /**
14
- * 适配器名称
15
- */
16
- readonly name: string;
17
- /**
18
- * 适配器能力声明
19
- */
20
- readonly capabilities: AdapterCapabilities;
21
- /**
22
- * 执行请求
23
- *
24
- * @template TResponse - 响应数据类型
25
- * @param options - 请求配置选项
26
- * @returns Promise 解析为响应对象
27
- */
28
- request<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>>;
29
- /**
30
- * 取消请求
31
- *
32
- * @param signal - 中止信号
33
- */
34
- cancel?(signal: AbortSignal): void;
35
- /**
36
- * 销毁适配器,清理资源
37
- */
38
- destroy?(): void;
39
- }
40
- /**
41
- * 适配器工厂函数类型
42
- */
43
- export type AdapterFactory = () => Promise<RequestAdapter> | RequestAdapter;
44
- /**
45
- * 适配器注册表
46
- */
47
- declare class AdapterRegistry {
48
- private adapters;
49
- /**
50
- * 注册适配器
51
- *
52
- * @param name - 适配器名称
53
- * @param factory - 适配器工厂函数
54
- */
55
- register(name: string, factory: AdapterFactory): void;
56
- /**
57
- * 获取适配器
58
- *
59
- * @param name - 适配器名称
60
- * @returns 适配器实例
61
- */
62
- get(name: string): Promise<RequestAdapter>;
63
- /**
64
- * 检查适配器是否已注册
65
- *
66
- * @param name - 适配器名称
67
- * @returns 是否已注册
68
- */
69
- has(name: string): boolean;
70
- /**
71
- * 获取所有已注册的适配器名称
72
- *
73
- * @returns 适配器名称数组
74
- */
75
- getAllNames(): string[];
76
- /**
77
- * 清除所有适配器
78
- */
79
- clear(): void;
80
- }
81
- /**
82
- * 全局适配器注册表
83
- */
84
- export declare const adapterRegistry: AdapterRegistry;
85
- export {};
@@ -1,70 +0,0 @@
1
- /**
2
- * 请求适配器抽象接口
3
- *
4
- * 适配器负责将框架请求抽象映射到具体的 HTTP 实现(如 axios、ky、fetch 等)
5
- */ function _define_property(obj, key, value) {
6
- if (key in obj) {
7
- Object.defineProperty(obj, key, {
8
- value: value,
9
- enumerable: true,
10
- configurable: true,
11
- writable: true
12
- });
13
- } else {
14
- obj[key] = value;
15
- }
16
- return obj;
17
- }
18
- /**
19
- * 适配器注册表
20
- */ let AdapterRegistry = class AdapterRegistry {
21
- /**
22
- * 注册适配器
23
- *
24
- * @param name - 适配器名称
25
- * @param factory - 适配器工厂函数
26
- */ register(name, factory) {
27
- this.adapters.set(name, factory);
28
- }
29
- /**
30
- * 获取适配器
31
- *
32
- * @param name - 适配器名称
33
- * @returns 适配器实例
34
- */ async get(name) {
35
- const factory = this.adapters.get(name);
36
- if (!factory) {
37
- throw new Error(`适配器 ${name} 未注册`);
38
- }
39
- const adapter = await factory();
40
- return adapter;
41
- }
42
- /**
43
- * 检查适配器是否已注册
44
- *
45
- * @param name - 适配器名称
46
- * @returns 是否已注册
47
- */ has(name) {
48
- return this.adapters.has(name);
49
- }
50
- /**
51
- * 获取所有已注册的适配器名称
52
- *
53
- * @returns 适配器名称数组
54
- */ getAllNames() {
55
- return Array.from(this.adapters.keys());
56
- }
57
- /**
58
- * 清除所有适配器
59
- */ clear() {
60
- this.adapters.clear();
61
- }
62
- constructor(){
63
- _define_property(this, "adapters", new Map());
64
- }
65
- };
66
- /**
67
- * 全局适配器注册表
68
- */ export const adapterRegistry = new AdapterRegistry();
69
-
70
- //# sourceMappingURL=RequestAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/request/adapter/RequestAdapter.ts"],"sourcesContent":["/**\n * 请求适配器抽象接口\n * \n * 适配器负责将框架请求抽象映射到具体的 HTTP 实现(如 axios、ky、fetch 等)\n */\n\nimport type { RequestOptions, Response, AdapterCapabilities } from '../types';\n\n/**\n * 请求适配器接口\n * \n * 所有具体的 HTTP 实现(axios、ky、fetch 等)都需要通过适配器接入\n */\nexport interface RequestAdapter {\n /**\n * 适配器名称\n */\n readonly name: string;\n\n /**\n * 适配器能力声明\n */\n readonly capabilities: AdapterCapabilities;\n\n /**\n * 执行请求\n * \n * @template TResponse - 响应数据类型\n * @param options - 请求配置选项\n * @returns Promise 解析为响应对象\n */\n request<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>>;\n\n /**\n * 取消请求\n * \n * @param signal - 中止信号\n */\n cancel?(signal: AbortSignal): void;\n\n /**\n * 销毁适配器,清理资源\n */\n destroy?(): void;\n}\n\n/**\n * 适配器工厂函数类型\n */\nexport type AdapterFactory = () => Promise<RequestAdapter> | RequestAdapter;\n\n/**\n * 适配器注册表\n */\nclass AdapterRegistry {\n private adapters = new Map<string, AdapterFactory>();\n\n /**\n * 注册适配器\n * \n * @param name - 适配器名称\n * @param factory - 适配器工厂函数\n */\n register(name: string, factory: AdapterFactory): void {\n this.adapters.set(name, factory);\n }\n\n /**\n * 获取适配器\n * \n * @param name - 适配器名称\n * @returns 适配器实例\n */\n async get(name: string): Promise<RequestAdapter> {\n const factory = this.adapters.get(name);\n if (!factory) {\n throw new Error(`适配器 ${name} 未注册`);\n }\n\n const adapter = await factory();\n return adapter;\n }\n\n /**\n * 检查适配器是否已注册\n * \n * @param name - 适配器名称\n * @returns 是否已注册\n */\n has(name: string): boolean {\n return this.adapters.has(name);\n }\n\n /**\n * 获取所有已注册的适配器名称\n * \n * @returns 适配器名称数组\n */\n getAllNames(): string[] {\n return Array.from(this.adapters.keys());\n }\n\n /**\n * 清除所有适配器\n */\n clear(): void {\n this.adapters.clear();\n }\n}\n\n/**\n * 全局适配器注册表\n */\nexport const adapterRegistry = new AdapterRegistry();\n"],"names":["AdapterRegistry","register","name","factory","adapters","set","get","Error","adapter","has","getAllNames","Array","from","keys","clear","Map","adapterRegistry"],"mappings":"AAAA;;;;CAIC;;;;;;;;;;;;;AA+CD;;CAEC,GACD,IAAA,AAAMA,kBAAN,MAAMA;IAGJ;;;;;GAKC,GACDC,SAASC,IAAY,EAAEC,OAAuB,EAAQ;QACpD,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACH,MAAMC;IAC1B;IAEA;;;;;GAKC,GACD,MAAMG,IAAIJ,IAAY,EAA2B;QAC/C,MAAMC,UAAU,IAAI,CAACC,QAAQ,CAACE,GAAG,CAACJ;QAClC,IAAI,CAACC,SAAS;YACZ,MAAM,IAAII,MAAM,CAAC,IAAI,EAAEL,KAAK,IAAI,CAAC;QACnC;QAEA,MAAMM,UAAU,MAAML;QACtB,OAAOK;IACT;IAEA;;;;;GAKC,GACDC,IAAIP,IAAY,EAAW;QACzB,OAAO,IAAI,CAACE,QAAQ,CAACK,GAAG,CAACP;IAC3B;IAEA;;;;GAIC,GACDQ,cAAwB;QACtB,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACR,QAAQ,CAACS,IAAI;IACtC;IAEA;;GAEC,GACDC,QAAc;QACZ,IAAI,CAACV,QAAQ,CAACU,KAAK;IACrB;;QApDA,uBAAQV,YAAW,IAAIW;;AAqDzB;AAEA;;CAEC,GACD,OAAO,MAAMC,kBAAkB,IAAIhB,kBAAkB"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Axios 适配器
3
- *
4
- * 基于 axios 库的适配器实现(支持浏览器和 Node.js 环境)
5
- */
6
- import type { RequestAdapter } from './RequestAdapter';
7
- /**
8
- * 创建 Axios 适配器
9
- */
10
- export declare function axiosAdapter(): Promise<RequestAdapter>;
@@ -1,115 +0,0 @@
1
- /**
2
- * Axios 适配器
3
- *
4
- * 基于 axios 库的适配器实现(支持浏览器和 Node.js 环境)
5
- */ /**
6
- * 创建 Axios 适配器
7
- */ export async function axiosAdapter() {
8
- // 动态导入 axios(按需加载)
9
- // 使用多种方式尝试导入,以兼容不同的构建工具
10
- let axios;
11
- let importError = null;
12
- // 方法1:使用 Function 构造函数(避免构建时解析)
13
- try {
14
- // @ts-ignore - axios 是可选依赖
15
- axios = await new Function('return import("axios")')();
16
- } catch (error) {
17
- importError = error;
18
- // 方法2:直接使用动态导入(某些构建工具可能需要这种方式)
19
- try {
20
- // @ts-ignore - axios 是可选依赖
21
- axios = await import("axios");
22
- } catch (error2) {
23
- importError = error2;
24
- }
25
- }
26
- // 如果两种方法都失败,检查是否是模块未找到错误
27
- if (!axios || !axios.default) {
28
- if (importError instanceof Error) {
29
- const errorMessage = importError.message.toLowerCase();
30
- // 检查是否是模块未找到相关的错误
31
- const isModuleNotFound = errorMessage.includes('cannot find module') || errorMessage.includes('cannot resolve') || errorMessage.includes('module not found') || errorMessage.includes('failed to resolve') || errorMessage.includes('does not exist') || errorMessage.includes('failed to fetch dynamically imported module') || errorMessage.includes('loading chunk') || errorMessage.includes('networkerror') || errorMessage.includes('axios') && (errorMessage.includes('resolve') || errorMessage.includes('find') || errorMessage.includes('not found'));
32
- if (isModuleNotFound) {
33
- // 模块未找到,抛出友好的依赖缺失错误
34
- const { createDependencyError } = await import("../utils/dependencyCheck");
35
- // 检测当前环境
36
- const isBrowser = typeof window !== 'undefined';
37
- const environment = isBrowser ? 'browser' : 'node';
38
- const errorMessage = createDependencyError('axios', {
39
- adapterName: 'axios',
40
- environment
41
- });
42
- throw new Error(errorMessage);
43
- }
44
- }
45
- throw new Error('axios 库导入失败,请检查安装是否正确');
46
- }
47
- const axiosInstance = axios.default;
48
- return {
49
- name: 'axios',
50
- capabilities: {
51
- supportsAbort: true,
52
- supportsTimeout: true,
53
- supportsProgress: true,
54
- supportsInterceptors: true
55
- },
56
- async request (options) {
57
- const { url, method = 'GET', headers = {}, query, body, timeout, signal, credentials } = options;
58
- // 构建 axios 配置
59
- const axiosConfig = {
60
- url,
61
- method: method.toLowerCase(),
62
- headers: headers,
63
- params: query,
64
- data: body,
65
- timeout: timeout,
66
- signal: signal,
67
- withCredentials: credentials === 'include',
68
- validateStatus: ()=>true
69
- };
70
- try {
71
- // 执行请求
72
- // @ts-ignore - axios 类型定义
73
- const axiosResponse = await axiosInstance.request(axiosConfig);
74
- // 返回响应对象
75
- return {
76
- data: axiosResponse.data,
77
- status: axiosResponse.status,
78
- statusText: axiosResponse.statusText,
79
- headers: axiosResponse.headers,
80
- raw: axiosResponse
81
- };
82
- } catch (error) {
83
- // axios 的错误处理
84
- if (error.response) {
85
- // HTTP 错误
86
- const status = error.response.status;
87
- const statusText = error.response.statusText || '';
88
- throw {
89
- message: `HTTP ${status} ${statusText}`,
90
- status,
91
- statusText,
92
- response: {
93
- data: error.response.data,
94
- status,
95
- statusText,
96
- headers: error.response.headers
97
- },
98
- request: options
99
- };
100
- } else if (error.request) {
101
- // 网络错误
102
- throw {
103
- message: error.message || '网络请求失败',
104
- request: options
105
- };
106
- } else {
107
- // 其他错误
108
- throw error;
109
- }
110
- }
111
- }
112
- };
113
- }
114
-
115
- //# sourceMappingURL=axiosAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/request/adapter/axiosAdapter.ts"],"sourcesContent":["/**\n * Axios 适配器\n * \n * 基于 axios 库的适配器实现(支持浏览器和 Node.js 环境)\n */\n\nimport type { RequestAdapter } from './RequestAdapter';\nimport type { RequestOptions, Response } from '../types';\n\n/**\n * 创建 Axios 适配器\n */\nexport async function axiosAdapter(): Promise<RequestAdapter> {\n // 动态导入 axios(按需加载)\n // 使用多种方式尝试导入,以兼容不同的构建工具\n let axios: any;\n let importError: unknown = null;\n\n // 方法1:使用 Function 构造函数(避免构建时解析)\n try {\n // @ts-ignore - axios 是可选依赖\n axios = await new Function('return import(\"axios\")')();\n } catch (error) {\n importError = error;\n // 方法2:直接使用动态导入(某些构建工具可能需要这种方式)\n try {\n // @ts-ignore - axios 是可选依赖\n axios = await import('axios');\n } catch (error2) {\n importError = error2;\n }\n }\n\n // 如果两种方法都失败,检查是否是模块未找到错误\n if (!axios || !axios.default) {\n if (importError instanceof Error) {\n const errorMessage = importError.message.toLowerCase();\n // 检查是否是模块未找到相关的错误\n const isModuleNotFound = \n errorMessage.includes('cannot find module') ||\n errorMessage.includes('cannot resolve') ||\n errorMessage.includes('module not found') ||\n errorMessage.includes('failed to resolve') ||\n errorMessage.includes('does not exist') ||\n errorMessage.includes('failed to fetch dynamically imported module') ||\n errorMessage.includes('loading chunk') ||\n errorMessage.includes('networkerror') ||\n (errorMessage.includes('axios') && (\n errorMessage.includes('resolve') ||\n errorMessage.includes('find') ||\n errorMessage.includes('not found')\n ));\n\n if (isModuleNotFound) {\n // 模块未找到,抛出友好的依赖缺失错误\n const { createDependencyError } = await import('../utils/dependencyCheck');\n // 检测当前环境\n const isBrowser = typeof window !== 'undefined';\n const environment = isBrowser ? 'browser' : 'node';\n const errorMessage = createDependencyError('axios', {\n adapterName: 'axios',\n environment,\n });\n throw new Error(errorMessage);\n }\n }\n throw new Error('axios 库导入失败,请检查安装是否正确');\n }\n\n const axiosInstance = axios.default;\n\n return {\n name: 'axios',\n capabilities: {\n supportsAbort: true,\n supportsTimeout: true,\n supportsProgress: true,\n supportsInterceptors: true,\n },\n\n async request<TResponse = unknown>(options: RequestOptions<TResponse>): Promise<Response<TResponse>> {\n const { url, method = 'GET', headers = {}, query, body, timeout, signal, credentials } = options;\n\n // 构建 axios 配置\n const axiosConfig: Parameters<typeof axiosInstance>[0] = {\n url,\n method: method.toLowerCase() as any,\n headers: headers as Record<string, string>,\n params: query,\n data: body,\n timeout: timeout,\n signal: signal,\n withCredentials: credentials === 'include',\n validateStatus: () => true, // 不自动抛出错误,由框架处理\n };\n\n try {\n // 执行请求\n // @ts-ignore - axios 类型定义\n const axiosResponse = await axiosInstance.request<TResponse>(axiosConfig);\n\n // 返回响应对象\n return {\n data: axiosResponse.data,\n status: axiosResponse.status,\n statusText: axiosResponse.statusText,\n headers: axiosResponse.headers as Record<string, string>,\n raw: axiosResponse,\n };\n } catch (error: any) {\n // axios 的错误处理\n if (error.response) {\n // HTTP 错误\n const status = error.response.status;\n const statusText = error.response.statusText || '';\n\n throw {\n message: `HTTP ${status} ${statusText}`,\n status,\n statusText,\n response: {\n data: error.response.data,\n status,\n statusText,\n headers: error.response.headers,\n },\n request: options,\n };\n } else if (error.request) {\n // 网络错误\n throw {\n message: error.message || '网络请求失败',\n request: options,\n };\n } else {\n // 其他错误\n throw error;\n }\n }\n },\n };\n}\n"],"names":["axiosAdapter","axios","importError","Function","error","error2","default","Error","errorMessage","message","toLowerCase","isModuleNotFound","includes","createDependencyError","isBrowser","window","environment","adapterName","axiosInstance","name","capabilities","supportsAbort","supportsTimeout","supportsProgress","supportsInterceptors","request","options","url","method","headers","query","body","timeout","signal","credentials","axiosConfig","params","data","withCredentials","validateStatus","axiosResponse","status","statusText","raw","response"],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Fetch 适配器
3
- *
4
- * 基于原生 fetch API 的适配器实现
5
- */
6
- import type { RequestAdapter } from './RequestAdapter';
7
- /**
8
- * 创建 Fetch 适配器
9
- */
10
- export declare function fetchAdapter(): Promise<RequestAdapter>;