eslint-plugin-esm
Version:
ESLint plugin for linting ESM (import/export syntax)
25 lines • 3.31 kB
JavaScript
import fs from "node:fs";
import path from "node:path";
import { create, createRule, getRuleName, getSourceType } from "../common.js";
import { memoize } from "../utils.js";
const CLI_PATTERN = /\.cli\.[cm]?[jt]s$/;
const isCliFile = memoize((filePath) => {
if (CLI_PATTERN.test(filePath))
return true;
try {
return fs.readFileSync(filePath, "utf8").startsWith("#!");
}
catch {
return false;
}
});
export const noCliImports = createRule({
name: getRuleName(import.meta.url),
message: "Disallow importing from a CLI file.",
create: (context) => create(context, (filename, source) => {
if (getSourceType(source) !== "local")
return false;
return isCliFile(path.resolve(path.dirname(filename), source));
}),
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tY2xpLWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tY2xpLWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUM7QUFFekMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQzdDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDO0lBQ3JDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLHFDQUFxQztJQUM5QyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNsQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU87WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDLENBQUM7Q0FDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZSwgY3JlYXRlUnVsZSwgZ2V0UnVsZU5hbWUsIGdldFNvdXJjZVR5cGUgfSBmcm9tIFwiLi4vY29tbW9uLnRzXCI7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSBcIi4uL3V0aWxzLnRzXCI7XG5cbmNvbnN0IENMSV9QQVRURVJOID0gL1xcLmNsaVxcLltjbV0/W2p0XXMkLztcblxuY29uc3QgaXNDbGlGaWxlID0gbWVtb2l6ZSgoZmlsZVBhdGg6IHN0cmluZykgPT4ge1xuICBpZiAoQ0xJX1BBVFRFUk4udGVzdChmaWxlUGF0aCkpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsIFwidXRmOFwiKS5zdGFydHNXaXRoKFwiIyFcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSk7XG5cbmV4cG9ydCBjb25zdCBub0NsaUltcG9ydHMgPSBjcmVhdGVSdWxlKHtcbiAgbmFtZTogZ2V0UnVsZU5hbWUoaW1wb3J0Lm1ldGEudXJsKSxcbiAgbWVzc2FnZTogXCJEaXNhbGxvdyBpbXBvcnRpbmcgZnJvbSBhIENMSSBmaWxlLlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PlxuICAgIGNyZWF0ZShjb250ZXh0LCAoZmlsZW5hbWUsIHNvdXJjZSkgPT4ge1xuICAgICAgaWYgKGdldFNvdXJjZVR5cGUoc291cmNlKSAhPT0gXCJsb2NhbFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gaXNDbGlGaWxlKHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLCBzb3VyY2UpKTtcbiAgICB9KSxcbn0pO1xuIl19