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,55 @@
|
|
|
1
|
+
import type {BuildTuple} from './internal';
|
|
2
|
+
import type {Subtract} from './subtract';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
Generate a union of numbers.
|
|
6
|
+
|
|
7
|
+
The numbers are created from the given `Start` (inclusive) parameter to the given `End` (exclusive) parameter.
|
|
8
|
+
|
|
9
|
+
You skip over numbers using the `Step` parameter (defaults to `1`). For example, `IntRange<0, 10, 2>` will create a union of `0 | 2 | 4 | 6 | 8`.
|
|
10
|
+
|
|
11
|
+
Note: `Start` or `End` must be non-negative and smaller than `1000`.
|
|
12
|
+
|
|
13
|
+
Use-cases:
|
|
14
|
+
1. This can be used to define a set of valid input/output values. for example:
|
|
15
|
+
```
|
|
16
|
+
type Age = IntRange<0, 120>;
|
|
17
|
+
type FontSize = IntRange<10, 20>;
|
|
18
|
+
type EvenNumber = IntRange<0, 11, 2>; //=> 0 | 2 | 4 | 6 | 8 | 10
|
|
19
|
+
```
|
|
20
|
+
2. This can be used to define random numbers in a range. For example, `type RandomNumber = IntRange<0, 100>;`
|
|
21
|
+
|
|
22
|
+
@example
|
|
23
|
+
```
|
|
24
|
+
import type {IntRange} from 'type-fest';
|
|
25
|
+
|
|
26
|
+
// Create union type `0 | 1 | ... | 9`
|
|
27
|
+
type ZeroToNine = IntRange<0, 10>;
|
|
28
|
+
|
|
29
|
+
// Create union type `100 | 200 | 300 | ... | 900`
|
|
30
|
+
type Hundreds = IntRange<100, 901, 100>;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
@see IntClosedRange
|
|
34
|
+
*/
|
|
35
|
+
export type IntRange<Start extends number, End extends number, Step extends number = 1> = PrivateIntRange<Start, End, Step>;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
The actual implementation of `IntRange`. It's private because it has some arguments that don't need to be exposed.
|
|
39
|
+
*/
|
|
40
|
+
type PrivateIntRange<
|
|
41
|
+
Start extends number,
|
|
42
|
+
End extends number,
|
|
43
|
+
Step extends number,
|
|
44
|
+
Gap extends number = Subtract<Step, 1>, // The gap between each number, gap = step - 1
|
|
45
|
+
List extends unknown[] = BuildTuple<Start, never>, // The final `List` is `[...StartLengthTuple, ...[number, ...GapLengthTuple], ...[number, ...GapLengthTuple], ... ...]`, so can initialize the `List` with `[...StartLengthTuple]`
|
|
46
|
+
EndLengthTuple extends unknown[] = BuildTuple<End>,
|
|
47
|
+
> = Gap extends 0 ?
|
|
48
|
+
// Handle the case that without `Step`
|
|
49
|
+
List['length'] extends End // The result of "List[length] === End"
|
|
50
|
+
? Exclude<List[number], never> // All unused elements are `never`, so exclude them
|
|
51
|
+
: PrivateIntRange<Start, End, Step, Gap, [...List, List['length'] ]>
|
|
52
|
+
// Handle the case that with `Step`
|
|
53
|
+
: List extends [...(infer U), ...EndLengthTuple] // The result of "List[length] >= End", because the `...BuildTuple<Gap, never>` maybe make `List` too long.
|
|
54
|
+
? Exclude<List[number], never>
|
|
55
|
+
: PrivateIntRange<Start, End, Step, Gap, [...List, List['length'], ...BuildTuple<Gap, never>]>;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type {IfNever} from '../if-never';
|
|
2
|
+
import type {UnknownArray} from '../unknown-array';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
Infer the length of the given array `<T>`.
|
|
6
|
+
|
|
7
|
+
@link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
|
|
8
|
+
*/
|
|
9
|
+
type ArrayLength<T extends readonly unknown[]> = T extends {readonly length: infer L} ? L : never;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
Matches any unknown array or tuple.
|
|
13
|
+
*/
|
|
14
|
+
export type UnknownArrayOrTuple = readonly [...unknown[]];
|
|
15
|
+
// TODO: should unknown-array be updated?
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
Extracts the type of the first element of an array or tuple.
|
|
19
|
+
*/
|
|
20
|
+
export type FirstArrayElement<TArray extends UnknownArrayOrTuple> = TArray extends readonly [infer THead, ...unknown[]]
|
|
21
|
+
? THead
|
|
22
|
+
: never;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
Extract the element of an array that also works for array union.
|
|
26
|
+
|
|
27
|
+
Returns `never` if T is not an array.
|
|
28
|
+
|
|
29
|
+
It creates a type-safe way to access the element type of `unknown` type.
|
|
30
|
+
*/
|
|
31
|
+
export type ArrayElement<T> = T extends readonly unknown[] ? T[0] : never;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
Returns the static, fixed-length portion of the given array, excluding variable-length parts.
|
|
35
|
+
|
|
36
|
+
@example
|
|
37
|
+
```
|
|
38
|
+
type A = [string, number, boolean, ...string[]];
|
|
39
|
+
type B = StaticPartOfArray<A>;
|
|
40
|
+
//=> [string, number, boolean]
|
|
41
|
+
```
|
|
42
|
+
*/
|
|
43
|
+
export type StaticPartOfArray<T extends UnknownArray, Result extends UnknownArray = []> =
|
|
44
|
+
T extends unknown
|
|
45
|
+
? number extends T['length'] ?
|
|
46
|
+
T extends readonly [infer U, ...infer V]
|
|
47
|
+
? StaticPartOfArray<V, [...Result, U]>
|
|
48
|
+
: Result
|
|
49
|
+
: T
|
|
50
|
+
: never; // Should never happen
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
Returns the variable, non-fixed-length portion of the given array, excluding static-length parts.
|
|
54
|
+
|
|
55
|
+
@example
|
|
56
|
+
```
|
|
57
|
+
type A = [string, number, boolean, ...string[]];
|
|
58
|
+
type B = VariablePartOfArray<A>;
|
|
59
|
+
//=> string[]
|
|
60
|
+
```
|
|
61
|
+
*/
|
|
62
|
+
export type VariablePartOfArray<T extends UnknownArray> =
|
|
63
|
+
T extends unknown
|
|
64
|
+
? T extends readonly [...StaticPartOfArray<T>, ...infer U]
|
|
65
|
+
? U
|
|
66
|
+
: []
|
|
67
|
+
: never; // Should never happen
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
Set the given array to readonly if `IsReadonly` is `true`, otherwise set the given array to normal, then return the result.
|
|
71
|
+
|
|
72
|
+
@example
|
|
73
|
+
```
|
|
74
|
+
type ReadonlyArray = readonly string[];
|
|
75
|
+
type NormalArray = string[];
|
|
76
|
+
|
|
77
|
+
type ReadonlyResult = SetArrayAccess<NormalArray, true>;
|
|
78
|
+
//=> readonly string[]
|
|
79
|
+
|
|
80
|
+
type NormalResult = SetArrayAccess<ReadonlyArray, false>;
|
|
81
|
+
//=> string[]
|
|
82
|
+
```
|
|
83
|
+
*/
|
|
84
|
+
export type SetArrayAccess<T extends UnknownArray, IsReadonly extends boolean> =
|
|
85
|
+
T extends readonly [...infer U] ?
|
|
86
|
+
IsReadonly extends true
|
|
87
|
+
? readonly [...U]
|
|
88
|
+
: [...U]
|
|
89
|
+
: T;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
Returns whether the given array `T` is readonly.
|
|
93
|
+
*/
|
|
94
|
+
export type IsArrayReadonly<T extends UnknownArray> = IfNever<T, false, T extends unknown[] ? false : true>;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
An if-else-like type that resolves depending on whether the given array is readonly.
|
|
98
|
+
|
|
99
|
+
@see {@link IsArrayReadonly}
|
|
100
|
+
|
|
101
|
+
@example
|
|
102
|
+
```
|
|
103
|
+
import type {ArrayTail} from 'type-fest';
|
|
104
|
+
|
|
105
|
+
type ReadonlyPreservingArrayTail<TArray extends readonly unknown[]> =
|
|
106
|
+
ArrayTail<TArray> extends infer Tail
|
|
107
|
+
? IfArrayReadonly<TArray, Readonly<Tail>, Tail>
|
|
108
|
+
: never;
|
|
109
|
+
|
|
110
|
+
type ReadonlyTail = ReadonlyPreservingArrayTail<readonly [string, number, boolean]>;
|
|
111
|
+
//=> readonly [number, boolean]
|
|
112
|
+
|
|
113
|
+
type NonReadonlyTail = ReadonlyPreservingArrayTail<[string, number, boolean]>;
|
|
114
|
+
//=> [number, boolean]
|
|
115
|
+
|
|
116
|
+
type ShouldBeTrue = IfArrayReadonly<readonly unknown[]>;
|
|
117
|
+
//=> true
|
|
118
|
+
|
|
119
|
+
type ShouldBeBar = IfArrayReadonly<unknown[], 'foo', 'bar'>;
|
|
120
|
+
//=> 'bar'
|
|
121
|
+
```
|
|
122
|
+
*/
|
|
123
|
+
export type IfArrayReadonly<T extends UnknownArray, TypeIfArrayReadonly = true, TypeIfNotArrayReadonly = false> =
|
|
124
|
+
IsArrayReadonly<T> extends infer Result
|
|
125
|
+
? Result extends true ? TypeIfArrayReadonly : TypeIfNotArrayReadonly
|
|
126
|
+
: never; // Should never happen
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type UpperCaseCharacters = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z';
|
|
2
|
+
|
|
3
|
+
export type StringDigit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
|
|
4
|
+
|
|
5
|
+
export type Whitespace =
|
|
6
|
+
| '\u{9}' // '\t'
|
|
7
|
+
| '\u{A}' // '\n'
|
|
8
|
+
| '\u{B}' // '\v'
|
|
9
|
+
| '\u{C}' // '\f'
|
|
10
|
+
| '\u{D}' // '\r'
|
|
11
|
+
| '\u{20}' // ' '
|
|
12
|
+
| '\u{85}'
|
|
13
|
+
| '\u{A0}'
|
|
14
|
+
| '\u{1680}'
|
|
15
|
+
| '\u{2000}'
|
|
16
|
+
| '\u{2001}'
|
|
17
|
+
| '\u{2002}'
|
|
18
|
+
| '\u{2003}'
|
|
19
|
+
| '\u{2004}'
|
|
20
|
+
| '\u{2005}'
|
|
21
|
+
| '\u{2006}'
|
|
22
|
+
| '\u{2007}'
|
|
23
|
+
| '\u{2008}'
|
|
24
|
+
| '\u{2009}'
|
|
25
|
+
| '\u{200A}'
|
|
26
|
+
| '\u{2028}'
|
|
27
|
+
| '\u{2029}'
|
|
28
|
+
| '\u{202F}'
|
|
29
|
+
| '\u{205F}'
|
|
30
|
+
| '\u{3000}'
|
|
31
|
+
| '\u{FEFF}';
|
|
32
|
+
|
|
33
|
+
export type WordSeparators = '-' | '_' | Whitespace;
|
|
34
|
+
|
|
35
|
+
export type AsciiPunctuation =
|
|
36
|
+
| '!'
|
|
37
|
+
| '"'
|
|
38
|
+
| '#'
|
|
39
|
+
| '$'
|
|
40
|
+
| '%'
|
|
41
|
+
| '&'
|
|
42
|
+
| '\''
|
|
43
|
+
| '('
|
|
44
|
+
| ')'
|
|
45
|
+
| '*'
|
|
46
|
+
| '+'
|
|
47
|
+
| ','
|
|
48
|
+
| '-'
|
|
49
|
+
| '.'
|
|
50
|
+
| '/'
|
|
51
|
+
| ':'
|
|
52
|
+
| ';'
|
|
53
|
+
| '<'
|
|
54
|
+
| '='
|
|
55
|
+
| '>'
|
|
56
|
+
| '?'
|
|
57
|
+
| '@'
|
|
58
|
+
| '['
|
|
59
|
+
| '\\'
|
|
60
|
+
| ']'
|
|
61
|
+
| '^'
|
|
62
|
+
| '_'
|
|
63
|
+
| '`'
|
|
64
|
+
| '{'
|
|
65
|
+
| '|'
|
|
66
|
+
| '}'
|
|
67
|
+
| '~';
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type {IsAny} from '../is-any';
|
|
2
|
+
import type {IsLiteral} from '../is-literal';
|
|
3
|
+
import type {ToString} from './string';
|
|
4
|
+
|
|
5
|
+
// Returns `never` if the key or property is not jsonable without testing whether the property is required or optional otherwise return the key.
|
|
6
|
+
type BaseKeyFilter<Type, Key extends keyof Type> = Key extends symbol
|
|
7
|
+
? never
|
|
8
|
+
: Type[Key] extends symbol
|
|
9
|
+
? never
|
|
10
|
+
/*
|
|
11
|
+
To prevent a problem where an object with only a `name` property is incorrectly treated as assignable to a function, we first check if the property is a record.
|
|
12
|
+
This check is necessary, because without it, if we don't verify whether the property is a record, an object with a type of `{name: any}` would return `never` due to its potential assignability to a function.
|
|
13
|
+
See: https://github.com/sindresorhus/type-fest/issues/657
|
|
14
|
+
*/
|
|
15
|
+
: Type[Key] extends Record<string, unknown>
|
|
16
|
+
? Key
|
|
17
|
+
: [(...arguments_: any[]) => any] extends [Type[Key]]
|
|
18
|
+
? never
|
|
19
|
+
: Key;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
Returns the required keys.
|
|
23
|
+
*/
|
|
24
|
+
export type FilterDefinedKeys<T extends object> = Exclude<
|
|
25
|
+
{
|
|
26
|
+
[Key in keyof T]: IsAny<T[Key]> extends true
|
|
27
|
+
? Key
|
|
28
|
+
: undefined extends T[Key]
|
|
29
|
+
? never
|
|
30
|
+
: T[Key] extends undefined
|
|
31
|
+
? never
|
|
32
|
+
: BaseKeyFilter<T, Key>;
|
|
33
|
+
}[keyof T],
|
|
34
|
+
undefined
|
|
35
|
+
>;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
Returns the optional keys.
|
|
39
|
+
*/
|
|
40
|
+
export type FilterOptionalKeys<T extends object> = Exclude<
|
|
41
|
+
{
|
|
42
|
+
[Key in keyof T]: IsAny<T[Key]> extends true
|
|
43
|
+
? never
|
|
44
|
+
: undefined extends T[Key]
|
|
45
|
+
? T[Key] extends undefined
|
|
46
|
+
? never
|
|
47
|
+
: BaseKeyFilter<T, Key>
|
|
48
|
+
: never;
|
|
49
|
+
}[keyof T],
|
|
50
|
+
undefined
|
|
51
|
+
>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
Disallows any of the given keys.
|
|
55
|
+
*/
|
|
56
|
+
export type RequireNone<KeysType extends PropertyKey> = Partial<Record<KeysType, never>>;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
Utility type to retrieve only literal keys from type.
|
|
60
|
+
*/
|
|
61
|
+
export type LiteralKeyOf<T> = keyof {[K in keyof T as IsLiteral<K> extends true ? K : never]-?: never};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
Get the exact version of the given `Key` in the given object `T`.
|
|
65
|
+
|
|
66
|
+
Use-case: You known that a number key (e.g. 10) is in an object, but you don't know how it is defined in the object, as a string or as a number (e.g. 10 or '10'). You can use this type to get the exact version of the key. See the example.
|
|
67
|
+
|
|
68
|
+
@example
|
|
69
|
+
```
|
|
70
|
+
type Object = {
|
|
71
|
+
0: number;
|
|
72
|
+
'1': string;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
type Key1 = ExactKey<Object, '0'>;
|
|
76
|
+
//=> 0
|
|
77
|
+
type Key2 = ExactKey<Object, 0>;
|
|
78
|
+
//=> 0
|
|
79
|
+
|
|
80
|
+
type Key3 = ExactKey<Object, '1'>;
|
|
81
|
+
//=> '1'
|
|
82
|
+
type Key4 = ExactKey<Object, 1>;
|
|
83
|
+
//=> '1'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
@category Object
|
|
87
|
+
*/
|
|
88
|
+
export type ExactKey<T extends object, Key extends PropertyKey> =
|
|
89
|
+
Key extends keyof T
|
|
90
|
+
? Key
|
|
91
|
+
: ToString<Key> extends keyof T
|
|
92
|
+
? ToString<Key>
|
|
93
|
+
: Key extends `${infer NumberKey extends number}`
|
|
94
|
+
? NumberKey extends keyof T
|
|
95
|
+
? NumberKey
|
|
96
|
+
: never
|
|
97
|
+
: never;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type {IsNever} from '../is-never';
|
|
2
|
+
import type {NegativeInfinity, PositiveInfinity} from '../numeric';
|
|
3
|
+
import type {UnknownArray} from '../unknown-array';
|
|
4
|
+
import type {StringToNumber} from './string';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
Returns the absolute value of a given value.
|
|
8
|
+
|
|
9
|
+
@example
|
|
10
|
+
```
|
|
11
|
+
NumberAbsolute<-1>;
|
|
12
|
+
//=> 1
|
|
13
|
+
|
|
14
|
+
NumberAbsolute<1>;
|
|
15
|
+
//=> 1
|
|
16
|
+
|
|
17
|
+
NumberAbsolute<NegativeInfinity>
|
|
18
|
+
//=> PositiveInfinity
|
|
19
|
+
```
|
|
20
|
+
*/
|
|
21
|
+
export type NumberAbsolute<N extends number> = `${N}` extends `-${infer StringPositiveN}` ? StringToNumber<StringPositiveN> : N;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
Check whether the given type is a number or a number string.
|
|
25
|
+
|
|
26
|
+
Supports floating-point as a string.
|
|
27
|
+
|
|
28
|
+
@example
|
|
29
|
+
```
|
|
30
|
+
type A = IsNumberLike<'1'>;
|
|
31
|
+
//=> true
|
|
32
|
+
|
|
33
|
+
type B = IsNumberLike<'-1.1'>;
|
|
34
|
+
//=> true
|
|
35
|
+
|
|
36
|
+
type C = IsNumberLike<1>;
|
|
37
|
+
//=> true
|
|
38
|
+
|
|
39
|
+
type D = IsNumberLike<'a'>;
|
|
40
|
+
//=> false
|
|
41
|
+
*/
|
|
42
|
+
export type IsNumberLike<N> =
|
|
43
|
+
N extends number ? true
|
|
44
|
+
: N extends `${number}`
|
|
45
|
+
? true
|
|
46
|
+
: N extends `${number}.${number}`
|
|
47
|
+
? true
|
|
48
|
+
: false;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
Returns the minimum number in the given union of numbers.
|
|
52
|
+
|
|
53
|
+
Note: Just supports numbers from 0 to 999.
|
|
54
|
+
|
|
55
|
+
@example
|
|
56
|
+
```
|
|
57
|
+
type A = UnionMin<3 | 1 | 2>;
|
|
58
|
+
//=> 1
|
|
59
|
+
```
|
|
60
|
+
*/
|
|
61
|
+
export type UnionMin<N extends number> = InternalUnionMin<N>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
The actual implementation of `UnionMin`. It's private because it has some arguments that don't need to be exposed.
|
|
65
|
+
*/
|
|
66
|
+
type InternalUnionMin<N extends number, T extends UnknownArray = []> =
|
|
67
|
+
T['length'] extends N
|
|
68
|
+
? T['length']
|
|
69
|
+
: InternalUnionMin<N, [...T, unknown]>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
Returns the maximum number in the given union of numbers.
|
|
73
|
+
|
|
74
|
+
Note: Just supports numbers from 0 to 999.
|
|
75
|
+
|
|
76
|
+
@example
|
|
77
|
+
```
|
|
78
|
+
type A = UnionMax<1 | 3 | 2>;
|
|
79
|
+
//=> 3
|
|
80
|
+
```
|
|
81
|
+
*/
|
|
82
|
+
export type UnionMax<N extends number> = InternalUnionMax<N>;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
The actual implementation of `UnionMax`. It's private because it has some arguments that don't need to be exposed.
|
|
86
|
+
*/
|
|
87
|
+
type InternalUnionMax<N extends number, T extends UnknownArray = []> =
|
|
88
|
+
IsNever<N> extends true
|
|
89
|
+
? T['length']
|
|
90
|
+
: T['length'] extends N
|
|
91
|
+
? InternalUnionMax<Exclude<N, T['length']>, T>
|
|
92
|
+
: InternalUnionMax<N, [...T, unknown]>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
Returns the number with reversed sign.
|
|
96
|
+
|
|
97
|
+
@example
|
|
98
|
+
```
|
|
99
|
+
ReverseSign<-1>;
|
|
100
|
+
//=> 1
|
|
101
|
+
|
|
102
|
+
ReverseSign<1>;
|
|
103
|
+
//=> -1
|
|
104
|
+
|
|
105
|
+
ReverseSign<NegativeInfinity>
|
|
106
|
+
//=> PositiveInfinity
|
|
107
|
+
|
|
108
|
+
ReverseSign<PositiveInfinity>
|
|
109
|
+
//=> NegativeInfinity
|
|
110
|
+
```
|
|
111
|
+
*/
|
|
112
|
+
export type ReverseSign<N extends number> =
|
|
113
|
+
// Handle edge cases
|
|
114
|
+
N extends 0 ? 0 : N extends PositiveInfinity ? NegativeInfinity : N extends NegativeInfinity ? PositiveInfinity :
|
|
115
|
+
// Handle negative numbers
|
|
116
|
+
`${N}` extends `-${infer P extends number}` ? P
|
|
117
|
+
// Handle positive numbers
|
|
118
|
+
: `-${N}` extends `${infer R extends number}` ? R : never;
|