@@ -62,12 +62,32 @@ export class EvaluationTestDiscoverer implements ITestDiscoverer {
6262 function placeholder ( ) : unknown {
6363 return new Proxy ( placeholder , {
6464 get : ( obj , target ) => {
65- const desc = Object . getOwnPropertyDescriptor ( obj , target ) ;
66- if ( desc && ! desc . writable && ! desc . configurable ) {
67- return desc . value ; // avoid invariant volation https://stackoverflow.com/q/75148897
65+ try {
66+ const desc = Object . getOwnPropertyDescriptor ( obj , target ) ;
67+ if ( desc && ! desc . writable && ! desc . configurable ) {
68+ return desc . value ; // avoid invariant volation https://stackoverflow.com/q/75148897
69+ }
70+ return placeholder ( ) ;
71+ } catch ( e ) {
72+ return placeholder ( ) ;
6873 }
74+ } ,
75+ set : ( ) => true ,
76+ apply : ( ) => {
6977 return placeholder ( ) ;
7078 } ,
79+ } ) ;
80+ }
81+
82+ function objectPlaceholder ( originalObject : any ) : unknown {
83+ return new Proxy ( objectPlaceholder , {
84+ get : ( _ , target ) => {
85+ if ( target === 'create' ) {
86+ return placeholder ( ) ;
87+ } else {
88+ return originalObject [ target ] ;
89+ }
90+ } ,
7191 set : ( ) => true ,
7292 } ) ;
7393 }
@@ -186,6 +206,15 @@ export class EvaluationTestDiscoverer implements ITestDiscoverer {
186206 } else if ( prop in target ) {
187207 return target [ prop ] ; // top-level `var` defined get set on the contextObj
188208 } else if ( prop in globalThis && ! replacedGlobals . has ( prop as string ) ) {
209+ // Bug #153: ESBuild will wrap require() calls into __toESM which breaks quite some things
210+ // we want to keep our Proxy placeholder object in all scenarios
211+ // Due to that we provide a special proxy object which will create again placeholder proxies
212+ // on Object.create
213+ // https://github.com/evanw/esbuild/blob/d34e79e2a998c21bb71d57b92b0017ca11756912/internal/runtime/runtime.go#L231-L242
214+ if ( prop === 'Object' ) {
215+ return objectPlaceholder ( ( globalThis as any ) [ prop ] ) ;
216+ }
217+
189218 return ( globalThis as any ) [ prop ] ;
190219 } else {
191220 return placeholder ( ) ;
0 commit comments