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,106 @@
|
|
|
1
|
+
const debug = require('./debug');
|
|
2
|
+
const utils = require('./utils');
|
|
3
|
+
const tableLayout = require('./layout-manager');
|
|
4
|
+
|
|
5
|
+
class Table extends Array {
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
super();
|
|
8
|
+
|
|
9
|
+
const options = utils.mergeOptions(opts);
|
|
10
|
+
Object.defineProperty(this, 'options', {
|
|
11
|
+
value: options,
|
|
12
|
+
enumerable: options.debug,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
if (options.debug) {
|
|
16
|
+
switch (typeof options.debug) {
|
|
17
|
+
case 'boolean':
|
|
18
|
+
debug.setDebugLevel(debug.WARN);
|
|
19
|
+
break;
|
|
20
|
+
case 'number':
|
|
21
|
+
debug.setDebugLevel(options.debug);
|
|
22
|
+
break;
|
|
23
|
+
case 'string':
|
|
24
|
+
debug.setDebugLevel(parseInt(options.debug, 10));
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
debug.setDebugLevel(debug.WARN);
|
|
28
|
+
debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);
|
|
29
|
+
}
|
|
30
|
+
Object.defineProperty(this, 'messages', {
|
|
31
|
+
get() {
|
|
32
|
+
return debug.debugMessages();
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
toString() {
|
|
39
|
+
let array = this;
|
|
40
|
+
let headersPresent = this.options.head && this.options.head.length;
|
|
41
|
+
if (headersPresent) {
|
|
42
|
+
array = [this.options.head];
|
|
43
|
+
if (this.length) {
|
|
44
|
+
array.push.apply(array, this);
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
this.options.style.head = [];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let cells = tableLayout.makeTableLayout(array);
|
|
51
|
+
|
|
52
|
+
cells.forEach(function (row) {
|
|
53
|
+
row.forEach(function (cell) {
|
|
54
|
+
cell.mergeTableOptions(this.options, cells);
|
|
55
|
+
}, this);
|
|
56
|
+
}, this);
|
|
57
|
+
|
|
58
|
+
tableLayout.computeWidths(this.options.colWidths, cells);
|
|
59
|
+
tableLayout.computeHeights(this.options.rowHeights, cells);
|
|
60
|
+
|
|
61
|
+
cells.forEach(function (row) {
|
|
62
|
+
row.forEach(function (cell) {
|
|
63
|
+
cell.init(this.options);
|
|
64
|
+
}, this);
|
|
65
|
+
}, this);
|
|
66
|
+
|
|
67
|
+
let result = [];
|
|
68
|
+
|
|
69
|
+
for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {
|
|
70
|
+
let row = cells[rowIndex];
|
|
71
|
+
let heightOfRow = this.options.rowHeights[rowIndex];
|
|
72
|
+
|
|
73
|
+
if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) {
|
|
74
|
+
doDraw(row, 'top', result);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
for (let lineNum = 0; lineNum < heightOfRow; lineNum++) {
|
|
78
|
+
doDraw(row, lineNum, result);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (rowIndex + 1 == cells.length) {
|
|
82
|
+
doDraw(row, 'bottom', result);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return result.join('\n');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
get width() {
|
|
90
|
+
let str = this.toString().split('\n');
|
|
91
|
+
return str[0].length;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
Table.reset = () => debug.reset();
|
|
96
|
+
|
|
97
|
+
function doDraw(row, lineNum, result) {
|
|
98
|
+
let line = [];
|
|
99
|
+
row.forEach(function (cell) {
|
|
100
|
+
line.push(cell.draw(lineNum));
|
|
101
|
+
});
|
|
102
|
+
let str = line.join('');
|
|
103
|
+
if (str.length) result.push(str);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
module.exports = Table;
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
const stringWidth = require('string-width');
|
|
2
|
+
|
|
3
|
+
function codeRegex(capture) {
|
|
4
|
+
return capture ? /\u001b\[((?:\d*;){0,5}\d*)m/g : /\u001b\[(?:\d*;){0,5}\d*m/g;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function strlen(str) {
|
|
8
|
+
let code = codeRegex();
|
|
9
|
+
let stripped = ('' + str).replace(code, '');
|
|
10
|
+
let split = stripped.split('\n');
|
|
11
|
+
return split.reduce(function (memo, s) {
|
|
12
|
+
return stringWidth(s) > memo ? stringWidth(s) : memo;
|
|
13
|
+
}, 0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function repeat(str, times) {
|
|
17
|
+
return Array(times + 1).join(str);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function pad(str, len, pad, dir) {
|
|
21
|
+
let length = strlen(str);
|
|
22
|
+
if (len + 1 >= length) {
|
|
23
|
+
let padlen = len - length;
|
|
24
|
+
switch (dir) {
|
|
25
|
+
case 'right': {
|
|
26
|
+
str = repeat(pad, padlen) + str;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case 'center': {
|
|
30
|
+
let right = Math.ceil(padlen / 2);
|
|
31
|
+
let left = padlen - right;
|
|
32
|
+
str = repeat(pad, left) + str + repeat(pad, right);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
default: {
|
|
36
|
+
str = str + repeat(pad, padlen);
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return str;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let codeCache = {};
|
|
45
|
+
|
|
46
|
+
function addToCodeCache(name, on, off) {
|
|
47
|
+
on = '\u001b[' + on + 'm';
|
|
48
|
+
off = '\u001b[' + off + 'm';
|
|
49
|
+
codeCache[on] = { set: name, to: true };
|
|
50
|
+
codeCache[off] = { set: name, to: false };
|
|
51
|
+
codeCache[name] = { on: on, off: off };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
//https://github.com/Marak/colors.js/blob/master/lib/styles.js
|
|
55
|
+
addToCodeCache('bold', 1, 22);
|
|
56
|
+
addToCodeCache('italics', 3, 23);
|
|
57
|
+
addToCodeCache('underline', 4, 24);
|
|
58
|
+
addToCodeCache('inverse', 7, 27);
|
|
59
|
+
addToCodeCache('strikethrough', 9, 29);
|
|
60
|
+
|
|
61
|
+
function updateState(state, controlChars) {
|
|
62
|
+
let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0;
|
|
63
|
+
if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) {
|
|
64
|
+
state.lastForegroundAdded = controlChars[0];
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) {
|
|
68
|
+
state.lastBackgroundAdded = controlChars[0];
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (controlCode === 0) {
|
|
72
|
+
for (let i in state) {
|
|
73
|
+
/* istanbul ignore else */
|
|
74
|
+
if (Object.prototype.hasOwnProperty.call(state, i)) {
|
|
75
|
+
delete state[i];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
let info = codeCache[controlChars[0]];
|
|
81
|
+
if (info) {
|
|
82
|
+
state[info.set] = info.to;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function readState(line) {
|
|
87
|
+
let code = codeRegex(true);
|
|
88
|
+
let controlChars = code.exec(line);
|
|
89
|
+
let state = {};
|
|
90
|
+
while (controlChars !== null) {
|
|
91
|
+
updateState(state, controlChars);
|
|
92
|
+
controlChars = code.exec(line);
|
|
93
|
+
}
|
|
94
|
+
return state;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function unwindState(state, ret) {
|
|
98
|
+
let lastBackgroundAdded = state.lastBackgroundAdded;
|
|
99
|
+
let lastForegroundAdded = state.lastForegroundAdded;
|
|
100
|
+
|
|
101
|
+
delete state.lastBackgroundAdded;
|
|
102
|
+
delete state.lastForegroundAdded;
|
|
103
|
+
|
|
104
|
+
Object.keys(state).forEach(function (key) {
|
|
105
|
+
if (state[key]) {
|
|
106
|
+
ret += codeCache[key].off;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
if (lastBackgroundAdded && lastBackgroundAdded != '\u001b[49m') {
|
|
111
|
+
ret += '\u001b[49m';
|
|
112
|
+
}
|
|
113
|
+
if (lastForegroundAdded && lastForegroundAdded != '\u001b[39m') {
|
|
114
|
+
ret += '\u001b[39m';
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return ret;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function rewindState(state, ret) {
|
|
121
|
+
let lastBackgroundAdded = state.lastBackgroundAdded;
|
|
122
|
+
let lastForegroundAdded = state.lastForegroundAdded;
|
|
123
|
+
|
|
124
|
+
delete state.lastBackgroundAdded;
|
|
125
|
+
delete state.lastForegroundAdded;
|
|
126
|
+
|
|
127
|
+
Object.keys(state).forEach(function (key) {
|
|
128
|
+
if (state[key]) {
|
|
129
|
+
ret = codeCache[key].on + ret;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
if (lastBackgroundAdded && lastBackgroundAdded != '\u001b[49m') {
|
|
134
|
+
ret = lastBackgroundAdded + ret;
|
|
135
|
+
}
|
|
136
|
+
if (lastForegroundAdded && lastForegroundAdded != '\u001b[39m') {
|
|
137
|
+
ret = lastForegroundAdded + ret;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return ret;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function truncateWidth(str, desiredLength) {
|
|
144
|
+
if (str.length === strlen(str)) {
|
|
145
|
+
return str.substr(0, desiredLength);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
while (strlen(str) > desiredLength) {
|
|
149
|
+
str = str.slice(0, -1);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return str;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function truncateWidthWithAnsi(str, desiredLength) {
|
|
156
|
+
let code = codeRegex(true);
|
|
157
|
+
let split = str.split(codeRegex());
|
|
158
|
+
let splitIndex = 0;
|
|
159
|
+
let retLen = 0;
|
|
160
|
+
let ret = '';
|
|
161
|
+
let myArray;
|
|
162
|
+
let state = {};
|
|
163
|
+
|
|
164
|
+
while (retLen < desiredLength) {
|
|
165
|
+
myArray = code.exec(str);
|
|
166
|
+
let toAdd = split[splitIndex];
|
|
167
|
+
splitIndex++;
|
|
168
|
+
if (retLen + strlen(toAdd) > desiredLength) {
|
|
169
|
+
toAdd = truncateWidth(toAdd, desiredLength - retLen);
|
|
170
|
+
}
|
|
171
|
+
ret += toAdd;
|
|
172
|
+
retLen += strlen(toAdd);
|
|
173
|
+
|
|
174
|
+
if (retLen < desiredLength) {
|
|
175
|
+
if (!myArray) {
|
|
176
|
+
break;
|
|
177
|
+
} // full-width chars may cause a whitespace which cannot be filled
|
|
178
|
+
ret += myArray[0];
|
|
179
|
+
updateState(state, myArray);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return unwindState(state, ret);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function truncate(str, desiredLength, truncateChar) {
|
|
187
|
+
truncateChar = truncateChar || '…';
|
|
188
|
+
let lengthOfStr = strlen(str);
|
|
189
|
+
if (lengthOfStr <= desiredLength) {
|
|
190
|
+
return str;
|
|
191
|
+
}
|
|
192
|
+
desiredLength -= strlen(truncateChar);
|
|
193
|
+
|
|
194
|
+
let ret = truncateWidthWithAnsi(str, desiredLength);
|
|
195
|
+
|
|
196
|
+
ret += truncateChar;
|
|
197
|
+
|
|
198
|
+
const hrefTag = '\x1B]8;;\x07';
|
|
199
|
+
|
|
200
|
+
if (str.includes(hrefTag) && !ret.includes(hrefTag)) {
|
|
201
|
+
ret += hrefTag;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return ret;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function defaultOptions() {
|
|
208
|
+
return {
|
|
209
|
+
chars: {
|
|
210
|
+
top: '─',
|
|
211
|
+
'top-mid': '┬',
|
|
212
|
+
'top-left': '┌',
|
|
213
|
+
'top-right': '┐',
|
|
214
|
+
bottom: '─',
|
|
215
|
+
'bottom-mid': '┴',
|
|
216
|
+
'bottom-left': '└',
|
|
217
|
+
'bottom-right': '┘',
|
|
218
|
+
left: '│',
|
|
219
|
+
'left-mid': '├',
|
|
220
|
+
mid: '─',
|
|
221
|
+
'mid-mid': '┼',
|
|
222
|
+
right: '│',
|
|
223
|
+
'right-mid': '┤',
|
|
224
|
+
middle: '│',
|
|
225
|
+
},
|
|
226
|
+
truncate: '…',
|
|
227
|
+
colWidths: [],
|
|
228
|
+
rowHeights: [],
|
|
229
|
+
colAligns: [],
|
|
230
|
+
rowAligns: [],
|
|
231
|
+
style: {
|
|
232
|
+
'padding-left': 1,
|
|
233
|
+
'padding-right': 1,
|
|
234
|
+
head: ['red'],
|
|
235
|
+
border: ['grey'],
|
|
236
|
+
compact: false,
|
|
237
|
+
},
|
|
238
|
+
head: [],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function mergeOptions(options, defaults) {
|
|
243
|
+
options = options || {};
|
|
244
|
+
defaults = defaults || defaultOptions();
|
|
245
|
+
let ret = Object.assign({}, defaults, options);
|
|
246
|
+
ret.chars = Object.assign({}, defaults.chars, options.chars);
|
|
247
|
+
ret.style = Object.assign({}, defaults.style, options.style);
|
|
248
|
+
return ret;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Wrap on word boundary
|
|
252
|
+
function wordWrap(maxLength, input) {
|
|
253
|
+
let lines = [];
|
|
254
|
+
let split = input.split(/(\s+)/g);
|
|
255
|
+
let line = [];
|
|
256
|
+
let lineLength = 0;
|
|
257
|
+
let whitespace;
|
|
258
|
+
for (let i = 0; i < split.length; i += 2) {
|
|
259
|
+
let word = split[i];
|
|
260
|
+
let newLength = lineLength + strlen(word);
|
|
261
|
+
if (lineLength > 0 && whitespace) {
|
|
262
|
+
newLength += whitespace.length;
|
|
263
|
+
}
|
|
264
|
+
if (newLength > maxLength) {
|
|
265
|
+
if (lineLength !== 0) {
|
|
266
|
+
lines.push(line.join(''));
|
|
267
|
+
}
|
|
268
|
+
line = [word];
|
|
269
|
+
lineLength = strlen(word);
|
|
270
|
+
} else {
|
|
271
|
+
line.push(whitespace || '', word);
|
|
272
|
+
lineLength = newLength;
|
|
273
|
+
}
|
|
274
|
+
whitespace = split[i + 1];
|
|
275
|
+
}
|
|
276
|
+
if (lineLength) {
|
|
277
|
+
lines.push(line.join(''));
|
|
278
|
+
}
|
|
279
|
+
return lines;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Wrap text (ignoring word boundaries)
|
|
283
|
+
function textWrap(maxLength, input) {
|
|
284
|
+
let lines = [];
|
|
285
|
+
let line = '';
|
|
286
|
+
function pushLine(str, ws) {
|
|
287
|
+
if (line.length && ws) line += ws;
|
|
288
|
+
line += str;
|
|
289
|
+
while (line.length > maxLength) {
|
|
290
|
+
lines.push(line.slice(0, maxLength));
|
|
291
|
+
line = line.slice(maxLength);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
let split = input.split(/(\s+)/g);
|
|
295
|
+
for (let i = 0; i < split.length; i += 2) {
|
|
296
|
+
pushLine(split[i], i && split[i - 1]);
|
|
297
|
+
}
|
|
298
|
+
if (line.length) lines.push(line);
|
|
299
|
+
return lines;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {
|
|
303
|
+
let output = [];
|
|
304
|
+
input = input.split('\n');
|
|
305
|
+
const handler = wrapOnWordBoundary ? wordWrap : textWrap;
|
|
306
|
+
for (let i = 0; i < input.length; i++) {
|
|
307
|
+
output.push.apply(output, handler(maxLength, input[i]));
|
|
308
|
+
}
|
|
309
|
+
return output;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function colorizeLines(input) {
|
|
313
|
+
let state = {};
|
|
314
|
+
let output = [];
|
|
315
|
+
for (let i = 0; i < input.length; i++) {
|
|
316
|
+
let line = rewindState(state, input[i]);
|
|
317
|
+
state = readState(line);
|
|
318
|
+
let temp = Object.assign({}, state);
|
|
319
|
+
output.push(unwindState(temp, line));
|
|
320
|
+
}
|
|
321
|
+
return output;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Credit: Matheus Sampaio https://github.com/matheussampaio
|
|
326
|
+
*/
|
|
327
|
+
function hyperlink(url, text) {
|
|
328
|
+
const OSC = '\u001B]';
|
|
329
|
+
const BEL = '\u0007';
|
|
330
|
+
const SEP = ';';
|
|
331
|
+
|
|
332
|
+
return [OSC, '8', SEP, SEP, url || text, BEL, text, OSC, '8', SEP, SEP, BEL].join('');
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
module.exports = {
|
|
336
|
+
strlen: strlen,
|
|
337
|
+
repeat: repeat,
|
|
338
|
+
pad: pad,
|
|
339
|
+
truncate: truncate,
|
|
340
|
+
mergeOptions: mergeOptions,
|
|
341
|
+
wordWrap: multiLineWordWrap,
|
|
342
|
+
colorizeLines: colorizeLines,
|
|
343
|
+
hyperlink,
|
|
344
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
(The MIT License)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
+
a copy of this software and associated documentation files (the
|
|
7
|
+
'Software'), to deal in the Software without restriction, including
|
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
+
the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be
|
|
14
|
+
included in all copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|