@@ -4,6 +4,7 @@ import { createFilter } from '@rollup/pluginutils';
44
55import { peerDependencies , version } from '../package.json' ;
66
7+ import { analyzeExports , ensureInit as ensureLexerInit } from './analyze-exports-lexer' ;
78import analyzeTopLevelStatements from './analyze-top-level-statements' ;
89import { getDynamicModuleRegistry , getDynamicRequireModules } from './dynamic-modules' ;
910
@@ -113,7 +114,7 @@ export default function commonjs(options = {}) {
113114 // Initialized in buildStart
114115 let requireResolver ;
115116
116- function transformAndCheckExports ( code , id ) {
117+ async function transformAndCheckExports ( code , id ) {
117118 const normalizedId = normalizePathSlashes ( id ) ;
118119 const { isEsModule, hasDefaultExport, hasNamedExports, ast } = analyzeTopLevelStatements (
119120 this . parse ,
@@ -138,6 +139,16 @@ export default function commonjs(options = {}) {
138139 return { meta : { commonjs : commonjsMeta } } ;
139140 }
140141
142+ // Use cjs-module-lexer for named export detection on CJS modules
143+ if ( ! isEsModule ) {
144+ const lexerResult = await analyzeExports ( code , id ) ;
145+ commonjsMeta . lexerExports = lexerResult . exports ;
146+ commonjsMeta . lexerReexports = lexerResult . reexports ;
147+ if ( lexerResult . hasDefaultExport && ! commonjsMeta . hasDefaultExport ) {
148+ commonjsMeta . hasDefaultExport = true ;
149+ }
150+ }
151+
141152 const needsRequireWrapper =
142153 ! isEsModule && ( dynamicRequireModules . has ( normalizedId ) || strictRequiresFilter ( id ) ) ;
143154
@@ -202,8 +213,9 @@ export default function commonjs(options = {}) {
202213 return { ...rawOptions , plugins } ;
203214 } ,
204215
205- buildStart ( { plugins } ) {
216+ async buildStart ( { plugins } ) {
206217 validateVersion ( this . meta . rollupVersion , peerDependencies . rollup , 'rollup' ) ;
218+ await ensureLexerInit ( ) ;
207219 const nodeResolve = plugins . find ( ( { name } ) => name === 'node-resolve' ) ;
208220 if ( nodeResolve ) {
209221 validateVersion ( nodeResolve . version , '^13.0.6' , '@rollup/plugin-node-resolve' ) ;
@@ -291,10 +303,12 @@ export default function commonjs(options = {}) {
291303
292304 if ( isWrappedId ( id , ES_IMPORT_SUFFIX ) ) {
293305 const actualId = unwrapId ( id , ES_IMPORT_SUFFIX ) ;
306+ const loadedModule = await this . load ( { id : actualId } ) ;
294307 return getEsImportProxy (
295308 actualId ,
296309 getDefaultIsModuleExports ( actualId ) ,
297- ( await this . load ( { id : actualId } ) ) . moduleSideEffects
310+ loadedModule . moduleSideEffects ,
311+ loadedModule . meta ?. commonjs ?. lexerExports || [ ]
298312 ) ;
299313 }
300314
@@ -319,11 +333,11 @@ export default function commonjs(options = {}) {
319333 return requireResolver . shouldTransformCachedModule . call ( this , ...args ) ;
320334 } ,
321335
322- transform ( code , id ) {
336+ async transform ( code , id ) {
323337 if ( ! isPossibleCjsId ( id ) ) return null ;
324338
325339 try {
326- return transformAndCheckExports . call ( this , code , id ) ;
340+ return await transformAndCheckExports . call ( this , code , id ) ;
327341 } catch ( err ) {
328342 return this . error ( err , err . pos ) ;
329343 }
0 commit comments