1"use strict"; 2 3exports.__esModule = true; 4 5var _create = require("babel-runtime/core-js/object/create"); 6 7var _create2 = _interopRequireDefault(_create); 8 9exports.getBindingIdentifiers = getBindingIdentifiers; 10exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers; 11 12var _index = require("./index"); 13 14var t = _interopRequireWildcard(_index); 15 16function _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; } } 17 18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 19 20function getBindingIdentifiers(node, duplicates, outerOnly) { 21 var search = [].concat(node); 22 var ids = (0, _create2.default)(null); 23 24 while (search.length) { 25 var id = search.shift(); 26 if (!id) continue; 27 28 var keys = t.getBindingIdentifiers.keys[id.type]; 29 30 if (t.isIdentifier(id)) { 31 if (duplicates) { 32 var _ids = ids[id.name] = ids[id.name] || []; 33 _ids.push(id); 34 } else { 35 ids[id.name] = id; 36 } 37 continue; 38 } 39 40 if (t.isExportDeclaration(id)) { 41 if (t.isDeclaration(id.declaration)) { 42 search.push(id.declaration); 43 } 44 continue; 45 } 46 47 if (outerOnly) { 48 if (t.isFunctionDeclaration(id)) { 49 search.push(id.id); 50 continue; 51 } 52 53 if (t.isFunctionExpression(id)) { 54 continue; 55 } 56 } 57 58 if (keys) { 59 for (var i = 0; i < keys.length; i++) { 60 var key = keys[i]; 61 if (id[key]) { 62 search = search.concat(id[key]); 63 } 64 } 65 } 66 } 67 68 return ids; 69} 70 71getBindingIdentifiers.keys = { 72 DeclareClass: ["id"], 73 DeclareFunction: ["id"], 74 DeclareModule: ["id"], 75 DeclareVariable: ["id"], 76 InterfaceDeclaration: ["id"], 77 TypeAlias: ["id"], 78 OpaqueType: ["id"], 79 80 CatchClause: ["param"], 81 LabeledStatement: ["label"], 82 UnaryExpression: ["argument"], 83 AssignmentExpression: ["left"], 84 85 ImportSpecifier: ["local"], 86 ImportNamespaceSpecifier: ["local"], 87 ImportDefaultSpecifier: ["local"], 88 ImportDeclaration: ["specifiers"], 89 90 ExportSpecifier: ["exported"], 91 ExportNamespaceSpecifier: ["exported"], 92 ExportDefaultSpecifier: ["exported"], 93 94 FunctionDeclaration: ["id", "params"], 95 FunctionExpression: ["id", "params"], 96 97 ClassDeclaration: ["id"], 98 ClassExpression: ["id"], 99 100 RestElement: ["argument"], 101 UpdateExpression: ["argument"], 102 103 RestProperty: ["argument"], 104 ObjectProperty: ["value"], 105 106 AssignmentPattern: ["left"], 107 ArrayPattern: ["elements"], 108 ObjectPattern: ["properties"], 109 110 VariableDeclaration: ["declarations"], 111 VariableDeclarator: ["id"] 112}; 113 114function getOuterBindingIdentifiers(node, duplicates) { 115 return getBindingIdentifiers(node, duplicates, true); 116}