pull-request-split-advisor 3.1.2

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 (375) hide show
  1. package/LICENSE +52 -0
  2. package/README.md +168 -0
  3. package/dist/ai/config-wizard.js +282 -0
  4. package/dist/ai/enricher.js +290 -0
  5. package/dist/ai/prompts.js +231 -0
  6. package/dist/ai/provider.js +265 -0
  7. package/dist/cli.js +442 -0
  8. package/dist/config/config.js +315 -0
  9. package/dist/config/default-config.js +223 -0
  10. package/dist/core/blocks.js +145 -0
  11. package/dist/core/commit-planner.js +273 -0
  12. package/dist/core/dependency.js +284 -0
  13. package/dist/core/file-stats.js +341 -0
  14. package/dist/core/history.js +72 -0
  15. package/dist/core/planner.js +25 -0
  16. package/dist/core/scoring.js +166 -0
  17. package/dist/core/strategy.js +486 -0
  18. package/dist/git/branch-naming.js +120 -0
  19. package/dist/git/executor.js +378 -0
  20. package/dist/git/git.js +239 -0
  21. package/dist/output/report-styles.generated.js +10 -0
  22. package/dist/output/report.js +726 -0
  23. package/dist/output/ui.js +417 -0
  24. package/dist/shared/constants.js +59 -0
  25. package/dist/shared/types.js +7 -0
  26. package/dist/shared/utils.js +73 -0
  27. package/node_modules/@colors/colors/LICENSE +26 -0
  28. package/node_modules/@colors/colors/README.md +219 -0
  29. package/node_modules/@colors/colors/examples/normal-usage.js +83 -0
  30. package/node_modules/@colors/colors/examples/safe-string.js +80 -0
  31. package/node_modules/@colors/colors/index.d.ts +136 -0
  32. package/node_modules/@colors/colors/lib/colors.js +211 -0
  33. package/node_modules/@colors/colors/lib/custom/trap.js +46 -0
  34. package/node_modules/@colors/colors/lib/custom/zalgo.js +110 -0
  35. package/node_modules/@colors/colors/lib/extendStringPrototype.js +110 -0
  36. package/node_modules/@colors/colors/lib/index.js +13 -0
  37. package/node_modules/@colors/colors/lib/maps/america.js +10 -0
  38. package/node_modules/@colors/colors/lib/maps/rainbow.js +12 -0
  39. package/node_modules/@colors/colors/lib/maps/random.js +11 -0
  40. package/node_modules/@colors/colors/lib/maps/zebra.js +5 -0
  41. package/node_modules/@colors/colors/lib/styles.js +95 -0
  42. package/node_modules/@colors/colors/lib/system/has-flag.js +35 -0
  43. package/node_modules/@colors/colors/lib/system/supports-colors.js +151 -0
  44. package/node_modules/@colors/colors/package.json +45 -0
  45. package/node_modules/@colors/colors/safe.d.ts +48 -0
  46. package/node_modules/@colors/colors/safe.js +10 -0
  47. package/node_modules/@colors/colors/themes/generic-logging.js +12 -0
  48. package/node_modules/ansi-align/LICENSE +13 -0
  49. package/node_modules/ansi-align/README.md +80 -0
  50. package/node_modules/ansi-align/index.js +61 -0
  51. package/node_modules/ansi-align/node_modules/ansi-regex/index.d.ts +37 -0
  52. package/node_modules/ansi-align/node_modules/ansi-regex/index.js +10 -0
  53. package/node_modules/ansi-align/node_modules/ansi-regex/license +9 -0
  54. package/node_modules/ansi-align/node_modules/ansi-regex/package.json +55 -0
  55. package/node_modules/ansi-align/node_modules/ansi-regex/readme.md +78 -0
  56. package/node_modules/ansi-align/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  57. package/node_modules/ansi-align/node_modules/emoji-regex/README.md +73 -0
  58. package/node_modules/ansi-align/node_modules/emoji-regex/es2015/index.js +6 -0
  59. package/node_modules/ansi-align/node_modules/emoji-regex/es2015/text.js +6 -0
  60. package/node_modules/ansi-align/node_modules/emoji-regex/index.d.ts +23 -0
  61. package/node_modules/ansi-align/node_modules/emoji-regex/index.js +6 -0
  62. package/node_modules/ansi-align/node_modules/emoji-regex/package.json +50 -0
  63. package/node_modules/ansi-align/node_modules/emoji-regex/text.js +6 -0
  64. package/node_modules/ansi-align/node_modules/string-width/index.d.ts +29 -0
  65. package/node_modules/ansi-align/node_modules/string-width/index.js +47 -0
  66. package/node_modules/ansi-align/node_modules/string-width/license +9 -0
  67. package/node_modules/ansi-align/node_modules/string-width/package.json +56 -0
  68. package/node_modules/ansi-align/node_modules/string-width/readme.md +50 -0
  69. package/node_modules/ansi-align/node_modules/strip-ansi/index.d.ts +17 -0
  70. package/node_modules/ansi-align/node_modules/strip-ansi/index.js +4 -0
  71. package/node_modules/ansi-align/node_modules/strip-ansi/license +9 -0
  72. package/node_modules/ansi-align/node_modules/strip-ansi/package.json +54 -0
  73. package/node_modules/ansi-align/node_modules/strip-ansi/readme.md +46 -0
  74. package/node_modules/ansi-align/package.json +43 -0
  75. package/node_modules/ansi-regex/index.d.ts +33 -0
  76. package/node_modules/ansi-regex/index.js +14 -0
  77. package/node_modules/ansi-regex/license +9 -0
  78. package/node_modules/ansi-regex/package.json +61 -0
  79. package/node_modules/ansi-regex/readme.md +66 -0
  80. package/node_modules/ansi-styles/index.d.ts +236 -0
  81. package/node_modules/ansi-styles/index.js +223 -0
  82. package/node_modules/ansi-styles/license +9 -0
  83. package/node_modules/ansi-styles/package.json +54 -0
  84. package/node_modules/ansi-styles/readme.md +173 -0
  85. package/node_modules/boxen/index.d.ts +267 -0
  86. package/node_modules/boxen/index.js +376 -0
  87. package/node_modules/boxen/license +9 -0
  88. package/node_modules/boxen/package.json +69 -0
  89. package/node_modules/boxen/readme.md +300 -0
  90. package/node_modules/camelcase/index.d.ts +102 -0
  91. package/node_modules/camelcase/index.js +110 -0
  92. package/node_modules/camelcase/license +9 -0
  93. package/node_modules/camelcase/package.json +47 -0
  94. package/node_modules/camelcase/readme.md +135 -0
  95. package/node_modules/chalk/license +9 -0
  96. package/node_modules/chalk/package.json +83 -0
  97. package/node_modules/chalk/readme.md +297 -0
  98. package/node_modules/chalk/source/index.d.ts +325 -0
  99. package/node_modules/chalk/source/index.js +225 -0
  100. package/node_modules/chalk/source/utilities.js +33 -0
  101. package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
  102. package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
  103. package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
  104. package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
  105. package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
  106. package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
  107. package/node_modules/cli-boxes/boxes.json +82 -0
  108. package/node_modules/cli-boxes/index.d.ts +127 -0
  109. package/node_modules/cli-boxes/index.js +6 -0
  110. package/node_modules/cli-boxes/license +9 -0
  111. package/node_modules/cli-boxes/package.json +42 -0
  112. package/node_modules/cli-boxes/readme.md +115 -0
  113. package/node_modules/cli-table3/LICENSE +21 -0
  114. package/node_modules/cli-table3/README.md +236 -0
  115. package/node_modules/cli-table3/index.d.ts +96 -0
  116. package/node_modules/cli-table3/index.js +1 -0
  117. package/node_modules/cli-table3/node_modules/ansi-regex/index.d.ts +37 -0
  118. package/node_modules/cli-table3/node_modules/ansi-regex/index.js +10 -0
  119. package/node_modules/cli-table3/node_modules/ansi-regex/license +9 -0
  120. package/node_modules/cli-table3/node_modules/ansi-regex/package.json +55 -0
  121. package/node_modules/cli-table3/node_modules/ansi-regex/readme.md +78 -0
  122. package/node_modules/cli-table3/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  123. package/node_modules/cli-table3/node_modules/emoji-regex/README.md +73 -0
  124. package/node_modules/cli-table3/node_modules/emoji-regex/es2015/index.js +6 -0
  125. package/node_modules/cli-table3/node_modules/emoji-regex/es2015/text.js +6 -0
  126. package/node_modules/cli-table3/node_modules/emoji-regex/index.d.ts +23 -0
  127. package/node_modules/cli-table3/node_modules/emoji-regex/index.js +6 -0
  128. package/node_modules/cli-table3/node_modules/emoji-regex/package.json +50 -0
  129. package/node_modules/cli-table3/node_modules/emoji-regex/text.js +6 -0
  130. package/node_modules/cli-table3/node_modules/string-width/index.d.ts +29 -0
  131. package/node_modules/cli-table3/node_modules/string-width/index.js +47 -0
  132. package/node_modules/cli-table3/node_modules/string-width/license +9 -0
  133. package/node_modules/cli-table3/node_modules/string-width/package.json +56 -0
  134. package/node_modules/cli-table3/node_modules/string-width/readme.md +50 -0
  135. package/node_modules/cli-table3/node_modules/strip-ansi/index.d.ts +17 -0
  136. package/node_modules/cli-table3/node_modules/strip-ansi/index.js +4 -0
  137. package/node_modules/cli-table3/node_modules/strip-ansi/license +9 -0
  138. package/node_modules/cli-table3/node_modules/strip-ansi/package.json +54 -0
  139. package/node_modules/cli-table3/node_modules/strip-ansi/readme.md +46 -0
  140. package/node_modules/cli-table3/package.json +100 -0
  141. package/node_modules/cli-table3/src/cell.js +409 -0
  142. package/node_modules/cli-table3/src/debug.js +28 -0
  143. package/node_modules/cli-table3/src/layout-manager.js +254 -0
  144. package/node_modules/cli-table3/src/table.js +106 -0
  145. package/node_modules/cli-table3/src/utils.js +344 -0
  146. package/node_modules/commander/LICENSE +22 -0
  147. package/node_modules/commander/Readme.md +1157 -0
  148. package/node_modules/commander/esm.mjs +16 -0
  149. package/node_modules/commander/index.js +24 -0
  150. package/node_modules/commander/lib/argument.js +149 -0
  151. package/node_modules/commander/lib/command.js +2509 -0
  152. package/node_modules/commander/lib/error.js +39 -0
  153. package/node_modules/commander/lib/help.js +520 -0
  154. package/node_modules/commander/lib/option.js +330 -0
  155. package/node_modules/commander/lib/suggestSimilar.js +101 -0
  156. package/node_modules/commander/package-support.json +16 -0
  157. package/node_modules/commander/package.json +84 -0
  158. package/node_modules/commander/typings/esm.d.mts +3 -0
  159. package/node_modules/commander/typings/index.d.ts +969 -0
  160. package/node_modules/emoji-regex/LICENSE-MIT.txt +20 -0
  161. package/node_modules/emoji-regex/README.md +107 -0
  162. package/node_modules/emoji-regex/index.d.ts +3 -0
  163. package/node_modules/emoji-regex/index.js +4 -0
  164. package/node_modules/emoji-regex/index.mjs +4 -0
  165. package/node_modules/emoji-regex/package.json +45 -0
  166. package/node_modules/get-east-asian-width/index.d.ts +60 -0
  167. package/node_modules/get-east-asian-width/index.js +30 -0
  168. package/node_modules/get-east-asian-width/license +9 -0
  169. package/node_modules/get-east-asian-width/lookup-data.js +18 -0
  170. package/node_modules/get-east-asian-width/lookup.js +135 -0
  171. package/node_modules/get-east-asian-width/package.json +71 -0
  172. package/node_modules/get-east-asian-width/readme.md +65 -0
  173. package/node_modules/get-east-asian-width/utilities.js +24 -0
  174. package/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
  175. package/node_modules/is-fullwidth-code-point/index.js +50 -0
  176. package/node_modules/is-fullwidth-code-point/license +9 -0
  177. package/node_modules/is-fullwidth-code-point/package.json +42 -0
  178. package/node_modules/is-fullwidth-code-point/readme.md +39 -0
  179. package/node_modules/isbinaryfile/LICENSE.txt +22 -0
  180. package/node_modules/isbinaryfile/README.md +70 -0
  181. package/node_modules/isbinaryfile/lib/index.d.ts +3 -0
  182. package/node_modules/isbinaryfile/lib/index.js +256 -0
  183. package/node_modules/isbinaryfile/package.json +64 -0
  184. package/node_modules/string-width/index.d.ts +39 -0
  185. package/node_modules/string-width/index.js +82 -0
  186. package/node_modules/string-width/license +9 -0
  187. package/node_modules/string-width/package.json +64 -0
  188. package/node_modules/string-width/readme.md +66 -0
  189. package/node_modules/strip-ansi/index.d.ts +15 -0
  190. package/node_modules/strip-ansi/index.js +19 -0
  191. package/node_modules/strip-ansi/license +9 -0
  192. package/node_modules/strip-ansi/package.json +59 -0
  193. package/node_modules/strip-ansi/readme.md +37 -0
  194. package/node_modules/type-fest/index.d.ts +178 -0
  195. package/node_modules/type-fest/license-cc0 +121 -0
  196. package/node_modules/type-fest/license-mit +9 -0
  197. package/node_modules/type-fest/package.json +91 -0
  198. package/node_modules/type-fest/readme.md +1060 -0
  199. package/node_modules/type-fest/source/all-union-fields.d.ts +88 -0
  200. package/node_modules/type-fest/source/and.d.ts +25 -0
  201. package/node_modules/type-fest/source/array-indices.d.ts +23 -0
  202. package/node_modules/type-fest/source/array-slice.d.ts +109 -0
  203. package/node_modules/type-fest/source/array-splice.d.ts +99 -0
  204. package/node_modules/type-fest/source/array-tail.d.ts +76 -0
  205. package/node_modules/type-fest/source/array-values.d.ts +22 -0
  206. package/node_modules/type-fest/source/arrayable.d.ts +29 -0
  207. package/node_modules/type-fest/source/async-return-type.d.ts +23 -0
  208. package/node_modules/type-fest/source/asyncify.d.ts +32 -0
  209. package/node_modules/type-fest/source/basic.d.ts +68 -0
  210. package/node_modules/type-fest/source/camel-case.d.ts +89 -0
  211. package/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +97 -0
  212. package/node_modules/type-fest/source/camel-cased-properties.d.ts +43 -0
  213. package/node_modules/type-fest/source/conditional-except.d.ts +45 -0
  214. package/node_modules/type-fest/source/conditional-keys.d.ts +47 -0
  215. package/node_modules/type-fest/source/conditional-pick-deep.d.ts +118 -0
  216. package/node_modules/type-fest/source/conditional-pick.d.ts +44 -0
  217. package/node_modules/type-fest/source/conditional-simplify.d.ts +32 -0
  218. package/node_modules/type-fest/source/delimiter-case.d.ts +78 -0
  219. package/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +106 -0
  220. package/node_modules/type-fest/source/delimiter-cased-properties.d.ts +46 -0
  221. package/node_modules/type-fest/source/distributed-omit.d.ts +89 -0
  222. package/node_modules/type-fest/source/distributed-pick.d.ts +85 -0
  223. package/node_modules/type-fest/source/empty-object.d.ts +46 -0
  224. package/node_modules/type-fest/source/enforce-optional.d.ts +47 -0
  225. package/node_modules/type-fest/source/entries.d.ts +62 -0
  226. package/node_modules/type-fest/source/entry.d.ts +65 -0
  227. package/node_modules/type-fest/source/exact.d.ts +68 -0
  228. package/node_modules/type-fest/source/except.d.ts +108 -0
  229. package/node_modules/type-fest/source/find-global-type.d.ts +64 -0
  230. package/node_modules/type-fest/source/fixed-length-array.d.ts +43 -0
  231. package/node_modules/type-fest/source/get.d.ts +219 -0
  232. package/node_modules/type-fest/source/global-this.d.ts +21 -0
  233. package/node_modules/type-fest/source/greater-than-or-equal.d.ts +22 -0
  234. package/node_modules/type-fest/source/greater-than.d.ts +56 -0
  235. package/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
  236. package/node_modules/type-fest/source/has-readonly-keys.d.ts +21 -0
  237. package/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
  238. package/node_modules/type-fest/source/has-writable-keys.d.ts +21 -0
  239. package/node_modules/type-fest/source/if-any.d.ts +24 -0
  240. package/node_modules/type-fest/source/if-empty-object.d.ts +26 -0
  241. package/node_modules/type-fest/source/if-never.d.ts +24 -0
  242. package/node_modules/type-fest/source/if-null.d.ts +24 -0
  243. package/node_modules/type-fest/source/if-unknown.d.ts +24 -0
  244. package/node_modules/type-fest/source/includes.d.ts +22 -0
  245. package/node_modules/type-fest/source/int-closed-range.d.ts +35 -0
  246. package/node_modules/type-fest/source/int-range.d.ts +55 -0
  247. package/node_modules/type-fest/source/internal/array.d.ts +126 -0
  248. package/node_modules/type-fest/source/internal/characters.d.ts +67 -0
  249. package/node_modules/type-fest/source/internal/index.d.ts +8 -0
  250. package/node_modules/type-fest/source/internal/keys.d.ts +97 -0
  251. package/node_modules/type-fest/source/internal/numeric.d.ts +118 -0
  252. package/node_modules/type-fest/source/internal/object.d.ts +236 -0
  253. package/node_modules/type-fest/source/internal/string.d.ts +210 -0
  254. package/node_modules/type-fest/source/internal/tuple.d.ts +90 -0
  255. package/node_modules/type-fest/source/internal/type.d.ts +139 -0
  256. package/node_modules/type-fest/source/invariant-of.d.ts +76 -0
  257. package/node_modules/type-fest/source/is-any.d.ts +33 -0
  258. package/node_modules/type-fest/source/is-equal.d.ts +31 -0
  259. package/node_modules/type-fest/source/is-float.d.ts +41 -0
  260. package/node_modules/type-fest/source/is-integer.d.ts +58 -0
  261. package/node_modules/type-fest/source/is-literal.d.ts +296 -0
  262. package/node_modules/type-fest/source/is-never.d.ts +42 -0
  263. package/node_modules/type-fest/source/is-null.d.ts +20 -0
  264. package/node_modules/type-fest/source/is-tuple.d.ts +89 -0
  265. package/node_modules/type-fest/source/is-unknown.d.ts +52 -0
  266. package/node_modules/type-fest/source/iterable-element.d.ts +64 -0
  267. package/node_modules/type-fest/source/join.d.ts +68 -0
  268. package/node_modules/type-fest/source/jsonifiable.d.ts +37 -0
  269. package/node_modules/type-fest/source/jsonify.d.ts +122 -0
  270. package/node_modules/type-fest/source/kebab-case.d.ts +44 -0
  271. package/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +63 -0
  272. package/node_modules/type-fest/source/kebab-cased-properties.d.ts +40 -0
  273. package/node_modules/type-fest/source/keys-of-union.d.ts +42 -0
  274. package/node_modules/type-fest/source/last-array-element.d.ts +38 -0
  275. package/node_modules/type-fest/source/less-than-or-equal.d.ts +22 -0
  276. package/node_modules/type-fest/source/less-than.d.ts +26 -0
  277. package/node_modules/type-fest/source/literal-to-primitive-deep.d.ts +36 -0
  278. package/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
  279. package/node_modules/type-fest/source/literal-union.d.ts +37 -0
  280. package/node_modules/type-fest/source/merge-deep.d.ts +486 -0
  281. package/node_modules/type-fest/source/merge-exclusive.d.ts +41 -0
  282. package/node_modules/type-fest/source/merge.d.ts +48 -0
  283. package/node_modules/type-fest/source/multidimensional-array.d.ts +44 -0
  284. package/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +48 -0
  285. package/node_modules/type-fest/source/non-empty-object.d.ts +35 -0
  286. package/node_modules/type-fest/source/non-empty-string.d.ts +28 -0
  287. package/node_modules/type-fest/source/non-empty-tuple.d.ts +21 -0
  288. package/node_modules/type-fest/source/numeric.d.ts +222 -0
  289. package/node_modules/type-fest/source/observable-like.d.ts +63 -0
  290. package/node_modules/type-fest/source/omit-deep.d.ts +167 -0
  291. package/node_modules/type-fest/source/omit-index-signature.d.ts +95 -0
  292. package/node_modules/type-fest/source/opaque.d.ts +1 -0
  293. package/node_modules/type-fest/source/optional-keys-of.d.ts +39 -0
  294. package/node_modules/type-fest/source/or.d.ts +25 -0
  295. package/node_modules/type-fest/source/override-properties.d.ts +36 -0
  296. package/node_modules/type-fest/source/package-json.d.ts +676 -0
  297. package/node_modules/type-fest/source/partial-deep.d.ts +151 -0
  298. package/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +78 -0
  299. package/node_modules/type-fest/source/pascal-case.d.ts +42 -0
  300. package/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +62 -0
  301. package/node_modules/type-fest/source/pascal-cased-properties.d.ts +36 -0
  302. package/node_modules/type-fest/source/paths.d.ts +262 -0
  303. package/node_modules/type-fest/source/pick-deep.d.ts +149 -0
  304. package/node_modules/type-fest/source/pick-index-signature.d.ts +50 -0
  305. package/node_modules/type-fest/source/primitive.d.ts +13 -0
  306. package/node_modules/type-fest/source/promisable.d.ts +25 -0
  307. package/node_modules/type-fest/source/readonly-deep.d.ts +81 -0
  308. package/node_modules/type-fest/source/readonly-keys-of.d.ts +30 -0
  309. package/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
  310. package/node_modules/type-fest/source/replace.d.ts +85 -0
  311. package/node_modules/type-fest/source/require-all-or-none.d.ts +51 -0
  312. package/node_modules/type-fest/source/require-at-least-one.d.ts +47 -0
  313. package/node_modules/type-fest/source/require-exactly-one.d.ts +45 -0
  314. package/node_modules/type-fest/source/require-one-or-none.d.ts +46 -0
  315. package/node_modules/type-fest/source/required-deep.d.ts +78 -0
  316. package/node_modules/type-fest/source/required-keys-of.d.ts +30 -0
  317. package/node_modules/type-fest/source/schema.d.ts +114 -0
  318. package/node_modules/type-fest/source/screaming-snake-case.d.ts +28 -0
  319. package/node_modules/type-fest/source/set-field-type.d.ts +65 -0
  320. package/node_modules/type-fest/source/set-non-nullable-deep.d.ts +83 -0
  321. package/node_modules/type-fest/source/set-non-nullable.d.ts +39 -0
  322. package/node_modules/type-fest/source/set-optional.d.ts +38 -0
  323. package/node_modules/type-fest/source/set-parameter-type.d.ts +117 -0
  324. package/node_modules/type-fest/source/set-readonly.d.ts +39 -0
  325. package/node_modules/type-fest/source/set-required-deep.d.ts +68 -0
  326. package/node_modules/type-fest/source/set-required.d.ts +70 -0
  327. package/node_modules/type-fest/source/set-return-type.d.ts +29 -0
  328. package/node_modules/type-fest/source/shared-union-fields-deep.d.ts +178 -0
  329. package/node_modules/type-fest/source/shared-union-fields.d.ts +76 -0
  330. package/node_modules/type-fest/source/simplify-deep.d.ts +115 -0
  331. package/node_modules/type-fest/source/simplify.d.ts +58 -0
  332. package/node_modules/type-fest/source/single-key-object.d.ts +29 -0
  333. package/node_modules/type-fest/source/snake-case.d.ts +45 -0
  334. package/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +63 -0
  335. package/node_modules/type-fest/source/snake-cased-properties.d.ts +40 -0
  336. package/node_modules/type-fest/source/split.d.ts +88 -0
  337. package/node_modules/type-fest/source/spread.d.ts +84 -0
  338. package/node_modules/type-fest/source/string-key-of.d.ts +25 -0
  339. package/node_modules/type-fest/source/string-repeat.d.ts +47 -0
  340. package/node_modules/type-fest/source/string-slice.d.ts +37 -0
  341. package/node_modules/type-fest/source/stringified.d.ts +23 -0
  342. package/node_modules/type-fest/source/structured-cloneable.d.ts +92 -0
  343. package/node_modules/type-fest/source/subtract.d.ts +83 -0
  344. package/node_modules/type-fest/source/sum.d.ts +78 -0
  345. package/node_modules/type-fest/source/tagged-union.d.ts +51 -0
  346. package/node_modules/type-fest/source/tagged.d.ts +256 -0
  347. package/node_modules/type-fest/source/trim.d.ts +27 -0
  348. package/node_modules/type-fest/source/tsconfig-json.d.ts +1294 -0
  349. package/node_modules/type-fest/source/tuple-to-object.d.ts +42 -0
  350. package/node_modules/type-fest/source/tuple-to-union.d.ts +51 -0
  351. package/node_modules/type-fest/source/typed-array.d.ts +17 -0
  352. package/node_modules/type-fest/source/undefined-on-partial-deep.d.ts +80 -0
  353. package/node_modules/type-fest/source/union-to-intersection.d.ts +61 -0
  354. package/node_modules/type-fest/source/union-to-tuple.d.ts +56 -0
  355. package/node_modules/type-fest/source/unknown-array.d.ts +25 -0
  356. package/node_modules/type-fest/source/unknown-map.d.ts +24 -0
  357. package/node_modules/type-fest/source/unknown-record.d.ts +31 -0
  358. package/node_modules/type-fest/source/unknown-set.d.ts +24 -0
  359. package/node_modules/type-fest/source/value-of.d.ts +42 -0
  360. package/node_modules/type-fest/source/words.d.ts +118 -0
  361. package/node_modules/type-fest/source/writable-deep.d.ts +83 -0
  362. package/node_modules/type-fest/source/writable-keys-of.d.ts +33 -0
  363. package/node_modules/type-fest/source/writable.d.ts +68 -0
  364. package/node_modules/widest-line/index.d.ts +12 -0
  365. package/node_modules/widest-line/index.js +11 -0
  366. package/node_modules/widest-line/license +9 -0
  367. package/node_modules/widest-line/package.json +60 -0
  368. package/node_modules/widest-line/readme.md +26 -0
  369. package/node_modules/wrap-ansi/index.d.ts +41 -0
  370. package/node_modules/wrap-ansi/index.js +222 -0
  371. package/node_modules/wrap-ansi/license +9 -0
  372. package/node_modules/wrap-ansi/package.json +69 -0
  373. package/node_modules/wrap-ansi/readme.md +75 -0
  374. package/package.json +78 -0
  375. package/scripts/postinstall.cjs +122 -0
@@ -0,0 +1,88 @@
1
+ import type {NonRecursiveType, ReadonlyKeysOfUnion, ValueOfUnion} from './internal';
2
+ import type {KeysOfUnion} from './keys-of-union';
3
+ import type {SharedUnionFields} from './shared-union-fields';
4
+ import type {Simplify} from './simplify';
5
+ import type {UnknownArray} from './unknown-array';
6
+
7
+ /**
8
+ Create a type with all fields from a union of object types.
9
+
10
+ Use-cases:
11
+ - You want a safe object type where each key exists in the union object.
12
+
13
+ @example
14
+ ```
15
+ import type {AllUnionFields} from 'type-fest';
16
+
17
+ type Cat = {
18
+ name: string;
19
+ type: 'cat';
20
+ catType: string;
21
+ };
22
+
23
+ type Dog = {
24
+ name: string;
25
+ type: 'dog';
26
+ dogType: string;
27
+ };
28
+
29
+ function displayPetInfo(petInfo: Cat | Dog) {
30
+ // typeof petInfo =>
31
+ // {
32
+ // name: string;
33
+ // type: 'cat';
34
+ // catType: string;
35
+ // } | {
36
+ // name: string;
37
+ // type: 'dog';
38
+ // dogType: string;
39
+ // }
40
+
41
+ console.log('name: ', petInfo.name);
42
+ console.log('type: ', petInfo.type);
43
+
44
+ // TypeScript complains about `catType` and `dogType` not existing on type `Cat | Dog`.
45
+ console.log('animal type: ', petInfo.catType ?? petInfo.dogType);
46
+ }
47
+
48
+ function displayPetInfo(petInfo: AllUnionFields<Cat | Dog>) {
49
+ // typeof petInfo =>
50
+ // {
51
+ // name: string;
52
+ // type: 'cat' | 'dog';
53
+ // catType?: string;
54
+ // dogType?: string;
55
+ // }
56
+
57
+ console.log('name: ', petInfo.name);
58
+ console.log('type: ', petInfo.type);
59
+
60
+ // No TypeScript error.
61
+ console.log('animal type: ', petInfo.catType ?? petInfo.dogType);
62
+ }
63
+ ```
64
+
65
+ @see SharedUnionFields
66
+
67
+ @category Object
68
+ @category Union
69
+ */
70
+ export type AllUnionFields<Union> =
71
+ Extract<Union, NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown> | UnknownArray> extends infer SkippedMembers
72
+ ? Exclude<Union, SkippedMembers> extends infer RelevantMembers
73
+ ?
74
+ | SkippedMembers
75
+ | Simplify<
76
+ // Include fields that are common in all union members
77
+ SharedUnionFields<RelevantMembers> &
78
+ // Include readonly fields present in any union member
79
+ {
80
+ readonly [P in ReadonlyKeysOfUnion<RelevantMembers>]?: ValueOfUnion<RelevantMembers, P & KeysOfUnion<RelevantMembers>>
81
+ } &
82
+ // Include remaining fields that are neither common nor readonly
83
+ {
84
+ [P in Exclude<KeysOfUnion<RelevantMembers>, ReadonlyKeysOfUnion<RelevantMembers> | keyof RelevantMembers>]?: ValueOfUnion<RelevantMembers, P>
85
+ }
86
+ >
87
+ : never
88
+ : never;
@@ -0,0 +1,25 @@
1
+ import type {IsEqual} from './is-equal';
2
+
3
+ /**
4
+ Returns a boolean for whether two given types are both true.
5
+
6
+ Use-case: Constructing complex conditional types where multiple conditions must be satisfied.
7
+
8
+ @example
9
+ ```
10
+ import type {And} from 'type-fest';
11
+
12
+ And<true, true>;
13
+ //=> true
14
+
15
+ And<true, false>;
16
+ //=> false
17
+ ```
18
+
19
+ @see {@link Or}
20
+ */
21
+ export type And<A extends boolean, B extends boolean> = [A, B][number] extends true
22
+ ? true
23
+ : true extends [IsEqual<A, false>, IsEqual<B, false>][number]
24
+ ? false
25
+ : never;
@@ -0,0 +1,23 @@
1
+ /**
2
+ Provides valid indices for a constant array or tuple.
3
+
4
+ Use-case: This type is useful when working with constant arrays or tuples and you want to enforce type-safety for accessing elements by their indices.
5
+
6
+ @example
7
+ ```
8
+ import type {ArrayIndices, ArrayValues} from 'type-fest';
9
+
10
+ const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] as const;
11
+
12
+ type Weekday = ArrayIndices<typeof weekdays>;
13
+ type WeekdayName = ArrayValues<typeof weekdays>;
14
+
15
+ const getWeekdayName = (day: Weekday): WeekdayName => weekdays[day];
16
+ ```
17
+
18
+ @see {@link ArrayValues}
19
+
20
+ @category Array
21
+ */
22
+ export type ArrayIndices<Element extends readonly unknown[]> =
23
+ Exclude<Partial<Element>['length'], Element['length']>;
@@ -0,0 +1,109 @@
1
+ import type {Sum} from './sum';
2
+ import type {LessThanOrEqual} from './less-than-or-equal';
3
+ import type {GreaterThanOrEqual} from './greater-than-or-equal';
4
+ import type {GreaterThan} from './greater-than';
5
+ import type {IsNegative} from './numeric';
6
+ import type {Not, TupleMin} from './internal';
7
+ import type {IsEqual} from './is-equal';
8
+ import type {And} from './and';
9
+ import type {ArraySplice} from './array-splice';
10
+
11
+ /**
12
+ Returns an array slice of a given range, just like `Array#slice()`.
13
+
14
+ @example
15
+ ```
16
+ import type {ArraySlice} from 'type-fest';
17
+
18
+ type T0 = ArraySlice<[0, 1, 2, 3, 4]>;
19
+ //=> [0, 1, 2, 3, 4]
20
+
21
+ type T1 = ArraySlice<[0, 1, 2, 3, 4], 0, -1>;
22
+ //=> [0, 1, 2, 3]
23
+
24
+ type T2 = ArraySlice<[0, 1, 2, 3, 4], 1, -2>;
25
+ //=> [1, 2]
26
+
27
+ type T3 = ArraySlice<[0, 1, 2, 3, 4], -2, 4>;
28
+ //=> [3]
29
+
30
+ type T4 = ArraySlice<[0, 1, 2, 3, 4], -2, -1>;
31
+ //=> [3]
32
+
33
+ type T5 = ArraySlice<[0, 1, 2, 3, 4], 0, -999>;
34
+ //=> []
35
+
36
+ function arraySlice<
37
+ const Array_ extends readonly unknown[],
38
+ Start extends number = 0,
39
+ End extends number = Array_['length'],
40
+ >(array: Array_, start?: Start, end?: End) {
41
+ return array.slice(start, end) as ArraySlice<Array_, Start, End>;
42
+ }
43
+
44
+ const slice = arraySlice([1, '2', {a: 3}, [4, 5]], 0, -1);
45
+
46
+ typeof slice;
47
+ //=> [1, '2', { readonly a: 3; }]
48
+
49
+ slice[2].a;
50
+ //=> 3
51
+
52
+ // @ts-expect-error -- TS2493: Tuple type '[1, "2", {readonly a: 3}]' of length '3' has no element at index '3'.
53
+ slice[3];
54
+ ```
55
+
56
+ @category Array
57
+ */
58
+ export type ArraySlice<
59
+ Array_ extends readonly unknown[],
60
+ Start extends number = never,
61
+ End extends number = never,
62
+ > = Array_ extends unknown // To distributive type
63
+ ? And<IsEqual<Start, never>, IsEqual<End, never>> extends true
64
+ ? Array_
65
+ : number extends Array_['length']
66
+ ? VariableLengthArraySliceHelper<Array_, Start, End>
67
+ : ArraySliceHelper<Array_, IsEqual<Start, never> extends true ? 0 : Start, IsEqual<End, never> extends true ? Array_['length'] : End>
68
+ : never; // Never happens
69
+
70
+ type VariableLengthArraySliceHelper<
71
+ Array_ extends readonly unknown[],
72
+ Start extends number,
73
+ End extends number,
74
+ > = And<Not<IsNegative<Start>>, IsEqual<End, never>> extends true
75
+ ? ArraySplice<Array_, 0, Start>
76
+ : And<
77
+ And<Not<IsNegative<Start>>, Not<IsNegative<End>>>,
78
+ IsEqual<GreaterThan<End, Start>, true>
79
+ > extends true
80
+ ? ArraySliceByPositiveIndex<Array_, Start, End>
81
+ : [];
82
+
83
+ type ArraySliceHelper<
84
+ Array_ extends readonly unknown[],
85
+ Start extends number = 0,
86
+ End extends number = Array_['length'],
87
+ TraversedElement extends Array<Array_[number]> = [],
88
+ Result extends Array<Array_[number]> = [],
89
+ ArrayLength extends number = Array_['length'],
90
+ PositiveS extends number = IsNegative<Start> extends true
91
+ ? Sum<ArrayLength, Start> extends infer AddResult extends number
92
+ ? number extends AddResult // (ArrayLength + Start) < 0
93
+ ? 0
94
+ : GreaterThan<AddResult, 0> extends true ? AddResult : 0
95
+ : never
96
+ : Start,
97
+ PositiveE extends number = IsNegative<End> extends true ? Sum<ArrayLength, End> : End,
98
+ > = true extends [IsNegative<PositiveS>, LessThanOrEqual<PositiveE, PositiveS>, GreaterThanOrEqual<PositiveS, ArrayLength>][number]
99
+ ? []
100
+ : ArraySliceByPositiveIndex<Array_, TupleMin<[PositiveS, ArrayLength]>, TupleMin<[PositiveE, ArrayLength]>>;
101
+
102
+ type ArraySliceByPositiveIndex<
103
+ Array_ extends readonly unknown[],
104
+ Start extends number,
105
+ End extends number,
106
+ Result extends Array<Array_[number]> = [],
107
+ > = Start extends End
108
+ ? Result
109
+ : ArraySliceByPositiveIndex<Array_, Sum<Start, 1>, End, [...Result, Array_[Start]]>;
@@ -0,0 +1,99 @@
1
+ import type {BuildTuple, StaticPartOfArray, VariablePartOfArray} from './internal';
2
+ import type {GreaterThanOrEqual} from './greater-than-or-equal';
3
+ import type {Subtract} from './subtract';
4
+ import type {UnknownArray} from './unknown-array';
5
+
6
+ /**
7
+ The implementation of `SplitArrayByIndex` for fixed length arrays.
8
+ */
9
+ type SplitFixedArrayByIndex<T extends UnknownArray, SplitIndex extends number> =
10
+ SplitIndex extends 0
11
+ ? [[], T]
12
+ : T extends readonly [...BuildTuple<SplitIndex>, ...infer V]
13
+ ? T extends readonly [...infer U, ...V]
14
+ ? [U, V]
15
+ : [never, never]
16
+ : [never, never];
17
+
18
+ /**
19
+ The implementation of `SplitArrayByIndex` for variable length arrays.
20
+ */
21
+ type SplitVariableArrayByIndex<T extends UnknownArray,
22
+ SplitIndex extends number,
23
+ T1 = Subtract<SplitIndex, StaticPartOfArray<T>['length']>,
24
+ T2 = T1 extends number
25
+ ? BuildTuple<GreaterThanOrEqual<T1, 0> extends true ? T1 : number, VariablePartOfArray<T>[number]>
26
+ : [],
27
+ > =
28
+ SplitIndex extends 0
29
+ ? [[], T]
30
+ : GreaterThanOrEqual<StaticPartOfArray<T>['length'], SplitIndex> extends true
31
+ ? [
32
+ SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[0],
33
+ [
34
+ ...SplitFixedArrayByIndex<StaticPartOfArray<T>, SplitIndex>[1],
35
+ ...VariablePartOfArray<T>,
36
+ ],
37
+ ]
38
+ : [
39
+ [
40
+ ...StaticPartOfArray<T>,
41
+ ...(T2 extends UnknownArray ? T2 : []),
42
+ ],
43
+ VariablePartOfArray<T>,
44
+ ];
45
+
46
+ /**
47
+ Split the given array `T` by the given `SplitIndex`.
48
+
49
+ @example
50
+ ```
51
+ type A = SplitArrayByIndex<[1, 2, 3, 4], 2>;
52
+ // type A = [[1, 2], [3, 4]];
53
+
54
+ type B = SplitArrayByIndex<[1, 2, 3, 4], 0>;
55
+ // type B = [[], [1, 2, 3, 4]];
56
+ ```
57
+ */
58
+ type SplitArrayByIndex<T extends UnknownArray, SplitIndex extends number> =
59
+ SplitIndex extends 0
60
+ ? [[], T]
61
+ : number extends T['length']
62
+ ? SplitVariableArrayByIndex<T, SplitIndex>
63
+ : SplitFixedArrayByIndex<T, SplitIndex>;
64
+
65
+ /**
66
+ Creates a new array type by adding or removing elements at a specified index range in the original array.
67
+
68
+ Use-case: Replace or insert items in an array type.
69
+
70
+ Like [`Array#splice()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) but for types.
71
+
72
+ @example
73
+ ```
74
+ type SomeMonths0 = ['January', 'April', 'June'];
75
+ type Mouths0 = ArraySplice<SomeMonths0, 1, 0, ['Feb', 'March']>;
76
+ //=> type Mouths0 = ['January', 'Feb', 'March', 'April', 'June'];
77
+
78
+ type SomeMonths1 = ['January', 'April', 'June'];
79
+ type Mouths1 = ArraySplice<SomeMonths1, 1, 1>;
80
+ //=> type Mouths1 = ['January', 'June'];
81
+
82
+ type SomeMonths2 = ['January', 'Foo', 'April'];
83
+ type Mouths2 = ArraySplice<SomeMonths2, 1, 1, ['Feb', 'March']>;
84
+ //=> type Mouths2 = ['January', 'Feb', 'March', 'April'];
85
+ ```
86
+
87
+ @category Array
88
+ */
89
+ export type ArraySplice<
90
+ T extends UnknownArray,
91
+ Start extends number,
92
+ DeleteCount extends number,
93
+ Items extends UnknownArray = [],
94
+ > =
95
+ SplitArrayByIndex<T, Start> extends [infer U extends UnknownArray, infer V extends UnknownArray]
96
+ ? SplitArrayByIndex<V, DeleteCount> extends [infer _Deleted extends UnknownArray, infer X extends UnknownArray]
97
+ ? [...U, ...Items, ...X]
98
+ : never // Should never happen
99
+ : never; // Should never happen
@@ -0,0 +1,76 @@
1
+ import type {ApplyDefaultOptions, IfArrayReadonly} from './internal';
2
+ import type {UnknownArray} from './unknown-array';
3
+
4
+ /**
5
+ @see {@link ArrayTail}
6
+ */
7
+ type ArrayTailOptions = {
8
+ /**
9
+ Return a readonly array if the input array is readonly.
10
+
11
+ @default false
12
+
13
+ @example
14
+ ```
15
+ import type {ArrayTail} from 'type-fest';
16
+
17
+ type Example1 = ArrayTail<readonly [string, number, boolean], {preserveReadonly: true}>;
18
+ //=> readonly [number, boolean]
19
+
20
+ type Example2 = ArrayTail<[string, number, boolean], {preserveReadonly: true}>;
21
+ //=> [number, boolean]
22
+
23
+ type Example3 = ArrayTail<readonly [string, number, boolean], {preserveReadonly: false}>;
24
+ //=> [number, boolean]
25
+
26
+ type Example4 = ArrayTail<[string, number, boolean], {preserveReadonly: false}>;
27
+ //=> [number, boolean]
28
+ ```
29
+ */
30
+ preserveReadonly?: boolean;
31
+ };
32
+
33
+ type DefaultArrayTailOptions = {
34
+ preserveReadonly: false;
35
+ };
36
+
37
+ /**
38
+ Extracts the type of an array or tuple minus the first element.
39
+
40
+ @example
41
+ ```
42
+ import type {ArrayTail} from 'type-fest';
43
+
44
+ declare const curry: <Arguments extends unknown[], Return>(
45
+ function_: (...arguments_: Arguments) => Return,
46
+ ...arguments_: ArrayTail<Arguments>
47
+ ) => (...arguments_: ArrayTail<Arguments>) => Return;
48
+
49
+ const add = (a: number, b: number) => a + b;
50
+
51
+ const add3 = curry(add, 3);
52
+
53
+ add3(4);
54
+ //=> 7
55
+ ```
56
+
57
+ @see {@link ArrayTailOptions}
58
+
59
+ @category Array
60
+ */
61
+ export type ArrayTail<TArray extends UnknownArray, Options extends ArrayTailOptions = {}> =
62
+ ApplyDefaultOptions<ArrayTailOptions, DefaultArrayTailOptions, Options> extends infer ResolvedOptions extends Required<ArrayTailOptions>
63
+ ? TArray extends UnknownArray // For distributing `TArray`
64
+ ? _ArrayTail<TArray> extends infer Result
65
+ ? ResolvedOptions['preserveReadonly'] extends true
66
+ ? IfArrayReadonly<TArray, Readonly<Result>, Result>
67
+ : Result
68
+ : never // Should never happen
69
+ : never // Should never happen
70
+ : never; // Should never happen
71
+
72
+ type _ArrayTail<TArray extends UnknownArray> = TArray extends readonly [unknown?, ...infer Tail]
73
+ ? keyof TArray & `${number}` extends never
74
+ ? []
75
+ : Tail
76
+ : [];
@@ -0,0 +1,22 @@
1
+ /**
2
+ Provides all values for a constant array or tuple.
3
+
4
+ Use-case: This type is useful when working with constant arrays or tuples and you want to enforce type-safety with their values.
5
+
6
+ @example
7
+ ```
8
+ import type {ArrayValues, ArrayIndices} from 'type-fest';
9
+
10
+ const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] as const;
11
+
12
+ type WeekdayName = ArrayValues<typeof weekdays>;
13
+ type Weekday = ArrayIndices<typeof weekdays>;
14
+
15
+ const getWeekdayName = (day: Weekday): WeekdayName => weekdays[day];
16
+ ```
17
+
18
+ @see {@link ArrayIndices}
19
+
20
+ @category Array
21
+ */
22
+ export type ArrayValues<T extends readonly unknown[]> = T[number];
@@ -0,0 +1,29 @@
1
+ /**
2
+ Create a type that represents either the value or an array of the value.
3
+
4
+ @see Promisable
5
+
6
+ @example
7
+ ```
8
+ import type {Arrayable} from 'type-fest';
9
+
10
+ function bundle(input: string, output: Arrayable<string>) {
11
+ const outputList = Array.isArray(output) ? output : [output];
12
+
13
+ // …
14
+
15
+ for (const output of outputList) {
16
+ console.log(`write to: ${output}`);
17
+ }
18
+ }
19
+
20
+ bundle('src/index.js', 'dist/index.js');
21
+ bundle('src/index.js', ['dist/index.cjs', 'dist/index.mjs']);
22
+ ```
23
+
24
+ @category Array
25
+ */
26
+ export type Arrayable<T> =
27
+ T
28
+ // TODO: Use `readonly T[]` when this issue is resolved: https://github.com/microsoft/TypeScript/issues/17002
29
+ | T[];
@@ -0,0 +1,23 @@
1
+ type AsyncFunction = (...arguments_: any[]) => PromiseLike<unknown>;
2
+
3
+ /**
4
+ Unwrap the return type of a function that returns a `Promise`.
5
+
6
+ There has been [discussion](https://github.com/microsoft/TypeScript/pull/35998) about implementing this type in TypeScript.
7
+
8
+ @example
9
+ ```ts
10
+ import type {AsyncReturnType} from 'type-fest';
11
+ import {asyncFunction} from 'api';
12
+
13
+ // This type resolves to the unwrapped return type of `asyncFunction`.
14
+ type Value = AsyncReturnType<typeof asyncFunction>;
15
+
16
+ async function doSomething(value: Value) {}
17
+
18
+ asyncFunction().then(value => doSomething(value));
19
+ ```
20
+
21
+ @category Async
22
+ */
23
+ export type AsyncReturnType<Target extends AsyncFunction> = Awaited<ReturnType<Target>>;
@@ -0,0 +1,32 @@
1
+ import type {SetReturnType} from './set-return-type';
2
+
3
+ /**
4
+ Create an async version of the given function type, by boxing the return type in `Promise` while keeping the same parameter types.
5
+
6
+ Use-case: You have two functions, one synchronous and one asynchronous that do the same thing. Instead of having to duplicate the type definition, you can use `Asyncify` to reuse the synchronous type.
7
+
8
+ @example
9
+ ```
10
+ import type {Asyncify} from 'type-fest';
11
+
12
+ // Synchronous function.
13
+ function getFooSync(someArg: SomeType): Foo {
14
+ // …
15
+ }
16
+
17
+ type AsyncifiedFooGetter = Asyncify<typeof getFooSync>;
18
+ //=> type AsyncifiedFooGetter = (someArg: SomeType) => Promise<Foo>;
19
+
20
+ // Same as `getFooSync` but asynchronous.
21
+ const getFooAsync: AsyncifiedFooGetter = (someArg) => {
22
+ // TypeScript now knows that `someArg` is `SomeType` automatically.
23
+ // It also knows that this function must return `Promise<Foo>`.
24
+ // If you have `@typescript-eslint/promise-function-async` linter rule enabled, it will even report that "Functions that return promises must be async.".
25
+
26
+ // …
27
+ }
28
+ ```
29
+
30
+ @category Async
31
+ */
32
+ export type Asyncify<Function_ extends (...arguments_: any[]) => any> = SetReturnType<Function_, Promise<Awaited<ReturnType<Function_>>>>;
@@ -0,0 +1,68 @@
1
+ /**
2
+ Matches a [`class`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes).
3
+
4
+ @category Class
5
+ */
6
+ export type Class<T, Arguments extends unknown[] = any[]> = {
7
+ prototype: Pick<T, keyof T>;
8
+ new(...arguments_: Arguments): T;
9
+ };
10
+
11
+ /**
12
+ Matches a [`class` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes).
13
+
14
+ @category Class
15
+ */
16
+ export type Constructor<T, Arguments extends unknown[] = any[]> = new(...arguments_: Arguments) => T;
17
+
18
+ /**
19
+ Matches an [`abstract class`](https://www.typescriptlang.org/docs/handbook/classes.html#abstract-classes).
20
+
21
+ @category Class
22
+
23
+ @privateRemarks
24
+ We cannot use a `type` here because TypeScript throws: 'abstract' modifier cannot appear on a type member. (1070)
25
+ */
26
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
27
+ export interface AbstractClass<T, Arguments extends unknown[] = any[]> extends AbstractConstructor<T, Arguments> {
28
+ prototype: Pick<T, keyof T>;
29
+ }
30
+
31
+ /**
32
+ Matches an [`abstract class`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-2.html#abstract-construct-signatures) constructor.
33
+
34
+ @category Class
35
+ */
36
+ export type AbstractConstructor<T, Arguments extends unknown[] = any[]> = abstract new(...arguments_: Arguments) => T;
37
+
38
+ /**
39
+ Matches a JSON object.
40
+
41
+ This type can be useful to enforce some input to be JSON-compatible or as a super-type to be extended from. Don't use this as a direct return type as the user would have to double-cast it: `jsonObject as unknown as CustomResponse`. Instead, you could extend your CustomResponse type from it to ensure your type only uses JSON-compatible types: `interface CustomResponse extends JsonObject { … }`.
42
+
43
+ @category JSON
44
+ */
45
+ export type JsonObject = {[Key in string]: JsonValue} & {[Key in string]?: JsonValue | undefined};
46
+
47
+ /**
48
+ Matches a JSON array.
49
+
50
+ @category JSON
51
+ */
52
+ export type JsonArray = JsonValue[] | readonly JsonValue[];
53
+
54
+ /**
55
+ Matches any valid JSON primitive value.
56
+
57
+ @category JSON
58
+ */
59
+ export type JsonPrimitive = string | number | boolean | null;
60
+
61
+ /**
62
+ Matches any valid JSON value.
63
+
64
+ @see `Jsonify` if you need to transform a type to one that is assignable to `JsonValue`.
65
+
66
+ @category JSON
67
+ */
68
+ export type JsonValue = JsonPrimitive | JsonObject | JsonArray;
@@ -0,0 +1,89 @@
1
+ import type {ApplyDefaultOptions} from './internal';
2
+ import type {Words} from './words';
3
+
4
+ /**
5
+ CamelCase options.
6
+
7
+ @see {@link CamelCase}
8
+ */
9
+ export type CamelCaseOptions = {
10
+ /**
11
+ Whether to preserved consecutive uppercase letter.
12
+
13
+ @default true
14
+ */
15
+ preserveConsecutiveUppercase?: boolean;
16
+ };
17
+
18
+ export type DefaultCamelCaseOptions = {
19
+ preserveConsecutiveUppercase: true;
20
+ };
21
+
22
+ /**
23
+ Convert an array of words to camel-case.
24
+ */
25
+ type CamelCaseFromArray<
26
+ Words extends string[],
27
+ Options extends Required<CamelCaseOptions>,
28
+ OutputString extends string = '',
29
+ > = Words extends [
30
+ infer FirstWord extends string,
31
+ ...infer RemainingWords extends string[],
32
+ ]
33
+ ? Options['preserveConsecutiveUppercase'] extends true
34
+ ? `${Capitalize<FirstWord>}${CamelCaseFromArray<RemainingWords, Options>}`
35
+ : `${Capitalize<Lowercase<FirstWord>>}${CamelCaseFromArray<RemainingWords, Options>}`
36
+ : OutputString;
37
+
38
+ /**
39
+ Convert a string literal to camel-case.
40
+
41
+ This can be useful when, for example, converting some kebab-cased command-line flags or a snake-cased database result.
42
+
43
+ By default, consecutive uppercase letter are preserved. See {@link CamelCaseOptions.preserveConsecutiveUppercase preserveConsecutiveUppercase} option to change this behaviour.
44
+
45
+ @example
46
+ ```
47
+ import type {CamelCase} from 'type-fest';
48
+
49
+ // Simple
50
+
51
+ const someVariable: CamelCase<'foo-bar'> = 'fooBar';
52
+ const preserveConsecutiveUppercase: CamelCase<'foo-BAR-baz', {preserveConsecutiveUppercase: true}> = 'fooBARBaz';
53
+
54
+ // Advanced
55
+
56
+ type CamelCasedProperties<T> = {
57
+ [K in keyof T as CamelCase<K>]: T[K]
58
+ };
59
+
60
+ interface RawOptions {
61
+ 'dry-run': boolean;
62
+ 'full_family_name': string;
63
+ foo: number;
64
+ BAR: string;
65
+ QUZ_QUX: number;
66
+ 'OTHER-FIELD': boolean;
67
+ }
68
+
69
+ const dbResult: CamelCasedProperties<RawOptions> = {
70
+ dryRun: true,
71
+ fullFamilyName: 'bar.js',
72
+ foo: 123,
73
+ bar: 'foo',
74
+ quzQux: 6,
75
+ otherField: false
76
+ };
77
+ ```
78
+
79
+ @category Change case
80
+ @category Template literal
81
+ */
82
+ export type CamelCase<Type, Options extends CamelCaseOptions = {}> = Type extends string
83
+ ? string extends Type
84
+ ? Type
85
+ : Uncapitalize<CamelCaseFromArray<
86
+ Words<Type extends Uppercase<Type> ? Lowercase<Type> : Type>,
87
+ ApplyDefaultOptions<CamelCaseOptions, DefaultCamelCaseOptions, Options>
88
+ >>
89
+ : Type;