37 lines
974 B
TypeScript
37 lines
974 B
TypeScript
// @ts-check
|
|
import { builtinModules } from "node:module";
|
|
import type { Rule } from "eslint";
|
|
|
|
const rule: Rule.RuleModule = {
|
|
meta: {
|
|
type: "problem",
|
|
docs: {
|
|
description:
|
|
"Disallow imports of built-in Node.js modules without the `node:` prefix",
|
|
category: "Best Practices",
|
|
recommended: true,
|
|
},
|
|
fixable: "code",
|
|
schema: [],
|
|
},
|
|
create: context => ({
|
|
ImportDeclaration(node) {
|
|
const { source } = node;
|
|
|
|
if (source?.type === "Literal" && typeof source.value === "string") {
|
|
const moduleName = source.value;
|
|
|
|
if (builtinModules.includes(moduleName) && !moduleName.startsWith("node:")) {
|
|
context.report({
|
|
node: source,
|
|
message: `Import of built-in Node.js module "${moduleName}" must use the "node:" prefix.`,
|
|
fix: fixer => fixer.replaceText(source, `"node:${moduleName}"`),
|
|
});
|
|
}
|
|
}
|
|
},
|
|
}),
|
|
};
|
|
|
|
export default rule;
|