@pawells/typescript-common 1.2.0 → 1.3.1
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.
- package/README.md +3 -1
- package/build/array/array-chunk.js +1 -1
- package/build/array/array-chunk.js.map +1 -1
- package/build/array/array-compact.js +1 -1
- package/build/array/array-compact.js.map +1 -1
- package/build/array/array-count-by.js +1 -1
- package/build/array/array-count-by.js.map +1 -1
- package/build/array/array-filter.js +1 -1
- package/build/array/array-filter.js.map +1 -1
- package/build/array/array-flatten.js +1 -1
- package/build/array/array-flatten.js.map +1 -1
- package/build/array/array-group-by.js +1 -1
- package/build/array/array-group-by.js.map +1 -1
- package/build/array/array-partition.js +1 -1
- package/build/array/array-partition.js.map +1 -1
- package/build/array/array-shuffle.js +1 -1
- package/build/array/array-shuffle.js.map +1 -1
- package/build/array/array-sort-by.js +1 -1
- package/build/array/array-sort-by.js.map +1 -1
- package/build/array/unique.js +1 -1
- package/build/array/unique.js.map +1 -1
- package/build/asserts/errors.d.ts.map +1 -1
- package/build/asserts/errors.js +4 -0
- package/build/asserts/errors.js.map +1 -1
- package/build/asserts/generic.d.ts.map +1 -1
- package/build/asserts/generic.js +12 -3
- package/build/asserts/generic.js.map +1 -1
- package/build/function/once.js +1 -1
- package/build/function/once.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/object/assert.d.ts +16 -16
- package/build/object/assert.js +17 -17
- package/build/object/assert.js.map +1 -1
- package/build/object/index.d.ts +2 -1
- package/build/object/index.d.ts.map +1 -1
- package/build/object/index.js +2 -1
- package/build/object/index.js.map +1 -1
- package/build/object/json-circular-replacer.d.ts +39 -0
- package/build/object/json-circular-replacer.d.ts.map +1 -0
- package/build/object/json-circular-replacer.js +60 -0
- package/build/object/json-circular-replacer.js.map +1 -0
- package/build/string/assert.d.ts.map +1 -1
- package/build/string/assert.js +10 -19
- package/build/string/assert.js.map +1 -1
- package/build/string/case-conversion.d.ts +1 -1
- package/build/string/case-conversion.d.ts.map +1 -1
- package/build/string/formatting.d.ts +1 -1
- package/build/string/formatting.d.ts.map +1 -1
- package/build/string/formatting.js +2 -2
- package/build/string/formatting.js.map +1 -1
- package/build/string/transformation.d.ts +1 -1
- package/build/string/transformation.d.ts.map +1 -1
- package/build/string/validation.d.ts +1 -1
- package/build/string/validation.d.ts.map +1 -1
- package/build/time/elapsed-time/constants.d.ts +1 -1
- package/build/time/elapsed-time/constants.d.ts.map +1 -1
- package/build/time/elapsed-time/elapsed-time.d.ts +23 -40
- package/build/time/elapsed-time/elapsed-time.d.ts.map +1 -1
- package/build/time/elapsed-time/elapsed-time.js +33 -54
- package/build/time/elapsed-time/elapsed-time.js.map +1 -1
- package/build/time/stopwatch/stopwatch.d.ts.map +1 -1
- package/build/time/stopwatch/stopwatch.js +2 -2
- package/build/time/stopwatch/stopwatch.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY;AACZ,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpK,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY;AACZ,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,+BAA+B,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpK,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a JSON.stringify replacer function that handles circular references
|
|
3
|
+
* by replacing them with a placeholder string.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `ObjectHasCircularReference` which is designed for manual recursive
|
|
6
|
+
* traversal with explicit entry/exit control, this utility works inside
|
|
7
|
+
* `JSON.stringify`'s replacer context where only entry is signaled. It infers
|
|
8
|
+
* backtracking from the `this` context (the parent object).
|
|
9
|
+
*
|
|
10
|
+
* @param placeholder - The string to use for circular references (default: '[Circular]')
|
|
11
|
+
* @returns A replacer function for use with JSON.stringify
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const circular: any = { a: 1 };
|
|
16
|
+
* circular.self = circular;
|
|
17
|
+
*
|
|
18
|
+
* // Without replacer - throws TypeError
|
|
19
|
+
* JSON.stringify(circular); // Error: Converting circular structure to JSON
|
|
20
|
+
*
|
|
21
|
+
* // With replacer - safely serializes
|
|
22
|
+
* JSON.stringify(circular, CreateJsonCircularReplacer());
|
|
23
|
+
* // '{"a":1,"self":"[Circular]"}'
|
|
24
|
+
*
|
|
25
|
+
* // Custom placeholder
|
|
26
|
+
* JSON.stringify(circular, CreateJsonCircularReplacer('[Ref]'));
|
|
27
|
+
* // '{"a":1,"self":"[Ref]"}'
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Utility wrapper for safe JSON serialization
|
|
33
|
+
* function safeStringify(obj: unknown): string {
|
|
34
|
+
* return JSON.stringify(obj, CreateJsonCircularReplacer());
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function CreateJsonCircularReplacer(placeholder?: string): (this: unknown, key: string, value: unknown) => unknown;
|
|
39
|
+
//# sourceMappingURL=json-circular-replacer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-circular-replacer.d.ts","sourceRoot":"","sources":["../../src/object/json-circular-replacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,GAAE,MAAqB,GAChC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CA0BzD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a JSON.stringify replacer function that handles circular references
|
|
3
|
+
* by replacing them with a placeholder string.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `ObjectHasCircularReference` which is designed for manual recursive
|
|
6
|
+
* traversal with explicit entry/exit control, this utility works inside
|
|
7
|
+
* `JSON.stringify`'s replacer context where only entry is signaled. It infers
|
|
8
|
+
* backtracking from the `this` context (the parent object).
|
|
9
|
+
*
|
|
10
|
+
* @param placeholder - The string to use for circular references (default: '[Circular]')
|
|
11
|
+
* @returns A replacer function for use with JSON.stringify
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const circular: any = { a: 1 };
|
|
16
|
+
* circular.self = circular;
|
|
17
|
+
*
|
|
18
|
+
* // Without replacer - throws TypeError
|
|
19
|
+
* JSON.stringify(circular); // Error: Converting circular structure to JSON
|
|
20
|
+
*
|
|
21
|
+
* // With replacer - safely serializes
|
|
22
|
+
* JSON.stringify(circular, CreateJsonCircularReplacer());
|
|
23
|
+
* // '{"a":1,"self":"[Circular]"}'
|
|
24
|
+
*
|
|
25
|
+
* // Custom placeholder
|
|
26
|
+
* JSON.stringify(circular, CreateJsonCircularReplacer('[Ref]'));
|
|
27
|
+
* // '{"a":1,"self":"[Ref]"}'
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // Utility wrapper for safe JSON serialization
|
|
33
|
+
* function safeStringify(obj: unknown): string {
|
|
34
|
+
* return JSON.stringify(obj, CreateJsonCircularReplacer());
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function CreateJsonCircularReplacer(placeholder = '[Circular]') {
|
|
39
|
+
const ancestors = [];
|
|
40
|
+
return function (_key, value) {
|
|
41
|
+
// Primitives and null are safe
|
|
42
|
+
if (typeof value !== 'object' || value === null) {
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
// Find where the parent (this) is in the ancestor stack.
|
|
46
|
+
// If the parent isn't found (-1), parentIndex + 1 = 0, so we clear the
|
|
47
|
+
// entire stack (we're at the root). Otherwise, we trim to the parent's
|
|
48
|
+
// level, removing any siblings that were previously visited.
|
|
49
|
+
const parentIndex = ancestors.lastIndexOf(this);
|
|
50
|
+
ancestors.splice(parentIndex + 1);
|
|
51
|
+
// Check if we've seen this value as an ancestor (circular reference)
|
|
52
|
+
if (ancestors.includes(value)) {
|
|
53
|
+
return placeholder;
|
|
54
|
+
}
|
|
55
|
+
// Add current value to ancestor stack
|
|
56
|
+
ancestors.push(value);
|
|
57
|
+
return value;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=json-circular-replacer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-circular-replacer.js","sourceRoot":"","sources":["../../src/object/json-circular-replacer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,UAAU,0BAA0B,CACzC,cAAsB,YAAY;IAElC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,OAAO,UAAwB,IAAY,EAAE,KAAc;QAC1D,+BAA+B;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjD,OAAO,KAAK,CAAC;QACd,CAAC;QAED,yDAAyD;QACzD,uEAAuE;QACvE,uEAAuE;QACvE,6DAA6D;QAC7D,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAc,CAAC,CAAC;QAC1D,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAElC,qEAAqE;QACrE,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAe,CAAC,EAAE,CAAC;YACzC,OAAO,WAAW,CAAC;QACpB,CAAC;QAED,sCAAsC;QACtC,SAAS,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAEhC,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/string/assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/string/assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAwCnD;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,WAAW;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAG5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,gBAAqB,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAMtG;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,GAAE,gBAAqB,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAe9G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,gBAAqB,GAAG,IAAI,CAsBxG"}
|
package/build/string/assert.js
CHANGED
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
import { SetExceptionClass, SetExceptionMessage, ThrowException } from '../asserts/utils.js';
|
|
2
2
|
import { SimpleError } from '../asserts/errors.js';
|
|
3
|
-
|
|
4
|
-
* Cache for compiled regex patterns to improve performance when the same patterns are used repeatedly.
|
|
5
|
-
* Maps regex source + flags to the compiled RegExp object for efficient reuse.
|
|
6
|
-
*
|
|
7
|
-
* @internal
|
|
8
|
-
*/
|
|
9
|
-
const REGEX_PATTERN_CACHE = new Map();
|
|
3
|
+
import { LRUCache } from '../lru-cache.js';
|
|
10
4
|
/**
|
|
11
5
|
* Maximum number of cached regex patterns to prevent unbounded memory growth.
|
|
12
|
-
* When this limit is reached, the
|
|
6
|
+
* When this limit is reached, the least recently used entry is evicted.
|
|
13
7
|
*
|
|
14
8
|
* @internal
|
|
15
9
|
*/
|
|
16
10
|
const MAX_CACHE_SIZE = 100;
|
|
17
11
|
/**
|
|
18
|
-
*
|
|
12
|
+
* LRU cache for compiled regex patterns to improve performance when the same
|
|
13
|
+
* patterns are used repeatedly. Keyed by `source:::flags`.
|
|
19
14
|
*
|
|
20
15
|
* @internal
|
|
21
16
|
*/
|
|
22
|
-
const
|
|
17
|
+
const REGEX_PATTERN_CACHE = new LRUCache(MAX_CACHE_SIZE);
|
|
23
18
|
/**
|
|
24
19
|
* Gets a cached regex pattern or creates and caches a new one.
|
|
25
20
|
* This optimization improves performance when the same regex patterns are used repeatedly.
|
|
@@ -31,16 +26,12 @@ const CACHE_EVICTION_BATCH_SIZE = 20;
|
|
|
31
26
|
*/
|
|
32
27
|
function getCachedRegex(source, flags = '') {
|
|
33
28
|
const cacheKey = `${source}:::${flags}`;
|
|
34
|
-
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
if (REGEX_PATTERN_CACHE.size >= MAX_CACHE_SIZE) {
|
|
38
|
-
const keysToDelete = Array.from(REGEX_PATTERN_CACHE.keys()).slice(0, CACHE_EVICTION_BATCH_SIZE);
|
|
39
|
-
keysToDelete.forEach(key => REGEX_PATTERN_CACHE.delete(key));
|
|
40
|
-
}
|
|
41
|
-
regex = new RegExp(source, flags);
|
|
42
|
-
REGEX_PATTERN_CACHE.set(cacheKey, regex);
|
|
29
|
+
const cached = REGEX_PATTERN_CACHE.get(cacheKey);
|
|
30
|
+
if (cached) {
|
|
31
|
+
return cached;
|
|
43
32
|
}
|
|
33
|
+
const regex = new RegExp(source, flags);
|
|
34
|
+
REGEX_PATTERN_CACHE.set(cacheKey, regex);
|
|
44
35
|
return regex;
|
|
45
36
|
}
|
|
46
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/string/assert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/string/assert.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"case-conversion.d.ts","sourceRoot":"","sources":["../../src/string/case-conversion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"case-conversion.d.ts","sourceRoot":"","sources":["../../src/string/case-conversion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY/C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,cAMxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,cASxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,cAYzB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,cASxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAElC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/string/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/string/formatting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAW9C;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,YAAY,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,GAAG,WAAW,GACjC,MAAM,CAoBR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAQ,GAAG,MAAM,CAUvF;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAM,EAAE,MAAM,UAAO,GAAG,MAAM,CASxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASpE"}
|
|
@@ -90,12 +90,12 @@ export function TruncateString(str, maxLength, ellipsis = '...') {
|
|
|
90
90
|
* @returns The padded string.
|
|
91
91
|
*/
|
|
92
92
|
export function PadString(str, length, char = ' ', padEnd = true) {
|
|
93
|
-
if (
|
|
93
|
+
if (typeof str === 'string' && length > str.length) {
|
|
94
94
|
const paddingLength = length - str.length;
|
|
95
95
|
const padding = char.repeat(paddingLength);
|
|
96
96
|
return padEnd ? str + padding : padding + str;
|
|
97
97
|
}
|
|
98
|
-
return str
|
|
98
|
+
return str ?? '';
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
101
101
|
* Removes all HTML tags from a string.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/string/formatting.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACrC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,GAAG;aACR,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;aACvB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;aACxB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,YAAY,CAC3B,QAAgB,EAChB,MAAmC;IAEnC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;YACrE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;oBACpD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtE,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtE,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,SAAiB,EAAE,QAAQ,GAAG,KAAK;IAC9E,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACrD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,GAAG,CAAC;QACZ,CAAC;QAED,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc,EAAE,IAAI,GAAG,GAAG,EAAE,MAAM,GAAG,IAAI;IAC/E,IAAI,
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/string/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/string/transformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../src/string/transformation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,kBAM5B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,kBAWrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/string/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/string/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,gBAE7B,CAAC;AAQF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,gBAE3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/time/elapsed-time/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/time/elapsed-time/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,kBAuCxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,QAkEZ,CAAC"}
|
|
@@ -179,7 +179,7 @@ export declare class ElapsedTime {
|
|
|
179
179
|
* // ... some operation that takes time ...
|
|
180
180
|
* const end = Date.now();
|
|
181
181
|
* const duration = ElapsedTime.From(start, end);
|
|
182
|
-
* console.log(duration.Format('
|
|
182
|
+
* console.log(duration.Format('concise')); // "1s 250ms"
|
|
183
183
|
* ```
|
|
184
184
|
*
|
|
185
185
|
* @example
|
|
@@ -189,7 +189,7 @@ export declare class ElapsedTime {
|
|
|
189
189
|
* await someAsyncOperation();
|
|
190
190
|
* const end = performance.now();
|
|
191
191
|
* const duration = ElapsedTime.From(start, end);
|
|
192
|
-
* console.log(duration.Format('
|
|
192
|
+
* console.log(duration.Format('medium')); // "1 sec 250 ms"
|
|
193
193
|
* ```
|
|
194
194
|
*/
|
|
195
195
|
static From(start: number, stop: number): ElapsedTime;
|
|
@@ -198,19 +198,19 @@ export declare class ElapsedTime {
|
|
|
198
198
|
* Creates a temporary ElapsedTime instance and formats it in one operation.
|
|
199
199
|
*
|
|
200
200
|
* @param milliseconds - The total number of milliseconds to format
|
|
201
|
-
* @param format - The format string or predefined format name (default: '
|
|
201
|
+
* @param format - The format string or predefined format name (default: `'concise'`)
|
|
202
202
|
* @param options - Formatting options of type ITimeElapsedFormatOptions for customization
|
|
203
203
|
* @returns The formatted time string
|
|
204
204
|
*
|
|
205
205
|
* @example
|
|
206
206
|
* ```typescript
|
|
207
207
|
* // Quick formatting without creating an instance
|
|
208
|
-
* console.log(ElapsedTime.Format(3661000));
|
|
209
|
-
* console.log(ElapsedTime.Format(3661000, '
|
|
208
|
+
* console.log(ElapsedTime.Format(3661000)); // "1h 1m 1s"
|
|
209
|
+
* console.log(ElapsedTime.Format(3661000, 'long')); // "1 hour 1 minute 1 second"
|
|
210
210
|
*
|
|
211
211
|
* // With custom options
|
|
212
212
|
* const options = { maxUnits: 2, showZeroValues: false };
|
|
213
|
-
* console.log(ElapsedTime.Format(3661000, '
|
|
213
|
+
* console.log(ElapsedTime.Format(3661000, 'medium', options)); // "1 hour 1 min"
|
|
214
214
|
* ```
|
|
215
215
|
*/
|
|
216
216
|
static Format(milliseconds: number, format?: TTimeElapsedFormats, options?: Partial<ITimeElapsedFormatOptions>): string;
|
|
@@ -220,15 +220,15 @@ export declare class ElapsedTime {
|
|
|
220
220
|
* and custom formatting configurations.
|
|
221
221
|
*
|
|
222
222
|
* Available predefined formats:
|
|
223
|
-
* -
|
|
224
|
-
* -
|
|
225
|
-
* -
|
|
226
|
-
* -
|
|
227
|
-
* -
|
|
228
|
-
* -
|
|
229
|
-
* -
|
|
230
|
-
*
|
|
231
|
-
* @param format - The format string or predefined format name (default: '
|
|
223
|
+
* - **`'concise'`**: "1h 30m 45s" - Ultra-compact with single-letter units
|
|
224
|
+
* - **`'short'`**: "1hr 30min 45sec" - Abbreviated but readable units
|
|
225
|
+
* - **`'medium'`**: "1 hour 30 min 45 sec" - Balanced readability and length
|
|
226
|
+
* - **`'long'`**: "1 hour 30 minutes 45 seconds" - Full words with proper pluralization
|
|
227
|
+
* - **`'mostSignificant'`**: Shows only the 2 most significant units
|
|
228
|
+
* - **`'time'`**: "1:30" - Clock-style hours:minutes format
|
|
229
|
+
* - **`'timeWithSeconds'`**: "1:30:45" - Extended clock format with seconds
|
|
230
|
+
*
|
|
231
|
+
* @param format - The format string or predefined format name (default: `'concise'`)
|
|
232
232
|
* @param options - Formatting options of type ITimeElapsedFormatOptions for fine-tuned control
|
|
233
233
|
* @returns The formatted time string
|
|
234
234
|
*
|
|
@@ -237,12 +237,12 @@ export declare class ElapsedTime {
|
|
|
237
237
|
* const elapsed = new ElapsedTime(5425000); // 1h 30m 25s
|
|
238
238
|
*
|
|
239
239
|
* // Predefined formats
|
|
240
|
-
* elapsed.Format('
|
|
241
|
-
* elapsed.Format('
|
|
242
|
-
* elapsed.Format('
|
|
243
|
-
* elapsed.Format('
|
|
244
|
-
* elapsed.Format('
|
|
245
|
-
* elapsed.Format('
|
|
240
|
+
* elapsed.Format('concise'); // "1h 30m 25s"
|
|
241
|
+
* elapsed.Format('short'); // "1hr 30min 25sec"
|
|
242
|
+
* elapsed.Format('medium'); // "1 hour 30 min 25 sec"
|
|
243
|
+
* elapsed.Format('long'); // "1 hour 30 minutes 25 seconds"
|
|
244
|
+
* elapsed.Format('time'); // "1:30"
|
|
245
|
+
* elapsed.Format('timeWithSeconds'); // "1:30:25"
|
|
246
246
|
* ```
|
|
247
247
|
*
|
|
248
248
|
* @example
|
|
@@ -256,7 +256,7 @@ export declare class ElapsedTime {
|
|
|
256
256
|
* showZeroValues: false
|
|
257
257
|
* };
|
|
258
258
|
*
|
|
259
|
-
* elapsed.Format('
|
|
259
|
+
* elapsed.Format('medium', options); // "(1 hour 30 min)"
|
|
260
260
|
* ```
|
|
261
261
|
*
|
|
262
262
|
* @example
|
|
@@ -272,7 +272,7 @@ export declare class ElapsedTime {
|
|
|
272
272
|
* }
|
|
273
273
|
* };
|
|
274
274
|
*
|
|
275
|
-
* elapsed.Format('
|
|
275
|
+
* elapsed.Format('concise', customOptions); // "1 hrs 30 mins 25 secs"
|
|
276
276
|
* ```
|
|
277
277
|
*/
|
|
278
278
|
Format(format?: TTimeElapsedFormats, options?: Partial<ITimeElapsedFormatOptions>): string;
|
|
@@ -336,23 +336,6 @@ export declare class ElapsedTime {
|
|
|
336
336
|
* @private
|
|
337
337
|
*/
|
|
338
338
|
private static _FormatStandardUnits;
|
|
339
|
-
/**
|
|
340
|
-
* Determine if the unit labels represent a time format with colons.
|
|
341
|
-
* Analyzes the unit label configuration to detect TIME and TIME_WITH_SECONDS
|
|
342
|
-
* formats which require special colon-separated formatting.
|
|
343
|
-
*
|
|
344
|
-
* @param unitLabels - The unit labels to analyze
|
|
345
|
-
* @returns True if this is a colon-based time format, false for standard formats
|
|
346
|
-
* @private
|
|
347
|
-
*
|
|
348
|
-
* @example
|
|
349
|
-
* ```typescript
|
|
350
|
-
* // Internal usage - distinguishes between:
|
|
351
|
-
* // TIME format: "1:30" (colon-separated)
|
|
352
|
-
* // CONCISE format: "1h 30m" (space-separated with labels)
|
|
353
|
-
* ```
|
|
354
|
-
*/
|
|
355
|
-
private static _ValidateTimeFormat;
|
|
356
339
|
/**
|
|
357
340
|
* Filter and limit time units based on formatting options.
|
|
358
341
|
* Applies showZeroValues and maxUnits options to determine which
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elapsed-time.d.ts","sourceRoot":"","sources":["../../../src/time/elapsed-time/elapsed-time.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"elapsed-time.d.ts","sourceRoot":"","sources":["../../../src/time/elapsed-time/elapsed-time.ts"],"names":[],"mappings":"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"}
|
|
@@ -261,7 +261,7 @@ export class ElapsedTime {
|
|
|
261
261
|
* // ... some operation that takes time ...
|
|
262
262
|
* const end = Date.now();
|
|
263
263
|
* const duration = ElapsedTime.From(start, end);
|
|
264
|
-
* console.log(duration.Format('
|
|
264
|
+
* console.log(duration.Format('concise')); // "1s 250ms"
|
|
265
265
|
* ```
|
|
266
266
|
*
|
|
267
267
|
* @example
|
|
@@ -271,7 +271,7 @@ export class ElapsedTime {
|
|
|
271
271
|
* await someAsyncOperation();
|
|
272
272
|
* const end = performance.now();
|
|
273
273
|
* const duration = ElapsedTime.From(start, end);
|
|
274
|
-
* console.log(duration.Format('
|
|
274
|
+
* console.log(duration.Format('medium')); // "1 sec 250 ms"
|
|
275
275
|
* ```
|
|
276
276
|
*/
|
|
277
277
|
static From(start, stop) {
|
|
@@ -282,19 +282,19 @@ export class ElapsedTime {
|
|
|
282
282
|
* Creates a temporary ElapsedTime instance and formats it in one operation.
|
|
283
283
|
*
|
|
284
284
|
* @param milliseconds - The total number of milliseconds to format
|
|
285
|
-
* @param format - The format string or predefined format name (default: '
|
|
285
|
+
* @param format - The format string or predefined format name (default: `'concise'`)
|
|
286
286
|
* @param options - Formatting options of type ITimeElapsedFormatOptions for customization
|
|
287
287
|
* @returns The formatted time string
|
|
288
288
|
*
|
|
289
289
|
* @example
|
|
290
290
|
* ```typescript
|
|
291
291
|
* // Quick formatting without creating an instance
|
|
292
|
-
* console.log(ElapsedTime.Format(3661000));
|
|
293
|
-
* console.log(ElapsedTime.Format(3661000, '
|
|
292
|
+
* console.log(ElapsedTime.Format(3661000)); // "1h 1m 1s"
|
|
293
|
+
* console.log(ElapsedTime.Format(3661000, 'long')); // "1 hour 1 minute 1 second"
|
|
294
294
|
*
|
|
295
295
|
* // With custom options
|
|
296
296
|
* const options = { maxUnits: 2, showZeroValues: false };
|
|
297
|
-
* console.log(ElapsedTime.Format(3661000, '
|
|
297
|
+
* console.log(ElapsedTime.Format(3661000, 'medium', options)); // "1 hour 1 min"
|
|
298
298
|
* ```
|
|
299
299
|
*/
|
|
300
300
|
static Format(milliseconds, format = 'concise', options = {}) {
|
|
@@ -307,15 +307,15 @@ export class ElapsedTime {
|
|
|
307
307
|
* and custom formatting configurations.
|
|
308
308
|
*
|
|
309
309
|
* Available predefined formats:
|
|
310
|
-
* -
|
|
311
|
-
* -
|
|
312
|
-
* -
|
|
313
|
-
* -
|
|
314
|
-
* -
|
|
315
|
-
* -
|
|
316
|
-
* -
|
|
317
|
-
*
|
|
318
|
-
* @param format - The format string or predefined format name (default: '
|
|
310
|
+
* - **`'concise'`**: "1h 30m 45s" - Ultra-compact with single-letter units
|
|
311
|
+
* - **`'short'`**: "1hr 30min 45sec" - Abbreviated but readable units
|
|
312
|
+
* - **`'medium'`**: "1 hour 30 min 45 sec" - Balanced readability and length
|
|
313
|
+
* - **`'long'`**: "1 hour 30 minutes 45 seconds" - Full words with proper pluralization
|
|
314
|
+
* - **`'mostSignificant'`**: Shows only the 2 most significant units
|
|
315
|
+
* - **`'time'`**: "1:30" - Clock-style hours:minutes format
|
|
316
|
+
* - **`'timeWithSeconds'`**: "1:30:45" - Extended clock format with seconds
|
|
317
|
+
*
|
|
318
|
+
* @param format - The format string or predefined format name (default: `'concise'`)
|
|
319
319
|
* @param options - Formatting options of type ITimeElapsedFormatOptions for fine-tuned control
|
|
320
320
|
* @returns The formatted time string
|
|
321
321
|
*
|
|
@@ -324,12 +324,12 @@ export class ElapsedTime {
|
|
|
324
324
|
* const elapsed = new ElapsedTime(5425000); // 1h 30m 25s
|
|
325
325
|
*
|
|
326
326
|
* // Predefined formats
|
|
327
|
-
* elapsed.Format('
|
|
328
|
-
* elapsed.Format('
|
|
329
|
-
* elapsed.Format('
|
|
330
|
-
* elapsed.Format('
|
|
331
|
-
* elapsed.Format('
|
|
332
|
-
* elapsed.Format('
|
|
327
|
+
* elapsed.Format('concise'); // "1h 30m 25s"
|
|
328
|
+
* elapsed.Format('short'); // "1hr 30min 25sec"
|
|
329
|
+
* elapsed.Format('medium'); // "1 hour 30 min 25 sec"
|
|
330
|
+
* elapsed.Format('long'); // "1 hour 30 minutes 25 seconds"
|
|
331
|
+
* elapsed.Format('time'); // "1:30"
|
|
332
|
+
* elapsed.Format('timeWithSeconds'); // "1:30:25"
|
|
333
333
|
* ```
|
|
334
334
|
*
|
|
335
335
|
* @example
|
|
@@ -343,7 +343,7 @@ export class ElapsedTime {
|
|
|
343
343
|
* showZeroValues: false
|
|
344
344
|
* };
|
|
345
345
|
*
|
|
346
|
-
* elapsed.Format('
|
|
346
|
+
* elapsed.Format('medium', options); // "(1 hour 30 min)"
|
|
347
347
|
* ```
|
|
348
348
|
*
|
|
349
349
|
* @example
|
|
@@ -359,7 +359,7 @@ export class ElapsedTime {
|
|
|
359
359
|
* }
|
|
360
360
|
* };
|
|
361
361
|
*
|
|
362
|
-
* elapsed.Format('
|
|
362
|
+
* elapsed.Format('concise', customOptions); // "1 hrs 30 mins 25 secs"
|
|
363
363
|
* ```
|
|
364
364
|
*/
|
|
365
365
|
Format(format = 'concise', options = {}) {
|
|
@@ -384,7 +384,7 @@ export class ElapsedTime {
|
|
|
384
384
|
if (formatKey === 'long') {
|
|
385
385
|
return this._FormatLong(appliedOptions);
|
|
386
386
|
}
|
|
387
|
-
return this._FormatUsingTokens(appliedOptions);
|
|
387
|
+
return this._FormatUsingTokens(appliedOptions, formatKey);
|
|
388
388
|
}
|
|
389
389
|
/**
|
|
390
390
|
* Special formatter for LONG format with proper pluralization.
|
|
@@ -462,7 +462,7 @@ export class ElapsedTime {
|
|
|
462
462
|
* // Called automatically by Format() method for most format types
|
|
463
463
|
* ```
|
|
464
464
|
*/
|
|
465
|
-
_FormatUsingTokens(options) {
|
|
465
|
+
_FormatUsingTokens(options, formatKey = '') {
|
|
466
466
|
// Define all available time units
|
|
467
467
|
const units = [
|
|
468
468
|
{ unit: 'week', value: this.Weeks },
|
|
@@ -475,10 +475,11 @@ export class ElapsedTime {
|
|
|
475
475
|
// Filter and limit units based on options
|
|
476
476
|
const filteredUnits = ElapsedTime._FilterAndLimitUnits(units, options);
|
|
477
477
|
const unitLabels = options.unitLabels ?? DEFAULT_UNIT_LABELS.medium;
|
|
478
|
-
// Determine the formatting approach based on
|
|
478
|
+
// Determine the formatting approach based on the resolved format key.
|
|
479
|
+
// TIME and TIME_WITH_SECONDS use a colon-separated layout; all other
|
|
480
|
+
// predefined and custom formats use the standard token layout.
|
|
479
481
|
let formatted;
|
|
480
|
-
|
|
481
|
-
const isTimeFormat = ElapsedTime._ValidateTimeFormat(unitLabels);
|
|
482
|
+
const isTimeFormat = formatKey === 'time' || formatKey === 'timeWithSeconds';
|
|
482
483
|
if (isTimeFormat) {
|
|
483
484
|
formatted = ElapsedTime._FormatTimeUnits(filteredUnits, unitLabels);
|
|
484
485
|
}
|
|
@@ -531,40 +532,18 @@ export class ElapsedTime {
|
|
|
531
532
|
if (unitLabels === DEFAULT_UNIT_LABELS.medium) {
|
|
532
533
|
return units.map(({ unit, value }) => `${value} ${unitLabels[unit]}`).join(' ');
|
|
533
534
|
}
|
|
534
|
-
// Custom labels
|
|
535
|
+
// Custom labels: join with a space so units are properly separated.
|
|
535
536
|
return units.map(({ unit, value }) => {
|
|
536
537
|
const label = unitLabels[unit];
|
|
537
538
|
if (typeof label === 'undefined')
|
|
538
539
|
return '';
|
|
539
|
-
//
|
|
540
|
+
// Labels that begin with a space or punctuation already carry their
|
|
541
|
+
// own leading separator, so skip the extra space.
|
|
540
542
|
if (typeof label === 'string' && (label.startsWith(' ') || label.startsWith(','))) {
|
|
541
543
|
return `${value}${label}`;
|
|
542
544
|
}
|
|
543
|
-
// Handle special case for custom labels with commas - used in tests
|
|
544
|
-
if (typeof label === 'string' && label.trim().endsWith(',')) {
|
|
545
|
-
return `${value} ${label}`;
|
|
546
|
-
}
|
|
547
545
|
return `${value} ${label}`;
|
|
548
|
-
}).join('')
|
|
549
|
-
}
|
|
550
|
-
/**
|
|
551
|
-
* Determine if the unit labels represent a time format with colons.
|
|
552
|
-
* Analyzes the unit label configuration to detect TIME and TIME_WITH_SECONDS
|
|
553
|
-
* formats which require special colon-separated formatting.
|
|
554
|
-
*
|
|
555
|
-
* @param unitLabels - The unit labels to analyze
|
|
556
|
-
* @returns True if this is a colon-based time format, false for standard formats
|
|
557
|
-
* @private
|
|
558
|
-
*
|
|
559
|
-
* @example
|
|
560
|
-
* ```typescript
|
|
561
|
-
* // Internal usage - distinguishes between:
|
|
562
|
-
* // TIME format: "1:30" (colon-separated)
|
|
563
|
-
* // CONCISE format: "1h 30m" (space-separated with labels)
|
|
564
|
-
* ```
|
|
565
|
-
*/
|
|
566
|
-
static _ValidateTimeFormat(unitLabels) {
|
|
567
|
-
return Boolean(unitLabels.hour && typeof unitLabels.hour === 'function' && unitLabels.minute && typeof unitLabels.minute === 'function' && (String(unitLabels.hour).includes(':') || String(unitLabels.minute).includes('padStart')));
|
|
546
|
+
}).join(' ');
|
|
568
547
|
}
|
|
569
548
|
/**
|
|
570
549
|
* Filter and limit time units based on formatting options.
|