@@ -34,25 +34,46 @@ const ensureNsObjSource = (info, moduleToInfoMap, requestShortener, strictHarmon
3434} ;
3535
3636const getExternalImport = ( importedModule , info , exportName , asCall , strictHarmonyModule ) => {
37- if ( exportName === true ) {
38- if ( info . interop && strictHarmonyModule ) {
39- return `Object(/* fake namespace object for non-esm import */{ "default": ${ info . name } })` ;
40- }
41- return info . name ;
42- }
4337 const used = importedModule . isUsed ( exportName ) ;
4438 if ( ! used ) return "/* unused reexport */undefined" ;
45- if ( info . interop && strictHarmonyModule ) {
46- if ( exportName === "default" ) {
47- return info . name ;
48- } else {
49- return "/* non-default import from non-esm module */undefined" ;
50- }
51- }
52- if ( info . interop && exportName === "default" ) {
53- return asCall ? `${ info . interopName } ()` : `${ info . interopName } .a` ;
54- }
5539 const comment = used !== exportName ? ` ${ Template . toNormalComment ( exportName ) } ` : "" ;
40+ switch ( importedModule . buildMeta . exportsType ) {
41+ case "named" :
42+ if ( exportName === "default" ) {
43+ return info . name ;
44+ } else if ( exportName === true ) {
45+ info . interopNamespaceObjectUsed = true ;
46+ return info . interopNamespaceObjectName ;
47+ } else {
48+ break ;
49+ }
50+ case "namespace" :
51+ if ( exportName === true ) {
52+ return info . name ;
53+ } else {
54+ break ;
55+ }
56+ default :
57+ if ( strictHarmonyModule ) {
58+ if ( exportName === "default" ) {
59+ return info . name ;
60+ } else if ( exportName === true ) {
61+ info . interopNamespaceObjectUsed = true ;
62+ return info . interopNamespaceObjectName ;
63+ } else {
64+ return "/* non-default import from non-esm module */undefined" ;
65+ }
66+ } else {
67+ if ( exportName === "default" ) {
68+ info . interopDefaultAccessUsed = true ;
69+ return asCall ? `${ info . interopDefaultAccessName } ()` : `${ info . interopDefaultAccessName } .a` ;
70+ } else if ( exportName === true ) {
71+ return info . name ;
72+ } else {
73+ break ;
74+ }
75+ }
76+ }
5677 const reference = `${ info . name } [${ JSON . stringify ( used ) } ${ comment } ]` ;
5778 if ( asCall )
5879 return `Object(${ reference } )` ;
@@ -407,8 +428,10 @@ class ConcatenatedModule extends Module {
407428 module : info . module ,
408429 index : idx ,
409430 name : undefined ,
410- interopName : undefined ,
411- interop : undefined
431+ interopNamespaceObjectUsed : false ,
432+ interopNamespaceObjectName : undefined ,
433+ interopDefaultAccessUsed : false ,
434+ interopDefaultAccessName : undefined
412435 } ;
413436 default :
414437 throw new Error ( `Unsupported concatenation entry type ${ info . type } ` ) ;
@@ -579,14 +602,18 @@ class ConcatenatedModule extends Module {
579602 }
580603 case "external" :
581604 {
582- info . interop = info . module . buildMeta && ! info . module . buildMeta . exportsType ;
583605 const externalName = this . findNewName ( "" , allUsedNames , null , info . module . readableIdentifier ( requestShortener ) ) ;
584606 allUsedNames . add ( externalName ) ;
585607 info . name = externalName ;
586- if ( info . interop ) {
608+ if ( info . module . buildMeta . exportsType === "named" || ! info . module . buildMeta . exportsType ) {
609+ const externalNameInterop = this . findNewName ( "namespaceObject" , allUsedNames , null , info . module . readableIdentifier ( requestShortener ) ) ;
610+ allUsedNames . add ( externalNameInterop ) ;
611+ info . interopNamespaceObjectName = externalNameInterop ;
612+ }
613+ if ( ! info . module . buildMeta . exportsType ) {
587614 const externalNameInterop = this . findNewName ( "default" , allUsedNames , null , info . module . readableIdentifier ( requestShortener ) ) ;
588615 allUsedNames . add ( externalNameInterop ) ;
589- info . interopName = externalNameInterop ;
616+ info . interopDefaultAccessName = externalNameInterop ;
590617 }
591618 break ;
592619 }
@@ -646,8 +673,15 @@ class ConcatenatedModule extends Module {
646673 case "external" :
647674 result . add ( `\n// EXTERNAL MODULE: ${ info . module . readableIdentifier ( requestShortener ) } \n` ) ;
648675 result . add ( `var ${ info . name } = __webpack_require__(${ JSON . stringify ( info . module . id ) } );\n` ) ;
649- if ( info . interop ) {
650- result . add ( `var ${ info . interopName } = /*#__PURE__*/__webpack_require__.n(${ info . name } );\n` ) ;
676+ if ( info . interopNamespaceObjectUsed ) {
677+ if ( info . module . buildMeta . exportsType === "named" ) {
678+ result . add ( `var ${ info . interopNamespaceObjectName } = /*#__PURE__*/Object.assign({ /* fake namespace object */ }, ${ info . name } , { "default": ${ info . name } });\n` ) ;
679+ } else if ( ! info . module . buildMeta . exportsType ) {
680+ result . add ( `var ${ info . interopNamespaceObjectName } = /*#__PURE__*/{ /* fake namespace object */ "default": ${ info . name } };\n` ) ;
681+ }
682+ }
683+ if ( info . interopDefaultAccessUsed ) {
684+ result . add ( `var ${ info . interopDefaultAccessName } = /*#__PURE__*/__webpack_require__.n(${ info . name } );\n` ) ;
651685 }
652686 break ;
653687 default :
0 commit comments