@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.
Files changed (336) 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 +79 -0
  34. package/dist/diffParser.mjs +424 -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 -242
  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/keyedMap.cjs +0 -224
  230. package/dist/keyedMap.d.cts +0 -75
  231. package/dist/keyedMap.d.ts +0 -75
  232. package/dist/keyedMap.js +0 -145
  233. package/dist/keyedSet.cjs +0 -205
  234. package/dist/keyedSet.d.cts +0 -76
  235. package/dist/keyedSet.d.ts +0 -76
  236. package/dist/keyedSet.js +0 -126
  237. package/dist/levenshtein.cjs +0 -180
  238. package/dist/levenshtein.d.ts +0 -5
  239. package/dist/levenshtein.js +0 -153
  240. package/dist/main.cjs +0 -32
  241. package/dist/main.d.cts +0 -3
  242. package/dist/main.d.ts +0 -3
  243. package/dist/main.js +0 -7
  244. package/dist/matchPath.cjs +0 -155
  245. package/dist/matchPath.d.cts +0 -53
  246. package/dist/matchPath.d.ts +0 -53
  247. package/dist/matchPath.js +0 -108
  248. package/dist/mathUtils.cjs +0 -81
  249. package/dist/mathUtils.d.ts +0 -54
  250. package/dist/mathUtils.js +0 -22
  251. package/dist/mutationUtils.cjs +0 -153
  252. package/dist/mutationUtils.d.ts +0 -15
  253. package/dist/mutationUtils.js +0 -55
  254. package/dist/objUtils.cjs +0 -242
  255. package/dist/objUtils.d.cts +0 -28
  256. package/dist/objUtils.js +0 -38
  257. package/dist/parallelAsyncCalls.cjs +0 -162
  258. package/dist/parallelAsyncCalls.d.cts +0 -82
  259. package/dist/parallelAsyncCalls.d.ts +0 -82
  260. package/dist/parallelAsyncCalls.js +0 -126
  261. package/dist/partialEqual.cjs +0 -1196
  262. package/dist/partialEqual.d.cts +0 -141
  263. package/dist/partialEqual.d.ts +0 -141
  264. package/dist/partialEqual.js +0 -1168
  265. package/dist/promiseUtils.cjs +0 -38
  266. package/dist/promiseUtils.d.cts +0 -8
  267. package/dist/promiseUtils.d.ts +0 -8
  268. package/dist/promiseUtils.js +0 -6
  269. package/dist/regexUtils.cjs +0 -60
  270. package/dist/regexUtils.d.cts +0 -17
  271. package/dist/regexUtils.d.ts +0 -17
  272. package/dist/regexUtils.js +0 -33
  273. package/dist/retryOnError.cjs +0 -130
  274. package/dist/retryOnError.d.ts +0 -83
  275. package/dist/retryOnError.js +0 -101
  276. package/dist/runShellCmd.cjs +0 -127
  277. package/dist/runShellCmd.d.cts +0 -90
  278. package/dist/runShellCmd.js +0 -98
  279. package/dist/safeJson.cjs +0 -45
  280. package/dist/safeJson.d.ts +0 -16
  281. package/dist/safeJson.js +0 -8
  282. package/dist/saferTyping.cjs +0 -52
  283. package/dist/saferTyping.d.ts +0 -47
  284. package/dist/saferTyping.js +0 -23
  285. package/dist/serializeXML.cjs +0 -154
  286. package/dist/serializeXML.d.cts +0 -22
  287. package/dist/serializeXML.d.ts +0 -22
  288. package/dist/serializeXML.js +0 -116
  289. package/dist/shallowEqual.cjs +0 -88
  290. package/dist/shallowEqual.d.ts +0 -4
  291. package/dist/shallowEqual.js +0 -63
  292. package/dist/sleep.cjs +0 -32
  293. package/dist/sleep.d.cts +0 -3
  294. package/dist/sleep.d.ts +0 -3
  295. package/dist/sleep.js +0 -6
  296. package/dist/stringUtils.cjs +0 -155
  297. package/dist/stringUtils.d.ts +0 -55
  298. package/dist/stringUtils.js +0 -50
  299. package/dist/testUtils.cjs +0 -1490
  300. package/dist/testUtils.d.cts +0 -133
  301. package/dist/testUtils.js +0 -359
  302. package/dist/throttle.cjs +0 -282
  303. package/dist/throttle.d.cts +0 -98
  304. package/dist/throttle.js +0 -38
  305. package/dist/time.cjs +0 -152
  306. package/dist/time.d.cts +0 -25
  307. package/dist/time.js +0 -38
  308. package/dist/timers.cjs +0 -194
  309. package/dist/timers.d.ts +0 -121
  310. package/dist/timers.js +0 -156
  311. package/dist/tsResult.cjs +0 -226
  312. package/dist/tsResult.d.ts +0 -114
  313. package/dist/tsResult.js +0 -180
  314. package/dist/typeGuards.cjs +0 -70
  315. package/dist/typeGuards.d.ts +0 -111
  316. package/dist/typeGuards.js +0 -18
  317. package/dist/typeUtils.cjs +0 -18
  318. package/dist/typeUtils.d.cts +0 -61
  319. package/dist/typeUtils.js +0 -0
  320. package/dist/typedStrings.cjs +0 -90
  321. package/dist/typedStrings.d.ts +0 -163
  322. package/dist/typedStrings.js +0 -57
  323. package/dist/typingFnUtils.cjs +0 -96
  324. package/dist/typingFnUtils.d.ts +0 -100
  325. package/dist/typingFnUtils.js +0 -30
  326. package/dist/typingTestUtils.cjs +0 -52
  327. package/dist/typingTestUtils.d.ts +0 -79
  328. package/dist/typingTestUtils.js +0 -27
  329. package/dist/typingUtils.cjs +0 -18
  330. package/dist/typingUtils.d.cts +0 -35
  331. package/dist/typingUtils.d.ts +0 -35
  332. package/dist/typingUtils.js +0 -0
  333. package/dist/yamlStringify.cjs +0 -423
  334. package/dist/yamlStringify.d.cts +0 -10
  335. package/dist/yamlStringify.d.ts +0 -10
  336. 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 };