@vlian/framework 1.2.57 → 1.2.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/README.md +15 -3
  2. package/dist/analytics/index.cjs +1 -24
  3. package/dist/analytics/index.js +1 -3
  4. package/dist/analytics.umd.js +8 -208
  5. package/dist/components/LocaleSwitch.cjs +1 -118
  6. package/dist/components/LocaleSwitch.js +1 -103
  7. package/dist/components/ThemeSwitch.cjs +1 -117
  8. package/dist/components/ThemeSwitch.js +1 -102
  9. package/dist/components/index.cjs +1 -22
  10. package/dist/components/index.js +1 -4
  11. package/dist/components/persistence.cjs +1 -60
  12. package/dist/components/persistence.js +1 -39
  13. package/dist/core/Test.cjs +1 -66
  14. package/dist/core/Test.js +1 -15
  15. package/dist/core/app/AppContext.cjs +1 -350
  16. package/dist/core/app/AppContext.js +1 -339
  17. package/dist/core/app/AppContext.types.cjs +1 -6
  18. package/dist/core/app/AppContext.types.js +1 -5
  19. package/dist/core/app/BasicLayout.cjs +1 -124
  20. package/dist/core/app/BasicLayout.js +1 -74
  21. package/dist/core/app/DefaultApp.cjs +1 -152
  22. package/dist/core/app/DefaultApp.js +1 -143
  23. package/dist/core/app/index.cjs +1 -43
  24. package/dist/core/app/index.js +1 -7
  25. package/dist/core/config/AppConfig.cjs +1 -141
  26. package/dist/core/config/AppConfig.js +1 -133
  27. package/dist/core/config/ConfigLoader.cjs +1 -325
  28. package/dist/core/config/ConfigLoader.js +1 -311
  29. package/dist/core/config/ConfigValidator.cjs +2 -135
  30. package/dist/core/config/ConfigValidator.js +2 -121
  31. package/dist/core/config/index.cjs +1 -30
  32. package/dist/core/config/index.js +1 -7
  33. package/dist/core/dev/DevTools.cjs +1 -228
  34. package/dist/core/dev/DevTools.js +1 -210
  35. package/dist/core/error/ErrorBoundary.cjs +1 -403
  36. package/dist/core/error/ErrorBoundary.js +1 -399
  37. package/dist/core/error/ErrorHandler.cjs +1 -277
  38. package/dist/core/error/ErrorHandler.js +1 -261
  39. package/dist/core/error/index.cjs +1 -36
  40. package/dist/core/error/index.js +1 -6
  41. package/dist/core/event/AppEventBus.cjs +1 -446
  42. package/dist/core/event/AppEventBus.js +1 -438
  43. package/dist/core/event/frameworkEvents.cjs +1 -143
  44. package/dist/core/event/frameworkEvents.js +1 -135
  45. package/dist/core/event/hooks.cjs +1 -71
  46. package/dist/core/event/hooks.js +1 -95
  47. package/dist/core/event/index.cjs +1 -43
  48. package/dist/core/event/index.js +1 -10
  49. package/dist/core/event/types.cjs +1 -64
  50. package/dist/core/event/types.js +1 -56
  51. package/dist/core/event/useEventBus.cjs +1 -27
  52. package/dist/core/event/useEventBus.js +1 -39
  53. package/dist/core/index.cjs +1 -142
  54. package/dist/core/index.js +1 -69
  55. package/dist/core/initialization/InitializationErrorThrower.cjs +1 -77
  56. package/dist/core/initialization/InitializationErrorThrower.js +1 -30
  57. package/dist/core/initialization/index.cjs +1 -28
  58. package/dist/core/initialization/index.js +1 -7
  59. package/dist/core/initialization/initialization.cjs +1 -66
  60. package/dist/core/initialization/initialization.js +1 -78
  61. package/dist/core/initialization/initializationErrorState.cjs +1 -68
  62. package/dist/core/initialization/initializationErrorState.js +1 -60
  63. package/dist/core/kernel/defaultAdapters.cjs +1 -186
  64. package/dist/core/kernel/defaultAdapters.js +1 -176
  65. package/dist/core/kernel/errors.cjs +1 -71
  66. package/dist/core/kernel/errors.js +1 -53
  67. package/dist/core/kernel/index.cjs +1 -22
  68. package/dist/core/kernel/index.js +1 -4
  69. package/dist/core/kernel/startKernel.cjs +1 -202
  70. package/dist/core/kernel/startKernel.js +1 -192
  71. package/dist/core/kernel/types.cjs +1 -6
  72. package/dist/core/kernel/types.js +1 -3
  73. package/dist/core/middleware.cjs +1 -75
  74. package/dist/core/middleware.js +1 -61
  75. package/dist/core/plugin/PluginEventBus.cjs +1 -300
  76. package/dist/core/plugin/PluginEventBus.js +1 -286
  77. package/dist/core/plugin/PluginSandbox.cjs +1 -139
  78. package/dist/core/plugin/PluginSandbox.js +1 -125
  79. package/dist/core/plugin.cjs +1 -496
  80. package/dist/core/plugin.js +1 -438
  81. package/dist/core/router/RouterManager.cjs +1 -288
  82. package/dist/core/router/RouterManager.js +1 -272
  83. package/dist/core/router/adapter/AdapterManager.cjs +1 -237
  84. package/dist/core/router/adapter/AdapterManager.js +1 -221
  85. package/dist/core/router/adapter/index.cjs +1 -24
  86. package/dist/core/router/adapter/index.js +1 -7
  87. package/dist/core/router/adapter/react-router/ReactRouterAdapter.cjs +1 -130
  88. package/dist/core/router/adapter/react-router/ReactRouterAdapter.js +1 -116
  89. package/dist/core/router/adapter/react-router/index.cjs +1 -22
  90. package/dist/core/router/adapter/react-router/index.js +1 -5
  91. package/dist/core/router/adapter/types.cjs +1 -8
  92. package/dist/core/router/adapter/types.js +1 -7
  93. package/dist/core/router/dev/RouterDevTools.cjs +1 -262
  94. package/dist/core/router/dev/RouterDevTools.js +1 -211
  95. package/dist/core/router/dev/index.cjs +1 -22
  96. package/dist/core/router/dev/index.js +1 -5
  97. package/dist/core/router/dynamic/DynamicRouteManager.cjs +1 -195
  98. package/dist/core/router/dynamic/DynamicRouteManager.js +1 -179
  99. package/dist/core/router/dynamic/index.cjs +1 -22
  100. package/dist/core/router/dynamic/index.js +1 -5
  101. package/dist/core/router/errors/RouterError.cjs +1 -63
  102. package/dist/core/router/errors/RouterError.js +1 -48
  103. package/dist/core/router/errors/index.cjs +1 -22
  104. package/dist/core/router/errors/index.js +1 -5
  105. package/dist/core/router/index.cjs +1 -38
  106. package/dist/core/router/index.js +1 -32
  107. package/dist/core/router/lifecycle/RouterLifecycleManager.cjs +1 -146
  108. package/dist/core/router/lifecycle/RouterLifecycleManager.js +1 -130
  109. package/dist/core/router/lifecycle/index.cjs +1 -22
  110. package/dist/core/router/lifecycle/index.js +1 -5
  111. package/dist/core/router/middleware/RouterMiddlewareManager.cjs +1 -195
  112. package/dist/core/router/middleware/RouterMiddlewareManager.js +1 -179
  113. package/dist/core/router/middleware/auth.cjs +1 -68
  114. package/dist/core/router/middleware/auth.js +1 -63
  115. package/dist/core/router/middleware/index.cjs +1 -24
  116. package/dist/core/router/middleware/index.js +1 -7
  117. package/dist/core/router/middleware/types.cjs +1 -8
  118. package/dist/core/router/middleware/types.js +1 -7
  119. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -229
  120. package/dist/core/router/monitoring/RouterMonitoring.js +1 -213
  121. package/dist/core/router/monitoring/index.cjs +1 -22
  122. package/dist/core/router/monitoring/index.js +1 -5
  123. package/dist/core/router/navigation/RouterNavigation.cjs +1 -241
  124. package/dist/core/router/navigation/RouterNavigation.js +1 -192
  125. package/dist/core/router/navigation/index.cjs +1 -22
  126. package/dist/core/router/navigation/index.js +1 -5
  127. package/dist/core/router/performance/RouteCache.cjs +1 -307
  128. package/dist/core/router/performance/RouteCache.js +1 -291
  129. package/dist/core/router/performance/RoutePreloader.cjs +1 -294
  130. package/dist/core/router/performance/RoutePreloader.js +1 -277
  131. package/dist/core/router/performance/index.cjs +1 -23
  132. package/dist/core/router/performance/index.js +1 -6
  133. package/dist/core/router/plugin/RouterPluginManager.cjs +1 -264
  134. package/dist/core/router/plugin/RouterPluginManager.js +1 -248
  135. package/dist/core/router/plugin/index.cjs +1 -23
  136. package/dist/core/router/plugin/index.js +1 -6
  137. package/dist/core/router/plugin/types.cjs +1 -41
  138. package/dist/core/router/plugin/types.js +1 -33
  139. package/dist/core/router/types.cjs +1 -6
  140. package/dist/core/router/types.js +1 -5
  141. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +1 -131
  142. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +1 -121
  143. package/dist/core/router/utils/adapters/react-router/transform.cjs +1 -252
  144. package/dist/core/router/utils/adapters/react-router/transform.js +1 -242
  145. package/dist/core/router/utils/transform.cjs +1 -782
  146. package/dist/core/router/utils/transform.js +1 -791
  147. package/dist/core/router/validation/RouterConfigValidator.cjs +2 -85
  148. package/dist/core/router/validation/RouterConfigValidator.js +2 -77
  149. package/dist/core/router/validation/index.cjs +1 -23
  150. package/dist/core/router/validation/index.js +1 -6
  151. package/dist/core/router/validation/schema.cjs +1 -161
  152. package/dist/core/router/validation/schema.js +1 -151
  153. package/dist/core/router/version/RouteVersionManager.cjs +1 -207
  154. package/dist/core/router/version/RouteVersionManager.js +1 -191
  155. package/dist/core/router/version/index.cjs +1 -22
  156. package/dist/core/router/version/index.js +1 -5
  157. package/dist/core/splash/SplashScreen.cjs +1 -343
  158. package/dist/core/splash/SplashScreen.js +1 -293
  159. package/dist/core/splash/index.cjs +1 -24
  160. package/dist/core/splash/index.js +1 -6
  161. package/dist/core/splash/splashScreenUtils.cjs +1 -40
  162. package/dist/core/splash/splashScreenUtils.js +1 -30
  163. package/dist/core/startup/AppInstance.cjs +1 -241
  164. package/dist/core/startup/AppInstance.js +1 -226
  165. package/dist/core/startup/environment.cjs +1 -171
  166. package/dist/core/startup/environment.js +1 -154
  167. package/dist/core/startup/index.cjs +1 -25
  168. package/dist/core/startup/index.js +1 -8
  169. package/dist/core/startup/initializeServices.cjs +1 -228
  170. package/dist/core/startup/initializeServices.js +1 -188
  171. package/dist/core/startup/performanceTracker.cjs +1 -181
  172. package/dist/core/startup/performanceTracker.js +1 -167
  173. package/dist/core/startup/renderApp.cjs +1 -316
  174. package/dist/core/startup/renderApp.js +1 -267
  175. package/dist/core/startup/startApp.cjs +1 -319
  176. package/dist/core/startup/startApp.js +1 -315
  177. package/dist/core/types.cjs +1 -6
  178. package/dist/core/types.js +1 -5
  179. package/dist/index.cjs +1 -54
  180. package/dist/index.js +1 -11
  181. package/dist/index.umd.cjs +1 -29
  182. package/dist/index.umd.js +362 -13233
  183. package/dist/kernel/constants.cjs +1 -67
  184. package/dist/kernel/constants.js +1 -43
  185. package/dist/kernel/index.cjs +1 -40
  186. package/dist/kernel/index.js +1 -4
  187. package/dist/kernel/kernel.cjs +1 -297
  188. package/dist/kernel/kernel.js +1 -273
  189. package/dist/kernel/manager/cacheManager.cjs +1 -48
  190. package/dist/kernel/manager/cacheManager.js +1 -38
  191. package/dist/kernel/manager/i18n/I18nManager.cjs +1 -93
  192. package/dist/kernel/manager/i18n/I18nManager.js +1 -83
  193. package/dist/kernel/manager/i18n/i18n.persistence.cjs +1 -62
  194. package/dist/kernel/manager/i18n/i18n.persistence.js +1 -41
  195. package/dist/kernel/manager/i18n/i18n.schema.cjs +1 -88
  196. package/dist/kernel/manager/i18n/i18n.schema.js +1 -64
  197. package/dist/kernel/manager/i18n/index.cjs +1 -13
  198. package/dist/kernel/manager/i18n/index.js +1 -3
  199. package/dist/kernel/manager/i18nManager.cjs +1 -13
  200. package/dist/kernel/manager/i18nManager.js +1 -3
  201. package/dist/kernel/manager/index.cjs +1 -30
  202. package/dist/kernel/manager/index.js +1 -6
  203. package/dist/kernel/manager/logger/LoggerManager.cjs +1 -109
  204. package/dist/kernel/manager/logger/LoggerManager.js +1 -99
  205. package/dist/kernel/manager/logger/index.cjs +1 -13
  206. package/dist/kernel/manager/logger/index.js +1 -3
  207. package/dist/kernel/manager/logger/logger.persistence.cjs +1 -64
  208. package/dist/kernel/manager/logger/logger.persistence.js +1 -43
  209. package/dist/kernel/manager/logger/logger.schema.cjs +1 -76
  210. package/dist/kernel/manager/logger/logger.schema.js +1 -55
  211. package/dist/kernel/manager/loggerManager.cjs +1 -13
  212. package/dist/kernel/manager/loggerManager.js +1 -3
  213. package/dist/kernel/manager/theme/ThemeManager.cjs +1 -86
  214. package/dist/kernel/manager/theme/ThemeManager.js +1 -76
  215. package/dist/kernel/manager/theme/index.cjs +1 -13
  216. package/dist/kernel/manager/theme/index.js +1 -3
  217. package/dist/kernel/manager/theme/theme.dom.cjs +1 -63
  218. package/dist/kernel/manager/theme/theme.dom.js +1 -45
  219. package/dist/kernel/manager/theme/theme.persistence.cjs +1 -59
  220. package/dist/kernel/manager/theme/theme.persistence.js +1 -38
  221. package/dist/kernel/manager/theme/theme.schema.cjs +1 -124
  222. package/dist/kernel/manager/theme/theme.schema.js +1 -97
  223. package/dist/kernel/manager/themeManager.cjs +1 -13
  224. package/dist/kernel/manager/themeManager.js +1 -3
  225. package/dist/kernel/types.cjs +1 -6
  226. package/dist/kernel/types.js +1 -3
  227. package/dist/library/index.cjs +1 -21
  228. package/dist/library/index.js +1 -4
  229. package/dist/library/locale/index.cjs +1 -41
  230. package/dist/library/locale/index.js +1 -12
  231. package/dist/library/locale/langs/en-us/index.cjs +1 -34
  232. package/dist/library/locale/langs/en-us/index.js +1 -24
  233. package/dist/library/locale/langs/zh-cn/index.cjs +1 -34
  234. package/dist/library/locale/langs/zh-cn/index.js +1 -24
  235. package/dist/library/locale/types.cjs +1 -6
  236. package/dist/library/locale/types.js +1 -3
  237. package/dist/library/storage/cache.cjs +1 -245
  238. package/dist/library/storage/cache.js +1 -237
  239. package/dist/library/storage/encryption.cjs +1 -149
  240. package/dist/library/storage/encryption.js +1 -141
  241. package/dist/library/storage/index.cjs +1 -126
  242. package/dist/library/storage/index.js +1 -106
  243. package/dist/state/StateManager.cjs +1 -168
  244. package/dist/state/StateManager.js +1 -160
  245. package/dist/state/adapters/AdapterFactory.cjs +1 -91
  246. package/dist/state/adapters/AdapterFactory.js +1 -85
  247. package/dist/state/adapters/DefaultAdapter.cjs +1 -77
  248. package/dist/state/adapters/DefaultAdapter.js +1 -71
  249. package/dist/state/adapters/ReduxAdapter.cjs +1 -445
  250. package/dist/state/adapters/ReduxAdapter.js +1 -439
  251. package/dist/state/adapters/ZustandAdapter.cjs +1 -71
  252. package/dist/state/adapters/ZustandAdapter.js +1 -70
  253. package/dist/state/adapters/index.cjs +1 -46
  254. package/dist/state/adapters/index.js +1 -9
  255. package/dist/state/adapters/types.cjs +1 -22
  256. package/dist/state/adapters/types.js +1 -5
  257. package/dist/state/core/DerivedStateInstance.cjs +1 -176
  258. package/dist/state/core/DerivedStateInstance.js +1 -173
  259. package/dist/state/core/StateInstance.cjs +1 -172
  260. package/dist/state/core/StateInstance.js +1 -168
  261. package/dist/state/core/StateRegistry.cjs +1 -112
  262. package/dist/state/core/StateRegistry.js +1 -106
  263. package/dist/state/core/StateScope.cjs +1 -139
  264. package/dist/state/core/StateScope.js +1 -133
  265. package/dist/state/core/index.cjs +1 -32
  266. package/dist/state/core/index.js +1 -8
  267. package/dist/state/index.cjs +1 -32
  268. package/dist/state/index.js +1 -12
  269. package/dist/state/types.cjs +1 -14
  270. package/dist/state/types.js +1 -13
  271. package/dist/state.umd.js +22 -1395
  272. package/dist/types.cjs +1 -6
  273. package/dist/types.js +1 -3
  274. package/dist/utils/analytics.cjs +1 -219
  275. package/dist/utils/analytics.js +1 -204
  276. package/dist/utils/configSecurity.cjs +3 -184
  277. package/dist/utils/configSecurity.js +3 -176
  278. package/dist/utils/csrf.cjs +1 -20
  279. package/dist/utils/csrf.js +1 -3
  280. package/dist/utils/errors/ErrorCodes.cjs +1 -27
  281. package/dist/utils/errors/ErrorCodes.js +1 -3
  282. package/dist/utils/errors.cjs +1 -113
  283. package/dist/utils/errors.js +1 -18
  284. package/dist/utils/index.cjs +1 -137
  285. package/dist/utils/index.js +1 -48
  286. package/dist/utils/logger.cjs +1 -27
  287. package/dist/utils/logger.js +1 -3
  288. package/dist/utils/logger.types.cjs +1 -13
  289. package/dist/utils/logger.types.js +1 -3
  290. package/dist/utils/monitoring.cjs +1 -20
  291. package/dist/utils/monitoring.js +1 -3
  292. package/dist/utils/performance.cjs +1 -24
  293. package/dist/utils/performance.js +1 -3
  294. package/dist/utils/resourceLoader.cjs +1 -24
  295. package/dist/utils/resourceLoader.js +1 -3
  296. package/dist/utils/runtimeSecurity.cjs +1 -13
  297. package/dist/utils/runtimeSecurity.js +1 -3
  298. package/dist/utils/security.cjs +1 -21
  299. package/dist/utils/security.js +1 -3
  300. package/dist/utils/traceId.cjs +1 -39
  301. package/dist/utils/traceId.js +1 -3
  302. package/dist/utils/validation.cjs +1 -21
  303. package/dist/utils/validation.js +1 -3
  304. package/package.json +9 -6
  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,205 +0,0 @@
1
- /**
2
- * 监控插件
3
- *
4
- * 提供请求监控能力,包括耗时、错误率、上报等
5
- */ import { PluginPriority } from "./RequestPlugin";
6
- import { logger } from "../../utils/logger";
7
- import { getMonitoring } from "../../utils/monitoring";
8
- import { errorUtils } from "../../utils/errors";
9
- /**
10
- * 监控事件类型
11
- */ export var MonitoringEventType = /*#__PURE__*/ function(MonitoringEventType) {
12
- /**
13
- * 请求开始
14
- */ MonitoringEventType["REQUEST_START"] = "request_start";
15
- /**
16
- * 请求成功
17
- */ MonitoringEventType["REQUEST_SUCCESS"] = "request_success";
18
- /**
19
- * 请求失败
20
- */ MonitoringEventType["REQUEST_ERROR"] = "request_error";
21
- /**
22
- * 请求完成(无论成功或失败)
23
- */ MonitoringEventType["REQUEST_COMPLETE"] = "request_complete";
24
- return MonitoringEventType;
25
- }({});
26
- /**
27
- * 创建监控插件
28
- *
29
- * @param config - 监控插件配置
30
- * @returns 监控插件实例
31
- */ export function createMonitoringPlugin(config = {}) {
32
- const { enabled = true, reporter, recordStart = true, recordSuccess = true, recordError = true, recordComplete = true, slowRequestThreshold = 3000 } = config;
33
- // 如果没有提供上报函数,使用默认的 logger 输出
34
- const defaultReporter = (event)=>{
35
- logger.debug('[Request Monitoring]', event);
36
- };
37
- const report = reporter || defaultReporter;
38
- return {
39
- name: 'monitoring',
40
- priority: PluginPriority.LOW,
41
- async onBeforeRequest (context) {
42
- if (!enabled) {
43
- return;
44
- }
45
- if (recordStart) {
46
- const event = {
47
- type: "request_start",
48
- url: context.request.url,
49
- method: context.request.method || 'GET',
50
- tags: context.request.tags,
51
- timestamp: Date.now()
52
- };
53
- try {
54
- await report(event);
55
- } catch (error) {
56
- logger.error('监控上报失败:', error);
57
- // 上报错误到监控服务
58
- const monitoring = getMonitoring();
59
- monitoring.captureError(error, {
60
- type: 'monitoring_report_failed',
61
- event: 'request_start'
62
- });
63
- }
64
- }
65
- },
66
- async onAfterRequest (context) {
67
- if (!enabled || !context.response) {
68
- return;
69
- }
70
- const duration = context.duration || 0;
71
- const isSlow = duration > slowRequestThreshold;
72
- if (recordSuccess) {
73
- const event = {
74
- type: "request_success",
75
- url: context.request.url,
76
- method: context.request.method || 'GET',
77
- duration,
78
- status: context.response.status,
79
- tags: context.request.tags,
80
- timestamp: Date.now()
81
- };
82
- try {
83
- await report(event);
84
- } catch (error) {
85
- logger.error('监控上报失败:', error);
86
- // 上报错误到监控服务
87
- const monitoring = getMonitoring();
88
- monitoring.captureError(error, {
89
- type: 'monitoring_report_failed',
90
- event: 'request_start'
91
- });
92
- }
93
- }
94
- if (recordComplete) {
95
- const event = {
96
- type: "request_complete",
97
- url: context.request.url,
98
- method: context.request.method || 'GET',
99
- duration,
100
- status: context.response.status,
101
- tags: context.request.tags,
102
- timestamp: Date.now()
103
- };
104
- try {
105
- await report(event);
106
- } catch (error) {
107
- logger.error('监控上报失败:', error);
108
- // 上报错误到监控服务
109
- const monitoring = getMonitoring();
110
- monitoring.captureError(error, {
111
- type: 'monitoring_report_failed',
112
- event: 'request_start'
113
- });
114
- }
115
- }
116
- // 如果是慢请求,额外记录
117
- if (isSlow) {
118
- logger.warn(`[Slow Request] ${context.request.method || 'GET'} ${context.request.url} took ${duration}ms`);
119
- // 上报慢请求到监控服务
120
- const monitoring = getMonitoring();
121
- monitoring.captureError(new Error(`慢请求: ${context.request.method || 'GET'} ${context.request.url} 耗时 ${duration}ms`), {
122
- type: 'slow_request',
123
- duration,
124
- method: context.request.method || 'GET',
125
- url: context.request.url
126
- });
127
- }
128
- },
129
- async onError (context) {
130
- if (!enabled || !context.error) {
131
- return;
132
- }
133
- const duration = context.duration || 0;
134
- if (recordError) {
135
- const error = context.error;
136
- const event = {
137
- type: "request_error",
138
- url: context.request.url,
139
- method: context.request.method || 'GET',
140
- duration,
141
- status: error.status,
142
- error: {
143
- type: error.type,
144
- code: error.code,
145
- message: error.message
146
- },
147
- tags: context.request.tags,
148
- timestamp: Date.now()
149
- };
150
- // 上报错误到监控服务
151
- const monitoring = getMonitoring();
152
- const normalizedError = errorUtils.normalizeError(error);
153
- monitoring.captureError(normalizedError, {
154
- type: 'request_error',
155
- url: context.request.url,
156
- method: context.request.method || 'GET',
157
- duration,
158
- status: error.status,
159
- errorType: error.type,
160
- errorCode: error.code
161
- });
162
- try {
163
- await report(event);
164
- } catch (reportError) {
165
- logger.error('监控上报失败:', reportError);
166
- // 上报上报失败错误到监控服务
167
- monitoring.captureError(reportError, {
168
- type: 'monitoring_report_failed',
169
- event: 'request_error'
170
- });
171
- }
172
- }
173
- if (recordComplete) {
174
- const error = context.error;
175
- const event = {
176
- type: "request_complete",
177
- url: context.request.url,
178
- method: context.request.method || 'GET',
179
- duration,
180
- status: error.status,
181
- error: {
182
- type: error.type,
183
- code: error.code,
184
- message: error.message
185
- },
186
- tags: context.request.tags,
187
- timestamp: Date.now()
188
- };
189
- try {
190
- await report(event);
191
- } catch (reportError) {
192
- logger.error('监控上报失败:', reportError);
193
- // 上报错误到监控服务
194
- const monitoring = getMonitoring();
195
- monitoring.captureError(reportError, {
196
- type: 'monitoring_report_failed',
197
- event: context.error ? 'request_error' : 'request_complete'
198
- });
199
- }
200
- }
201
- }
202
- };
203
- }
204
-
205
- //# sourceMappingURL=monitoring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/request/plugin/monitoring.ts"],"sourcesContent":["/**\n * 监控插件\n * \n * 提供请求监控能力,包括耗时、错误率、上报等\n */\n\nimport type { RequestPlugin } from './RequestPlugin';\nimport type { RequestContext } from '../types';\nimport type { RequestError } from '../types';\nimport { PluginPriority } from './RequestPlugin';\nimport { logger } from '../../utils/logger';\nimport { getMonitoring } from '../../utils/monitoring';\nimport { errorUtils } from '../../utils/errors';\n\n/**\n * 监控事件类型\n */\nexport enum MonitoringEventType {\n /**\n * 请求开始\n */\n REQUEST_START = 'request_start',\n\n /**\n * 请求成功\n */\n REQUEST_SUCCESS = 'request_success',\n\n /**\n * 请求失败\n */\n REQUEST_ERROR = 'request_error',\n\n /**\n * 请求完成(无论成功或失败)\n */\n REQUEST_COMPLETE = 'request_complete',\n}\n\n/**\n * 监控事件数据\n */\nexport interface MonitoringEvent {\n /**\n * 事件类型\n */\n type: MonitoringEventType;\n\n /**\n * 请求 URL\n */\n url: string;\n\n /**\n * 请求方法\n */\n method: string;\n\n /**\n * 请求耗时(毫秒)\n */\n duration?: number;\n\n /**\n * HTTP 状态码\n */\n status?: number;\n\n /**\n * 错误信息(如果有)\n */\n error?: {\n type: string;\n code: string;\n message: string;\n };\n\n /**\n * 请求标签\n */\n tags?: string[];\n\n /**\n * 时间戳\n */\n timestamp: number;\n}\n\n/**\n * 监控上报函数类型\n */\nexport type MonitoringReporter = (event: MonitoringEvent) => void | Promise<void>;\n\n/**\n * 监控插件配置\n */\nexport interface MonitoringPluginConfig {\n /**\n * 是否启用监控\n */\n enabled?: boolean;\n\n /**\n * 监控上报函数\n */\n reporter?: MonitoringReporter;\n\n /**\n * 是否记录请求开始事件\n */\n recordStart?: boolean;\n\n /**\n * 是否记录请求成功事件\n */\n recordSuccess?: boolean;\n\n /**\n * 是否记录请求错误事件\n */\n recordError?: boolean;\n\n /**\n * 是否记录请求完成事件\n */\n recordComplete?: boolean;\n\n /**\n * 慢请求阈值(毫秒),超过此阈值的请求会被标记为慢请求\n */\n slowRequestThreshold?: number;\n}\n\n/**\n * 创建监控插件\n * \n * @param config - 监控插件配置\n * @returns 监控插件实例\n */\nexport function createMonitoringPlugin(config: MonitoringPluginConfig = {}): RequestPlugin {\n const {\n enabled = true,\n reporter,\n recordStart = true,\n recordSuccess = true,\n recordError = true,\n recordComplete = true,\n slowRequestThreshold = 3000,\n } = config;\n\n // 如果没有提供上报函数,使用默认的 logger 输出\n const defaultReporter: MonitoringReporter = (event) => {\n logger.debug('[Request Monitoring]', event);\n };\n\n const report: MonitoringReporter = reporter || defaultReporter;\n\n return {\n name: 'monitoring',\n priority: PluginPriority.LOW, // 低优先级,用于日志和监控\n\n async onBeforeRequest(context: RequestContext): Promise<void> {\n if (!enabled) {\n return;\n }\n\n if (recordStart) {\n const event: MonitoringEvent = {\n type: MonitoringEventType.REQUEST_START,\n url: context.request.url,\n method: context.request.method || 'GET',\n tags: context.request.tags,\n timestamp: Date.now(),\n };\n\n try {\n await report(event);\n } catch (error) {\n logger.error('监控上报失败:', error);\n // 上报错误到监控服务\n const monitoring = getMonitoring();\n monitoring.captureError(error, {\n type: 'monitoring_report_failed',\n event: 'request_start',\n });\n }\n }\n },\n\n async onAfterRequest(context: RequestContext): Promise<void> {\n if (!enabled || !context.response) {\n return;\n }\n\n const duration = context.duration || 0;\n const isSlow = duration > slowRequestThreshold;\n\n if (recordSuccess) {\n const event: MonitoringEvent = {\n type: MonitoringEventType.REQUEST_SUCCESS,\n url: context.request.url,\n method: context.request.method || 'GET',\n duration,\n status: context.response.status,\n tags: context.request.tags,\n timestamp: Date.now(),\n };\n\n try {\n await report(event);\n } catch (error) {\n logger.error('监控上报失败:', error);\n // 上报错误到监控服务\n const monitoring = getMonitoring();\n monitoring.captureError(error, {\n type: 'monitoring_report_failed',\n event: 'request_start',\n });\n }\n }\n\n if (recordComplete) {\n const event: MonitoringEvent = {\n type: MonitoringEventType.REQUEST_COMPLETE,\n url: context.request.url,\n method: context.request.method || 'GET',\n duration,\n status: context.response.status,\n tags: context.request.tags,\n timestamp: Date.now(),\n };\n\n try {\n await report(event);\n } catch (error) {\n logger.error('监控上报失败:', error);\n // 上报错误到监控服务\n const monitoring = getMonitoring();\n monitoring.captureError(error, {\n type: 'monitoring_report_failed',\n event: 'request_start',\n });\n }\n }\n\n // 如果是慢请求,额外记录\n if (isSlow) {\n logger.warn(`[Slow Request] ${context.request.method || 'GET'} ${context.request.url} took ${duration}ms`);\n // 上报慢请求到监控服务\n const monitoring = getMonitoring();\n monitoring.captureError(\n new Error(`慢请求: ${context.request.method || 'GET'} ${context.request.url} 耗时 ${duration}ms`),\n {\n type: 'slow_request',\n duration,\n method: context.request.method || 'GET',\n url: context.request.url,\n }\n );\n }\n },\n\n async onError(context: RequestContext): Promise<void> {\n if (!enabled || !context.error) {\n return;\n }\n\n const duration = context.duration || 0;\n\n if (recordError) {\n const error = context.error as RequestError;\n const event: MonitoringEvent = {\n type: MonitoringEventType.REQUEST_ERROR,\n url: context.request.url,\n method: context.request.method || 'GET',\n duration,\n status: error.status,\n error: {\n type: error.type,\n code: error.code,\n message: error.message,\n },\n tags: context.request.tags,\n timestamp: Date.now(),\n };\n\n // 上报错误到监控服务\n const monitoring = getMonitoring();\n const normalizedError = errorUtils.normalizeError(error);\n monitoring.captureError(normalizedError, {\n type: 'request_error',\n url: context.request.url,\n method: context.request.method || 'GET',\n duration,\n status: error.status,\n errorType: error.type,\n errorCode: error.code,\n });\n\n try {\n await report(event);\n } catch (reportError) {\n logger.error('监控上报失败:', reportError);\n // 上报上报失败错误到监控服务\n monitoring.captureError(reportError, {\n type: 'monitoring_report_failed',\n event: 'request_error',\n });\n }\n }\n\n if (recordComplete) {\n const error = context.error as RequestError;\n const event: MonitoringEvent = {\n type: MonitoringEventType.REQUEST_COMPLETE,\n url: context.request.url,\n method: context.request.method || 'GET',\n duration,\n status: error.status,\n error: {\n type: error.type,\n code: error.code,\n message: error.message,\n },\n tags: context.request.tags,\n timestamp: Date.now(),\n };\n\n try {\n await report(event);\n } catch (reportError) {\n logger.error('监控上报失败:', reportError);\n // 上报错误到监控服务\n const monitoring = getMonitoring();\n monitoring.captureError(reportError, {\n type: 'monitoring_report_failed',\n event: context.error ? 'request_error' : 'request_complete',\n });\n }\n }\n },\n };\n}\n"],"names":["PluginPriority","logger","getMonitoring","errorUtils","MonitoringEventType","createMonitoringPlugin","config","enabled","reporter","recordStart","recordSuccess","recordError","recordComplete","slowRequestThreshold","defaultReporter","event","debug","report","name","priority","LOW","onBeforeRequest","context","type","url","request","method","tags","timestamp","Date","now","error","monitoring","captureError","onAfterRequest","response","duration","isSlow","status","warn","Error","onError","code","message","normalizedError","normalizeError","errorType","errorCode","reportError"],"mappings":"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"}
@@ -1,91 +0,0 @@
1
- /**
2
- * 请求队列插件
3
- *
4
- * 当检测到特定的响应 code 或 status 时,暂停后续请求并放入队列,
5
- * 执行回调方法,等待回调完成后继续执行队列中的请求
6
- */
7
- import type { RequestPlugin } from './RequestPlugin';
8
- import type { RequestContext, Response } from '../types';
9
- /**
10
- * 触发条件配置
11
- */
12
- export interface QueueTriggerCondition {
13
- /**
14
- * 响应数据中的 code 字段值(业务状态码)
15
- * 如果响应数据是对象且包含 code 字段,且值匹配则触发
16
- */
17
- code?: number | string | ((code: unknown) => boolean);
18
- /**
19
- * HTTP 状态码
20
- * 如果 HTTP status 匹配则触发
21
- */
22
- status?: number | number[] | ((status: number) => boolean);
23
- /**
24
- * 自定义检查函数
25
- * 返回 true 表示应该触发队列暂停
26
- */
27
- check?: (response: Response, context: RequestContext) => boolean;
28
- }
29
- /**
30
- * 队列插件配置
31
- */
32
- export interface QueuePluginConfig {
33
- /**
34
- * 触发条件列表
35
- * 当响应匹配任一条件时,会暂停队列并执行回调
36
- */
37
- triggers?: QueueTriggerCondition[];
38
- /**
39
- * 回调函数
40
- * 当检测到触发条件时执行,返回 Promise 表示异步操作
41
- *
42
- * @param response - 触发条件的响应
43
- * @param context - 请求上下文
44
- * @returns Promise 或 void
45
- */
46
- onTrigger?: (response: Response, context: RequestContext) => Promise<void> | void;
47
- /**
48
- * 是否启用队列功能
49
- * @default true
50
- */
51
- enabled?: boolean;
52
- /**
53
- * 是否在错误时也检查触发条件
54
- * @default true
55
- */
56
- checkOnError?: boolean;
57
- /**
58
- * 队列超时时间(毫秒)
59
- * 如果队列暂停超过此时间,会自动恢复并拒绝队列中的请求
60
- * @default 30000 (30秒)
61
- */
62
- queueTimeout?: number;
63
- }
64
- /**
65
- * 创建请求队列插件
66
- *
67
- * @param config - 队列插件配置
68
- * @returns 队列插件实例
69
- *
70
- * @example
71
- * ```typescript
72
- * import { createRequestClient } from '@vlian/request';
73
- * import { createQueuePlugin } from '@vlian/request/plugin';
74
- *
75
- * const client = await createRequestClient({
76
- * plugins: [
77
- * createQueuePlugin({
78
- * triggers: [
79
- * { code: 401 }, // 业务 code 401 表示未授权
80
- * { status: 401 }, // HTTP 401 未授权
81
- * ],
82
- * onTrigger: async (response, context) => {
83
- * // 刷新 token 或跳转登录
84
- * await refreshToken();
85
- * },
86
- * }),
87
- * ],
88
- * });
89
- * ```
90
- */
91
- export declare function createQueuePlugin(config?: QueuePluginConfig): RequestPlugin;
@@ -1,156 +0,0 @@
1
- /**
2
- * 请求队列插件
3
- *
4
- * 当检测到特定的响应 code 或 status 时,暂停后续请求并放入队列,
5
- * 执行回调方法,等待回调完成后继续执行队列中的请求
6
- */ import { PluginPriority } from "./RequestPlugin";
7
- import { getRequestQueueManager } from "../utils/RequestQueueManager";
8
- /**
9
- * 检查响应是否匹配触发条件
10
- */ function matchesTrigger(response, context, trigger) {
11
- // 检查自定义检查函数
12
- if (trigger.check) {
13
- return trigger.check(response, context);
14
- }
15
- // 检查响应数据中的 code 字段
16
- if (trigger.code !== undefined) {
17
- const responseData = response.data;
18
- if (responseData && typeof responseData === 'object' && 'code' in responseData) {
19
- const code = responseData.code;
20
- if (typeof trigger.code === 'function') {
21
- if (trigger.code(code)) {
22
- return true;
23
- }
24
- } else if (code === trigger.code) {
25
- return true;
26
- }
27
- }
28
- }
29
- // 检查 HTTP 状态码
30
- if (trigger.status !== undefined) {
31
- const status = response.status;
32
- if (typeof trigger.status === 'function') {
33
- if (trigger.status(status)) {
34
- return true;
35
- }
36
- } else if (Array.isArray(trigger.status)) {
37
- if (trigger.status.includes(status)) {
38
- return true;
39
- }
40
- } else if (status === trigger.status) {
41
- return true;
42
- }
43
- }
44
- return false;
45
- }
46
- /**
47
- * 检查响应是否匹配任一触发条件
48
- */ function matchesAnyTrigger(response, context, triggers) {
49
- return triggers.some((trigger)=>matchesTrigger(response, context, trigger));
50
- }
51
- /**
52
- * 创建请求队列插件
53
- *
54
- * @param config - 队列插件配置
55
- * @returns 队列插件实例
56
- *
57
- * @example
58
- * ```typescript
59
- * import { createRequestClient } from '@vlian/framework/request';
60
- * import { createQueuePlugin } from '@vlian/framework/request/plugin';
61
- *
62
- * const client = await createRequestClient({
63
- * plugins: [
64
- * createQueuePlugin({
65
- * triggers: [
66
- * { code: 401 }, // 业务 code 401 表示未授权
67
- * { status: 401 }, // HTTP 401 未授权
68
- * ],
69
- * onTrigger: async (response, context) => {
70
- * // 刷新 token 或跳转登录
71
- * await refreshToken();
72
- * },
73
- * }),
74
- * ],
75
- * });
76
- * ```
77
- */ export function createQueuePlugin(config = {}) {
78
- const { triggers = [], onTrigger, enabled = true, checkOnError = true, queueTimeout = 30000 } = config;
79
- if (triggers.length === 0) {
80
- // 如果没有配置触发条件,返回一个空插件
81
- return {
82
- name: 'queue',
83
- priority: PluginPriority.HIGH,
84
- onBeforeRequest: undefined,
85
- onAfterRequest: undefined,
86
- onError: undefined
87
- };
88
- }
89
- const queueManager = getRequestQueueManager();
90
- return {
91
- name: 'queue',
92
- priority: PluginPriority.HIGH,
93
- async onAfterRequest (context) {
94
- if (!enabled || !context.response) {
95
- return;
96
- }
97
- // 检查是否匹配触发条件
98
- const matched = matchesAnyTrigger(context.response, context, triggers);
99
- if (matched && onTrigger) {
100
- // 暂停队列(后续请求会被 RequestClient 自动放入队列)
101
- queueManager.pause();
102
- // 设置队列超时
103
- const timeoutId = setTimeout(()=>{
104
- queueManager.clear('队列超时');
105
- }, queueTimeout);
106
- try {
107
- // 执行回调并等待完成,然后恢复队列
108
- await queueManager.processAndResume(async ()=>{
109
- await onTrigger(context.response, context);
110
- });
111
- } catch (error) {
112
- // 回调执行失败,清空队列
113
- queueManager.clear(`回调执行失败: ${error instanceof Error ? error.message : String(error)}`);
114
- // 不抛出错误,让请求正常返回(但队列已被清空)
115
- } finally{
116
- clearTimeout(timeoutId);
117
- }
118
- }
119
- },
120
- async onError (context) {
121
- if (!enabled || !checkOnError || !context.error) {
122
- return;
123
- }
124
- // 如果有响应,检查是否匹配触发条件
125
- if (context.response) {
126
- const matched = matchesAnyTrigger(context.response, context, triggers);
127
- if (matched && onTrigger) {
128
- // 暂停队列(后续请求会被 RequestClient 自动放入队列)
129
- queueManager.pause();
130
- // 设置队列超时
131
- const timeoutId = setTimeout(()=>{
132
- queueManager.clear('队列超时');
133
- }, queueTimeout);
134
- try {
135
- // 执行回调并等待完成,然后恢复队列
136
- await queueManager.processAndResume(async ()=>{
137
- await onTrigger(context.response, context);
138
- });
139
- // 错误已被处理,返回 true 阻止错误传播
140
- return true;
141
- } catch (error) {
142
- // 回调执行失败,清空队列
143
- queueManager.clear(`回调执行失败: ${error instanceof Error ? error.message : String(error)}`);
144
- // 不处理错误,继续传播
145
- return false;
146
- } finally{
147
- clearTimeout(timeoutId);
148
- }
149
- }
150
- }
151
- return false;
152
- }
153
- };
154
- }
155
-
156
- //# sourceMappingURL=queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/request/plugin/queue.ts"],"sourcesContent":["/**\n * 请求队列插件\n * \n * 当检测到特定的响应 code 或 status 时,暂停后续请求并放入队列,\n * 执行回调方法,等待回调完成后继续执行队列中的请求\n */\n\nimport type { RequestPlugin } from './RequestPlugin';\nimport type { RequestContext, Response } from '../types';\nimport { PluginPriority } from './RequestPlugin';\nimport { getRequestQueueManager } from '../utils/RequestQueueManager';\n\n/**\n * 触发条件配置\n */\nexport interface QueueTriggerCondition {\n /**\n * 响应数据中的 code 字段值(业务状态码)\n * 如果响应数据是对象且包含 code 字段,且值匹配则触发\n */\n code?: number | string | ((code: unknown) => boolean);\n \n /**\n * HTTP 状态码\n * 如果 HTTP status 匹配则触发\n */\n status?: number | number[] | ((status: number) => boolean);\n \n /**\n * 自定义检查函数\n * 返回 true 表示应该触发队列暂停\n */\n check?: (response: Response, context: RequestContext) => boolean;\n}\n\n/**\n * 队列插件配置\n */\nexport interface QueuePluginConfig {\n /**\n * 触发条件列表\n * 当响应匹配任一条件时,会暂停队列并执行回调\n */\n triggers?: QueueTriggerCondition[];\n \n /**\n * 回调函数\n * 当检测到触发条件时执行,返回 Promise 表示异步操作\n * \n * @param response - 触发条件的响应\n * @param context - 请求上下文\n * @returns Promise 或 void\n */\n onTrigger?: (response: Response, context: RequestContext) => Promise<void> | void;\n \n /**\n * 是否启用队列功能\n * @default true\n */\n enabled?: boolean;\n \n /**\n * 是否在错误时也检查触发条件\n * @default true\n */\n checkOnError?: boolean;\n \n /**\n * 队列超时时间(毫秒)\n * 如果队列暂停超过此时间,会自动恢复并拒绝队列中的请求\n * @default 30000 (30秒)\n */\n queueTimeout?: number;\n}\n\n/**\n * 检查响应是否匹配触发条件\n */\nfunction matchesTrigger(\n response: Response,\n context: RequestContext,\n trigger: QueueTriggerCondition\n): boolean {\n // 检查自定义检查函数\n if (trigger.check) {\n return trigger.check(response, context);\n }\n \n // 检查响应数据中的 code 字段\n if (trigger.code !== undefined) {\n const responseData = response.data;\n if (responseData && typeof responseData === 'object' && 'code' in responseData) {\n const code = (responseData as { code: unknown }).code;\n \n if (typeof trigger.code === 'function') {\n if (trigger.code(code)) {\n return true;\n }\n } else if (code === trigger.code) {\n return true;\n }\n }\n }\n \n // 检查 HTTP 状态码\n if (trigger.status !== undefined) {\n const status = response.status;\n \n if (typeof trigger.status === 'function') {\n if (trigger.status(status)) {\n return true;\n }\n } else if (Array.isArray(trigger.status)) {\n if (trigger.status.includes(status)) {\n return true;\n }\n } else if (status === trigger.status) {\n return true;\n }\n }\n \n return false;\n}\n\n/**\n * 检查响应是否匹配任一触发条件\n */\nfunction matchesAnyTrigger(\n response: Response,\n context: RequestContext,\n triggers: QueueTriggerCondition[]\n): boolean {\n return triggers.some((trigger) => matchesTrigger(response, context, trigger));\n}\n\n/**\n * 创建请求队列插件\n * \n * @param config - 队列插件配置\n * @returns 队列插件实例\n * \n * @example\n * ```typescript\n * import { createRequestClient } from '@vlian/framework/request';\n * import { createQueuePlugin } from '@vlian/framework/request/plugin';\n * \n * const client = await createRequestClient({\n * plugins: [\n * createQueuePlugin({\n * triggers: [\n * { code: 401 }, // 业务 code 401 表示未授权\n * { status: 401 }, // HTTP 401 未授权\n * ],\n * onTrigger: async (response, context) => {\n * // 刷新 token 或跳转登录\n * await refreshToken();\n * },\n * }),\n * ],\n * });\n * ```\n */\nexport function createQueuePlugin(config: QueuePluginConfig = {}): RequestPlugin {\n const {\n triggers = [],\n onTrigger,\n enabled = true,\n checkOnError = true,\n queueTimeout = 30000,\n } = config;\n \n if (triggers.length === 0) {\n // 如果没有配置触发条件,返回一个空插件\n return {\n name: 'queue',\n priority: PluginPriority.HIGH,\n onBeforeRequest: undefined,\n onAfterRequest: undefined,\n onError: undefined,\n };\n }\n \n const queueManager = getRequestQueueManager();\n \n return {\n name: 'queue',\n priority: PluginPriority.HIGH, // 高优先级,确保在其他插件之前执行\n \n async onAfterRequest(context: RequestContext): Promise<Response | void> {\n if (!enabled || !context.response) {\n return;\n }\n \n // 检查是否匹配触发条件\n const matched = matchesAnyTrigger(context.response, context, triggers);\n \n if (matched && onTrigger) {\n // 暂停队列(后续请求会被 RequestClient 自动放入队列)\n queueManager.pause();\n \n // 设置队列超时\n const timeoutId = setTimeout(() => {\n queueManager.clear('队列超时');\n }, queueTimeout);\n \n try {\n // 执行回调并等待完成,然后恢复队列\n await queueManager.processAndResume(async () => {\n await onTrigger(context.response!, context);\n });\n } catch (error) {\n // 回调执行失败,清空队列\n queueManager.clear(`回调执行失败: ${error instanceof Error ? error.message : String(error)}`);\n // 不抛出错误,让请求正常返回(但队列已被清空)\n } finally {\n clearTimeout(timeoutId);\n }\n }\n },\n \n async onError(context: RequestContext): Promise<boolean | void> {\n if (!enabled || !checkOnError || !context.error) {\n return;\n }\n \n // 如果有响应,检查是否匹配触发条件\n if (context.response) {\n const matched = matchesAnyTrigger(context.response, context, triggers);\n \n if (matched && onTrigger) {\n // 暂停队列(后续请求会被 RequestClient 自动放入队列)\n queueManager.pause();\n \n // 设置队列超时\n const timeoutId = setTimeout(() => {\n queueManager.clear('队列超时');\n }, queueTimeout);\n \n try {\n // 执行回调并等待完成,然后恢复队列\n await queueManager.processAndResume(async () => {\n await onTrigger(context.response!, context);\n });\n \n // 错误已被处理,返回 true 阻止错误传播\n return true;\n } catch (error) {\n // 回调执行失败,清空队列\n queueManager.clear(`回调执行失败: ${error instanceof Error ? error.message : String(error)}`);\n // 不处理错误,继续传播\n return false;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n }\n \n return false;\n },\n };\n}\n"],"names":["PluginPriority","getRequestQueueManager","matchesTrigger","response","context","trigger","check","code","undefined","responseData","data","status","Array","isArray","includes","matchesAnyTrigger","triggers","some","createQueuePlugin","config","onTrigger","enabled","checkOnError","queueTimeout","length","name","priority","HIGH","onBeforeRequest","onAfterRequest","onError","queueManager","matched","pause","timeoutId","setTimeout","clear","processAndResume","error","Error","message","String","clearTimeout"],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * 重试插件
3
- *
4
- * 提供请求重试能力,支持指数退避、条件重试
5
- */
6
- import type { RequestPlugin } from './RequestPlugin';
7
- /**
8
- * 重试插件配置
9
- */
10
- export interface RetryPluginConfig {
11
- /**
12
- * 默认最大重试次数
13
- */
14
- defaultMaxAttempts?: number;
15
- /**
16
- * 默认重试延迟(毫秒)
17
- */
18
- defaultDelay?: number;
19
- /**
20
- * 是否默认启用指数退避
21
- */
22
- defaultExponentialBackoff?: boolean;
23
- /**
24
- * 是否启用重试
25
- */
26
- enabled?: boolean;
27
- }
28
- /**
29
- * 创建重试插件
30
- *
31
- * @param config - 重试插件配置
32
- * @returns 重试插件实例
33
- */
34
- export declare function createRetryPlugin(config?: RetryPluginConfig): RequestPlugin;
@@ -1,93 +0,0 @@
1
- /**
2
- * 重试插件
3
- *
4
- * 提供请求重试能力,支持指数退避、条件重试
5
- */ import { RequestErrorType } from "../types";
6
- import { PluginPriority } from "./RequestPlugin";
7
- /**
8
- * 计算指数退避延迟
9
- */ function calculateExponentialBackoffDelay(attempt, baseDelay) {
10
- return baseDelay * Math.pow(2, attempt - 1);
11
- }
12
- /**
13
- * 默认重试条件
14
- */ function defaultShouldRetry(error, attempt, maxAttempts) {
15
- if (attempt >= maxAttempts) {
16
- return false;
17
- }
18
- // 如果是请求错误,检查错误类型
19
- if (error && typeof error === 'object' && 'type' in error) {
20
- const requestError = error;
21
- // 网络错误、超时错误、服务器错误(5xx)可以重试
22
- if (requestError.type === RequestErrorType.NETWORK_ERROR || requestError.type === RequestErrorType.TIMEOUT_ERROR || requestError.type === RequestErrorType.HTTP_ERROR && requestError.status && requestError.status >= 500) {
23
- return true;
24
- }
25
- // 客户端错误(4xx)不重试,除了 408(请求超时)和 429(请求过多)
26
- if (requestError.type === RequestErrorType.HTTP_ERROR && requestError.status) {
27
- return requestError.status === 408 || requestError.status === 429;
28
- }
29
- }
30
- // 其他错误不重试
31
- return false;
32
- }
33
- /**
34
- * 创建重试插件
35
- *
36
- * @param config - 重试插件配置
37
- * @returns 重试插件实例
38
- */ export function createRetryPlugin(config = {}) {
39
- const { defaultMaxAttempts = 3, defaultDelay = 1000, defaultExponentialBackoff = true, enabled = true } = config;
40
- return {
41
- name: 'retry',
42
- priority: PluginPriority.LOWEST,
43
- async onError (context) {
44
- if (!enabled || !context.error) {
45
- return;
46
- }
47
- const retryConfig = context.request.retry;
48
- if (!retryConfig) {
49
- // 如果没有配置重试,使用默认配置
50
- const maxAttempts = defaultMaxAttempts;
51
- const delay = defaultDelay;
52
- const exponentialBackoff = defaultExponentialBackoff;
53
- // 检查是否应该重试
54
- const shouldRetry = defaultShouldRetry(context.error, context.retryCount, maxAttempts);
55
- if (!shouldRetry) {
56
- return false; // 不处理错误,继续传播
57
- }
58
- // 计算延迟
59
- const retryDelay = exponentialBackoff ? calculateExponentialBackoffDelay(context.retryCount + 1, delay) : delay;
60
- // 等待后重试
61
- await new Promise((resolve)=>setTimeout(resolve, retryDelay));
62
- // 增加重试计数
63
- context.retryCount += 1;
64
- // 返回 false,让错误继续传播,触发重新请求
65
- return false;
66
- }
67
- // 使用配置的重试逻辑
68
- const maxAttempts = retryConfig.maxAttempts || defaultMaxAttempts;
69
- const shouldRetry = retryConfig.shouldRetry ? retryConfig.shouldRetry(context.error, context.retryCount) : defaultShouldRetry(context.error, context.retryCount, maxAttempts);
70
- if (!shouldRetry) {
71
- return false; // 不处理错误,继续传播
72
- }
73
- // 计算延迟
74
- let retryDelay;
75
- if (retryConfig.calculateDelay) {
76
- retryDelay = retryConfig.calculateDelay(context.retryCount + 1);
77
- } else if (retryConfig.exponentialBackoff !== false) {
78
- const baseDelay = retryConfig.delay || defaultDelay;
79
- retryDelay = calculateExponentialBackoffDelay(context.retryCount + 1, baseDelay);
80
- } else {
81
- retryDelay = retryConfig.delay || defaultDelay;
82
- }
83
- // 等待后重试
84
- await new Promise((resolve)=>setTimeout(resolve, retryDelay));
85
- // 增加重试计数
86
- context.retryCount += 1;
87
- // 返回 false,让错误继续传播,触发重新请求
88
- return false;
89
- }
90
- };
91
- }
92
-
93
- //# sourceMappingURL=retry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/request/plugin/retry.ts"],"sourcesContent":["/**\n * 重试插件\n * \n * 提供请求重试能力,支持指数退避、条件重试\n */\n\nimport type { RequestPlugin } from './RequestPlugin';\nimport type { RequestContext } from '../types';\nimport { RequestError, RequestErrorType } from '../types';\nimport { PluginPriority } from './RequestPlugin';\n\n/**\n * 重试插件配置\n */\nexport interface RetryPluginConfig {\n /**\n * 默认最大重试次数\n */\n defaultMaxAttempts?: number;\n\n /**\n * 默认重试延迟(毫秒)\n */\n defaultDelay?: number;\n\n /**\n * 是否默认启用指数退避\n */\n defaultExponentialBackoff?: boolean;\n\n /**\n * 是否启用重试\n */\n enabled?: boolean;\n}\n\n/**\n * 计算指数退避延迟\n */\nfunction calculateExponentialBackoffDelay(attempt: number, baseDelay: number): number {\n return baseDelay * Math.pow(2, attempt - 1);\n}\n\n/**\n * 默认重试条件\n */\nfunction defaultShouldRetry(error: unknown, attempt: number, maxAttempts: number): boolean {\n if (attempt >= maxAttempts) {\n return false;\n }\n\n // 如果是请求错误,检查错误类型\n if (error && typeof error === 'object' && 'type' in error) {\n const requestError = error as RequestError;\n\n // 网络错误、超时错误、服务器错误(5xx)可以重试\n if (\n requestError.type === RequestErrorType.NETWORK_ERROR ||\n requestError.type === RequestErrorType.TIMEOUT_ERROR ||\n (requestError.type === RequestErrorType.HTTP_ERROR && requestError.status && requestError.status >= 500)\n ) {\n return true;\n }\n\n // 客户端错误(4xx)不重试,除了 408(请求超时)和 429(请求过多)\n if (requestError.type === RequestErrorType.HTTP_ERROR && requestError.status) {\n return requestError.status === 408 || requestError.status === 429;\n }\n }\n\n // 其他错误不重试\n return false;\n}\n\n/**\n * 创建重试插件\n * \n * @param config - 重试插件配置\n * @returns 重试插件实例\n */\nexport function createRetryPlugin(config: RetryPluginConfig = {}): RequestPlugin {\n const {\n defaultMaxAttempts = 3,\n defaultDelay = 1000,\n defaultExponentialBackoff = true,\n enabled = true,\n } = config;\n\n return {\n name: 'retry',\n priority: PluginPriority.LOWEST, // 最低优先级,最后执行\n\n async onError(context: RequestContext): Promise<boolean | void> {\n if (!enabled || !context.error) {\n return;\n }\n\n const retryConfig = context.request.retry;\n if (!retryConfig) {\n // 如果没有配置重试,使用默认配置\n const maxAttempts = defaultMaxAttempts;\n const delay = defaultDelay;\n const exponentialBackoff = defaultExponentialBackoff;\n\n // 检查是否应该重试\n const shouldRetry = defaultShouldRetry(context.error, context.retryCount, maxAttempts);\n if (!shouldRetry) {\n return false; // 不处理错误,继续传播\n }\n\n // 计算延迟\n const retryDelay = exponentialBackoff\n ? calculateExponentialBackoffDelay(context.retryCount + 1, delay)\n : delay;\n\n // 等待后重试\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n\n // 增加重试计数\n context.retryCount += 1;\n\n // 返回 false,让错误继续传播,触发重新请求\n return false;\n }\n\n // 使用配置的重试逻辑\n const maxAttempts = retryConfig.maxAttempts || defaultMaxAttempts;\n const shouldRetry = retryConfig.shouldRetry\n ? retryConfig.shouldRetry(context.error, context.retryCount)\n : defaultShouldRetry(context.error, context.retryCount, maxAttempts);\n\n if (!shouldRetry) {\n return false; // 不处理错误,继续传播\n }\n\n // 计算延迟\n let retryDelay: number;\n if (retryConfig.calculateDelay) {\n retryDelay = retryConfig.calculateDelay(context.retryCount + 1);\n } else if (retryConfig.exponentialBackoff !== false) {\n const baseDelay = retryConfig.delay || defaultDelay;\n retryDelay = calculateExponentialBackoffDelay(context.retryCount + 1, baseDelay);\n } else {\n retryDelay = retryConfig.delay || defaultDelay;\n }\n\n // 等待后重试\n await new Promise((resolve) => setTimeout(resolve, retryDelay));\n\n // 增加重试计数\n context.retryCount += 1;\n\n // 返回 false,让错误继续传播,触发重新请求\n return false;\n },\n };\n}\n"],"names":["RequestErrorType","PluginPriority","calculateExponentialBackoffDelay","attempt","baseDelay","Math","pow","defaultShouldRetry","error","maxAttempts","requestError","type","NETWORK_ERROR","TIMEOUT_ERROR","HTTP_ERROR","status","createRetryPlugin","config","defaultMaxAttempts","defaultDelay","defaultExponentialBackoff","enabled","name","priority","LOWEST","onError","context","retryConfig","request","retry","delay","exponentialBackoff","shouldRetry","retryCount","retryDelay","Promise","resolve","setTimeout","calculateDelay"],"mappings":"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"}