UNPKG

@nodesecure/js-x-ray

Version:
58 lines 2.05 kB
// Import Internal Dependencies import { VirtualVariableIdentifier } from "./VirtualVariableIdentifier.js"; import { isCallExpression, isMemberExpression } from "./estree/index.js"; export class Inlined { static buildSplitResult(node, target, identifier) { const virtualIdentifier = VirtualVariableIdentifier.generate(identifier, node.loc); return { virtualIdentifier, virtualDeclaration: { type: "VariableDeclaration", kind: "const", declarations: [ { type: "VariableDeclarator", id: { type: "Identifier", name: virtualIdentifier }, init: target } ] }, rebuildExpression: Inlined.#rebuildWithVirtualIdentifier(node, target, virtualIdentifier) }; } static #rebuildWithVirtualIdentifier(node, target, virtualIdentifier) { if (node === target) { return null; } const virtualId = { type: "Identifier", name: virtualIdentifier }; return Inlined.#cloneAndReplace(node, target, virtualId); } static #cloneAndReplace(node, target, replacement) { if (node === target) { return replacement; } if (isCallExpression(node)) { const callee = Inlined.#cloneAndReplace(node.callee, target, replacement); const args = node.arguments.map((arg) => Inlined.#cloneAndReplace(arg, target, replacement)); return { ...node, callee, arguments: args }; } if (isMemberExpression(node)) { return { ...node, object: Inlined.#cloneAndReplace(node.object, target, replacement) }; } return node; } } //# sourceMappingURL=Inlined.js.map