{"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":[]}