c4a049ec4815b0cbe41d732d0052478756531e9beef15fc6743a8e09d7f3f6ecd8e8d97442f7b2f4adc62890c78d25a0a5038fff93b138e59ba0161b878858 2.8 KB

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