import-builder.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. function _assert() {
  7. const data = _interopRequireDefault(require("assert"));
  8. _assert = function () {
  9. return data;
  10. };
  11. return data;
  12. }
  13. function t() {
  14. const data = _interopRequireWildcard(require("@babel/types"));
  15. t = function () {
  16. return data;
  17. };
  18. return data;
  19. }
  20. 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; } }
  21. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  22. class ImportBuilder {
  23. constructor(importedSource, scope, hub) {
  24. this._statements = [];
  25. this._resultName = null;
  26. this._scope = null;
  27. this._hub = null;
  28. this._scope = scope;
  29. this._hub = hub;
  30. this._importedSource = importedSource;
  31. }
  32. done() {
  33. return {
  34. statements: this._statements,
  35. resultName: this._resultName
  36. };
  37. }
  38. import() {
  39. this._statements.push(t().importDeclaration([], t().stringLiteral(this._importedSource)));
  40. return this;
  41. }
  42. require() {
  43. this._statements.push(t().expressionStatement(t().callExpression(t().identifier("require"), [t().stringLiteral(this._importedSource)])));
  44. return this;
  45. }
  46. namespace(name = "namespace") {
  47. name = this._scope.generateUidIdentifier(name);
  48. const statement = this._statements[this._statements.length - 1];
  49. (0, _assert().default)(statement.type === "ImportDeclaration");
  50. (0, _assert().default)(statement.specifiers.length === 0);
  51. statement.specifiers = [t().importNamespaceSpecifier(name)];
  52. this._resultName = t().cloneNode(name);
  53. return this;
  54. }
  55. default(name) {
  56. name = this._scope.generateUidIdentifier(name);
  57. const statement = this._statements[this._statements.length - 1];
  58. (0, _assert().default)(statement.type === "ImportDeclaration");
  59. (0, _assert().default)(statement.specifiers.length === 0);
  60. statement.specifiers = [t().importDefaultSpecifier(name)];
  61. this._resultName = t().cloneNode(name);
  62. return this;
  63. }
  64. named(name, importName) {
  65. if (importName === "default") return this.default(name);
  66. name = this._scope.generateUidIdentifier(name);
  67. const statement = this._statements[this._statements.length - 1];
  68. (0, _assert().default)(statement.type === "ImportDeclaration");
  69. (0, _assert().default)(statement.specifiers.length === 0);
  70. statement.specifiers = [t().importSpecifier(name, t().identifier(importName))];
  71. this._resultName = t().cloneNode(name);
  72. return this;
  73. }
  74. var(name) {
  75. name = this._scope.generateUidIdentifier(name);
  76. let statement = this._statements[this._statements.length - 1];
  77. if (statement.type !== "ExpressionStatement") {
  78. (0, _assert().default)(this._resultName);
  79. statement = t().expressionStatement(this._resultName);
  80. this._statements.push(statement);
  81. }
  82. this._statements[this._statements.length - 1] = t().variableDeclaration("var", [t().variableDeclarator(name, statement.expression)]);
  83. this._resultName = t().cloneNode(name);
  84. return this;
  85. }
  86. defaultInterop() {
  87. return this._interop(this._hub.addHelper("interopRequireDefault"));
  88. }
  89. wildcardInterop() {
  90. return this._interop(this._hub.addHelper("interopRequireWildcard"));
  91. }
  92. _interop(callee) {
  93. const statement = this._statements[this._statements.length - 1];
  94. if (statement.type === "ExpressionStatement") {
  95. statement.expression = t().callExpression(callee, [statement.expression]);
  96. } else if (statement.type === "VariableDeclaration") {
  97. (0, _assert().default)(statement.declarations.length === 1);
  98. statement.declarations[0].init = t().callExpression(callee, [statement.declarations[0].init]);
  99. } else {
  100. _assert().default.fail("Unexpected type.");
  101. }
  102. return this;
  103. }
  104. prop(name) {
  105. const statement = this._statements[this._statements.length - 1];
  106. if (statement.type === "ExpressionStatement") {
  107. statement.expression = t().memberExpression(statement.expression, t().identifier(name));
  108. } else if (statement.type === "VariableDeclaration") {
  109. (0, _assert().default)(statement.declarations.length === 1);
  110. statement.declarations[0].init = t().memberExpression(statement.declarations[0].init, t().identifier(name));
  111. } else {
  112. _assert().default.fail("Unexpected type:" + statement.type);
  113. }
  114. return this;
  115. }
  116. read(name) {
  117. this._resultName = t().memberExpression(this._resultName, t().identifier(name));
  118. }
  119. }
  120. exports.default = ImportBuilder;