refactor(shim): Move node CustomEvent polyfill to Platform.shim (#357)

This commit is contained in:
absidue
2023-03-15 04:49:33 +01:00
committed by GitHub
parent 9b005d62d6
commit ffd7d79308
6 changed files with 25 additions and 25 deletions

View File

@@ -105,7 +105,8 @@ Platform.load({
Headers: globalThis.Headers,
FormData: globalThis.FormData,
File: globalThis.File,
ReadableStream: globalThis.ReadableStream
ReadableStream: globalThis.ReadableStream,
CustomEvent: globalThis.CustomEvent
});
export * from './lib.js';

View File

@@ -17,6 +17,7 @@ import os from 'os';
import fs from 'fs/promises';
import { readFileSync } from 'fs';
import DOMParser from './polyfills/server-dom.js';
import CustomEvent from './polyfills/node-custom-event.js';
import { fileURLToPath } from 'url';
import evaluate from './jsruntime/jinter.js';
@@ -123,7 +124,8 @@ Platform.load({
Headers: Headers as unknown as typeof globalThis.Headers,
FormData: FormData as unknown as typeof globalThis.FormData,
File: File as unknown as typeof globalThis.File,
ReadableStream: ReadableStream as unknown as typeof globalThis.ReadableStream
ReadableStream: ReadableStream as unknown as typeof globalThis.ReadableStream,
CustomEvent: CustomEvent as unknown as typeof globalThis.CustomEvent
});
export * from './lib.js';

View File

@@ -0,0 +1,13 @@
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
export default class CustomEvent extends Event {
#detail;
constructor(type: string, options?: CustomEventInit<any[]>) {
super(type, options);
this.#detail = options?.detail ?? null;
}
get detail() {
return this.#detail;
}
}

View File

@@ -115,7 +115,8 @@ Platform.load({
Headers: globalThis.Headers,
FormData: globalThis.FormData,
File: globalThis.File,
ReadableStream: globalThis.ReadableStream
ReadableStream: globalThis.ReadableStream,
CustomEvent: globalThis.CustomEvent
});
export * from './lib.js';

View File

@@ -27,6 +27,7 @@ interface PlatformShim {
FormData: typeof FormData;
File: typeof File;
ReadableStream: typeof ReadableStream;
CustomEvent: typeof CustomEvent;
}
export default PlatformShim;

View File

@@ -1,22 +1,4 @@
// Polyfill CustomEvents on node
if (!Reflect.has(globalThis, 'CustomEvent')) {
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
class CustomEvent extends Event {
#detail;
constructor(type: string, options?: CustomEventInit<any[]>) {
super(type, options);
this.#detail = options?.detail ?? null;
}
get detail() {
return this.#detail;
}
}
Reflect.set(globalThis, 'CustomEvent', CustomEvent);
}
import { Platform } from './Utils.js';
export default class EventEmitterLike extends EventTarget {
#legacy_listeners = new Map<(...args: any[]) => void, EventListener>();
@@ -26,13 +8,13 @@ export default class EventEmitterLike extends EventTarget {
}
emit(type: string, ...args: any[]) {
const event = new CustomEvent(type, { detail: args });
const event = new Platform.shim.CustomEvent(type, { detail: args });
this.dispatchEvent(event);
}
on(type: string, listener: (...args: any[]) => void) {
const wrapper: EventListener = (ev) => {
if (ev instanceof CustomEvent) {
if (ev instanceof Platform.shim.CustomEvent) {
listener(...ev.detail);
} else {
listener(ev);
@@ -44,7 +26,7 @@ export default class EventEmitterLike extends EventTarget {
once(type: string, listener: (...args: any[]) => void) {
const wrapper: EventListener = (ev) => {
if (ev instanceof CustomEvent) {
if (ev instanceof Platform.shim.CustomEvent) {
listener(...ev.detail);
} else {
listener(ev);