@ls-stack/utils 1.13.1 → 2.0.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 (140) hide show
  1. package/dist/arrayUtils.cjs +91 -0
  2. package/dist/arrayUtils.d.cts +51 -0
  3. package/dist/arrayUtils.js +1 -2
  4. package/dist/assertions.cjs +99 -0
  5. package/dist/assertions.d.cts +17 -0
  6. package/dist/assertions.js +1 -2
  7. package/dist/castValues.cjs +41 -0
  8. package/dist/castValues.d.cts +4 -0
  9. package/dist/castValues.js +0 -1
  10. package/dist/{chunk-FYMTZQ42.js → chunk-4UGSP3L3.js} +0 -1
  11. package/dist/{chunk-HLFWWIDK.js → chunk-5DZT3Z5Z.js} +0 -1
  12. package/dist/{chunk-W7X6NSGR.js → chunk-AZBBTE33.js} +0 -1
  13. package/dist/{chunk-MMKMF4GG.js → chunk-IATIXMCE.js} +0 -1
  14. package/dist/chunk-JOBPQAI3.js +147 -0
  15. package/dist/{chunk-M74KKYE4.js → chunk-KCOXGSRA.js} +0 -1
  16. package/dist/{chunk-NKCC3375.js → chunk-NWXBMMHO.js} +0 -1
  17. package/dist/{chunk-SNAAKCTH.js → chunk-RVVH3MDA.js} +0 -1
  18. package/dist/{chunk-4QK76IRX.js → chunk-T5WDDPFI.js} +1 -6
  19. package/dist/{chunk-GLZ5MZC5.js → chunk-V2L472LS.js} +0 -30
  20. package/dist/consoleFmt.cjs +84 -0
  21. package/dist/consoleFmt.d.cts +48 -0
  22. package/dist/consoleFmt.js +0 -1
  23. package/dist/conversions.cjs +44 -0
  24. package/dist/conversions.d.cts +3 -0
  25. package/dist/conversions.js +1 -2
  26. package/dist/createThrottleController.cjs +183 -0
  27. package/dist/createThrottleController.d.cts +16 -0
  28. package/dist/createThrottleController.js +2 -3
  29. package/dist/debounce.cjs +125 -0
  30. package/dist/debounce.d.cts +45 -0
  31. package/dist/debounce.js +0 -1
  32. package/dist/dedent.cjs +57 -0
  33. package/dist/dedent.d.cts +4 -0
  34. package/dist/dedent.js +0 -1
  35. package/dist/deepEqual.cjs +88 -0
  36. package/dist/deepEqual.d.cts +4 -0
  37. package/dist/deepEqual.js +1 -2
  38. package/dist/enhancedMap.cjs +128 -0
  39. package/dist/enhancedMap.d.cts +20 -0
  40. package/dist/enhancedMap.d.ts +0 -2
  41. package/dist/enhancedMap.js +2 -3
  42. package/dist/exhaustiveMatch.cjs +55 -0
  43. package/dist/exhaustiveMatch.d.cts +6 -0
  44. package/dist/exhaustiveMatch.js +0 -1
  45. package/dist/interpolate.cjs +88 -0
  46. package/dist/interpolate.d.cts +11 -0
  47. package/dist/interpolate.js +2 -3
  48. package/dist/levenshtein.cjs +180 -0
  49. package/dist/levenshtein.d.cts +5 -0
  50. package/dist/levenshtein.js +0 -1
  51. package/dist/main.cjs +4 -0
  52. package/dist/main.d.cts +2 -0
  53. package/dist/main.d.ts +1 -1
  54. package/dist/main.js +0 -1
  55. package/dist/mathUtils.cjs +50 -0
  56. package/dist/mathUtils.d.cts +6 -0
  57. package/dist/mathUtils.js +1 -2
  58. package/dist/objUtils.cjs +67 -0
  59. package/dist/objUtils.d.cts +7 -0
  60. package/dist/objUtils.js +1 -2
  61. package/dist/parallelAsyncCalls.cjs +265 -0
  62. package/dist/{parallelAsyncResultCalls.d.ts → parallelAsyncCalls.d.cts} +7 -7
  63. package/dist/parallelAsyncCalls.d.ts +76 -0
  64. package/dist/{parallelAsyncResultCalls.js → parallelAsyncCalls.js} +7 -9
  65. package/dist/promiseUtils.cjs +38 -0
  66. package/dist/promiseUtils.d.cts +8 -0
  67. package/dist/promiseUtils.js +0 -1
  68. package/dist/rsResult.cjs +179 -0
  69. package/dist/rsResult.d.cts +88 -0
  70. package/dist/rsResult.d.ts +33 -63
  71. package/dist/rsResult.js +6 -10
  72. package/dist/runShellCmd.cjs +127 -0
  73. package/dist/runShellCmd.d.cts +23 -0
  74. package/dist/runShellCmd.d.ts +2 -1
  75. package/dist/runShellCmd.js +9 -4
  76. package/dist/shallowEqual.cjs +88 -0
  77. package/dist/shallowEqual.d.cts +4 -0
  78. package/dist/shallowEqual.js +0 -1
  79. package/dist/sleep.cjs +32 -0
  80. package/dist/sleep.d.cts +3 -0
  81. package/dist/sleep.js +1 -2
  82. package/dist/stringUtils.cjs +66 -0
  83. package/dist/stringUtils.d.cts +16 -0
  84. package/dist/stringUtils.d.ts +1 -3
  85. package/dist/stringUtils.js +1 -4
  86. package/dist/testUtils.cjs +357 -0
  87. package/dist/testUtils.d.cts +38 -0
  88. package/dist/testUtils.js +17 -9
  89. package/dist/typingFnUtils.cjs +55 -0
  90. package/dist/typingFnUtils.d.cts +15 -0
  91. package/dist/typingFnUtils.js +0 -1
  92. package/dist/typingTestUtils.cjs +43 -0
  93. package/dist/typingTestUtils.d.cts +12 -0
  94. package/dist/typingTestUtils.js +0 -1
  95. package/dist/typingUtils.cjs +18 -0
  96. package/dist/typingUtils.d.cts +11 -0
  97. package/dist/typingUtils.js +0 -1
  98. package/dist/yamlStringify.cjs +346 -0
  99. package/dist/yamlStringify.d.cts +8 -0
  100. package/dist/yamlStringify.js +3 -4
  101. package/package.json +64 -34
  102. package/dist/arrayUtils.js.map +0 -1
  103. package/dist/assertions.js.map +0 -1
  104. package/dist/castValues.js.map +0 -1
  105. package/dist/chunk-4QK76IRX.js.map +0 -1
  106. package/dist/chunk-FYMTZQ42.js.map +0 -1
  107. package/dist/chunk-GLZ5MZC5.js.map +0 -1
  108. package/dist/chunk-HLFWWIDK.js.map +0 -1
  109. package/dist/chunk-I7ZDKDUM.js +0 -217
  110. package/dist/chunk-I7ZDKDUM.js.map +0 -1
  111. package/dist/chunk-M74KKYE4.js.map +0 -1
  112. package/dist/chunk-MMKMF4GG.js.map +0 -1
  113. package/dist/chunk-NKCC3375.js.map +0 -1
  114. package/dist/chunk-SNAAKCTH.js.map +0 -1
  115. package/dist/chunk-W7X6NSGR.js.map +0 -1
  116. package/dist/consoleFmt.js.map +0 -1
  117. package/dist/conversions.js.map +0 -1
  118. package/dist/createThrottleController.js.map +0 -1
  119. package/dist/debounce.js.map +0 -1
  120. package/dist/dedent.js.map +0 -1
  121. package/dist/deepEqual.js.map +0 -1
  122. package/dist/enhancedMap.js.map +0 -1
  123. package/dist/exhaustiveMatch.js.map +0 -1
  124. package/dist/interpolate.js.map +0 -1
  125. package/dist/levenshtein.js.map +0 -1
  126. package/dist/main.js.map +0 -1
  127. package/dist/mathUtils.js.map +0 -1
  128. package/dist/objUtils.js.map +0 -1
  129. package/dist/parallelAsyncResultCalls.js.map +0 -1
  130. package/dist/promiseUtils.js.map +0 -1
  131. package/dist/rsResult.js.map +0 -1
  132. package/dist/runShellCmd.js.map +0 -1
  133. package/dist/shallowEqual.js.map +0 -1
  134. package/dist/sleep.js.map +0 -1
  135. package/dist/stringUtils.js.map +0 -1
  136. package/dist/testUtils.js.map +0 -1
  137. package/dist/typingFnUtils.js.map +0 -1
  138. package/dist/typingTestUtils.js.map +0 -1
  139. package/dist/typingUtils.js.map +0 -1
  140. package/dist/yamlStringify.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/levenshtein.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n// cspell:disable\n// forked from https://github.com/ka-weihe/fastest-levenshtein/blob/master/mod.ts\n\nconst peq = new Uint32Array(0x10000);\n\nconst myers_32 = (a: string, b: string): number => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)]! |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)]!;\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\n\nconst myers_x = (b: string, a: string): number => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)]! |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)]!;\n const pb = (phc[(i / 32) | 0]! >>> i) & 1;\n const mb = (mhc[(i / 32) | 0]! >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0]! ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0]! ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)]! |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)]!;\n const pb = (phc[(i / 32) | 0]! >>> i) & 1;\n const mb = (mhc[(i / 32) | 0]! >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0]! ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0]! ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\n\nexport function levenshteinDistance(a: string, b: string): number {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n}\n\nexport function getClosestString(\n str: string,\n arr: readonly string[],\n maxDistance = 2,\n): string | undefined {\n let min_distance = Infinity;\n let closestString: string | undefined;\n for (let i = 0; i < arr.length; i++) {\n const dist = levenshteinDistance(str, arr[i]!);\n if (dist < min_distance && dist <= maxDistance) {\n min_distance = dist;\n closestString = arr[i];\n }\n }\n return closestString;\n}\n\nexport function getClosestStringsUpToDist(\n str: string,\n arr: readonly string[],\n maxDistance = 2,\n): string[] {\n const distanceMap = new Map<string, number>();\n\n for (const item of arr) {\n const distance = levenshteinDistance(str, item);\n if (distance <= maxDistance) {\n distanceMap.set(item, distance);\n }\n }\n\n return Array.from(distanceMap.entries())\n .sort((a, b) => a[1] - b[1])\n .map(([item]) => item);\n}\n"],"mappings":";AAIA,IAAM,MAAM,IAAI,YAAY,KAAO;AAEnC,IAAM,WAAW,CAAC,GAAW,MAAsB;AACjD,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,QAAM,MAAM,KAAM,IAAI;AACtB,MAAI,KAAK;AACT,MAAI,KAAK;AACT,MAAI,KAAK;AACT,MAAI,IAAI;AACR,SAAO,KAAK;AACV,QAAI,EAAE,WAAW,CAAC,CAAC,KAAM,KAAK;AAAA,EAChC;AACA,OAAK,IAAI,GAAG,IAAI,GAAG,KAAK;AACtB,QAAI,KAAK,IAAI,EAAE,WAAW,CAAC,CAAC;AAC5B,UAAM,KAAK,KAAK;AAChB,WAAQ,KAAK,MAAM,KAAM;AACzB,UAAM,EAAE,KAAK;AACb,UAAM;AACN,QAAI,KAAK,KAAK;AACZ;AAAA,IACF;AACA,QAAI,KAAK,KAAK;AACZ;AAAA,IACF;AACA,SAAM,MAAM,IAAK;AACjB,SAAM,MAAM,IAAK,EAAE,KAAK;AACxB,UAAM;AAAA,EACR;AACA,MAAI;AACJ,SAAO,KAAK;AACV,QAAI,EAAE,WAAW,CAAC,CAAC,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAEA,IAAM,UAAU,CAAC,GAAW,MAAsB;AAChD,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,QAAM,MAAM,CAAC;AACb,QAAM,MAAM,CAAC;AACb,QAAM,QAAQ,KAAK,KAAK,IAAI,EAAE;AAC9B,QAAM,QAAQ,KAAK,KAAK,IAAI,EAAE;AAC9B,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,QAAI,CAAC,IAAI;AACT,QAAI,CAAC,IAAI;AAAA,EACX;AACA,MAAI,IAAI;AACR,SAAO,IAAI,QAAQ,GAAG,KAAK;AACzB,QAAIA,MAAK;AACT,QAAIC,MAAK;AACT,UAAMC,SAAQ,IAAI;AAClB,UAAMC,QAAO,KAAK,IAAI,IAAI,CAAC,IAAID;AAC/B,aAAS,IAAIA,QAAO,IAAIC,OAAM,KAAK;AACjC,UAAI,EAAE,WAAW,CAAC,CAAC,KAAM,KAAK;AAAA,IAChC;AACA,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,KAAK,IAAI,EAAE,WAAW,CAAC,CAAC;AAC9B,YAAM,KAAM,IAAK,IAAI,KAAM,CAAC,MAAO,IAAK;AACxC,YAAM,KAAM,IAAK,IAAI,KAAM,CAAC,MAAO,IAAK;AACxC,YAAM,KAAK,KAAKH;AAChB,YAAM,OAAS,KAAK,MAAMC,OAAMA,MAAMA,MAAM,KAAK;AACjD,UAAI,KAAKD,MAAK,EAAE,KAAKC;AACrB,UAAI,KAAKA,MAAK;AACd,UAAK,OAAO,KAAM,IAAI;AACpB,YAAK,IAAI,KAAM,CAAC,KAAM,KAAK;AAAA,MAC7B;AACA,UAAK,OAAO,KAAM,IAAI;AACpB,YAAK,IAAI,KAAM,CAAC,KAAM,KAAK;AAAA,MAC7B;AACA,WAAM,MAAM,IAAK;AACjB,WAAM,MAAM,IAAK;AACjB,MAAAA,MAAK,KAAK,EAAE,KAAK;AACjB,MAAAD,MAAK,KAAK;AAAA,IACZ;AACA,aAAS,IAAIE,QAAO,IAAIC,OAAM,KAAK;AACjC,UAAI,EAAE,WAAW,CAAC,CAAC,IAAI;AAAA,IACzB;AAAA,EACF;AACA,MAAI,KAAK;AACT,MAAI,KAAK;AACT,QAAM,QAAQ,IAAI;AAClB,QAAM,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;AACvC,WAAS,IAAI,OAAO,IAAI,MAAM,KAAK;AACjC,QAAI,EAAE,WAAW,CAAC,CAAC,KAAM,KAAK;AAAA,EAChC;AACA,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,KAAK,IAAI,EAAE,WAAW,CAAC,CAAC;AAC9B,UAAM,KAAM,IAAK,IAAI,KAAM,CAAC,MAAO,IAAK;AACxC,UAAM,KAAM,IAAK,IAAI,KAAM,CAAC,MAAO,IAAK;AACxC,UAAM,KAAK,KAAK;AAChB,UAAM,OAAS,KAAK,MAAM,MAAM,KAAM,KAAM,KAAK;AACjD,QAAI,KAAK,KAAK,EAAE,KAAK;AACrB,QAAI,KAAK,KAAK;AACd,aAAU,OAAQ,IAAI,IAAM;AAC5B,aAAU,OAAQ,IAAI,IAAM;AAC5B,QAAK,OAAO,KAAM,IAAI;AACpB,UAAK,IAAI,KAAM,CAAC,KAAM,KAAK;AAAA,IAC7B;AACA,QAAK,OAAO,KAAM,IAAI;AACpB,UAAK,IAAI,KAAM,CAAC,KAAM,KAAK;AAAA,IAC7B;AACA,SAAM,MAAM,IAAK;AACjB,SAAM,MAAM,IAAK;AACjB,SAAK,KAAK,EAAE,KAAK;AACjB,SAAK,KAAK;AAAA,EACZ;AACA,WAAS,IAAI,OAAO,IAAI,MAAM,KAAK;AACjC,QAAI,EAAE,WAAW,CAAC,CAAC,IAAI;AAAA,EACzB;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,GAAW,GAAmB;AAChE,MAAI,EAAE,SAAS,EAAE,QAAQ;AACvB,UAAM,MAAM;AACZ,QAAI;AACJ,QAAI;AAAA,EACN;AACA,MAAI,EAAE,WAAW,GAAG;AAClB,WAAO,EAAE;AAAA,EACX;AACA,MAAI,EAAE,UAAU,IAAI;AAClB,WAAO,SAAS,GAAG,CAAC;AAAA,EACtB;AACA,SAAO,QAAQ,GAAG,CAAC;AACrB;AAEO,SAAS,iBACd,KACA,KACA,cAAc,GACM;AACpB,MAAI,eAAe;AACnB,MAAI;AACJ,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,OAAO,oBAAoB,KAAK,IAAI,CAAC,CAAE;AAC7C,QAAI,OAAO,gBAAgB,QAAQ,aAAa;AAC9C,qBAAe;AACf,sBAAgB,IAAI,CAAC;AAAA,IACvB;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,0BACd,KACA,KACA,cAAc,GACJ;AACV,QAAM,cAAc,oBAAI,IAAoB;AAE5C,aAAW,QAAQ,KAAK;AACtB,UAAM,WAAW,oBAAoB,KAAK,IAAI;AAC9C,QAAI,YAAY,aAAa;AAC3B,kBAAY,IAAI,MAAM,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,YAAY,QAAQ,CAAC,EACpC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1B,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI;AACzB;","names":["mv","pv","start","vlen"]}
package/dist/main.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/main.ts"],"sourcesContent":["throw new Error('do not use this file');\n"],"mappings":";AAAA,MAAM,IAAI,MAAM,sBAAsB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/parallelAsyncResultCalls.ts"],"sourcesContent":["import { invariant, isObject } from './assertions';\nimport { NormalizedError, Result, normalizeError } from './rsResult';\nimport { sleep } from './sleep';\n\ntype ValidMetadata = string | number | boolean | Record<string, unknown>;\n\ntype TupleRunAllSuccess<T> =\n T extends () => Promise<Result<infer V>> ? Succeeded<V, undefined>\n : T extends { metadata: infer M; fn: () => Promise<Result<infer V>> } ?\n Succeeded<V, M>\n : never;\n\ntype TupleRunAllFailed<T> =\n T extends () => Promise<Result<any>> ?\n { metadata: undefined; error: NormalizedError }\n : T extends { metadata: infer M extends ValidMetadata } ?\n { metadata: M; error: NormalizedError }\n : never;\n\ntype TupleRunAllSettled<T> =\n T extends () => Promise<Result<infer V>> ?\n Succeeded<V, undefined> | Failed<undefined>\n : T extends { metadata: infer M; fn: () => Promise<Result<infer V>> } ?\n Succeeded<V, M> | Failed<M>\n : never;\n\ntype RunProps = {\n delayStart?: (index: number) => number;\n};\n\ntype Failed<M> = {\n metadata: M;\n error: NormalizedError;\n};\ntype Succeeded<R, M> = {\n value: R;\n metadata: M;\n};\n\nclass ParallelAsyncResultCalls<\n M extends ValidMetadata | undefined = undefined,\n R = unknown,\n> {\n private pendingCalls: {\n metadata: M;\n fn: () => Promise<Result<R>>;\n }[] = [];\n alreadyRun = false;\n\n constructor() {}\n\n add(\n call: M extends undefined ? () => Promise<Result<R>>\n : { metadata: M; fn: () => Promise<Result<R>> },\n ) {\n this.pendingCalls.push(\n isObject(call) ? call : { metadata: undefined as any, fn: call },\n );\n\n return this;\n }\n\n /** adds calls return tuples with inferred results */\n addTuple<\n T extends (M extends undefined ? () => Promise<Result<R>>\n : { metadata: M; fn: () => Promise<Result<R>> })[],\n >(\n ...calls: T\n ): {\n runAllSettled: (props?: RunProps) => Promise<{\n results: {\n [I in keyof T]: TupleRunAllSettled<T[I]>;\n };\n allFailed: boolean;\n }>;\n runAll: (props?: RunProps) => Promise<\n Result<\n {\n [I in keyof T]: TupleRunAllSuccess<T[I]>;\n },\n TupleRunAllFailed<T[number]>\n >\n >;\n } {\n for (const call of calls) {\n this.pendingCalls.push(\n isObject(call) ? call : { metadata: undefined as any, fn: call },\n );\n }\n\n return {\n runAll: this.runAll.bind(this) as any,\n runAllSettled: this.runAllSettled.bind(this) as any,\n };\n }\n\n async runAllSettled({ delayStart }: RunProps = {}) {\n invariant(!this.alreadyRun, 'Already run');\n\n const asyncResults = await Promise.allSettled(\n this.pendingCalls.map(async (call, i) => {\n try {\n if (delayStart) {\n await sleep(delayStart(i));\n }\n\n const result = await call.fn();\n\n return { result, callMetadata: call.metadata };\n } catch (exception) {\n return {\n result: Result.normalizedUnknownErr(exception),\n callMetadata: call.metadata,\n };\n }\n }),\n );\n\n const failed: Failed<M>[] = [];\n const succeeded: Succeeded<R, M>[] = [];\n const results: (Failed<M> | Succeeded<R, M>)[] = [];\n\n for (const asyncResult of asyncResults) {\n invariant(asyncResult.status === 'fulfilled');\n\n const { result, callMetadata } = asyncResult.value;\n\n if (result.ok) {\n const success = { value: result.value, metadata: callMetadata };\n results.push(success);\n succeeded.push(success);\n } else {\n const fail = { metadata: callMetadata, error: result.error };\n results.push(fail);\n failed.push(fail);\n }\n }\n\n const allFailed = failed.length === this.pendingCalls.length;\n\n this.alreadyRun = true;\n this.pendingCalls = [];\n\n return {\n failed,\n succeeded,\n allFailed,\n results,\n };\n }\n\n async runAll({\n delayStart,\n }: { delayStart?: (index: number) => number } = {}): Promise<\n Result<\n Succeeded<R, M>[],\n {\n metadata: M;\n error: NormalizedError;\n }\n >\n > {\n invariant(!this.alreadyRun, 'Already run');\n\n try {\n const asyncResults = await Promise.all(\n this.pendingCalls.map(async (call, i) => {\n try {\n if (delayStart) {\n await sleep(delayStart(i));\n }\n\n const result = await call.fn();\n\n if (!result.ok) {\n throw result.error;\n }\n\n return {\n value: result.value,\n metadata: call.metadata,\n };\n } catch (exception) {\n throw {\n metadata: call.metadata,\n error: normalizeError(exception),\n };\n }\n }),\n );\n\n return Result.ok(asyncResults);\n } catch (exception) {\n return Result.err(\n exception as {\n metadata: M;\n error: NormalizedError;\n },\n );\n } finally {\n this.alreadyRun = true;\n this.pendingCalls = [];\n }\n }\n}\n\n/**\n * Executes multiple asynchronous calls in parallel and collects the results in a easier to use format.\n *\n * @template R - The type of the result value.\n * @template M - The type of the call metadata.\n */\nexport function parallelAsyncResultCalls<\n M extends ValidMetadata | undefined = undefined,\n R = unknown,\n>() {\n return new ParallelAsyncResultCalls<M, R>();\n}\n"],"mappings":";;;;;;;;;;;;;;AAuCA,IAAM,2BAAN,MAGE;AAAA,EACQ,eAGF,CAAC;AAAA,EACP,aAAa;AAAA,EAEb,cAAc;AAAA,EAAC;AAAA,EAEf,IACE,MAEA;AACA,SAAK,aAAa;AAAA,MAChB,SAAS,IAAI,IAAI,OAAO,EAAE,UAAU,QAAkB,IAAI,KAAK;AAAA,IACjE;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,YAIK,OAgBH;AACA,eAAW,QAAQ,OAAO;AACxB,WAAK,aAAa;AAAA,QAChB,SAAS,IAAI,IAAI,OAAO,EAAE,UAAU,QAAkB,IAAI,KAAK;AAAA,MACjE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ,KAAK,OAAO,KAAK,IAAI;AAAA,MAC7B,eAAe,KAAK,cAAc,KAAK,IAAI;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,EAAE,WAAW,IAAc,CAAC,GAAG;AACjD,cAAU,CAAC,KAAK,YAAY,aAAa;AAEzC,UAAM,eAAe,MAAM,QAAQ;AAAA,MACjC,KAAK,aAAa,IAAI,OAAO,MAAM,MAAM;AACvC,YAAI;AACF,cAAI,YAAY;AACd,kBAAM,MAAM,WAAW,CAAC,CAAC;AAAA,UAC3B;AAEA,gBAAM,SAAS,MAAM,KAAK,GAAG;AAE7B,iBAAO,EAAE,QAAQ,cAAc,KAAK,SAAS;AAAA,QAC/C,SAAS,WAAW;AAClB,iBAAO;AAAA,YACL,QAAQ,OAAO,qBAAqB,SAAS;AAAA,YAC7C,cAAc,KAAK;AAAA,UACrB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,SAAsB,CAAC;AAC7B,UAAM,YAA+B,CAAC;AACtC,UAAM,UAA2C,CAAC;AAElD,eAAW,eAAe,cAAc;AACtC,gBAAU,YAAY,WAAW,WAAW;AAE5C,YAAM,EAAE,QAAQ,aAAa,IAAI,YAAY;AAE7C,UAAI,OAAO,IAAI;AACb,cAAM,UAAU,EAAE,OAAO,OAAO,OAAO,UAAU,aAAa;AAC9D,gBAAQ,KAAK,OAAO;AACpB,kBAAU,KAAK,OAAO;AAAA,MACxB,OAAO;AACL,cAAM,OAAO,EAAE,UAAU,cAAc,OAAO,OAAO,MAAM;AAC3D,gBAAQ,KAAK,IAAI;AACjB,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AAEA,UAAM,YAAY,OAAO,WAAW,KAAK,aAAa;AAEtD,SAAK,aAAa;AAClB,SAAK,eAAe,CAAC;AAErB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,OAAO;AAAA,IACX;AAAA,EACF,IAAgD,CAAC,GAQ/C;AACA,cAAU,CAAC,KAAK,YAAY,aAAa;AAEzC,QAAI;AACF,YAAM,eAAe,MAAM,QAAQ;AAAA,QACjC,KAAK,aAAa,IAAI,OAAO,MAAM,MAAM;AACvC,cAAI;AACF,gBAAI,YAAY;AACd,oBAAM,MAAM,WAAW,CAAC,CAAC;AAAA,YAC3B;AAEA,kBAAM,SAAS,MAAM,KAAK,GAAG;AAE7B,gBAAI,CAAC,OAAO,IAAI;AACd,oBAAM,OAAO;AAAA,YACf;AAEA,mBAAO;AAAA,cACL,OAAO,OAAO;AAAA,cACd,UAAU,KAAK;AAAA,YACjB;AAAA,UACF,SAAS,WAAW;AAClB,kBAAM;AAAA,cACJ,UAAU,KAAK;AAAA,cACf,OAAO,eAAe,SAAS;AAAA,YACjC;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aAAO,OAAO,GAAG,YAAY;AAAA,IAC/B,SAAS,WAAW;AAClB,aAAO,OAAO;AAAA,QACZ;AAAA,MAIF;AAAA,IACF,UAAE;AACA,WAAK,aAAa;AAClB,WAAK,eAAe,CAAC;AAAA,IACvB;AAAA,EACF;AACF;AAQO,SAAS,2BAGZ;AACF,SAAO,IAAI,yBAA+B;AAC5C;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/promiseUtils.ts"],"sourcesContent":["type Deferred<T> = {\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason: unknown) => void;\n promise: Promise<T>;\n};\n\nexport function defer<T = void>(): Deferred<T> {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason: unknown) => void;\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return { resolve, reject, promise };\n}\n"],"mappings":";AAMO,SAAS,QAA+B;AAC7C,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAW,CAAC,UAAU,YAAY;AACpD,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO,EAAE,SAAS,QAAQ,QAAQ;AACpC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runShellCmd.ts"],"sourcesContent":["/* eslint-disable no-console -- we need console here to print errors */\n\ntype CmdResult = {\n label: string | null;\n out: string;\n error: boolean;\n stdout: string;\n stderr: string;\n};\n\nimport { spawn } from 'child_process';\n\n(process.env as any).FORCE_COLOR = true;\n\ntype RunCmdOptions = {\n mock?: CmdResult;\n silent?: boolean | 'timeOnly';\n cwd?: string;\n throwOnError?: boolean;\n};\n\nexport function runCmd(\n label: string | null,\n command: string | string[],\n { mock, silent, throwOnError, cwd = process.cwd() }: RunCmdOptions = {},\n): Promise<CmdResult> {\n if (mock) return Promise.resolve(mock);\n\n if (label && (!silent || silent === 'timeOnly')) {\n console.log(`----${label}----`);\n console.time('✅');\n }\n\n return new Promise((resolve) => {\n const [cmd = '', ...args] =\n Array.isArray(command) ?\n command.flatMap((item) =>\n item.startsWith('$') ? item.replace('$', '').split(' ') : item,\n )\n : command.split(' ');\n const child = spawn(cmd, args, {\n cwd,\n });\n\n let stdout = '';\n let stderr = '';\n let out = '';\n\n child.stdout.on('data', (data) => {\n stdout += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.stderr.on('data', (data) => {\n stderr += String(data);\n out += String(data);\n\n if (!silent) {\n console.log(String(data));\n }\n });\n\n child.on('close', (code) => {\n const hasError = code !== 0;\n\n if (!silent || silent === 'timeOnly') {\n if (!hasError) {\n console.timeEnd('✅');\n }\n\n console.log('\\n');\n }\n\n if (throwOnError && hasError) {\n if (silent) {\n if (label) {\n console.log(`----${label}----`);\n } else {\n console.trace();\n }\n console.error(stderr);\n }\n\n process.exit(1);\n }\n\n resolve({ label, out, stderr, stdout, error: hasError });\n });\n });\n}\n\nexport async function concurrentCmd(\n label: string,\n cmd: string | string[],\n onResult: (result: CmdResult) => void,\n) {\n const start = Date.now();\n\n const result = await runCmd(label, cmd, { silent: true });\n\n onResult(result);\n\n const elapsedSeconds = (Date.now() - start) / 1000;\n\n console.log(\n `${result.error ? '🔴' : '✅'} ${result.label} (${elapsedSeconds.toFixed(\n 1,\n )}s)`,\n );\n\n return () => {\n if (result.error) {\n console.log(`❌ ${result.label} errors:`);\n console.log(result.out);\n console.log('\\n');\n }\n };\n}\n\nexport async function runCmdUnwrap(\n label: string | null,\n command: string | string[],\n {\n silent,\n }: {\n silent?: boolean | 'timeOnly';\n } = {},\n) {\n return (await runCmd(label, command, { silent, throwOnError: true })).stdout;\n}\n\nexport function runCmdSilent(command: string | string[]) {\n return runCmd(null, command, { silent: true });\n}\n\nexport function runCmdSilentUnwrap(command: string | string[]) {\n return runCmdUnwrap(null, command, { silent: true });\n}\n"],"mappings":";AAUA,SAAS,aAAa;AAErB,QAAQ,IAAY,cAAc;AAS5B,SAAS,OACd,OACA,SACA,EAAE,MAAM,QAAQ,cAAc,MAAM,QAAQ,IAAI,EAAE,IAAmB,CAAC,GAClD;AACpB,MAAI,KAAM,QAAO,QAAQ,QAAQ,IAAI;AAErC,MAAI,UAAU,CAAC,UAAU,WAAW,aAAa;AAC/C,YAAQ,IAAI,OAAO,KAAK,MAAM;AAC9B,YAAQ,KAAK,QAAG;AAAA,EAClB;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IACtB,MAAM,QAAQ,OAAO,IACnB,QAAQ;AAAA,MAAQ,CAAC,SACf,KAAK,WAAW,GAAG,IAAI,KAAK,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG,IAAI;AAAA,IAC5D,IACA,QAAQ,MAAM,GAAG;AACrB,UAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,QAAI,SAAS;AACb,QAAI,SAAS;AACb,QAAI,MAAM;AAEV,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,OAAO,GAAG,QAAQ,CAAC,SAAS;AAChC,gBAAU,OAAO,IAAI;AACrB,aAAO,OAAO,IAAI;AAElB,UAAI,CAAC,QAAQ;AACX,gBAAQ,IAAI,OAAO,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAM,WAAW,SAAS;AAE1B,UAAI,CAAC,UAAU,WAAW,YAAY;AACpC,YAAI,CAAC,UAAU;AACb,kBAAQ,QAAQ,QAAG;AAAA,QACrB;AAEA,gBAAQ,IAAI,IAAI;AAAA,MAClB;AAEA,UAAI,gBAAgB,UAAU;AAC5B,YAAI,QAAQ;AACV,cAAI,OAAO;AACT,oBAAQ,IAAI,OAAO,KAAK,MAAM;AAAA,UAChC,OAAO;AACL,oBAAQ,MAAM;AAAA,UAChB;AACA,kBAAQ,MAAM,MAAM;AAAA,QACtB;AAEA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,cAAQ,EAAE,OAAO,KAAK,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,IACzD,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,cACpB,OACA,KACA,UACA;AACA,QAAM,QAAQ,KAAK,IAAI;AAEvB,QAAM,SAAS,MAAM,OAAO,OAAO,KAAK,EAAE,QAAQ,KAAK,CAAC;AAExD,WAAS,MAAM;AAEf,QAAM,kBAAkB,KAAK,IAAI,IAAI,SAAS;AAE9C,UAAQ;AAAA,IACN,GAAG,OAAO,QAAQ,cAAO,QAAG,IAAI,OAAO,KAAK,KAAK,eAAe;AAAA,MAC9D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,MAAM;AACX,QAAI,OAAO,OAAO;AAChB,cAAQ,IAAI,UAAK,OAAO,KAAK,UAAU;AACvC,cAAQ,IAAI,OAAO,GAAG;AACtB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA,EACF;AACF;AAEA,eAAsB,aACpB,OACA,SACA;AAAA,EACE;AACF,IAEI,CAAC,GACL;AACA,UAAQ,MAAM,OAAO,OAAO,SAAS,EAAE,QAAQ,cAAc,KAAK,CAAC,GAAG;AACxE;AAEO,SAAS,aAAa,SAA4B;AACvD,SAAO,OAAO,MAAM,SAAS,EAAE,QAAQ,KAAK,CAAC;AAC/C;AAEO,SAAS,mBAAmB,SAA4B;AAC7D,SAAO,aAAa,MAAM,SAAS,EAAE,QAAQ,KAAK,CAAC;AACrD;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shallowEqual.ts"],"sourcesContent":["/* eslint-disable */\nvar has = Object.prototype.hasOwnProperty;\n\nfunction find(iter: any[], tar: any, key?: any) {\n for (key of iter.keys()) {\n if (key === tar) return key;\n }\n}\n\n/** shallow equal version of https://github.com/lukeed/dequal */\nexport function shallowEqual(foo: any, bar: any): boolean {\n var ctor, len, tmp;\n if (foo === bar) return true;\n\n if (foo && bar && (ctor = foo.constructor) === bar.constructor) {\n if (ctor === Date) return shallowEqual(foo.getTime(), bar.getTime());\n if (ctor === RegExp) return foo.toString() === bar.toString();\n\n if (ctor === Array) {\n if ((len = foo.length) === bar.length) {\n while (len-- && foo[len] === bar[len]);\n }\n return len === -1;\n }\n\n if (ctor === Set) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len;\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (!bar.has(tmp)) return false;\n }\n return true;\n }\n\n if (ctor === Map) {\n if (foo.size !== bar.size) {\n return false;\n }\n for (len of foo) {\n tmp = len[0];\n if (tmp && typeof tmp === 'object') {\n tmp = find(bar, tmp);\n if (!tmp) return false;\n }\n if (len[1] !== bar.get(tmp)) {\n return false;\n }\n }\n return true;\n }\n\n if (!ctor || typeof foo === 'object') {\n len = 0;\n for (ctor in foo) {\n if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n if (!(ctor in bar) || !(foo[ctor] === bar[ctor])) return false;\n }\n return Object.keys(bar).length === len;\n }\n }\n\n return foo !== foo && bar !== bar;\n}\n"],"mappings":";AACA,IAAI,MAAM,OAAO,UAAU;AAE3B,SAAS,KAAK,MAAa,KAAU,KAAW;AAC9C,OAAK,OAAO,KAAK,KAAK,GAAG;AACvB,QAAI,QAAQ,IAAK,QAAO;AAAA,EAC1B;AACF;AAGO,SAAS,aAAa,KAAU,KAAmB;AACxD,MAAI,MAAM,KAAK;AACf,MAAI,QAAQ,IAAK,QAAO;AAExB,MAAI,OAAO,QAAQ,OAAO,IAAI,iBAAiB,IAAI,aAAa;AAC9D,QAAI,SAAS,KAAM,QAAO,aAAa,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC;AACnE,QAAI,SAAS,OAAQ,QAAO,IAAI,SAAS,MAAM,IAAI,SAAS;AAE5D,QAAI,SAAS,OAAO;AAClB,WAAK,MAAM,IAAI,YAAY,IAAI,QAAQ;AACrC,eAAO,SAAS,IAAI,GAAG,MAAM,IAAI,GAAG,EAAE;AAAA,MACxC;AACA,aAAO,QAAQ;AAAA,IACjB;AAEA,QAAI,SAAS,KAAK;AAChB,UAAI,IAAI,SAAS,IAAI,MAAM;AACzB,eAAO;AAAA,MACT;AACA,WAAK,OAAO,KAAK;AACf,cAAM;AACN,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,gBAAM,KAAK,KAAK,GAAG;AACnB,cAAI,CAAC,IAAK,QAAO;AAAA,QACnB;AACA,YAAI,CAAC,IAAI,IAAI,GAAG,EAAG,QAAO;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK;AAChB,UAAI,IAAI,SAAS,IAAI,MAAM;AACzB,eAAO;AAAA,MACT;AACA,WAAK,OAAO,KAAK;AACf,cAAM,IAAI,CAAC;AACX,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,gBAAM,KAAK,KAAK,GAAG;AACnB,cAAI,CAAC,IAAK,QAAO;AAAA,QACnB;AACA,YAAI,IAAI,CAAC,MAAM,IAAI,IAAI,GAAG,GAAG;AAC3B,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,QAAQ,OAAO,QAAQ,UAAU;AACpC,YAAM;AACN,WAAK,QAAQ,KAAK;AAChB,YAAI,IAAI,KAAK,KAAK,IAAI,KAAK,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,EAAG,QAAO;AACjE,YAAI,EAAE,QAAQ,QAAQ,EAAE,IAAI,IAAI,MAAM,IAAI,IAAI,GAAI,QAAO;AAAA,MAC3D;AACA,aAAO,OAAO,KAAK,GAAG,EAAE,WAAW;AAAA,IACrC;AAAA,EACF;AAEA,SAAO,QAAQ,OAAO,QAAQ;AAChC;","names":[]}
package/dist/sleep.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/testUtils.ts"],"sourcesContent":["import { arrayWithPrevAndIndex, filterAndMap } from './arrayUtils';\nimport { isObject } from './assertions';\nimport { deepEqual } from './deepEqual';\nimport { clampMin } from './mathUtils';\nimport { omit, pick } from './objUtils';\n\nexport function createLoggerStore({\n filterKeys: defaultFilterKeys,\n rejectKeys: defaultRejectKeys,\n splitLongLines: defaultSplitLongLines = true,\n maxLineLengthBeforeSplit: defaultMaxLineLengthBeforeSplit = 80,\n fromLastSnapshot: defaultFromLastSnapshot = false,\n arrays: defaultArrays = { firstNItems: 1 },\n changesOnly: defaultChangesOnly = false,\n useEmojiForBooleans: defaultUseEmojiForBooleans = true,\n}: {\n filterKeys?: string[];\n rejectKeys?: string[];\n splitLongLines?: true;\n maxLineLengthBeforeSplit?: number;\n fromLastSnapshot?: boolean;\n arrays?: 'all' | 'firstAndLast' | 'length' | { firstNItems: number };\n changesOnly?: boolean;\n useEmojiForBooleans?: boolean;\n} = {}) {\n let logs: Record<string, unknown>[] = [];\n let logsTime: number[] = [];\n let startTime = Date.now();\n let onNextLog: () => void = () => {};\n\n function reset(keepLastRender = false) {\n logs = keepLastRender ? [logs.at(-1)!] : [];\n logsTime = [];\n startTime = Date.now();\n }\n\n function add(\n render: Record<string, unknown> | readonly Record<string, unknown>[],\n ) {\n if (!isObject(render)) {\n for (const [i, r] of render.entries()) {\n logs.push({\n i: i + 1,\n ...r,\n });\n logsTime.push(Date.now() - startTime);\n }\n } else {\n logs.push(render);\n logsTime.push(Date.now() - startTime);\n }\n\n onNextLog();\n\n if (logs.length > 100) {\n throw new Error('Too many logs');\n }\n }\n\n function logsCount() {\n return logs.filter((item) => !item._lastSnapshotMark).length;\n }\n\n async function waitNextLog(timeout = 50) {\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n throw new Error('Timeout');\n }, timeout);\n\n onNextLog = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n });\n }\n\n function getSnapshot({\n arrays = defaultArrays,\n changesOnly = defaultChangesOnly,\n filterKeys = defaultFilterKeys,\n rejectKeys = defaultRejectKeys,\n includeLastSnapshotEndMark = true,\n splitLongLines = defaultSplitLongLines,\n maxLineLengthBeforeSplit = defaultMaxLineLengthBeforeSplit,\n fromLastSnapshot = defaultFromLastSnapshot,\n useEmojiForBooleans = defaultUseEmojiForBooleans,\n }: {\n arrays?: 'all' | 'firstAndLast' | 'length' | { firstNItems: number };\n changesOnly?: boolean;\n filterKeys?: string[];\n rejectKeys?: string[];\n includeLastSnapshotEndMark?: boolean;\n splitLongLines?: boolean;\n maxLineLengthBeforeSplit?: number;\n fromLastSnapshot?: boolean;\n useEmojiForBooleans?: boolean;\n } = {}) {\n let rendersToUse = logs;\n\n if (changesOnly || filterKeys || rejectKeys) {\n rendersToUse = [];\n\n for (let { item, prev } of arrayWithPrevAndIndex(logs)) {\n if (item._lastSnapshotMark || item._mark) {\n rendersToUse.push(item);\n continue;\n }\n\n if (filterKeys) {\n prev = prev && pick(prev, filterKeys);\n item = pick(item, filterKeys);\n }\n\n if (rejectKeys) {\n prev = prev && omit(prev, rejectKeys);\n item = omit(item, rejectKeys);\n }\n\n if (!deepEqual(prev, item)) {\n rendersToUse.push(item);\n }\n }\n }\n\n if (fromLastSnapshot) {\n const lastSnapshotMark = rendersToUse.findLastIndex(\n (item) => item._lastSnapshotMark === true,\n );\n\n rendersToUse = rendersToUse.slice(clampMin(lastSnapshotMark, 0));\n }\n\n logs.push({ _lastSnapshotMark: true });\n\n const propDivider = '⋅';\n\n return `\\n${filterAndMap(rendersToUse, (render, i) => {\n if (render._lastSnapshotMark) {\n if (includeLastSnapshotEndMark && i !== rendersToUse.length - 1) {\n return '⋅⋅⋅';\n } else {\n return false;\n }\n }\n\n if (render._mark) {\n const prevIsLastSnapshotMark = rendersToUse[i - 1]?._lastSnapshotMark;\n let mark = `${\n prevIsLastSnapshotMark ? '' : '\\n'\n }>>> ${String(render._mark)}`;\n\n const nextRender = rendersToUse[i + 1];\n\n if (nextRender && !nextRender._mark && !nextRender._lastSnapshotMark) {\n mark = `${mark}\\n`;\n }\n\n return mark;\n }\n\n let line = '';\n\n for (const [key, _value] of Object.entries(render)) {\n let value = _value;\n\n if (Array.isArray(value)) {\n if (arrays === 'length') {\n value = `Array(${value.length})`;\n } else if (arrays === 'firstAndLast' && value.length > 2) {\n const intermediateSize = clampMin(value.length - 2, 0);\n\n value = [value[0], `…(${intermediateSize} between)`, value.at(-1)];\n } else if (typeof arrays === 'object' && value.length > 2) {\n value = [\n ...value.slice(0, arrays.firstNItems),\n `…(${value.length - arrays.firstNItems} more)`,\n ];\n }\n }\n\n if (typeof value === 'boolean' && useEmojiForBooleans) {\n value = value ? '✅' : '❌';\n }\n\n if (value === '') {\n value = `''`;\n }\n\n if (typeof value === 'object' && value !== null) {\n value = JSON.stringify(value)\n .replace(/:true/g, ':✅')\n .replace(/:false/g, ':❌')\n .replace(/:\"\"/g, \":''\")\n .replace(/\"/g, '')\n .replace(/,/g, ', ');\n }\n\n line += `${key}: ${value} ${propDivider} `;\n }\n\n line = line.slice(0, (propDivider.length + 2) * -1);\n\n if (splitLongLines && line.length > maxLineLengthBeforeSplit) {\n const parts = line.split(` ${propDivider} `);\n\n if (parts.length === 1) {\n return line;\n }\n\n line = '';\n\n const propDividerML = '⋅';\n\n for (const { item, index } of arrayWithPrevAndIndex(parts)) {\n if (index === 0) {\n line += `┌─\\n${propDividerML} `;\n } else if (index === parts.length - 1) {\n line += `${propDividerML} `;\n } else {\n line += `${propDividerML} `;\n }\n\n line += `${item}\\n`;\n\n if (index === parts.length - 1) {\n line += '└─';\n }\n }\n } else {\n line = `-> ${line}`;\n }\n\n return line;\n }).join('\\n')}\\n`;\n }\n\n function addMark(label: string) {\n add({ _mark: label });\n }\n\n return {\n add,\n reset,\n getSnapshot,\n waitNextLog,\n get changesSnapshot() {\n return getSnapshot({ changesOnly: true });\n },\n get snapshot() {\n return getSnapshot();\n },\n get snapshotFromLast() {\n return getSnapshot({ fromLastSnapshot: true });\n },\n logsCount,\n get rendersTime() {\n return logsTime;\n },\n addMark,\n };\n}\n\nexport function getResultFn<T extends (...args: any[]) => any>(\n fnGetter: () => T,\n wrapper?: (...args: any[]) => any,\n): T {\n return ((...args: any[]) => {\n const fn = fnGetter();\n\n if (wrapper) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return wrapper(fn(...args));\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return fn(...args);\n }\n }) as T;\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/typingFnUtils.ts"],"sourcesContent":["import { NonPartial } from './typingUtils';\n\nexport function asNonPartial<T extends Record<string, unknown>>(\n obj: T,\n): NonPartial<T> {\n return obj;\n}\n\n/** a wrapper to Object.entries with a better typing inference */\nexport function typedObjectEntries<T extends Record<string, unknown>>(\n obj: T,\n): NonNullable<\n {\n [K in keyof T]: [K, T[K]];\n }[keyof T]\n>[] {\n return Object.entries(obj) as any;\n}\n\n/** a wrapper to Object.keys with a better typing inference */\nexport function typedObjectKeys<T extends Record<string, unknown>>(\n obj: T,\n): (keyof T)[] {\n return Object.keys(obj) as any;\n}\n\n/** a safe way to cast types, use to substitute the `as Type` */\nexport function asType<T = unknown>(value: T): T {\n return value;\n}\n\n/** narrow a string to a union of strings */\nexport function narrowStringToUnion<const T extends string>(\n key: string | undefined | null,\n union: T[],\n): T | undefined {\n if (key && union.includes(key as T)) {\n return key as T;\n }\n\n return undefined;\n}\n"],"mappings":";AAEO,SAAS,aACd,KACe;AACf,SAAO;AACT;AAGO,SAAS,mBACd,KAKE;AACF,SAAO,OAAO,QAAQ,GAAG;AAC3B;AAGO,SAAS,gBACd,KACa;AACb,SAAO,OAAO,KAAK,GAAG;AACxB;AAGO,SAAS,OAAoB,OAAa;AAC/C,SAAO;AACT;AAGO,SAAS,oBACd,KACA,OACe;AACf,MAAI,OAAO,MAAM,SAAS,GAAQ,GAAG;AACnC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/typingTestUtils.ts"],"sourcesContent":["export type TestTypeIsEqual<X, Y> =\n (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true\n : false;\nexport type TestTypeNotEqual<X, Y> =\n true extends TestTypeIsEqual<X, Y> ? false : true;\n\nfunction test(title: string, func: () => any) {\n func();\n}\n\nfunction describe(title: string, func: () => any) {\n func();\n}\n\nfunction expectType<T extends true>() {\n return {} as T;\n}\n\nexport const typingTest = {\n test,\n describe,\n expectType,\n};\n"],"mappings":";AAMA,SAAS,KAAK,OAAe,MAAiB;AAC5C,OAAK;AACP;AAEA,SAAS,SAAS,OAAe,MAAiB;AAChD,OAAK;AACP;AAEA,SAAS,aAA6B;AACpC,SAAO,CAAC;AACV;AAEO,IAAM,aAAa;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/yamlStringify.ts"],"sourcesContent":["import { isObject, isPlainObject } from './assertions';\nimport { bytesToHumanReadable } from './conversions';\nimport { truncateString } from './stringUtils';\n\nexport function yamlStringify(\n obj: unknown,\n {\n maxLineLength = 100,\n showUndefined,\n maxDepth = 50,\n addRootObjSpaces = 'beforeAndAfter',\n }: {\n maxLineLength?: number;\n showUndefined?: boolean;\n maxDepth?: number;\n addRootObjSpaces?: 'before' | 'after' | 'beforeAndAfter' | false;\n } = {},\n): string {\n if (isObject(obj) || Array.isArray(obj) || typeof obj === 'function') {\n return `${stringifyValue(obj, '', maxLineLength, !!showUndefined, maxDepth, 0, addRootObjSpaces)}\\n`;\n }\n\n return JSON.stringify(obj) || 'undefined';\n}\n\nfunction stringifyValue(\n value: unknown,\n indent: string,\n maxLineLength: number,\n showUndefined: boolean,\n maxDepth: number,\n depth: number,\n addObjSpaces: 'before' | 'after' | 'beforeAndAfter' | false,\n): string {\n let result = '';\n const childIndent = `${indent} `;\n\n if (isPlainObject(value)) {\n if (Object.keys(value).length === 0) {\n return '{}';\n }\n\n let prevValue: unknown;\n let afterSpaceWasAdded = false;\n\n for (let [key, objVal] of Object.entries(value)) {\n if (objVal === undefined && !showUndefined) {\n continue;\n }\n\n if (depth > maxDepth) {\n objVal = `{max depth reached}`;\n }\n\n const normalizedValue = normalizeValue(objVal);\n\n if (normalizedValue !== null) {\n objVal = normalizedValue[1];\n key = `${key}{${normalizedValue[0]}}`;\n }\n\n const valueString = stringifyValue(\n objVal,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n\n if (\n !afterSpaceWasAdded &&\n indent === '' &&\n isObject(objVal) &&\n prevValue &&\n (addObjSpaces === 'before' || addObjSpaces === 'beforeAndAfter')\n ) {\n result += '\\n';\n }\n\n if (Array.isArray(objVal)) {\n const arrayIsSingleLine = valueString.split('\\n').length === 1;\n\n if (arrayIsSingleLine && !valueString.trim().startsWith('-')) {\n result += `${indent}${key}: `;\n } else {\n result += `${indent}${key}:\\n`;\n }\n } else if (isObject(objVal)) {\n if (Object.keys(objVal).length === 0) {\n result += `${indent}${key}: `;\n } else {\n result += `${indent}${key}:\\n`;\n }\n } else {\n result += `${indent}${key}: `;\n }\n\n result += valueString;\n result += '\\n';\n\n if (indent === '') {\n if (isObject(objVal)) {\n if (addObjSpaces === 'after' || addObjSpaces === 'beforeAndAfter') {\n result += '\\n';\n afterSpaceWasAdded = true;\n } else {\n afterSpaceWasAdded = false;\n }\n }\n }\n\n prevValue = objVal;\n }\n\n return result.trimEnd();\n }\n\n if (Array.isArray(value)) {\n let arrayWasAdded = false;\n\n if (\n value.length === 0 ||\n value.every(\n (item) =>\n typeof item === 'string' ||\n typeof item === 'number' ||\n typeof item === 'boolean' ||\n item === null ||\n item === undefined,\n )\n ) {\n let line = '';\n\n line += `[`;\n\n line += value\n .map((item) => {\n let valueToUse = item;\n\n if (depth > maxDepth) {\n valueToUse = `{max depth reached}`;\n }\n\n if (typeof valueToUse === 'string' && valueToUse.includes('\\n')) {\n valueToUse = valueToUse.replace(/\\n/g, '\\\\n');\n }\n\n return stringifyValue(\n valueToUse,\n '',\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n })\n .join(', ');\n\n line += ']';\n\n if (line.length <= maxLineLength) {\n result += line;\n arrayWasAdded = true;\n }\n }\n\n if (!arrayWasAdded) {\n for (let item of value) {\n if (depth > maxDepth) {\n item = `{max depth reached}`;\n }\n\n result += `${indent}- `;\n\n if (Array.isArray(item) || isObject(item)) {\n let arrayString = stringifyValue(\n item,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n\n arrayString = arrayString.trimStart();\n\n result += arrayString;\n } else {\n result += stringifyValue(\n item,\n childIndent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n }\n\n result += '\\n';\n }\n }\n\n return result.trimEnd();\n }\n\n if (typeof value === 'string') {\n if (value.includes('\\n')) {\n const lines = value.split('\\n');\n\n for (const [i, line] of lines.entries()) {\n if (i === 0) {\n if (value.endsWith('\\n')) {\n result += `|`;\n } else {\n result += `|-`;\n }\n\n result += `\\n${indent}${line}\\n`;\n } else {\n result += `${indent}${line}\\n`;\n }\n }\n } else {\n if (value.includes(\"'\")) {\n result += `\"${value}\"`;\n } else {\n result += `'${value}'`;\n }\n }\n\n return result.trimEnd();\n }\n\n if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value === null ||\n value === undefined\n ) {\n return String(value).trimEnd();\n }\n\n const normalizedValue = normalizeValue(value);\n\n if (normalizedValue !== null) {\n return stringifyValue(\n {\n [`${normalizedValue[0]}#`]: normalizedValue[1],\n },\n indent,\n maxLineLength,\n showUndefined,\n maxDepth,\n depth + 1,\n addObjSpaces,\n );\n }\n\n return JSON.stringify(value);\n}\n\nfunction normalizeValue(value: unknown): [string, unknown] | null {\n if (value === null || isPlainObject(value) || Array.isArray(value)) {\n return null;\n }\n\n if (value instanceof Map) {\n const mapEntries = Array.from(value.entries());\n\n let mapValue: unknown;\n\n if (mapEntries.every(([key]) => typeof key === 'string')) {\n const mapObjValue: Record<string, unknown> = {};\n\n for (const [key, val] of mapEntries) {\n mapObjValue[key] = val;\n }\n\n mapValue = mapObjValue;\n } else {\n mapValue = mapEntries.map(([key, val]) => ({\n key,\n value: val,\n }));\n }\n\n return ['Map', mapValue];\n }\n\n if (value instanceof Set) {\n const setValue = Array.from(value);\n\n return ['Set', setValue];\n }\n\n if (value instanceof Date) {\n return ['Date', value.toISOString()];\n }\n\n if (value instanceof RegExp) {\n return ['RegExp', value.toString()];\n }\n\n if (value instanceof Error) {\n return [\n 'Error',\n {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n ];\n }\n\n if (value instanceof File) {\n return [\n 'File',\n {\n name: value.name,\n type: value.type,\n lastModified: new Date(value.lastModified).toISOString(),\n size: bytesToHumanReadable(value.size),\n },\n ];\n }\n\n if (typeof value === 'object') {\n if ('toJSON' in value && typeof value.toJSON === 'function') {\n return [value.constructor.name, value.toJSON()];\n }\n\n if ('toString' in value && typeof value.toString === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const stringValue = value.toString();\n\n if (stringValue.toString() !== '[object Object]') {\n return [value.constructor.name, stringValue];\n }\n }\n\n const objectValue = { ...value };\n\n const displayValue: Record<string, unknown> = {};\n let addedKeys = 0;\n\n for (const [key, item] of Object.entries(objectValue)) {\n if (addedKeys > 4) {\n displayValue['...and more properties'] =\n Object.keys(objectValue).length - 4;\n break;\n }\n\n if (\n typeof item === 'string' ||\n typeof item === 'number' ||\n typeof item === 'boolean' ||\n item === null ||\n item === undefined\n ) {\n displayValue[key] = item;\n addedKeys++;\n }\n }\n\n return [String(value.constructor.name), displayValue];\n }\n\n if (typeof value === 'function') {\n const functionString = value.toString();\n\n return [\n `Function`,\n functionString.includes('\\n') ?\n truncateString(functionString.split('\\n').join(''), 40)\n : functionString,\n ];\n }\n\n return null;\n}\n"],"mappings":"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","names":["normalizedValue"]}