"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * Represents a module binding for either an import or export statement. */ class Binding { constructor(localName, exportName) { this.localName = localName; this.exportName = exportName; } isAliased() { return this.localName !== this.exportName; } isDefaultExport() { return this.exportName === 'default'; } } exports.Binding = Binding; /** * Builds an export specifier list string for use in an export statement. */ class ExportSpecifierListStringBuilder { constructor(bindings) { this.bindings = bindings; } static build(bindings) { return new ExportSpecifierListStringBuilder(bindings).toString(); } toString() { return `{ ${this.bindings .map((binding) => { if (!binding.isAliased()) { return binding.localName; } else { return `${binding.localName} as ${binding.exportName}`; } }) .join(', ')} }`; } } exports.ExportSpecifierListStringBuilder = ExportSpecifierListStringBuilder; /** * Builds an import specifier list string for use in an import statement. */ class ImportSpecifierListStringBuilder { constructor(bindings) { this.bindings = bindings; } static build(bindings) { return new ImportSpecifierListStringBuilder(bindings).toString(); } toString() { let defaultBinding; let namedBindings = []; for (let binding of this.bindings) { if (binding.isDefaultExport()) { defaultBinding = binding; } else { namedBindings.push(binding); } } let result = ''; let hasNamedBindings = namedBindings.length > 0; if (defaultBinding) { result += defaultBinding.localName; if (hasNamedBindings) { result += ', '; } } if (hasNamedBindings) { result += `{ ${namedBindings .map((binding) => { if (!binding.isAliased()) { return binding.localName; } else { return `${binding.exportName} as ${binding.localName}`; } }) .join(', ')} }`; } return result; } } exports.ImportSpecifierListStringBuilder = ImportSpecifierListStringBuilder; //# sourceMappingURL=bindings.js.map