UNPKG

eslint-plugin-jsdoc

Version:
1 lines 5.71 kB
{"version":3,"file":"importsAsDependencies.cjs","names":["readFileSync","join","iterateJsdoc","tryParse","parse","traverse","isBuiltinModule"],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport * as resolve from '@es-joy/resolve.exports';\nimport {\n readFileSync,\n} from 'node:fs';\nimport {\n isBuiltin as isBuiltinModule,\n} from 'node:module';\nimport {\n join,\n} from 'node:path';\n\n/**\n * @type {Set<string>|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n readFileSync(join(process.cwd(), './package.json'), 'utf8'),\n );\n deps = new Set([\n ...(pkg.dependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.dependencies) :\n []),\n ...(pkg.devDependencies ?\n /* c8 ignore next 2 */\n Object.keys(pkg.devDependencies) :\n []),\n ]);\n /* c8 ignore next -- our package.json exists */\n } catch (error) {\n /* c8 ignore next -- our package.json exists */\n deps = null;\n /* c8 ignore next 4 -- our package.json exists */\n /* eslint-disable no-console -- Inform user */\n console.log(error);\n /* eslint-enable no-console -- Inform user */\n }\n};\n\nconst moduleCheck = new Map();\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n if (deps === undefined) {\n setDeps();\n }\n\n /* c8 ignore next 3 -- our package.json exists */\n if (deps === null) {\n return;\n }\n\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n let typeAst;\n try {\n typeAst = mode === 'permissive' ? tryParse(tag.type) : parse(tag.type, mode);\n } catch {\n continue;\n }\n\n // eslint-disable-next-line no-loop-func -- Safe\n traverse(typeAst, (nde) => {\n /* c8 ignore next 3 -- TS guard */\n if (deps === null) {\n return;\n }\n\n if (nde.type === 'JsdocTypeImport') {\n let mod = nde.element.value.replace(\n /^(@[^\\/]+\\/[^\\/]+|[^\\/]+).*$/v, '$1',\n );\n\n if ((/^[.\\/]/v).test(mod)) {\n return;\n }\n\n if (isBuiltinModule(mod)) {\n // mod = '@types/node';\n // moduleCheck.set(mod, !deps.has(mod));\n return;\n } else if (!moduleCheck.has(mod)) {\n let pkg;\n try {\n pkg = JSON.parse(\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json'), 'utf8'),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings && !resolve.types(pkg))) {\n mod = `@types/${mod}`;\n }\n\n moduleCheck.set(mod, !deps.has(mod));\n }\n\n if (moduleCheck.get(mod)) {\n utils.reportJSDoc(\n 'import points to package which is not found in dependencies',\n tag,\n );\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports if JSDoc `import()` statements point to a package which is not listed in `dependencies` or `devDependencies`',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/imports-as-dependencies.md#repos-sticky-header',\n },\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}