@@ -25,6 +25,38 @@ import {
2525 value as usedSefValue ,
2626 getter as usedSefGetter
2727} from "./forms/side-effect-free-used" ;
28+ import {
29+ wrapped ,
30+ wrappedMember ,
31+ wrappedChain ,
32+ innerWrapped ,
33+ comment ,
34+ computed ,
35+ computedChain ,
36+ value as parenthesizedValue ,
37+ valueWhole ,
38+ getter as parenthesizedGetter ,
39+ getterWhole ,
40+ method as parenthesizedMethod ,
41+ info as parenthesizedInfo
42+ } from "./forms/parenthesized" ;
43+ import {
44+ whole as noSemicolonsWhole ,
45+ member as noSemicolonsMember ,
46+ after as noSemicolonsAfter ,
47+ inUnusedExpression
48+ } from "./forms/no-semicolons" ;
49+ import {
50+ reFoo ,
51+ starValue ,
52+ reDefault ,
53+ ns as esmReexporterNs
54+ } from "./forms/esm-reexporter" ;
55+ import {
56+ external as externalWhole ,
57+ a as externalA ,
58+ b as externalB
59+ } from "./forms/external" ;
2860import { foo as esmFoo , bump as esmBump } from "./forms/esm" ;
2961import { name as jsonName , list as jsonList , key as jsonKey } from "./forms/json" ;
3062import { text , lazyText } from "./forms/asset" ;
@@ -200,6 +232,51 @@ it(`[${VARIANT}] re-exports a side-effect-free target read only through re-expor
200232 expect ( usedSefGetter ) . toBe ( usedSef ) ;
201233} ) ;
202234
235+ it ( `[${ VARIANT } ] re-exports through parentheses, comments and computed keys` , ( ) => {
236+ expect ( wrapped . a ) . toBe ( "a" ) ;
237+ expect ( wrappedMember ) . toBe ( "a" ) ;
238+ expect ( wrappedChain ) . toBe ( "x" ) ;
239+ expect ( innerWrapped ) . toBe ( "b" ) ;
240+ expect ( comment ) . toBe ( "a" ) ;
241+ expect ( computed ) . toBe ( "c" ) ;
242+ expect ( computedChain ) . toBe ( "y" ) ;
243+ expect ( parenthesizedValue ) . toBe ( "b" ) ;
244+ expect ( valueWhole . a ) . toBe ( "a" ) ;
245+ expect ( parenthesizedGetter ) . toBe ( "c" ) ;
246+ expect ( getterWhole . a ) . toBe ( "a" ) ;
247+ expect ( parenthesizedMethod ) . toBe ( "x" ) ;
248+ shaken ( parenthesizedInfo , [ "a" , "b" , "c" , "nested" , "usedExports" ] ) ;
249+ } ) ;
250+
251+ it ( `[${ VARIANT } ] re-exports without semicolons, used and unused` , ( ) => {
252+ expect ( noSemicolonsWhole . a ) . toBe ( "a" ) ;
253+ expect ( noSemicolonsMember ) . toBe ( "a" ) ;
254+ expect ( noSemicolonsAfter ) . toBe ( 2 ) ;
255+ expect ( inUnusedExpression ) . toBe ( "c" ) ;
256+ } ) ;
257+
258+ it ( `[${ VARIANT } ] re-exports members of an ESM target re-exporting another module` , ( ) => {
259+ expect ( reFoo ) . toBe ( "foo" ) ;
260+ expect ( starValue ) . toBe ( "star" ) ;
261+ expect ( reDefault ) . toBe ( "default-value" ) ;
262+ expect ( esmReexporterNs . reFoo ) . toBe ( "foo" ) ;
263+ expect ( esmReexporterNs . __esModule ) . toBe ( true ) ;
264+ } ) ;
265+
266+ it ( `[${ VARIANT } ] re-exports an external module` , ( ) => {
267+ expect ( externalWhole . a ) . toBe ( "ext-a" ) ;
268+ expect ( externalA ) . toBe ( "ext-a" ) ;
269+ expect ( externalB ) . toBe ( "ext-b" ) ;
270+ } ) ;
271+
272+ it ( `[${ VARIANT } ] keeps compound assignments to exports as written` , ( ) => {
273+ const exports = require ( "./forms/compound" ) ;
274+ expect ( exports . appended ) . toBe ( "xa" ) ;
275+ expect ( exports . direct ) . toBe ( "yc" ) ;
276+ expect ( exports . viaModule ) . toBe ( "zb" ) ;
277+ expect ( exports . counter ) . toBe ( 3 ) ;
278+ } ) ;
279+
203280it ( `[${ VARIANT } ] re-exports an ESM target as its namespace, with live bindings` , ( ) => {
204281 expect ( esmFoo ) . toBe ( "foo" ) ;
205282 const exports = require ( "./forms/esm" ) ;
@@ -267,6 +344,16 @@ it(`[${VARIANT}] leaves a binding of an AMD local module alone`, () => {
267344 expect ( exports . localMember ) . toBe ( "amd" ) ;
268345} ) ;
269346
347+ it ( `[${ VARIANT } ] resolves a binding name shadowed by hoisting, catch and classes` , ( ) => {
348+ const exports = require ( "./bailouts/hoisted-shadow" ) ;
349+ expect ( exports . outer ) . toBe ( "a" ) ;
350+ expect ( exports . beforeVar ) . toBe ( undefined ) ;
351+ expect ( exports . afterVar ) . toBe ( "var" ) ;
352+ expect ( exports . functionShadow ) . toBe ( "function" ) ;
353+ expect ( exports . catchParam ) . toBe ( "catch" ) ;
354+ expect ( exports . fromClass ) . toBe ( "b" ) ;
355+ } ) ;
356+
270357it ( `[${ VARIANT } ] treats a destructured require as plain values` , ( ) => {
271358 const exports = require ( "./bailouts/destructured" ) ;
272359 expect ( exports . a ) . toBe ( "a" ) ;
0 commit comments