UNPKG

eslint-plugin-esm

Version:
63 lines 7.76 kB
import path from "node:path"; import { fileURLToPath } from "node:url"; export const DEFAULT_MESSAGE_ID = "default"; export function createRule({ name, message, schema, fixable, type = "suggestion", create: createFn, }) { const rule = { meta: { ...(schema && { schema }), ...(fixable && { fixable }), messages: { [DEFAULT_MESSAGE_ID]: message, }, type, docs: { url: `https://github.com/zanminkian/fenge/blob/main/packages/eslint-plugin-esm/doc/rules/${name}.md`, description: message, }, }, create: createFn, }; return { name, rule }; } export function getRuleName(importMetaUrl) { // remove '.js' extension return path.parse(fileURLToPath(importMetaUrl)).name; } /** * Create ESLint RuleListener to check string importation source. * @param context ESLint RuleContext * @param check the check logic * @returns ESLint RuleListener */ export function create(context, check) { const handle = (node) => { if (!node.source) return; if (!("value" in node.source)) return; if (typeof node.source.value !== "string") return; if (check(context.filename, node.source.value, node)) context.report({ node: node.source, messageId: DEFAULT_MESSAGE_ID }); }; return { ImportDeclaration: handle, ImportExpression: handle, ExportAllDeclaration: handle, ExportNamedDeclaration: handle, }; } export function getSourceType(source) { if (source.startsWith("/") || source.startsWith("./") || source.startsWith("../") || source === "." || source === "..") { return "local"; } if (source.startsWith("node:")) { return "builtin"; } return "module"; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVV6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFFNUMsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQ0osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsSUFBSSxHQUFHLFlBQVksRUFDbkIsTUFBTSxFQUFFLFFBQVEsR0FRakI7SUFDQyxNQUFNLElBQUksR0FBb0I7UUFDNUIsSUFBSSxFQUFFO1lBQ0osR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU87YUFDOUI7WUFDRCxJQUFJO1lBQ0osSUFBSSxFQUFFO2dCQUNKLEdBQUcsRUFBRSxzRkFBc0YsSUFBSSxLQUFLO2dCQUNwRyxXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNGO1FBQ0QsTUFBTSxFQUFFLFFBQVE7S0FDakIsQ0FBQztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBcUI7SUFDL0MseUJBQXlCO0lBQ3pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FDcEIsT0FBeUIsRUFDekIsS0FBMkU7SUFFM0UsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU87UUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQ2xELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztJQUNGLE9BQU87UUFDTCxpQkFBaUIsRUFBRSxNQUFNO1FBQ3pCLGdCQUFnQixFQUFFLE1BQU07UUFDeEIsb0JBQW9CLEVBQUUsTUFBTTtRQUM1QixzQkFBc0IsRUFBRSxNQUFNO0tBQy9CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLElBQ0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUc7UUFDZCxNQUFNLEtBQUssSUFBSSxFQUNmLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0IsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEV4cG9ydEFsbERlY2xhcmF0aW9uLFxuICBFeHBvcnROYW1lZERlY2xhcmF0aW9uLFxuICBJbXBvcnREZWNsYXJhdGlvbixcbiAgSW1wb3J0RXhwcmVzc2lvbixcbn0gZnJvbSBcImVzdHJlZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNCB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NRVNTQUdFX0lEID0gXCJkZWZhdWx0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSdWxlKHtcbiAgbmFtZSxcbiAgbWVzc2FnZSxcbiAgc2NoZW1hLFxuICBmaXhhYmxlLFxuICB0eXBlID0gXCJzdWdnZXN0aW9uXCIsXG4gIGNyZWF0ZTogY3JlYXRlRm4sXG59OiB7XG4gIG5hbWU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzY2hlbWE/OiBKU09OU2NoZW1hNFtdO1xuICBmaXhhYmxlPzogUnVsZS5SdWxlTWV0YURhdGFbXCJmaXhhYmxlXCJdO1xuICB0eXBlPzogUnVsZS5SdWxlTWV0YURhdGFbXCJ0eXBlXCJdO1xuICBjcmVhdGU6IChjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KSA9PiBSdWxlLlJ1bGVMaXN0ZW5lcjtcbn0pOiB7IG5hbWU6IHN0cmluZzsgcnVsZTogUnVsZS5SdWxlTW9kdWxlIH0ge1xuICBjb25zdCBydWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gICAgbWV0YToge1xuICAgICAgLi4uKHNjaGVtYSAmJiB7IHNjaGVtYSB9KSxcbiAgICAgIC4uLihmaXhhYmxlICYmIHsgZml4YWJsZSB9KSxcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIFtERUZBVUxUX01FU1NBR0VfSURdOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHR5cGUsXG4gICAgICBkb2NzOiB7XG4gICAgICAgIHVybDogYGh0dHBzOi8vZ2l0aHViLmNvbS96YW5taW5raWFuL2ZlbmdlL2Jsb2IvbWFpbi9wYWNrYWdlcy9lc2xpbnQtcGx1Z2luLWVzbS9kb2MvcnVsZXMvJHtuYW1lfS5tZGAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtZXNzYWdlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNyZWF0ZTogY3JlYXRlRm4sXG4gIH07XG4gIHJldHVybiB7IG5hbWUsIHJ1bGUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bGVOYW1lKGltcG9ydE1ldGFVcmw6IHN0cmluZykge1xuICAvLyByZW1vdmUgJy5qcycgZXh0ZW5zaW9uXG4gIHJldHVybiBwYXRoLnBhcnNlKGZpbGVVUkxUb1BhdGgoaW1wb3J0TWV0YVVybCkpLm5hbWU7XG59XG5cbmV4cG9ydCB0eXBlIEltcG9ydGF0aW9uTm9kZSA9XG4gIHwgSW1wb3J0RGVjbGFyYXRpb25cbiAgfCBJbXBvcnRFeHByZXNzaW9uXG4gIHwgRXhwb3J0QWxsRGVjbGFyYXRpb25cbiAgfCBFeHBvcnROYW1lZERlY2xhcmF0aW9uO1xuXG4vKipcbiAqIENyZWF0ZSBFU0xpbnQgUnVsZUxpc3RlbmVyIHRvIGNoZWNrIHN0cmluZyBpbXBvcnRhdGlvbiBzb3VyY2UuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgUnVsZUNvbnRleHRcbiAqIEBwYXJhbSBjaGVjayB0aGUgY2hlY2sgbG9naWNcbiAqIEByZXR1cm5zIEVTTGludCBSdWxlTGlzdGVuZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgY2hlY2s6IChmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgbm9kZTogSW1wb3J0YXRpb25Ob2RlKSA9PiBib29sZWFuLFxuKTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICBjb25zdCBoYW5kbGUgPSAobm9kZTogSW1wb3J0YXRpb25Ob2RlKSA9PiB7XG4gICAgaWYgKCFub2RlLnNvdXJjZSkgcmV0dXJuO1xuICAgIGlmICghKFwidmFsdWVcIiBpbiBub2RlLnNvdXJjZSkpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIG5vZGUuc291cmNlLnZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm47XG4gICAgaWYgKGNoZWNrKGNvbnRleHQuZmlsZW5hbWUsIG5vZGUuc291cmNlLnZhbHVlLCBub2RlKSlcbiAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogbm9kZS5zb3VyY2UsIG1lc3NhZ2VJZDogREVGQVVMVF9NRVNTQUdFX0lEIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIEltcG9ydERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gICAgSW1wb3J0RXhwcmVzc2lvbjogaGFuZGxlLFxuICAgIEV4cG9ydEFsbERlY2xhcmF0aW9uOiBoYW5kbGUsXG4gICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogaGFuZGxlLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzb3VyY2U6IHN0cmluZykge1xuICBpZiAoXG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIvXCIpIHx8XG4gICAgc291cmNlLnN0YXJ0c1dpdGgoXCIuL1wiKSB8fFxuICAgIHNvdXJjZS5zdGFydHNXaXRoKFwiLi4vXCIpIHx8XG4gICAgc291cmNlID09PSBcIi5cIiB8fFxuICAgIHNvdXJjZSA9PT0gXCIuLlwiXG4gICkge1xuICAgIHJldHVybiBcImxvY2FsXCI7XG4gIH1cbiAgaWYgKHNvdXJjZS5zdGFydHNXaXRoKFwibm9kZTpcIikpIHtcbiAgICByZXR1cm4gXCJidWlsdGluXCI7XG4gIH1cbiAgcmV0dXJuIFwibW9kdWxlXCI7XG59XG4iXX0=