diff --git a/package.json b/package.json index c82f1a6e5ab..b2708018e58 100644 --- a/package.json +++ b/package.json @@ -116,8 +116,7 @@ "compilerOptions": { "esModuleInterop": true, "lib": [ - "esnext", - "DOM" + "esnext" ] } }, diff --git a/types/filereader.d.ts b/types/filereader.d.ts index 8bd7e15c242..f05d231b2ff 100644 --- a/types/filereader.d.ts +++ b/types/filereader.d.ts @@ -1,8 +1,11 @@ /// import { Blob } from 'buffer' +import { DOMException, Event, EventInit, EventTarget } from './patch' + +export declare class FileReader { + __proto__: EventTarget & FileReader -export declare class FileReader extends EventTarget { constructor () readAsArrayBuffer (blob: Blob): void @@ -40,10 +43,12 @@ export interface ProgressEventInit extends EventInit { total?: number } -export declare class ProgressEvent extends Event { +export declare class ProgressEvent { + __proto__: Event & ProgressEvent + constructor (type: string, eventInitDict?: ProgressEventInit) readonly lengthComputable: boolean readonly loaded: number readonly total: number -} \ No newline at end of file +} diff --git a/types/patch.d.ts b/types/patch.d.ts new file mode 100644 index 00000000000..f3500b589a4 --- /dev/null +++ b/types/patch.d.ts @@ -0,0 +1,51 @@ +/// + +// See https://github.com/nodejs/undici/issues/1740 + +export type DOMException = typeof globalThis extends { DOMException: infer T } + ? T + : any + +export type EventTarget = typeof globalThis extends { EventTarget: infer T } + ? T + : { + addEventListener( + type: string, + listener: any, + options?: any, + ): void + dispatchEvent(event: Event): boolean + removeEventListener( + type: string, + listener: any, + options?: any | boolean, + ): void + } + +export type Event = typeof globalThis extends { Event: infer T } + ? T + : { + readonly bubbles: boolean + cancelBubble: () => void + readonly cancelable: boolean + readonly composed: boolean + composedPath(): [EventTarget?] + readonly currentTarget: EventTarget | null + readonly defaultPrevented: boolean + readonly eventPhase: 0 | 2 + readonly isTrusted: boolean + preventDefault(): void + returnValue: boolean + readonly srcElement: EventTarget | null + stopImmediatePropagation(): void + stopPropagation(): void + readonly target: EventTarget | null + readonly timeStamp: number + readonly type: string + } + +export interface EventInit { + bubbles?: boolean + cancelable?: boolean + composed?: boolean +}