Update
This commit is contained in:
1
build.sh
1
build.sh
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
./src/build-local-rules.ts
|
./src/build-local-rules.ts
|
||||||
npx dts-bundle-generator "./src/index.ts" -o "./dist/index.d.ts" --project "./tsconfig.build.json" --no-check
|
npx dts-bundle-generator "./src/index.ts" -o "./dist/index.d.ts" --project "./tsconfig.build.json" --no-check
|
||||||
|
# printf "\nimport './types.d';" >> "./dist/index.d.ts"
|
||||||
./esbuild.ts
|
./esbuild.ts
|
||||||
sed -i '' '/import.*redirect.*;/d' "dist/index.d.ts"
|
sed -i '' '/import.*redirect.*;/d' "dist/index.d.ts"
|
||||||
|
|
||||||
|
38
dist/index.d.ts
vendored
38
dist/index.d.ts
vendored
@ -1,10 +1,44 @@
|
|||||||
// Generated by dts-bundle-generator v8.1.2
|
// Generated by dts-bundle-generator v8.1.2
|
||||||
|
|
||||||
import { ESLintConfig } from 'eslint-define-config';
|
import { ESLintConfig, Rules } from 'eslint-define-config';
|
||||||
|
|
||||||
export declare const error = "error";
|
export declare const error = "error";
|
||||||
export declare const warn = "warn";
|
export declare const warn = "warn";
|
||||||
export declare const off = "off";
|
export declare const off = "off";
|
||||||
export declare function extendConfig({ plugins, settings, rules, extends: _extends, overrides, ...rest }?: ESLintConfig): ESLintConfig;
|
export type RuleLevel = "error" | "warn" | "off" | 0 | 1 | 2;
|
||||||
|
export type RuleEntry<Options> = RuleLevel | [
|
||||||
|
RuleLevel,
|
||||||
|
Partial<Options>
|
||||||
|
];
|
||||||
|
export interface LocalRuleOptions {
|
||||||
|
/** Bans import from the specifier '.' and '..' and replaces it with '.+/index' */
|
||||||
|
"rules/no-import-dot": RuleEntry<unknown>;
|
||||||
|
/**
|
||||||
|
* Enforce template literal expressions to be of `string` type
|
||||||
|
* @see [restrict-template-expressions](https://typescript-eslint.io/rules/restrict-template-expressions)
|
||||||
|
*/
|
||||||
|
"rules/restrict-template-expressions": RuleEntry<{
|
||||||
|
allow: string[];
|
||||||
|
}>;
|
||||||
|
}
|
||||||
|
export type RuleOptions = Rules & Partial<LocalRuleOptions>;
|
||||||
|
/**
|
||||||
|
* ESLint Configuration.
|
||||||
|
* @see [ESLint Configuration](https://eslint.org/docs/latest/user-guide/configuring/)
|
||||||
|
*/
|
||||||
|
export type Config = Omit<ESLintConfig, "rules"> & {
|
||||||
|
/**
|
||||||
|
* Rules.
|
||||||
|
* @see [Rules](https://eslint.org/docs/latest/user-guide/configuring/rules)
|
||||||
|
*/
|
||||||
|
rules?: RuleOptions;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Returns a ESLint config object.
|
||||||
|
*
|
||||||
|
* By default, it includes `["@typescript-eslint", "import", "prettier"]` configs.
|
||||||
|
* Additional bundled plugins include `["react", "react-refresh", "jsx-a11y", "unicorn"]`.
|
||||||
|
*/
|
||||||
|
export declare function extendConfig({ plugins, settings, rules, extends: _extends, overrides, ...rest }?: Config): ESLintConfig;
|
||||||
|
|
||||||
export {};
|
export {};
|
||||||
|
11
dist/package.json
vendored
11
dist/package.json
vendored
@ -1,15 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "@aet/eslint-rules",
|
"name": "@aet/eslint-rules",
|
||||||
"version": "0.0.3",
|
"version": "0.0.5",
|
||||||
"license": "UNLICENSED",
|
"license": "UNLICENSED",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "^8.53.0",
|
"eslint": "^8.53.0",
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.2.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@eslint-community/eslint-utils": "^4.4.0",
|
||||||
"@types/eslint": "^8.44.7",
|
"@types/eslint": "^8.44.7",
|
||||||
"@typescript-eslint/eslint-plugin": "6.10.0",
|
"@typescript-eslint/eslint-plugin": "^6.10.0",
|
||||||
"@typescript-eslint/parser": "6.10.0",
|
"@typescript-eslint/parser": "^6.10.0",
|
||||||
|
"@typescript-eslint/type-utils": "^6.10.0",
|
||||||
|
"@typescript-eslint/utils": "^6.10.0",
|
||||||
"aria-query": "^5.3.0",
|
"aria-query": "^5.3.0",
|
||||||
"axe-core": "4.8.2",
|
"axe-core": "4.8.2",
|
||||||
"axobject-query": "^4.0.0",
|
"axobject-query": "^4.0.0",
|
||||||
@ -22,11 +25,13 @@
|
|||||||
"eslint-define-config": "^1.24.1",
|
"eslint-define-config": "^1.24.1",
|
||||||
"eslint-import-resolver-node": "^0.3.9",
|
"eslint-import-resolver-node": "^0.3.9",
|
||||||
"eslint-module-utils": "^2.8.0",
|
"eslint-module-utils": "^2.8.0",
|
||||||
|
"eslint-plugin-es-x": "7.3.0",
|
||||||
"eslint-plugin-unicorn": "^49.0.0",
|
"eslint-plugin-unicorn": "^49.0.0",
|
||||||
"estraverse": "^5.3.0",
|
"estraverse": "^5.3.0",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"get-tsconfig": "^4.7.2",
|
"get-tsconfig": "^4.7.2",
|
||||||
"ignore": "^5.2.4",
|
"ignore": "^5.2.4",
|
||||||
|
"is-builtin-module": "^3.2.1",
|
||||||
"is-core-module": "^2.13.1",
|
"is-core-module": "^2.13.1",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
"language-tags": "^1.0.9",
|
"language-tags": "^1.0.9",
|
||||||
|
@ -273,5 +273,6 @@ main('./packages/eslint-plugin-jsx-a11y/src/index.js');
|
|||||||
main('./packages/eslint-plugin-react-hooks/index.ts');
|
main('./packages/eslint-plugin-react-hooks/index.ts');
|
||||||
main('./packages/eslint-plugin-n/lib/index.js');
|
main('./packages/eslint-plugin-n/lib/index.js');
|
||||||
main('./packages/eslint-import-resolver-typescript/src/index.ts');
|
main('./packages/eslint-import-resolver-typescript/src/index.ts');
|
||||||
main('./src/rules/index.ts', './dist/rules/index.js');
|
main('./src/rules/index.ts', './dist/eslint-plugin-rules/index.js');
|
||||||
|
main('./src/local/index.ts', './dist/eslint-plugin-local/index.js');
|
||||||
main('./src/index.ts', './dist/index.js');
|
main('./src/index.ts', './dist/index.js');
|
||||||
|
28
package.json
28
package.json
@ -9,23 +9,27 @@
|
|||||||
"@babel/core": "^7.23.2",
|
"@babel/core": "^7.23.2",
|
||||||
"@babel/plugin-transform-flow-strip-types": "^7.22.5",
|
"@babel/plugin-transform-flow-strip-types": "^7.22.5",
|
||||||
"@babel/preset-env": "^7.23.2",
|
"@babel/preset-env": "^7.23.2",
|
||||||
"@types/babel-plugin-macros": "^3.1.2",
|
"@types/babel-plugin-macros": "^3.1.3",
|
||||||
"@types/babel__core": "^7.20.3",
|
"@types/babel__core": "^7.20.4",
|
||||||
"@types/eslint": "^8.44.6",
|
"@types/eslint": "^8.44.7",
|
||||||
"@types/estree": "^1.0.4",
|
"@types/estree": "^1.0.5",
|
||||||
"@types/estree-jsx": "^1.0.2",
|
"@types/estree-jsx": "^1.0.3",
|
||||||
"@types/lodash": "^4.14.200",
|
"@types/lodash": "^4.14.201",
|
||||||
"@types/node": "^20.8.10",
|
"@types/node": "^20.9.0",
|
||||||
"@typescript-eslint/types": "^6.9.1",
|
"@typescript-eslint/eslint-plugin": "6.10.0",
|
||||||
|
"@typescript-eslint/type-utils": "^6.10.0",
|
||||||
|
"@typescript-eslint/types": "^6.10.0",
|
||||||
|
"@typescript-eslint/typescript-estree": "^6.10.0",
|
||||||
|
"@typescript-eslint/utils": "^6.10.0",
|
||||||
"babel-plugin-macros": "^3.1.0",
|
"babel-plugin-macros": "^3.1.0",
|
||||||
"dts-bundle-generator": "^8.1.2",
|
"dts-bundle-generator": "^8.1.2",
|
||||||
"esbin": "0.0.3",
|
"esbin": "0.0.4",
|
||||||
"esbuild": "0.19.5",
|
"esbuild": "0.19.5",
|
||||||
"esbuild-plugin-alias": "^0.2.1",
|
"esbuild-plugin-alias": "^0.2.1",
|
||||||
"eslint": "8.52.0",
|
"eslint": "8.53.0",
|
||||||
"eslint-config-prettier": "9.0.0",
|
"eslint-config-prettier": "^9.0.0",
|
||||||
"eslint-define-config": "^1.24.1",
|
"eslint-define-config": "^1.24.1",
|
||||||
"fast-glob": "^3.3.1",
|
"fast-glob": "^3.3.2",
|
||||||
"json-schema-to-ts": "^2.9.2",
|
"json-schema-to-ts": "^2.9.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"minimatch": "^9.0.3",
|
"minimatch": "^9.0.3",
|
||||||
|
@ -237,24 +237,10 @@ index 64bbc8d5..b5e9c803 100644
|
|||||||
const isCreateElement = require('../util/isCreateElement');
|
const isCreateElement = require('../util/isCreateElement');
|
||||||
const report = require('../util/report');
|
const report = require('../util/report');
|
||||||
diff --git a/lib/rules/no-unknown-property.js b/lib/rules/no-unknown-property.js
|
diff --git a/lib/rules/no-unknown-property.js b/lib/rules/no-unknown-property.js
|
||||||
index fc573366..74bc36f6 100644
|
index 069596d7..c155e777 100644
|
||||||
--- a/lib/rules/no-unknown-property.js
|
--- a/lib/rules/no-unknown-property.js
|
||||||
+++ b/lib/rules/no-unknown-property.js
|
+++ b/lib/rules/no-unknown-property.js
|
||||||
@@ -516,6 +516,13 @@ module.exports = {
|
@@ -539,7 +539,7 @@ module.exports = {
|
||||||
type: 'string',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
+ extends: {
|
|
||||||
+ type: 'array',
|
|
||||||
+ items: {
|
|
||||||
+ type: 'string',
|
|
||||||
+ enum: ['next', 'emotion'],
|
|
||||||
+ },
|
|
||||||
+ }
|
|
||||||
},
|
|
||||||
additionalProperties: false,
|
|
||||||
}],
|
|
||||||
@@ -523,14 +530,18 @@ module.exports = {
|
|
||||||
|
|
||||||
create(context) {
|
create(context) {
|
||||||
function getIgnoreConfig() {
|
function getIgnoreConfig() {
|
||||||
@ -262,11 +248,8 @@ index fc573366..74bc36f6 100644
|
|||||||
+ return context.options[0]?.ignore || DEFAULTS.ignore;
|
+ return context.options[0]?.ignore || DEFAULTS.ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ const extensions = /** @type {string[]} */ (context.options[0]?.extends || []);
|
function getRequireDataLowercase() {
|
||||||
+ const hasEmotion = extensions.includes('emotion');
|
@@ -552,7 +552,7 @@ module.exports = {
|
||||||
+ const hasNext = extensions.includes('next');
|
|
||||||
+
|
|
||||||
return {
|
|
||||||
JSXAttribute(node) {
|
JSXAttribute(node) {
|
||||||
const ignoreNames = getIgnoreConfig();
|
const ignoreNames = getIgnoreConfig();
|
||||||
const actualName = context.getSourceCode().getText(node.name);
|
const actualName = context.getSourceCode().getText(node.name);
|
||||||
@ -275,7 +258,7 @@ index fc573366..74bc36f6 100644
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const name = normalizeAttributeCase(actualName);
|
const name = normalizeAttributeCase(actualName);
|
||||||
@@ -546,6 +557,15 @@ module.exports = {
|
@@ -580,6 +580,15 @@ module.exports = {
|
||||||
|
|
||||||
const tagName = getTagName(node);
|
const tagName = getTagName(node);
|
||||||
|
|
||||||
|
319
pnpm-lock.yaml
generated
319
pnpm-lock.yaml
generated
@ -15,29 +15,41 @@ devDependencies:
|
|||||||
specifier: ^7.23.2
|
specifier: ^7.23.2
|
||||||
version: 7.23.2(@babel/core@7.23.2)
|
version: 7.23.2(@babel/core@7.23.2)
|
||||||
'@types/babel-plugin-macros':
|
'@types/babel-plugin-macros':
|
||||||
specifier: ^3.1.2
|
specifier: ^3.1.3
|
||||||
version: 3.1.2
|
version: 3.1.3
|
||||||
'@types/babel__core':
|
'@types/babel__core':
|
||||||
specifier: ^7.20.3
|
specifier: ^7.20.4
|
||||||
version: 7.20.3
|
version: 7.20.4
|
||||||
'@types/eslint':
|
'@types/eslint':
|
||||||
specifier: ^8.44.6
|
specifier: ^8.44.7
|
||||||
version: 8.44.6
|
version: 8.44.7
|
||||||
'@types/estree':
|
'@types/estree':
|
||||||
specifier: ^1.0.4
|
specifier: ^1.0.5
|
||||||
version: 1.0.4
|
version: 1.0.5
|
||||||
'@types/estree-jsx':
|
'@types/estree-jsx':
|
||||||
specifier: ^1.0.2
|
specifier: ^1.0.3
|
||||||
version: 1.0.2
|
version: 1.0.3
|
||||||
'@types/lodash':
|
'@types/lodash':
|
||||||
specifier: ^4.14.200
|
specifier: ^4.14.201
|
||||||
version: 4.14.200
|
version: 4.14.201
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^20.8.10
|
specifier: ^20.9.0
|
||||||
version: 20.8.10
|
version: 20.9.0
|
||||||
|
'@typescript-eslint/eslint-plugin':
|
||||||
|
specifier: 6.10.0
|
||||||
|
version: 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/type-utils':
|
||||||
|
specifier: ^6.10.0
|
||||||
|
version: 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
'@typescript-eslint/types':
|
'@typescript-eslint/types':
|
||||||
specifier: ^6.9.1
|
specifier: ^6.10.0
|
||||||
version: 6.9.1
|
version: 6.10.0
|
||||||
|
'@typescript-eslint/typescript-estree':
|
||||||
|
specifier: ^6.10.0
|
||||||
|
version: 6.10.0(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/utils':
|
||||||
|
specifier: ^6.10.0
|
||||||
|
version: 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
babel-plugin-macros:
|
babel-plugin-macros:
|
||||||
specifier: ^3.1.0
|
specifier: ^3.1.0
|
||||||
version: 3.1.0
|
version: 3.1.0
|
||||||
@ -45,8 +57,8 @@ devDependencies:
|
|||||||
specifier: ^8.1.2
|
specifier: ^8.1.2
|
||||||
version: 8.1.2
|
version: 8.1.2
|
||||||
esbin:
|
esbin:
|
||||||
specifier: 0.0.3
|
specifier: 0.0.4
|
||||||
version: 0.0.3(esbuild@0.19.5)
|
version: 0.0.4(esbuild@0.19.5)
|
||||||
esbuild:
|
esbuild:
|
||||||
specifier: 0.19.5
|
specifier: 0.19.5
|
||||||
version: 0.19.5
|
version: 0.19.5
|
||||||
@ -54,17 +66,17 @@ devDependencies:
|
|||||||
specifier: ^0.2.1
|
specifier: ^0.2.1
|
||||||
version: 0.2.1
|
version: 0.2.1
|
||||||
eslint:
|
eslint:
|
||||||
specifier: 8.52.0
|
specifier: 8.53.0
|
||||||
version: 8.52.0
|
version: 8.53.0
|
||||||
eslint-config-prettier:
|
eslint-config-prettier:
|
||||||
specifier: 9.0.0
|
specifier: ^9.0.0
|
||||||
version: 9.0.0(eslint@8.52.0)
|
version: 9.0.0(eslint@8.53.0)
|
||||||
eslint-define-config:
|
eslint-define-config:
|
||||||
specifier: ^1.24.1
|
specifier: ^1.24.1
|
||||||
version: 1.24.1
|
version: 1.24.1
|
||||||
fast-glob:
|
fast-glob:
|
||||||
specifier: ^3.3.1
|
specifier: ^3.3.2
|
||||||
version: 3.3.1
|
version: 3.3.2
|
||||||
json-schema-to-ts:
|
json-schema-to-ts:
|
||||||
specifier: ^2.9.2
|
specifier: ^2.9.2
|
||||||
version: 2.9.2
|
version: 2.9.2
|
||||||
@ -1475,13 +1487,13 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@eslint-community/eslint-utils@4.4.0(eslint@8.52.0):
|
/@eslint-community/eslint-utils@4.4.0(eslint@8.53.0):
|
||||||
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
|
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 8.52.0
|
eslint: 8.53.0
|
||||||
eslint-visitor-keys: 3.4.3
|
eslint-visitor-keys: 3.4.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@ -1490,8 +1502,8 @@ packages:
|
|||||||
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@eslint/eslintrc@2.1.2:
|
/@eslint/eslintrc@2.1.3:
|
||||||
resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
|
resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
@ -1507,8 +1519,8 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@eslint/js@8.52.0:
|
/@eslint/js@8.53.0:
|
||||||
resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==}
|
resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@ -1583,14 +1595,14 @@ packages:
|
|||||||
fastq: 1.15.0
|
fastq: 1.15.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/babel-plugin-macros@3.1.2:
|
/@types/babel-plugin-macros@3.1.3:
|
||||||
resolution: {integrity: sha512-reO/Op5+rVgMPajMQslgFtoBtUMkkVVUkcXmsz8hLEHq1A2gr3JyHmrs+s2rJjhPKJIi2S2p/fj0q6BYP111Uw==}
|
resolution: {integrity: sha512-JU+MgpsHK3taY18mBETy5XlwY6LVngte7QXYzUuXEaaX0CN8dBqbjXtADe+gJmkSQE1FJHufzPj++OWZlhRmGw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/babel__core': 7.20.3
|
'@types/babel__core': 7.20.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/babel__core@7.20.3:
|
/@types/babel__core@7.20.4:
|
||||||
resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==}
|
resolution: {integrity: sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/parser': 7.23.0
|
'@babel/parser': 7.23.0
|
||||||
'@babel/types': 7.23.0
|
'@babel/types': 7.23.0
|
||||||
@ -1618,33 +1630,33 @@ packages:
|
|||||||
'@babel/types': 7.23.0
|
'@babel/types': 7.23.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/eslint@8.44.6:
|
/@types/eslint@8.44.7:
|
||||||
resolution: {integrity: sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==}
|
resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.4
|
'@types/estree': 1.0.5
|
||||||
'@types/json-schema': 7.0.13
|
'@types/json-schema': 7.0.13
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/estree-jsx@1.0.2:
|
/@types/estree-jsx@1.0.3:
|
||||||
resolution: {integrity: sha512-GNBWlGBMjiiiL5TSkvPtOteuXsiVitw5MYGY1UYlrAq0SKyczsls6sCD7TZ8fsjRsvCVxml7EbyjJezPb3DrSA==}
|
resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/estree': 1.0.4
|
'@types/estree': 1.0.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/estree@1.0.4:
|
/@types/estree@1.0.5:
|
||||||
resolution: {integrity: sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==}
|
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/json-schema@7.0.13:
|
/@types/json-schema@7.0.13:
|
||||||
resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==}
|
resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/lodash@4.14.200:
|
/@types/lodash@4.14.201:
|
||||||
resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==}
|
resolution: {integrity: sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/node@20.8.10:
|
/@types/node@20.9.0:
|
||||||
resolution: {integrity: sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==}
|
resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 5.26.5
|
undici-types: 5.26.5
|
||||||
dev: true
|
dev: true
|
||||||
@ -1653,9 +1665,139 @@ packages:
|
|||||||
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
|
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@typescript-eslint/types@6.9.1:
|
/@types/semver@7.5.5:
|
||||||
resolution: {integrity: sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==}
|
resolution: {integrity: sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.53.0)(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==}
|
||||||
engines: {node: ^16.0.0 || >=18.0.0}
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
|
||||||
|
eslint: ^7.0.0 || ^8.0.0
|
||||||
|
typescript: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@eslint-community/regexpp': 4.9.1
|
||||||
|
'@typescript-eslint/parser': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/scope-manager': 6.10.0
|
||||||
|
'@typescript-eslint/type-utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/visitor-keys': 6.10.0
|
||||||
|
debug: 4.3.4
|
||||||
|
eslint: 8.53.0
|
||||||
|
graphemer: 1.4.0
|
||||||
|
ignore: 5.2.4
|
||||||
|
natural-compare: 1.4.0
|
||||||
|
semver: 7.5.4
|
||||||
|
ts-api-utils: 1.0.3(typescript@5.2.2)
|
||||||
|
typescript: 5.2.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/parser@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
eslint: ^7.0.0 || ^8.0.0
|
||||||
|
typescript: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@typescript-eslint/scope-manager': 6.10.0
|
||||||
|
'@typescript-eslint/types': 6.10.0
|
||||||
|
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/visitor-keys': 6.10.0
|
||||||
|
debug: 4.3.4
|
||||||
|
eslint: 8.53.0
|
||||||
|
typescript: 5.2.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/scope-manager@6.10.0:
|
||||||
|
resolution: {integrity: sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
dependencies:
|
||||||
|
'@typescript-eslint/types': 6.10.0
|
||||||
|
'@typescript-eslint/visitor-keys': 6.10.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/type-utils@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
eslint: ^7.0.0 || ^8.0.0
|
||||||
|
typescript: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||||
|
'@typescript-eslint/utils': 6.10.0(eslint@8.53.0)(typescript@5.2.2)
|
||||||
|
debug: 4.3.4
|
||||||
|
eslint: 8.53.0
|
||||||
|
ts-api-utils: 1.0.3(typescript@5.2.2)
|
||||||
|
typescript: 5.2.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/types@6.10.0:
|
||||||
|
resolution: {integrity: sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/typescript-estree@6.10.0(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
'@typescript-eslint/types': 6.10.0
|
||||||
|
'@typescript-eslint/visitor-keys': 6.10.0
|
||||||
|
debug: 4.3.4
|
||||||
|
globby: 11.1.0
|
||||||
|
is-glob: 4.0.3
|
||||||
|
semver: 7.5.4
|
||||||
|
ts-api-utils: 1.0.3(typescript@5.2.2)
|
||||||
|
typescript: 5.2.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/utils@6.10.0(eslint@8.53.0)(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
eslint: ^7.0.0 || ^8.0.0
|
||||||
|
dependencies:
|
||||||
|
'@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
|
||||||
|
'@types/json-schema': 7.0.13
|
||||||
|
'@types/semver': 7.5.5
|
||||||
|
'@typescript-eslint/scope-manager': 6.10.0
|
||||||
|
'@typescript-eslint/types': 6.10.0
|
||||||
|
'@typescript-eslint/typescript-estree': 6.10.0(typescript@5.2.2)
|
||||||
|
eslint: 8.53.0
|
||||||
|
semver: 7.5.4
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
- typescript
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@typescript-eslint/visitor-keys@6.10.0:
|
||||||
|
resolution: {integrity: sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==}
|
||||||
|
engines: {node: ^16.0.0 || >=18.0.0}
|
||||||
|
dependencies:
|
||||||
|
'@typescript-eslint/types': 6.10.0
|
||||||
|
eslint-visitor-keys: 3.4.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@ungap/structured-clone@1.2.0:
|
/@ungap/structured-clone@1.2.0:
|
||||||
@ -1708,6 +1850,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/array-union@2.1.0:
|
||||||
|
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/babel-plugin-macros@3.1.0:
|
/babel-plugin-macros@3.1.0:
|
||||||
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
|
resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==}
|
||||||
engines: {node: '>=10', npm: '>=6'}
|
engines: {node: '>=10', npm: '>=6'}
|
||||||
@ -1894,6 +2041,13 @@ packages:
|
|||||||
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/dir-glob@3.0.1:
|
||||||
|
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
dependencies:
|
||||||
|
path-type: 4.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/doctrine@3.0.0:
|
/doctrine@3.0.0:
|
||||||
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
@ -1924,8 +2078,8 @@ packages:
|
|||||||
is-arrayish: 0.2.1
|
is-arrayish: 0.2.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/esbin@0.0.3(esbuild@0.19.5):
|
/esbin@0.0.4(esbuild@0.19.5):
|
||||||
resolution: {integrity: sha512-nuPK5e7DEIUlfPoemO4HPOQ0vyYoXstp3zxIUnDOwDtlaUA6Lrj6t+ACQsUyugVSwS7RkBV+egRVdd4s0CaxHA==}
|
resolution: {integrity: sha512-X2+hwSY96Y7AXUa02szm9KPomIEg8QhxdwOXy/fyq0i8tqT34A6gYrZTqrhuhiPh6W775krUoqXIwsP344VW4g==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
esbuild: '>=0.19 <1'
|
esbuild: '>=0.19 <1'
|
||||||
@ -1987,13 +2141,13 @@ packages:
|
|||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/eslint-config-prettier@9.0.0(eslint@8.52.0):
|
/eslint-config-prettier@9.0.0(eslint@8.53.0):
|
||||||
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
|
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: '>=7.0.0'
|
eslint: '>=7.0.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 8.52.0
|
eslint: 8.53.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/eslint-define-config@1.24.1:
|
/eslint-define-config@1.24.1:
|
||||||
@ -2014,15 +2168,15 @@ packages:
|
|||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/eslint@8.52.0:
|
/eslint@8.53.0:
|
||||||
resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==}
|
resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==}
|
||||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
|
'@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
|
||||||
'@eslint-community/regexpp': 4.9.1
|
'@eslint-community/regexpp': 4.9.1
|
||||||
'@eslint/eslintrc': 2.1.2
|
'@eslint/eslintrc': 2.1.3
|
||||||
'@eslint/js': 8.52.0
|
'@eslint/js': 8.53.0
|
||||||
'@humanwhocodes/config-array': 0.11.13
|
'@humanwhocodes/config-array': 0.11.13
|
||||||
'@humanwhocodes/module-importer': 1.0.1
|
'@humanwhocodes/module-importer': 1.0.1
|
||||||
'@nodelib/fs.walk': 1.2.8
|
'@nodelib/fs.walk': 1.2.8
|
||||||
@ -2098,8 +2252,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/fast-glob@3.3.1:
|
/fast-glob@3.3.2:
|
||||||
resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
|
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
|
||||||
engines: {node: '>=8.6.0'}
|
engines: {node: '>=8.6.0'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nodelib/fs.stat': 2.0.5
|
'@nodelib/fs.stat': 2.0.5
|
||||||
@ -2209,6 +2363,18 @@ packages:
|
|||||||
type-fest: 0.20.2
|
type-fest: 0.20.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/globby@11.1.0:
|
||||||
|
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
dependencies:
|
||||||
|
array-union: 2.1.0
|
||||||
|
dir-glob: 3.0.1
|
||||||
|
fast-glob: 3.3.2
|
||||||
|
ignore: 5.2.4
|
||||||
|
merge2: 1.4.1
|
||||||
|
slash: 3.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/graphemer@1.4.0:
|
/graphemer@1.4.0:
|
||||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -2401,6 +2567,13 @@ packages:
|
|||||||
yallist: 3.1.1
|
yallist: 3.1.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/lru-cache@6.0.0:
|
||||||
|
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
dependencies:
|
||||||
|
yallist: 4.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/merge2@1.4.1:
|
/merge2@1.4.1:
|
||||||
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
@ -2649,6 +2822,14 @@ packages:
|
|||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/semver@7.5.4:
|
||||||
|
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
hasBin: true
|
||||||
|
dependencies:
|
||||||
|
lru-cache: 6.0.0
|
||||||
|
dev: true
|
||||||
|
|
||||||
/shebang-command@2.0.0:
|
/shebang-command@2.0.0:
|
||||||
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@ -2661,6 +2842,11 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/slash@3.0.0:
|
||||||
|
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/string-width@4.2.3:
|
/string-width@4.2.3:
|
||||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@ -2726,6 +2912,15 @@ packages:
|
|||||||
resolution: {integrity: sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==}
|
resolution: {integrity: sha512-kloPhf1hq3JbCPOTYoOWDKxebWjNb2o/LKnNfkWhxVVisFFmMJPPdJeGoGmM+iRLyoXAR61e08Pb+vUXINg8aA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ts-api-utils@1.0.3(typescript@5.2.2):
|
||||||
|
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
|
||||||
|
engines: {node: '>=16.13.0'}
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=4.2.0'
|
||||||
|
dependencies:
|
||||||
|
typescript: 5.2.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/tsconfig-paths@4.2.0:
|
/tsconfig-paths@4.2.0:
|
||||||
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
|
resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@ -2827,6 +3022,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/yallist@4.0.0:
|
||||||
|
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/yaml@1.10.2:
|
/yaml@1.10.2:
|
||||||
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
|
@ -7,14 +7,18 @@ const files = readdirSync('./src/rules')
|
|||||||
.filter(file => file !== 'index.ts')
|
.filter(file => file !== 'index.ts')
|
||||||
.map(file => file.slice(0, -3));
|
.map(file => file.slice(0, -3));
|
||||||
|
|
||||||
const entryFile = `
|
const entryFile = /* js */ `
|
||||||
import type { Rule } from 'eslint';
|
import type { Rule } from 'eslint';
|
||||||
|
import type { ESLintUtils } from '@typescript-eslint/utils';
|
||||||
|
|
||||||
${files.map(file => `import ${camelCase(file)} from "./${file}"`).join(';\n')}
|
${files.map(file => `import ${camelCase(file)} from './${file}';`).join('\n')}
|
||||||
|
|
||||||
export const rules: Record<string, Rule.RuleModule> = {
|
export const rules: Record<
|
||||||
${files.map(file => `"${file}": ${camelCase(file)}`).join(',\n ')}
|
string,
|
||||||
|
Rule.RuleModule | ESLintUtils.RuleModule<string, unknown[]>
|
||||||
|
> = {
|
||||||
|
${files.map(file => `'${file}': ${camelCase(file)},`).join('\n ')}
|
||||||
};
|
};
|
||||||
`.trim();
|
`.trim();
|
||||||
|
|
||||||
writeFileSync('./src/rules/index.ts', entryFile);
|
writeFileSync('./src/rules/index.ts', entryFile + '\n');
|
||||||
|
42
src/index.ts
42
src/index.ts
@ -1,9 +1,10 @@
|
|||||||
import './redirect';
|
import './redirect';
|
||||||
import type { ESLintConfig } from 'eslint-define-config';
|
import type { ESLintConfig, Rules } from 'eslint-define-config';
|
||||||
import { typescriptRules } from './presets/typescript';
|
import { typescriptRules } from './presets/typescript';
|
||||||
import { unicornRules } from './presets/unicorn';
|
import { unicornRules } from './presets/unicorn';
|
||||||
import { eslintRules } from './presets/eslint';
|
import { eslintRules } from './presets/eslint';
|
||||||
import { reactRules } from './presets/react';
|
import { reactRules } from './presets/react';
|
||||||
|
import { importRules } from './presets/import';
|
||||||
import { error, warn, off } from './constants';
|
import { error, warn, off } from './constants';
|
||||||
// @ts-expect-error
|
// @ts-expect-error
|
||||||
const { name } = (0, require)('./package.json');
|
const { name } = (0, require)('./package.json');
|
||||||
@ -14,12 +15,39 @@ const unique = <T>(arr: T[]): T[] => [...new Set(arr)];
|
|||||||
const ensureArray = <T>(value?: T | T[]): T[] =>
|
const ensureArray = <T>(value?: T | T[]): T[] =>
|
||||||
value == null ? [] : Array.isArray(value) ? value : [value];
|
value == null ? [] : Array.isArray(value) ? value : [value];
|
||||||
|
|
||||||
|
type RuleLevel = 'error' | 'warn' | 'off' | 0 | 1 | 2;
|
||||||
|
type RuleEntry<Options> = RuleLevel | [RuleLevel, Partial<Options>];
|
||||||
|
|
||||||
declare module 'eslint-define-config/src/rules/react/no-unknown-property.d.ts' {
|
declare module 'eslint-define-config/src/rules/react/no-unknown-property.d.ts' {
|
||||||
export interface NoUnknownPropertyOption {
|
export interface NoUnknownPropertyOption {
|
||||||
extends: ('next' | 'emotion')[];
|
extends: ('next' | 'emotion')[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LocalRuleOptions {
|
||||||
|
/** Bans import from the specifier '.' and '..' and replaces it with '.+/index' */
|
||||||
|
'rules/no-import-dot': RuleEntry<unknown>;
|
||||||
|
/**
|
||||||
|
* Enforce template literal expressions to be of `string` type
|
||||||
|
* @see [restrict-template-expressions](https://typescript-eslint.io/rules/restrict-template-expressions)
|
||||||
|
*/
|
||||||
|
'rules/restrict-template-expressions': RuleEntry<{ allow: string[] }>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type RuleOptions = Rules & Partial<LocalRuleOptions>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ESLint Configuration.
|
||||||
|
* @see [ESLint Configuration](https://eslint.org/docs/latest/user-guide/configuring/)
|
||||||
|
*/
|
||||||
|
type Config = Omit<ESLintConfig, 'rules'> & {
|
||||||
|
/**
|
||||||
|
* Rules.
|
||||||
|
* @see [Rules](https://eslint.org/docs/latest/user-guide/configuring/rules)
|
||||||
|
*/
|
||||||
|
rules?: RuleOptions;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a ESLint config object.
|
* Returns a ESLint config object.
|
||||||
*
|
*
|
||||||
@ -33,16 +61,16 @@ export function extendConfig({
|
|||||||
extends: _extends,
|
extends: _extends,
|
||||||
overrides,
|
overrides,
|
||||||
...rest
|
...rest
|
||||||
}: ESLintConfig = {}): ESLintConfig {
|
}: Config = {}): ESLintConfig {
|
||||||
const hasReact = plugins?.includes('react');
|
const hasReact = plugins?.includes('react');
|
||||||
const hasReactRefresh = plugins?.includes('react-refresh');
|
const hasReactRefresh = plugins?.includes('react-refresh');
|
||||||
const hasUnicorn = plugins?.includes('unicorn');
|
const hasUnicorn = plugins?.includes('unicorn');
|
||||||
const hasNext = ensureArray(_extends).some(name => name.includes(':@next/next'));
|
const hasNext = ensureArray(_extends).some(name => name.includes(':@next/next'));
|
||||||
|
|
||||||
const result: ESLintConfig = {
|
const result: Config = {
|
||||||
root: true,
|
root: true,
|
||||||
parser: '@typescript-eslint/parser',
|
parser: '@typescript-eslint/parser',
|
||||||
plugins: unique(['@typescript-eslint', 'import', ...(plugins ?? [])]),
|
plugins: unique(['@typescript-eslint', 'import', 'rules', ...(plugins ?? [])]),
|
||||||
env: { node: true, browser: true, es2023: true },
|
env: { node: true, browser: true, es2023: true },
|
||||||
reportUnusedDisableDirectives: true,
|
reportUnusedDisableDirectives: true,
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
@ -99,9 +127,7 @@ export function extendConfig({
|
|||||||
rules: {
|
rules: {
|
||||||
...eslintRules,
|
...eslintRules,
|
||||||
...typescriptRules,
|
...typescriptRules,
|
||||||
'import/export': off,
|
...importRules,
|
||||||
'import/no-duplicates': error,
|
|
||||||
'import/order': [error, { groups: ['builtin', 'external'] }],
|
|
||||||
...(hasReact && {
|
...(hasReact && {
|
||||||
...reactRules,
|
...reactRules,
|
||||||
'react/no-unknown-property': [
|
'react/no-unknown-property': [
|
||||||
@ -113,6 +139,8 @@ export function extendConfig({
|
|||||||
'react-refresh/only-export-components': [warn, { allowConstantExport: true }],
|
'react-refresh/only-export-components': [warn, { allowConstantExport: true }],
|
||||||
}),
|
}),
|
||||||
...(hasUnicorn && unicornRules),
|
...(hasUnicorn && unicornRules),
|
||||||
|
'rules/no-import-dot': error,
|
||||||
|
'rules/restrict-template-expressions': error,
|
||||||
...rules,
|
...rules,
|
||||||
},
|
},
|
||||||
...rest,
|
...rest,
|
||||||
|
8
src/presets/import.ts
Normal file
8
src/presets/import.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { error, off } from '../constants';
|
||||||
|
import { ImportRules } from 'eslint-define-config/src/rules/import';
|
||||||
|
|
||||||
|
export const importRules: Partial<ImportRules> = {
|
||||||
|
'import/export': off,
|
||||||
|
'import/no-duplicates': error,
|
||||||
|
'import/order': [error, { groups: ['builtin', 'external'] }],
|
||||||
|
};
|
6
src/presets/local.ts
Normal file
6
src/presets/local.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
import { error, off } from '../constants';
|
||||||
|
import type { CustomRuleOptions } from 'eslint-define-config';
|
||||||
|
|
||||||
|
export const importRules: Partial<CustomRuleOptions> = {
|
||||||
|
'local/no-import-dot': error,
|
||||||
|
};
|
@ -33,6 +33,7 @@ export const typescriptRules: Partial<TypeScriptRules> = {
|
|||||||
],
|
],
|
||||||
'@typescript-eslint/no-use-before-define': off,
|
'@typescript-eslint/no-use-before-define': off,
|
||||||
'@typescript-eslint/no-var-requires': off,
|
'@typescript-eslint/no-var-requires': off,
|
||||||
|
'@typescript-eslint/restrict-template-expressions': off,
|
||||||
'@typescript-eslint/triple-slash-reference': off,
|
'@typescript-eslint/triple-slash-reference': off,
|
||||||
'@typescript-eslint/unbound-method': off,
|
'@typescript-eslint/unbound-method': off,
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import type { Rule } from 'eslint';
|
import type { Rule } from 'eslint';
|
||||||
|
import type { ESLintUtils } from '@typescript-eslint/utils';
|
||||||
|
|
||||||
import noImportDot from "./no-import-dot"
|
import noImportDot from './no-import-dot';
|
||||||
|
import restrictTemplateExpressions from './restrict-template-expressions';
|
||||||
|
|
||||||
export const rules: Record<string, Rule.RuleModule> = {
|
export const rules: Record<
|
||||||
"no-import-dot": noImportDot
|
string,
|
||||||
|
Rule.RuleModule | ESLintUtils.RuleModule<string, unknown[]>
|
||||||
|
> = {
|
||||||
|
'no-import-dot': noImportDot,
|
||||||
|
'restrict-template-expressions': restrictTemplateExpressions,
|
||||||
};
|
};
|
@ -1,19 +1,19 @@
|
|||||||
import type { Rule } from "eslint";
|
import type { Rule } from 'eslint';
|
||||||
|
|
||||||
const rule: Rule.RuleModule = {
|
const rule: Rule.RuleModule = {
|
||||||
meta: {
|
meta: {
|
||||||
type: "problem",
|
type: 'problem',
|
||||||
docs: {
|
docs: {
|
||||||
description:
|
description:
|
||||||
"Bans import from the specifier '.' and '..' and replaces it with '.+/index'",
|
"Bans import from the specifier '.' and '..' and replaces it with '.+/index'",
|
||||||
category: "Best Practices",
|
category: 'Best Practices',
|
||||||
recommended: true,
|
recommended: true,
|
||||||
},
|
},
|
||||||
fixable: "code",
|
fixable: 'code',
|
||||||
},
|
},
|
||||||
create: context => ({
|
create: context => ({
|
||||||
ImportDeclaration(node) {
|
ImportDeclaration(node) {
|
||||||
if (node.source.value === ".") {
|
if (node.source.value === '.') {
|
||||||
context.report({
|
context.report({
|
||||||
node: node.source,
|
node: node.source,
|
||||||
message:
|
message:
|
||||||
@ -22,7 +22,7 @@ const rule: Rule.RuleModule = {
|
|||||||
return fixer.replaceText(node.source, '"./index"');
|
return fixer.replaceText(node.source, '"./index"');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
} else if (node.source.value === "..") {
|
} else if (node.source.value === '..') {
|
||||||
context.report({
|
context.report({
|
||||||
node: node.source,
|
node: node.source,
|
||||||
message:
|
message:
|
||||||
|
122
src/rules/restrict-template-expressions.ts
Normal file
122
src/rules/restrict-template-expressions.ts
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
// https://github.com/typescript-eslint/typescript-eslint/blob/75c128856b1ce05a4fec799bfa6de03b3dab03d0/packages/eslint-plugin/src/rules/restrict-template-expressions.ts
|
||||||
|
import * as ts from 'typescript';
|
||||||
|
import { ESLintUtils, type TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';
|
||||||
|
import {
|
||||||
|
getTypeName,
|
||||||
|
isTypeAnyType,
|
||||||
|
isTypeFlagSet,
|
||||||
|
isTypeNeverType,
|
||||||
|
getConstrainedTypeAtLocation,
|
||||||
|
} from '@typescript-eslint/type-utils';
|
||||||
|
import { getParserServices } from '@typescript-eslint/utils/eslint-utils';
|
||||||
|
|
||||||
|
const createRule = ESLintUtils.RuleCreator(
|
||||||
|
name => `https://typescript-eslint.io/rules/${name}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
interface Option {
|
||||||
|
allow: string[];
|
||||||
|
}
|
||||||
|
const defaultOption: Option = {
|
||||||
|
allow: ['any', 'boolean', 'null', 'undefined', 'number', 'RegExp', 'URLSearchParams'],
|
||||||
|
};
|
||||||
|
|
||||||
|
type MessageId = 'invalidType';
|
||||||
|
|
||||||
|
export default createRule<Option[], MessageId>({
|
||||||
|
name: 'restrict-template-expressions',
|
||||||
|
meta: {
|
||||||
|
type: 'problem',
|
||||||
|
docs: {
|
||||||
|
description: 'Enforce template literal expressions to be of `string` type',
|
||||||
|
recommended: 'recommended',
|
||||||
|
requiresTypeChecking: true,
|
||||||
|
},
|
||||||
|
messages: {
|
||||||
|
invalidType: 'Invalid type "{{type}}" of template literal expression.',
|
||||||
|
},
|
||||||
|
schema: [
|
||||||
|
{
|
||||||
|
type: 'object',
|
||||||
|
additionalProperties: false,
|
||||||
|
properties: {
|
||||||
|
allow: {
|
||||||
|
type: 'array',
|
||||||
|
items: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
description: 'Allow specific types',
|
||||||
|
uniqueItems: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
defaultOptions: [defaultOption],
|
||||||
|
create(context, [options]) {
|
||||||
|
const services = getParserServices(context);
|
||||||
|
const checker = services.program!.getTypeChecker();
|
||||||
|
const allowed = new Set(options.allow);
|
||||||
|
|
||||||
|
const { StringLike, NumberLike, BigIntLike, BooleanLike, Null, Undefined } =
|
||||||
|
ts.TypeFlags;
|
||||||
|
|
||||||
|
function isUnderlyingTypePrimitive(type: ts.Type): boolean {
|
||||||
|
return (
|
||||||
|
isTypeFlagSet(type, StringLike) ||
|
||||||
|
(allowed.has('number') && isTypeFlagSet(type, NumberLike | BigIntLike)) ||
|
||||||
|
(allowed.has('boolean') && isTypeFlagSet(type, BooleanLike)) ||
|
||||||
|
(allowed.has('any') && isTypeAnyType(type)) ||
|
||||||
|
allowed.has(getTypeName(checker, type)) ||
|
||||||
|
(allowed.has('null') && isTypeFlagSet(type, Null)) ||
|
||||||
|
(allowed.has('undefined') && isTypeFlagSet(type, Undefined)) ||
|
||||||
|
(allowed.has('never') && isTypeNeverType(type))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
TemplateLiteral(node: TSESTree.TemplateLiteral): void {
|
||||||
|
// don't check tagged template literals
|
||||||
|
if (node.parent.type === AST_NODE_TYPES.TaggedTemplateExpression) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const expression of node.expressions) {
|
||||||
|
const expressionType = getConstrainedTypeAtLocation(services, expression);
|
||||||
|
|
||||||
|
if (
|
||||||
|
!isInnerUnionOrIntersectionConformingTo(
|
||||||
|
expressionType,
|
||||||
|
isUnderlyingTypePrimitive,
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
context.report({
|
||||||
|
node: expression,
|
||||||
|
messageId: 'invalidType',
|
||||||
|
data: { type: checker.typeToString(expressionType) },
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function isInnerUnionOrIntersectionConformingTo(
|
||||||
|
type: ts.Type,
|
||||||
|
predicate: (underlyingType: ts.Type) => boolean,
|
||||||
|
): boolean {
|
||||||
|
return rec(type);
|
||||||
|
|
||||||
|
function rec(innerType: ts.Type): boolean {
|
||||||
|
if (innerType.isUnion()) {
|
||||||
|
return innerType.types.every(rec);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (innerType.isIntersection()) {
|
||||||
|
return innerType.types.some(rec);
|
||||||
|
}
|
||||||
|
|
||||||
|
return predicate(innerType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
15
src/types.d.ts
vendored
Normal file
15
src/types.d.ts
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
declare module '@typescript-eslint/utils' {
|
||||||
|
export * from '@typescript-eslint/utils/dist/index';
|
||||||
|
}
|
||||||
|
declare module '@typescript-eslint/typescript-estree' {
|
||||||
|
export * from '@typescript-eslint/typescript-estree/dist/index';
|
||||||
|
}
|
||||||
|
declare module '@typescript-eslint/type-utils' {
|
||||||
|
export * from '@typescript-eslint/type-utils/dist/index';
|
||||||
|
}
|
||||||
|
declare module '@typescript-eslint/utils/eslint-utils' {
|
||||||
|
export * from '@typescript-eslint/utils/dist/eslint-utils';
|
||||||
|
}
|
||||||
|
declare module '@typescript-eslint/utils/json-schema' {
|
||||||
|
export * from '@typescript-eslint/utils/dist/json-schema';
|
||||||
|
}
|
@ -17,11 +17,5 @@
|
|||||||
"stripInternal": true,
|
"stripInternal": true,
|
||||||
"target": "esnext",
|
"target": "esnext",
|
||||||
"useUnknownInCatchVariables": false
|
"useUnknownInCatchVariables": false
|
||||||
},
|
|
||||||
"ts-node": {
|
|
||||||
"transpileOnly": true,
|
|
||||||
"compilerOptions": {
|
|
||||||
"module": "commonjs"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user