UNPKG

eslint-plugin-esm

Version:
31 lines 4 kB
import fs from "node:fs"; import path from "node:path"; import { create, createRule, getRuleName, getSourceType } from "../common.js"; import { memoize } from "../utils.js"; export const noDirectoryImports = createRule({ name: getRuleName(import.meta.url), message: "Disallow importing from a directory.", create: (context) => create(context, check), }); function check(filename, source) { if (getSourceType(source) !== "local") { return false; } if (source.endsWith(".") || source.endsWith("./")) { return true; } const absolutePath = path.resolve(path.dirname(filename), source); if (!absolutePath.startsWith("/")) { throw new Error(`ESLint plugin internal error. Absolute path incorrect: ${absolutePath}.`); } return isDir(absolutePath); } const isDir = memoize((filePath) => { try { return fs.statSync(filePath).isDirectory(); } catch { return false; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZGlyZWN0b3J5LWltcG9ydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVsZXMvbm8tZGlyZWN0b3J5LWltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0lBQzNDLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLHNDQUFzQztJQUMvQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0NBQzVDLENBQUMsQ0FBQztBQUVILFNBQVMsS0FBSyxDQUFDLFFBQWdCLEVBQUUsTUFBYztJQUM3QyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMERBQTBELFlBQVksR0FBRyxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7SUFDekMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgY3JlYXRlLCBjcmVhdGVSdWxlLCBnZXRSdWxlTmFtZSwgZ2V0U291cmNlVHlwZSB9IGZyb20gXCIuLi9jb21tb24udHNcIjtcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tIFwiLi4vdXRpbHMudHNcIjtcblxuZXhwb3J0IGNvbnN0IG5vRGlyZWN0b3J5SW1wb3J0cyA9IGNyZWF0ZVJ1bGUoe1xuICBuYW1lOiBnZXRSdWxlTmFtZShpbXBvcnQubWV0YS51cmwpLFxuICBtZXNzYWdlOiBcIkRpc2FsbG93IGltcG9ydGluZyBmcm9tIGEgZGlyZWN0b3J5LlwiLFxuICBjcmVhdGU6IChjb250ZXh0KSA9PiBjcmVhdGUoY29udGV4dCwgY2hlY2spLFxufSk7XG5cbmZ1bmN0aW9uIGNoZWNrKGZpbGVuYW1lOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gIGlmIChnZXRTb3VyY2VUeXBlKHNvdXJjZSkgIT09IFwibG9jYWxcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc291cmNlLmVuZHNXaXRoKFwiLlwiKSB8fCBzb3VyY2UuZW5kc1dpdGgoXCIuL1wiKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLCBzb3VyY2UpO1xuICBpZiAoIWFic29sdXRlUGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFU0xpbnQgcGx1Z2luIGludGVybmFsIGVycm9yLiBBYnNvbHV0ZSBwYXRoIGluY29ycmVjdDogJHthYnNvbHV0ZVBhdGh9LmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gaXNEaXIoYWJzb2x1dGVQYXRoKTtcbn1cblxuY29uc3QgaXNEaXIgPSBtZW1vaXplKChmaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLnN0YXRTeW5jKGZpbGVQYXRoKS5pc0RpcmVjdG9yeSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0pO1xuIl19