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