Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/@babel/traverse/lib/index.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

120 lines (94 sloc)
3.77 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = traverse; | |
Object.defineProperty(exports, "NodePath", { | |
enumerable: true, | |
get: function () { | |
return _path.default; | |
} | |
}); | |
Object.defineProperty(exports, "Scope", { | |
enumerable: true, | |
get: function () { | |
return _scope.default; | |
} | |
}); | |
Object.defineProperty(exports, "Hub", { | |
enumerable: true, | |
get: function () { | |
return _hub.default; | |
} | |
}); | |
exports.visitors = void 0; | |
var _context = _interopRequireDefault(require("./context")); | |
var visitors = _interopRequireWildcard(require("./visitors")); | |
exports.visitors = visitors; | |
var _includes = _interopRequireDefault(require("lodash/includes")); | |
var t = _interopRequireWildcard(require("@babel/types")); | |
var cache = _interopRequireWildcard(require("./cache")); | |
var _path = _interopRequireDefault(require("./path")); | |
var _scope = _interopRequireDefault(require("./scope")); | |
var _hub = _interopRequireDefault(require("./hub")); | |
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } | |
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } | |
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | |
function traverse(parent, opts, scope, state, parentPath) { | |
if (!parent) return; | |
if (!opts) opts = {}; | |
if (!opts.noScope && !scope) { | |
if (parent.type !== "Program" && parent.type !== "File") { | |
throw new Error("You must pass a scope and parentPath unless traversing a Program/File. " + `Instead of that you tried to traverse a ${parent.type} node without ` + "passing scope and parentPath."); | |
} | |
} | |
if (!t.VISITOR_KEYS[parent.type]) { | |
return; | |
} | |
visitors.explode(opts); | |
traverse.node(parent, opts, scope, state, parentPath); | |
} | |
traverse.visitors = visitors; | |
traverse.verify = visitors.verify; | |
traverse.explode = visitors.explode; | |
traverse.cheap = function (node, enter) { | |
return t.traverseFast(node, enter); | |
}; | |
traverse.node = function (node, opts, scope, state, parentPath, skipKeys) { | |
const keys = t.VISITOR_KEYS[node.type]; | |
if (!keys) return; | |
const context = new _context.default(scope, opts, state, parentPath); | |
for (const key of keys) { | |
if (skipKeys && skipKeys[key]) continue; | |
if (context.visit(node, key)) return; | |
} | |
}; | |
traverse.clearNode = function (node, opts) { | |
t.removeProperties(node, opts); | |
cache.path.delete(node); | |
}; | |
traverse.removeProperties = function (tree, opts) { | |
t.traverseFast(tree, traverse.clearNode, opts); | |
return tree; | |
}; | |
function hasBlacklistedType(path, state) { | |
if (path.node.type === state.type) { | |
state.has = true; | |
path.stop(); | |
} | |
} | |
traverse.hasType = function (tree, type, blacklistTypes) { | |
if ((0, _includes.default)(blacklistTypes, tree.type)) return false; | |
if (tree.type === type) return true; | |
const state = { | |
has: false, | |
type: type | |
}; | |
traverse(tree, { | |
noScope: true, | |
blacklist: blacklistTypes, | |
enter: hasBlacklistedType | |
}, null, state); | |
return state.has; | |
}; | |
traverse.cache = cache; |