@ls-stack/utils 3.65.0 → 3.67.0
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/dist/{arrayUtils.d.cts → arrayUtils.d.mts} +24 -23
- package/dist/arrayUtils.mjs +249 -0
- package/dist/assertions-qMxfVhSu.mjs +207 -0
- package/dist/{assertions.d.ts → assertions.d.mts} +4 -3
- package/dist/assertions.mjs +3 -0
- package/dist/asyncQueue.d.mts +497 -0
- package/dist/asyncQueue.mjs +757 -0
- package/dist/{awaitDebounce.d.cts → awaitDebounce.d.mts} +11 -6
- package/dist/awaitDebounce.mjs +54 -0
- package/dist/{cache.d.ts → cache.d.mts} +76 -68
- package/dist/cache.mjs +355 -0
- package/dist/castValues-DfICShCc.mjs +19 -0
- package/dist/{castValues.d.cts → castValues.d.mts} +3 -2
- package/dist/castValues.mjs +3 -0
- package/dist/{concurrentCalls.d.ts → concurrentCalls.d.mts} +74 -65
- package/dist/concurrentCalls.mjs +295 -0
- package/dist/consoleFmt.d.mts +55 -0
- package/dist/consoleFmt.mjs +63 -0
- package/dist/conversions-DTmwEMIu.mjs +12 -0
- package/dist/conversions.d.mts +4 -0
- package/dist/conversions.mjs +3 -0
- package/dist/createThrottleController.d.mts +18 -0
- package/dist/createThrottleController.mjs +40 -0
- package/dist/debounce.d.mts +47 -0
- package/dist/debounce.mjs +117 -0
- package/dist/dedent.d.mts +74 -0
- package/dist/dedent.mjs +80 -0
- package/dist/deepEqual-C7EZEixx.mjs +78 -0
- package/dist/{deepEqual.d.cts → deepEqual.d.mts} +3 -2
- package/dist/deepEqual.mjs +3 -0
- package/dist/{deepReplaceValues.d.cts → deepReplaceValues.d.mts} +4 -3
- package/dist/deepReplaceValues.mjs +61 -0
- package/dist/diffParser.d.mts +79 -0
- package/dist/diffParser.mjs +424 -0
- package/dist/enhancedMap.d.mts +21 -0
- package/dist/enhancedMap.mjs +69 -0
- package/dist/exhaustiveMatch.d.mts +10 -0
- package/dist/exhaustiveMatch.mjs +48 -0
- package/dist/{filterObjectOrArrayKeys.d.cts → filterObjectOrArrayKeys.d.mts} +15 -8
- package/dist/filterObjectOrArrayKeys.mjs +497 -0
- package/dist/{getAutoIncrementId.d.cts → getAutoIncrementId.d.mts} +9 -5
- package/dist/getAutoIncrementId.mjs +53 -0
- package/dist/{getCompositeKey.d.cts → getCompositeKey.d.mts} +3 -2
- package/dist/getCompositeKey.mjs +50 -0
- package/dist/{getValueStableKey.d.cts → getValueStableKey.d.mts} +5 -3
- package/dist/getValueStableKey.mjs +17 -0
- package/dist/{hash.d.cts → hash.d.mts} +3 -2
- package/dist/hash.mjs +28 -0
- package/dist/interpolate.d.mts +17 -0
- package/dist/interpolate.mjs +28 -0
- package/dist/{iteratorUtils.d.cts → iteratorUtils.d.mts} +5 -4
- package/dist/iteratorUtils.mjs +39 -0
- package/dist/keepPrevIfUnchanged.d.mts +12 -0
- package/dist/keepPrevIfUnchanged.mjs +9 -0
- package/dist/keyedMap.d.mts +76 -0
- package/dist/keyedMap.mjs +139 -0
- package/dist/keyedSet.d.mts +77 -0
- package/dist/keyedSet.mjs +129 -0
- package/dist/{levenshtein.d.cts → levenshtein.d.mts} +3 -2
- package/dist/levenshtein.mjs +121 -0
- package/dist/main.d.mts +4 -0
- package/dist/main.mjs +7 -0
- package/dist/matchPath.d.mts +50 -0
- package/dist/matchPath.mjs +81 -0
- package/dist/mathUtils-BDP1lM_z.mjs +81 -0
- package/dist/{mathUtils.d.cts → mathUtils.d.mts} +3 -2
- package/dist/mathUtils.mjs +3 -0
- package/dist/{mutationUtils.d.cts → mutationUtils.d.mts} +6 -5
- package/dist/mutationUtils.mjs +44 -0
- package/dist/{objUtils.d.ts → objUtils.d.mts} +8 -6
- package/dist/objUtils.mjs +115 -0
- package/dist/parallelAsyncCalls.d.mts +83 -0
- package/dist/parallelAsyncCalls.mjs +121 -0
- package/dist/partialEqual.d.mts +139 -0
- package/dist/partialEqual.mjs +1055 -0
- package/dist/promiseUtils.d.mts +9 -0
- package/dist/promiseUtils.mjs +17 -0
- package/dist/regexUtils.d.mts +18 -0
- package/dist/regexUtils.mjs +34 -0
- package/dist/{retryOnError.d.cts → retryOnError.d.mts} +38 -37
- package/dist/retryOnError.mjs +91 -0
- package/dist/{runShellCmd.d.ts → runShellCmd.d.mts} +24 -15
- package/dist/runShellCmd.mjs +151 -0
- package/dist/{safeJson.d.cts → safeJson.d.mts} +3 -2
- package/dist/safeJson.mjs +30 -0
- package/dist/{saferTyping.d.cts → saferTyping.d.mts} +4 -3
- package/dist/saferTyping.mjs +45 -0
- package/dist/serializeXML.d.mts +23 -0
- package/dist/serializeXML.mjs +74 -0
- package/dist/{shallowEqual.d.cts → shallowEqual.d.mts} +3 -2
- package/dist/shallowEqual.mjs +54 -0
- package/dist/sleep.d.mts +4 -0
- package/dist/sleep.mjs +7 -0
- package/dist/stringUtils-DjhWOiYn.mjs +113 -0
- package/dist/{stringUtils.d.cts → stringUtils.d.mts} +3 -2
- package/dist/stringUtils.mjs +3 -0
- package/dist/{testUtils.d.ts → testUtils.d.mts} +83 -52
- package/dist/testUtils.mjs +310 -0
- package/dist/{throttle.d.ts → throttle.d.mts} +18 -17
- package/dist/throttle.mjs +102 -0
- package/dist/time-sr2lhQRw.mjs +67 -0
- package/dist/{time.d.ts → time.d.mts} +8 -7
- package/dist/time.mjs +3 -0
- package/dist/{timers.d.cts → timers.d.mts} +22 -13
- package/dist/timers.mjs +220 -0
- package/dist/{tsResult.d.cts → tsResult.d.mts} +52 -48
- package/dist/tsResult.mjs +142 -0
- package/dist/typeGuards-B1mzA-Rz.mjs +128 -0
- package/dist/{typeGuards.d.cts → typeGuards.d.mts} +3 -2
- package/dist/typeGuards.mjs +3 -0
- package/dist/{typeUtils.d.ts → typeUtils.d.mts} +13 -34
- package/dist/typeUtils.mjs +1 -0
- package/dist/{typedStrings.d.cts → typedStrings.d.mts} +5 -4
- package/dist/typedStrings.mjs +131 -0
- package/dist/typingFnUtils-Bb8drgKF.mjs +101 -0
- package/dist/{typingFnUtils.d.cts → typingFnUtils.d.mts} +13 -22
- package/dist/typingFnUtils.mjs +3 -0
- package/dist/{typingTestUtils.d.cts → typingTestUtils.d.mts} +11 -15
- package/dist/typingTestUtils.mjs +80 -0
- package/dist/typingUtils.d.mts +20 -0
- package/dist/typingUtils.mjs +1 -0
- package/dist/yamlStringify.d.mts +17 -0
- package/dist/yamlStringify.mjs +189 -0
- package/package.json +65 -242
- package/dist/arrayUtils.cjs +0 -229
- package/dist/arrayUtils.d.ts +0 -171
- package/dist/arrayUtils.js +0 -42
- package/dist/assertions.cjs +0 -107
- package/dist/assertions.d.cts +0 -192
- package/dist/assertions.js +0 -25
- package/dist/asyncQueue.cjs +0 -672
- package/dist/asyncQueue.d.cts +0 -488
- package/dist/asyncQueue.d.ts +0 -488
- package/dist/asyncQueue.js +0 -631
- package/dist/awaitDebounce.cjs +0 -106
- package/dist/awaitDebounce.d.ts +0 -41
- package/dist/awaitDebounce.js +0 -28
- package/dist/cache.cjs +0 -367
- package/dist/cache.d.cts +0 -228
- package/dist/cache.js +0 -19
- package/dist/castValues.cjs +0 -50
- package/dist/castValues.d.ts +0 -4
- package/dist/castValues.js +0 -8
- package/dist/chunk-5DZT3Z5Z.js +0 -8
- package/dist/chunk-6FBIEPWU.js +0 -96
- package/dist/chunk-6FIBVC2P.js +0 -56
- package/dist/chunk-7CQPOM5I.js +0 -100
- package/dist/chunk-B6DNOZCP.js +0 -369
- package/dist/chunk-BM4PYVOX.js +0 -109
- package/dist/chunk-C2SVCIWE.js +0 -57
- package/dist/chunk-CCUPDGSZ.js +0 -132
- package/dist/chunk-DBOWTYR4.js +0 -49
- package/dist/chunk-DFXNVEH6.js +0 -14
- package/dist/chunk-DX2524CZ.js +0 -314
- package/dist/chunk-GMJTLFM6.js +0 -60
- package/dist/chunk-IATIXMCE.js +0 -20
- package/dist/chunk-II4R3VVX.js +0 -25
- package/dist/chunk-JF2MDHOJ.js +0 -40
- package/dist/chunk-JQFUKJU5.js +0 -71
- package/dist/chunk-MI4UE2PQ.js +0 -561
- package/dist/chunk-PUKVXYYL.js +0 -52
- package/dist/chunk-QQS7I7ZL.js +0 -16
- package/dist/chunk-VAAMRG4K.js +0 -20
- package/dist/chunk-WFQJUJTC.js +0 -182
- package/dist/chunk-ZXIKIA5B.js +0 -178
- package/dist/concurrentCalls.cjs +0 -406
- package/dist/concurrentCalls.d.cts +0 -116
- package/dist/concurrentCalls.js +0 -346
- package/dist/consoleFmt.cjs +0 -85
- package/dist/consoleFmt.d.cts +0 -54
- package/dist/consoleFmt.d.ts +0 -54
- package/dist/consoleFmt.js +0 -60
- package/dist/conversions.cjs +0 -44
- package/dist/conversions.d.cts +0 -3
- package/dist/conversions.d.ts +0 -3
- package/dist/conversions.js +0 -6
- package/dist/createThrottleController.cjs +0 -193
- package/dist/createThrottleController.d.cts +0 -13
- package/dist/createThrottleController.d.ts +0 -13
- package/dist/createThrottleController.js +0 -61
- package/dist/debounce.cjs +0 -157
- package/dist/debounce.d.cts +0 -46
- package/dist/debounce.d.ts +0 -46
- package/dist/debounce.js +0 -8
- package/dist/dedent.cjs +0 -104
- package/dist/dedent.d.cts +0 -73
- package/dist/dedent.d.ts +0 -73
- package/dist/dedent.js +0 -79
- package/dist/deepEqual.cjs +0 -96
- package/dist/deepEqual.d.ts +0 -21
- package/dist/deepEqual.js +0 -8
- package/dist/deepReplaceValues.cjs +0 -87
- package/dist/deepReplaceValues.d.ts +0 -27
- package/dist/deepReplaceValues.js +0 -7
- package/dist/enhancedMap.cjs +0 -131
- package/dist/enhancedMap.d.cts +0 -20
- package/dist/enhancedMap.d.ts +0 -20
- package/dist/enhancedMap.js +0 -10
- package/dist/exhaustiveMatch.cjs +0 -66
- package/dist/exhaustiveMatch.d.cts +0 -9
- package/dist/exhaustiveMatch.d.ts +0 -9
- package/dist/exhaustiveMatch.js +0 -40
- package/dist/filterObjectOrArrayKeys.cjs +0 -619
- package/dist/filterObjectOrArrayKeys.d.ts +0 -88
- package/dist/filterObjectOrArrayKeys.js +0 -9
- package/dist/getAutoIncrementId.cjs +0 -44
- package/dist/getAutoIncrementId.d.ts +0 -46
- package/dist/getAutoIncrementId.js +0 -18
- package/dist/getCompositeKey.cjs +0 -86
- package/dist/getCompositeKey.d.ts +0 -11
- package/dist/getCompositeKey.js +0 -8
- package/dist/getValueStableKey.cjs +0 -89
- package/dist/getValueStableKey.d.ts +0 -15
- package/dist/getValueStableKey.js +0 -11
- package/dist/hash.cjs +0 -57
- package/dist/hash.d.ts +0 -7
- package/dist/hash.js +0 -32
- package/dist/interpolate.cjs +0 -88
- package/dist/interpolate.d.cts +0 -11
- package/dist/interpolate.d.ts +0 -11
- package/dist/interpolate.js +0 -46
- package/dist/iteratorUtils.cjs +0 -73
- package/dist/iteratorUtils.d.ts +0 -10
- package/dist/iteratorUtils.js +0 -44
- package/dist/keepPrevIfUnchanged.cjs +0 -102
- package/dist/keepPrevIfUnchanged.d.cts +0 -7
- package/dist/keepPrevIfUnchanged.d.ts +0 -7
- package/dist/keepPrevIfUnchanged.js +0 -7
- package/dist/keyedMap.cjs +0 -224
- package/dist/keyedMap.d.cts +0 -75
- package/dist/keyedMap.d.ts +0 -75
- package/dist/keyedMap.js +0 -145
- package/dist/keyedSet.cjs +0 -205
- package/dist/keyedSet.d.cts +0 -76
- package/dist/keyedSet.d.ts +0 -76
- package/dist/keyedSet.js +0 -126
- package/dist/levenshtein.cjs +0 -180
- package/dist/levenshtein.d.ts +0 -5
- package/dist/levenshtein.js +0 -153
- package/dist/main.cjs +0 -32
- package/dist/main.d.cts +0 -3
- package/dist/main.d.ts +0 -3
- package/dist/main.js +0 -7
- package/dist/matchPath.cjs +0 -155
- package/dist/matchPath.d.cts +0 -53
- package/dist/matchPath.d.ts +0 -53
- package/dist/matchPath.js +0 -108
- package/dist/mathUtils.cjs +0 -81
- package/dist/mathUtils.d.ts +0 -54
- package/dist/mathUtils.js +0 -22
- package/dist/mutationUtils.cjs +0 -153
- package/dist/mutationUtils.d.ts +0 -15
- package/dist/mutationUtils.js +0 -55
- package/dist/objUtils.cjs +0 -242
- package/dist/objUtils.d.cts +0 -28
- package/dist/objUtils.js +0 -38
- package/dist/parallelAsyncCalls.cjs +0 -162
- package/dist/parallelAsyncCalls.d.cts +0 -82
- package/dist/parallelAsyncCalls.d.ts +0 -82
- package/dist/parallelAsyncCalls.js +0 -126
- package/dist/partialEqual.cjs +0 -1196
- package/dist/partialEqual.d.cts +0 -141
- package/dist/partialEqual.d.ts +0 -141
- package/dist/partialEqual.js +0 -1168
- package/dist/promiseUtils.cjs +0 -38
- package/dist/promiseUtils.d.cts +0 -8
- package/dist/promiseUtils.d.ts +0 -8
- package/dist/promiseUtils.js +0 -6
- package/dist/regexUtils.cjs +0 -60
- package/dist/regexUtils.d.cts +0 -17
- package/dist/regexUtils.d.ts +0 -17
- package/dist/regexUtils.js +0 -33
- package/dist/retryOnError.cjs +0 -130
- package/dist/retryOnError.d.ts +0 -83
- package/dist/retryOnError.js +0 -101
- package/dist/runShellCmd.cjs +0 -127
- package/dist/runShellCmd.d.cts +0 -90
- package/dist/runShellCmd.js +0 -98
- package/dist/safeJson.cjs +0 -45
- package/dist/safeJson.d.ts +0 -16
- package/dist/safeJson.js +0 -8
- package/dist/saferTyping.cjs +0 -52
- package/dist/saferTyping.d.ts +0 -47
- package/dist/saferTyping.js +0 -23
- package/dist/serializeXML.cjs +0 -154
- package/dist/serializeXML.d.cts +0 -22
- package/dist/serializeXML.d.ts +0 -22
- package/dist/serializeXML.js +0 -116
- package/dist/shallowEqual.cjs +0 -88
- package/dist/shallowEqual.d.ts +0 -4
- package/dist/shallowEqual.js +0 -63
- package/dist/sleep.cjs +0 -32
- package/dist/sleep.d.cts +0 -3
- package/dist/sleep.d.ts +0 -3
- package/dist/sleep.js +0 -6
- package/dist/stringUtils.cjs +0 -155
- package/dist/stringUtils.d.ts +0 -55
- package/dist/stringUtils.js +0 -50
- package/dist/testUtils.cjs +0 -1490
- package/dist/testUtils.d.cts +0 -133
- package/dist/testUtils.js +0 -359
- package/dist/throttle.cjs +0 -282
- package/dist/throttle.d.cts +0 -98
- package/dist/throttle.js +0 -38
- package/dist/time.cjs +0 -152
- package/dist/time.d.cts +0 -25
- package/dist/time.js +0 -38
- package/dist/timers.cjs +0 -194
- package/dist/timers.d.ts +0 -121
- package/dist/timers.js +0 -156
- package/dist/tsResult.cjs +0 -226
- package/dist/tsResult.d.ts +0 -114
- package/dist/tsResult.js +0 -180
- package/dist/typeGuards.cjs +0 -70
- package/dist/typeGuards.d.ts +0 -111
- package/dist/typeGuards.js +0 -18
- package/dist/typeUtils.cjs +0 -18
- package/dist/typeUtils.d.cts +0 -61
- package/dist/typeUtils.js +0 -0
- package/dist/typedStrings.cjs +0 -90
- package/dist/typedStrings.d.ts +0 -163
- package/dist/typedStrings.js +0 -57
- package/dist/typingFnUtils.cjs +0 -96
- package/dist/typingFnUtils.d.ts +0 -100
- package/dist/typingFnUtils.js +0 -30
- package/dist/typingTestUtils.cjs +0 -52
- package/dist/typingTestUtils.d.ts +0 -79
- package/dist/typingTestUtils.js +0 -27
- package/dist/typingUtils.cjs +0 -18
- package/dist/typingUtils.d.cts +0 -35
- package/dist/typingUtils.d.ts +0 -35
- package/dist/typingUtils.js +0 -0
- package/dist/yamlStringify.cjs +0 -423
- package/dist/yamlStringify.d.cts +0 -10
- package/dist/yamlStringify.d.ts +0 -10
- package/dist/yamlStringify.js +0 -9
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { s as isTruthy } from "./typeGuards-B1mzA-Rz.mjs";
|
|
2
|
+
import { filterAndMap } from "./arrayUtils.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/serializeXML.ts
|
|
5
|
+
const XML_TAG_NAME_REGEX = /^[a-zA-Z_][a-zA-Z0-9._-]*$/;
|
|
6
|
+
const XML_PREFIX_REGEX = /^xml/i;
|
|
7
|
+
const XML_ESCAPE_MAP = {
|
|
8
|
+
"&": "&",
|
|
9
|
+
"<": "<",
|
|
10
|
+
">": ">",
|
|
11
|
+
"\"": """,
|
|
12
|
+
"'": "'"
|
|
13
|
+
};
|
|
14
|
+
const XML_ESCAPE_REGEX = /[&<>"']/g;
|
|
15
|
+
function serializeXML(node, options) {
|
|
16
|
+
if (Array.isArray(node)) {
|
|
17
|
+
const EMPTY_LINE_MARKER = "\0EMPTY_LINE\0";
|
|
18
|
+
return node.filter(isTruthy).map((n) => {
|
|
19
|
+
if (n.type === "emptyLine") return EMPTY_LINE_MARKER;
|
|
20
|
+
return serializeWithLevel(n, options, 0);
|
|
21
|
+
}).filter(isTruthy).join(options?.indent ? "\n" : "").replace(new RegExp(EMPTY_LINE_MARKER, "g"), "");
|
|
22
|
+
}
|
|
23
|
+
return serializeWithLevel(node, options, 0);
|
|
24
|
+
}
|
|
25
|
+
function serializeWithLevel(node, options = {}, level) {
|
|
26
|
+
const { indent, escapeText: globalEscapeText = false, validateTagName = true, invalidNodes = "throw" } = options;
|
|
27
|
+
const indentStr = indent ? getIndentString(indent, level) : "";
|
|
28
|
+
const newline = indent ? "\n" : "";
|
|
29
|
+
if (node.type === "comment") return `${indentStr}<!-- ${(node.escapeText !== void 0 ? node.escapeText : globalEscapeText) ? escapeXml(node.content) : node.content} -->`;
|
|
30
|
+
if (node.type === "emptyLine") return "";
|
|
31
|
+
const { name, attrs: attributes = {}, children, escapeText: nodeEscapeText } = node;
|
|
32
|
+
const shouldEscapeText = nodeEscapeText !== void 0 ? nodeEscapeText : globalEscapeText;
|
|
33
|
+
if (validateTagName && !isValidXmlTagName(name)) {
|
|
34
|
+
if (invalidNodes === "throw") throw new Error(`Invalid XML tag name: "${name}"`);
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
const attributesStr = filterAndMap(Object.entries(attributes), ([key, value]) => value !== null && value !== void 0 ? `${key}="${escapeXml(String(value))}"` : false).join(" ");
|
|
38
|
+
const attributesPart = attributesStr ? ` ${attributesStr}` : "";
|
|
39
|
+
if (children === void 0) return `${indentStr}<${name}${attributesPart} />`;
|
|
40
|
+
if (typeof children === "string") {
|
|
41
|
+
const processedText = shouldEscapeText ? escapeXml(children) : children;
|
|
42
|
+
if (processedText.includes("\n") && indent) {
|
|
43
|
+
const lines = processedText.split("\n");
|
|
44
|
+
const contentIndent = getIndentString(indent, level + 1);
|
|
45
|
+
return `${indentStr}<${name}${attributesPart}>\n${contentIndent}${lines.map((line, index) => {
|
|
46
|
+
if (line.trim() === "") return "";
|
|
47
|
+
return index === 0 ? line : contentIndent + line;
|
|
48
|
+
}).join("\n")}\n${indentStr}</${name}>`;
|
|
49
|
+
}
|
|
50
|
+
return `${indentStr}<${name}${attributesPart}>${processedText}</${name}>`;
|
|
51
|
+
}
|
|
52
|
+
if (children.length === 0) return `${indentStr}<${name}${attributesPart}></${name}>`;
|
|
53
|
+
const serializedChildren = filterAndMap(children, (child) => {
|
|
54
|
+
if (!child) return false;
|
|
55
|
+
return serializeWithLevel(child, options, level + 1) || false;
|
|
56
|
+
});
|
|
57
|
+
if (serializedChildren.length === 0) return `${indentStr}<${name}${attributesPart}></${name}>`;
|
|
58
|
+
return `${indentStr}<${name}${attributesPart}>${newline}${serializedChildren.join(newline)}${newline}${indentStr}</${name}>`;
|
|
59
|
+
}
|
|
60
|
+
function getIndentString(indent, level) {
|
|
61
|
+
if (typeof indent === "string") return indent.repeat(level);
|
|
62
|
+
return " ".repeat(indent * level);
|
|
63
|
+
}
|
|
64
|
+
function isValidXmlTagName(name) {
|
|
65
|
+
if (!name) return false;
|
|
66
|
+
if (XML_PREFIX_REGEX.test(name)) return false;
|
|
67
|
+
return XML_TAG_NAME_REGEX.test(name);
|
|
68
|
+
}
|
|
69
|
+
function escapeXml(text) {
|
|
70
|
+
return text.replace(XML_ESCAPE_REGEX, (char) => XML_ESCAPE_MAP[char]);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
export { serializeXML };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//#region src/shallowEqual.ts
|
|
2
|
+
var has = Object.prototype.hasOwnProperty;
|
|
3
|
+
function find(iter, tar, key) {
|
|
4
|
+
for (key of iter.keys()) if (key === tar) return key;
|
|
5
|
+
}
|
|
6
|
+
/** Shallow equal version of https://github.com/lukeed/dequal */
|
|
7
|
+
function shallowEqual(foo, bar) {
|
|
8
|
+
var ctor, len, tmp;
|
|
9
|
+
if (foo === bar) return true;
|
|
10
|
+
if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
|
|
11
|
+
if (ctor === Date) return shallowEqual(foo.getTime(), bar.getTime());
|
|
12
|
+
if (ctor === RegExp) return foo.toString() === bar.toString();
|
|
13
|
+
if (ctor === Array) {
|
|
14
|
+
if ((len = foo.length) === bar.length) while (len-- && foo[len] === bar[len]);
|
|
15
|
+
return len === -1;
|
|
16
|
+
}
|
|
17
|
+
if (ctor === Set) {
|
|
18
|
+
if (foo.size !== bar.size) return false;
|
|
19
|
+
for (len of foo) {
|
|
20
|
+
tmp = len;
|
|
21
|
+
if (tmp && typeof tmp === "object") {
|
|
22
|
+
tmp = find(bar, tmp);
|
|
23
|
+
if (!tmp) return false;
|
|
24
|
+
}
|
|
25
|
+
if (!bar.has(tmp)) return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
if (ctor === Map) {
|
|
30
|
+
if (foo.size !== bar.size) return false;
|
|
31
|
+
for (len of foo) {
|
|
32
|
+
tmp = len[0];
|
|
33
|
+
if (tmp && typeof tmp === "object") {
|
|
34
|
+
tmp = find(bar, tmp);
|
|
35
|
+
if (!tmp) return false;
|
|
36
|
+
}
|
|
37
|
+
if (len[1] !== bar.get(tmp)) return false;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (!ctor || typeof foo === "object") {
|
|
42
|
+
len = 0;
|
|
43
|
+
for (ctor in foo) {
|
|
44
|
+
if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
|
|
45
|
+
if (!(ctor in bar) || !(foo[ctor] === bar[ctor])) return false;
|
|
46
|
+
}
|
|
47
|
+
return Object.keys(bar).length === len;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return foo !== foo && bar !== bar;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
//#endregion
|
|
54
|
+
export { shallowEqual };
|
package/dist/sleep.d.mts
ADDED
package/dist/sleep.mjs
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
//#region src/stringUtils.ts
|
|
2
|
+
/**
|
|
3
|
+
* A util to create more legible conditional concatenated strings
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* joinStrings('a', 'b', 'c'); // 'abc'
|
|
7
|
+
* joinStrings('a', false, 'c'); // 'ac'
|
|
8
|
+
* joinStrings('a', addBString ? 'b' : null, 'c'); // 'ac' if addBString is false, 'abc' if addBString is true
|
|
9
|
+
*
|
|
10
|
+
* @param args
|
|
11
|
+
*/
|
|
12
|
+
function concatStrings(...args) {
|
|
13
|
+
const strings = [];
|
|
14
|
+
for (let i = 0; i < args.length; i++) {
|
|
15
|
+
const arg = args[i];
|
|
16
|
+
if (!arg) continue;
|
|
17
|
+
if (Array.isArray(arg)) {
|
|
18
|
+
strings.push(concatStrings(...arg));
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
strings.push(arg);
|
|
22
|
+
}
|
|
23
|
+
return strings.join("");
|
|
24
|
+
}
|
|
25
|
+
/** @deprecated Use {@link concatStrings} instead */
|
|
26
|
+
const joinStrings = concatStrings;
|
|
27
|
+
function formatNum(num, maxDecimalsOrOptions = 2) {
|
|
28
|
+
const options = typeof maxDecimalsOrOptions === "number" ? { maximumFractionDigits: maxDecimalsOrOptions } : maxDecimalsOrOptions;
|
|
29
|
+
return num.toLocaleString("en-US", options);
|
|
30
|
+
}
|
|
31
|
+
/** Check if a string is `snake_case` */
|
|
32
|
+
function isSnakeCase(str) {
|
|
33
|
+
return /^[a-z0-9_]+$/.test(str);
|
|
34
|
+
}
|
|
35
|
+
/** Check if a string is `kebab-case` */
|
|
36
|
+
function isKebabCase(str) {
|
|
37
|
+
return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(str);
|
|
38
|
+
}
|
|
39
|
+
/** Check if a string is `PascalCase` */
|
|
40
|
+
function isPascalCase(str) {
|
|
41
|
+
return /^[A-Z][a-zA-Z0-9]*$/.test(str);
|
|
42
|
+
}
|
|
43
|
+
/** Check if a string is `camelCase` */
|
|
44
|
+
function isCamelCase(str) {
|
|
45
|
+
return /^[a-z][a-zA-Z0-9]*$/.test(str);
|
|
46
|
+
}
|
|
47
|
+
/** Check if a string is `Title Case` */
|
|
48
|
+
function isTitleCase(str) {
|
|
49
|
+
return /^[A-Z][a-z0-9]*( ([A-Z][a-z0-9]*|[0-9]+))*$/.test(str);
|
|
50
|
+
}
|
|
51
|
+
/** Check if a string is `Sentence Case` */
|
|
52
|
+
function isSentenceCase(str) {
|
|
53
|
+
return /^[A-Z][a-z0-9]*( [a-z0-9]+)*$/.test(str);
|
|
54
|
+
}
|
|
55
|
+
/** Check if a string is `CONSTANT_CASE` */
|
|
56
|
+
function isConstantCase(str) {
|
|
57
|
+
return /^[A-Z_][A-Z0-9_]*$/.test(str);
|
|
58
|
+
}
|
|
59
|
+
/** Check if a string is `dot.case` */
|
|
60
|
+
function isDotCase(str) {
|
|
61
|
+
return /^[a-z0-9]+(\.[a-z0-9]+)*$/.test(str);
|
|
62
|
+
}
|
|
63
|
+
/** Check if a string is `path/case` */
|
|
64
|
+
function isPathCase(str) {
|
|
65
|
+
return /^[a-z0-9]+(\/[a-z0-9]+)*$/.test(str);
|
|
66
|
+
}
|
|
67
|
+
/** Convert a string to `kebab-case` */
|
|
68
|
+
function convertToKebabCase(str) {
|
|
69
|
+
return convertToSnakeCase(str).replace(/_/g, "-");
|
|
70
|
+
}
|
|
71
|
+
/** Convert a string to `snake_case` */
|
|
72
|
+
function convertToSnakeCase(str) {
|
|
73
|
+
return str.replace(/[\s\-.]+/g, "_").replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/([A-Z])([A-Z][a-z])/g, "$1_$2").toLowerCase().replace(/[^a-z0-9_]/g, "").replace(/^_+|_+$/g, "").replace(/_+/g, "_");
|
|
74
|
+
}
|
|
75
|
+
/** Convert a string to `PascalCase` */
|
|
76
|
+
function convertToPascalCase(str) {
|
|
77
|
+
return str.split(/[\s_-]+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
|
|
78
|
+
}
|
|
79
|
+
/** Convert a string to `camelCase` */
|
|
80
|
+
function convertToCamelCase(str) {
|
|
81
|
+
const pascalCase = convertToPascalCase(str);
|
|
82
|
+
return pascalCase.charAt(0).toLowerCase() + pascalCase.slice(1);
|
|
83
|
+
}
|
|
84
|
+
/** Convert a string to `Sentence Case` */
|
|
85
|
+
function convertToSentenceCase(str) {
|
|
86
|
+
return str.replace(/[\s\-.]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z])([A-Z][a-z])/g, "$1 $2").split(/[\s_-]+/).map((word) => word.toLowerCase()).join(" ").replace(/^\w/, (char) => char.toUpperCase());
|
|
87
|
+
}
|
|
88
|
+
/** Convert a string to `Title Case` */
|
|
89
|
+
function convertToTitleCase(str) {
|
|
90
|
+
return str.replace(/[\s\-.]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z])([A-Z][a-z])/g, "$1 $2").split(/[\s_-]+/).map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(" ");
|
|
91
|
+
}
|
|
92
|
+
/** Convert a string to `CONSTANT_CASE` */
|
|
93
|
+
function convertToConstantCase(str) {
|
|
94
|
+
return convertToSnakeCase(str).toUpperCase();
|
|
95
|
+
}
|
|
96
|
+
/** Convert a string to `dot.case` */
|
|
97
|
+
function convertToDotCase(str) {
|
|
98
|
+
return convertToSnakeCase(str).replace(/_/g, ".");
|
|
99
|
+
}
|
|
100
|
+
/** Convert a string to `path/case` */
|
|
101
|
+
function convertToPathCase(str) {
|
|
102
|
+
return convertToSnakeCase(str).replace(/_/g, "/");
|
|
103
|
+
}
|
|
104
|
+
function truncateString(str, length, ellipsis = "…") {
|
|
105
|
+
if (str.length <= length) return str;
|
|
106
|
+
return str.slice(0, length - 1) + ellipsis;
|
|
107
|
+
}
|
|
108
|
+
function removeANSIColors(str) {
|
|
109
|
+
return str.replace(/\u001b\[\d+m/g, "");
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//#endregion
|
|
113
|
+
export { truncateString as C, removeANSIColors as S, isPathCase as _, convertToKebabCase as a, isTitleCase as b, convertToSentenceCase as c, formatNum as d, isCamelCase as f, isPascalCase as g, isKebabCase as h, convertToDotCase as i, convertToSnakeCase as l, isDotCase as m, convertToCamelCase as n, convertToPascalCase as o, isConstantCase as p, convertToConstantCase as r, convertToPathCase as s, concatStrings as t, convertToTitleCase as u, isSentenceCase as v, joinStrings as x, isSnakeCase as y };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/stringUtils.d.ts
|
|
1
2
|
type Arg = string | false | undefined | null;
|
|
2
3
|
/**
|
|
3
4
|
* A util to create more legible conditional concatenated strings
|
|
@@ -51,5 +52,5 @@ declare function convertToDotCase(str: string): string;
|
|
|
51
52
|
declare function convertToPathCase(str: string): string;
|
|
52
53
|
declare function truncateString(str: string, length: number, ellipsis?: string): string;
|
|
53
54
|
declare function removeANSIColors(str: string): string;
|
|
54
|
-
|
|
55
|
-
export { concatStrings, convertToCamelCase, convertToConstantCase, convertToDotCase, convertToKebabCase, convertToPascalCase, convertToPathCase, convertToSentenceCase, convertToSnakeCase, convertToTitleCase, formatNum, isCamelCase, isConstantCase, isDotCase, isKebabCase, isPascalCase, isPathCase, isSentenceCase, isSnakeCase, isTitleCase, joinStrings, removeANSIColors, truncateString };
|
|
55
|
+
//#endregion
|
|
56
|
+
export { concatStrings, convertToCamelCase, convertToConstantCase, convertToDotCase, convertToKebabCase, convertToPascalCase, convertToPathCase, convertToSentenceCase, convertToSnakeCase, convertToTitleCase, formatNum, isCamelCase, isConstantCase, isDotCase, isKebabCase, isPascalCase, isPathCase, isSentenceCase, isSnakeCase, isTitleCase, joinStrings, removeANSIColors, truncateString };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { C as truncateString, S as removeANSIColors, _ as isPathCase, a as convertToKebabCase, b as isTitleCase, c as convertToSentenceCase, d as formatNum, f as isCamelCase, g as isPascalCase, h as isKebabCase, i as convertToDotCase, l as convertToSnakeCase, m as isDotCase, n as convertToCamelCase, o as convertToPascalCase, p as isConstantCase, r as convertToConstantCase, s as convertToPathCase, t as concatStrings, u as convertToTitleCase, v as isSentenceCase, x as joinStrings, y as isSnakeCase } from "./stringUtils-DjhWOiYn.mjs";
|
|
2
|
+
|
|
3
|
+
export { concatStrings, convertToCamelCase, convertToConstantCase, convertToDotCase, convertToKebabCase, convertToPascalCase, convertToPathCase, convertToSentenceCase, convertToSnakeCase, convertToTitleCase, formatNum, isCamelCase, isConstantCase, isDotCase, isKebabCase, isPascalCase, isPathCase, isSentenceCase, isSnakeCase, isTitleCase, joinStrings, removeANSIColors, truncateString };
|
|
@@ -1,45 +1,65 @@
|
|
|
1
|
-
import { YamlStringifyOptions } from
|
|
1
|
+
import { YamlStringifyOptions } from "./yamlStringify.mjs";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
//#region src/testUtils.d.ts
|
|
4
|
+
declare function createLoggerStore({
|
|
5
|
+
filterKeys: defaultFilterKeys,
|
|
6
|
+
rejectKeys: defaultRejectKeys,
|
|
7
|
+
splitLongLines: defaultSplitLongLines,
|
|
8
|
+
maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit,
|
|
9
|
+
fromLastSnapshot: defaultFromLastSnapshot,
|
|
10
|
+
arrays: defaultArrays,
|
|
11
|
+
changesOnly: defaultChangesOnly,
|
|
12
|
+
useEmojiForBooleans: defaultUseEmojiForBooleans
|
|
13
|
+
}?: {
|
|
14
|
+
filterKeys?: string[];
|
|
15
|
+
rejectKeys?: string[];
|
|
16
|
+
splitLongLines?: true;
|
|
17
|
+
maxLineLengthBeforeSplit?: number;
|
|
18
|
+
fromLastSnapshot?: boolean;
|
|
19
|
+
arrays?: 'all' | 'firstAndLast' | 'length' | {
|
|
20
|
+
firstNItems: number;
|
|
21
|
+
};
|
|
22
|
+
changesOnly?: boolean;
|
|
23
|
+
useEmojiForBooleans?: boolean;
|
|
24
|
+
}): {
|
|
25
|
+
add: (render: Record<string, unknown> | readonly Record<string, unknown>[]) => void;
|
|
26
|
+
reset: (keepLastRender?: boolean) => void;
|
|
27
|
+
getSnapshot: ({
|
|
28
|
+
arrays,
|
|
29
|
+
changesOnly,
|
|
30
|
+
filterKeys,
|
|
31
|
+
rejectKeys,
|
|
32
|
+
includeLastSnapshotEndMark,
|
|
33
|
+
splitLongLines,
|
|
34
|
+
maxLineLengthBeforeSplit,
|
|
35
|
+
fromLastSnapshot,
|
|
36
|
+
useEmojiForBooleans
|
|
37
|
+
}?: {
|
|
38
|
+
arrays?: "all" | "firstAndLast" | "length" | {
|
|
39
|
+
firstNItems: number;
|
|
40
|
+
};
|
|
41
|
+
changesOnly?: boolean;
|
|
4
42
|
filterKeys?: string[];
|
|
5
43
|
rejectKeys?: string[];
|
|
6
|
-
|
|
44
|
+
includeLastSnapshotEndMark?: boolean;
|
|
45
|
+
splitLongLines?: boolean;
|
|
7
46
|
maxLineLengthBeforeSplit?: number;
|
|
8
47
|
fromLastSnapshot?: boolean;
|
|
9
|
-
arrays?: 'all' | 'firstAndLast' | 'length' | {
|
|
10
|
-
firstNItems: number;
|
|
11
|
-
};
|
|
12
|
-
changesOnly?: boolean;
|
|
13
48
|
useEmojiForBooleans?: boolean;
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
filterKeys?: string[];
|
|
23
|
-
rejectKeys?: string[];
|
|
24
|
-
includeLastSnapshotEndMark?: boolean;
|
|
25
|
-
splitLongLines?: boolean;
|
|
26
|
-
maxLineLengthBeforeSplit?: number;
|
|
27
|
-
fromLastSnapshot?: boolean;
|
|
28
|
-
useEmojiForBooleans?: boolean;
|
|
29
|
-
}) => string;
|
|
30
|
-
waitNextLog: (timeout?: number) => Promise<void>;
|
|
31
|
-
readonly changesSnapshot: string;
|
|
32
|
-
readonly snapshot: string;
|
|
33
|
-
readonly snapshotFromLast: string;
|
|
34
|
-
logsCount: () => number;
|
|
35
|
-
readonly rendersTime: number[];
|
|
36
|
-
addMark: (label: string) => void;
|
|
49
|
+
}) => string;
|
|
50
|
+
waitNextLog: (timeout?: number) => Promise<void>;
|
|
51
|
+
readonly changesSnapshot: string;
|
|
52
|
+
readonly snapshot: string;
|
|
53
|
+
readonly snapshotFromLast: string;
|
|
54
|
+
logsCount: () => number;
|
|
55
|
+
readonly rendersTime: number[];
|
|
56
|
+
addMark: (label: string) => void;
|
|
37
57
|
};
|
|
38
58
|
declare function getResultFn<T extends (...args: any[]) => any>(fnGetter: () => T, wrapper?: (...args: any[]) => any): T;
|
|
39
59
|
declare function waitController(): {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
60
|
+
wait: Promise<void>;
|
|
61
|
+
stopWaiting: () => void;
|
|
62
|
+
stopWaitingAfter: (ms: number) => void;
|
|
43
63
|
};
|
|
44
64
|
/**
|
|
45
65
|
* Produces a more compact and readable snapshot of a value using yaml. By
|
|
@@ -111,23 +131,34 @@ declare function waitController(): {
|
|
|
111
131
|
* supported.
|
|
112
132
|
* @returns The compact snapshot of the value.
|
|
113
133
|
*/
|
|
114
|
-
declare function compactSnapshot(value: unknown, {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
declare function compactSnapshot(value: unknown, {
|
|
135
|
+
collapseObjects,
|
|
136
|
+
maxLineLength,
|
|
137
|
+
showUndefined,
|
|
138
|
+
showBooleansAs,
|
|
139
|
+
replaceValues,
|
|
140
|
+
rejectKeys,
|
|
141
|
+
filterKeys,
|
|
142
|
+
sortKeys,
|
|
143
|
+
sortPatterns,
|
|
144
|
+
...options
|
|
145
|
+
}?: YamlStringifyOptions & {
|
|
146
|
+
showBooleansAs?: boolean | {
|
|
147
|
+
props?: Record<string, {
|
|
148
|
+
trueText?: string;
|
|
149
|
+
falseText?: string;
|
|
150
|
+
} | true>;
|
|
151
|
+
ignoreProps?: string[];
|
|
152
|
+
trueText?: string;
|
|
153
|
+
falseText?: string;
|
|
154
|
+
};
|
|
155
|
+
replaceValues?: (value: unknown, path: string) => false | {
|
|
156
|
+
newValue: unknown;
|
|
157
|
+
};
|
|
158
|
+
rejectKeys?: string[] | string;
|
|
159
|
+
filterKeys?: string[] | string;
|
|
160
|
+
sortKeys?: 'asc' | 'desc' | 'simpleValuesFirst' | false;
|
|
161
|
+
sortPatterns?: string[];
|
|
131
162
|
}): string;
|
|
132
|
-
|
|
133
|
-
export { compactSnapshot, createLoggerStore, getResultFn, waitController };
|
|
163
|
+
//#endregion
|
|
164
|
+
export { compactSnapshot, createLoggerStore, getResultFn, waitController };
|