99  defineOperation, 
1010  exposeInterface, 
1111  lazyDOMExceptionClass, 
12+   defineLazyProperties, 
13+   defineReplaceableLazyAttribute, 
14+   exposeLazyInterfaces, 
1215}  =  require ( 'internal/util' ) ; 
1316const  config  =  internalBinding ( 'config' ) ; 
1417
@@ -28,61 +31,39 @@ exposeGetterAndSetter(globalThis,
2831                        exposeInterface ( globalThis ,  'DOMException' ,  value ) ; 
2932                      } ) ; 
3033
31- const  { 
32-   TextEncoder,  TextDecoder
33- }  =  require ( 'internal/encoding' ) ; 
34- // https://encoding.spec.whatwg.org/#textencoder 
35- exposeInterface ( globalThis ,  'TextEncoder' ,  TextEncoder ) ; 
36- // https://encoding.spec.whatwg.org/#textdecoder 
37- exposeInterface ( globalThis ,  'TextDecoder' ,  TextDecoder ) ; 
38- 
39- const  { 
40-   AbortController, 
41-   AbortSignal, 
42- }  =  require ( 'internal/abort_controller' ) ; 
43- exposeInterface ( globalThis ,  'AbortController' ,  AbortController ) ; 
44- exposeInterface ( globalThis ,  'AbortSignal' ,  AbortSignal ) ; 
45- 
46- const  { 
47-   EventTarget, 
48-   Event, 
49- }  =  require ( 'internal/event_target' ) ; 
50- exposeInterface ( globalThis ,  'EventTarget' ,  EventTarget ) ; 
51- exposeInterface ( globalThis ,  'Event' ,  Event ) ; 
52- const  { 
53-   MessageChannel, 
54-   MessagePort, 
55-   MessageEvent, 
56- }  =  require ( 'internal/worker/io' ) ; 
57- exposeInterface ( globalThis ,  'MessageChannel' ,  MessageChannel ) ; 
58- exposeInterface ( globalThis ,  'MessagePort' ,  MessagePort ) ; 
59- exposeInterface ( globalThis ,  'MessageEvent' ,  MessageEvent ) ; 
60- 
6134// https://html.spec.whatwg.org/multipage/webappapis.html#windoworworkerglobalscope 
6235const  timers  =  require ( 'timers' ) ; 
6336defineOperation ( globalThis ,  'clearInterval' ,  timers . clearInterval ) ; 
6437defineOperation ( globalThis ,  'clearTimeout' ,  timers . clearTimeout ) ; 
6538defineOperation ( globalThis ,  'setInterval' ,  timers . setInterval ) ; 
6639defineOperation ( globalThis ,  'setTimeout' ,  timers . setTimeout ) ; 
6740
68- const  buffer  =  require ( 'buffer' ) ; 
69- defineOperation ( globalThis ,  'atob' ,  buffer . atob ) ; 
70- defineOperation ( globalThis ,  'btoa' ,  buffer . btoa ) ; 
71- 
41+ // Lazy ones. 
42+ exposeLazyInterfaces ( globalThis ,  'internal/abort_controller' ,  [ 
43+   'AbortController' ,  'AbortSignal' , 
44+ ] ) ; 
45+ exposeLazyInterfaces ( globalThis ,  'internal/event_target' ,  [ 
46+   'EventTarget' ,  'Event' , 
47+ ] ) ; 
48+ exposeLazyInterfaces ( globalThis ,  'internal/worker/io' ,  [ 
49+   'MessageChannel' ,  'MessagePort' ,  'MessageEvent' , 
50+ ] ) ; 
51+ defineLazyProperties ( globalThis ,  'buffer' ,  [ 'atob' ,  'btoa' ] ) ; 
7252// https://www.w3.org/TR/FileAPI/#dfn-Blob 
73- exposeInterface ( globalThis ,  'Blob' ,  buffer . Blob ) ; 
74- 
53+ exposeLazyInterfaces ( globalThis ,  'internal/blob' ,  [ 'Blob' ] ) ; 
7554// https://www.w3.org/TR/hr-time-2/#the-performance-attribute 
76- const  perf_hooks  =  require ( 'perf_hooks' ) ; 
77- exposeInterface ( globalThis ,  'Performance' ,  perf_hooks . Performance ) ; 
78- exposeInterface ( globalThis ,  'PerformanceEntry' ,  perf_hooks . PerformanceEntry ) ; 
79- exposeInterface ( globalThis ,  'PerformanceMark' ,  perf_hooks . PerformanceMark ) ; 
80- exposeInterface ( globalThis ,  'PerformanceMeasure' ,  perf_hooks . PerformanceMeasure ) ; 
81- exposeInterface ( globalThis ,  'PerformanceObserver' ,  perf_hooks . PerformanceObserver ) ; 
82- exposeInterface ( globalThis ,  'PerformanceObserverEntryList' ,  perf_hooks . PerformanceObserverEntryList ) ; 
83- exposeInterface ( globalThis ,  'PerformanceResourceTiming' ,  perf_hooks . PerformanceResourceTiming ) ; 
84- defineReplaceableAttribute ( globalThis ,  'performance' , 
85-                            perf_hooks . performance ) ; 
55+ exposeLazyInterfaces ( globalThis ,  'perf_hooks' ,  [ 
56+   'Performance' ,  'PerformanceEntry' ,  'PerformanceMark' ,  'PerformanceMeasure' , 
57+   'PerformanceObserver' ,  'PerformanceObserverEntryList' ,  'PerformanceResourceTiming' , 
58+ ] ) ; 
59+ 
60+ defineReplaceableLazyAttribute ( globalThis ,  'perf_hooks' ,  [ 'performance' ] ) ; 
61+ 
62+ // https://encoding.spec.whatwg.org/#textencoder 
63+ // https://encoding.spec.whatwg.org/#textdecoder 
64+ exposeLazyInterfaces ( globalThis , 
65+                      'internal/encoding' , 
66+                      [ 'TextEncoder' ,  'TextDecoder' ] ) ; 
8667
8768function  createGlobalConsole ( )  { 
8869  const  consoleFromNode  = 
@@ -120,86 +101,43 @@ function exposeGetterAndSetter(target, name, getter, setter = undefined) {
120101  } ) ; 
121102} 
122103
123- // https://webidl.spec.whatwg.org/#Replaceable 
124- function  defineReplaceableAttribute ( target ,  name ,  value )  { 
125-   let  slot  =  value ; 
126- 
127-   // https://webidl.spec.whatwg.org/#dfn-attribute-getter 
128-   function  get ( )  { 
129-     return  slot ; 
130-   } 
131-   ObjectDefineProperty ( get ,  'name' ,  { 
132-     __proto__ : null , 
133-     value : `get ${ name }  ` , 
134-   } ) ; 
135- 
136-   function  set ( value )  { 
137-     slot  =  value ; 
138-   } 
139-   ObjectDefineProperty ( set ,  'name' ,  { 
140-     __proto__ : null , 
141-     value : `set ${ name }  ` , 
142-   } ) ; 
143- 
144-   ObjectDefineProperty ( target ,  name ,  { 
145-     __proto__ : null , 
146-     enumerable : true , 
147-     configurable : true , 
148-     get, 
149-     set, 
150-   } ) ; 
151- } 
152- 
153104// Web Streams API 
154- const  { 
155-   TransformStream, 
156-   TransformStreamDefaultController, 
157- }  =  require ( 'internal/webstreams/transformstream' ) ; 
158- 
159- const  { 
160-   WritableStream, 
161-   WritableStreamDefaultController, 
162-   WritableStreamDefaultWriter, 
163- }  =  require ( 'internal/webstreams/writablestream' ) ; 
105+ exposeLazyInterfaces ( 
106+   globalThis , 
107+   'internal/webstreams/transformstream' , 
108+   [ 'TransformStream' ,  'TransformStreamDefaultController' ] ) ; 
164109
165- const  { 
166-   ReadableStream, 
167-   ReadableStreamDefaultReader, 
168-   ReadableStreamBYOBReader, 
169-   ReadableStreamBYOBRequest, 
170-   ReadableByteStreamController, 
171-   ReadableStreamDefaultController, 
172- }  =  require ( 'internal/webstreams/readablestream' ) ; 
110+ exposeLazyInterfaces ( 
111+   globalThis , 
112+   'internal/webstreams/writablestream' , 
113+   [ 'WritableStream' ,  'WritableStreamDefaultController' ,  'WritableStreamDefaultWriter' ] ) ; 
173114
174- const  { 
175-   ByteLengthQueuingStrategy, 
176-   CountQueuingStrategy, 
177- }  =  require ( 'internal/webstreams/queuingstrategies' ) ; 
115+ exposeLazyInterfaces ( 
116+   globalThis , 
117+   'internal/webstreams/readablestream' , 
118+   [ 
119+     'ReadableStream' ,  'ReadableStreamDefaultReader' , 
120+     'ReadableStreamBYOBReader' ,  'ReadableStreamBYOBRequest' , 
121+     'ReadableByteStreamController' ,  'ReadableStreamDefaultController' , 
122+   ] ) ; 
123+ 
124+ exposeLazyInterfaces ( 
125+   globalThis , 
126+   'internal/webstreams/queuingstrategies' , 
127+   [ 
128+     'ByteLengthQueuingStrategy' ,  'CountQueuingStrategy' , 
129+   ] ) ; 
178130
179- const  { 
180-   TextEncoderStream, 
181-   TextDecoderStream, 
182- }  =  require ( 'internal/webstreams/encoding' ) ; 
131+ exposeLazyInterfaces ( 
132+   globalThis , 
133+   'internal/webstreams/encoding' , 
134+   [ 
135+     'TextEncoderStream' ,  'TextDecoderStream' , 
136+   ] ) ; 
183137
184- const  { 
185-   CompressionStream, 
186-   DecompressionStream, 
187- }  =  require ( 'internal/webstreams/compression' ) ; 
188- 
189- exposeInterface ( globalThis ,  'ReadableStream' ,  ReadableStream ) ; 
190- exposeInterface ( globalThis ,  'ReadableStreamDefaultReader' ,  ReadableStreamDefaultReader ) ; 
191- exposeInterface ( globalThis ,  'ReadableStreamBYOBReader' ,  ReadableStreamBYOBReader ) ; 
192- exposeInterface ( globalThis ,  'ReadableStreamBYOBRequest' ,  ReadableStreamBYOBRequest ) ; 
193- exposeInterface ( globalThis ,  'ReadableByteStreamController' ,  ReadableByteStreamController ) ; 
194- exposeInterface ( globalThis ,  'ReadableStreamDefaultController' ,  ReadableStreamDefaultController ) ; 
195- exposeInterface ( globalThis ,  'TransformStream' ,  TransformStream ) ; 
196- exposeInterface ( globalThis ,  'TransformStreamDefaultController' ,  TransformStreamDefaultController ) ; 
197- exposeInterface ( globalThis ,  'WritableStream' ,  WritableStream ) ; 
198- exposeInterface ( globalThis ,  'WritableStreamDefaultWriter' ,  WritableStreamDefaultWriter ) ; 
199- exposeInterface ( globalThis ,  'WritableStreamDefaultController' ,  WritableStreamDefaultController ) ; 
200- exposeInterface ( globalThis ,  'ByteLengthQueuingStrategy' ,  ByteLengthQueuingStrategy ) ; 
201- exposeInterface ( globalThis ,  'CountQueuingStrategy' ,  CountQueuingStrategy ) ; 
202- exposeInterface ( globalThis ,  'TextEncoderStream' ,  TextEncoderStream ) ; 
203- exposeInterface ( globalThis ,  'TextDecoderStream' ,  TextDecoderStream ) ; 
204- exposeInterface ( globalThis ,  'CompressionStream' ,  CompressionStream ) ; 
205- exposeInterface ( globalThis ,  'DecompressionStream' ,  DecompressionStream ) ; 
138+ exposeLazyInterfaces ( 
139+   globalThis , 
140+   'internal/webstreams/compression' , 
141+   [ 
142+     'CompressionStream' ,  'DecompressionStream' , 
143+   ] ) ; 
0 commit comments