renamer.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _binding = _interopRequireDefault(require("../binding"));
  7. function _helperSplitExportDeclaration() {
  8. var data = _interopRequireDefault(require("@babel/helper-split-export-declaration"));
  9. _helperSplitExportDeclaration = function _helperSplitExportDeclaration() {
  10. return data;
  11. };
  12. return data;
  13. }
  14. function t() {
  15. var data = _interopRequireWildcard(require("@babel/types"));
  16. t = function t() {
  17. return data;
  18. };
  19. return data;
  20. }
  21. 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)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
  22. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  23. var renameVisitor = {
  24. ReferencedIdentifier: function ReferencedIdentifier(_ref, state) {
  25. var node = _ref.node;
  26. if (node.name === state.oldName) {
  27. node.name = state.newName;
  28. }
  29. },
  30. Scope: function Scope(path, state) {
  31. if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) {
  32. path.skip();
  33. }
  34. },
  35. "AssignmentExpression|Declaration": function AssignmentExpressionDeclaration(path, state) {
  36. var ids = path.getOuterBindingIdentifiers();
  37. for (var name in ids) {
  38. if (name === state.oldName) ids[name].name = state.newName;
  39. }
  40. }
  41. };
  42. var Renamer = function () {
  43. function Renamer(binding, oldName, newName) {
  44. this.newName = newName;
  45. this.oldName = oldName;
  46. this.binding = binding;
  47. }
  48. var _proto = Renamer.prototype;
  49. _proto.maybeConvertFromExportDeclaration = function maybeConvertFromExportDeclaration(parentDeclar) {
  50. var maybeExportDeclar = parentDeclar.parentPath;
  51. if (!maybeExportDeclar.isExportDeclaration()) {
  52. return;
  53. }
  54. if (maybeExportDeclar.isExportDefaultDeclaration() && !maybeExportDeclar.get("declaration").node.id) {
  55. return;
  56. }
  57. (0, _helperSplitExportDeclaration().default)(maybeExportDeclar);
  58. };
  59. _proto.maybeConvertFromClassFunctionDeclaration = function maybeConvertFromClassFunctionDeclaration(path) {
  60. return;
  61. if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;
  62. if (this.binding.kind !== "hoisted") return;
  63. path.node.id = t().identifier(this.oldName);
  64. path.node._blockHoist = 3;
  65. path.replaceWith(t().variableDeclaration("let", [t().variableDeclarator(t().identifier(this.newName), t().toExpression(path.node))]));
  66. };
  67. _proto.maybeConvertFromClassFunctionExpression = function maybeConvertFromClassFunctionExpression(path) {
  68. return;
  69. if (!path.isFunctionExpression() && !path.isClassExpression()) return;
  70. if (this.binding.kind !== "local") return;
  71. path.node.id = t().identifier(this.oldName);
  72. this.binding.scope.parent.push({
  73. id: t().identifier(this.newName)
  74. });
  75. path.replaceWith(t().assignmentExpression("=", t().identifier(this.newName), path.node));
  76. };
  77. _proto.rename = function rename(block) {
  78. var binding = this.binding,
  79. oldName = this.oldName,
  80. newName = this.newName;
  81. var scope = binding.scope,
  82. path = binding.path;
  83. var parentDeclar = path.find(function (path) {
  84. return path.isDeclaration() || path.isFunctionExpression() || path.isClassExpression();
  85. });
  86. if (parentDeclar) {
  87. this.maybeConvertFromExportDeclaration(parentDeclar);
  88. }
  89. scope.traverse(block || scope.block, renameVisitor, this);
  90. if (!block) {
  91. scope.removeOwnBinding(oldName);
  92. scope.bindings[newName] = binding;
  93. this.binding.identifier.name = newName;
  94. }
  95. if (binding.type === "hoisted") {}
  96. if (parentDeclar) {
  97. this.maybeConvertFromClassFunctionDeclaration(parentDeclar);
  98. this.maybeConvertFromClassFunctionExpression(parentDeclar);
  99. }
  100. };
  101. return Renamer;
  102. }();
  103. exports.default = Renamer;