@@ -1164,6 +1164,17 @@ namespace ts {
1164
1164
return false ;
1165
1165
}
1166
1166
1167
+ function isScopeMarker ( node : Node ) {
1168
+ return isExportAssignment ( node ) || isExportDeclaration ( node ) ;
1169
+ }
1170
+
1171
+ function hasScopeMarker ( node : Node ) {
1172
+ if ( isModuleBlock ( node ) ) {
1173
+ return some ( node . statements , isScopeMarker ) ;
1174
+ }
1175
+ return false ;
1176
+ }
1177
+
1167
1178
function ensureModifiers ( node : Node , privateDeclaration ?: boolean ) : ReadonlyArray < Modifier > | undefined {
1168
1179
const currentFlags = getModifierFlags ( node ) ;
1169
1180
const newFlags = ensureModifierFlags ( node , privateDeclaration ) ;
@@ -1178,7 +1189,7 @@ namespace ts {
1178
1189
let additions = ( needsDeclare && ! isAlwaysType ( node ) ) ? ModifierFlags . Ambient : ModifierFlags . None ;
1179
1190
const parentIsFile = node . parent . kind === SyntaxKind . SourceFile ;
1180
1191
if ( ! parentIsFile || ( isBundledEmit && parentIsFile && isExternalModule ( node . parent as SourceFile ) ) ) {
1181
- mask ^= ( ( privateDeclaration || ( isBundledEmit && parentIsFile ) ? 0 : ModifierFlags . Export ) | ModifierFlags . Default | ModifierFlags . Ambient ) ;
1192
+ mask ^= ( ( privateDeclaration || ( isBundledEmit && parentIsFile ) || hasScopeMarker ( node . parent ) ? 0 : ModifierFlags . Export ) | ModifierFlags . Ambient ) ;
1182
1193
additions = ModifierFlags . None ;
1183
1194
}
1184
1195
return maskModifierFlags ( node , mask , additions ) ;
@@ -1240,6 +1251,11 @@ namespace ts {
1240
1251
1241
1252
function maskModifierFlags ( node : Node , modifierMask : ModifierFlags = ModifierFlags . All ^ ModifierFlags . Public , modifierAdditions : ModifierFlags = ModifierFlags . None ) : ModifierFlags {
1242
1253
let flags = ( getModifierFlags ( node ) & modifierMask ) | modifierAdditions ;
1254
+ if ( flags & ModifierFlags . Default && ! ( flags & ModifierFlags . Export ) ) {
1255
+ // A non-exported default is a nonsequitor - we usually try to remove all export modifiers
1256
+ // from statements in ambient declarations; but a default export must retain its export modifier to be syntactically valid
1257
+ flags ^= ModifierFlags . Export ;
1258
+ }
1243
1259
if ( flags & ModifierFlags . Default && flags & ModifierFlags . Ambient ) {
1244
1260
flags ^= ModifierFlags . Ambient ; // `declare` is never required alongside `default` (and would be an error if printed)
1245
1261
}
0 commit comments