Spaces:
Sleeping
Sleeping
; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.default = void 0; | |
var _assert = require("assert"); | |
var _t = require("@babel/types"); | |
const { | |
callExpression, | |
cloneNode, | |
expressionStatement, | |
identifier, | |
importDeclaration, | |
importDefaultSpecifier, | |
importNamespaceSpecifier, | |
importSpecifier, | |
memberExpression, | |
stringLiteral, | |
variableDeclaration, | |
variableDeclarator | |
} = _t; | |
class ImportBuilder { | |
constructor(importedSource, scope, hub) { | |
this._statements = []; | |
this._resultName = null; | |
this._importedSource = void 0; | |
this._scope = scope; | |
this._hub = hub; | |
this._importedSource = importedSource; | |
} | |
done() { | |
return { | |
statements: this._statements, | |
resultName: this._resultName | |
}; | |
} | |
import() { | |
this._statements.push(importDeclaration([], stringLiteral(this._importedSource))); | |
return this; | |
} | |
require() { | |
this._statements.push(expressionStatement(callExpression(identifier("require"), [stringLiteral(this._importedSource)]))); | |
return this; | |
} | |
namespace(name = "namespace") { | |
const local = this._scope.generateUidIdentifier(name); | |
const statement = this._statements[this._statements.length - 1]; | |
_assert(statement.type === "ImportDeclaration"); | |
_assert(statement.specifiers.length === 0); | |
statement.specifiers = [importNamespaceSpecifier(local)]; | |
this._resultName = cloneNode(local); | |
return this; | |
} | |
default(name) { | |
const id = this._scope.generateUidIdentifier(name); | |
const statement = this._statements[this._statements.length - 1]; | |
_assert(statement.type === "ImportDeclaration"); | |
_assert(statement.specifiers.length === 0); | |
statement.specifiers = [importDefaultSpecifier(id)]; | |
this._resultName = cloneNode(id); | |
return this; | |
} | |
named(name, importName) { | |
if (importName === "default") return this.default(name); | |
const id = this._scope.generateUidIdentifier(name); | |
const statement = this._statements[this._statements.length - 1]; | |
_assert(statement.type === "ImportDeclaration"); | |
_assert(statement.specifiers.length === 0); | |
statement.specifiers = [importSpecifier(id, identifier(importName))]; | |
this._resultName = cloneNode(id); | |
return this; | |
} | |
var(name) { | |
const id = this._scope.generateUidIdentifier(name); | |
let statement = this._statements[this._statements.length - 1]; | |
if (statement.type !== "ExpressionStatement") { | |
_assert(this._resultName); | |
statement = expressionStatement(this._resultName); | |
this._statements.push(statement); | |
} | |
this._statements[this._statements.length - 1] = variableDeclaration("var", [variableDeclarator(id, statement.expression)]); | |
this._resultName = cloneNode(id); | |
return this; | |
} | |
defaultInterop() { | |
return this._interop(this._hub.addHelper("interopRequireDefault")); | |
} | |
wildcardInterop() { | |
return this._interop(this._hub.addHelper("interopRequireWildcard")); | |
} | |
_interop(callee) { | |
const statement = this._statements[this._statements.length - 1]; | |
if (statement.type === "ExpressionStatement") { | |
statement.expression = callExpression(callee, [statement.expression]); | |
} else if (statement.type === "VariableDeclaration") { | |
_assert(statement.declarations.length === 1); | |
statement.declarations[0].init = callExpression(callee, [statement.declarations[0].init]); | |
} else { | |
_assert.fail("Unexpected type."); | |
} | |
return this; | |
} | |
prop(name) { | |
const statement = this._statements[this._statements.length - 1]; | |
if (statement.type === "ExpressionStatement") { | |
statement.expression = memberExpression(statement.expression, identifier(name)); | |
} else if (statement.type === "VariableDeclaration") { | |
_assert(statement.declarations.length === 1); | |
statement.declarations[0].init = memberExpression(statement.declarations[0].init, identifier(name)); | |
} else { | |
_assert.fail("Unexpected type:" + statement.type); | |
} | |
return this; | |
} | |
read(name) { | |
this._resultName = memberExpression(this._resultName, identifier(name)); | |
} | |
} | |
exports.default = ImportBuilder; | |
//# sourceMappingURL=import-builder.js.map | |