@vlian/framework 1.2.25 → 1.2.37

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 (213) hide show
  1. package/dist/analytics.umd.js +208 -2395
  2. package/dist/analytics.umd.js.map +1 -1
  3. package/dist/core/error/ErrorHandler.cjs.map +1 -1
  4. package/dist/core/error/ErrorHandler.d.ts +1 -1
  5. package/dist/core/error/ErrorHandler.js.map +1 -1
  6. package/dist/core/router/monitoring/RouterMonitoring.cjs +1 -1
  7. package/dist/core/router/monitoring/RouterMonitoring.cjs.map +1 -1
  8. package/dist/core/router/monitoring/RouterMonitoring.js +1 -1
  9. package/dist/core/router/monitoring/RouterMonitoring.js.map +1 -1
  10. package/dist/core/router/utils/adapters/react-router/transform.cjs +4 -0
  11. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  12. package/dist/core/router/utils/adapters/react-router/transform.js +4 -0
  13. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  14. package/dist/core/startup/initializeServices.cjs +1 -1
  15. package/dist/core/startup/initializeServices.cjs.map +1 -1
  16. package/dist/core/startup/initializeServices.d.ts +1 -1
  17. package/dist/core/startup/initializeServices.js +1 -1
  18. package/dist/core/startup/initializeServices.js.map +1 -1
  19. package/dist/core/startup/performanceTracker.cjs.map +1 -1
  20. package/dist/core/startup/performanceTracker.d.ts +1 -1
  21. package/dist/core/startup/performanceTracker.js.map +1 -1
  22. package/dist/core/startup/renderApp.cjs +1 -1
  23. package/dist/core/startup/renderApp.cjs.map +1 -1
  24. package/dist/core/startup/renderApp.d.ts +1 -1
  25. package/dist/core/startup/renderApp.js +1 -1
  26. package/dist/core/startup/renderApp.js.map +1 -1
  27. package/dist/core/startup/startApp.cjs +2 -2
  28. package/dist/core/startup/startApp.cjs.map +1 -1
  29. package/dist/core/startup/startApp.js +3 -3
  30. package/dist/core/startup/startApp.js.map +1 -1
  31. package/dist/core/types.d.ts +1 -1
  32. package/dist/core/types.js.map +1 -1
  33. package/dist/index.cjs +15 -2
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.ts +6 -4
  36. package/dist/index.js +5 -4
  37. package/dist/index.js.map +1 -1
  38. package/dist/index.umd.js +11648 -32616
  39. package/dist/index.umd.js.map +1 -1
  40. package/dist/kernel/constants.cjs +67 -0
  41. package/dist/kernel/constants.cjs.map +1 -0
  42. package/dist/kernel/constants.d.ts +5 -0
  43. package/dist/kernel/constants.js +43 -0
  44. package/dist/kernel/constants.js.map +1 -0
  45. package/dist/kernel/index.cjs +40 -0
  46. package/dist/kernel/index.cjs.map +1 -0
  47. package/dist/kernel/index.d.ts +3 -0
  48. package/dist/kernel/index.js +4 -0
  49. package/dist/kernel/index.js.map +1 -0
  50. package/dist/kernel/kernel.cjs +296 -0
  51. package/dist/kernel/kernel.cjs.map +1 -0
  52. package/dist/kernel/kernel.d.ts +40 -0
  53. package/dist/kernel/kernel.js +272 -0
  54. package/dist/kernel/kernel.js.map +1 -0
  55. package/dist/kernel/manager/cacheManager.cjs +46 -0
  56. package/dist/kernel/manager/cacheManager.cjs.map +1 -0
  57. package/dist/kernel/manager/cacheManager.d.ts +6 -0
  58. package/dist/kernel/manager/cacheManager.js +36 -0
  59. package/dist/kernel/manager/cacheManager.js.map +1 -0
  60. package/dist/kernel/manager/i18nManager.cjs +68 -0
  61. package/dist/kernel/manager/i18nManager.cjs.map +1 -0
  62. package/dist/kernel/manager/i18nManager.d.ts +8 -0
  63. package/dist/kernel/manager/i18nManager.js +58 -0
  64. package/dist/kernel/manager/i18nManager.js.map +1 -0
  65. package/dist/kernel/manager/index.cjs +30 -0
  66. package/dist/kernel/manager/index.cjs.map +1 -0
  67. package/dist/kernel/manager/index.d.ts +4 -0
  68. package/dist/kernel/manager/index.js +6 -0
  69. package/dist/kernel/manager/index.js.map +1 -0
  70. package/dist/kernel/manager/loggerManager.cjs +70 -0
  71. package/dist/kernel/manager/loggerManager.cjs.map +1 -0
  72. package/dist/kernel/manager/loggerManager.d.ts +14 -0
  73. package/dist/kernel/manager/loggerManager.js +60 -0
  74. package/dist/kernel/manager/loggerManager.js.map +1 -0
  75. package/dist/kernel/manager/persistence.cjs +93 -0
  76. package/dist/kernel/manager/persistence.cjs.map +1 -0
  77. package/dist/kernel/manager/persistence.d.ts +3 -0
  78. package/dist/kernel/manager/persistence.js +75 -0
  79. package/dist/kernel/manager/persistence.js.map +1 -0
  80. package/dist/kernel/manager/themeManager.cjs +85 -0
  81. package/dist/kernel/manager/themeManager.cjs.map +1 -0
  82. package/dist/kernel/manager/themeManager.d.ts +9 -0
  83. package/dist/kernel/manager/themeManager.js +75 -0
  84. package/dist/kernel/manager/themeManager.js.map +1 -0
  85. package/dist/kernel/types.cjs +6 -0
  86. package/dist/kernel/types.cjs.map +1 -0
  87. package/dist/kernel/types.d.ts +72 -0
  88. package/dist/kernel/types.js +3 -0
  89. package/dist/kernel/types.js.map +1 -0
  90. package/dist/request/adapter.d.ts +1 -0
  91. package/dist/request/core.d.ts +1 -0
  92. package/dist/request/index.d.ts +1 -42
  93. package/dist/request/plugin/csrfPlugin.d.ts +2 -2
  94. package/dist/request/plugin/queue.d.ts +2 -2
  95. package/dist/request/plugin.d.ts +1 -0
  96. package/dist/request/runtime.d.ts +1 -0
  97. package/dist/request/types.d.ts +1 -394
  98. package/dist/request/utils.d.ts +1 -0
  99. package/dist/state.umd.js +1 -1
  100. package/dist/utils/csrf.cjs +13 -152
  101. package/dist/utils/csrf.cjs.map +1 -1
  102. package/dist/utils/csrf.d.ts +1 -72
  103. package/dist/utils/csrf.js +1 -142
  104. package/dist/utils/csrf.js.map +1 -1
  105. package/dist/utils/errors/ErrorCodes.cjs +6 -76
  106. package/dist/utils/errors/ErrorCodes.cjs.map +1 -1
  107. package/dist/utils/errors/ErrorCodes.d.ts +1 -45
  108. package/dist/utils/errors/ErrorCodes.js +1 -84
  109. package/dist/utils/errors/ErrorCodes.js.map +1 -1
  110. package/dist/utils/errors.cjs +15 -344
  111. package/dist/utils/errors.cjs.map +1 -1
  112. package/dist/utils/errors.d.ts +1 -183
  113. package/dist/utils/errors.js +1 -352
  114. package/dist/utils/errors.js.map +1 -1
  115. package/dist/utils/logger.cjs +5 -374
  116. package/dist/utils/logger.cjs.map +1 -1
  117. package/dist/utils/logger.d.ts +2 -189
  118. package/dist/utils/logger.js +1 -379
  119. package/dist/utils/logger.js.map +1 -1
  120. package/dist/utils/logger.types.cjs +3 -12
  121. package/dist/utils/logger.types.cjs.map +1 -1
  122. package/dist/utils/logger.types.d.ts +2 -57
  123. package/dist/utils/logger.types.js +1 -10
  124. package/dist/utils/logger.types.js.map +1 -1
  125. package/dist/utils/monitoring.cjs +11 -302
  126. package/dist/utils/monitoring.cjs.map +1 -1
  127. package/dist/utils/monitoring.d.ts +1 -163
  128. package/dist/utils/monitoring.js +1 -294
  129. package/dist/utils/monitoring.js.map +1 -1
  130. package/dist/utils/performance.cjs +5 -352
  131. package/dist/utils/performance.cjs.map +1 -1
  132. package/dist/utils/performance.d.ts +2 -246
  133. package/dist/utils/performance.js +1 -354
  134. package/dist/utils/performance.js.map +1 -1
  135. package/dist/utils/resourceLoader.cjs +5 -303
  136. package/dist/utils/resourceLoader.cjs.map +1 -1
  137. package/dist/utils/resourceLoader.d.ts +2 -130
  138. package/dist/utils/resourceLoader.js +1 -305
  139. package/dist/utils/resourceLoader.js.map +1 -1
  140. package/dist/utils/runtimeSecurity.cjs +2 -140
  141. package/dist/utils/runtimeSecurity.cjs.map +1 -1
  142. package/dist/utils/runtimeSecurity.d.ts +2 -104
  143. package/dist/utils/runtimeSecurity.js +1 -141
  144. package/dist/utils/runtimeSecurity.js.map +1 -1
  145. package/dist/utils/security.cjs +3 -314
  146. package/dist/utils/security.cjs.map +1 -1
  147. package/dist/utils/security.d.ts +2 -80
  148. package/dist/utils/security.js +1 -311
  149. package/dist/utils/security.js.map +1 -1
  150. package/dist/utils/traceId.cjs +10 -111
  151. package/dist/utils/traceId.cjs.map +1 -1
  152. package/dist/utils/traceId.d.ts +1 -63
  153. package/dist/utils/traceId.js +1 -116
  154. package/dist/utils/traceId.js.map +1 -1
  155. package/dist/utils/validation.cjs +3 -173
  156. package/dist/utils/validation.cjs.map +1 -1
  157. package/dist/utils/validation.d.ts +2 -110
  158. package/dist/utils/validation.js +1 -175
  159. package/dist/utils/validation.js.map +1 -1
  160. package/package.json +15 -24
  161. package/dist/lazy/index.cjs +0 -104
  162. package/dist/lazy/index.cjs.map +0 -1
  163. package/dist/lazy/index.d.ts +0 -19
  164. package/dist/lazy/index.js +0 -24
  165. package/dist/lazy/index.js.map +0 -1
  166. package/dist/request/adapter/RequestAdapter.cjs +0 -78
  167. package/dist/request/adapter/RequestAdapter.cjs.map +0 -1
  168. package/dist/request/adapter/axiosAdapter.cjs +0 -164
  169. package/dist/request/adapter/axiosAdapter.cjs.map +0 -1
  170. package/dist/request/adapter/fetchAdapter.cjs +0 -134
  171. package/dist/request/adapter/fetchAdapter.cjs.map +0 -1
  172. package/dist/request/adapter/index.cjs +0 -80
  173. package/dist/request/adapter/index.cjs.map +0 -1
  174. package/dist/request/adapter/kyAdapter.cjs +0 -191
  175. package/dist/request/adapter/kyAdapter.cjs.map +0 -1
  176. package/dist/request/adapter/undiciAdapter.cjs +0 -213
  177. package/dist/request/adapter/undiciAdapter.cjs.map +0 -1
  178. package/dist/request/core/RequestClient.cjs +0 -558
  179. package/dist/request/core/RequestClient.cjs.map +0 -1
  180. package/dist/request/core/index.cjs +0 -15
  181. package/dist/request/core/index.cjs.map +0 -1
  182. package/dist/request/index.cjs +0 -149
  183. package/dist/request/index.cjs.map +0 -1
  184. package/dist/request/plugin/RequestPlugin.cjs +0 -218
  185. package/dist/request/plugin/RequestPlugin.cjs.map +0 -1
  186. package/dist/request/plugin/cache.cjs +0 -269
  187. package/dist/request/plugin/cache.cjs.map +0 -1
  188. package/dist/request/plugin/csrfPlugin.cjs +0 -40
  189. package/dist/request/plugin/csrfPlugin.cjs.map +0 -1
  190. package/dist/request/plugin/index.cjs +0 -53
  191. package/dist/request/plugin/index.cjs.map +0 -1
  192. package/dist/request/plugin/monitoring.cjs +0 -216
  193. package/dist/request/plugin/monitoring.cjs.map +0 -1
  194. package/dist/request/plugin/queue.cjs +0 -140
  195. package/dist/request/plugin/queue.cjs.map +0 -1
  196. package/dist/request/plugin/retry.cjs +0 -98
  197. package/dist/request/plugin/retry.cjs.map +0 -1
  198. package/dist/request/plugin/validation.cjs +0 -121
  199. package/dist/request/plugin/validation.cjs.map +0 -1
  200. package/dist/request/runtime/RequestContext.cjs +0 -77
  201. package/dist/request/runtime/RequestContext.cjs.map +0 -1
  202. package/dist/request/runtime/index.cjs +0 -32
  203. package/dist/request/runtime/index.cjs.map +0 -1
  204. package/dist/request/types.cjs +0 -112
  205. package/dist/request/types.cjs.map +0 -1
  206. package/dist/request/utils/RequestQueueManager.cjs +0 -168
  207. package/dist/request/utils/RequestQueueManager.cjs.map +0 -1
  208. package/dist/request/utils/dependencyCheck.cjs +0 -237
  209. package/dist/request/utils/dependencyCheck.cjs.map +0 -1
  210. package/dist/request/utils/index.cjs +0 -30
  211. package/dist/request/utils/index.cjs.map +0 -1
  212. package/dist/request.umd.js +0 -5392
  213. package/dist/request.umd.js.map +0 -1
@@ -1,118 +1,3 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- /**
15
- * 日志追踪 ID 生成器
16
- * 用于生成唯一的请求追踪 ID,便于日志关联和问题排查
17
- */ /**
18
- * 追踪 ID 生成器
19
- */ export class TraceIdGenerator {
20
- /**
21
- * 获取单例实例
22
- */ static getInstance(prefix) {
23
- if (!TraceIdGenerator.instance) {
24
- TraceIdGenerator.instance = new TraceIdGenerator(prefix);
25
- }
26
- return TraceIdGenerator.instance;
27
- }
28
- /**
29
- * 生成追踪 ID
30
- */ generate() {
31
- const timestamp = Date.now();
32
- const random = Math.random().toString(36).substring(2, 9);
33
- const counter = (this.counter++).toString(36).padStart(4, '0');
34
- const parts = [
35
- timestamp.toString(36),
36
- random,
37
- counter
38
- ];
39
- if (this.prefix) {
40
- parts.unshift(this.prefix);
41
- }
42
- return parts.join('-');
43
- }
44
- /**
45
- * 从字符串解析追踪 ID(用于验证)
46
- */ static parse(traceId) {
47
- const parts = traceId.split('-');
48
- if (parts.length < 3) {
49
- return null;
50
- }
51
- try {
52
- const timestamp = parseInt(parts[parts.length - 3], 36);
53
- const random = parts[parts.length - 2];
54
- const counter = parseInt(parts[parts.length - 1], 36);
55
- return {
56
- prefix: parts.length > 3 ? parts.slice(0, -3).join('-') : undefined,
57
- timestamp,
58
- random,
59
- counter
60
- };
61
- } catch {
62
- return null;
63
- }
64
- }
65
- constructor(prefix = ''){
66
- _define_property(this, "counter", 0);
67
- _define_property(this, "prefix", void 0);
68
- this.prefix = prefix;
69
- }
70
- }
71
- _define_property(TraceIdGenerator, "instance", null);
72
- /**
73
- * 全局追踪 ID 生成器实例
74
- */ let globalTraceIdGenerator = null;
75
- /**
76
- * 初始化追踪 ID 生成器
77
- */ export function initTraceIdGenerator(prefix) {
78
- globalTraceIdGenerator = TraceIdGenerator.getInstance(prefix);
79
- return globalTraceIdGenerator;
80
- }
81
- /**
82
- * 获取全局追踪 ID 生成器
83
- */ export function getTraceIdGenerator() {
84
- if (!globalTraceIdGenerator) {
85
- globalTraceIdGenerator = TraceIdGenerator.getInstance();
86
- }
87
- return globalTraceIdGenerator;
88
- }
89
- /**
90
- * 生成追踪 ID
91
- */ export function generateTraceId() {
92
- return getTraceIdGenerator().generate();
93
- }
94
- /**
95
- * 解析追踪 ID
96
- */ export function parseTraceId(traceId) {
97
- return TraceIdGenerator.parse(traceId);
98
- }
99
- /**
100
- * 当前请求的追踪 ID(使用 AsyncLocalStorage 或全局变量)
101
- */ let currentTraceId = null;
102
- /**
103
- * 设置当前请求的追踪 ID
104
- */ export function setCurrentTraceId(traceId) {
105
- currentTraceId = traceId;
106
- }
107
- /**
108
- * 获取当前请求的追踪 ID
109
- */ export function getCurrentTraceId() {
110
- return currentTraceId;
111
- }
112
- /**
113
- * 清除当前请求的追踪 ID
114
- */ export function clearCurrentTraceId() {
115
- currentTraceId = null;
116
- }
1
+ export { TraceIdGenerator, initTraceIdGenerator, getTraceIdGenerator, generateTraceId, parseTraceId, setCurrentTraceId, getCurrentTraceId, clearCurrentTraceId } from "@vlian/logger";
117
2
 
118
3
  //# sourceMappingURL=traceId.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/traceId.ts"],"sourcesContent":["/**\n * 日志追踪 ID 生成器\n * 用于生成唯一的请求追踪 ID,便于日志关联和问题排查\n */\n\n/**\n * 追踪 ID 生成器\n */\nexport class TraceIdGenerator {\n private static instance: TraceIdGenerator | null = null;\n private counter: number = 0;\n private readonly prefix: string;\n\n private constructor(prefix: string = '') {\n this.prefix = prefix;\n }\n\n /**\n * 获取单例实例\n */\n static getInstance(prefix?: string): TraceIdGenerator {\n if (!TraceIdGenerator.instance) {\n TraceIdGenerator.instance = new TraceIdGenerator(prefix);\n }\n return TraceIdGenerator.instance;\n }\n\n /**\n * 生成追踪 ID\n */\n generate(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 9);\n const counter = (this.counter++).toString(36).padStart(4, '0');\n \n const parts = [timestamp.toString(36), random, counter];\n if (this.prefix) {\n parts.unshift(this.prefix);\n }\n \n return parts.join('-');\n }\n\n /**\n * 从字符串解析追踪 ID(用于验证)\n */\n static parse(traceId: string): {\n prefix?: string;\n timestamp: number;\n random: string;\n counter: number;\n } | null {\n const parts = traceId.split('-');\n if (parts.length < 3) {\n return null;\n }\n\n try {\n const timestamp = parseInt(parts[parts.length - 3], 36);\n const random = parts[parts.length - 2];\n const counter = parseInt(parts[parts.length - 1], 36);\n\n return {\n prefix: parts.length > 3 ? parts.slice(0, -3).join('-') : undefined,\n timestamp,\n random,\n counter,\n };\n } catch {\n return null;\n }\n }\n}\n\n/**\n * 全局追踪 ID 生成器实例\n */\nlet globalTraceIdGenerator: TraceIdGenerator | null = null;\n\n/**\n * 初始化追踪 ID 生成器\n */\nexport function initTraceIdGenerator(prefix?: string): TraceIdGenerator {\n globalTraceIdGenerator = TraceIdGenerator.getInstance(prefix);\n return globalTraceIdGenerator;\n}\n\n/**\n * 获取全局追踪 ID 生成器\n */\nexport function getTraceIdGenerator(): TraceIdGenerator {\n if (!globalTraceIdGenerator) {\n globalTraceIdGenerator = TraceIdGenerator.getInstance();\n }\n return globalTraceIdGenerator;\n}\n\n/**\n * 生成追踪 ID\n */\nexport function generateTraceId(): string {\n return getTraceIdGenerator().generate();\n}\n\n/**\n * 解析追踪 ID\n */\nexport function parseTraceId(traceId: string): {\n prefix?: string;\n timestamp: number;\n random: string;\n counter: number;\n} | null {\n return TraceIdGenerator.parse(traceId);\n}\n\n/**\n * 当前请求的追踪 ID(使用 AsyncLocalStorage 或全局变量)\n */\nlet currentTraceId: string | null = null;\n\n/**\n * 设置当前请求的追踪 ID\n */\nexport function setCurrentTraceId(traceId: string | null): void {\n currentTraceId = traceId;\n}\n\n/**\n * 获取当前请求的追踪 ID\n */\nexport function getCurrentTraceId(): string | null {\n return currentTraceId;\n}\n\n/**\n * 清除当前请求的追踪 ID\n */\nexport function clearCurrentTraceId(): void {\n currentTraceId = null;\n}\n"],"names":["TraceIdGenerator","getInstance","prefix","instance","generate","timestamp","Date","now","random","Math","toString","substring","counter","padStart","parts","unshift","join","parse","traceId","split","length","parseInt","slice","undefined","globalTraceIdGenerator","initTraceIdGenerator","getTraceIdGenerator","generateTraceId","parseTraceId","currentTraceId","setCurrentTraceId","getCurrentTraceId","clearCurrentTraceId"],"mappings":";;;;;;;;;;;;;AAAA;;;CAGC,GAED;;CAEC,GACD,OAAO,MAAMA;IASX;;GAEC,GACD,OAAOC,YAAYC,MAAe,EAAoB;QACpD,IAAI,CAACF,iBAAiBG,QAAQ,EAAE;YAC9BH,iBAAiBG,QAAQ,GAAG,IAAIH,iBAAiBE;QACnD;QACA,OAAOF,iBAAiBG,QAAQ;IAClC;IAEA;;GAEC,GACDC,WAAmB;QACjB,MAAMC,YAAYC,KAAKC,GAAG;QAC1B,MAAMC,SAASC,KAAKD,MAAM,GAAGE,QAAQ,CAAC,IAAIC,SAAS,CAAC,GAAG;QACvD,MAAMC,UAAU,AAAC,CAAA,IAAI,CAACA,OAAO,EAAC,EAAGF,QAAQ,CAAC,IAAIG,QAAQ,CAAC,GAAG;QAE1D,MAAMC,QAAQ;YAACT,UAAUK,QAAQ,CAAC;YAAKF;YAAQI;SAAQ;QACvD,IAAI,IAAI,CAACV,MAAM,EAAE;YACfY,MAAMC,OAAO,CAAC,IAAI,CAACb,MAAM;QAC3B;QAEA,OAAOY,MAAME,IAAI,CAAC;IACpB;IAEA;;GAEC,GACD,OAAOC,MAAMC,OAAe,EAKnB;QACP,MAAMJ,QAAQI,QAAQC,KAAK,CAAC;QAC5B,IAAIL,MAAMM,MAAM,GAAG,GAAG;YACpB,OAAO;QACT;QAEA,IAAI;YACF,MAAMf,YAAYgB,SAASP,KAAK,CAACA,MAAMM,MAAM,GAAG,EAAE,EAAE;YACpD,MAAMZ,SAASM,KAAK,CAACA,MAAMM,MAAM,GAAG,EAAE;YACtC,MAAMR,UAAUS,SAASP,KAAK,CAACA,MAAMM,MAAM,GAAG,EAAE,EAAE;YAElD,OAAO;gBACLlB,QAAQY,MAAMM,MAAM,GAAG,IAAIN,MAAMQ,KAAK,CAAC,GAAG,CAAC,GAAGN,IAAI,CAAC,OAAOO;gBAC1DlB;gBACAG;gBACAI;YACF;QACF,EAAE,OAAM;YACN,OAAO;QACT;IACF;IA1DA,YAAoBV,SAAiB,EAAE,CAAE;QAHzC,uBAAQU,WAAkB;QAC1B,uBAAiBV,UAAjB,KAAA;QAGE,IAAI,CAACA,MAAM,GAAGA;IAChB;AAyDF;AA/DE,iBADWF,kBACIG,YAAoC;AAiErD;;CAEC,GACD,IAAIqB,yBAAkD;AAEtD;;CAEC,GACD,OAAO,SAASC,qBAAqBvB,MAAe;IAClDsB,yBAAyBxB,iBAAiBC,WAAW,CAACC;IACtD,OAAOsB;AACT;AAEA;;CAEC,GACD,OAAO,SAASE;IACd,IAAI,CAACF,wBAAwB;QAC3BA,yBAAyBxB,iBAAiBC,WAAW;IACvD;IACA,OAAOuB;AACT;AAEA;;CAEC,GACD,OAAO,SAASG;IACd,OAAOD,sBAAsBtB,QAAQ;AACvC;AAEA;;CAEC,GACD,OAAO,SAASwB,aAAaV,OAAe;IAM1C,OAAOlB,iBAAiBiB,KAAK,CAACC;AAChC;AAEA;;CAEC,GACD,IAAIW,iBAAgC;AAEpC;;CAEC,GACD,OAAO,SAASC,kBAAkBZ,OAAsB;IACtDW,iBAAiBX;AACnB;AAEA;;CAEC,GACD,OAAO,SAASa;IACd,OAAOF;AACT;AAEA;;CAEC,GACD,OAAO,SAASG;IACdH,iBAAiB;AACnB"}
1
+ {"version":3,"sources":["../../src/utils/traceId.ts"],"sourcesContent":["export {\n TraceIdGenerator,\n initTraceIdGenerator,\n getTraceIdGenerator,\n generateTraceId,\n parseTraceId,\n setCurrentTraceId,\n getCurrentTraceId,\n clearCurrentTraceId,\n} from '@vlian/logger';\n"],"names":["TraceIdGenerator","initTraceIdGenerator","getTraceIdGenerator","generateTraceId","parseTraceId","setCurrentTraceId","getCurrentTraceId","clearCurrentTraceId"],"mappings":"AAAA,SACEA,gBAAgB,EAChBC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,YAAY,EACZC,iBAAiB,EACjBC,iBAAiB,EACjBC,mBAAmB,QACd,gBAAgB"}
@@ -10,182 +10,12 @@ function _export(target, all) {
10
10
  }
11
11
  _export(exports, {
12
12
  get Validator () {
13
- return Validator;
13
+ return _utils.Validator;
14
14
  },
15
15
  get commonSchemas () {
16
- return commonSchemas;
16
+ return _utils.commonSchemas;
17
17
  }
18
18
  });
19
- const _zod = require("zod");
20
- const _errors = require("./errors");
21
- let Validator = class Validator {
22
- /**
23
- * 验证字符串
24
- */ static validateString(value, rule, fieldName = '字段') {
25
- const errors = [];
26
- // 类型检查
27
- if (rule.required && (value === undefined || value === null || value === '')) {
28
- errors.push(`${fieldName} 是必填项`);
29
- return {
30
- valid: false,
31
- errors
32
- };
33
- }
34
- if (value === undefined || value === null || value === '') {
35
- return {
36
- valid: true,
37
- errors: []
38
- };
39
- }
40
- if (typeof value !== 'string') {
41
- errors.push(`${fieldName} 必须是字符串类型`);
42
- return {
43
- valid: false,
44
- errors
45
- };
46
- }
47
- // 长度检查
48
- if (rule.minLength !== undefined && value.length < rule.minLength) {
49
- errors.push(`${fieldName} 长度不能少于 ${rule.minLength} 个字符`);
50
- }
51
- if (rule.maxLength !== undefined && value.length > rule.maxLength) {
52
- errors.push(`${fieldName} 长度不能超过 ${rule.maxLength} 个字符`);
53
- }
54
- // 正则表达式检查
55
- if (rule.pattern && !rule.pattern.test(value)) {
56
- errors.push(`${fieldName} 格式不正确`);
57
- }
58
- return {
59
- valid: errors.length === 0,
60
- errors
61
- };
62
- }
63
- /**
64
- * 验证数字
65
- */ static validateNumber(value, rule, fieldName = '字段') {
66
- const errors = [];
67
- // 类型检查
68
- if (rule.required && (value === undefined || value === null)) {
69
- errors.push(`${fieldName} 是必填项`);
70
- return {
71
- valid: false,
72
- errors
73
- };
74
- }
75
- if (value === undefined || value === null) {
76
- return {
77
- valid: true,
78
- errors: []
79
- };
80
- }
81
- if (typeof value !== 'number' || isNaN(value)) {
82
- errors.push(`${fieldName} 必须是数字类型`);
83
- return {
84
- valid: false,
85
- errors
86
- };
87
- }
88
- // 范围检查
89
- if (rule.min !== undefined && value < rule.min) {
90
- errors.push(`${fieldName} 不能小于 ${rule.min}`);
91
- }
92
- if (rule.max !== undefined && value > rule.max) {
93
- errors.push(`${fieldName} 不能大于 ${rule.max}`);
94
- }
95
- return {
96
- valid: errors.length === 0,
97
- errors
98
- };
99
- }
100
- /**
101
- * 验证对象(使用 Zod Schema)
102
- */ static validateObject(schema, data) {
103
- try {
104
- const result = schema.safeParse(data);
105
- if (result.success) {
106
- return {
107
- valid: true,
108
- data: result.data,
109
- errors: []
110
- };
111
- } else {
112
- return {
113
- valid: false,
114
- errors: result.error.issues.map((err)=>`${err.path.join('.')}: ${err.message}`)
115
- };
116
- }
117
- } catch (error) {
118
- return {
119
- valid: false,
120
- errors: [
121
- error instanceof Error ? error.message : '验证失败'
122
- ]
123
- };
124
- }
125
- }
126
- /**
127
- * 验证并抛出错误
128
- */ static validateOrThrow(schema, data, context) {
129
- const result = this.validateObject(schema, data);
130
- if (!result.valid) {
131
- throw new _errors.ValidationError(result.errors.join('; '), context);
132
- }
133
- return result.data;
134
- }
135
- /**
136
- * 验证 URL
137
- */ static validateUrl(value, fieldName = 'URL') {
138
- const errors = [];
139
- if (value === undefined || value === null || value === '') {
140
- errors.push(`${fieldName} 是必填项`);
141
- return {
142
- valid: false,
143
- errors
144
- };
145
- }
146
- if (typeof value !== 'string') {
147
- errors.push(`${fieldName} 必须是字符串类型`);
148
- return {
149
- valid: false,
150
- errors
151
- };
152
- }
153
- try {
154
- new URL(value);
155
- } catch {
156
- errors.push(`${fieldName} 格式不正确`);
157
- }
158
- return {
159
- valid: errors.length === 0,
160
- errors
161
- };
162
- }
163
- /**
164
- * 验证邮箱
165
- */ static validateEmail(value, fieldName = '邮箱') {
166
- const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
167
- return this.validateString(value, {
168
- required: true,
169
- pattern: emailPattern
170
- }, fieldName);
171
- }
172
- };
173
- const commonSchemas = {
174
- /**
175
- * 非空字符串
176
- */ nonEmptyString: _zod.z.string().min(1, '不能为空'),
177
- /**
178
- * 正整数
179
- */ positiveInteger: _zod.z.number().int().positive(),
180
- /**
181
- * 非负整数
182
- */ nonNegativeInteger: _zod.z.number().int().nonnegative(),
183
- /**
184
- * URL
185
- */ url: _zod.z.string().url('URL 格式不正确'),
186
- /**
187
- * 邮箱
188
- */ email: _zod.z.string().email('邮箱格式不正确')
189
- };
19
+ const _utils = require("@vlian/utils");
190
20
 
191
21
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/validation.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ValidationError } from './errors';\n\n/**\n * 字符串验证规则\n */\nexport interface StringValidationRule {\n /**\n * 最小长度\n */\n minLength?: number;\n /**\n * 最大长度\n */\n maxLength?: number;\n /**\n * 正则表达式\n */\n pattern?: RegExp;\n /**\n * 是否必填\n */\n required?: boolean;\n}\n\n/**\n * 数字验证规则\n */\nexport interface NumberValidationRule {\n /**\n * 最小值\n */\n min?: number;\n /**\n * 最大值\n */\n max?: number;\n /**\n * 是否必填\n */\n required?: boolean;\n}\n\n/**\n * 验证结果\n */\nexport interface ValidationResult {\n /**\n * 是否有效\n */\n valid: boolean;\n /**\n * 错误信息\n */\n errors: string[];\n}\n\n/**\n * 验证工具类\n */\nexport class Validator {\n /**\n * 验证字符串\n */\n static validateString(\n value: unknown,\n rule: StringValidationRule,\n fieldName = '字段'\n ): ValidationResult {\n const errors: string[] = [];\n\n // 类型检查\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (value === undefined || value === null || value === '') {\n return { valid: true, errors: [] };\n }\n\n if (typeof value !== 'string') {\n errors.push(`${fieldName} 必须是字符串类型`);\n return { valid: false, errors };\n }\n\n // 长度检查\n if (rule.minLength !== undefined && value.length < rule.minLength) {\n errors.push(`${fieldName} 长度不能少于 ${rule.minLength} 个字符`);\n }\n\n if (rule.maxLength !== undefined && value.length > rule.maxLength) {\n errors.push(`${fieldName} 长度不能超过 ${rule.maxLength} 个字符`);\n }\n\n // 正则表达式检查\n if (rule.pattern && !rule.pattern.test(value)) {\n errors.push(`${fieldName} 格式不正确`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证数字\n */\n static validateNumber(\n value: unknown,\n rule: NumberValidationRule,\n fieldName = '字段'\n ): ValidationResult {\n const errors: string[] = [];\n\n // 类型检查\n if (rule.required && (value === undefined || value === null)) {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (value === undefined || value === null) {\n return { valid: true, errors: [] };\n }\n\n if (typeof value !== 'number' || isNaN(value)) {\n errors.push(`${fieldName} 必须是数字类型`);\n return { valid: false, errors };\n }\n\n // 范围检查\n if (rule.min !== undefined && value < rule.min) {\n errors.push(`${fieldName} 不能小于 ${rule.min}`);\n }\n\n if (rule.max !== undefined && value > rule.max) {\n errors.push(`${fieldName} 不能大于 ${rule.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证对象(使用 Zod Schema)\n */\n static validateObject<T>(schema: z.ZodSchema<T>, data: unknown): {\n valid: boolean;\n data?: T;\n errors: string[];\n } {\n try {\n const result = schema.safeParse(data);\n if (result.success) {\n return {\n valid: true,\n data: result.data,\n errors: [],\n };\n } else {\n return {\n valid: false,\n errors: result.error.issues.map((err) => `${err.path.join('.')}: ${err.message}`),\n };\n }\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : '验证失败'],\n };\n }\n }\n\n /**\n * 验证并抛出错误\n */\n static validateOrThrow<T>(schema: z.ZodSchema<T>, data: unknown, context?: Record<string, unknown>): T {\n const result = this.validateObject(schema, data);\n if (!result.valid) {\n throw new ValidationError(result.errors.join('; '), context);\n }\n return result.data!;\n }\n\n /**\n * 验证 URL\n */\n static validateUrl(value: unknown, fieldName = 'URL'): ValidationResult {\n const errors: string[] = [];\n\n if (value === undefined || value === null || value === '') {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (typeof value !== 'string') {\n errors.push(`${fieldName} 必须是字符串类型`);\n return { valid: false, errors };\n }\n\n try {\n new URL(value);\n } catch {\n errors.push(`${fieldName} 格式不正确`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证邮箱\n */\n static validateEmail(value: unknown, fieldName = '邮箱'): ValidationResult {\n const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return this.validateString(value, {\n required: true,\n pattern: emailPattern,\n }, fieldName);\n }\n}\n\n/**\n * 常用验证 Schema\n */\nexport const commonSchemas = {\n /**\n * 非空字符串\n */\n nonEmptyString: z.string().min(1, '不能为空'),\n\n /**\n * 正整数\n */\n positiveInteger: z.number().int().positive(),\n\n /**\n * 非负整数\n */\n nonNegativeInteger: z.number().int().nonnegative(),\n\n /**\n * URL\n */\n url: z.string().url('URL 格式不正确'),\n\n /**\n * 邮箱\n */\n email: z.string().email('邮箱格式不正确'),\n};\n"],"names":["Validator","commonSchemas","validateString","value","rule","fieldName","errors","required","undefined","push","valid","minLength","length","maxLength","pattern","test","validateNumber","isNaN","min","max","validateObject","schema","data","result","safeParse","success","error","issues","map","err","path","join","message","Error","validateOrThrow","context","ValidationError","validateUrl","URL","validateEmail","emailPattern","nonEmptyString","z","string","positiveInteger","number","int","positive","nonNegativeInteger","nonnegative","url","email"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/validation.ts"],"sourcesContent":["export { Validator, commonSchemas } from '@vlian/utils';\nexport type { StringValidationRule, NumberValidationRule, ValidationResult } from '@vlian/utils';\n"],"names":["Validator","commonSchemas"],"mappings":";;;;;;;;;;;QAASA;eAAAA,gBAAS;;QAAEC;eAAAA,oBAAa;;;uBAAQ"}
@@ -1,110 +1,2 @@
1
- import { z } from 'zod';
2
- /**
3
- * 字符串验证规则
4
- */
5
- export interface StringValidationRule {
6
- /**
7
- * 最小长度
8
- */
9
- minLength?: number;
10
- /**
11
- * 最大长度
12
- */
13
- maxLength?: number;
14
- /**
15
- * 正则表达式
16
- */
17
- pattern?: RegExp;
18
- /**
19
- * 是否必填
20
- */
21
- required?: boolean;
22
- }
23
- /**
24
- * 数字验证规则
25
- */
26
- export interface NumberValidationRule {
27
- /**
28
- * 最小值
29
- */
30
- min?: number;
31
- /**
32
- * 最大值
33
- */
34
- max?: number;
35
- /**
36
- * 是否必填
37
- */
38
- required?: boolean;
39
- }
40
- /**
41
- * 验证结果
42
- */
43
- export interface ValidationResult {
44
- /**
45
- * 是否有效
46
- */
47
- valid: boolean;
48
- /**
49
- * 错误信息
50
- */
51
- errors: string[];
52
- }
53
- /**
54
- * 验证工具类
55
- */
56
- export declare class Validator {
57
- /**
58
- * 验证字符串
59
- */
60
- static validateString(value: unknown, rule: StringValidationRule, fieldName?: string): ValidationResult;
61
- /**
62
- * 验证数字
63
- */
64
- static validateNumber(value: unknown, rule: NumberValidationRule, fieldName?: string): ValidationResult;
65
- /**
66
- * 验证对象(使用 Zod Schema)
67
- */
68
- static validateObject<T>(schema: z.ZodSchema<T>, data: unknown): {
69
- valid: boolean;
70
- data?: T;
71
- errors: string[];
72
- };
73
- /**
74
- * 验证并抛出错误
75
- */
76
- static validateOrThrow<T>(schema: z.ZodSchema<T>, data: unknown, context?: Record<string, unknown>): T;
77
- /**
78
- * 验证 URL
79
- */
80
- static validateUrl(value: unknown, fieldName?: string): ValidationResult;
81
- /**
82
- * 验证邮箱
83
- */
84
- static validateEmail(value: unknown, fieldName?: string): ValidationResult;
85
- }
86
- /**
87
- * 常用验证 Schema
88
- */
89
- export declare const commonSchemas: {
90
- /**
91
- * 非空字符串
92
- */
93
- nonEmptyString: z.ZodString;
94
- /**
95
- * 正整数
96
- */
97
- positiveInteger: z.ZodNumber;
98
- /**
99
- * 非负整数
100
- */
101
- nonNegativeInteger: z.ZodNumber;
102
- /**
103
- * URL
104
- */
105
- url: z.ZodString;
106
- /**
107
- * 邮箱
108
- */
109
- email: z.ZodString;
110
- };
1
+ export { Validator, commonSchemas } from '@vlian/utils';
2
+ export type { StringValidationRule, NumberValidationRule, ValidationResult } from '@vlian/utils';
@@ -1,177 +1,3 @@
1
- import { z } from "zod";
2
- import { ValidationError } from "./errors";
3
- /**
4
- * 验证工具类
5
- */ export class Validator {
6
- /**
7
- * 验证字符串
8
- */ static validateString(value, rule, fieldName = '字段') {
9
- const errors = [];
10
- // 类型检查
11
- if (rule.required && (value === undefined || value === null || value === '')) {
12
- errors.push(`${fieldName} 是必填项`);
13
- return {
14
- valid: false,
15
- errors
16
- };
17
- }
18
- if (value === undefined || value === null || value === '') {
19
- return {
20
- valid: true,
21
- errors: []
22
- };
23
- }
24
- if (typeof value !== 'string') {
25
- errors.push(`${fieldName} 必须是字符串类型`);
26
- return {
27
- valid: false,
28
- errors
29
- };
30
- }
31
- // 长度检查
32
- if (rule.minLength !== undefined && value.length < rule.minLength) {
33
- errors.push(`${fieldName} 长度不能少于 ${rule.minLength} 个字符`);
34
- }
35
- if (rule.maxLength !== undefined && value.length > rule.maxLength) {
36
- errors.push(`${fieldName} 长度不能超过 ${rule.maxLength} 个字符`);
37
- }
38
- // 正则表达式检查
39
- if (rule.pattern && !rule.pattern.test(value)) {
40
- errors.push(`${fieldName} 格式不正确`);
41
- }
42
- return {
43
- valid: errors.length === 0,
44
- errors
45
- };
46
- }
47
- /**
48
- * 验证数字
49
- */ static validateNumber(value, rule, fieldName = '字段') {
50
- const errors = [];
51
- // 类型检查
52
- if (rule.required && (value === undefined || value === null)) {
53
- errors.push(`${fieldName} 是必填项`);
54
- return {
55
- valid: false,
56
- errors
57
- };
58
- }
59
- if (value === undefined || value === null) {
60
- return {
61
- valid: true,
62
- errors: []
63
- };
64
- }
65
- if (typeof value !== 'number' || isNaN(value)) {
66
- errors.push(`${fieldName} 必须是数字类型`);
67
- return {
68
- valid: false,
69
- errors
70
- };
71
- }
72
- // 范围检查
73
- if (rule.min !== undefined && value < rule.min) {
74
- errors.push(`${fieldName} 不能小于 ${rule.min}`);
75
- }
76
- if (rule.max !== undefined && value > rule.max) {
77
- errors.push(`${fieldName} 不能大于 ${rule.max}`);
78
- }
79
- return {
80
- valid: errors.length === 0,
81
- errors
82
- };
83
- }
84
- /**
85
- * 验证对象(使用 Zod Schema)
86
- */ static validateObject(schema, data) {
87
- try {
88
- const result = schema.safeParse(data);
89
- if (result.success) {
90
- return {
91
- valid: true,
92
- data: result.data,
93
- errors: []
94
- };
95
- } else {
96
- return {
97
- valid: false,
98
- errors: result.error.issues.map((err)=>`${err.path.join('.')}: ${err.message}`)
99
- };
100
- }
101
- } catch (error) {
102
- return {
103
- valid: false,
104
- errors: [
105
- error instanceof Error ? error.message : '验证失败'
106
- ]
107
- };
108
- }
109
- }
110
- /**
111
- * 验证并抛出错误
112
- */ static validateOrThrow(schema, data, context) {
113
- const result = this.validateObject(schema, data);
114
- if (!result.valid) {
115
- throw new ValidationError(result.errors.join('; '), context);
116
- }
117
- return result.data;
118
- }
119
- /**
120
- * 验证 URL
121
- */ static validateUrl(value, fieldName = 'URL') {
122
- const errors = [];
123
- if (value === undefined || value === null || value === '') {
124
- errors.push(`${fieldName} 是必填项`);
125
- return {
126
- valid: false,
127
- errors
128
- };
129
- }
130
- if (typeof value !== 'string') {
131
- errors.push(`${fieldName} 必须是字符串类型`);
132
- return {
133
- valid: false,
134
- errors
135
- };
136
- }
137
- try {
138
- new URL(value);
139
- } catch {
140
- errors.push(`${fieldName} 格式不正确`);
141
- }
142
- return {
143
- valid: errors.length === 0,
144
- errors
145
- };
146
- }
147
- /**
148
- * 验证邮箱
149
- */ static validateEmail(value, fieldName = '邮箱') {
150
- const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
151
- return this.validateString(value, {
152
- required: true,
153
- pattern: emailPattern
154
- }, fieldName);
155
- }
156
- }
157
- /**
158
- * 常用验证 Schema
159
- */ export const commonSchemas = {
160
- /**
161
- * 非空字符串
162
- */ nonEmptyString: z.string().min(1, '不能为空'),
163
- /**
164
- * 正整数
165
- */ positiveInteger: z.number().int().positive(),
166
- /**
167
- * 非负整数
168
- */ nonNegativeInteger: z.number().int().nonnegative(),
169
- /**
170
- * URL
171
- */ url: z.string().url('URL 格式不正确'),
172
- /**
173
- * 邮箱
174
- */ email: z.string().email('邮箱格式不正确')
175
- };
1
+ export { Validator, commonSchemas } from "@vlian/utils";
176
2
 
177
3
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/validation.ts"],"sourcesContent":["import { z } from 'zod';\nimport { ValidationError } from './errors';\n\n/**\n * 字符串验证规则\n */\nexport interface StringValidationRule {\n /**\n * 最小长度\n */\n minLength?: number;\n /**\n * 最大长度\n */\n maxLength?: number;\n /**\n * 正则表达式\n */\n pattern?: RegExp;\n /**\n * 是否必填\n */\n required?: boolean;\n}\n\n/**\n * 数字验证规则\n */\nexport interface NumberValidationRule {\n /**\n * 最小值\n */\n min?: number;\n /**\n * 最大值\n */\n max?: number;\n /**\n * 是否必填\n */\n required?: boolean;\n}\n\n/**\n * 验证结果\n */\nexport interface ValidationResult {\n /**\n * 是否有效\n */\n valid: boolean;\n /**\n * 错误信息\n */\n errors: string[];\n}\n\n/**\n * 验证工具类\n */\nexport class Validator {\n /**\n * 验证字符串\n */\n static validateString(\n value: unknown,\n rule: StringValidationRule,\n fieldName = '字段'\n ): ValidationResult {\n const errors: string[] = [];\n\n // 类型检查\n if (rule.required && (value === undefined || value === null || value === '')) {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (value === undefined || value === null || value === '') {\n return { valid: true, errors: [] };\n }\n\n if (typeof value !== 'string') {\n errors.push(`${fieldName} 必须是字符串类型`);\n return { valid: false, errors };\n }\n\n // 长度检查\n if (rule.minLength !== undefined && value.length < rule.minLength) {\n errors.push(`${fieldName} 长度不能少于 ${rule.minLength} 个字符`);\n }\n\n if (rule.maxLength !== undefined && value.length > rule.maxLength) {\n errors.push(`${fieldName} 长度不能超过 ${rule.maxLength} 个字符`);\n }\n\n // 正则表达式检查\n if (rule.pattern && !rule.pattern.test(value)) {\n errors.push(`${fieldName} 格式不正确`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证数字\n */\n static validateNumber(\n value: unknown,\n rule: NumberValidationRule,\n fieldName = '字段'\n ): ValidationResult {\n const errors: string[] = [];\n\n // 类型检查\n if (rule.required && (value === undefined || value === null)) {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (value === undefined || value === null) {\n return { valid: true, errors: [] };\n }\n\n if (typeof value !== 'number' || isNaN(value)) {\n errors.push(`${fieldName} 必须是数字类型`);\n return { valid: false, errors };\n }\n\n // 范围检查\n if (rule.min !== undefined && value < rule.min) {\n errors.push(`${fieldName} 不能小于 ${rule.min}`);\n }\n\n if (rule.max !== undefined && value > rule.max) {\n errors.push(`${fieldName} 不能大于 ${rule.max}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证对象(使用 Zod Schema)\n */\n static validateObject<T>(schema: z.ZodSchema<T>, data: unknown): {\n valid: boolean;\n data?: T;\n errors: string[];\n } {\n try {\n const result = schema.safeParse(data);\n if (result.success) {\n return {\n valid: true,\n data: result.data,\n errors: [],\n };\n } else {\n return {\n valid: false,\n errors: result.error.issues.map((err) => `${err.path.join('.')}: ${err.message}`),\n };\n }\n } catch (error) {\n return {\n valid: false,\n errors: [error instanceof Error ? error.message : '验证失败'],\n };\n }\n }\n\n /**\n * 验证并抛出错误\n */\n static validateOrThrow<T>(schema: z.ZodSchema<T>, data: unknown, context?: Record<string, unknown>): T {\n const result = this.validateObject(schema, data);\n if (!result.valid) {\n throw new ValidationError(result.errors.join('; '), context);\n }\n return result.data!;\n }\n\n /**\n * 验证 URL\n */\n static validateUrl(value: unknown, fieldName = 'URL'): ValidationResult {\n const errors: string[] = [];\n\n if (value === undefined || value === null || value === '') {\n errors.push(`${fieldName} 是必填项`);\n return { valid: false, errors };\n }\n\n if (typeof value !== 'string') {\n errors.push(`${fieldName} 必须是字符串类型`);\n return { valid: false, errors };\n }\n\n try {\n new URL(value);\n } catch {\n errors.push(`${fieldName} 格式不正确`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 验证邮箱\n */\n static validateEmail(value: unknown, fieldName = '邮箱'): ValidationResult {\n const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return this.validateString(value, {\n required: true,\n pattern: emailPattern,\n }, fieldName);\n }\n}\n\n/**\n * 常用验证 Schema\n */\nexport const commonSchemas = {\n /**\n * 非空字符串\n */\n nonEmptyString: z.string().min(1, '不能为空'),\n\n /**\n * 正整数\n */\n positiveInteger: z.number().int().positive(),\n\n /**\n * 非负整数\n */\n nonNegativeInteger: z.number().int().nonnegative(),\n\n /**\n * URL\n */\n url: z.string().url('URL 格式不正确'),\n\n /**\n * 邮箱\n */\n email: z.string().email('邮箱格式不正确'),\n};\n"],"names":["z","ValidationError","Validator","validateString","value","rule","fieldName","errors","required","undefined","push","valid","minLength","length","maxLength","pattern","test","validateNumber","isNaN","min","max","validateObject","schema","data","result","safeParse","success","error","issues","map","err","path","join","message","Error","validateOrThrow","context","validateUrl","URL","validateEmail","emailPattern","commonSchemas","nonEmptyString","string","positiveInteger","number","int","positive","nonNegativeInteger","nonnegative","url","email"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/validation.ts"],"sourcesContent":["export { Validator, commonSchemas } from '@vlian/utils';\nexport type { StringValidationRule, NumberValidationRule, ValidationResult } from '@vlian/utils';\n"],"names":["Validator","commonSchemas"],"mappings":"AAAA,SAASA,SAAS,EAAEC,aAAa,QAAQ,eAAe"}