"use strict";
|
|
exports.__esModule = true;
|
|
var _create = require("babel-runtime/core-js/object/create");
|
|
var _create2 = _interopRequireDefault(_create);
|
|
exports.getBindingIdentifiers = getBindingIdentifiers;
|
exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers;
|
|
var _index = require("./index");
|
|
var t = _interopRequireWildcard(_index);
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
function getBindingIdentifiers(node, duplicates, outerOnly) {
|
var search = [].concat(node);
|
var ids = (0, _create2.default)(null);
|
|
while (search.length) {
|
var id = search.shift();
|
if (!id) continue;
|
|
var keys = t.getBindingIdentifiers.keys[id.type];
|
|
if (t.isIdentifier(id)) {
|
if (duplicates) {
|
var _ids = ids[id.name] = ids[id.name] || [];
|
_ids.push(id);
|
} else {
|
ids[id.name] = id;
|
}
|
continue;
|
}
|
|
if (t.isExportDeclaration(id)) {
|
if (t.isDeclaration(id.declaration)) {
|
search.push(id.declaration);
|
}
|
continue;
|
}
|
|
if (outerOnly) {
|
if (t.isFunctionDeclaration(id)) {
|
search.push(id.id);
|
continue;
|
}
|
|
if (t.isFunctionExpression(id)) {
|
continue;
|
}
|
}
|
|
if (keys) {
|
for (var i = 0; i < keys.length; i++) {
|
var key = keys[i];
|
if (id[key]) {
|
search = search.concat(id[key]);
|
}
|
}
|
}
|
}
|
|
return ids;
|
}
|
|
getBindingIdentifiers.keys = {
|
DeclareClass: ["id"],
|
DeclareFunction: ["id"],
|
DeclareModule: ["id"],
|
DeclareVariable: ["id"],
|
InterfaceDeclaration: ["id"],
|
TypeAlias: ["id"],
|
OpaqueType: ["id"],
|
|
CatchClause: ["param"],
|
LabeledStatement: ["label"],
|
UnaryExpression: ["argument"],
|
AssignmentExpression: ["left"],
|
|
ImportSpecifier: ["local"],
|
ImportNamespaceSpecifier: ["local"],
|
ImportDefaultSpecifier: ["local"],
|
ImportDeclaration: ["specifiers"],
|
|
ExportSpecifier: ["exported"],
|
ExportNamespaceSpecifier: ["exported"],
|
ExportDefaultSpecifier: ["exported"],
|
|
FunctionDeclaration: ["id", "params"],
|
FunctionExpression: ["id", "params"],
|
|
ClassDeclaration: ["id"],
|
ClassExpression: ["id"],
|
|
RestElement: ["argument"],
|
UpdateExpression: ["argument"],
|
|
RestProperty: ["argument"],
|
ObjectProperty: ["value"],
|
|
AssignmentPattern: ["left"],
|
ArrayPattern: ["elements"],
|
ObjectPattern: ["properties"],
|
|
VariableDeclaration: ["declarations"],
|
VariableDeclarator: ["id"]
|
};
|
|
function getOuterBindingIdentifiers(node, duplicates) {
|
return getBindingIdentifiers(node, duplicates, true);
|
}
|