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,151 @@
1
+ import type {ApplyDefaultOptions, BuiltIns} from './internal';
2
+ import type {IsNever} from './is-never';
3
+
4
+ /**
5
+ @see {@link PartialDeep}
6
+ */
7
+ export type PartialDeepOptions = {
8
+ /**
9
+ Whether to affect the individual elements of arrays and tuples.
10
+
11
+ @default false
12
+ */
13
+ readonly recurseIntoArrays?: boolean;
14
+
15
+ /**
16
+ Allows `undefined` values in non-tuple arrays.
17
+
18
+ - When set to `true`, elements of non-tuple arrays can be `undefined`.
19
+ - When set to `false`, only explicitly defined elements are allowed in non-tuple arrays, ensuring stricter type checking.
20
+
21
+ @default true
22
+
23
+ @example
24
+ You can prevent `undefined` values in non-tuple arrays by passing `{recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}` as the second type argument:
25
+
26
+ ```
27
+ import type {PartialDeep} from 'type-fest';
28
+
29
+ type Settings = {
30
+ languages: string[];
31
+ };
32
+
33
+ declare const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true; allowUndefinedInNonTupleArrays: false}>;
34
+
35
+ partialSettings.languages = [undefined]; // Error
36
+ partialSettings.languages = []; // Ok
37
+ ```
38
+ */
39
+ readonly allowUndefinedInNonTupleArrays?: boolean;
40
+ };
41
+
42
+ type DefaultPartialDeepOptions = {
43
+ recurseIntoArrays: false;
44
+ allowUndefinedInNonTupleArrays: true;
45
+ };
46
+
47
+ /**
48
+ Create a type from another type with all keys and nested keys set to optional.
49
+
50
+ Use-cases:
51
+ - Merging a default settings/config object with another object, the second object would be a deep partial of the default object.
52
+ - Mocking and testing complex entities, where populating an entire object with its keys would be redundant in terms of the mock or test.
53
+
54
+ @example
55
+ ```
56
+ import type {PartialDeep} from 'type-fest';
57
+
58
+ const settings: Settings = {
59
+ textEditor: {
60
+ fontSize: 14,
61
+ fontColor: '#000000',
62
+ fontWeight: 400
63
+ },
64
+ autocomplete: false,
65
+ autosave: true
66
+ };
67
+
68
+ const applySavedSettings = (savedSettings: PartialDeep<Settings>) => {
69
+ return {...settings, ...savedSettings};
70
+ }
71
+
72
+ settings = applySavedSettings({textEditor: {fontWeight: 500}});
73
+ ```
74
+
75
+ By default, this does not affect elements in array and tuple types. You can change this by passing `{recurseIntoArrays: true}` as the second type argument:
76
+
77
+ ```
78
+ import type {PartialDeep} from 'type-fest';
79
+
80
+ type Settings = {
81
+ languages: string[];
82
+ }
83
+
84
+ const partialSettings: PartialDeep<Settings, {recurseIntoArrays: true}> = {
85
+ languages: [undefined]
86
+ };
87
+ ```
88
+
89
+ @see {@link PartialDeepOptions}
90
+
91
+ @category Object
92
+ @category Array
93
+ @category Set
94
+ @category Map
95
+ */
96
+ export type PartialDeep<T, Options extends PartialDeepOptions = {}> =
97
+ _PartialDeep<T, ApplyDefaultOptions<PartialDeepOptions, DefaultPartialDeepOptions, Options>>;
98
+
99
+ type _PartialDeep<T, Options extends Required<PartialDeepOptions>> = T extends BuiltIns | ((new (...arguments_: any[]) => unknown))
100
+ ? T
101
+ : IsNever<keyof T> extends true // For functions with no properties
102
+ ? T
103
+ : T extends Map<infer KeyType, infer ValueType>
104
+ ? PartialMapDeep<KeyType, ValueType, Options>
105
+ : T extends Set<infer ItemType>
106
+ ? PartialSetDeep<ItemType, Options>
107
+ : T extends ReadonlyMap<infer KeyType, infer ValueType>
108
+ ? PartialReadonlyMapDeep<KeyType, ValueType, Options>
109
+ : T extends ReadonlySet<infer ItemType>
110
+ ? PartialReadonlySetDeep<ItemType, Options>
111
+ : T extends object
112
+ ? T extends ReadonlyArray<infer ItemType> // Test for arrays/tuples, per https://github.com/microsoft/TypeScript/issues/35156
113
+ ? Options['recurseIntoArrays'] extends true
114
+ ? ItemType[] extends T // Test for arrays (non-tuples) specifically
115
+ ? readonly ItemType[] extends T // Differentiate readonly and mutable arrays
116
+ ? ReadonlyArray<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
117
+ : Array<_PartialDeep<Options['allowUndefinedInNonTupleArrays'] extends false ? ItemType : ItemType | undefined, Options>>
118
+ : PartialObjectDeep<T, Options> // Tuples behave properly
119
+ : T // If they don't opt into array testing, just use the original type
120
+ : PartialObjectDeep<T, Options>
121
+ : unknown;
122
+
123
+ /**
124
+ Same as `PartialDeep`, but accepts only `Map`s and as inputs. Internal helper for `PartialDeep`.
125
+ */
126
+ type PartialMapDeep<KeyType, ValueType, Options extends Required<PartialDeepOptions>> = {} & Map<_PartialDeep<KeyType, Options>, _PartialDeep<ValueType, Options>>;
127
+
128
+ /**
129
+ Same as `PartialDeep`, but accepts only `Set`s as inputs. Internal helper for `PartialDeep`.
130
+ */
131
+ type PartialSetDeep<T, Options extends Required<PartialDeepOptions>> = {} & Set<_PartialDeep<T, Options>>;
132
+
133
+ /**
134
+ Same as `PartialDeep`, but accepts only `ReadonlyMap`s as inputs. Internal helper for `PartialDeep`.
135
+ */
136
+ type PartialReadonlyMapDeep<KeyType, ValueType, Options extends Required<PartialDeepOptions>> = {} & ReadonlyMap<_PartialDeep<KeyType, Options>, _PartialDeep<ValueType, Options>>;
137
+
138
+ /**
139
+ Same as `PartialDeep`, but accepts only `ReadonlySet`s as inputs. Internal helper for `PartialDeep`.
140
+ */
141
+ type PartialReadonlySetDeep<T, Options extends Required<PartialDeepOptions>> = {} & ReadonlySet<_PartialDeep<T, Options>>;
142
+
143
+ /**
144
+ Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for `PartialDeep`.
145
+ */
146
+ type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> =
147
+ (ObjectType extends (...arguments_: any) => unknown
148
+ ? (...arguments_: Parameters<ObjectType>) => ReturnType<ObjectType>
149
+ : {}) & ({
150
+ [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>
151
+ });
@@ -0,0 +1,78 @@
1
+ import type {IfUnknown} from './if-unknown';
2
+ import type {ApplyDefaultOptions, BuiltIns, LiteralKeyOf} from './internal';
3
+ import type {Merge} from './merge';
4
+
5
+ /**
6
+ @see PartialOnUndefinedDeep
7
+ */
8
+ export type PartialOnUndefinedDeepOptions = {
9
+ /**
10
+ Whether to affect the individual elements of arrays and tuples.
11
+
12
+ @default false
13
+ */
14
+ readonly recurseIntoArrays?: boolean;
15
+ };
16
+
17
+ type DefaultPartialOnUndefinedDeepOptions = {
18
+ recurseIntoArrays: false;
19
+ };
20
+
21
+ /**
22
+ Create a deep version of another type where all keys accepting `undefined` type are set to optional.
23
+
24
+ This utility type is recursive, transforming at any level deep. By default, it does not affect arrays and tuples items unless you explicitly pass `{recurseIntoArrays: true}` as the second type argument.
25
+
26
+ Use-cases:
27
+ - Make all properties of a type that can be undefined optional to not have to specify keys with undefined value.
28
+
29
+ @example
30
+ ```
31
+ import type {PartialOnUndefinedDeep} from 'type-fest';
32
+
33
+ interface Settings {
34
+ optionA: string;
35
+ optionB: number | undefined;
36
+ subOption: {
37
+ subOptionA: boolean;
38
+ subOptionB: boolean | undefined;
39
+ }
40
+ };
41
+
42
+ const testSettings: PartialOnUndefinedDeep<Settings> = {
43
+ optionA: 'foo',
44
+ // 👉 optionB is now optional and can be omitted
45
+ subOption: {
46
+ subOptionA: true,
47
+ // 👉 subOptionB is now optional as well and can be omitted
48
+ },
49
+ };
50
+ ```
51
+
52
+ @category Object
53
+ */
54
+ export type PartialOnUndefinedDeep<T, Options extends PartialOnUndefinedDeepOptions = {}> =
55
+ _PartialOnUndefinedDeep<T, ApplyDefaultOptions<PartialOnUndefinedDeepOptions, DefaultPartialOnUndefinedDeepOptions, Options>>;
56
+
57
+ type _PartialOnUndefinedDeep<T, Options extends Required<PartialOnUndefinedDeepOptions>> = T extends Record<any, any> | undefined
58
+ ? {[KeyType in keyof T as undefined extends T[KeyType] ? IfUnknown<T[KeyType], never, KeyType> : never]?: PartialOnUndefinedDeepValue<T[KeyType], Options>} extends infer U // Make a partial type with all value types accepting undefined (and set them optional)
59
+ ? Merge<{[KeyType in keyof T as KeyType extends LiteralKeyOf<U> ? never : KeyType]: PartialOnUndefinedDeepValue<T[KeyType], Options>}, U> // Join all remaining keys not treated in U
60
+ : never // Should not happen
61
+ : T;
62
+
63
+ /**
64
+ Utility type to get the value type by key and recursively call `PartialOnUndefinedDeep` to transform sub-objects.
65
+ */
66
+ type PartialOnUndefinedDeepValue<T, Options extends Required<PartialOnUndefinedDeepOptions>> = T extends BuiltIns | ((...arguments_: any[]) => unknown)
67
+ ? T
68
+ : T extends ReadonlyArray<infer U> // Test if type is array or tuple
69
+ ? Options['recurseIntoArrays'] extends true // Check if option is activated
70
+ ? U[] extends T // Check if array not tuple
71
+ ? readonly U[] extends T
72
+ ? ReadonlyArray<_PartialOnUndefinedDeep<U, Options>> // Readonly array treatment
73
+ : Array<_PartialOnUndefinedDeep<U, Options>> // Mutable array treatment
74
+ : _PartialOnUndefinedDeep<{[Key in keyof T]: _PartialOnUndefinedDeep<T[Key], Options>}, Options> // Tuple treatment
75
+ : T
76
+ : T extends Record<any, any> | undefined
77
+ ? _PartialOnUndefinedDeep<T, Options>
78
+ : unknown;
@@ -0,0 +1,42 @@
1
+ import type {CamelCase, CamelCaseOptions, DefaultCamelCaseOptions} from './camel-case';
2
+ import type {ApplyDefaultOptions} from './internal';
3
+
4
+ /**
5
+ Converts a string literal to pascal-case.
6
+
7
+ @example
8
+ ```
9
+ import type {PascalCase} from 'type-fest';
10
+
11
+ // Simple
12
+
13
+ const someVariable: PascalCase<'foo-bar'> = 'FooBar';
14
+
15
+ // Advanced
16
+
17
+ type PascalCaseProps<T> = {
18
+ [K in keyof T as PascalCase<K>]: T[K]
19
+ };
20
+
21
+ interface RawOptions {
22
+ 'dry-run': boolean;
23
+ 'full_family_name': string;
24
+ foo: number;
25
+ }
26
+
27
+ const dbResult: CamelCasedProperties<ModelProps> = {
28
+ DryRun: true,
29
+ FullFamilyName: 'bar.js',
30
+ Foo: 123
31
+ };
32
+ ```
33
+
34
+ @category Change case
35
+ @category Template literal
36
+ */
37
+ export type PascalCase<Value, Options extends CamelCaseOptions = {}> =
38
+ _PascalCase<Value, ApplyDefaultOptions<CamelCaseOptions, DefaultCamelCaseOptions, Options>>;
39
+
40
+ type _PascalCase<Value, Options extends Required<CamelCaseOptions>> = CamelCase<Value, Options> extends string
41
+ ? Capitalize<CamelCase<Value, Options>>
42
+ : CamelCase<Value, Options>;
@@ -0,0 +1,62 @@
1
+ import type {CamelCaseOptions, DefaultCamelCaseOptions} from './camel-case';
2
+ import type {ApplyDefaultOptions} from './internal';
3
+ import type {PascalCase} from './pascal-case';
4
+
5
+ /**
6
+ Convert object properties to pascal case recursively.
7
+
8
+ This can be useful when, for example, converting some API types from a different style.
9
+
10
+ @see PascalCase
11
+ @see PascalCasedProperties
12
+
13
+ @example
14
+ ```
15
+ import type {PascalCasedPropertiesDeep} from 'type-fest';
16
+
17
+ interface User {
18
+ userId: number;
19
+ userName: string;
20
+ }
21
+
22
+ interface UserWithFriends {
23
+ userInfo: User;
24
+ userFriends: User[];
25
+ }
26
+
27
+ const result: PascalCasedPropertiesDeep<UserWithFriends> = {
28
+ UserInfo: {
29
+ UserId: 1,
30
+ UserName: 'Tom',
31
+ },
32
+ UserFriends: [
33
+ {
34
+ UserId: 2,
35
+ UserName: 'Jerry',
36
+ },
37
+ {
38
+ UserId: 3,
39
+ UserName: 'Spike',
40
+ },
41
+ ],
42
+ };
43
+ ```
44
+
45
+ @category Change case
46
+ @category Template literal
47
+ @category Object
48
+ */
49
+ export type PascalCasedPropertiesDeep<Value, Options extends CamelCaseOptions = {}> =
50
+ _PascalCasedPropertiesDeep<Value, ApplyDefaultOptions<CamelCaseOptions, DefaultCamelCaseOptions, Options>>;
51
+
52
+ type _PascalCasedPropertiesDeep<Value, Options extends Required<CamelCaseOptions>> = Value extends Function | Date | RegExp
53
+ ? Value
54
+ : Value extends Array<infer U>
55
+ ? Array<_PascalCasedPropertiesDeep<U, Options>>
56
+ : Value extends Set<infer U>
57
+ ? Set<_PascalCasedPropertiesDeep<U, Options>>
58
+ : Value extends object
59
+ ? {
60
+ [K in keyof Value as PascalCase<K, Options>]: _PascalCasedPropertiesDeep<Value[K], Options>;
61
+ }
62
+ : Value;
@@ -0,0 +1,36 @@
1
+ import type {CamelCaseOptions, DefaultCamelCaseOptions} from './camel-case';
2
+ import type {ApplyDefaultOptions} from './internal';
3
+ import type {PascalCase} from './pascal-case';
4
+
5
+ /**
6
+ Convert object properties to pascal case but not recursively.
7
+
8
+ This can be useful when, for example, converting some API types from a different style.
9
+
10
+ @see PascalCase
11
+ @see PascalCasedPropertiesDeep
12
+
13
+ @example
14
+ ```
15
+ import type {PascalCasedProperties} from 'type-fest';
16
+
17
+ interface User {
18
+ userId: number;
19
+ userName: string;
20
+ }
21
+
22
+ const result: PascalCasedProperties<User> = {
23
+ UserId: 1,
24
+ UserName: 'Tom',
25
+ };
26
+ ```
27
+
28
+ @category Change case
29
+ @category Template literal
30
+ @category Object
31
+ */
32
+ export type PascalCasedProperties<Value, Options extends CamelCaseOptions = {}> = Value extends Function
33
+ ? Value
34
+ : Value extends Array<infer U>
35
+ ? Value
36
+ : {[K in keyof Value as PascalCase<K, ApplyDefaultOptions<CamelCaseOptions, DefaultCamelCaseOptions, Options>>]: Value[K]};
@@ -0,0 +1,262 @@
1
+ import type {StaticPartOfArray, VariablePartOfArray, NonRecursiveType, ToString, IsNumberLike, ApplyDefaultOptions} from './internal';
2
+ import type {EmptyObject} from './empty-object';
3
+ import type {IsAny} from './is-any';
4
+ import type {UnknownArray} from './unknown-array';
5
+ import type {Subtract} from './subtract';
6
+ import type {GreaterThan} from './greater-than';
7
+
8
+ /**
9
+ Paths options.
10
+
11
+ @see {@link Paths}
12
+ */
13
+ export type PathsOptions = {
14
+ /**
15
+ The maximum depth to recurse when searching for paths.
16
+
17
+ @default 10
18
+ */
19
+ maxRecursionDepth?: number;
20
+
21
+ /**
22
+ Use bracket notation for array indices and numeric object keys.
23
+
24
+ @default false
25
+
26
+ @example
27
+ ```
28
+ type ArrayExample = {
29
+ array: ['foo'];
30
+ };
31
+
32
+ type A = Paths<ArrayExample, {bracketNotation: false}>;
33
+ //=> 'array' | 'array.0'
34
+
35
+ type B = Paths<ArrayExample, {bracketNotation: true}>;
36
+ //=> 'array' | 'array[0]'
37
+ ```
38
+
39
+ @example
40
+ ```
41
+ type NumberKeyExample = {
42
+ 1: ['foo'];
43
+ };
44
+
45
+ type A = Paths<NumberKeyExample, {bracketNotation: false}>;
46
+ //=> 1 | '1' | '1.0'
47
+
48
+ type B = Paths<NumberKeyExample, {bracketNotation: true}>;
49
+ //=> '[1]' | '[1][0]'
50
+ ```
51
+ */
52
+ bracketNotation?: boolean;
53
+
54
+ /**
55
+ Only include leaf paths in the output.
56
+
57
+ @default false
58
+
59
+ @example
60
+ ```
61
+ type Post = {
62
+ id: number;
63
+ author: {
64
+ id: number;
65
+ name: {
66
+ first: string;
67
+ last: string;
68
+ };
69
+ };
70
+ };
71
+
72
+ type AllPaths = Paths<Post, {leavesOnly: false}>;
73
+ //=> 'id' | 'author' | 'author.id' | 'author.name' | 'author.name.first' | 'author.name.last'
74
+
75
+ type LeafPaths = Paths<Post, {leavesOnly: true}>;
76
+ //=> 'id' | 'author.id' | 'author.name.first' | 'author.name.last'
77
+ ```
78
+
79
+ @example
80
+ ```
81
+ type ArrayExample = {
82
+ array: Array<{foo: string}>;
83
+ tuple: [string, {bar: string}];
84
+ };
85
+
86
+ type AllPaths = Paths<ArrayExample, {leavesOnly: false}>;
87
+ //=> 'array' | `array.${number}` | `array.${number}.foo` | 'tuple' | 'tuple.0' | 'tuple.1' | 'tuple.1.bar'
88
+
89
+ type LeafPaths = Paths<ArrayExample, {leavesOnly: true}>;
90
+ //=> `array.${number}.foo` | 'tuple.0' | 'tuple.1.bar'
91
+ ```
92
+ */
93
+ leavesOnly?: boolean;
94
+
95
+ /**
96
+ Only include paths at the specified depth. By default all paths up to {@link PathsOptions.maxRecursionDepth | `maxRecursionDepth`} are included.
97
+
98
+ Note: Depth starts at `0` for root properties.
99
+
100
+ @default number
101
+
102
+ @example
103
+ ```
104
+ type Post = {
105
+ id: number;
106
+ author: {
107
+ id: number;
108
+ name: {
109
+ first: string;
110
+ last: string;
111
+ };
112
+ };
113
+ };
114
+
115
+ type DepthZero = Paths<Post, {depth: 0}>;
116
+ //=> 'id' | 'author'
117
+
118
+ type DepthOne = Paths<Post, {depth: 1}>;
119
+ //=> 'author.id' | 'author.name'
120
+
121
+ type DepthTwo = Paths<Post, {depth: 2}>;
122
+ //=> 'author.name.first' | 'author.name.last'
123
+
124
+ type LeavesAtDepthOne = Paths<Post, {leavesOnly: true; depth: 1}>;
125
+ //=> 'author.id'
126
+ ```
127
+ */
128
+ depth?: number;
129
+ };
130
+
131
+ type DefaultPathsOptions = {
132
+ maxRecursionDepth: 10;
133
+ bracketNotation: false;
134
+ leavesOnly: false;
135
+ depth: number;
136
+ };
137
+
138
+ /**
139
+ Generate a union of all possible paths to properties in the given object.
140
+
141
+ It also works with arrays.
142
+
143
+ Use-case: You want a type-safe way to access deeply nested properties in an object.
144
+
145
+ @example
146
+ ```
147
+ import type {Paths} from 'type-fest';
148
+
149
+ type Project = {
150
+ filename: string;
151
+ listA: string[];
152
+ listB: [{filename: string}];
153
+ folder: {
154
+ subfolder: {
155
+ filename: string;
156
+ };
157
+ };
158
+ };
159
+
160
+ type ProjectPaths = Paths<Project>;
161
+ //=> 'filename' | 'listA' | 'listB' | 'folder' | `listA.${number}` | 'listB.0' | 'listB.0.filename' | 'folder.subfolder' | 'folder.subfolder.filename'
162
+
163
+ declare function open<Path extends ProjectPaths>(path: Path): void;
164
+
165
+ open('filename'); // Pass
166
+ open('folder.subfolder'); // Pass
167
+ open('folder.subfolder.filename'); // Pass
168
+ open('foo'); // TypeError
169
+
170
+ // Also works with arrays
171
+ open('listA.1'); // Pass
172
+ open('listB.0'); // Pass
173
+ open('listB.1'); // TypeError. Because listB only has one element.
174
+ ```
175
+
176
+ @category Object
177
+ @category Array
178
+ */
179
+ export type Paths<T, Options extends PathsOptions = {}> = _Paths<T, ApplyDefaultOptions<PathsOptions, DefaultPathsOptions, Options>>;
180
+
181
+ type _Paths<T, Options extends Required<PathsOptions>> =
182
+ T extends NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>
183
+ ? never
184
+ : IsAny<T> extends true
185
+ ? never
186
+ : T extends UnknownArray
187
+ ? number extends T['length']
188
+ // We need to handle the fixed and non-fixed index part of the array separately.
189
+ ? InternalPaths<StaticPartOfArray<T>, Options>
190
+ | InternalPaths<Array<VariablePartOfArray<T>[number]>, Options>
191
+ : InternalPaths<T, Options>
192
+ : T extends object
193
+ ? InternalPaths<T, Options>
194
+ : never;
195
+
196
+ type InternalPaths<T, Options extends Required<PathsOptions>> =
197
+ Options['maxRecursionDepth'] extends infer MaxDepth extends number
198
+ ? Required<T> extends infer T
199
+ ? T extends EmptyObject | readonly []
200
+ ? never
201
+ : {
202
+ [Key in keyof T]:
203
+ Key extends string | number // Limit `Key` to string or number.
204
+ ? (
205
+ Options['bracketNotation'] extends true
206
+ ? IsNumberLike<Key> extends true
207
+ ? `[${Key}]`
208
+ : (Key | ToString<Key>)
209
+ : never
210
+ |
211
+ Options['bracketNotation'] extends false
212
+ // If `Key` is a number, return `Key | `${Key}``, because both `array[0]` and `array['0']` work.
213
+ ? (Key | ToString<Key>)
214
+ : never
215
+ ) extends infer TranformedKey extends string | number ?
216
+ // 1. If style is 'a[0].b' and 'Key' is a numberlike value like 3 or '3', transform 'Key' to `[${Key}]`, else to `${Key}` | Key
217
+ // 2. If style is 'a.0.b', transform 'Key' to `${Key}` | Key
218
+ | ((Options['leavesOnly'] extends true
219
+ ? MaxDepth extends 0
220
+ ? TranformedKey
221
+ : T[Key] extends EmptyObject | readonly [] | NonRecursiveType | ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>
222
+ ? TranformedKey
223
+ : never
224
+ : TranformedKey
225
+ ) extends infer _TransformedKey
226
+ // If `depth` is provided, the condition becomes truthy only when it reaches `0`.
227
+ // Otherwise, since `depth` defaults to `number`, the condition is always truthy, returning paths at all depths.
228
+ ? 0 extends Options['depth']
229
+ ? _TransformedKey
230
+ : never
231
+ : never)
232
+ | (
233
+ // Recursively generate paths for the current key
234
+ GreaterThan<MaxDepth, 0> extends true // Limit the depth to prevent infinite recursion
235
+ ? _Paths<T[Key],
236
+ {
237
+ bracketNotation: Options['bracketNotation'];
238
+ maxRecursionDepth: Subtract<MaxDepth, 1>;
239
+ leavesOnly: Options['leavesOnly'];
240
+ depth: Subtract<Options['depth'], 1>;
241
+ }> extends infer SubPath
242
+ ? SubPath extends string | number
243
+ ? (
244
+ Options['bracketNotation'] extends true
245
+ ? SubPath extends `[${any}]` | `[${any}]${string}`
246
+ ? `${TranformedKey}${SubPath}` // If next node is number key like `[3]`, no need to add `.` before it.
247
+ : `${TranformedKey}.${SubPath}`
248
+ : never
249
+ ) | (
250
+ Options['bracketNotation'] extends false
251
+ ? `${TranformedKey}.${SubPath}`
252
+ : never
253
+ )
254
+ : never
255
+ : never
256
+ : never
257
+ )
258
+ : never
259
+ : never
260
+ }[keyof T & (T extends UnknownArray ? number : unknown)]
261
+ : never
262
+ : never;