management/front/dkha-web-sz-main/node_modules/eslint-plugin-node/lib/util/get-require-targets.js

76 lines
2.2 KiB
JavaScript
Raw Normal View History

2023-12-18 13:12:25 +08:00
/**
* @author Toru Nagashima
* See LICENSE file in root directory for full license.
*/
"use strict"
const path = require("path")
const { getStringIfConstant } = require("eslint-utils")
const resolve = require("resolve")
const getResolvePaths = require("./get-resolve-paths")
const getTryExtensions = require("./get-try-extensions")
const ImportTarget = require("./import-target")
const stripImportPathParams = require("./strip-import-path-params")
/**
* Checks whether or not a given node is a callee.
*
* @param {ASTNode} node - A node to check.
* @returns {boolean} `true` if the node is a callee.
*/
function isCallee(node) {
return node.parent.type === "CallExpression" && node.parent.callee === node
}
/**
* Gets references of "require".
*
* @param {escope.Scope} scope - The global scope.
* @returns {escope.Reference[]} References of "require".
*/
function getReferencesOfRequire(scope) {
const variable = scope.set.get("require")
if (!variable) {
// Not found.
return []
}
return variable.references
}
/**
* Gets a list of `require()` targets.
*
* Core modules of Node.js (e.g. `fs`, `http`) are excluded.
*
* @param {RuleContext} context - The rule context.
* @param {boolean} includeCore - The flag to include core modules.
* @returns {ImportTarget[]} A list of found target's information.
*/
module.exports = function getRequireTargets(context, includeCore) {
const retv = []
const basedir = path.dirname(path.resolve(context.getFilename()))
const paths = getResolvePaths(context)
const references = getReferencesOfRequire(context.getScope())
const extensions = getTryExtensions(context)
const options = { basedir, paths, extensions }
for (const reference of references) {
const node = reference.identifier
// Skips if it's not a call of `require`.
if (!isCallee(node)) {
continue
}
// Gets the target module.
const targetNode = node.parent.arguments[0]
const rawName = getStringIfConstant(targetNode)
const name = rawName && stripImportPathParams(rawName)
if (name && (includeCore || !resolve.isCore(name))) {
retv.push(new ImportTarget(targetNode, name, options))
}
}
return retv
}