@@ -9,6 +9,20 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
99const Template = require ( "../Template" ) ;
1010const HarmonyLinkingError = require ( "../HarmonyLinkingError" ) ;
1111
12+ const EMPTY_MAP = new Map ( ) ;
13+
14+ class ExportMode {
15+ constructor ( type ) {
16+ this . type = type ;
17+ this . name = null ;
18+ this . map = EMPTY_MAP ;
19+ this . module = null ;
20+ this . userRequest = null ;
21+ }
22+ }
23+
24+ const EMPTY_STAR_MODE = new ExportMode ( "empty-star" ) ;
25+
1226class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
1327 constructor (
1428 request ,
@@ -40,81 +54,64 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
4054 const importedModule = this . module ;
4155
4256 if ( ! importedModule ) {
43- return {
44- type : "missing" ,
45- userRequest : this . userRequest
46- } ;
57+ const mode = new ExportMode ( "missing" ) ;
58+ mode . userRequest = this . userRequest ;
59+ return mode ;
4760 }
4861
4962 if (
5063 ! ignoreUnused &&
5164 ( name ? ! used : this . originModule . usedExports === false )
5265 ) {
53- return {
54- type : "unused" ,
55- name : name || "*"
56- } ;
66+ const mode = new ExportMode ( "unused" ) ;
67+ mode . name = name || "*" ;
68+ return mode ;
5769 }
5870
5971 const strictHarmonyModule = this . originModule . buildMeta . strictHarmonyModule ;
6072 if ( name && id === "default" && importedModule . buildMeta ) {
6173 if ( ! importedModule . buildMeta . exportsType ) {
62- if ( strictHarmonyModule ) {
63- return {
64- type : "reexport-non-harmony-default-strict" ,
65- module : importedModule ,
66- name
67- } ;
68- } else {
69- return {
70- type : "reexport-non-harmony-default" ,
71- module : importedModule ,
72- name
73- } ;
74- }
74+ const mode = new ExportMode (
75+ strictHarmonyModule
76+ ? "reexport-non-harmony-default-strict"
77+ : "reexport-non-harmony-default"
78+ ) ;
79+ mode . name = name ;
80+ mode . module = importedModule ;
81+ return mode ;
7582 } else if ( importedModule . buildMeta . exportsType === "named" ) {
76- return {
77- type : "reexport-named-default" ,
78- module : importedModule ,
79- name
80- } ;
83+ const mode = new ExportMode ( "reexport-named-default" ) ;
84+ mode . name = name ;
85+ mode . module = importedModule ;
86+ return mode ;
8187 }
8288 }
8389
8490 const isNotAHarmonyModule =
8591 importedModule . buildMeta && ! importedModule . buildMeta . exportsType ;
8692 if ( name ) {
87- // export { name as name }
93+ let mode ;
8894 if ( id ) {
95+ // export { name as name }
8996 if ( isNotAHarmonyModule && strictHarmonyModule ) {
90- return {
91- type : "rexport-non-harmony-undefined" ,
92- module : importedModule ,
93- name
94- } ;
97+ mode = new ExportMode ( "rexport-non-harmony-undefined" ) ;
98+ mode . name = name ;
9599 } else {
96- return {
97- type : "safe-reexport" ,
98- module : importedModule ,
99- map : new Map ( [ [ name , id ] ] )
100- } ;
100+ mode = new ExportMode ( "safe-reexport" ) ;
101+ mode . map = new Map ( [ [ name , id ] ] ) ;
101102 }
102- }
103-
104- // export { * as name }
105- if ( isNotAHarmonyModule && strictHarmonyModule ) {
106- return {
107- type : "reexport-fake-namespace-object" ,
108- module : importedModule ,
109- name
110- } ;
111103 } else {
112- return {
113- type : "reexport-namespace-object" ,
114- module : importedModule ,
115- name
116- } ;
104+ // export { * as name }
105+ if ( isNotAHarmonyModule && strictHarmonyModule ) {
106+ mode = new ExportMode ( "reexport-fake-namespace-object" ) ;
107+ mode . name = name ;
108+ } else {
109+ mode = new ExportMode ( "reexport-namespace-object" ) ;
110+ mode . name = name ;
111+ }
117112 }
113+ mode . module = importedModule ;
114+ return mode ;
118115 }
119116
120117 const hasUsedExports = Array . isArray ( this . originModule . usedExports ) ;
@@ -141,16 +138,13 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
141138 ) ;
142139
143140 if ( map . size === 0 ) {
144- return {
145- type : "empty-star"
146- } ;
141+ return EMPTY_STAR_MODE ;
147142 }
148143
149- return {
150- type : "safe-reexport" ,
151- module : importedModule ,
152- map
153- } ;
144+ const mode = new ExportMode ( "safe-reexport" ) ;
145+ mode . module = importedModule ;
146+ mode . map = map ;
147+ return mode ;
154148 }
155149
156150 const map = new Map (
@@ -166,16 +160,13 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
166160 ) ;
167161
168162 if ( map . size === 0 ) {
169- return {
170- type : "empty-star"
171- } ;
163+ return EMPTY_STAR_MODE ;
172164 }
173165
174- return {
175- type : "checked-reexport" ,
176- module : importedModule ,
177- map
178- } ;
166+ const mode = new ExportMode ( "checked-reexport" ) ;
167+ mode . module = importedModule ;
168+ mode . map = map ;
169+ return mode ;
179170 }
180171
181172 if ( hasProvidedExports ) {
@@ -192,26 +183,22 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
192183 ) ;
193184
194185 if ( map . size === 0 ) {
195- return {
196- type : "empty-star"
197- } ;
186+ return EMPTY_STAR_MODE ;
198187 }
199188
200- return {
201- type : "safe-reexport" ,
202- module : importedModule ,
203- map
204- } ;
189+ const mode = new ExportMode ( "safe-reexport" ) ;
190+ mode . module = importedModule ;
191+ mode . map = map ;
192+ return mode ;
205193 }
206194
207- return {
208- type : "dynamic-reexport" ,
209- module : importedModule
210- } ;
195+ const mode = new ExportMode ( "dynamic-reexport" ) ;
196+ mode . module = importedModule ;
197+ return mode ;
211198 }
212199
213200 getReference ( ) {
214- const mode = this . getMode ( ) ;
201+ const mode = this . getMode ( false ) ;
215202
216203 switch ( mode . type ) {
217204 case "missing" :
@@ -432,7 +419,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
432419 }
433420
434421 getContent ( dep ) {
435- const mode = dep . getMode ( ) ;
422+ const mode = dep . getMode ( false ) ;
436423 const module = dep . originModule ;
437424 const importedModule = dep . module ;
438425 const importVar = dep . getImportVar ( ) ;
0 commit comments