@@ -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