summaryrefslogtreecommitdiff
path: root/packages/webapi/src/polyfill.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/webapi/src/polyfill.ts')
-rw-r--r--packages/webapi/src/polyfill.ts325
1 files changed, 0 insertions, 325 deletions
diff --git a/packages/webapi/src/polyfill.ts b/packages/webapi/src/polyfill.ts
deleted file mode 100644
index 5fadd5a68..000000000
--- a/packages/webapi/src/polyfill.ts
+++ /dev/null
@@ -1,325 +0,0 @@
-import {
- alert,
- ByteLengthQueuingStrategy,
- cancelAnimationFrame,
- cancelIdleCallback,
- CanvasRenderingContext2D,
- CharacterData,
- clearTimeout,
- Comment,
- CountQueuingStrategy,
- crypto,
- CSSStyleSheet,
- CustomElementRegistry,
- CustomEvent,
- Document,
- DocumentFragment,
- DOMException,
- Element,
- Event,
- EventTarget,
- fetch,
- File,
- FormData,
- Headers,
- HTMLBodyElement,
- HTMLCanvasElement,
- HTMLDivElement,
- HTMLDocument,
- HTMLElement,
- HTMLHeadElement,
- HTMLHtmlElement,
- HTMLImageElement,
- HTMLSpanElement,
- HTMLStyleElement,
- HTMLTemplateElement,
- HTMLUnknownElement,
- Image,
- ImageData,
- initCustomElementRegistry,
- initDocument,
- initMediaQueryList,
- initStorage,
- initWindow,
- IntersectionObserver,
- MediaQueryList,
- MutationObserver,
- Node,
- NodeFilter,
- NodeIterator,
- OffscreenCanvas,
- ReadableByteStreamController,
- ReadableStream,
- ReadableStreamBYOBReader,
- ReadableStreamBYOBRequest,
- ReadableStreamDefaultController,
- ReadableStreamDefaultReader,
- Request,
- requestAnimationFrame,
- requestIdleCallback,
- ResizeObserver,
- Response,
- setTimeout,
- ShadowRoot,
- Storage,
- structuredClone,
- StyleSheet,
- Text,
- TransformStream,
- TreeWalker,
- URLPattern,
- Window,
- WritableStream,
- WritableStreamDefaultController,
- WritableStreamDefaultWriter,
-} from './ponyfill'
-
-import { exclusions } from './exclusions'
-import { inheritance } from './inheritance'
-
-export { pathToPosix } from './lib/utils'
-export {
- alert,
- ByteLengthQueuingStrategy,
- cancelAnimationFrame,
- cancelIdleCallback,
- CanvasRenderingContext2D,
- CharacterData,
- clearTimeout,
- Comment,
- CountQueuingStrategy,
- crypto,
- CSSStyleSheet,
- CustomElementRegistry,
- CustomEvent,
- Document,
- DocumentFragment,
- DOMException,
- Element,
- Event,
- EventTarget,
- fetch,
- File,
- FormData,
- Headers,
- HTMLBodyElement,
- HTMLCanvasElement,
- HTMLDivElement,
- HTMLDocument,
- HTMLElement,
- HTMLHeadElement,
- HTMLHtmlElement,
- HTMLImageElement,
- HTMLSpanElement,
- HTMLStyleElement,
- HTMLTemplateElement,
- HTMLUnknownElement,
- Image,
- ImageData,
- IntersectionObserver,
- MediaQueryList,
- MutationObserver,
- Node,
- NodeFilter,
- NodeIterator,
- OffscreenCanvas,
- ReadableByteStreamController,
- ReadableStream,
- ReadableStreamBYOBReader,
- ReadableStreamBYOBRequest,
- ReadableStreamDefaultController,
- ReadableStreamDefaultReader,
- Request,
- requestAnimationFrame,
- requestIdleCallback,
- ResizeObserver,
- Response,
- setTimeout,
- ShadowRoot,
- structuredClone,
- StyleSheet,
- Text,
- TransformStream,
- TreeWalker,
- URLPattern,
- Window,
- WritableStream,
- WritableStreamDefaultController,
- WritableStreamDefaultWriter,
-} from './ponyfill.js'
-
-export const polyfill = (target: any, options?: PolyfillOptions) => {
- const webAPIs = {
- ByteLengthQueuingStrategy,
- CanvasRenderingContext2D,
- CharacterData,
- Comment,
- CountQueuingStrategy,
- CSSStyleSheet,
- CustomElementRegistry,
- CustomEvent,
- Document,
- DocumentFragment,
- DOMException,
- Element,
- Event,
- EventTarget,
- File,
- FormData,
- HTMLDocument,
- HTMLElement,
- HTMLBodyElement,
- HTMLCanvasElement,
- HTMLDivElement,
- HTMLHeadElement,
- HTMLHtmlElement,
- HTMLImageElement,
- HTMLSpanElement,
- HTMLStyleElement,
- HTMLTemplateElement,
- HTMLUnknownElement,
- Headers,
- IntersectionObserver,
- Image,
- ImageData,
- MediaQueryList,
- MutationObserver,
- Node,
- NodeFilter,
- NodeIterator,
- OffscreenCanvas,
- ReadableByteStreamController,
- ReadableStream,
- ReadableStreamBYOBReader,
- ReadableStreamBYOBRequest,
- ReadableStreamDefaultController,
- ReadableStreamDefaultReader,
- Request,
- ResizeObserver,
- Response,
- ShadowRoot,
- Storage,
- StyleSheet,
- Text,
- TransformStream,
- TreeWalker,
- URLPattern,
- WritableStream,
- WritableStreamDefaultController,
- WritableStreamDefaultWriter,
- Window,
-
- alert,
- cancelAnimationFrame,
- cancelIdleCallback,
- clearTimeout,
- crypto,
- fetch,
- requestAnimationFrame,
- requestIdleCallback,
- setTimeout,
- structuredClone,
- }
-
- // initialize exclude options
- const excludeOptions = new Set(
- typeof Object(options).exclude === 'string'
- ? String(Object(options).exclude).trim().split(/\s+/)
- : Array.isArray(Object(options).exclude)
- ? Object(options).exclude.reduce(
- (array: string[], entry: unknown) =>
- array.splice(
- array.length,
- 0,
- ...(typeof entry === 'string' ? entry.trim().split(/\s+/) : [])
- ) && array,
- []
- )
- : []
- ) as Set<string>
-
- // expand exclude options using exclusion shorthands
- for (const excludeOption of excludeOptions) {
- if (excludeOption in exclusions) {
- for (const exclusion of exclusions[
- excludeOption as keyof typeof exclusions
- ]) {
- excludeOptions.add(exclusion)
- }
- }
- }
-
- // apply each WebAPI
- for (const name of Object.keys(webAPIs)) {
- // skip WebAPIs that are excluded
- if (excludeOptions.has(name)) continue
-
- // skip WebAPIs that are built-in
- if (Object.hasOwnProperty.call(target, name)) continue
-
- // define WebAPIs on the target
- Object.defineProperty(target, name, {
- configurable: true,
- enumerable: true,
- writable: true,
- value: webAPIs[name as keyof typeof webAPIs],
- })
- }
-
- // ensure WebAPIs correctly inherit other WebAPIs
- for (const name of Object.keys(webAPIs)) {
- // skip WebAPIs that are excluded
- if (excludeOptions.has(name)) continue
-
- // skip WebAPIs that do not extend other WebAPIs
- if (!Object.hasOwnProperty.call(inheritance, name)) continue
-
- const Class = target[name]
- const Super = target[inheritance[name as keyof typeof inheritance]]
-
- // skip WebAPIs that are not available
- if (!Class || !Super) continue
-
- // skip WebAPIs that are already inherited correctly
- if (Object.getPrototypeOf(Class.prototype) === Super.prototype) continue
-
- // define WebAPIs inheritance
- Object.setPrototypeOf(Class.prototype, Super.prototype)
- }
-
- if (
- !excludeOptions.has('HTMLDocument') &&
- !excludeOptions.has('HTMLElement')
- ) {
- initDocument(target, excludeOptions)
-
- if (!excludeOptions.has('CustomElementRegistry')) {
- initCustomElementRegistry(target, excludeOptions)
- }
- }
-
- initMediaQueryList(target, excludeOptions)
- initStorage(target, excludeOptions)
- initWindow(target, excludeOptions)
-
- return target
-}
-
-polyfill.internals = (target: any, name: string) => {
- const init = {
- CustomElementRegistry: initCustomElementRegistry,
- Document: initDocument,
- MediaQueryList: initMediaQueryList,
- Storage: initStorage,
- Window: initWindow,
- }
-
- init[name as keyof typeof init](target, new Set<string>())
-
- return target
-}
-
-interface PolyfillOptions {
- exclude?: string | string[]
- override?: Record<string, { (...args: any[]): any }>
-}