{"version":3,"file":"importsAsDependencies.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","_fs","_nodeModule","_path","e","__esModule","default","deps","setDeps","pkg","JSON","parse","readFileSync","join","process","cwd","Set","dependencies","Object","keys","devDependencies","error","console","log","moduleCheck","Map","_default","exports","iterateJsdoc","jsdoc","settings","utils","undefined","mode","tag","tags","typeAst","tryParse","type","traverse","nde","mod","element","value","replace","test","isBuiltinModule","has","types","typings","set","get","reportJSDoc","iterateAllJsdocs","meta","docs","description","url","module"],"sources":["../../src/rules/importsAsDependencies.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport {\n readFileSync,\n} from 'fs';\nimport {isBuiltin as isBuiltinModule} from 'node:module';\nimport {\n join,\n} from 'path';\n\n/**\n * @type {Set|null}\n */\nlet deps;\n\nconst setDeps = function () {\n try {\n const pkg = JSON.parse(\n // @ts-expect-error It's ok\n readFileSync(join(process.cwd(), './package.json')),\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 /^(@[^/]+\\/[^/]+|[^/]+).*$/u, '$1',\n );\n\n if ((/^[./]/u).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 // @ts-expect-error It's ok\n readFileSync(join(process.cwd(), 'node_modules', mod, './package.json')),\n );\n } catch {\n // Ignore\n }\n\n if (!pkg || (!pkg.types && !pkg.typings)) {\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":[]}