eslint-plugin-typefest 1.2.1 → 1.2.3
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/README.md +6 -0
- package/dist/_internal/rule-catalog.d.ts.map +1 -1
- package/dist/_internal/rule-catalog.js +6 -0
- package/dist/_internal/rule-catalog.js.map +1 -1
- package/dist/_internal/rules-registry.d.ts.map +1 -1
- package/dist/_internal/rules-registry.js +12 -0
- package/dist/_internal/rules-registry.js.map +1 -1
- package/dist/plugin.cjs +486 -52
- package/dist/plugin.cjs.map +4 -4
- package/dist/rules/prefer-ts-extras-assert-never.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-assert-never.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-assert-never.js +116 -0
- package/dist/rules/prefer-ts-extras-assert-never.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-property-defined.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-property-defined.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-property-defined.js +160 -0
- package/dist/rules/prefer-ts-extras-is-property-defined.js.map +1 -0
- package/dist/rules/prefer-ts-extras-is-property-present.d.ts +13 -0
- package/dist/rules/prefer-ts-extras-is-property-present.d.ts.map +1 -0
- package/dist/rules/prefer-ts-extras-is-property-present.js +114 -0
- package/dist/rules/prefer-ts-extras-is-property-present.js.map +1 -0
- package/dist/rules/prefer-type-fest-absolute.d.ts +13 -0
- package/dist/rules/prefer-type-fest-absolute.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-absolute.js +67 -0
- package/dist/rules/prefer-type-fest-absolute.js.map +1 -0
- package/dist/rules/prefer-type-fest-non-nullable-deep.d.ts +13 -0
- package/dist/rules/prefer-type-fest-non-nullable-deep.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-non-nullable-deep.js +58 -0
- package/dist/rules/prefer-type-fest-non-nullable-deep.js.map +1 -0
- package/dist/rules/prefer-type-fest-union-length.d.ts +13 -0
- package/dist/rules/prefer-type-fest-union-length.d.ts.map +1 -0
- package/dist/rules/prefer-type-fest-union-length.js +75 -0
- package/dist/rules/prefer-type-fest-union-length.js.map +1 -0
- package/docs/rules/prefer-ts-extras-assert-never.md +112 -0
- package/docs/rules/prefer-ts-extras-is-property-defined.md +119 -0
- package/docs/rules/prefer-ts-extras-is-property-present.md +118 -0
- package/docs/rules/prefer-type-fest-absolute.md +99 -0
- package/docs/rules/prefer-type-fest-non-nullable-deep.md +105 -0
- package/docs/rules/prefer-type-fest-union-length.md +100 -0
- package/docs/rules/presets/all.md +6 -0
- package/docs/rules/presets/experimental.md +6 -0
- package/docs/rules/presets/index.md +6 -0
- package/docs/rules/presets/minimal.md +2 -0
- package/docs/rules/presets/recommended-type-checked.md +6 -0
- package/docs/rules/presets/recommended.md +6 -0
- package/docs/rules/presets/strict.md +6 -0
- package/docs/rules/presets/ts-extras-type-guards.md +3 -0
- package/docs/rules/presets/type-fest-types.md +3 -0
- package/package.json +24 -20
package/dist/plugin.cjs
CHANGED
|
@@ -34,13 +34,13 @@ __export(plugin_exports, {
|
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(plugin_exports);
|
|
36
36
|
var import_parser3 = __toESM(require("@typescript-eslint/parser"), 1);
|
|
37
|
-
var
|
|
37
|
+
var import_ts_extras43 = require("ts-extras");
|
|
38
38
|
|
|
39
39
|
// package.json
|
|
40
40
|
var package_default = {
|
|
41
41
|
$schema: "https://www.schemastore.org/package.json",
|
|
42
42
|
name: "eslint-plugin-typefest",
|
|
43
|
-
version: "1.2.
|
|
43
|
+
version: "1.2.3",
|
|
44
44
|
private: false,
|
|
45
45
|
description: "ESLint rules for adopting type-fest and ts-extras conventions.",
|
|
46
46
|
keywords: [
|
|
@@ -218,6 +218,7 @@ var package_default = {
|
|
|
218
218
|
"release:verify": "cross-env NODE_OPTIONS= npm run build && cross-env NODE_OPTIONS= npm run lint:nocache && cross-env NODE_OPTIONS= npm run typecheck && cross-env NODE_OPTIONS= VITEST_TYPECHECK=false npm run test && cross-env NODE_OPTIONS= npm run sync:readme-rules-table && cross-env NODE_OPTIONS= npm run sync:presets-rules-matrix && cross-env NODE_OPTIONS= npm run docs:check-links && cross-env NODE_OPTIONS= npm run lint:package:strict",
|
|
219
219
|
"remark:fix": 'remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail --quiet --output -- "*.{md,mdx}" "docs/**/*.{md,mdx}"',
|
|
220
220
|
"remark:test-config": 'remark --rc-path .remarkrc.mjs --silently-ignore --ignore-path .remarkignore --frail "README.md"',
|
|
221
|
+
size: "size-limit",
|
|
221
222
|
"sync:node-version-files": "node scripts/sync-node-version-files.mjs",
|
|
222
223
|
"sync:peer-eslint-range": "node scripts/sync-peer-eslint-range.mjs",
|
|
223
224
|
"sync:presets-rules-matrix": "node scripts/sync-presets-rules-matrix.mjs",
|
|
@@ -259,19 +260,19 @@ var package_default = {
|
|
|
259
260
|
"@typescript-eslint/parser": "^8.58.2",
|
|
260
261
|
"@typescript-eslint/type-utils": "^8.58.2",
|
|
261
262
|
"@typescript-eslint/utils": "^8.58.2",
|
|
262
|
-
"ts-extras": "^0.
|
|
263
|
-
"type-fest": "^5.
|
|
263
|
+
"ts-extras": "^1.0.0",
|
|
264
|
+
"type-fest": "^5.6.0"
|
|
264
265
|
},
|
|
265
266
|
devDependencies: {
|
|
266
267
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
267
268
|
"@csstools/stylelint-formatter-github": "^2.0.0",
|
|
268
269
|
"@docusaurus/eslint-plugin": "^3.10.0",
|
|
269
270
|
"@double-great/remark-lint-alt-text": "^1.1.1",
|
|
270
|
-
"@double-great/stylelint-a11y": "^3.4.
|
|
271
|
+
"@double-great/stylelint-a11y": "^3.4.10",
|
|
271
272
|
"@eslint-community/eslint-plugin-eslint-comments": "^4.7.1",
|
|
272
273
|
"@eslint-react/eslint-plugin": "^4.2.3",
|
|
273
274
|
"@eslint/config-helpers": "^0.5.5",
|
|
274
|
-
"@eslint/config-inspector": "^
|
|
275
|
+
"@eslint/config-inspector": "^2.0.0",
|
|
275
276
|
"@eslint/css": "^1.1.0",
|
|
276
277
|
"@eslint/js": "^10.0.1",
|
|
277
278
|
"@eslint/json": "^1.2.0",
|
|
@@ -293,6 +294,7 @@ var package_default = {
|
|
|
293
294
|
"@secretlint/secretlint-rule-privatekey": "^11.7.1",
|
|
294
295
|
"@secretlint/secretlint-rule-secp256k1-privatekey": "^11.7.1",
|
|
295
296
|
"@secretlint/types": "^11.7.1",
|
|
297
|
+
"@size-limit/file": "^12.1.0",
|
|
296
298
|
"@softonus/prettier-plugin-duplicate-remover": "^1.1.2",
|
|
297
299
|
"@stryker-ignorer/console-all": "^0.3.2",
|
|
298
300
|
"@stryker-mutator/core": "^9.6.1",
|
|
@@ -319,7 +321,7 @@ var package_default = {
|
|
|
319
321
|
"@typescript-eslint/rule-tester": "^8.58.2",
|
|
320
322
|
"@typpi/eslint-plugin-vite": "^1.0.12",
|
|
321
323
|
"@vitest/coverage-v8": "^4.1.4",
|
|
322
|
-
"@vitest/eslint-plugin": "^1.6.
|
|
324
|
+
"@vitest/eslint-plugin": "^1.6.16",
|
|
323
325
|
"@vitest/ui": "^4.1.4",
|
|
324
326
|
actionlint: "^2.0.6",
|
|
325
327
|
"all-contributors-cli": "^6.26.1",
|
|
@@ -329,20 +331,20 @@ var package_default = {
|
|
|
329
331
|
"cross-env": "^10.1.0",
|
|
330
332
|
depcheck: "^1.4.7",
|
|
331
333
|
"detect-secrets": "^1.0.6",
|
|
332
|
-
eslint: "^10.2.
|
|
334
|
+
eslint: "^10.2.1",
|
|
333
335
|
"eslint-config-flat-gitignore": "^2.3.0",
|
|
334
336
|
"eslint-config-prettier": "^10.1.8",
|
|
335
337
|
"eslint-formatter-unix": "^9.0.1",
|
|
336
338
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
337
339
|
"eslint-plugin-array-func": "^5.1.1",
|
|
338
340
|
"eslint-plugin-canonical": "^5.1.3",
|
|
339
|
-
"eslint-plugin-case-police": "^2.2.
|
|
341
|
+
"eslint-plugin-case-police": "^2.2.1",
|
|
340
342
|
"eslint-plugin-comment-length": "^2.3.0",
|
|
341
343
|
"eslint-plugin-copilot": "^1.0.8",
|
|
342
344
|
"eslint-plugin-css-modules": "^2.12.0",
|
|
343
345
|
"eslint-plugin-de-morgan": "^2.1.1",
|
|
344
346
|
"eslint-plugin-depend": "^1.5.0",
|
|
345
|
-
"eslint-plugin-docusaurus-2": "^0.1.
|
|
347
|
+
"eslint-plugin-docusaurus-2": "^0.1.4",
|
|
346
348
|
"eslint-plugin-eslint-plugin": "^7.3.2",
|
|
347
349
|
"eslint-plugin-etc-misc": "^1.0.6",
|
|
348
350
|
"eslint-plugin-file-progress-2": "^5.0.1",
|
|
@@ -374,21 +376,21 @@ var package_default = {
|
|
|
374
376
|
"eslint-plugin-require-jsdoc": "^1.0.4",
|
|
375
377
|
"eslint-plugin-sdl-2": "^1.0.6",
|
|
376
378
|
"eslint-plugin-security": "^4.0.0",
|
|
377
|
-
"eslint-plugin-sonarjs": "^4.0.
|
|
378
|
-
"eslint-plugin-stylelint-2": "^1.0.
|
|
379
|
+
"eslint-plugin-sonarjs": "^4.0.3",
|
|
380
|
+
"eslint-plugin-stylelint-2": "^1.0.14",
|
|
379
381
|
"eslint-plugin-testing-library": "^7.16.2",
|
|
380
382
|
"eslint-plugin-toml": "^1.3.1",
|
|
381
383
|
"eslint-plugin-tsdoc": "^0.5.2",
|
|
382
384
|
"eslint-plugin-tsdoc-require-2": "^1.0.9",
|
|
383
385
|
"eslint-plugin-typedoc": "^1.1.4",
|
|
384
|
-
"eslint-plugin-typefest": "^1.2.
|
|
386
|
+
"eslint-plugin-typefest": "^1.2.1",
|
|
385
387
|
"eslint-plugin-undefined-css-classes": "^0.1.5",
|
|
386
388
|
"eslint-plugin-unicorn": "^64.0.0",
|
|
387
389
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
388
390
|
"eslint-plugin-write-good-comments-2": "^1.0.6",
|
|
389
391
|
"eslint-plugin-yml": "^3.3.1",
|
|
390
392
|
"eslint-rule-benchmark": "^0.8.0",
|
|
391
|
-
"fast-check": "^4.
|
|
393
|
+
"fast-check": "^4.7.0",
|
|
392
394
|
"git-cliff": "^2.12.0",
|
|
393
395
|
"gitleaks-secret-scanner": "^2.1.1",
|
|
394
396
|
globals: "^17.5.0",
|
|
@@ -399,10 +401,10 @@ var package_default = {
|
|
|
399
401
|
leasot: "^14.4.0",
|
|
400
402
|
madge: "^8.0.0",
|
|
401
403
|
"markdown-link-check": "^3.14.2",
|
|
402
|
-
"npm-check-updates": "^21.0.
|
|
404
|
+
"npm-check-updates": "^21.0.2",
|
|
403
405
|
"npm-package-json-lint": "^10.2.1",
|
|
404
406
|
picocolors: "^1.1.1",
|
|
405
|
-
postcss: "^8.5.
|
|
407
|
+
postcss: "^8.5.10",
|
|
406
408
|
"postcss-assets": "^6.0.0",
|
|
407
409
|
"postcss-clamp": "^4.1.0",
|
|
408
410
|
"postcss-combine-duplicated-selectors": "^10.0.3",
|
|
@@ -419,7 +421,7 @@ var package_default = {
|
|
|
419
421
|
"postcss-styled-jsx": "^1.0.1",
|
|
420
422
|
"postcss-styled-syntax": "^0.7.1",
|
|
421
423
|
"postcss-viewport-height-correction": "^1.1.1",
|
|
422
|
-
prettier: "^3.8.
|
|
424
|
+
prettier: "^3.8.3",
|
|
423
425
|
"prettier-plugin-ini": "^1.3.0",
|
|
424
426
|
"prettier-plugin-interpolated-html-tags": "^2.0.1",
|
|
425
427
|
"prettier-plugin-jsdoc": "^1.8.0",
|
|
@@ -540,15 +542,16 @@ var package_default = {
|
|
|
540
542
|
"remark-wiki-link": "^2.0.1",
|
|
541
543
|
rimraf: "^6.1.3",
|
|
542
544
|
secretlint: "^11.7.1",
|
|
545
|
+
"size-limit": "^12.1.0",
|
|
543
546
|
sloc: "^0.3.2",
|
|
544
547
|
"sort-package-json": "^3.6.1",
|
|
545
|
-
stylelint: "^17.
|
|
548
|
+
stylelint: "^17.8.0",
|
|
546
549
|
"stylelint-actions-formatters": "^16.3.1",
|
|
547
550
|
"stylelint-checkstyle-formatter": "^0.1.2",
|
|
548
551
|
"stylelint-codeframe-formatter": "^1.2.0",
|
|
549
552
|
"stylelint-config-alphabetical-order": "^2.0.0",
|
|
550
553
|
"stylelint-config-idiomatic-order": "^10.0.0",
|
|
551
|
-
"stylelint-config-inspector": "^2.
|
|
554
|
+
"stylelint-config-inspector": "^2.1.1",
|
|
552
555
|
"stylelint-config-recess-order": "^7.7.0",
|
|
553
556
|
"stylelint-config-recommended": "^18.0.0",
|
|
554
557
|
"stylelint-config-sass-guidelines": "^13.0.0",
|
|
@@ -572,6 +575,7 @@ var package_default = {
|
|
|
572
575
|
"stylelint-no-unsupported-browser-features": "^8.1.1",
|
|
573
576
|
"stylelint-order": "^8.1.1",
|
|
574
577
|
"stylelint-plugin-defensive-css": "^2.9.0",
|
|
578
|
+
"stylelint-plugin-docusaurus": "^1.0.2",
|
|
575
579
|
"stylelint-plugin-logical-css": "^2.1.0",
|
|
576
580
|
"stylelint-plugin-use-baseline": "^1.4.1",
|
|
577
581
|
"stylelint-prettier": "^5.0.3",
|
|
@@ -583,7 +587,7 @@ var package_default = {
|
|
|
583
587
|
"toml-eslint-parser": "^1.0.3",
|
|
584
588
|
"ts-unused-exports": "^11.0.1",
|
|
585
589
|
typedoc: "^0.28.19",
|
|
586
|
-
typescript: "^6.0.
|
|
590
|
+
typescript: "^6.0.3",
|
|
587
591
|
"typescript-eslint": "^8.58.2",
|
|
588
592
|
typesync: "^0.14.3",
|
|
589
593
|
vfile: "^6.0.3",
|
|
@@ -594,7 +598,7 @@ var package_default = {
|
|
|
594
598
|
"yamllint-js": "^0.2.4"
|
|
595
599
|
},
|
|
596
600
|
peerDependencies: {
|
|
597
|
-
eslint: "^9.0.0 || ^10.2.
|
|
601
|
+
eslint: "^9.0.0 || ^10.2.1",
|
|
598
602
|
typescript: "^5.0.0 || ^6.0.2"
|
|
599
603
|
},
|
|
600
604
|
packageManager: "npm@11.12.1",
|
|
@@ -2385,7 +2389,13 @@ var orderedRuleNames = [
|
|
|
2385
2389
|
"prefer-type-fest-unwrap-tagged",
|
|
2386
2390
|
"prefer-type-fest-value-of",
|
|
2387
2391
|
"prefer-type-fest-writable",
|
|
2388
|
-
"prefer-type-fest-writable-deep"
|
|
2392
|
+
"prefer-type-fest-writable-deep",
|
|
2393
|
+
"prefer-type-fest-absolute",
|
|
2394
|
+
"prefer-type-fest-non-nullable-deep",
|
|
2395
|
+
"prefer-type-fest-union-length",
|
|
2396
|
+
"prefer-ts-extras-assert-never",
|
|
2397
|
+
"prefer-ts-extras-is-property-defined",
|
|
2398
|
+
"prefer-ts-extras-is-property-present"
|
|
2389
2399
|
];
|
|
2390
2400
|
var toRuleCatalogId = (ruleNumber) => `R${String(ruleNumber).padStart(3, "0")}`;
|
|
2391
2401
|
var isTypefestRuleNamePattern2 = (ruleName) => ruleName.startsWith("prefer-");
|
|
@@ -3635,6 +3645,101 @@ var preferTsExtrasAssertErrorRule = createTypedRule({
|
|
|
3635
3645
|
});
|
|
3636
3646
|
var prefer_ts_extras_assert_error_default = preferTsExtrasAssertErrorRule;
|
|
3637
3647
|
|
|
3648
|
+
// dist/rules/prefer-ts-extras-assert-never.js
|
|
3649
|
+
var preferTsExtrasAssertNeverRule = createTypedRule({
|
|
3650
|
+
create(context) {
|
|
3651
|
+
const tsExtrasImports = collectDirectNamedValueImportsFromSource(context.sourceCode, TS_EXTRAS_MODULE_SOURCE);
|
|
3652
|
+
return {
|
|
3653
|
+
VariableDeclaration(node) {
|
|
3654
|
+
if (node.kind !== "const" || node.declarations.length !== 1) {
|
|
3655
|
+
return;
|
|
3656
|
+
}
|
|
3657
|
+
const [declarator] = node.declarations;
|
|
3658
|
+
if (declarator?.id.type !== "Identifier") {
|
|
3659
|
+
return;
|
|
3660
|
+
}
|
|
3661
|
+
const { typeAnnotation } = declarator.id;
|
|
3662
|
+
if (typeAnnotation?.typeAnnotation.type !== "TSNeverKeyword") {
|
|
3663
|
+
return;
|
|
3664
|
+
}
|
|
3665
|
+
const { init } = declarator;
|
|
3666
|
+
if (!init) {
|
|
3667
|
+
return;
|
|
3668
|
+
}
|
|
3669
|
+
const initArgumentText = getFunctionCallArgumentText({
|
|
3670
|
+
argumentNode: init,
|
|
3671
|
+
sourceCode: context.sourceCode
|
|
3672
|
+
});
|
|
3673
|
+
if (initArgumentText === null) {
|
|
3674
|
+
reportWithOptionalFix({
|
|
3675
|
+
context,
|
|
3676
|
+
fix: null,
|
|
3677
|
+
messageId: "preferTsExtrasAssertNever",
|
|
3678
|
+
node
|
|
3679
|
+
});
|
|
3680
|
+
return;
|
|
3681
|
+
}
|
|
3682
|
+
const replacementFix = createSafeValueNodeTextReplacementFix({
|
|
3683
|
+
context,
|
|
3684
|
+
importedName: "assertNever",
|
|
3685
|
+
imports: tsExtrasImports,
|
|
3686
|
+
replacementTextFactory: (replacementName) => `${replacementName}(${initArgumentText})`,
|
|
3687
|
+
reportFixIntent: "suggestion",
|
|
3688
|
+
sourceModuleName: TS_EXTRAS_MODULE_SOURCE,
|
|
3689
|
+
targetNode: node
|
|
3690
|
+
});
|
|
3691
|
+
if (replacementFix === null) {
|
|
3692
|
+
reportWithOptionalFix({
|
|
3693
|
+
context,
|
|
3694
|
+
fix: null,
|
|
3695
|
+
messageId: "preferTsExtrasAssertNever",
|
|
3696
|
+
node
|
|
3697
|
+
});
|
|
3698
|
+
return;
|
|
3699
|
+
}
|
|
3700
|
+
reportWithTypefestPolicy({
|
|
3701
|
+
context,
|
|
3702
|
+
descriptor: {
|
|
3703
|
+
messageId: "preferTsExtrasAssertNever",
|
|
3704
|
+
node,
|
|
3705
|
+
suggest: [
|
|
3706
|
+
{
|
|
3707
|
+
fix: replacementFix,
|
|
3708
|
+
messageId: "suggestTsExtrasAssertNever"
|
|
3709
|
+
}
|
|
3710
|
+
]
|
|
3711
|
+
}
|
|
3712
|
+
});
|
|
3713
|
+
}
|
|
3714
|
+
};
|
|
3715
|
+
},
|
|
3716
|
+
meta: {
|
|
3717
|
+
deprecated: false,
|
|
3718
|
+
docs: {
|
|
3719
|
+
description: "require ts-extras assertNever over manual `const _: never = value` exhaustiveness checks.",
|
|
3720
|
+
frozen: false,
|
|
3721
|
+
recommended: true,
|
|
3722
|
+
requiresTypeChecking: false,
|
|
3723
|
+
typefestConfigs: [
|
|
3724
|
+
"typefest.configs.recommended",
|
|
3725
|
+
"typefest.configs.strict",
|
|
3726
|
+
"typefest.configs.all",
|
|
3727
|
+
"typefest.configs.ts-extras/type-guards"
|
|
3728
|
+
],
|
|
3729
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-ts-extras-assert-never"
|
|
3730
|
+
},
|
|
3731
|
+
hasSuggestions: true,
|
|
3732
|
+
messages: {
|
|
3733
|
+
preferTsExtrasAssertNever: "Prefer `assertNever` from `ts-extras` over a manual `const _: never` exhaustiveness assertion.",
|
|
3734
|
+
suggestTsExtrasAssertNever: "Replace this manual exhaustiveness check with `assertNever(...)` from `ts-extras`."
|
|
3735
|
+
},
|
|
3736
|
+
schema: [],
|
|
3737
|
+
type: "suggestion"
|
|
3738
|
+
},
|
|
3739
|
+
name: "prefer-ts-extras-assert-never"
|
|
3740
|
+
});
|
|
3741
|
+
var prefer_ts_extras_assert_never_default = preferTsExtrasAssertNeverRule;
|
|
3742
|
+
|
|
3638
3743
|
// dist/rules/prefer-ts-extras-assert-present.js
|
|
3639
3744
|
var isNullExpression = (node) => node.type === "Literal" && node.value === null;
|
|
3640
3745
|
var isUndefinedExpression2 = ({ context, node }) => {
|
|
@@ -5354,6 +5459,177 @@ var preferTsExtrasIsPresentRule = createTypedRule({
|
|
|
5354
5459
|
});
|
|
5355
5460
|
var prefer_ts_extras_is_present_default = preferTsExtrasIsPresentRule;
|
|
5356
5461
|
|
|
5462
|
+
// dist/rules/prefer-ts-extras-is-property-defined.js
|
|
5463
|
+
var extractTypeofPropertyDefinedCheck = (typeofSide, stringSide, operator, paramName) => {
|
|
5464
|
+
if (operator !== "!==") {
|
|
5465
|
+
return null;
|
|
5466
|
+
}
|
|
5467
|
+
if (typeofSide.type !== "UnaryExpression" || typeofSide.operator !== "typeof") {
|
|
5468
|
+
return null;
|
|
5469
|
+
}
|
|
5470
|
+
const { argument } = typeofSide;
|
|
5471
|
+
if (argument.type !== "MemberExpression" || argument.computed || argument.object.type !== "Identifier" || argument.object.name !== paramName || argument.property.type !== "Identifier") {
|
|
5472
|
+
return null;
|
|
5473
|
+
}
|
|
5474
|
+
if (stringSide.type !== "Literal" || stringSide.value !== "undefined") {
|
|
5475
|
+
return null;
|
|
5476
|
+
}
|
|
5477
|
+
return argument.property.name;
|
|
5478
|
+
};
|
|
5479
|
+
var extractPropertyDefinedGuardBody = (context, body, paramName) => {
|
|
5480
|
+
if (body.type !== "BinaryExpression") {
|
|
5481
|
+
return null;
|
|
5482
|
+
}
|
|
5483
|
+
const { left, operator, right } = body;
|
|
5484
|
+
if (operator !== "!==" && operator !== "!=") {
|
|
5485
|
+
return null;
|
|
5486
|
+
}
|
|
5487
|
+
const typeofLeftResult = extractTypeofPropertyDefinedCheck(left, right, operator, paramName);
|
|
5488
|
+
if (typeofLeftResult !== null) {
|
|
5489
|
+
return typeofLeftResult;
|
|
5490
|
+
}
|
|
5491
|
+
const typeofRightResult = extractTypeofPropertyDefinedCheck(right, left, operator, paramName);
|
|
5492
|
+
if (typeofRightResult !== null) {
|
|
5493
|
+
return typeofRightResult;
|
|
5494
|
+
}
|
|
5495
|
+
if (left.type === "MemberExpression" && !left.computed && left.object.type === "Identifier" && left.object.name === paramName && left.property.type === "Identifier" && isGlobalUndefinedIdentifier(context, right)) {
|
|
5496
|
+
return left.property.name;
|
|
5497
|
+
}
|
|
5498
|
+
if (right.type === "MemberExpression" && !right.computed && right.object.type === "Identifier" && right.object.name === paramName && right.property.type === "Identifier" && isGlobalUndefinedIdentifier(context, left)) {
|
|
5499
|
+
return right.property.name;
|
|
5500
|
+
}
|
|
5501
|
+
return null;
|
|
5502
|
+
};
|
|
5503
|
+
var preferTsExtrasIsPropertyDefinedRule = createTypedRule({
|
|
5504
|
+
create(context) {
|
|
5505
|
+
const tsExtrasImports = collectDirectNamedValueImportsFromSource(context.sourceCode, TS_EXTRAS_MODULE_SOURCE);
|
|
5506
|
+
return {
|
|
5507
|
+
'CallExpression[callee.type="MemberExpression"][callee.property.type="Identifier"][callee.property.name="filter"]'(node) {
|
|
5508
|
+
const callbackMatch = getSingleParameterExpressionArrowFilterCallback(node);
|
|
5509
|
+
if (!callbackMatch) {
|
|
5510
|
+
return;
|
|
5511
|
+
}
|
|
5512
|
+
const { callback, parameter } = callbackMatch;
|
|
5513
|
+
const propName = extractPropertyDefinedGuardBody(context, callback.body, parameter.name);
|
|
5514
|
+
if (propName === null) {
|
|
5515
|
+
return;
|
|
5516
|
+
}
|
|
5517
|
+
reportWithOptionalFix({
|
|
5518
|
+
context,
|
|
5519
|
+
fix: createSafeValueNodeTextReplacementFix({
|
|
5520
|
+
context,
|
|
5521
|
+
importedName: "isPropertyDefined",
|
|
5522
|
+
imports: tsExtrasImports,
|
|
5523
|
+
replacementTextFactory: (localName) => `${localName}(${JSON.stringify(propName)})`,
|
|
5524
|
+
reportFixIntent: "autofix",
|
|
5525
|
+
sourceModuleName: TS_EXTRAS_MODULE_SOURCE,
|
|
5526
|
+
targetNode: callback
|
|
5527
|
+
}),
|
|
5528
|
+
messageId: "preferTsExtrasIsPropertyDefined",
|
|
5529
|
+
node: callback
|
|
5530
|
+
});
|
|
5531
|
+
}
|
|
5532
|
+
};
|
|
5533
|
+
},
|
|
5534
|
+
meta: {
|
|
5535
|
+
deprecated: false,
|
|
5536
|
+
docs: {
|
|
5537
|
+
description: "require ts-extras isPropertyDefined in Array.filter callbacks instead of inline property-undefined checks.",
|
|
5538
|
+
frozen: false,
|
|
5539
|
+
recommended: true,
|
|
5540
|
+
requiresTypeChecking: false,
|
|
5541
|
+
typefestConfigs: [
|
|
5542
|
+
"typefest.configs.minimal",
|
|
5543
|
+
"typefest.configs.recommended",
|
|
5544
|
+
"typefest.configs.strict",
|
|
5545
|
+
"typefest.configs.all",
|
|
5546
|
+
"typefest.configs.ts-extras/type-guards"
|
|
5547
|
+
],
|
|
5548
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-ts-extras-is-property-defined"
|
|
5549
|
+
},
|
|
5550
|
+
fixable: "code",
|
|
5551
|
+
messages: {
|
|
5552
|
+
preferTsExtrasIsPropertyDefined: "Prefer `isPropertyDefined` from `ts-extras` over an inline property-undefined filter callback."
|
|
5553
|
+
},
|
|
5554
|
+
schema: [],
|
|
5555
|
+
type: "suggestion"
|
|
5556
|
+
},
|
|
5557
|
+
name: "prefer-ts-extras-is-property-defined"
|
|
5558
|
+
});
|
|
5559
|
+
var prefer_ts_extras_is_property_defined_default = preferTsExtrasIsPropertyDefinedRule;
|
|
5560
|
+
|
|
5561
|
+
// dist/rules/prefer-ts-extras-is-property-present.js
|
|
5562
|
+
var extractPropertyPresentGuardBody = (body, paramName) => {
|
|
5563
|
+
if (body.type !== "BinaryExpression" || body.operator !== "!=") {
|
|
5564
|
+
return null;
|
|
5565
|
+
}
|
|
5566
|
+
const { left, right } = body;
|
|
5567
|
+
if (left.type === "MemberExpression" && !left.computed && left.object.type === "Identifier" && left.object.name === paramName && left.property.type === "Identifier" && right.type === "Literal" && right.value === null) {
|
|
5568
|
+
return left.property.name;
|
|
5569
|
+
}
|
|
5570
|
+
if (right.type === "MemberExpression" && !right.computed && right.object.type === "Identifier" && right.object.name === paramName && right.property.type === "Identifier" && left.type === "Literal" && left.value === null) {
|
|
5571
|
+
return right.property.name;
|
|
5572
|
+
}
|
|
5573
|
+
return null;
|
|
5574
|
+
};
|
|
5575
|
+
var preferTsExtrasIsPropertyPresentRule = createTypedRule({
|
|
5576
|
+
create(context) {
|
|
5577
|
+
const tsExtrasImports = collectDirectNamedValueImportsFromSource(context.sourceCode, TS_EXTRAS_MODULE_SOURCE);
|
|
5578
|
+
return {
|
|
5579
|
+
'CallExpression[callee.type="MemberExpression"][callee.property.type="Identifier"][callee.property.name="filter"]'(node) {
|
|
5580
|
+
const callbackMatch = getSingleParameterExpressionArrowFilterCallback(node);
|
|
5581
|
+
if (!callbackMatch) {
|
|
5582
|
+
return;
|
|
5583
|
+
}
|
|
5584
|
+
const { callback, parameter } = callbackMatch;
|
|
5585
|
+
const propName = extractPropertyPresentGuardBody(callback.body, parameter.name);
|
|
5586
|
+
if (propName === null) {
|
|
5587
|
+
return;
|
|
5588
|
+
}
|
|
5589
|
+
reportWithOptionalFix({
|
|
5590
|
+
context,
|
|
5591
|
+
fix: createSafeValueNodeTextReplacementFix({
|
|
5592
|
+
context,
|
|
5593
|
+
importedName: "isPropertyPresent",
|
|
5594
|
+
imports: tsExtrasImports,
|
|
5595
|
+
replacementTextFactory: (localName) => `${localName}(${JSON.stringify(propName)})`,
|
|
5596
|
+
reportFixIntent: "autofix",
|
|
5597
|
+
sourceModuleName: TS_EXTRAS_MODULE_SOURCE,
|
|
5598
|
+
targetNode: callback
|
|
5599
|
+
}),
|
|
5600
|
+
messageId: "preferTsExtrasIsPropertyPresent",
|
|
5601
|
+
node: callback
|
|
5602
|
+
});
|
|
5603
|
+
}
|
|
5604
|
+
};
|
|
5605
|
+
},
|
|
5606
|
+
meta: {
|
|
5607
|
+
deprecated: false,
|
|
5608
|
+
docs: {
|
|
5609
|
+
description: "require ts-extras isPropertyPresent in Array.filter callbacks instead of inline property-nullish checks.",
|
|
5610
|
+
frozen: false,
|
|
5611
|
+
recommended: true,
|
|
5612
|
+
requiresTypeChecking: false,
|
|
5613
|
+
typefestConfigs: [
|
|
5614
|
+
"typefest.configs.minimal",
|
|
5615
|
+
"typefest.configs.recommended",
|
|
5616
|
+
"typefest.configs.strict",
|
|
5617
|
+
"typefest.configs.all",
|
|
5618
|
+
"typefest.configs.ts-extras/type-guards"
|
|
5619
|
+
],
|
|
5620
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-ts-extras-is-property-present"
|
|
5621
|
+
},
|
|
5622
|
+
fixable: "code",
|
|
5623
|
+
messages: {
|
|
5624
|
+
preferTsExtrasIsPropertyPresent: "Prefer `isPropertyPresent` from `ts-extras` over an inline property-nullish filter callback."
|
|
5625
|
+
},
|
|
5626
|
+
schema: [],
|
|
5627
|
+
type: "suggestion"
|
|
5628
|
+
},
|
|
5629
|
+
name: "prefer-ts-extras-is-property-present"
|
|
5630
|
+
});
|
|
5631
|
+
var prefer_ts_extras_is_property_present_default = preferTsExtrasIsPropertyPresentRule;
|
|
5632
|
+
|
|
5357
5633
|
// dist/rules/prefer-ts-extras-is-safe-integer.js
|
|
5358
5634
|
var preferTsExtrasIsSafeIntegerRule = createTypedRule({
|
|
5359
5635
|
create(context) {
|
|
@@ -6611,8 +6887,59 @@ var preferTsExtrasStringSplitRule = createTypedRule({
|
|
|
6611
6887
|
});
|
|
6612
6888
|
var prefer_ts_extras_string_split_default = preferTsExtrasStringSplitRule;
|
|
6613
6889
|
|
|
6614
|
-
// dist/rules/prefer-type-fest-
|
|
6890
|
+
// dist/rules/prefer-type-fest-absolute.js
|
|
6615
6891
|
var import_ts_extras32 = require("ts-extras");
|
|
6892
|
+
var ABSOLUTE_ALIAS_NAMES = /* @__PURE__ */ new Set([
|
|
6893
|
+
"Abs",
|
|
6894
|
+
"AbsoluteValue"
|
|
6895
|
+
]);
|
|
6896
|
+
var preferTypeFestAbsoluteRule = createTypedRule({
|
|
6897
|
+
create(context) {
|
|
6898
|
+
const typeFestDirectImports = collectDirectNamedImportsFromSource(context.sourceCode, TYPE_FEST_MODULE_SOURCE);
|
|
6899
|
+
return {
|
|
6900
|
+
'TSTypeReference[typeName.type="Identifier"]'(node) {
|
|
6901
|
+
if (node.typeName.type !== "Identifier" || !(0, import_ts_extras32.setHas)(ABSOLUTE_ALIAS_NAMES, node.typeName.name)) {
|
|
6902
|
+
return;
|
|
6903
|
+
}
|
|
6904
|
+
const aliasReplacementFix = createSafeTypeReferenceReplacementFix(node, "Absolute", typeFestDirectImports);
|
|
6905
|
+
reportWithOptionalFix({
|
|
6906
|
+
context,
|
|
6907
|
+
data: { aliasName: node.typeName.name },
|
|
6908
|
+
fix: aliasReplacementFix,
|
|
6909
|
+
messageId: "preferAbsolute",
|
|
6910
|
+
node
|
|
6911
|
+
});
|
|
6912
|
+
}
|
|
6913
|
+
};
|
|
6914
|
+
},
|
|
6915
|
+
meta: {
|
|
6916
|
+
deprecated: false,
|
|
6917
|
+
docs: {
|
|
6918
|
+
description: "require TypeFest `Absolute` over common `Abs` or `AbsoluteValue` aliases.",
|
|
6919
|
+
frozen: false,
|
|
6920
|
+
recommended: true,
|
|
6921
|
+
requiresTypeChecking: false,
|
|
6922
|
+
typefestConfigs: [
|
|
6923
|
+
"typefest.configs.recommended",
|
|
6924
|
+
"typefest.configs.strict",
|
|
6925
|
+
"typefest.configs.all",
|
|
6926
|
+
"typefest.configs.type-fest/types"
|
|
6927
|
+
],
|
|
6928
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-type-fest-absolute"
|
|
6929
|
+
},
|
|
6930
|
+
fixable: "code",
|
|
6931
|
+
messages: {
|
|
6932
|
+
preferAbsolute: "Prefer `Absolute` from type-fest over `{{aliasName}}`."
|
|
6933
|
+
},
|
|
6934
|
+
schema: [],
|
|
6935
|
+
type: "suggestion"
|
|
6936
|
+
},
|
|
6937
|
+
name: "prefer-type-fest-absolute"
|
|
6938
|
+
});
|
|
6939
|
+
var prefer_type_fest_absolute_default = preferTypeFestAbsoluteRule;
|
|
6940
|
+
|
|
6941
|
+
// dist/rules/prefer-type-fest-abstract-constructor.js
|
|
6942
|
+
var import_ts_extras33 = require("ts-extras");
|
|
6616
6943
|
var preferTypeFestAbstractConstructorRule = createTypedRule({
|
|
6617
6944
|
create(context) {
|
|
6618
6945
|
const typeFestDirectImports = collectDirectNamedImportsFromSource(context.sourceCode, TYPE_FEST_MODULE_SOURCE);
|
|
@@ -6622,7 +6949,7 @@ var preferTypeFestAbstractConstructorRule = createTypedRule({
|
|
|
6622
6949
|
if (!node.abstract) {
|
|
6623
6950
|
return;
|
|
6624
6951
|
}
|
|
6625
|
-
const replacementFix = !(0,
|
|
6952
|
+
const replacementFix = !(0, import_ts_extras33.isDefined)(node.typeParameters) && (0, import_ts_extras33.isDefined)(node.returnType) ? createSafeTypeNodeTextReplacementFix(node, "AbstractConstructor", `AbstractConstructor<${sourceCode.getText(node.returnType.typeAnnotation)}, [${(0, import_ts_extras33.arrayJoin)(node.params.map((parameter) => sourceCode.getText(parameter)), ", ")}]>`, typeFestDirectImports) : null;
|
|
6626
6953
|
reportWithOptionalFix({
|
|
6627
6954
|
context,
|
|
6628
6955
|
fix: replacementFix,
|
|
@@ -7309,7 +7636,7 @@ var preferTypeFestConditionalPickRule = createTypedRule({
|
|
|
7309
7636
|
var prefer_type_fest_conditional_pick_default = preferTypeFestConditionalPickRule;
|
|
7310
7637
|
|
|
7311
7638
|
// dist/rules/prefer-type-fest-constructor.js
|
|
7312
|
-
var
|
|
7639
|
+
var import_ts_extras34 = require("ts-extras");
|
|
7313
7640
|
var preferTypeFestConstructorRule = createTypedRule({
|
|
7314
7641
|
create(context) {
|
|
7315
7642
|
const typeFestDirectImports = collectDirectNamedImportsFromSource(context.sourceCode, TYPE_FEST_MODULE_SOURCE);
|
|
@@ -7319,7 +7646,7 @@ var preferTypeFestConstructorRule = createTypedRule({
|
|
|
7319
7646
|
if (node.abstract) {
|
|
7320
7647
|
return;
|
|
7321
7648
|
}
|
|
7322
|
-
const replacementFix = !(0,
|
|
7649
|
+
const replacementFix = !(0, import_ts_extras34.isDefined)(node.typeParameters) && (0, import_ts_extras34.isDefined)(node.returnType) ? createSafeTypeNodeTextReplacementFix(node, "Constructor", `Constructor<${sourceCode.getText(node.returnType.typeAnnotation)}, [${(0, import_ts_extras34.arrayJoin)(node.params.map((parameter) => sourceCode.getText(parameter)), ", ")}]>`, typeFestDirectImports) : null;
|
|
7323
7650
|
reportWithOptionalFix({
|
|
7324
7651
|
context,
|
|
7325
7652
|
fix: replacementFix,
|
|
@@ -7940,14 +8267,14 @@ var preferTypeFestJsonPrimitiveRule = createTypedRule({
|
|
|
7940
8267
|
var prefer_type_fest_json_primitive_default = preferTypeFestJsonPrimitiveRule;
|
|
7941
8268
|
|
|
7942
8269
|
// dist/rules/prefer-type-fest-json-value.js
|
|
7943
|
-
var
|
|
8270
|
+
var import_ts_extras35 = require("ts-extras");
|
|
7944
8271
|
var isStringLikeKeyType = (node) => node.type === "TSStringKeyword" || node.type === "TSLiteralType" && node.literal.type === "Literal" && node.literal.value === "string";
|
|
7945
8272
|
var isRecordLikeUnknownOrAny = (typeNode) => {
|
|
7946
8273
|
if (typeNode.typeName.type !== "Identifier" || typeNode.typeName.name !== "Record" || typeNode.typeArguments?.params.length !== 2) {
|
|
7947
8274
|
return false;
|
|
7948
8275
|
}
|
|
7949
8276
|
const [keyType, valueType] = typeNode.typeArguments.params;
|
|
7950
|
-
return (0,
|
|
8277
|
+
return (0, import_ts_extras35.isDefined)(keyType) && (0, import_ts_extras35.isDefined)(valueType) && isStringLikeKeyType(keyType) && (valueType.type === "TSUnknownKeyword" || valueType.type === "TSAnyKeyword");
|
|
7951
8278
|
};
|
|
7952
8279
|
var preferTypeFestJsonValueRule = createTypedRule({
|
|
7953
8280
|
create(context) {
|
|
@@ -8297,7 +8624,7 @@ var preferTypeFestLessThanRule = createTypedRule({
|
|
|
8297
8624
|
var prefer_type_fest_less_than_default = preferTypeFestLessThanRule;
|
|
8298
8625
|
|
|
8299
8626
|
// dist/rules/prefer-type-fest-literal-union.js
|
|
8300
|
-
var
|
|
8627
|
+
var import_ts_extras36 = require("ts-extras");
|
|
8301
8628
|
var literalUnionFamilies = [
|
|
8302
8629
|
"bigint",
|
|
8303
8630
|
"boolean",
|
|
@@ -8324,7 +8651,7 @@ var isLiteralMemberForFamily = (node, family) => {
|
|
|
8324
8651
|
if (typeof node.literal.value === "bigint") {
|
|
8325
8652
|
return true;
|
|
8326
8653
|
}
|
|
8327
|
-
const literalWithPotentialBigInt = (0,
|
|
8654
|
+
const literalWithPotentialBigInt = (0, import_ts_extras36.safeCastTo)(node.literal);
|
|
8328
8655
|
return typeof literalWithPotentialBigInt.bigint === "string";
|
|
8329
8656
|
}
|
|
8330
8657
|
if (family === "boolean") {
|
|
@@ -8363,7 +8690,7 @@ var getLiteralUnionReplacementText = (sourceCode, node, family) => {
|
|
|
8363
8690
|
if (literalMembers.length === 0) {
|
|
8364
8691
|
return null;
|
|
8365
8692
|
}
|
|
8366
|
-
const literalText = literalMembers.length === 1 ? sourceCode.getText((0,
|
|
8693
|
+
const literalText = literalMembers.length === 1 ? sourceCode.getText((0, import_ts_extras36.arrayFirst)(literalMembers)) : (0, import_ts_extras36.arrayJoin)(literalMembers.map((member) => sourceCode.getText(member)), " | ");
|
|
8367
8694
|
return `LiteralUnion<${literalText}, ${family}>`;
|
|
8368
8695
|
};
|
|
8369
8696
|
var preferTypeFestLiteralUnionRule = createTypedRule({
|
|
@@ -8629,6 +8956,51 @@ var preferTypeFestNonEmptyTupleRule = createTypedRule({
|
|
|
8629
8956
|
});
|
|
8630
8957
|
var prefer_type_fest_non_empty_tuple_default = preferTypeFestNonEmptyTupleRule;
|
|
8631
8958
|
|
|
8959
|
+
// dist/rules/prefer-type-fest-non-nullable-deep.js
|
|
8960
|
+
var preferTypeFestNonNullableDeepRule = createTypedRule({
|
|
8961
|
+
create(context) {
|
|
8962
|
+
const typeFestDirectImports = collectDirectNamedImportsFromSource(context.sourceCode, TYPE_FEST_MODULE_SOURCE);
|
|
8963
|
+
return {
|
|
8964
|
+
'TSTypeReference[typeName.type="Identifier"]'(node) {
|
|
8965
|
+
if (node.typeName.type !== "Identifier" || node.typeName.name !== "DeepNonNullable") {
|
|
8966
|
+
return;
|
|
8967
|
+
}
|
|
8968
|
+
const aliasReplacementFix = createSafeTypeReferenceReplacementFix(node, "NonNullableDeep", typeFestDirectImports);
|
|
8969
|
+
reportWithOptionalFix({
|
|
8970
|
+
context,
|
|
8971
|
+
fix: aliasReplacementFix,
|
|
8972
|
+
messageId: "preferNonNullableDeep",
|
|
8973
|
+
node
|
|
8974
|
+
});
|
|
8975
|
+
}
|
|
8976
|
+
};
|
|
8977
|
+
},
|
|
8978
|
+
meta: {
|
|
8979
|
+
deprecated: false,
|
|
8980
|
+
docs: {
|
|
8981
|
+
description: "require TypeFest `NonNullableDeep` over `DeepNonNullable` aliases.",
|
|
8982
|
+
frozen: false,
|
|
8983
|
+
recommended: true,
|
|
8984
|
+
requiresTypeChecking: false,
|
|
8985
|
+
typefestConfigs: [
|
|
8986
|
+
"typefest.configs.recommended",
|
|
8987
|
+
"typefest.configs.strict",
|
|
8988
|
+
"typefest.configs.all",
|
|
8989
|
+
"typefest.configs.type-fest/types"
|
|
8990
|
+
],
|
|
8991
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-type-fest-non-nullable-deep"
|
|
8992
|
+
},
|
|
8993
|
+
fixable: "code",
|
|
8994
|
+
messages: {
|
|
8995
|
+
preferNonNullableDeep: "Prefer `NonNullableDeep` from type-fest over `DeepNonNullable`."
|
|
8996
|
+
},
|
|
8997
|
+
schema: [],
|
|
8998
|
+
type: "suggestion"
|
|
8999
|
+
},
|
|
9000
|
+
name: "prefer-type-fest-non-nullable-deep"
|
|
9001
|
+
});
|
|
9002
|
+
var prefer_type_fest_non_nullable_deep_default = preferTypeFestNonNullableDeepRule;
|
|
9003
|
+
|
|
8632
9004
|
// dist/rules/prefer-type-fest-omit-index-signature.js
|
|
8633
9005
|
var omitIndexSignatureAliasReplacements = {
|
|
8634
9006
|
RemoveIndexSignature: "OmitIndexSignature"
|
|
@@ -8687,7 +9059,7 @@ var preferTypeFestOmitIndexSignatureRule = createTypedRule({
|
|
|
8687
9059
|
var prefer_type_fest_omit_index_signature_default = preferTypeFestOmitIndexSignatureRule;
|
|
8688
9060
|
|
|
8689
9061
|
// dist/rules/prefer-type-fest-optional.js
|
|
8690
|
-
var
|
|
9062
|
+
var import_ts_extras37 = require("ts-extras");
|
|
8691
9063
|
var OPTIONAL_TYPE_NAME = "Optional";
|
|
8692
9064
|
var EXCLUDE_TYPE_NAME = "Exclude";
|
|
8693
9065
|
var NON_NULLABLE_TYPE_NAME = "NonNullable";
|
|
@@ -8741,8 +9113,8 @@ var preferTypeFestOptionalRule = createTypedRule({
|
|
|
8741
9113
|
if (node.types.length !== 2) {
|
|
8742
9114
|
return;
|
|
8743
9115
|
}
|
|
8744
|
-
const firstMember = (0,
|
|
8745
|
-
const secondMember = (0,
|
|
9116
|
+
const firstMember = (0, import_ts_extras37.arrayFirst)(node.types);
|
|
9117
|
+
const secondMember = (0, import_ts_extras37.arrayAt)(node.types, 1);
|
|
8746
9118
|
if (!firstMember || !secondMember) {
|
|
8747
9119
|
return;
|
|
8748
9120
|
}
|
|
@@ -8916,16 +9288,16 @@ var preferTypeFestPartialDeepRule = createTypedRule({
|
|
|
8916
9288
|
var prefer_type_fest_partial_deep_default = preferTypeFestPartialDeepRule;
|
|
8917
9289
|
|
|
8918
9290
|
// dist/rules/prefer-type-fest-pick-index-signature.js
|
|
8919
|
-
var
|
|
9291
|
+
var import_ts_extras38 = require("ts-extras");
|
|
8920
9292
|
var isEmptyObjectTypeLiteral = (node) => node.type === "TSTypeLiteral" && node.members.length === 0;
|
|
8921
9293
|
var hasPickIndexSignatureMappedTypeShape = (node) => {
|
|
8922
9294
|
if (node.key.type !== "Identifier") {
|
|
8923
9295
|
return false;
|
|
8924
9296
|
}
|
|
8925
|
-
if (node.readonly !== false && (0,
|
|
9297
|
+
if (node.readonly !== false && (0, import_ts_extras38.isDefined)(node.readonly)) {
|
|
8926
9298
|
return false;
|
|
8927
9299
|
}
|
|
8928
|
-
if (node.optional !== false && (0,
|
|
9300
|
+
if (node.optional !== false && (0, import_ts_extras38.isDefined)(node.optional)) {
|
|
8929
9301
|
return false;
|
|
8930
9302
|
}
|
|
8931
9303
|
const constraint = node.constraint;
|
|
@@ -9063,7 +9435,7 @@ var preferTypeFestPrimitiveRule = createTypedRule({
|
|
|
9063
9435
|
var prefer_type_fest_primitive_default = preferTypeFestPrimitiveRule;
|
|
9064
9436
|
|
|
9065
9437
|
// dist/rules/prefer-type-fest-promisable.js
|
|
9066
|
-
var
|
|
9438
|
+
var import_ts_extras39 = require("ts-extras");
|
|
9067
9439
|
var PROMISABLE_TYPE_NAME = "Promisable";
|
|
9068
9440
|
var PROMISE_TYPE_NAME = "Promise";
|
|
9069
9441
|
var promisableAliasReplacements = {
|
|
@@ -9079,10 +9451,10 @@ var getPromiseInnerType = (node) => {
|
|
|
9079
9451
|
return null;
|
|
9080
9452
|
}
|
|
9081
9453
|
const typeArguments = node.typeArguments?.params;
|
|
9082
|
-
if (!(0,
|
|
9454
|
+
if (!(0, import_ts_extras39.isDefined)(typeArguments)) {
|
|
9083
9455
|
return null;
|
|
9084
9456
|
}
|
|
9085
|
-
return (0,
|
|
9457
|
+
return (0, import_ts_extras39.arrayFirst)(typeArguments) ?? null;
|
|
9086
9458
|
};
|
|
9087
9459
|
var preferTypeFestPromisableRule = createTypedRule({
|
|
9088
9460
|
create(context, [options] = defaultOptions3) {
|
|
@@ -9935,12 +10307,12 @@ var preferTypeFestSimplifyRule = createTypedRule({
|
|
|
9935
10307
|
var prefer_type_fest_simplify_default = preferTypeFestSimplifyRule;
|
|
9936
10308
|
|
|
9937
10309
|
// dist/rules/prefer-type-fest-stringified.js
|
|
9938
|
-
var
|
|
10310
|
+
var import_ts_extras40 = require("ts-extras");
|
|
9939
10311
|
var hasStringifiedMappedTypeShape = (node) => {
|
|
9940
|
-
if (node.readonly !== false && (0,
|
|
10312
|
+
if (node.readonly !== false && (0, import_ts_extras40.isDefined)(node.readonly)) {
|
|
9941
10313
|
return false;
|
|
9942
10314
|
}
|
|
9943
|
-
if (node.optional !== false && (0,
|
|
10315
|
+
if (node.optional !== false && (0, import_ts_extras40.isDefined)(node.optional)) {
|
|
9944
10316
|
return false;
|
|
9945
10317
|
}
|
|
9946
10318
|
if (node.nameType !== null) {
|
|
@@ -10234,8 +10606,64 @@ var preferTypeFestTupleOfRule = createTypedRule({
|
|
|
10234
10606
|
});
|
|
10235
10607
|
var prefer_type_fest_tuple_of_default = preferTypeFestTupleOfRule;
|
|
10236
10608
|
|
|
10609
|
+
// dist/rules/prefer-type-fest-union-length.js
|
|
10610
|
+
var import_ts_extras41 = require("ts-extras");
|
|
10611
|
+
var preferTypeFestUnionLengthRule = createTypedRule({
|
|
10612
|
+
create(context) {
|
|
10613
|
+
const typeFestDirectImports = collectDirectNamedImportsFromSource(context.sourceCode, TYPE_FEST_MODULE_SOURCE);
|
|
10614
|
+
return {
|
|
10615
|
+
TSIndexedAccessType(node) {
|
|
10616
|
+
const { indexType, objectType } = node;
|
|
10617
|
+
if (objectType.type !== "TSTypeReference" || objectType.typeName.type !== "Identifier" || objectType.typeName.name !== "UnionToTuple") {
|
|
10618
|
+
return;
|
|
10619
|
+
}
|
|
10620
|
+
if (indexType.type !== "TSLiteralType" || indexType.literal.type !== "Literal" || indexType.literal.value !== "length") {
|
|
10621
|
+
return;
|
|
10622
|
+
}
|
|
10623
|
+
const typeParams = objectType.typeArguments?.params;
|
|
10624
|
+
if (typeParams?.length !== 1) {
|
|
10625
|
+
return;
|
|
10626
|
+
}
|
|
10627
|
+
const typeArgText = context.sourceCode.getText((0, import_ts_extras41.arrayFirst)(typeParams));
|
|
10628
|
+
const replacementText = `UnionLength<${typeArgText}>`;
|
|
10629
|
+
const replacementFix = createSafeTypeNodeTextReplacementFix(node, "UnionLength", replacementText, typeFestDirectImports);
|
|
10630
|
+
reportWithOptionalFix({
|
|
10631
|
+
context,
|
|
10632
|
+
fix: replacementFix,
|
|
10633
|
+
messageId: "preferUnionLength",
|
|
10634
|
+
node
|
|
10635
|
+
});
|
|
10636
|
+
}
|
|
10637
|
+
};
|
|
10638
|
+
},
|
|
10639
|
+
meta: {
|
|
10640
|
+
deprecated: false,
|
|
10641
|
+
docs: {
|
|
10642
|
+
description: "require TypeFest `UnionLength` over `UnionToTuple<T>['length']`.",
|
|
10643
|
+
frozen: false,
|
|
10644
|
+
recommended: true,
|
|
10645
|
+
requiresTypeChecking: false,
|
|
10646
|
+
typefestConfigs: [
|
|
10647
|
+
"typefest.configs.recommended",
|
|
10648
|
+
"typefest.configs.strict",
|
|
10649
|
+
"typefest.configs.all",
|
|
10650
|
+
"typefest.configs.type-fest/types"
|
|
10651
|
+
],
|
|
10652
|
+
url: "https://nick2bad4u.github.io/eslint-plugin-typefest/docs/rules/prefer-type-fest-union-length"
|
|
10653
|
+
},
|
|
10654
|
+
fixable: "code",
|
|
10655
|
+
messages: {
|
|
10656
|
+
preferUnionLength: "Prefer `UnionLength<T>` from type-fest over `UnionToTuple<T>['length']`."
|
|
10657
|
+
},
|
|
10658
|
+
schema: [],
|
|
10659
|
+
type: "suggestion"
|
|
10660
|
+
},
|
|
10661
|
+
name: "prefer-type-fest-union-length"
|
|
10662
|
+
});
|
|
10663
|
+
var prefer_type_fest_union_length_default = preferTypeFestUnionLengthRule;
|
|
10664
|
+
|
|
10237
10665
|
// dist/rules/prefer-type-fest-union-member.js
|
|
10238
|
-
var
|
|
10666
|
+
var import_ts_extras42 = require("ts-extras");
|
|
10239
10667
|
var UNION_MEMBER_TYPE_NAME = "UnionMember";
|
|
10240
10668
|
var UNION_TO_INTERSECTION_TYPE_NAME = "UnionToIntersection";
|
|
10241
10669
|
var IS_NEVER_TYPE_NAME = "IsNever";
|
|
@@ -10266,7 +10694,7 @@ var getUnionArgumentTextFromExtractor = ({ node, sourceCode }) => {
|
|
|
10266
10694
|
if (!isIdentifierTypeReferenceNamed(node.checkType, UNION_TO_INTERSECTION_TYPE_NAME)) {
|
|
10267
10695
|
return null;
|
|
10268
10696
|
}
|
|
10269
|
-
const extractorArgument = (0,
|
|
10697
|
+
const extractorArgument = (0, import_ts_extras42.arrayFirst)(node.checkType.typeArguments?.params ?? []);
|
|
10270
10698
|
if (!extractorArgument) {
|
|
10271
10699
|
return null;
|
|
10272
10700
|
}
|
|
@@ -10301,7 +10729,7 @@ var getUnionMemberEquivalentArgumentText = ({ node, sourceCode }) => {
|
|
|
10301
10729
|
if (!isIdentifierTypeReferenceNamed(node.checkType, IS_NEVER_TYPE_NAME) || !isBooleanLiteralType(node.extendsType, true) || node.trueType.type !== "TSNeverKeyword") {
|
|
10302
10730
|
return null;
|
|
10303
10731
|
}
|
|
10304
|
-
const guardedArgument = (0,
|
|
10732
|
+
const guardedArgument = (0, import_ts_extras42.arrayFirst)(node.checkType.typeArguments?.params ?? []);
|
|
10305
10733
|
if (!guardedArgument) {
|
|
10306
10734
|
return null;
|
|
10307
10735
|
}
|
|
@@ -11035,6 +11463,7 @@ var typefestRuleRegistry = {
|
|
|
11035
11463
|
"prefer-ts-extras-as-writable": prefer_ts_extras_as_writable_default,
|
|
11036
11464
|
"prefer-ts-extras-assert-defined": prefer_ts_extras_assert_defined_default,
|
|
11037
11465
|
"prefer-ts-extras-assert-error": prefer_ts_extras_assert_error_default,
|
|
11466
|
+
"prefer-ts-extras-assert-never": prefer_ts_extras_assert_never_default,
|
|
11038
11467
|
"prefer-ts-extras-assert-present": prefer_ts_extras_assert_present_default,
|
|
11039
11468
|
"prefer-ts-extras-is-defined": prefer_ts_extras_is_defined_default,
|
|
11040
11469
|
"prefer-ts-extras-is-defined-filter": prefer_ts_extras_is_defined_filter_default,
|
|
@@ -11045,6 +11474,8 @@ var typefestRuleRegistry = {
|
|
|
11045
11474
|
"prefer-ts-extras-is-integer": prefer_ts_extras_is_integer_default,
|
|
11046
11475
|
"prefer-ts-extras-is-present": prefer_ts_extras_is_present_default,
|
|
11047
11476
|
"prefer-ts-extras-is-present-filter": prefer_ts_extras_is_present_filter_default,
|
|
11477
|
+
"prefer-ts-extras-is-property-defined": prefer_ts_extras_is_property_defined_default,
|
|
11478
|
+
"prefer-ts-extras-is-property-present": prefer_ts_extras_is_property_present_default,
|
|
11048
11479
|
"prefer-ts-extras-is-safe-integer": prefer_ts_extras_is_safe_integer_default,
|
|
11049
11480
|
"prefer-ts-extras-key-in": prefer_ts_extras_key_in_default,
|
|
11050
11481
|
"prefer-ts-extras-not": prefer_ts_extras_not_default,
|
|
@@ -11058,6 +11489,7 @@ var typefestRuleRegistry = {
|
|
|
11058
11489
|
"prefer-ts-extras-safe-cast-to": prefer_ts_extras_safe_cast_to_default,
|
|
11059
11490
|
"prefer-ts-extras-set-has": prefer_ts_extras_set_has_default,
|
|
11060
11491
|
"prefer-ts-extras-string-split": prefer_ts_extras_string_split_default,
|
|
11492
|
+
"prefer-type-fest-absolute": prefer_type_fest_absolute_default,
|
|
11061
11493
|
"prefer-type-fest-abstract-constructor": prefer_type_fest_abstract_constructor_default,
|
|
11062
11494
|
"prefer-type-fest-and-all": prefer_type_fest_and_all_default,
|
|
11063
11495
|
"prefer-type-fest-array-length": prefer_type_fest_array_length_default,
|
|
@@ -11085,6 +11517,7 @@ var typefestRuleRegistry = {
|
|
|
11085
11517
|
"prefer-type-fest-merge": prefer_type_fest_merge_default,
|
|
11086
11518
|
"prefer-type-fest-merge-exclusive": prefer_type_fest_merge_exclusive_default,
|
|
11087
11519
|
"prefer-type-fest-non-empty-tuple": prefer_type_fest_non_empty_tuple_default,
|
|
11520
|
+
"prefer-type-fest-non-nullable-deep": prefer_type_fest_non_nullable_deep_default,
|
|
11088
11521
|
"prefer-type-fest-omit-index-signature": prefer_type_fest_omit_index_signature_default,
|
|
11089
11522
|
"prefer-type-fest-optional": prefer_type_fest_optional_default,
|
|
11090
11523
|
"prefer-type-fest-or-all": prefer_type_fest_or_all_default,
|
|
@@ -11108,6 +11541,7 @@ var typefestRuleRegistry = {
|
|
|
11108
11541
|
"prefer-type-fest-stringified": prefer_type_fest_stringified_default,
|
|
11109
11542
|
"prefer-type-fest-tagged-brands": prefer_type_fest_tagged_brands_default,
|
|
11110
11543
|
"prefer-type-fest-tuple-of": prefer_type_fest_tuple_of_default,
|
|
11544
|
+
"prefer-type-fest-union-length": prefer_type_fest_union_length_default,
|
|
11111
11545
|
"prefer-type-fest-union-member": prefer_type_fest_union_member_default,
|
|
11112
11546
|
"prefer-type-fest-union-to-intersection": prefer_type_fest_union_to_intersection_default,
|
|
11113
11547
|
"prefer-type-fest-union-to-tuple": prefer_type_fest_union_to_tuple_default,
|
|
@@ -11132,7 +11566,7 @@ function getPackageVersion(pkg) {
|
|
|
11132
11566
|
const version = Reflect.get(pkg, "version");
|
|
11133
11567
|
return typeof version === "string" ? version : "0.0.0";
|
|
11134
11568
|
}
|
|
11135
|
-
var packageJsonValue = (0,
|
|
11569
|
+
var packageJsonValue = (0, import_ts_extras43.safeCastTo)(package_default);
|
|
11136
11570
|
var typeScriptParserValue = import_parser3.default;
|
|
11137
11571
|
var defaultParserOptions = {
|
|
11138
11572
|
ecmaVersion: "latest",
|
|
@@ -11140,10 +11574,10 @@ var defaultParserOptions = {
|
|
|
11140
11574
|
};
|
|
11141
11575
|
var normalizeParserOptions = (parserOptions) => parserOptions !== null && typeof parserOptions === "object" && !Array.isArray(parserOptions) ? { ...parserOptions } : { ...defaultParserOptions };
|
|
11142
11576
|
var typefestEslintRules = typefestRules;
|
|
11143
|
-
var isTypefestRuleName = (value) => (0,
|
|
11577
|
+
var isTypefestRuleName = (value) => (0, import_ts_extras43.objectHasIn)(typefestRules, value);
|
|
11144
11578
|
var typefestRuleEntries = (() => {
|
|
11145
11579
|
const entries = [];
|
|
11146
|
-
for (const [ruleName] of (0,
|
|
11580
|
+
for (const [ruleName] of (0, import_ts_extras43.objectEntries)(typefestRules)) {
|
|
11147
11581
|
if (!isTypefestRuleName(ruleName)) {
|
|
11148
11582
|
continue;
|
|
11149
11583
|
}
|
|
@@ -11170,7 +11604,7 @@ var derivePresetRuleNamesByConfig = () => {
|
|
|
11170
11604
|
const presetRuleNamesByConfig2 = createEmptyPresetRuleMap();
|
|
11171
11605
|
for (const [ruleName] of typefestRuleEntries) {
|
|
11172
11606
|
const configNames = rulePresetMembership[ruleName];
|
|
11173
|
-
if (!(0,
|
|
11607
|
+
if (!(0, import_ts_extras43.isDefined)(configNames) || (0, import_ts_extras43.isEmpty)(configNames)) {
|
|
11174
11608
|
throw new TypeError(`Rule '${ruleName}' is missing preset membership metadata.`);
|
|
11175
11609
|
}
|
|
11176
11610
|
for (const configName of configNames) {
|
|
@@ -11198,7 +11632,7 @@ function errorRulesFor(ruleNames) {
|
|
|
11198
11632
|
var presetRuleNamesByConfig = derivePresetRuleNamesByConfig();
|
|
11199
11633
|
var recommendedRuleNames = [];
|
|
11200
11634
|
for (const ruleName of presetRuleNamesByConfig.recommended) {
|
|
11201
|
-
if ((0,
|
|
11635
|
+
if ((0, import_ts_extras43.setHas)(typeCheckedRuleNames, ruleName)) {
|
|
11202
11636
|
continue;
|
|
11203
11637
|
}
|
|
11204
11638
|
recommendedRuleNames.push(ruleName);
|
|
@@ -11220,7 +11654,7 @@ function withTypefestPlugin(config, plugin, options) {
|
|
|
11220
11654
|
const existingLanguageOptions = config.languageOptions ?? {};
|
|
11221
11655
|
const existingParserOptions = existingLanguageOptions["parserOptions"];
|
|
11222
11656
|
const parserOptions = normalizeParserOptions(existingParserOptions);
|
|
11223
|
-
if (options.requiresTypeChecking && !(0,
|
|
11657
|
+
if (options.requiresTypeChecking && !(0, import_ts_extras43.objectHasIn)(parserOptions, "projectService")) {
|
|
11224
11658
|
Reflect.set(parserOptions, "projectService", true);
|
|
11225
11659
|
}
|
|
11226
11660
|
const languageOptions = {
|