eslint
Advanced tools
Comparing version 8.32.0 to 8.33.0
@@ -30,17 +30,67 @@ /** | ||
schema: [{ | ||
type: "object", | ||
properties: { | ||
restrictedNamedExports: { | ||
type: "array", | ||
items: { | ||
type: "string" | ||
anyOf: [ | ||
{ | ||
type: "object", | ||
properties: { | ||
restrictedNamedExports: { | ||
type: "array", | ||
items: { | ||
type: "string" | ||
}, | ||
uniqueItems: true | ||
} | ||
}, | ||
uniqueItems: true | ||
additionalProperties: false | ||
}, | ||
{ | ||
type: "object", | ||
properties: { | ||
restrictedNamedExports: { | ||
type: "array", | ||
items: { | ||
type: "string", | ||
pattern: "^(?!default$)" | ||
}, | ||
uniqueItems: true | ||
}, | ||
restrictDefaultExports: { | ||
type: "object", | ||
properties: { | ||
// Allow/Disallow `export default foo; export default 42; export default function foo() {}` format | ||
direct: { | ||
type: "boolean" | ||
}, | ||
// Allow/Disallow `export { foo as default };` declarations | ||
named: { | ||
type: "boolean" | ||
}, | ||
// Allow/Disallow `export { default } from "mod"; export { default as default } from "mod";` declarations | ||
defaultFrom: { | ||
type: "boolean" | ||
}, | ||
// Allow/Disallow `export { foo as default } from "mod";` declarations | ||
namedFrom: { | ||
type: "boolean" | ||
}, | ||
// Allow/Disallow `export * as default from "mod"`; declarations | ||
namespaceFrom: { | ||
type: "boolean" | ||
} | ||
}, | ||
additionalProperties: false | ||
} | ||
}, | ||
additionalProperties: false | ||
} | ||
}, | ||
additionalProperties: false | ||
] | ||
}], | ||
messages: { | ||
restrictedNamed: "'{{name}}' is restricted from being used as an exported name." | ||
restrictedNamed: "'{{name}}' is restricted from being used as an exported name.", | ||
restrictedDefault: "Exporting 'default' is restricted." | ||
} | ||
@@ -52,2 +102,3 @@ }, | ||
const restrictedNames = new Set(context.options[0] && context.options[0].restrictedNamedExports); | ||
const restrictDefaultExports = context.options[0] && context.options[0].restrictDefaultExports; | ||
@@ -68,3 +119,39 @@ /** | ||
}); | ||
return; | ||
} | ||
if (name === "default") { | ||
if (node.parent.type === "ExportAllDeclaration") { | ||
if (restrictDefaultExports && restrictDefaultExports.namespaceFrom) { | ||
context.report({ | ||
node, | ||
messageId: "restrictedDefault" | ||
}); | ||
} | ||
} else { // ExportSpecifier | ||
const isSourceSpecified = !!node.parent.parent.source; | ||
const specifierLocalName = astUtils.getModuleExportName(node.parent.local); | ||
if (!isSourceSpecified && restrictDefaultExports && restrictDefaultExports.named) { | ||
context.report({ | ||
node, | ||
messageId: "restrictedDefault" | ||
}); | ||
return; | ||
} | ||
if (isSourceSpecified && restrictDefaultExports) { | ||
if ( | ||
(specifierLocalName === "default" && restrictDefaultExports.defaultFrom) || | ||
(specifierLocalName !== "default" && restrictDefaultExports.namedFrom) | ||
) { | ||
context.report({ | ||
node, | ||
messageId: "restrictedDefault" | ||
}); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
@@ -79,2 +166,11 @@ | ||
ExportDefaultDeclaration(node) { | ||
if (restrictDefaultExports && restrictDefaultExports.direct) { | ||
context.report({ | ||
node, | ||
messageId: "restrictedDefault" | ||
}); | ||
} | ||
}, | ||
ExportNamedDeclaration(node) { | ||
@@ -81,0 +177,0 @@ const declaration = node.declaration; |
{ | ||
"name": "eslint", | ||
"version": "8.32.0", | ||
"version": "8.33.0", | ||
"author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>", | ||
@@ -5,0 +5,0 @@ "description": "An AST-based pattern checker for JavaScript.", |
@@ -13,6 +13,6 @@ [![npm version](https://img.shields.io/npm/v/eslint.svg)](https://www.npmjs.com/package/eslint) | ||
[Website](https://eslint.org) | | ||
[Configuring](https://eslint.org/docs/latest/use/configure) | | ||
[Configure ESLint](https://eslint.org/docs/latest/use/configure) | | ||
[Rules](https://eslint.org/docs/rules/) | | ||
[Contributing](https://eslint.org/docs/latest/contribute) | | ||
[Reporting Bugs](https://eslint.org/docs/latest/contribute/report-bugs) | | ||
[Contribute to ESLint](https://eslint.org/docs/latest/contribute) | | ||
[Report Bugs](https://eslint.org/docs/latest/contribute/report-bugs) | | ||
[Code of Conduct](https://eslint.org/conduct) | | ||
@@ -63,3 +63,3 @@ [Twitter](https://twitter.com/geteslint) | | ||
After running `npm init @eslint/config`, you'll have a `.eslintrc` file in your directory. In it, you'll see some rules configured like this: | ||
After running `npm init @eslint/config`, you'll have an `.eslintrc` file in your directory. In it, you'll see some rules configured like this: | ||
@@ -299,3 +299,3 @@ ```json | ||
<p><a href="https://sentry.io"><img src="https://avatars.githubusercontent.com/u/1396951?v=4" alt="Sentry" height="64"></a> <a href="https://liftoff.io/"><img src="https://images.opencollective.com/liftoff/5c4fa84/logo.png" alt="Liftoff" height="64"></a></p><h3>Bronze Sponsors</h3> | ||
<p><a href="https://themeisle.com"><img src="https://images.opencollective.com/themeisle/d5592fe/logo.png" alt="ThemeIsle" height="32"></a> <a href="https://nx.dev"><img src="https://images.opencollective.com/nx/0efbe42/logo.png" alt="Nx (by Nrwl)" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8: free icons, photos, illustrations, and music" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://www.ignitionapp.com"><img src="https://avatars.githubusercontent.com/u/5753491?v=4" alt="Ignition" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774?v=4" alt="HeroCoders" height="32"></a> <a href="https://quickbookstoolhub.com"><img src="https://avatars.githubusercontent.com/u/95090305?u=e5bc398ef775c9ed19f955c675cdc1fb6abf01df&v=4" alt="QuickBooks Tool hub" height="32"></a></p> | ||
<p><a href="https://themeisle.com"><img src="https://images.opencollective.com/themeisle/d5592fe/logo.png" alt="ThemeIsle" height="32"></a> <a href="https://nx.dev"><img src="https://images.opencollective.com/nx/0efbe42/logo.png" alt="Nx (by Nrwl)" height="32"></a> <a href="https://www.crosswordsolver.org/anagram-solver/"><img src="https://images.opencollective.com/anagram-solver/2666271/logo.png" alt="Anagram Solver" height="32"></a> <a href="https://icons8.com"><img src="https://images.opencollective.com/icons8/7fa1641/logo.png" alt="Icons8: free icons, photos, illustrations, and music" height="32"></a> <a href="https://discord.com"><img src="https://images.opencollective.com/discordapp/f9645d9/logo.png" alt="Discord" height="32"></a> <a href="https://transloadit.com/"><img src="https://avatars.githubusercontent.com/u/125754?v=4" alt="Transloadit" height="32"></a> <a href="https://www.ignitionapp.com"><img src="https://avatars.githubusercontent.com/u/5753491?v=4" alt="Ignition" height="32"></a> <a href="https://herocoders.com"><img src="https://avatars.githubusercontent.com/u/37549774?v=4" alt="HeroCoders" height="32"></a> <a href="https://quickbookstoolhub.com"><img src="https://avatars.githubusercontent.com/u/95090305?u=e5bc398ef775c9ed19f955c675cdc1fb6abf01df&v=4" alt="QuickBooks Tool hub" height="32"></a></p> | ||
<!--sponsorsend--> | ||
@@ -302,0 +302,0 @@ |
2867260
67977