UNPKG

@graphql-eslint/eslint-plugin

Version:
52 lines (51 loc) 1.67 kB
import path from "node:path"; import debugFactory from "debug"; import fg from "fast-glob"; import { ModuleCache } from "./cache.js"; const debug = debugFactory("graphql-eslint:operations"); const operationsCache = new ModuleCache(); const handleVirtualPath = (documents) => { const filepathMap = /* @__PURE__ */ Object.create(null); return documents.map((source) => { const location = source.location; if ([".gql", ".graphql"].some((extension) => location.endsWith(extension))) { return { ...source, // When using glob pattern e.g. `**/*.gql` location contains always forward slashes even on // Windows location: path.resolve(location) }; } filepathMap[location] ??= -1; const index = filepathMap[location] += 1; return { ...source, location: path.resolve(location, `${index}_document.graphql`) }; }); }; const getDocuments = (project) => { const documentsKey = project.documents; if (!documentsKey) { return []; } let siblings = operationsCache.get(documentsKey); if (!siblings) { debug("Loading operations from %o", project.documents); const documents = project.loadDocumentsSync(project.documents, { skipGraphQLImport: true, pluckConfig: project.extensions.pluckConfig }); if (debug.enabled) { debug("Loaded %d operations", documents.length); const operationsPaths = fg.sync(project.documents, { absolute: true }); debug("Operations pointers %O", operationsPaths); } siblings = handleVirtualPath(documents); operationsCache.set(documentsKey, siblings); } return siblings; }; export { getDocuments };