immosquare-cleaner 0.1.32 → 0.1.33
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/immosquare-cleaner/version.rb +1 -1
- data/node_modules/@eslint/eslintrc/README.md +15 -4
- data/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs +57 -18
- data/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map +1 -1
- data/node_modules/@eslint/eslintrc/dist/eslintrc.cjs +60 -34
- data/node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map +1 -1
- data/node_modules/@eslint/eslintrc/lib/config-array/config-array.js +3 -16
- data/node_modules/@eslint/eslintrc/lib/shared/config-validator.js +63 -18
- data/node_modules/@eslint/eslintrc/package.json +4 -4
- data/node_modules/@eslint/js/package.json +2 -2
- data/node_modules/@eslint/js/src/configs/eslint-all.js +9 -1
- data/node_modules/@eslint/js/src/configs/eslint-recommended.js +12 -5
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/LICENSE +201 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/README.md +105 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/eslint-visitor-keys.cjs +384 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/eslint-visitor-keys.d.cts +27 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/index.d.ts +16 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/dist/visitor-keys.d.ts +12 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/lib/index.js +65 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/lib/visitor-keys.js +315 -0
- data/node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys/package.json +74 -0
- data/node_modules/@humanwhocodes/config-array/api.js +114 -16
- data/node_modules/@humanwhocodes/config-array/package.json +5 -3
- data/node_modules/@humanwhocodes/object-schema/CHANGELOG.md +7 -0
- data/node_modules/@humanwhocodes/object-schema/package.json +6 -1
- data/node_modules/@humanwhocodes/retry/LICENSE +201 -0
- data/node_modules/@humanwhocodes/retry/README.md +122 -0
- data/node_modules/@humanwhocodes/retry/dist/retrier.cjs +267 -0
- data/node_modules/@humanwhocodes/retry/dist/retrier.d.ts +24 -0
- data/node_modules/@humanwhocodes/retry/dist/retrier.js +265 -0
- data/node_modules/@humanwhocodes/retry/dist/retrier.min.js +1 -0
- data/node_modules/@humanwhocodes/retry/dist/retrier.mjs +265 -0
- data/node_modules/@humanwhocodes/retry/package.json +74 -0
- data/node_modules/@types/semver-utils/LICENSE +21 -0
- data/node_modules/@types/semver-utils/README.md +34 -0
- data/node_modules/@types/semver-utils/index.d.ts +15 -0
- data/node_modules/@types/semver-utils/package.json +25 -0
- data/node_modules/acorn/CHANGELOG.md +36 -0
- data/node_modules/acorn/README.md +8 -3
- data/node_modules/acorn/dist/acorn.d.mts +857 -26
- data/node_modules/acorn/dist/acorn.d.ts +833 -268
- data/node_modules/acorn/dist/acorn.js +33 -21
- data/node_modules/acorn/dist/acorn.mjs +33 -21
- data/node_modules/acorn/package.json +1 -1
- data/node_modules/cacheable-request/node_modules/keyv/README.md +429 -0
- data/node_modules/cacheable-request/node_modules/keyv/package.json +57 -0
- data/node_modules/cacheable-request/node_modules/keyv/src/index.d.ts +112 -0
- data/node_modules/cacheable-request/node_modules/keyv/src/index.js +264 -0
- data/node_modules/doctrine/CHANGELOG.md +0 -7
- data/node_modules/doctrine/lib/doctrine.js +1 -0
- data/node_modules/doctrine/package.json +8 -9
- data/node_modules/eslint/README.md +31 -28
- data/node_modules/eslint/bin/eslint.js +4 -3
- data/node_modules/eslint/conf/ecma-version.js +16 -0
- data/node_modules/eslint/conf/globals.js +1 -0
- data/node_modules/eslint/conf/rule-type-list.json +3 -1
- data/node_modules/eslint/lib/api.js +7 -11
- data/node_modules/eslint/lib/cli-engine/cli-engine.js +14 -3
- data/node_modules/eslint/lib/cli-engine/formatters/formatters-meta.json +1 -29
- data/node_modules/eslint/lib/cli-engine/lint-result-cache.js +2 -2
- data/node_modules/eslint/lib/cli.js +115 -36
- data/node_modules/eslint/lib/config/default-config.js +3 -0
- data/node_modules/eslint/lib/config/flat-config-array.js +110 -24
- data/node_modules/eslint/lib/config/flat-config-helpers.js +41 -20
- data/node_modules/eslint/lib/config/flat-config-schema.js +1 -7
- data/node_modules/eslint/lib/config/rule-validator.js +42 -6
- data/node_modules/eslint/lib/eslint/eslint-helpers.js +116 -58
- data/node_modules/eslint/lib/eslint/eslint.js +892 -377
- data/node_modules/eslint/lib/eslint/index.js +2 -2
- data/node_modules/eslint/lib/eslint/legacy-eslint.js +728 -0
- data/node_modules/eslint/lib/linter/apply-disable-directives.js +59 -31
- data/node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js +0 -1
- data/node_modules/eslint/lib/linter/code-path-analysis/code-path.js +32 -30
- data/node_modules/eslint/lib/linter/code-path-analysis/fork-context.js +1 -1
- data/node_modules/eslint/lib/linter/config-comment-parser.js +8 -11
- data/node_modules/eslint/lib/linter/index.js +1 -3
- data/node_modules/eslint/lib/linter/interpolate.js +24 -2
- data/node_modules/eslint/lib/linter/linter.js +428 -207
- data/node_modules/eslint/lib/linter/report-translator.js +3 -3
- data/node_modules/eslint/lib/linter/rules.js +6 -15
- data/node_modules/eslint/lib/linter/source-code-fixer.js +1 -1
- data/node_modules/eslint/lib/linter/timing.js +16 -8
- data/node_modules/eslint/lib/options.js +35 -3
- data/node_modules/eslint/lib/rule-tester/index.js +3 -1
- data/node_modules/eslint/lib/rule-tester/rule-tester.js +424 -347
- data/node_modules/eslint/lib/rules/array-bracket-newline.js +1 -1
- data/node_modules/eslint/lib/rules/array-bracket-spacing.js +1 -1
- data/node_modules/eslint/lib/rules/block-scoped-var.js +1 -1
- data/node_modules/eslint/lib/rules/callback-return.js +2 -2
- data/node_modules/eslint/lib/rules/camelcase.js +3 -5
- data/node_modules/eslint/lib/rules/capitalized-comments.js +10 -7
- data/node_modules/eslint/lib/rules/comma-dangle.js +1 -1
- data/node_modules/eslint/lib/rules/comma-style.js +2 -2
- data/node_modules/eslint/lib/rules/complexity.js +14 -1
- data/node_modules/eslint/lib/rules/constructor-super.js +99 -100
- data/node_modules/eslint/lib/rules/default-case.js +1 -1
- data/node_modules/eslint/lib/rules/eol-last.js +2 -2
- data/node_modules/eslint/lib/rules/function-paren-newline.js +2 -2
- data/node_modules/eslint/lib/rules/indent-legacy.js +5 -5
- data/node_modules/eslint/lib/rules/indent.js +5 -5
- data/node_modules/eslint/lib/rules/index.js +1 -2
- data/node_modules/eslint/lib/rules/key-spacing.js +2 -2
- data/node_modules/eslint/lib/rules/line-comment-position.js +1 -1
- data/node_modules/eslint/lib/rules/lines-around-directive.js +2 -2
- data/node_modules/eslint/lib/rules/max-depth.js +1 -1
- data/node_modules/eslint/lib/rules/max-len.js +3 -3
- data/node_modules/eslint/lib/rules/max-lines.js +3 -3
- data/node_modules/eslint/lib/rules/max-nested-callbacks.js +1 -1
- data/node_modules/eslint/lib/rules/max-params.js +1 -1
- data/node_modules/eslint/lib/rules/max-statements.js +1 -1
- data/node_modules/eslint/lib/rules/multiline-comment-style.js +7 -7
- data/node_modules/eslint/lib/rules/new-cap.js +1 -1
- data/node_modules/eslint/lib/rules/newline-after-var.js +1 -1
- data/node_modules/eslint/lib/rules/newline-before-return.js +1 -1
- data/node_modules/eslint/lib/rules/no-case-declarations.js +13 -1
- data/node_modules/eslint/lib/rules/no-constant-binary-expression.js +7 -8
- data/node_modules/eslint/lib/rules/no-constant-condition.js +18 -7
- data/node_modules/eslint/lib/rules/no-constructor-return.js +2 -2
- data/node_modules/eslint/lib/rules/no-dupe-class-members.js +2 -2
- data/node_modules/eslint/lib/rules/no-else-return.js +1 -1
- data/node_modules/eslint/lib/rules/no-empty-function.js +2 -2
- data/node_modules/eslint/lib/rules/no-empty-static-block.js +1 -1
- data/node_modules/eslint/lib/rules/no-extend-native.js +1 -2
- data/node_modules/eslint/lib/rules/no-extra-semi.js +1 -1
- data/node_modules/eslint/lib/rules/no-fallthrough.js +41 -16
- data/node_modules/eslint/lib/rules/no-implicit-coercion.js +66 -24
- data/node_modules/eslint/lib/rules/no-inner-declarations.js +23 -2
- data/node_modules/eslint/lib/rules/no-invalid-regexp.js +1 -1
- data/node_modules/eslint/lib/rules/no-invalid-this.js +1 -1
- data/node_modules/eslint/lib/rules/no-lone-blocks.js +3 -3
- data/node_modules/eslint/lib/rules/no-loss-of-precision.js +1 -1
- data/node_modules/eslint/lib/rules/no-misleading-character-class.js +225 -69
- data/node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js +1 -1
- data/node_modules/eslint/lib/rules/no-multiple-empty-lines.js +1 -1
- data/node_modules/eslint/lib/rules/no-new-native-nonconstructor.js +1 -1
- data/node_modules/eslint/lib/rules/no-new-symbol.js +8 -1
- data/node_modules/eslint/lib/rules/no-restricted-globals.js +1 -1
- data/node_modules/eslint/lib/rules/no-restricted-imports.js +186 -40
- data/node_modules/eslint/lib/rules/no-restricted-modules.js +2 -2
- data/node_modules/eslint/lib/rules/no-return-await.js +1 -1
- data/node_modules/eslint/lib/rules/no-sequences.js +1 -0
- data/node_modules/eslint/lib/rules/no-this-before-super.js +45 -13
- data/node_modules/eslint/lib/rules/no-trailing-spaces.js +2 -3
- data/node_modules/eslint/lib/rules/no-unneeded-ternary.js +1 -1
- data/node_modules/eslint/lib/rules/no-unsafe-optional-chaining.js +1 -1
- data/node_modules/eslint/lib/rules/no-unused-private-class-members.js +1 -1
- data/node_modules/eslint/lib/rules/no-unused-vars.js +197 -36
- data/node_modules/eslint/lib/rules/no-useless-assignment.js +566 -0
- data/node_modules/eslint/lib/rules/no-useless-backreference.js +1 -1
- data/node_modules/eslint/lib/rules/no-useless-computed-key.js +2 -2
- data/node_modules/eslint/lib/rules/no-useless-return.js +7 -2
- data/node_modules/eslint/lib/rules/object-curly-spacing.js +3 -3
- data/node_modules/eslint/lib/rules/object-property-newline.js +1 -1
- data/node_modules/eslint/lib/rules/one-var.js +5 -5
- data/node_modules/eslint/lib/rules/padded-blocks.js +7 -7
- data/node_modules/eslint/lib/rules/prefer-arrow-callback.js +3 -3
- data/node_modules/eslint/lib/rules/prefer-reflect.js +1 -1
- data/node_modules/eslint/lib/rules/prefer-regex-literals.js +1 -1
- data/node_modules/eslint/lib/rules/prefer-template.js +1 -1
- data/node_modules/eslint/lib/rules/radix.js +2 -2
- data/node_modules/eslint/lib/rules/semi-style.js +1 -1
- data/node_modules/eslint/lib/rules/sort-imports.js +1 -1
- data/node_modules/eslint/lib/rules/sort-keys.js +1 -1
- data/node_modules/eslint/lib/rules/sort-vars.js +1 -1
- data/node_modules/eslint/lib/rules/space-unary-ops.js +1 -1
- data/node_modules/eslint/lib/rules/strict.js +1 -1
- data/node_modules/eslint/lib/rules/use-isnan.js +101 -7
- data/node_modules/eslint/lib/rules/utils/ast-utils.js +16 -7
- data/node_modules/eslint/lib/rules/utils/char-source.js +240 -0
- data/node_modules/eslint/lib/rules/utils/lazy-loading-rule-map.js +1 -1
- data/node_modules/eslint/lib/rules/utils/unicode/index.js +9 -4
- data/node_modules/eslint/lib/rules/yield-star-spacing.js +1 -1
- data/node_modules/eslint/lib/shared/runtime-info.js +1 -0
- data/node_modules/eslint/lib/shared/serialization.js +55 -0
- data/node_modules/eslint/lib/shared/stats.js +30 -0
- data/node_modules/eslint/lib/shared/string-utils.js +9 -11
- data/node_modules/eslint/lib/shared/types.js +35 -1
- data/node_modules/eslint/lib/source-code/index.js +3 -1
- data/node_modules/eslint/lib/source-code/source-code.js +299 -85
- data/node_modules/eslint/lib/source-code/token-store/backward-token-cursor.js +3 -3
- data/node_modules/eslint/lib/source-code/token-store/cursors.js +4 -2
- data/node_modules/eslint/lib/source-code/token-store/forward-token-comment-cursor.js +3 -3
- data/node_modules/eslint/lib/source-code/token-store/forward-token-cursor.js +3 -3
- data/node_modules/eslint/lib/source-code/token-store/index.js +2 -2
- data/node_modules/eslint/lib/unsupported-api.js +3 -5
- data/node_modules/eslint/messages/no-config-found.js +1 -1
- data/node_modules/eslint/messages/plugin-conflict.js +1 -1
- data/node_modules/eslint/messages/plugin-invalid.js +1 -1
- data/node_modules/eslint/messages/plugin-missing.js +1 -1
- data/node_modules/eslint/package.json +32 -29
- data/node_modules/eslint-scope/README.md +23 -2
- data/node_modules/eslint-scope/dist/eslint-scope.cjs +84 -58
- data/node_modules/eslint-scope/lib/index.js +0 -3
- data/node_modules/eslint-scope/lib/pattern-visitor.js +4 -3
- data/node_modules/eslint-scope/lib/referencer.js +13 -11
- data/node_modules/eslint-scope/lib/scope-manager.js +2 -8
- data/node_modules/eslint-scope/lib/scope.js +64 -43
- data/node_modules/eslint-scope/lib/version.js +1 -1
- data/node_modules/eslint-scope/package.json +21 -19
- data/node_modules/eslint-visitor-keys/README.md +1 -1
- data/node_modules/eslint-visitor-keys/package.json +2 -2
- data/node_modules/espree/README.md +1 -1
- data/node_modules/espree/dist/espree.cjs +1 -1
- data/node_modules/espree/lib/version.js +1 -1
- data/node_modules/espree/package.json +18 -20
- data/node_modules/file-entry-cache/LICENSE +1 -1
- data/node_modules/file-entry-cache/README.md +6 -3
- data/node_modules/file-entry-cache/package.json +19 -43
- data/node_modules/flat-cache/README.md +8 -6
- data/node_modules/flat-cache/changelog.md +155 -205
- data/node_modules/flat-cache/package.json +16 -39
- data/node_modules/flat-cache/src/cache.js +22 -26
- data/node_modules/flat-cache/src/del.js +28 -11
- data/node_modules/flat-cache/src/utils.js +39 -41
- data/node_modules/globals/globals.json +25 -0
- data/node_modules/globals/index.d.ts +2074 -3
- data/node_modules/globals/package.json +10 -7
- data/node_modules/globals/readme.md +2 -14
- data/node_modules/keyv/package.json +4 -4
- data/node_modules/keyv/src/index.js +6 -11
- data/node_modules/npm-check-updates/build/cli.js +22 -21
- data/node_modules/npm-check-updates/build/cli.js.map +1 -1
- data/node_modules/npm-check-updates/build/index-5sFb3Tvv.js +66 -0
- data/node_modules/npm-check-updates/build/index-5sFb3Tvv.js.map +1 -0
- data/node_modules/npm-check-updates/build/index-BmUFwMVL.js +6 -0
- data/node_modules/npm-check-updates/build/index-BmUFwMVL.js.map +1 -0
- data/node_modules/npm-check-updates/build/index.d.ts +5 -2
- data/node_modules/npm-check-updates/build/index.js +560 -1
- data/node_modules/npm-check-updates/build/index.js.map +1 -1
- data/node_modules/npm-check-updates/build/package.json +4 -3
- data/node_modules/npm-check-updates/build/src/index.js +1 -1
- data/node_modules/npm-check-updates/build/src/index.js.map +1 -1
- data/node_modules/npm-check-updates/build/src/lib/libnpmconfig/index.js +2 -2
- data/node_modules/npm-check-updates/build/src/lib/libnpmconfig/index.js.map +1 -1
- data/node_modules/npm-check-updates/build/src/package-managers/bun.js +0 -6
- data/node_modules/npm-check-updates/build/src/package-managers/bun.js.map +1 -1
- data/node_modules/npm-check-updates/package.json +4 -3
- data/node_modules/type-fest/index.d.ts +95 -2
- data/node_modules/type-fest/package.json +12 -18
- data/node_modules/type-fest/readme.md +299 -52
- data/node_modules/type-fest/source/async-return-type.d.ts +4 -2
- data/node_modules/type-fest/source/asyncify.d.ts +5 -3
- data/node_modules/type-fest/source/basic.d.ts +21 -43
- data/node_modules/type-fest/{ts41 → source}/camel-case.d.ts +18 -17
- data/node_modules/type-fest/source/camel-cased-properties-deep.d.ts +54 -0
- data/node_modules/type-fest/source/camel-cased-properties.d.ts +36 -0
- data/node_modules/type-fest/source/conditional-except.d.ts +6 -4
- data/node_modules/type-fest/source/conditional-keys.d.ts +5 -1
- data/node_modules/type-fest/source/conditional-pick.d.ts +5 -3
- data/node_modules/type-fest/{ts41 → source}/delimiter-case.d.ts +16 -8
- data/node_modules/type-fest/source/delimiter-cased-properties-deep.d.ts +60 -0
- data/node_modules/type-fest/source/delimiter-cased-properties.d.ts +37 -0
- data/node_modules/type-fest/source/entries.d.ts +8 -3
- data/node_modules/type-fest/source/entry.d.ts +8 -3
- data/node_modules/type-fest/source/exact.d.ts +73 -0
- data/node_modules/type-fest/source/except.d.ts +38 -3
- data/node_modules/type-fest/source/fixed-length-array.d.ts +6 -1
- data/node_modules/type-fest/source/get.d.ts +184 -0
- data/node_modules/type-fest/source/has-optional-keys.d.ts +21 -0
- data/node_modules/type-fest/source/has-required-keys.d.ts +59 -0
- data/node_modules/type-fest/source/includes.d.ts +22 -0
- data/node_modules/type-fest/source/internal.d.ts +59 -0
- data/node_modules/type-fest/source/invariant-of.d.ts +76 -0
- data/node_modules/type-fest/source/iterable-element.d.ts +8 -0
- data/node_modules/type-fest/source/join.d.ts +30 -0
- data/node_modules/type-fest/source/jsonify.d.ts +90 -0
- data/node_modules/type-fest/{ts41 → source}/kebab-case.d.ts +7 -5
- data/node_modules/type-fest/source/kebab-cased-properties-deep.d.ts +47 -0
- data/node_modules/type-fest/source/kebab-cased-properties.d.ts +30 -0
- data/node_modules/type-fest/source/last-array-element.d.ts +28 -0
- data/node_modules/type-fest/source/literal-to-primitive.d.ts +36 -0
- data/node_modules/type-fest/source/literal-union.d.ts +7 -5
- data/node_modules/type-fest/source/merge-exclusive.d.ts +3 -1
- data/node_modules/type-fest/source/merge.d.ts +8 -3
- data/node_modules/type-fest/source/multidimensional-array.d.ts +43 -0
- data/node_modules/type-fest/source/multidimensional-readonly-array.d.ts +47 -0
- data/node_modules/type-fest/source/mutable.d.ts +4 -21
- data/node_modules/type-fest/source/numeric.d.ts +170 -0
- data/node_modules/type-fest/source/observable-like.d.ts +62 -0
- data/node_modules/type-fest/source/opaque.d.ts +45 -3
- data/node_modules/type-fest/source/optional-keys-of.d.ts +38 -0
- data/node_modules/type-fest/source/package-json.d.ts +64 -12
- data/node_modules/type-fest/source/partial-deep.d.ts +57 -16
- data/node_modules/type-fest/source/partial-on-undefined-deep.d.ts +70 -0
- data/node_modules/type-fest/{ts41 → source}/pascal-case.d.ts +6 -4
- data/node_modules/type-fest/source/pascal-cased-properties-deep.d.ts +54 -0
- data/node_modules/type-fest/source/pascal-cased-properties.d.ts +34 -0
- data/node_modules/type-fest/source/primitive.d.ts +13 -0
- data/node_modules/type-fest/source/promisable.d.ts +5 -3
- data/node_modules/type-fest/source/promise-value.d.ts +9 -7
- data/node_modules/type-fest/source/readonly-deep.d.ts +33 -7
- data/node_modules/type-fest/source/readonly-tuple.d.ts +41 -0
- data/node_modules/type-fest/source/remove-index-signature.d.ts +104 -0
- data/node_modules/type-fest/source/replace.d.ts +67 -0
- data/node_modules/type-fest/source/require-all-or-none.d.ts +36 -0
- data/node_modules/type-fest/source/require-at-least-one.d.ts +5 -3
- data/node_modules/type-fest/source/require-exactly-one.d.ts +4 -5
- data/node_modules/type-fest/source/required-keys-of.d.ts +29 -0
- data/node_modules/type-fest/source/schema.d.ts +72 -0
- data/node_modules/type-fest/source/screaming-snake-case.d.ts +33 -0
- data/node_modules/type-fest/source/set-non-nullable.d.ts +35 -0
- data/node_modules/type-fest/source/set-optional.d.ts +12 -11
- data/node_modules/type-fest/source/set-required.d.ts +12 -11
- data/node_modules/type-fest/source/set-return-type.d.ts +3 -1
- data/node_modules/type-fest/source/simplify.d.ts +83 -0
- data/node_modules/type-fest/{ts41 → source}/snake-case.d.ts +7 -4
- data/node_modules/type-fest/source/snake-cased-properties-deep.d.ts +47 -0
- data/node_modules/type-fest/source/snake-cased-properties.d.ts +30 -0
- data/node_modules/type-fest/source/split.d.ts +29 -0
- data/node_modules/type-fest/source/spread.d.ts +85 -0
- data/node_modules/type-fest/source/string-key-of.d.ts +25 -0
- data/node_modules/type-fest/source/stringified.d.ts +3 -1
- data/node_modules/type-fest/source/trim.d.ts +25 -0
- data/node_modules/type-fest/source/tsconfig-json.d.ts +316 -14
- data/node_modules/type-fest/source/typed-array.d.ts +17 -0
- data/node_modules/type-fest/source/union-to-intersection.d.ts +4 -2
- data/node_modules/type-fest/source/value-of.d.ts +3 -1
- data/node_modules/type-fest/source/writable.d.ts +40 -0
- data/package.json +2 -2
- metadata +86 -63
- data/linters/rubocop-2.7.6.yml +0 -86
- data/node_modules/@humanwhocodes/object-schema/tests/merge-strategy.js +0 -66
- data/node_modules/@humanwhocodes/object-schema/tests/object-schema.js +0 -659
- data/node_modules/@humanwhocodes/object-schema/tests/validation-strategy.js +0 -186
- data/node_modules/eslint/conf/config-schema.js +0 -93
- data/node_modules/eslint/lib/cli-engine/formatters/checkstyle.js +0 -60
- data/node_modules/eslint/lib/cli-engine/formatters/compact.js +0 -60
- data/node_modules/eslint/lib/cli-engine/formatters/jslint-xml.js +0 -41
- data/node_modules/eslint/lib/cli-engine/formatters/junit.js +0 -82
- data/node_modules/eslint/lib/cli-engine/formatters/tap.js +0 -95
- data/node_modules/eslint/lib/cli-engine/formatters/unix.js +0 -58
- data/node_modules/eslint/lib/cli-engine/formatters/visualstudio.js +0 -63
- data/node_modules/eslint/lib/cli-engine/xml-escape.js +0 -34
- data/node_modules/eslint/lib/eslint/flat-eslint.js +0 -1155
- data/node_modules/eslint/lib/rule-tester/flat-rule-tester.js +0 -1131
- data/node_modules/eslint/lib/rules/require-jsdoc.js +0 -122
- data/node_modules/eslint/lib/rules/utils/patterns/letters.js +0 -36
- data/node_modules/eslint/lib/rules/valid-jsdoc.js +0 -516
- data/node_modules/eslint/lib/shared/config-validator.js +0 -347
- data/node_modules/eslint/lib/shared/deprecation-warnings.js +0 -58
- data/node_modules/eslint/lib/shared/relative-module-resolver.js +0 -50
- data/node_modules/file-entry-cache/changelog.md +0 -163
- data/node_modules/flat-cache/node_modules/rimraf/CHANGELOG.md +0 -65
- data/node_modules/flat-cache/node_modules/rimraf/LICENSE +0 -15
- data/node_modules/flat-cache/node_modules/rimraf/README.md +0 -101
- data/node_modules/flat-cache/node_modules/rimraf/bin.js +0 -68
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/README.md +0 -378
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/common.js +0 -238
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/glob.js +0 -790
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/LICENSE +0 -15
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/README.md +0 -230
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/minimatch.js +0 -947
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/LICENSE +0 -21
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +0 -129
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +0 -201
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +0 -47
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/node_modules/minimatch/package.json +0 -33
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/package.json +0 -55
- data/node_modules/flat-cache/node_modules/rimraf/node_modules/glob/sync.js +0 -486
- data/node_modules/flat-cache/node_modules/rimraf/package.json +0 -32
- data/node_modules/flat-cache/node_modules/rimraf/rimraf.js +0 -360
- data/node_modules/npm-check-updates/build/index-CI_x-D21.js +0 -593
- data/node_modules/npm-check-updates/build/index-CI_x-D21.js.map +0 -1
- data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js +0 -6
- data/node_modules/npm-check-updates/build/index-Ci8A2QXv.js.map +0 -1
- data/node_modules/npm-check-updates/build/index-DgVn3Gax.js +0 -36
- data/node_modules/npm-check-updates/build/index-DgVn3Gax.js.map +0 -1
- data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.d.ts +0 -6
- data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.js +0 -3
- data/node_modules/npm-check-updates/build/src/types/SpawnPleaseOptions.js.map +0 -1
- data/node_modules/type-fest/base.d.ts +0 -38
- data/node_modules/type-fest/license +0 -9
- data/node_modules/type-fest/source/utilities.d.ts +0 -3
- data/node_modules/type-fest/ts41/index.d.ts +0 -9
@@ -1,13 +1,44 @@
|
|
1
|
+
import type {IsEqual} from './internal';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Filter out keys from an object.
|
5
|
+
|
6
|
+
Returns `never` if `Exclude` is strictly equal to `Key`.
|
7
|
+
Returns `never` if `Key` extends `Exclude`.
|
8
|
+
Returns `Key` otherwise.
|
9
|
+
|
10
|
+
@example
|
11
|
+
```
|
12
|
+
type Filtered = Filter<'foo', 'foo'>;
|
13
|
+
//=> never
|
14
|
+
```
|
15
|
+
|
16
|
+
@example
|
17
|
+
```
|
18
|
+
type Filtered = Filter<'bar', string>;
|
19
|
+
//=> never
|
20
|
+
```
|
21
|
+
|
22
|
+
@example
|
23
|
+
```
|
24
|
+
type Filtered = Filter<'bar', 'foo'>;
|
25
|
+
//=> 'bar'
|
26
|
+
```
|
27
|
+
|
28
|
+
@see {Except}
|
29
|
+
*/
|
30
|
+
type Filter<KeyType, ExcludeType> = IsEqual<KeyType, ExcludeType> extends true ? never : (KeyType extends ExcludeType ? never : KeyType);
|
31
|
+
|
1
32
|
/**
|
2
33
|
Create a type from an object type without certain keys.
|
3
34
|
|
4
35
|
This type is a stricter version of [`Omit`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-5.html#the-omit-helper-type). The `Omit` type does not restrict the omitted keys to be keys present on the given type, while `Except` does. The benefits of a stricter type are avoiding typos and allowing the compiler to pick up on rename refactors automatically.
|
5
36
|
|
6
|
-
|
37
|
+
This type was proposed to the TypeScript team, which declined it, saying they prefer that libraries implement stricter versions of the built-in types ([microsoft/TypeScript#30825](https://github.com/microsoft/TypeScript/issues/30825#issuecomment-523668235)).
|
7
38
|
|
8
39
|
@example
|
9
40
|
```
|
10
|
-
import {Except} from 'type-fest';
|
41
|
+
import type {Except} from 'type-fest';
|
11
42
|
|
12
43
|
type Foo = {
|
13
44
|
a: number;
|
@@ -18,5 +49,9 @@ type Foo = {
|
|
18
49
|
type FooWithoutA = Except<Foo, 'a' | 'c'>;
|
19
50
|
//=> {b: string};
|
20
51
|
```
|
52
|
+
|
53
|
+
@category Object
|
21
54
|
*/
|
22
|
-
export type Except<ObjectType, KeysType extends keyof ObjectType> =
|
55
|
+
export type Except<ObjectType, KeysType extends keyof ObjectType> = {
|
56
|
+
[KeyType in keyof ObjectType as Filter<KeyType, KeysType>]: ObjectType[KeyType];
|
57
|
+
};
|
@@ -13,9 +13,11 @@ Use-cases:
|
|
13
13
|
- Creating a range union (for example, `0 | 1 | 2 | 3 | 4` from the keys of such a type) without having to resort to recursive types.
|
14
14
|
- Creating an array of coordinates with a static length, for example, length of 3 for a 3D vector.
|
15
15
|
|
16
|
+
Note: This type does not prevent out-of-bounds access. Prefer `ReadonlyTuple` unless you need mutability.
|
17
|
+
|
16
18
|
@example
|
17
19
|
```
|
18
|
-
import {FixedLengthArray} from 'type-fest';
|
20
|
+
import type {FixedLengthArray} from 'type-fest';
|
19
21
|
|
20
22
|
type FencingTeam = FixedLengthArray<string, 3>;
|
21
23
|
|
@@ -27,6 +29,9 @@ const homeFencingTeam: FencingTeam = ['George', 'John'];
|
|
27
29
|
guestFencingTeam.push('Sam');
|
28
30
|
//=> error TS2339: Property 'push' does not exist on type 'FencingTeam'
|
29
31
|
```
|
32
|
+
|
33
|
+
@category Array
|
34
|
+
@see ReadonlyTuple
|
30
35
|
*/
|
31
36
|
export type FixedLengthArray<Element, Length extends number, ArrayPrototype = [Element, ...Element[]]> = Pick<
|
32
37
|
ArrayPrototype,
|
@@ -0,0 +1,184 @@
|
|
1
|
+
import type {StringDigit} from '../source/internal';
|
2
|
+
import type {Split} from './split';
|
3
|
+
import type {StringKeyOf} from './string-key-of';
|
4
|
+
|
5
|
+
type GetOptions = {
|
6
|
+
strict?: boolean;
|
7
|
+
};
|
8
|
+
|
9
|
+
/**
|
10
|
+
Like the `Get` type but receives an array of strings as a path parameter.
|
11
|
+
*/
|
12
|
+
type GetWithPath<BaseType, Keys extends readonly string[], Options extends GetOptions = {}> =
|
13
|
+
Keys extends []
|
14
|
+
? BaseType
|
15
|
+
: Keys extends readonly [infer Head, ...infer Tail]
|
16
|
+
? GetWithPath<
|
17
|
+
PropertyOf<BaseType, Extract<Head, string>, Options>,
|
18
|
+
Extract<Tail, string[]>,
|
19
|
+
Options
|
20
|
+
>
|
21
|
+
: never;
|
22
|
+
|
23
|
+
/**
|
24
|
+
Adds `undefined` to `Type` if `strict` is enabled.
|
25
|
+
*/
|
26
|
+
type Strictify<Type, Options extends GetOptions> =
|
27
|
+
Options['strict'] extends true ? Type | undefined : Type;
|
28
|
+
|
29
|
+
/**
|
30
|
+
If `Options['strict']` is `true`, includes `undefined` in the returned type when accessing properties on `Record<string, any>`.
|
31
|
+
|
32
|
+
Known limitations:
|
33
|
+
- Does not include `undefined` in the type on object types with an index signature (for example, `{a: string; [key: string]: string}`).
|
34
|
+
*/
|
35
|
+
type StrictPropertyOf<BaseType, Key extends keyof BaseType, Options extends GetOptions> =
|
36
|
+
Record<string, any> extends BaseType
|
37
|
+
? string extends keyof BaseType
|
38
|
+
? Strictify<BaseType[Key], Options> // Record<string, any>
|
39
|
+
: BaseType[Key] // Record<'a' | 'b', any> (Records with a string union as keys have required properties)
|
40
|
+
: BaseType[Key];
|
41
|
+
|
42
|
+
/**
|
43
|
+
Splits a dot-prop style path into a tuple comprised of the properties in the path. Handles square-bracket notation.
|
44
|
+
|
45
|
+
@example
|
46
|
+
```
|
47
|
+
ToPath<'foo.bar.baz'>
|
48
|
+
//=> ['foo', 'bar', 'baz']
|
49
|
+
|
50
|
+
ToPath<'foo[0].bar.baz'>
|
51
|
+
//=> ['foo', '0', 'bar', 'baz']
|
52
|
+
```
|
53
|
+
*/
|
54
|
+
type ToPath<S extends string> = Split<FixPathSquareBrackets<S>, '.'>;
|
55
|
+
|
56
|
+
/**
|
57
|
+
Replaces square-bracketed dot notation with dots, for example, `foo[0].bar` -> `foo.0.bar`.
|
58
|
+
*/
|
59
|
+
type FixPathSquareBrackets<Path extends string> =
|
60
|
+
Path extends `[${infer Head}]${infer Tail}`
|
61
|
+
? Tail extends `[${string}`
|
62
|
+
? `${Head}.${FixPathSquareBrackets<Tail>}`
|
63
|
+
: `${Head}${FixPathSquareBrackets<Tail>}`
|
64
|
+
: Path extends `${infer Head}[${infer Middle}]${infer Tail}`
|
65
|
+
? `${Head}.${FixPathSquareBrackets<`[${Middle}]${Tail}`>}`
|
66
|
+
: Path;
|
67
|
+
|
68
|
+
/**
|
69
|
+
Returns true if `LongString` is made up out of `Substring` repeated 0 or more times.
|
70
|
+
|
71
|
+
@example
|
72
|
+
```
|
73
|
+
ConsistsOnlyOf<'aaa', 'a'> //=> true
|
74
|
+
ConsistsOnlyOf<'ababab', 'ab'> //=> true
|
75
|
+
ConsistsOnlyOf<'aBa', 'a'> //=> false
|
76
|
+
ConsistsOnlyOf<'', 'a'> //=> true
|
77
|
+
```
|
78
|
+
*/
|
79
|
+
type ConsistsOnlyOf<LongString extends string, Substring extends string> =
|
80
|
+
LongString extends ''
|
81
|
+
? true
|
82
|
+
: LongString extends `${Substring}${infer Tail}`
|
83
|
+
? ConsistsOnlyOf<Tail, Substring>
|
84
|
+
: false;
|
85
|
+
|
86
|
+
/**
|
87
|
+
Convert a type which may have number keys to one with string keys, making it possible to index using strings retrieved from template types.
|
88
|
+
|
89
|
+
@example
|
90
|
+
```
|
91
|
+
type WithNumbers = {foo: string; 0: boolean};
|
92
|
+
type WithStrings = WithStringKeys<WithNumbers>;
|
93
|
+
|
94
|
+
type WithNumbersKeys = keyof WithNumbers;
|
95
|
+
//=> 'foo' | 0
|
96
|
+
type WithStringsKeys = keyof WithStrings;
|
97
|
+
//=> 'foo' | '0'
|
98
|
+
```
|
99
|
+
*/
|
100
|
+
type WithStringKeys<BaseType> = {
|
101
|
+
[Key in StringKeyOf<BaseType>]: UncheckedIndex<BaseType, Key>
|
102
|
+
};
|
103
|
+
|
104
|
+
/**
|
105
|
+
Perform a `T[U]` operation if `T` supports indexing.
|
106
|
+
*/
|
107
|
+
type UncheckedIndex<T, U extends string | number> = [T] extends [Record<string | number, any>] ? T[U] : never;
|
108
|
+
|
109
|
+
/**
|
110
|
+
Get a property of an object or array. Works when indexing arrays using number-literal-strings, for example, `PropertyOf<number[], '0'> = number`, and when indexing objects with number keys.
|
111
|
+
|
112
|
+
Note:
|
113
|
+
- Returns `unknown` if `Key` is not a property of `BaseType`, since TypeScript uses structural typing, and it cannot be guaranteed that extra properties unknown to the type system will exist at runtime.
|
114
|
+
- Returns `undefined` from nullish values, to match the behaviour of most deep-key libraries like `lodash`, `dot-prop`, etc.
|
115
|
+
*/
|
116
|
+
type PropertyOf<BaseType, Key extends string, Options extends GetOptions = {}> =
|
117
|
+
BaseType extends null | undefined
|
118
|
+
? undefined
|
119
|
+
: Key extends keyof BaseType
|
120
|
+
? StrictPropertyOf<BaseType, Key, Options>
|
121
|
+
: BaseType extends [] | [unknown, ...unknown[]]
|
122
|
+
? unknown // It's a tuple, but `Key` did not extend `keyof BaseType`. So the index is out of bounds.
|
123
|
+
: BaseType extends {
|
124
|
+
[n: number]: infer Item;
|
125
|
+
length: number; // Note: This is needed to avoid being too lax with records types using number keys like `{0: string; 1: boolean}`.
|
126
|
+
}
|
127
|
+
? (
|
128
|
+
ConsistsOnlyOf<Key, StringDigit> extends true
|
129
|
+
? Strictify<Item, Options>
|
130
|
+
: unknown
|
131
|
+
)
|
132
|
+
: Key extends keyof WithStringKeys<BaseType>
|
133
|
+
? StrictPropertyOf<WithStringKeys<BaseType>, Key, Options>
|
134
|
+
: unknown;
|
135
|
+
|
136
|
+
// This works by first splitting the path based on `.` and `[...]` characters into a tuple of string keys. Then it recursively uses the head key to get the next property of the current object, until there are no keys left. Number keys extract the item type from arrays, or are converted to strings to extract types from tuples and dictionaries with number keys.
|
137
|
+
/**
|
138
|
+
Get a deeply-nested property from an object using a key path, like Lodash's `.get()` function.
|
139
|
+
|
140
|
+
Use-case: Retrieve a property from deep inside an API response or some other complex object.
|
141
|
+
|
142
|
+
@example
|
143
|
+
```
|
144
|
+
import type {Get} from 'type-fest';
|
145
|
+
import * as lodash from 'lodash';
|
146
|
+
|
147
|
+
const get = <BaseType, Path extends string | readonly string[]>(object: BaseType, path: Path): Get<BaseType, Path> =>
|
148
|
+
lodash.get(object, path);
|
149
|
+
|
150
|
+
interface ApiResponse {
|
151
|
+
hits: {
|
152
|
+
hits: Array<{
|
153
|
+
_id: string
|
154
|
+
_source: {
|
155
|
+
name: Array<{
|
156
|
+
given: string[]
|
157
|
+
family: string
|
158
|
+
}>
|
159
|
+
birthDate: string
|
160
|
+
}
|
161
|
+
}>
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
const getName = (apiResponse: ApiResponse) =>
|
166
|
+
get(apiResponse, 'hits.hits[0]._source.name');
|
167
|
+
//=> Array<{given: string[]; family: string}>
|
168
|
+
|
169
|
+
// Path also supports a readonly array of strings
|
170
|
+
const getNameWithPathArray = (apiResponse: ApiResponse) =>
|
171
|
+
get(apiResponse, ['hits','hits', '0', '_source', 'name'] as const);
|
172
|
+
//=> Array<{given: string[]; family: string}>
|
173
|
+
|
174
|
+
// Strict mode:
|
175
|
+
Get<string[], '3', {strict: true}> //=> string | undefined
|
176
|
+
Get<Record<string, string>, 'foo', {strict: true}> // => string | undefined
|
177
|
+
```
|
178
|
+
|
179
|
+
@category Object
|
180
|
+
@category Array
|
181
|
+
@category Template literal
|
182
|
+
*/
|
183
|
+
export type Get<BaseType, Path extends string | readonly string[], Options extends GetOptions = {}> =
|
184
|
+
GetWithPath<BaseType, Path extends string ? ToPath<Path> : Path, Options>;
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import {OptionalKeysOf} from './optional-keys-of';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Creates a type that represents `true` or `false` depending on whether the given type has any optional fields.
|
5
|
+
|
6
|
+
This is useful when you want to create an API whose behavior depends on the presence or absence of optional fields.
|
7
|
+
|
8
|
+
@example
|
9
|
+
```
|
10
|
+
import type {HasOptionalKeys, OptionalKeysOf} from 'type-fest';
|
11
|
+
|
12
|
+
type UpdateService<Entity extends object> = {
|
13
|
+
removeField: HasOptionalKeys<Entity> extends true
|
14
|
+
? (field: OptionalKeysOf<Entity>) => Promise<void>
|
15
|
+
: never
|
16
|
+
}
|
17
|
+
```
|
18
|
+
|
19
|
+
@category Utilities
|
20
|
+
*/
|
21
|
+
export type HasOptionalKeys<BaseType extends object> = OptionalKeysOf<BaseType> extends never ? false : true;
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import {RequiredKeysOf} from './required-keys-of';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Creates a type that represents `true` or `false` depending on whether the given type has any required fields.
|
5
|
+
|
6
|
+
This is useful when you want to create an API whose behavior depends on the presence or absence of required fields.
|
7
|
+
|
8
|
+
@example
|
9
|
+
```
|
10
|
+
import type {HasRequiredKeys} from 'type-fest';
|
11
|
+
|
12
|
+
type GeneratorOptions<Template extends object> = {
|
13
|
+
prop1: number;
|
14
|
+
prop2: string;
|
15
|
+
} & (HasRequiredKeys<Template> extends true
|
16
|
+
? {template: Template}
|
17
|
+
: {template?: Template});
|
18
|
+
|
19
|
+
interface Template1 {
|
20
|
+
optionalSubParam?: string;
|
21
|
+
}
|
22
|
+
|
23
|
+
interface Template2 {
|
24
|
+
requiredSubParam: string;
|
25
|
+
}
|
26
|
+
|
27
|
+
type Options1 = GeneratorOptions<Template1>;
|
28
|
+
type Options2 = GeneratorOptions<Template2>;
|
29
|
+
|
30
|
+
const optA: Options1 = {
|
31
|
+
prop1: 0,
|
32
|
+
prop2: 'hi'
|
33
|
+
};
|
34
|
+
const optB: Options1 = {
|
35
|
+
prop1: 0,
|
36
|
+
prop2: 'hi',
|
37
|
+
template: {}
|
38
|
+
};
|
39
|
+
const optC: Options1 = {
|
40
|
+
prop1: 0,
|
41
|
+
prop2: 'hi',
|
42
|
+
template: {
|
43
|
+
optionalSubParam: 'optional value'
|
44
|
+
}
|
45
|
+
};
|
46
|
+
|
47
|
+
const optD: Options2 = {
|
48
|
+
prop1: 0,
|
49
|
+
prop2: 'hi',
|
50
|
+
template: {
|
51
|
+
requiredSubParam: 'required value'
|
52
|
+
}
|
53
|
+
};
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
@category Utilities
|
58
|
+
*/
|
59
|
+
export type HasRequiredKeys<BaseType extends object> = RequiredKeysOf<BaseType> extends never ? false : true;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import type {IsEqual} from './internal';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Returns a boolean for whether the given array includes the given item.
|
5
|
+
|
6
|
+
This can be useful if another type wants to make a decision based on whether the array includes that item.
|
7
|
+
|
8
|
+
@example
|
9
|
+
```
|
10
|
+
import type {Includes} from 'type-fest';
|
11
|
+
|
12
|
+
type hasRed<array extends any[]> = Includes<array, 'red'>;
|
13
|
+
```
|
14
|
+
|
15
|
+
@category Array
|
16
|
+
*/
|
17
|
+
export type Includes<Value extends readonly any[], Item> =
|
18
|
+
Value extends readonly [Value[0], ...infer rest]
|
19
|
+
? IsEqual<Value[0], Item> extends true
|
20
|
+
? true
|
21
|
+
: Includes<rest, Item>
|
22
|
+
: false;
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import type {Primitive} from './primitive';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Returns a boolean for whether the two given types are equal.
|
5
|
+
|
6
|
+
@link https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
|
7
|
+
@link https://stackoverflow.com/questions/68961864/how-does-the-equals-work-in-typescript/68963796#68963796
|
8
|
+
*/
|
9
|
+
export type IsEqual<T, U> =
|
10
|
+
(<G>() => G extends T ? 1 : 2) extends
|
11
|
+
(<G>() => G extends U ? 1 : 2)
|
12
|
+
? true
|
13
|
+
: false;
|
14
|
+
|
15
|
+
/**
|
16
|
+
Infer the length of the given array `<T>`.
|
17
|
+
|
18
|
+
@link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
|
19
|
+
*/
|
20
|
+
type TupleLength<T extends readonly unknown[]> = T extends {readonly length: infer L} ? L : never;
|
21
|
+
|
22
|
+
/**
|
23
|
+
Create a tuple type of the given length `<L>`.
|
24
|
+
|
25
|
+
@link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
|
26
|
+
*/
|
27
|
+
type BuildTuple<L extends number, T extends readonly unknown[] = []> = T extends {readonly length: L}
|
28
|
+
? T
|
29
|
+
: BuildTuple<L, [...T, unknown]>;
|
30
|
+
|
31
|
+
/**
|
32
|
+
Create a tuple of length `A` and a tuple composed of two other tuples,
|
33
|
+
the inferred tuple `U` and a tuple of length `B`, then extracts the length of tuple `U`.
|
34
|
+
|
35
|
+
@link https://itnext.io/implementing-arithmetic-within-typescripts-type-system-a1ef140a6f6f
|
36
|
+
*/
|
37
|
+
export type Subtract<A extends number, B extends number> = BuildTuple<A> extends [...(infer U), ...BuildTuple<B>]
|
38
|
+
? TupleLength<U>
|
39
|
+
: never;
|
40
|
+
|
41
|
+
/**
|
42
|
+
Matches any primitive, `Date`, or `RegExp` value.
|
43
|
+
*/
|
44
|
+
export type BuiltIns = Primitive | Date | RegExp;
|
45
|
+
|
46
|
+
/**
|
47
|
+
Gets keys from a type. Similar to `keyof` but this one also works for union types.
|
48
|
+
|
49
|
+
The reason a simple `keyof Union` does not work is because `keyof` always returns the accessible keys of a type. In the case of a union, that will only be the common keys.
|
50
|
+
|
51
|
+
@link https://stackoverflow.com/a/49402091
|
52
|
+
*/
|
53
|
+
export type KeysOfUnion<T> = T extends T ? keyof T : never;
|
54
|
+
|
55
|
+
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';
|
56
|
+
|
57
|
+
export type WordSeparators = '-' | '_' | ' ';
|
58
|
+
|
59
|
+
export type StringDigit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import type {Opaque} from './opaque';
|
2
|
+
|
3
|
+
/**
|
4
|
+
Create an [invariant type](https://basarat.gitbook.io/typescript/type-system/type-compatibility#footnote-invariance), which is a type that does not accept supertypes and subtypes.
|
5
|
+
|
6
|
+
Use-case:
|
7
|
+
- Prevent runtime errors that may occur due to assigning subtypes to supertypes.
|
8
|
+
- Improve type signature of object methods like [`Object.keys()` or `Object.entries()`](https://github.com/microsoft/TypeScript/pull/12253#issuecomment-263132208) by sealing the object type.
|
9
|
+
|
10
|
+
@example
|
11
|
+
```
|
12
|
+
import type {InvariantOf} from 'type-fest';
|
13
|
+
|
14
|
+
class Animal {
|
15
|
+
constructor(public name: string){}
|
16
|
+
}
|
17
|
+
|
18
|
+
class Cat extends Animal {
|
19
|
+
meow() {}
|
20
|
+
}
|
21
|
+
|
22
|
+
let animalArray: Animal[] = [animal];
|
23
|
+
let catArray: Cat[] = [cat];
|
24
|
+
|
25
|
+
animalArray = catArray; // Okay if covariant
|
26
|
+
animalArray.push(new Animal('another animal')); // Pushed an animal into catArray
|
27
|
+
catArray.forEach(c => c.meow()); // Allowed but, error at runtime
|
28
|
+
|
29
|
+
let invariantAnimalArray: InvariantOf<Animal>[] = [animal] as InvariantOf<Animal>[];
|
30
|
+
let invariantCatArray: InvariantOf<Cat>[] = [cat] as InvariantOf<Cat>[];
|
31
|
+
|
32
|
+
invariantAnimalArray = invariantCatArray; // Error: Type 'InvariantOf<Cat>[]' is not assignable to type 'InvariantOf<Animal>[]'.
|
33
|
+
```
|
34
|
+
|
35
|
+
@example
|
36
|
+
```
|
37
|
+
import type {InvariantOf} from 'type-fest';
|
38
|
+
|
39
|
+
// In covariance (default)
|
40
|
+
|
41
|
+
interface FooBar {
|
42
|
+
foo: number;
|
43
|
+
bar: string
|
44
|
+
}
|
45
|
+
|
46
|
+
interface FooBarBaz extends FooBar {
|
47
|
+
baz: boolean
|
48
|
+
}
|
49
|
+
|
50
|
+
declare const fooBar: FooBar
|
51
|
+
declare const fooBarBaz: FooBarBaz
|
52
|
+
|
53
|
+
function keyOfFooBar(fooBar: FooBar) {
|
54
|
+
return Object.keys(fooBar) as (keyof FooBar)[]
|
55
|
+
}
|
56
|
+
|
57
|
+
keyOfFooBar(fooBar) //=> (keyof FooBar)[]
|
58
|
+
keyOfFooBar(fooBarBaz) //=> (keyof FooBar)[] but, (keyof FooBarBaz)[] at runtime
|
59
|
+
|
60
|
+
// In invariance
|
61
|
+
|
62
|
+
export function invariantOf<Type>(value: Type): InvariantOf<Type> {
|
63
|
+
return value as InvariantOf<Type>;
|
64
|
+
}
|
65
|
+
|
66
|
+
function keyOfInvariantFooBar(fooBar: InvariantOf<FooBar>) {
|
67
|
+
return Object.keys(fooBar) as (keyof FooBar)[]
|
68
|
+
}
|
69
|
+
|
70
|
+
keyOfInvariantFooBar(invariantOf(fooBar)); // (keyof FooBar)[]
|
71
|
+
keyOfInvariantFooBar(invariantOf(fooBarBaz)); // Error: Argument of type 'InvariantOf<FooBarBaz>' is not assignable to parameter of type 'InvariantOf<FooBar>'.
|
72
|
+
```
|
73
|
+
|
74
|
+
@category Type
|
75
|
+
*/
|
76
|
+
export type InvariantOf<Type> = Opaque<Type, (argument: Type) => Type>;
|
@@ -9,6 +9,8 @@ Here is an example of `IterableElement` in action with a generator function:
|
|
9
9
|
|
10
10
|
@example
|
11
11
|
```
|
12
|
+
import type {IterableElement} from 'type-fest';
|
13
|
+
|
12
14
|
function * iAmGenerator() {
|
13
15
|
yield 1;
|
14
16
|
yield 2;
|
@@ -21,6 +23,8 @@ And here is an example with an async generator:
|
|
21
23
|
|
22
24
|
@example
|
23
25
|
```
|
26
|
+
import type {IterableElement} from 'type-fest';
|
27
|
+
|
24
28
|
async function * iAmGeneratorAsync() {
|
25
29
|
yield 'hi';
|
26
30
|
yield true;
|
@@ -35,8 +39,12 @@ An example with an array of strings:
|
|
35
39
|
|
36
40
|
@example
|
37
41
|
```
|
42
|
+
import type {IterableElement} from 'type-fest';
|
43
|
+
|
38
44
|
type MeString = IterableElement<string[]>
|
39
45
|
```
|
46
|
+
|
47
|
+
@category Iterable
|
40
48
|
*/
|
41
49
|
export type IterableElement<TargetIterable> =
|
42
50
|
TargetIterable extends Iterable<infer ElementType> ?
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/**
|
2
|
+
Join an array of strings and/or numbers using the given string as a delimiter.
|
3
|
+
|
4
|
+
Use-case: Defining key paths in a nested object. For example, for dot-notation fields in MongoDB queries.
|
5
|
+
|
6
|
+
@example
|
7
|
+
```
|
8
|
+
import type {Join} from 'type-fest';
|
9
|
+
|
10
|
+
// Mixed (strings & numbers) items; result is: 'foo.0.baz'
|
11
|
+
const path: Join<['foo', 0, 'baz'], '.'> = ['foo', 0, 'baz'].join('.');
|
12
|
+
|
13
|
+
// Only string items; result is: 'foo.bar.baz'
|
14
|
+
const path: Join<['foo', 'bar', 'baz'], '.'> = ['foo', 'bar', 'baz'].join('.');
|
15
|
+
|
16
|
+
// Only number items; result is: '1.2.3'
|
17
|
+
const path: Join<[1, 2, 3], '.'> = [1, 2, 3].join('.');
|
18
|
+
```
|
19
|
+
|
20
|
+
@category Array
|
21
|
+
@category Template literal
|
22
|
+
*/
|
23
|
+
export type Join<
|
24
|
+
Strings extends Array<string | number>,
|
25
|
+
Delimiter extends string,
|
26
|
+
> = Strings extends [] ? '' :
|
27
|
+
Strings extends [string | number] ? `${Strings[0]}` :
|
28
|
+
// @ts-expect-error `Rest` is inferred as `unknown` here: https://github.com/microsoft/TypeScript/issues/45281
|
29
|
+
Strings extends [string | number, ...infer Rest] ? `${Strings[0]}${Delimiter}${Join<Rest, Delimiter>}` :
|
30
|
+
string;
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import type {JsonPrimitive, JsonValue} from './basic';
|
2
|
+
import {Finite, NegativeInfinity, PositiveInfinity} from './numeric';
|
3
|
+
import {TypedArray} from './typed-array';
|
4
|
+
|
5
|
+
// Note: The return value has to be `any` and not `unknown` so it can match `void`.
|
6
|
+
type NotJsonable = ((...args: any[]) => any) | undefined | symbol;
|
7
|
+
|
8
|
+
/**
|
9
|
+
Transform a type to one that is assignable to the `JsonValue` type.
|
10
|
+
|
11
|
+
This includes:
|
12
|
+
1. Transforming JSON `interface` to a `type` that is assignable to `JsonValue`.
|
13
|
+
2. Transforming non-JSON value that is *jsonable* to a type that is assignable to `JsonValue`, where *jsonable* means the non-JSON value implements the `.toJSON()` method that returns a value that is assignable to `JsonValue`.
|
14
|
+
|
15
|
+
@remarks
|
16
|
+
|
17
|
+
An interface cannot be structurally compared to `JsonValue` because an interface can be re-opened to add properties that may not be satisfy `JsonValue`.
|
18
|
+
|
19
|
+
@example
|
20
|
+
```
|
21
|
+
import type {Jsonify} from 'type-fest';
|
22
|
+
|
23
|
+
interface Geometry {
|
24
|
+
type: 'Point' | 'Polygon';
|
25
|
+
coordinates: [number, number];
|
26
|
+
}
|
27
|
+
|
28
|
+
const point: Geometry = {
|
29
|
+
type: 'Point',
|
30
|
+
coordinates: [1, 1]
|
31
|
+
};
|
32
|
+
|
33
|
+
const problemFn = (data: JsonValue) => {
|
34
|
+
// Does something with data
|
35
|
+
};
|
36
|
+
|
37
|
+
problemFn(point); // Error: type Geometry is not assignable to parameter of type JsonValue because it is an interface
|
38
|
+
|
39
|
+
const fixedFn = <T>(data: Jsonify<T>) => {
|
40
|
+
// Does something with data
|
41
|
+
};
|
42
|
+
|
43
|
+
fixedFn(point); // Good: point is assignable. Jsonify<T> transforms Geometry into value assignable to JsonValue
|
44
|
+
fixedFn(new Date()); // Error: As expected, Date is not assignable. Jsonify<T> cannot transforms Date into value assignable to JsonValue
|
45
|
+
```
|
46
|
+
|
47
|
+
Non-JSON values such as `Date` implement `.toJSON()`, so they can be transformed to a value assignable to `JsonValue`:
|
48
|
+
|
49
|
+
@example
|
50
|
+
```
|
51
|
+
import type {Jsonify} from 'type-fest';
|
52
|
+
|
53
|
+
const time = {
|
54
|
+
timeValue: new Date()
|
55
|
+
};
|
56
|
+
|
57
|
+
// `Jsonify<typeof time>` is equivalent to `{timeValue: string}`
|
58
|
+
const timeJson = JSON.parse(JSON.stringify(time)) as Jsonify<typeof time>;
|
59
|
+
```
|
60
|
+
|
61
|
+
@link https://github.com/Microsoft/TypeScript/issues/1897#issuecomment-710744173
|
62
|
+
|
63
|
+
@category JSON
|
64
|
+
*/
|
65
|
+
type Jsonify<T> =
|
66
|
+
// Check if there are any non-JSONable types represented in the union.
|
67
|
+
// Note: The use of tuples in this first condition side-steps distributive conditional types
|
68
|
+
// (see https://github.com/microsoft/TypeScript/issues/29368#issuecomment-453529532)
|
69
|
+
[Extract<T, NotJsonable | bigint>] extends [never]
|
70
|
+
? T extends PositiveInfinity | NegativeInfinity ? null
|
71
|
+
: T extends JsonPrimitive ? T // Primitive is acceptable
|
72
|
+
: T extends object
|
73
|
+
// Any object with toJSON is special case
|
74
|
+
? T extends {toJSON(): infer J} ? (() => J) extends (() => JsonValue) // Is J assignable to JsonValue?
|
75
|
+
? J // Then T is Jsonable and its Jsonable value is J
|
76
|
+
: never // Not Jsonable because its toJSON() method does not return JsonValue
|
77
|
+
// Instanced primitives are objects
|
78
|
+
: T extends Number ? number
|
79
|
+
: T extends String ? string
|
80
|
+
: T extends Boolean ? boolean
|
81
|
+
: T extends Map<any, any> | Set<any> ? {}
|
82
|
+
: T extends TypedArray ? Record<string, number>
|
83
|
+
: T extends any[]
|
84
|
+
? {[I in keyof T]: T[I] extends NotJsonable ? null : Jsonify<T[I]>}
|
85
|
+
: {[P in keyof T as P extends symbol ? never
|
86
|
+
: T[P] extends NotJsonable ? never
|
87
|
+
: P
|
88
|
+
]: Jsonify<Required<T>[P]>} // Recursive call for its children
|
89
|
+
: never // Otherwise any other non-object is removed
|
90
|
+
: never; // Otherwise non-JSONable type union was found not empty
|