File tree Expand file tree Collapse file tree 2 files changed +45
-21
lines changed
Expand file tree Collapse file tree 2 files changed +45
-21
lines changed Original file line number Diff line number Diff line change 1+ const originalSetImmediate = ( globalThis as any ) . setImmediate
2+ let setImmediateChannel : MessageChannel | null = null
3+ const setImmediateQueue : ( ( ) => void ) [ ] = [ ]
4+
5+ function immediatePolyfill ( callback : ( ...args : any [ ] ) => void , ...args : any [ ] ) {
6+ if ( typeof originalSetImmediate === 'function' ) {
7+ return originalSetImmediate ( callback , ...args )
8+ }
9+
10+ if ( typeof MessageChannel !== 'undefined' ) {
11+ if ( ! setImmediateChannel ) {
12+ setImmediateChannel = new MessageChannel ( )
13+ setImmediateChannel . port1 . addEventListener ( 'message' , ( ) => {
14+ const fn = setImmediateQueue . shift ( )
15+ if ( fn ) {
16+ try {
17+ fn ( )
18+ } catch { }
19+ }
20+ } )
21+ setImmediateChannel . port1 . start ( )
22+ }
23+ setImmediateQueue . push ( ( ) => callback ( ...args ) )
24+ setImmediateChannel . port2 . postMessage ( 0 )
25+ return 0
26+ }
27+
28+ return setTimeout ( ( ) => callback ( ...args ) , 0 )
29+ }
30+
31+ export function installSetImmediatePolyfill ( ) {
32+ if ( typeof ( globalThis as any ) . setImmediate === 'function' ) {
33+ return
34+ }
35+ ; ( globalThis as any ) . setImmediate = immediatePolyfill
36+ }
37+
38+ export function uninstallSetImmediatePolyfill ( ) {
39+ if ( ( globalThis as any ) . setImmediate === immediatePolyfill ) {
40+ delete ( globalThis as any ) . setImmediate
41+ }
42+ }
Original file line number Diff line number Diff line change 11import { ResolvableFile } from '../classes/resolvable-file.ts'
2+ import { uninstallSetImmediatePolyfill } from './set-immediate-polyfill.ts'
23import { vendors } from './vendors.ts'
34
5+ export { installSetImmediatePolyfill , uninstallSetImmediatePolyfill } from './set-immediate-polyfill.ts'
6+
47const { path } = vendors
58
69export const textEncoder = new TextEncoder ( )
@@ -238,24 +241,3 @@ export function isZip(uint8Array: Uint8Array) {
238241 ( uint8Array [ 3 ] === 0x04 || uint8Array [ 3 ] === 0x06 || uint8Array [ 3 ] === 0x08 )
239242 )
240243}
241-
242- const originalSetImmediate = globalThis . setImmediate
243- function setImmediate ( callback : any ) {
244- // eslint-disable-next-line @typescript-eslint/no-implied-eval
245- return originalSetImmediate ? originalSetImmediate ( callback ) : setTimeout ( callback , 0 )
246- }
247-
248- export function installSetImmediatePolyfill ( ) {
249- if ( typeof globalThis . setImmediate === 'function' ) {
250- return
251- }
252- // @ts -expect-error polyfill
253- globalThis . setImmediate = setImmediate
254- }
255-
256- export function uninstallSetImmediatePolyfill ( ) {
257- if ( globalThis . setImmediate === setImmediate ) {
258- // @ts -expect-error remove polyfill
259- delete globalThis . setImmediate
260- }
261- }
You can’t perform that action at this time.
0 commit comments