@wener/common 2.0.5 → 2.0.6

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 (206) hide show
  1. package/lib/ai/qwen3vl/index.js +1 -1
  2. package/lib/ai/qwen3vl/utils.js +15 -15
  3. package/lib/ai/vision/DocLayoutElementTypeSchema.js +22 -22
  4. package/lib/ai/vision/ImageAnnotationSchema.js +63 -47
  5. package/lib/ai/vision/index.js +2 -2
  6. package/lib/ai/vision/resolveImageAnnotation.js +81 -95
  7. package/lib/cn/ChineseResidentIdNo.js +55 -41
  8. package/lib/cn/ChineseResidentIdNo.mod.js +6 -1
  9. package/lib/cn/ChineseResidentIdNo.test.js +22 -21
  10. package/lib/cn/DivisionCode.js +220 -235
  11. package/lib/cn/DivisionCode.mod.js +6 -1
  12. package/lib/cn/DivisionCode.test.js +92 -121
  13. package/lib/cn/Mod11.js +18 -37
  14. package/lib/cn/Mod31.js +23 -41
  15. package/lib/cn/UnifiedSocialCreditCode.js +143 -137
  16. package/lib/cn/UnifiedSocialCreditCode.mod.js +6 -1
  17. package/lib/cn/UnifiedSocialCreditCode.test.js +21 -15
  18. package/lib/cn/formatChineseAmount.js +46 -71
  19. package/lib/cn/index.js +6 -6
  20. package/lib/cn/mod.js +5 -3
  21. package/lib/cn/parseChineseNumber.js +81 -85
  22. package/lib/cn/parseChineseNumber.test.js +183 -261
  23. package/lib/cn/pinyin/cartesianProduct.js +19 -19
  24. package/lib/cn/pinyin/cartesianProduct.test.js +78 -178
  25. package/lib/cn/pinyin/loader.js +13 -11
  26. package/lib/cn/pinyin/preload.js +2 -1
  27. package/lib/cn/pinyin/toPinyin.test.js +149 -161
  28. package/lib/cn/pinyin/toPinyinPure.js +28 -23
  29. package/lib/cn/pinyin/transform.js +11 -11
  30. package/lib/cn/types.d.js +2 -2
  31. package/lib/consola/createStandardConsolaReporter.js +14 -15
  32. package/lib/consola/formatLogObject.js +149 -133
  33. package/lib/consola/formatLogObject.test.js +167 -178
  34. package/lib/consola/index.js +2 -2
  35. package/lib/data/formatSort.js +14 -12
  36. package/lib/data/formatSort.test.js +33 -33
  37. package/lib/data/index.js +3 -3
  38. package/lib/data/maybeNumber.js +23 -23
  39. package/lib/data/parseSort.js +75 -68
  40. package/lib/data/parseSort.test.js +196 -187
  41. package/lib/data/resolvePagination.js +38 -39
  42. package/lib/data/resolvePagination.test.js +228 -218
  43. package/lib/data/types.d.js +2 -2
  44. package/lib/dayjs/dayjs.js +20 -20
  45. package/lib/dayjs/formatDuration.js +56 -56
  46. package/lib/dayjs/formatDuration.test.js +63 -77
  47. package/lib/dayjs/index.js +4 -4
  48. package/lib/dayjs/parseDuration.js +21 -26
  49. package/lib/dayjs/parseRelativeTime.js +65 -66
  50. package/lib/dayjs/parseRelativeTime.test.js +227 -243
  51. package/lib/dayjs/resolveRelativeTime.js +73 -72
  52. package/lib/dayjs/resolveRelativeTime.test.js +296 -307
  53. package/lib/decimal/index.js +1 -1
  54. package/lib/decimal/parseDecimal.js +12 -12
  55. package/lib/drain3/Drain.js +303 -338
  56. package/lib/drain3/LogCluster.js +25 -25
  57. package/lib/drain3/Node.js +24 -24
  58. package/lib/drain3/TemplateMiner.js +197 -196
  59. package/lib/drain3/index.js +5 -5
  60. package/lib/drain3/persistence/FilePersistence.js +19 -19
  61. package/lib/drain3/persistence/MemoryPersistence.js +8 -8
  62. package/lib/drain3/persistence/PersistenceHandler.js +2 -2
  63. package/lib/drain3/types.js +2 -2
  64. package/lib/emittery/emitter.js +7 -7
  65. package/lib/emittery/index.js +1 -1
  66. package/lib/foundation/schema/SexType.js +15 -12
  67. package/lib/foundation/schema/index.js +1 -1
  68. package/lib/foundation/schema/parseSexType.js +15 -16
  69. package/lib/foundation/schema/types.js +8 -6
  70. package/lib/fs/FileSystemError.js +18 -18
  71. package/lib/fs/IFileSystem.d.js +2 -2
  72. package/lib/fs/MemoryFileSystem.test.js +172 -181
  73. package/lib/fs/createBrowserFileSystem.js +222 -235
  74. package/lib/fs/createMemoryFileSystem.js +472 -510
  75. package/lib/fs/createSandboxFileSystem.js +102 -101
  76. package/lib/fs/createWebDavFileSystem.js +162 -149
  77. package/lib/fs/createWebFileSystem.js +197 -220
  78. package/lib/fs/findMimeType.js +14 -14
  79. package/lib/fs/index.js +7 -7
  80. package/lib/fs/minio/createMinioFileSystem.js +959 -956
  81. package/lib/fs/minio/index.js +1 -1
  82. package/lib/fs/orpc/FileSystemContract.js +57 -57
  83. package/lib/fs/orpc/createContractClientFileSystem.js +88 -88
  84. package/lib/fs/orpc/index.js +2 -2
  85. package/lib/fs/orpc/server/createFileSystemContractImpl.js +62 -60
  86. package/lib/fs/orpc/server/index.js +1 -1
  87. package/lib/fs/s3/createS3MiniFileSystem.js +756 -737
  88. package/lib/fs/s3/index.js +1 -1
  89. package/lib/fs/s3/s3mini.test.js +524 -553
  90. package/lib/fs/scandir.js +56 -56
  91. package/lib/fs/server/createDatabaseFileSystem.js +834 -741
  92. package/lib/fs/server/createNodeFileSystem.js +407 -405
  93. package/lib/fs/server/dbfs.test.js +201 -214
  94. package/lib/fs/server/index.js +1 -1
  95. package/lib/fs/server/loadTestDatabase.js +40 -43
  96. package/lib/fs/tests/runFileSystemTest.js +352 -316
  97. package/lib/fs/types.js +17 -20
  98. package/lib/fs/utils/getFileUrl.js +24 -30
  99. package/lib/fs/utils.js +17 -17
  100. package/lib/fs/webdav/index.js +1 -1
  101. package/lib/index.js +2 -2
  102. package/lib/jsonschema/JsonSchema.js +216 -155
  103. package/lib/jsonschema/JsonSchema.test.js +123 -124
  104. package/lib/jsonschema/forEachJsonSchema.js +41 -41
  105. package/lib/jsonschema/index.js +2 -2
  106. package/lib/jsonschema/types.d.js +2 -2
  107. package/lib/meta/defineFileType.js +32 -38
  108. package/lib/meta/defineInit.js +39 -35
  109. package/lib/meta/defineMetadata.js +37 -34
  110. package/lib/meta/defineMetadata.test.js +13 -12
  111. package/lib/meta/index.js +3 -3
  112. package/lib/orpc/createOpenApiContractClient.js +26 -24
  113. package/lib/orpc/createRpcContractClient.js +37 -31
  114. package/lib/orpc/index.js +2 -2
  115. package/lib/orpc/resolveLinkPlugins.js +25 -25
  116. package/lib/password/PHC.js +187 -189
  117. package/lib/password/PHC.test.js +517 -535
  118. package/lib/password/Password.js +85 -80
  119. package/lib/password/Password.test.js +330 -364
  120. package/lib/password/createArgon2PasswordAlgorithm.js +50 -51
  121. package/lib/password/createBase64PasswordAlgorithm.js +11 -11
  122. package/lib/password/createBcryptPasswordAlgorithm.js +20 -18
  123. package/lib/password/createPBKDF2PasswordAlgorithm.js +65 -52
  124. package/lib/password/createScryptPasswordAlgorithm.js +74 -63
  125. package/lib/password/index.js +5 -5
  126. package/lib/password/server/index.js +1 -1
  127. package/lib/resource/Identifiable.js +2 -2
  128. package/lib/resource/ListQuery.js +42 -42
  129. package/lib/resource/getTitleOfResource.js +5 -5
  130. package/lib/resource/index.js +2 -2
  131. package/lib/resource/schema/AnyResourceSchema.js +91 -89
  132. package/lib/resource/schema/BaseResourceSchema.js +26 -26
  133. package/lib/resource/schema/ResourceActionType.js +117 -115
  134. package/lib/resource/schema/ResourceStatus.js +94 -92
  135. package/lib/resource/schema/ResourceType.js +25 -23
  136. package/lib/resource/schema/index.js +5 -5
  137. package/lib/resource/schema/types.js +86 -55
  138. package/lib/resource/schema/types.test.js +16 -13
  139. package/lib/s3/formatS3Url.js +60 -60
  140. package/lib/s3/formatS3Url.test.js +238 -261
  141. package/lib/s3/index.js +2 -2
  142. package/lib/s3/parseS3Url.js +61 -60
  143. package/lib/s3/parseS3Url.test.js +270 -269
  144. package/lib/schema/SchemaRegistry.js +41 -42
  145. package/lib/schema/SchemaRegistry.mod.js +1 -1
  146. package/lib/schema/TypeSchema.d.js +2 -2
  147. package/lib/schema/createSchemaData.js +113 -67
  148. package/lib/schema/findJsonSchemaByPath.js +28 -23
  149. package/lib/schema/formatZodError.js +112 -131
  150. package/lib/schema/formatZodError.test.js +192 -195
  151. package/lib/schema/getSchemaCache.js +7 -7
  152. package/lib/schema/getSchemaOptions.js +17 -16
  153. package/lib/schema/index.js +6 -6
  154. package/lib/schema/toJsonSchema.js +195 -189
  155. package/lib/schema/toJsonSchema.test.js +34 -26
  156. package/lib/schema/validate.js +105 -96
  157. package/lib/tools/generateSchema.js +40 -40
  158. package/lib/tools/renderJsonSchemaToMarkdownDoc.js +74 -74
  159. package/lib/utils/buildBaseUrl.js +8 -8
  160. package/lib/utils/buildRedactorFormSchema.js +54 -53
  161. package/lib/utils/getEstimateProcessTime.js +24 -19
  162. package/lib/utils/index.js +3 -3
  163. package/lib/utils/resolveFeatureOptions.js +9 -9
  164. package/package.json +14 -14
  165. package/src/ai/vision/index.ts +2 -2
  166. package/src/cn/index.ts +1 -2
  167. package/src/consola/index.ts +1 -1
  168. package/src/data/index.ts +3 -4
  169. package/src/data/resolvePagination.ts +2 -2
  170. package/src/dayjs/formatDuration.ts +8 -9
  171. package/src/dayjs/index.ts +1 -1
  172. package/src/dayjs/parseRelativeTime.ts +1 -1
  173. package/src/dayjs/resolveRelativeTime.ts +1 -1
  174. package/src/drain3/Drain.test.ts +2 -2
  175. package/src/drain3/index.ts +2 -4
  176. package/src/fs/createWebDavFileSystem.ts +2 -7
  177. package/src/fs/createWebFileSystem.ts +1 -1
  178. package/src/fs/index.ts +4 -4
  179. package/src/fs/minio/createMinioFileSystem.ts +2 -2
  180. package/src/fs/minio/index.ts +1 -1
  181. package/src/fs/s3/createS3MiniFileSystem.ts +1 -1
  182. package/src/fs/server/createDatabaseFileSystem.ts +84 -120
  183. package/src/fs/server/dbfs.test.ts +14 -10
  184. package/src/fs/server/index.ts +1 -0
  185. package/src/fs/server/loadTestDatabase.ts +8 -119
  186. package/src/jsonschema/index.ts +1 -1
  187. package/src/meta/index.ts +2 -3
  188. package/src/orm/createSqliteDialect.ts +17 -0
  189. package/src/orm/index.ts +1 -0
  190. package/src/orpc/createOpenApiContractClient.ts +1 -1
  191. package/src/orpc/index.ts +1 -1
  192. package/src/password/createArgon2PasswordAlgorithm.ts +1 -1
  193. package/src/password/index.ts +2 -2
  194. package/src/resource/index.ts +3 -3
  195. package/src/resource/schema/index.ts +4 -4
  196. package/src/s3/index.ts +1 -1
  197. package/src/schema/SchemaRegistry.ts +1 -1
  198. package/src/schema/createSchemaData.ts +1 -1
  199. package/src/schema/findJsonSchemaByPath.ts +1 -1
  200. package/src/schema/index.ts +5 -5
  201. package/src/schema/validate.ts +1 -1
  202. package/src/utils/buildRedactorFormSchema.ts +1 -1
  203. package/src/utils/formatNumber.ts +18 -0
  204. package/src/utils/formatPercent.ts +17 -0
  205. package/src/utils/index.ts +3 -3
  206. package/src/utils/resolveFeatureOptions.ts +1 -1
@@ -1,278 +1,200 @@
1
1
  function _array_like_to_array(arr, len) {
2
- if (len == null || len > arr.length)
3
- len = arr.length;
4
- for (var i = 0, arr2 = new Array(len); i < len; i++)
5
- arr2[i] = arr[i];
6
- return arr2;
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
4
+ return arr2;
7
5
  }
8
6
  function _array_with_holes(arr) {
9
- if (Array.isArray(arr))
10
- return arr;
7
+ if (Array.isArray(arr)) return arr;
11
8
  }
12
9
  function _iterable_to_array_limit(arr, i) {
13
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
14
- if (_i == null)
15
- return;
16
- var _arr = [];
17
- var _n = true;
18
- var _d = false;
19
- var _s, _e;
20
- try {
21
- for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
22
- _arr.push(_s.value);
23
- if (i && _arr.length === i)
24
- break;
25
- }
26
- }
27
- catch (err) {
28
- _d = true;
29
- _e = err;
30
- }
31
- finally {
32
- try {
33
- if (!_n && _i["return"] != null)
34
- _i["return"]();
35
- }
36
- finally {
37
- if (_d)
38
- throw _e;
39
- }
40
- }
41
- return _arr;
10
+ var _i = arr == null ? null : (typeof Symbol !== 'undefined' && arr[Symbol.iterator]) || arr['@@iterator'];
11
+ if (_i == null) return;
12
+ var _arr = [];
13
+ var _n = true;
14
+ var _d = false;
15
+ var _s, _e;
16
+ try {
17
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
18
+ _arr.push(_s.value);
19
+ if (i && _arr.length === i) break;
20
+ }
21
+ } catch (err) {
22
+ _d = true;
23
+ _e = err;
24
+ } finally {
25
+ try {
26
+ if (!_n && _i['return'] != null) _i['return']();
27
+ } finally {
28
+ if (_d) throw _e;
29
+ }
30
+ }
31
+ return _arr;
42
32
  }
43
33
  function _non_iterable_rest() {
44
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
34
+ throw new TypeError(
35
+ 'Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.',
36
+ );
45
37
  }
46
38
  function _sliced_to_array(arr, i) {
47
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
39
+ return (
40
+ _array_with_holes(arr) ||
41
+ _iterable_to_array_limit(arr, i) ||
42
+ _unsupported_iterable_to_array(arr, i) ||
43
+ _non_iterable_rest()
44
+ );
48
45
  }
49
46
  function _unsupported_iterable_to_array(o, minLen) {
50
- if (!o)
51
- return;
52
- if (typeof o === "string")
53
- return _array_like_to_array(o, minLen);
54
- var n = Object.prototype.toString.call(o).slice(8, -1);
55
- if (n === "Object" && o.constructor)
56
- n = o.constructor.name;
57
- if (n === "Map" || n === "Set")
58
- return Array.from(n);
59
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))
60
- return _array_like_to_array(o, minLen);
47
+ if (!o) return;
48
+ if (typeof o === 'string') return _array_like_to_array(o, minLen);
49
+ var n = Object.prototype.toString.call(o).slice(8, -1);
50
+ if (n === 'Object' && o.constructor) n = o.constructor.name;
51
+ if (n === 'Map' || n === 'Set') return Array.from(n);
52
+ if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
61
53
  }
62
- import { expect, test } from "vitest";
63
- import { formatChineseAmount } from "./formatChineseAmount.js";
64
- import { parseChineseNumber } from "./parseChineseNumber.js";
65
- test("parseChineseNumber", function () {
66
- for (var _i = 0, _iter = [
67
- [
68
- "0",
69
- 0
70
- ],
71
- [
72
- "10000",
73
- 10000
74
- ],
75
- [
76
- "123",
77
- 123
78
- ],
79
- [
80
- "\u4E00\u4E07",
81
- 10000
82
- ],
83
- [
84
- "\u4E00\u4E07\u4E00",
85
- 10001
86
- ],
87
- [
88
- "\u4E00\u4E07\u4E00\u767E\u4E00",
89
- 10101
90
- ],
91
- [
92
- "\u4E00\u4E07\u96F6\u4E00\u767E\u96F6\u4E00",
93
- 10101
94
- ],
95
- [
96
- "\u4E00\u5343\u96F6\u4E00\u5341",
97
- 1010
98
- ],
99
- [
100
- "\u4E00\u5343\u96F6\u4E00\u5341\u4E00",
101
- 1011
102
- ],
103
- [
104
- "\u4E00\u634C\u7396",
105
- 189
106
- ],
107
- [
108
- "\u4E00\u767E\u4E00",
109
- 101
110
- ],
111
- [
112
- "\u4E00\u767E\u4E5D\u5341\u4E8C",
113
- 192
114
- ],
115
- [
116
- "\u634C\u7396",
117
- 89
118
- ],
119
- [
120
- "\u634C\u7396\u96F6",
121
- 890
122
- ],
123
- [
124
- "\u96F6\u634C\u7396",
125
- 89
126
- ],
127
- [
128
- "\u8086\u4EDF\u53C1\u4F70\u9646\u62FE",
129
- 4360
130
- ]
131
- ]; _i < _iter.length; _i++) {
132
- var _iter__i = _sliced_to_array(_iter[_i], 2), a = _iter__i[0], b = _iter__i[1];
133
- expect(parseChineseNumber(a)).toBe(b);
134
- console.log(a, b, formatChineseNumber(b), formatChineseAmount0(b) === formatChineseAmount(b), formatChineseAmount0(b), formatChineseAmount(b));
135
- }
54
+
55
+ import { expect, test } from 'vitest';
56
+ import { formatChineseAmount } from './formatChineseAmount.js';
57
+ import { parseChineseNumber } from './parseChineseNumber.js';
58
+
59
+ test('parseChineseNumber', () => {
60
+ for (
61
+ var _i = 0,
62
+ _iter = [
63
+ ['0', 0],
64
+ ['10000', 10000],
65
+ ['123', 123],
66
+ ['\u4E00\u4E07', 10000],
67
+ ['\u4E00\u4E07\u4E00', 10001],
68
+ ['\u4E00\u4E07\u4E00\u767E\u4E00', 10101],
69
+ ['\u4E00\u4E07\u96F6\u4E00\u767E\u96F6\u4E00', 10101],
70
+ ['\u4E00\u5343\u96F6\u4E00\u5341', 1010],
71
+ ['\u4E00\u5343\u96F6\u4E00\u5341\u4E00', 1011],
72
+ ['\u4E00\u634C\u7396', 189],
73
+ ['\u4E00\u767E\u4E00', 101],
74
+ ['\u4E00\u767E\u4E5D\u5341\u4E8C', 192],
75
+ ['\u634C\u7396', 89],
76
+ ['\u634C\u7396\u96F6', 890],
77
+ ['\u96F6\u634C\u7396', 89],
78
+ ['\u8086\u4EDF\u53C1\u4F70\u9646\u62FE', 4360],
79
+ ];
80
+ _i < _iter.length;
81
+ _i++
82
+ ) {
83
+ var _iter__i = _sliced_to_array(_iter[_i], 2),
84
+ a = _iter__i[0],
85
+ b = _iter__i[1];
86
+ expect(parseChineseNumber(a)).toBe(b);
87
+ console.log(
88
+ a,
89
+ b,
90
+ formatChineseNumber(b),
91
+ formatChineseAmount0(b) === formatChineseAmount(b),
92
+ formatChineseAmount0(b),
93
+ formatChineseAmount(b),
94
+ );
95
+ }
136
96
  });
137
97
  function formatChineseNumber(v) {
138
- if (v < 0) {
139
- return "\u8D1F" + formatChineseNumber(-v);
140
- }
141
- // 数字对应的中文表示
142
- var digits = [
143
- "\u3007",
144
- "\u4E00",
145
- "\u4E8C",
146
- "\u4E09",
147
- "\u56DB",
148
- "\u4E94",
149
- "\u516D",
150
- "\u4E03",
151
- "\u516B",
152
- "\u4E5D"
153
- ];
154
- var units = [
155
- "",
156
- "\u5341",
157
- "\u767E",
158
- "\u5343"
159
- ];
160
- var bigUnits = [
161
- "",
162
- "\u4E07",
163
- "\u4EBF",
164
- "\u5146"
165
- ];
166
- if (v < 10) {
167
- return digits[v];
168
- }
169
- // 将数字分割成千位分隔的数组
170
- var parts = [];
171
- while (v > 0) {
172
- parts.push(v % 10000);
173
- v = Math.floor(v / 10000);
174
- }
175
- // 从最高位开始处理每个部分
176
- var result = parts.map(function (part, idx) {
177
- var str = "";
178
- var zeroFlag = false; // 标记是否需要添加零
179
- for (var i = 0; part > 0; i++) {
180
- var currentDigit = part % 10;
181
- if (currentDigit !== 0) {
182
- str = digits[currentDigit] + (i > 0 ? units[i] : "") + str;
183
- zeroFlag = true; // 若当前位不为零,则后面可能需要加零
184
- }
185
- else if (zeroFlag) {
186
- str = digits[0] + str; // 加零操作
187
- zeroFlag = false; // 重置零标志
188
- }
189
- part = Math.floor(part / 10);
190
- }
191
- // 返回处理后的字符串,加上相应的大单位
192
- return str + bigUnits[idx];
193
- }).reverse().join("").replace(/〇+/g, "\u3007").replace(/〇([万亿兆])/g, "$1");
194
- // 处理连续〇的情况以及〇位于大单位前的情况
195
- return result;
98
+ if (v < 0) {
99
+ return '\u8D1F' + formatChineseNumber(-v);
100
+ }
101
+ // 数字对应的中文表示
102
+ var digits = ['\u3007', '\u4E00', '\u4E8C', '\u4E09', '\u56DB', '\u4E94', '\u516D', '\u4E03', '\u516B', '\u4E5D'];
103
+ var units = ['', '\u5341', '\u767E', '\u5343'];
104
+ var bigUnits = ['', '\u4E07', '\u4EBF', '\u5146'];
105
+ if (v < 10) {
106
+ return digits[v];
107
+ }
108
+ // 将数字分割成千位分隔的数组
109
+ var parts = [];
110
+ while (v > 0) {
111
+ parts.push(v % 10000);
112
+ v = Math.floor(v / 10000);
113
+ }
114
+ // 从最高位开始处理每个部分
115
+ var result = parts
116
+ .map((part, idx) => {
117
+ var str = '';
118
+ var zeroFlag = false; // 标记是否需要添加零
119
+ for (var i = 0; part > 0; i++) {
120
+ var currentDigit = part % 10;
121
+ if (currentDigit !== 0) {
122
+ str = digits[currentDigit] + (i > 0 ? units[i] : '') + str;
123
+ zeroFlag = true; // 若当前位不为零,则后面可能需要加零
124
+ } else if (zeroFlag) {
125
+ str = digits[0] + str; // 加零操作
126
+ zeroFlag = false; // 重置零标志
127
+ }
128
+ part = Math.floor(part / 10);
129
+ }
130
+ // 返回处理后的字符串,加上相应的大单位
131
+ return str + bigUnits[idx];
132
+ })
133
+ .reverse()
134
+ .join('')
135
+ .replace(/〇+/g, '\u3007')
136
+ .replace(/〇([万亿兆])/g, '$1');
137
+ // 处理连续〇的情况以及〇位于大单位前的情况
138
+ return result;
196
139
  }
197
140
  export function formatChineseAmount0(amount) {
198
- // 检查金额是否合理
199
- if (amount < 0) {
200
- return "(\u8D1F)" + formatChineseAmount0(-amount);
201
- }
202
- // 大写数字和单位
203
- var digits = [
204
- "\u96F6",
205
- "\u58F9",
206
- "\u8D30",
207
- "\u53C1",
208
- "\u8086",
209
- "\u4F0D",
210
- "\u9646",
211
- "\u67D2",
212
- "\u634C",
213
- "\u7396"
214
- ];
215
- var basicUnits = [
216
- "",
217
- "\u62FE",
218
- "\u4F70",
219
- "\u4EDF"
220
- ];
221
- var bigUnits = [
222
- "\u5143",
223
- "\u4E07",
224
- "\u4EBF"
225
- ];
226
- // 转换为整数处理
227
- var integerAmount = Math.round(amount * 100); // 转为分为单位
228
- if (integerAmount === 0) {
229
- return "\u96F6\u5143\u6574";
230
- }
231
- var result = "";
232
- // 处理小数部分(分、角)
233
- var cents = integerAmount % 100;
234
- var jiao = Math.floor(cents / 10);
235
- var fen = cents % 10;
236
- integerAmount = Math.floor(integerAmount / 100); // 转为元为单位
237
- if (fen > 0) {
238
- result = digits[fen] + "\u5206" + result;
239
- }
240
- if (jiao > 0) {
241
- result = digits[jiao] + "\u89D2" + result;
242
- }
243
- if (cents === 0) {
244
- result += "\u6574";
245
- }
246
- // 处理整数部分
247
- var unitIndex = 0;
248
- var zeroCount = 0;
249
- var needZero = false;
250
- while (integerAmount > 0) {
251
- var segment = integerAmount % 10000;
252
- var segmentString = "";
253
- for (var i = 0; i < 4 && segment > 0; i++) {
254
- var digit = segment % 10;
255
- if (digit === 0) {
256
- zeroCount++;
257
- }
258
- else {
259
- if (zeroCount > 0 || needZero) {
260
- segmentString = digits[0] + segmentString;
261
- zeroCount = 0;
262
- needZero = false;
263
- }
264
- segmentString = digits[digit] + basicUnits[i] + segmentString;
265
- }
266
- segment = Math.floor(segment / 10);
267
- }
268
- if (segment > 0 || unitIndex === 0 || segmentString !== "") {
269
- result = segmentString + bigUnits[unitIndex] + result;
270
- needZero = true;
271
- }
272
- integerAmount = Math.floor(integerAmount / 10000);
273
- unitIndex++;
274
- }
275
- // 去除多余的零,调整单位和数位
276
- result = result.replace(/零+/g, "\u96F6").replace(/零元/, "\u5143").replace(/零万/, "\u4E07");
277
- return result;
141
+ // 检查金额是否合理
142
+ if (amount < 0) {
143
+ return '(\u8D1F)' + formatChineseAmount0(-amount);
144
+ }
145
+ // 大写数字和单位
146
+ var digits = ['\u96F6', '\u58F9', '\u8D30', '\u53C1', '\u8086', '\u4F0D', '\u9646', '\u67D2', '\u634C', '\u7396'];
147
+ var basicUnits = ['', '\u62FE', '\u4F70', '\u4EDF'];
148
+ var bigUnits = ['\u5143', '\u4E07', '\u4EBF'];
149
+ // 转换为整数处理
150
+ var integerAmount = Math.round(amount * 100); // 转为分为单位
151
+ if (integerAmount === 0) {
152
+ return '\u96F6\u5143\u6574';
153
+ }
154
+ var result = '';
155
+ // 处理小数部分(分、角)
156
+ var cents = integerAmount % 100;
157
+ var jiao = Math.floor(cents / 10);
158
+ var fen = cents % 10;
159
+ integerAmount = Math.floor(integerAmount / 100); // 转为元为单位
160
+ if (fen > 0) {
161
+ result = digits[fen] + '\u5206' + result;
162
+ }
163
+ if (jiao > 0) {
164
+ result = digits[jiao] + '\u89D2' + result;
165
+ }
166
+ if (cents === 0) {
167
+ result += '\u6574';
168
+ }
169
+ // 处理整数部分
170
+ var unitIndex = 0;
171
+ var zeroCount = 0;
172
+ var needZero = false;
173
+ while (integerAmount > 0) {
174
+ var segment = integerAmount % 10000;
175
+ var segmentString = '';
176
+ for (var i = 0; i < 4 && segment > 0; i++) {
177
+ var digit = segment % 10;
178
+ if (digit === 0) {
179
+ zeroCount++;
180
+ } else {
181
+ if (zeroCount > 0 || needZero) {
182
+ segmentString = digits[0] + segmentString;
183
+ zeroCount = 0;
184
+ needZero = false;
185
+ }
186
+ segmentString = digits[digit] + basicUnits[i] + segmentString;
187
+ }
188
+ segment = Math.floor(segment / 10);
189
+ }
190
+ if (segment > 0 || unitIndex === 0 || segmentString !== '') {
191
+ result = segmentString + bigUnits[unitIndex] + result;
192
+ needZero = true;
193
+ }
194
+ integerAmount = Math.floor(integerAmount / 10000);
195
+ unitIndex++;
196
+ }
197
+ // 去除多余的零,调整单位和数位
198
+ result = result.replace(/零+/g, '\u96F6').replace(/零元/, '\u5143').replace(/零万/, '\u4E07');
199
+ return result;
278
200
  }
@@ -1,22 +1,22 @@
1
1
  export function cartesianProduct(args) {
2
- if (args.length === 0) return [];
3
- const product = [];
4
- const counts = args.map((arr)=>arr.length);
5
- const counter = new Array(args.length).fill(0);
6
- const total = counts.reduce((acc, val)=>acc * val, 1);
7
- for(let i = 0; i < total; i++){
8
- product.push(counter.map((count, index)=>args[index][count]));
9
- // Update the counter for the next row in the Cartesian product.
10
- for(let j = args.length - 1; j >= 0; j--){
11
- if (counter[j] + 1 < counts[j]) {
12
- counter[j]++;
13
- break; // Stop as we've found a digit that can be incremented.
14
- } else {
15
- counter[j] = 0; // Reset this digit and increment the next digit in the next iteration.
16
- }
17
- }
18
- }
19
- return product;
2
+ if (args.length === 0) return [];
3
+ const product = [];
4
+ const counts = args.map((arr) => arr.length);
5
+ const counter = new Array(args.length).fill(0);
6
+ const total = counts.reduce((acc, val) => acc * val, 1);
7
+ for (let i = 0; i < total; i++) {
8
+ product.push(counter.map((count, index) => args[index][count]));
9
+ // Update the counter for the next row in the Cartesian product.
10
+ for (let j = args.length - 1; j >= 0; j--) {
11
+ if (counter[j] + 1 < counts[j]) {
12
+ counter[j]++;
13
+ break; // Stop as we've found a digit that can be incremented.
14
+ } else {
15
+ counter[j] = 0; // Reset this digit and increment the next digit in the next iteration.
16
+ }
17
+ }
18
+ }
19
+ return product;
20
20
  }
21
21
 
22
- //# sourceMappingURL=cartesianProduct.js.map
22
+ //# sourceMappingURL=cartesianProduct.js.map