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,48 @@
1
+ import type {Subtract} from './subtract';
2
+ import type {IsEqual} from './is-equal';
3
+
4
+ type Recursive<T> = ReadonlyArray<Recursive<T>>;
5
+
6
+ /**
7
+ Creates a type that represents a multidimensional readonly array that of the given type and dimension.
8
+
9
+ Use-cases:
10
+ - Return a n-dimensional array from functions.
11
+ - Declare a n-dimensional array by defining its dimensions rather than declaring `[]` repetitively.
12
+ - Infer the dimensions of a n-dimensional array automatically from function arguments.
13
+ - Avoid the need to know in advance the dimensions of a n-dimensional array allowing them to be dynamic.
14
+
15
+ @example
16
+ ```
17
+ import type {MultidimensionalReadonlyArray} from 'type-fest';
18
+
19
+ function emptyMatrix<T extends number>(dimensions: T): MultidimensionalReadonlyArray<unknown, T> {
20
+ const matrix: unknown[] = [];
21
+
22
+ let subMatrix = matrix;
23
+ for (let dimension = 1; dimension < dimensions; ++dimension) {
24
+ console.log(`Initializing dimension #${dimension}`);
25
+
26
+ subMatrix[0] = [];
27
+ if (dimension < dimensions - 1) {
28
+ subMatrix = subMatrix[0] as unknown[];
29
+ } else {
30
+ subMatrix[0] = 42;
31
+ }
32
+ }
33
+
34
+ return matrix as MultidimensionalReadonlyArray<unknown, T>;
35
+ }
36
+
37
+ const matrix = emptyMatrix(3);
38
+
39
+ const answer = matrix[0][0][0]; // 42
40
+ ```
41
+
42
+ @category Array
43
+ */
44
+ export type MultidimensionalReadonlyArray<Element, Dimensions extends number> = number extends Dimensions
45
+ ? Recursive<Element>
46
+ : IsEqual<Dimensions, 0> extends true
47
+ ? Element
48
+ : ReadonlyArray<MultidimensionalReadonlyArray<Element, Subtract<Dimensions, 1>>>;
@@ -0,0 +1,35 @@
1
+ import type {HasRequiredKeys} from './has-required-keys';
2
+ import type {RequireAtLeastOne} from './require-at-least-one';
3
+
4
+ /**
5
+ Represents an object with at least 1 non-optional key.
6
+
7
+ This is useful when you need an object where all keys are optional, but there must be at least 1 key.
8
+
9
+ @example
10
+ ```
11
+ import type {NonEmptyObject} from 'type-fest';
12
+
13
+ type User = {
14
+ name: string;
15
+ surname: string;
16
+ id: number;
17
+ };
18
+
19
+ type UpdateRequest<Entity extends object> = NonEmptyObject<Partial<Entity>>;
20
+
21
+ const update1: UpdateRequest<User> = {
22
+ name: 'Alice',
23
+ surname: 'Acme',
24
+ };
25
+
26
+ // At least 1 key is required, therefore this will report a 2322 error:
27
+ // Type '{}' is not assignable to type 'UpdateRequest<User>'
28
+ const update2: UpdateRequest<User> = {};
29
+ ```
30
+
31
+ @see Use `IsEmptyObject` to check whether an object is empty.
32
+
33
+ @category Object
34
+ */
35
+ export type NonEmptyObject<T extends object> = HasRequiredKeys<T> extends true ? T : RequireAtLeastOne<T, keyof T>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ Matches any non-empty string.
3
+
4
+ This is useful when you need a string that is not empty, for example, as a function parameter.
5
+
6
+ NOTE:
7
+ - This returns `never` not just when instantiated with an empty string, but also when an empty string is a subtype of the instantiated type, like `string` or `Uppercase<string>`.
8
+
9
+ @example
10
+ ```
11
+ import type {NonEmptyString} from 'type-fest';
12
+
13
+ declare function foo<T extends string>(string: NonEmptyString<T>): void;
14
+
15
+ foo('a');
16
+ //=> OK
17
+
18
+ foo('');
19
+ //=> Error: Argument of type '""' is not assignable to parameter of type 'never'.
20
+
21
+ declare const someString: string
22
+ foo(someString);
23
+ //=> Error: Argument of type 'string' is not assignable to parameter of type 'never'.
24
+ ```
25
+
26
+ @category String
27
+ */
28
+ export type NonEmptyString<T extends string> = '' extends T ? never : T;
@@ -0,0 +1,21 @@
1
+ /**
2
+ Matches any non-empty tuple.
3
+
4
+ @example
5
+ ```
6
+ import type {NonEmptyTuple} from 'type-fest';
7
+
8
+ const sum = (...numbers: NonEmptyTuple<number>) => numbers.reduce((total, value) => total + value, 0);
9
+
10
+ sum(1, 2, 3);
11
+ //=> 6
12
+
13
+ sum();
14
+ //=> Error: Expected at least 1 arguments, but got 0.
15
+ ```
16
+
17
+ @see {@link RequireAtLeastOne} for objects
18
+
19
+ @category Array
20
+ */
21
+ export type NonEmptyTuple<T = unknown> = readonly [T, ...T[]];
@@ -0,0 +1,222 @@
1
+ import type {IsFloat} from './is-float';
2
+ import type {IsInteger} from './is-integer';
3
+
4
+ export type Numeric = number | bigint;
5
+
6
+ export type Zero = 0 | 0n;
7
+
8
+ /**
9
+ Matches the hidden `Infinity` type.
10
+
11
+ Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277) if you want to have this type as a built-in in TypeScript.
12
+
13
+ @see NegativeInfinity
14
+
15
+ @category Numeric
16
+ */
17
+ // See https://github.com/microsoft/TypeScript/issues/31752
18
+ // eslint-disable-next-line @typescript-eslint/no-loss-of-precision
19
+ export type PositiveInfinity = 1e999;
20
+
21
+ /**
22
+ Matches the hidden `-Infinity` type.
23
+
24
+ Please upvote [this issue](https://github.com/microsoft/TypeScript/issues/32277) if you want to have this type as a built-in in TypeScript.
25
+
26
+ @see PositiveInfinity
27
+
28
+ @category Numeric
29
+ */
30
+ // See https://github.com/microsoft/TypeScript/issues/31752
31
+ // eslint-disable-next-line @typescript-eslint/no-loss-of-precision
32
+ export type NegativeInfinity = -1e999;
33
+
34
+ /**
35
+ A finite `number`.
36
+ You can't pass a `bigint` as they are already guaranteed to be finite.
37
+
38
+ Use-case: Validating and documenting parameters.
39
+
40
+ Note: This can't detect `NaN`, please upvote [this issue](https://github.com/microsoft/TypeScript/issues/28682) if you want to have this type as a built-in in TypeScript.
41
+
42
+ @example
43
+ ```
44
+ import type {Finite} from 'type-fest';
45
+
46
+ declare function setScore<T extends number>(length: Finite<T>): void;
47
+ ```
48
+
49
+ @category Numeric
50
+ */
51
+ export type Finite<T extends number> = T extends PositiveInfinity | NegativeInfinity ? never : T;
52
+
53
+ /**
54
+ A `number` that is an integer.
55
+
56
+ Use-case: Validating and documenting parameters.
57
+
58
+ @example
59
+ ```
60
+ type Integer = Integer<1>;
61
+ //=> 1
62
+
63
+ type IntegerWithDecimal = Integer<1.0>;
64
+ //=> 1
65
+
66
+ type NegativeInteger = Integer<-1>;
67
+ //=> -1
68
+
69
+ type Float = Integer<1.5>;
70
+ //=> never
71
+
72
+ // Supports non-decimal numbers
73
+
74
+ type OctalInteger: Integer<0o10>;
75
+ //=> 0o10
76
+
77
+ type BinaryInteger: Integer<0b10>;
78
+ //=> 0b10
79
+
80
+ type HexadecimalInteger: Integer<0x10>;
81
+ //=> 0x10
82
+ ```
83
+
84
+ @example
85
+ ```
86
+ import type {Integer} from 'type-fest';
87
+
88
+ declare function setYear<T extends number>(length: Integer<T>): void;
89
+ ```
90
+
91
+ @see NegativeInteger
92
+ @see NonNegativeInteger
93
+
94
+ @category Numeric
95
+ */
96
+ // `${bigint}` is a type that matches a valid bigint literal without the `n` (ex. 1, 0b1, 0o1, 0x1)
97
+ // Because T is a number and not a string we can effectively use this to filter out any numbers containing decimal points
98
+ export type Integer<T> =
99
+ T extends unknown // To distributive type
100
+ ? IsInteger<T> extends true ? T : never
101
+ : never; // Never happens
102
+
103
+ /**
104
+ A `number` that is not an integer.
105
+
106
+ Use-case: Validating and documenting parameters.
107
+
108
+ It does not accept `Infinity`.
109
+
110
+ @example
111
+ ```
112
+ import type {Float} from 'type-fest';
113
+
114
+ declare function setPercentage<T extends number>(length: Float<T>): void;
115
+ ```
116
+
117
+ @see Integer
118
+
119
+ @category Numeric
120
+ */
121
+ export type Float<T> =
122
+ T extends unknown // To distributive type
123
+ ? IsFloat<T> extends true ? T : never
124
+ : never; // Never happens
125
+
126
+ /**
127
+ A negative (`-∞ < x < 0`) `number` that is not an integer.
128
+ Equivalent to `Negative<Float<T>>`.
129
+
130
+ Use-case: Validating and documenting parameters.
131
+
132
+ @see Negative
133
+ @see Float
134
+
135
+ @category Numeric
136
+ */
137
+ export type NegativeFloat<T extends number> = Negative<Float<T>>;
138
+
139
+ /**
140
+ A negative `number`/`bigint` (`-∞ < x < 0`)
141
+
142
+ Use-case: Validating and documenting parameters.
143
+
144
+ @see NegativeInteger
145
+ @see NonNegative
146
+
147
+ @category Numeric
148
+ */
149
+ export type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never;
150
+
151
+ /**
152
+ A negative (`-∞ < x < 0`) `number` that is an integer.
153
+ Equivalent to `Negative<Integer<T>>`.
154
+
155
+ You can't pass a `bigint` as they are already guaranteed to be integers, instead use `Negative<T>`.
156
+
157
+ Use-case: Validating and documenting parameters.
158
+
159
+ @see Negative
160
+ @see Integer
161
+
162
+ @category Numeric
163
+ */
164
+ export type NegativeInteger<T extends number> = Negative<Integer<T>>;
165
+
166
+ /**
167
+ A non-negative `number`/`bigint` (`0 <= x < ∞`).
168
+
169
+ Use-case: Validating and documenting parameters.
170
+
171
+ @see NonNegativeInteger
172
+ @see Negative
173
+
174
+ @example
175
+ ```
176
+ import type {NonNegative} from 'type-fest';
177
+
178
+ declare function setLength<T extends number>(length: NonNegative<T>): void;
179
+ ```
180
+
181
+ @category Numeric
182
+ */
183
+ export type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : never;
184
+
185
+ /**
186
+ A non-negative (`0 <= x < ∞`) `number` that is an integer.
187
+ Equivalent to `NonNegative<Integer<T>>`.
188
+
189
+ You can't pass a `bigint` as they are already guaranteed to be integers, instead use `NonNegative<T>`.
190
+
191
+ Use-case: Validating and documenting parameters.
192
+
193
+ @see NonNegative
194
+ @see Integer
195
+
196
+ @example
197
+ ```
198
+ import type {NonNegativeInteger} from 'type-fest';
199
+
200
+ declare function setLength<T extends number>(length: NonNegativeInteger<T>): void;
201
+ ```
202
+
203
+ @category Numeric
204
+ */
205
+ export type NonNegativeInteger<T extends number> = NonNegative<Integer<T>>;
206
+
207
+ /**
208
+ Returns a boolean for whether the given number is a negative number.
209
+
210
+ @see Negative
211
+
212
+ @example
213
+ ```
214
+ import type {IsNegative} from 'type-fest';
215
+
216
+ type ShouldBeFalse = IsNegative<1>;
217
+ type ShouldBeTrue = IsNegative<-1>;
218
+ ```
219
+
220
+ @category Numeric
221
+ */
222
+ export type IsNegative<T extends Numeric> = T extends Negative<T> ? true : false;
@@ -0,0 +1,63 @@
1
+ declare global {
2
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions -- It has to be an `interface` so that it can be merged.
3
+ interface SymbolConstructor {
4
+ readonly observable: symbol;
5
+ }
6
+ }
7
+
8
+ /**
9
+ @remarks
10
+ The TC39 observable proposal defines a `closed` property, but some implementations (such as xstream) do not as of 10/08/2021.
11
+ As well, some guidance on making an `Observable` to not include `closed` property.
12
+ @see https://github.com/tc39/proposal-observable/blob/master/src/Observable.js#L129-L130
13
+ @see https://github.com/staltz/xstream/blob/6c22580c1d84d69773ee4b0905df44ad464955b3/src/index.ts#L79-L85
14
+ @see https://github.com/benlesh/symbol-observable#making-an-object-observable
15
+
16
+ @category Observable
17
+ */
18
+ export type Unsubscribable = {
19
+ unsubscribe(): void;
20
+ };
21
+
22
+ /**
23
+ @category Observable
24
+ */
25
+ type OnNext<ValueType> = (value: ValueType) => void;
26
+ /**
27
+ @category Observable
28
+ */
29
+ type OnError = (error: unknown) => void;
30
+ /**
31
+ @category Observable
32
+ */
33
+ type OnComplete = () => void;
34
+
35
+ /**
36
+ @category Observable
37
+ */
38
+ export type Observer<ValueType> = {
39
+ next: OnNext<ValueType>;
40
+ error: OnError;
41
+ complete: OnComplete;
42
+ };
43
+
44
+ /**
45
+ Matches a value that is like an [Observable](https://github.com/tc39/proposal-observable).
46
+
47
+ @remarks
48
+ The TC39 Observable proposal defines 2 forms of `subscribe()`:
49
+ 1. Three callback arguments: `subscribe(observer: OnNext<ValueType>, onError?: OnError, onComplete?: OnComplete): Unsubscribable;`
50
+ 2. A single `observer` argument: (as defined below)
51
+
52
+ But `Observable` implementations have evolved to preferring case 2 and some implementations choose not to implement case 1. Therefore, an `ObservableLike` cannot be trusted to implement the first case. (xstream and hand built observerables often do not implement case 1)
53
+
54
+ @see https://github.com/tc39/proposal-observable#observable
55
+ @see https://github.com/tc39/proposal-observable/blob/master/src/Observable.js#L246-L259
56
+ @see https://benlesh.com/posts/learning-observable-by-building-observable/
57
+
58
+ @category Observable
59
+ */
60
+ export type ObservableLike<ValueType = unknown> = {
61
+ subscribe(observer?: Partial<Observer<ValueType>>): Unsubscribable;
62
+ [Symbol.observable](): ObservableLike<ValueType>;
63
+ };
@@ -0,0 +1,167 @@
1
+ import type {ArraySplice} from './array-splice';
2
+ import type {ExactKey, IsArrayReadonly, NonRecursiveType, SetArrayAccess, ToString} from './internal';
3
+ import type {IsEqual} from './is-equal';
4
+ import type {IsNever} from './is-never';
5
+ import type {LiteralUnion} from './literal-union';
6
+ import type {Paths} from './paths';
7
+ import type {SimplifyDeep} from './simplify-deep';
8
+ import type {UnionToTuple} from './union-to-tuple';
9
+ import type {UnknownArray} from './unknown-array';
10
+
11
+ /**
12
+ Omit properties from a deeply-nested object.
13
+
14
+ It supports recursing into arrays.
15
+
16
+ It supports removing specific items from an array, replacing each removed item with unknown at the specified index.
17
+
18
+ Use-case: Remove unneeded parts of complex objects.
19
+
20
+ Use [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) if you only need one level deep.
21
+
22
+ @example
23
+ ```
24
+ import type {OmitDeep} from 'type-fest';
25
+
26
+ type Info = {
27
+ userInfo: {
28
+ name: string;
29
+ uselessInfo: {
30
+ foo: string;
31
+ };
32
+ };
33
+ };
34
+
35
+ type UsefulInfo = OmitDeep<Info, 'userInfo.uselessInfo'>;
36
+ // type UsefulInfo = {
37
+ // userInfo: {
38
+ // name: string;
39
+ // };
40
+ // };
41
+
42
+ // Supports removing multiple paths
43
+ type Info1 = {
44
+ userInfo: {
45
+ name: string;
46
+ uselessField: string;
47
+ uselessInfo: {
48
+ foo: string;
49
+ };
50
+ };
51
+ };
52
+
53
+ type UsefulInfo1 = OmitDeep<Info1, 'userInfo.uselessInfo' | 'userInfo.uselessField'>;
54
+ // type UsefulInfo1 = {
55
+ // userInfo: {
56
+ // name: string;
57
+ // };
58
+ // };
59
+
60
+ // Supports array
61
+ type A = OmitDeep<[1, 'foo', 2], 1>;
62
+ // type A = [1, unknown, 2];
63
+
64
+ // Supports recursing into array
65
+
66
+ type Info1 = {
67
+ address: [
68
+ {
69
+ street: string
70
+ },
71
+ {
72
+ street2: string,
73
+ foo: string
74
+ };
75
+ ];
76
+ }
77
+ type AddressInfo = OmitDeep<Info1, 'address.1.foo'>;
78
+ // type AddressInfo = {
79
+ // address: [
80
+ // {
81
+ // street: string;
82
+ // },
83
+ // {
84
+ // street2: string;
85
+ // };
86
+ // ];
87
+ // };
88
+ ```
89
+
90
+ @category Object
91
+ @category Array
92
+ */
93
+ export type OmitDeep<T, PathUnion extends LiteralUnion<Paths<T>, string>> =
94
+ SimplifyDeep<
95
+ OmitDeepHelper<T, UnionToTuple<PathUnion>>,
96
+ UnknownArray>;
97
+
98
+ /**
99
+ Internal helper for {@link OmitDeep}.
100
+
101
+ Recursively transforms `T` by applying {@link OmitDeepWithOnePath} for each path in `PathTuple`.
102
+ */
103
+ type OmitDeepHelper<T, PathTuple extends UnknownArray> =
104
+ PathTuple extends [infer Path, ...infer RestPaths]
105
+ ? OmitDeepHelper<OmitDeepWithOnePath<T, Path & (string | number)>, RestPaths>
106
+ : T;
107
+
108
+ /**
109
+ Omit one path from the given object/array.
110
+ */
111
+ type OmitDeepWithOnePath<T, Path extends string | number> =
112
+ T extends NonRecursiveType
113
+ ? T
114
+ : T extends UnknownArray ? SetArrayAccess<OmitDeepArrayWithOnePath<T, Path>, IsArrayReadonly<T>>
115
+ : T extends object ? OmitDeepObjectWithOnePath<T, Path>
116
+ : T;
117
+
118
+ /**
119
+ Omit one path from the given object.
120
+ */
121
+ type OmitDeepObjectWithOnePath<ObjectT extends object, P extends string | number> =
122
+ P extends `${infer RecordKeyInPath}.${infer SubPath}`
123
+ ? {
124
+ [Key in keyof ObjectT]:
125
+ IsEqual<RecordKeyInPath, ToString<Key>> extends true
126
+ ? ExactKey<ObjectT, Key> extends infer RealKey
127
+ ? RealKey extends keyof ObjectT
128
+ ? OmitDeepWithOnePath<ObjectT[RealKey], SubPath>
129
+ : ObjectT[Key]
130
+ : ObjectT[Key]
131
+ : ObjectT[Key]
132
+ }
133
+ : ExactKey<ObjectT, P> extends infer Key
134
+ ? IsNever<Key> extends true
135
+ ? ObjectT
136
+ : Key extends PropertyKey
137
+ ? Omit<ObjectT, Key>
138
+ : ObjectT
139
+ : ObjectT;
140
+
141
+ /**
142
+ Omit one path from from the given array.
143
+
144
+ It replaces the item to `unknown` at the given index.
145
+
146
+ @example
147
+ ```
148
+ type A = OmitDeepArrayWithOnePath<[10, 20, 30, 40], 2>;
149
+ //=> type A = [10, 20, unknown, 40];
150
+ ```
151
+ */
152
+ type OmitDeepArrayWithOnePath<ArrayType extends UnknownArray, P extends string | number> =
153
+ // Handle paths that are `${number}.${string}`
154
+ P extends `${infer ArrayIndex extends number}.${infer SubPath}`
155
+ // If `ArrayIndex` is equal to `number`
156
+ ? number extends ArrayIndex
157
+ ? Array<OmitDeepWithOnePath<NonNullable<ArrayType[number]>, SubPath>>
158
+ // If `ArrayIndex` is a number literal
159
+ : ArraySplice<ArrayType, ArrayIndex, 1, [OmitDeepWithOnePath<NonNullable<ArrayType[ArrayIndex]>, SubPath>]>
160
+ // If the path is equal to `number`
161
+ : P extends `${infer ArrayIndex extends number}`
162
+ // If `ArrayIndex` is `number`
163
+ ? number extends ArrayIndex
164
+ ? []
165
+ // If `ArrayIndex` is a number literal
166
+ : ArraySplice<ArrayType, ArrayIndex, 1, [unknown]>
167
+ : ArrayType;
@@ -0,0 +1,95 @@
1
+ /**
2
+ Omit any index signatures from the given object type, leaving only explicitly defined properties.
3
+
4
+ This is the counterpart of `PickIndexSignature`.
5
+
6
+ Use-cases:
7
+ - Remove overly permissive signatures from third-party types.
8
+
9
+ This type was taken from this [StackOverflow answer](https://stackoverflow.com/a/68261113/420747).
10
+
11
+ It relies on the fact that an empty object (`{}`) is assignable to an object with just an index signature, like `Record<string, unknown>`, but not to an object with explicitly defined keys, like `Record<'foo' | 'bar', unknown>`.
12
+
13
+ (The actual value type, `unknown`, is irrelevant and could be any type. Only the key type matters.)
14
+
15
+ ```
16
+ const indexed: Record<string, unknown> = {}; // Allowed
17
+
18
+ const keyed: Record<'foo', unknown> = {}; // Error
19
+ // => TS2739: Type '{}' is missing the following properties from type 'Record<"foo" | "bar", unknown>': foo, bar
20
+ ```
21
+
22
+ Instead of causing a type error like the above, you can also use a [conditional type](https://www.typescriptlang.org/docs/handbook/2/conditional-types.html) to test whether a type is assignable to another:
23
+
24
+ ```
25
+ type Indexed = {} extends Record<string, unknown>
26
+ ? '✅ `{}` is assignable to `Record<string, unknown>`'
27
+ : '❌ `{}` is NOT assignable to `Record<string, unknown>`';
28
+ // => '✅ `{}` is assignable to `Record<string, unknown>`'
29
+
30
+ type Keyed = {} extends Record<'foo' | 'bar', unknown>
31
+ ? "✅ `{}` is assignable to `Record<'foo' | 'bar', unknown>`"
32
+ : "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`";
33
+ // => "❌ `{}` is NOT assignable to `Record<'foo' | 'bar', unknown>`"
34
+ ```
35
+
36
+ Using a [mapped type](https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#further-exploration), you can then check for each `KeyType` of `ObjectType`...
37
+
38
+ ```
39
+ import type {OmitIndexSignature} from 'type-fest';
40
+
41
+ type OmitIndexSignature<ObjectType> = {
42
+ [KeyType in keyof ObjectType // Map each key of `ObjectType`...
43
+ ]: ObjectType[KeyType]; // ...to its original value, i.e. `OmitIndexSignature<Foo> == Foo`.
44
+ };
45
+ ```
46
+
47
+ ...whether an empty object (`{}`) would be assignable to an object with that `KeyType` (`Record<KeyType, unknown>`)...
48
+
49
+ ```
50
+ import type {OmitIndexSignature} from 'type-fest';
51
+
52
+ type OmitIndexSignature<ObjectType> = {
53
+ [KeyType in keyof ObjectType
54
+ // Is `{}` assignable to `Record<KeyType, unknown>`?
55
+ as {} extends Record<KeyType, unknown>
56
+ ? ... // ✅ `{}` is assignable to `Record<KeyType, unknown>`
57
+ : ... // ❌ `{}` is NOT assignable to `Record<KeyType, unknown>`
58
+ ]: ObjectType[KeyType];
59
+ };
60
+ ```
61
+
62
+ If `{}` is assignable, it means that `KeyType` is an index signature and we want to remove it. If it is not assignable, `KeyType` is a "real" key and we want to keep it.
63
+
64
+ @example
65
+ ```
66
+ import type {OmitIndexSignature} from 'type-fest';
67
+
68
+ interface Example {
69
+ // These index signatures will be removed.
70
+ [x: string]: any
71
+ [x: number]: any
72
+ [x: symbol]: any
73
+ [x: `head-${string}`]: string
74
+ [x: `${string}-tail`]: string
75
+ [x: `head-${string}-tail`]: string
76
+ [x: `${bigint}`]: string
77
+ [x: `embedded-${number}`]: string
78
+
79
+ // These explicitly defined keys will remain.
80
+ foo: 'bar';
81
+ qux?: 'baz';
82
+ }
83
+
84
+ type ExampleWithoutIndexSignatures = OmitIndexSignature<Example>;
85
+ // => { foo: 'bar'; qux?: 'baz' | undefined; }
86
+ ```
87
+
88
+ @see PickIndexSignature
89
+ @category Object
90
+ */
91
+ export type OmitIndexSignature<ObjectType> = {
92
+ [KeyType in keyof ObjectType as {} extends Record<KeyType, unknown>
93
+ ? never
94
+ : KeyType]: ObjectType[KeyType];
95
+ };
@@ -0,0 +1 @@
1
+ export * from './tagged';