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,63 @@
|
|
|
1
|
+
import type {DefaultDelimiterCaseOptions} from './delimiter-case';
|
|
2
|
+
import type {DelimiterCasedPropertiesDeep} from './delimiter-cased-properties-deep';
|
|
3
|
+
import type {ApplyDefaultOptions} from './internal';
|
|
4
|
+
import type {WordsOptions} from './words';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
Convert object properties to snake case recursively.
|
|
8
|
+
|
|
9
|
+
This can be useful when, for example, converting some API types from a different style.
|
|
10
|
+
|
|
11
|
+
@see SnakeCase
|
|
12
|
+
@see SnakeCasedProperties
|
|
13
|
+
|
|
14
|
+
@example
|
|
15
|
+
```
|
|
16
|
+
import type {SnakeCasedPropertiesDeep} from 'type-fest';
|
|
17
|
+
|
|
18
|
+
interface User {
|
|
19
|
+
userId: number;
|
|
20
|
+
userName: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
interface UserWithFriends {
|
|
24
|
+
userInfo: User;
|
|
25
|
+
userFriends: User[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const result: SnakeCasedPropertiesDeep<UserWithFriends> = {
|
|
29
|
+
user_info: {
|
|
30
|
+
user_id: 1,
|
|
31
|
+
user_name: 'Tom',
|
|
32
|
+
},
|
|
33
|
+
user_friends: [
|
|
34
|
+
{
|
|
35
|
+
user_id: 2,
|
|
36
|
+
user_name: 'Jerry',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
user_id: 3,
|
|
40
|
+
user_name: 'Spike',
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const splitOnNumbers: SnakeCasedPropertiesDeep<{line1: { line2: [{ line3: string }] }}, {splitOnNumbers: true}> = {
|
|
46
|
+
line_1: {
|
|
47
|
+
line_2: [
|
|
48
|
+
{
|
|
49
|
+
line_3: 'string',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
@category Change case
|
|
57
|
+
@category Template literal
|
|
58
|
+
@category Object
|
|
59
|
+
*/
|
|
60
|
+
export type SnakeCasedPropertiesDeep<
|
|
61
|
+
Value,
|
|
62
|
+
Options extends WordsOptions = {},
|
|
63
|
+
> = DelimiterCasedPropertiesDeep<Value, '_', ApplyDefaultOptions<WordsOptions, DefaultDelimiterCaseOptions, Options>>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type {DefaultDelimiterCaseOptions} from './delimiter-case';
|
|
2
|
+
import type {DelimiterCasedProperties} from './delimiter-cased-properties';
|
|
3
|
+
import type {ApplyDefaultOptions} from './internal';
|
|
4
|
+
import type {WordsOptions} from './words';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
Convert object properties to snake case but not recursively.
|
|
8
|
+
|
|
9
|
+
This can be useful when, for example, converting some API types from a different style.
|
|
10
|
+
|
|
11
|
+
@see SnakeCase
|
|
12
|
+
@see SnakeCasedPropertiesDeep
|
|
13
|
+
|
|
14
|
+
@example
|
|
15
|
+
```
|
|
16
|
+
import type {SnakeCasedProperties} from 'type-fest';
|
|
17
|
+
|
|
18
|
+
interface User {
|
|
19
|
+
userId: number;
|
|
20
|
+
userName: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const result: SnakeCasedProperties<User> = {
|
|
24
|
+
user_id: 1,
|
|
25
|
+
user_name: 'Tom',
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const splitOnNumbers: SnakeCasedProperties<{line1: string}, {splitOnNumbers: true}> = {
|
|
29
|
+
'line_1': 'string',
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
@category Change case
|
|
34
|
+
@category Template literal
|
|
35
|
+
@category Object
|
|
36
|
+
*/
|
|
37
|
+
export type SnakeCasedProperties<
|
|
38
|
+
Value,
|
|
39
|
+
Options extends WordsOptions = {},
|
|
40
|
+
> = DelimiterCasedProperties<Value, '_', ApplyDefaultOptions<WordsOptions, DefaultDelimiterCaseOptions, Options>>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type {And} from './and';
|
|
2
|
+
import type {ApplyDefaultOptions, Not} from './internal';
|
|
3
|
+
import type {IsStringLiteral} from './is-literal';
|
|
4
|
+
import type {Or} from './or';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
Split options.
|
|
8
|
+
|
|
9
|
+
@see {@link Split}
|
|
10
|
+
*/
|
|
11
|
+
type SplitOptions = {
|
|
12
|
+
/**
|
|
13
|
+
When enabled, instantiations with non-literal string types (e.g., `string`, `Uppercase<string>`, `on${string}`) simply return back `string[]` without performing any splitting, as the exact structure cannot be statically determined.
|
|
14
|
+
|
|
15
|
+
Note: In the future, this option might be enabled by default, so if you currently rely on this being disabled, you should consider explicitly enabling it.
|
|
16
|
+
|
|
17
|
+
@default false
|
|
18
|
+
|
|
19
|
+
@example
|
|
20
|
+
```ts
|
|
21
|
+
type Example1 = Split<`foo.${string}.bar`, '.', {strictLiteralChecks: false}>;
|
|
22
|
+
//=> ['foo', string, 'bar']
|
|
23
|
+
|
|
24
|
+
type Example2 = Split<`foo.${string}`, '.', {strictLiteralChecks: true}>;
|
|
25
|
+
//=> string[]
|
|
26
|
+
|
|
27
|
+
type Example3 = Split<'foobarbaz', `b${string}`, {strictLiteralChecks: false}>;
|
|
28
|
+
//=> ['foo', 'r', 'z']
|
|
29
|
+
|
|
30
|
+
type Example4 = Split<'foobarbaz', `b${string}`, {strictLiteralChecks: true}>;
|
|
31
|
+
//=> string[]
|
|
32
|
+
```
|
|
33
|
+
*/
|
|
34
|
+
strictLiteralChecks?: boolean;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
type DefaultSplitOptions = {
|
|
38
|
+
strictLiteralChecks: false;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
Represents an array of strings split using a given character or character set.
|
|
43
|
+
|
|
44
|
+
Use-case: Defining the return type of a method like `String.prototype.split`.
|
|
45
|
+
|
|
46
|
+
@example
|
|
47
|
+
```
|
|
48
|
+
import type {Split} from 'type-fest';
|
|
49
|
+
|
|
50
|
+
declare function split<S extends string, D extends string>(string: S, separator: D): Split<S, D>;
|
|
51
|
+
|
|
52
|
+
type Item = 'foo' | 'bar' | 'baz' | 'waldo';
|
|
53
|
+
const items = 'foo,bar,baz,waldo';
|
|
54
|
+
let array: Item[];
|
|
55
|
+
|
|
56
|
+
array = split(items, ',');
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
@see {@link SplitOptions}
|
|
60
|
+
|
|
61
|
+
@category String
|
|
62
|
+
@category Template literal
|
|
63
|
+
*/
|
|
64
|
+
export type Split<
|
|
65
|
+
S extends string,
|
|
66
|
+
Delimiter extends string,
|
|
67
|
+
Options extends SplitOptions = {},
|
|
68
|
+
> =
|
|
69
|
+
SplitHelper<S, Delimiter, ApplyDefaultOptions<SplitOptions, DefaultSplitOptions, Options>>;
|
|
70
|
+
|
|
71
|
+
type SplitHelper<
|
|
72
|
+
S extends string,
|
|
73
|
+
Delimiter extends string,
|
|
74
|
+
Options extends Required<SplitOptions>,
|
|
75
|
+
Accumulator extends string[] = [],
|
|
76
|
+
> = S extends string // For distributing `S`
|
|
77
|
+
? Delimiter extends string // For distributing `Delimeter`
|
|
78
|
+
// If `strictLiteralChecks` is `false` OR `S` and `Delimiter` both are string literals, then perform the split
|
|
79
|
+
? Or<Not<Options['strictLiteralChecks']>, And<IsStringLiteral<S>, IsStringLiteral<Delimiter>>> extends true
|
|
80
|
+
? S extends `${infer Head}${Delimiter}${infer Tail}`
|
|
81
|
+
? SplitHelper<Tail, Delimiter, Options, [...Accumulator, Head]>
|
|
82
|
+
: Delimiter extends ''
|
|
83
|
+
? Accumulator
|
|
84
|
+
: [...Accumulator, S]
|
|
85
|
+
// Otherwise, return `string[]`
|
|
86
|
+
: string[]
|
|
87
|
+
: never // Should never happen
|
|
88
|
+
: never; // Should never happen
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type {RequiredKeysOf} from './required-keys-of';
|
|
2
|
+
import type {Simplify} from './simplify';
|
|
3
|
+
|
|
4
|
+
type SpreadObject<FirstType extends object, SecondType extends object> = {
|
|
5
|
+
[Key in keyof FirstType]: Key extends keyof SecondType
|
|
6
|
+
? FirstType[Key] | Required<SecondType>[Key]
|
|
7
|
+
: FirstType[Key];
|
|
8
|
+
} & Pick<
|
|
9
|
+
SecondType,
|
|
10
|
+
RequiredKeysOf<SecondType> | Exclude<keyof SecondType, keyof FirstType>
|
|
11
|
+
>;
|
|
12
|
+
|
|
13
|
+
type TupleOrArray = readonly [...unknown[]];
|
|
14
|
+
|
|
15
|
+
type SpreadTupleOrArray<
|
|
16
|
+
FirstType extends TupleOrArray,
|
|
17
|
+
SecondType extends TupleOrArray,
|
|
18
|
+
> = Array<FirstType[number] | SecondType[number]>;
|
|
19
|
+
|
|
20
|
+
type Spreadable = object | TupleOrArray;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
Mimic the type inferred by TypeScript when merging two objects or two arrays/tuples using the spread syntax.
|
|
24
|
+
|
|
25
|
+
@example
|
|
26
|
+
```
|
|
27
|
+
import type {Spread} from 'type-fest';
|
|
28
|
+
|
|
29
|
+
type Foo = {
|
|
30
|
+
a: number;
|
|
31
|
+
b?: string;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
type Bar = {
|
|
35
|
+
b?: number;
|
|
36
|
+
c: boolean;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const foo = {a: 1, b: '2'};
|
|
40
|
+
const bar = {c: false};
|
|
41
|
+
const fooBar = {...foo, ...bar};
|
|
42
|
+
|
|
43
|
+
type FooBar = Spread<Foo, Bar>;
|
|
44
|
+
// type FooBar = {
|
|
45
|
+
// a: number;
|
|
46
|
+
// b?: string | number | undefined;
|
|
47
|
+
// c: boolean;
|
|
48
|
+
// }
|
|
49
|
+
|
|
50
|
+
const baz = (argument: FooBar) => {
|
|
51
|
+
// Do something
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
baz(fooBar);
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
@example
|
|
58
|
+
```
|
|
59
|
+
import type {Spread} from 'type-fest';
|
|
60
|
+
|
|
61
|
+
const foo = [1, 2, 3];
|
|
62
|
+
const bar = ['4', '5', '6'];
|
|
63
|
+
|
|
64
|
+
const fooBar = [...foo, ...bar];
|
|
65
|
+
type FooBar = Spread<typeof foo, typeof bar>;
|
|
66
|
+
// FooBar = (string | number)[]
|
|
67
|
+
|
|
68
|
+
const baz = (argument: FooBar) => {
|
|
69
|
+
// Do something
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
baz(fooBar);
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
@category Object
|
|
76
|
+
*/
|
|
77
|
+
export type Spread<
|
|
78
|
+
FirstType extends Spreadable,
|
|
79
|
+
SecondType extends Spreadable,
|
|
80
|
+
> = FirstType extends TupleOrArray
|
|
81
|
+
? SecondType extends TupleOrArray
|
|
82
|
+
? SpreadTupleOrArray<FirstType, SecondType>
|
|
83
|
+
: Simplify<SpreadObject<FirstType, SecondType>>
|
|
84
|
+
: Simplify<SpreadObject<FirstType, SecondType>>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Get keys of the given type as strings.
|
|
3
|
+
|
|
4
|
+
Number keys are converted to strings.
|
|
5
|
+
|
|
6
|
+
Use-cases:
|
|
7
|
+
- Get string keys from a type which may have number keys.
|
|
8
|
+
- Makes it possible to index using strings retrieved from template types.
|
|
9
|
+
|
|
10
|
+
@example
|
|
11
|
+
```
|
|
12
|
+
import type {StringKeyOf} from 'type-fest';
|
|
13
|
+
|
|
14
|
+
type Foo = {
|
|
15
|
+
1: number,
|
|
16
|
+
stringKey: string,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type StringKeysOfFoo = StringKeyOf<Foo>;
|
|
20
|
+
//=> '1' | 'stringKey'
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
@category Object
|
|
24
|
+
*/
|
|
25
|
+
export type StringKeyOf<BaseType> = `${Extract<keyof BaseType, string | number>}`;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type {IsNumericLiteral} from './is-literal';
|
|
2
|
+
import type {IsNegative} from './numeric';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
Returns a new string which contains the specified number of copies of a given string, just like `String#repeat()`.
|
|
6
|
+
|
|
7
|
+
@example
|
|
8
|
+
```
|
|
9
|
+
import {StringRepeat} from 'type-fest';
|
|
10
|
+
|
|
11
|
+
declare function stringRepeat<
|
|
12
|
+
Input extends string,
|
|
13
|
+
Count extends number
|
|
14
|
+
>(input: Input, count: Count): StringRepeat<Input, Count>;
|
|
15
|
+
|
|
16
|
+
// The return type is the exact string literal, not just `string`.
|
|
17
|
+
|
|
18
|
+
stringRepeat('foo', 2);
|
|
19
|
+
//=> 'foofoo'
|
|
20
|
+
|
|
21
|
+
stringRepeat('=', 3);
|
|
22
|
+
//=> '==='
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
@category String
|
|
26
|
+
@category Template literal
|
|
27
|
+
*/
|
|
28
|
+
export type StringRepeat<
|
|
29
|
+
Input extends string,
|
|
30
|
+
Count extends number,
|
|
31
|
+
> = StringRepeatHelper<Input, Count>;
|
|
32
|
+
|
|
33
|
+
type StringRepeatHelper<
|
|
34
|
+
Input extends string,
|
|
35
|
+
Count extends number,
|
|
36
|
+
Counter extends never[] = [],
|
|
37
|
+
Accumulator extends string = '',
|
|
38
|
+
> =
|
|
39
|
+
IsNegative<Count> extends true
|
|
40
|
+
? never
|
|
41
|
+
: Input extends ''
|
|
42
|
+
? ''
|
|
43
|
+
: Count extends Counter['length']
|
|
44
|
+
? Accumulator
|
|
45
|
+
: IsNumericLiteral<Count> extends false
|
|
46
|
+
? string
|
|
47
|
+
: StringRepeatHelper<Input, Count, [...Counter, never], `${Accumulator}${Input}`>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type {Join} from './join';
|
|
2
|
+
import type {ArraySlice} from './array-slice';
|
|
3
|
+
import type {StringToArray} from './internal';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
Returns a string slice of a given range, just like `String#slice()`.
|
|
7
|
+
|
|
8
|
+
@see {ArraySlice}
|
|
9
|
+
|
|
10
|
+
@example
|
|
11
|
+
```
|
|
12
|
+
import type {StringSlice} from 'type-fest';
|
|
13
|
+
|
|
14
|
+
StringSlice<'abcde', 0, 2>;
|
|
15
|
+
//=> 'ab'
|
|
16
|
+
|
|
17
|
+
StringSlice<'abcde', 1>;
|
|
18
|
+
//=> 'bcde'
|
|
19
|
+
|
|
20
|
+
StringSlice<'abcde', 0, -1>;
|
|
21
|
+
//=> 'abcd'
|
|
22
|
+
|
|
23
|
+
StringSlice<'abcde', -2, -1>;
|
|
24
|
+
//=> 'd'
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
@category String
|
|
28
|
+
*/
|
|
29
|
+
export type StringSlice<
|
|
30
|
+
S extends string,
|
|
31
|
+
Start extends number = 0,
|
|
32
|
+
End extends number = StringToArray<S>['length'],
|
|
33
|
+
> = string extends S
|
|
34
|
+
? string
|
|
35
|
+
: ArraySlice<StringToArray<S>, Start, End> extends infer R extends readonly string[]
|
|
36
|
+
? Join<R, ''>
|
|
37
|
+
: never;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Create a type with the keys of the given type changed to `string` type.
|
|
3
|
+
|
|
4
|
+
Use-case: Changing interface values to strings in order to use them in a form model.
|
|
5
|
+
|
|
6
|
+
@example
|
|
7
|
+
```
|
|
8
|
+
import type {Stringified} from 'type-fest';
|
|
9
|
+
|
|
10
|
+
type Car = {
|
|
11
|
+
model: string;
|
|
12
|
+
speed: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const carForm: Stringified<Car> = {
|
|
16
|
+
model: 'Foo',
|
|
17
|
+
speed: '101'
|
|
18
|
+
};
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
@category Object
|
|
22
|
+
*/
|
|
23
|
+
export type Stringified<ObjectType> = {[KeyType in keyof ObjectType]: string};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type {TypedArray} from './typed-array';
|
|
2
|
+
import type {FindGlobalInstanceType} from './find-global-type';
|
|
3
|
+
|
|
4
|
+
type StructuredCloneablePrimitive =
|
|
5
|
+
| string
|
|
6
|
+
| number
|
|
7
|
+
| bigint
|
|
8
|
+
| boolean
|
|
9
|
+
| null
|
|
10
|
+
| undefined
|
|
11
|
+
| Boolean
|
|
12
|
+
| Number
|
|
13
|
+
| String;
|
|
14
|
+
|
|
15
|
+
type StructuredCloneableData =
|
|
16
|
+
| ArrayBuffer
|
|
17
|
+
| DataView
|
|
18
|
+
| Date
|
|
19
|
+
| Error
|
|
20
|
+
| RegExp
|
|
21
|
+
| TypedArray
|
|
22
|
+
| FindGlobalInstanceType<
|
|
23
|
+
// DOM or Node types
|
|
24
|
+
| 'Blob'
|
|
25
|
+
| 'File'
|
|
26
|
+
// DOM exclusive types
|
|
27
|
+
| 'AudioData'
|
|
28
|
+
| 'CropTarget'
|
|
29
|
+
| 'CryptoKey'
|
|
30
|
+
| 'DOMException'
|
|
31
|
+
| 'DOMMatrix'
|
|
32
|
+
| 'DOMMatrixReadOnly'
|
|
33
|
+
| 'DOMPoint'
|
|
34
|
+
| 'DOMPointReadOnly'
|
|
35
|
+
| 'DOMQuad'
|
|
36
|
+
| 'DOMRect'
|
|
37
|
+
| 'DOMRectReadOnly'
|
|
38
|
+
| 'FileList'
|
|
39
|
+
| 'FileSystemDirectoryHandle'
|
|
40
|
+
| 'FileSystemFileHandle'
|
|
41
|
+
| 'FileSystemHandle'
|
|
42
|
+
| 'GPUCompilationInfo'
|
|
43
|
+
| 'GPUCompilationMessage'
|
|
44
|
+
| 'ImageBitmap'
|
|
45
|
+
| 'ImageData'
|
|
46
|
+
| 'RTCCertificate'
|
|
47
|
+
| 'VideoFrame'
|
|
48
|
+
>;
|
|
49
|
+
|
|
50
|
+
type StructuredCloneableCollection =
|
|
51
|
+
| readonly StructuredCloneable[]
|
|
52
|
+
| {readonly [key: string]: StructuredCloneable; readonly [key: number]: StructuredCloneable}
|
|
53
|
+
| ReadonlyMap<StructuredCloneable, StructuredCloneable>
|
|
54
|
+
| ReadonlySet<StructuredCloneable>;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
Matches a value that can be losslessly cloned using `structuredClone`.
|
|
58
|
+
|
|
59
|
+
Note:
|
|
60
|
+
- Custom error types will be cloned as the base `Error` type
|
|
61
|
+
|
|
62
|
+
@see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
|
|
63
|
+
|
|
64
|
+
@example
|
|
65
|
+
```
|
|
66
|
+
import type {StructuredCloneable} from 'type-fest';
|
|
67
|
+
|
|
68
|
+
class CustomClass {}
|
|
69
|
+
|
|
70
|
+
// @ts-expect-error
|
|
71
|
+
const error: StructuredCloneable = {
|
|
72
|
+
custom: new CustomClass(),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
structuredClone(error);
|
|
76
|
+
//=> {custom: {}}
|
|
77
|
+
|
|
78
|
+
const good: StructuredCloneable = {
|
|
79
|
+
number: 3,
|
|
80
|
+
date: new Date(),
|
|
81
|
+
map: new Map<string, number>(),
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
good.map.set('key', 1);
|
|
85
|
+
|
|
86
|
+
structuredClone(good);
|
|
87
|
+
//=> {number: 3, date: Date(2022-10-17 22:22:35.920), map: Map {'key' -> 1}}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
@category Structured clone
|
|
91
|
+
*/
|
|
92
|
+
export type StructuredCloneable = StructuredCloneablePrimitive | StructuredCloneableData | StructuredCloneableCollection;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type {NumberAbsolute, BuildTuple, ReverseSign} from './internal';
|
|
2
|
+
import type {PositiveInfinity, NegativeInfinity, IsNegative} from './numeric';
|
|
3
|
+
import type {LessThan} from './less-than';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
Returns the difference between two numbers.
|
|
7
|
+
|
|
8
|
+
Note:
|
|
9
|
+
- A or B can only support `-999` ~ `999`.
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```
|
|
13
|
+
import type {Subtract} from 'type-fest';
|
|
14
|
+
|
|
15
|
+
Subtract<333, 222>;
|
|
16
|
+
//=> 111
|
|
17
|
+
|
|
18
|
+
Subtract<111, -222>;
|
|
19
|
+
//=> 333
|
|
20
|
+
|
|
21
|
+
Subtract<-111, 222>;
|
|
22
|
+
//=> -333
|
|
23
|
+
|
|
24
|
+
Subtract<18, 96>;
|
|
25
|
+
//=> -78
|
|
26
|
+
|
|
27
|
+
Subtract<PositiveInfinity, 9999>;
|
|
28
|
+
//=> PositiveInfinity
|
|
29
|
+
|
|
30
|
+
Subtract<PositiveInfinity, PositiveInfinity>;
|
|
31
|
+
//=> number
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
@category Numeric
|
|
35
|
+
*/
|
|
36
|
+
// TODO: Support big integer.
|
|
37
|
+
export type Subtract<A extends number, B extends number> =
|
|
38
|
+
// Handle cases when A or B is the actual "number" type
|
|
39
|
+
number extends A | B ? number
|
|
40
|
+
// Handle cases when A and B are both +/- infinity
|
|
41
|
+
: A extends B & (PositiveInfinity | NegativeInfinity) ? number
|
|
42
|
+
// Handle cases when A is - infinity or B is + infinity
|
|
43
|
+
: A extends NegativeInfinity ? NegativeInfinity : B extends PositiveInfinity ? NegativeInfinity
|
|
44
|
+
// Handle cases when A is + infinity or B is - infinity
|
|
45
|
+
: A extends PositiveInfinity ? PositiveInfinity : B extends NegativeInfinity ? PositiveInfinity
|
|
46
|
+
// Handle case when numbers are equal to each other
|
|
47
|
+
: A extends B ? 0
|
|
48
|
+
// Handle cases when A or B is 0
|
|
49
|
+
: A extends 0 ? ReverseSign<B> : B extends 0 ? A
|
|
50
|
+
// Handle remaining regular cases
|
|
51
|
+
: SubtractPostChecks<A, B>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
Subtracts two numbers A and B, such that they are not equal and neither of them are 0, +/- infinity or the `number` type
|
|
55
|
+
*/
|
|
56
|
+
type SubtractPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
|
|
57
|
+
AreNegative extends [false, false]
|
|
58
|
+
? SubtractPositives<A, B>
|
|
59
|
+
: AreNegative extends [true, true]
|
|
60
|
+
// When both numbers are negative we subtract the absolute values and then reverse the sign
|
|
61
|
+
? ReverseSign<SubtractPositives<NumberAbsolute<A>, NumberAbsolute<B>>>
|
|
62
|
+
// When the signs are different we can add the absolute values and then reverse the sign if A < B
|
|
63
|
+
: [...BuildTuple<NumberAbsolute<A>>, ...BuildTuple<NumberAbsolute<B>>] extends infer R extends unknown[]
|
|
64
|
+
? LessThan<A, B> extends true ? ReverseSign<R['length']> : R['length']
|
|
65
|
+
: never;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
Subtracts two positive numbers.
|
|
69
|
+
*/
|
|
70
|
+
type SubtractPositives<A extends number, B extends number> =
|
|
71
|
+
LessThan<A, B> extends true
|
|
72
|
+
// When A < B we can reverse the result of B - A
|
|
73
|
+
? ReverseSign<SubtractIfAGreaterThanB<B, A>>
|
|
74
|
+
: SubtractIfAGreaterThanB<A, B>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
Subtracts two positive numbers A and B such that A > B.
|
|
78
|
+
*/
|
|
79
|
+
type SubtractIfAGreaterThanB<A extends number, B extends number> =
|
|
80
|
+
// This is where we always want to end up and do the actual subtraction
|
|
81
|
+
BuildTuple<A> extends [...BuildTuple<B>, ...infer R]
|
|
82
|
+
? R['length']
|
|
83
|
+
: never;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type {NumberAbsolute, BuildTuple, TupleMax, ReverseSign} from './internal';
|
|
2
|
+
import type {PositiveInfinity, NegativeInfinity, IsNegative} from './numeric';
|
|
3
|
+
import type {Subtract} from './subtract';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
Returns the sum of two numbers.
|
|
7
|
+
|
|
8
|
+
Note:
|
|
9
|
+
- A or B can only support `-999` ~ `999`.
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```
|
|
13
|
+
import type {Sum} from 'type-fest';
|
|
14
|
+
|
|
15
|
+
Sum<111, 222>;
|
|
16
|
+
//=> 333
|
|
17
|
+
|
|
18
|
+
Sum<-111, 222>;
|
|
19
|
+
//=> 111
|
|
20
|
+
|
|
21
|
+
Sum<111, -222>;
|
|
22
|
+
//=> -111
|
|
23
|
+
|
|
24
|
+
Sum<PositiveInfinity, -9999>;
|
|
25
|
+
//=> PositiveInfinity
|
|
26
|
+
|
|
27
|
+
Sum<PositiveInfinity, NegativeInfinity>;
|
|
28
|
+
//=> number
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
@category Numeric
|
|
32
|
+
*/
|
|
33
|
+
// TODO: Support big integer.
|
|
34
|
+
export type Sum<A extends number, B extends number> =
|
|
35
|
+
// Handle cases when A or B is the actual "number" type
|
|
36
|
+
number extends A | B ? number
|
|
37
|
+
// Handle cases when A and B are both +/- infinity
|
|
38
|
+
: A extends B & (PositiveInfinity | NegativeInfinity) ? A // A or B could be used here as they are equal
|
|
39
|
+
// Handle cases when A and B are opposite infinities
|
|
40
|
+
: A | B extends PositiveInfinity | NegativeInfinity ? number
|
|
41
|
+
// Handle cases when A is +/- infinity
|
|
42
|
+
: A extends PositiveInfinity | NegativeInfinity ? A
|
|
43
|
+
// Handle cases when B is +/- infinity
|
|
44
|
+
: B extends PositiveInfinity | NegativeInfinity ? B
|
|
45
|
+
// Handle cases when A or B is 0 or it's the same number with different signs
|
|
46
|
+
: A extends 0 ? B : B extends 0 ? A : A extends ReverseSign<B> ? 0
|
|
47
|
+
// Handle remaining regular cases
|
|
48
|
+
: SumPostChecks<A, B>;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
Adds two numbers A and B, such that they are not equal with different signs and neither of them are 0, +/- infinity or the `number` type
|
|
52
|
+
*/
|
|
53
|
+
type SumPostChecks<A extends number, B extends number, AreNegative = [IsNegative<A>, IsNegative<B>]> =
|
|
54
|
+
AreNegative extends [false, false]
|
|
55
|
+
// When both numbers are positive we can add them together
|
|
56
|
+
? SumPositives<A, B>
|
|
57
|
+
: AreNegative extends [true, true]
|
|
58
|
+
// When both numbers are negative we add the absolute values and then reverse the sign
|
|
59
|
+
? ReverseSign<SumPositives<NumberAbsolute<A>, NumberAbsolute<B>>>
|
|
60
|
+
// When the signs are different we can subtract the absolute values, remove the sign
|
|
61
|
+
// and then reverse the sign if the larger absolute value is negative
|
|
62
|
+
: NumberAbsolute<Subtract<NumberAbsolute<A>, NumberAbsolute<B>>> extends infer Result extends number
|
|
63
|
+
? TupleMax<[NumberAbsolute<A>, NumberAbsolute<B>]> extends infer Max_ extends number
|
|
64
|
+
? Max_ extends A | B
|
|
65
|
+
// The larger absolute value is positive, so the result is positive
|
|
66
|
+
? Result
|
|
67
|
+
// The larger absolute value is negative, so the result is negative
|
|
68
|
+
: ReverseSign<Result>
|
|
69
|
+
: never
|
|
70
|
+
: never;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
Adds two positive numbers.
|
|
74
|
+
*/
|
|
75
|
+
type SumPositives<A extends number, B extends number> =
|
|
76
|
+
[...BuildTuple<A>, ...BuildTuple<B>]['length'] extends infer Result extends number
|
|
77
|
+
? Result
|
|
78
|
+
: never;
|