@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,90 +1,76 @@
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 { formatDuration } from "./formatDuration.js";
64
- test("formatDuration", function () {
65
- for (var _i = 0, _iter = [
66
- [
67
- 0,
68
- "0ms"
69
- ],
70
- [
71
- 1000,
72
- "1s"
73
- ],
74
- [
75
- 1000 * 60,
76
- "1m"
77
- ],
78
- [
79
- 1000 * 60 + 1000,
80
- "1m1s"
81
- ],
82
- [
83
- 1000 * 60 + 1000 + 1,
84
- "1m1s1ms"
85
- ]
86
- ]; _i < _iter.length; _i++) {
87
- var _iter__i = _sliced_to_array(_iter[_i], 2), a = _iter__i[0], b = _iter__i[1];
88
- expect(formatDuration(a)).toBe(b);
89
- }
54
+
55
+ import { expect, test } from 'vitest';
56
+ import { formatDuration } from './formatDuration.js';
57
+
58
+ test('formatDuration', () => {
59
+ for (
60
+ var _i = 0,
61
+ _iter = [
62
+ [0, '0ms'],
63
+ [1000, '1s'],
64
+ [1000 * 60, '1m'],
65
+ [1000 * 60 + 1000, '1m1s'],
66
+ [1000 * 60 + 1000 + 1, '1m1s1ms'],
67
+ ];
68
+ _i < _iter.length;
69
+ _i++
70
+ ) {
71
+ var _iter__i = _sliced_to_array(_iter[_i], 2),
72
+ a = _iter__i[0],
73
+ b = _iter__i[1];
74
+ expect(formatDuration(a)).toBe(b);
75
+ }
90
76
  });
@@ -1,5 +1,5 @@
1
- export { dayjs } from "./dayjs.js";
2
- export { parseDuration } from "./parseDuration.js";
3
- export { formatDuration } from "./formatDuration.js";
4
- export { resolveRelativeTime } from "./resolveRelativeTime.js";
1
+ export { dayjs } from './dayjs.js';
2
+ export { formatDuration } from './formatDuration.js';
3
+ export { parseDuration } from './parseDuration.js';
4
+ export { resolveRelativeTime } from './resolveRelativeTime.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1,29 +1,24 @@
1
- import { dayjs } from "./dayjs.js";
1
+ import { dayjs } from './dayjs.js';
2
2
  export function parseDuration(value) {
3
- if (!value && value !== 0) {
4
- return;
5
- }
6
- let duration;
7
- if (typeof value === "number") {
8
- duration = dayjs.duration(value);
9
- }
10
- else if (typeof value === "string" && value.startsWith("P")) {
11
- // PT0S
12
- duration = dayjs.duration(value);
13
- }
14
- else if (typeof value === "object" && "value" in value) {
15
- duration = dayjs.duration(value.value, value.unit);
16
- }
17
- else if (dayjs.isDuration(value)) {
18
- duration = value;
19
- }
20
- else if (typeof value === "object") {
21
- duration = dayjs.duration(value);
22
- }
23
- else {
24
- console.warn(`Invalid duration value:`, value);
25
- return;
26
- }
27
- return duration;
3
+ if (!value && value !== 0) {
4
+ return;
5
+ }
6
+ let duration;
7
+ if (typeof value === 'number') {
8
+ duration = dayjs.duration(value);
9
+ } else if (typeof value === 'string' && value.startsWith('P')) {
10
+ // PT0S
11
+ duration = dayjs.duration(value);
12
+ } else if (typeof value === 'object' && 'value' in value) {
13
+ duration = dayjs.duration(value.value, value.unit);
14
+ } else if (dayjs.isDuration(value)) {
15
+ duration = value;
16
+ } else if (typeof value === 'object') {
17
+ duration = dayjs.duration(value);
18
+ } else {
19
+ console.warn(`Invalid duration value:`, value);
20
+ return;
21
+ }
22
+ return duration;
28
23
  }
29
24
  //# sourceMappingURL=parseDuration.js.map
@@ -1,5 +1,5 @@
1
- import dayjs from "dayjs";
2
- import { checkDurationUnit, RelativeDurationUnits } from "./resolveRelativeTime.js";
1
+ import dayjs from 'dayjs';
2
+ import { checkDurationUnit, RelativeDurationUnits } from './resolveRelativeTime.js';
3
3
  /**
4
4
  * Parses a relative time string and returns an array of operations.
5
5
  *
@@ -17,74 +17,73 @@ import { checkDurationUnit, RelativeDurationUnits } from "./resolveRelativeTime.
17
17
  * parseRelativeTime('now+500ms') // [{ operator: '+', duration: dayjs.duration(500, 'ms') }]
18
18
  * ```
19
19
  */ export function parseRelativeTime(s) {
20
- if (typeof s !== "string" || !s.startsWith("now")) {
21
- throw new Error(`Invalid relative time format: ${s}`);
22
- }
23
- const remaining = s.slice(3); // Remove 'now'
24
- if (!remaining) {
25
- return [];
26
- }
27
- const operations = [];
28
- // Single regex to match all operations: <op><duration_spec> or <op><unit>
29
- // Where duration_spec can be: 1h, 1d6h, 500ms, etc.
30
- const operationRegex = /([+\-/\\])([^+\-/\\]+)/g;
31
- let match;
32
- let lastIndex = 0;
33
- while ((match = operationRegex.exec(remaining)) !== null) {
34
- const [, operator, operand] = match;
35
- if (operator === "/" || operator === "\\") {
36
- // Truncation operation - single unit only
37
- checkDurationUnit(operand.trim());
38
- operations.push({
39
- operator: operator,
40
- unit: operand.trim()
41
- });
42
- }
43
- else {
44
- // Addition or subtraction operation - parse complex duration
45
- const parsedDuration = parseDurationSpec(operand.trim());
46
- operations.push({
47
- operator: operator,
48
- duration: parsedDuration
49
- });
50
- }
51
- lastIndex = operationRegex.lastIndex;
52
- }
53
- // Check if we parsed the entire remaining string
54
- if (lastIndex < remaining.length) {
55
- throw new Error(`Invalid relative time format: ${s}`);
56
- }
57
- return operations;
20
+ if (typeof s !== 'string' || !s.startsWith('now')) {
21
+ throw new Error(`Invalid relative time format: ${s}`);
22
+ }
23
+ const remaining = s.slice(3); // Remove 'now'
24
+ if (!remaining) {
25
+ return [];
26
+ }
27
+ const operations = [];
28
+ // Single regex to match all operations: <op><duration_spec> or <op><unit>
29
+ // Where duration_spec can be: 1h, 1d6h, 500ms, etc.
30
+ const operationRegex = /([+\-/\\])([^+\-/\\]+)/g;
31
+ let match;
32
+ let lastIndex = 0;
33
+ while ((match = operationRegex.exec(remaining)) !== null) {
34
+ const [, operator, operand] = match;
35
+ if (operator === '/' || operator === '\\') {
36
+ // Truncation operation - single unit only
37
+ checkDurationUnit(operand.trim());
38
+ operations.push({
39
+ operator: operator,
40
+ unit: operand.trim(),
41
+ });
42
+ } else {
43
+ // Addition or subtraction operation - parse complex duration
44
+ const parsedDuration = parseDurationSpec(operand.trim());
45
+ operations.push({
46
+ operator: operator,
47
+ duration: parsedDuration,
48
+ });
49
+ }
50
+ lastIndex = operationRegex.lastIndex;
51
+ }
52
+ // Check if we parsed the entire remaining string
53
+ if (lastIndex < remaining.length) {
54
+ throw new Error(`Invalid relative time format: ${s}`);
55
+ }
56
+ return operations;
58
57
  }
59
58
  /**
60
59
  * Parses a duration specification like "1h", "1d6h", "500ms" into a dayjs Duration.
61
60
  * Supports multiple units in a single specification.
62
61
  */ function parseDurationSpec(spec) {
63
- // Match all number+unit pairs: 1d, 6h, 30m, 500ms, etc.
64
- const durationRegex = /(\d+)(ms|[smhdwMQy])/g;
65
- const durationObj = {};
66
- let match;
67
- let hasMatch = false;
68
- while ((match = durationRegex.exec(spec)) !== null) {
69
- const [, amountStr, unit] = match;
70
- checkDurationUnit(unit);
71
- const amount = parseInt(amountStr, 10);
72
- // Dayjs duration supports unit strings directly
73
- durationObj[unit] = (durationObj[unit] || 0) + amount;
74
- hasMatch = true;
75
- }
76
- if (!hasMatch) {
77
- // Check if there are invalid units by looking for number+invalid_unit patterns
78
- const invalidUnitRegex = /\d+([a-zA-Z]+)/g;
79
- let invalidMatch;
80
- while ((invalidMatch = invalidUnitRegex.exec(spec)) !== null) {
81
- const [, unit] = invalidMatch;
82
- if (!RelativeDurationUnits.includes(unit)) {
83
- throw new Error(`Invalid unit: ${unit}`);
84
- }
85
- }
86
- throw new Error(`Invalid duration specification: ${spec}`);
87
- }
88
- return dayjs.duration(durationObj);
62
+ // Match all number+unit pairs: 1d, 6h, 30m, 500ms, etc.
63
+ const durationRegex = /(\d+)(ms|[smhdwMQy])/g;
64
+ const durationObj = {};
65
+ let match;
66
+ let hasMatch = false;
67
+ while ((match = durationRegex.exec(spec)) !== null) {
68
+ const [, amountStr, unit] = match;
69
+ checkDurationUnit(unit);
70
+ const amount = parseInt(amountStr, 10);
71
+ // Dayjs duration supports unit strings directly
72
+ durationObj[unit] = (durationObj[unit] || 0) + amount;
73
+ hasMatch = true;
74
+ }
75
+ if (!hasMatch) {
76
+ // Check if there are invalid units by looking for number+invalid_unit patterns
77
+ const invalidUnitRegex = /\d+([a-zA-Z]+)/g;
78
+ let invalidMatch;
79
+ while ((invalidMatch = invalidUnitRegex.exec(spec)) !== null) {
80
+ const [, unit] = invalidMatch;
81
+ if (!RelativeDurationUnits.includes(unit)) {
82
+ throw new Error(`Invalid unit: ${unit}`);
83
+ }
84
+ }
85
+ throw new Error(`Invalid duration specification: ${spec}`);
86
+ }
87
+ return dayjs.duration(durationObj);
89
88
  }
90
89
  //# sourceMappingURL=parseRelativeTime.js.map