| "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); |
| } |