@ls-stack/utils 3.63.0 → 3.66.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.
Files changed (328) hide show
  1. package/dist/{arrayUtils.d.cts → arrayUtils.d.mts} +24 -23
  2. package/dist/arrayUtils.mjs +249 -0
  3. package/dist/assertions-qMxfVhSu.mjs +207 -0
  4. package/dist/{assertions.d.ts → assertions.d.mts} +4 -3
  5. package/dist/assertions.mjs +3 -0
  6. package/dist/asyncQueue.d.mts +497 -0
  7. package/dist/asyncQueue.mjs +757 -0
  8. package/dist/{awaitDebounce.d.cts → awaitDebounce.d.mts} +11 -6
  9. package/dist/awaitDebounce.mjs +54 -0
  10. package/dist/{cache.d.ts → cache.d.mts} +76 -68
  11. package/dist/cache.mjs +355 -0
  12. package/dist/castValues-DfICShCc.mjs +19 -0
  13. package/dist/{castValues.d.cts → castValues.d.mts} +3 -2
  14. package/dist/castValues.mjs +3 -0
  15. package/dist/{concurrentCalls.d.ts → concurrentCalls.d.mts} +74 -65
  16. package/dist/concurrentCalls.mjs +295 -0
  17. package/dist/consoleFmt.d.mts +55 -0
  18. package/dist/consoleFmt.mjs +63 -0
  19. package/dist/conversions-DTmwEMIu.mjs +12 -0
  20. package/dist/conversions.d.mts +4 -0
  21. package/dist/conversions.mjs +3 -0
  22. package/dist/createThrottleController.d.mts +18 -0
  23. package/dist/createThrottleController.mjs +40 -0
  24. package/dist/debounce.d.mts +47 -0
  25. package/dist/debounce.mjs +117 -0
  26. package/dist/dedent.d.mts +74 -0
  27. package/dist/dedent.mjs +80 -0
  28. package/dist/deepEqual-C7EZEixx.mjs +78 -0
  29. package/dist/{deepEqual.d.cts → deepEqual.d.mts} +3 -2
  30. package/dist/deepEqual.mjs +3 -0
  31. package/dist/{deepReplaceValues.d.cts → deepReplaceValues.d.mts} +4 -3
  32. package/dist/deepReplaceValues.mjs +61 -0
  33. package/dist/diffParser.d.mts +63 -0
  34. package/dist/diffParser.mjs +410 -0
  35. package/dist/enhancedMap.d.mts +21 -0
  36. package/dist/enhancedMap.mjs +69 -0
  37. package/dist/exhaustiveMatch.d.mts +10 -0
  38. package/dist/exhaustiveMatch.mjs +48 -0
  39. package/dist/{filterObjectOrArrayKeys.d.cts → filterObjectOrArrayKeys.d.mts} +15 -8
  40. package/dist/filterObjectOrArrayKeys.mjs +497 -0
  41. package/dist/{getAutoIncrementId.d.cts → getAutoIncrementId.d.mts} +9 -5
  42. package/dist/getAutoIncrementId.mjs +53 -0
  43. package/dist/{getCompositeKey.d.cts → getCompositeKey.d.mts} +3 -2
  44. package/dist/getCompositeKey.mjs +50 -0
  45. package/dist/{getValueStableKey.d.cts → getValueStableKey.d.mts} +5 -3
  46. package/dist/getValueStableKey.mjs +17 -0
  47. package/dist/{hash.d.cts → hash.d.mts} +3 -2
  48. package/dist/hash.mjs +28 -0
  49. package/dist/interpolate.d.mts +17 -0
  50. package/dist/interpolate.mjs +28 -0
  51. package/dist/{iteratorUtils.d.cts → iteratorUtils.d.mts} +5 -4
  52. package/dist/iteratorUtils.mjs +39 -0
  53. package/dist/keepPrevIfUnchanged.d.mts +12 -0
  54. package/dist/keepPrevIfUnchanged.mjs +9 -0
  55. package/dist/keyedMap.d.mts +76 -0
  56. package/dist/keyedMap.mjs +139 -0
  57. package/dist/keyedSet.d.mts +77 -0
  58. package/dist/keyedSet.mjs +129 -0
  59. package/dist/{levenshtein.d.cts → levenshtein.d.mts} +3 -2
  60. package/dist/levenshtein.mjs +121 -0
  61. package/dist/main.d.mts +4 -0
  62. package/dist/main.mjs +7 -0
  63. package/dist/matchPath.d.mts +50 -0
  64. package/dist/matchPath.mjs +81 -0
  65. package/dist/mathUtils-BDP1lM_z.mjs +81 -0
  66. package/dist/{mathUtils.d.cts → mathUtils.d.mts} +3 -2
  67. package/dist/mathUtils.mjs +3 -0
  68. package/dist/{mutationUtils.d.cts → mutationUtils.d.mts} +6 -5
  69. package/dist/mutationUtils.mjs +44 -0
  70. package/dist/{objUtils.d.ts → objUtils.d.mts} +8 -6
  71. package/dist/objUtils.mjs +115 -0
  72. package/dist/parallelAsyncCalls.d.mts +83 -0
  73. package/dist/parallelAsyncCalls.mjs +121 -0
  74. package/dist/partialEqual.d.mts +139 -0
  75. package/dist/partialEqual.mjs +1055 -0
  76. package/dist/promiseUtils.d.mts +9 -0
  77. package/dist/promiseUtils.mjs +17 -0
  78. package/dist/regexUtils.d.mts +18 -0
  79. package/dist/regexUtils.mjs +34 -0
  80. package/dist/{retryOnError.d.cts → retryOnError.d.mts} +38 -37
  81. package/dist/retryOnError.mjs +91 -0
  82. package/dist/{runShellCmd.d.ts → runShellCmd.d.mts} +24 -15
  83. package/dist/runShellCmd.mjs +151 -0
  84. package/dist/{safeJson.d.cts → safeJson.d.mts} +3 -2
  85. package/dist/safeJson.mjs +30 -0
  86. package/dist/{saferTyping.d.cts → saferTyping.d.mts} +4 -3
  87. package/dist/saferTyping.mjs +45 -0
  88. package/dist/serializeXML.d.mts +23 -0
  89. package/dist/serializeXML.mjs +74 -0
  90. package/dist/{shallowEqual.d.cts → shallowEqual.d.mts} +3 -2
  91. package/dist/shallowEqual.mjs +54 -0
  92. package/dist/sleep.d.mts +4 -0
  93. package/dist/sleep.mjs +7 -0
  94. package/dist/stringUtils-DjhWOiYn.mjs +113 -0
  95. package/dist/{stringUtils.d.cts → stringUtils.d.mts} +3 -2
  96. package/dist/stringUtils.mjs +3 -0
  97. package/dist/{testUtils.d.ts → testUtils.d.mts} +83 -52
  98. package/dist/testUtils.mjs +310 -0
  99. package/dist/{throttle.d.ts → throttle.d.mts} +18 -17
  100. package/dist/throttle.mjs +102 -0
  101. package/dist/time-sr2lhQRw.mjs +67 -0
  102. package/dist/{time.d.ts → time.d.mts} +8 -7
  103. package/dist/time.mjs +3 -0
  104. package/dist/{timers.d.cts → timers.d.mts} +22 -13
  105. package/dist/timers.mjs +220 -0
  106. package/dist/{tsResult.d.cts → tsResult.d.mts} +52 -48
  107. package/dist/tsResult.mjs +142 -0
  108. package/dist/typeGuards-B1mzA-Rz.mjs +128 -0
  109. package/dist/{typeGuards.d.cts → typeGuards.d.mts} +3 -2
  110. package/dist/typeGuards.mjs +3 -0
  111. package/dist/{typeUtils.d.ts → typeUtils.d.mts} +13 -34
  112. package/dist/typeUtils.mjs +1 -0
  113. package/dist/{typedStrings.d.cts → typedStrings.d.mts} +5 -4
  114. package/dist/typedStrings.mjs +131 -0
  115. package/dist/typingFnUtils-Bb8drgKF.mjs +101 -0
  116. package/dist/{typingFnUtils.d.cts → typingFnUtils.d.mts} +13 -22
  117. package/dist/typingFnUtils.mjs +3 -0
  118. package/dist/{typingTestUtils.d.cts → typingTestUtils.d.mts} +11 -15
  119. package/dist/typingTestUtils.mjs +80 -0
  120. package/dist/typingUtils.d.mts +20 -0
  121. package/dist/typingUtils.mjs +1 -0
  122. package/dist/yamlStringify.d.mts +17 -0
  123. package/dist/yamlStringify.mjs +189 -0
  124. package/package.json +65 -234
  125. package/dist/arrayUtils.cjs +0 -229
  126. package/dist/arrayUtils.d.ts +0 -171
  127. package/dist/arrayUtils.js +0 -42
  128. package/dist/assertions.cjs +0 -107
  129. package/dist/assertions.d.cts +0 -192
  130. package/dist/assertions.js +0 -25
  131. package/dist/asyncQueue.cjs +0 -672
  132. package/dist/asyncQueue.d.cts +0 -488
  133. package/dist/asyncQueue.d.ts +0 -488
  134. package/dist/asyncQueue.js +0 -631
  135. package/dist/awaitDebounce.cjs +0 -106
  136. package/dist/awaitDebounce.d.ts +0 -41
  137. package/dist/awaitDebounce.js +0 -28
  138. package/dist/cache.cjs +0 -367
  139. package/dist/cache.d.cts +0 -228
  140. package/dist/cache.js +0 -19
  141. package/dist/castValues.cjs +0 -50
  142. package/dist/castValues.d.ts +0 -4
  143. package/dist/castValues.js +0 -8
  144. package/dist/chunk-5DZT3Z5Z.js +0 -8
  145. package/dist/chunk-6FBIEPWU.js +0 -96
  146. package/dist/chunk-6FIBVC2P.js +0 -56
  147. package/dist/chunk-7CQPOM5I.js +0 -100
  148. package/dist/chunk-B6DNOZCP.js +0 -369
  149. package/dist/chunk-BM4PYVOX.js +0 -109
  150. package/dist/chunk-C2SVCIWE.js +0 -57
  151. package/dist/chunk-CCUPDGSZ.js +0 -132
  152. package/dist/chunk-DBOWTYR4.js +0 -49
  153. package/dist/chunk-DFXNVEH6.js +0 -14
  154. package/dist/chunk-DX2524CZ.js +0 -314
  155. package/dist/chunk-GMJTLFM6.js +0 -60
  156. package/dist/chunk-IATIXMCE.js +0 -20
  157. package/dist/chunk-II4R3VVX.js +0 -25
  158. package/dist/chunk-JF2MDHOJ.js +0 -40
  159. package/dist/chunk-JQFUKJU5.js +0 -71
  160. package/dist/chunk-MI4UE2PQ.js +0 -561
  161. package/dist/chunk-PUKVXYYL.js +0 -52
  162. package/dist/chunk-QQS7I7ZL.js +0 -16
  163. package/dist/chunk-VAAMRG4K.js +0 -20
  164. package/dist/chunk-WFQJUJTC.js +0 -182
  165. package/dist/chunk-ZXIKIA5B.js +0 -178
  166. package/dist/concurrentCalls.cjs +0 -406
  167. package/dist/concurrentCalls.d.cts +0 -116
  168. package/dist/concurrentCalls.js +0 -346
  169. package/dist/consoleFmt.cjs +0 -85
  170. package/dist/consoleFmt.d.cts +0 -54
  171. package/dist/consoleFmt.d.ts +0 -54
  172. package/dist/consoleFmt.js +0 -60
  173. package/dist/conversions.cjs +0 -44
  174. package/dist/conversions.d.cts +0 -3
  175. package/dist/conversions.d.ts +0 -3
  176. package/dist/conversions.js +0 -6
  177. package/dist/createThrottleController.cjs +0 -193
  178. package/dist/createThrottleController.d.cts +0 -13
  179. package/dist/createThrottleController.d.ts +0 -13
  180. package/dist/createThrottleController.js +0 -61
  181. package/dist/debounce.cjs +0 -157
  182. package/dist/debounce.d.cts +0 -46
  183. package/dist/debounce.d.ts +0 -46
  184. package/dist/debounce.js +0 -8
  185. package/dist/dedent.cjs +0 -104
  186. package/dist/dedent.d.cts +0 -73
  187. package/dist/dedent.d.ts +0 -73
  188. package/dist/dedent.js +0 -79
  189. package/dist/deepEqual.cjs +0 -96
  190. package/dist/deepEqual.d.ts +0 -21
  191. package/dist/deepEqual.js +0 -8
  192. package/dist/deepReplaceValues.cjs +0 -87
  193. package/dist/deepReplaceValues.d.ts +0 -27
  194. package/dist/deepReplaceValues.js +0 -7
  195. package/dist/enhancedMap.cjs +0 -131
  196. package/dist/enhancedMap.d.cts +0 -20
  197. package/dist/enhancedMap.d.ts +0 -20
  198. package/dist/enhancedMap.js +0 -10
  199. package/dist/exhaustiveMatch.cjs +0 -66
  200. package/dist/exhaustiveMatch.d.cts +0 -9
  201. package/dist/exhaustiveMatch.d.ts +0 -9
  202. package/dist/exhaustiveMatch.js +0 -40
  203. package/dist/filterObjectOrArrayKeys.cjs +0 -619
  204. package/dist/filterObjectOrArrayKeys.d.ts +0 -88
  205. package/dist/filterObjectOrArrayKeys.js +0 -9
  206. package/dist/getAutoIncrementId.cjs +0 -44
  207. package/dist/getAutoIncrementId.d.ts +0 -46
  208. package/dist/getAutoIncrementId.js +0 -18
  209. package/dist/getCompositeKey.cjs +0 -86
  210. package/dist/getCompositeKey.d.ts +0 -11
  211. package/dist/getCompositeKey.js +0 -8
  212. package/dist/getValueStableKey.cjs +0 -89
  213. package/dist/getValueStableKey.d.ts +0 -15
  214. package/dist/getValueStableKey.js +0 -11
  215. package/dist/hash.cjs +0 -57
  216. package/dist/hash.d.ts +0 -7
  217. package/dist/hash.js +0 -32
  218. package/dist/interpolate.cjs +0 -88
  219. package/dist/interpolate.d.cts +0 -11
  220. package/dist/interpolate.d.ts +0 -11
  221. package/dist/interpolate.js +0 -46
  222. package/dist/iteratorUtils.cjs +0 -73
  223. package/dist/iteratorUtils.d.ts +0 -10
  224. package/dist/iteratorUtils.js +0 -44
  225. package/dist/keepPrevIfUnchanged.cjs +0 -102
  226. package/dist/keepPrevIfUnchanged.d.cts +0 -7
  227. package/dist/keepPrevIfUnchanged.d.ts +0 -7
  228. package/dist/keepPrevIfUnchanged.js +0 -7
  229. package/dist/levenshtein.cjs +0 -180
  230. package/dist/levenshtein.d.ts +0 -5
  231. package/dist/levenshtein.js +0 -153
  232. package/dist/main.cjs +0 -32
  233. package/dist/main.d.cts +0 -3
  234. package/dist/main.d.ts +0 -3
  235. package/dist/main.js +0 -7
  236. package/dist/matchPath.cjs +0 -155
  237. package/dist/matchPath.d.cts +0 -53
  238. package/dist/matchPath.d.ts +0 -53
  239. package/dist/matchPath.js +0 -108
  240. package/dist/mathUtils.cjs +0 -81
  241. package/dist/mathUtils.d.ts +0 -54
  242. package/dist/mathUtils.js +0 -22
  243. package/dist/mutationUtils.cjs +0 -153
  244. package/dist/mutationUtils.d.ts +0 -15
  245. package/dist/mutationUtils.js +0 -55
  246. package/dist/objUtils.cjs +0 -242
  247. package/dist/objUtils.d.cts +0 -28
  248. package/dist/objUtils.js +0 -38
  249. package/dist/parallelAsyncCalls.cjs +0 -162
  250. package/dist/parallelAsyncCalls.d.cts +0 -82
  251. package/dist/parallelAsyncCalls.d.ts +0 -82
  252. package/dist/parallelAsyncCalls.js +0 -126
  253. package/dist/partialEqual.cjs +0 -1196
  254. package/dist/partialEqual.d.cts +0 -141
  255. package/dist/partialEqual.d.ts +0 -141
  256. package/dist/partialEqual.js +0 -1168
  257. package/dist/promiseUtils.cjs +0 -38
  258. package/dist/promiseUtils.d.cts +0 -8
  259. package/dist/promiseUtils.d.ts +0 -8
  260. package/dist/promiseUtils.js +0 -6
  261. package/dist/regexUtils.cjs +0 -60
  262. package/dist/regexUtils.d.cts +0 -17
  263. package/dist/regexUtils.d.ts +0 -17
  264. package/dist/regexUtils.js +0 -33
  265. package/dist/retryOnError.cjs +0 -130
  266. package/dist/retryOnError.d.ts +0 -83
  267. package/dist/retryOnError.js +0 -101
  268. package/dist/runShellCmd.cjs +0 -127
  269. package/dist/runShellCmd.d.cts +0 -90
  270. package/dist/runShellCmd.js +0 -98
  271. package/dist/safeJson.cjs +0 -45
  272. package/dist/safeJson.d.ts +0 -16
  273. package/dist/safeJson.js +0 -8
  274. package/dist/saferTyping.cjs +0 -52
  275. package/dist/saferTyping.d.ts +0 -47
  276. package/dist/saferTyping.js +0 -23
  277. package/dist/serializeXML.cjs +0 -154
  278. package/dist/serializeXML.d.cts +0 -22
  279. package/dist/serializeXML.d.ts +0 -22
  280. package/dist/serializeXML.js +0 -116
  281. package/dist/shallowEqual.cjs +0 -88
  282. package/dist/shallowEqual.d.ts +0 -4
  283. package/dist/shallowEqual.js +0 -63
  284. package/dist/sleep.cjs +0 -32
  285. package/dist/sleep.d.cts +0 -3
  286. package/dist/sleep.d.ts +0 -3
  287. package/dist/sleep.js +0 -6
  288. package/dist/stringUtils.cjs +0 -155
  289. package/dist/stringUtils.d.ts +0 -55
  290. package/dist/stringUtils.js +0 -50
  291. package/dist/testUtils.cjs +0 -1490
  292. package/dist/testUtils.d.cts +0 -133
  293. package/dist/testUtils.js +0 -359
  294. package/dist/throttle.cjs +0 -282
  295. package/dist/throttle.d.cts +0 -98
  296. package/dist/throttle.js +0 -38
  297. package/dist/time.cjs +0 -152
  298. package/dist/time.d.cts +0 -25
  299. package/dist/time.js +0 -38
  300. package/dist/timers.cjs +0 -194
  301. package/dist/timers.d.ts +0 -121
  302. package/dist/timers.js +0 -156
  303. package/dist/tsResult.cjs +0 -226
  304. package/dist/tsResult.d.ts +0 -114
  305. package/dist/tsResult.js +0 -180
  306. package/dist/typeGuards.cjs +0 -70
  307. package/dist/typeGuards.d.ts +0 -111
  308. package/dist/typeGuards.js +0 -18
  309. package/dist/typeUtils.cjs +0 -18
  310. package/dist/typeUtils.d.cts +0 -61
  311. package/dist/typeUtils.js +0 -0
  312. package/dist/typedStrings.cjs +0 -90
  313. package/dist/typedStrings.d.ts +0 -163
  314. package/dist/typedStrings.js +0 -57
  315. package/dist/typingFnUtils.cjs +0 -96
  316. package/dist/typingFnUtils.d.ts +0 -100
  317. package/dist/typingFnUtils.js +0 -30
  318. package/dist/typingTestUtils.cjs +0 -52
  319. package/dist/typingTestUtils.d.ts +0 -79
  320. package/dist/typingTestUtils.js +0 -27
  321. package/dist/typingUtils.cjs +0 -18
  322. package/dist/typingUtils.d.cts +0 -35
  323. package/dist/typingUtils.d.ts +0 -35
  324. package/dist/typingUtils.js +0 -0
  325. package/dist/yamlStringify.cjs +0 -423
  326. package/dist/yamlStringify.d.cts +0 -10
  327. package/dist/yamlStringify.d.ts +0 -10
  328. 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
+ "<": "&lt;",
10
+ ">": "&gt;",
11
+ "\"": "&quot;",
12
+ "'": "&#39;"
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 };
@@ -1,4 +1,5 @@
1
+ //#region src/shallowEqual.d.ts
1
2
  /** Shallow equal version of https://github.com/lukeed/dequal */
2
3
  declare function shallowEqual(foo: any, bar: any): boolean;
3
-
4
- export { shallowEqual };
4
+ //#endregion
5
+ export { shallowEqual };
@@ -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 };
@@ -0,0 +1,4 @@
1
+ //#region src/sleep.d.ts
2
+ declare function sleep(ms: number): Promise<unknown>;
3
+ //#endregion
4
+ export { sleep };
package/dist/sleep.mjs ADDED
@@ -0,0 +1,7 @@
1
+ //#region src/sleep.ts
2
+ function sleep(ms) {
3
+ return new Promise((resolve) => setTimeout(resolve, ms));
4
+ }
5
+
6
+ //#endregion
7
+ export { sleep };
@@ -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 './yamlStringify.js';
1
+ import { YamlStringifyOptions } from "./yamlStringify.mjs";
2
2
 
3
- declare function createLoggerStore({ filterKeys: defaultFilterKeys, rejectKeys: defaultRejectKeys, splitLongLines: defaultSplitLongLines, maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit, fromLastSnapshot: defaultFromLastSnapshot, arrays: defaultArrays, changesOnly: defaultChangesOnly, useEmojiForBooleans: defaultUseEmojiForBooleans, }?: {
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
- splitLongLines?: true;
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
- add: (render: Record<string, unknown> | readonly Record<string, unknown>[]) => void;
16
- reset: (keepLastRender?: boolean) => void;
17
- getSnapshot: ({ arrays, changesOnly, filterKeys, rejectKeys, includeLastSnapshotEndMark, splitLongLines, maxLineLengthBeforeSplit, fromLastSnapshot, useEmojiForBooleans, }?: {
18
- arrays?: "all" | "firstAndLast" | "length" | {
19
- firstNItems: number;
20
- };
21
- changesOnly?: boolean;
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
- wait: Promise<void>;
41
- stopWaiting: () => void;
42
- stopWaitingAfter: (ms: number) => void;
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, { collapseObjects, maxLineLength, showUndefined, showBooleansAs, replaceValues, rejectKeys, filterKeys, sortKeys, sortPatterns, ...options }?: YamlStringifyOptions & {
115
- showBooleansAs?: boolean | {
116
- props?: Record<string, {
117
- trueText?: string;
118
- falseText?: string;
119
- } | true>;
120
- ignoreProps?: string[];
121
- trueText?: string;
122
- falseText?: string;
123
- };
124
- replaceValues?: (value: unknown, path: string) => false | {
125
- newValue: unknown;
126
- };
127
- rejectKeys?: string[] | string;
128
- filterKeys?: string[] | string;
129
- sortKeys?: 'asc' | 'desc' | 'simpleValuesFirst' | false;
130
- sortPatterns?: string[];
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 };