Skip to content

Commit 2fd7af0

Browse files
committed
fix(module-compiler): support more exports
1 parent 5e092b6 commit 2fd7af0

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/output/moduleCompiler.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,32 @@ function processModule(store: Store, src: string, filename: string) {
203203
s.remove(node.start!, node.declaration.start!)
204204
} else if (node.source) {
205205
// export { foo, bar } from './foo'
206-
const importId = defineImport(node, node.source.value)
207-
for (const spec of node.specifiers) {
208-
defineExport(
209-
(spec.exported as Identifier).name,
210-
`${importId}.${(spec as ExportSpecifier).local.name}`,
211-
)
206+
// export * as foo from './foo'
207+
if (node.source.value.startsWith('./')) {
208+
const importId = defineImport(node, node.source.value)
209+
for (const spec of node.specifiers) {
210+
defineExport(
211+
(spec.exported as Identifier).name,
212+
spec.type === 'ExportNamespaceSpecifier'
213+
? importId
214+
: `${importId}.${(spec as ExportSpecifier).local.name}`,
215+
)
216+
}
217+
} else {
218+
// export { foo, bar } from 'module'
219+
// export * as foo from 'module'
220+
// export { default as foo } from 'module'
221+
for (const spec of node.specifiers) {
222+
const localName = (spec as ExportSpecifier).local?.name
223+
const exportName = (spec.exported as Identifier).name
224+
const isSameName = localName === exportName
225+
s.prepend(
226+
spec.type === 'ExportNamespaceSpecifier'
227+
? `import * as ${exportName} from '${node.source.value}';\n`
228+
: `import { ${isSameName ? exportName : localName + ' as ' + exportName} } from '${node.source.value}';\n`,
229+
)
230+
defineExport(exportName, exportName)
231+
}
212232
}
213233
s.remove(node.start!, node.end!)
214234
} else {

0 commit comments

Comments
 (0)