13ad49a024e9eaa41f052cb6635bd7ed35a403c5775bb0253c010b16236ca53dca0612388ebf699c2f21a48363ec97cac3433bac9646b2c34437bd16794564 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = getBindingIdentifiers;
  6. var _index = require("../validators/generated/index.js");
  7. function getBindingIdentifiers(node, duplicates, outerOnly, newBindingsOnly) {
  8. const search = [].concat(node);
  9. const ids = Object.create(null);
  10. while (search.length) {
  11. const id = search.shift();
  12. if (!id) continue;
  13. if (newBindingsOnly && ((0, _index.isAssignmentExpression)(id) || (0, _index.isUnaryExpression)(id) || (0, _index.isUpdateExpression)(id))) {
  14. continue;
  15. }
  16. if ((0, _index.isIdentifier)(id)) {
  17. if (duplicates) {
  18. const _ids = ids[id.name] = ids[id.name] || [];
  19. _ids.push(id);
  20. } else {
  21. ids[id.name] = id;
  22. }
  23. continue;
  24. }
  25. if ((0, _index.isExportDeclaration)(id) && !(0, _index.isExportAllDeclaration)(id)) {
  26. if ((0, _index.isDeclaration)(id.declaration)) {
  27. search.push(id.declaration);
  28. }
  29. continue;
  30. }
  31. if (outerOnly) {
  32. if ((0, _index.isFunctionDeclaration)(id)) {
  33. search.push(id.id);
  34. continue;
  35. }
  36. if ((0, _index.isFunctionExpression)(id)) {
  37. continue;
  38. }
  39. }
  40. const keys = getBindingIdentifiers.keys[id.type];
  41. if (keys) {
  42. for (let i = 0; i < keys.length; i++) {
  43. const key = keys[i];
  44. const nodes = id[key];
  45. if (nodes) {
  46. if (Array.isArray(nodes)) {
  47. search.push(...nodes);
  48. } else {
  49. search.push(nodes);
  50. }
  51. }
  52. }
  53. }
  54. }
  55. return ids;
  56. }
  57. const keys = {
  58. DeclareClass: ["id"],
  59. DeclareFunction: ["id"],
  60. DeclareModule: ["id"],
  61. DeclareVariable: ["id"],
  62. DeclareInterface: ["id"],
  63. DeclareTypeAlias: ["id"],
  64. DeclareOpaqueType: ["id"],
  65. InterfaceDeclaration: ["id"],
  66. TypeAlias: ["id"],
  67. OpaqueType: ["id"],
  68. CatchClause: ["param"],
  69. LabeledStatement: ["label"],
  70. UnaryExpression: ["argument"],
  71. AssignmentExpression: ["left"],
  72. ImportSpecifier: ["local"],
  73. ImportNamespaceSpecifier: ["local"],
  74. ImportDefaultSpecifier: ["local"],
  75. ImportDeclaration: ["specifiers"],
  76. TSImportEqualsDeclaration: ["id"],
  77. ExportSpecifier: ["exported"],
  78. ExportNamespaceSpecifier: ["exported"],
  79. ExportDefaultSpecifier: ["exported"],
  80. FunctionDeclaration: ["id", "params"],
  81. FunctionExpression: ["id", "params"],
  82. ArrowFunctionExpression: ["params"],
  83. ObjectMethod: ["params"],
  84. ClassMethod: ["params"],
  85. ClassPrivateMethod: ["params"],
  86. ForInStatement: ["left"],
  87. ForOfStatement: ["left"],
  88. ClassDeclaration: ["id"],
  89. ClassExpression: ["id"],
  90. RestElement: ["argument"],
  91. UpdateExpression: ["argument"],
  92. ObjectProperty: ["value"],
  93. AssignmentPattern: ["left"],
  94. ArrayPattern: ["elements"],
  95. ObjectPattern: ["properties"],
  96. VariableDeclaration: ["declarations"],
  97. VariableDeclarator: ["id"]
  98. };
  99. getBindingIdentifiers.keys = keys;
  100. //# sourceMappingURL=getBindingIdentifiers.js.map