@amazon/vinyl-util 4.0.0 → 4.0.1-next.20261016184530

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/error/ErrorOrigin.ts", "../../src/error/ReportableError.ts", "../../src/error/IllegalArgumentError.ts", "../../src/util/collection/LinkedList.ts", "../../src/event/Signal.ts", "../../src/util/map/map.ts", "../../src/util/type.ts", "../../src/logging/LogTarget.ts", "../../src/event/EventHost.ts", "../../src/util/collection/array.ts", "../../src/util/iteration/iterable.ts", "../../src/error/IllegalStateError.ts", "../../src/util/collection/LruCache.ts", "../../src/util/fun/memoize.ts", "../../src/util/string/string.ts", "../../src/core/disposable.ts", "../../src/global/globalRegistry.ts", "../../src/core/cloneable.ts", "../../src/util/object/object.ts", "../../src/util/serialization/json.ts", "../../src/global/environment.ts", "../../src/util/browser/searchParams.ts", "../../src/logging/getLogLevelFromSearch.ts", "../../src/logging/Logger.ts", "../../src/util/collection/typedArray.ts", "../../src/util/set/set.ts", "../../src/util/object/mergeDeep.ts", "../../src/util/url/resolveUrl.ts", "../../test/browserTestUtil/benchmark/Benchmark.ts", "../../test/browserTestUtil/env/jasmineEnv.ts", "../../test/browserTestUtil/expect/expectNothing.ts", "../../test/browserTestUtil/mock/createSpyFactory.ts", "../../test/browserTestUtil/mock/dom/lib.dom.ts", "../../test/browserTestUtil/mock/dom/globals.ts", "../../test/benchmark/setup.ts", "../../test/benchmark/logging/Logging.bench.ts", "../../test/benchmark/util/collection/LinkedList.bench.ts", "../../test/benchmark/util/object/mergeDeep.bench.ts", "../../test/benchmark/util/serialization/toJson.bench.ts", "../../test/benchmark/util/url/resolveUrl.bench.ts"],
4
- "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const ErrorOrigin = {\n /**\n * The error originated from Vinyl and was reported from the uncaught exception or promise\n * rejection handlers.\n */\n UNCAUGHT: 'uncaught',\n\n /**\n * The error originated from Vinyl and was caught.\n */\n INTERNAL: 'internal',\n\n /**\n * A Vinyl interface was used incorrectly by a consumer.\n */\n API: 'api',\n\n /**\n * The error originated from a failed service call (500 errors).\n */\n SERVICE_EXTERNAL: 'serviceExternal',\n\n /**\n * The error originated from a failed service call (400 errors).\n */\n SERVICE_INTERNAL: 'serviceInternal',\n\n /**\n * The error originated from a problem playing provided media.\n * The reporter is from a component such as the element, source buffer, media source, etc.\n */\n MEDIA: 'media',\n\n /**\n * The error originated from a problem parsing input data.\n * Such as a malformed Dash or HLS manifest.\n */\n PARSING: 'parsing',\n\n /**\n * The error originated from an incompatibility with browser APIs,\n * such as EME.\n */\n COMPATIBILITY: 'compatibility',\n\n /**\n * The error originated from DRM.\n * This does not include internal or service errors, only errors from the creation of media keys or media key\n * sessions.\n */\n DRM: 'drm',\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport type { Json } from '../util/serialization/json'\n\nexport enum ErrorLevel {\n /**\n * Fatal errors are not recoverable.\n */\n FATAL = 'fatal',\n\n /**\n * Warn level errors should be reported, but are recoverable.\n */\n WARN = 'warn',\n\n /**\n * Silent errors should not be reported. For example aborting a play operation due to a new track loading.\n */\n SILENT = 'silent',\n}\n\n/**\n * A Serializable Error that contains an error origin.\n */\nexport class ReportableError extends Error {\n get [Symbol.toStringTag](): string {\n return 'ReportableError'\n }\n\n constructor(\n message?: string,\n readonly origin: string = ErrorOrigin.INTERNAL,\n readonly level: ErrorLevel = ErrorLevel.FATAL\n ) {\n super(message)\n Object.setPrototypeOf(this, ReportableError.prototype)\n }\n\n get name(): string {\n return this[Symbol.toStringTag]\n }\n\n /**\n * All ReportableError instances must be serializable.\n */\n toJSON(): Json {\n return {\n level: this.level,\n message: this.message,\n name: this.name,\n origin: this.origin,\n stack: this.stack,\n }\n }\n}\n\n/**\n * Returns true if the given object is a ReportableError.\n */\nexport function isReportableError(error: any): error is ReportableError {\n // This does not use instanceof ReportableError to avoid ambiguity in the case where this module\n // is loaded multiple times due to version conflicts or code splitting.\n return error instanceof Error && 'origin' in error && 'level' in error\n}\n\n/**\n * Returns true if the error is a ReportableError and is level SILENT.\n * @param error\n */\nexport function isSilentError(error: any): boolean {\n return isReportableError(error) && error.level === ErrorLevel.SILENT\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating that a method was called with illegal arguments.\n */\nexport class IllegalArgumentError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalArgumentError'\n }\n\n constructor(\n message: string,\n readonly isInternal = true\n ) {\n super(message, isInternal ? ErrorOrigin.INTERNAL : ErrorOrigin.API)\n Object.setPrototypeOf(this, IllegalArgumentError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A doubly-linked node.\n *\n * If a node is to move from one list to another, it must be removed first.\n */\nexport interface LinkedNode<T> {\n previous: LinkedNode<T> | null\n value: T\n removed: boolean\n next: LinkedNode<T> | null\n}\n\n/**\n * A standard doubly-linked list implementation.\n */\nexport class LinkedList<T> implements Iterable<T> {\n private _head: LinkedNode<T> | null = null\n private _tail: LinkedNode<T> | null = null\n\n /**\n * Returns the current head.\n */\n get head(): LinkedNode<T> | null {\n return this._head\n }\n\n /**\n * Returns the current tail.\n */\n get tail(): LinkedNode<T> | null {\n return this._tail\n }\n\n /**\n * Returns true if the list is empty.\n */\n get empty(): boolean {\n return this._head === null\n }\n\n /**\n * Creates a new node for the given value, adding it to the end of the list.\n *\n * @param value\n * @return Returns the newly created node.\n */\n push(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: this._tail,\n value,\n removed: false,\n next: null,\n }\n this.pushNode(node)\n return node\n }\n\n /**\n * Appends all given values to the end of this list.\n *\n * @param values\n */\n pushAll(...values: T[]) {\n for (const value of values) {\n this.push(value)\n }\n }\n\n /**\n * Appends the given node to the tail of this list.\n * If the node is already at the tail, it will no-op.\n * If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the tail of this list.\n */\n pushNode(node: LinkedNode<T>) {\n if (this._tail === node) return\n this.remove(node)\n node.removed = false\n node.next = null\n node.previous = this._tail\n if (this._tail) this._tail.next = node\n this._tail = node\n if (!this._head) this._head = node\n }\n\n /**\n * Removes the last node (the tail), returning it.\n * If this list is empty, null is returned.\n */\n pop(): LinkedNode<T> | null {\n const node = this._tail\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Creates a new node, adding it to the front of the list.\n *\n * @param value The value to box in a linked node.\n * @return Returns the new node.\n */\n unshift(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: null,\n value,\n removed: true,\n next: this._head,\n }\n this.unshiftNode(node)\n return node\n }\n\n /**\n * Prepends all the given values to the head of this list.\n * The values will maintain their order.\n *\n * E.g.\n * ```\n * list.unshiftAll(8, 9, 10) // 8, 9, 10\n * list.unshiftAll(4, 5, 6, 7) // 4, 5, 6, 7, 8, 9, 10\n * list.unshiftAll(1, 2, 3) // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n * ```\n *\n * @param values The values to box in linked nodes.\n */\n unshiftAll(...values: T[]) {\n for (let i = values.length - 1; i >= 0; i--) {\n this.unshift(values[i])\n }\n }\n\n /**\n * Prepends the given node to the head of this list.\n * - If the node is already at the head, it will no-op.\n * - If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the head of this list.\n */\n unshiftNode(node: LinkedNode<T>) {\n if (this._head === node) return\n this.remove(node)\n node.removed = false\n node.previous = null\n node.next = this._head\n if (this._head) this._head.previous = node\n this._head = node\n if (!this._tail) this._tail = node\n }\n\n /**\n * Removes the first node (the head), returning it.\n * - If this list is empty, null is returned.\n */\n shift(): LinkedNode<T> | null {\n const node = this._head\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Removes the given linked node.\n *\n * @param node\n */\n remove(node: LinkedNode<T>): void {\n if (node.removed) return\n node.removed = true\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this._head === node) this._head = node.next\n if (this._tail === node) this._tail = node.previous\n }\n\n /**\n * Inserts the given node before pointer node.\n *\n * @param node The node to insert before pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeBefore(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.next === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.previous) {\n pointer.previous.next = node\n node.previous = pointer.previous\n } else {\n this._head = node\n node.previous = null\n }\n node.next = pointer\n pointer.previous = node\n }\n\n /**\n * Inserts the given node after pointer node.\n *\n * @param node The node to insert after pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeAfter(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.previous === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.next) {\n pointer.next.previous = node\n node.next = pointer.next\n } else {\n this._tail = node\n node.next = null\n }\n node.previous = pointer\n pointer.next = node\n }\n\n /**\n * Iterates over every element, invoking the given callback.\n *\n * @param callback\n */\n forEach(callback: (element: T) => void): void {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed) callback(current.value)\n current = current.next\n }\n }\n\n /**\n * Similar to `Array.prototype.some`, returns true if at least one element passes the given\n * predicate.\n *\n * @param predicate\n */\n some(predicate: (element: T) => boolean): boolean {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return true\n current = current.next\n }\n return false\n }\n\n /**\n * Returns the first node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n find(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.next\n }\n return null\n }\n\n /**\n * Returns the last node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n findLast(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._tail\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.previous\n }\n return null\n }\n\n /**\n * Clears this list.\n */\n clear(): void {\n let current = this._head\n while (current != null) {\n const next = current.next\n current.removed = true\n current = next\n }\n this._head = null\n this._tail = null\n }\n\n /**\n * Returns a new iterator, starting at the head.\n */\n [Symbol.iterator](): IterableIterator<T> {\n return this.createIterator(this._head, null, (node) => node.next)\n }\n\n /**\n * Returns a new reversed iterable where the iterator starts at the tail, moving backwards\n * to the head.\n */\n reversed(): IterableIterator<T> {\n return this.createIterator(this._tail, null, (node) => node.previous)\n }\n\n /**\n * Creates an iterable iterator, starting at the specified node, getting the next node from\n * the next() function.\n *\n * Note that using iterators is not as performant as {@link some} or {@link forEach}\n *\n * @param start The starting node. (inclusive)\n * @param end The ending node (exclusive).\n * @param next A method that is given the current node, and returns the next node.\n */\n createIterator(\n start: LinkedNode<T> | null,\n end: LinkedNode<T> | null,\n next: (current: LinkedNode<T>) => LinkedNode<T> | null\n ): IterableIterator<T> {\n let current: LinkedNode<T> | null = start\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return this\n },\n\n next: (): IteratorResult<T> => {\n if (current === end || !current) {\n return {\n value: undefined,\n done: true,\n }\n }\n\n const result = {\n value: current.value,\n done: false,\n }\n current = next(current)\n while (current?.removed) {\n current = next(current)\n }\n return result\n },\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '../core/disposable'\nimport type { Unsubscribe } from '../core/Unsubscribe'\nimport { LinkedList } from '../util/collection/LinkedList'\n\nexport type EventHandler<in T> = (event: T) => void\n\nexport interface SignalOptions {\n /**\n * If true, removes the handler after the first invocation.\n */\n once?: boolean\n}\n\nexport interface Signal<T> {\n /**\n * Returns true if this signal has no handlers.\n */\n readonly empty: boolean\n\n /**\n * Adds an event handler that will be invoked upon signal dispatch.\n *\n * @param handler The handler to invoke on signal dispatch.\n * @param options Options for changing listening behavior.\n * @return Unsubscribe - Returns a method where, when invoked, will remove the handler.\n * If the handler has already been removed, Unsubscribe will do nothing.\n */\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe\n}\n\n/**\n * An object that may dispatch one type of event and have handlers for that event.\n */\nexport class SignalImpl<T> implements Signal<T>, Disposable {\n private handlers = new LinkedList<EventHandler<any>>()\n\n get empty(): boolean {\n return this.handlers.empty\n }\n\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe {\n const remove = () => this.handlers.remove(node)\n const node = this.handlers.push(\n options?.once\n ? (event) => {\n remove()\n handler(event)\n }\n : handler\n )\n return remove\n }\n\n /**\n * Invokes all handlers, providing the given event.\n *\n * Handlers may add/remove callbacks or do a nested dispatch.\n *\n * If a handler is added within a handler, the new handler will not be invoked until the\n * next dispatch.\n *\n * @param event\n */\n dispatch(event: T): void {\n const handlers = this.handlers\n const tail = handlers.tail\n handlers.some((handler) => {\n handler(event)\n return handler === tail!.value\n })\n }\n\n /**\n * Removes all handlers.\n */\n clear(): void {\n this.handlers.clear()\n }\n\n /**\n * Same as clear.\n */\n dispose(): void {\n this.clear()\n }\n}\n\n/**\n * Constructs a new SignalImpl.\n */\nexport function signal<T>(): SignalImpl<T> {\n return new SignalImpl<T>()\n}\n\nexport const emptySignal: Signal<any> = {\n empty: true,\n\n listen(): Unsubscribe {\n return () => {}\n },\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * The minimal `Map`-shaped interface that {@link getOrSet} needs.\n */\nexport interface GetOrSetMap<K, V> {\n has(key: K): boolean\n get(key: K): V | undefined\n set(key: K, value: V): unknown\n}\n\n/**\n * Gets the value on map for the given key if it exists, otherwise sets [key] to `defaultValue`,\n * returning the newly set value.\n *\n * @param map\n * @param key\n * @param defaultValue\n */\nexport function getOrSet<K, V>(\n map: GetOrSetMap<K, V>,\n key: K,\n defaultValue: (key: K) => V\n): V {\n if (map.has(key)) {\n return map.get(key) as V\n } else {\n const value = defaultValue(key)\n map.set(key, value)\n return value\n }\n}\n\n/**\n * Flips a map so that the keys become the values and the values become the keys.\n *\n * @param map\n * @return Returns a new map.\n */\nexport function flipMap<K, V>(map: Iterable<readonly [K, V]>): Map<V, K> {\n const result = new Map<V, K>()\n for (const [key, value] of map) {\n result.set(value, key)\n }\n return result\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * Type-safety utility\n */\n\n/**\n * Distributes the value types of an array into a union.\n */\nexport type Flatten<T> = T extends readonly any[] ? T[number] : T\n\n/**\n * Property keys of an object that do not map to functions.\n */\nexport type NonFunctionPropertyNames<T> = {\n [K in keyof T]: T[K] extends (...args: any) => any ? never : K\n}[keyof T]\n\n/**\n * All primitive types.\n */\nexport type Primitive =\n bigint | boolean | number | string | symbol | null | undefined\n\n/**\n * An empty object, safer than using `object` type.\n */\nexport type AnyRecord = Record<never, any>\n\n/**\n * never, with a message to help explain the problem.\n * https://github.com/microsoft/TypeScript/issues/33098\n */\nexport type Never<Message extends string> = [never, Message]\n\n/**\n * A type representing any type of function.\n */\nexport type Fun = (...args: any[]) => any\n\n/**\n * Enforces that the type represents data that can be serialized via JSON.stringify.\n */\nexport type JsonCompatible<T> = unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? never\n : T extends\n boolean | number | string | null | undefined | { toJSON(): any }\n ? T\n : T extends readonly any[]\n ? readonly JsonCompatible<T[number]>[]\n : {\n [P in keyof T]: JsonCompatible<T[P]>\n }\n\n/**\n * A compile-time check that the given value/array/object is serializable via JSON.stringify.\n *\n * A value is serializable if any of these are true:\n * - It is an object with a toJSON() function\n * - It is an object with only serializable members.\n * - It is an array with only serializable elements.\n * - It is type boolean, string, number, null, or undefined.\n */\nexport function jsonCompatible<T>(value: JsonCompatible<T>): T {\n return value as T\n}\n\n/**\n * An object whose properties are all optional, and all sub-properties are optional.\n * Note: does not convert array or tuple elements to Partial.\n */\nexport type PartialDeep<T> = T extends Fun | Primitive\n ? T\n : T extends object\n ? {\n [P in keyof T]?: PartialDeep<T[P]>\n }\n : T\n\n/**\n * Defines specific properties of T that are not required.\n */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\n/**\n * Possible values `typeof` operator may return.\n */\nexport type Typeof =\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined'\n\n/**\n * Given a possible result from `typeof`, provides the type to the matched value.\n */\nexport type FromTypeof<T extends Typeof> = T extends 'bigint'\n ? bigint\n : T extends 'boolean'\n ? boolean\n : T extends 'function'\n ? Fun\n : T extends 'number'\n ? number\n : T extends 'object'\n ? object | null\n : T extends 'string'\n ? string\n : T extends 'symbol'\n ? symbol\n : T extends 'undefined'\n ? undefined\n : any\n\n/**\n * Extracts values from T which extends type U.\n */\nexport type ExtractValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? P : never\n }[keyof T]\n>\n\n/**\n * Excludes values from T which extends type U.\n */\nexport type ExcludeValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? never : P\n }[keyof T]\n>\n\nexport type Maybe<T> = T | undefined | null\n\n/**\n * Infers the element type from an Array type.\n */\nexport type ElementType<T extends readonly any[]> =\n T extends ReadonlyArray<infer E> ? E : never\n\n/**\n * Infers the element type from a Set type.\n */\nexport type SetElementType<T extends ReadonlySet<any>> =\n T extends ReadonlySet<infer E> ? E : never\n\n/**\n * Enforces type T to be in an invariant position.\n * For example `Invariant<Square>` cannot be assigned to type `Invariant<Polygon>` or vice versa.\n *\n * This should be used when an interface with type parameter T needs strict invariance in addition to what the\n * compiler can infer from use.\n *\n * {@link https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)}\n */\nexport type Invariant<T> = T &\n Required<T> &\n ((input: T & Required<T>) => T & Required<T>)\n\nexport function invariant<T>(): Invariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Square>` can be assigned to type `Invariant<Polygon>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * output position, but the interface implies `out T`.\n */\nexport type Covariant<T> = () => T\n\nexport function covariant<T>(): Covariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Polygon>` can be assigned to type `Invariant<Square>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * input position, but the interface implies `in T`.\n */\nexport type Contravariant<T> = (input: T) => void\n\nexport function contravariant<T>(): Contravariant<T> {\n return undefined as any\n}\n\n/**\n * A type which may either be a direct instance of T or a promise that resolves to T.\n */\nexport type MaybePromise<T> = PromiseLike<T> | T\n\n/**\n * Deeply excludes all keys from T extending K.\n */\nexport type OmitDeep<T, K extends keyof any> = Omit<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OmitDeep<T[P], K>\n },\n K\n>\n\n/**\n * Make properties of T extending K optional.\n */\nexport type Optional<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>\n\n/**\n * Make properties of T extending K optional, recursively.\n */\nexport type OptionalDeep<T, K extends keyof any> = Optional<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OptionalDeep<T[P], K>\n },\n K & keyof T\n>\n\n/**\n * true if T extends never, otherwise false\n */\nexport type IsNever<T> = [T] extends [never] ? true : false\n\n/**\n * true if T extends any, otherwise false\n */\nexport type IsAny<T> = 0 extends 1 & T ? true : false\n\n/**\n * Determines whether a property `P` of object type `U` is declared as optional.\n *\n * This checks whether the `{}` type (an empty object) is assignable to\n * `Pick<U, P>`. In TypeScript, this is true only when `P` is marked optional\n * using the `?` modifier in the type definition.\n *\n * Importantly, this detects *actual optionality* rather than checking whether\n * the property's type includes `undefined`. For example:\n *\n * ```ts\n * type A = { x?: string }; // optional\n * type B = { x: string | undefined }; // required but allows undefined\n *\n * IsPropertyOptional<A, \"x\"> // true\n * IsPropertyOptional<B, \"x\"> // false\n * ```\n *\n * @template U - The object type containing the property.\n * @template P - The key of the property to test.\n * @returns `true` if `P` is an optional property, otherwise `false`.\n */\nexport type IsPropertyOptional<U, P extends keyof U> =\n AnyRecord extends Pick<U, P> ? true : false\n\n/**\n * A type that equals true if Left and Right are loosely equal, that is, that Left extends Right\n * and Right extends Left.\n * This will always equal true or false, and never the union `true | false`\n */\nexport type Equal<Left, Right> = [Left] extends [Right]\n ? [Right] extends [Left]\n ? true\n : false\n : false\n\n/**\n * A type that equals true if Left and Right are strictly equal.\n * Works with complex objects, readonly, and optional modifiers.\n * Works with method input arguments.\n * This will always equal true or false, and never the union `true | false`\n */\nexport type StrictEqual<Left, Right> =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n (<T>() => T extends Left ? 0 : 1) extends <T>() => T extends Right ? 0 : 1\n ? Equal<Left, Right>\n : false\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides the logging prefix for all logs made by this target.\n */\nexport interface LogTarget {\n /**\n * A string prefix for all log statements made by this target.\n */\n readonly logPrefix: string\n}\n\n/**\n * A static counter for creating a locally-unique id.\n */\nlet counter = 0\n\n/**\n * Creates a unique log prefix.\n *\n * @param target Either a string or an object with a toStringTag.\n * The log prefix will append a unique counter.\n */\nexport function createLogPrefix(\n target: string | { readonly [Symbol.toStringTag]: string }\n): string {\n const name =\n typeof target === 'string' ? target : target[Symbol.toStringTag]\n return `${name}/${++counter}`\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '../core/disposable'\nimport type { EventHandler, SignalImpl, SignalOptions } from './Signal'\nimport { signal } from './Signal'\nimport type { Unsubscribe } from '../core/Unsubscribe'\nimport { getOrSet } from '../util/map/map'\nimport type { Covariant } from '../util/type'\nimport { covariant } from '../util/type'\nimport { createLogPrefix, type LogTarget } from '../logging/LogTarget'\n\nexport interface EventDispatcher<in EventMap> extends LogTarget {\n /**\n * Dispatches an event.\n *\n * @param type The key of the event within `EventMap`\n * @param event If the passed event is read-only, then it may be re-used/cached. Otherwise,\n * it should be a new event object every dispatch. If no target property is set on the event,\n * the target will be set to this host.\n */\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void\n}\n\nexport interface ReadonlyEventHost<out EventMap> {\n /**\n * Adds an event handler for the given typed event.\n *\n * @param type The key representing the event type to listen for.\n * @param handler A callback to invoke when the event with the given type is dispatched.\n * @param options Options for changing listening behavior.\n * @return Returns a method, when invoked, removes the handler.\n */\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe\n\n /**\n * Returns true if the event host has any listeners.\n */\n hasAnyListeners(): boolean\n\n /**\n * Returns true if the event host has any listeners for the given type.\n */\n hasListeners(type: keyof EventMap): boolean\n\n /**\n * Exists for EventMap type inference.\n *\n * @private\n */\n __eventMapType: Covariant<EventMap>\n}\n\n/**\n * An object that may dispatch events and have handlers for those events.\n * Similar to the DOM's `EventTarget`, this is a basic event system based on event naming.\n *\n * Some of the advantages of EventHost over EventTarget:\n * - Not all supported platforms support EventTarget construction or extension.\n * - EventTarget is designed for the DOM, with bubble and capture phases not necessary in Vinyl.\n * - Event types are strict.\n * - Events can be plain objects, no need to extend CustomEvent.\n * - Easier unsubscription and disposal; reduces the risk of memory leaks.\n *\n * EventHost supports concurrent modification, that is, handlers may be added or removed during\n * the execution of another handler.\n */\nexport interface EventHost<EventMap>\n extends ReadonlyEventHost<EventMap>, EventDispatcher<EventMap> {}\n\nexport class EventHostImpl<EventMap>\n implements EventHost<EventMap>, Disposable\n{\n get [Symbol.toStringTag](): string {\n return 'EventHostImpl'\n }\n\n readonly logPrefix = createLogPrefix(this)\n\n private readonly signals = new Map<keyof EventMap, SignalImpl<any>>()\n\n hasAnyListeners(): boolean {\n for (const value of this.signals.values()) {\n if (!value.empty) return true\n }\n return false\n }\n\n hasListeners(type: keyof EventMap): boolean {\n return this.signals.get(type)?.empty === false\n }\n\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe {\n const sig = getOrSet(this.signals, type, () => signal<any>())\n return sig.listen(handler, options)\n }\n\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void {\n this.signals.get(type)?.dispatch(event)\n }\n\n dispose(): void {\n for (const signal of this.signals.values()) signal.dispose()\n this.signals.clear()\n }\n\n __eventMapType = covariant<EventMap>()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Comparator, compare } from '../comparison/compare'\nimport type { Maybe, MaybePromise, Primitive } from '../type'\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport { createTaskQueue } from '../async/TaskQueue'\n\nexport type FilterPredicateAsync<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => Promise<boolean>\n\nexport type FilterPredicate<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => boolean\n\n/**\n * indexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nexport function indexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.indexOf.call(arrayLike, element)\n}\n\n/**\n * lastIndexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nexport function lastIndexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.lastIndexOf.call(arrayLike, element)\n}\n\nexport function filter<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => value is S,\n thisArg?: any\n): S[]\n\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[]\n\n/**\n * filter on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[] {\n return Array.prototype.filter.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Filter an ArrayLike with an asynchronous predicate.\n *\n * Runs the predicate across all elements, then filters the elements by the booleans\n * resolved by the predicate.\n *\n * @param arrayLike The array-like object to filter\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function filterAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<T[]> {\n const results = await mapAsync(arrayLike, predicate, options)\n return filter(await arrayLike, (_, index) => results[index])\n}\n\n/**\n * map on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport function map<T, U>(\n arrayLike: ArrayLike<T>,\n transform: (value: T, index: number, array: ArrayLike<T>) => U,\n thisArg?: any\n): U[] {\n return Array.prototype.map.call(arrayLike, transform, thisArg) as U[]\n}\n\n/**\n * Map on ArrayLike objects with an asynchronous transformer.\n *\n * @param arrayLike The array-like object to transform\n * @param transform Async function that transforms each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of transforms to run simultaneously (default: 1)\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport async function mapAsync<T, U>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n transform: (value: T, index: number, array: ArrayLike<T>) => Promise<U>,\n options?: { readonly simultaneous?: number }\n): Promise<U[]> {\n const resolvedArray = await arrayLike\n const { simultaneous = 1 } = options || {}\n\n if (simultaneous >= resolvedArray.length) {\n return Promise.all(map(resolvedArray, transform))\n }\n\n const results: U[] = new Array(resolvedArray.length)\n const queue = createTaskQueue()\n queue.simultaneous = simultaneous\n\n const tasks = map(resolvedArray, (value, index) =>\n queue.enqueue(() =>\n transform(value, index, resolvedArray).then((result) => {\n results[index] = result\n })\n )\n )\n\n await Promise.all(tasks)\n return results\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nexport function every<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.every.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nexport function some<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.some.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function everyAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n const resolvedArray = await arrayLike\n\n const chunks = chunk(resolvedArray, options?.simultaneous ?? 1)\n let index = 0\n\n for (const chunkArray of chunks) {\n const chunkPromises = chunkArray.map((value, chunkIndex) =>\n predicate(value, index + chunkIndex, resolvedArray)\n )\n const chunkResults = await Promise.all(chunkPromises)\n if (chunkResults.some((result) => !result)) {\n return false\n }\n index += chunkArray.length\n }\n return true\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function someAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n return !(await everyAsync(\n arrayLike,\n async (value, index, array) => !(await predicate(value, index, array)),\n options\n ))\n}\n\n/**\n * forEach on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n */\nexport function forEach<T>(\n arrayLike: ArrayLike<T>,\n action: (value: T, index: number, array: ArrayLike<T>) => void,\n thisArg?: any\n): void {\n return Array.prototype.forEach.call(arrayLike, action, thisArg)\n}\n\n/**\n * Executes an asynchronous function on each element in an array.\n *\n * @param arrayLike The array-like object to iterate over\n * @param executor Async function to execute for each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of executors to run simultaneously (default: 1)\n */\nexport function forEachAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n executor: (value: T, index: number, array: ArrayLike<T>) => Promise<void>,\n options?: { readonly simultaneous?: number }\n): Promise<void> {\n return mapAsync(arrayLike, executor, options).then()\n}\n\nexport function find<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (this: void, value: T, index: number, obj: T[]) => value is S,\n thisArg?: any\n): S | undefined\n\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined\n\n/**\n * find on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n */\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined {\n return Array.prototype.find.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * findIndex on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\n */\nexport function findIndex<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => unknown,\n thisArg?: any\n): number {\n return Array.prototype.findIndex.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Returns the first element of an ArrayLike.\n */\nexport function first<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[0]\n}\n\n/**\n * Returns the last element of an ArrayLike.\n */\nexport function last<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[arrayLike.length - 1]\n}\n\n/**\n * Returns the first `count` elements of an ArrayLike.\n * @param arrayLike\n * @param count\n */\nexport function takeFirst<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, 0, count)\n}\n\n/**\n * Returns the last `count` elements of an ArrayLike.\n *\n * @param arrayLike\n * @param count\n */\nexport function takeLast<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, -count)\n}\n\n/**\n * Returns a subsection of an array-like.\n * For both start and end, a negative index can be used to indicate an offset from the end of\n * the array.\n * For example, -2 refers to the second to last element of the array.\n *\n * @param arrayLike An ArrayLike to copy.\n * @param start The beginning index of the array-like. Default: 0\n * @param end The end index of the specified portion of the array-like (exclusive). Default: length\n */\nexport function slice<T>(\n arrayLike: ArrayLike<T>,\n start?: number,\n end?: number\n): T[] {\n return Array.prototype.slice.call(arrayLike, start, end)\n}\n\n/**\n * Removes an element from the array, returning true if it was found.\n */\nexport function remove<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element)\n if (index === -1) return false\n array.splice(index, 1)\n return true\n}\n\n/**\n * Removes an element from the array at the given index, returning the removed element if the index\n * was within range.\n * @param array The Array to update.\n * @param index If negative, will remove from the end of the list (-1 is last element), if\n * greater than or equal to the list length, undefined will be returned.\n */\nexport function removeAt<T>(array: T[], index: number): T | undefined {\n return array.splice(index, 1)[0]\n}\n\n/**\n * Returns the index of the first element in the given array with the highest value according to\n * the comparator.\n * @param array\n * @param comparator\n */\nexport function indexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = 0\n let highest = array[highestIndex]\n for (let i = 1; i < array.length; i++) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Returns the index of the last element in the given array with the highest value according to\n * the comparator.\n * To find the index of the lowest value, use `util.comparator.reversed`\n * @param array\n * @param comparator\n */\nexport function lastIndexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = array.length - 1\n let highest = array[highestIndex]\n for (let i = array.length - 2; i >= 0; i--) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Given an array using the given comparator function, finds the insertion index of an element.\n *\n * @param array An array sorted using the comparator.\n * @param element The element to compare against array elements.\n * @param comparator A function where given the return value of `comparator(element, array[i])`\n * if less than zero the returned index will be before i, otherwise after.\n * @param start The starting index (inclusive). Default: 0\n * @param end The ending index (exclusive). Default: array.length\n */\nexport function sortedInsertionIndex<T, U = T>(\n array: ArrayLike<T>,\n element: U,\n comparator: Comparator<U, T>,\n start = 0,\n end = array.length\n): number {\n let indexA = start\n let indexB = end\n while (indexA < indexB) {\n const midIndex = (indexA + indexB) >>> 1\n const comparison = comparator(element, array[midIndex])\n if (comparison < 0) {\n indexB = midIndex\n } else {\n indexA = midIndex + 1\n }\n }\n return indexA\n}\n\n/**\n * Creates an iterator for an ArrayLike.\n * If the given ArrayLike is iterable, then use its provided iterator.\n *\n * @param arrayLike\n */\nexport function createArrayLikeIterator<T>(\n arrayLike: ArrayLike<T>\n): IterableIterator<T> {\n if (Symbol.iterator in arrayLike)\n return (arrayLike as Iterable<T>)[\n Symbol.iterator\n ]() as IterableIterator<T>\n\n let currentIndex = 0\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return createArrayLikeIterator(arrayLike)\n },\n\n next: (): IteratorResult<T> => {\n if (currentIndex >= arrayLike.length) {\n return {\n value: undefined,\n done: true,\n }\n }\n return {\n value: arrayLike[currentIndex++],\n done: false,\n }\n },\n }\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or throws an IllegalArgumentError if out of range.\n */\nexport function getElementAt<T>(array: ArrayLike<T>, index: number): T {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n throw new IllegalArgumentError(`index ${index} is out of range 0-${n}`)\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or returns the provided default value.\n */\nexport function getElementOrDefault<T, V>(\n array: ArrayLike<T>,\n index: number,\n defaultValue: V\n): T | V {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n return defaultValue\n}\n\n/**\n * Counts the number of elements in an array that return true when passed to a predicate function.\n *\n * @param array\n * @param predicate\n */\nexport function countElements<T>(\n array: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => boolean\n): number {\n let count = 0\n const n = array.length\n for (let i = 0; i < n; i++) {\n if (predicate(array[i], i, array)) {\n count++\n }\n }\n return count\n}\n\n/**\n * Splits an array into chunks of the specified size.\n *\n * @param array The array to chunk\n * @param chunkSize Maximum size of each chunk\n * @returns Array of chunks\n */\nexport function chunk<T>(array: ArrayLike<T>, chunkSize: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(slice(array, i, i + chunkSize))\n }\n return chunks\n}\n\nexport function min<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the minimum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let minValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], minValue) < 0) {\n minValue = arrayLike[i]\n }\n }\n return minValue\n}\n\nexport function max<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the maximum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let maxValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], maxValue) > 0) {\n maxValue = arrayLike[i]\n }\n }\n return maxValue\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\n\n/**\n * Returns an array of numbers between start and end, incrementing by step.\n *\n * E.g.\n * ```\n * range(1, 10) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n * range(5, 2) // [5, 4, 3, 2]\n * range(5, 4, -0.2) // [5.0, 4.8, 4.6, 4.4, 4.2, 4.0]\n * ```\n * @param start Start position (inclusive)\n * @param endInclusive End position (inclusive)\n * @param step The amount to increment.\n */\nexport function createRangeIter(\n start: number,\n endInclusive: number,\n step = 1\n): IterableIterator<number> {\n const positive = endInclusive >= start\n if (\n (endInclusive > start && step <= 0) ||\n (endInclusive < start && step >= 0)\n ) {\n throw new IllegalArgumentError('Iterator will never complete.')\n }\n let i = start\n return {\n [Symbol.iterator](): IterableIterator<number> {\n return this\n },\n\n next: (): IteratorResult<number> => {\n const result = {\n value: i,\n done: positive ? i > endInclusive : i < endInclusive,\n }\n i += step\n return result\n },\n }\n}\n\n/**\n * Maps an iterable object using the given transform.\n * Unlike `Array#map`, this doesn't create a new Array in memory, the transform is done on\n * iteration.\n *\n * @param iterable\n * @param transform Transforms each element as it's requested.\n */\nexport function mapIter<T, U>(\n iterable: Iterable<T>,\n transform: (element: T) => U\n): IterableIterator<U> {\n const it: Iterator<T> = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<U> {\n return mapIter(iterable, transform)\n },\n next: (): IteratorResult<U> => {\n const result = it.next()\n if (result.done) return result\n return {\n value: transform(result.value),\n done: false,\n }\n },\n }\n}\n\nexport function filterIter<T, S extends T>(\n iterable: Iterable<T>,\n predicate: (value: T) => value is S\n): IterableIterator<S>\n\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T>\n\n/**\n * Filters an iterable object using the given predicate.\n * Unlike `Array#filter`, this doesn't create a new Array in memory, the filter is done on\n * iteration.\n *\n * @param iterable\n * @param predicate Returns true if the element should be included in the new iteration.\n */\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T> {\n const it = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return filterIter(iterable, predicate)\n },\n\n next: (): IteratorResult<T> => {\n while (true) {\n const next = it.next()\n if (next.done) {\n return {\n value: undefined,\n done: true,\n }\n } else if (predicate(next.value)) {\n return {\n value: next.value,\n done: false,\n }\n }\n }\n },\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating an unexpected state.\n */\nexport class IllegalStateError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalStateError'\n }\n\n constructor(message: string) {\n super(message)\n Object.setPrototypeOf(this, IllegalStateError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CacheMap } from './CacheMap'\nimport { mapIter } from '../iteration/iterable'\nimport type { LinkedNode } from './LinkedList'\nimport { LinkedList } from './LinkedList'\nimport { IllegalStateError } from '../../error/IllegalStateError'\n\n/**\n * An LRU Cache implementation.\n * An LRU (Least Recently Used) Cache is a Map with a fixed capacity. When the capacity is\n * exceeded, the least recently used element will be removed.\n * An element is considered to be used when it has been retrieved via `get`, or when it's been\n * `set`.\n * Iteration does not affect ordering.\n */\nexport class LruCache<K, V> implements CacheMap<K, V> {\n /**\n * A map of the list nodes.\n *\n * @private\n */\n private cache: Map<K, LinkedNode<[K, V]>> = new Map()\n\n /**\n * Most recently used elements are at the tail, least recently used are at the head.\n * @private\n */\n private list = new LinkedList<[K, V]>()\n\n /**\n * An element is about to be removed. Should return true if the element may be evicted,\n * otherwise false.\n * If false is returned for all elements, an IllegalStateError is thrown.\n */\n onEvicting: ((element: V, key: K, list: CacheMap<K, V>) => boolean) | null =\n null\n\n /**\n * When an element is added when at capacity, the least recently used element will be removed.\n * This callback can be set to be notified with the element being evicted, which may be used\n * for disposal.\n */\n onEvict: ((element: V, key: K, list: CacheMap<K, V>) => void) | null = null\n\n private _capacity = 0\n\n constructor(initialCapacity: number) {\n this._capacity = initialCapacity\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n set capacity(value: number) {\n this._capacity = value\n while (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n\n /**\n * @returns the number of elements in the Map.\n */\n get size(): number {\n return this.cache.size\n }\n\n /**\n * @returns boolean indicating whether an element with the specified key exists or not.\n */\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Returns the mapped value for the given key, and moves the element to the most recently\n * used position.\n *\n * @returns Returns the element associated with the given key, or undefined if no such\n * element exists.\n */\n get(key: K): V | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n this.list.pushNode(node)\n return node.value[1]\n }\n\n /**\n * Adds a new element with a specified key and value to the Map. If an element with the\n * same key already exists, the element will be updated and position moved to most recently\n * used.\n */\n set(key: K, value: V): this {\n if (this.has(key)) {\n const node = this.cache.get(key)!\n node.value[1] = value\n this.list.pushNode(node)\n } else {\n const node = this.list.push([key, value])\n this.cache.set(key, node)\n if (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n return this\n }\n\n private evictLeastRecentlyUsed() {\n let node = this.list.head\n while (node) {\n const [key, value] = node.value\n const allowed =\n this.onEvicting?.call(null, value, key, this) ?? true\n if (allowed) break\n node = node.next\n }\n if (!node)\n throw new IllegalStateError(\n 'onEvicting returned false for all elements'\n )\n const [key, value] = node.value\n this.list.remove(node)\n this.cache.delete(node.value[0])\n this.onEvict?.call(null, value, key, this)\n }\n\n /**\n * Clears all elements from the cache.\n */\n clear(): void {\n this.list.clear()\n this.cache.clear()\n }\n\n /**\n * @returns true if an element in the Map existed and has been removed, or false if the element does not exist.\n */\n delete(key: K): boolean {\n if (!this.has(key)) return false\n const node = this.cache.get(key)!\n this.cache.delete(key)\n this.list.remove(node)\n return true\n }\n\n /**\n * Executes a provided function once per each key/value pair in the Map,\n * ordered from least recently used to most.\n *\n * @param callback A callback to invoke for every element in the cache.\n * @param thisArg Value to use as this when executing callback\n */\n forEach(\n callback: (value: V, key: K, map: this) => void,\n thisArg?: any\n ): void {\n return this.list.forEach((entry) => {\n callback.call(thisArg, entry[1], entry[0], this)\n })\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the map.\n */\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]()\n }\n\n /**\n * Returns an iterable of keys in the map. This will be ordered from least recently used to\n * most.\n */\n keys(): IterableIterator<K> {\n return mapIter(this.list, ([key]) => key)\n }\n\n /**\n * Returns an iterable of values in the map. This will be ordered from least recently used to\n * most.\n */\n values(): IterableIterator<V> {\n return mapIter(this.list, ([, value]) => value)\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n return this.list[Symbol.iterator]()\n }\n\n get [Symbol.toStringTag](): string {\n return 'LruCache'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LruCache } from '../collection/LruCache'\nimport { getOrSet } from '../map/map'\nimport type { Fun } from '../type'\n\nexport interface MemoizedFunction {\n clear(): void\n}\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @return Returns a memoized function with a `clear` method to reset the cached value.\n */\nexport function memoize<T extends () => any>(inner: T): MemoizedFunction & T\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @param keyProvider When more than one parameter is expected, a keyProvider is required, which\n * returns a unique key given the arguments provided to the memoized function.\n * @param capacity\n * @return Returns a memoized function with a `clear` method to reset the cache.\n */\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider: (...args: Parameters<T>) => any,\n capacity?: number\n): MemoizedFunction & T\n\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider?: (...args: Parameters<T>) => any,\n capacity = 500\n): MemoizedFunction & T {\n if (!keyProvider) {\n let cached = false\n let value: ReturnType<T> | undefined = undefined\n const memoized = (): ReturnType<T> => {\n if (!cached) {\n // Marked cached only once `inner` returns, so a throw is not\n // cached as an `undefined` result.\n value = inner()\n cached = true\n }\n return value as ReturnType<T>\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cached = false\n value = undefined\n },\n } as const\n )\n } else if (capacity === 0) {\n const memoized = (...args: Parameters<T>): ReturnType<T> =>\n inner(...args)\n return Object.assign(\n memoized as T,\n {\n clear: () => {},\n } as const\n )\n } else if (capacity === 1) {\n let hasValue = false\n let cachedKey: any\n let cachedValue: ReturnType<T>\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n if (!hasValue || cachedKey !== key) {\n // Recorded only once `inner` returns, so a throw neither caches\n // an `undefined` result nor evicts the entry already held.\n cachedValue = inner(...args)\n cachedKey = key\n hasValue = true\n }\n return cachedValue\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n hasValue = false\n },\n } as const\n )\n } else {\n const cache = new LruCache<any, ReturnType<T>>(capacity)\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n return getOrSet(cache, key, () => inner(...args))\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cache.clear()\n },\n } as const\n )\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport { flipMap } from '../map/map'\nimport type { Maybe } from '../type'\nimport type { ReadonlyRecord } from '../object/readonlyType'\n\n/**\n * @private\n */\nconst locale = {\n variableNotDefined: \"Variable '{name}' is not defined\",\n} as const\n\n/**\n * The default substitution pattern, matching `{name}`.\n */\nconst DEFAULT_SUBSTITUTE_PATTERN = /\\{(\\w+)}/g\n\n/**\n * Substitutes named variable references in a string.\n *\n * Example:\n * ```\n * substitute('{fruit}, {veg}', { fruit: 'apples', veg: 'carrots' }) // 'apples, carrots'\n * ```\n *\n * @param str The template string.\n * @param variables A record of variable names to values.\n * @param pattern A regex whose first capture group is the variable name. Defaults to `{name}`.\n * @throws IllegalArgumentError if a referenced variable is not defined.\n */\nexport function substitute(\n str: string,\n variables: Readonly<Record<string, any>>,\n pattern: RegExp = DEFAULT_SUBSTITUTE_PATTERN\n): string {\n return str.replace(pattern, (_, name) => {\n if (!(name in variables)) {\n throw new IllegalArgumentError(\n locale.variableNotDefined.replace('{name}', String(name))\n )\n }\n return String(variables[name])\n })\n}\n\n/**\n * Replaces substitution tokens.\n *\n * Each identifier may be suffixed, within the enclosing '$' characters, with an additional format tag for number\n * padding following the prototype: `%0[width]d`\n * For example:\n * 'Segment_$Time%04d$' Where the `Time` property is `42` will have a replacement value of: `Segment_0042`\n */\nexport function substituteIdentifiers(\n str: string,\n props: ReadonlyRecord<string, string | number>\n): string {\n return str.replace(/\\$(\\w*)(?:%0(\\d+)d)?\\$/g, (_, match, maxLength) => {\n if (!match) return '$'\n if (!(match in props)) {\n throw new IllegalArgumentError(\n `Template substitution token '${match}' was not understood`\n )\n }\n let prop = String(props[match])\n if (maxLength) prop = prop.padStart(maxLength, '0')\n return prop\n })\n}\n\n/**\n * Returns true if the character is one of: ' ', '\\t', '\\n', '\\r'\n *\n * @param charCode The character code to test\n */\nexport function isWhitespaceChar(charCode: number): boolean {\n return (\n charCode === 0x20 || // ' ' (space)\n charCode === 0x09 || // '\\t' (tab)\n charCode === 0x0d || // '\\r' (carriage return)\n charCode === 0x0a // '\\n' (line feed)\n )\n}\n\nconst encodedEntitiesRegex = /&(?:#(?:x([\\da-f]+)|(\\d+))|(\\w+));/gi\n\n/**\n * The highest code point representable in UTF-16.\n */\nconst MAX_CODE_POINT = 0x10ffff\n\n/**\n * Predefined general xml entities\n * https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent\n */\nexport const predefinedDecodeEntities: ReadonlyMap<string, string> = new Map([\n ['apos', \"'\"],\n ['amp', '&'],\n ['lt', '<'],\n ['gt', '>'],\n ['quot', '\"'],\n])\n\n/**\n * Replaces all specified entities with their mapped representations.\n * Decimal (`&#33;`) and hexadecimal (`&#x21;`) character references are both\n * decoded. An unrecognized named entity, or a character reference that is not a\n * valid code point, is left as-is.\n *\n * For example (using {@link predefinedDecodeEntities}):\n * ```\n * `&lt;Hello to y&apos;all&#33;&gt;` becomes `<Hello to y'all!>`\n * ```\n *\n * @param str\n * @param namedEntities\n */\nexport function decodeEntities(\n str: string,\n namedEntities: ReadonlyMap<string, string> = predefinedDecodeEntities\n): string {\n return str.replace(\n encodedEntitiesRegex,\n (\n substring: string,\n hex: Maybe<string>,\n decimal: Maybe<string>,\n entityName: Maybe<string>\n ) => {\n if (hex == null && decimal == null) {\n return namedEntities.get(entityName!.toLowerCase()) ?? substring\n }\n const codePoint =\n hex != null ? parseInt(hex, 16) : parseInt(decimal!, 10)\n // Surrogate halves are not characters, and code points beyond the\n // Unicode range would throw.\n if (codePoint > MAX_CODE_POINT || isSurrogate(codePoint))\n return substring\n return String.fromCodePoint(codePoint)\n }\n )\n}\n\nfunction isSurrogate(codePoint: number): boolean {\n return codePoint >= 0xd800 && codePoint <= 0xdfff\n}\n\nconst standardEntityValueToNames = flipMap(predefinedDecodeEntities)\nconst entitiesRegex = /['&<>\"]/g\n\n/**\n * Encodes the predefined xml standard entities into their entity names.\n *\n * & to &amp;\n * ' to &apos;\n * > to &gt;\n * < to &lt;\n * \" to &quot;\n *\n * @param str\n */\nexport function encodeEntities(str: string): string {\n if (entitiesRegex.test(str)) {\n return str.replace(entitiesRegex, (entityValue) => {\n const entityName = standardEntityValueToNames.get(entityValue)\n return `&${entityName};`\n })\n } else {\n return str\n }\n}\n\n/**\n * Returns true if the two strings are equal, optionally ignoring case.\n *\n * @param a\n * @param b\n * @param ignoreCase\n */\nexport function eqStr(\n a: string | null,\n b: string | null,\n ignoreCase = false\n): boolean {\n if (a == null && b == null) return true\n if (a == null || b == null) return false\n if (a === b) return true\n if (ignoreCase)\n return a.length === b.length && a.toLowerCase() === b.toLowerCase()\n return false\n}\n\n/**\n * Given a single character string, returns the char code of the first character.\n *\n * @param str A single character string from which to get the first code point.\n */\nexport function char(str: string): number {\n return str.charCodeAt(0)\n}\n\n/**\n * Returns the substring of string after the last instance of searchString, excluding searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringAfterLast(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).lastIndexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(i + searchString.length)\n}\n\n/**\n * Returns the substring of string before the first occurrence of searchString, excluding\n * searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringBefore(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).indexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(0, i)\n}\n\n/**\n * Tokenizes a string into lowercase alphanumeric words.\n *\n * E.g. `'Amazon Music x86_64'` becomes `['amazon', 'music', 'x86', '64']`\n *\n * @param str\n */\nexport function tokenizeWords(str: string): string[] {\n const words: string[] = []\n const regex = /[a-z\\d]+/gi\n let match: RegExpMatchArray | null\n while ((match = regex.exec(str))) {\n words.push(match[0].toLowerCase())\n }\n return words\n}\n\nexport function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as Lowercase<T>\n}\n\nexport function toUpperCase<T extends string>(str: T): Uppercase<T> {\n return str.toUpperCase() as Uppercase<T>\n}\n\n/**\n * If the given string is greater than a max length, truncate the string with an indicator.\n * Example:\n * truncate('a very long string', 10) // 'a very ...'\n *\n * @param str A nullable string.\n * @param maxLength\n * @param indicator The string to indicate there was truncation, default is an ellipses \u2026 (U+2026)\n * @return Returns the truncated string, or the nullish value if str is nullish.\n */\nexport function truncate<T extends Maybe<string>>(\n str: T,\n maxLength: number,\n indicator = '\u2026'\n): T | string {\n if (str == null) return str\n if (str.length > maxLength)\n return str.substring(0, maxLength - indicator.length) + indicator\n return str\n}\n\n/**\n * Converts a string to kebab-case.\n *\n * This function transforms camelCase, PascalCase, snake_case, and space-separated\n * strings into a normalized kebab-case format. It removes non-alphanumeric characters\n * (excluding hyphens), collapses multiple delimiters, and trims leading/trailing hyphens.\n *\n * @example\n * toKebabCase(\"HelloWorld\") // \"hello-world\"\n * toKebabCase(\"hello_world test\") // \"hello-world-test\"\n * toKebabCase(\"SomeText123\") // \"some-text123\"\n *\n * @param str - The input string to convert.\n * @returns The kebab-case version of the input.\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .replace(/[^a-zA-Z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n .toLowerCase()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalStateError } from '../error/IllegalStateError'\nimport type { Unsubscribe } from './Unsubscribe'\nimport type { Maybe } from '../util/type'\n\n/**\n * Any object that may be disposed.\n */\nexport interface Disposable {\n dispose(): void\n}\n\n/**\n * Returns true if the given value is disposable.\n *\n * @param value Any value. The value will be considered Disposable if it contains a method named\n * 'dispose', and that function requires zero parameters. This value will be type guarded to\n * Disposable if true is returned.\n */\nexport function isDisposable(value: any): value is Disposable {\n return (\n value != null &&\n typeof value.dispose === 'function' &&\n value.dispose.length === 0\n )\n}\n\n/**\n * Disposes all the given {@link Disposable} objects.\n *\n * @param disposables\n */\nexport function disposeAll(disposables: Iterable<Disposable>): void {\n for (const disposable of disposables) {\n disposable.dispose()\n }\n}\n\n/**\n * Returns a Disposable that invokes the given function on dispose.\n *\n * @param unsub\n */\nexport function toDisposable(unsub: () => void): Disposable {\n return { dispose: unsub }\n}\n\nexport type AddDisposable = <T extends Maybe<Disposable | Unsubscribe>>(\n disposable: T\n) => T\n\n/**\n * A Disposer disposes added disposables as a group.\n * The method members may be called without a receiver.\n */\nexport interface Disposer extends Disposable {\n readonly disposed: boolean\n readonly add: AddDisposable\n readonly dispose: () => void\n}\n\n/**\n * Creates a Disposer, an object on which {@link Disposable} instances may be added, and disposed\n * as a group.\n *\n * The method members may be called without a receiver, thus allowing destructuring.\n * Example:\n * ```\n * function create(): Disposable {\n * const { dispose, add } = disposer()\n * add(someDisposable)\n * add(anotherDisposable)\n * return {\n * dispose\n * }\n * }\n * ```\n *\n */\nexport function createDisposer(): Disposer {\n const disposables: Disposable[] = []\n let _disposed = false\n const add = <T extends Maybe<Unsubscribe | Disposable>>(\n disposableOrUnsub: T\n ): T => {\n if (_disposed) throw new DisposedError()\n if (disposableOrUnsub) {\n disposables.push(\n 'dispose' in disposableOrUnsub\n ? disposableOrUnsub\n : toDisposable(disposableOrUnsub)\n )\n }\n return disposableOrUnsub\n }\n return {\n dispose() {\n if (_disposed) throw new DisposedError()\n _disposed = true\n disposeAll(disposables)\n },\n add,\n get disposed() {\n return _disposed\n },\n }\n}\n\n/**\n * An illegal state error indicating that an object has been disposed.\n */\nexport class DisposedError extends IllegalStateError {\n get [Symbol.toStringTag](): string {\n return 'DisposedError'\n }\n\n constructor(message = 'Instance is disposed') {\n super(message)\n Object.setPrototypeOf(this, DisposedError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isDisposable } from '../core/disposable'\nimport { IllegalStateError } from '../error/IllegalStateError'\nimport { remove } from '../util/collection/array'\nimport type { Maybe } from '../util/type'\n\n/**\n * Manages global initializers.\n */\nexport class GlobalRegistry {\n private registry: GlobalRef<any>[] = []\n\n /**\n * Returns the number of references currently in the registry.\n */\n get size(): number {\n return this.registry.length\n }\n\n /**\n * Registers an initializer that will be invoked during global state initialization.\n * @param initializer\n */\n register<T extends GlobalRef<any>>(initializer: T): T {\n this.registry.push(initializer)\n return initializer\n }\n\n /**\n * Removes a global ref from the registry.\n * May be called at any time.\n * @param ref\n * @return Returns true if the global ref was removed.\n */\n unregister(ref: GlobalRef<any>): boolean {\n return remove(this.registry, ref)\n }\n\n /**\n * Resets all registered initializers and sets this registry back to its pre-initialized state.\n * This is typically only done within unit tests, but may be called if all players are\n * disposed and the consumer intends to teardown global state.\n */\n reset() {\n for (const registryElement of this.registry) {\n registryElement.reset()\n }\n }\n}\n\nlet _registry: GlobalRegistry | null = null\n\n/**\n * Gets or creates the global registry instance.\n */\nexport function getGlobalRegistry(): GlobalRegistry {\n if (!_registry) _registry = new GlobalRegistry()\n return _registry\n}\n\nexport interface GlobalRef<T> {\n /**\n * True if this has been initialized.\n */\n readonly initialized: boolean\n\n /**\n * Returns the factory-produced value.\n * Throws an {@link IllegalStateError} if the global registry has not been initialized.\n */\n readonly value: T\n\n /**\n * Overrides this initializer.\n * The previous initializer will be provided as an argument for extension.\n *\n * Throws an {@link IllegalStateError} if the global registry has been initialized.\n * @return Returns this\n */\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T>\n\n /**\n * Resets this initializer back to its pre-initialized state.\n * If the initializer produced a disposable value, it will be disposed.\n */\n reset(): void\n\n /**\n * Initializes the global ref.\n * This is done automatically on first use of `value`, but may be initialized eagerly.\n */\n initialize(): void\n}\n\n/**\n * When set, GlobalRefImpl records a stack trace each time it is initialized,\n * so a later \"Cannot call when initialized\" error can include the stack of\n * whoever last touched the ref. Used to diagnose async leakage between specs.\n *\n * Tests opt in via setGlobalRefDebug(true).\n */\nlet globalRefDebug = false\n\nexport function setGlobalRefDebug(enabled: boolean): void {\n globalRefDebug = enabled\n}\n\nexport class GlobalRefImpl<T> implements GlobalRef<T> {\n private _value: T | undefined\n private _initialized = false\n private constructing = false\n private initializer: () => T\n private lastInitStack: Maybe<string> = null\n\n constructor(private readonly defaultInitializer: () => T) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n get value(): T {\n this.initialize()\n return this._value!\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n if (!this._initialized) return\n this.assertNotConstructing()\n this._initialized = false\n this.lastInitStack = null\n if (isDisposable(this._value)) {\n this._value.dispose()\n }\n this._value = undefined\n }\n\n initialize(): void {\n if (this._initialized) return\n this.assertNotConstructing()\n this.constructing = true\n try {\n this._value = this.initializer()\n } catch (error) {\n this.constructing = false\n throw error\n }\n this.constructing = false\n this._initialized = true\n if (globalRefDebug) {\n this.lastInitStack = new Error('globalRef initialized').stack\n }\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n this.assertNotInitialized()\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n (newInitializer) => {\n this.initializer = newInitializer\n }\n )\n }\n\n private assertNotInitialized() {\n if (this._initialized) {\n const detail = this.lastInitStack\n ? `\\nLast initialized at:\\n${this.lastInitStack}`\n : ''\n throw new IllegalStateError(`Cannot call when initialized${detail}`)\n }\n }\n\n private assertNotConstructing() {\n if (this.constructing)\n throw new IllegalStateError('Cannot call during construction')\n }\n}\n\nclass GlobalRefOverride<T> implements GlobalRef<T> {\n private initializer: () => T\n\n constructor(\n private readonly original: GlobalRef<T>,\n private readonly defaultInitializer: () => T,\n private readonly setInitializer: (value: () => T) => void\n ) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this.original.initialized\n }\n\n get value(): T {\n return this.original.value\n }\n\n initialize(): void {\n this.setInitializer(this.initializer)\n this.original.initialize()\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n this.original.reset()\n this.setInitializer(this.initializer)\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n this.setInitializer(overriddenInitializer)\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n this.setInitializer\n )\n }\n}\n\n/**\n * Creates a global reference that can be lazily initialized.\n * This function is tree-shakable as it doesn't perform any side effects on import.\n *\n * @param init Factory function that creates the value\n */\nexport function globalRef<T>(init: () => T): GlobalRef<T> {\n return getGlobalRegistry().register(new GlobalRefImpl(init))\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An interface that may be implemented to provide custom clone behavior.\n */\nexport interface Cloneable<T> {\n /**\n * Produces a copy of this object.\n */\n clone(): T\n}\n\n/**\n * Returns true if the given value implements Cloneable.\n */\nexport function isCloneable<T>(value: T): value is T & Cloneable<T> {\n return (\n value != null &&\n typeof value === 'object' &&\n 'clone' in value &&\n typeof value.clone === 'function' &&\n value.clone.length === 0\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the keys (both property names and symbols) of all own properties.\n * Unlike `Object.keys`, this will also return non-enumerable properties.\n * Does not return keys inherited from the object's prototype.\n *\n * Implementation details:\n * If Reflect is supported, Reflect.ownKeys will be used, wrapping in a Set, otherwise\n * Object.getOwnPropertyNames and Object.getOwnPropertySymbols will be used. This will typically\n * be equivalent. Proxies may alter the order of keys but platforms that do not support Reflect\n * will also typically not support Proxies.\n *\n * @see Reflect.ownKeys\n * @see Object.getOwnPropertyNames\n * @see Object.getOwnPropertySymbols\n * @param obj\n * @return Returns a `Set` of the own properties of the target object, including non-enumerable.\n * The ordering will be: positive numeric indexes in order, strings in insertion order,\n * symbols in insertion order.\n */\nexport function ownKeys<T>(obj: T): Set<keyof T> {\n if (!obj) return new Set()\n if (typeof Reflect !== 'undefined')\n return new Set(Reflect.ownKeys(obj) as (keyof T)[])\n const properties = new Set()\n Object.getOwnPropertyNames(obj).forEach((item) => properties.add(item))\n Object.getOwnPropertySymbols(obj).forEach((item) => properties.add(item))\n return properties as Set<keyof T>\n}\n\n/**\n * Returns the prototype chain of the given object.\n *\n * Example:\n * ```\n * class A {}\n * class B extends A {}\n * class C extends B {}\n * const c = new C()\n * getPrototypeChain(c) // [c, C.prototype, B.prototype, A.prototype, Object.prototype]\n * ```\n * @param obj\n */\nexport function getPrototypeChain(obj: any): any[] {\n const out = []\n let current = obj\n do {\n out.push(current)\n } while ((current = Object.getPrototypeOf(current)))\n return out\n}\n\n/**\n * Returns true if the given object represents a plain object and not a class instance.\n */\nexport function isPlainObject(value: any): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value))\n return false\n const proto = Object.getPrototypeOf(value)\n // if not the null prototype, not a plain object:\n return !proto || !Object.getPrototypeOf(proto)\n}\n\n/**\n * Gets the object's value for the given key if it exists, otherwise sets [key] to\n * `defaultValue`, returning the newly set value.\n *\n * @param object\n * @param key\n * @param defaultValue\n */\nexport function getOrSetProp<K extends keyof T, T extends object>(\n object: T,\n key: K,\n defaultValue: () => T[K]\n): T[K] {\n if (key in object) {\n return object[key]\n } else {\n const value = defaultValue()\n object[key] = value\n return value\n }\n}\n\n/**\n * Returns true if value is not null. Provides a type guard which can be used in filters.\n * Example:\n * [1, null, 2, 3, null, 4].filter(isNonNull) // type number[]\n * @param value\n */\nexport function isNonNull<T>(value: T): value is NonNullable<T> {\n return value != null\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isPlainObject } from '../object/object'\nimport type { AnyRecord, Fun, IsAny } from '../type'\n\n/**\n * A representation of the conversion the toJson function will apply to make an input JSON compatible.\n */\nexport type Json<T = any> =\n IsAny<T> extends true\n ? // inputs of type `any` are allowed, use AnyRecord as the mapped type to pass JsonCompatible<T> validation.\n AnyRecord\n : unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? string\n : T extends { toJSON(): infer R }\n ? R\n : T extends boolean | number | string | null | undefined\n ? T\n : T extends Set<infer U>\n ? Json<U>[]\n : T extends readonly any[]\n ? Json<T[number]>[]\n : {\n [P in keyof T]: Json<T[P]>\n }\n\n/**\n * Converts a dynamic value to a serializable value.\n * The value must be either an object with a toJSON function, a primitive, or a plain object\n * where all enumerable properties map to values supported by this function.\n * Properties not enumerable will be omitted, properties not serializable will be converted\n * to strings.\n * - bigint -> value.toString\n * - function -> [function <name>]\n * - symbol -> [symbol <name>]\n *\n * Error instances have a special case where non-serializable errors will still have their\n * name, message, and stack properties serialized.\n *\n * Note that this is not intended for use in serializing objects where all values are known;\n * it's intended to cover the case of reporting or logging an unknown object that may or may not\n * be serializable.\n *\n * @param value\n */\nexport function toJson<T>(value: T): Json<T> {\n return toJsonInternal(value, new Set())\n}\n\nfunction toJsonInternal(value: any, visited: Set<any>): any {\n switch (typeof value) {\n case 'object':\n return objectToJsonInternal(value, visited)\n case 'undefined':\n case 'boolean':\n case 'number':\n case 'string':\n return value\n case 'function':\n return `[function ${value.name}]`\n case 'symbol':\n return `[symbol ${value.toString().slice(7, -1)}]`\n case 'bigint':\n return value.toString()\n }\n}\n\nfunction objectToJsonInternal(value: any, visited: Set<any>): any {\n if (value == null) return value\n if (visited.has(value)) return `<circular reference: ${String(value)}>`\n visited.add(value)\n if ('toJSON' in value && typeof value.toJSON === 'function')\n return value.toJSON()\n if (value instanceof Set) {\n return Array.from(value).map((e) => toJsonInternal(e, visited))\n } else if (Array.isArray(value)) {\n return value.map((e) => toJsonInternal(e, visited))\n } else {\n if (isPlainObject(value)) {\n const o: Record<any, any> = {}\n for (const key in value) {\n o[key] = toJsonInternal(value[key], visited)\n }\n return o\n } else if (value instanceof Error) {\n // non-enumerable properties\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n }\n } else {\n return value.toString()\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet _isNode: boolean | null = null\n\n/**\n * Returns true if this is a nodejs environment.\n */\nexport function isNode(): boolean {\n if (_isNode === null) {\n _isNode =\n typeof process !== 'undefined' &&\n 'versions' in process &&\n typeof process.versions.node === 'string'\n }\n return _isNode\n}\n/**\n * Node's global setTimeout differs slightly from the browser. Use this when storing timeout ids.\n */\nexport type TimeoutId = ReturnType<typeof setTimeout>\n\n/**\n * A subset of `Location` properties available in all environments.\n */\nexport interface PartialLocation {\n readonly origin: string\n readonly search: string\n readonly href: string\n}\n\n/**\n * Returns the global `location` object, or a default with empty values\n * when `location` is not defined (e.g. Node, Web Workers).\n */\nexport function getLocation(): PartialLocation {\n return typeof location === 'object' ? location : defaultLocation\n}\n\nconst defaultLocation: PartialLocation = {\n origin: '',\n search: '',\n href: '',\n}\n\n/**\n * Node's global setInterval differs slightly from the browser. Use this when storing interval ids.\n */\nexport type IntervalId = ReturnType<typeof setInterval>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { memoize } from '../fun/memoize'\nimport { getLocation } from '../../global/environment'\n\n/**\n * Returns a `URLSearchParams` object for the given search substring. This is memoized for the\n * last search provided.\n * @param search (Optional) The window's search substring. Defaults to `location.search`, overridden\n * only for unit tests.\n */\nexport const getSearchParams = memoize(\n (search: string = getLocationSearch()): URLSearchParams => {\n const url = new URL('about:blank')\n url.search = search\n // Uses `URL.searchParams` over `new URLSearchParams`; URLSearchParams constructor is not\n // as widely supported.\n return url.searchParams\n },\n (search: string = getLocationSearch()) => search,\n 1\n)\n\n/**\n * If the environment has a `location` object, returns the location's search. Otherwise,\n * an empty string.\n */\nexport function getLocationSearch(): string {\n return getLocation().search\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n getLocationSearch,\n getSearchParams,\n} from '../util/browser/searchParams'\nimport { LogLevel, parseLogLevel } from './Logger'\n\n/**\n * Returns the current vinyl logging level, as set by the querystring parameter: vinylLogLevel.\n * @param search\n * @param defaultLevel\n */\nexport function getLogLevelFromSearch(\n search: string = getLocationSearch(),\n defaultLevel: LogLevel = LogLevel.WARN\n): LogLevel {\n const str = getSearchParams(search).get('vinylLogLevel')\n if (!str) return defaultLevel\n return parseLogLevel(str) ?? defaultLevel\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyEventHost } from '../event/EventHost'\nimport { EventHostImpl } from '../event/EventHost'\nimport { globalRef } from '../global/globalRegistry'\nimport { toJson } from '../util/serialization/json'\nimport type { LogTarget } from './LogTarget'\nimport { getLogLevelFromSearch } from './getLogLevelFromSearch'\n\nexport enum LogLevel {\n VERBOSE,\n DEBUG,\n INFO,\n WARN,\n ERROR,\n NONE,\n}\n\nexport interface LogEvent {\n readonly messages: any[]\n readonly target: LogTarget\n readonly level: LogLevel\n}\n\nexport interface LogEventMap {\n readonly log: LogEvent\n}\n\n/**\n * The interface for a basic logger implementation.\n */\nexport interface Logger extends ReadonlyEventHost<LogEventMap> {\n logLevel: LogLevel\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void\n}\n\nexport class LoggerImpl extends EventHostImpl<LogEventMap> implements Logger {\n get [Symbol.toStringTag](): string {\n return 'Logger'\n }\n\n constructor(public logLevel: LogLevel = LogLevel.DEBUG) {\n super()\n }\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void {\n if (level === LogLevel.NONE || level < this.logLevel) return\n this.dispatch('log', {\n level,\n messages: toJson(messages),\n target,\n })\n }\n}\n\n/**\n * A global reference to the logger.\n * @private\n */\nexport const loggerRef = globalRef<Logger>(\n () =>\n new LoggerImpl(\n // The logger is initialized to VERBOSE if vinylLogLevel=verbose is in the query string\n // Otherwise use DEBUG.\n getLogLevelFromSearch() === LogLevel.VERBOSE\n ? LogLevel.VERBOSE\n : LogLevel.DEBUG\n )\n)\n\n/**\n * Returns the current log level.\n */\nexport function getLogLevel(): LogLevel {\n return loggerRef.value.logLevel\n}\n\n/**\n * Sets the current log level.\n *\n * @param value\n */\nexport function setLogLevel(value: LogLevel): void {\n loggerRef.value.logLevel = value\n}\n\nexport function log(\n target: LogTarget,\n level: LogLevel,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, level, ...messages)\n}\n\nexport function logVerbose(\n target: LogTarget,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, LogLevel.VERBOSE, ...messages)\n}\n\nexport function logDebug(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.DEBUG, ...messages)\n}\n\nexport function logInfo(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.INFO, ...messages)\n}\n\nexport function logWarn(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.WARN, ...messages)\n}\n\nexport function logError(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.ERROR, ...messages)\n}\n\nconst strToLogLevel: Record<string, LogLevel> = {\n verbose: LogLevel.VERBOSE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n none: LogLevel.NONE,\n} as const\n\n/**\n * From a case-insensitive string, returns the log level.\n * Possible values match to the keys in {@link LogLevel}.\n *\n * @param str\n */\nexport function parseLogLevel(str: string): LogLevel | null {\n return strToLogLevel[str.toLowerCase()] ?? null\n}\n\nconst logLevelToString: Record<LogLevel, string> = {\n [LogLevel.VERBOSE]: 'verbose',\n [LogLevel.DEBUG]: 'debug',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error',\n [LogLevel.NONE]: 'none',\n} as const\n\n/**\n * Returns the log level as a lowercase string.\n * E.g. stringifyLogLevel(LogLevel.DEBUG) returns 'debug'\n */\nexport function stringifyLogLevel(logLevel: LogLevel): string {\n return logLevelToString[logLevel]\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Array views of a data buffer.\n */\nexport type TypedArray =\n | Float32Array\n | Float64Array\n | Int16Array\n | Int32Array\n | Int8Array\n | Uint16Array\n | Uint32Array\n | Uint8Array\n | Uint8ClampedArray\n\n/**\n * Creates a new typed array with identical contents as the source.\n *\n * @param array\n */\nexport function cloneTypedArray<T extends TypedArray>(array: T): T {\n // typed array slice() is not supported on Comcast OTT device.\n return new (array.constructor as new (array: T) => T)(array)\n}\n\nconst typedArrayTypes = [\n Float32Array,\n Float64Array,\n Int16Array,\n Int32Array,\n Int8Array,\n Uint16Array,\n Uint32Array,\n Uint8Array,\n Uint8ClampedArray,\n]\n\n/**\n * Returns true if the given value is an instance of one of the typed array types.\n *\n * @param value\n */\nexport function isTypedArray(value: any): value is TypedArray {\n return typedArrayTypes.some((type) => value instanceof type)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the union of two sets. That is, the unique elements of A and B.\n *\n * @param a\n * @param b\n * @return Returns a new Set `A \u222A B`\n */\nexport function union<T, U>(a: ReadonlySet<T>, b: ReadonlySet<U>): Set<T | U> {\n return new Set([...a, ...b])\n}\n\n/**\n * Returns the set difference of A and B. That is, the elements of A that are not in B.\n *\n * @param a\n * @param b\n * @return Returns a new Set that is `A \\ B`\n */\nexport function diff<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): Set<T> {\n const out: Set<T> = new Set()\n a.forEach((e) => {\n if (!b.has(e)) out.add(e)\n })\n return out\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport type { TypedArray } from '../collection/typedArray'\nimport { cloneTypedArray, isTypedArray } from '../collection/typedArray'\nimport { union } from '../set/set'\nimport { substitute } from '../string/string'\nimport { ownKeys, isPlainObject } from './object'\nimport { ReportableError } from '../../error/ReportableError'\nimport { type Cloneable, isCloneable } from '../../core/cloneable'\n\nconst locale = {\n cyclicRefError: 'Cyclic reference found at: {path}',\n mergeReferenceError: `No merge rule found at {path} for \"{source}\" and reference copy not allowed`,\n} as const\n\n/**\n * Concatenates multiple arrays together where each element is deeply cloned.\n */\nexport function mergeDeep<T extends Array<any>>(\n sources: readonly T[],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep clones the given object.\n */\nexport function mergeDeep<T>(\n sources: readonly [T],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep merges the two objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B>(\n sources: readonly [A, B],\n options?: Partial<MergeOptions>\n): A & B\n\n/**\n * Deep merges the three objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C>(\n sources: readonly [A, B, C],\n options?: Partial<MergeOptions>\n): A & B & C\n\n/**\n * Deep merges the four objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D>(\n sources: readonly [A, B, C, D],\n options?: Partial<MergeOptions>\n): A & B & C & D\n\n/**\n * Deep merges the five objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E>(\n sources: readonly [A, B, C, D, E],\n options?: Partial<MergeOptions>\n): A & B & C & D & E\n\n/**\n * Deep merges the six objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E, F>(\n sources: readonly [A, B, C, D, E, F],\n options?: Partial<MergeOptions>\n): A & B & C & D & E & F\n\n/**\n * Deep merges all objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any\n\n/**\n * Recursively copies the values of all the enumerable own properties from one or two source\n * objects to a new object.\n * Arrays will be concatenated.\n *\n * @param sources One or more source objects from which to copy properties. A single source\n * provided will return a deep clone. Incompatible objects, for example given a number and an\n * array, will return a clone of the last argument.\n * @param options\n * @see merge\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any {\n if (!sources.length) return undefined\n const finalOpts: MergeOptions = {\n ...defaultMergeOptions,\n ...options,\n }\n const stack = new PropStack()\n const n = sources.length\n\n if (n === 1)\n // Clone the single element.\n return _mergeDeep(undefined, sources[0], stack, 0, finalOpts)\n // Initial accumulator:\n let out = _mergeDeep(sources[0], sources[1], stack, 1, finalOpts)\n for (let i = 2; i < n; i++) {\n out = _mergeDeep(out, sources[i], stack, i, finalOpts)\n }\n return out\n}\n\n/**\n * Merge options defines the behavior for {@link mergeDeep}.\n * See the {@link defaultMergeOptions} for defaults that will be used if any merge options are\n * omitted.\n */\nexport interface MergeOptions {\n /**\n * If an object does not pass any of the rules, if this is true (default) the reference will be\n * copied. If false, a {@link MergeReferenceError} will be thrown.\n * This only applies to objects, not functions or primitives.\n */\n readonly allowReferenceCopy: boolean\n\n /**\n * The first merge rule where the second source object matches will be used.\n * Rules are only checked for values that have a typeof value of 'object'\n * If the first object does not pass the match, undefined will be passed to sourceA and the\n * rule is expected to return a clone of sourceB.\n * If no rules match, the value will be copied by reference unless `allowReferenceCopy` is\n * false, in which case, a {@link MergeReferenceError} will be thrown.\n */\n readonly rules: readonly MergeRule<any>[]\n}\n\n/**\n * A merge function to be provided to merge rules.\n */\nexport type MergeCallback<T = any> = (\n /**\n * The first like object to merge, or undefined. If undefined is provided, a\n * clone of sourceB is expected to be returned. If defined, this object is guaranteed to have\n * passed {@link MergeRule.matches}\n */\n sourceA: T | undefined,\n\n /**\n * The second object to merge or clone.\n */\n sourceB: T,\n\n /**\n * The identifier to be used in error reporting.\n */\n prop: string | number\n) => T\n\nexport interface MergeRule<T> {\n /**\n * Returns true if this MergeRule should be applied for the given object.\n * @param object\n */\n readonly matches: (object: any) => object is T\n\n /**\n * Merges the two sources.\n * @param sourceA May be undefined, the first object to merge.\n * @param sourceB The second object to merge or clone if sourceA is undefined.\n * @param merge This callback may be used to merge or clone sub-properties.\n */\n readonly merge: (\n sourceA: T | undefined,\n sourceB: T,\n merge: MergeCallback\n ) => T\n}\n\n/**\n * A stack of the current property recursion.\n * PropStack has two purposes, it provides the current property path in the node traversal and\n * ensures that nodes do not cyclically reference themselves.\n */\nclass PropStack {\n /**\n * Object references for sourceA.\n */\n private refsA = new Set<any>()\n\n /**\n * Object references for sourceB.\n */\n private refsB = new Set<any>()\n private propStack: [any, any, keyof any | undefined][] = []\n\n /**\n * The property stack, joined by .\n */\n get currentPath(): string {\n return this.propStack\n .map((e) => e[2])\n .filter((e) => e != null)\n .join('.')\n }\n\n push(sourceA: any, sourceB: any, prop?: keyof any) {\n this.propStack.push([sourceA, sourceB, prop])\n this.addRef(this.refsA, sourceA)\n this.addRef(this.refsB, sourceB)\n }\n\n pop() {\n const last = this.propStack.pop()!\n this.refsA.delete(last[0])\n this.refsB.delete(last[1])\n }\n\n private addRef(refSet: Set<any>, source: any) {\n if (typeof source !== 'object') return\n if (refSet.has(source)) {\n throw new IllegalArgumentError(\n substitute(locale.cyclicRefError, { path: this.currentPath })\n )\n }\n refSet.add(source)\n }\n}\n\nfunction _mergeDeep<T>(\n sourceA: T | undefined,\n sourceB: T,\n propStack: PropStack,\n prop: keyof any | undefined,\n options: MergeOptions\n): T {\n if (typeof sourceB !== 'object' || sourceB === null) return sourceB\n\n const merge: MergeCallback = (sourceA, sourceB, prop) => {\n return _mergeDeep(sourceA, sourceB, propStack, prop, options)\n }\n for (const rule of options.rules) {\n if (rule.matches(sourceB)) {\n propStack.push(sourceA, sourceB, prop)\n const result = rule.merge(\n rule.matches(sourceA) ? sourceA : undefined,\n sourceB,\n merge\n )\n propStack.pop()\n return result\n }\n }\n if (!options.allowReferenceCopy) {\n // push before throwing to get the full currentPath:\n propStack.push(sourceA, sourceB, prop)\n throw new MergeReferenceError(propStack.currentPath, sourceB)\n }\n return sourceB\n}\n\nexport class MergeReferenceError extends ReportableError {\n constructor(propPath: string, source: any) {\n super(\n substitute(locale.mergeReferenceError, {\n path: propPath,\n source,\n })\n )\n Object.setPrototypeOf(this, MergeReferenceError.prototype)\n }\n}\n\n/**\n * Cloneable objects are not expected to be mergeable, but should be cloned.\n */\nexport const cloneableMergeRule: MergeRule<Cloneable<any>> = {\n matches(object: any): object is Cloneable<any> {\n return isCloneable(object)\n },\n\n merge(\n _1: Cloneable<any> | undefined,\n sourceB: Cloneable<any>,\n _2: MergeCallback\n ): Cloneable<any> {\n return sourceB.clone()\n },\n}\n\nexport const arrayMergeRule: MergeRule<any[]> = {\n matches(object: any): object is any[] {\n return Array.isArray(object)\n },\n\n merge(\n sourceA: any[] | undefined,\n sourceB: any[],\n merge: MergeCallback\n ): any[] {\n const out = []\n if (sourceA) {\n for (const element of sourceA) {\n out.push(merge(undefined, element, out.length))\n }\n }\n for (const element of sourceB) {\n out.push(merge(undefined, element, out.length))\n }\n return out\n },\n} as const\n\nexport const plainObjectMergeRule: MergeRule<Record<any, any>> = {\n matches(object: any): object is Record<any, any> {\n return isPlainObject(object)\n },\n\n merge(\n sourceA: Record<any, any> | undefined,\n sourceB: Record<any, any>,\n merge: MergeCallback\n ): Record<any, any> {\n const out: any = {}\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of union(ownKeys(sourceA), ownKeys(sourceB))) {\n if (sourceA && key in sourceB && key in sourceA) {\n out[key] = merge(sourceA[key], sourceB[key], key)\n } else if (sourceA && key in sourceA) {\n out[key] = merge(undefined, sourceA[key], key)\n } else {\n out[key] = merge(undefined, sourceB[key], key)\n }\n }\n return out\n },\n} as const\n\nexport const regexpMergeRule: MergeRule<RegExp> = {\n matches(object: any): object is RegExp {\n return object instanceof RegExp\n },\n merge(_1: RegExp | undefined, sourceB: RegExp, _2: MergeCallback): RegExp {\n // Clone the regex; they are stateful.\n return new RegExp(sourceB.source, sourceB.flags)\n },\n} as const\n\nexport const dateMergeRule: MergeRule<Date> = {\n matches(object: any): object is Date {\n return object instanceof Date\n },\n merge(_1: Date | undefined, sourceB: Date, _2: MergeCallback): Date {\n return new Date(sourceB.getTime())\n },\n} as const\n\nexport const mapMergeRule: MergeRule<Map<any, any>> = {\n matches(object: any): object is Map<any, any> {\n return object instanceof Map\n },\n merge(\n sourceA: Map<any, any> | undefined,\n sourceB: Map<any, any>,\n merge: MergeCallback\n ): Map<any, any> {\n const out = new Map()\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of new Set([\n ...(sourceA?.keys() ?? []),\n ...sourceB.keys(),\n ])) {\n if (sourceB.has(key) && sourceA?.has(key)) {\n out.set(key, merge(sourceA.get(key), sourceB.get(key), key))\n } else if (sourceA?.has(key)) {\n out.set(key, merge(undefined, sourceA.get(key), key))\n } else {\n out.set(key, merge(undefined, sourceB.get(key), key))\n }\n }\n return out\n },\n} as const\n\nexport const setMergeRule: MergeRule<Set<any>> = {\n matches(object: any): object is Set<any> {\n return object instanceof Set\n },\n merge(\n sourceA: Set<any> | undefined,\n sourceB: Set<any>,\n merge: MergeCallback\n ): Set<any> {\n return new Set(\n [...(sourceA?.values() ?? []), ...sourceB.values()].map(\n (element, index) => {\n return merge(undefined, element, index)\n }\n )\n )\n },\n} as const\n\n/**\n * Typed arrays will not concatenate by default like arrays. Typed arrays generally represent data,\n * not configuration, and the more reasonable default is to clone, not concatenate.\n */\nexport const typedArrayMergeRule: MergeRule<TypedArray> = {\n matches(object: any): object is TypedArray {\n return isTypedArray(object)\n },\n merge(\n _1: TypedArray | undefined,\n sourceB: TypedArray,\n _2: MergeCallback\n ): TypedArray {\n return cloneTypedArray(sourceB)\n },\n} as const\n\nexport const urlMergeRule: MergeRule<URL> = {\n matches(object: any): object is URL {\n return object instanceof URL\n },\n merge(_1: URL | undefined, sourceB: URL, _2: MergeCallback): URL {\n return new URL(sourceB.toString())\n },\n} as const\n\n/**\n * The default merge options provide rules for merging arrays, plain objects, RegExp, Date,\n * Map, Set, and TypedArray.\n */\nexport const defaultMergeOptions: MergeOptions = {\n allowReferenceCopy: true,\n rules: [\n cloneableMergeRule,\n arrayMergeRule,\n plainObjectMergeRule,\n regexpMergeRule,\n dateMergeRule,\n mapMergeRule,\n setMergeRule,\n typedArrayMergeRule,\n urlMergeRule,\n ],\n} as const\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Matches a URI scheme prefix (e.g. `https:`, `data:`, `blob:`), per RFC 3986:\n * an ASCII letter followed by letters, digits, `+`, `-`, or `.`, then `:`.\n */\nconst SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i\n\n/**\n * Resolves a relative URI against a base URL using string manipulation,\n * avoiding the overhead of constructing `URL` objects.\n *\n * Handles the same cases as `new URL(relative, base)`:\n * - Absolute URIs (with any scheme, including `data:` / `blob:`) are returned\n * as-is.\n * - Protocol-relative URIs (`//host/path`) inherit the base scheme.\n * - Absolute paths (`/path`) replace the base path.\n * - Relative paths are resolved against the base directory.\n *\n * @param relative The relative (or absolute) URI to resolve.\n * @param base The base URL string to resolve against.\n * @returns A resolved absolute URL string.\n */\nexport function resolveUrl(relative: string, base: string): string {\n // Absolute URI \u2014 has a scheme (http:, https:, data:, blob:, ...).\n if (SCHEME_RE.test(relative)) return relative\n\n // Protocol-relative.\n if (relative.startsWith('//')) {\n const schemeEnd = base.indexOf('://')\n return base.substring(0, schemeEnd + 1) + relative\n }\n\n const schemeEnd = base.indexOf('://') + 3\n const pathStart = base.indexOf('/', schemeEnd)\n const origin = pathStart === -1 ? base : base.substring(0, pathStart)\n\n // Absolute path.\n if (relative.startsWith('/')) return origin + relative\n\n // Empty relative \u2014 return base as-is.\n if (relative === '') return base\n\n // Relative path \u2014 resolve against base directory.\n const basePath = pathStart === -1 ? '/' : base.substring(pathStart)\n const lastSlash = basePath.lastIndexOf('/')\n const dir = basePath.substring(0, lastSlash + 1)\n\n return origin + resolveDots(dir + relative)\n}\n\n/**\n * Extracts the hostname from an absolute URL string.\n *\n * @param url An absolute URL string (e.g. `https://example.com:8080/path`).\n * @returns The hostname (e.g. `example.com`).\n */\nexport function getHostname(url: string): string {\n const start = url.indexOf('://') + 3\n let end = url.indexOf('/', start)\n if (end === -1) end = url.length\n const hostPort = url.substring(start, end)\n const colon = hostPort.indexOf(':')\n return colon === -1 ? hostPort : hostPort.substring(0, colon)\n}\n\n/**\n * Resolves `.` and `..` segments in a path.\n */\nfunction resolveDots(path: string): string {\n // Fast path: no dots to resolve.\n if (path.indexOf('.') === -1) return path\n\n const parts = path.split('/')\n const out: string[] = []\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i]\n if (p === '..') {\n // Don't pop past root.\n if (out.length > 1) out.pop()\n } else if (p !== '.') {\n out.push(p)\n }\n }\n return out.join('/')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//-------------------------------------------------------------------------\n// A Benchmarking utility for testing and comparing performance.\n//-------------------------------------------------------------------------\n\n/**\n * Gets the current high resolution timestamp, platform dependent.\n */\nlet now: () => number\nif (\n typeof window !== 'undefined' &&\n typeof window.performance !== 'undefined' &&\n typeof window.performance.now !== 'undefined'\n) {\n now = () => window.performance.now()\n} else if (\n typeof self !== 'undefined' &&\n typeof self.performance !== 'undefined' &&\n typeof self.performance.now !== 'undefined'\n) {\n now = () => self.performance.now()\n} else {\n now = () => Date.now()\n}\n\nexport interface BenchMarkOptions {\n /**\n * The amount of time to run the executor before beginning measurement (in seconds).\n */\n readonly warmupTime: number\n\n /**\n * When time has elapsed past this duration during a cycle (in seconds), there will be no\n * operations.\n * The cycle will end when `maxCycleDuration` has been reached.\n */\n readonly maxCycleDuration: number\n\n /**\n * The number of trials to run.\n */\n readonly cycles: number\n}\n\nexport interface CycleResults {\n /**\n * The number of seconds the cycle ran.\n */\n readonly duration: number\n\n /**\n * The number of completed executions.\n */\n readonly ops: number\n}\n\nexport class BenchmarkRunResults {\n readonly cycleResults: number[] = []\n\n private _totalSamples = 0\n get totalSamples(): number {\n return this._totalSamples\n }\n\n get cycleResultsNoOutliers(): number[] {\n const sD = this.standardDeviation\n const avg = average(this.cycleResults)\n return this.cycleResults.filter((e) => {\n const zScore = (avg - e) / sD\n return Math.abs(zScore) < 3\n })\n }\n\n /**\n * Returns the mean ops per second minus outliers of greater than 3 standard deviations.\n */\n get meanOpsPerSec(): number {\n return average(this.cycleResultsNoOutliers)\n }\n\n get standardDeviation(): number {\n return standardDeviation(this.cycleResults)\n }\n\n get variance(): number {\n return this.standardDeviation / this.meanOpsPerSec\n }\n\n /**\n * Returns the mean ops / s \u00B1 variance % as a string.\n */\n get meanOpsStr(): string {\n const mean = this.meanOpsPerSec.toLocaleString(undefined, {\n maximumSignificantDigits: 4,\n })\n const variance = this.variance.toLocaleString(undefined, {\n style: 'percent',\n })\n return `${mean} \u00B1${variance}`\n }\n\n constructor(readonly name: string) {}\n\n add(cycle: CycleResults) {\n const opsPerSecond = cycle.ops / cycle.duration\n let index = this.cycleResults.findIndex((value) => opsPerSecond < value)\n if (index < 0) index = this.cycleResults.length\n this.cycleResults.splice(index, 0, opsPerSecond)\n this._totalSamples += cycle.ops\n }\n\n toString(): string {\n if (!this.cycleResults.length) return 'No results'\n return `${this.name}: ${this.meanOpsStr} ops/sec`\n }\n}\n\nexport class RunResultsComparison {\n /**\n * Sorted by median ops/s from slowest to fastest.\n */\n readonly results: BenchmarkRunResults[]\n\n constructor(\n readonly name: string,\n results: BenchmarkRunResults[]\n ) {\n this.results = results.sort((a, b) => {\n return a.meanOpsPerSec - b.meanOpsPerSec\n })\n }\n\n logToTable(): void {\n const r = this.results.map((run) => {\n const variance = run.variance.toLocaleString(undefined, {\n style: 'percent',\n })\n const mean = run.meanOpsPerSec.toLocaleString(undefined, {\n maximumSignificantDigits: 4,\n })\n\n return {\n Name: run.name,\n Mean: `${mean} \u00B1${variance}`,\n Samples: run.totalSamples,\n Compare: this.runComparisonToString(run),\n }\n })\n // Use the names as the index.\n const table = r.reduce<any>((acc, { Name, ...x }) => {\n acc[Name] = x\n return acc\n }, {})\n console.log('\\n' + this.name)\n console.table(table)\n }\n\n runComparisonToString(run: BenchmarkRunResults): string {\n const baseline = this.results[0]?.meanOpsPerSec ?? 0\n const fasterPercent = run.meanOpsPerSec / baseline - 1\n return fasterPercent < 0.01\n ? '-'\n : fasterPercent.toLocaleString(undefined, {\n style: 'percent',\n }) + ' faster'\n }\n}\n\nexport function compareResults(\n name: string,\n ...results: BenchmarkRunResults[]\n): RunResultsComparison {\n return new RunResultsComparison(name, results)\n}\n\nconst defaultBenchmarkOptions: BenchMarkOptions = {\n warmupTime: 0.5,\n maxCycleDuration: 0.5,\n cycles: 9,\n} as const\n\nexport class Benchmark {\n private static semaphore: Promise<any> = nextFrame()\n\n private readonly options: BenchMarkOptions\n\n /**\n * Constructs a new Benchmark.\n *\n * @param name The name of the benchmark, to be used when logging.\n * @param executor The method to execute and measure. If this method returns a promise, the\n * promise will be awaited. The executor should either always return a promise, or never.\n * @param options Optional configuration for the benchmark.\n */\n constructor(\n readonly name: string,\n readonly executor: () => any,\n options?: Partial<BenchMarkOptions>\n ) {\n this.options = { ...defaultBenchmarkOptions, ...options }\n }\n\n async run(): Promise<BenchmarkRunResults> {\n const opts = this.options\n // Wait for any currently running work to complete.\n await Benchmark.semaphore\n\n const warmupTimeMs = opts.warmupTime * 1000\n const cycleStart = now()\n let isAsync = false\n do {\n const result = this.executor()\n // If the executor returns a promise, it is considered an async test and the benchmark\n // should await its result.\n isAsync = isAsync || (result && typeof result.then === 'function')\n if (isAsync) await result\n } while (now() - cycleStart < warmupTimeMs)\n const resultsPromise: Promise<BenchmarkRunResults> = (async () => {\n const results = new BenchmarkRunResults(this.name)\n for (let i = 0; i < opts.cycles; i++) {\n const cycleResults = await this.runCycle(isAsync)\n results.add(cycleResults)\n await nextFrame()\n }\n return results\n })()\n Benchmark.semaphore = resultsPromise\n return await resultsPromise\n }\n\n /**\n * Runs one cycle. A cycle will repeat the executor approximately `options.maxCycleDuration`\n * seconds.\n *\n * @param isAsync\n * @return Returns the duration (in seconds) and number of operations the cycle repeated.\n */\n private async runCycle(isAsync: boolean): Promise<CycleResults> {\n const cycleMs = this.options.maxCycleDuration * 1000\n let ops = 0\n const cycleStart = now()\n do {\n const result = this.executor()\n if (isAsync) await result\n ops++\n } while (now() - cycleStart < cycleMs)\n const duration = (now() - cycleStart) / 1000\n return {\n duration,\n ops,\n }\n }\n}\n\n/**\n * Creates and runs a benchmark, logging the result.\n *\n * @param name\n * @param executor\n * @param options\n */\nexport function benchmark(\n name: string,\n executor: () => any,\n options?: Partial<BenchMarkOptions>\n): Promise<BenchmarkRunResults> {\n const benchmark = new Benchmark(name, executor, options)\n return benchmark.run().then((results) => {\n console.log(results.toString())\n return results\n })\n}\n\n/**\n * To avoid killing the browser's frame.\n */\nfunction nextFrame(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve)\n })\n}\n\n/**\n * Returns the standard deviation of the given values.\n *\n * @param values\n */\nfunction standardDeviation(values: readonly number[]): number {\n const avg = average(values)\n const squareDiffs = values.map((value) => {\n const diff = value - avg\n return diff * diff\n })\n const avgSquareDiff = average(squareDiffs)\n return Math.sqrt(avgSquareDiff)\n}\n\n/**\n * Returns the mean/average of the given values.\n *\n * @param values\n */\nfunction average(values: readonly number[]): number {\n const sum = values.reduce((acc, value) => acc + value, 0)\n return sum / values.length\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet nextTestTimeoutOverridden: boolean = false\n\n/**\n * Sets the timeout for the current describe block.\n *\n * @param timeout The test timeout, in seconds.\n */\nexport function setTestTimeout(timeout: number) {\n let originalTimeout: number | null = null\n beforeEach(() => {\n originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL\n if (!nextTestTimeoutOverridden)\n jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout * 1000\n })\n\n afterEach(() => {\n if (originalTimeout) jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout\n if (nextTestTimeoutOverridden) nextTestTimeoutOverridden = false\n })\n}\n\n/**\n * Sets the timeout for the next test and only the next test,\n * overriding any value set subsequently to setTestTimeout.\n *\n * @param timeout The test timeout, in seconds.\n */\nexport function setNextTestTimeout(timeout: number) {\n nextTestTimeoutOverridden = true\n jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout * 1000\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Some tests (such as benchmarks or type expectations) have no jasmine expectations.\n */\nexport function expectNothing() {\n expect(true).toBeTruthy()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport createSpy = jasmine.createSpy\nimport Spy = jasmine.Spy\nimport SpyAnd = jasmine.SpyAnd\nimport Calls = jasmine.Calls\nimport MatchableArgs = jasmine.MatchableArgs\n\ntype Fun = (...args: any[]) => any\n\n/**\n * A SpyFactory creates spies by member access. The spies will be named based on the key,\n * and the type interface of the Spy will match the corresponding interface function.\n */\nexport interface SpyFactory<T> {\n <K extends FunctionKeys<T>>(\n key: K\n ): T[K] extends Fun ? Spy2<NoThisType<NonNullable<T[K]>>> : never\n}\n\n/**\n * Fixes Jasmine's Spy type.\n * Jasmine's Spy interface has a call signature instead of intersecting the original function type.\n * This causes parameterized types of the call signature to be dropped.\n */\nexport type Spy2<Fn extends Fun> = Fn & {\n and: SpyAnd<Fn>\n calls: Calls<Fn>\n withArgs(...args: MatchableArgs<Fn>): Spy<Fn>\n}\n\nexport type FunctionKeys<T> = {\n [P in keyof T]: T[P] extends Fun ? P : never\n}[keyof T]\n\n/**\n * Creates a new spy factory.\n *\n * @param createFake If provided, all spies will be created with the fake implementation createFake\n * returns for the given key.\n */\nexport function createSpyFactory<T>(\n createFake?: (key: FunctionKeys<T>) => Fun\n): SpyFactory<T> {\n return (key: FunctionKeys<T>) => {\n const spy = createSpy(String(key))\n if (createFake) spy.and.callFake(createFake(key))\n return spy as any\n }\n}\n\n/**\n * Creates a Spy.\n * This is an alias to jasmine.createSpy with fixed type parameters.\n * @param key\n */\nexport function createSpy2<Fn extends Fun | undefined>(\n key: keyof any\n): Spy2<NoThisType<NonNullable<Fn>>> {\n return createSpy(String(key)) as any\n}\n\n/**\n * Replaces `this` type with `any` in a method signature.\n */\nexport type NoThisType<Fn extends Fun> =\n ReturnType<Fn> extends ThisType<any>\n ? Fn & ((...args: Parameters<Fn>) => any)\n : Fn\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * AUTO-GENERATED FILE - DO NOT EDIT\n * Generated by @amazon/vinyl-mock-generator\n */\n\n/* eslint-disable @typescript-eslint/prefer-as-const */\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nimport { createSpy2 } from '../createSpyFactory'\n\nexport class MockAbortController implements AbortController {\n signal: AbortSignal = undefined as any\n\n abort = createSpy2<AbortController['abort']>('abort')\n}\n\nexport class MockAbortSignal implements AbortSignal {\n aborted: boolean = false\n onabort: ((this: AbortSignal, ev: Event) => any) | null = null\n reason: any = undefined\n\n throwIfAborted = createSpy2<AbortSignal['throwIfAborted']>('throwIfAborted')\n addEventListener =\n createSpy2<AbortSignal['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<AbortSignal['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<AbortSignal['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockAudioContext implements AudioContext {\n baseLatency: number = 0\n outputLatency: number = 0\n audioWorklet: AudioWorklet = undefined as any\n currentTime: number = 0\n destination: AudioDestinationNode = undefined as any\n listener: AudioListener = undefined as any\n onstatechange: ((this: BaseAudioContext, ev: Event) => any) | null = null\n sampleRate: number = 0\n state: AudioContextState = 'closed'\n\n close = createSpy2<AudioContext['close']>('close')\n createMediaElementSource = createSpy2<\n AudioContext['createMediaElementSource']\n >('createMediaElementSource')\n createMediaStreamDestination = createSpy2<\n AudioContext['createMediaStreamDestination']\n >('createMediaStreamDestination')\n createMediaStreamSource = createSpy2<\n AudioContext['createMediaStreamSource']\n >('createMediaStreamSource')\n getOutputTimestamp =\n createSpy2<AudioContext['getOutputTimestamp']>('getOutputTimestamp')\n resume = createSpy2<AudioContext['resume']>('resume')\n suspend = createSpy2<AudioContext['suspend']>('suspend')\n addEventListener =\n createSpy2<AudioContext['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<AudioContext['removeEventListener']>(\n 'removeEventListener'\n )\n createAnalyser =\n createSpy2<AudioContext['createAnalyser']>('createAnalyser')\n createBiquadFilter =\n createSpy2<AudioContext['createBiquadFilter']>('createBiquadFilter')\n createBuffer = createSpy2<AudioContext['createBuffer']>('createBuffer')\n createBufferSource =\n createSpy2<AudioContext['createBufferSource']>('createBufferSource')\n createChannelMerger = createSpy2<AudioContext['createChannelMerger']>(\n 'createChannelMerger'\n )\n createChannelSplitter = createSpy2<AudioContext['createChannelSplitter']>(\n 'createChannelSplitter'\n )\n createConstantSource = createSpy2<AudioContext['createConstantSource']>(\n 'createConstantSource'\n )\n createConvolver =\n createSpy2<AudioContext['createConvolver']>('createConvolver')\n createDelay = createSpy2<AudioContext['createDelay']>('createDelay')\n createDynamicsCompressor = createSpy2<\n AudioContext['createDynamicsCompressor']\n >('createDynamicsCompressor')\n createGain = createSpy2<AudioContext['createGain']>('createGain')\n createIIRFilter =\n createSpy2<AudioContext['createIIRFilter']>('createIIRFilter')\n createOscillator =\n createSpy2<AudioContext['createOscillator']>('createOscillator')\n createPanner = createSpy2<AudioContext['createPanner']>('createPanner')\n createPeriodicWave =\n createSpy2<AudioContext['createPeriodicWave']>('createPeriodicWave')\n createScriptProcessor = createSpy2<AudioContext['createScriptProcessor']>(\n 'createScriptProcessor'\n )\n createStereoPanner =\n createSpy2<AudioContext['createStereoPanner']>('createStereoPanner')\n createWaveShaper =\n createSpy2<AudioContext['createWaveShaper']>('createWaveShaper')\n decodeAudioData =\n createSpy2<AudioContext['decodeAudioData']>('decodeAudioData')\n dispatchEvent = createSpy2<AudioContext['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockCache implements Cache {\n add = createSpy2<Cache['add']>('add')\n addAll = createSpy2<Cache['addAll']>('addAll')\n delete = createSpy2<Cache['delete']>('delete')\n keys = createSpy2<Cache['keys']>('keys')\n match = createSpy2<Cache['match']>('match')\n matchAll = createSpy2<Cache['matchAll']>('matchAll')\n put = createSpy2<Cache['put']>('put')\n}\n\nexport class MockCacheStorage implements CacheStorage {\n delete = createSpy2<CacheStorage['delete']>('delete')\n has = createSpy2<CacheStorage['has']>('has')\n keys = createSpy2<CacheStorage['keys']>('keys')\n match = createSpy2<CacheStorage['match']>('match')\n open = createSpy2<CacheStorage['open']>('open')\n}\n\nexport class MockCustomEvent<T = any> implements CustomEvent<T> {\n detail: T = undefined as any\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n initCustomEvent =\n createSpy2<CustomEvent<T>['initCustomEvent']>('initCustomEvent')\n composedPath = createSpy2<CustomEvent<T>['composedPath']>('composedPath')\n initEvent = createSpy2<CustomEvent<T>['initEvent']>('initEvent')\n preventDefault =\n createSpy2<CustomEvent<T>['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n CustomEvent<T>['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<CustomEvent<T>['stopPropagation']>('stopPropagation')\n}\n\nexport class MockDocument implements Document {\n URL: string = ''\n alinkColor: string = ''\n all: HTMLAllCollection = undefined as any\n anchors: HTMLCollectionOf<HTMLAnchorElement> = undefined as any\n applets: HTMLCollection = undefined as any\n bgColor: string = ''\n body: HTMLElement = undefined as any\n characterSet: string = ''\n charset: string = ''\n compatMode: string = ''\n contentType: string = ''\n cookie: string = ''\n currentScript: HTMLOrSVGScriptElement | null = undefined as any\n defaultView: (WindowProxy & typeof globalThis) | null = undefined as any\n designMode: string = ''\n dir: string = ''\n doctype: DocumentType | null = null\n documentElement: HTMLElement = undefined as any\n documentURI: string = ''\n domain: string = ''\n embeds: HTMLCollectionOf<HTMLEmbedElement> = undefined as any\n fgColor: string = ''\n forms: HTMLCollectionOf<HTMLFormElement> = undefined as any\n fragmentDirective: FragmentDirective = undefined as any\n fullscreen: boolean = false\n fullscreenEnabled: boolean = false\n head: HTMLHeadElement = undefined as any\n hidden: boolean = false\n images: HTMLCollectionOf<HTMLImageElement> = undefined as any\n implementation: DOMImplementation = undefined as any\n inputEncoding: string = ''\n lastModified: string = ''\n linkColor: string = ''\n links: HTMLCollectionOf<HTMLAnchorElement | HTMLAreaElement> =\n undefined as any\n onfullscreenchange: ((this: Document, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Document, ev: Event) => any) | null = null\n onpointerlockchange: ((this: Document, ev: Event) => any) | null = null\n onpointerlockerror: ((this: Document, ev: Event) => any) | null = null\n onreadystatechange: ((this: Document, ev: Event) => any) | null = null\n onvisibilitychange: ((this: Document, ev: Event) => any) | null = null\n ownerDocument: null = null\n pictureInPictureEnabled: boolean = false\n plugins: HTMLCollectionOf<HTMLEmbedElement> = undefined as any\n readyState: DocumentReadyState = 'complete'\n referrer: string = ''\n rootElement: SVGSVGElement | null = null\n scripts: HTMLCollectionOf<HTMLScriptElement> = undefined as any\n scrollingElement: Element | null = null\n timeline: DocumentTimeline = undefined as any\n title: string = ''\n visibilityState: DocumentVisibilityState = 'hidden'\n vlinkColor: string = ''\n location: any = undefined\n textContent: null = null\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n activeElement: Element | null = null\n adoptedStyleSheets: CSSStyleSheet[] = []\n fullscreenElement: Element | null = null\n pictureInPictureElement: Element | null = null\n pointerLockElement: Element | null = null\n styleSheets: StyleSheetList = undefined as any\n fonts: FontFaceSet = undefined as any\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n\n adoptNode = createSpy2<Document['adoptNode']>('adoptNode')\n captureEvents = createSpy2<Document['captureEvents']>('captureEvents')\n caretPositionFromPoint = createSpy2<Document['caretPositionFromPoint']>(\n 'caretPositionFromPoint'\n )\n caretRangeFromPoint = createSpy2<Document['caretRangeFromPoint']>(\n 'caretRangeFromPoint'\n )\n clear = createSpy2<Document['clear']>('clear')\n close = createSpy2<Document['close']>('close')\n createAttribute = createSpy2<Document['createAttribute']>('createAttribute')\n createAttributeNS =\n createSpy2<Document['createAttributeNS']>('createAttributeNS')\n createCDATASection =\n createSpy2<Document['createCDATASection']>('createCDATASection')\n createComment = createSpy2<Document['createComment']>('createComment')\n createDocumentFragment = createSpy2<Document['createDocumentFragment']>(\n 'createDocumentFragment'\n )\n createElement = createSpy2<Document['createElement']>('createElement')\n createElementNS = createSpy2<Document['createElementNS']>('createElementNS')\n createEvent = createSpy2<Document['createEvent']>('createEvent')\n createNodeIterator =\n createSpy2<Document['createNodeIterator']>('createNodeIterator')\n createProcessingInstruction = createSpy2<\n Document['createProcessingInstruction']\n >('createProcessingInstruction')\n createRange = createSpy2<Document['createRange']>('createRange')\n createTextNode = createSpy2<Document['createTextNode']>('createTextNode')\n createTreeWalker =\n createSpy2<Document['createTreeWalker']>('createTreeWalker')\n execCommand = createSpy2<Document['execCommand']>('execCommand')\n exitFullscreen = createSpy2<Document['exitFullscreen']>('exitFullscreen')\n exitPictureInPicture = createSpy2<Document['exitPictureInPicture']>(\n 'exitPictureInPicture'\n )\n exitPointerLock = createSpy2<Document['exitPointerLock']>('exitPointerLock')\n getElementById = createSpy2<Document['getElementById']>('getElementById')\n getElementsByClassName = createSpy2<Document['getElementsByClassName']>(\n 'getElementsByClassName'\n )\n getElementsByName =\n createSpy2<Document['getElementsByName']>('getElementsByName')\n getElementsByTagName = createSpy2<Document['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<Document['getElementsByTagNameNS']>(\n 'getElementsByTagNameNS'\n )\n getSelection = createSpy2<Document['getSelection']>('getSelection')\n hasFocus = createSpy2<Document['hasFocus']>('hasFocus')\n hasStorageAccess =\n createSpy2<Document['hasStorageAccess']>('hasStorageAccess')\n importNode = createSpy2<Document['importNode']>('importNode')\n open = createSpy2<Document['open']>('open')\n queryCommandEnabled = createSpy2<Document['queryCommandEnabled']>(\n 'queryCommandEnabled'\n )\n queryCommandIndeterm = createSpy2<Document['queryCommandIndeterm']>(\n 'queryCommandIndeterm'\n )\n queryCommandState =\n createSpy2<Document['queryCommandState']>('queryCommandState')\n queryCommandSupported = createSpy2<Document['queryCommandSupported']>(\n 'queryCommandSupported'\n )\n queryCommandValue =\n createSpy2<Document['queryCommandValue']>('queryCommandValue')\n releaseEvents = createSpy2<Document['releaseEvents']>('releaseEvents')\n requestStorageAccess = createSpy2<Document['requestStorageAccess']>(\n 'requestStorageAccess'\n )\n startViewTransition = createSpy2<Document['startViewTransition']>(\n 'startViewTransition'\n )\n write = createSpy2<Document['write']>('write')\n writeln = createSpy2<Document['writeln']>('writeln')\n addEventListener =\n createSpy2<Document['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<Document['removeEventListener']>(\n 'removeEventListener'\n )\n appendChild = createSpy2<Document['appendChild']>('appendChild')\n cloneNode = createSpy2<Document['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Document['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Document['contains']>('contains')\n getRootNode = createSpy2<Document['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Document['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Document['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Document['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Document['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Document['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Document['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Document['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Document['normalize']>('normalize')\n removeChild = createSpy2<Document['removeChild']>('removeChild')\n replaceChild = createSpy2<Document['replaceChild']>('replaceChild')\n elementFromPoint =\n createSpy2<Document['elementFromPoint']>('elementFromPoint')\n elementsFromPoint =\n createSpy2<Document['elementsFromPoint']>('elementsFromPoint')\n getAnimations = createSpy2<Document['getAnimations']>('getAnimations')\n append = createSpy2<Document['append']>('append')\n prepend = createSpy2<Document['prepend']>('prepend')\n querySelector = createSpy2<Document['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<Document['querySelectorAll']>('querySelectorAll')\n replaceChildren = createSpy2<Document['replaceChildren']>('replaceChildren')\n createExpression =\n createSpy2<Document['createExpression']>('createExpression')\n createNSResolver =\n createSpy2<Document['createNSResolver']>('createNSResolver')\n evaluate = createSpy2<Document['evaluate']>('evaluate')\n dispatchEvent = createSpy2<Document['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockErrorEvent implements ErrorEvent {\n colno: number = 0\n error: any = undefined\n filename: string = ''\n lineno: number = 0\n message: string = ''\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<ErrorEvent['composedPath']>('composedPath')\n initEvent = createSpy2<ErrorEvent['initEvent']>('initEvent')\n preventDefault = createSpy2<ErrorEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n ErrorEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<ErrorEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockEvent implements Event {\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<Event['composedPath']>('composedPath')\n initEvent = createSpy2<Event['initEvent']>('initEvent')\n preventDefault = createSpy2<Event['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<Event['stopImmediatePropagation']>(\n 'stopImmediatePropagation'\n )\n stopPropagation = createSpy2<Event['stopPropagation']>('stopPropagation')\n}\n\nexport class MockEventTarget implements EventTarget {\n addEventListener =\n createSpy2<EventTarget['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<EventTarget['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<EventTarget['removeEventListener']>(\n 'removeEventListener'\n )\n}\n\nexport class MockHTMLAudioElement implements HTMLAudioElement {\n autoplay: boolean = false\n buffered: TimeRanges = undefined as any\n controls: boolean = false\n crossOrigin: string | null = ''\n currentSrc: string = ''\n currentTime: number = 0\n defaultMuted: boolean = false\n defaultPlaybackRate: number = 0\n disableRemotePlayback: boolean = false\n duration: number = 0\n ended: boolean = false\n error: MediaError | null = null\n loop: boolean = false\n mediaKeys: MediaKeys | null = null\n muted: boolean = false\n networkState: number = 0\n onencrypted:\n ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null = null\n onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null = null\n paused: boolean = false\n playbackRate: number = 0\n played: TimeRanges = undefined as any\n preload: 'none' | 'metadata' | 'auto' | '' = 'none'\n preservesPitch: boolean = false\n readyState: number = 0\n remote: RemotePlayback = undefined as any\n seekable: TimeRanges = undefined as any\n seeking: boolean = false\n sinkId: string = ''\n src: string = ''\n srcObject: MediaProvider | null = undefined as any\n textTracks: TextTrackList = undefined as any\n volume: number = 0\n NETWORK_EMPTY: 0 = 0\n NETWORK_IDLE: 1 = 1\n NETWORK_LOADING: 2 = 2\n NETWORK_NO_SOURCE: 3 = 3\n HAVE_NOTHING: 0 = 0\n HAVE_METADATA: 1 = 1\n HAVE_CURRENT_DATA: 2 = 2\n HAVE_FUTURE_DATA: 3 = 3\n HAVE_ENOUGH_DATA: 4 = 4\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addEventListener =\n createSpy2<HTMLAudioElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLAudioElement['removeEventListener']>(\n 'removeEventListener'\n )\n addTextTrack = createSpy2<HTMLAudioElement['addTextTrack']>('addTextTrack')\n canPlayType = createSpy2<HTMLAudioElement['canPlayType']>('canPlayType')\n fastSeek = createSpy2<HTMLAudioElement['fastSeek']>('fastSeek')\n load = createSpy2<HTMLAudioElement['load']>('load')\n pause = createSpy2<HTMLAudioElement['pause']>('pause')\n play = createSpy2<HTMLAudioElement['play']>('play')\n setMediaKeys = createSpy2<HTMLAudioElement['setMediaKeys']>('setMediaKeys')\n setSinkId = createSpy2<HTMLAudioElement['setSinkId']>('setSinkId')\n attachInternals =\n createSpy2<HTMLAudioElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLAudioElement['click']>('click')\n hidePopover = createSpy2<HTMLAudioElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLAudioElement['showPopover']>('showPopover')\n togglePopover =\n createSpy2<HTMLAudioElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLAudioElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLAudioElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLAudioElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLAudioElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLAudioElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLAudioElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLAudioElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLAudioElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLAudioElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<\n HTMLAudioElement['getBoundingClientRect']\n >('getBoundingClientRect')\n getClientRects =\n createSpy2<HTMLAudioElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLAudioElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLAudioElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLAudioElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLAudioElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLAudioElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLAudioElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes =\n createSpy2<HTMLAudioElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLAudioElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<\n HTMLAudioElement['insertAdjacentElement']\n >('insertAdjacentElement')\n insertAdjacentHTML =\n createSpy2<HTMLAudioElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLAudioElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLAudioElement['matches']>('matches')\n releasePointerCapture = createSpy2<\n HTMLAudioElement['releasePointerCapture']\n >('releasePointerCapture')\n removeAttribute =\n createSpy2<HTMLAudioElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLAudioElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLAudioElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLAudioElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLAudioElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLAudioElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLAudioElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLAudioElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLAudioElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLAudioElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLAudioElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLAudioElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLAudioElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe =\n createSpy2<HTMLAudioElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLAudioElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLAudioElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<\n HTMLAudioElement['webkitMatchesSelector']\n >('webkitMatchesSelector')\n blur = createSpy2<HTMLAudioElement['blur']>('blur')\n focus = createSpy2<HTMLAudioElement['focus']>('focus')\n appendChild = createSpy2<HTMLAudioElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLAudioElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLAudioElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLAudioElement['contains']>('contains')\n getRootNode = createSpy2<HTMLAudioElement['getRootNode']>('getRootNode')\n hasChildNodes =\n createSpy2<HTMLAudioElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLAudioElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLAudioElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLAudioElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLAudioElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLAudioElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLAudioElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLAudioElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLAudioElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLAudioElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLAudioElement['animate']>('animate')\n getAnimations =\n createSpy2<HTMLAudioElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLAudioElement['after']>('after')\n before = createSpy2<HTMLAudioElement['before']>('before')\n remove = createSpy2<HTMLAudioElement['remove']>('remove')\n replaceWith = createSpy2<HTMLAudioElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLAudioElement['append']>('append')\n prepend = createSpy2<HTMLAudioElement['prepend']>('prepend')\n querySelector =\n createSpy2<HTMLAudioElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLAudioElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLAudioElement['replaceChildren']>('replaceChildren')\n dispatchEvent =\n createSpy2<HTMLAudioElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockHTMLDivElement implements HTMLDivElement {\n align: string = ''\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addEventListener =\n createSpy2<HTMLDivElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLDivElement['removeEventListener']>(\n 'removeEventListener'\n )\n attachInternals =\n createSpy2<HTMLDivElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLDivElement['click']>('click')\n hidePopover = createSpy2<HTMLDivElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLDivElement['showPopover']>('showPopover')\n togglePopover = createSpy2<HTMLDivElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLDivElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLDivElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLDivElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLDivElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLDivElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLDivElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLDivElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLDivElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLDivElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<HTMLDivElement['getBoundingClientRect']>(\n 'getBoundingClientRect'\n )\n getClientRects =\n createSpy2<HTMLDivElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLDivElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLDivElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLDivElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLDivElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLDivElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLDivElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes = createSpy2<HTMLDivElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLDivElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<HTMLDivElement['insertAdjacentElement']>(\n 'insertAdjacentElement'\n )\n insertAdjacentHTML =\n createSpy2<HTMLDivElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLDivElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLDivElement['matches']>('matches')\n releasePointerCapture = createSpy2<HTMLDivElement['releasePointerCapture']>(\n 'releasePointerCapture'\n )\n removeAttribute =\n createSpy2<HTMLDivElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLDivElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLDivElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLDivElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLDivElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLDivElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLDivElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLDivElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLDivElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLDivElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLDivElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLDivElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLDivElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe = createSpy2<HTMLDivElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLDivElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLDivElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<HTMLDivElement['webkitMatchesSelector']>(\n 'webkitMatchesSelector'\n )\n blur = createSpy2<HTMLDivElement['blur']>('blur')\n focus = createSpy2<HTMLDivElement['focus']>('focus')\n appendChild = createSpy2<HTMLDivElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLDivElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLDivElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLDivElement['contains']>('contains')\n getRootNode = createSpy2<HTMLDivElement['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<HTMLDivElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLDivElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLDivElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLDivElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLDivElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLDivElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLDivElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLDivElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLDivElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLDivElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLDivElement['animate']>('animate')\n getAnimations = createSpy2<HTMLDivElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLDivElement['after']>('after')\n before = createSpy2<HTMLDivElement['before']>('before')\n remove = createSpy2<HTMLDivElement['remove']>('remove')\n replaceWith = createSpy2<HTMLDivElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLDivElement['append']>('append')\n prepend = createSpy2<HTMLDivElement['prepend']>('prepend')\n querySelector = createSpy2<HTMLDivElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLDivElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLDivElement['replaceChildren']>('replaceChildren')\n dispatchEvent = createSpy2<HTMLDivElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockHTMLMediaElement implements HTMLMediaElement {\n autoplay: boolean = false\n buffered: TimeRanges = undefined as any\n controls: boolean = false\n crossOrigin: string | null = ''\n currentSrc: string = ''\n currentTime: number = 0\n defaultMuted: boolean = false\n defaultPlaybackRate: number = 0\n disableRemotePlayback: boolean = false\n duration: number = 0\n ended: boolean = false\n error: MediaError | null = null\n loop: boolean = false\n mediaKeys: MediaKeys | null = null\n muted: boolean = false\n networkState: number = 0\n onencrypted:\n ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null = null\n onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null = null\n paused: boolean = false\n playbackRate: number = 0\n played: TimeRanges = undefined as any\n preload: 'none' | 'metadata' | 'auto' | '' = 'none'\n preservesPitch: boolean = false\n readyState: number = 0\n remote: RemotePlayback = undefined as any\n seekable: TimeRanges = undefined as any\n seeking: boolean = false\n sinkId: string = ''\n src: string = ''\n srcObject: MediaProvider | null = undefined as any\n textTracks: TextTrackList = undefined as any\n volume: number = 0\n NETWORK_EMPTY: 0 = 0\n NETWORK_IDLE: 1 = 1\n NETWORK_LOADING: 2 = 2\n NETWORK_NO_SOURCE: 3 = 3\n HAVE_NOTHING: 0 = 0\n HAVE_METADATA: 1 = 1\n HAVE_CURRENT_DATA: 2 = 2\n HAVE_FUTURE_DATA: 3 = 3\n HAVE_ENOUGH_DATA: 4 = 4\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addTextTrack = createSpy2<HTMLMediaElement['addTextTrack']>('addTextTrack')\n canPlayType = createSpy2<HTMLMediaElement['canPlayType']>('canPlayType')\n fastSeek = createSpy2<HTMLMediaElement['fastSeek']>('fastSeek')\n load = createSpy2<HTMLMediaElement['load']>('load')\n pause = createSpy2<HTMLMediaElement['pause']>('pause')\n play = createSpy2<HTMLMediaElement['play']>('play')\n setMediaKeys = createSpy2<HTMLMediaElement['setMediaKeys']>('setMediaKeys')\n setSinkId = createSpy2<HTMLMediaElement['setSinkId']>('setSinkId')\n addEventListener =\n createSpy2<HTMLMediaElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLMediaElement['removeEventListener']>(\n 'removeEventListener'\n )\n attachInternals =\n createSpy2<HTMLMediaElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLMediaElement['click']>('click')\n hidePopover = createSpy2<HTMLMediaElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLMediaElement['showPopover']>('showPopover')\n togglePopover =\n createSpy2<HTMLMediaElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLMediaElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLMediaElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLMediaElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLMediaElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLMediaElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLMediaElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLMediaElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLMediaElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLMediaElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<\n HTMLMediaElement['getBoundingClientRect']\n >('getBoundingClientRect')\n getClientRects =\n createSpy2<HTMLMediaElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLMediaElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLMediaElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLMediaElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLMediaElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLMediaElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLMediaElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes =\n createSpy2<HTMLMediaElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLMediaElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<\n HTMLMediaElement['insertAdjacentElement']\n >('insertAdjacentElement')\n insertAdjacentHTML =\n createSpy2<HTMLMediaElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLMediaElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLMediaElement['matches']>('matches')\n releasePointerCapture = createSpy2<\n HTMLMediaElement['releasePointerCapture']\n >('releasePointerCapture')\n removeAttribute =\n createSpy2<HTMLMediaElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLMediaElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLMediaElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLMediaElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLMediaElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLMediaElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLMediaElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLMediaElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLMediaElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLMediaElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLMediaElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLMediaElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLMediaElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe =\n createSpy2<HTMLMediaElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLMediaElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLMediaElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<\n HTMLMediaElement['webkitMatchesSelector']\n >('webkitMatchesSelector')\n blur = createSpy2<HTMLMediaElement['blur']>('blur')\n focus = createSpy2<HTMLMediaElement['focus']>('focus')\n appendChild = createSpy2<HTMLMediaElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLMediaElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLMediaElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLMediaElement['contains']>('contains')\n getRootNode = createSpy2<HTMLMediaElement['getRootNode']>('getRootNode')\n hasChildNodes =\n createSpy2<HTMLMediaElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLMediaElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLMediaElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLMediaElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLMediaElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLMediaElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLMediaElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLMediaElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLMediaElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLMediaElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLMediaElement['animate']>('animate')\n getAnimations =\n createSpy2<HTMLMediaElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLMediaElement['after']>('after')\n before = createSpy2<HTMLMediaElement['before']>('before')\n remove = createSpy2<HTMLMediaElement['remove']>('remove')\n replaceWith = createSpy2<HTMLMediaElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLMediaElement['append']>('append')\n prepend = createSpy2<HTMLMediaElement['prepend']>('prepend')\n querySelector =\n createSpy2<HTMLMediaElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLMediaElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLMediaElement['replaceChildren']>('replaceChildren')\n dispatchEvent =\n createSpy2<HTMLMediaElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaError implements MediaError {\n code: number = 0\n message: string = ''\n MEDIA_ERR_ABORTED: 1 = 1\n MEDIA_ERR_NETWORK: 2 = 2\n MEDIA_ERR_DECODE: 3 = 3\n MEDIA_ERR_SRC_NOT_SUPPORTED: 4 = 4\n}\n\nexport class MockMediaKeyMessageEvent implements MediaKeyMessageEvent {\n message: ArrayBuffer = new ArrayBuffer(0)\n messageType: MediaKeyMessageType = 'individualization-request'\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath =\n createSpy2<MediaKeyMessageEvent['composedPath']>('composedPath')\n initEvent = createSpy2<MediaKeyMessageEvent['initEvent']>('initEvent')\n preventDefault =\n createSpy2<MediaKeyMessageEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n MediaKeyMessageEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<MediaKeyMessageEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockMediaKeySession implements MediaKeySession {\n closed: Promise<MediaKeySessionClosedReason> = undefined as any\n expiration: number = 0\n keyStatuses: MediaKeyStatusMap = undefined as any\n onkeystatuseschange: ((this: MediaKeySession, ev: Event) => any) | null =\n null\n onmessage:\n ((this: MediaKeySession, ev: MediaKeyMessageEvent) => any) | null = null\n sessionId: string = ''\n\n close = createSpy2<MediaKeySession['close']>('close')\n generateRequest =\n createSpy2<MediaKeySession['generateRequest']>('generateRequest')\n load = createSpy2<MediaKeySession['load']>('load')\n remove = createSpy2<MediaKeySession['remove']>('remove')\n update = createSpy2<MediaKeySession['update']>('update')\n addEventListener =\n createSpy2<MediaKeySession['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaKeySession['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent =\n createSpy2<MediaKeySession['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaKeySystemAccess implements MediaKeySystemAccess {\n keySystem: string = ''\n\n createMediaKeys =\n createSpy2<MediaKeySystemAccess['createMediaKeys']>('createMediaKeys')\n getConfiguration =\n createSpy2<MediaKeySystemAccess['getConfiguration']>('getConfiguration')\n}\n\nexport class MockMediaKeys implements MediaKeys {\n createSession = createSpy2<MediaKeys['createSession']>('createSession')\n getStatusForPolicy =\n createSpy2<MediaKeys['getStatusForPolicy']>('getStatusForPolicy')\n setServerCertificate = createSpy2<MediaKeys['setServerCertificate']>(\n 'setServerCertificate'\n )\n}\n\nexport class MockMediaSource implements MediaSource {\n activeSourceBuffers: SourceBufferList = undefined as any\n duration: number = 0\n onsourceclose: ((this: MediaSource, ev: Event) => any) | null = null\n onsourceended: ((this: MediaSource, ev: Event) => any) | null = null\n onsourceopen: ((this: MediaSource, ev: Event) => any) | null = null\n readyState: ReadyState = 'closed'\n sourceBuffers: SourceBufferList = undefined as any\n\n addSourceBuffer =\n createSpy2<MediaSource['addSourceBuffer']>('addSourceBuffer')\n clearLiveSeekableRange = createSpy2<MediaSource['clearLiveSeekableRange']>(\n 'clearLiveSeekableRange'\n )\n endOfStream = createSpy2<MediaSource['endOfStream']>('endOfStream')\n removeSourceBuffer =\n createSpy2<MediaSource['removeSourceBuffer']>('removeSourceBuffer')\n setLiveSeekableRange = createSpy2<MediaSource['setLiveSeekableRange']>(\n 'setLiveSeekableRange'\n )\n addEventListener =\n createSpy2<MediaSource['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaSource['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<MediaSource['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaStream implements MediaStream {\n active: boolean = false\n id: string = ''\n onaddtrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null =\n null\n onremovetrack:\n ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null = null\n\n addTrack = createSpy2<MediaStream['addTrack']>('addTrack')\n clone = createSpy2<MediaStream['clone']>('clone')\n getAudioTracks = createSpy2<MediaStream['getAudioTracks']>('getAudioTracks')\n getTrackById = createSpy2<MediaStream['getTrackById']>('getTrackById')\n getTracks = createSpy2<MediaStream['getTracks']>('getTracks')\n getVideoTracks = createSpy2<MediaStream['getVideoTracks']>('getVideoTracks')\n removeTrack = createSpy2<MediaStream['removeTrack']>('removeTrack')\n addEventListener =\n createSpy2<MediaStream['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaStream['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<MediaStream['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockNavigator implements Navigator {\n clipboard: Clipboard = undefined as any\n credentials: CredentialsContainer = undefined as any\n doNotTrack: string | null = ''\n geolocation: Geolocation = undefined as any\n login: NavigatorLogin = undefined as any\n maxTouchPoints: number = 0\n mediaCapabilities: MediaCapabilities = undefined as any\n mediaDevices: MediaDevices = undefined as any\n mediaSession: MediaSession = undefined as any\n permissions: Permissions = undefined as any\n serviceWorker: ServiceWorkerContainer = undefined as any\n userActivation: UserActivation = undefined as any\n wakeLock: WakeLock = undefined as any\n webdriver: boolean = false\n hardwareConcurrency: number = 0\n cookieEnabled: boolean = false\n appCodeName: string = ''\n appName: string = ''\n appVersion: string = ''\n platform: string = ''\n product: string = ''\n productSub: string = ''\n userAgent: string = ''\n vendor: string = ''\n vendorSub: string = ''\n language: string = ''\n languages: ReadonlyArray<string> = []\n locks: LockManager = undefined as any\n onLine: boolean = false\n mimeTypes: MimeTypeArray = undefined as any\n pdfViewerEnabled: boolean = false\n plugins: PluginArray = undefined as any\n storage: StorageManager = undefined as any\n\n canShare = createSpy2<Navigator['canShare']>('canShare')\n getGamepads = createSpy2<Navigator['getGamepads']>('getGamepads')\n requestMIDIAccess =\n createSpy2<Navigator['requestMIDIAccess']>('requestMIDIAccess')\n requestMediaKeySystemAccess = createSpy2<\n Navigator['requestMediaKeySystemAccess']\n >('requestMediaKeySystemAccess')\n sendBeacon = createSpy2<Navigator['sendBeacon']>('sendBeacon')\n share = createSpy2<Navigator['share']>('share')\n vibrate = createSpy2<Navigator['vibrate']>('vibrate')\n clearAppBadge = createSpy2<Navigator['clearAppBadge']>('clearAppBadge')\n setAppBadge = createSpy2<Navigator['setAppBadge']>('setAppBadge')\n registerProtocolHandler = createSpy2<Navigator['registerProtocolHandler']>(\n 'registerProtocolHandler'\n )\n javaEnabled = createSpy2<Navigator['javaEnabled']>('javaEnabled')\n}\n\nexport class MockNode implements Node {\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n ownerDocument: Document | null = null\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n textContent: string | null = ''\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n\n appendChild = createSpy2<Node['appendChild']>('appendChild')\n cloneNode = createSpy2<Node['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Node['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Node['contains']>('contains')\n getRootNode = createSpy2<Node['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Node['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Node['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Node['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Node['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Node['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Node['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Node['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Node['normalize']>('normalize')\n removeChild = createSpy2<Node['removeChild']>('removeChild')\n replaceChild = createSpy2<Node['replaceChild']>('replaceChild')\n addEventListener = createSpy2<Node['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<Node['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<Node['removeEventListener']>(\n 'removeEventListener'\n )\n}\n\nexport class MockProgressEvent<\n T extends EventTarget = EventTarget,\n> implements ProgressEvent<T> {\n lengthComputable: boolean = false\n loaded: number = 0\n target: T | null = undefined as any\n total: number = 0\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<ProgressEvent<T>['composedPath']>('composedPath')\n initEvent = createSpy2<ProgressEvent<T>['initEvent']>('initEvent')\n preventDefault =\n createSpy2<ProgressEvent<T>['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n ProgressEvent<T>['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<ProgressEvent<T>['stopPropagation']>('stopPropagation')\n}\n\nexport class MockPromiseRejectionEvent implements PromiseRejectionEvent {\n promise: Promise<any> = undefined as any\n reason: any = undefined\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath =\n createSpy2<PromiseRejectionEvent['composedPath']>('composedPath')\n initEvent = createSpy2<PromiseRejectionEvent['initEvent']>('initEvent')\n preventDefault =\n createSpy2<PromiseRejectionEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n PromiseRejectionEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<PromiseRejectionEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockSourceBuffer implements SourceBuffer {\n appendWindowEnd: number = 0\n appendWindowStart: number = 0\n buffered: TimeRanges = undefined as any\n mode: AppendMode = 'segments'\n onabort: ((this: SourceBuffer, ev: Event) => any) | null = null\n onerror: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdate: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdateend: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdatestart: ((this: SourceBuffer, ev: Event) => any) | null = null\n timestampOffset: number = 0\n updating: boolean = false\n\n abort = createSpy2<SourceBuffer['abort']>('abort')\n appendBuffer = createSpy2<SourceBuffer['appendBuffer']>('appendBuffer')\n changeType = createSpy2<SourceBuffer['changeType']>('changeType')\n remove = createSpy2<SourceBuffer['remove']>('remove')\n addEventListener =\n createSpy2<SourceBuffer['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<SourceBuffer['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<SourceBuffer['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockStorage implements Storage {\n [key: string]: any\n\n length: number = 0\n\n clear = createSpy2<Storage['clear']>('clear')\n getItem = createSpy2<Storage['getItem']>('getItem')\n key = createSpy2<Storage['key']>('key')\n removeItem = createSpy2<Storage['removeItem']>('removeItem')\n setItem = createSpy2<Storage['setItem']>('setItem')\n}\n\nexport class MockText implements Text {\n wholeText: string = ''\n data: string = ''\n length: number = 0\n ownerDocument: Document = undefined as any\n textContent: any = undefined\n assignedSlot: HTMLSlotElement | null = null\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n\n splitText = createSpy2<Text['splitText']>('splitText')\n appendData = createSpy2<Text['appendData']>('appendData')\n deleteData = createSpy2<Text['deleteData']>('deleteData')\n insertData = createSpy2<Text['insertData']>('insertData')\n replaceData = createSpy2<Text['replaceData']>('replaceData')\n substringData = createSpy2<Text['substringData']>('substringData')\n appendChild = createSpy2<Text['appendChild']>('appendChild')\n cloneNode = createSpy2<Text['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Text['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Text['contains']>('contains')\n getRootNode = createSpy2<Text['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Text['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Text['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Text['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Text['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Text['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Text['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Text['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Text['normalize']>('normalize')\n removeChild = createSpy2<Text['removeChild']>('removeChild')\n replaceChild = createSpy2<Text['replaceChild']>('replaceChild')\n after = createSpy2<Text['after']>('after')\n before = createSpy2<Text['before']>('before')\n remove = createSpy2<Text['remove']>('remove')\n replaceWith = createSpy2<Text['replaceWith']>('replaceWith')\n addEventListener = createSpy2<Text['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<Text['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<Text['removeEventListener']>(\n 'removeEventListener'\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockAbortSignal, MockMediaSource } from './lib.dom'\nimport { createSpy2 } from '../createSpyFactory'\n\nexport class MockMediaSourceGlobal extends MockMediaSource {\n static canConstructInDedicatedWorker = false\n static isTypeSupported =\n createSpy2<(typeof global.MediaSource)['isTypeSupported']>(\n 'isTypeSupported'\n )\n}\n\nexport class MockAbortSignalGlobal extends MockAbortSignal {\n static abort = createSpy2<(typeof global.AbortSignal)['abort']>('abort')\n static any = createSpy2<(typeof global.AbortSignal)['any']>('any')\n static timeout =\n createSpy2<(typeof global.AbortSignal)['timeout']>('timeout')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n BenchmarkRunResults,\n RunResultsComparison,\n} from '@amazon/vinyl-util/browserTestUtil'\nimport {\n compareResults,\n expectNothing,\n setTestTimeout,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nexport function setupBenchmark(): void {\n setTestTimeout(180)\n afterEach(expectNothing)\n}\n\nconst comparisons: RunResultsComparison[] = []\n\n/**\n * Adds a benchmark comparison to be displayed at the end of the test.\n * @param comparison\n */\nexport function addComparison(comparison: RunResultsComparison) {\n comparisons.push(comparison)\n}\n\n/**\n * Adds a list of benchmark results to be compared with each other.\n * The results will be logged then for browser environments displayed at the end of the suite.\n *\n * @param name The comparison suite name.\n * @param results\n */\nexport function addBenchmarks(name: string, ...results: BenchmarkRunResults[]) {\n const comparison = compareResults(name, ...results)\n comparison.logToTable()\n comparisons.push(comparison)\n}\n\nif (typeof document !== 'undefined') {\n jasmine.getEnv().addReporter({\n jasmineDone: () => {\n console.log('Tests complete')\n const jasmineContainer = document.getElementsByClassName(\n 'jasmine_html-reporter'\n )[0]\n jasmineContainer.parentElement?.removeChild(jasmineContainer)\n const container = createEl('div', document.body)\n container.id = 'benchmarkResults'\n const sortedComparisons = [...comparisons].sort((a, b) =>\n a.name > b.name ? 1 : -1\n )\n for (const comparison of sortedComparisons) {\n toTableHtml(comparison, container)\n }\n },\n })\n}\n\nfunction toTableHtml(\n comparison: RunResultsComparison,\n parent?: HTMLElement\n): HTMLDivElement {\n const container = createEl('div', parent)\n container.className = 'benchmarkComparison'\n const title = createEl('h2', container)\n title.innerText = comparison.name\n const table = createEl('table', container)\n const head = createEl('thead', table)\n const headRow = createEl('tr', head)\n const name = createEl('th', headRow)\n name.innerText = 'Name'\n const median = createEl('th', headRow)\n median.innerText = 'Mean ops/s'\n const samples = createEl('th', headRow)\n samples.innerText = 'Samples'\n const compare = createEl('th', headRow)\n compare.innerText = '% Comparison'\n\n const body = createEl('tbody', table)\n comparison.results.forEach((result) => {\n const row = createEl('tr', body)\n createEl('th', row).innerText = result.name\n createEl('td', row).innerText = result.meanOpsStr\n createEl('td', row).innerText = result.totalSamples.toLocaleString()\n createEl('td', row).innerText = comparison.runComparisonToString(result)\n })\n return container\n}\n\nfunction createEl<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n parent?: HTMLElement,\n options?: ElementCreationOptions\n): HTMLElementTagNameMap[K] {\n const element = document.createElement(tagName, options)\n if (parent) parent.appendChild(element)\n return element\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LogTarget } from '@amazon/vinyl-util'\nimport { logDebug } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../setup'\n\ndescribe('Logging', () => {\n setupBenchmark()\n\n it('logDebug', async () => {\n const target: LogTarget = {\n logPrefix: 'path',\n }\n const results = await benchmark(`logDebug`, () => {\n logDebug(target, {\n requestInfo: {\n fetchId: 'lgn9lrwaid8o3utd5r',\n init: {\n method: 'POST',\n headers: {\n 'Content-Encoding': 'amz-1.0',\n 'Content-Type': 'application/json',\n 'X-Amz-Target':\n 'com.amazon.digitalmusiclocator.DigitalMusicLocatorServiceExternal.getStreamingURLs',\n },\n body: '{\"contentIdList\":[{\"identifier\":\"d9e4e337-97ba-41a9-9f31-84a8bf99f1dc\",\"identifierType\":\"COID\"}],\"bitRate\":\"HIGH\",\"deviceToken\":{\"deviceId\":\"lg4msezd1e355heuc5b\",\"deviceTypeId\":\"A16ZV8BU3SN1N3\"},\"appMetadata\":{\"appId\":\"WebCP\",\"https\":true,\"appVersion\":\"1.0.0\"},\"clientMetadata\":{\"clientId\":\"WebCP\",\"clientRequestId\":\"lgn9lrw623mgvi7k3et\"}}',\n signal: '[object AbortSignal]',\n },\n input: 'https://example.com/bar/',\n maxRetries: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n fetchOptions: {\n serviceId: null,\n readErrorBody: 1,\n },\n },\n attemptInfo: {\n currentTry: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n },\n target: '[object FetchProviderImpl]',\n })\n })\n addBenchmarks('logDebug', results)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LinkedList } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('LinkedList', () => {\n setupBenchmark()\n\n interface Element {\n r: number\n a: number\n b: number\n }\n\n function createList(n: number): LinkedList<Element> {\n const list = new LinkedList<Element>()\n for (let i = 0; i < n; i++) {\n list.push({ r: 0, a: Math.random(), b: Math.random() })\n }\n return list\n }\n\n function createArray(n: number) {\n const arr: Element[] = []\n for (let i = 0; i < n; i++) {\n arr.push({ r: 0, a: Math.random(), b: Math.random() })\n }\n return arr\n }\n\n ;[100, 1000].forEach((size) => {\n const list = createList(size)\n const arr = createArray(size)\n\n describe(`size: ${size}`, () => {\n it('forEach', async () => {\n const name = `forEach ${size}`\n // Having an unpredictable output in the executor prevents the JS engine from\n // any potential caching.\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.forEach((e: Element) => (e.r = e.a + e.b))\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.forEach((e) => (e.r = e.a + e.b))\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('unshift', async () => {\n const name = `unshift/shift ${size}`\n const e = { r: 0, a: 0, b: 0 }\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.unshift(e)\n list.shift()\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.unshift(e)\n arr.shift()\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('push', async () => {\n const name = `push/pop ${size}`\n const e = { r: 0, a: 0, b: 0 }\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.push(e)\n list.pop()\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.push(e)\n arr.pop()\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('for of', async () => {\n const name = `for of ${size}`\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n for (const e of list) {\n e.r = e.a + e.b\n }\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n for (const e of arr) {\n e.r = e.a + e.b\n }\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n })\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mergeDeep } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('mergeDeep', () => {\n setupBenchmark()\n it('object merge', async () => {\n const a = {\n b: {\n c: 3,\n d: 4,\n e: 'test',\n },\n f: {\n g: 5,\n h: true,\n i: false,\n },\n j: {\n k: {\n m: 5,\n },\n },\n }\n\n const b = {\n b: {\n d: 4,\n f2: 'test2',\n },\n f: {\n g: 5,\n h: true,\n i: false,\n },\n j: {\n k: {\n m: 5,\n },\n },\n }\n\n const mergeResultsDeep = await benchmark(`mergeDeep`, () => {\n mergeDeep([a, b])\n })\n addBenchmarks('merge deep', mergeResultsDeep)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { toJson } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('json', () => {\n setupBenchmark()\n\n it('toJson', async () => {\n const results = await benchmark(`toJson`, () => {\n toJson({\n requestInfo: {\n fetchId: 'lgn9lrwaid8o3utd5r',\n init: {\n method: 'POST',\n headers: {\n 'Content-Encoding': 'amz-1.0',\n 'Content-Type': 'application/json',\n 'X-Amz-Target':\n 'com.amazon.digitalmusiclocator.DigitalMusicLocatorServiceExternal.getStreamingURLs',\n },\n body: '{\"contentIdList\":[{\"identifier\":\"d9e4e337-97ba-41a9-9f31-84a8bf99f1dc\",\"identifierType\":\"COID\"}],\"bitRate\":\"HIGH\",\"deviceToken\":{\"deviceId\":\"lg4msezd1e355heuc5b\",\"deviceTypeId\":\"A16ZV8BU3SN1N3\"},\"appMetadata\":{\"appId\":\"WebCP\",\"https\":true,\"appVersion\":\"1.0.0\"},\"clientMetadata\":{\"clientId\":\"WebCP\",\"clientRequestId\":\"lgn9lrw623mgvi7k3et\"}}',\n signal: '[object AbortSignal]',\n },\n input: 'https://example.com/bar/',\n maxRetries: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n requestOptions: {\n serviceId: null,\n readErrorBody: 1,\n },\n },\n attemptInfo: {\n currentTry: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n },\n target: '[object FetchProviderImpl]',\n })\n })\n addBenchmarks('toJson', results)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { resolveUrl } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('resolveUrl', () => {\n setupBenchmark()\n\n it('relative path', async () => {\n const name = 'relative path'\n const base = 'https://cdn.example.com/content/audio/'\n const relative = 'segment_001.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(relative, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(relative, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('absolute URI', async () => {\n const name = 'absolute URI'\n const base = 'https://cdn.example.com/content/audio/'\n const absolute = 'https://other.example.com/segment.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(absolute, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(absolute, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('dot segments', async () => {\n const name = 'dot segments'\n const base = 'https://cdn.example.com/a/b/c/manifest.mpd'\n const relative = '../../media/segment.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(relative, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(relative, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('chained resolution (DASH BaseURL walk)', async () => {\n const name = 'chained resolution'\n const manifest = 'https://cdn.example.com/manifest.mpd'\n const scopes = ['content/', 'audio/', '128k/']\n const segment = 'seg_001.m4s'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n let resolved = manifest\n for (const scope of scopes) {\n resolved = resolveUrl(scope, resolved)\n }\n resolveUrl(segment, resolved)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n let resolved = new URL(manifest)\n for (const scope of scopes) {\n resolved = new URL(scope, resolved)\n }\n const _o = new URL(segment, resolved).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const ErrorOrigin = {\n /**\n * The error originated from Vinyl and was reported from the uncaught exception or promise\n * rejection handlers.\n */\n UNCAUGHT: 'uncaught',\n\n /**\n * The error originated from Vinyl and was caught.\n */\n INTERNAL: 'internal',\n\n /**\n * A Vinyl interface was used incorrectly by a consumer.\n */\n API: 'api',\n\n /**\n * The error originated from a failed service call (500 errors).\n */\n SERVICE_EXTERNAL: 'serviceExternal',\n\n /**\n * The error originated from a failed service call (400 errors).\n */\n SERVICE_INTERNAL: 'serviceInternal',\n\n /**\n * The error originated from a problem playing provided media.\n * The reporter is from a component such as the element, source buffer, media source, etc.\n */\n MEDIA: 'media',\n\n /**\n * The error originated from a problem parsing input data.\n * Such as a malformed Dash or HLS manifest.\n */\n PARSING: 'parsing',\n\n /**\n * The error originated from an incompatibility with browser APIs,\n * such as EME.\n */\n COMPATIBILITY: 'compatibility',\n\n /**\n * The error originated from DRM.\n * This does not include internal or service errors, only errors from the creation of media keys or media key\n * sessions.\n */\n DRM: 'drm',\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport type { Json } from '../util/serialization/json'\n\nexport enum ErrorLevel {\n /**\n * Fatal errors are not recoverable.\n */\n FATAL = 'fatal',\n\n /**\n * Warn level errors should be reported, but are recoverable.\n */\n WARN = 'warn',\n\n /**\n * Silent errors should not be reported. For example aborting a play operation due to a new track loading.\n */\n SILENT = 'silent',\n}\n\n/**\n * A Serializable Error that contains an error origin.\n */\nexport class ReportableError extends Error {\n get [Symbol.toStringTag](): string {\n return 'ReportableError'\n }\n\n constructor(\n message?: string,\n readonly origin: string = ErrorOrigin.INTERNAL,\n readonly level: ErrorLevel = ErrorLevel.FATAL\n ) {\n super(message)\n Object.setPrototypeOf(this, ReportableError.prototype)\n }\n\n get name(): string {\n return this[Symbol.toStringTag]\n }\n\n /**\n * All ReportableError instances must be serializable.\n */\n toJSON(): Json {\n return {\n level: this.level,\n message: this.message,\n name: this.name,\n origin: this.origin,\n stack: this.stack,\n }\n }\n}\n\n/**\n * Returns true if the given object is a ReportableError.\n */\nexport function isReportableError(error: any): error is ReportableError {\n // This does not use instanceof ReportableError to avoid ambiguity in the case where this module\n // is loaded multiple times due to version conflicts or code splitting.\n return error instanceof Error && 'origin' in error && 'level' in error\n}\n\n/**\n * Returns true if the error is a ReportableError and is level SILENT.\n * @param error\n */\nexport function isSilentError(error: any): boolean {\n return isReportableError(error) && error.level === ErrorLevel.SILENT\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ErrorOrigin } from './ErrorOrigin'\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating that a method was called with illegal arguments.\n */\nexport class IllegalArgumentError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalArgumentError'\n }\n\n constructor(\n message: string,\n readonly isInternal = true\n ) {\n super(message, isInternal ? ErrorOrigin.INTERNAL : ErrorOrigin.API)\n Object.setPrototypeOf(this, IllegalArgumentError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * A doubly-linked node.\n *\n * If a node is to move from one list to another, it must be removed first.\n */\nexport interface LinkedNode<T> {\n previous: LinkedNode<T> | null\n value: T\n removed: boolean\n next: LinkedNode<T> | null\n}\n\n/**\n * A standard doubly-linked list implementation.\n */\nexport class LinkedList<T> implements Iterable<T> {\n private _head: LinkedNode<T> | null = null\n private _tail: LinkedNode<T> | null = null\n\n /**\n * Returns the current head.\n */\n get head(): LinkedNode<T> | null {\n return this._head\n }\n\n /**\n * Returns the current tail.\n */\n get tail(): LinkedNode<T> | null {\n return this._tail\n }\n\n /**\n * Returns true if the list is empty.\n */\n get empty(): boolean {\n return this._head === null\n }\n\n /**\n * Creates a new node for the given value, adding it to the end of the list.\n *\n * @param value\n * @return Returns the newly created node.\n */\n push(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: this._tail,\n value,\n removed: false,\n next: null,\n }\n this.pushNode(node)\n return node\n }\n\n /**\n * Appends all given values to the end of this list.\n *\n * @param values\n */\n pushAll(...values: T[]) {\n for (const value of values) {\n this.push(value)\n }\n }\n\n /**\n * Appends the given node to the tail of this list.\n * If the node is already at the tail, it will no-op.\n * If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the tail of this list.\n */\n pushNode(node: LinkedNode<T>) {\n if (this._tail === node) return\n this.remove(node)\n node.removed = false\n node.next = null\n node.previous = this._tail\n if (this._tail) this._tail.next = node\n this._tail = node\n if (!this._head) this._head = node\n }\n\n /**\n * Removes the last node (the tail), returning it.\n * If this list is empty, null is returned.\n */\n pop(): LinkedNode<T> | null {\n const node = this._tail\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Creates a new node, adding it to the front of the list.\n *\n * @param value The value to box in a linked node.\n * @return Returns the new node.\n */\n unshift(value: T): LinkedNode<T> {\n const node: LinkedNode<T> = {\n previous: null,\n value,\n removed: true,\n next: this._head,\n }\n this.unshiftNode(node)\n return node\n }\n\n /**\n * Prepends all the given values to the head of this list.\n * The values will maintain their order.\n *\n * E.g.\n * ```\n * list.unshiftAll(8, 9, 10) // 8, 9, 10\n * list.unshiftAll(4, 5, 6, 7) // 4, 5, 6, 7, 8, 9, 10\n * list.unshiftAll(1, 2, 3) // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n * ```\n *\n * @param values The values to box in linked nodes.\n */\n unshiftAll(...values: T[]) {\n for (let i = values.length - 1; i >= 0; i--) {\n this.unshift(values[i])\n }\n }\n\n /**\n * Prepends the given node to the head of this list.\n * - If the node is already at the head, it will no-op.\n * - If the node is in this list, it will be removed.\n *\n * @param node The node to add or move to the head of this list.\n */\n unshiftNode(node: LinkedNode<T>) {\n if (this._head === node) return\n this.remove(node)\n node.removed = false\n node.previous = null\n node.next = this._head\n if (this._head) this._head.previous = node\n this._head = node\n if (!this._tail) this._tail = node\n }\n\n /**\n * Removes the first node (the head), returning it.\n * - If this list is empty, null is returned.\n */\n shift(): LinkedNode<T> | null {\n const node = this._head\n if (!node) return null\n this.remove(node)\n return node\n }\n\n /**\n * Removes the given linked node.\n *\n * @param node\n */\n remove(node: LinkedNode<T>): void {\n if (node.removed) return\n node.removed = true\n if (node.previous) node.previous.next = node.next\n if (node.next) node.next.previous = node.previous\n if (this._head === node) this._head = node.next\n if (this._tail === node) this._tail = node.previous\n }\n\n /**\n * Inserts the given node before pointer node.\n *\n * @param node The node to insert before pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeBefore(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.next === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.previous) {\n pointer.previous.next = node\n node.previous = pointer.previous\n } else {\n this._head = node\n node.previous = null\n }\n node.next = pointer\n pointer.previous = node\n }\n\n /**\n * Inserts the given node after pointer node.\n *\n * @param node The node to insert after pointer. If this node is currently in this list, it\n * will first be removed.\n * @param pointer The pointer node.\n */\n insertNodeAfter(node: LinkedNode<T>, pointer: LinkedNode<T>) {\n if (!node.removed && node.previous === pointer) return\n this.remove(node)\n node.removed = false\n if (pointer.next) {\n pointer.next.previous = node\n node.next = pointer.next\n } else {\n this._tail = node\n node.next = null\n }\n node.previous = pointer\n pointer.next = node\n }\n\n /**\n * Iterates over every element, invoking the given callback.\n *\n * @param callback\n */\n forEach(callback: (element: T) => void): void {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed) callback(current.value)\n current = current.next\n }\n }\n\n /**\n * Similar to `Array.prototype.some`, returns true if at least one element passes the given\n * predicate.\n *\n * @param predicate\n */\n some(predicate: (element: T) => boolean): boolean {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return true\n current = current.next\n }\n return false\n }\n\n /**\n * Returns the first node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n find(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._head\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.next\n }\n return null\n }\n\n /**\n * Returns the last node matching the given predicate.\n *\n * @param predicate A function where, when true is returned, returns the current node.\n */\n findLast(predicate: (element: T) => boolean): LinkedNode<T> | null {\n let current: LinkedNode<T> | null = this._tail\n while (current) {\n if (!current.removed && predicate(current.value)) return current\n current = current.previous\n }\n return null\n }\n\n /**\n * Clears this list.\n */\n clear(): void {\n let current = this._head\n while (current != null) {\n const next = current.next\n current.removed = true\n current = next\n }\n this._head = null\n this._tail = null\n }\n\n /**\n * Returns a new iterator, starting at the head.\n */\n [Symbol.iterator](): IterableIterator<T> {\n return this.createIterator(this._head, null, (node) => node.next)\n }\n\n /**\n * Returns a new reversed iterable where the iterator starts at the tail, moving backwards\n * to the head.\n */\n reversed(): IterableIterator<T> {\n return this.createIterator(this._tail, null, (node) => node.previous)\n }\n\n /**\n * Creates an iterable iterator, starting at the specified node, getting the next node from\n * the next() function.\n *\n * Note that using iterators is not as performant as {@link some} or {@link forEach}\n *\n * @param start The starting node. (inclusive)\n * @param end The ending node (exclusive).\n * @param next A method that is given the current node, and returns the next node.\n */\n createIterator(\n start: LinkedNode<T> | null,\n end: LinkedNode<T> | null,\n next: (current: LinkedNode<T>) => LinkedNode<T> | null\n ): IterableIterator<T> {\n let current: LinkedNode<T> | null = start\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return this\n },\n\n next: (): IteratorResult<T> => {\n if (current === end || !current) {\n return {\n value: undefined,\n done: true,\n }\n }\n\n const result = {\n value: current.value,\n done: false,\n }\n current = next(current)\n while (current?.removed) {\n current = next(current)\n }\n return result\n },\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '../core/disposable'\nimport type { Unsubscribe } from '../core/Unsubscribe'\nimport { LinkedList } from '../util/collection/LinkedList'\n\nexport type EventHandler<in T> = (event: T) => void\n\nexport interface SignalOptions {\n /**\n * If true, removes the handler after the first invocation.\n */\n once?: boolean\n}\n\nexport interface Signal<T> {\n /**\n * Returns true if this signal has no handlers.\n */\n readonly empty: boolean\n\n /**\n * Adds an event handler that will be invoked upon signal dispatch.\n *\n * @param handler The handler to invoke on signal dispatch.\n * @param options Options for changing listening behavior.\n * @return Unsubscribe - Returns a method where, when invoked, will remove the handler.\n * If the handler has already been removed, Unsubscribe will do nothing.\n */\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe\n}\n\n/**\n * An object that may dispatch one type of event and have handlers for that event.\n */\nexport class SignalImpl<T> implements Signal<T>, Disposable {\n private handlers = new LinkedList<EventHandler<any>>()\n\n get empty(): boolean {\n return this.handlers.empty\n }\n\n listen(handler: EventHandler<T>, options?: SignalOptions): Unsubscribe {\n const remove = () => this.handlers.remove(node)\n const node = this.handlers.push(\n options?.once\n ? (event) => {\n remove()\n handler(event)\n }\n : handler\n )\n return remove\n }\n\n /**\n * Invokes all handlers, providing the given event.\n *\n * Handlers may add/remove callbacks or do a nested dispatch.\n *\n * If a handler is added within a handler, the new handler will not be invoked until the\n * next dispatch.\n *\n * @param event\n */\n dispatch(event: T): void {\n const handlers = this.handlers\n const tail = handlers.tail\n handlers.some((handler) => {\n handler(event)\n return handler === tail!.value\n })\n }\n\n /**\n * Removes all handlers.\n */\n clear(): void {\n this.handlers.clear()\n }\n\n /**\n * Same as clear.\n */\n dispose(): void {\n this.clear()\n }\n}\n\n/**\n * Constructs a new SignalImpl.\n */\nexport function signal<T>(): SignalImpl<T> {\n return new SignalImpl<T>()\n}\n\nexport const emptySignal: Signal<any> = {\n empty: true,\n\n listen(): Unsubscribe {\n return () => {}\n },\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * The minimal `Map`-shaped interface that {@link getOrSet} needs.\n */\nexport interface GetOrSetMap<K, V> {\n has(key: K): boolean\n get(key: K): V | undefined\n set(key: K, value: V): unknown\n}\n\n/**\n * Gets the value on map for the given key if it exists, otherwise sets [key] to `defaultValue`,\n * returning the newly set value.\n *\n * @param map\n * @param key\n * @param defaultValue\n */\nexport function getOrSet<K, V>(\n map: GetOrSetMap<K, V>,\n key: K,\n defaultValue: (key: K) => V\n): V {\n if (map.has(key)) {\n return map.get(key) as V\n } else {\n const value = defaultValue(key)\n map.set(key, value)\n return value\n }\n}\n\n/**\n * Flips a map so that the keys become the values and the values become the keys.\n *\n * @param map\n * @return Returns a new map.\n */\nexport function flipMap<K, V>(map: Iterable<readonly [K, V]>): Map<V, K> {\n const result = new Map<V, K>()\n for (const [key, value] of map) {\n result.set(value, key)\n }\n return result\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * Type-safety utility\n */\n\n/**\n * Distributes the value types of an array into a union.\n */\nexport type Flatten<T> = T extends readonly any[] ? T[number] : T\n\n/**\n * Property keys of an object that do not map to functions.\n */\nexport type NonFunctionPropertyNames<T> = {\n [K in keyof T]: T[K] extends (...args: any) => any ? never : K\n}[keyof T]\n\n/**\n * All primitive types.\n */\nexport type Primitive =\n bigint | boolean | number | string | symbol | null | undefined\n\n/**\n * An empty object, safer than using `object` type.\n */\nexport type AnyRecord = Record<never, any>\n\n/**\n * never, with a message to help explain the problem.\n * https://github.com/microsoft/TypeScript/issues/33098\n */\nexport type Never<Message extends string> = [never, Message]\n\n/**\n * A type representing any type of function.\n */\nexport type Fun = (...args: any[]) => any\n\n/**\n * Enforces that the type represents data that can be serialized via JSON.stringify.\n */\nexport type JsonCompatible<T> = unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? never\n : T extends\n boolean | number | string | null | undefined | { toJSON(): any }\n ? T\n : T extends readonly any[]\n ? readonly JsonCompatible<T[number]>[]\n : {\n [P in keyof T]: JsonCompatible<T[P]>\n }\n\n/**\n * A compile-time check that the given value/array/object is serializable via JSON.stringify.\n *\n * A value is serializable if any of these are true:\n * - It is an object with a toJSON() function\n * - It is an object with only serializable members.\n * - It is an array with only serializable elements.\n * - It is type boolean, string, number, null, or undefined.\n */\nexport function jsonCompatible<T>(value: JsonCompatible<T>): T {\n return value as T\n}\n\n/**\n * An object whose properties are all optional, and all sub-properties are optional.\n * Note: does not convert array or tuple elements to Partial.\n */\nexport type PartialDeep<T> = T extends Fun | Primitive\n ? T\n : T extends object\n ? {\n [P in keyof T]?: PartialDeep<T[P]>\n }\n : T\n\n/**\n * Defines specific properties of T that are not required.\n */\nexport type PickPartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\n/**\n * Possible values `typeof` operator may return.\n */\nexport type Typeof =\n | 'bigint'\n | 'boolean'\n | 'function'\n | 'number'\n | 'object'\n | 'string'\n | 'symbol'\n | 'undefined'\n\n/**\n * Given a possible result from `typeof`, provides the type to the matched value.\n */\nexport type FromTypeof<T extends Typeof> = T extends 'bigint'\n ? bigint\n : T extends 'boolean'\n ? boolean\n : T extends 'function'\n ? Fun\n : T extends 'number'\n ? number\n : T extends 'object'\n ? object | null\n : T extends 'string'\n ? string\n : T extends 'symbol'\n ? symbol\n : T extends 'undefined'\n ? undefined\n : any\n\n/**\n * Extracts values from T which extends type U.\n */\nexport type ExtractValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? P : never\n }[keyof T]\n>\n\n/**\n * Excludes values from T which extends type U.\n */\nexport type ExcludeValues<T, U> = Pick<\n T,\n {\n [P in keyof T]: T[P] extends U ? never : P\n }[keyof T]\n>\n\nexport type Maybe<T> = T | undefined | null\n\n/**\n * Infers the element type from an Array type.\n */\nexport type ElementType<T extends readonly any[]> =\n T extends ReadonlyArray<infer E> ? E : never\n\n/**\n * Infers the element type from a Set type.\n */\nexport type SetElementType<T extends ReadonlySet<any>> =\n T extends ReadonlySet<infer E> ? E : never\n\n/**\n * Enforces type T to be in an invariant position.\n * For example `Invariant<Square>` cannot be assigned to type `Invariant<Polygon>` or vice versa.\n *\n * This should be used when an interface with type parameter T needs strict invariance in addition to what the\n * compiler can infer from use.\n *\n * {@link https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)}\n */\nexport type Invariant<T> = T &\n Required<T> &\n ((input: T & Required<T>) => T & Required<T>)\n\nexport function invariant<T>(): Invariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Square>` can be assigned to type `Invariant<Polygon>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * output position, but the interface implies `out T`.\n */\nexport type Covariant<T> = () => T\n\nexport function covariant<T>(): Covariant<T> {\n return undefined as any\n}\n\n/**\n * Enforces type T to be in a covariant position.\n * For example `Invariant<Polygon>` can be assigned to type `Invariant<Square>` but not vice versa.\n *\n * This should be used when an interface with type parameter T does not explicitly use T in an\n * input position, but the interface implies `in T`.\n */\nexport type Contravariant<T> = (input: T) => void\n\nexport function contravariant<T>(): Contravariant<T> {\n return undefined as any\n}\n\n/**\n * A type which may either be a direct instance of T or a promise that resolves to T.\n */\nexport type MaybePromise<T> = PromiseLike<T> | T\n\n/**\n * Deeply excludes all keys from T extending K.\n */\nexport type OmitDeep<T, K extends keyof any> = Omit<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OmitDeep<T[P], K>\n },\n K\n>\n\n/**\n * Make properties of T extending K optional.\n */\nexport type Optional<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>\n\n/**\n * Make properties of T extending K optional, recursively.\n */\nexport type OptionalDeep<T, K extends keyof any> = Optional<\n {\n [P in keyof T]: T[P] extends Primitive ? T[P] : OptionalDeep<T[P], K>\n },\n K & keyof T\n>\n\n/**\n * true if T extends never, otherwise false\n */\nexport type IsNever<T> = [T] extends [never] ? true : false\n\n/**\n * true if T extends any, otherwise false\n */\nexport type IsAny<T> = 0 extends 1 & T ? true : false\n\n/**\n * Determines whether a property `P` of object type `U` is declared as optional.\n *\n * This checks whether the `{}` type (an empty object) is assignable to\n * `Pick<U, P>`. In TypeScript, this is true only when `P` is marked optional\n * using the `?` modifier in the type definition.\n *\n * Importantly, this detects *actual optionality* rather than checking whether\n * the property's type includes `undefined`. For example:\n *\n * ```ts\n * type A = { x?: string }; // optional\n * type B = { x: string | undefined }; // required but allows undefined\n *\n * IsPropertyOptional<A, \"x\"> // true\n * IsPropertyOptional<B, \"x\"> // false\n * ```\n *\n * @template U - The object type containing the property.\n * @template P - The key of the property to test.\n * @returns `true` if `P` is an optional property, otherwise `false`.\n */\nexport type IsPropertyOptional<U, P extends keyof U> =\n AnyRecord extends Pick<U, P> ? true : false\n\n/**\n * A type that equals true if Left and Right are loosely equal, that is, that Left extends Right\n * and Right extends Left.\n * This will always equal true or false, and never the union `true | false`\n */\nexport type Equal<Left, Right> = [Left] extends [Right]\n ? [Right] extends [Left]\n ? true\n : false\n : false\n\n/**\n * A type that equals true if Left and Right are strictly equal.\n * Works with complex objects, readonly, and optional modifiers.\n * Works with method input arguments.\n * This will always equal true or false, and never the union `true | false`\n */\nexport type StrictEqual<Left, Right> =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n (<T>() => T extends Left ? 0 : 1) extends <T>() => T extends Right ? 0 : 1\n ? Equal<Left, Right>\n : false\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Provides the logging prefix for all logs made by this target.\n */\nexport interface LogTarget {\n /**\n * A string prefix for all log statements made by this target.\n */\n readonly logPrefix: string\n}\n\n/**\n * A static counter for creating a locally-unique id.\n */\nlet counter = 0\n\n/**\n * Creates a unique log prefix.\n *\n * @param target Either a string or an object with a toStringTag.\n * The log prefix will append a unique counter.\n */\nexport function createLogPrefix(\n target: string | { readonly [Symbol.toStringTag]: string }\n): string {\n const name =\n typeof target === 'string' ? target : target[Symbol.toStringTag]\n return `${name}/${++counter}`\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Disposable } from '../core/disposable'\nimport type { EventHandler, SignalImpl, SignalOptions } from './Signal'\nimport { signal } from './Signal'\nimport type { Unsubscribe } from '../core/Unsubscribe'\nimport { getOrSet } from '../util/map/map'\nimport type { Covariant } from '../util/type'\nimport { covariant } from '../util/type'\nimport { createLogPrefix, type LogTarget } from '../logging/LogTarget'\n\nexport interface EventDispatcher<in EventMap> extends LogTarget {\n /**\n * Dispatches an event.\n *\n * @param type The key of the event within `EventMap`\n * @param event If the passed event is read-only, then it may be re-used/cached. Otherwise,\n * it should be a new event object every dispatch. If no target property is set on the event,\n * the target will be set to this host.\n */\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void\n}\n\nexport interface ReadonlyEventHost<out EventMap> {\n /**\n * Adds an event handler for the given typed event.\n *\n * @param type The key representing the event type to listen for.\n * @param handler A callback to invoke when the event with the given type is dispatched.\n * @param options Options for changing listening behavior.\n * @return Returns a method, when invoked, removes the handler.\n */\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe\n\n /**\n * Returns true if the event host has any listeners.\n */\n hasAnyListeners(): boolean\n\n /**\n * Returns true if the event host has any listeners for the given type.\n */\n hasListeners(type: keyof EventMap): boolean\n\n /**\n * Exists for EventMap type inference.\n *\n * @private\n */\n __eventMapType: Covariant<EventMap>\n}\n\n/**\n * An object that may dispatch events and have handlers for those events.\n * Similar to the DOM's `EventTarget`, this is a basic event system based on event naming.\n *\n * Some of the advantages of EventHost over EventTarget:\n * - Not all supported platforms support EventTarget construction or extension.\n * - EventTarget is designed for the DOM, with bubble and capture phases not necessary in Vinyl.\n * - Event types are strict.\n * - Events can be plain objects, no need to extend CustomEvent.\n * - Easier unsubscription and disposal; reduces the risk of memory leaks.\n *\n * EventHost supports concurrent modification, that is, handlers may be added or removed during\n * the execution of another handler.\n */\nexport interface EventHost<EventMap>\n extends ReadonlyEventHost<EventMap>, EventDispatcher<EventMap> {}\n\nexport class EventHostImpl<EventMap>\n implements EventHost<EventMap>, Disposable\n{\n get [Symbol.toStringTag](): string {\n return 'EventHostImpl'\n }\n\n readonly logPrefix = createLogPrefix(this)\n\n private readonly signals = new Map<keyof EventMap, SignalImpl<any>>()\n\n hasAnyListeners(): boolean {\n for (const value of this.signals.values()) {\n if (!value.empty) return true\n }\n return false\n }\n\n hasListeners(type: keyof EventMap): boolean {\n return this.signals.get(type)?.empty === false\n }\n\n on<K extends keyof EventMap>(\n type: K,\n handler: EventHandler<EventMap[K]>,\n options?: SignalOptions\n ): Unsubscribe {\n const sig = getOrSet(this.signals, type, () => signal<any>())\n return sig.listen(handler, options)\n }\n\n dispatch<K extends keyof EventMap>(type: K, event: EventMap[K]): void {\n this.signals.get(type)?.dispatch(event)\n }\n\n dispose(): void {\n for (const signal of this.signals.values()) signal.dispose()\n this.signals.clear()\n }\n\n __eventMapType = covariant<EventMap>()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { type Comparator, compare } from '../comparison/compare'\nimport type { Maybe, MaybePromise, Primitive } from '../type'\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport { createTaskQueue } from '../async/TaskQueue'\n\nexport type FilterPredicateAsync<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => Promise<boolean>\n\nexport type FilterPredicate<T> = (\n value: T,\n index: number,\n array: ArrayLike<T>\n) => boolean\n\n/**\n * indexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nexport function indexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.indexOf.call(arrayLike, element)\n}\n\n/**\n * lastIndexOf on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n */\nexport function lastIndexOf<E>(arrayLike: ArrayLike<E>, element: E): number {\n return Array.prototype.lastIndexOf.call(arrayLike, element)\n}\n\nexport function filter<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => value is S,\n thisArg?: any\n): S[]\n\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[]\n\n/**\n * filter on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\nexport function filter<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): T[] {\n return Array.prototype.filter.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Filter an ArrayLike with an asynchronous predicate.\n *\n * Runs the predicate across all elements, then filters the elements by the booleans\n * resolved by the predicate.\n *\n * @param arrayLike The array-like object to filter\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function filterAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<T[]> {\n const results = await mapAsync(arrayLike, predicate, options)\n return filter(await arrayLike, (_, index) => results[index])\n}\n\n/**\n * map on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport function map<T, U>(\n arrayLike: ArrayLike<T>,\n transform: (value: T, index: number, array: ArrayLike<T>) => U,\n thisArg?: any\n): U[] {\n return Array.prototype.map.call(arrayLike, transform, thisArg) as U[]\n}\n\n/**\n * Map on ArrayLike objects with an asynchronous transformer.\n *\n * @param arrayLike The array-like object to transform\n * @param transform Async function that transforms each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of transforms to run simultaneously (default: 1)\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\n */\nexport async function mapAsync<T, U>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n transform: (value: T, index: number, array: ArrayLike<T>) => Promise<U>,\n options?: { readonly simultaneous?: number }\n): Promise<U[]> {\n const resolvedArray = await arrayLike\n const { simultaneous = 1 } = options || {}\n\n if (simultaneous >= resolvedArray.length) {\n return Promise.all(map(resolvedArray, transform))\n }\n\n const results: U[] = new Array(resolvedArray.length)\n const queue = createTaskQueue()\n queue.simultaneous = simultaneous\n\n const tasks = map(resolvedArray, (value, index) =>\n queue.enqueue(() =>\n transform(value, index, resolvedArray).then((result) => {\n results[index] = result\n })\n )\n )\n\n await Promise.all(tasks)\n return results\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n */\nexport function every<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.every.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified test.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n */\nexport function some<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, array: ArrayLike<T>) => boolean,\n thisArg?: any\n): boolean {\n return Array.prototype.some.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Determines whether all the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function everyAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n const resolvedArray = await arrayLike\n\n const chunks = chunk(resolvedArray, options?.simultaneous ?? 1)\n let index = 0\n\n for (const chunkArray of chunks) {\n const chunkPromises = chunkArray.map((value, chunkIndex) =>\n predicate(value, index + chunkIndex, resolvedArray)\n )\n const chunkResults = await Promise.all(chunkPromises)\n if (chunkResults.some((result) => !result)) {\n return false\n }\n index += chunkArray.length\n }\n return true\n}\n\n/**\n * Determines whether any the members of an array satisfy the specified asynchronous test.\n *\n * @param arrayLike The array-like object to test\n * @param predicate Async function that tests each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of predicates to run simultaneously (default: 1)\n */\nexport async function someAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n predicate: (\n value: T,\n index: number,\n array: ArrayLike<T>\n ) => Promise<boolean>,\n options?: { readonly simultaneous?: number }\n): Promise<boolean> {\n return !(await everyAsync(\n arrayLike,\n async (value, index, array) => !(await predicate(value, index, array)),\n options\n ))\n}\n\n/**\n * forEach on ArrayLike objects.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\n */\nexport function forEach<T>(\n arrayLike: ArrayLike<T>,\n action: (value: T, index: number, array: ArrayLike<T>) => void,\n thisArg?: any\n): void {\n return Array.prototype.forEach.call(arrayLike, action, thisArg)\n}\n\n/**\n * Executes an asynchronous function on each element in an array.\n *\n * @param arrayLike The array-like object to iterate over\n * @param executor Async function to execute for each element\n * @param options Optional configuration object\n * @param options.simultaneous Maximum number of executors to run simultaneously (default: 1)\n */\nexport function forEachAsync<T>(\n arrayLike: MaybePromise<ArrayLike<T>>,\n executor: (value: T, index: number, array: ArrayLike<T>) => Promise<void>,\n options?: { readonly simultaneous?: number }\n): Promise<void> {\n return mapAsync(arrayLike, executor, options).then()\n}\n\nexport function find<T, S extends T>(\n arrayLike: ArrayLike<T>,\n predicate: (this: void, value: T, index: number, obj: T[]) => value is S,\n thisArg?: any\n): S | undefined\n\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined\n\n/**\n * find on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n */\nexport function find<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: T[]) => boolean,\n thisArg?: any\n): T | undefined {\n return Array.prototype.find.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * findIndex on ArrayLike objects\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex\n */\nexport function findIndex<T>(\n arrayLike: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => unknown,\n thisArg?: any\n): number {\n return Array.prototype.findIndex.call(arrayLike, predicate, thisArg)\n}\n\n/**\n * Returns the first element of an ArrayLike.\n */\nexport function first<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[0]\n}\n\n/**\n * Returns the last element of an ArrayLike.\n */\nexport function last<T>(arrayLike: Maybe<ArrayLike<T>>): T | undefined {\n if (!arrayLike) return undefined\n return arrayLike[arrayLike.length - 1]\n}\n\n/**\n * Returns the first `count` elements of an ArrayLike.\n * @param arrayLike\n * @param count\n */\nexport function takeFirst<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, 0, count)\n}\n\n/**\n * Returns the last `count` elements of an ArrayLike.\n *\n * @param arrayLike\n * @param count\n */\nexport function takeLast<T>(arrayLike: ArrayLike<T>, count: number): T[] {\n if (count <= 0) return []\n return Array.prototype.slice.call(arrayLike, -count)\n}\n\n/**\n * Returns a subsection of an array-like.\n * For both start and end, a negative index can be used to indicate an offset from the end of\n * the array.\n * For example, -2 refers to the second to last element of the array.\n *\n * @param arrayLike An ArrayLike to copy.\n * @param start The beginning index of the array-like. Default: 0\n * @param end The end index of the specified portion of the array-like (exclusive). Default: length\n */\nexport function slice<T>(\n arrayLike: ArrayLike<T>,\n start?: number,\n end?: number\n): T[] {\n return Array.prototype.slice.call(arrayLike, start, end)\n}\n\n/**\n * Removes an element from the array, returning true if it was found.\n */\nexport function remove<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element)\n if (index === -1) return false\n array.splice(index, 1)\n return true\n}\n\n/**\n * Removes an element from the array at the given index, returning the removed element if the index\n * was within range.\n * @param array The Array to update.\n * @param index If negative, will remove from the end of the list (-1 is last element), if\n * greater than or equal to the list length, undefined will be returned.\n */\nexport function removeAt<T>(array: T[], index: number): T | undefined {\n return array.splice(index, 1)[0]\n}\n\n/**\n * Returns the index of the first element in the given array with the highest value according to\n * the comparator.\n * @param array\n * @param comparator\n */\nexport function indexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = 0\n let highest = array[highestIndex]\n for (let i = 1; i < array.length; i++) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Returns the index of the last element in the given array with the highest value according to\n * the comparator.\n * To find the index of the lowest value, use `util.comparator.reversed`\n * @param array\n * @param comparator\n */\nexport function lastIndexOfHighest<T>(\n array: ArrayLike<T>,\n comparator: Comparator<T>\n): number {\n if (array.length === 0) return -1\n let highestIndex = array.length - 1\n let highest = array[highestIndex]\n for (let i = array.length - 2; i >= 0; i--) {\n const current = array[i]\n if (comparator(current, highest) > 0) {\n highest = current\n highestIndex = i\n }\n }\n return highestIndex\n}\n\n/**\n * Given an array using the given comparator function, finds the insertion index of an element.\n *\n * @param array An array sorted using the comparator.\n * @param element The element to compare against array elements.\n * @param comparator A function where given the return value of `comparator(element, array[i])`\n * if less than zero the returned index will be before i, otherwise after.\n * @param start The starting index (inclusive). Default: 0\n * @param end The ending index (exclusive). Default: array.length\n */\nexport function sortedInsertionIndex<T, U = T>(\n array: ArrayLike<T>,\n element: U,\n comparator: Comparator<U, T>,\n start = 0,\n end = array.length\n): number {\n let indexA = start\n let indexB = end\n while (indexA < indexB) {\n const midIndex = (indexA + indexB) >>> 1\n const comparison = comparator(element, array[midIndex])\n if (comparison < 0) {\n indexB = midIndex\n } else {\n indexA = midIndex + 1\n }\n }\n return indexA\n}\n\n/**\n * Creates an iterator for an ArrayLike.\n * If the given ArrayLike is iterable, then use its provided iterator.\n *\n * @param arrayLike\n */\nexport function createArrayLikeIterator<T>(\n arrayLike: ArrayLike<T>\n): IterableIterator<T> {\n if (Symbol.iterator in arrayLike)\n return (arrayLike as Iterable<T>)[\n Symbol.iterator\n ]() as IterableIterator<T>\n\n let currentIndex = 0\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return createArrayLikeIterator(arrayLike)\n },\n\n next: (): IteratorResult<T> => {\n if (currentIndex >= arrayLike.length) {\n return {\n value: undefined,\n done: true,\n }\n }\n return {\n value: arrayLike[currentIndex++],\n done: false,\n }\n },\n }\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or throws an IllegalArgumentError if out of range.\n */\nexport function getElementAt<T>(array: ArrayLike<T>, index: number): T {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n throw new IllegalArgumentError(`index ${index} is out of range 0-${n}`)\n}\n\n/**\n * Gets the element in the ArrayLike at the given index, or returns the provided default value.\n */\nexport function getElementOrDefault<T, V>(\n array: ArrayLike<T>,\n index: number,\n defaultValue: V\n): T | V {\n const n = array.length\n if (index >= 0 && index < n) {\n return array[index]\n }\n return defaultValue\n}\n\n/**\n * Counts the number of elements in an array that return true when passed to a predicate function.\n *\n * @param array\n * @param predicate\n */\nexport function countElements<T>(\n array: ArrayLike<T>,\n predicate: (value: T, index: number, obj: ArrayLike<T>) => boolean\n): number {\n let count = 0\n const n = array.length\n for (let i = 0; i < n; i++) {\n if (predicate(array[i], i, array)) {\n count++\n }\n }\n return count\n}\n\n/**\n * Splits an array into chunks of the specified size.\n *\n * @param array The array to chunk\n * @param chunkSize Maximum size of each chunk\n * @returns Array of chunks\n */\nexport function chunk<T>(array: ArrayLike<T>, chunkSize: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(slice(array, i, i + chunkSize))\n }\n return chunks\n}\n\nexport function min<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the minimum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function min<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let minValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], minValue) < 0) {\n minValue = arrayLike[i]\n }\n }\n return minValue\n}\n\nexport function max<T extends Exclude<Primitive, symbol>>(\n arrayLike: ArrayLike<T>\n): T | undefined\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator: Comparator<T>\n): T | undefined\n\n/**\n * Finds the maximum value in an array of comparable elements.\n * @param arrayLike The array-like object to search\n * @param comparator Optional comparator function\n */\nexport function max<T>(\n arrayLike: ArrayLike<T>,\n comparator?: Comparator<T>\n): T | undefined {\n if (arrayLike.length === 0) return undefined\n\n let maxValue = arrayLike[0]\n if (!comparator) comparator = compare as Comparator<T>\n for (let i = 1; i < arrayLike.length; i++) {\n if (comparator(arrayLike[i], maxValue) > 0) {\n maxValue = arrayLike[i]\n }\n }\n return maxValue\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\n\n/**\n * Returns an array of numbers between start and end, incrementing by step.\n *\n * E.g.\n * ```\n * range(1, 10) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n * range(5, 2) // [5, 4, 3, 2]\n * range(5, 4, -0.2) // [5.0, 4.8, 4.6, 4.4, 4.2, 4.0]\n * ```\n * @param start Start position (inclusive)\n * @param endInclusive End position (inclusive)\n * @param step The amount to increment.\n */\nexport function createRangeIter(\n start: number,\n endInclusive: number,\n step = 1\n): IterableIterator<number> {\n const positive = endInclusive >= start\n if (\n (endInclusive > start && step <= 0) ||\n (endInclusive < start && step >= 0)\n ) {\n throw new IllegalArgumentError('Iterator will never complete.')\n }\n let i = start\n return {\n [Symbol.iterator](): IterableIterator<number> {\n return this\n },\n\n next: (): IteratorResult<number> => {\n const result = {\n value: i,\n done: positive ? i > endInclusive : i < endInclusive,\n }\n i += step\n return result\n },\n }\n}\n\n/**\n * Maps an iterable object using the given transform.\n * Unlike `Array#map`, this doesn't create a new Array in memory, the transform is done on\n * iteration.\n *\n * @param iterable\n * @param transform Transforms each element as it's requested.\n */\nexport function mapIter<T, U>(\n iterable: Iterable<T>,\n transform: (element: T) => U\n): IterableIterator<U> {\n const it: Iterator<T> = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<U> {\n return mapIter(iterable, transform)\n },\n next: (): IteratorResult<U> => {\n const result = it.next()\n if (result.done) return result\n return {\n value: transform(result.value),\n done: false,\n }\n },\n }\n}\n\nexport function filterIter<T, S extends T>(\n iterable: Iterable<T>,\n predicate: (value: T) => value is S\n): IterableIterator<S>\n\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T>\n\n/**\n * Filters an iterable object using the given predicate.\n * Unlike `Array#filter`, this doesn't create a new Array in memory, the filter is done on\n * iteration.\n *\n * @param iterable\n * @param predicate Returns true if the element should be included in the new iteration.\n */\nexport function filterIter<T>(\n iterable: Iterable<T>,\n predicate: (value: T) => boolean\n): IterableIterator<T> {\n const it = iterable[Symbol.iterator]()\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return filterIter(iterable, predicate)\n },\n\n next: (): IteratorResult<T> => {\n while (true) {\n const next = it.next()\n if (next.done) {\n return {\n value: undefined,\n done: true,\n }\n } else if (predicate(next.value)) {\n return {\n value: next.value,\n done: false,\n }\n }\n }\n },\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ReportableError } from './ReportableError'\n\n/**\n * An error indicating an unexpected state.\n */\nexport class IllegalStateError extends ReportableError {\n get [Symbol.toStringTag](): string {\n return 'IllegalStateError'\n }\n\n constructor(message: string) {\n super(message)\n Object.setPrototypeOf(this, IllegalStateError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { CacheMap } from './CacheMap'\nimport { mapIter } from '../iteration/iterable'\nimport type { LinkedNode } from './LinkedList'\nimport { LinkedList } from './LinkedList'\nimport { IllegalStateError } from '../../error/IllegalStateError'\n\n/**\n * An LRU Cache implementation.\n * An LRU (Least Recently Used) Cache is a Map with a fixed capacity. When the capacity is\n * exceeded, the least recently used element will be removed.\n * An element is considered to be used when it has been retrieved via `get`, or when it's been\n * `set`.\n * Iteration does not affect ordering.\n */\nexport class LruCache<K, V> implements CacheMap<K, V> {\n /**\n * A map of the list nodes.\n *\n * @private\n */\n private cache: Map<K, LinkedNode<[K, V]>> = new Map()\n\n /**\n * Most recently used elements are at the tail, least recently used are at the head.\n * @private\n */\n private list = new LinkedList<[K, V]>()\n\n /**\n * An element is about to be removed. Should return true if the element may be evicted,\n * otherwise false.\n * If false is returned for all elements, an IllegalStateError is thrown.\n */\n onEvicting: ((element: V, key: K, list: CacheMap<K, V>) => boolean) | null =\n null\n\n /**\n * When an element is added when at capacity, the least recently used element will be removed.\n * This callback can be set to be notified with the element being evicted, which may be used\n * for disposal.\n */\n onEvict: ((element: V, key: K, list: CacheMap<K, V>) => void) | null = null\n\n private _capacity = 0\n\n constructor(initialCapacity: number) {\n this._capacity = initialCapacity\n }\n\n get capacity(): number {\n return this._capacity\n }\n\n set capacity(value: number) {\n this._capacity = value\n while (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n\n /**\n * @returns the number of elements in the Map.\n */\n get size(): number {\n return this.cache.size\n }\n\n /**\n * @returns boolean indicating whether an element with the specified key exists or not.\n */\n has(key: K): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Returns the mapped value for the given key, and moves the element to the most recently\n * used position.\n *\n * @returns Returns the element associated with the given key, or undefined if no such\n * element exists.\n */\n get(key: K): V | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n this.list.pushNode(node)\n return node.value[1]\n }\n\n /**\n * Adds a new element with a specified key and value to the Map. If an element with the\n * same key already exists, the element will be updated and position moved to most recently\n * used.\n */\n set(key: K, value: V): this {\n if (this.has(key)) {\n const node = this.cache.get(key)!\n node.value[1] = value\n this.list.pushNode(node)\n } else {\n const node = this.list.push([key, value])\n this.cache.set(key, node)\n if (this.cache.size > this.capacity) {\n this.evictLeastRecentlyUsed()\n }\n }\n return this\n }\n\n private evictLeastRecentlyUsed() {\n let node = this.list.head\n while (node) {\n const [key, value] = node.value\n const allowed =\n this.onEvicting?.call(null, value, key, this) ?? true\n if (allowed) break\n node = node.next\n }\n if (!node)\n throw new IllegalStateError(\n 'onEvicting returned false for all elements'\n )\n const [key, value] = node.value\n this.list.remove(node)\n this.cache.delete(node.value[0])\n this.onEvict?.call(null, value, key, this)\n }\n\n /**\n * Clears all elements from the cache.\n */\n clear(): void {\n this.list.clear()\n this.cache.clear()\n }\n\n /**\n * @returns true if an element in the Map existed and has been removed, or false if the element does not exist.\n */\n delete(key: K): boolean {\n if (!this.has(key)) return false\n const node = this.cache.get(key)!\n this.cache.delete(key)\n this.list.remove(node)\n return true\n }\n\n /**\n * Executes a provided function once per each key/value pair in the Map,\n * ordered from least recently used to most.\n *\n * @param callback A callback to invoke for every element in the cache.\n * @param thisArg Value to use as this when executing callback\n */\n forEach(\n callback: (value: V, key: K, map: this) => void,\n thisArg?: any\n ): void {\n return this.list.forEach((entry) => {\n callback.call(thisArg, entry[1], entry[0], this)\n })\n }\n\n /**\n * Returns an iterable of key, value pairs for every entry in the map.\n */\n entries(): IterableIterator<[K, V]> {\n return this[Symbol.iterator]()\n }\n\n /**\n * Returns an iterable of keys in the map. This will be ordered from least recently used to\n * most.\n */\n keys(): IterableIterator<K> {\n return mapIter(this.list, ([key]) => key)\n }\n\n /**\n * Returns an iterable of values in the map. This will be ordered from least recently used to\n * most.\n */\n values(): IterableIterator<V> {\n return mapIter(this.list, ([, value]) => value)\n }\n\n [Symbol.iterator](): IterableIterator<[K, V]> {\n return this.list[Symbol.iterator]()\n }\n\n get [Symbol.toStringTag](): string {\n return 'LruCache'\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LruCache } from '../collection/LruCache'\nimport { getOrSet } from '../map/map'\nimport type { Fun } from '../type'\n\nexport interface MemoizedFunction {\n clear(): void\n}\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @return Returns a memoized function with a `clear` method to reset the cached value.\n */\nexport function memoize<T extends () => any>(inner: T): MemoizedFunction & T\n\n/**\n * Returns a wrapper function where when called, retains the return value of `inner`, returning that\n * value on consecutive calls without invoking `inner` again.\n *\n * @param inner The function to memoize results.\n * @param keyProvider When more than one parameter is expected, a keyProvider is required, which\n * returns a unique key given the arguments provided to the memoized function.\n * @param capacity\n * @return Returns a memoized function with a `clear` method to reset the cache.\n */\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider: (...args: Parameters<T>) => any,\n capacity?: number\n): MemoizedFunction & T\n\nexport function memoize<T extends Fun>(\n inner: T,\n keyProvider?: (...args: Parameters<T>) => any,\n capacity = 500\n): MemoizedFunction & T {\n if (!keyProvider) {\n let cached = false\n let value: ReturnType<T> | undefined = undefined\n const memoized = (): ReturnType<T> => {\n if (!cached) {\n // Marked cached only once `inner` returns, so a throw is not\n // cached as an `undefined` result.\n value = inner()\n cached = true\n }\n return value as ReturnType<T>\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cached = false\n value = undefined\n },\n } as const\n )\n } else if (capacity === 0) {\n const memoized = (...args: Parameters<T>): ReturnType<T> =>\n inner(...args)\n return Object.assign(\n memoized as T,\n {\n clear: () => {},\n } as const\n )\n } else if (capacity === 1) {\n let hasValue = false\n let cachedKey: any\n let cachedValue: ReturnType<T>\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n if (!hasValue || cachedKey !== key) {\n // Recorded only once `inner` returns, so a throw neither caches\n // an `undefined` result nor evicts the entry already held.\n cachedValue = inner(...args)\n cachedKey = key\n hasValue = true\n }\n return cachedValue\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n hasValue = false\n },\n } as const\n )\n } else {\n const cache = new LruCache<any, ReturnType<T>>(capacity)\n const memoized = (...args: Parameters<T>): ReturnType<T> => {\n const key = keyProvider(...args)\n return getOrSet(cache, key, () => inner(...args))\n }\n return Object.assign(\n memoized as T,\n {\n clear: () => {\n cache.clear()\n },\n } as const\n )\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport { flipMap } from '../map/map'\nimport type { Maybe } from '../type'\nimport type { ReadonlyRecord } from '../object/readonlyType'\n\n/**\n * @private\n */\nconst locale = {\n variableNotDefined: \"Variable '{name}' is not defined\",\n} as const\n\n/**\n * The default substitution pattern, matching `{name}`.\n */\nconst DEFAULT_SUBSTITUTE_PATTERN = /\\{(\\w+)}/g\n\n/**\n * Substitutes named variable references in a string.\n *\n * Example:\n * ```\n * substitute('{fruit}, {veg}', { fruit: 'apples', veg: 'carrots' }) // 'apples, carrots'\n * ```\n *\n * @param str The template string.\n * @param variables A record of variable names to values.\n * @param pattern A regex whose first capture group is the variable name. Defaults to `{name}`.\n * @throws IllegalArgumentError if a referenced variable is not defined.\n */\nexport function substitute(\n str: string,\n variables: Readonly<Record<string, any>>,\n pattern: RegExp = DEFAULT_SUBSTITUTE_PATTERN\n): string {\n return str.replace(pattern, (_, name) => {\n if (!(name in variables)) {\n throw new IllegalArgumentError(\n locale.variableNotDefined.replace('{name}', String(name))\n )\n }\n return String(variables[name])\n })\n}\n\n/**\n * Replaces substitution tokens.\n *\n * Each identifier may be suffixed, within the enclosing '$' characters, with an additional format tag for number\n * padding following the prototype: `%0[width]d`\n * For example:\n * 'Segment_$Time%04d$' Where the `Time` property is `42` will have a replacement value of: `Segment_0042`\n */\nexport function substituteIdentifiers(\n str: string,\n props: ReadonlyRecord<string, string | number>\n): string {\n return str.replace(/\\$(\\w*)(?:%0(\\d+)d)?\\$/g, (_, match, maxLength) => {\n if (!match) return '$'\n if (!(match in props)) {\n throw new IllegalArgumentError(\n `Template substitution token '${match}' was not understood`\n )\n }\n let prop = String(props[match])\n if (maxLength) prop = prop.padStart(maxLength, '0')\n return prop\n })\n}\n\n/**\n * Returns true if the character is one of: ' ', '\\t', '\\n', '\\r'\n *\n * @param charCode The character code to test\n */\nexport function isWhitespaceChar(charCode: number): boolean {\n return (\n charCode === 0x20 || // ' ' (space)\n charCode === 0x09 || // '\\t' (tab)\n charCode === 0x0d || // '\\r' (carriage return)\n charCode === 0x0a // '\\n' (line feed)\n )\n}\n\nconst encodedEntitiesRegex = /&(?:#(?:x([\\da-f]+)|(\\d+))|(\\w+));/gi\n\n/**\n * The highest code point representable in UTF-16.\n */\nconst MAX_CODE_POINT = 0x10ffff\n\n/**\n * Predefined general xml entities\n * https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent\n */\nexport const predefinedDecodeEntities: ReadonlyMap<string, string> = new Map([\n ['apos', \"'\"],\n ['amp', '&'],\n ['lt', '<'],\n ['gt', '>'],\n ['quot', '\"'],\n])\n\n/**\n * Replaces all specified entities with their mapped representations.\n * Decimal (`&#33;`) and hexadecimal (`&#x21;`) character references are both\n * decoded. An unrecognized named entity, or a character reference that is not a\n * valid code point, is left as-is.\n *\n * For example (using {@link predefinedDecodeEntities}):\n * ```\n * `&lt;Hello to y&apos;all&#33;&gt;` becomes `<Hello to y'all!>`\n * ```\n *\n * @param str\n * @param namedEntities\n */\nexport function decodeEntities(\n str: string,\n namedEntities: ReadonlyMap<string, string> = predefinedDecodeEntities\n): string {\n return str.replace(\n encodedEntitiesRegex,\n (\n substring: string,\n hex: Maybe<string>,\n decimal: Maybe<string>,\n entityName: Maybe<string>\n ) => {\n if (hex == null && decimal == null) {\n return namedEntities.get(entityName!.toLowerCase()) ?? substring\n }\n const codePoint =\n hex != null ? parseInt(hex, 16) : parseInt(decimal!, 10)\n // Surrogate halves are not characters, and code points beyond the\n // Unicode range would throw.\n if (codePoint > MAX_CODE_POINT || isSurrogate(codePoint))\n return substring\n return String.fromCodePoint(codePoint)\n }\n )\n}\n\nfunction isSurrogate(codePoint: number): boolean {\n return codePoint >= 0xd800 && codePoint <= 0xdfff\n}\n\nconst standardEntityValueToNames = flipMap(predefinedDecodeEntities)\nconst entitiesRegex = /['&<>\"]/g\n\n/**\n * Encodes the predefined xml standard entities into their entity names.\n *\n * & to &amp;\n * ' to &apos;\n * > to &gt;\n * < to &lt;\n * \" to &quot;\n *\n * @param str\n */\nexport function encodeEntities(str: string): string {\n if (entitiesRegex.test(str)) {\n return str.replace(entitiesRegex, (entityValue) => {\n const entityName = standardEntityValueToNames.get(entityValue)\n return `&${entityName};`\n })\n } else {\n return str\n }\n}\n\n/**\n * Returns true if the two strings are equal, optionally ignoring case.\n *\n * @param a\n * @param b\n * @param ignoreCase\n */\nexport function eqStr(\n a: string | null,\n b: string | null,\n ignoreCase = false\n): boolean {\n if (a == null && b == null) return true\n if (a == null || b == null) return false\n if (a === b) return true\n if (ignoreCase)\n return a.length === b.length && a.toLowerCase() === b.toLowerCase()\n return false\n}\n\n/**\n * Given a single character string, returns the char code of the first character.\n *\n * @param str A single character string from which to get the first code point.\n */\nexport function char(str: string): number {\n return str.charCodeAt(0)\n}\n\n/**\n * Returns the substring of string after the last instance of searchString, excluding searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringAfterLast(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).lastIndexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(i + searchString.length)\n}\n\n/**\n * Returns the substring of string before the first occurrence of searchString, excluding\n * searchString.\n * If searchString is not found, the whole string will be returned.\n *\n * @param string\n * @param searchString\n * @param caseSensitive If true (default) the search will be case-sensitive.\n */\nexport function substringBefore(\n string: string,\n searchString: string,\n caseSensitive = true\n): string {\n const i = (caseSensitive ? string : string.toLowerCase()).indexOf(\n caseSensitive ? searchString : searchString.toLowerCase()\n )\n if (i === -1) return string\n return string.substring(0, i)\n}\n\n/**\n * Tokenizes a string into lowercase alphanumeric words.\n *\n * E.g. `'Amazon Music x86_64'` becomes `['amazon', 'music', 'x86', '64']`\n *\n * @param str\n */\nexport function tokenizeWords(str: string): string[] {\n const words: string[] = []\n const regex = /[a-z\\d]+/gi\n let match: RegExpMatchArray | null\n while ((match = regex.exec(str))) {\n words.push(match[0].toLowerCase())\n }\n return words\n}\n\nexport function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as Lowercase<T>\n}\n\nexport function toUpperCase<T extends string>(str: T): Uppercase<T> {\n return str.toUpperCase() as Uppercase<T>\n}\n\n/**\n * If the given string is greater than a max length, truncate the string with an indicator.\n * Example:\n * truncate('a very long string', 10) // 'a very ...'\n *\n * @param str A nullable string.\n * @param maxLength\n * @param indicator The string to indicate there was truncation, default is an ellipses \u2026 (U+2026)\n * @return Returns the truncated string, or the nullish value if str is nullish.\n */\nexport function truncate<T extends Maybe<string>>(\n str: T,\n maxLength: number,\n indicator = '\u2026'\n): T | string {\n if (str == null) return str\n if (str.length > maxLength)\n return str.substring(0, maxLength - indicator.length) + indicator\n return str\n}\n\n/**\n * Converts a string to kebab-case.\n *\n * This function transforms camelCase, PascalCase, snake_case, and space-separated\n * strings into a normalized kebab-case format. It removes non-alphanumeric characters\n * (excluding hyphens), collapses multiple delimiters, and trims leading/trailing hyphens.\n *\n * @example\n * toKebabCase(\"HelloWorld\") // \"hello-world\"\n * toKebabCase(\"hello_world test\") // \"hello-world-test\"\n * toKebabCase(\"SomeText123\") // \"some-text123\"\n *\n * @param str - The input string to convert.\n * @returns The kebab-case version of the input.\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .replace(/[^a-zA-Z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n .toLowerCase()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalStateError } from '../error/IllegalStateError'\nimport type { Unsubscribe } from './Unsubscribe'\nimport type { Maybe } from '../util/type'\n\n/**\n * Any object that may be disposed.\n */\nexport interface Disposable {\n dispose(): void\n}\n\n/**\n * Returns true if the given value is disposable.\n *\n * @param value Any value. The value will be considered Disposable if it contains a method named\n * 'dispose', and that function requires zero parameters. This value will be type guarded to\n * Disposable if true is returned.\n */\nexport function isDisposable(value: any): value is Disposable {\n return (\n value != null &&\n typeof value.dispose === 'function' &&\n value.dispose.length === 0\n )\n}\n\n/**\n * Disposes all the given {@link Disposable} objects.\n *\n * @param disposables\n */\nexport function disposeAll(disposables: Iterable<Disposable>): void {\n for (const disposable of disposables) {\n disposable.dispose()\n }\n}\n\n/**\n * Returns a Disposable that invokes the given function on dispose.\n *\n * @param unsub\n */\nexport function toDisposable(unsub: () => void): Disposable {\n return { dispose: unsub }\n}\n\nexport type AddDisposable = <T extends Maybe<Disposable | Unsubscribe>>(\n disposable: T\n) => T\n\n/**\n * A Disposer disposes added disposables as a group.\n * The method members may be called without a receiver.\n */\nexport interface Disposer extends Disposable {\n readonly disposed: boolean\n readonly add: AddDisposable\n readonly dispose: () => void\n}\n\n/**\n * Creates a Disposer, an object on which {@link Disposable} instances may be added, and disposed\n * as a group.\n *\n * The method members may be called without a receiver, thus allowing destructuring.\n * Example:\n * ```\n * function create(): Disposable {\n * const { dispose, add } = disposer()\n * add(someDisposable)\n * add(anotherDisposable)\n * return {\n * dispose\n * }\n * }\n * ```\n *\n */\nexport function createDisposer(): Disposer {\n const disposables: Disposable[] = []\n let _disposed = false\n const add = <T extends Maybe<Unsubscribe | Disposable>>(\n disposableOrUnsub: T\n ): T => {\n if (_disposed) throw new DisposedError()\n if (disposableOrUnsub) {\n disposables.push(\n 'dispose' in disposableOrUnsub\n ? disposableOrUnsub\n : toDisposable(disposableOrUnsub)\n )\n }\n return disposableOrUnsub\n }\n return {\n dispose() {\n if (_disposed) throw new DisposedError()\n _disposed = true\n disposeAll(disposables)\n },\n add,\n get disposed() {\n return _disposed\n },\n }\n}\n\n/**\n * An illegal state error indicating that an object has been disposed.\n */\nexport class DisposedError extends IllegalStateError {\n get [Symbol.toStringTag](): string {\n return 'DisposedError'\n }\n\n constructor(message = 'Instance is disposed') {\n super(message)\n Object.setPrototypeOf(this, DisposedError.prototype)\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isDisposable } from '../core/disposable'\nimport { IllegalStateError } from '../error/IllegalStateError'\nimport { remove } from '../util/collection/array'\nimport type { Maybe } from '../util/type'\n\n/**\n * Manages global initializers.\n */\nexport class GlobalRegistry {\n private registry: GlobalRef<any>[] = []\n\n /**\n * Returns the number of references currently in the registry.\n */\n get size(): number {\n return this.registry.length\n }\n\n /**\n * Registers an initializer that will be invoked during global state initialization.\n * @param initializer\n */\n register<T extends GlobalRef<any>>(initializer: T): T {\n this.registry.push(initializer)\n return initializer\n }\n\n /**\n * Removes a global ref from the registry.\n * May be called at any time.\n * @param ref\n * @return Returns true if the global ref was removed.\n */\n unregister(ref: GlobalRef<any>): boolean {\n return remove(this.registry, ref)\n }\n\n /**\n * Resets all registered initializers and sets this registry back to its pre-initialized state.\n * This is typically only done within unit tests, but may be called if all players are\n * disposed and the consumer intends to teardown global state.\n */\n reset() {\n for (const registryElement of this.registry) {\n registryElement.reset()\n }\n }\n}\n\nlet _registry: GlobalRegistry | null = null\n\n/**\n * Gets or creates the global registry instance.\n */\nexport function getGlobalRegistry(): GlobalRegistry {\n if (!_registry) _registry = new GlobalRegistry()\n return _registry\n}\n\nexport interface GlobalRef<T> {\n /**\n * True if this has been initialized.\n */\n readonly initialized: boolean\n\n /**\n * Returns the factory-produced value.\n * Throws an {@link IllegalStateError} if the global registry has not been initialized.\n */\n readonly value: T\n\n /**\n * Overrides this initializer.\n * The previous initializer will be provided as an argument for extension.\n *\n * Throws an {@link IllegalStateError} if the global registry has been initialized.\n * @return Returns this\n */\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T>\n\n /**\n * Resets this initializer back to its pre-initialized state.\n * If the initializer produced a disposable value, it will be disposed.\n */\n reset(): void\n\n /**\n * Initializes the global ref.\n * This is done automatically on first use of `value`, but may be initialized eagerly.\n */\n initialize(): void\n}\n\n/**\n * When set, GlobalRefImpl records a stack trace each time it is initialized,\n * so a later \"Cannot call when initialized\" error can include the stack of\n * whoever last touched the ref. Used to diagnose async leakage between specs.\n *\n * Tests opt in via setGlobalRefDebug(true).\n */\nlet globalRefDebug = false\n\nexport function setGlobalRefDebug(enabled: boolean): void {\n globalRefDebug = enabled\n}\n\nexport class GlobalRefImpl<T> implements GlobalRef<T> {\n private _value: T | undefined\n private _initialized = false\n private constructing = false\n private initializer: () => T\n private lastInitStack: Maybe<string> = null\n\n constructor(private readonly defaultInitializer: () => T) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this._initialized\n }\n\n get value(): T {\n this.initialize()\n return this._value!\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n if (!this._initialized) return\n this.assertNotConstructing()\n this._initialized = false\n this.lastInitStack = null\n if (isDisposable(this._value)) {\n this._value.dispose()\n }\n this._value = undefined\n }\n\n initialize(): void {\n if (this._initialized) return\n this.assertNotConstructing()\n this.constructing = true\n try {\n this._value = this.initializer()\n } catch (error) {\n this.constructing = false\n throw error\n }\n this.constructing = false\n this._initialized = true\n if (globalRefDebug) {\n this.lastInitStack = new Error('globalRef initialized').stack\n }\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n this.assertNotInitialized()\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n (newInitializer) => {\n this.initializer = newInitializer\n }\n )\n }\n\n private assertNotInitialized() {\n if (this._initialized) {\n const detail = this.lastInitStack\n ? `\\nLast initialized at:\\n${this.lastInitStack}`\n : ''\n throw new IllegalStateError(`Cannot call when initialized${detail}`)\n }\n }\n\n private assertNotConstructing() {\n if (this.constructing)\n throw new IllegalStateError('Cannot call during construction')\n }\n}\n\nclass GlobalRefOverride<T> implements GlobalRef<T> {\n private initializer: () => T\n\n constructor(\n private readonly original: GlobalRef<T>,\n private readonly defaultInitializer: () => T,\n private readonly setInitializer: (value: () => T) => void\n ) {\n this.initializer = defaultInitializer\n }\n\n get initialized(): boolean {\n return this.original.initialized\n }\n\n get value(): T {\n return this.original.value\n }\n\n initialize(): void {\n this.setInitializer(this.initializer)\n this.original.initialize()\n }\n\n reset(): void {\n this.initializer = this.defaultInitializer\n this.original.reset()\n this.setInitializer(this.initializer)\n }\n\n set(newInitializer: (previousInitializer: () => T) => T): GlobalRef<T> {\n const overriddenInitializer = () => {\n return newInitializer(this.defaultInitializer)\n }\n this.initializer = overriddenInitializer\n this.setInitializer(overriddenInitializer)\n return new GlobalRefOverride(\n this,\n overriddenInitializer,\n this.setInitializer\n )\n }\n}\n\n/**\n * Creates a global reference that can be lazily initialized.\n * This function is tree-shakable as it doesn't perform any side effects on import.\n *\n * @param init Factory function that creates the value\n */\nexport function globalRef<T>(init: () => T): GlobalRef<T> {\n return getGlobalRegistry().register(new GlobalRefImpl(init))\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * An interface that may be implemented to provide custom clone behavior.\n */\nexport interface Cloneable<T> {\n /**\n * Produces a copy of this object.\n */\n clone(): T\n}\n\n/**\n * Returns true if the given value implements Cloneable.\n */\nexport function isCloneable<T>(value: T): value is T & Cloneable<T> {\n return (\n value != null &&\n typeof value === 'object' &&\n 'clone' in value &&\n typeof value.clone === 'function' &&\n value.clone.length === 0\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the keys (both property names and symbols) of all own properties.\n * Unlike `Object.keys`, this will also return non-enumerable properties.\n * Does not return keys inherited from the object's prototype.\n *\n * Implementation details:\n * If Reflect is supported, Reflect.ownKeys will be used, wrapping in a Set, otherwise\n * Object.getOwnPropertyNames and Object.getOwnPropertySymbols will be used. This will typically\n * be equivalent. Proxies may alter the order of keys but platforms that do not support Reflect\n * will also typically not support Proxies.\n *\n * @see Reflect.ownKeys\n * @see Object.getOwnPropertyNames\n * @see Object.getOwnPropertySymbols\n * @param obj\n * @return Returns a `Set` of the own properties of the target object, including non-enumerable.\n * The ordering will be: positive numeric indexes in order, strings in insertion order,\n * symbols in insertion order.\n */\nexport function ownKeys<T>(obj: T): Set<keyof T> {\n if (!obj) return new Set()\n if (typeof Reflect !== 'undefined')\n return new Set(Reflect.ownKeys(obj) as (keyof T)[])\n const properties = new Set()\n Object.getOwnPropertyNames(obj).forEach((item) => properties.add(item))\n Object.getOwnPropertySymbols(obj).forEach((item) => properties.add(item))\n return properties as Set<keyof T>\n}\n\n/**\n * Returns the prototype chain of the given object.\n *\n * Example:\n * ```\n * class A {}\n * class B extends A {}\n * class C extends B {}\n * const c = new C()\n * getPrototypeChain(c) // [c, C.prototype, B.prototype, A.prototype, Object.prototype]\n * ```\n * @param obj\n */\nexport function getPrototypeChain(obj: any): any[] {\n const out = []\n let current = obj\n do {\n out.push(current)\n } while ((current = Object.getPrototypeOf(current)))\n return out\n}\n\n/**\n * Returns true if the given object represents a plain object and not a class instance.\n */\nexport function isPlainObject(value: any): boolean {\n if (!value || typeof value !== 'object' || Array.isArray(value))\n return false\n const proto = Object.getPrototypeOf(value)\n // if not the null prototype, not a plain object:\n return !proto || !Object.getPrototypeOf(proto)\n}\n\n/**\n * Gets the object's value for the given key if it exists, otherwise sets [key] to\n * `defaultValue`, returning the newly set value.\n *\n * @param object\n * @param key\n * @param defaultValue\n */\nexport function getOrSetProp<K extends keyof T, T extends object>(\n object: T,\n key: K,\n defaultValue: () => T[K]\n): T[K] {\n if (key in object) {\n return object[key]\n } else {\n const value = defaultValue()\n object[key] = value\n return value\n }\n}\n\n/**\n * Returns true if value is not null. Provides a type guard which can be used in filters.\n * Example:\n * [1, null, 2, 3, null, 4].filter(isNonNull) // type number[]\n * @param value\n */\nexport function isNonNull<T>(value: T): value is NonNullable<T> {\n return value != null\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isPlainObject } from '../object/object'\nimport type { AnyRecord, Fun, IsAny } from '../type'\n\n/**\n * A representation of the conversion the toJson function will apply to make an input JSON compatible.\n */\nexport type Json<T = any> =\n IsAny<T> extends true\n ? // inputs of type `any` are allowed, use AnyRecord as the mapped type to pass JsonCompatible<T> validation.\n AnyRecord\n : unknown extends T\n ? never\n : T extends bigint | symbol | Fun\n ? string\n : T extends { toJSON(): infer R }\n ? R\n : T extends boolean | number | string | null | undefined\n ? T\n : T extends Set<infer U>\n ? Json<U>[]\n : T extends readonly any[]\n ? Json<T[number]>[]\n : {\n [P in keyof T]: Json<T[P]>\n }\n\n/**\n * Converts a dynamic value to a serializable value.\n * The value must be either an object with a toJSON function, a primitive, or a plain object\n * where all enumerable properties map to values supported by this function.\n * Properties not enumerable will be omitted, properties not serializable will be converted\n * to strings.\n * - bigint -> value.toString\n * - function -> [function <name>]\n * - symbol -> [symbol <name>]\n *\n * Error instances have a special case where non-serializable errors will still have their\n * name, message, and stack properties serialized.\n *\n * Note that this is not intended for use in serializing objects where all values are known;\n * it's intended to cover the case of reporting or logging an unknown object that may or may not\n * be serializable.\n *\n * @param value\n */\nexport function toJson<T>(value: T): Json<T> {\n return toJsonInternal(value, new Set())\n}\n\nfunction toJsonInternal(value: any, visited: Set<any>): any {\n switch (typeof value) {\n case 'object':\n return objectToJsonInternal(value, visited)\n case 'undefined':\n case 'boolean':\n case 'number':\n case 'string':\n return value\n case 'function':\n return `[function ${value.name}]`\n case 'symbol':\n return `[symbol ${value.toString().slice(7, -1)}]`\n case 'bigint':\n return value.toString()\n }\n}\n\nfunction objectToJsonInternal(value: any, visited: Set<any>): any {\n if (value == null) return value\n if (visited.has(value)) return `<circular reference: ${String(value)}>`\n visited.add(value)\n if ('toJSON' in value && typeof value.toJSON === 'function')\n return value.toJSON()\n if (value instanceof Set) {\n return Array.from(value).map((e) => toJsonInternal(e, visited))\n } else if (Array.isArray(value)) {\n return value.map((e) => toJsonInternal(e, visited))\n } else {\n if (isPlainObject(value)) {\n const o: Record<any, any> = {}\n for (const key in value) {\n o[key] = toJsonInternal(value[key], visited)\n }\n return o\n } else if (value instanceof Error) {\n // non-enumerable properties\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n }\n } else {\n return value.toString()\n }\n }\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet _isNode: boolean | null = null\n\n/**\n * Returns true if this is a nodejs environment.\n */\nexport function isNode(): boolean {\n if (_isNode === null) {\n _isNode =\n typeof process !== 'undefined' &&\n 'versions' in process &&\n typeof process.versions.node === 'string'\n }\n return _isNode\n}\n/**\n * Node's global setTimeout differs slightly from the browser. Use this when storing timeout ids.\n */\nexport type TimeoutId = ReturnType<typeof setTimeout>\n\n/**\n * A subset of `Location` properties available in all environments.\n */\nexport interface PartialLocation {\n readonly origin: string\n readonly search: string\n readonly href: string\n}\n\n/**\n * Returns the global `location` object, or a default with empty values\n * when `location` is not defined (e.g. Node, Web Workers).\n */\nexport function getLocation(): PartialLocation {\n return typeof location === 'object' ? location : defaultLocation\n}\n\nconst defaultLocation: PartialLocation = {\n origin: '',\n search: '',\n href: '',\n}\n\n/**\n * Node's global setInterval differs slightly from the browser. Use this when storing interval ids.\n */\nexport type IntervalId = ReturnType<typeof setInterval>\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { memoize } from '../fun/memoize'\nimport { getLocation } from '../../global/environment'\n\n/**\n * Returns a `URLSearchParams` object for the given search substring. This is memoized for the\n * last search provided.\n * @param search (Optional) The window's search substring. Defaults to `location.search`, overridden\n * only for unit tests.\n */\nexport const getSearchParams = memoize(\n (search: string = getLocationSearch()): URLSearchParams => {\n const url = new URL('about:blank')\n url.search = search\n // Uses `URL.searchParams` over `new URLSearchParams`; URLSearchParams constructor is not\n // as widely supported.\n return url.searchParams\n },\n (search: string = getLocationSearch()) => search,\n 1\n)\n\n/**\n * If the environment has a `location` object, returns the location's search. Otherwise,\n * an empty string.\n */\nexport function getLocationSearch(): string {\n return getLocation().search\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n getLocationSearch,\n getSearchParams,\n} from '../util/browser/searchParams'\nimport { LogLevel, parseLogLevel } from './Logger'\n\n/**\n * Returns the current vinyl logging level, as set by the querystring parameter: vinylLogLevel.\n * @param search\n * @param defaultLevel\n */\nexport function getLogLevelFromSearch(\n search: string = getLocationSearch(),\n defaultLevel: LogLevel = LogLevel.WARN\n): LogLevel {\n const str = getSearchParams(search).get('vinylLogLevel')\n if (!str) return defaultLevel\n return parseLogLevel(str) ?? defaultLevel\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ReadonlyEventHost } from '../event/EventHost'\nimport { EventHostImpl } from '../event/EventHost'\nimport { globalRef } from '../global/globalRegistry'\nimport { toJson } from '../util/serialization/json'\nimport type { LogTarget } from './LogTarget'\nimport { getLogLevelFromSearch } from './getLogLevelFromSearch'\n\nexport enum LogLevel {\n VERBOSE,\n DEBUG,\n INFO,\n WARN,\n ERROR,\n NONE,\n}\n\nexport interface LogEvent {\n readonly messages: any[]\n readonly target: LogTarget\n readonly level: LogLevel\n}\n\nexport interface LogEventMap {\n readonly log: LogEvent\n}\n\n/**\n * The interface for a basic logger implementation.\n */\nexport interface Logger extends ReadonlyEventHost<LogEventMap> {\n logLevel: LogLevel\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void\n}\n\nexport class LoggerImpl extends EventHostImpl<LogEventMap> implements Logger {\n get [Symbol.toStringTag](): string {\n return 'Logger'\n }\n\n constructor(public logLevel: LogLevel = LogLevel.DEBUG) {\n super()\n }\n\n log(target: LogTarget, level: LogLevel, ...messages: readonly any[]): void {\n if (level === LogLevel.NONE || level < this.logLevel) return\n this.dispatch('log', {\n level,\n messages: toJson(messages),\n target,\n })\n }\n}\n\n/**\n * A global reference to the logger.\n * @private\n */\nexport const loggerRef = globalRef<Logger>(\n () =>\n new LoggerImpl(\n // The logger is initialized to VERBOSE if vinylLogLevel=verbose is in the query string\n // Otherwise use DEBUG.\n getLogLevelFromSearch() === LogLevel.VERBOSE\n ? LogLevel.VERBOSE\n : LogLevel.DEBUG\n )\n)\n\n/**\n * Returns the current log level.\n */\nexport function getLogLevel(): LogLevel {\n return loggerRef.value.logLevel\n}\n\n/**\n * Sets the current log level.\n *\n * @param value\n */\nexport function setLogLevel(value: LogLevel): void {\n loggerRef.value.logLevel = value\n}\n\nexport function log(\n target: LogTarget,\n level: LogLevel,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, level, ...messages)\n}\n\nexport function logVerbose(\n target: LogTarget,\n ...messages: readonly any[]\n): void {\n loggerRef.value.log(target, LogLevel.VERBOSE, ...messages)\n}\n\nexport function logDebug(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.DEBUG, ...messages)\n}\n\nexport function logInfo(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.INFO, ...messages)\n}\n\nexport function logWarn(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.WARN, ...messages)\n}\n\nexport function logError(target: LogTarget, ...messages: readonly any[]): void {\n loggerRef.value.log(target, LogLevel.ERROR, ...messages)\n}\n\nconst strToLogLevel: Record<string, LogLevel> = {\n verbose: LogLevel.VERBOSE,\n debug: LogLevel.DEBUG,\n info: LogLevel.INFO,\n warn: LogLevel.WARN,\n error: LogLevel.ERROR,\n none: LogLevel.NONE,\n} as const\n\n/**\n * From a case-insensitive string, returns the log level.\n * Possible values match to the keys in {@link LogLevel}.\n *\n * @param str\n */\nexport function parseLogLevel(str: string): LogLevel | null {\n return strToLogLevel[str.toLowerCase()] ?? null\n}\n\nconst logLevelToString: Record<LogLevel, string> = {\n [LogLevel.VERBOSE]: 'verbose',\n [LogLevel.DEBUG]: 'debug',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error',\n [LogLevel.NONE]: 'none',\n} as const\n\n/**\n * Returns the log level as a lowercase string.\n * E.g. stringifyLogLevel(LogLevel.DEBUG) returns 'debug'\n */\nexport function stringifyLogLevel(logLevel: LogLevel): string {\n return logLevelToString[logLevel]\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Array views of a data buffer.\n */\nexport type TypedArray =\n | Float32Array\n | Float64Array\n | Int16Array\n | Int32Array\n | Int8Array\n | Uint16Array\n | Uint32Array\n | Uint8Array\n | Uint8ClampedArray\n\n/**\n * Creates a new typed array with identical contents as the source.\n *\n * @param array\n */\nexport function cloneTypedArray<T extends TypedArray>(array: T): T {\n // typed array slice() is not supported on Comcast OTT device.\n return new (array.constructor as new (array: T) => T)(array)\n}\n\nconst typedArrayTypes = [\n Float32Array,\n Float64Array,\n Int16Array,\n Int32Array,\n Int8Array,\n Uint16Array,\n Uint32Array,\n Uint8Array,\n Uint8ClampedArray,\n]\n\n/**\n * Returns true if the given value is an instance of one of the typed array types.\n *\n * @param value\n */\nexport function isTypedArray(value: any): value is TypedArray {\n return typedArrayTypes.some((type) => value instanceof type)\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Returns the union of two sets. That is, the unique elements of A and B.\n *\n * @param a\n * @param b\n * @return Returns a new Set `A \u222A B`\n */\nexport function union<T, U>(a: ReadonlySet<T>, b: ReadonlySet<U>): Set<T | U> {\n return new Set([...a, ...b])\n}\n\n/**\n * Returns the set difference of A and B. That is, the elements of A that are not in B.\n *\n * @param a\n * @param b\n * @return Returns a new Set that is `A \\ B`\n */\nexport function diff<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): Set<T> {\n const out: Set<T> = new Set()\n a.forEach((e) => {\n if (!b.has(e)) out.add(e)\n })\n return out\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { IllegalArgumentError } from '../../error/IllegalArgumentError'\nimport type { TypedArray } from '../collection/typedArray'\nimport { cloneTypedArray, isTypedArray } from '../collection/typedArray'\nimport { union } from '../set/set'\nimport { substitute } from '../string/string'\nimport { ownKeys, isPlainObject } from './object'\nimport { ReportableError } from '../../error/ReportableError'\nimport { type Cloneable, isCloneable } from '../../core/cloneable'\n\nconst locale = {\n cyclicRefError: 'Cyclic reference found at: {path}',\n mergeReferenceError: `No merge rule found at {path} for \"{source}\" and reference copy not allowed`,\n} as const\n\n/**\n * Concatenates multiple arrays together where each element is deeply cloned.\n */\nexport function mergeDeep<T extends Array<any>>(\n sources: readonly T[],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep clones the given object.\n */\nexport function mergeDeep<T>(\n sources: readonly [T],\n options?: Partial<MergeOptions>\n): T\n\n/**\n * Deep merges the two objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B>(\n sources: readonly [A, B],\n options?: Partial<MergeOptions>\n): A & B\n\n/**\n * Deep merges the three objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C>(\n sources: readonly [A, B, C],\n options?: Partial<MergeOptions>\n): A & B & C\n\n/**\n * Deep merges the four objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D>(\n sources: readonly [A, B, C, D],\n options?: Partial<MergeOptions>\n): A & B & C & D\n\n/**\n * Deep merges the five objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E>(\n sources: readonly [A, B, C, D, E],\n options?: Partial<MergeOptions>\n): A & B & C & D & E\n\n/**\n * Deep merges the six objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep<A, B, C, D, E, F>(\n sources: readonly [A, B, C, D, E, F],\n options?: Partial<MergeOptions>\n): A & B & C & D & E & F\n\n/**\n * Deep merges all objects.\n * If common keys are both arrays, they will be concatenated, if common keys are both objects, they\n * will be merged. Incompatible types, e.g. an object and an array will use the later source.\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any\n\n/**\n * Recursively copies the values of all the enumerable own properties from one or two source\n * objects to a new object.\n * Arrays will be concatenated.\n *\n * @param sources One or more source objects from which to copy properties. A single source\n * provided will return a deep clone. Incompatible objects, for example given a number and an\n * array, will return a clone of the last argument.\n * @param options\n * @see merge\n */\nexport function mergeDeep(\n sources: readonly any[],\n options?: Partial<MergeOptions>\n): any {\n if (!sources.length) return undefined\n const finalOpts: MergeOptions = {\n ...defaultMergeOptions,\n ...options,\n }\n const stack = new PropStack()\n const n = sources.length\n\n if (n === 1)\n // Clone the single element.\n return _mergeDeep(undefined, sources[0], stack, 0, finalOpts)\n // Initial accumulator:\n let out = _mergeDeep(sources[0], sources[1], stack, 1, finalOpts)\n for (let i = 2; i < n; i++) {\n out = _mergeDeep(out, sources[i], stack, i, finalOpts)\n }\n return out\n}\n\n/**\n * Merge options defines the behavior for {@link mergeDeep}.\n * See the {@link defaultMergeOptions} for defaults that will be used if any merge options are\n * omitted.\n */\nexport interface MergeOptions {\n /**\n * If an object does not pass any of the rules, if this is true (default) the reference will be\n * copied. If false, a {@link MergeReferenceError} will be thrown.\n * This only applies to objects, not functions or primitives.\n */\n readonly allowReferenceCopy: boolean\n\n /**\n * The first merge rule where the second source object matches will be used.\n * Rules are only checked for values that have a typeof value of 'object'\n * If the first object does not pass the match, undefined will be passed to sourceA and the\n * rule is expected to return a clone of sourceB.\n * If no rules match, the value will be copied by reference unless `allowReferenceCopy` is\n * false, in which case, a {@link MergeReferenceError} will be thrown.\n */\n readonly rules: readonly MergeRule<any>[]\n}\n\n/**\n * A merge function to be provided to merge rules.\n */\nexport type MergeCallback<T = any> = (\n /**\n * The first like object to merge, or undefined. If undefined is provided, a\n * clone of sourceB is expected to be returned. If defined, this object is guaranteed to have\n * passed {@link MergeRule.matches}\n */\n sourceA: T | undefined,\n\n /**\n * The second object to merge or clone.\n */\n sourceB: T,\n\n /**\n * The identifier to be used in error reporting.\n */\n prop: string | number\n) => T\n\nexport interface MergeRule<T> {\n /**\n * Returns true if this MergeRule should be applied for the given object.\n * @param object\n */\n readonly matches: (object: any) => object is T\n\n /**\n * Merges the two sources.\n * @param sourceA May be undefined, the first object to merge.\n * @param sourceB The second object to merge or clone if sourceA is undefined.\n * @param merge This callback may be used to merge or clone sub-properties.\n */\n readonly merge: (\n sourceA: T | undefined,\n sourceB: T,\n merge: MergeCallback\n ) => T\n}\n\n/**\n * A stack of the current property recursion.\n * PropStack has two purposes, it provides the current property path in the node traversal and\n * ensures that nodes do not cyclically reference themselves.\n */\nclass PropStack {\n /**\n * Object references for sourceA.\n */\n private refsA = new Set<any>()\n\n /**\n * Object references for sourceB.\n */\n private refsB = new Set<any>()\n private propStack: [any, any, keyof any | undefined][] = []\n\n /**\n * The property stack, joined by .\n */\n get currentPath(): string {\n return this.propStack\n .map((e) => e[2])\n .filter((e) => e != null)\n .join('.')\n }\n\n push(sourceA: any, sourceB: any, prop?: keyof any) {\n this.propStack.push([sourceA, sourceB, prop])\n this.addRef(this.refsA, sourceA)\n this.addRef(this.refsB, sourceB)\n }\n\n pop() {\n const last = this.propStack.pop()!\n this.refsA.delete(last[0])\n this.refsB.delete(last[1])\n }\n\n private addRef(refSet: Set<any>, source: any) {\n if (typeof source !== 'object') return\n if (refSet.has(source)) {\n throw new IllegalArgumentError(\n substitute(locale.cyclicRefError, { path: this.currentPath })\n )\n }\n refSet.add(source)\n }\n}\n\nfunction _mergeDeep<T>(\n sourceA: T | undefined,\n sourceB: T,\n propStack: PropStack,\n prop: keyof any | undefined,\n options: MergeOptions\n): T {\n if (typeof sourceB !== 'object' || sourceB === null) return sourceB\n\n const merge: MergeCallback = (sourceA, sourceB, prop) => {\n return _mergeDeep(sourceA, sourceB, propStack, prop, options)\n }\n for (const rule of options.rules) {\n if (rule.matches(sourceB)) {\n propStack.push(sourceA, sourceB, prop)\n const result = rule.merge(\n rule.matches(sourceA) ? sourceA : undefined,\n sourceB,\n merge\n )\n propStack.pop()\n return result\n }\n }\n if (!options.allowReferenceCopy) {\n // push before throwing to get the full currentPath:\n propStack.push(sourceA, sourceB, prop)\n throw new MergeReferenceError(propStack.currentPath, sourceB)\n }\n return sourceB\n}\n\nexport class MergeReferenceError extends ReportableError {\n constructor(propPath: string, source: any) {\n super(\n substitute(locale.mergeReferenceError, {\n path: propPath,\n source,\n })\n )\n Object.setPrototypeOf(this, MergeReferenceError.prototype)\n }\n}\n\n/**\n * Cloneable objects are not expected to be mergeable, but should be cloned.\n */\nexport const cloneableMergeRule: MergeRule<Cloneable<any>> = {\n matches(object: any): object is Cloneable<any> {\n return isCloneable(object)\n },\n\n merge(\n _1: Cloneable<any> | undefined,\n sourceB: Cloneable<any>,\n _2: MergeCallback\n ): Cloneable<any> {\n return sourceB.clone()\n },\n}\n\nexport const arrayMergeRule: MergeRule<any[]> = {\n matches(object: any): object is any[] {\n return Array.isArray(object)\n },\n\n merge(\n sourceA: any[] | undefined,\n sourceB: any[],\n merge: MergeCallback\n ): any[] {\n const out = []\n if (sourceA) {\n for (const element of sourceA) {\n out.push(merge(undefined, element, out.length))\n }\n }\n for (const element of sourceB) {\n out.push(merge(undefined, element, out.length))\n }\n return out\n },\n} as const\n\nexport const plainObjectMergeRule: MergeRule<Record<any, any>> = {\n matches(object: any): object is Record<any, any> {\n return isPlainObject(object)\n },\n\n merge(\n sourceA: Record<any, any> | undefined,\n sourceB: Record<any, any>,\n merge: MergeCallback\n ): Record<any, any> {\n const out: any = {}\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of union(ownKeys(sourceA), ownKeys(sourceB))) {\n if (sourceA && key in sourceB && key in sourceA) {\n out[key] = merge(sourceA[key], sourceB[key], key)\n } else if (sourceA && key in sourceA) {\n out[key] = merge(undefined, sourceA[key], key)\n } else {\n out[key] = merge(undefined, sourceB[key], key)\n }\n }\n return out\n },\n} as const\n\nexport const regexpMergeRule: MergeRule<RegExp> = {\n matches(object: any): object is RegExp {\n return object instanceof RegExp\n },\n merge(_1: RegExp | undefined, sourceB: RegExp, _2: MergeCallback): RegExp {\n // Clone the regex; they are stateful.\n return new RegExp(sourceB.source, sourceB.flags)\n },\n} as const\n\nexport const dateMergeRule: MergeRule<Date> = {\n matches(object: any): object is Date {\n return object instanceof Date\n },\n merge(_1: Date | undefined, sourceB: Date, _2: MergeCallback): Date {\n return new Date(sourceB.getTime())\n },\n} as const\n\nexport const mapMergeRule: MergeRule<Map<any, any>> = {\n matches(object: any): object is Map<any, any> {\n return object instanceof Map\n },\n merge(\n sourceA: Map<any, any> | undefined,\n sourceB: Map<any, any>,\n merge: MergeCallback\n ): Map<any, any> {\n const out = new Map()\n // Iterate over the unique set of the union of keys between the two objects.\n for (const key of new Set([\n ...(sourceA?.keys() ?? []),\n ...sourceB.keys(),\n ])) {\n if (sourceB.has(key) && sourceA?.has(key)) {\n out.set(key, merge(sourceA.get(key), sourceB.get(key), key))\n } else if (sourceA?.has(key)) {\n out.set(key, merge(undefined, sourceA.get(key), key))\n } else {\n out.set(key, merge(undefined, sourceB.get(key), key))\n }\n }\n return out\n },\n} as const\n\nexport const setMergeRule: MergeRule<Set<any>> = {\n matches(object: any): object is Set<any> {\n return object instanceof Set\n },\n merge(\n sourceA: Set<any> | undefined,\n sourceB: Set<any>,\n merge: MergeCallback\n ): Set<any> {\n return new Set(\n [...(sourceA?.values() ?? []), ...sourceB.values()].map(\n (element, index) => {\n return merge(undefined, element, index)\n }\n )\n )\n },\n} as const\n\n/**\n * Typed arrays will not concatenate by default like arrays. Typed arrays generally represent data,\n * not configuration, and the more reasonable default is to clone, not concatenate.\n */\nexport const typedArrayMergeRule: MergeRule<TypedArray> = {\n matches(object: any): object is TypedArray {\n return isTypedArray(object)\n },\n merge(\n _1: TypedArray | undefined,\n sourceB: TypedArray,\n _2: MergeCallback\n ): TypedArray {\n return cloneTypedArray(sourceB)\n },\n} as const\n\nexport const urlMergeRule: MergeRule<URL> = {\n matches(object: any): object is URL {\n return object instanceof URL\n },\n merge(_1: URL | undefined, sourceB: URL, _2: MergeCallback): URL {\n return new URL(sourceB.toString())\n },\n} as const\n\n/**\n * The default merge options provide rules for merging arrays, plain objects, RegExp, Date,\n * Map, Set, and TypedArray.\n */\nexport const defaultMergeOptions: MergeOptions = {\n allowReferenceCopy: true,\n rules: [\n cloneableMergeRule,\n arrayMergeRule,\n plainObjectMergeRule,\n regexpMergeRule,\n dateMergeRule,\n mapMergeRule,\n setMergeRule,\n typedArrayMergeRule,\n urlMergeRule,\n ],\n} as const\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Matches a URI scheme prefix (e.g. `https:`, `data:`, `blob:`), per RFC 3986:\n * an ASCII letter followed by letters, digits, `+`, `-`, or `.`, then `:`.\n */\nconst SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i\n\n/**\n * Resolves a relative URI against a base URL using string manipulation,\n * avoiding the overhead of constructing `URL` objects.\n *\n * Handles the same cases as `new URL(relative, base)`:\n * - Absolute URIs (with any scheme, including `data:` / `blob:`) are returned\n * as-is.\n * - Protocol-relative URIs (`//host/path`) inherit the base scheme.\n * - Absolute paths (`/path`) replace the base path.\n * - Relative paths are resolved against the base directory.\n *\n * @param relative The relative (or absolute) URI to resolve.\n * @param base The base URL string to resolve against.\n * @returns A resolved absolute URL string.\n */\nexport function resolveUrl(relative: string, base: string): string {\n // Absolute URI \u2014 has a scheme (http:, https:, data:, blob:, ...).\n if (SCHEME_RE.test(relative)) return relative\n\n // Protocol-relative.\n if (relative.startsWith('//')) {\n const schemeEnd = base.indexOf('://')\n return base.substring(0, schemeEnd + 1) + relative\n }\n\n const schemeEnd = base.indexOf('://') + 3\n const pathStart = base.indexOf('/', schemeEnd)\n const origin = pathStart === -1 ? base : base.substring(0, pathStart)\n\n // Absolute path.\n if (relative.startsWith('/')) return origin + relative\n\n // Empty relative \u2014 return base as-is.\n if (relative === '') return base\n\n // Relative path \u2014 resolve against base directory.\n const basePath = pathStart === -1 ? '/' : base.substring(pathStart)\n const lastSlash = basePath.lastIndexOf('/')\n const dir = basePath.substring(0, lastSlash + 1)\n\n return origin + resolveDots(dir + relative)\n}\n\n/**\n * Extracts the hostname from an absolute URL string.\n *\n * @param url An absolute URL string (e.g. `https://example.com:8080/path`).\n * @returns The hostname (e.g. `example.com`).\n */\nexport function getHostname(url: string): string {\n const start = url.indexOf('://') + 3\n let end = url.indexOf('/', start)\n if (end === -1) end = url.length\n const hostPort = url.substring(start, end)\n const colon = hostPort.indexOf(':')\n return colon === -1 ? hostPort : hostPort.substring(0, colon)\n}\n\n/**\n * Resolves `.` and `..` segments in a path.\n */\nfunction resolveDots(path: string): string {\n // Fast path: no dots to resolve.\n if (path.indexOf('.') === -1) return path\n\n const parts = path.split('/')\n const out: string[] = []\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i]\n if (p === '..') {\n // Don't pop past root.\n if (out.length > 1) out.pop()\n } else if (p !== '.') {\n out.push(p)\n }\n }\n return out.join('/')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n//-------------------------------------------------------------------------\n// A Benchmarking utility for testing and comparing performance.\n//-------------------------------------------------------------------------\n\n/**\n * Gets the current high resolution timestamp, platform dependent.\n */\nlet now: () => number\nif (\n typeof window !== 'undefined' &&\n typeof window.performance !== 'undefined' &&\n typeof window.performance.now !== 'undefined'\n) {\n now = () => window.performance.now()\n} else if (\n typeof self !== 'undefined' &&\n typeof self.performance !== 'undefined' &&\n typeof self.performance.now !== 'undefined'\n) {\n now = () => self.performance.now()\n} else {\n now = () => Date.now()\n}\n\nexport interface BenchMarkOptions {\n /**\n * The amount of time to run the executor before beginning measurement (in seconds).\n */\n readonly warmupTime: number\n\n /**\n * When time has elapsed past this duration during a cycle (in seconds), there will be no\n * operations.\n * The cycle will end when `maxCycleDuration` has been reached.\n */\n readonly maxCycleDuration: number\n\n /**\n * The number of trials to run.\n */\n readonly cycles: number\n}\n\nexport interface CycleResults {\n /**\n * The number of seconds the cycle ran.\n */\n readonly duration: number\n\n /**\n * The number of completed executions.\n */\n readonly ops: number\n}\n\nexport class BenchmarkRunResults {\n readonly cycleResults: number[] = []\n\n private _totalSamples = 0\n get totalSamples(): number {\n return this._totalSamples\n }\n\n get cycleResultsNoOutliers(): number[] {\n const sD = this.standardDeviation\n const avg = average(this.cycleResults)\n return this.cycleResults.filter((e) => {\n const zScore = (avg - e) / sD\n return Math.abs(zScore) < 3\n })\n }\n\n /**\n * Returns the mean ops per second minus outliers of greater than 3 standard deviations.\n */\n get meanOpsPerSec(): number {\n return average(this.cycleResultsNoOutliers)\n }\n\n get standardDeviation(): number {\n return standardDeviation(this.cycleResults)\n }\n\n get variance(): number {\n return this.standardDeviation / this.meanOpsPerSec\n }\n\n /**\n * Returns the mean ops / s \u00B1 variance % as a string.\n */\n get meanOpsStr(): string {\n const mean = this.meanOpsPerSec.toLocaleString(undefined, {\n maximumSignificantDigits: 4,\n })\n const variance = this.variance.toLocaleString(undefined, {\n style: 'percent',\n })\n return `${mean} \u00B1${variance}`\n }\n\n constructor(readonly name: string) {}\n\n add(cycle: CycleResults) {\n const opsPerSecond = cycle.ops / cycle.duration\n let index = this.cycleResults.findIndex((value) => opsPerSecond < value)\n if (index < 0) index = this.cycleResults.length\n this.cycleResults.splice(index, 0, opsPerSecond)\n this._totalSamples += cycle.ops\n }\n\n toString(): string {\n if (!this.cycleResults.length) return 'No results'\n return `${this.name}: ${this.meanOpsStr} ops/sec`\n }\n}\n\nexport class RunResultsComparison {\n /**\n * Sorted by median ops/s from slowest to fastest.\n */\n readonly results: BenchmarkRunResults[]\n\n constructor(\n readonly name: string,\n results: BenchmarkRunResults[]\n ) {\n this.results = results.sort((a, b) => {\n return a.meanOpsPerSec - b.meanOpsPerSec\n })\n }\n\n logToTable(): void {\n const r = this.results.map((run) => {\n const variance = run.variance.toLocaleString(undefined, {\n style: 'percent',\n })\n const mean = run.meanOpsPerSec.toLocaleString(undefined, {\n maximumSignificantDigits: 4,\n })\n\n return {\n Name: run.name,\n Mean: `${mean} \u00B1${variance}`,\n Samples: run.totalSamples,\n Compare: this.runComparisonToString(run),\n }\n })\n // Use the names as the index.\n const table = r.reduce<any>((acc, { Name, ...x }) => {\n acc[Name] = x\n return acc\n }, {})\n console.log('\\n' + this.name)\n console.table(table)\n }\n\n runComparisonToString(run: BenchmarkRunResults): string {\n const baseline = this.results[0]?.meanOpsPerSec ?? 0\n const fasterPercent = run.meanOpsPerSec / baseline - 1\n return fasterPercent < 0.01\n ? '-'\n : fasterPercent.toLocaleString(undefined, {\n style: 'percent',\n }) + ' faster'\n }\n}\n\nexport function compareResults(\n name: string,\n ...results: BenchmarkRunResults[]\n): RunResultsComparison {\n return new RunResultsComparison(name, results)\n}\n\nconst defaultBenchmarkOptions: BenchMarkOptions = {\n warmupTime: 0.5,\n maxCycleDuration: 0.5,\n cycles: 9,\n} as const\n\nexport class Benchmark {\n private static semaphore: Promise<any> = nextFrame()\n\n private readonly options: BenchMarkOptions\n\n /**\n * Constructs a new Benchmark.\n *\n * @param name The name of the benchmark, to be used when logging.\n * @param executor The method to execute and measure. If this method returns a promise, the\n * promise will be awaited. The executor should either always return a promise, or never.\n * @param options Optional configuration for the benchmark.\n */\n constructor(\n readonly name: string,\n readonly executor: () => any,\n options?: Partial<BenchMarkOptions>\n ) {\n this.options = { ...defaultBenchmarkOptions, ...options }\n }\n\n async run(): Promise<BenchmarkRunResults> {\n const opts = this.options\n // Wait for any currently running work to complete.\n await Benchmark.semaphore\n\n const warmupTimeMs = opts.warmupTime * 1000\n const cycleStart = now()\n let isAsync = false\n do {\n const result = this.executor()\n // If the executor returns a promise, it is considered an async test and the benchmark\n // should await its result.\n isAsync = isAsync || (result && typeof result.then === 'function')\n if (isAsync) await result\n } while (now() - cycleStart < warmupTimeMs)\n const resultsPromise: Promise<BenchmarkRunResults> = (async () => {\n const results = new BenchmarkRunResults(this.name)\n for (let i = 0; i < opts.cycles; i++) {\n const cycleResults = await this.runCycle(isAsync)\n results.add(cycleResults)\n await nextFrame()\n }\n return results\n })()\n Benchmark.semaphore = resultsPromise\n return await resultsPromise\n }\n\n /**\n * Runs one cycle. A cycle will repeat the executor approximately `options.maxCycleDuration`\n * seconds.\n *\n * @param isAsync\n * @return Returns the duration (in seconds) and number of operations the cycle repeated.\n */\n private async runCycle(isAsync: boolean): Promise<CycleResults> {\n const cycleMs = this.options.maxCycleDuration * 1000\n let ops = 0\n const cycleStart = now()\n do {\n const result = this.executor()\n if (isAsync) await result\n ops++\n } while (now() - cycleStart < cycleMs)\n const duration = (now() - cycleStart) / 1000\n return {\n duration,\n ops,\n }\n }\n}\n\n/**\n * Creates and runs a benchmark, logging the result.\n *\n * @param name\n * @param executor\n * @param options\n */\nexport function benchmark(\n name: string,\n executor: () => any,\n options?: Partial<BenchMarkOptions>\n): Promise<BenchmarkRunResults> {\n const benchmark = new Benchmark(name, executor, options)\n return benchmark.run().then((results) => {\n console.log(results.toString())\n return results\n })\n}\n\n/**\n * To avoid killing the browser's frame.\n */\nfunction nextFrame(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve)\n })\n}\n\n/**\n * Returns the standard deviation of the given values.\n *\n * @param values\n */\nfunction standardDeviation(values: readonly number[]): number {\n const avg = average(values)\n const squareDiffs = values.map((value) => {\n const diff = value - avg\n return diff * diff\n })\n const avgSquareDiff = average(squareDiffs)\n return Math.sqrt(avgSquareDiff)\n}\n\n/**\n * Returns the mean/average of the given values.\n *\n * @param values\n */\nfunction average(values: readonly number[]): number {\n const sum = values.reduce((acc, value) => acc + value, 0)\n return sum / values.length\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nlet nextTestTimeoutOverridden: boolean = false\n\n/**\n * Sets the timeout for the current describe block.\n *\n * @param timeout The test timeout, in seconds.\n */\nexport function setTestTimeout(timeout: number) {\n let originalTimeout: number | null = null\n beforeEach(() => {\n originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL\n if (!nextTestTimeoutOverridden)\n jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout * 1000\n })\n\n afterEach(() => {\n if (originalTimeout) jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout\n if (nextTestTimeoutOverridden) nextTestTimeoutOverridden = false\n })\n}\n\n/**\n * Sets the timeout for the next test and only the next test,\n * overriding any value set subsequently to setTestTimeout.\n *\n * @param timeout The test timeout, in seconds.\n */\nexport function setNextTestTimeout(timeout: number) {\n nextTestTimeoutOverridden = true\n jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout * 1000\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Some tests (such as benchmarks or type expectations) have no jasmine expectations.\n */\nexport function expectNothing() {\n expect(true).toBeTruthy()\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport createSpy = jasmine.createSpy\nimport Spy = jasmine.Spy\nimport SpyAnd = jasmine.SpyAnd\nimport Calls = jasmine.Calls\nimport MatchableArgs = jasmine.MatchableArgs\n\ntype Fun = (...args: any[]) => any\n\n/**\n * A SpyFactory creates spies by member access. The spies will be named based on the key,\n * and the type interface of the Spy will match the corresponding interface function.\n */\nexport interface SpyFactory<T> {\n <K extends FunctionKeys<T>>(\n key: K\n ): T[K] extends Fun ? Spy2<NoThisType<NonNullable<T[K]>>> : never\n}\n\n/**\n * Fixes Jasmine's Spy type.\n * Jasmine's Spy interface has a call signature instead of intersecting the original function type.\n * This causes parameterized types of the call signature to be dropped.\n */\nexport type Spy2<Fn extends Fun> = Fn & {\n and: SpyAnd<Fn>\n calls: Calls<Fn>\n withArgs(...args: MatchableArgs<Fn>): Spy<Fn>\n}\n\nexport type FunctionKeys<T> = {\n [P in keyof T]: T[P] extends Fun ? P : never\n}[keyof T]\n\n/**\n * Creates a new spy factory.\n *\n * @param createFake If provided, all spies will be created with the fake implementation createFake\n * returns for the given key.\n */\nexport function createSpyFactory<T>(\n createFake?: (key: FunctionKeys<T>) => Fun\n): SpyFactory<T> {\n return (key: FunctionKeys<T>) => {\n const spy = createSpy(String(key))\n if (createFake) spy.and.callFake(createFake(key))\n return spy as any\n }\n}\n\n/**\n * Creates a Spy.\n * This is an alias to jasmine.createSpy with fixed type parameters.\n * @param key\n */\nexport function createSpy2<Fn extends Fun | undefined>(\n key: keyof any\n): Spy2<NoThisType<NonNullable<Fn>>> {\n return createSpy(String(key)) as any\n}\n\n/**\n * Replaces `this` type with `any` in a method signature.\n */\nexport type NoThisType<Fn extends Fun> =\n ReturnType<Fn> extends ThisType<any>\n ? Fn & ((...args: Parameters<Fn>) => any)\n : Fn\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/*\n * AUTO-GENERATED FILE - DO NOT EDIT\n * Generated by @amazon/vinyl-mock-generator\n */\n\n/* eslint-disable @typescript-eslint/prefer-as-const */\n/* eslint-disable @typescript-eslint/no-deprecated */\n\nimport { createSpy2 } from '../createSpyFactory'\n\nexport class MockAbortController implements AbortController {\n signal: AbortSignal = undefined as any\n\n abort = createSpy2<AbortController['abort']>('abort')\n}\n\nexport class MockAbortSignal implements AbortSignal {\n aborted: boolean = false\n onabort: ((this: AbortSignal, ev: Event) => any) | null = null\n reason: any = undefined\n\n throwIfAborted = createSpy2<AbortSignal['throwIfAborted']>('throwIfAborted')\n addEventListener =\n createSpy2<AbortSignal['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<AbortSignal['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<AbortSignal['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockAudioContext implements AudioContext {\n baseLatency: number = 0\n outputLatency: number = 0\n audioWorklet: AudioWorklet = undefined as any\n currentTime: number = 0\n destination: AudioDestinationNode = undefined as any\n listener: AudioListener = undefined as any\n onstatechange: ((this: BaseAudioContext, ev: Event) => any) | null = null\n sampleRate: number = 0\n state: AudioContextState = 'closed'\n\n close = createSpy2<AudioContext['close']>('close')\n createMediaElementSource = createSpy2<\n AudioContext['createMediaElementSource']\n >('createMediaElementSource')\n createMediaStreamDestination = createSpy2<\n AudioContext['createMediaStreamDestination']\n >('createMediaStreamDestination')\n createMediaStreamSource = createSpy2<\n AudioContext['createMediaStreamSource']\n >('createMediaStreamSource')\n getOutputTimestamp =\n createSpy2<AudioContext['getOutputTimestamp']>('getOutputTimestamp')\n resume = createSpy2<AudioContext['resume']>('resume')\n suspend = createSpy2<AudioContext['suspend']>('suspend')\n addEventListener =\n createSpy2<AudioContext['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<AudioContext['removeEventListener']>(\n 'removeEventListener'\n )\n createAnalyser =\n createSpy2<AudioContext['createAnalyser']>('createAnalyser')\n createBiquadFilter =\n createSpy2<AudioContext['createBiquadFilter']>('createBiquadFilter')\n createBuffer = createSpy2<AudioContext['createBuffer']>('createBuffer')\n createBufferSource =\n createSpy2<AudioContext['createBufferSource']>('createBufferSource')\n createChannelMerger = createSpy2<AudioContext['createChannelMerger']>(\n 'createChannelMerger'\n )\n createChannelSplitter = createSpy2<AudioContext['createChannelSplitter']>(\n 'createChannelSplitter'\n )\n createConstantSource = createSpy2<AudioContext['createConstantSource']>(\n 'createConstantSource'\n )\n createConvolver =\n createSpy2<AudioContext['createConvolver']>('createConvolver')\n createDelay = createSpy2<AudioContext['createDelay']>('createDelay')\n createDynamicsCompressor = createSpy2<\n AudioContext['createDynamicsCompressor']\n >('createDynamicsCompressor')\n createGain = createSpy2<AudioContext['createGain']>('createGain')\n createIIRFilter =\n createSpy2<AudioContext['createIIRFilter']>('createIIRFilter')\n createOscillator =\n createSpy2<AudioContext['createOscillator']>('createOscillator')\n createPanner = createSpy2<AudioContext['createPanner']>('createPanner')\n createPeriodicWave =\n createSpy2<AudioContext['createPeriodicWave']>('createPeriodicWave')\n createScriptProcessor = createSpy2<AudioContext['createScriptProcessor']>(\n 'createScriptProcessor'\n )\n createStereoPanner =\n createSpy2<AudioContext['createStereoPanner']>('createStereoPanner')\n createWaveShaper =\n createSpy2<AudioContext['createWaveShaper']>('createWaveShaper')\n decodeAudioData =\n createSpy2<AudioContext['decodeAudioData']>('decodeAudioData')\n dispatchEvent = createSpy2<AudioContext['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockCache implements Cache {\n add = createSpy2<Cache['add']>('add')\n addAll = createSpy2<Cache['addAll']>('addAll')\n delete = createSpy2<Cache['delete']>('delete')\n keys = createSpy2<Cache['keys']>('keys')\n match = createSpy2<Cache['match']>('match')\n matchAll = createSpy2<Cache['matchAll']>('matchAll')\n put = createSpy2<Cache['put']>('put')\n}\n\nexport class MockCacheStorage implements CacheStorage {\n delete = createSpy2<CacheStorage['delete']>('delete')\n has = createSpy2<CacheStorage['has']>('has')\n keys = createSpy2<CacheStorage['keys']>('keys')\n match = createSpy2<CacheStorage['match']>('match')\n open = createSpy2<CacheStorage['open']>('open')\n}\n\nexport class MockCustomEvent<T = any> implements CustomEvent<T> {\n detail: T = undefined as any\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n initCustomEvent =\n createSpy2<CustomEvent<T>['initCustomEvent']>('initCustomEvent')\n composedPath = createSpy2<CustomEvent<T>['composedPath']>('composedPath')\n initEvent = createSpy2<CustomEvent<T>['initEvent']>('initEvent')\n preventDefault =\n createSpy2<CustomEvent<T>['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n CustomEvent<T>['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<CustomEvent<T>['stopPropagation']>('stopPropagation')\n}\n\nexport class MockDocument implements Document {\n URL: string = ''\n alinkColor: string = ''\n all: HTMLAllCollection = undefined as any\n anchors: HTMLCollectionOf<HTMLAnchorElement> = undefined as any\n applets: HTMLCollection = undefined as any\n bgColor: string = ''\n body: HTMLElement = undefined as any\n characterSet: string = ''\n charset: string = ''\n compatMode: string = ''\n contentType: string = ''\n cookie: string = ''\n currentScript: HTMLOrSVGScriptElement | null = undefined as any\n defaultView: (WindowProxy & typeof globalThis) | null = undefined as any\n designMode: string = ''\n dir: string = ''\n doctype: DocumentType | null = null\n documentElement: HTMLElement = undefined as any\n documentURI: string = ''\n domain: string = ''\n embeds: HTMLCollectionOf<HTMLEmbedElement> = undefined as any\n fgColor: string = ''\n forms: HTMLCollectionOf<HTMLFormElement> = undefined as any\n fragmentDirective: FragmentDirective = undefined as any\n fullscreen: boolean = false\n fullscreenEnabled: boolean = false\n head: HTMLHeadElement = undefined as any\n hidden: boolean = false\n images: HTMLCollectionOf<HTMLImageElement> = undefined as any\n implementation: DOMImplementation = undefined as any\n inputEncoding: string = ''\n lastModified: string = ''\n linkColor: string = ''\n links: HTMLCollectionOf<HTMLAnchorElement | HTMLAreaElement> =\n undefined as any\n onfullscreenchange: ((this: Document, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Document, ev: Event) => any) | null = null\n onpointerlockchange: ((this: Document, ev: Event) => any) | null = null\n onpointerlockerror: ((this: Document, ev: Event) => any) | null = null\n onreadystatechange: ((this: Document, ev: Event) => any) | null = null\n onvisibilitychange: ((this: Document, ev: Event) => any) | null = null\n ownerDocument: null = null\n pictureInPictureEnabled: boolean = false\n plugins: HTMLCollectionOf<HTMLEmbedElement> = undefined as any\n readyState: DocumentReadyState = 'complete'\n referrer: string = ''\n rootElement: SVGSVGElement | null = null\n scripts: HTMLCollectionOf<HTMLScriptElement> = undefined as any\n scrollingElement: Element | null = null\n timeline: DocumentTimeline = undefined as any\n title: string = ''\n visibilityState: DocumentVisibilityState = 'hidden'\n vlinkColor: string = ''\n location: any = undefined\n textContent: null = null\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n activeElement: Element | null = null\n adoptedStyleSheets: CSSStyleSheet[] = []\n fullscreenElement: Element | null = null\n pictureInPictureElement: Element | null = null\n pointerLockElement: Element | null = null\n styleSheets: StyleSheetList = undefined as any\n fonts: FontFaceSet = undefined as any\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n\n adoptNode = createSpy2<Document['adoptNode']>('adoptNode')\n captureEvents = createSpy2<Document['captureEvents']>('captureEvents')\n caretPositionFromPoint = createSpy2<Document['caretPositionFromPoint']>(\n 'caretPositionFromPoint'\n )\n caretRangeFromPoint = createSpy2<Document['caretRangeFromPoint']>(\n 'caretRangeFromPoint'\n )\n clear = createSpy2<Document['clear']>('clear')\n close = createSpy2<Document['close']>('close')\n createAttribute = createSpy2<Document['createAttribute']>('createAttribute')\n createAttributeNS =\n createSpy2<Document['createAttributeNS']>('createAttributeNS')\n createCDATASection =\n createSpy2<Document['createCDATASection']>('createCDATASection')\n createComment = createSpy2<Document['createComment']>('createComment')\n createDocumentFragment = createSpy2<Document['createDocumentFragment']>(\n 'createDocumentFragment'\n )\n createElement = createSpy2<Document['createElement']>('createElement')\n createElementNS = createSpy2<Document['createElementNS']>('createElementNS')\n createEvent = createSpy2<Document['createEvent']>('createEvent')\n createNodeIterator =\n createSpy2<Document['createNodeIterator']>('createNodeIterator')\n createProcessingInstruction = createSpy2<\n Document['createProcessingInstruction']\n >('createProcessingInstruction')\n createRange = createSpy2<Document['createRange']>('createRange')\n createTextNode = createSpy2<Document['createTextNode']>('createTextNode')\n createTreeWalker =\n createSpy2<Document['createTreeWalker']>('createTreeWalker')\n execCommand = createSpy2<Document['execCommand']>('execCommand')\n exitFullscreen = createSpy2<Document['exitFullscreen']>('exitFullscreen')\n exitPictureInPicture = createSpy2<Document['exitPictureInPicture']>(\n 'exitPictureInPicture'\n )\n exitPointerLock = createSpy2<Document['exitPointerLock']>('exitPointerLock')\n getElementById = createSpy2<Document['getElementById']>('getElementById')\n getElementsByClassName = createSpy2<Document['getElementsByClassName']>(\n 'getElementsByClassName'\n )\n getElementsByName =\n createSpy2<Document['getElementsByName']>('getElementsByName')\n getElementsByTagName = createSpy2<Document['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<Document['getElementsByTagNameNS']>(\n 'getElementsByTagNameNS'\n )\n getSelection = createSpy2<Document['getSelection']>('getSelection')\n hasFocus = createSpy2<Document['hasFocus']>('hasFocus')\n hasStorageAccess =\n createSpy2<Document['hasStorageAccess']>('hasStorageAccess')\n importNode = createSpy2<Document['importNode']>('importNode')\n open = createSpy2<Document['open']>('open')\n queryCommandEnabled = createSpy2<Document['queryCommandEnabled']>(\n 'queryCommandEnabled'\n )\n queryCommandIndeterm = createSpy2<Document['queryCommandIndeterm']>(\n 'queryCommandIndeterm'\n )\n queryCommandState =\n createSpy2<Document['queryCommandState']>('queryCommandState')\n queryCommandSupported = createSpy2<Document['queryCommandSupported']>(\n 'queryCommandSupported'\n )\n queryCommandValue =\n createSpy2<Document['queryCommandValue']>('queryCommandValue')\n releaseEvents = createSpy2<Document['releaseEvents']>('releaseEvents')\n requestStorageAccess = createSpy2<Document['requestStorageAccess']>(\n 'requestStorageAccess'\n )\n startViewTransition = createSpy2<Document['startViewTransition']>(\n 'startViewTransition'\n )\n write = createSpy2<Document['write']>('write')\n writeln = createSpy2<Document['writeln']>('writeln')\n addEventListener =\n createSpy2<Document['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<Document['removeEventListener']>(\n 'removeEventListener'\n )\n appendChild = createSpy2<Document['appendChild']>('appendChild')\n cloneNode = createSpy2<Document['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Document['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Document['contains']>('contains')\n getRootNode = createSpy2<Document['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Document['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Document['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Document['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Document['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Document['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Document['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Document['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Document['normalize']>('normalize')\n removeChild = createSpy2<Document['removeChild']>('removeChild')\n replaceChild = createSpy2<Document['replaceChild']>('replaceChild')\n elementFromPoint =\n createSpy2<Document['elementFromPoint']>('elementFromPoint')\n elementsFromPoint =\n createSpy2<Document['elementsFromPoint']>('elementsFromPoint')\n getAnimations = createSpy2<Document['getAnimations']>('getAnimations')\n append = createSpy2<Document['append']>('append')\n prepend = createSpy2<Document['prepend']>('prepend')\n querySelector = createSpy2<Document['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<Document['querySelectorAll']>('querySelectorAll')\n replaceChildren = createSpy2<Document['replaceChildren']>('replaceChildren')\n createExpression =\n createSpy2<Document['createExpression']>('createExpression')\n createNSResolver =\n createSpy2<Document['createNSResolver']>('createNSResolver')\n evaluate = createSpy2<Document['evaluate']>('evaluate')\n dispatchEvent = createSpy2<Document['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockErrorEvent implements ErrorEvent {\n colno: number = 0\n error: any = undefined\n filename: string = ''\n lineno: number = 0\n message: string = ''\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<ErrorEvent['composedPath']>('composedPath')\n initEvent = createSpy2<ErrorEvent['initEvent']>('initEvent')\n preventDefault = createSpy2<ErrorEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n ErrorEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<ErrorEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockEvent implements Event {\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<Event['composedPath']>('composedPath')\n initEvent = createSpy2<Event['initEvent']>('initEvent')\n preventDefault = createSpy2<Event['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<Event['stopImmediatePropagation']>(\n 'stopImmediatePropagation'\n )\n stopPropagation = createSpy2<Event['stopPropagation']>('stopPropagation')\n}\n\nexport class MockEventTarget implements EventTarget {\n addEventListener =\n createSpy2<EventTarget['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<EventTarget['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<EventTarget['removeEventListener']>(\n 'removeEventListener'\n )\n}\n\nexport class MockHTMLAudioElement implements HTMLAudioElement {\n autoplay: boolean = false\n buffered: TimeRanges = undefined as any\n controls: boolean = false\n crossOrigin: string | null = ''\n currentSrc: string = ''\n currentTime: number = 0\n defaultMuted: boolean = false\n defaultPlaybackRate: number = 0\n disableRemotePlayback: boolean = false\n duration: number = 0\n ended: boolean = false\n error: MediaError | null = null\n loop: boolean = false\n mediaKeys: MediaKeys | null = null\n muted: boolean = false\n networkState: number = 0\n onencrypted:\n ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null = null\n onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null = null\n paused: boolean = false\n playbackRate: number = 0\n played: TimeRanges = undefined as any\n preload: 'none' | 'metadata' | 'auto' | '' = 'none'\n preservesPitch: boolean = false\n readyState: number = 0\n remote: RemotePlayback = undefined as any\n seekable: TimeRanges = undefined as any\n seeking: boolean = false\n sinkId: string = ''\n src: string = ''\n srcObject: MediaProvider | null = undefined as any\n textTracks: TextTrackList = undefined as any\n volume: number = 0\n NETWORK_EMPTY: 0 = 0\n NETWORK_IDLE: 1 = 1\n NETWORK_LOADING: 2 = 2\n NETWORK_NO_SOURCE: 3 = 3\n HAVE_NOTHING: 0 = 0\n HAVE_METADATA: 1 = 1\n HAVE_CURRENT_DATA: 2 = 2\n HAVE_FUTURE_DATA: 3 = 3\n HAVE_ENOUGH_DATA: 4 = 4\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addEventListener =\n createSpy2<HTMLAudioElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLAudioElement['removeEventListener']>(\n 'removeEventListener'\n )\n addTextTrack = createSpy2<HTMLAudioElement['addTextTrack']>('addTextTrack')\n canPlayType = createSpy2<HTMLAudioElement['canPlayType']>('canPlayType')\n fastSeek = createSpy2<HTMLAudioElement['fastSeek']>('fastSeek')\n load = createSpy2<HTMLAudioElement['load']>('load')\n pause = createSpy2<HTMLAudioElement['pause']>('pause')\n play = createSpy2<HTMLAudioElement['play']>('play')\n setMediaKeys = createSpy2<HTMLAudioElement['setMediaKeys']>('setMediaKeys')\n setSinkId = createSpy2<HTMLAudioElement['setSinkId']>('setSinkId')\n attachInternals =\n createSpy2<HTMLAudioElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLAudioElement['click']>('click')\n hidePopover = createSpy2<HTMLAudioElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLAudioElement['showPopover']>('showPopover')\n togglePopover =\n createSpy2<HTMLAudioElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLAudioElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLAudioElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLAudioElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLAudioElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLAudioElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLAudioElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLAudioElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLAudioElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLAudioElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<\n HTMLAudioElement['getBoundingClientRect']\n >('getBoundingClientRect')\n getClientRects =\n createSpy2<HTMLAudioElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLAudioElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLAudioElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLAudioElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLAudioElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLAudioElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLAudioElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes =\n createSpy2<HTMLAudioElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLAudioElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<\n HTMLAudioElement['insertAdjacentElement']\n >('insertAdjacentElement')\n insertAdjacentHTML =\n createSpy2<HTMLAudioElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLAudioElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLAudioElement['matches']>('matches')\n releasePointerCapture = createSpy2<\n HTMLAudioElement['releasePointerCapture']\n >('releasePointerCapture')\n removeAttribute =\n createSpy2<HTMLAudioElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLAudioElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLAudioElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLAudioElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLAudioElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLAudioElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLAudioElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLAudioElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLAudioElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLAudioElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLAudioElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLAudioElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLAudioElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe =\n createSpy2<HTMLAudioElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLAudioElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLAudioElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<\n HTMLAudioElement['webkitMatchesSelector']\n >('webkitMatchesSelector')\n blur = createSpy2<HTMLAudioElement['blur']>('blur')\n focus = createSpy2<HTMLAudioElement['focus']>('focus')\n appendChild = createSpy2<HTMLAudioElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLAudioElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLAudioElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLAudioElement['contains']>('contains')\n getRootNode = createSpy2<HTMLAudioElement['getRootNode']>('getRootNode')\n hasChildNodes =\n createSpy2<HTMLAudioElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLAudioElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLAudioElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLAudioElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLAudioElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLAudioElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLAudioElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLAudioElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLAudioElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLAudioElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLAudioElement['animate']>('animate')\n getAnimations =\n createSpy2<HTMLAudioElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLAudioElement['after']>('after')\n before = createSpy2<HTMLAudioElement['before']>('before')\n remove = createSpy2<HTMLAudioElement['remove']>('remove')\n replaceWith = createSpy2<HTMLAudioElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLAudioElement['append']>('append')\n prepend = createSpy2<HTMLAudioElement['prepend']>('prepend')\n querySelector =\n createSpy2<HTMLAudioElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLAudioElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLAudioElement['replaceChildren']>('replaceChildren')\n dispatchEvent =\n createSpy2<HTMLAudioElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockHTMLDivElement implements HTMLDivElement {\n align: string = ''\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addEventListener =\n createSpy2<HTMLDivElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLDivElement['removeEventListener']>(\n 'removeEventListener'\n )\n attachInternals =\n createSpy2<HTMLDivElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLDivElement['click']>('click')\n hidePopover = createSpy2<HTMLDivElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLDivElement['showPopover']>('showPopover')\n togglePopover = createSpy2<HTMLDivElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLDivElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLDivElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLDivElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLDivElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLDivElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLDivElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLDivElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLDivElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLDivElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<HTMLDivElement['getBoundingClientRect']>(\n 'getBoundingClientRect'\n )\n getClientRects =\n createSpy2<HTMLDivElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLDivElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLDivElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLDivElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLDivElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLDivElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLDivElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes = createSpy2<HTMLDivElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLDivElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<HTMLDivElement['insertAdjacentElement']>(\n 'insertAdjacentElement'\n )\n insertAdjacentHTML =\n createSpy2<HTMLDivElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLDivElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLDivElement['matches']>('matches')\n releasePointerCapture = createSpy2<HTMLDivElement['releasePointerCapture']>(\n 'releasePointerCapture'\n )\n removeAttribute =\n createSpy2<HTMLDivElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLDivElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLDivElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLDivElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLDivElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLDivElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLDivElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLDivElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLDivElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLDivElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLDivElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLDivElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLDivElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe = createSpy2<HTMLDivElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLDivElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLDivElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<HTMLDivElement['webkitMatchesSelector']>(\n 'webkitMatchesSelector'\n )\n blur = createSpy2<HTMLDivElement['blur']>('blur')\n focus = createSpy2<HTMLDivElement['focus']>('focus')\n appendChild = createSpy2<HTMLDivElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLDivElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLDivElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLDivElement['contains']>('contains')\n getRootNode = createSpy2<HTMLDivElement['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<HTMLDivElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLDivElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLDivElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLDivElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLDivElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLDivElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLDivElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLDivElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLDivElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLDivElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLDivElement['animate']>('animate')\n getAnimations = createSpy2<HTMLDivElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLDivElement['after']>('after')\n before = createSpy2<HTMLDivElement['before']>('before')\n remove = createSpy2<HTMLDivElement['remove']>('remove')\n replaceWith = createSpy2<HTMLDivElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLDivElement['append']>('append')\n prepend = createSpy2<HTMLDivElement['prepend']>('prepend')\n querySelector = createSpy2<HTMLDivElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLDivElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLDivElement['replaceChildren']>('replaceChildren')\n dispatchEvent = createSpy2<HTMLDivElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockHTMLMediaElement implements HTMLMediaElement {\n autoplay: boolean = false\n buffered: TimeRanges = undefined as any\n controls: boolean = false\n crossOrigin: string | null = ''\n currentSrc: string = ''\n currentTime: number = 0\n defaultMuted: boolean = false\n defaultPlaybackRate: number = 0\n disableRemotePlayback: boolean = false\n duration: number = 0\n ended: boolean = false\n error: MediaError | null = null\n loop: boolean = false\n mediaKeys: MediaKeys | null = null\n muted: boolean = false\n networkState: number = 0\n onencrypted:\n ((this: HTMLMediaElement, ev: MediaEncryptedEvent) => any) | null = null\n onwaitingforkey: ((this: HTMLMediaElement, ev: Event) => any) | null = null\n paused: boolean = false\n playbackRate: number = 0\n played: TimeRanges = undefined as any\n preload: 'none' | 'metadata' | 'auto' | '' = 'none'\n preservesPitch: boolean = false\n readyState: number = 0\n remote: RemotePlayback = undefined as any\n seekable: TimeRanges = undefined as any\n seeking: boolean = false\n sinkId: string = ''\n src: string = ''\n srcObject: MediaProvider | null = undefined as any\n textTracks: TextTrackList = undefined as any\n volume: number = 0\n NETWORK_EMPTY: 0 = 0\n NETWORK_IDLE: 1 = 1\n NETWORK_LOADING: 2 = 2\n NETWORK_NO_SOURCE: 3 = 3\n HAVE_NOTHING: 0 = 0\n HAVE_METADATA: 1 = 1\n HAVE_CURRENT_DATA: 2 = 2\n HAVE_FUTURE_DATA: 3 = 3\n HAVE_ENOUGH_DATA: 4 = 4\n accessKey: string = ''\n accessKeyLabel: string = ''\n autocapitalize: string = ''\n autocorrect: boolean = false\n dir: string = ''\n draggable: boolean = false\n hidden: boolean = false\n inert: boolean = false\n innerText: string = ''\n lang: string = ''\n offsetHeight: number = 0\n offsetLeft: number = 0\n offsetParent: Element | null = null\n offsetTop: number = 0\n offsetWidth: number = 0\n outerText: string = ''\n popover: string | null = ''\n spellcheck: boolean = false\n title: string = ''\n translate: boolean = false\n writingSuggestions: string = ''\n attributes: NamedNodeMap = undefined as any\n className: string = ''\n clientHeight: number = 0\n clientLeft: number = 0\n clientTop: number = 0\n clientWidth: number = 0\n currentCSSZoom: number = 0\n id: string = ''\n innerHTML: string = ''\n localName: string = ''\n namespaceURI: string | null = ''\n onfullscreenchange: ((this: Element, ev: Event) => any) | null = null\n onfullscreenerror: ((this: Element, ev: Event) => any) | null = null\n outerHTML: string = ''\n ownerDocument: Document = undefined as any\n prefix: string | null = ''\n scrollHeight: number = 0\n scrollLeft: number = 0\n scrollTop: number = 0\n scrollWidth: number = 0\n shadowRoot: ShadowRoot | null = null\n slot: string = ''\n tagName: string = ''\n classList: any = undefined\n part: any = undefined\n textContent: any = undefined\n attributeStyleMap: StylePropertyMap = undefined as any\n style: any = undefined\n contentEditable: string = ''\n enterKeyHint: string = ''\n inputMode: string = ''\n isContentEditable: boolean = false\n onabort: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onanimationcancel:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationend:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationiteration:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onanimationstart:\n ((this: GlobalEventHandlers, ev: AnimationEvent) => any) | null = null\n onauxclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onbeforeinput: ((this: GlobalEventHandlers, ev: InputEvent) => any) | null =\n null\n onbeforematch: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onbeforetoggle:\n ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null = null\n onblur: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n oncancel: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncanplaythrough: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onclick: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onclose: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextlost: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncontextmenu:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oncontextrestored: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n oncopy: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n oncuechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oncut: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n ondblclick: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n ondrag: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragend: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondragenter: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragleave: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragover: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondragstart: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null =\n null\n ondrop: ((this: GlobalEventHandlers, ev: DragEvent) => any) | null = null\n ondurationchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onemptied: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onended: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onerror: OnErrorEventHandler = undefined as any\n onfocus: ((this: GlobalEventHandlers, ev: FocusEvent) => any) | null = null\n onformdata: ((this: GlobalEventHandlers, ev: FormDataEvent) => any) | null =\n null\n ongotpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n oninput: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n oninvalid: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onkeydown: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeypress: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onkeyup: ((this: GlobalEventHandlers, ev: KeyboardEvent) => any) | null =\n null\n onload: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadeddata: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onloadedmetadata: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onloadstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onlostpointercapture:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onmousedown: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseenter: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseleave: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmousemove: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseout: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseover: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onmouseup: ((this: GlobalEventHandlers, ev: MouseEvent) => any) | null =\n null\n onpaste: ((this: GlobalEventHandlers, ev: ClipboardEvent) => any) | null =\n null\n onpause: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplay: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onplaying: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onpointercancel:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerdown:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerenter:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerleave:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointermove:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerout:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerover:\n ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null = null\n onpointerrawupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onpointerup: ((this: GlobalEventHandlers, ev: PointerEvent) => any) | null =\n null\n onprogress: ((this: GlobalEventHandlers, ev: ProgressEvent) => any) | null =\n null\n onratechange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onreset: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onresize: ((this: GlobalEventHandlers, ev: UIEvent) => any) | null = null\n onscroll: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onscrollend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsecuritypolicyviolation:\n | ((this: GlobalEventHandlers, ev: SecurityPolicyViolationEvent) => any)\n | null = null\n onseeked: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onseeking: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselect: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onselectionchange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onselectstart: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onslotchange: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onstalled: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onsubmit: ((this: GlobalEventHandlers, ev: SubmitEvent) => any) | null =\n null\n onsuspend: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontimeupdate: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n ontoggle: ((this: GlobalEventHandlers, ev: ToggleEvent) => any) | null =\n null\n ontransitioncancel:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionend:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionrun:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n ontransitionstart:\n ((this: GlobalEventHandlers, ev: TransitionEvent) => any) | null = null\n onvolumechange: ((this: GlobalEventHandlers, ev: Event) => any) | null =\n null\n onwaiting: ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationiteration:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkitanimationstart:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwebkittransitionend:\n ((this: GlobalEventHandlers, ev: Event) => any) | null = null\n onwheel: ((this: GlobalEventHandlers, ev: WheelEvent) => any) | null = null\n autofocus: boolean = false\n dataset: DOMStringMap = undefined as any\n tabIndex: number = 0\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n ariaActiveDescendantElement: Element | null = null\n ariaAtomic: string | null = ''\n ariaAutoComplete: string | null = ''\n ariaBrailleLabel: string | null = ''\n ariaBrailleRoleDescription: string | null = ''\n ariaBusy: string | null = ''\n ariaChecked: string | null = ''\n ariaColCount: string | null = ''\n ariaColIndex: string | null = ''\n ariaColIndexText: string | null = ''\n ariaColSpan: string | null = ''\n ariaControlsElements: ReadonlyArray<Element> | null = null\n ariaCurrent: string | null = ''\n ariaDescribedByElements: ReadonlyArray<Element> | null = null\n ariaDescription: string | null = ''\n ariaDetailsElements: ReadonlyArray<Element> | null = null\n ariaDisabled: string | null = ''\n ariaErrorMessageElements: ReadonlyArray<Element> | null = null\n ariaExpanded: string | null = ''\n ariaFlowToElements: ReadonlyArray<Element> | null = null\n ariaHasPopup: string | null = ''\n ariaHidden: string | null = ''\n ariaInvalid: string | null = ''\n ariaKeyShortcuts: string | null = ''\n ariaLabel: string | null = ''\n ariaLabelledByElements: ReadonlyArray<Element> | null = null\n ariaLevel: string | null = ''\n ariaLive: string | null = ''\n ariaModal: string | null = ''\n ariaMultiLine: string | null = ''\n ariaMultiSelectable: string | null = ''\n ariaOrientation: string | null = ''\n ariaOwnsElements: ReadonlyArray<Element> | null = null\n ariaPlaceholder: string | null = ''\n ariaPosInSet: string | null = ''\n ariaPressed: string | null = ''\n ariaReadOnly: string | null = ''\n ariaRelevant: string | null = ''\n ariaRequired: string | null = ''\n ariaRoleDescription: string | null = ''\n ariaRowCount: string | null = ''\n ariaRowIndex: string | null = ''\n ariaRowIndexText: string | null = ''\n ariaRowSpan: string | null = ''\n ariaSelected: string | null = ''\n ariaSetSize: string | null = ''\n ariaSort: string | null = ''\n ariaValueMax: string | null = ''\n ariaValueMin: string | null = ''\n ariaValueNow: string | null = ''\n ariaValueText: string | null = ''\n role: string | null = ''\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n childElementCount: number = 0\n children: HTMLCollection = undefined as any\n firstElementChild: Element | null = null\n lastElementChild: Element | null = null\n assignedSlot: HTMLSlotElement | null = null\n\n addTextTrack = createSpy2<HTMLMediaElement['addTextTrack']>('addTextTrack')\n canPlayType = createSpy2<HTMLMediaElement['canPlayType']>('canPlayType')\n fastSeek = createSpy2<HTMLMediaElement['fastSeek']>('fastSeek')\n load = createSpy2<HTMLMediaElement['load']>('load')\n pause = createSpy2<HTMLMediaElement['pause']>('pause')\n play = createSpy2<HTMLMediaElement['play']>('play')\n setMediaKeys = createSpy2<HTMLMediaElement['setMediaKeys']>('setMediaKeys')\n setSinkId = createSpy2<HTMLMediaElement['setSinkId']>('setSinkId')\n addEventListener =\n createSpy2<HTMLMediaElement['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<HTMLMediaElement['removeEventListener']>(\n 'removeEventListener'\n )\n attachInternals =\n createSpy2<HTMLMediaElement['attachInternals']>('attachInternals')\n click = createSpy2<HTMLMediaElement['click']>('click')\n hidePopover = createSpy2<HTMLMediaElement['hidePopover']>('hidePopover')\n showPopover = createSpy2<HTMLMediaElement['showPopover']>('showPopover')\n togglePopover =\n createSpy2<HTMLMediaElement['togglePopover']>('togglePopover')\n attachShadow = createSpy2<HTMLMediaElement['attachShadow']>('attachShadow')\n checkVisibility =\n createSpy2<HTMLMediaElement['checkVisibility']>('checkVisibility')\n closest = createSpy2<HTMLMediaElement['closest']>('closest')\n computedStyleMap =\n createSpy2<HTMLMediaElement['computedStyleMap']>('computedStyleMap')\n getAttribute = createSpy2<HTMLMediaElement['getAttribute']>('getAttribute')\n getAttributeNS =\n createSpy2<HTMLMediaElement['getAttributeNS']>('getAttributeNS')\n getAttributeNames =\n createSpy2<HTMLMediaElement['getAttributeNames']>('getAttributeNames')\n getAttributeNode =\n createSpy2<HTMLMediaElement['getAttributeNode']>('getAttributeNode')\n getAttributeNodeNS =\n createSpy2<HTMLMediaElement['getAttributeNodeNS']>('getAttributeNodeNS')\n getBoundingClientRect = createSpy2<\n HTMLMediaElement['getBoundingClientRect']\n >('getBoundingClientRect')\n getClientRects =\n createSpy2<HTMLMediaElement['getClientRects']>('getClientRects')\n getElementsByClassName = createSpy2<\n HTMLMediaElement['getElementsByClassName']\n >('getElementsByClassName')\n getElementsByTagName = createSpy2<HTMLMediaElement['getElementsByTagName']>(\n 'getElementsByTagName'\n )\n getElementsByTagNameNS = createSpy2<\n HTMLMediaElement['getElementsByTagNameNS']\n >('getElementsByTagNameNS')\n getHTML = createSpy2<HTMLMediaElement['getHTML']>('getHTML')\n hasAttribute = createSpy2<HTMLMediaElement['hasAttribute']>('hasAttribute')\n hasAttributeNS =\n createSpy2<HTMLMediaElement['hasAttributeNS']>('hasAttributeNS')\n hasAttributes =\n createSpy2<HTMLMediaElement['hasAttributes']>('hasAttributes')\n hasPointerCapture =\n createSpy2<HTMLMediaElement['hasPointerCapture']>('hasPointerCapture')\n insertAdjacentElement = createSpy2<\n HTMLMediaElement['insertAdjacentElement']\n >('insertAdjacentElement')\n insertAdjacentHTML =\n createSpy2<HTMLMediaElement['insertAdjacentHTML']>('insertAdjacentHTML')\n insertAdjacentText =\n createSpy2<HTMLMediaElement['insertAdjacentText']>('insertAdjacentText')\n matches = createSpy2<HTMLMediaElement['matches']>('matches')\n releasePointerCapture = createSpy2<\n HTMLMediaElement['releasePointerCapture']\n >('releasePointerCapture')\n removeAttribute =\n createSpy2<HTMLMediaElement['removeAttribute']>('removeAttribute')\n removeAttributeNS =\n createSpy2<HTMLMediaElement['removeAttributeNS']>('removeAttributeNS')\n removeAttributeNode = createSpy2<HTMLMediaElement['removeAttributeNode']>(\n 'removeAttributeNode'\n )\n requestFullscreen =\n createSpy2<HTMLMediaElement['requestFullscreen']>('requestFullscreen')\n requestPointerLock =\n createSpy2<HTMLMediaElement['requestPointerLock']>('requestPointerLock')\n scroll = createSpy2<HTMLMediaElement['scroll']>('scroll')\n scrollBy = createSpy2<HTMLMediaElement['scrollBy']>('scrollBy')\n scrollIntoView =\n createSpy2<HTMLMediaElement['scrollIntoView']>('scrollIntoView')\n scrollTo = createSpy2<HTMLMediaElement['scrollTo']>('scrollTo')\n setAttribute = createSpy2<HTMLMediaElement['setAttribute']>('setAttribute')\n setAttributeNS =\n createSpy2<HTMLMediaElement['setAttributeNS']>('setAttributeNS')\n setAttributeNode =\n createSpy2<HTMLMediaElement['setAttributeNode']>('setAttributeNode')\n setAttributeNodeNS =\n createSpy2<HTMLMediaElement['setAttributeNodeNS']>('setAttributeNodeNS')\n setHTMLUnsafe =\n createSpy2<HTMLMediaElement['setHTMLUnsafe']>('setHTMLUnsafe')\n setPointerCapture =\n createSpy2<HTMLMediaElement['setPointerCapture']>('setPointerCapture')\n toggleAttribute =\n createSpy2<HTMLMediaElement['toggleAttribute']>('toggleAttribute')\n webkitMatchesSelector = createSpy2<\n HTMLMediaElement['webkitMatchesSelector']\n >('webkitMatchesSelector')\n blur = createSpy2<HTMLMediaElement['blur']>('blur')\n focus = createSpy2<HTMLMediaElement['focus']>('focus')\n appendChild = createSpy2<HTMLMediaElement['appendChild']>('appendChild')\n cloneNode = createSpy2<HTMLMediaElement['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<\n HTMLMediaElement['compareDocumentPosition']\n >('compareDocumentPosition')\n contains = createSpy2<HTMLMediaElement['contains']>('contains')\n getRootNode = createSpy2<HTMLMediaElement['getRootNode']>('getRootNode')\n hasChildNodes =\n createSpy2<HTMLMediaElement['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<HTMLMediaElement['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<HTMLMediaElement['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<HTMLMediaElement['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<HTMLMediaElement['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<HTMLMediaElement['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<HTMLMediaElement['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<HTMLMediaElement['normalize']>('normalize')\n removeChild = createSpy2<HTMLMediaElement['removeChild']>('removeChild')\n replaceChild = createSpy2<HTMLMediaElement['replaceChild']>('replaceChild')\n animate = createSpy2<HTMLMediaElement['animate']>('animate')\n getAnimations =\n createSpy2<HTMLMediaElement['getAnimations']>('getAnimations')\n after = createSpy2<HTMLMediaElement['after']>('after')\n before = createSpy2<HTMLMediaElement['before']>('before')\n remove = createSpy2<HTMLMediaElement['remove']>('remove')\n replaceWith = createSpy2<HTMLMediaElement['replaceWith']>('replaceWith')\n append = createSpy2<HTMLMediaElement['append']>('append')\n prepend = createSpy2<HTMLMediaElement['prepend']>('prepend')\n querySelector =\n createSpy2<HTMLMediaElement['querySelector']>('querySelector')\n querySelectorAll =\n createSpy2<HTMLMediaElement['querySelectorAll']>('querySelectorAll')\n replaceChildren =\n createSpy2<HTMLMediaElement['replaceChildren']>('replaceChildren')\n dispatchEvent =\n createSpy2<HTMLMediaElement['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaError implements MediaError {\n code: number = 0\n message: string = ''\n MEDIA_ERR_ABORTED: 1 = 1\n MEDIA_ERR_NETWORK: 2 = 2\n MEDIA_ERR_DECODE: 3 = 3\n MEDIA_ERR_SRC_NOT_SUPPORTED: 4 = 4\n}\n\nexport class MockMediaKeyMessageEvent implements MediaKeyMessageEvent {\n message: ArrayBuffer = new ArrayBuffer(0)\n messageType: MediaKeyMessageType = 'individualization-request'\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath =\n createSpy2<MediaKeyMessageEvent['composedPath']>('composedPath')\n initEvent = createSpy2<MediaKeyMessageEvent['initEvent']>('initEvent')\n preventDefault =\n createSpy2<MediaKeyMessageEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n MediaKeyMessageEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<MediaKeyMessageEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockMediaKeySession implements MediaKeySession {\n closed: Promise<MediaKeySessionClosedReason> = undefined as any\n expiration: number = 0\n keyStatuses: MediaKeyStatusMap = undefined as any\n onkeystatuseschange: ((this: MediaKeySession, ev: Event) => any) | null =\n null\n onmessage:\n ((this: MediaKeySession, ev: MediaKeyMessageEvent) => any) | null = null\n sessionId: string = ''\n\n close = createSpy2<MediaKeySession['close']>('close')\n generateRequest =\n createSpy2<MediaKeySession['generateRequest']>('generateRequest')\n load = createSpy2<MediaKeySession['load']>('load')\n remove = createSpy2<MediaKeySession['remove']>('remove')\n update = createSpy2<MediaKeySession['update']>('update')\n addEventListener =\n createSpy2<MediaKeySession['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaKeySession['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent =\n createSpy2<MediaKeySession['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaKeySystemAccess implements MediaKeySystemAccess {\n keySystem: string = ''\n\n createMediaKeys =\n createSpy2<MediaKeySystemAccess['createMediaKeys']>('createMediaKeys')\n getConfiguration =\n createSpy2<MediaKeySystemAccess['getConfiguration']>('getConfiguration')\n}\n\nexport class MockMediaKeys implements MediaKeys {\n createSession = createSpy2<MediaKeys['createSession']>('createSession')\n getStatusForPolicy =\n createSpy2<MediaKeys['getStatusForPolicy']>('getStatusForPolicy')\n setServerCertificate = createSpy2<MediaKeys['setServerCertificate']>(\n 'setServerCertificate'\n )\n}\n\nexport class MockMediaSource implements MediaSource {\n activeSourceBuffers: SourceBufferList = undefined as any\n duration: number = 0\n onsourceclose: ((this: MediaSource, ev: Event) => any) | null = null\n onsourceended: ((this: MediaSource, ev: Event) => any) | null = null\n onsourceopen: ((this: MediaSource, ev: Event) => any) | null = null\n readyState: ReadyState = 'closed'\n sourceBuffers: SourceBufferList = [] as unknown as SourceBufferList\n\n addSourceBuffer =\n createSpy2<MediaSource['addSourceBuffer']>('addSourceBuffer')\n clearLiveSeekableRange = createSpy2<MediaSource['clearLiveSeekableRange']>(\n 'clearLiveSeekableRange'\n )\n endOfStream = createSpy2<MediaSource['endOfStream']>('endOfStream')\n removeSourceBuffer =\n createSpy2<MediaSource['removeSourceBuffer']>('removeSourceBuffer')\n setLiveSeekableRange = createSpy2<MediaSource['setLiveSeekableRange']>(\n 'setLiveSeekableRange'\n )\n addEventListener =\n createSpy2<MediaSource['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaSource['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<MediaSource['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockMediaStream implements MediaStream {\n active: boolean = false\n id: string = ''\n onaddtrack: ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null =\n null\n onremovetrack:\n ((this: MediaStream, ev: MediaStreamTrackEvent) => any) | null = null\n\n addTrack = createSpy2<MediaStream['addTrack']>('addTrack')\n clone = createSpy2<MediaStream['clone']>('clone')\n getAudioTracks = createSpy2<MediaStream['getAudioTracks']>('getAudioTracks')\n getTrackById = createSpy2<MediaStream['getTrackById']>('getTrackById')\n getTracks = createSpy2<MediaStream['getTracks']>('getTracks')\n getVideoTracks = createSpy2<MediaStream['getVideoTracks']>('getVideoTracks')\n removeTrack = createSpy2<MediaStream['removeTrack']>('removeTrack')\n addEventListener =\n createSpy2<MediaStream['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<MediaStream['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<MediaStream['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockNavigator implements Navigator {\n clipboard: Clipboard = undefined as any\n credentials: CredentialsContainer = undefined as any\n doNotTrack: string | null = ''\n geolocation: Geolocation = undefined as any\n login: NavigatorLogin = undefined as any\n maxTouchPoints: number = 0\n mediaCapabilities: MediaCapabilities = undefined as any\n mediaDevices: MediaDevices = undefined as any\n mediaSession: MediaSession = undefined as any\n permissions: Permissions = undefined as any\n serviceWorker: ServiceWorkerContainer = undefined as any\n userActivation: UserActivation = undefined as any\n wakeLock: WakeLock = undefined as any\n webdriver: boolean = false\n hardwareConcurrency: number = 0\n cookieEnabled: boolean = false\n appCodeName: string = ''\n appName: string = ''\n appVersion: string = ''\n platform: string = ''\n product: string = ''\n productSub: string = ''\n userAgent: string = ''\n vendor: string = ''\n vendorSub: string = ''\n language: string = ''\n languages: ReadonlyArray<string> = []\n locks: LockManager = undefined as any\n onLine: boolean = false\n mimeTypes: MimeTypeArray = undefined as any\n pdfViewerEnabled: boolean = false\n plugins: PluginArray = undefined as any\n storage: StorageManager = undefined as any\n\n canShare = createSpy2<Navigator['canShare']>('canShare')\n getGamepads = createSpy2<Navigator['getGamepads']>('getGamepads')\n requestMIDIAccess =\n createSpy2<Navigator['requestMIDIAccess']>('requestMIDIAccess')\n requestMediaKeySystemAccess = createSpy2<\n Navigator['requestMediaKeySystemAccess']\n >('requestMediaKeySystemAccess')\n sendBeacon = createSpy2<Navigator['sendBeacon']>('sendBeacon')\n share = createSpy2<Navigator['share']>('share')\n vibrate = createSpy2<Navigator['vibrate']>('vibrate')\n clearAppBadge = createSpy2<Navigator['clearAppBadge']>('clearAppBadge')\n setAppBadge = createSpy2<Navigator['setAppBadge']>('setAppBadge')\n registerProtocolHandler = createSpy2<Navigator['registerProtocolHandler']>(\n 'registerProtocolHandler'\n )\n javaEnabled = createSpy2<Navigator['javaEnabled']>('javaEnabled')\n}\n\nexport class MockNode implements Node {\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n ownerDocument: Document | null = null\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n textContent: string | null = ''\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n\n appendChild = createSpy2<Node['appendChild']>('appendChild')\n cloneNode = createSpy2<Node['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Node['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Node['contains']>('contains')\n getRootNode = createSpy2<Node['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Node['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Node['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Node['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Node['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Node['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Node['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Node['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Node['normalize']>('normalize')\n removeChild = createSpy2<Node['removeChild']>('removeChild')\n replaceChild = createSpy2<Node['replaceChild']>('replaceChild')\n addEventListener = createSpy2<Node['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<Node['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<Node['removeEventListener']>(\n 'removeEventListener'\n )\n}\n\nexport class MockProgressEvent<\n T extends EventTarget = EventTarget,\n> implements ProgressEvent<T> {\n lengthComputable: boolean = false\n loaded: number = 0\n target: T | null = undefined as any\n total: number = 0\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath = createSpy2<ProgressEvent<T>['composedPath']>('composedPath')\n initEvent = createSpy2<ProgressEvent<T>['initEvent']>('initEvent')\n preventDefault =\n createSpy2<ProgressEvent<T>['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n ProgressEvent<T>['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<ProgressEvent<T>['stopPropagation']>('stopPropagation')\n}\n\nexport class MockPromiseRejectionEvent implements PromiseRejectionEvent {\n promise: Promise<any> = undefined as any\n reason: any = undefined\n bubbles: boolean = false\n cancelBubble: boolean = false\n cancelable: boolean = false\n composed: boolean = false\n currentTarget: EventTarget | null = null\n defaultPrevented: boolean = false\n eventPhase: number = 0\n isTrusted: boolean = false\n returnValue: boolean = false\n srcElement: EventTarget | null = null\n target: EventTarget | null = null\n timeStamp: DOMHighResTimeStamp = 0\n type: string = ''\n NONE: 0 = 0\n CAPTURING_PHASE: 1 = 1\n AT_TARGET: 2 = 2\n BUBBLING_PHASE: 3 = 3\n\n composedPath =\n createSpy2<PromiseRejectionEvent['composedPath']>('composedPath')\n initEvent = createSpy2<PromiseRejectionEvent['initEvent']>('initEvent')\n preventDefault =\n createSpy2<PromiseRejectionEvent['preventDefault']>('preventDefault')\n stopImmediatePropagation = createSpy2<\n PromiseRejectionEvent['stopImmediatePropagation']\n >('stopImmediatePropagation')\n stopPropagation =\n createSpy2<PromiseRejectionEvent['stopPropagation']>('stopPropagation')\n}\n\nexport class MockSourceBuffer implements SourceBuffer {\n appendWindowEnd: number = 0\n appendWindowStart: number = 0\n buffered: TimeRanges = undefined as any\n mode: AppendMode = 'segments'\n onabort: ((this: SourceBuffer, ev: Event) => any) | null = null\n onerror: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdate: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdateend: ((this: SourceBuffer, ev: Event) => any) | null = null\n onupdatestart: ((this: SourceBuffer, ev: Event) => any) | null = null\n timestampOffset: number = 0\n updating: boolean = false\n\n abort = createSpy2<SourceBuffer['abort']>('abort')\n appendBuffer = createSpy2<SourceBuffer['appendBuffer']>('appendBuffer')\n changeType = createSpy2<SourceBuffer['changeType']>('changeType')\n remove = createSpy2<SourceBuffer['remove']>('remove')\n addEventListener =\n createSpy2<SourceBuffer['addEventListener']>('addEventListener')\n removeEventListener = createSpy2<SourceBuffer['removeEventListener']>(\n 'removeEventListener'\n )\n dispatchEvent = createSpy2<SourceBuffer['dispatchEvent']>('dispatchEvent')\n}\n\nexport class MockStorage implements Storage {\n [key: string]: any\n\n length: number = 0\n\n clear = createSpy2<Storage['clear']>('clear')\n getItem = createSpy2<Storage['getItem']>('getItem')\n key = createSpy2<Storage['key']>('key')\n removeItem = createSpy2<Storage['removeItem']>('removeItem')\n setItem = createSpy2<Storage['setItem']>('setItem')\n}\n\nexport class MockText implements Text {\n wholeText: string = ''\n data: string = ''\n length: number = 0\n ownerDocument: Document = undefined as any\n textContent: any = undefined\n assignedSlot: HTMLSlotElement | null = null\n baseURI: string = ''\n childNodes: NodeListOf<ChildNode> = undefined as any\n firstChild: ChildNode | null = null\n isConnected: boolean = false\n lastChild: ChildNode | null = null\n nextSibling: ChildNode | null = null\n nodeName: string = ''\n nodeType: number = 0\n nodeValue: string | null = ''\n parentElement: HTMLElement | null = null\n parentNode: ParentNode | null = null\n previousSibling: ChildNode | null = null\n ELEMENT_NODE: 1 = 1\n ATTRIBUTE_NODE: 2 = 2\n TEXT_NODE: 3 = 3\n CDATA_SECTION_NODE: 4 = 4\n ENTITY_REFERENCE_NODE: 5 = 5\n ENTITY_NODE: 6 = 6\n PROCESSING_INSTRUCTION_NODE: 7 = 7\n COMMENT_NODE: 8 = 8\n DOCUMENT_NODE: 9 = 9\n DOCUMENT_TYPE_NODE: 10 = 10\n DOCUMENT_FRAGMENT_NODE: 11 = 11\n NOTATION_NODE: 12 = 12\n DOCUMENT_POSITION_DISCONNECTED: 0x01 = 1\n DOCUMENT_POSITION_PRECEDING: 0x02 = 2\n DOCUMENT_POSITION_FOLLOWING: 0x04 = 4\n DOCUMENT_POSITION_CONTAINS: 0x08 = 8\n DOCUMENT_POSITION_CONTAINED_BY: 0x10 = 16\n DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: 0x20 = 32\n nextElementSibling: Element | null = null\n previousElementSibling: Element | null = null\n\n splitText = createSpy2<Text['splitText']>('splitText')\n appendData = createSpy2<Text['appendData']>('appendData')\n deleteData = createSpy2<Text['deleteData']>('deleteData')\n insertData = createSpy2<Text['insertData']>('insertData')\n replaceData = createSpy2<Text['replaceData']>('replaceData')\n substringData = createSpy2<Text['substringData']>('substringData')\n appendChild = createSpy2<Text['appendChild']>('appendChild')\n cloneNode = createSpy2<Text['cloneNode']>('cloneNode')\n compareDocumentPosition = createSpy2<Text['compareDocumentPosition']>(\n 'compareDocumentPosition'\n )\n contains = createSpy2<Text['contains']>('contains')\n getRootNode = createSpy2<Text['getRootNode']>('getRootNode')\n hasChildNodes = createSpy2<Text['hasChildNodes']>('hasChildNodes')\n insertBefore = createSpy2<Text['insertBefore']>('insertBefore')\n isDefaultNamespace =\n createSpy2<Text['isDefaultNamespace']>('isDefaultNamespace')\n isEqualNode = createSpy2<Text['isEqualNode']>('isEqualNode')\n isSameNode = createSpy2<Text['isSameNode']>('isSameNode')\n lookupNamespaceURI =\n createSpy2<Text['lookupNamespaceURI']>('lookupNamespaceURI')\n lookupPrefix = createSpy2<Text['lookupPrefix']>('lookupPrefix')\n normalize = createSpy2<Text['normalize']>('normalize')\n removeChild = createSpy2<Text['removeChild']>('removeChild')\n replaceChild = createSpy2<Text['replaceChild']>('replaceChild')\n after = createSpy2<Text['after']>('after')\n before = createSpy2<Text['before']>('before')\n remove = createSpy2<Text['remove']>('remove')\n replaceWith = createSpy2<Text['replaceWith']>('replaceWith')\n addEventListener = createSpy2<Text['addEventListener']>('addEventListener')\n dispatchEvent = createSpy2<Text['dispatchEvent']>('dispatchEvent')\n removeEventListener = createSpy2<Text['removeEventListener']>(\n 'removeEventListener'\n )\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MockAbortSignal, MockMediaSource } from './lib.dom'\nimport { createSpy2 } from '../createSpyFactory'\n\nexport class MockMediaSourceGlobal extends MockMediaSource {\n static canConstructInDedicatedWorker = false\n static isTypeSupported =\n createSpy2<(typeof global.MediaSource)['isTypeSupported']>(\n 'isTypeSupported'\n )\n}\n\nexport class MockAbortSignalGlobal extends MockAbortSignal {\n static abort = createSpy2<(typeof global.AbortSignal)['abort']>('abort')\n static any = createSpy2<(typeof global.AbortSignal)['any']>('any')\n static timeout =\n createSpy2<(typeof global.AbortSignal)['timeout']>('timeout')\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n BenchmarkRunResults,\n RunResultsComparison,\n} from '@amazon/vinyl-util/browserTestUtil'\nimport {\n compareResults,\n expectNothing,\n setTestTimeout,\n} from '@amazon/vinyl-util/browserTestUtil'\n\nexport function setupBenchmark(): void {\n setTestTimeout(180)\n afterEach(expectNothing)\n}\n\nconst comparisons: RunResultsComparison[] = []\n\n/**\n * Adds a benchmark comparison to be displayed at the end of the test.\n * @param comparison\n */\nexport function addComparison(comparison: RunResultsComparison) {\n comparisons.push(comparison)\n}\n\n/**\n * Adds a list of benchmark results to be compared with each other.\n * The results will be logged then for browser environments displayed at the end of the suite.\n *\n * @param name The comparison suite name.\n * @param results\n */\nexport function addBenchmarks(name: string, ...results: BenchmarkRunResults[]) {\n const comparison = compareResults(name, ...results)\n comparison.logToTable()\n comparisons.push(comparison)\n}\n\nif (typeof document !== 'undefined') {\n jasmine.getEnv().addReporter({\n jasmineDone: () => {\n console.log('Tests complete')\n const jasmineContainer = document.getElementsByClassName(\n 'jasmine_html-reporter'\n )[0]\n jasmineContainer.parentElement?.removeChild(jasmineContainer)\n const container = createEl('div', document.body)\n container.id = 'benchmarkResults'\n const sortedComparisons = [...comparisons].sort((a, b) =>\n a.name > b.name ? 1 : -1\n )\n for (const comparison of sortedComparisons) {\n toTableHtml(comparison, container)\n }\n },\n })\n}\n\nfunction toTableHtml(\n comparison: RunResultsComparison,\n parent?: HTMLElement\n): HTMLDivElement {\n const container = createEl('div', parent)\n container.className = 'benchmarkComparison'\n const title = createEl('h2', container)\n title.innerText = comparison.name\n const table = createEl('table', container)\n const head = createEl('thead', table)\n const headRow = createEl('tr', head)\n const name = createEl('th', headRow)\n name.innerText = 'Name'\n const median = createEl('th', headRow)\n median.innerText = 'Mean ops/s'\n const samples = createEl('th', headRow)\n samples.innerText = 'Samples'\n const compare = createEl('th', headRow)\n compare.innerText = '% Comparison'\n\n const body = createEl('tbody', table)\n comparison.results.forEach((result) => {\n const row = createEl('tr', body)\n createEl('th', row).innerText = result.name\n createEl('td', row).innerText = result.meanOpsStr\n createEl('td', row).innerText = result.totalSamples.toLocaleString()\n createEl('td', row).innerText = comparison.runComparisonToString(result)\n })\n return container\n}\n\nfunction createEl<K extends keyof HTMLElementTagNameMap>(\n tagName: K,\n parent?: HTMLElement,\n options?: ElementCreationOptions\n): HTMLElementTagNameMap[K] {\n const element = document.createElement(tagName, options)\n if (parent) parent.appendChild(element)\n return element\n}\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { LogTarget } from '@amazon/vinyl-util'\nimport { logDebug } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../setup'\n\ndescribe('Logging', () => {\n setupBenchmark()\n\n it('logDebug', async () => {\n const target: LogTarget = {\n logPrefix: 'path',\n }\n const results = await benchmark(`logDebug`, () => {\n logDebug(target, {\n requestInfo: {\n fetchId: 'lgn9lrwaid8o3utd5r',\n init: {\n method: 'POST',\n headers: {\n 'Content-Encoding': 'amz-1.0',\n 'Content-Type': 'application/json',\n 'X-Amz-Target':\n 'com.amazon.digitalmusiclocator.DigitalMusicLocatorServiceExternal.getStreamingURLs',\n },\n body: '{\"contentIdList\":[{\"identifier\":\"d9e4e337-97ba-41a9-9f31-84a8bf99f1dc\",\"identifierType\":\"COID\"}],\"bitRate\":\"HIGH\",\"deviceToken\":{\"deviceId\":\"lg4msezd1e355heuc5b\",\"deviceTypeId\":\"A16ZV8BU3SN1N3\"},\"appMetadata\":{\"appId\":\"WebCP\",\"https\":true,\"appVersion\":\"1.0.0\"},\"clientMetadata\":{\"clientId\":\"WebCP\",\"clientRequestId\":\"lgn9lrw623mgvi7k3et\"}}',\n signal: '[object AbortSignal]',\n },\n input: 'https://example.com/bar/',\n maxRetries: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n fetchOptions: {\n serviceId: null,\n readErrorBody: 1,\n },\n },\n attemptInfo: {\n currentTry: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n },\n target: '[object FetchProviderImpl]',\n })\n })\n addBenchmarks('logDebug', results)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { LinkedList } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('LinkedList', () => {\n setupBenchmark()\n\n interface Element {\n r: number\n a: number\n b: number\n }\n\n function createList(n: number): LinkedList<Element> {\n const list = new LinkedList<Element>()\n for (let i = 0; i < n; i++) {\n list.push({ r: 0, a: Math.random(), b: Math.random() })\n }\n return list\n }\n\n function createArray(n: number) {\n const arr: Element[] = []\n for (let i = 0; i < n; i++) {\n arr.push({ r: 0, a: Math.random(), b: Math.random() })\n }\n return arr\n }\n\n ;[100, 1000].forEach((size) => {\n const list = createList(size)\n const arr = createArray(size)\n\n describe(`size: ${size}`, () => {\n it('forEach', async () => {\n const name = `forEach ${size}`\n // Having an unpredictable output in the executor prevents the JS engine from\n // any potential caching.\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.forEach((e: Element) => (e.r = e.a + e.b))\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.forEach((e) => (e.r = e.a + e.b))\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('unshift', async () => {\n const name = `unshift/shift ${size}`\n const e = { r: 0, a: 0, b: 0 }\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.unshift(e)\n list.shift()\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.unshift(e)\n arr.shift()\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('push', async () => {\n const name = `push/pop ${size}`\n const e = { r: 0, a: 0, b: 0 }\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n list.push(e)\n list.pop()\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n arr.push(e)\n arr.pop()\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n\n it('for of', async () => {\n const name = `for of ${size}`\n const listResults = await benchmark(\n `LinkedList ${name}`,\n () => {\n for (const e of list) {\n e.r = e.a + e.b\n }\n }\n )\n const arrayResults = await benchmark(`Array ${name}`, () => {\n for (const e of arr) {\n e.r = e.a + e.b\n }\n })\n addBenchmarks(name, listResults, arrayResults)\n })\n })\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { mergeDeep } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('mergeDeep', () => {\n setupBenchmark()\n it('object merge', async () => {\n const a = {\n b: {\n c: 3,\n d: 4,\n e: 'test',\n },\n f: {\n g: 5,\n h: true,\n i: false,\n },\n j: {\n k: {\n m: 5,\n },\n },\n }\n\n const b = {\n b: {\n d: 4,\n f2: 'test2',\n },\n f: {\n g: 5,\n h: true,\n i: false,\n },\n j: {\n k: {\n m: 5,\n },\n },\n }\n\n const mergeResultsDeep = await benchmark(`mergeDeep`, () => {\n mergeDeep([a, b])\n })\n addBenchmarks('merge deep', mergeResultsDeep)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { toJson } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('json', () => {\n setupBenchmark()\n\n it('toJson', async () => {\n const results = await benchmark(`toJson`, () => {\n toJson({\n requestInfo: {\n fetchId: 'lgn9lrwaid8o3utd5r',\n init: {\n method: 'POST',\n headers: {\n 'Content-Encoding': 'amz-1.0',\n 'Content-Type': 'application/json',\n 'X-Amz-Target':\n 'com.amazon.digitalmusiclocator.DigitalMusicLocatorServiceExternal.getStreamingURLs',\n },\n body: '{\"contentIdList\":[{\"identifier\":\"d9e4e337-97ba-41a9-9f31-84a8bf99f1dc\",\"identifierType\":\"COID\"}],\"bitRate\":\"HIGH\",\"deviceToken\":{\"deviceId\":\"lg4msezd1e355heuc5b\",\"deviceTypeId\":\"A16ZV8BU3SN1N3\"},\"appMetadata\":{\"appId\":\"WebCP\",\"https\":true,\"appVersion\":\"1.0.0\"},\"clientMetadata\":{\"clientId\":\"WebCP\",\"clientRequestId\":\"lgn9lrw623mgvi7k3et\"}}',\n signal: '[object AbortSignal]',\n },\n input: 'https://example.com/bar/',\n maxRetries: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n requestOptions: {\n serviceId: null,\n readErrorBody: 1,\n },\n },\n attemptInfo: {\n currentTry: 1,\n timestamp: new Date('2023-04-19T05:40:17.914Z'),\n },\n target: '[object FetchProviderImpl]',\n })\n })\n addBenchmarks('toJson', results)\n })\n})\n", "/*\n * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { resolveUrl } from '@amazon/vinyl-util'\nimport { benchmark } from '@amazon/vinyl-util/browserTestUtil'\nimport { addBenchmarks, setupBenchmark } from '../../setup'\n\ndescribe('resolveUrl', () => {\n setupBenchmark()\n\n it('relative path', async () => {\n const name = 'relative path'\n const base = 'https://cdn.example.com/content/audio/'\n const relative = 'segment_001.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(relative, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(relative, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('absolute URI', async () => {\n const name = 'absolute URI'\n const base = 'https://cdn.example.com/content/audio/'\n const absolute = 'https://other.example.com/segment.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(absolute, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(absolute, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('dot segments', async () => {\n const name = 'dot segments'\n const base = 'https://cdn.example.com/a/b/c/manifest.mpd'\n const relative = '../../media/segment.mp4'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n const _o = resolveUrl(relative, base)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n const _o = new URL(relative, base).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n\n it('chained resolution (DASH BaseURL walk)', async () => {\n const name = 'chained resolution'\n const manifest = 'https://cdn.example.com/manifest.mpd'\n const scopes = ['content/', 'audio/', '128k/']\n const segment = 'seg_001.m4s'\n\n const resolveUrlResults = await benchmark(`resolveUrl ${name}`, () => {\n let resolved = manifest\n for (const scope of scopes) {\n resolved = resolveUrl(scope, resolved)\n }\n resolveUrl(segment, resolved)\n })\n const newUrlResults = await benchmark(`new URL ${name}`, () => {\n let resolved = new URL(manifest)\n for (const scope of scopes) {\n resolved = new URL(scope, resolved)\n }\n const _o = new URL(segment, resolved).href\n })\n addBenchmarks(name, resolveUrlResults, newUrlResults)\n })\n})\n"],
5
+ "mappings": "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",
6
6
  "names": ["remove", "signal", "it", "key", "value", "newInitializer", "locale", "sourceA", "sourceB", "prop", "schemeEnd", "benchmark"]
7
7
  }