55"use strict" ;
66
77const HarmonyExportExpressionDependency = require ( "./HarmonyExportExpressionDependency" ) ;
8+ const HarmonyImportSideEffectDependency = require ( "./HarmonyImportSideEffectDependency" ) ;
89const HarmonyExportHeaderDependency = require ( "./HarmonyExportHeaderDependency" ) ;
910const HarmonyExportSpecifierDependency = require ( "./HarmonyExportSpecifierDependency" ) ;
1011const HarmonyExportImportedSpecifierDependency = require ( "./HarmonyExportImportedSpecifierDependency" ) ;
11- const HarmonyImportDependency = require ( "./HarmonyImportDependency" ) ;
12- const HarmonyModulesHelpers = require ( "./HarmonyModulesHelpers" ) ;
12+ const ConstDependency = require ( "./ConstDependency" ) ;
1313
1414module . exports = class HarmonyExportDependencyParserPlugin {
1515 apply ( parser ) {
@@ -21,11 +21,15 @@ module.exports = class HarmonyExportDependencyParserPlugin {
2121 return true ;
2222 } ) ;
2323 parser . plugin ( "export import" , ( statement , source ) => {
24- const dep = new HarmonyImportDependency ( source , HarmonyModulesHelpers . getNewModuleVar ( parser . state , source ) , statement . range ) ;
25- dep . loc = Object . create ( statement . loc ) ;
26- dep . loc . index = - 1 ;
27- parser . state . current . addDependency ( dep ) ;
28- parser . state . lastHarmonyImport = dep ;
24+ parser . state . lastHarmonyImportOrder = ( parser . state . lastHarmonyImportOrder || 0 ) + 1 ;
25+ const clearDep = new ConstDependency ( "" , statement . range ) ;
26+ clearDep . loc = Object . create ( statement . loc ) ;
27+ clearDep . loc . index = - 1 ;
28+ parser . state . current . addDependency ( clearDep ) ;
29+ const sideEffectDep = new HarmonyImportSideEffectDependency ( source , parser . state . module , parser . state . lastHarmonyImportOrder , parser . state . harmonyParserScope ) ;
30+ sideEffectDep . loc = Object . create ( statement . loc ) ;
31+ sideEffectDep . loc . index = - 1 ;
32+ parser . state . current . addDependency ( sideEffectDep ) ;
2933 return true ;
3034 } ) ;
3135 parser . plugin ( "export expression" , ( statement , expr ) => {
@@ -40,36 +44,22 @@ module.exports = class HarmonyExportDependencyParserPlugin {
4044 const rename = parser . scope . renames . get ( id ) ;
4145 let dep ;
4246 if ( rename === "imported var" ) {
43- const settings = parser . state . harmonySpecifier [ `$ ${ id } ` ] ;
44- dep = new HarmonyExportImportedSpecifierDependency ( parser . state . module , settings [ 0 ] , settings [ 1 ] , settings [ 2 ] , name ) ;
47+ const settings = parser . state . harmonySpecifier . get ( id ) ;
48+ dep = new HarmonyExportImportedSpecifierDependency ( settings . source , parser . state . module , settings . sourceOrder , parser . state . harmonyParserScope , settings . id , name ) ;
4549 } else {
46- const immutable = statement . declaration && isImmutableStatement ( statement . declaration ) ;
47- const hoisted = statement . declaration && isHoistedStatement ( statement . declaration ) ;
48- dep = new HarmonyExportSpecifierDependency ( parser . state . module , id , name , ! immutable || hoisted ? - 2 : ( statement . range [ 1 ] + 0.5 ) , immutable ) ;
50+ dep = new HarmonyExportSpecifierDependency ( parser . state . module , id , name ) ;
4951 }
5052 dep . loc = Object . create ( statement . loc ) ;
5153 dep . loc . index = idx ;
5254 parser . state . current . addDependency ( dep ) ;
5355 return true ;
5456 } ) ;
5557 parser . plugin ( "export import specifier" , ( statement , source , id , name , idx ) => {
56- const dep = new HarmonyExportImportedSpecifierDependency ( parser . state . module , parser . state . lastHarmonyImport , HarmonyModulesHelpers . getModuleVar ( parser . state , source ) , id , name ) ;
58+ const dep = new HarmonyExportImportedSpecifierDependency ( source , parser . state . module , parser . state . lastHarmonyImportOrder , parser . state . harmonyParserScope , id , name ) ;
5759 dep . loc = Object . create ( statement . loc ) ;
5860 dep . loc . index = idx ;
5961 parser . state . current . addDependency ( dep ) ;
6062 return true ;
6163 } ) ;
6264 }
6365} ;
64-
65- function isImmutableStatement ( statement ) {
66- if ( statement . type === "FunctionDeclaration" ) return true ;
67- if ( statement . type === "ClassDeclaration" ) return true ;
68- if ( statement . type === "VariableDeclaration" && statement . kind === "const" ) return true ;
69- return false ;
70- }
71-
72- function isHoistedStatement ( statement ) {
73- if ( statement . type === "FunctionDeclaration" ) return true ;
74- return false ;
75- }
0 commit comments