@augment-vir/common 29.2.0 → 30.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 (273) hide show
  1. package/LICENSE-CC0 +121 -0
  2. package/LICENSE-MIT +21 -0
  3. package/dist/augments/array/array-map.d.ts +6 -0
  4. package/dist/augments/array/array-map.js +4 -0
  5. package/dist/augments/array/array-to-object.d.ts +17 -0
  6. package/dist/augments/array/array-to-object.js +31 -0
  7. package/dist/augments/array/awaited/awaited-filter.d.ts +7 -0
  8. package/dist/augments/array/awaited/awaited-filter.js +7 -0
  9. package/dist/augments/array/awaited/awaited-for-each.d.ts +6 -0
  10. package/dist/augments/array/awaited/awaited-for-each.js +9 -0
  11. package/dist/augments/array/awaited/awaited-map.d.ts +1 -0
  12. package/dist/augments/array/awaited/awaited-map.js +8 -0
  13. package/dist/augments/array/filter.d.ts +3 -0
  14. package/dist/augments/array/filter.js +13 -0
  15. package/dist/augments/array/repeat-array.d.ts +1 -0
  16. package/dist/augments/array/repeat-array.js +3 -0
  17. package/dist/augments/array/shuffle-array.d.ts +2 -0
  18. package/dist/augments/array/shuffle-array.js +10 -0
  19. package/dist/augments/array/string-array.d.ts +1 -0
  20. package/dist/augments/array/string-array.js +3 -0
  21. package/dist/augments/boolean/if-truthy.d.ts +2 -0
  22. package/dist/{esm/augments/boolean.js → augments/boolean/if-truthy.js} +2 -7
  23. package/dist/augments/core-exports.d.ts +1 -0
  24. package/dist/augments/core-exports.js +1 -0
  25. package/dist/augments/enum/enum-value-check.d.ts +2 -0
  26. package/dist/augments/enum/enum-value-check.js +4 -0
  27. package/dist/augments/error/combine-errors.d.ts +3 -0
  28. package/dist/augments/error/combine-errors.js +12 -0
  29. package/dist/augments/function/call-asynchronously.d.ts +6 -0
  30. package/dist/augments/function/call-asynchronously.js +7 -0
  31. package/dist/augments/function/call-with-retries.d.ts +4 -0
  32. package/dist/augments/function/call-with-retries.js +27 -0
  33. package/dist/augments/function/debounce.d.ts +22 -0
  34. package/dist/augments/function/debounce.js +50 -0
  35. package/dist/augments/function/execution-duration.d.ts +8 -0
  36. package/dist/{esm/augments/time.js → augments/function/execution-duration.js} +7 -12
  37. package/dist/{types/augments → augments/function}/wrap-in-try.d.ts +2 -3
  38. package/dist/{esm/augments → augments/function}/wrap-in-try.js +4 -4
  39. package/dist/augments/json/append-json.d.ts +5 -0
  40. package/dist/augments/json/append-json.js +26 -0
  41. package/dist/augments/json/copy-through-json.d.ts +3 -0
  42. package/dist/augments/json/copy-through-json.js +11 -0
  43. package/dist/augments/json/jsonify.d.ts +2 -0
  44. package/dist/augments/json/jsonify.js +4 -0
  45. package/dist/augments/log/log-colors.d.ts +23 -0
  46. package/dist/augments/log/log-colors.js +116 -0
  47. package/dist/augments/log/log-string.d.ts +14 -0
  48. package/dist/augments/log/log-string.js +66 -0
  49. package/dist/augments/log/log-writer.d.ts +8 -0
  50. package/dist/augments/log/log.d.ts +13 -0
  51. package/dist/augments/log/log.js +42 -0
  52. package/dist/augments/log/logger.d.ts +11 -0
  53. package/dist/augments/log/logger.js +38 -0
  54. package/dist/augments/number/clamp.d.ts +7 -0
  55. package/dist/augments/number/clamp.js +8 -0
  56. package/dist/augments/number/coords.d.ts +19 -0
  57. package/dist/augments/number/digit.d.ts +1 -0
  58. package/dist/augments/number/dimensions.d.ts +19 -0
  59. package/dist/augments/number/min-max.d.ts +11 -0
  60. package/dist/augments/number/min-max.js +14 -0
  61. package/dist/augments/number/number-conversion.d.ts +23 -0
  62. package/dist/augments/number/number-conversion.js +50 -0
  63. package/dist/augments/number/round.d.ts +3 -0
  64. package/dist/augments/number/round.js +5 -0
  65. package/dist/augments/number/scientific.d.ts +1 -0
  66. package/dist/augments/number/scientific.js +3 -0
  67. package/dist/{esm/augments → augments/number}/truncate-number.js +14 -12
  68. package/dist/augments/number/wrap-number.d.ts +13 -0
  69. package/dist/augments/number/wrap-number.js +22 -0
  70. package/dist/augments/object/diff.d.ts +29 -0
  71. package/dist/augments/object/diff.js +133 -0
  72. package/dist/augments/object/empty.d.ts +3 -0
  73. package/dist/augments/object/get-or-set.d.ts +31 -0
  74. package/dist/{esm/augments → augments}/object/get-or-set.js +5 -3
  75. package/dist/{types/augments → augments}/object/key-count.d.ts +9 -5
  76. package/dist/augments/object/map-entries.d.ts +13 -0
  77. package/dist/augments/object/map-entries.js +57 -0
  78. package/dist/augments/object/map-enum.d.ts +4 -0
  79. package/dist/augments/object/map-enum.js +21 -0
  80. package/dist/{types/augments/object/map-object.d.ts → augments/object/map-values.d.ts} +6 -3
  81. package/dist/{esm/augments/object/map-object.js → augments/object/map-values.js} +9 -9
  82. package/dist/{esm/augments → augments}/object/merge-deep.js +5 -6
  83. package/dist/augments/object/merge-defined-properties.d.ts +6 -0
  84. package/dist/augments/object/merge-defined-properties.js +19 -0
  85. package/dist/{esm/augments → augments}/object/merge-property-arrays.js +1 -1
  86. package/dist/augments/object/object-entries.d.ts +4 -0
  87. package/dist/augments/object/object-entries.js +13 -0
  88. package/dist/augments/object/object-filter.d.ts +2 -0
  89. package/dist/augments/object/object-filter.js +7 -0
  90. package/dist/augments/object/object-keys.d.ts +2 -0
  91. package/dist/augments/object/object-keys.js +11 -0
  92. package/dist/augments/object/object-values.d.ts +2 -0
  93. package/dist/augments/object/object-values.js +4 -0
  94. package/dist/augments/prisma/prisma-models.d.ts +106 -0
  95. package/dist/augments/prisma/prisma-models.js +1 -0
  96. package/dist/augments/promise/timed-promise.d.ts +7 -0
  97. package/dist/augments/promise/timed-promise.js +36 -0
  98. package/dist/augments/random/random-boolean.d.ts +18 -0
  99. package/dist/augments/random/random-boolean.js +26 -0
  100. package/dist/augments/random/random-integer.d.ts +12 -0
  101. package/dist/augments/random/random-integer.js +32 -0
  102. package/dist/augments/random/random-string.d.ts +14 -0
  103. package/dist/augments/random/random-string.js +63 -0
  104. package/dist/{types/augments/regexp.d.ts → augments/regexp/regexp-flags.d.ts} +1 -1
  105. package/dist/augments/regexp/regexp-flags.js +18 -0
  106. package/dist/augments/regexp/regexp-string.d.ts +5 -0
  107. package/dist/augments/regexp/regexp-string.js +7 -0
  108. package/dist/augments/regexp/safe-match.d.ts +1 -0
  109. package/dist/augments/regexp/safe-match.js +4 -0
  110. package/dist/augments/selection-set/select-collapsed.d.ts +11 -0
  111. package/dist/augments/selection-set/select-collapsed.js +25 -0
  112. package/dist/augments/selection-set/select-from.d.ts +3 -0
  113. package/dist/augments/selection-set/select-from.js +25 -0
  114. package/dist/augments/selection-set/selection-set.d.ts +18 -0
  115. package/dist/augments/selection-set/selection-set.js +4 -0
  116. package/dist/augments/string/casing/capitalization.d.ts +3 -0
  117. package/dist/augments/string/casing/capitalization.js +11 -0
  118. package/dist/augments/string/casing/casing.d.ts +27 -0
  119. package/dist/augments/string/casing/casing.js +40 -0
  120. package/dist/augments/string/casing/kebab-and-camel.d.ts +3 -0
  121. package/dist/augments/string/casing/kebab-and-camel.js +42 -0
  122. package/dist/augments/string/commas.d.ts +7 -0
  123. package/dist/augments/string/commas.js +29 -0
  124. package/dist/augments/string/join.d.ts +10 -0
  125. package/dist/augments/string/join.js +23 -0
  126. package/dist/{types/augments/string/prefixes.d.ts → augments/string/prefix.d.ts} +16 -1
  127. package/dist/{esm/augments/string/prefixes.js → augments/string/prefix.js} +11 -1
  128. package/dist/augments/string/replace.d.ts +1 -0
  129. package/dist/augments/string/replace.js +5 -0
  130. package/dist/augments/string/split.d.ts +4 -0
  131. package/dist/augments/string/split.js +28 -0
  132. package/dist/augments/string/substring-index.d.ts +13 -0
  133. package/dist/augments/string/substring-index.js +38 -0
  134. package/dist/augments/string/suffix.d.ts +74 -0
  135. package/dist/augments/string/suffix.js +73 -0
  136. package/dist/augments/string/white-space.d.ts +5 -0
  137. package/dist/augments/string/white-space.js +12 -0
  138. package/dist/augments/string/wrap-string.d.ts +4 -0
  139. package/dist/augments/string/wrap-string.js +5 -0
  140. package/dist/augments/type/ensure-type.d.ts +8 -0
  141. package/dist/augments/type/ensure-type.js +10 -0
  142. package/dist/augments/type/readonly.d.ts +2 -0
  143. package/dist/augments/type/readonly.js +3 -0
  144. package/dist/augments/type/type-recursion.js +1 -0
  145. package/dist/augments/type/void-type.d.ts +5 -0
  146. package/dist/augments/type/void-type.js +1 -0
  147. package/dist/augments/type/writable.d.ts +3 -0
  148. package/dist/augments/type/writable.js +3 -0
  149. package/dist/index.d.ts +81 -0
  150. package/dist/index.js +81 -0
  151. package/package.json +33 -15
  152. package/README.md +0 -7
  153. package/dist/cjs/augments/ansi.js +0 -27
  154. package/dist/cjs/augments/array/array.js +0 -68
  155. package/dist/cjs/augments/array/remove-duplicates.js +0 -16
  156. package/dist/cjs/augments/async.js +0 -28
  157. package/dist/cjs/augments/boolean.js +0 -19
  158. package/dist/cjs/augments/common-number.js +0 -112
  159. package/dist/cjs/augments/common-string.js +0 -245
  160. package/dist/cjs/augments/debounce.js +0 -38
  161. package/dist/cjs/augments/environment.js +0 -6
  162. package/dist/cjs/augments/error.js +0 -52
  163. package/dist/cjs/augments/esm-path.js +0 -11
  164. package/dist/cjs/augments/function.js +0 -2
  165. package/dist/cjs/augments/json-compatible.js +0 -2
  166. package/dist/cjs/augments/json.js +0 -28
  167. package/dist/cjs/augments/object/any-object.js +0 -2
  168. package/dist/cjs/augments/object/enum.js +0 -48
  169. package/dist/cjs/augments/object/filter-object.js +0 -26
  170. package/dist/cjs/augments/object/get-or-set.js +0 -40
  171. package/dist/cjs/augments/object/has-key.js +0 -6
  172. package/dist/cjs/augments/object/jsonify.js +0 -6
  173. package/dist/cjs/augments/object/key-count.js +0 -2
  174. package/dist/cjs/augments/object/map-object.js +0 -61
  175. package/dist/cjs/augments/object/merge-deep.js +0 -52
  176. package/dist/cjs/augments/object/merge-property-arrays.js +0 -14
  177. package/dist/cjs/augments/object/object-entries.js +0 -40
  178. package/dist/cjs/augments/object/object.js +0 -18
  179. package/dist/cjs/augments/object/pick-deep.js +0 -2
  180. package/dist/cjs/augments/object/selection-set.js +0 -56
  181. package/dist/cjs/augments/object/typed-has-property.js +0 -29
  182. package/dist/cjs/augments/promise/deferred-promise.js +0 -31
  183. package/dist/cjs/augments/promise/promise.js +0 -79
  184. package/dist/cjs/augments/promise/wait.js +0 -66
  185. package/dist/cjs/augments/random.js +0 -123
  186. package/dist/cjs/augments/regexp.js +0 -19
  187. package/dist/cjs/augments/string/prefixes.js +0 -20
  188. package/dist/cjs/augments/string/suffixes.js +0 -40
  189. package/dist/cjs/augments/string/uuid.js +0 -7
  190. package/dist/cjs/augments/time.js +0 -35
  191. package/dist/cjs/augments/truncate-number.js +0 -153
  192. package/dist/cjs/augments/tuple.js +0 -20
  193. package/dist/cjs/augments/type-recursion.js +0 -2
  194. package/dist/cjs/augments/type.js +0 -36
  195. package/dist/cjs/augments/union.js +0 -2
  196. package/dist/cjs/augments/wrap-in-try.js +0 -37
  197. package/dist/cjs/index.js +0 -60
  198. package/dist/esm/augments/ansi.js +0 -24
  199. package/dist/esm/augments/array/array.js +0 -57
  200. package/dist/esm/augments/async.js +0 -23
  201. package/dist/esm/augments/common-number.js +0 -100
  202. package/dist/esm/augments/common-string.js +0 -227
  203. package/dist/esm/augments/debounce.js +0 -34
  204. package/dist/esm/augments/environment.js +0 -3
  205. package/dist/esm/augments/error.js +0 -45
  206. package/dist/esm/augments/json.js +0 -24
  207. package/dist/esm/augments/object/enum.js +0 -41
  208. package/dist/esm/augments/object/filter-object.js +0 -21
  209. package/dist/esm/augments/object/has-key.js +0 -3
  210. package/dist/esm/augments/object/jsonify.js +0 -3
  211. package/dist/esm/augments/object/object-entries.js +0 -32
  212. package/dist/esm/augments/object/object.js +0 -14
  213. package/dist/esm/augments/object/selection-set.js +0 -52
  214. package/dist/esm/augments/object/typed-has-property.js +0 -25
  215. package/dist/esm/augments/promise/deferred-promise.js +0 -28
  216. package/dist/esm/augments/promise/promise.js +0 -71
  217. package/dist/esm/augments/promise/wait.js +0 -60
  218. package/dist/esm/augments/random.js +0 -117
  219. package/dist/esm/augments/regexp.js +0 -14
  220. package/dist/esm/augments/string/suffixes.js +0 -31
  221. package/dist/esm/augments/string/uuid.js +0 -4
  222. package/dist/esm/augments/tuple.js +0 -16
  223. package/dist/esm/augments/type.js +0 -30
  224. package/dist/esm/index.js +0 -44
  225. package/dist/types/augments/ansi.d.ts +0 -1
  226. package/dist/types/augments/array/array.d.ts +0 -26
  227. package/dist/types/augments/async.d.ts +0 -14
  228. package/dist/types/augments/boolean.d.ts +0 -6
  229. package/dist/types/augments/common-number.d.ts +0 -52
  230. package/dist/types/augments/common-string.d.ts +0 -74
  231. package/dist/types/augments/debounce.d.ts +0 -15
  232. package/dist/types/augments/environment.d.ts +0 -1
  233. package/dist/types/augments/error.d.ts +0 -9
  234. package/dist/types/augments/function.d.ts +0 -25
  235. package/dist/types/augments/json.d.ts +0 -9
  236. package/dist/types/augments/object/any-object.d.ts +0 -2
  237. package/dist/types/augments/object/enum.d.ts +0 -8
  238. package/dist/types/augments/object/filter-object.d.ts +0 -4
  239. package/dist/types/augments/object/get-or-set.d.ts +0 -26
  240. package/dist/types/augments/object/has-key.d.ts +0 -1
  241. package/dist/types/augments/object/jsonify.d.ts +0 -2
  242. package/dist/types/augments/object/object-entries.d.ts +0 -8
  243. package/dist/types/augments/object/object.d.ts +0 -21
  244. package/dist/types/augments/object/pick-deep.d.ts +0 -14
  245. package/dist/types/augments/object/selection-set.d.ts +0 -27
  246. package/dist/types/augments/object/typed-has-property.d.ts +0 -7
  247. package/dist/types/augments/promise/deferred-promise.d.ts +0 -8
  248. package/dist/types/augments/promise/promise.d.ts +0 -15
  249. package/dist/types/augments/promise/wait.d.ts +0 -18
  250. package/dist/types/augments/random.d.ts +0 -39
  251. package/dist/types/augments/string/suffixes.d.ts +0 -17
  252. package/dist/types/augments/string/uuid.d.ts +0 -1
  253. package/dist/types/augments/time.d.ts +0 -14
  254. package/dist/types/augments/tuple.d.ts +0 -17
  255. package/dist/types/augments/type.d.ts +0 -69
  256. package/dist/types/augments/union.d.ts +0 -5
  257. package/dist/types/index.d.ts +0 -44
  258. /package/dist/{types/augments → augments}/array/remove-duplicates.d.ts +0 -0
  259. /package/dist/{esm/augments → augments}/array/remove-duplicates.js +0 -0
  260. /package/dist/{types/augments → augments/file}/esm-path.d.ts +0 -0
  261. /package/dist/{esm/augments → augments/file}/esm-path.js +0 -0
  262. /package/dist/{types/augments → augments/json}/json-compatible.d.ts +0 -0
  263. /package/dist/{esm/augments → augments/json}/json-compatible.js +0 -0
  264. /package/dist/{esm/augments/function.js → augments/log/log-writer.js} +0 -0
  265. /package/dist/{esm/augments/object/any-object.js → augments/number/coords.js} +0 -0
  266. /package/dist/{esm/augments/object/key-count.js → augments/number/digit.js} +0 -0
  267. /package/dist/{esm/augments/object/pick-deep.js → augments/number/dimensions.js} +0 -0
  268. /package/dist/{types/augments → augments/number}/truncate-number.d.ts +0 -0
  269. /package/dist/{esm/augments/type-recursion.js → augments/object/empty.js} +0 -0
  270. /package/dist/{esm/augments/union.js → augments/object/key-count.js} +0 -0
  271. /package/dist/{types/augments → augments}/object/merge-deep.d.ts +0 -0
  272. /package/dist/{types/augments → augments}/object/merge-property-arrays.d.ts +0 -0
  273. /package/dist/{types/augments → augments/type}/type-recursion.d.ts +0 -0
package/package.json CHANGED
@@ -1,35 +1,53 @@
1
1
  {
2
2
  "name": "@augment-vir/common",
3
- "version": "29.2.0",
4
- "homepage": "https://github.com/electrovir/augment-vir/tree/main/packages/common",
3
+ "version": "30.0.0",
4
+ "homepage": "https://github.com/electrovir/augment-vir",
5
5
  "bugs": {
6
6
  "url": "https://github.com/electrovir/augment-vir/issues"
7
7
  },
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/electrovir/augment-vir"
10
+ "url": "git+https://github.com/electrovir/augment-vir.git"
11
11
  },
12
- "license": "MIT",
12
+ "license": "(MIT or CC0 1.0)",
13
13
  "author": {
14
14
  "name": "electrovir",
15
15
  "url": "https://github.com/electrovir"
16
16
  },
17
- "main": "dist/cjs/index.js",
18
- "module": "dist/esm/index.js",
19
- "types": "dist/types/index.d.ts",
17
+ "type": "module",
18
+ "main": "dist/index.js",
19
+ "module": "dist/index.js",
20
+ "types": "dist/index.d.ts",
20
21
  "scripts": {
21
- "compile": "rm -rf dist && tsc --project tsconfig.json && tsc --project tsconfig.cjs.json",
22
- "test": "echo \"use common-test to run tests\" && exit 0",
23
- "test:coverage": "npm test",
24
- "test:types": "tsc --noEmit"
22
+ "compile": "virmator compile",
23
+ "docs": "virmator docs",
24
+ "test": "concurrently --colors --kill-others-on-fail -c red,blue --names node,web \"npm run test:node\" \"npm run test:web\"",
25
+ "test:coverage": "virmator --no-deps test web coverage",
26
+ "test:docs": "virmator docs check",
27
+ "test:node": "virmator --no-deps test node",
28
+ "test:update": "npm test",
29
+ "test:web": "virmator --no-deps test web"
25
30
  },
26
31
  "dependencies": {
27
- "browser-or-node": "^3.0.0",
28
- "run-time-assertions": "^1.5.1",
29
- "type-fest": "^4.21.0"
32
+ "@augment-vir/assert": "^30.0.0",
33
+ "@augment-vir/core": "^30.0.0",
34
+ "@date-vir/duration": "^6.0.0",
35
+ "ansi-styles": "^6.2.1",
36
+ "json5": "^2.2.3",
37
+ "type-fest": "^4.25.0"
30
38
  },
31
39
  "devDependencies": {
32
- "typescript": "5.5.2"
40
+ "@web/dev-server-esbuild": "^1.0.2",
41
+ "@web/test-runner": "^0.18.3",
42
+ "@web/test-runner-commands": "^0.9.0",
43
+ "@web/test-runner-playwright": "^0.11.0",
44
+ "@web/test-runner-visual-regression": "^0.9.0",
45
+ "concurrently": "^8.2.2",
46
+ "execute-in-browser": "^1.0.3",
47
+ "istanbul-smart-text-reporter": "^1.1.4"
48
+ },
49
+ "engines": {
50
+ "node": ">=22"
33
51
  },
34
52
  "publishConfig": {
35
53
  "access": "public"
package/README.md DELETED
@@ -1,7 +0,0 @@
1
- # @augment-vir/common
2
-
3
- `augment-vir` is a collection of small helper functions that I constantly use across all my JavaScript and TypeScript repos. I call these functions `augments`. These are functions, constants, and types typically placed within a "util", or "helpers", etc. directory.
4
-
5
- This `common` package is for environment-agnostic augments. Everything in here will work in Node.js or the browser with identical results.
6
-
7
- Note that the `random*` functions exported by this package will not work in Node.js < v19.0.0.
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ansiRegex = void 0;
4
- // cspell:disable
5
- /*
6
- Copied from
7
- https://github.com/chalk/ansi-regex/blob/1b337add136eb520764634a328e2f6354398eee5/index.js
8
- because the published ansi-regex package exports this in a manner that Jest can't handle and the
9
- latest version of the package that doesn't do that has a security vulnerability. The package has
10
- the following license from
11
- https://github.com/chalk/ansi-regex/blob/1b337add136eb520764634a328e2f6354398eee5/license
12
-
13
- MIT License
14
- Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
15
-
16
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
17
-
18
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
19
-
20
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
- */
22
- // cspell:enable
23
- const patterns = [
24
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
25
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))',
26
- ];
27
- exports.ansiRegex = new RegExp(patterns.join('|'), 'g');
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.filterOutIndexes = filterOutIndexes;
4
- exports.flatten2dArray = flatten2dArray;
5
- exports.trimArrayStrings = trimArrayStrings;
6
- exports.typedArrayIncludes = typedArrayIncludes;
7
- exports.typedMap = typedMap;
8
- exports.repeatArray = repeatArray;
9
- exports.groupArrayBy = groupArrayBy;
10
- exports.arrayToObject = arrayToObject;
11
- exports.filterMap = filterMap;
12
- const get_or_set_1 = require("../object/get-or-set");
13
- const object_entries_1 = require("../object/object-entries");
14
- function filterOutIndexes(array, indexes) {
15
- return array.filter((_, index) => !indexes.includes(index));
16
- }
17
- function flatten2dArray(array2d) {
18
- const flattened = array2d.reduce((accum, row) => accum.concat(row), []);
19
- return flattened;
20
- }
21
- function trimArrayStrings(input) {
22
- return input.map((line) => line.trim()).filter((line) => line !== '');
23
- }
24
- function typedArrayIncludes(array, input) {
25
- return array.includes(input);
26
- }
27
- /** Preserves tuple types. */
28
- function typedMap(arrayToMap, mapCallback) {
29
- return arrayToMap.map(mapCallback);
30
- }
31
- function repeatArray(repeatCount, array) {
32
- return Array.from({ length: repeatCount }, () => [...array]).flat();
33
- }
34
- /**
35
- * Polyfill for `Object.groupBy`:
36
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy
37
- */
38
- function groupArrayBy(inputArray, callback) {
39
- return inputArray.reduce((accum, entry, index, originalArray) => {
40
- const key = callback(entry, index, originalArray);
41
- const entryArray = (0, get_or_set_1.getOrSet)(accum, key, () => []);
42
- entryArray.push(entry);
43
- return accum;
44
- }, {});
45
- }
46
- /**
47
- * Like `groupArrayBy` but maps array entries to a single key. Meaning, the resulting object does
48
- * not have an array of elements (unless the original array itself contains arrays).
49
- */
50
- function arrayToObject(inputArray, callback) {
51
- return (0, object_entries_1.typedObjectFromEntries)(inputArray.map((entry, index, originalArray) => {
52
- const key = callback(entry, index, originalArray);
53
- return [
54
- key,
55
- entry,
56
- ];
57
- }));
58
- }
59
- function filterMap(inputArray, mapCallback, filterCallback) {
60
- return inputArray.reduce((accum, entry, index, originalArray) => {
61
- const mapOutput = mapCallback(entry, index, originalArray);
62
- const filterOutput = filterCallback(mapOutput, entry, index, originalArray);
63
- if (filterOutput) {
64
- accum.push(mapOutput);
65
- }
66
- return accum;
67
- }, []);
68
- }
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removeDuplicates = removeDuplicates;
4
- function removeDuplicates(originalArray, calculateUniqueIdCallback) {
5
- const grouped = new Map();
6
- return originalArray.filter((entry) => {
7
- const uniqueId = calculateUniqueIdCallback(entry);
8
- if (grouped.get(uniqueId)) {
9
- return false;
10
- }
11
- else {
12
- grouped.set(uniqueId, entry);
13
- return true;
14
- }
15
- });
16
- }
@@ -1,28 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.awaitedForEach = awaitedForEach;
4
- exports.awaitedBlockingMap = awaitedBlockingMap;
5
- exports.awaitedFilter = awaitedFilter;
6
- /**
7
- * Acts like calling Array.prototype.forEach in that all elements are executed upon in order, and
8
- * each execution is blocking. Meaning, the callback won't be called on element 2 until the callback
9
- * has finished its call on element 1.
10
- */
11
- async function awaitedForEach(input, callback) {
12
- await awaitedBlockingMap(input, callback);
13
- }
14
- async function awaitedBlockingMap(input, callback) {
15
- const mappedValues = await input.reduce(async (accumPromise, currentElement, index, wholeArray) => {
16
- const accum = await accumPromise;
17
- const mappedValue = await callback(currentElement, index, wholeArray);
18
- accum.push(mappedValue);
19
- return accum;
20
- }, Promise.resolve([]));
21
- return mappedValues;
22
- }
23
- async function awaitedFilter(arrayInput, filterCallback, options) {
24
- const callbackResults = options?.blocking
25
- ? await awaitedBlockingMap(arrayInput, filterCallback)
26
- : await Promise.all(arrayInput.map(filterCallback));
27
- return arrayInput.filter((originalValue, index) => !!callbackResults[index]);
28
- }
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTruthy = isTruthy;
4
- exports.isFalsy = isFalsy;
5
- exports.ifTruthy = ifTruthy;
6
- function isTruthy(input) {
7
- return !!input;
8
- }
9
- function isFalsy(input) {
10
- return !input;
11
- }
12
- function ifTruthy(checkThis, ifTruthyCallback, ifFalsyCallback) {
13
- if (isTruthy(checkThis)) {
14
- return ifTruthyCallback(checkThis);
15
- }
16
- else {
17
- return ifFalsyCallback(checkThis);
18
- }
19
- }
@@ -1,112 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertIntoNumber = exports.NaNString = void 0;
4
- exports.addCommasToNumber = addCommasToNumber;
5
- exports.doesRequireScientificNotation = doesRequireScientificNotation;
6
- exports.ensureMinAndMax = ensureMinAndMax;
7
- exports.toNumber = toNumber;
8
- exports.toEnsuredNumber = toEnsuredNumber;
9
- exports.toMaybeNumber = toMaybeNumber;
10
- exports.wrapNumber = wrapNumber;
11
- exports.round = round;
12
- exports.clamp = clamp;
13
- const common_string_1 = require("./common-string");
14
- const regexp_1 = require("./regexp");
15
- exports.NaNString = String(NaN);
16
- function addCommasToNumber(input) {
17
- if (typeof input === 'string' && isNaN(Number(input))) {
18
- return exports.NaNString;
19
- }
20
- const numericValue = Number(input);
21
- const isNegative = numericValue < 0;
22
- const stringValue = String(Math.abs(numericValue));
23
- const [digits, decimalValues,] = stringValue.split('.');
24
- const decimalString = decimalValues ? `.${decimalValues}` : '';
25
- const separated = (0, regexp_1.safeMatch)(digits.split('').reverse().join(''), /.{1,3}/g)
26
- .reverse()
27
- .map((entry) => entry.split('').reverse().join(''));
28
- const valueWithCommas = separated.join(',');
29
- const negativeMarker = isNegative ? '-' : '';
30
- return [
31
- negativeMarker,
32
- valueWithCommas,
33
- decimalString,
34
- ].join('');
35
- }
36
- function doesRequireScientificNotation(input) {
37
- return String(input).includes('e');
38
- }
39
- /**
40
- * Given a min and max, ensures that they are in correct order. Meaning, min is less than max. If
41
- * that is not the case, the returned value is the given min and max values swapped.
42
- */
43
- function ensureMinAndMax({ min, max }) {
44
- if (min > max) {
45
- return { min: max, max: min };
46
- }
47
- else {
48
- return { min, max };
49
- }
50
- }
51
- /**
52
- * Tries to convert the input into a number. Handles strings with commas. Note: this might return
53
- * `NaN`.
54
- */
55
- function toNumber(input) {
56
- if (typeof input === 'number') {
57
- return input;
58
- }
59
- else if (typeof input === 'string') {
60
- return Number((0, common_string_1.removeCommasFromNumberString)(input));
61
- }
62
- else {
63
- return Number(input);
64
- }
65
- }
66
- /** @deprecated Use {@link toNumber} instead. */
67
- exports.convertIntoNumber = toNumber;
68
- /** Tries to convert the input into a number and throws an error if `NaN` is created. */
69
- function toEnsuredNumber(input) {
70
- const numeric = toMaybeNumber(input);
71
- if (numeric == undefined) {
72
- throw new Error(`Cannot convert to a number: ${input}`);
73
- }
74
- else {
75
- return numeric;
76
- }
77
- }
78
- /** Tries to convert the input into a number and returns `undefined` if `NaN` is created. */
79
- function toMaybeNumber(input) {
80
- const numeric = toNumber(input);
81
- if (isNaN(numeric)) {
82
- return undefined;
83
- }
84
- else {
85
- return numeric;
86
- }
87
- }
88
- /**
89
- * If the given value is outside the given min/max bounds, instead of clamping the number (as the
90
- * `clamp` function does), this function wraps the value around to the next bound.
91
- *
92
- * @example
93
- * wrapNumber({min: 0, max: 100, value: 101}) == 0;
94
- */
95
- function wrapNumber({ max, min, value }) {
96
- if (value > max) {
97
- return min;
98
- }
99
- else if (value < min) {
100
- return max;
101
- }
102
- return value;
103
- }
104
- function round(inputs) {
105
- const digitFactor = Math.pow(10, inputs.digits);
106
- const multiplied = inputs.number * digitFactor;
107
- return Number((Math.round(multiplied) / digitFactor).toFixed(inputs.digits));
108
- }
109
- /** Clamp's the given value to within the min and max bounds, inclusive. */
110
- function clamp({ value, min, max }) {
111
- return Math.min(Math.max(value, min), max);
112
- }
@@ -1,245 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StringCaseEnum = exports.removeColor = void 0;
4
- exports.joinWithFinalConjunction = joinWithFinalConjunction;
5
- exports.wrapString = wrapString;
6
- exports.removeAnsiEscapeCodes = removeAnsiEscapeCodes;
7
- exports.removeCommasFromNumberString = removeCommasFromNumberString;
8
- exports.collapseWhiteSpace = collapseWhiteSpace;
9
- exports.splitIncludeSplit = splitIncludeSplit;
10
- exports.capitalizeFirstLetter = capitalizeFirstLetter;
11
- exports.kebabCaseToCamelCase = kebabCaseToCamelCase;
12
- exports.hasCase = hasCase;
13
- exports.isCase = isCase;
14
- exports.camelCaseToKebabCase = camelCaseToKebabCase;
15
- exports.replaceStringAtIndex = replaceStringAtIndex;
16
- exports.escapeStringForRegExp = escapeStringForRegExp;
17
- exports.getAllIndexesOf = getAllIndexesOf;
18
- exports.typedSplit = typedSplit;
19
- const ansi_1 = require("./ansi");
20
- const regexp_1 = require("./regexp");
21
- /**
22
- * Join elements into a string with commas separating each value. Add a conjunction before the final
23
- * item in the list. If the array has a length < 2, the conjunction is not added. If the list is
24
- * only of length 2, then no commas are added.
25
- *
26
- * @param list Array of items to be converted into strings. Works best if these are simply strings
27
- * to begin with.
28
- * @param conjunction Defaults to 'and'. The conjunction to be used before the final element.
29
- */
30
- function joinWithFinalConjunction(list, conjunction = 'and') {
31
- if (list.length < 2) {
32
- /**
33
- * If there are not multiple things in the list to join, just turn the list into a string
34
- * for an empty list, this will be '', for a single item list, this will just be the first
35
- * item as a string.
36
- */
37
- return list.join('');
38
- }
39
- /** When there are only two items in the list, we don't want any commas. */
40
- const commaSep = list.length > 2 ? ', ' : ' ';
41
- const commaJoined = list.slice(0, -1).join(commaSep);
42
- const fullyJoined = `${commaJoined}${commaSep}${conjunction} ${list[list.length - 1]}`;
43
- return fullyJoined;
44
- }
45
- /** Wraps `value` on both sides with `wrapper`. */
46
- function wrapString({ value, wrapper }) {
47
- return [
48
- wrapper,
49
- wrapper,
50
- ].join(value);
51
- }
52
- function removeAnsiEscapeCodes(input) {
53
- return input.replace(ansi_1.ansiRegex, '');
54
- }
55
- exports.removeColor = removeAnsiEscapeCodes;
56
- function removeCommasFromNumberString(numberString) {
57
- return numberString.replace(/,/g, '');
58
- }
59
- /** Collapse all consecutive white space into just one space and trim surrounding whitespace. */
60
- function collapseWhiteSpace(input, { keepNewLines } = {}) {
61
- const newLineReplacement = keepNewLines
62
- ? input.replace(/[\s\n]*\n+[\s\n]*/g, '\n')
63
- : // sometimes \n isn't included in \s
64
- input.replace(/\n/g, ' ');
65
- return newLineReplacement
66
- .trim()
67
- .replace(/[^\S\r\n]/g, ' ')
68
- .replace(/\s{2,}/g, ' ');
69
- }
70
- /** Same as String.prototype.split but includes the delimiter to split by in the output array. */
71
- function splitIncludeSplit(original, splitterInput, caseSensitive) {
72
- const indexLengths = getAllIndexesOf({
73
- searchIn: original,
74
- searchFor: splitterInput,
75
- caseSensitive,
76
- includeLength: true,
77
- });
78
- const splitter = makeCaseInsensitiveRegExp(splitterInput, caseSensitive);
79
- const splits = original.split(splitter);
80
- const splitterIncluded = splits.reduce((accum, current, index) => {
81
- // this will be undefined on the last index
82
- const splitterLength = indexLengths[index];
83
- const includeCurrent = accum.concat(current);
84
- if (splitterLength) {
85
- const splitterMatch = original.slice(splitterLength.index, splitterLength.index + splitterLength.length);
86
- return includeCurrent.concat(splitterMatch);
87
- }
88
- else {
89
- return includeCurrent;
90
- }
91
- }, []);
92
- return splitterIncluded;
93
- }
94
- const defaultCasingOptions = {
95
- capitalizeFirstLetter: false,
96
- };
97
- function capitalizeFirstLetter(input) {
98
- if (!input.length) {
99
- return '';
100
- }
101
- const firstLetter = input[0];
102
- return (firstLetter.toUpperCase() + input.slice(1));
103
- }
104
- function maybeCapitalize(input, casingOptions) {
105
- return casingOptions.capitalizeFirstLetter ? capitalizeFirstLetter(input) : input;
106
- }
107
- function kebabCaseToCamelCase(rawKebabCase, casingOptions = defaultCasingOptions) {
108
- const kebabCase = rawKebabCase.toLowerCase();
109
- if (!kebabCase.length) {
110
- return '';
111
- }
112
- const camelCase = kebabCase
113
- .replace(/^-+/, '')
114
- .replace(/-{2,}/g, '-')
115
- .replace(/-(?:.|$)/g, (dashMatch) => {
116
- const letter = dashMatch[1];
117
- if (letter) {
118
- return letter.toUpperCase();
119
- }
120
- else {
121
- return '';
122
- }
123
- });
124
- return maybeCapitalize(camelCase, casingOptions);
125
- }
126
- var StringCaseEnum;
127
- (function (StringCaseEnum) {
128
- StringCaseEnum["Upper"] = "upper";
129
- StringCaseEnum["Lower"] = "lower";
130
- })(StringCaseEnum || (exports.StringCaseEnum = StringCaseEnum = {}));
131
- /** Indicates whether the given string has different lower and upper case variants. */
132
- function hasCase(input) {
133
- return input.toLowerCase() !== input.toUpperCase();
134
- }
135
- /**
136
- * Checks if the given string is exclusively of the specific case.
137
- *
138
- * Note that some characters have no casing, such as punctuation (they have no difference between
139
- * upper and lower casings). By default, those letters always return `true` for this function,
140
- * regardless of which `caseType` is provided. To instead return `false` for any such characters,
141
- * pass in an options object and set blockNoCaseCharacters to true.
142
- */
143
- function isCase(input, caseType, options) {
144
- if (!input && options?.blockNoCaseCharacters) {
145
- return false;
146
- }
147
- for (let letterIndex = 0; letterIndex < input.length; letterIndex++) {
148
- const letter = input[letterIndex] || '';
149
- if (!hasCase(letter)) {
150
- if (options?.blockNoCaseCharacters) {
151
- return false;
152
- }
153
- else {
154
- continue;
155
- }
156
- }
157
- if (caseType === StringCaseEnum.Upper && letter !== letter.toUpperCase()) {
158
- return false;
159
- }
160
- else if (caseType === StringCaseEnum.Lower && letter !== letter.toLowerCase()) {
161
- return false;
162
- }
163
- }
164
- return true;
165
- }
166
- function camelCaseToKebabCase(rawCamelCase) {
167
- const kebabCase = rawCamelCase
168
- .split('')
169
- .reduce((accum, currentLetter, index, originalString) => {
170
- const previousLetter = index > 0 ? originalString[index - 1] || '' : '';
171
- const nextLetter = index < originalString.length - 1 ? originalString[index + 1] || '' : '';
172
- const possibleWordBoundary = isCase(previousLetter, StringCaseEnum.Lower, { blockNoCaseCharacters: true }) ||
173
- isCase(nextLetter, StringCaseEnum.Lower, { blockNoCaseCharacters: true });
174
- if (currentLetter === currentLetter.toLowerCase() ||
175
- index === 0 ||
176
- !possibleWordBoundary) {
177
- accum += currentLetter;
178
- }
179
- else {
180
- accum += `-${currentLetter.toLowerCase()}`;
181
- }
182
- return accum;
183
- }, '')
184
- .toLowerCase();
185
- return kebabCase;
186
- }
187
- function replaceStringAtIndex(originalString, start, newString, length = newString.length) {
188
- const before = originalString.substring(0, start);
189
- const after = originalString.substring(start + length);
190
- return `${before}${newString}${after}`;
191
- }
192
- /**
193
- * Escapes characters from the given string so that it can be used within a RegExp without being
194
- * parsed as RegExp syntax.
195
- */
196
- function escapeStringForRegExp(input) {
197
- return input.replace(/[\^$\\.*+?()[\]{}|]/g, '\\$&');
198
- }
199
- function makeCaseInsensitiveRegExp(searchForInput, caseSensitive) {
200
- const regExpFlags = `g${!caseSensitive && typeof searchForInput === 'string' ? 'i' : ''}`;
201
- const searchFor = searchForInput instanceof RegExp
202
- ? new RegExp(searchForInput.source, (0, regexp_1.deDupeRegExFlags)(`${searchForInput.flags}${regExpFlags}`))
203
- : new RegExp(escapeStringForRegExp(searchForInput), regExpFlags);
204
- return searchFor;
205
- }
206
- function getAllIndexesOf({ searchIn, searchFor, caseSensitive, includeLength, }) {
207
- const searchRegExp = makeCaseInsensitiveRegExp(searchFor, caseSensitive);
208
- const indexes = [];
209
- const indexesAndLengths = [];
210
- searchIn.replace(searchRegExp, (...matchResults) => {
211
- /**
212
- * Grabbing the second to last entry in the array (rather than the second) takes capture
213
- * groups into account.
214
- */
215
- const matchIndex = matchResults[matchResults.length - 2];
216
- // this is used as a type safety catch and cannot actually be triggered on purpose
217
- // istanbul ignore next
218
- if (typeof matchIndex !== 'number') {
219
- throw new Error(`Match index "${matchIndex}" is not a number. Searching for "${searchFor}" in "${searchIn}".`);
220
- }
221
- const regExpMatch = matchResults[0];
222
- // this is used as a type safety catch and cannot actually be triggered on purpose
223
- // istanbul ignore next
224
- if (typeof regExpMatch !== 'string') {
225
- throw new Error(`regExpMatch should've been a string but was ${typeof regExpMatch}!`);
226
- }
227
- indexesAndLengths.push({ index: matchIndex, length: regExpMatch.length });
228
- indexes.push(matchIndex);
229
- const originalMatch = matchResults[0];
230
- // this is used as a type safety catch and cannot actually be triggered on purpose
231
- // istanbul ignore next
232
- if (typeof originalMatch !== 'string') {
233
- throw new Error(`Original match when searching for "${searchFor}" in "${searchIn}" at index ${matchIndex} is not a string.`);
234
- }
235
- /**
236
- * Don't actually change any text. What we do here doesn't matter because we're not
237
- * using the output of the .replace method, we're just producing side effects.
238
- */
239
- return originalMatch;
240
- });
241
- return (includeLength ? indexesAndLengths : indexes);
242
- }
243
- function typedSplit(input, splitString) {
244
- return input.split(splitString);
245
- }
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DebounceStyle = void 0;
4
- exports.createDebounce = createDebounce;
5
- var DebounceStyle;
6
- (function (DebounceStyle) {
7
- /**
8
- * Fires on the first call, then waits the given amount of milliseconds until a subsequent call
9
- * can be made.
10
- */
11
- DebounceStyle["FirstThenWait"] = "first-then-wait";
12
- /**
13
- * Waits the given amount of milliseconds after the first call and then fires the latest
14
- * assigned callback.
15
- */
16
- DebounceStyle["AfterWait"] = "after-wait";
17
- })(DebounceStyle || (exports.DebounceStyle = DebounceStyle = {}));
18
- function createDebounce(debounceStyle, debounceDuration) {
19
- let nextCallTimestamp = 0;
20
- let latestCallback = undefined;
21
- return (callback) => {
22
- latestCallback = callback;
23
- const now = Date.now();
24
- if (nextCallTimestamp > now) {
25
- return;
26
- }
27
- if (debounceStyle === DebounceStyle.FirstThenWait) {
28
- latestCallback();
29
- }
30
- else if (debounceStyle === DebounceStyle.AfterWait) {
31
- setTimeout(() => {
32
- /** Use whatever the latest latestCallback is. */
33
- latestCallback?.();
34
- }, debounceDuration.milliseconds);
35
- }
36
- nextCallTimestamp = now + debounceDuration.milliseconds;
37
- };
38
- }
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isBrowser = isBrowser;
4
- function isBrowser() {
5
- return typeof window !== 'undefined';
6
- }