event-emission 0.2.1 → 0.3.0

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.
@@ -6,10 +6,10 @@
6
6
  "/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-function-type */\n\nimport { SymbolObservable } from './symbols';\nimport type {\n ObservableLike,\n Observer as ObserverInterface,\n Subscription as SubscriptionInterface,\n} from './types';\n\n/**\n * Helper to get a method from an object.\n */\nfunction getMethod(obj: any, key: string): Function | undefined {\n if (obj === null || obj === undefined) return undefined;\n const value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') {\n throw new TypeError(value + ' is not a function');\n }\n return value;\n}\n\n/**\n * Helper to report an error that cannot be delivered to an observer.\n */\nfunction hostReportError(e: any) {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(() => {\n throw e;\n });\n } else {\n setTimeout(() => {\n throw e;\n });\n }\n}\n\n/**\n * Normalized observer used within the Subscriber function.\n */\nexport interface SubscriptionObserver<T> {\n next(value: T): void;\n error(errorValue: unknown): void;\n complete(): void;\n readonly closed: boolean;\n}\n\n/**\n * Internal SubscriptionObserver class required by TC39 spec.\n */\nfunction SubscriptionObserverImpl(this: any, subscription: any) {\n this._subscription = subscription;\n}\n\nSubscriptionObserverImpl.prototype = Object.create(Object.prototype);\nObject.defineProperties(SubscriptionObserverImpl.prototype, {\n constructor: { value: Object, configurable: true, writable: true },\n closed: {\n get() {\n return this._subscription._closed;\n },\n configurable: true,\n },\n next: {\n value: function next(this: any, value: any) {\n const subscription = this._subscription;\n if (subscription._closed) return undefined;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, 'next');\n if (!m) return undefined;\n return m.call(observer, value);\n } catch (e) {\n try {\n this.error(e);\n } catch (err) {\n hostReportError(err);\n }\n }\n },\n configurable: true,\n writable: true,\n },\n error: {\n value: function error(this: any, errorValue: any) {\n const subscription = this._subscription;\n if (subscription._closed) throw errorValue;\n subscription._closed = true;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, 'error');\n if (m) {\n return m.call(observer, errorValue);\n }\n throw errorValue;\n } finally {\n subscription._cleanup();\n }\n },\n configurable: true,\n writable: true,\n },\n complete: {\n value: function complete(this: any, value: any) {\n const subscription = this._subscription;\n if (subscription._closed) return undefined;\n subscription._closed = true;\n const observer = subscription._observer;\n try {\n const m = getMethod(observer, 'complete');\n if (m) {\n return m.call(observer, value);\n }\n return undefined;\n } finally {\n subscription._cleanup();\n }\n },\n configurable: true,\n writable: true,\n },\n});\n\nObject.defineProperty(SubscriptionObserverImpl.prototype.next, 'length', { value: 1 });\nObject.defineProperty(SubscriptionObserverImpl.prototype.error, 'length', { value: 1 });\nObject.defineProperty(SubscriptionObserverImpl.prototype.complete, 'length', {\n value: 1,\n});\n\n/**\n * Internal Subscription class required by TC39 spec.\n */\nfunction Subscription(this: any, observer: any, subscriber: any) {\n this._observer = observer;\n this._cleanupFn = undefined;\n this._closed = false;\n\n const subscriptionObserver = new (SubscriptionObserverImpl as any)(this);\n\n try {\n const start = getMethod(observer, 'start');\n if (start) {\n start.call(observer, this);\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (this._closed) return;\n\n try {\n const cleanup = subscriber(subscriptionObserver);\n if (cleanup != null) {\n if (typeof cleanup !== 'function' && typeof cleanup.unsubscribe !== 'function') {\n throw new TypeError(cleanup + ' is not a function or a subscription');\n }\n this._cleanupFn = cleanup;\n if (this._closed) {\n this._cleanup();\n }\n }\n } catch (e) {\n subscriptionObserver.error(e);\n }\n}\n\nSubscription.prototype = Object.create(Object.prototype);\nObject.defineProperties(Subscription.prototype, {\n constructor: { value: Object, configurable: true, writable: true },\n closed: {\n get() {\n return this._closed;\n },\n configurable: true,\n },\n unsubscribe: {\n value: function unsubscribe(this: any) {\n if (this._closed) return;\n this._closed = true;\n this._cleanup();\n },\n configurable: true,\n writable: true,\n },\n _cleanup: {\n value: function _cleanup(this: any) {\n const cleanup = this._cleanupFn;\n if (!cleanup) return;\n this._cleanupFn = undefined;\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else if (cleanup && typeof cleanup.unsubscribe === 'function') {\n cleanup.unsubscribe();\n }\n } catch (e) {\n hostReportError(e);\n }\n },\n configurable: true,\n writable: true,\n },\n});\n\n/**\n * A proper TC39 Observable implementation.\n */\nexport class Observable<T> implements ObservableLike<T> {\n private _subscriber: Subscriber<T>;\n\n constructor(subscriber: Subscriber<T>) {\n if (typeof subscriber !== 'function') {\n throw new TypeError('Observable initializer must be a function');\n }\n this._subscriber = subscriber;\n }\n\n subscribe(\n observerOrNext?: ObserverInterface<T> | ((value: T) => void),\n error?: (err: unknown) => void,\n complete?: () => void,\n ): SubscriptionInterface {\n let observer: any;\n if (typeof observerOrNext === 'function') {\n observer = {\n next: observerOrNext,\n error,\n complete,\n };\n } else if (typeof observerOrNext !== 'object' || observerOrNext === null) {\n throw new TypeError(observerOrNext + ' is not an object');\n } else {\n observer = observerOrNext;\n }\n\n return new (Subscription as any)(observer, this._subscriber);\n }\n\n [SymbolObservable](): Observable<T> {\n return this;\n }\n\n static of<U>(...items: U[]): Observable<U> {\n const C = typeof this === 'function' ? this : Observable;\n return new (C as any)((observer: SubscriptionObserverInterface<U>) => {\n for (let i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n observer.complete();\n });\n }\n\n static from<U>(x: any): Observable<U> {\n const C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n\n const method = x[SymbolObservable];\n if (method != null) {\n if (typeof method !== 'function') {\n throw new TypeError(method + ' is not a function');\n }\n const observable = method.call(x);\n if (Object(observable) !== observable) {\n throw new TypeError(observable + ' is not an object');\n }\n if (observable.constructor === C) {\n return observable;\n }\n return new (C as any)((observer: SubscriptionObserverInterface<U>) =>\n observable.subscribe(observer),\n );\n }\n\n if (Symbol.iterator in x) {\n return new (C as any)((observer: SubscriptionObserverInterface<U>) => {\n for (const item of x as Iterable<U>) {\n observer.next(item);\n if (observer.closed) return;\n }\n observer.complete();\n });\n }\n\n throw new TypeError(x + ' is not observable');\n }\n}\n\n/**\n * Function called when a new subscription is created.\n */\nexport type Subscriber<T> = (\n observer: SubscriptionObserverInterface<T>,\n) => (() => void) | SubscriptionInterface | void;\n\n/**\n * Normalized observer used within the Subscriber function.\n */\nexport interface SubscriptionObserverInterface<T> {\n next(value: T): void;\n error(errorValue: unknown): void;\n complete(): void;\n readonly closed: boolean;\n}\n",
7
7
  "/* eslint-disable @typescript-eslint/no-unsafe-assignment -- Proxy handlers require any spreads */\n/* eslint-disable @typescript-eslint/no-redundant-type-constituents -- Type unions are intentional for flexibility */\n\nimport type { EmissionEvent, EventTargetLike } from './types';\n\n// =============================================================================\n// DOM Type Stubs (for DOM-free environments)\n// =============================================================================\n\n/** Minimal EventTarget interface for duck-typing */\ninterface MinimalEventTarget {\n addEventListener(type: string, listener: (event: unknown) => void): void;\n removeEventListener(type: string, listener: (event: unknown) => void): void;\n dispatchEvent(event: unknown): boolean;\n}\n\n/** Minimal Event interface for forwarding */\ninterface MinimalEvent {\n type: string;\n}\n\n/** Minimal CustomEvent interface for forwarding */\ninterface MinimalCustomEvent extends MinimalEvent {\n detail?: unknown;\n}\n\n/** Type declaration for structuredClone (available in modern runtimes) */\ndeclare function structuredClone<T>(value: T): T;\n\n// =============================================================================\n// Symbols\n// =============================================================================\n\n/** Symbol marking an object as proxied */\nexport const PROXY_MARKER = Symbol.for('@lasercat/event-emission/proxy');\n\n/** Symbol to access the original unproxied target */\nexport const ORIGINAL_TARGET = Symbol.for('@lasercat/event-emission/original');\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Options for observable proxy creation */\nexport interface ObserveOptions {\n /** Enable deep observation of nested objects (default: true) */\n deep?: boolean;\n /** Clone strategy for previous state (default: 'path'); 'deep' uses structuredClone or deepClone */\n cloneStrategy?: 'shallow' | 'deep' | 'path';\n /** Optional deep clone fallback for runtimes without structuredClone */\n deepClone?: <T>(value: T) => T;\n}\n\n/** Event detail for property changes */\nexport interface PropertyChangeDetail<T = unknown> {\n /** The new value */\n value: T;\n /** Current state of the root object (after change) */\n current: unknown;\n /** Previous state of the root object (before change) */\n previous: unknown;\n}\n\n/** Array methods that mutate the array */\nexport type ArrayMutationMethod =\n | 'push'\n | 'pop'\n | 'shift'\n | 'unshift'\n | 'splice'\n | 'sort'\n | 'reverse'\n | 'fill'\n | 'copyWithin';\n\n/** Event detail for array mutations */\nexport interface ArrayMutationDetail<T = unknown> {\n /** The array method that was called */\n method: ArrayMutationMethod;\n /** Arguments passed to the method */\n args: unknown[];\n /** Return value of the method */\n result: unknown;\n /** Items that were added (if applicable) */\n added?: T[];\n /** Items that were removed (if applicable) */\n removed?: T[];\n /** Current state of the root object (after change) */\n current: unknown;\n /** Previous state of the root object (before change) */\n previous: unknown;\n}\n\n/** Event map for observable objects */\nexport type ObservableEventMap<_T extends object> = {\n update: PropertyChangeDetail;\n [key: `update:${string}`]: PropertyChangeDetail | ArrayMutationDetail;\n};\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst ARRAY_MUTATORS = new Set<ArrayMutationMethod>([\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse',\n 'fill',\n 'copyWithin',\n]);\n\n// =============================================================================\n// Internal Types\n// =============================================================================\n\ntype ResolvedObserveOptions = {\n deep: boolean;\n cloneStrategy: 'shallow' | 'deep' | 'path';\n deepClone?: ObserveOptions['deepClone'];\n};\n\ninterface ProxyContext<T extends object> {\n eventTarget: EventTargetLike<ObservableEventMap<T>>;\n /** Reference to the original (unproxied) root object for cloning */\n originalRoot: T;\n options: ResolvedObserveOptions;\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/** Check if a value can be proxied */\nfunction isProxyable(value: unknown): value is object {\n return (\n value !== null &&\n typeof value === 'object' &&\n !isProxied(value) &&\n !(value instanceof Date) &&\n !(value instanceof RegExp) &&\n !(value instanceof Map) &&\n !(value instanceof Set) &&\n !(value instanceof WeakMap) &&\n !(value instanceof WeakSet) &&\n !(value instanceof Promise) &&\n !(value instanceof Error) &&\n !(value instanceof ArrayBuffer) &&\n !ArrayBuffer.isView(value)\n );\n}\n\n/** Check if already proxied */\nfunction isProxied(value: unknown): boolean {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as Record<symbol, unknown>)[PROXY_MARKER] === true\n );\n}\n\n/** Check if property is an array mutator */\nfunction isArrayMutator(prop: string | symbol): prop is ArrayMutationMethod {\n return typeof prop === 'string' && ARRAY_MUTATORS.has(prop as ArrayMutationMethod);\n}\n\n/** Clone along changed path for efficiency */\nfunction cloneAlongPath(obj: unknown, path?: string): unknown {\n const isArray = Array.isArray(obj);\n const rootClone = isArray\n ? [...(obj as unknown[])]\n : { ...(obj as Record<string, unknown>) };\n\n if (!path || isArray) {\n return rootClone;\n }\n\n const parts = path.split('.');\n\n const result = rootClone as Record<string, unknown>;\n\n let current: Record<string, unknown> = result;\n // Clone all objects along the path, INCLUDING the leaf\n for (let i = 0; i < parts.length; i++) {\n const key = parts[i];\n const value = current[key];\n if (value !== null && typeof value === 'object') {\n current[key] = Array.isArray(value) ? [...value] : { ...value };\n // Only traverse deeper if not the last element\n if (i < parts.length - 1) {\n current = current[key] as Record<string, unknown>;\n }\n } else {\n break;\n }\n }\n\n return result;\n}\n\n/** Clone for comparison based on strategy */\nfunction cloneForComparison(\n obj: unknown,\n strategy: 'shallow' | 'deep' | 'path',\n changedPath?: string,\n deepClone?: ObserveOptions['deepClone'],\n): unknown {\n if (obj === null || typeof obj !== 'object') return obj;\n\n switch (strategy) {\n case 'shallow':\n return Array.isArray(obj) ? [...obj] : { ...obj };\n\n case 'deep':\n if (deepClone) {\n return deepClone(obj);\n }\n if (typeof structuredClone !== 'function') {\n throw new Error(\n \"structuredClone is not available in this runtime; provide observe.deepClone, or use cloneStrategy 'path' or 'shallow'.\",\n );\n }\n return structuredClone(obj);\n\n case 'path':\n return cloneAlongPath(obj, changedPath);\n\n default:\n return obj;\n }\n}\n\n/** Compute array diff for mutation events */\nfunction computeArrayDiff(\n method: ArrayMutationMethod,\n before: unknown[],\n _after: unknown[],\n args: unknown[],\n): { added?: unknown[]; removed?: unknown[] } {\n switch (method) {\n case 'push':\n return { added: args };\n case 'pop':\n return { removed: before.length > 0 ? [before[before.length - 1]] : [] };\n case 'shift':\n return { removed: before.length > 0 ? [before[0]] : [] };\n case 'unshift':\n return { added: args };\n case 'splice': {\n const [start, deleteCount, ...items] = args as [number, number?, ...unknown[]];\n const actualStart =\n start < 0 ? Math.max(before.length + start, 0) : Math.min(start, before.length);\n const actualDeleteCount = Math.min(\n deleteCount ?? before.length - actualStart,\n before.length - actualStart,\n );\n return {\n removed: before.slice(actualStart, actualStart + actualDeleteCount),\n added: items,\n };\n }\n case 'sort':\n case 'reverse':\n case 'fill':\n case 'copyWithin':\n return {};\n default:\n return {};\n }\n}\n\n// =============================================================================\n// Proxy Registry (prevents duplicate proxying)\n// =============================================================================\n\n// Registry key combines target object with context to allow same object\n// to be observed in different contexts\nconst proxyRegistry = new WeakMap<\n object,\n WeakMap<ProxyContext<object>, { proxy: object; path: string }>\n>();\n\n/** Get or create proxy registry entry for a context */\nfunction getContextRegistry(\n target: object,\n): WeakMap<ProxyContext<object>, { proxy: object; path: string }> {\n let contextMap = proxyRegistry.get(target);\n if (!contextMap) {\n contextMap = new WeakMap();\n proxyRegistry.set(target, contextMap);\n }\n return contextMap;\n}\n\n// =============================================================================\n// Array Method Interceptor\n// =============================================================================\n\nfunction createArrayMethodInterceptor<T extends object>(\n array: unknown[],\n method: ArrayMutationMethod,\n path: string,\n context: ProxyContext<T>,\n): (...args: unknown[]) => unknown {\n const original = array[method as keyof typeof array] as (...args: unknown[]) => unknown;\n\n return function (this: unknown[], ...args: unknown[]): unknown {\n // Clone from original (unproxied) root BEFORE mutation\n const previousState = cloneForComparison(\n context.originalRoot,\n context.options.cloneStrategy,\n path,\n context.options.deepClone,\n );\n const previousItems = [...array];\n\n const result = original.apply(this, args);\n\n const { added, removed } = computeArrayDiff(method, previousItems, array, args);\n\n // Determine event path - for root arrays, avoid leading dot\n const methodEventPath = path ? `update:${path}.${method}` : `update:${method}`;\n const arrayEventPath = path ? `update:${path}` : 'update:';\n\n // Dispatch method-specific event\n context.eventTarget.dispatchEvent({\n type: methodEventPath as keyof ObservableEventMap<T> & string,\n detail: {\n method,\n args,\n result,\n added,\n removed,\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n\n // Dispatch path event for the array itself (only if path is non-empty)\n if (path) {\n context.eventTarget.dispatchEvent({\n type: arrayEventPath as keyof ObservableEventMap<T> & string,\n detail: {\n value: array,\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n }\n\n // Dispatch top-level update\n context.eventTarget.dispatchEvent({\n type: 'update' as keyof ObservableEventMap<T> & string,\n detail: {\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n\n return result;\n };\n}\n\n// =============================================================================\n// Core Proxy Creation\n// =============================================================================\n\nfunction createObservableProxyInternal<T extends object>(\n target: T,\n path: string,\n context: ProxyContext<T>,\n): T {\n // Check if this exact object is already proxied for this context\n const contextRegistry = getContextRegistry(target);\n const existing = contextRegistry.get(context as unknown as ProxyContext<object>);\n if (existing) {\n // Return existing proxy - note: shared objects will use the first path they were accessed from\n // This is intentional to avoid duplicate event dispatching\n return existing.proxy as T;\n }\n\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n // Handle internal markers\n if (prop === PROXY_MARKER) return true;\n if (prop === ORIGINAL_TARGET) return obj;\n\n // Pass through symbols\n if (typeof prop === 'symbol') {\n return Reflect.get(obj, prop, receiver);\n }\n\n const value = Reflect.get(obj, prop, receiver);\n\n // Intercept array mutating methods\n if (Array.isArray(obj) && isArrayMutator(prop)) {\n return createArrayMethodInterceptor(obj, prop, path, context);\n }\n\n // Lazy proxy nested objects/arrays\n if (context.options.deep && isProxyable(value)) {\n const nestedPath = path ? `${path}.${prop}` : prop;\n return createObservableProxyInternal(\n value as object,\n nestedPath,\n context as ProxyContext<object>,\n );\n }\n\n return value;\n },\n\n set(obj, prop, value, receiver) {\n // Pass through symbols\n if (typeof prop === 'symbol') {\n return Reflect.set(obj, prop, value, receiver);\n }\n\n const oldValue = Reflect.get(obj, prop, receiver);\n\n // Skip if value unchanged (shallow equality)\n if (Object.is(oldValue, value)) {\n return true;\n }\n\n // Capture previous state before mutation (from original, not proxy)\n const propPath = path ? `${path}.${prop}` : prop;\n const previousState = cloneForComparison(\n context.originalRoot,\n context.options.cloneStrategy,\n propPath,\n context.options.deepClone,\n );\n\n const success = Reflect.set(obj, prop, value, receiver);\n\n if (success) {\n // Dispatch path-specific event\n context.eventTarget.dispatchEvent({\n type: `update:${propPath}` as keyof ObservableEventMap<T> & string,\n detail: {\n value,\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n\n // Dispatch top-level update event\n context.eventTarget.dispatchEvent({\n type: 'update' as keyof ObservableEventMap<T> & string,\n detail: {\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n }\n\n return success;\n },\n\n deleteProperty(obj, prop) {\n // Pass through symbols\n if (typeof prop === 'symbol') {\n return Reflect.deleteProperty(obj, prop);\n }\n\n const propPath = path ? `${path}.${String(prop)}` : String(prop);\n const previousState = cloneForComparison(\n context.originalRoot,\n context.options.cloneStrategy,\n propPath,\n context.options.deepClone,\n );\n\n const success = Reflect.deleteProperty(obj, prop);\n\n if (success) {\n // Dispatch path-specific event\n context.eventTarget.dispatchEvent({\n type: `update:${propPath}` as keyof ObservableEventMap<T> & string,\n detail: {\n value: undefined,\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n\n // Dispatch top-level update event\n context.eventTarget.dispatchEvent({\n type: 'update' as keyof ObservableEventMap<T> & string,\n detail: {\n current: context.originalRoot,\n previous: previousState,\n },\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n }\n\n return success;\n },\n });\n\n // Register the proxy\n contextRegistry.set(context as unknown as ProxyContext<object>, {\n proxy,\n path,\n });\n\n return proxy;\n}\n\n// =============================================================================\n// EventTarget Forwarding\n// =============================================================================\n\n/** Duck-type check for EventTarget */\nfunction isEventTarget(obj: unknown): obj is MinimalEventTarget {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n typeof (obj as MinimalEventTarget).addEventListener === 'function' &&\n typeof (obj as MinimalEventTarget).removeEventListener === 'function' &&\n typeof (obj as MinimalEventTarget).dispatchEvent === 'function'\n );\n}\n\n/**\n * Sets up event forwarding from a source EventTarget to an EventEmission target.\n *\n * This function enables integration between DOM EventTargets and EventEmission targets.\n * When listeners are added to the target, corresponding forwarding handlers are\n * automatically registered on the source. Update events are not forwarded to\n * prevent circular event loops.\n *\n * @template T - The object type whose events are being forwarded.\n * @param source - The DOM EventTarget to forward events from.\n * @param target - The EventEmission target to forward events to.\n * @returns A cleanup function that removes all forwarding handlers when called.\n *\n * @example\n * ```typescript\n * const domElement = document.getElementById('my-element');\n * const events = createEventTarget<{ click: MouseEvent; focus: FocusEvent }>();\n *\n * const cleanup = setupEventForwarding(domElement, events);\n *\n * // When you add listeners to events, they will receive events from domElement\n * events.addEventListener('click', (event) => {\n * console.log('Click received via forwarding');\n * });\n *\n * // Stop forwarding when done\n * cleanup();\n * ```\n */\nexport function setupEventForwarding<T extends object>(\n source: MinimalEventTarget,\n target: EventTargetLike<ObservableEventMap<T>>,\n): () => void {\n const handlers = new Map<string, (event: unknown) => void>();\n const sourceAddEventListener = source.addEventListener.bind(source);\n const sourceRemoveEventListener = source.removeEventListener.bind(source);\n\n const forwardHandler = (type: string) => (event: unknown) => {\n const detail = (event as MinimalCustomEvent).detail ?? event;\n target.dispatchEvent({\n type: type as keyof ObservableEventMap<T> & string,\n detail,\n } as EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>);\n };\n\n // Save original method reference without mutating target\n const originalAddEventListener = target.addEventListener.bind(target);\n\n // Create a wrapped addEventListener that also sets up forwarding\n const wrappedAddEventListener = ((\n type: string,\n listener: (event: EmissionEvent<unknown>) => void | Promise<void>,\n options?: unknown,\n ) => {\n // Forward non-update events from source (lazily, once per type)\n if (!handlers.has(type) && type !== 'update' && !type.startsWith('update:')) {\n const handler = forwardHandler(type);\n handlers.set(type, handler);\n sourceAddEventListener(type, handler);\n }\n return originalAddEventListener(\n type as keyof ObservableEventMap<T> & string,\n listener as (\n event: EmissionEvent<ObservableEventMap<T>[keyof ObservableEventMap<T>]>,\n ) => void,\n options as Parameters<typeof originalAddEventListener>[2],\n );\n }) as typeof target.addEventListener;\n\n // Replace the addEventListener method\n (target as { addEventListener: typeof wrappedAddEventListener }).addEventListener =\n wrappedAddEventListener;\n\n return () => {\n // Restore original addEventListener\n (target as { addEventListener: typeof originalAddEventListener }).addEventListener =\n originalAddEventListener;\n // Clean up all forwarding handlers\n for (const [type, handler] of handlers) {\n sourceRemoveEventListener(type, handler);\n }\n handlers.clear();\n };\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Checks if an object is an observed proxy created by createObservableProxy.\n *\n * Use this to determine whether an object is being tracked for changes.\n * Useful for conditional logic or debugging.\n *\n * @param obj - The object to check.\n * @returns True if the object is an observed proxy, false otherwise.\n *\n * @example\n * ```typescript\n * const original = { count: 0 };\n * const state = createEventTarget(original, { observe: true });\n *\n * console.log(isObserved(original)); // false\n * console.log(isObserved(state)); // true\n * ```\n */\nexport function isObserved(obj: unknown): boolean {\n return isProxied(obj);\n}\n\n/**\n * Retrieves the original unproxied object from an observed proxy.\n *\n * When you pass an object to createEventTarget with observe: true, a Proxy\n * wrapper is created. This function returns the underlying original object,\n * which is useful when you need direct access without triggering events.\n *\n * @template T - The object type.\n * @param proxy - The observed proxy (or any object).\n * @returns The original unproxied object. If the input is not a proxy, returns it unchanged.\n *\n * @example\n * ```typescript\n * const original = { count: 0 };\n * const state = createEventTarget(original, { observe: true });\n *\n * // state is a Proxy wrapping original\n * const unwrapped = getOriginal(state);\n *\n * console.log(unwrapped === original); // true\n * console.log(unwrapped === state); // false\n * ```\n *\n * @example Passing to external APIs that don't work with Proxies\n * ```typescript\n * const data = createEventTarget({ items: [] }, { observe: true });\n *\n * // Some serialization libraries have issues with Proxies\n * const json = JSON.stringify(getOriginal(data));\n * ```\n */\nexport function getOriginal<T extends object>(proxy: T): T {\n if (!isProxied(proxy)) {\n return proxy;\n }\n return (proxy as Record<symbol, T>)[ORIGINAL_TARGET] ?? proxy;\n}\n\n/**\n * Creates an observable proxy that dispatches events when properties change.\n *\n * This function wraps an object in a Proxy that tracks all property modifications,\n * including nested objects and array mutations. Events are dispatched to the\n * provided event target for each change.\n *\n * If the target is an EventTarget, event forwarding is set up automatically and\n * cleaned up when the event target completes.\n *\n * Note: This is typically called internally by createEventTarget with observe: true.\n * You usually don't need to call this directly.\n *\n * @template T - The object type being observed.\n * @param target - The object to observe.\n * @param eventTarget - The event target to dispatch change events to.\n * @param options - Optional configuration for observation behavior.\n * @returns A proxied version of the target that dispatches events on changes.\n *\n * @example Direct usage (advanced)\n * ```typescript\n * import { createEventTarget, createObservableProxy } from 'event-emission';\n *\n * type State = { count: number };\n * const eventTarget = createEventTarget<ObservableEventMap<State>>();\n * const original = { count: 0 };\n *\n * const state = createObservableProxy(original, eventTarget, {\n * deep: true,\n * cloneStrategy: 'path',\n * });\n *\n * eventTarget.addEventListener('update', (event) => {\n * console.log('State changed:', event.detail);\n * });\n *\n * state.count = 1; // Triggers 'update' and 'update:count' events\n * ```\n *\n * @example Typical usage via createEventTarget\n * ```typescript\n * const state = createEventTarget({ count: 0 }, { observe: true });\n *\n * state.addEventListener('update:count', (event) => {\n * console.log('Count changed to:', event.detail.value);\n * });\n *\n * state.count = 1; // Triggers the event\n * ```\n */\nexport function createObservableProxy<T extends object>(\n target: T,\n eventTarget: EventTargetLike<ObservableEventMap<T>>,\n options?: ObserveOptions,\n): T {\n const resolvedOptions: ResolvedObserveOptions = {\n deep: options?.deep ?? true,\n cloneStrategy: options?.cloneStrategy ?? 'path',\n deepClone: options?.deepClone,\n };\n\n const context: ProxyContext<T> = {\n eventTarget,\n originalRoot: target, // Keep reference to original, never the proxy\n options: resolvedOptions,\n };\n\n const proxy = createObservableProxyInternal(target, '', context);\n\n // Set up event forwarding if target is already an EventTarget\n if (isEventTarget(target)) {\n const cleanupForwarding = setupEventForwarding(\n target as unknown as MinimalEventTarget,\n eventTarget,\n );\n const maybeComplete = (eventTarget as { complete?: () => void }).complete;\n if (typeof maybeComplete === 'function') {\n const originalComplete = maybeComplete.bind(eventTarget);\n let cleaned = false;\n (eventTarget as { complete: () => void }).complete = () => {\n if (!cleaned) {\n cleaned = true;\n cleanupForwarding();\n }\n return originalComplete();\n };\n }\n }\n\n return proxy;\n}\n\n/* eslint-enable @typescript-eslint/no-unsafe-assignment */\n/* eslint-enable @typescript-eslint/no-redundant-type-constituents */\n",
8
8
  "/**\n * Error thrown when an async iterator's event buffer overflows\n * and the overflow strategy is 'throw'.\n */\nexport class BufferOverflowError extends Error {\n constructor(eventType: string, bufferSize: number) {\n super(`Buffer overflow for event type \"${eventType}\" (max: ${bufferSize})`);\n this.name = 'BufferOverflowError';\n }\n}\n",
9
- "import { BufferOverflowError } from './errors';\nimport { Observable, type SubscriptionObserver } from './observable';\nimport {\n createObservableProxy,\n type ObservableEventMap,\n type ObserveOptions,\n} from './observe';\nimport { SymbolObservable } from './symbols';\nimport type {\n AddEventListenerOptionsLike,\n AsyncIteratorOptions,\n EmissionEvent,\n EventTargetLike,\n Listener,\n ObservableLike,\n Observer,\n OnOptions,\n WildcardEvent,\n WildcardListener,\n} from './types';\n\n/**\n * Check if a pattern matches a wildcard pattern.\n */\nfunction matchesWildcard(eventType: string, pattern: string): boolean {\n if (pattern === '*') return true;\n return pattern.endsWith(':*') && eventType.startsWith(pattern.slice(0, -2) + ':');\n}\n\ntype EventPathStruct = {\n invocationTarget: unknown;\n invocationTargetInShadowTree: boolean;\n shadowAdjustedTarget: unknown;\n relatedTarget: unknown;\n touchTargets: unknown[];\n rootOfClosedTree: boolean;\n slotInClosedTree: boolean;\n};\n\ntype EventDispatchState = {\n dispatchFlag: boolean;\n initializedFlag: boolean;\n stopPropagationFlag: boolean;\n stopImmediatePropagationFlag: boolean;\n canceledFlag: boolean;\n inPassiveListenerFlag: boolean;\n composedFlag: boolean;\n eventPhase: number;\n currentTarget: unknown;\n target: unknown;\n timeStamp: number;\n path: EventPathStruct[];\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n isTrusted: boolean;\n};\n\nconst EVENT_STATE = Symbol('event-emission:event-state');\n\n/**\n * Options for createEventTarget.\n *\n * @property onListenerError - Custom error handler called when a listener throws.\n * If not provided, errors are emitted as 'error' events or re-thrown.\n */\nexport interface CreateEventTargetOptions {\n /** Custom error handler for listener errors. Receives event type and error. */\n onListenerError?: (type: string, error: unknown) => void;\n}\n\n/**\n * Options for createEventTarget with observe mode.\n * Extends CreateEventTargetOptions with proxy observation settings.\n *\n * @property observe - Must be true to enable observation mode.\n * @property deep - If true, nested objects are also observed (default: true).\n * @property cloneStrategy - Strategy for cloning previous state: 'shallow', 'deep', or 'path'.\n */\nexport interface CreateEventTargetObserveOptions\n extends CreateEventTargetOptions, ObserveOptions {\n /** Must be true to enable observation mode. */\n observe: true;\n}\n\n/**\n * Creates a type-safe event target with DOM EventTarget and TC39 Observable compatibility.\n *\n * @template E - Event map type where keys are event names and values are event detail types.\n * @param opts - Optional configuration options.\n * @returns A type-safe event target implementing EventTargetLike.\n *\n * @example\n * ```typescript\n * // Define event types\n * type Events = {\n * 'user:login': { userId: string };\n * 'user:logout': { reason: string };\n * };\n *\n * // Create event target\n * const events = createEventTarget<Events>();\n *\n * // Add typed listener\n * events.addEventListener('user:login', (event) => {\n * console.log(`User logged in: ${event.detail.userId}`);\n * });\n *\n * // Dispatch typed event\n * events.dispatchEvent({ type: 'user:login', detail: { userId: '123' } });\n * ```\n *\n * @overload Creates a basic event target\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nexport function createEventTarget<E extends Record<string, any>>(\n opts?: CreateEventTargetOptions,\n): EventTargetLike<E>;\n\n/**\n * Creates an observable proxy that dispatches events when properties change.\n *\n * @template T - The type of object to observe.\n * @param target - The object to wrap with an observable proxy.\n * @param opts - Configuration options with observe: true.\n * @returns The proxied object with EventTargetLike methods mixed in.\n *\n * @example\n * ```typescript\n * // Create observable state\n * const state = createEventTarget({ count: 0, user: { name: 'Alice' } }, {\n * observe: true,\n * deep: true,\n * });\n *\n * // Listen for any update\n * state.addEventListener('update', (event) => {\n * console.log('State changed:', event.detail.current);\n * });\n *\n * // Listen for specific property changes\n * state.addEventListener('update:count', (event) => {\n * console.log('Count changed to:', event.detail.value);\n * });\n *\n * // Mutations trigger events automatically\n * state.count = 1; // Triggers 'update' and 'update:count'\n * state.user.name = 'Bob'; // Triggers 'update' and 'update:user.name'\n * ```\n *\n * @overload Wraps an object with a Proxy that dispatches events on mutations\n */\nexport function createEventTarget<T extends object>(\n target: T,\n opts: CreateEventTargetObserveOptions,\n): T & EventTargetLike<ObservableEventMap<T>>;\n\n/**\n * Creates a type-safe event target with DOM EventTarget and TC39 Observable compatibility.\n *\n * This is the main factory function for creating event emitters. It supports two modes:\n *\n * 1. **Basic Mode**: Creates a standalone event target for pub/sub messaging.\n * 2. **Observe Mode**: Wraps an object with a Proxy that automatically dispatches\n * events when properties are modified.\n *\n * Listener errors are handled via 'error' event: if a listener throws,\n * an 'error' event is emitted. If no 'error' listener is registered,\n * the error is re-thrown (Node.js behavior).\n *\n * @param targetOrOpts - Either the object to observe, or configuration options.\n * @param opts - Configuration options when first argument is an object to observe.\n * @returns Either an EventTargetLike or a proxied object with EventTargetLike methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nexport function createEventTarget<T extends object, E extends Record<string, any>>(\n targetOrOpts?: T | CreateEventTargetOptions,\n opts?: CreateEventTargetObserveOptions,\n): EventTargetLike<E> | (T & EventTargetLike<ObservableEventMap<T>>) {\n // Handle observe mode - opts.observe must be explicitly true\n if (opts?.observe === true && targetOrOpts && typeof targetOrOpts === 'object') {\n const target = targetOrOpts as T;\n const eventTarget = createEventTargetInternal<ObservableEventMap<T>>({\n onListenerError: opts.onListenerError,\n });\n\n const proxy = createObservableProxy(target, eventTarget, {\n deep: opts.deep,\n cloneStrategy: opts.cloneStrategy,\n deepClone: opts.deepClone,\n });\n\n // Copy eventTarget methods onto the proxy\n // Use defineProperty to avoid triggering proxy traps\n const methodNames = [\n 'addEventListener',\n 'removeEventListener',\n 'dispatchEvent',\n 'clear',\n 'on',\n 'once',\n 'removeAllListeners',\n 'pipe',\n 'addWildcardListener',\n 'removeWildcardListener',\n 'complete',\n 'subscribe',\n 'toObservable',\n 'events',\n ] as const;\n\n for (const name of methodNames) {\n Object.defineProperty(proxy, name, {\n value: eventTarget[name],\n writable: false,\n enumerable: false,\n configurable: true,\n });\n }\n\n // Add completed getter\n Object.defineProperty(proxy, 'completed', {\n get: () => eventTarget.completed,\n enumerable: false,\n configurable: true,\n });\n\n return proxy as T & EventTargetLike<ObservableEventMap<T>>;\n }\n\n // Original behavior\n return createEventTargetInternal<E>(\n targetOrOpts as CreateEventTargetOptions | undefined,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nfunction createEventTargetInternal<E extends Record<string, any>>(\n opts?: CreateEventTargetOptions,\n): EventTargetLike<E> {\n const listeners = new Map<string, Array<Listener<E[keyof E]>>>();\n const wildcardListeners = new Set<WildcardListener<E>>();\n let isCompleted = false;\n const completionCallbacks = new Set<() => void>();\n\n const now = () =>\n typeof globalThis.performance?.now === 'function'\n ? globalThis.performance.now()\n : Date.now();\n\n const initializeEventState = (\n state: EventDispatchState,\n type: string,\n bubbles: boolean,\n cancelable: boolean,\n ) => {\n state.initializedFlag = true;\n state.stopPropagationFlag = false;\n state.stopImmediatePropagationFlag = false;\n state.canceledFlag = false;\n state.isTrusted = false;\n state.target = null;\n state.currentTarget = null;\n state.eventPhase = 0;\n state.type = type;\n state.bubbles = bubbles;\n state.cancelable = cancelable;\n };\n\n const setCanceledFlag = (state: EventDispatchState) => {\n if (state.cancelable && !state.inPassiveListenerFlag) {\n state.canceledFlag = true;\n }\n };\n\n /**\n * Helper to create a DOM-compatible event.\n */\n const createEvent = <T>(\n type: string,\n detail: T,\n init?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n timeStamp?: number;\n target?: unknown;\n currentTarget?: unknown;\n eventPhase?: number;\n },\n ): EmissionEvent<T> => {\n const state: EventDispatchState = {\n dispatchFlag: false,\n initializedFlag: true,\n stopPropagationFlag: false,\n stopImmediatePropagationFlag: false,\n canceledFlag: false,\n inPassiveListenerFlag: false,\n composedFlag: Boolean(init?.composed),\n eventPhase: init?.eventPhase ?? 0,\n currentTarget: init?.currentTarget ?? init?.target ?? null,\n target: init?.target ?? null,\n timeStamp: init?.timeStamp ?? now(),\n path: [],\n type,\n bubbles: Boolean(init?.bubbles),\n cancelable: Boolean(init?.cancelable),\n isTrusted: false,\n };\n\n const event = { detail } as EmissionEvent<T>;\n Object.defineProperties(event, {\n type: {\n get: () => state.type,\n enumerable: true,\n configurable: true,\n },\n bubbles: {\n get: () => state.bubbles,\n enumerable: true,\n configurable: true,\n },\n cancelable: {\n get: () => state.cancelable,\n enumerable: true,\n configurable: true,\n },\n cancelBubble: {\n get: () => state.stopPropagationFlag,\n set: (value: boolean) => {\n if (value) state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n composed: {\n get: () => state.composedFlag,\n enumerable: true,\n configurable: true,\n },\n currentTarget: {\n get: () => state.currentTarget,\n enumerable: true,\n configurable: true,\n },\n defaultPrevented: {\n get: () => state.canceledFlag,\n enumerable: true,\n configurable: true,\n },\n eventPhase: {\n get: () => state.eventPhase,\n enumerable: true,\n configurable: true,\n },\n isTrusted: {\n get: () => state.isTrusted,\n enumerable: true,\n configurable: true,\n },\n returnValue: {\n get: () => !state.canceledFlag,\n set: (value: boolean) => {\n if (value === false) setCanceledFlag(state);\n },\n enumerable: true,\n configurable: true,\n },\n srcElement: {\n get: () => state.target,\n enumerable: true,\n configurable: true,\n },\n target: {\n get: () => state.target,\n enumerable: true,\n configurable: true,\n },\n timeStamp: {\n get: () => state.timeStamp,\n enumerable: true,\n configurable: true,\n },\n composedPath: {\n value: () => state.path.map((entry) => entry.invocationTarget),\n enumerable: true,\n configurable: true,\n },\n initEvent: {\n value: (newType: string, bubbles = false, cancelable = false) => {\n if (state.dispatchFlag) return;\n initializeEventState(state, newType, Boolean(bubbles), Boolean(cancelable));\n },\n enumerable: true,\n configurable: true,\n },\n preventDefault: {\n value: () => setCanceledFlag(state),\n enumerable: true,\n configurable: true,\n },\n stopImmediatePropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n state.stopImmediatePropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n stopPropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n NONE: { value: 0, enumerable: true, configurable: true },\n CAPTURING_PHASE: { value: 1, enumerable: true, configurable: true },\n AT_TARGET: { value: 2, enumerable: true, configurable: true },\n BUBBLING_PHASE: { value: 3, enumerable: true, configurable: true },\n [EVENT_STATE]: {\n value: state,\n enumerable: false,\n configurable: false,\n },\n });\n\n return event;\n };\n\n const getEventState = (event: EmissionEvent<unknown>): EventDispatchState | undefined =>\n (event as { [EVENT_STATE]?: EventDispatchState })[EVENT_STATE];\n\n const normalizeAddListenerOptions = (\n options?: AddEventListenerOptionsLike | boolean,\n ) => {\n if (typeof options === 'boolean') {\n return {\n capture: options,\n passive: false,\n once: false,\n signal: null as AddEventListenerOptionsLike['signal'] | null,\n };\n }\n\n return {\n capture: Boolean(options?.capture),\n passive: Boolean(options?.passive),\n once: Boolean(options?.once),\n signal: options?.signal ?? null,\n };\n };\n\n const normalizeCaptureOption = (options?: { capture?: boolean } | boolean) => {\n if (typeof options === 'boolean') return options;\n return Boolean(options?.capture);\n };\n\n const removeListenerRecord = (type: string, record: Listener<E[keyof E]>) => {\n if (record.removed) return;\n record.removed = true;\n\n const list = listeners.get(type);\n if (list) {\n const idx = list.indexOf(record);\n if (idx >= 0) list.splice(idx, 1);\n if (list.length === 0) listeners.delete(type);\n }\n\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n };\n\n // Helper to handle listener errors: emit 'error' event or re-throw if no listener\n const handleListenerError = (eventType: string, error: unknown) => {\n // Prevent infinite recursion if 'error' listener itself throws\n if (eventType === 'error') return;\n\n // If custom error handler provided, use it\n if (opts?.onListenerError) {\n opts.onListenerError(eventType, error);\n return;\n }\n\n const errorListeners = listeners.get('error');\n if (errorListeners && errorListeners.length > 0) {\n dispatchEvent({ type: 'error', detail: error } as Parameters<\n EventTargetLike<E>['dispatchEvent']\n >[0]);\n } else {\n // No 'error' listener - re-throw (Node.js behavior)\n throw error;\n }\n };\n\n const notifyWildcardListeners = (\n eventType: string,\n event: EmissionEvent<E[keyof E]>,\n ) => {\n if (wildcardListeners.size === 0) return;\n\n for (const rec of Array.from(wildcardListeners)) {\n if (!matchesWildcard(eventType, rec.pattern)) continue;\n\n // Create wildcard event based on a DOM-compatible event\n const baseEvent = createEvent(rec.pattern, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n });\n const wildcardEvent: WildcardEvent<E> = Object.defineProperties(baseEvent, {\n originalType: { value: eventType, enumerable: true, configurable: true },\n }) as WildcardEvent<E>;\n\n try {\n const fn = rec.fn as (event: WildcardEvent<E>) => void | Promise<void>;\n const res = fn(wildcardEvent);\n if (res && typeof res.then === 'function') {\n res.catch((error) => {\n try {\n handleListenerError(eventType, error);\n } catch (rethrown) {\n // Re-throw async errors via queueMicrotask to preserve stack trace\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error) {\n handleListenerError(eventType, error);\n } finally {\n if (rec.once) wildcardListeners.delete(rec);\n }\n\n const state = getEventState(wildcardEvent);\n if (state?.stopImmediatePropagationFlag || state?.stopPropagationFlag) {\n break;\n }\n }\n };\n\n const addEventListener: EventTargetLike<E>['addEventListener'] = (\n type,\n listener,\n options,\n ) => {\n if (isCompleted || !listener) {\n // Return no-op unsubscribe if already completed\n return () => {};\n }\n\n const { capture, passive, once, signal } = normalizeAddListenerOptions(options);\n let list = listeners.get(type);\n if (!list) {\n list = [];\n listeners.set(type, list);\n }\n\n for (const existing of list) {\n if (existing.original === listener && existing.capture === capture) {\n return () =>\n removeEventListener(type, listener, options as boolean | { capture?: boolean });\n }\n }\n\n const original = listener as Listener<E[keyof E]>['original'];\n const callback =\n typeof listener === 'function'\n ? (listener as Listener<E[keyof E]>['callback'])\n : (event: EmissionEvent<E[keyof E]>) =>\n (\n listener as {\n handleEvent: Listener<E[keyof E]>['callback'];\n }\n ).handleEvent(event);\n\n const record: Listener<E[keyof E]> = {\n type,\n original,\n callback,\n capture,\n passive,\n once,\n signal,\n removed: false,\n };\n list.push(record);\n\n const unsubscribe = () => removeListenerRecord(type, record);\n\n if (signal) {\n const onAbort = () => removeListenerRecord(type, record);\n record.abortHandler = onAbort;\n signal.addEventListener('abort', onAbort, { once: true });\n if (signal.aborted) onAbort();\n }\n\n return unsubscribe;\n };\n\n const addWildcardListener: EventTargetLike<E>['addWildcardListener'] = (\n pattern,\n listener,\n options,\n ) => {\n if (isCompleted) return () => {};\n\n const opts2 = options ?? {};\n for (const existing of wildcardListeners) {\n if (existing.pattern === pattern && existing.fn === listener) {\n return () => removeWildcardListener(pattern, listener);\n }\n }\n const record: WildcardListener<E> = {\n fn: listener,\n pattern,\n once: opts2.once,\n signal: opts2.signal,\n };\n wildcardListeners.add(record);\n\n const unsubscribe = () => {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n };\n\n if (opts2.signal) {\n const onAbort = () => unsubscribe();\n record.abortHandler = onAbort;\n opts2.signal.addEventListener('abort', onAbort, { once: true });\n if (opts2.signal.aborted) onAbort();\n }\n\n return unsubscribe;\n };\n\n const removeWildcardListener: EventTargetLike<E>['removeWildcardListener'] = (\n pattern,\n listener,\n ) => {\n for (const record of Array.from(wildcardListeners)) {\n if (record.pattern === pattern && record.fn === listener) {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n }\n };\n\n const invokeListeners = (\n eventType: string,\n event: EmissionEvent<E[keyof E]>,\n phase: 'capturing' | 'bubbling',\n listenersSnapshot: Array<Listener<E[keyof E]>>,\n ) => {\n const state = getEventState(event);\n if (!state || state.stopPropagationFlag) return;\n\n state.currentTarget = target;\n state.target = target;\n state.eventPhase = event.AT_TARGET;\n\n for (const rec of listenersSnapshot) {\n if (rec.removed) continue;\n if (phase === 'capturing' && !rec.capture) continue;\n if (phase === 'bubbling' && rec.capture) continue;\n\n if (rec.once) removeListenerRecord(rec.type, rec);\n\n if (rec.passive) state.inPassiveListenerFlag = true;\n try {\n const res = rec.callback.call(state.currentTarget, event);\n if (res && typeof res.then === 'function') {\n res.catch((error) => {\n try {\n handleListenerError(eventType, error);\n } catch (rethrown) {\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error) {\n handleListenerError(eventType, error);\n } finally {\n if (rec.passive) state.inPassiveListenerFlag = false;\n }\n\n if (state.stopImmediatePropagationFlag) break;\n }\n };\n\n const dispatchEvent: EventTargetLike<E>['dispatchEvent'] = (eventInput) => {\n if (isCompleted) return false;\n\n let event: EmissionEvent<E[keyof E]>;\n let state: EventDispatchState | undefined;\n\n if (eventInput && typeof eventInput === 'object') {\n state = getEventState(eventInput as EmissionEvent<unknown>);\n if (state) {\n event = eventInput as EmissionEvent<E[keyof E]>;\n } else {\n const input = eventInput as {\n type: string;\n detail?: E[keyof E];\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n timeStamp?: number;\n };\n if (typeof input.type !== 'string') {\n throw new TypeError('Event type must be a string');\n }\n event = createEvent(input.type, input.detail as E[keyof E], {\n bubbles: input.bubbles,\n cancelable: input.cancelable,\n composed: input.composed,\n timeStamp: input.timeStamp,\n });\n state = getEventState(event)!;\n }\n } else {\n throw new TypeError('dispatchEvent expects an event object');\n }\n\n const dispatchState = state ?? getEventState(event)!;\n\n if (dispatchState.dispatchFlag || !dispatchState.initializedFlag) {\n const message =\n 'Failed to execute dispatchEvent: event is already being dispatched';\n if (typeof globalThis.DOMException === 'function') {\n throw new globalThis.DOMException(message, 'InvalidStateError');\n }\n const err = new Error(message);\n err.name = 'InvalidStateError';\n throw err;\n }\n\n dispatchState.isTrusted = false;\n dispatchState.dispatchFlag = true;\n dispatchState.path = [\n {\n invocationTarget: target,\n invocationTargetInShadowTree: false,\n shadowAdjustedTarget: target,\n relatedTarget: null,\n touchTargets: [],\n rootOfClosedTree: false,\n slotInClosedTree: false,\n },\n ];\n\n // Notify wildcard listeners first (no overhead if none registered)\n notifyWildcardListeners(dispatchState.type, event);\n\n const list = listeners.get(dispatchState.type);\n const snapshot = list ? list.slice() : [];\n invokeListeners(dispatchState.type, event, 'capturing', snapshot);\n invokeListeners(dispatchState.type, event, 'bubbling', snapshot);\n\n dispatchState.eventPhase = event.NONE;\n dispatchState.currentTarget = null;\n dispatchState.path = [];\n dispatchState.dispatchFlag = false;\n dispatchState.stopPropagationFlag = false;\n dispatchState.stopImmediatePropagationFlag = false;\n\n return !dispatchState.canceledFlag;\n };\n\n const removeEventListener: EventTargetLike<E>['removeEventListener'] = (\n type,\n listener,\n options,\n ) => {\n if (!listener) return;\n const capture = normalizeCaptureOption(options);\n const list = listeners.get(type);\n if (!list) return;\n\n for (const record of [...list]) {\n if (record.original === listener && record.capture === capture) {\n removeListenerRecord(type, record);\n }\n }\n };\n\n const clear = () => {\n for (const [type, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners too\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n // Note: clear() does NOT trigger completion callbacks or set isCompleted\n // Use complete() for that\n };\n\n // New ergonomics\n\n const on: EventTargetLike<E>['on'] = (type, options) => {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n return new Observable<EmissionEvent<any>>(\n (observer: SubscriptionObserver<EmissionEvent<any>>) => {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n let opts: OnOptions;\n if (typeof options === 'boolean') {\n opts = { capture: options };\n } else {\n opts = options ?? {};\n }\n\n const handler = opts.handler;\n const once = opts.once;\n\n const eventHandler = (e: EmissionEvent<unknown>) => {\n let success = false;\n try {\n if (handler) {\n handler(e);\n }\n observer.next(e);\n success = true;\n } finally {\n if (once && success) {\n observer.complete();\n }\n }\n };\n\n const errorHandler = (e: EmissionEvent<unknown>) => {\n observer.error(e.detail);\n };\n\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n const unsubscribeEvent = addEventListener(\n type as keyof E & string,\n eventHandler as any,\n opts,\n );\n\n let unsubscribeError: (() => void) | undefined;\n if (opts.receiveError) {\n unsubscribeError = addEventListener(\n 'error' as keyof E & string,\n errorHandler as any,\n opts,\n );\n }\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n\n return () => {\n unsubscribeEvent();\n if (unsubscribeError) {\n unsubscribeError();\n }\n };\n },\n );\n };\n\n const onceMethod: EventTargetLike<E>['once'] = (type, listener, options) => {\n if (typeof options === 'boolean') {\n return addEventListener(type, listener, { capture: options, once: true });\n }\n return addEventListener(type, listener, { ...(options ?? {}), once: true });\n };\n\n const removeAllListeners: EventTargetLike<E>['removeAllListeners'] = (type) => {\n if (type !== undefined) {\n const list = listeners.get(type);\n if (list) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n listeners.delete(type);\n }\n } else {\n // Clear all listeners for all types\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners too\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n }\n };\n\n /**\n * Pipe events from this emitter to another target.\n *\n * Forwards all events. If mapFn returns null, the event is skipped.\n */\n const pipe: EventTargetLike<E>['pipe'] = (target, mapFn) => {\n if (isCompleted) {\n return () => {};\n }\n\n const unsubscribe = addWildcardListener('*', (event) => {\n if (mapFn) {\n const mapped = mapFn(\n createEvent(event.originalType, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n }) as EmissionEvent<E[keyof E & string], keyof E & string>,\n );\n if (mapped !== null) {\n // Type assertion via unknown is needed because mapFn output type matches target's event map\n target.dispatchEvent(\n mapped as unknown as Parameters<typeof target.dispatchEvent>[0],\n );\n }\n } else {\n // Type assertion via unknown is needed because caller ensures E and T are compatible\n target.dispatchEvent({\n type: event.originalType,\n detail: event.detail,\n } as unknown as Parameters<typeof target.dispatchEvent>[0]);\n }\n });\n\n // Clean up on completion\n const completionUnsub = () => {\n unsubscribe();\n };\n completionCallbacks.add(completionUnsub);\n\n return () => {\n completionCallbacks.delete(completionUnsub);\n unsubscribe();\n };\n };\n\n const complete = () => {\n if (isCompleted) return;\n isCompleted = true;\n\n // Trigger completion callbacks (pipes, subscriptions)\n for (const cb of completionCallbacks) {\n try {\n cb();\n } catch (err) {\n // Completion callback errors use handleListenerError\n // Use 'complete' as the event type for these errors\n try {\n handleListenerError('complete', err);\n } catch {\n // Swallow if no error listener\n }\n }\n }\n completionCallbacks.clear();\n\n // Clear all listeners\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n };\n\n // Observable interoperability\n const subscribe: EventTargetLike<E>['subscribe'] = (\n type,\n observerOrNext,\n error,\n completeHandler,\n ) => {\n let observer: Observer<EmissionEvent<E[keyof E & string]>>;\n\n if (typeof observerOrNext === 'function') {\n observer = {\n next: observerOrNext as (value: EmissionEvent<E[keyof E & string]>) => void,\n error,\n complete: completeHandler,\n };\n } else {\n observer = (observerOrNext ?? {}) as Observer<EmissionEvent<E[keyof E & string]>>;\n }\n\n let closed = false;\n\n if (isCompleted) {\n // Already completed, call complete immediately\n if (observer.complete) {\n try {\n observer.complete();\n } catch {\n // Swallow\n }\n }\n return {\n unsubscribe: () => {\n closed = true;\n },\n get closed() {\n return closed || isCompleted;\n },\n };\n }\n\n const unsub = addEventListener(type, (event) => {\n if (closed) return;\n if (observer.next) {\n try {\n observer.next(event as EmissionEvent<E[keyof E & string]>);\n } catch (err) {\n if (observer.error) {\n try {\n observer.error(err);\n } catch {\n // Swallow\n }\n }\n }\n }\n });\n\n // Track completion callback\n const onComplete = () => {\n if (closed) return;\n closed = true;\n if (observer.complete) {\n try {\n observer.complete();\n } catch {\n // Swallow\n }\n }\n };\n completionCallbacks.add(onComplete);\n\n return {\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n completionCallbacks.delete(onComplete);\n unsub();\n },\n get closed() {\n return closed || isCompleted;\n },\n };\n };\n\n const toObservable: EventTargetLike<E>['toObservable'] = () => {\n return new Observable<EmissionEvent<E[keyof E]>>(\n (observer: SubscriptionObserver<EmissionEvent<E[keyof E]>>) => {\n if (isCompleted) {\n observer.complete();\n return;\n }\n\n const wildcardListener = (event: WildcardEvent<E>) => {\n // Emit an augmented event with the actual type\n observer.next(\n createEvent(event.originalType, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n }),\n );\n };\n\n const unsubscribe = addWildcardListener('*', wildcardListener);\n\n const onComplete = () => {\n observer.complete();\n };\n completionCallbacks.add(onComplete);\n\n return () => {\n unsubscribe();\n completionCallbacks.delete(onComplete);\n };\n },\n );\n };\n\n // Async iterator\n function events<K extends keyof E & string>(\n type: K,\n options?: AsyncIteratorOptions,\n ): AsyncIterableIterator<EmissionEvent<E[K], K>> {\n // If already completed, return an iterator that immediately yields done\n if (isCompleted) {\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n return(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n };\n }\n\n const signal = options?.signal;\n const bufferSize = options?.bufferSize ?? Infinity;\n const overflowStrategy = options?.overflowStrategy ?? 'drop-oldest';\n\n const buffer: Array<EmissionEvent<E[K], K>> = [];\n let resolve: ((result: IteratorResult<EmissionEvent<E[K], K>>) => void) | null = null;\n let done = false;\n let hasOverflow = false;\n let onAbort: (() => void) | null = null;\n const cleanupAbortListener = () => {\n if (signal && onAbort) {\n signal.removeEventListener('abort', onAbort);\n }\n };\n\n const unsub = addEventListener(type, (event) => {\n if (done) return;\n const typedEvent = event;\n\n if (resolve) {\n // Someone is waiting, resolve immediately\n const r = resolve;\n resolve = null;\n r({ value: typedEvent, done: false });\n } else {\n // Buffer the event\n if (buffer.length >= bufferSize && bufferSize !== Infinity) {\n switch (overflowStrategy) {\n case 'drop-oldest':\n buffer.shift();\n buffer.push(typedEvent);\n break;\n case 'drop-latest':\n // Don't add the new event\n break;\n case 'throw':\n unsub();\n completionCallbacks.delete(onComplete);\n done = true;\n hasOverflow = true;\n cleanupAbortListener();\n return;\n }\n } else {\n buffer.push(typedEvent);\n }\n }\n });\n\n // Handle completion\n const onComplete = () => {\n done = true;\n cleanupAbortListener();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n };\n completionCallbacks.add(onComplete);\n\n // Handle abort signal\n if (signal) {\n onAbort = () => {\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n };\n signal.addEventListener('abort', onAbort, { once: true });\n if (signal.aborted) onAbort();\n }\n\n const iterator: AsyncIterableIterator<EmissionEvent<E[K], K>> = {\n [Symbol.asyncIterator]() {\n return this;\n },\n async next(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n // Drain buffered events first, even if done\n if (buffer.length > 0) {\n return { value: buffer.shift()!, done: false };\n }\n\n // Prevent concurrent next() calls - if there's already a pending promise, reject\n if (resolve !== null) {\n return Promise.reject(\n new Error(\n 'Concurrent calls to next() are not supported on this async iterator',\n ),\n );\n }\n\n // Wait for next event\n return new Promise<IteratorResult<EmissionEvent<E[K], K>>>(\n (_resolve, _reject) => {\n if (hasOverflow) {\n hasOverflow = false;\n _reject(new BufferOverflowError(type, bufferSize));\n return;\n }\n if (done) {\n _resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n return;\n }\n resolve = _resolve;\n },\n );\n },\n return(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n // Resolve any pending promise before cleanup\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n\n // Clean up abort signal listener\n cleanupAbortListener();\n\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n };\n\n return iterator;\n }\n\n const target: EventTargetLike<E> = {\n addEventListener,\n removeEventListener,\n dispatchEvent,\n clear,\n on,\n once: onceMethod,\n removeAllListeners,\n pipe,\n addWildcardListener,\n removeWildcardListener,\n complete,\n get completed() {\n return isCompleted;\n },\n subscribe,\n toObservable,\n events,\n };\n\n // Add Symbol.observable - return an observable that emits all events from all types\n (\n target as EventTargetLike<E> & {\n [key: symbol]: () => ObservableLike<EmissionEvent<E[keyof E]>>;\n }\n )[SymbolObservable] = () => {\n return toObservable();\n };\n\n return target;\n}\n",
10
- "import { createEventTarget } from './factory';\nimport type {\n DOMEventLike,\n DOMEventTargetLike,\n EmissionEvent,\n EventTargetLike,\n InteropOptions,\n} from './types';\n\nexport type { DOMEventLike, DOMEventTargetLike, InteropOptions } from './types';\n\n/**\n * Forward events from an EventEmission target to a DOM EventTarget.\n *\n * This function sets up a wildcard listener on the source that forwards\n * all events to the DOM target using dispatchEvent.\n *\n * @template E - Event map type of the source.\n * @param source - The EventEmission source to forward events from.\n * @param target - The DOM EventTarget to forward events to.\n * @param options - Optional configuration including abort signal.\n * @returns An unsubscribe function that stops forwarding when called.\n *\n * @example\n * ```typescript\n * const events = createEventTarget<{ click: { x: number; y: number } }>();\n * const button = document.getElementById('my-button');\n *\n * // Forward all events to the DOM button\n * const unsubscribe = forwardToEventTarget(events, button);\n *\n * // Now when you dispatch events on the EventEmission target,\n * // they will also be dispatched on the DOM element\n * events.dispatchEvent({ type: 'click', detail: { x: 100, y: 200 } });\n *\n * // Stop forwarding\n * unsubscribe();\n * ```\n */\nexport function forwardToEventTarget<E extends Record<string, unknown>>(\n source: EventTargetLike<E>,\n target: DOMEventTargetLike,\n options?: InteropOptions,\n): () => void {\n const unsubscribe = source.addWildcardListener(\n '*',\n (event) => {\n // Use CustomEvent when available to preserve DOM event semantics.\n const CustomEventCtor = (globalThis as { CustomEvent?: typeof CustomEvent })\n .CustomEvent;\n const domEvent: DOMEventLike =\n typeof CustomEventCtor === 'function'\n ? new CustomEventCtor(event.originalType, {\n detail: event.detail,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n })\n : {\n type: event.originalType,\n detail: event.detail,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n };\n target.dispatchEvent(domEvent);\n },\n options,\n );\n\n return unsubscribe;\n}\n\n/**\n * Options for creating an EventEmission target from a DOM EventTarget.\n */\nexport interface FromEventTargetOptions extends InteropOptions {\n /**\n * Callback invoked when a listener throws an error.\n * If not provided, errors will be re-thrown.\n */\n onListenerError?: (type: string, error: unknown) => void;\n}\n\n/**\n * Create an EventEmission target that listens to events from a DOM EventTarget.\n *\n * This function wraps a DOM EventTarget and forwards specified events to a new\n * EventEmission target, enabling type-safe event handling and TC39 Observable compatibility.\n *\n * @template E - Event map type where keys are event names and values are event detail types.\n * @param domTarget - The DOM EventTarget to listen to events from.\n * @param eventTypes - Array of event type names to forward from the DOM target.\n * @param options - Optional configuration including abort signal and error handler.\n * @returns An EventEmission target with a destroy() method for cleanup.\n *\n * @example Basic usage with DOM element\n * ```typescript\n * const button = document.getElementById('my-button');\n *\n * type ButtonEvents = {\n * click: MouseEvent;\n * focus: FocusEvent;\n * };\n *\n * const events = fromEventTarget<ButtonEvents>(button, ['click', 'focus']);\n *\n * // Type-safe event handling\n * events.addEventListener('click', (event) => {\n * console.log('Button clicked!', event.detail);\n * });\n *\n * // Clean up when done\n * events.destroy();\n * ```\n *\n * @example With AbortSignal for automatic cleanup\n * ```typescript\n * const controller = new AbortController();\n * const events = fromEventTarget<{ input: InputEvent }>(\n * textField,\n * ['input'],\n * { signal: controller.signal }\n * );\n *\n * // Later, abort to clean up all listeners\n * controller.abort();\n * ```\n *\n * @example Using TC39 Observable features\n * ```typescript\n * const events = fromEventTarget<{ scroll: Event }>(window, ['scroll']);\n *\n * // Subscribe with observer pattern\n * const subscription = events.subscribe({\n * next: (event) => console.log('Scrolled!'),\n * complete: () => console.log('Done'),\n * });\n *\n * // Or use async iteration\n * for await (const event of events.events('scroll')) {\n * console.log('Scroll event:', event);\n * }\n * ```\n */\nexport function fromEventTarget<E extends Record<string, unknown>>(\n domTarget: DOMEventTargetLike,\n eventTypes: Array<keyof E & string>,\n options?: FromEventTargetOptions,\n): EventTargetLike<E> & { destroy: () => void } {\n const emitter = createEventTarget<E>({\n onListenerError: options?.onListenerError,\n });\n\n const handlers = new Map<string, (event: DOMEventLike) => void>();\n\n for (const type of eventTypes) {\n const handler = (event: DOMEventLike) => {\n emitter.dispatchEvent({\n type,\n detail: (event.detail ?? event) as E[typeof type],\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n } as unknown as EmissionEvent<E[keyof E & string]>);\n };\n handlers.set(type, handler);\n domTarget.addEventListener(type, handler);\n }\n\n // Track abort handler for cleanup\n let onAbort: (() => void) | null = null;\n\n // Handle abort signal\n if (options?.signal) {\n onAbort = () => {\n for (const [type, handler] of handlers) {\n domTarget.removeEventListener(type, handler);\n }\n handlers.clear();\n emitter.complete();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n if (options.signal.aborted) onAbort();\n }\n\n return {\n addEventListener: emitter.addEventListener,\n removeEventListener: emitter.removeEventListener,\n dispatchEvent: emitter.dispatchEvent,\n clear: emitter.clear,\n once: emitter.once,\n removeAllListeners: emitter.removeAllListeners,\n pipe: emitter.pipe,\n addWildcardListener: emitter.addWildcardListener,\n removeWildcardListener: emitter.removeWildcardListener,\n on: emitter.on,\n subscribe: emitter.subscribe,\n toObservable: emitter.toObservable,\n complete: emitter.complete,\n get completed() {\n return emitter.completed;\n },\n events: emitter.events,\n destroy: () => {\n // Clean up abort signal listener to prevent memory leak\n if (options?.signal && onAbort) {\n options.signal.removeEventListener('abort', onAbort);\n }\n for (const [type, handler] of handlers) {\n domTarget.removeEventListener(type, handler);\n }\n handlers.clear();\n emitter.complete();\n },\n };\n}\n\n/**\n * Pipe events from one EventEmission target to another.\n *\n * This function sets up a wildcard listener on the source that forwards all\n * events to the target. Useful for composing event streams, creating event\n * buses, or building hierarchical event systems.\n *\n * @template E - Event map type shared by both source and target.\n * @param source - The EventEmission target to pipe events from.\n * @param target - The EventEmission target to pipe events to.\n * @param options - Optional configuration including abort signal.\n * @returns An unsubscribe function that stops piping when called.\n *\n * @example Basic event piping\n * ```typescript\n * const userEvents = createEventTarget<{ login: { userId: string } }>();\n * const globalBus = createEventTarget<{ login: { userId: string } }>();\n *\n * // Pipe all user events to global bus\n * const unsubscribe = pipe(userEvents, globalBus);\n *\n * // Events on userEvents now also dispatch on globalBus\n * globalBus.addEventListener('login', (event) => {\n * console.log('User logged in:', event.detail.userId);\n * });\n *\n * userEvents.dispatchEvent({ type: 'login', detail: { userId: '123' } });\n *\n * // Stop piping\n * unsubscribe();\n * ```\n *\n * @example With AbortSignal for automatic cleanup\n * ```typescript\n * const controller = new AbortController();\n * pipe(source, target, { signal: controller.signal });\n *\n * // Later, abort to stop piping\n * controller.abort();\n * ```\n *\n * @example Creating an event hierarchy\n * ```typescript\n * const componentA = createEventTarget<Events>();\n * const componentB = createEventTarget<Events>();\n * const appBus = createEventTarget<Events>();\n *\n * // Both components pipe to the app bus\n * pipe(componentA, appBus);\n * pipe(componentB, appBus);\n *\n * // Listen to all events at the app level\n * appBus.addWildcardListener('*', (event) => {\n * console.log('App event:', event.originalType, event.detail);\n * });\n * ```\n */\nexport function pipe<E extends Record<string, unknown>>(\n source: EventTargetLike<E>,\n target: EventTargetLike<E>,\n options?: InteropOptions,\n): () => void {\n return source.addWildcardListener(\n '*',\n (event) => {\n target.dispatchEvent({\n type: event.originalType,\n detail: event.detail as E[keyof E & string],\n } as unknown as Parameters<typeof target.dispatchEvent>[0]);\n },\n options,\n );\n}\n"
9
+ "import { BufferOverflowError } from './errors';\nimport { Observable, type SubscriptionObserver } from './observable';\nimport {\n createObservableProxy,\n type ObservableEventMap,\n type ObserveOptions,\n} from './observe';\nimport { SymbolObservable } from './symbols';\nimport type {\n AddEventListenerOptionsLike,\n AsyncIteratorOptions,\n EmissionEvent,\n EventListenerLike,\n EventTargetLike,\n Listener,\n ObservableLike,\n Observer,\n OnOptions,\n WildcardEvent,\n WildcardListener,\n} from './types';\n\n/**\n * Check if a pattern matches a wildcard pattern.\n */\nfunction matchesWildcard(eventType: string, pattern: string): boolean {\n if (pattern === '*') return true;\n return pattern.endsWith(':*') && eventType.startsWith(pattern.slice(0, -2) + ':');\n}\n\ntype EventPathStruct = {\n invocationTarget: unknown;\n invocationTargetInShadowTree: boolean;\n shadowAdjustedTarget: unknown;\n relatedTarget: unknown;\n touchTargets: unknown[];\n rootOfClosedTree: boolean;\n slotInClosedTree: boolean;\n};\n\ntype EventDispatchState = {\n dispatchFlag: boolean;\n initializedFlag: boolean;\n stopPropagationFlag: boolean;\n stopImmediatePropagationFlag: boolean;\n canceledFlag: boolean;\n inPassiveListenerFlag: boolean;\n composedFlag: boolean;\n eventPhase: number;\n currentTarget: unknown;\n target: unknown;\n timeStamp: number;\n path: EventPathStruct[];\n type: string;\n bubbles: boolean;\n cancelable: boolean;\n isTrusted: boolean;\n};\n\nconst EVENT_STATE = Symbol('event-emission:event-state');\n\n/**\n * Options for createEventTarget.\n *\n * @property onListenerError - Custom error handler called when a listener throws.\n * If not provided, errors are emitted as 'error' events or re-thrown.\n */\nexport interface CreateEventTargetOptions {\n /** Custom error handler for listener errors. Receives event type and error. */\n onListenerError?: (type: string, error: unknown) => void;\n}\n\n/**\n * Options for createEventTarget with observe mode.\n * Extends CreateEventTargetOptions with proxy observation settings.\n *\n * @property observe - Must be true to enable observation mode.\n * @property deep - If true, nested objects are also observed (default: true).\n * @property cloneStrategy - Strategy for cloning previous state: 'shallow', 'deep', or 'path'.\n */\nexport interface CreateEventTargetObserveOptions\n extends CreateEventTargetOptions, ObserveOptions {\n /** Must be true to enable observation mode. */\n observe: true;\n}\n\n/**\n * Creates a type-safe event target with DOM EventTarget and TC39 Observable compatibility.\n *\n * @template E - Event map type where keys are event names and values are event detail types.\n * @param opts - Optional configuration options.\n * @returns A type-safe event target implementing EventTargetLike.\n *\n * @example\n * ```typescript\n * // Define event types\n * type Events = {\n * 'user:login': { userId: string };\n * 'user:logout': { reason: string };\n * };\n *\n * // Create event target\n * const events = createEventTarget<Events>();\n *\n * // Add typed listener\n * events.addEventListener('user:login', (event) => {\n * console.log(`User logged in: ${event.detail.userId}`);\n * });\n *\n * // Dispatch typed event\n * events.dispatchEvent({ type: 'user:login', detail: { userId: '123' } });\n * ```\n *\n * @overload Creates a basic event target\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nexport function createEventTarget<E extends Record<string, any>>(\n opts?: CreateEventTargetOptions,\n): EventTargetLike<E>;\n\n/**\n * Creates an observable proxy that dispatches events when properties change.\n *\n * @template T - The type of object to observe.\n * @param target - The object to wrap with an observable proxy.\n * @param opts - Configuration options with observe: true.\n * @returns The proxied object with EventTargetLike methods mixed in.\n *\n * @example\n * ```typescript\n * // Create observable state\n * const state = createEventTarget({ count: 0, user: { name: 'Alice' } }, {\n * observe: true,\n * deep: true,\n * });\n *\n * // Listen for any update\n * state.addEventListener('update', (event) => {\n * console.log('State changed:', event.detail.current);\n * });\n *\n * // Listen for specific property changes\n * state.addEventListener('update:count', (event) => {\n * console.log('Count changed to:', event.detail.value);\n * });\n *\n * // Mutations trigger events automatically\n * state.count = 1; // Triggers 'update' and 'update:count'\n * state.user.name = 'Bob'; // Triggers 'update' and 'update:user.name'\n * ```\n *\n * @overload Wraps an object with a Proxy that dispatches events on mutations\n */\nexport function createEventTarget<T extends object>(\n target: T,\n opts: CreateEventTargetObserveOptions,\n): T & EventTargetLike<ObservableEventMap<T>>;\n\n/**\n * Creates a type-safe event target with DOM EventTarget and TC39 Observable compatibility.\n *\n * This is the main factory function for creating event emitters. It supports two modes:\n *\n * 1. **Basic Mode**: Creates a standalone event target for pub/sub messaging.\n * 2. **Observe Mode**: Wraps an object with a Proxy that automatically dispatches\n * events when properties are modified.\n *\n * Listener errors are handled via 'error' event: if a listener throws,\n * an 'error' event is emitted. If no 'error' listener is registered,\n * the error is re-thrown (Node.js behavior).\n *\n * @param targetOrOpts - Either the object to observe, or configuration options.\n * @param opts - Configuration options when first argument is an object to observe.\n * @returns Either an EventTargetLike or a proxied object with EventTargetLike methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nexport function createEventTarget<T extends object, E extends Record<string, any>>(\n targetOrOpts?: T | CreateEventTargetOptions,\n opts?: CreateEventTargetObserveOptions,\n): EventTargetLike<E> | (T & EventTargetLike<ObservableEventMap<T>>) {\n // Handle observe mode - opts.observe must be explicitly true\n if (opts?.observe === true && targetOrOpts && typeof targetOrOpts === 'object') {\n const target = targetOrOpts as T;\n const eventTarget = createEventTargetInternal<ObservableEventMap<T>>({\n onListenerError: opts.onListenerError,\n });\n\n const proxy = createObservableProxy(target, eventTarget, {\n deep: opts.deep,\n cloneStrategy: opts.cloneStrategy,\n deepClone: opts.deepClone,\n });\n\n // Copy eventTarget methods onto the proxy\n // Use defineProperty to avoid triggering proxy traps\n const methodNames = [\n 'addEventListener',\n 'removeEventListener',\n 'dispatchEvent',\n 'clear',\n 'on',\n 'once',\n 'removeAllListeners',\n 'pipe',\n 'addWildcardListener',\n 'removeWildcardListener',\n 'complete',\n 'subscribe',\n 'toObservable',\n 'events',\n 'emit',\n 'off',\n 'addListener',\n 'removeListener',\n 'prependListener',\n 'prependOnceListener',\n 'listeners',\n 'rawListeners',\n 'listenerCount',\n 'eventNames',\n ] as const;\n\n for (const name of methodNames) {\n Object.defineProperty(proxy, name, {\n value: eventTarget[name],\n writable: false,\n enumerable: false,\n configurable: true,\n });\n }\n\n // Add completed getter\n Object.defineProperty(proxy, 'completed', {\n get: () => eventTarget.completed,\n enumerable: false,\n configurable: true,\n });\n\n return proxy as T & EventTargetLike<ObservableEventMap<T>>;\n }\n\n // Original behavior\n return createEventTargetInternal<E>(\n targetOrOpts as CreateEventTargetOptions | undefined,\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Generic constraint requires any\nfunction createEventTargetInternal<E extends Record<string, any>>(\n opts?: CreateEventTargetOptions,\n): EventTargetLike<E> {\n const listeners = new Map<string, Array<Listener<E[keyof E]>>>();\n const wildcardListeners = new Set<WildcardListener<E>>();\n let isCompleted = false;\n const completionCallbacks = new Set<() => void>();\n\n const now = () =>\n typeof globalThis.performance?.now === 'function'\n ? globalThis.performance.now()\n : Date.now();\n\n const initializeEventState = (\n state: EventDispatchState,\n type: string,\n bubbles: boolean,\n cancelable: boolean,\n ) => {\n state.initializedFlag = true;\n state.stopPropagationFlag = false;\n state.stopImmediatePropagationFlag = false;\n state.canceledFlag = false;\n state.isTrusted = false;\n state.target = null;\n state.currentTarget = null;\n state.eventPhase = 0;\n state.type = type;\n state.bubbles = bubbles;\n state.cancelable = cancelable;\n };\n\n const setCanceledFlag = (state: EventDispatchState) => {\n if (state.cancelable && !state.inPassiveListenerFlag) {\n state.canceledFlag = true;\n }\n };\n\n /**\n * Helper to create a DOM-compatible event.\n */\n const createEvent = <T>(\n type: string,\n detail: T,\n init?: {\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n timeStamp?: number;\n target?: unknown;\n currentTarget?: unknown;\n eventPhase?: number;\n },\n ): EmissionEvent<T> => {\n const state: EventDispatchState = {\n dispatchFlag: false,\n initializedFlag: true,\n stopPropagationFlag: false,\n stopImmediatePropagationFlag: false,\n canceledFlag: false,\n inPassiveListenerFlag: false,\n composedFlag: Boolean(init?.composed),\n eventPhase: init?.eventPhase ?? 0,\n currentTarget: init?.currentTarget ?? init?.target ?? null,\n target: init?.target ?? null,\n timeStamp: init?.timeStamp ?? now(),\n path: [],\n type,\n bubbles: Boolean(init?.bubbles),\n cancelable: Boolean(init?.cancelable),\n isTrusted: false,\n };\n\n const event = { detail } as EmissionEvent<T>;\n Object.defineProperties(event, {\n type: {\n get: () => state.type,\n enumerable: true,\n configurable: true,\n },\n bubbles: {\n get: () => state.bubbles,\n enumerable: true,\n configurable: true,\n },\n cancelable: {\n get: () => state.cancelable,\n enumerable: true,\n configurable: true,\n },\n cancelBubble: {\n get: () => state.stopPropagationFlag,\n set: (value: boolean) => {\n if (value) state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n composed: {\n get: () => state.composedFlag,\n enumerable: true,\n configurable: true,\n },\n currentTarget: {\n get: () => state.currentTarget,\n enumerable: true,\n configurable: true,\n },\n defaultPrevented: {\n get: () => state.canceledFlag,\n enumerable: true,\n configurable: true,\n },\n eventPhase: {\n get: () => state.eventPhase,\n enumerable: true,\n configurable: true,\n },\n isTrusted: {\n get: () => state.isTrusted,\n enumerable: true,\n configurable: true,\n },\n returnValue: {\n get: () => !state.canceledFlag,\n set: (value: boolean) => {\n if (value === false) setCanceledFlag(state);\n },\n enumerable: true,\n configurable: true,\n },\n srcElement: {\n get: () => state.target,\n enumerable: true,\n configurable: true,\n },\n target: {\n get: () => state.target,\n enumerable: true,\n configurable: true,\n },\n timeStamp: {\n get: () => state.timeStamp,\n enumerable: true,\n configurable: true,\n },\n composedPath: {\n value: () => state.path.map((entry) => entry.invocationTarget),\n enumerable: true,\n configurable: true,\n },\n initEvent: {\n value: (newType: string, bubbles = false, cancelable = false) => {\n if (state.dispatchFlag) return;\n initializeEventState(state, newType, Boolean(bubbles), Boolean(cancelable));\n },\n enumerable: true,\n configurable: true,\n },\n preventDefault: {\n value: () => setCanceledFlag(state),\n enumerable: true,\n configurable: true,\n },\n stopImmediatePropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n state.stopImmediatePropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n stopPropagation: {\n value: () => {\n state.stopPropagationFlag = true;\n },\n enumerable: true,\n configurable: true,\n },\n NONE: { value: 0, enumerable: true, configurable: true },\n CAPTURING_PHASE: { value: 1, enumerable: true, configurable: true },\n AT_TARGET: { value: 2, enumerable: true, configurable: true },\n BUBBLING_PHASE: { value: 3, enumerable: true, configurable: true },\n [EVENT_STATE]: {\n value: state,\n enumerable: false,\n configurable: false,\n },\n });\n\n return event;\n };\n\n const getEventState = (event: EmissionEvent<unknown>): EventDispatchState | undefined =>\n (event as { [EVENT_STATE]?: EventDispatchState })[EVENT_STATE];\n\n const normalizeAddListenerOptions = (\n options?: AddEventListenerOptionsLike | boolean,\n ) => {\n if (typeof options === 'boolean') {\n return {\n capture: options,\n passive: false,\n once: false,\n signal: null as AddEventListenerOptionsLike['signal'] | null,\n };\n }\n\n return {\n capture: Boolean(options?.capture),\n passive: Boolean(options?.passive),\n once: Boolean(options?.once),\n signal: options?.signal ?? null,\n };\n };\n\n const normalizeCaptureOption = (options?: { capture?: boolean } | boolean) => {\n if (typeof options === 'boolean') return options;\n return Boolean(options?.capture);\n };\n\n const removeListenerRecord = (type: string, record: Listener<E[keyof E]>) => {\n if (record.removed) return;\n record.removed = true;\n\n const list = listeners.get(type);\n if (list) {\n const idx = list.indexOf(record);\n if (idx >= 0) list.splice(idx, 1);\n if (list.length === 0) listeners.delete(type);\n }\n\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n };\n\n // Helper to handle listener errors: emit 'error' event or re-throw if no listener\n const handleListenerError = (eventType: string, error: unknown) => {\n // Prevent infinite recursion if 'error' listener itself throws\n if (eventType === 'error') return;\n\n // If custom error handler provided, use it\n if (opts?.onListenerError) {\n opts.onListenerError(eventType, error);\n return;\n }\n\n const errorListeners = listeners.get('error');\n if (errorListeners && errorListeners.length > 0) {\n dispatchEvent({ type: 'error', detail: error } as Parameters<\n EventTargetLike<E>['dispatchEvent']\n >[0]);\n } else {\n // No 'error' listener - re-throw (Node.js behavior)\n throw error;\n }\n };\n\n const notifyWildcardListeners = (\n eventType: string,\n event: EmissionEvent<E[keyof E]>,\n ) => {\n if (wildcardListeners.size === 0) return;\n\n for (const rec of Array.from(wildcardListeners)) {\n if (!matchesWildcard(eventType, rec.pattern)) continue;\n\n // Create wildcard event based on a DOM-compatible event\n const baseEvent = createEvent(rec.pattern, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n });\n const wildcardEvent: WildcardEvent<E> = Object.defineProperties(baseEvent, {\n originalType: { value: eventType, enumerable: true, configurable: true },\n }) as WildcardEvent<E>;\n\n try {\n const fn = rec.fn as (event: WildcardEvent<E>) => void | Promise<void>;\n const res = fn(wildcardEvent);\n if (res && typeof res.then === 'function') {\n res.catch((error) => {\n try {\n handleListenerError(eventType, error);\n } catch (rethrown) {\n // Re-throw async errors via queueMicrotask to preserve stack trace\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error) {\n handleListenerError(eventType, error);\n } finally {\n if (rec.once) wildcardListeners.delete(rec);\n }\n\n const state = getEventState(wildcardEvent);\n if (state?.stopImmediatePropagationFlag || state?.stopPropagationFlag) {\n break;\n }\n }\n };\n\n const addListenerInternal = (\n type: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Internal helper; callers provide type-safe wrappers\n listener: EventListenerLike<any> | null,\n options: AddEventListenerOptionsLike | boolean | undefined,\n position: 'append' | 'prepend',\n ): (() => void) => {\n if (isCompleted || !listener) {\n return () => {};\n }\n\n const { capture, passive, once, signal } = normalizeAddListenerOptions(options);\n let list = listeners.get(type);\n if (!list) {\n list = [];\n listeners.set(type, list);\n }\n\n for (const existing of list) {\n if (existing.original === listener && existing.capture === capture) {\n return () =>\n removeEventListener(type, listener, options as boolean | { capture?: boolean });\n }\n }\n\n const original = listener as Listener<E[keyof E]>['original'];\n const callback =\n typeof listener === 'function'\n ? (listener as Listener<E[keyof E]>['callback'])\n : (event: EmissionEvent<E[keyof E]>) =>\n (\n listener as {\n handleEvent: Listener<E[keyof E]>['callback'];\n }\n ).handleEvent(event);\n\n const record: Listener<E[keyof E]> = {\n type,\n original,\n callback,\n capture,\n passive,\n once,\n signal,\n removed: false,\n };\n\n if (position === 'prepend') {\n list.unshift(record);\n } else {\n list.push(record);\n }\n\n const unsubscribe = () => removeListenerRecord(type, record);\n\n if (signal) {\n const onAbort = () => removeListenerRecord(type, record);\n record.abortHandler = onAbort;\n signal.addEventListener('abort', onAbort, { once: true });\n if (signal.aborted) onAbort();\n }\n\n return unsubscribe;\n };\n\n const addEventListener: EventTargetLike<E>['addEventListener'] = (\n type,\n listener,\n options,\n ) => {\n return addListenerInternal(type, listener, options, 'append');\n };\n\n const addWildcardListener: EventTargetLike<E>['addWildcardListener'] = (\n pattern,\n listener,\n options,\n ) => {\n if (isCompleted) return () => {};\n\n const opts2 = options ?? {};\n for (const existing of wildcardListeners) {\n if (existing.pattern === pattern && existing.fn === listener) {\n return () => removeWildcardListener(pattern, listener);\n }\n }\n const record: WildcardListener<E> = {\n fn: listener,\n pattern,\n once: opts2.once,\n signal: opts2.signal,\n };\n wildcardListeners.add(record);\n\n const unsubscribe = () => {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n };\n\n if (opts2.signal) {\n const onAbort = () => unsubscribe();\n record.abortHandler = onAbort;\n opts2.signal.addEventListener('abort', onAbort, { once: true });\n if (opts2.signal.aborted) onAbort();\n }\n\n return unsubscribe;\n };\n\n const removeWildcardListener: EventTargetLike<E>['removeWildcardListener'] = (\n pattern,\n listener,\n ) => {\n for (const record of Array.from(wildcardListeners)) {\n if (record.pattern === pattern && record.fn === listener) {\n wildcardListeners.delete(record);\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n }\n };\n\n const invokeListeners = (\n eventType: string,\n event: EmissionEvent<E[keyof E]>,\n phase: 'capturing' | 'bubbling',\n listenersSnapshot: Array<Listener<E[keyof E]>>,\n ) => {\n const state = getEventState(event);\n if (!state || state.stopPropagationFlag) return;\n\n state.currentTarget = target;\n state.target = target;\n state.eventPhase = event.AT_TARGET;\n\n for (const rec of listenersSnapshot) {\n if (rec.removed) continue;\n if (phase === 'capturing' && !rec.capture) continue;\n if (phase === 'bubbling' && rec.capture) continue;\n\n if (rec.once) removeListenerRecord(rec.type, rec);\n\n if (rec.passive) state.inPassiveListenerFlag = true;\n try {\n const res = rec.callback.call(state.currentTarget, event);\n if (res && typeof res.then === 'function') {\n res.catch((error) => {\n try {\n handleListenerError(eventType, error);\n } catch (rethrown) {\n queueMicrotask(() => {\n throw rethrown;\n });\n }\n });\n }\n } catch (error) {\n handleListenerError(eventType, error);\n } finally {\n if (rec.passive) state.inPassiveListenerFlag = false;\n }\n\n if (state.stopImmediatePropagationFlag) break;\n }\n };\n\n const dispatchEvent: EventTargetLike<E>['dispatchEvent'] = (eventInput) => {\n if (isCompleted) return false;\n\n let event: EmissionEvent<E[keyof E]>;\n let state: EventDispatchState | undefined;\n\n if (eventInput && typeof eventInput === 'object') {\n state = getEventState(eventInput as EmissionEvent<unknown>);\n if (state) {\n event = eventInput as EmissionEvent<E[keyof E]>;\n } else {\n const input = eventInput as {\n type: string;\n detail?: E[keyof E];\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n timeStamp?: number;\n };\n if (typeof input.type !== 'string') {\n throw new TypeError('Event type must be a string');\n }\n event = createEvent(input.type, input.detail as E[keyof E], {\n bubbles: input.bubbles,\n cancelable: input.cancelable,\n composed: input.composed,\n timeStamp: input.timeStamp,\n });\n state = getEventState(event)!;\n }\n } else {\n throw new TypeError('dispatchEvent expects an event object');\n }\n\n const dispatchState = state ?? getEventState(event)!;\n\n if (dispatchState.dispatchFlag || !dispatchState.initializedFlag) {\n const message =\n 'Failed to execute dispatchEvent: event is already being dispatched';\n if (typeof globalThis.DOMException === 'function') {\n throw new globalThis.DOMException(message, 'InvalidStateError');\n }\n const err = new Error(message);\n err.name = 'InvalidStateError';\n throw err;\n }\n\n dispatchState.isTrusted = false;\n dispatchState.dispatchFlag = true;\n dispatchState.path = [\n {\n invocationTarget: target,\n invocationTargetInShadowTree: false,\n shadowAdjustedTarget: target,\n relatedTarget: null,\n touchTargets: [],\n rootOfClosedTree: false,\n slotInClosedTree: false,\n },\n ];\n\n // Notify wildcard listeners first (no overhead if none registered)\n notifyWildcardListeners(dispatchState.type, event);\n\n const list = listeners.get(dispatchState.type);\n const snapshot = list ? list.slice() : [];\n invokeListeners(dispatchState.type, event, 'capturing', snapshot);\n invokeListeners(dispatchState.type, event, 'bubbling', snapshot);\n\n dispatchState.eventPhase = event.NONE;\n dispatchState.currentTarget = null;\n dispatchState.path = [];\n dispatchState.dispatchFlag = false;\n dispatchState.stopPropagationFlag = false;\n dispatchState.stopImmediatePropagationFlag = false;\n\n return !dispatchState.canceledFlag;\n };\n\n const removeEventListener: EventTargetLike<E>['removeEventListener'] = (\n type,\n listener,\n options,\n ) => {\n if (!listener) return;\n const capture = normalizeCaptureOption(options);\n const list = listeners.get(type);\n if (!list) return;\n\n for (const record of [...list]) {\n if (record.original === listener && record.capture === capture) {\n removeListenerRecord(type, record);\n }\n }\n };\n\n const clear = () => {\n for (const [type, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners too\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n // Note: clear() does NOT trigger completion callbacks or set isCompleted\n // Use complete() for that\n };\n\n // New ergonomics\n\n const isListenerArg = (\n arg: unknown,\n ): arg is EventListenerLike<EmissionEvent<unknown>> => {\n if (typeof arg === 'function') return true;\n if (\n arg &&\n typeof arg === 'object' &&\n typeof (arg as { handleEvent?: unknown }).handleEvent === 'function'\n )\n return true;\n return false;\n };\n\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n const on: EventTargetLike<E>['on'] = ((type: any, optionsOrListener: any) => {\n // Node-style overload: on(type, listener) → () => void\n if (isListenerArg(optionsOrListener)) {\n return addEventListener(type, optionsOrListener);\n }\n\n // Observable-style: on(type, options?) → ObservableLike\n const options = optionsOrListener as OnOptions | boolean | undefined;\n return new Observable<EmissionEvent<any>>(\n (observer: SubscriptionObserver<EmissionEvent<any>>) => {\n let opts: OnOptions;\n if (typeof options === 'boolean') {\n opts = { capture: options };\n } else {\n opts = options ?? {};\n }\n\n const handler = opts.handler;\n const once = opts.once;\n\n const eventHandler = (e: EmissionEvent<unknown>) => {\n let success = false;\n try {\n if (handler) {\n handler(e);\n }\n observer.next(e);\n success = true;\n } finally {\n if (once && success) {\n observer.complete();\n }\n }\n };\n\n const errorHandler = (e: EmissionEvent<unknown>) => {\n observer.error(e.detail);\n };\n\n const unsubscribeEvent = addEventListener(\n type as keyof E & string,\n eventHandler as any,\n opts,\n );\n\n let unsubscribeError: (() => void) | undefined;\n if (opts.receiveError) {\n unsubscribeError = addEventListener(\n 'error' as keyof E & string,\n errorHandler as any,\n opts,\n );\n }\n\n return () => {\n unsubscribeEvent();\n if (unsubscribeError) {\n unsubscribeError();\n }\n };\n },\n );\n }) as EventTargetLike<E>['on'];\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument */\n\n const onceMethod: EventTargetLike<E>['once'] = (type, listener, options) => {\n if (typeof options === 'boolean') {\n return addEventListener(type, listener, { capture: options, once: true });\n }\n return addEventListener(type, listener, { ...(options ?? {}), once: true });\n };\n\n const removeAllListeners: EventTargetLike<E>['removeAllListeners'] = (type) => {\n if (type !== undefined) {\n const list = listeners.get(type);\n if (list) {\n for (const record of [...list]) {\n removeListenerRecord(type, record);\n }\n listeners.delete(type);\n }\n } else {\n // Clear all listeners for all types\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners too\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n }\n };\n\n /**\n * Pipe events from this emitter to another target.\n *\n * Forwards all events. If mapFn returns null, the event is skipped.\n */\n const pipe: EventTargetLike<E>['pipe'] = (target, mapFn) => {\n if (isCompleted) {\n return () => {};\n }\n\n const unsubscribe = addWildcardListener('*', (event) => {\n if (mapFn) {\n const mapped = mapFn(\n createEvent(event.originalType, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n }) as EmissionEvent<E[keyof E & string], keyof E & string>,\n );\n if (mapped !== null) {\n // Type assertion via unknown is needed because mapFn output type matches target's event map\n target.dispatchEvent(\n mapped as unknown as Parameters<typeof target.dispatchEvent>[0],\n );\n }\n } else {\n // Type assertion via unknown is needed because caller ensures E and T are compatible\n target.dispatchEvent({\n type: event.originalType,\n detail: event.detail,\n } as unknown as Parameters<typeof target.dispatchEvent>[0]);\n }\n });\n\n // Clean up on completion\n const completionUnsub = () => {\n unsubscribe();\n };\n completionCallbacks.add(completionUnsub);\n\n return () => {\n completionCallbacks.delete(completionUnsub);\n unsubscribe();\n };\n };\n\n const complete = () => {\n if (isCompleted) return;\n isCompleted = true;\n\n // Trigger completion callbacks (pipes, subscriptions)\n for (const cb of completionCallbacks) {\n try {\n cb();\n } catch (err) {\n // Completion callback errors use handleListenerError\n // Use 'complete' as the event type for these errors\n try {\n handleListenerError('complete', err);\n } catch {\n // Swallow if no error listener\n }\n }\n }\n completionCallbacks.clear();\n\n // Clear all listeners\n for (const [eventType, list] of Array.from(listeners.entries())) {\n for (const record of [...list]) {\n removeListenerRecord(eventType, record);\n }\n }\n listeners.clear();\n\n // Clear wildcard listeners\n for (const record of wildcardListeners) {\n if (record.signal && record.abortHandler) {\n record.signal.removeEventListener('abort', record.abortHandler);\n }\n }\n wildcardListeners.clear();\n };\n\n // Observable interoperability\n const subscribe: EventTargetLike<E>['subscribe'] = (\n type,\n observerOrNext,\n error,\n completeHandler,\n ) => {\n let observer: Observer<EmissionEvent<E[keyof E & string]>>;\n\n if (typeof observerOrNext === 'function') {\n observer = {\n next: observerOrNext as (value: EmissionEvent<E[keyof E & string]>) => void,\n error,\n complete: completeHandler,\n };\n } else {\n observer = (observerOrNext ?? {}) as Observer<EmissionEvent<E[keyof E & string]>>;\n }\n\n let closed = false;\n\n if (isCompleted) {\n // Already completed, call complete immediately\n if (observer.complete) {\n try {\n observer.complete();\n } catch {\n // Swallow\n }\n }\n return {\n unsubscribe: () => {\n closed = true;\n },\n get closed() {\n return closed || isCompleted;\n },\n };\n }\n\n const unsub = addEventListener(type, (event) => {\n if (closed) return;\n if (observer.next) {\n try {\n observer.next(event as EmissionEvent<E[keyof E & string]>);\n } catch (err) {\n if (observer.error) {\n try {\n observer.error(err);\n } catch {\n // Swallow\n }\n }\n }\n }\n });\n\n // Track completion callback\n const onComplete = () => {\n if (closed) return;\n closed = true;\n if (observer.complete) {\n try {\n observer.complete();\n } catch {\n // Swallow\n }\n }\n };\n completionCallbacks.add(onComplete);\n\n return {\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n completionCallbacks.delete(onComplete);\n unsub();\n },\n get closed() {\n return closed || isCompleted;\n },\n };\n };\n\n const toObservable: EventTargetLike<E>['toObservable'] = () => {\n return new Observable<EmissionEvent<E[keyof E]>>(\n (observer: SubscriptionObserver<EmissionEvent<E[keyof E]>>) => {\n if (isCompleted) {\n observer.complete();\n return;\n }\n\n const wildcardListener = (event: WildcardEvent<E>) => {\n // Emit an augmented event with the actual type\n observer.next(\n createEvent(event.originalType, event.detail, {\n target,\n currentTarget: target,\n eventPhase: 2,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n }),\n );\n };\n\n const unsubscribe = addWildcardListener('*', wildcardListener);\n\n const onComplete = () => {\n observer.complete();\n };\n completionCallbacks.add(onComplete);\n\n return () => {\n unsubscribe();\n completionCallbacks.delete(onComplete);\n };\n },\n );\n };\n\n // Async iterator\n function events<K extends keyof E & string>(\n type: K,\n options?: AsyncIteratorOptions,\n ): AsyncIterableIterator<EmissionEvent<E[K], K>> {\n // If already completed, return an iterator that immediately yields done\n if (isCompleted) {\n return {\n [Symbol.asyncIterator]() {\n return this;\n },\n next(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n return(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n };\n }\n\n const signal = options?.signal;\n const bufferSize = options?.bufferSize ?? Infinity;\n const overflowStrategy = options?.overflowStrategy ?? 'drop-oldest';\n\n const buffer: Array<EmissionEvent<E[K], K>> = [];\n let resolve: ((result: IteratorResult<EmissionEvent<E[K], K>>) => void) | null = null;\n let done = false;\n let hasOverflow = false;\n let onAbort: (() => void) | null = null;\n const cleanupAbortListener = () => {\n if (signal && onAbort) {\n signal.removeEventListener('abort', onAbort);\n }\n };\n\n const unsub = addEventListener(type, (event) => {\n if (done) return;\n const typedEvent = event;\n\n if (resolve) {\n // Someone is waiting, resolve immediately\n const r = resolve;\n resolve = null;\n r({ value: typedEvent, done: false });\n } else {\n // Buffer the event\n if (buffer.length >= bufferSize && bufferSize !== Infinity) {\n switch (overflowStrategy) {\n case 'drop-oldest':\n buffer.shift();\n buffer.push(typedEvent);\n break;\n case 'drop-latest':\n // Don't add the new event\n break;\n case 'throw':\n unsub();\n completionCallbacks.delete(onComplete);\n done = true;\n hasOverflow = true;\n cleanupAbortListener();\n return;\n }\n } else {\n buffer.push(typedEvent);\n }\n }\n });\n\n // Handle completion\n const onComplete = () => {\n done = true;\n cleanupAbortListener();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n };\n completionCallbacks.add(onComplete);\n\n // Handle abort signal\n if (signal) {\n onAbort = () => {\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n };\n signal.addEventListener('abort', onAbort, { once: true });\n if (signal.aborted) onAbort();\n }\n\n const iterator: AsyncIterableIterator<EmissionEvent<E[K], K>> = {\n [Symbol.asyncIterator]() {\n return this;\n },\n async next(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n // Drain buffered events first, even if done\n if (buffer.length > 0) {\n return { value: buffer.shift()!, done: false };\n }\n\n // Prevent concurrent next() calls - if there's already a pending promise, reject\n if (resolve !== null) {\n return Promise.reject(\n new Error(\n 'Concurrent calls to next() are not supported on this async iterator',\n ),\n );\n }\n\n // Wait for next event\n return new Promise<IteratorResult<EmissionEvent<E[K], K>>>(\n (_resolve, _reject) => {\n if (hasOverflow) {\n hasOverflow = false;\n _reject(new BufferOverflowError(type, bufferSize));\n return;\n }\n if (done) {\n _resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n return;\n }\n resolve = _resolve;\n },\n );\n },\n return(): Promise<IteratorResult<EmissionEvent<E[K], K>>> {\n // Resolve any pending promise before cleanup\n if (resolve) {\n const r = resolve;\n resolve = null;\n r({ value: undefined as unknown as EmissionEvent<E[K], K>, done: true });\n }\n\n done = true;\n completionCallbacks.delete(onComplete);\n unsub();\n\n // Clean up abort signal listener\n cleanupAbortListener();\n\n return Promise.resolve({\n value: undefined as unknown as EmissionEvent<E[K], K>,\n done: true,\n });\n },\n };\n\n return iterator;\n }\n\n // Node.js EventEmitter compatibility methods\n\n const emit: EventTargetLike<E>['emit'] = (type, detail) => {\n if (isCompleted) return false;\n\n const list = listeners.get(type);\n const hasListeners = list !== undefined && list.length > 0;\n let hasWildcard = false;\n if (wildcardListeners.size > 0) {\n for (const rec of wildcardListeners) {\n if (matchesWildcard(type, rec.pattern)) {\n hasWildcard = true;\n break;\n }\n }\n }\n\n dispatchEvent({ type, detail } as Parameters<EventTargetLike<E>['dispatchEvent']>[0]);\n return hasListeners || hasWildcard;\n };\n\n const off: EventTargetLike<E>['off'] = (type, listener) => {\n removeEventListener(type, listener);\n };\n\n const addListener: EventTargetLike<E>['addListener'] = (type, listener) => {\n return addEventListener(type, listener);\n };\n\n const removeListener: EventTargetLike<E>['removeListener'] = (type, listener) => {\n removeEventListener(type, listener);\n };\n\n const prependListener: EventTargetLike<E>['prependListener'] = (type, listener) => {\n return addListenerInternal(type, listener, undefined, 'prepend');\n };\n\n const prependOnceListener: EventTargetLike<E>['prependOnceListener'] = (\n type,\n listener,\n ) => {\n return addListenerInternal(type, listener, { once: true }, 'prepend');\n };\n\n const getListeners: EventTargetLike<E>['listeners'] = (type) => {\n const list = listeners.get(type);\n if (!list) return [];\n return list.filter((r) => !r.removed).map((r) => r.original);\n };\n\n const rawListenersMethod: EventTargetLike<E>['rawListeners'] = (type) => {\n const list = listeners.get(type);\n if (!list) return [];\n /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */\n return list\n .filter((r) => !r.removed)\n .map((r) => {\n if (r.once) {\n const wrapper = ((...args: any[]) => (r.callback as any)(...args)) as any;\n wrapper.listener = r.original;\n return wrapper;\n }\n return r.original;\n });\n /* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */\n };\n\n const listenerCount: EventTargetLike<E>['listenerCount'] = (type) => {\n const list = listeners.get(type);\n if (!list) return 0;\n return list.filter((r) => !r.removed).length;\n };\n\n const eventNamesMethod: EventTargetLike<E>['eventNames'] = () => {\n const names: string[] = [];\n for (const [type, list] of listeners) {\n if (list.some((r) => !r.removed)) {\n names.push(type);\n }\n }\n return names;\n };\n\n const target: EventTargetLike<E> = {\n addEventListener,\n removeEventListener,\n dispatchEvent,\n clear,\n on,\n once: onceMethod,\n removeAllListeners,\n pipe,\n addWildcardListener,\n removeWildcardListener,\n complete,\n get completed() {\n return isCompleted;\n },\n subscribe,\n toObservable,\n events,\n emit,\n off,\n addListener,\n removeListener,\n prependListener,\n prependOnceListener,\n listeners: getListeners,\n rawListeners: rawListenersMethod,\n listenerCount,\n eventNames: eventNamesMethod,\n };\n\n // Add Symbol.observable - return an observable that emits all events from all types\n (\n target as EventTargetLike<E> & {\n [key: symbol]: () => ObservableLike<EmissionEvent<E[keyof E]>>;\n }\n )[SymbolObservable] = () => {\n return toObservable();\n };\n\n return target;\n}\n",
10
+ "import { createEventTarget } from './factory';\nimport type {\n DOMEventLike,\n DOMEventTargetLike,\n EmissionEvent,\n EventTargetLike,\n InteropOptions,\n} from './types';\n\nexport type { DOMEventLike, DOMEventTargetLike, InteropOptions } from './types';\n\n/**\n * Forward events from an EventEmission target to a DOM EventTarget.\n *\n * This function sets up a wildcard listener on the source that forwards\n * all events to the DOM target using dispatchEvent.\n *\n * @template E - Event map type of the source.\n * @param source - The EventEmission source to forward events from.\n * @param target - The DOM EventTarget to forward events to.\n * @param options - Optional configuration including abort signal.\n * @returns An unsubscribe function that stops forwarding when called.\n *\n * @example\n * ```typescript\n * const events = createEventTarget<{ click: { x: number; y: number } }>();\n * const button = document.getElementById('my-button');\n *\n * // Forward all events to the DOM button\n * const unsubscribe = forwardToEventTarget(events, button);\n *\n * // Now when you dispatch events on the EventEmission target,\n * // they will also be dispatched on the DOM element\n * events.dispatchEvent({ type: 'click', detail: { x: 100, y: 200 } });\n *\n * // Stop forwarding\n * unsubscribe();\n * ```\n */\nexport function forwardToEventTarget<E extends Record<string, unknown>>(\n source: EventTargetLike<E>,\n target: DOMEventTargetLike,\n options?: InteropOptions,\n): () => void {\n const unsubscribe = source.addWildcardListener(\n '*',\n (event) => {\n // Use CustomEvent when available to preserve DOM event semantics.\n const CustomEventCtor = (globalThis as { CustomEvent?: typeof CustomEvent })\n .CustomEvent;\n const domEvent: DOMEventLike =\n typeof CustomEventCtor === 'function'\n ? new CustomEventCtor(event.originalType, {\n detail: event.detail,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n })\n : {\n type: event.originalType,\n detail: event.detail,\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n };\n target.dispatchEvent(domEvent);\n },\n options,\n );\n\n return unsubscribe;\n}\n\n/**\n * Options for creating an EventEmission target from a DOM EventTarget.\n */\nexport interface FromEventTargetOptions extends InteropOptions {\n /**\n * Callback invoked when a listener throws an error.\n * If not provided, errors will be re-thrown.\n */\n onListenerError?: (type: string, error: unknown) => void;\n}\n\n/**\n * Create an EventEmission target that listens to events from a DOM EventTarget.\n *\n * This function wraps a DOM EventTarget and forwards specified events to a new\n * EventEmission target, enabling type-safe event handling and TC39 Observable compatibility.\n *\n * @template E - Event map type where keys are event names and values are event detail types.\n * @param domTarget - The DOM EventTarget to listen to events from.\n * @param eventTypes - Array of event type names to forward from the DOM target.\n * @param options - Optional configuration including abort signal and error handler.\n * @returns An EventEmission target with a destroy() method for cleanup.\n *\n * @example Basic usage with DOM element\n * ```typescript\n * const button = document.getElementById('my-button');\n *\n * type ButtonEvents = {\n * click: MouseEvent;\n * focus: FocusEvent;\n * };\n *\n * const events = fromEventTarget<ButtonEvents>(button, ['click', 'focus']);\n *\n * // Type-safe event handling\n * events.addEventListener('click', (event) => {\n * console.log('Button clicked!', event.detail);\n * });\n *\n * // Clean up when done\n * events.destroy();\n * ```\n *\n * @example With AbortSignal for automatic cleanup\n * ```typescript\n * const controller = new AbortController();\n * const events = fromEventTarget<{ input: InputEvent }>(\n * textField,\n * ['input'],\n * { signal: controller.signal }\n * );\n *\n * // Later, abort to clean up all listeners\n * controller.abort();\n * ```\n *\n * @example Using TC39 Observable features\n * ```typescript\n * const events = fromEventTarget<{ scroll: Event }>(window, ['scroll']);\n *\n * // Subscribe with observer pattern\n * const subscription = events.subscribe({\n * next: (event) => console.log('Scrolled!'),\n * complete: () => console.log('Done'),\n * });\n *\n * // Or use async iteration\n * for await (const event of events.events('scroll')) {\n * console.log('Scroll event:', event);\n * }\n * ```\n */\nexport function fromEventTarget<E extends Record<string, unknown>>(\n domTarget: DOMEventTargetLike,\n eventTypes: Array<keyof E & string>,\n options?: FromEventTargetOptions,\n): EventTargetLike<E> & { destroy: () => void } {\n const emitter = createEventTarget<E>({\n onListenerError: options?.onListenerError,\n });\n\n const handlers = new Map<string, (event: DOMEventLike) => void>();\n\n for (const type of eventTypes) {\n const handler = (event: DOMEventLike) => {\n emitter.dispatchEvent({\n type,\n detail: (event.detail ?? event) as E[typeof type],\n bubbles: event.bubbles,\n cancelable: event.cancelable,\n composed: event.composed,\n } as unknown as EmissionEvent<E[keyof E & string]>);\n };\n handlers.set(type, handler);\n domTarget.addEventListener(type, handler);\n }\n\n // Track abort handler for cleanup\n let onAbort: (() => void) | null = null;\n\n // Handle abort signal\n if (options?.signal) {\n onAbort = () => {\n for (const [type, handler] of handlers) {\n domTarget.removeEventListener(type, handler);\n }\n handlers.clear();\n emitter.complete();\n };\n options.signal.addEventListener('abort', onAbort, { once: true });\n if (options.signal.aborted) onAbort();\n }\n\n return {\n addEventListener: emitter.addEventListener,\n removeEventListener: emitter.removeEventListener,\n dispatchEvent: emitter.dispatchEvent,\n clear: emitter.clear,\n once: emitter.once,\n removeAllListeners: emitter.removeAllListeners,\n pipe: emitter.pipe,\n addWildcardListener: emitter.addWildcardListener,\n removeWildcardListener: emitter.removeWildcardListener,\n on: emitter.on,\n subscribe: emitter.subscribe,\n toObservable: emitter.toObservable,\n complete: emitter.complete,\n get completed() {\n return emitter.completed;\n },\n events: emitter.events,\n emit: emitter.emit,\n off: emitter.off,\n addListener: emitter.addListener,\n removeListener: emitter.removeListener,\n prependListener: emitter.prependListener,\n prependOnceListener: emitter.prependOnceListener,\n listeners: emitter.listeners,\n rawListeners: emitter.rawListeners,\n listenerCount: emitter.listenerCount,\n eventNames: emitter.eventNames,\n destroy: () => {\n // Clean up abort signal listener to prevent memory leak\n if (options?.signal && onAbort) {\n options.signal.removeEventListener('abort', onAbort);\n }\n for (const [type, handler] of handlers) {\n domTarget.removeEventListener(type, handler);\n }\n handlers.clear();\n emitter.complete();\n },\n };\n}\n\n/**\n * Pipe events from one EventEmission target to another.\n *\n * This function sets up a wildcard listener on the source that forwards all\n * events to the target. Useful for composing event streams, creating event\n * buses, or building hierarchical event systems.\n *\n * @template E - Event map type shared by both source and target.\n * @param source - The EventEmission target to pipe events from.\n * @param target - The EventEmission target to pipe events to.\n * @param options - Optional configuration including abort signal.\n * @returns An unsubscribe function that stops piping when called.\n *\n * @example Basic event piping\n * ```typescript\n * const userEvents = createEventTarget<{ login: { userId: string } }>();\n * const globalBus = createEventTarget<{ login: { userId: string } }>();\n *\n * // Pipe all user events to global bus\n * const unsubscribe = pipe(userEvents, globalBus);\n *\n * // Events on userEvents now also dispatch on globalBus\n * globalBus.addEventListener('login', (event) => {\n * console.log('User logged in:', event.detail.userId);\n * });\n *\n * userEvents.dispatchEvent({ type: 'login', detail: { userId: '123' } });\n *\n * // Stop piping\n * unsubscribe();\n * ```\n *\n * @example With AbortSignal for automatic cleanup\n * ```typescript\n * const controller = new AbortController();\n * pipe(source, target, { signal: controller.signal });\n *\n * // Later, abort to stop piping\n * controller.abort();\n * ```\n *\n * @example Creating an event hierarchy\n * ```typescript\n * const componentA = createEventTarget<Events>();\n * const componentB = createEventTarget<Events>();\n * const appBus = createEventTarget<Events>();\n *\n * // Both components pipe to the app bus\n * pipe(componentA, appBus);\n * pipe(componentB, appBus);\n *\n * // Listen to all events at the app level\n * appBus.addWildcardListener('*', (event) => {\n * console.log('App event:', event.originalType, event.detail);\n * });\n * ```\n */\nexport function pipe<E extends Record<string, unknown>>(\n source: EventTargetLike<E>,\n target: EventTargetLike<E>,\n options?: InteropOptions,\n): () => void {\n return source.addWildcardListener(\n '*',\n (event) => {\n target.dispatchEvent({\n type: event.originalType,\n detail: event.detail as E[keyof E & string],\n } as unknown as Parameters<typeof target.dispatchEvent>[0]);\n },\n options,\n );\n}\n"
11
11
  ],
12
- "mappings": ";;AAIO,IAAM,mBACV,OAAO,WAAW,cAAe,OAAmC,cACrE,OAAO,IAAI,cAAc;AAG3B,IAAI,OAAO,WAAW,YAAY;AAAA,EAC/B,OAAmC,aAAa;AACnD;;;ACOA,SAAS,SAAS,CAAC,KAAU,KAAmC;AAAA,EAC9D,IAAI,QAAQ,QAAQ,QAAQ;AAAA,IAAW;AAAA,EACvC,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,SAAS;AAAA,IAAM;AAAA,EACnB,IAAI,OAAO,UAAU,YAAY;AAAA,IAC/B,MAAM,IAAI,UAAU,QAAQ,oBAAoB;AAAA,EAClD;AAAA,EACA,OAAO;AAAA;AAMT,SAAS,eAAe,CAAC,GAAQ;AAAA,EAC/B,IAAI,OAAO,mBAAmB,YAAY;AAAA,IACxC,eAAe,MAAM;AAAA,MACnB,MAAM;AAAA,KACP;AAAA,EACH,EAAO;AAAA,IACL,WAAW,MAAM;AAAA,MACf,MAAM;AAAA,KACP;AAAA;AAAA;AAiBL,SAAS,wBAAwB,CAAY,cAAmB;AAAA,EAC9D,KAAK,gBAAgB;AAAA;AAGvB,yBAAyB,YAAY,OAAO,OAAO,OAAO,SAAS;AACnE,OAAO,iBAAiB,yBAAyB,WAAW;AAAA,EAC1D,aAAa,EAAE,OAAO,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,EACjE,QAAQ;AAAA,IACN,GAAG,GAAG;AAAA,MACJ,OAAO,KAAK,cAAc;AAAA;AAAA,IAE5B,cAAc;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,IACJ,OAAO,SAAS,IAAI,CAAY,OAAY;AAAA,MAC1C,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS;AAAA,MAC1B,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,MAAM;AAAA,QACpC,IAAI,CAAC;AAAA,UAAG;AAAA,QACR,OAAO,EAAE,KAAK,UAAU,KAAK;AAAA,QAC7B,OAAO,GAAG;AAAA,QACV,IAAI;AAAA,UACF,KAAK,MAAM,CAAC;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,gBAAgB,GAAG;AAAA;AAAA;AAAA;AAAA,IAIzB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,OAAO,SAAS,KAAK,CAAY,YAAiB;AAAA,MAChD,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS,MAAM;AAAA,MAChC,aAAa,UAAU;AAAA,MACvB,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,OAAO;AAAA,QACrC,IAAI,GAAG;AAAA,UACL,OAAO,EAAE,KAAK,UAAU,UAAU;AAAA,QACpC;AAAA,QACA,MAAM;AAAA,gBACN;AAAA,QACA,aAAa,SAAS;AAAA;AAAA;AAAA,IAG1B,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,OAAO,SAAS,QAAQ,CAAY,OAAY;AAAA,MAC9C,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS;AAAA,MAC1B,aAAa,UAAU;AAAA,MACvB,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,UAAU;AAAA,QACxC,IAAI,GAAG;AAAA,UACL,OAAO,EAAE,KAAK,UAAU,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,gBACA;AAAA,QACA,aAAa,SAAS;AAAA;AAAA;AAAA,IAG1B,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF,CAAC;AAED,OAAO,eAAe,yBAAyB,UAAU,MAAM,UAAU,EAAE,OAAO,EAAE,CAAC;AACrF,OAAO,eAAe,yBAAyB,UAAU,OAAO,UAAU,EAAE,OAAO,EAAE,CAAC;AACtF,OAAO,eAAe,yBAAyB,UAAU,UAAU,UAAU;AAAA,EAC3E,OAAO;AACT,CAAC;AAKD,SAAS,YAAY,CAAY,UAAe,YAAiB;AAAA,EAC/D,KAAK,YAAY;AAAA,EACjB,KAAK,aAAa;AAAA,EAClB,KAAK,UAAU;AAAA,EAEf,MAAM,uBAAuB,IAAK,yBAAiC,IAAI;AAAA,EAEvE,IAAI;AAAA,IACF,MAAM,QAAQ,UAAU,UAAU,OAAO;AAAA,IACzC,IAAI,OAAO;AAAA,MACT,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B;AAAA,IACA,OAAO,GAAG;AAAA,IACV,gBAAgB,CAAC;AAAA;AAAA,EAGnB,IAAI,KAAK;AAAA,IAAS;AAAA,EAElB,IAAI;AAAA,IACF,MAAM,UAAU,WAAW,oBAAoB;AAAA,IAC/C,IAAI,WAAW,MAAM;AAAA,MACnB,IAAI,OAAO,YAAY,cAAc,OAAO,QAAQ,gBAAgB,YAAY;AAAA,QAC9E,MAAM,IAAI,UAAU,UAAU,sCAAsC;AAAA,MACtE;AAAA,MACA,KAAK,aAAa;AAAA,MAClB,IAAI,KAAK,SAAS;AAAA,QAChB,KAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAAA,IACA,OAAO,GAAG;AAAA,IACV,qBAAqB,MAAM,CAAC;AAAA;AAAA;AAIhC,aAAa,YAAY,OAAO,OAAO,OAAO,SAAS;AACvD,OAAO,iBAAiB,aAAa,WAAW;AAAA,EAC9C,aAAa,EAAE,OAAO,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,EACjE,QAAQ;AAAA,IACN,GAAG,GAAG;AAAA,MACJ,OAAO,KAAK;AAAA;AAAA,IAEd,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,OAAO,SAAS,WAAW,GAAY;AAAA,MACrC,IAAI,KAAK;AAAA,QAAS;AAAA,MAClB,KAAK,UAAU;AAAA,MACf,KAAK,SAAS;AAAA;AAAA,IAEhB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,OAAO,SAAS,QAAQ,GAAY;AAAA,MAClC,MAAM,UAAU,KAAK;AAAA,MACrB,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,KAAK,aAAa;AAAA,MAClB,IAAI;AAAA,QACF,IAAI,OAAO,YAAY,YAAY;AAAA,UACjC,QAAQ;AAAA,QACV,EAAO,SAAI,WAAW,OAAO,QAAQ,gBAAgB,YAAY;AAAA,UAC/D,QAAQ,YAAY;AAAA,QACtB;AAAA,QACA,OAAO,GAAG;AAAA,QACV,gBAAgB,CAAC;AAAA;AAAA;AAAA,IAGrB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF,CAAC;AAAA;AAKM,MAAM,WAA2C;AAAA,EAC9C;AAAA,EAER,WAAW,CAAC,YAA2B;AAAA,IACrC,IAAI,OAAO,eAAe,YAAY;AAAA,MACpC,MAAM,IAAI,UAAU,2CAA2C;AAAA,IACjE;AAAA,IACA,KAAK,cAAc;AAAA;AAAA,EAGrB,SAAS,CACP,gBACA,QACA,WACuB;AAAA,IACvB,IAAI;AAAA,IACJ,IAAI,OAAO,mBAAmB,YAAY;AAAA,MACxC,WAAW;AAAA,QACT,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF,EAAO,SAAI,OAAO,mBAAmB,YAAY,mBAAmB,MAAM;AAAA,MACxE,MAAM,IAAI,UAAU,iBAAiB,mBAAmB;AAAA,IAC1D,EAAO;AAAA,MACL,WAAW;AAAA;AAAA,IAGb,OAAO,IAAK,aAAqB,UAAU,KAAK,WAAW;AAAA;AAAA,GAG5D,iBAAiB,GAAkB;AAAA,IAClC,OAAO;AAAA;AAAA,SAGF,EAAK,IAAI,OAA2B;AAAA,IACzC,MAAM,IAAI,OAAO,SAAS,aAAa,OAAO;AAAA,IAC9C,OAAO,IAAK,EAAU,CAAC,aAA+C;AAAA,MACpE,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AAAA,QACrC,SAAS,KAAK,MAAM,EAAE;AAAA,QACtB,IAAI,SAAS;AAAA,UAAQ;AAAA,MACvB;AAAA,MACA,SAAS,SAAS;AAAA,KACnB;AAAA;AAAA,SAGI,IAAO,CAAC,GAAuB;AAAA,IACpC,MAAM,IAAI,OAAO,SAAS,aAAa,OAAO;AAAA,IAC9C,IAAI,KAAK;AAAA,MAAM,MAAM,IAAI,UAAU,IAAI,mBAAmB;AAAA,IAE1D,MAAM,SAAS,EAAE;AAAA,IACjB,IAAI,UAAU,MAAM;AAAA,MAClB,IAAI,OAAO,WAAW,YAAY;AAAA,QAChC,MAAM,IAAI,UAAU,SAAS,oBAAoB;AAAA,MACnD;AAAA,MACA,MAAM,aAAa,OAAO,KAAK,CAAC;AAAA,MAChC,IAAI,OAAO,UAAU,MAAM,YAAY;AAAA,QACrC,MAAM,IAAI,UAAU,aAAa,mBAAmB;AAAA,MACtD;AAAA,MACA,IAAI,WAAW,gBAAgB,GAAG;AAAA,QAChC,OAAO;AAAA,MACT;AAAA,MACA,OAAO,IAAK,EAAU,CAAC,aACrB,WAAW,UAAU,QAAQ,CAC/B;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,YAAY,GAAG;AAAA,MACxB,OAAO,IAAK,EAAU,CAAC,aAA+C;AAAA,QACpE,WAAW,QAAQ,GAAkB;AAAA,UACnC,SAAS,KAAK,IAAI;AAAA,UAClB,IAAI,SAAS;AAAA,YAAQ;AAAA,QACvB;AAAA,QACA,SAAS,SAAS;AAAA,OACnB;AAAA,IACH;AAAA,IAEA,MAAM,IAAI,UAAU,IAAI,oBAAoB;AAAA;AAEhD;;;AClQO,IAAM,eAAe,OAAO,IAAI,gCAAgC;AAGhE,IAAM,kBAAkB,OAAO,IAAI,mCAAmC;AAkE7E,IAAM,iBAAiB,IAAI,IAAyB;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAwBD,SAAS,WAAW,CAAC,OAAiC;AAAA,EACpD,OACE,UAAU,QACV,OAAO,UAAU,YACjB,CAAC,UAAU,KAAK,KAChB,EAAE,iBAAiB,SACnB,EAAE,iBAAiB,WACnB,EAAE,iBAAiB,QACnB,EAAE,iBAAiB,QACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,UACnB,EAAE,iBAAiB,gBACnB,CAAC,YAAY,OAAO,KAAK;AAAA;AAK7B,SAAS,SAAS,CAAC,OAAyB;AAAA,EAC1C,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,kBAAkB;AAAA;AAKzD,SAAS,cAAc,CAAC,MAAoD;AAAA,EAC1E,OAAO,OAAO,SAAS,YAAY,eAAe,IAAI,IAA2B;AAAA;AAInF,SAAS,cAAc,CAAC,KAAc,MAAwB;AAAA,EAC5D,MAAM,UAAU,MAAM,QAAQ,GAAG;AAAA,EACjC,MAAM,YAAY,UACd,CAAC,GAAI,GAAiB,IACtB,KAAM,IAAgC;AAAA,EAE1C,IAAI,CAAC,QAAQ,SAAS;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,KAAK,MAAM,GAAG;AAAA,EAE5B,MAAM,SAAS;AAAA,EAEf,IAAI,UAAmC;AAAA,EAEvC,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACrC,MAAM,MAAM,MAAM;AAAA,IAClB,MAAM,QAAQ,QAAQ;AAAA,IACtB,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAAA,MAC/C,QAAQ,OAAO,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,MAAM;AAAA,MAE9D,IAAI,IAAI,MAAM,SAAS,GAAG;AAAA,QACxB,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF,EAAO;AAAA,MACL;AAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AAAA;AAIT,SAAS,kBAAkB,CACzB,KACA,UACA,aACA,WACS;AAAA,EACT,IAAI,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EAEpD,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI;AAAA,SAE7C;AAAA,MACH,IAAI,WAAW;AAAA,QACb,OAAO,UAAU,GAAG;AAAA,MACtB;AAAA,MACA,IAAI,OAAO,oBAAoB,YAAY;AAAA,QACzC,MAAM,IAAI,MACR,wHACF;AAAA,MACF;AAAA,MACA,OAAO,gBAAgB,GAAG;AAAA,SAEvB;AAAA,MACH,OAAO,eAAe,KAAK,WAAW;AAAA;AAAA,MAGtC,OAAO;AAAA;AAAA;AAKb,SAAS,gBAAgB,CACvB,QACA,QACA,QACA,MAC4C;AAAA,EAC5C,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,EAAE,OAAO,KAAK;AAAA,SAClB;AAAA,MACH,OAAO,EAAE,SAAS,OAAO,SAAS,IAAI,CAAC,OAAO,OAAO,SAAS,EAAE,IAAI,CAAC,EAAE;AAAA,SACpE;AAAA,MACH,OAAO,EAAE,SAAS,OAAO,SAAS,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAAA,SACpD;AAAA,MACH,OAAO,EAAE,OAAO,KAAK;AAAA,SAClB,UAAU;AAAA,MACb,OAAO,OAAO,gBAAgB,SAAS;AAAA,MACvC,MAAM,cACJ,QAAQ,IAAI,KAAK,IAAI,OAAO,SAAS,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,MAChF,MAAM,oBAAoB,KAAK,IAC7B,eAAe,OAAO,SAAS,aAC/B,OAAO,SAAS,WAClB;AAAA,MACA,OAAO;AAAA,QACL,SAAS,OAAO,MAAM,aAAa,cAAc,iBAAiB;AAAA,QAClE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,SACK;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO,CAAC;AAAA;AAAA,MAER,OAAO,CAAC;AAAA;AAAA;AAUd,IAAM,gBAAgB,IAAI;AAM1B,SAAS,kBAAkB,CACzB,QACgE;AAAA,EAChE,IAAI,aAAa,cAAc,IAAI,MAAM;AAAA,EACzC,IAAI,CAAC,YAAY;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,IAAI,QAAQ,UAAU;AAAA,EACtC;AAAA,EACA,OAAO;AAAA;AAOT,SAAS,4BAA8C,CACrD,OACA,QACA,MACA,SACiC;AAAA,EACjC,MAAM,WAAW,MAAM;AAAA,EAEvB,OAAO,QAAS,IAAqB,MAA0B;AAAA,IAE7D,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,MACA,QAAQ,QAAQ,SAClB;AAAA,IACA,MAAM,gBAAgB,CAAC,GAAG,KAAK;AAAA,IAE/B,MAAM,SAAS,SAAS,MAAM,MAAM,IAAI;AAAA,IAExC,QAAQ,OAAO,YAAY,iBAAiB,QAAQ,eAAe,OAAO,IAAI;AAAA,IAG9E,MAAM,kBAAkB,OAAO,UAAU,QAAQ,WAAW,UAAU;AAAA,IACtE,MAAM,iBAAiB,OAAO,UAAU,SAAS;AAAA,IAGjD,QAAQ,YAAY,cAAc;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF,CAAsE;AAAA,IAGtE,IAAI,MAAM;AAAA,MACR,QAAQ,YAAY,cAAc;AAAA,QAChC,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,SAAS,QAAQ;AAAA,UACjB,UAAU;AAAA,QACZ;AAAA,MACF,CAAsE;AAAA,IACxE;AAAA,IAGA,QAAQ,YAAY,cAAc;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF,CAAsE;AAAA,IAEtE,OAAO;AAAA;AAAA;AAQX,SAAS,6BAA+C,CACtD,QACA,MACA,SACG;AAAA,EAEH,MAAM,kBAAkB,mBAAmB,MAAM;AAAA,EACjD,MAAM,WAAW,gBAAgB,IAAI,OAA0C;AAAA,EAC/E,IAAI,UAAU;AAAA,IAGZ,OAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ,IAAI,MAAM,QAAQ;AAAA,IAC9B,GAAG,CAAC,KAAK,MAAM,UAAU;AAAA,MAEvB,IAAI,SAAS;AAAA,QAAc,OAAO;AAAA,MAClC,IAAI,SAAS;AAAA,QAAiB,OAAO;AAAA,MAGrC,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MACxC;AAAA,MAEA,MAAM,QAAQ,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MAG7C,IAAI,MAAM,QAAQ,GAAG,KAAK,eAAe,IAAI,GAAG;AAAA,QAC9C,OAAO,6BAA6B,KAAK,MAAM,MAAM,OAAO;AAAA,MAC9D;AAAA,MAGA,IAAI,QAAQ,QAAQ,QAAQ,YAAY,KAAK,GAAG;AAAA,QAC9C,MAAM,aAAa,OAAO,GAAG,QAAQ,SAAS;AAAA,QAC9C,OAAO,8BACL,OACA,YACA,OACF;AAAA,MACF;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,GAAG,CAAC,KAAK,MAAM,OAAO,UAAU;AAAA,MAE9B,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,IAAI,KAAK,MAAM,OAAO,QAAQ;AAAA,MAC/C;AAAA,MAEA,MAAM,WAAW,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MAGhD,IAAI,OAAO,GAAG,UAAU,KAAK,GAAG;AAAA,QAC9B,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,WAAW,OAAO,GAAG,QAAQ,SAAS;AAAA,MAC5C,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,UACA,QAAQ,QAAQ,SAClB;AAAA,MAEA,MAAM,UAAU,QAAQ,IAAI,KAAK,MAAM,OAAO,QAAQ;AAAA,MAEtD,IAAI,SAAS;AAAA,QAEX,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM,UAAU;AAAA,UAChB,QAAQ;AAAA,YACN;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,QAGtE,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,MACxE;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,cAAc,CAAC,KAAK,MAAM;AAAA,MAExB,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,eAAe,KAAK,IAAI;AAAA,MACzC;AAAA,MAEA,MAAM,WAAW,OAAO,GAAG,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA,MAC/D,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,UACA,QAAQ,QAAQ,SAClB;AAAA,MAEA,MAAM,UAAU,QAAQ,eAAe,KAAK,IAAI;AAAA,MAEhD,IAAI,SAAS;AAAA,QAEX,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM,UAAU;AAAA,UAChB,QAAQ;AAAA,YACN,OAAO;AAAA,YACP,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,QAGtE,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,MACxE;AAAA,MAEA,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA,EAGD,gBAAgB,IAAI,SAA4C;AAAA,IAC9D;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA;AAQT,SAAS,aAAa,CAAC,KAAyC;AAAA,EAC9D,OACE,OAAO,QAAQ,YACf,QAAQ,QACR,OAAQ,IAA2B,qBAAqB,cACxD,OAAQ,IAA2B,wBAAwB,cAC3D,OAAQ,IAA2B,kBAAkB;AAAA;AAiClD,SAAS,oBAAsC,CACpD,QACA,QACY;AAAA,EACZ,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,yBAAyB,OAAO,iBAAiB,KAAK,MAAM;AAAA,EAClE,MAAM,4BAA4B,OAAO,oBAAoB,KAAK,MAAM;AAAA,EAExE,MAAM,iBAAiB,CAAC,SAAiB,CAAC,UAAmB;AAAA,IAC3D,MAAM,SAAU,MAA6B,UAAU;AAAA,IACvD,OAAO,cAAc;AAAA,MACnB;AAAA,MACA;AAAA,IACF,CAAsE;AAAA;AAAA,EAIxE,MAAM,2BAA2B,OAAO,iBAAiB,KAAK,MAAM;AAAA,EAGpE,MAAM,0BAA2B,CAC/B,MACA,UACA,YACG;AAAA,IAEH,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,SAAS,YAAY,CAAC,KAAK,WAAW,SAAS,GAAG;AAAA,MAC3E,MAAM,UAAU,eAAe,IAAI;AAAA,MACnC,SAAS,IAAI,MAAM,OAAO;AAAA,MAC1B,uBAAuB,MAAM,OAAO;AAAA,IACtC;AAAA,IACA,OAAO,yBACL,MACA,UAGA,OACF;AAAA;AAAA,EAID,OAAgE,mBAC/D;AAAA,EAEF,OAAO,MAAM;AAAA,IAEV,OAAiE,mBAChE;AAAA,IAEF,YAAY,MAAM,YAAY,UAAU;AAAA,MACtC,0BAA0B,MAAM,OAAO;AAAA,IACzC;AAAA,IACA,SAAS,MAAM;AAAA;AAAA;AA0BZ,SAAS,UAAU,CAAC,KAAuB;AAAA,EAChD,OAAO,UAAU,GAAG;AAAA;AAkCf,SAAS,WAA6B,CAAC,OAAa;AAAA,EACzD,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA,OAAQ,MAA4B,oBAAoB;AAAA;AAqDnD,SAAS,qBAAuC,CACrD,QACA,aACA,SACG;AAAA,EACH,MAAM,kBAA0C;AAAA,IAC9C,MAAM,SAAS,QAAQ;AAAA,IACvB,eAAe,SAAS,iBAAiB;AAAA,IACzC,WAAW,SAAS;AAAA,EACtB;AAAA,EAEA,MAAM,UAA2B;AAAA,IAC/B;AAAA,IACA,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EAEA,MAAM,QAAQ,8BAA8B,QAAQ,IAAI,OAAO;AAAA,EAG/D,IAAI,cAAc,MAAM,GAAG;AAAA,IACzB,MAAM,oBAAoB,qBACxB,QACA,WACF;AAAA,IACA,MAAM,gBAAiB,YAA0C;AAAA,IACjE,IAAI,OAAO,kBAAkB,YAAY;AAAA,MACvC,MAAM,mBAAmB,cAAc,KAAK,WAAW;AAAA,MACvD,IAAI,UAAU;AAAA,MACb,YAAyC,WAAW,MAAM;AAAA,QACzD,IAAI,CAAC,SAAS;AAAA,UACZ,UAAU;AAAA,UACV,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO,iBAAiB;AAAA;AAAA,IAE5B;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;AC1vBF,MAAM,4BAA4B,MAAM;AAAA,EAC7C,WAAW,CAAC,WAAmB,YAAoB;AAAA,IACjD,MAAM,mCAAmC,oBAAoB,aAAa;AAAA,IAC1E,KAAK,OAAO;AAAA;AAEhB;;;ACeA,SAAS,eAAe,CAAC,WAAmB,SAA0B;AAAA,EACpE,IAAI,YAAY;AAAA,IAAK,OAAO;AAAA,EAC5B,OAAO,QAAQ,SAAS,IAAI,KAAK,UAAU,WAAW,QAAQ,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA;AAgClF,IAAM,cAAc,OAAO,4BAA4B;AAqHhD,SAAS,iBAAkE,CAChF,cACA,MACmE;AAAA,EAEnE,IAAI,MAAM,YAAY,QAAQ,gBAAgB,OAAO,iBAAiB,UAAU;AAAA,IAC9E,MAAM,SAAS;AAAA,IACf,MAAM,cAAc,0BAAiD;AAAA,MACnE,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAAA,IAED,MAAM,QAAQ,sBAAsB,QAAQ,aAAa;AAAA,MACvD,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,IAID,MAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,WAAW,QAAQ,aAAa;AAAA,MAC9B,OAAO,eAAe,OAAO,MAAM;AAAA,QACjC,OAAO,YAAY;AAAA,QACnB,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IAGA,OAAO,eAAe,OAAO,aAAa;AAAA,MACxC,KAAK,MAAM,YAAY;AAAA,MACvB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,EACT;AAAA,EAGA,OAAO,0BACL,YACF;AAAA;AAIF,SAAS,yBAAwD,CAC/D,MACoB;AAAA,EACpB,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,oBAAoB,IAAI;AAAA,EAC9B,IAAI,cAAc;AAAA,EAClB,MAAM,sBAAsB,IAAI;AAAA,EAEhC,MAAM,MAAM,MACV,OAAO,WAAW,aAAa,QAAQ,aACnC,WAAW,YAAY,IAAI,IAC3B,KAAK,IAAI;AAAA,EAEf,MAAM,uBAAuB,CAC3B,OACA,MACA,SACA,eACG;AAAA,IACH,MAAM,kBAAkB;AAAA,IACxB,MAAM,sBAAsB;AAAA,IAC5B,MAAM,+BAA+B;AAAA,IACrC,MAAM,eAAe;AAAA,IACrB,MAAM,YAAY;AAAA,IAClB,MAAM,SAAS;AAAA,IACf,MAAM,gBAAgB;AAAA,IACtB,MAAM,aAAa;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,MAAM,UAAU;AAAA,IAChB,MAAM,aAAa;AAAA;AAAA,EAGrB,MAAM,kBAAkB,CAAC,UAA8B;AAAA,IACrD,IAAI,MAAM,cAAc,CAAC,MAAM,uBAAuB;AAAA,MACpD,MAAM,eAAe;AAAA,IACvB;AAAA;AAAA,EAMF,MAAM,cAAc,CAClB,MACA,QACA,SASqB;AAAA,IACrB,MAAM,QAA4B;AAAA,MAChC,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,8BAA8B;AAAA,MAC9B,cAAc;AAAA,MACd,uBAAuB;AAAA,MACvB,cAAc,QAAQ,MAAM,QAAQ;AAAA,MACpC,YAAY,MAAM,cAAc;AAAA,MAChC,eAAe,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACtD,QAAQ,MAAM,UAAU;AAAA,MACxB,WAAW,MAAM,aAAa,IAAI;AAAA,MAClC,MAAM,CAAC;AAAA,MACP;AAAA,MACA,SAAS,QAAQ,MAAM,OAAO;AAAA,MAC9B,YAAY,QAAQ,MAAM,UAAU;AAAA,MACpC,WAAW;AAAA,IACb;AAAA,IAEA,MAAM,QAAQ,EAAE,OAAO;AAAA,IACvB,OAAO,iBAAiB,OAAO;AAAA,MAC7B,MAAM;AAAA,QACJ,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,QACZ,KAAK,MAAM,MAAM;AAAA,QACjB,KAAK,CAAC,UAAmB;AAAA,UACvB,IAAI;AAAA,YAAO,MAAM,sBAAsB;AAAA;AAAA,QAEzC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,QACR,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,eAAe;AAAA,QACb,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,kBAAkB;AAAA,QAChB,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,aAAa;AAAA,QACX,KAAK,MAAM,CAAC,MAAM;AAAA,QAClB,KAAK,CAAC,UAAmB;AAAA,UACvB,IAAI,UAAU;AAAA,YAAO,gBAAgB,KAAK;AAAA;AAAA,QAE5C,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,QACN,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,QACZ,OAAO,MAAM,MAAM,KAAK,IAAI,CAAC,UAAU,MAAM,gBAAgB;AAAA,QAC7D,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,OAAO,CAAC,SAAiB,UAAU,OAAO,aAAa,UAAU;AAAA,UAC/D,IAAI,MAAM;AAAA,YAAc;AAAA,UACxB,qBAAqB,OAAO,SAAS,QAAQ,OAAO,GAAG,QAAQ,UAAU,CAAC;AAAA;AAAA,QAE5E,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,gBAAgB;AAAA,QACd,OAAO,MAAM,gBAAgB,KAAK;AAAA,QAClC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,0BAA0B;AAAA,QACxB,OAAO,MAAM;AAAA,UACX,MAAM,sBAAsB;AAAA,UAC5B,MAAM,+BAA+B;AAAA;AAAA,QAEvC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,iBAAiB;AAAA,QACf,OAAO,MAAM;AAAA,UACX,MAAM,sBAAsB;AAAA;AAAA,QAE9B,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,MAAM,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MACvD,iBAAiB,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MAClE,WAAW,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MAC5D,gBAAgB,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,OAChE,cAAc;AAAA,QACb,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,IAED,OAAO;AAAA;AAAA,EAGT,MAAM,gBAAgB,CAAC,UACpB,MAAiD;AAAA,EAEpD,MAAM,8BAA8B,CAClC,YACG;AAAA,IACH,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,SAAS,QAAQ,SAAS,OAAO;AAAA,MACjC,SAAS,QAAQ,SAAS,OAAO;AAAA,MACjC,MAAM,QAAQ,SAAS,IAAI;AAAA,MAC3B,QAAQ,SAAS,UAAU;AAAA,IAC7B;AAAA;AAAA,EAGF,MAAM,yBAAyB,CAAC,YAA8C;AAAA,IAC5E,IAAI,OAAO,YAAY;AAAA,MAAW,OAAO;AAAA,IACzC,OAAO,QAAQ,SAAS,OAAO;AAAA;AAAA,EAGjC,MAAM,uBAAuB,CAAC,MAAc,WAAiC;AAAA,IAC3E,IAAI,OAAO;AAAA,MAAS;AAAA,IACpB,OAAO,UAAU;AAAA,IAEjB,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,MAAM;AAAA,MACR,MAAM,MAAM,KAAK,QAAQ,MAAM;AAAA,MAC/B,IAAI,OAAO;AAAA,QAAG,KAAK,OAAO,KAAK,CAAC;AAAA,MAChC,IAAI,KAAK,WAAW;AAAA,QAAG,UAAU,OAAO,IAAI;AAAA,IAC9C;AAAA,IAEA,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,MACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,IAChE;AAAA;AAAA,EAIF,MAAM,sBAAsB,CAAC,WAAmB,WAAmB;AAAA,IAEjE,IAAI,cAAc;AAAA,MAAS;AAAA,IAG3B,IAAI,MAAM,iBAAiB;AAAA,MACzB,KAAK,gBAAgB,WAAW,MAAK;AAAA,MACrC;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,UAAU,IAAI,OAAO;AAAA,IAC5C,IAAI,kBAAkB,eAAe,SAAS,GAAG;AAAA,MAC/C,cAAc,EAAE,MAAM,SAAS,QAAQ,OAAM,CAEzC;AAAA,IACN,EAAO;AAAA,MAEL,MAAM;AAAA;AAAA;AAAA,EAIV,MAAM,0BAA0B,CAC9B,WACA,UACG;AAAA,IACH,IAAI,kBAAkB,SAAS;AAAA,MAAG;AAAA,IAElC,WAAW,OAAO,MAAM,KAAK,iBAAiB,GAAG;AAAA,MAC/C,IAAI,CAAC,gBAAgB,WAAW,IAAI,OAAO;AAAA,QAAG;AAAA,MAG9C,MAAM,YAAY,YAAY,IAAI,SAAS,MAAM,QAAQ;AAAA,QACvD;AAAA,QACA,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,MACD,MAAM,gBAAkC,OAAO,iBAAiB,WAAW;AAAA,QACzE,cAAc,EAAE,OAAO,WAAW,YAAY,MAAM,cAAc,KAAK;AAAA,MACzE,CAAC;AAAA,MAED,IAAI;AAAA,QACF,MAAM,KAAK,IAAI;AAAA,QACf,MAAM,MAAM,GAAG,aAAa;AAAA,QAC5B,IAAI,OAAO,OAAO,IAAI,SAAS,YAAY;AAAA,UACzC,IAAI,MAAM,CAAC,WAAU;AAAA,YACnB,IAAI;AAAA,cACF,oBAAoB,WAAW,MAAK;AAAA,cACpC,OAAO,UAAU;AAAA,cAEjB,eAAe,MAAM;AAAA,gBACnB,MAAM;AAAA,eACP;AAAA;AAAA,WAEJ;AAAA,QACH;AAAA,QACA,OAAO,QAAO;AAAA,QACd,oBAAoB,WAAW,MAAK;AAAA,gBACpC;AAAA,QACA,IAAI,IAAI;AAAA,UAAM,kBAAkB,OAAO,GAAG;AAAA;AAAA,MAG5C,MAAM,QAAQ,cAAc,aAAa;AAAA,MACzC,IAAI,OAAO,gCAAgC,OAAO,qBAAqB;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,mBAA2D,CAC/D,MACA,UACA,YACG;AAAA,IACH,IAAI,eAAe,CAAC,UAAU;AAAA,MAE5B,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,QAAQ,SAAS,SAAS,MAAM,WAAW,4BAA4B,OAAO;AAAA,IAC9E,IAAI,OAAO,UAAU,IAAI,IAAI;AAAA,IAC7B,IAAI,CAAC,MAAM;AAAA,MACT,OAAO,CAAC;AAAA,MACR,UAAU,IAAI,MAAM,IAAI;AAAA,IAC1B;AAAA,IAEA,WAAW,YAAY,MAAM;AAAA,MAC3B,IAAI,SAAS,aAAa,YAAY,SAAS,YAAY,SAAS;AAAA,QAClE,OAAO,MACL,oBAAoB,MAAM,UAAU,OAA0C;AAAA,MAClF;AAAA,IACF;AAAA,IAEA,MAAM,WAAW;AAAA,IACjB,MAAM,WACJ,OAAO,aAAa,aACf,WACD,CAAC,UAEG,SAGA,YAAY,KAAK;AAAA,IAE3B,MAAM,SAA+B;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IACA,KAAK,KAAK,MAAM;AAAA,IAEhB,MAAM,eAAc,MAAM,qBAAqB,MAAM,MAAM;AAAA,IAE3D,IAAI,QAAQ;AAAA,MACV,MAAM,UAAU,MAAM,qBAAqB,MAAM,MAAM;AAAA,MACvD,OAAO,eAAe;AAAA,MACtB,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxD,IAAI,OAAO;AAAA,QAAS,QAAQ;AAAA,IAC9B;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,sBAAiE,CACrE,SACA,UACA,YACG;AAAA,IACH,IAAI;AAAA,MAAa,OAAO,MAAM;AAAA,IAE9B,MAAM,QAAQ,WAAW,CAAC;AAAA,IAC1B,WAAW,YAAY,mBAAmB;AAAA,MACxC,IAAI,SAAS,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,QAC5D,OAAO,MAAM,uBAAuB,SAAS,QAAQ;AAAA,MACvD;AAAA,IACF;AAAA,IACA,MAAM,SAA8B;AAAA,MAClC,IAAI;AAAA,MACJ;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAChB;AAAA,IACA,kBAAkB,IAAI,MAAM;AAAA,IAE5B,MAAM,eAAc,MAAM;AAAA,MACxB,kBAAkB,OAAO,MAAM;AAAA,MAC/B,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA;AAAA,IAGF,IAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,UAAU,MAAM,aAAY;AAAA,MAClC,OAAO,eAAe;AAAA,MACtB,MAAM,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MAC9D,IAAI,MAAM,OAAO;AAAA,QAAS,QAAQ;AAAA,IACpC;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,yBAAuE,CAC3E,SACA,aACG;AAAA,IACH,WAAW,UAAU,MAAM,KAAK,iBAAiB,GAAG;AAAA,MAClD,IAAI,OAAO,YAAY,WAAW,OAAO,OAAO,UAAU;AAAA,QACxD,kBAAkB,OAAO,MAAM;AAAA,QAC/B,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,UACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,kBAAkB,CACtB,WACA,OACA,OACA,sBACG;AAAA,IACH,MAAM,QAAQ,cAAc,KAAK;AAAA,IACjC,IAAI,CAAC,SAAS,MAAM;AAAA,MAAqB;AAAA,IAEzC,MAAM,gBAAgB;AAAA,IACtB,MAAM,SAAS;AAAA,IACf,MAAM,aAAa,MAAM;AAAA,IAEzB,WAAW,OAAO,mBAAmB;AAAA,MACnC,IAAI,IAAI;AAAA,QAAS;AAAA,MACjB,IAAI,UAAU,eAAe,CAAC,IAAI;AAAA,QAAS;AAAA,MAC3C,IAAI,UAAU,cAAc,IAAI;AAAA,QAAS;AAAA,MAEzC,IAAI,IAAI;AAAA,QAAM,qBAAqB,IAAI,MAAM,GAAG;AAAA,MAEhD,IAAI,IAAI;AAAA,QAAS,MAAM,wBAAwB;AAAA,MAC/C,IAAI;AAAA,QACF,MAAM,MAAM,IAAI,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,QACxD,IAAI,OAAO,OAAO,IAAI,SAAS,YAAY;AAAA,UACzC,IAAI,MAAM,CAAC,WAAU;AAAA,YACnB,IAAI;AAAA,cACF,oBAAoB,WAAW,MAAK;AAAA,cACpC,OAAO,UAAU;AAAA,cACjB,eAAe,MAAM;AAAA,gBACnB,MAAM;AAAA,eACP;AAAA;AAAA,WAEJ;AAAA,QACH;AAAA,QACA,OAAO,QAAO;AAAA,QACd,oBAAoB,WAAW,MAAK;AAAA,gBACpC;AAAA,QACA,IAAI,IAAI;AAAA,UAAS,MAAM,wBAAwB;AAAA;AAAA,MAGjD,IAAI,MAAM;AAAA,QAA8B;AAAA,IAC1C;AAAA;AAAA,EAGF,MAAM,gBAAqD,CAAC,eAAe;AAAA,IACzE,IAAI;AAAA,MAAa,OAAO;AAAA,IAExB,IAAI;AAAA,IACJ,IAAI;AAAA,IAEJ,IAAI,cAAc,OAAO,eAAe,UAAU;AAAA,MAChD,QAAQ,cAAc,UAAoC;AAAA,MAC1D,IAAI,OAAO;AAAA,QACT,QAAQ;AAAA,MACV,EAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QAQd,IAAI,OAAO,MAAM,SAAS,UAAU;AAAA,UAClC,MAAM,IAAI,UAAU,6BAA6B;AAAA,QACnD;AAAA,QACA,QAAQ,YAAY,MAAM,MAAM,MAAM,QAAsB;AAAA,UAC1D,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,UAChB,WAAW,MAAM;AAAA,QACnB,CAAC;AAAA,QACD,QAAQ,cAAc,KAAK;AAAA;AAAA,IAE/B,EAAO;AAAA,MACL,MAAM,IAAI,UAAU,uCAAuC;AAAA;AAAA,IAG7D,MAAM,gBAAgB,SAAS,cAAc,KAAK;AAAA,IAElD,IAAI,cAAc,gBAAgB,CAAC,cAAc,iBAAiB;AAAA,MAChE,MAAM,UACJ;AAAA,MACF,IAAI,OAAO,WAAW,iBAAiB,YAAY;AAAA,QACjD,MAAM,IAAI,WAAW,aAAa,SAAS,mBAAmB;AAAA,MAChE;AAAA,MACA,MAAM,MAAM,IAAI,MAAM,OAAO;AAAA,MAC7B,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,IACR;AAAA,IAEA,cAAc,YAAY;AAAA,IAC1B,cAAc,eAAe;AAAA,IAC7B,cAAc,OAAO;AAAA,MACnB;AAAA,QACE,kBAAkB;AAAA,QAClB,8BAA8B;AAAA,QAC9B,sBAAsB;AAAA,QACtB,eAAe;AAAA,QACf,cAAc,CAAC;AAAA,QACf,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAGA,wBAAwB,cAAc,MAAM,KAAK;AAAA,IAEjD,MAAM,OAAO,UAAU,IAAI,cAAc,IAAI;AAAA,IAC7C,MAAM,WAAW,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,IACxC,gBAAgB,cAAc,MAAM,OAAO,aAAa,QAAQ;AAAA,IAChE,gBAAgB,cAAc,MAAM,OAAO,YAAY,QAAQ;AAAA,IAE/D,cAAc,aAAa,MAAM;AAAA,IACjC,cAAc,gBAAgB;AAAA,IAC9B,cAAc,OAAO,CAAC;AAAA,IACtB,cAAc,eAAe;AAAA,IAC7B,cAAc,sBAAsB;AAAA,IACpC,cAAc,+BAA+B;AAAA,IAE7C,OAAO,CAAC,cAAc;AAAA;AAAA,EAGxB,MAAM,sBAAiE,CACrE,MACA,UACA,YACG;AAAA,IACH,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,UAAU,uBAAuB,OAAO;AAAA,IAC9C,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAM;AAAA,IAEX,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,MAC9B,IAAI,OAAO,aAAa,YAAY,OAAO,YAAY,SAAS;AAAA,QAC9D,qBAAqB,MAAM,MAAM;AAAA,MACnC;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,QAAQ,MAAM;AAAA,IAClB,YAAY,MAAM,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,MAC1D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,QAC9B,qBAAqB,MAAM,MAAM;AAAA,MACnC;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AAAA,IAGhB,WAAW,UAAU,mBAAmB;AAAA,MACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA,IACF;AAAA,IACA,kBAAkB,MAAM;AAAA;AAAA,EAO1B,MAAM,KAA+B,CAAC,MAAM,YAAY;AAAA,IAEtD,OAAO,IAAI,WACT,CAAC,aAAuD;AAAA,MAEtD,IAAI;AAAA,MACJ,IAAI,OAAO,YAAY,WAAW;AAAA,QAChC,QAAO,EAAE,SAAS,QAAQ;AAAA,MAC5B,EAAO;AAAA,QACL,QAAO,WAAW,CAAC;AAAA;AAAA,MAGrB,MAAM,UAAU,MAAK;AAAA,MACrB,MAAM,OAAO,MAAK;AAAA,MAElB,MAAM,eAAe,CAAC,MAA8B;AAAA,QAClD,IAAI,UAAU;AAAA,QACd,IAAI;AAAA,UACF,IAAI,SAAS;AAAA,YACX,QAAQ,CAAC;AAAA,UACX;AAAA,UACA,SAAS,KAAK,CAAC;AAAA,UACf,UAAU;AAAA,kBACV;AAAA,UACA,IAAI,QAAQ,SAAS;AAAA,YACnB,SAAS,SAAS;AAAA,UACpB;AAAA;AAAA;AAAA,MAIJ,MAAM,eAAe,CAAC,MAA8B;AAAA,QAClD,SAAS,MAAM,EAAE,MAAM;AAAA;AAAA,MAIzB,MAAM,mBAAmB,iBACvB,MACA,cACA,KACF;AAAA,MAEA,IAAI;AAAA,MACJ,IAAI,MAAK,cAAc;AAAA,QACrB,mBAAmB,iBACjB,SACA,cACA,KACF;AAAA,MACF;AAAA,MAGA,OAAO,MAAM;AAAA,QACX,iBAAiB;AAAA,QACjB,IAAI,kBAAkB;AAAA,UACpB,iBAAiB;AAAA,QACnB;AAAA;AAAA,KAGN;AAAA;AAAA,EAGF,MAAM,aAAyC,CAAC,MAAM,UAAU,YAAY;AAAA,IAC1E,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,OAAO,iBAAiB,MAAM,UAAU,EAAE,SAAS,SAAS,MAAM,KAAK,CAAC;AAAA,IAC1E;AAAA,IACA,OAAO,iBAAiB,MAAM,UAAU,KAAM,WAAW,CAAC,GAAI,MAAM,KAAK,CAAC;AAAA;AAAA,EAG5E,MAAM,qBAA+D,CAAC,SAAS;AAAA,IAC7E,IAAI,SAAS,WAAW;AAAA,MACtB,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,MAC/B,IAAI,MAAM;AAAA,QACR,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,UAC9B,qBAAqB,MAAM,MAAM;AAAA,QACnC;AAAA,QACA,UAAU,OAAO,IAAI;AAAA,MACvB;AAAA,IACF,EAAO;AAAA,MAEL,YAAY,WAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,QAC/D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,UAC9B,qBAAqB,WAAW,MAAM;AAAA,QACxC;AAAA,MACF;AAAA,MACA,UAAU,MAAM;AAAA,MAGhB,WAAW,UAAU,mBAAmB;AAAA,QACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,UACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,QAChE;AAAA,MACF;AAAA,MACA,kBAAkB,MAAM;AAAA;AAAA;AAAA,EAS5B,MAAM,OAAmC,CAAC,SAAQ,UAAU;AAAA,IAC1D,IAAI,aAAa;AAAA,MACf,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,MAAM,eAAc,oBAAoB,KAAK,CAAC,UAAU;AAAA,MACtD,IAAI,OAAO;AAAA,QACT,MAAM,SAAS,MACb,YAAY,MAAM,cAAc,MAAM,QAAQ;AAAA,UAC5C;AAAA,UACA,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,QAClB,CAAC,CACH;AAAA,QACA,IAAI,WAAW,MAAM;AAAA,UAEnB,QAAO,cACL,MACF;AAAA,QACF;AAAA,MACF,EAAO;AAAA,QAEL,QAAO,cAAc;AAAA,UACnB,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAChB,CAA0D;AAAA;AAAA,KAE7D;AAAA,IAGD,MAAM,kBAAkB,MAAM;AAAA,MAC5B,aAAY;AAAA;AAAA,IAEd,oBAAoB,IAAI,eAAe;AAAA,IAEvC,OAAO,MAAM;AAAA,MACX,oBAAoB,OAAO,eAAe;AAAA,MAC1C,aAAY;AAAA;AAAA;AAAA,EAIhB,MAAM,YAAW,MAAM;AAAA,IACrB,IAAI;AAAA,MAAa;AAAA,IACjB,cAAc;AAAA,IAGd,WAAW,MAAM,qBAAqB;AAAA,MACpC,IAAI;AAAA,QACF,GAAG;AAAA,QACH,OAAO,KAAK;AAAA,QAGZ,IAAI;AAAA,UACF,oBAAoB,YAAY,GAAG;AAAA,UACnC,MAAM;AAAA;AAAA,IAIZ;AAAA,IACA,oBAAoB,MAAM;AAAA,IAG1B,YAAY,WAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,MAC/D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,QAC9B,qBAAqB,WAAW,MAAM;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AAAA,IAGhB,WAAW,UAAU,mBAAmB;AAAA,MACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA,IACF;AAAA,IACA,kBAAkB,MAAM;AAAA;AAAA,EAI1B,MAAM,YAA6C,CACjD,MACA,gBACA,QACA,oBACG;AAAA,IACH,IAAI;AAAA,IAEJ,IAAI,OAAO,mBAAmB,YAAY;AAAA,MACxC,WAAW;AAAA,QACT,MAAM;AAAA,QACN;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF,EAAO;AAAA,MACL,WAAY,kBAAkB,CAAC;AAAA;AAAA,IAGjC,IAAI,SAAS;AAAA,IAEb,IAAI,aAAa;AAAA,MAEf,IAAI,SAAS,UAAU;AAAA,QACrB,IAAI;AAAA,UACF,SAAS,SAAS;AAAA,UAClB,MAAM;AAAA,MAGV;AAAA,MACA,OAAO;AAAA,QACL,aAAa,MAAM;AAAA,UACjB,SAAS;AAAA;AAAA,YAEP,MAAM,GAAG;AAAA,UACX,OAAO,UAAU;AAAA;AAAA,MAErB;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,iBAAiB,MAAM,CAAC,UAAU;AAAA,MAC9C,IAAI;AAAA,QAAQ;AAAA,MACZ,IAAI,SAAS,MAAM;AAAA,QACjB,IAAI;AAAA,UACF,SAAS,KAAK,KAA2C;AAAA,UACzD,OAAO,KAAK;AAAA,UACZ,IAAI,SAAS,OAAO;AAAA,YAClB,IAAI;AAAA,cACF,SAAS,MAAM,GAAG;AAAA,cAClB,MAAM;AAAA,UAGV;AAAA;AAAA,MAEJ;AAAA,KACD;AAAA,IAGD,MAAM,aAAa,MAAM;AAAA,MACvB,IAAI;AAAA,QAAQ;AAAA,MACZ,SAAS;AAAA,MACT,IAAI,SAAS,UAAU;AAAA,QACrB,IAAI;AAAA,UACF,SAAS,SAAS;AAAA,UAClB,MAAM;AAAA,MAGV;AAAA;AAAA,IAEF,oBAAoB,IAAI,UAAU;AAAA,IAElC,OAAO;AAAA,MACL,aAAa,MAAM;AAAA,QACjB,IAAI;AAAA,UAAQ;AAAA,QACZ,SAAS;AAAA,QACT,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA;AAAA,UAEJ,MAAM,GAAG;AAAA,QACX,OAAO,UAAU;AAAA;AAAA,IAErB;AAAA;AAAA,EAGF,MAAM,eAAmD,MAAM;AAAA,IAC7D,OAAO,IAAI,WACT,CAAC,aAA8D;AAAA,MAC7D,IAAI,aAAa;AAAA,QACf,SAAS,SAAS;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,CAAC,UAA4B;AAAA,QAEpD,SAAS,KACP,YAAY,MAAM,cAAc,MAAM,QAAQ;AAAA,UAC5C;AAAA,UACA,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,QAClB,CAAC,CACH;AAAA;AAAA,MAGF,MAAM,eAAc,oBAAoB,KAAK,gBAAgB;AAAA,MAE7D,MAAM,aAAa,MAAM;AAAA,QACvB,SAAS,SAAS;AAAA;AAAA,MAEpB,oBAAoB,IAAI,UAAU;AAAA,MAElC,OAAO,MAAM;AAAA,QACX,aAAY;AAAA,QACZ,oBAAoB,OAAO,UAAU;AAAA;AAAA,KAG3C;AAAA;AAAA,EAIF,SAAS,MAAkC,CACzC,MACA,SAC+C;AAAA,IAE/C,IAAI,aAAa;AAAA,MACf,OAAO;AAAA,SACJ,OAAO,cAAc,GAAG;AAAA,UACvB,OAAO;AAAA;AAAA,QAET,IAAI,GAAoD;AAAA,UACtD,OAAO,QAAQ,QAAQ;AAAA,YACrB,OAAO;AAAA,YACP,MAAM;AAAA,UACR,CAAC;AAAA;AAAA,QAEH,MAAM,GAAoD;AAAA,UACxD,OAAO,QAAQ,QAAQ;AAAA,YACrB,OAAO;AAAA,YACP,MAAM;AAAA,UACR,CAAC;AAAA;AAAA,MAEL;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,SAAS;AAAA,IACxB,MAAM,aAAa,SAAS,cAAc;AAAA,IAC1C,MAAM,mBAAmB,SAAS,oBAAoB;AAAA,IAEtD,MAAM,SAAwC,CAAC;AAAA,IAC/C,IAAI,UAA6E;AAAA,IACjF,IAAI,OAAO;AAAA,IACX,IAAI,cAAc;AAAA,IAClB,IAAI,UAA+B;AAAA,IACnC,MAAM,uBAAuB,MAAM;AAAA,MACjC,IAAI,UAAU,SAAS;AAAA,QACrB,OAAO,oBAAoB,SAAS,OAAO;AAAA,MAC7C;AAAA;AAAA,IAGF,MAAM,QAAQ,iBAAiB,MAAM,CAAC,UAAU;AAAA,MAC9C,IAAI;AAAA,QAAM;AAAA,MACV,MAAM,aAAa;AAAA,MAEnB,IAAI,SAAS;AAAA,QAEX,MAAM,IAAI;AAAA,QACV,UAAU;AAAA,QACV,EAAE,EAAE,OAAO,YAAY,MAAM,MAAM,CAAC;AAAA,MACtC,EAAO;AAAA,QAEL,IAAI,OAAO,UAAU,cAAc,eAAe,UAAU;AAAA,UAC1D,QAAQ;AAAA,iBACD;AAAA,cACH,OAAO,MAAM;AAAA,cACb,OAAO,KAAK,UAAU;AAAA,cACtB;AAAA,iBACG;AAAA,cAEH;AAAA,iBACG;AAAA,cACH,MAAM;AAAA,cACN,oBAAoB,OAAO,UAAU;AAAA,cACrC,OAAO;AAAA,cACP,cAAc;AAAA,cACd,qBAAqB;AAAA,cACrB;AAAA;AAAA,QAEN,EAAO;AAAA,UACL,OAAO,KAAK,UAAU;AAAA;AAAA;AAAA,KAG3B;AAAA,IAGD,MAAM,aAAa,MAAM;AAAA,MACvB,OAAO;AAAA,MACP,qBAAqB;AAAA,MACrB,IAAI,SAAS;AAAA,QACX,MAAM,IAAI;AAAA,QACV,UAAU;AAAA,QACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,MACzE;AAAA;AAAA,IAEF,oBAAoB,IAAI,UAAU;AAAA,IAGlC,IAAI,QAAQ;AAAA,MACV,UAAU,MAAM;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA,QACN,IAAI,SAAS;AAAA,UACX,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,QACzE;AAAA;AAAA,MAEF,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxD,IAAI,OAAO;AAAA,QAAS,QAAQ;AAAA,IAC9B;AAAA,IAEA,MAAM,WAA0D;AAAA,OAC7D,OAAO,cAAc,GAAG;AAAA,QACvB,OAAO;AAAA;AAAA,WAEH,KAAI,GAAoD;AAAA,QAE5D,IAAI,OAAO,SAAS,GAAG;AAAA,UACrB,OAAO,EAAE,OAAO,OAAO,MAAM,GAAI,MAAM,MAAM;AAAA,QAC/C;AAAA,QAGA,IAAI,YAAY,MAAM;AAAA,UACpB,OAAO,QAAQ,OACb,IAAI,MACF,qEACF,CACF;AAAA,QACF;AAAA,QAGA,OAAO,IAAI,QACT,CAAC,UAAU,YAAY;AAAA,UACrB,IAAI,aAAa;AAAA,YACf,cAAc;AAAA,YACd,QAAQ,IAAI,oBAAoB,MAAM,UAAU,CAAC;AAAA,YACjD;AAAA,UACF;AAAA,UACA,IAAI,MAAM;AAAA,YACR,SAAS;AAAA,cACP,OAAO;AAAA,cACP,MAAM;AAAA,YACR,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UACA,UAAU;AAAA,SAEd;AAAA;AAAA,MAEF,MAAM,GAAoD;AAAA,QAExD,IAAI,SAAS;AAAA,UACX,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,QACzE;AAAA,QAEA,OAAO;AAAA,QACP,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA,QAGN,qBAAqB;AAAA,QAErB,OAAO,QAAQ,QAAQ;AAAA,UACrB,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AAAA;AAAA,IAEL;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,SAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACI,SAAS,GAAG;AAAA,MACd,OAAO;AAAA;AAAA,IAET;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAIE,OAGA,oBAAoB,MAAM;AAAA,IAC1B,OAAO,aAAa;AAAA;AAAA,EAGtB,OAAO;AAAA;;;AC7vCF,SAAS,oBAAuD,CACrE,QACA,QACA,SACY;AAAA,EACZ,MAAM,eAAc,OAAO,oBACzB,KACA,CAAC,UAAU;AAAA,IAET,MAAM,kBAAmB,WACtB;AAAA,IACH,MAAM,WACJ,OAAO,oBAAoB,aACvB,IAAI,gBAAgB,MAAM,cAAc;AAAA,MACtC,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB,CAAC,IACD;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB;AAAA,IACN,OAAO,cAAc,QAAQ;AAAA,KAE/B,OACF;AAAA,EAEA,OAAO;AAAA;AA2EF,SAAS,eAAkD,CAChE,WACA,YACA,SAC8C;AAAA,EAC9C,MAAM,UAAU,kBAAqB;AAAA,IACnC,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AAAA,EAED,MAAM,WAAW,IAAI;AAAA,EAErB,WAAW,QAAQ,YAAY;AAAA,IAC7B,MAAM,UAAU,CAAC,UAAwB;AAAA,MACvC,QAAQ,cAAc;AAAA,QACpB;AAAA,QACA,QAAS,MAAM,UAAU;AAAA,QACzB,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB,CAAkD;AAAA;AAAA,IAEpD,SAAS,IAAI,MAAM,OAAO;AAAA,IAC1B,UAAU,iBAAiB,MAAM,OAAO;AAAA,EAC1C;AAAA,EAGA,IAAI,UAA+B;AAAA,EAGnC,IAAI,SAAS,QAAQ;AAAA,IACnB,UAAU,MAAM;AAAA,MACd,YAAY,MAAM,YAAY,UAAU;AAAA,QACtC,UAAU,oBAAoB,MAAM,OAAO;AAAA,MAC7C;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,SAAS;AAAA;AAAA,IAEnB,QAAQ,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IAChE,IAAI,QAAQ,OAAO;AAAA,MAAS,QAAQ;AAAA,EACtC;AAAA,EAEA,OAAO;AAAA,IACL,kBAAkB,QAAQ;AAAA,IAC1B,qBAAqB,QAAQ;AAAA,IAC7B,eAAe,QAAQ;AAAA,IACvB,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,oBAAoB,QAAQ;AAAA,IAC5B,MAAM,QAAQ;AAAA,IACd,qBAAqB,QAAQ;AAAA,IAC7B,wBAAwB,QAAQ;AAAA,IAChC,IAAI,QAAQ;AAAA,IACZ,WAAW,QAAQ;AAAA,IACnB,cAAc,QAAQ;AAAA,IACtB,UAAU,QAAQ;AAAA,QACd,SAAS,GAAG;AAAA,MACd,OAAO,QAAQ;AAAA;AAAA,IAEjB,QAAQ,QAAQ;AAAA,IAChB,SAAS,MAAM;AAAA,MAEb,IAAI,SAAS,UAAU,SAAS;AAAA,QAC9B,QAAQ,OAAO,oBAAoB,SAAS,OAAO;AAAA,MACrD;AAAA,MACA,YAAY,MAAM,YAAY,UAAU;AAAA,QACtC,UAAU,oBAAoB,MAAM,OAAO;AAAA,MAC7C;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,SAAS;AAAA;AAAA,EAErB;AAAA;AA4DK,SAAS,IAAuC,CACrD,QACA,QACA,SACY;AAAA,EACZ,OAAO,OAAO,oBACZ,KACA,CAAC,UAAU;AAAA,IACT,OAAO,cAAc;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAChB,CAA0D;AAAA,KAE5D,OACF;AAAA;",
13
- "debugId": "DD2CABDF8085D79E64756E2164756E21",
12
+ "mappings": ";;AAIO,IAAM,mBACV,OAAO,WAAW,cAAe,OAAmC,cACrE,OAAO,IAAI,cAAc;AAG3B,IAAI,OAAO,WAAW,YAAY;AAAA,EAC/B,OAAmC,aAAa;AACnD;;;ACOA,SAAS,SAAS,CAAC,KAAU,KAAmC;AAAA,EAC9D,IAAI,QAAQ,QAAQ,QAAQ;AAAA,IAAW;AAAA,EACvC,MAAM,QAAQ,IAAI;AAAA,EAClB,IAAI,SAAS;AAAA,IAAM;AAAA,EACnB,IAAI,OAAO,UAAU,YAAY;AAAA,IAC/B,MAAM,IAAI,UAAU,QAAQ,oBAAoB;AAAA,EAClD;AAAA,EACA,OAAO;AAAA;AAMT,SAAS,eAAe,CAAC,GAAQ;AAAA,EAC/B,IAAI,OAAO,mBAAmB,YAAY;AAAA,IACxC,eAAe,MAAM;AAAA,MACnB,MAAM;AAAA,KACP;AAAA,EACH,EAAO;AAAA,IACL,WAAW,MAAM;AAAA,MACf,MAAM;AAAA,KACP;AAAA;AAAA;AAiBL,SAAS,wBAAwB,CAAY,cAAmB;AAAA,EAC9D,KAAK,gBAAgB;AAAA;AAGvB,yBAAyB,YAAY,OAAO,OAAO,OAAO,SAAS;AACnE,OAAO,iBAAiB,yBAAyB,WAAW;AAAA,EAC1D,aAAa,EAAE,OAAO,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,EACjE,QAAQ;AAAA,IACN,GAAG,GAAG;AAAA,MACJ,OAAO,KAAK,cAAc;AAAA;AAAA,IAE5B,cAAc;AAAA,EAChB;AAAA,EACA,MAAM;AAAA,IACJ,OAAO,SAAS,IAAI,CAAY,OAAY;AAAA,MAC1C,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS;AAAA,MAC1B,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,MAAM;AAAA,QACpC,IAAI,CAAC;AAAA,UAAG;AAAA,QACR,OAAO,EAAE,KAAK,UAAU,KAAK;AAAA,QAC7B,OAAO,GAAG;AAAA,QACV,IAAI;AAAA,UACF,KAAK,MAAM,CAAC;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,gBAAgB,GAAG;AAAA;AAAA;AAAA;AAAA,IAIzB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,OAAO,SAAS,KAAK,CAAY,YAAiB;AAAA,MAChD,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS,MAAM;AAAA,MAChC,aAAa,UAAU;AAAA,MACvB,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,OAAO;AAAA,QACrC,IAAI,GAAG;AAAA,UACL,OAAO,EAAE,KAAK,UAAU,UAAU;AAAA,QACpC;AAAA,QACA,MAAM;AAAA,gBACN;AAAA,QACA,aAAa,SAAS;AAAA;AAAA;AAAA,IAG1B,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,OAAO,SAAS,QAAQ,CAAY,OAAY;AAAA,MAC9C,MAAM,eAAe,KAAK;AAAA,MAC1B,IAAI,aAAa;AAAA,QAAS;AAAA,MAC1B,aAAa,UAAU;AAAA,MACvB,MAAM,WAAW,aAAa;AAAA,MAC9B,IAAI;AAAA,QACF,MAAM,IAAI,UAAU,UAAU,UAAU;AAAA,QACxC,IAAI,GAAG;AAAA,UACL,OAAO,EAAE,KAAK,UAAU,KAAK;AAAA,QAC/B;AAAA,QACA;AAAA,gBACA;AAAA,QACA,aAAa,SAAS;AAAA;AAAA;AAAA,IAG1B,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF,CAAC;AAED,OAAO,eAAe,yBAAyB,UAAU,MAAM,UAAU,EAAE,OAAO,EAAE,CAAC;AACrF,OAAO,eAAe,yBAAyB,UAAU,OAAO,UAAU,EAAE,OAAO,EAAE,CAAC;AACtF,OAAO,eAAe,yBAAyB,UAAU,UAAU,UAAU;AAAA,EAC3E,OAAO;AACT,CAAC;AAKD,SAAS,YAAY,CAAY,UAAe,YAAiB;AAAA,EAC/D,KAAK,YAAY;AAAA,EACjB,KAAK,aAAa;AAAA,EAClB,KAAK,UAAU;AAAA,EAEf,MAAM,uBAAuB,IAAK,yBAAiC,IAAI;AAAA,EAEvE,IAAI;AAAA,IACF,MAAM,QAAQ,UAAU,UAAU,OAAO;AAAA,IACzC,IAAI,OAAO;AAAA,MACT,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B;AAAA,IACA,OAAO,GAAG;AAAA,IACV,gBAAgB,CAAC;AAAA;AAAA,EAGnB,IAAI,KAAK;AAAA,IAAS;AAAA,EAElB,IAAI;AAAA,IACF,MAAM,UAAU,WAAW,oBAAoB;AAAA,IAC/C,IAAI,WAAW,MAAM;AAAA,MACnB,IAAI,OAAO,YAAY,cAAc,OAAO,QAAQ,gBAAgB,YAAY;AAAA,QAC9E,MAAM,IAAI,UAAU,UAAU,sCAAsC;AAAA,MACtE;AAAA,MACA,KAAK,aAAa;AAAA,MAClB,IAAI,KAAK,SAAS;AAAA,QAChB,KAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAAA,IACA,OAAO,GAAG;AAAA,IACV,qBAAqB,MAAM,CAAC;AAAA;AAAA;AAIhC,aAAa,YAAY,OAAO,OAAO,OAAO,SAAS;AACvD,OAAO,iBAAiB,aAAa,WAAW;AAAA,EAC9C,aAAa,EAAE,OAAO,QAAQ,cAAc,MAAM,UAAU,KAAK;AAAA,EACjE,QAAQ;AAAA,IACN,GAAG,GAAG;AAAA,MACJ,OAAO,KAAK;AAAA;AAAA,IAEd,cAAc;AAAA,EAChB;AAAA,EACA,aAAa;AAAA,IACX,OAAO,SAAS,WAAW,GAAY;AAAA,MACrC,IAAI,KAAK;AAAA,QAAS;AAAA,MAClB,KAAK,UAAU;AAAA,MACf,KAAK,SAAS;AAAA;AAAA,IAEhB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AAAA,EACA,UAAU;AAAA,IACR,OAAO,SAAS,QAAQ,GAAY;AAAA,MAClC,MAAM,UAAU,KAAK;AAAA,MACrB,IAAI,CAAC;AAAA,QAAS;AAAA,MACd,KAAK,aAAa;AAAA,MAClB,IAAI;AAAA,QACF,IAAI,OAAO,YAAY,YAAY;AAAA,UACjC,QAAQ;AAAA,QACV,EAAO,SAAI,WAAW,OAAO,QAAQ,gBAAgB,YAAY;AAAA,UAC/D,QAAQ,YAAY;AAAA,QACtB;AAAA,QACA,OAAO,GAAG;AAAA,QACV,gBAAgB,CAAC;AAAA;AAAA;AAAA,IAGrB,cAAc;AAAA,IACd,UAAU;AAAA,EACZ;AACF,CAAC;AAAA;AAKM,MAAM,WAA2C;AAAA,EAC9C;AAAA,EAER,WAAW,CAAC,YAA2B;AAAA,IACrC,IAAI,OAAO,eAAe,YAAY;AAAA,MACpC,MAAM,IAAI,UAAU,2CAA2C;AAAA,IACjE;AAAA,IACA,KAAK,cAAc;AAAA;AAAA,EAGrB,SAAS,CACP,gBACA,QACA,WACuB;AAAA,IACvB,IAAI;AAAA,IACJ,IAAI,OAAO,mBAAmB,YAAY;AAAA,MACxC,WAAW;AAAA,QACT,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF,EAAO,SAAI,OAAO,mBAAmB,YAAY,mBAAmB,MAAM;AAAA,MACxE,MAAM,IAAI,UAAU,iBAAiB,mBAAmB;AAAA,IAC1D,EAAO;AAAA,MACL,WAAW;AAAA;AAAA,IAGb,OAAO,IAAK,aAAqB,UAAU,KAAK,WAAW;AAAA;AAAA,GAG5D,iBAAiB,GAAkB;AAAA,IAClC,OAAO;AAAA;AAAA,SAGF,EAAK,IAAI,OAA2B;AAAA,IACzC,MAAM,IAAI,OAAO,SAAS,aAAa,OAAO;AAAA,IAC9C,OAAO,IAAK,EAAU,CAAC,aAA+C;AAAA,MACpE,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AAAA,QACrC,SAAS,KAAK,MAAM,EAAE;AAAA,QACtB,IAAI,SAAS;AAAA,UAAQ;AAAA,MACvB;AAAA,MACA,SAAS,SAAS;AAAA,KACnB;AAAA;AAAA,SAGI,IAAO,CAAC,GAAuB;AAAA,IACpC,MAAM,IAAI,OAAO,SAAS,aAAa,OAAO;AAAA,IAC9C,IAAI,KAAK;AAAA,MAAM,MAAM,IAAI,UAAU,IAAI,mBAAmB;AAAA,IAE1D,MAAM,SAAS,EAAE;AAAA,IACjB,IAAI,UAAU,MAAM;AAAA,MAClB,IAAI,OAAO,WAAW,YAAY;AAAA,QAChC,MAAM,IAAI,UAAU,SAAS,oBAAoB;AAAA,MACnD;AAAA,MACA,MAAM,aAAa,OAAO,KAAK,CAAC;AAAA,MAChC,IAAI,OAAO,UAAU,MAAM,YAAY;AAAA,QACrC,MAAM,IAAI,UAAU,aAAa,mBAAmB;AAAA,MACtD;AAAA,MACA,IAAI,WAAW,gBAAgB,GAAG;AAAA,QAChC,OAAO;AAAA,MACT;AAAA,MACA,OAAO,IAAK,EAAU,CAAC,aACrB,WAAW,UAAU,QAAQ,CAC/B;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,YAAY,GAAG;AAAA,MACxB,OAAO,IAAK,EAAU,CAAC,aAA+C;AAAA,QACpE,WAAW,QAAQ,GAAkB;AAAA,UACnC,SAAS,KAAK,IAAI;AAAA,UAClB,IAAI,SAAS;AAAA,YAAQ;AAAA,QACvB;AAAA,QACA,SAAS,SAAS;AAAA,OACnB;AAAA,IACH;AAAA,IAEA,MAAM,IAAI,UAAU,IAAI,oBAAoB;AAAA;AAEhD;;;AClQO,IAAM,eAAe,OAAO,IAAI,gCAAgC;AAGhE,IAAM,kBAAkB,OAAO,IAAI,mCAAmC;AAkE7E,IAAM,iBAAiB,IAAI,IAAyB;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAwBD,SAAS,WAAW,CAAC,OAAiC;AAAA,EACpD,OACE,UAAU,QACV,OAAO,UAAU,YACjB,CAAC,UAAU,KAAK,KAChB,EAAE,iBAAiB,SACnB,EAAE,iBAAiB,WACnB,EAAE,iBAAiB,QACnB,EAAE,iBAAiB,QACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,YACnB,EAAE,iBAAiB,UACnB,EAAE,iBAAiB,gBACnB,CAAC,YAAY,OAAO,KAAK;AAAA;AAK7B,SAAS,SAAS,CAAC,OAAyB;AAAA,EAC1C,OACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,kBAAkB;AAAA;AAKzD,SAAS,cAAc,CAAC,MAAoD;AAAA,EAC1E,OAAO,OAAO,SAAS,YAAY,eAAe,IAAI,IAA2B;AAAA;AAInF,SAAS,cAAc,CAAC,KAAc,MAAwB;AAAA,EAC5D,MAAM,UAAU,MAAM,QAAQ,GAAG;AAAA,EACjC,MAAM,YAAY,UACd,CAAC,GAAI,GAAiB,IACtB,KAAM,IAAgC;AAAA,EAE1C,IAAI,CAAC,QAAQ,SAAS;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,KAAK,MAAM,GAAG;AAAA,EAE5B,MAAM,SAAS;AAAA,EAEf,IAAI,UAAmC;AAAA,EAEvC,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACrC,MAAM,MAAM,MAAM;AAAA,IAClB,MAAM,QAAQ,QAAQ;AAAA,IACtB,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAAA,MAC/C,QAAQ,OAAO,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,KAAK,MAAM;AAAA,MAE9D,IAAI,IAAI,MAAM,SAAS,GAAG;AAAA,QACxB,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF,EAAO;AAAA,MACL;AAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AAAA;AAIT,SAAS,kBAAkB,CACzB,KACA,UACA,aACA,WACS;AAAA,EACT,IAAI,QAAQ,QAAQ,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EAEpD,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI;AAAA,SAE7C;AAAA,MACH,IAAI,WAAW;AAAA,QACb,OAAO,UAAU,GAAG;AAAA,MACtB;AAAA,MACA,IAAI,OAAO,oBAAoB,YAAY;AAAA,QACzC,MAAM,IAAI,MACR,wHACF;AAAA,MACF;AAAA,MACA,OAAO,gBAAgB,GAAG;AAAA,SAEvB;AAAA,MACH,OAAO,eAAe,KAAK,WAAW;AAAA;AAAA,MAGtC,OAAO;AAAA;AAAA;AAKb,SAAS,gBAAgB,CACvB,QACA,QACA,QACA,MAC4C;AAAA,EAC5C,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,EAAE,OAAO,KAAK;AAAA,SAClB;AAAA,MACH,OAAO,EAAE,SAAS,OAAO,SAAS,IAAI,CAAC,OAAO,OAAO,SAAS,EAAE,IAAI,CAAC,EAAE;AAAA,SACpE;AAAA,MACH,OAAO,EAAE,SAAS,OAAO,SAAS,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAAA,SACpD;AAAA,MACH,OAAO,EAAE,OAAO,KAAK;AAAA,SAClB,UAAU;AAAA,MACb,OAAO,OAAO,gBAAgB,SAAS;AAAA,MACvC,MAAM,cACJ,QAAQ,IAAI,KAAK,IAAI,OAAO,SAAS,OAAO,CAAC,IAAI,KAAK,IAAI,OAAO,OAAO,MAAM;AAAA,MAChF,MAAM,oBAAoB,KAAK,IAC7B,eAAe,OAAO,SAAS,aAC/B,OAAO,SAAS,WAClB;AAAA,MACA,OAAO;AAAA,QACL,SAAS,OAAO,MAAM,aAAa,cAAc,iBAAiB;AAAA,QAClE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,SACK;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACH,OAAO,CAAC;AAAA;AAAA,MAER,OAAO,CAAC;AAAA;AAAA;AAUd,IAAM,gBAAgB,IAAI;AAM1B,SAAS,kBAAkB,CACzB,QACgE;AAAA,EAChE,IAAI,aAAa,cAAc,IAAI,MAAM;AAAA,EACzC,IAAI,CAAC,YAAY;AAAA,IACf,aAAa,IAAI;AAAA,IACjB,cAAc,IAAI,QAAQ,UAAU;AAAA,EACtC;AAAA,EACA,OAAO;AAAA;AAOT,SAAS,4BAA8C,CACrD,OACA,QACA,MACA,SACiC;AAAA,EACjC,MAAM,WAAW,MAAM;AAAA,EAEvB,OAAO,QAAS,IAAqB,MAA0B;AAAA,IAE7D,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,MACA,QAAQ,QAAQ,SAClB;AAAA,IACA,MAAM,gBAAgB,CAAC,GAAG,KAAK;AAAA,IAE/B,MAAM,SAAS,SAAS,MAAM,MAAM,IAAI;AAAA,IAExC,QAAQ,OAAO,YAAY,iBAAiB,QAAQ,eAAe,OAAO,IAAI;AAAA,IAG9E,MAAM,kBAAkB,OAAO,UAAU,QAAQ,WAAW,UAAU;AAAA,IACtE,MAAM,iBAAiB,OAAO,UAAU,SAAS;AAAA,IAGjD,QAAQ,YAAY,cAAc;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF,CAAsE;AAAA,IAGtE,IAAI,MAAM;AAAA,MACR,QAAQ,YAAY,cAAc;AAAA,QAChC,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,SAAS,QAAQ;AAAA,UACjB,UAAU;AAAA,QACZ;AAAA,MACF,CAAsE;AAAA,IACxE;AAAA,IAGA,QAAQ,YAAY,cAAc;AAAA,MAChC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAS,QAAQ;AAAA,QACjB,UAAU;AAAA,MACZ;AAAA,IACF,CAAsE;AAAA,IAEtE,OAAO;AAAA;AAAA;AAQX,SAAS,6BAA+C,CACtD,QACA,MACA,SACG;AAAA,EAEH,MAAM,kBAAkB,mBAAmB,MAAM;AAAA,EACjD,MAAM,WAAW,gBAAgB,IAAI,OAA0C;AAAA,EAC/E,IAAI,UAAU;AAAA,IAGZ,OAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ,IAAI,MAAM,QAAQ;AAAA,IAC9B,GAAG,CAAC,KAAK,MAAM,UAAU;AAAA,MAEvB,IAAI,SAAS;AAAA,QAAc,OAAO;AAAA,MAClC,IAAI,SAAS;AAAA,QAAiB,OAAO;AAAA,MAGrC,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MACxC;AAAA,MAEA,MAAM,QAAQ,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MAG7C,IAAI,MAAM,QAAQ,GAAG,KAAK,eAAe,IAAI,GAAG;AAAA,QAC9C,OAAO,6BAA6B,KAAK,MAAM,MAAM,OAAO;AAAA,MAC9D;AAAA,MAGA,IAAI,QAAQ,QAAQ,QAAQ,YAAY,KAAK,GAAG;AAAA,QAC9C,MAAM,aAAa,OAAO,GAAG,QAAQ,SAAS;AAAA,QAC9C,OAAO,8BACL,OACA,YACA,OACF;AAAA,MACF;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,GAAG,CAAC,KAAK,MAAM,OAAO,UAAU;AAAA,MAE9B,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,IAAI,KAAK,MAAM,OAAO,QAAQ;AAAA,MAC/C;AAAA,MAEA,MAAM,WAAW,QAAQ,IAAI,KAAK,MAAM,QAAQ;AAAA,MAGhD,IAAI,OAAO,GAAG,UAAU,KAAK,GAAG;AAAA,QAC9B,OAAO;AAAA,MACT;AAAA,MAGA,MAAM,WAAW,OAAO,GAAG,QAAQ,SAAS;AAAA,MAC5C,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,UACA,QAAQ,QAAQ,SAClB;AAAA,MAEA,MAAM,UAAU,QAAQ,IAAI,KAAK,MAAM,OAAO,QAAQ;AAAA,MAEtD,IAAI,SAAS;AAAA,QAEX,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM,UAAU;AAAA,UAChB,QAAQ;AAAA,YACN;AAAA,YACA,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,QAGtE,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,MACxE;AAAA,MAEA,OAAO;AAAA;AAAA,IAGT,cAAc,CAAC,KAAK,MAAM;AAAA,MAExB,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,OAAO,QAAQ,eAAe,KAAK,IAAI;AAAA,MACzC;AAAA,MAEA,MAAM,WAAW,OAAO,GAAG,QAAQ,OAAO,IAAI,MAAM,OAAO,IAAI;AAAA,MAC/D,MAAM,gBAAgB,mBACpB,QAAQ,cACR,QAAQ,QAAQ,eAChB,UACA,QAAQ,QAAQ,SAClB;AAAA,MAEA,MAAM,UAAU,QAAQ,eAAe,KAAK,IAAI;AAAA,MAEhD,IAAI,SAAS;AAAA,QAEX,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM,UAAU;AAAA,UAChB,QAAQ;AAAA,YACN,OAAO;AAAA,YACP,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,QAGtE,QAAQ,YAAY,cAAc;AAAA,UAChC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS,QAAQ;AAAA,YACjB,UAAU;AAAA,UACZ;AAAA,QACF,CAAsE;AAAA,MACxE;AAAA,MAEA,OAAO;AAAA;AAAA,EAEX,CAAC;AAAA,EAGD,gBAAgB,IAAI,SAA4C;AAAA,IAC9D;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA;AAQT,SAAS,aAAa,CAAC,KAAyC;AAAA,EAC9D,OACE,OAAO,QAAQ,YACf,QAAQ,QACR,OAAQ,IAA2B,qBAAqB,cACxD,OAAQ,IAA2B,wBAAwB,cAC3D,OAAQ,IAA2B,kBAAkB;AAAA;AAiClD,SAAS,oBAAsC,CACpD,QACA,QACY;AAAA,EACZ,MAAM,WAAW,IAAI;AAAA,EACrB,MAAM,yBAAyB,OAAO,iBAAiB,KAAK,MAAM;AAAA,EAClE,MAAM,4BAA4B,OAAO,oBAAoB,KAAK,MAAM;AAAA,EAExE,MAAM,iBAAiB,CAAC,SAAiB,CAAC,UAAmB;AAAA,IAC3D,MAAM,SAAU,MAA6B,UAAU;AAAA,IACvD,OAAO,cAAc;AAAA,MACnB;AAAA,MACA;AAAA,IACF,CAAsE;AAAA;AAAA,EAIxE,MAAM,2BAA2B,OAAO,iBAAiB,KAAK,MAAM;AAAA,EAGpE,MAAM,0BAA2B,CAC/B,MACA,UACA,YACG;AAAA,IAEH,IAAI,CAAC,SAAS,IAAI,IAAI,KAAK,SAAS,YAAY,CAAC,KAAK,WAAW,SAAS,GAAG;AAAA,MAC3E,MAAM,UAAU,eAAe,IAAI;AAAA,MACnC,SAAS,IAAI,MAAM,OAAO;AAAA,MAC1B,uBAAuB,MAAM,OAAO;AAAA,IACtC;AAAA,IACA,OAAO,yBACL,MACA,UAGA,OACF;AAAA;AAAA,EAID,OAAgE,mBAC/D;AAAA,EAEF,OAAO,MAAM;AAAA,IAEV,OAAiE,mBAChE;AAAA,IAEF,YAAY,MAAM,YAAY,UAAU;AAAA,MACtC,0BAA0B,MAAM,OAAO;AAAA,IACzC;AAAA,IACA,SAAS,MAAM;AAAA;AAAA;AA0BZ,SAAS,UAAU,CAAC,KAAuB;AAAA,EAChD,OAAO,UAAU,GAAG;AAAA;AAkCf,SAAS,WAA6B,CAAC,OAAa;AAAA,EACzD,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EACA,OAAQ,MAA4B,oBAAoB;AAAA;AAqDnD,SAAS,qBAAuC,CACrD,QACA,aACA,SACG;AAAA,EACH,MAAM,kBAA0C;AAAA,IAC9C,MAAM,SAAS,QAAQ;AAAA,IACvB,eAAe,SAAS,iBAAiB;AAAA,IACzC,WAAW,SAAS;AAAA,EACtB;AAAA,EAEA,MAAM,UAA2B;AAAA,IAC/B;AAAA,IACA,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAAA,EAEA,MAAM,QAAQ,8BAA8B,QAAQ,IAAI,OAAO;AAAA,EAG/D,IAAI,cAAc,MAAM,GAAG;AAAA,IACzB,MAAM,oBAAoB,qBACxB,QACA,WACF;AAAA,IACA,MAAM,gBAAiB,YAA0C;AAAA,IACjE,IAAI,OAAO,kBAAkB,YAAY;AAAA,MACvC,MAAM,mBAAmB,cAAc,KAAK,WAAW;AAAA,MACvD,IAAI,UAAU;AAAA,MACb,YAAyC,WAAW,MAAM;AAAA,QACzD,IAAI,CAAC,SAAS;AAAA,UACZ,UAAU;AAAA,UACV,kBAAkB;AAAA,QACpB;AAAA,QACA,OAAO,iBAAiB;AAAA;AAAA,IAE5B;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;AC1vBF,MAAM,4BAA4B,MAAM;AAAA,EAC7C,WAAW,CAAC,WAAmB,YAAoB;AAAA,IACjD,MAAM,mCAAmC,oBAAoB,aAAa;AAAA,IAC1E,KAAK,OAAO;AAAA;AAEhB;;;ACgBA,SAAS,eAAe,CAAC,WAAmB,SAA0B;AAAA,EACpE,IAAI,YAAY;AAAA,IAAK,OAAO;AAAA,EAC5B,OAAO,QAAQ,SAAS,IAAI,KAAK,UAAU,WAAW,QAAQ,MAAM,GAAG,EAAE,IAAI,GAAG;AAAA;AAgClF,IAAM,cAAc,OAAO,4BAA4B;AAqHhD,SAAS,iBAAkE,CAChF,cACA,MACmE;AAAA,EAEnE,IAAI,MAAM,YAAY,QAAQ,gBAAgB,OAAO,iBAAiB,UAAU;AAAA,IAC9E,MAAM,SAAS;AAAA,IACf,MAAM,cAAc,0BAAiD;AAAA,MACnE,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAAA,IAED,MAAM,QAAQ,sBAAsB,QAAQ,aAAa;AAAA,MACvD,MAAM,KAAK;AAAA,MACX,eAAe,KAAK;AAAA,MACpB,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,IAID,MAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,WAAW,QAAQ,aAAa;AAAA,MAC9B,OAAO,eAAe,OAAO,MAAM;AAAA,QACjC,OAAO,YAAY;AAAA,QACnB,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IAGA,OAAO,eAAe,OAAO,aAAa;AAAA,MACxC,KAAK,MAAM,YAAY;AAAA,MACvB,YAAY;AAAA,MACZ,cAAc;AAAA,IAChB,CAAC;AAAA,IAED,OAAO;AAAA,EACT;AAAA,EAGA,OAAO,0BACL,YACF;AAAA;AAIF,SAAS,yBAAwD,CAC/D,MACoB;AAAA,EACpB,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,oBAAoB,IAAI;AAAA,EAC9B,IAAI,cAAc;AAAA,EAClB,MAAM,sBAAsB,IAAI;AAAA,EAEhC,MAAM,MAAM,MACV,OAAO,WAAW,aAAa,QAAQ,aACnC,WAAW,YAAY,IAAI,IAC3B,KAAK,IAAI;AAAA,EAEf,MAAM,uBAAuB,CAC3B,OACA,MACA,SACA,eACG;AAAA,IACH,MAAM,kBAAkB;AAAA,IACxB,MAAM,sBAAsB;AAAA,IAC5B,MAAM,+BAA+B;AAAA,IACrC,MAAM,eAAe;AAAA,IACrB,MAAM,YAAY;AAAA,IAClB,MAAM,SAAS;AAAA,IACf,MAAM,gBAAgB;AAAA,IACtB,MAAM,aAAa;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,MAAM,UAAU;AAAA,IAChB,MAAM,aAAa;AAAA;AAAA,EAGrB,MAAM,kBAAkB,CAAC,UAA8B;AAAA,IACrD,IAAI,MAAM,cAAc,CAAC,MAAM,uBAAuB;AAAA,MACpD,MAAM,eAAe;AAAA,IACvB;AAAA;AAAA,EAMF,MAAM,cAAc,CAClB,MACA,QACA,SASqB;AAAA,IACrB,MAAM,QAA4B;AAAA,MAChC,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,8BAA8B;AAAA,MAC9B,cAAc;AAAA,MACd,uBAAuB;AAAA,MACvB,cAAc,QAAQ,MAAM,QAAQ;AAAA,MACpC,YAAY,MAAM,cAAc;AAAA,MAChC,eAAe,MAAM,iBAAiB,MAAM,UAAU;AAAA,MACtD,QAAQ,MAAM,UAAU;AAAA,MACxB,WAAW,MAAM,aAAa,IAAI;AAAA,MAClC,MAAM,CAAC;AAAA,MACP;AAAA,MACA,SAAS,QAAQ,MAAM,OAAO;AAAA,MAC9B,YAAY,QAAQ,MAAM,UAAU;AAAA,MACpC,WAAW;AAAA,IACb;AAAA,IAEA,MAAM,QAAQ,EAAE,OAAO;AAAA,IACvB,OAAO,iBAAiB,OAAO;AAAA,MAC7B,MAAM;AAAA,QACJ,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,QACZ,KAAK,MAAM,MAAM;AAAA,QACjB,KAAK,CAAC,UAAmB;AAAA,UACvB,IAAI;AAAA,YAAO,MAAM,sBAAsB;AAAA;AAAA,QAEzC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,QACR,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,eAAe;AAAA,QACb,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,kBAAkB;AAAA,QAChB,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,aAAa;AAAA,QACX,KAAK,MAAM,CAAC,MAAM;AAAA,QAClB,KAAK,CAAC,UAAmB;AAAA,UACvB,IAAI,UAAU;AAAA,YAAO,gBAAgB,KAAK;AAAA;AAAA,QAE5C,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,YAAY;AAAA,QACV,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,QAAQ;AAAA,QACN,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,KAAK,MAAM,MAAM;AAAA,QACjB,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,QACZ,OAAO,MAAM,MAAM,KAAK,IAAI,CAAC,UAAU,MAAM,gBAAgB;AAAA,QAC7D,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,WAAW;AAAA,QACT,OAAO,CAAC,SAAiB,UAAU,OAAO,aAAa,UAAU;AAAA,UAC/D,IAAI,MAAM;AAAA,YAAc;AAAA,UACxB,qBAAqB,OAAO,SAAS,QAAQ,OAAO,GAAG,QAAQ,UAAU,CAAC;AAAA;AAAA,QAE5E,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,gBAAgB;AAAA,QACd,OAAO,MAAM,gBAAgB,KAAK;AAAA,QAClC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,0BAA0B;AAAA,QACxB,OAAO,MAAM;AAAA,UACX,MAAM,sBAAsB;AAAA,UAC5B,MAAM,+BAA+B;AAAA;AAAA,QAEvC,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,iBAAiB;AAAA,QACf,OAAO,MAAM;AAAA,UACX,MAAM,sBAAsB;AAAA;AAAA,QAE9B,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,MACA,MAAM,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MACvD,iBAAiB,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MAClE,WAAW,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,MAC5D,gBAAgB,EAAE,OAAO,GAAG,YAAY,MAAM,cAAc,KAAK;AAAA,OAChE,cAAc;AAAA,QACb,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,IAED,OAAO;AAAA;AAAA,EAGT,MAAM,gBAAgB,CAAC,UACpB,MAAiD;AAAA,EAEpD,MAAM,8BAA8B,CAClC,YACG;AAAA,IACH,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,SAAS,QAAQ,SAAS,OAAO;AAAA,MACjC,SAAS,QAAQ,SAAS,OAAO;AAAA,MACjC,MAAM,QAAQ,SAAS,IAAI;AAAA,MAC3B,QAAQ,SAAS,UAAU;AAAA,IAC7B;AAAA;AAAA,EAGF,MAAM,yBAAyB,CAAC,YAA8C;AAAA,IAC5E,IAAI,OAAO,YAAY;AAAA,MAAW,OAAO;AAAA,IACzC,OAAO,QAAQ,SAAS,OAAO;AAAA;AAAA,EAGjC,MAAM,uBAAuB,CAAC,MAAc,WAAiC;AAAA,IAC3E,IAAI,OAAO;AAAA,MAAS;AAAA,IACpB,OAAO,UAAU;AAAA,IAEjB,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,MAAM;AAAA,MACR,MAAM,MAAM,KAAK,QAAQ,MAAM;AAAA,MAC/B,IAAI,OAAO;AAAA,QAAG,KAAK,OAAO,KAAK,CAAC;AAAA,MAChC,IAAI,KAAK,WAAW;AAAA,QAAG,UAAU,OAAO,IAAI;AAAA,IAC9C;AAAA,IAEA,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,MACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,IAChE;AAAA;AAAA,EAIF,MAAM,sBAAsB,CAAC,WAAmB,WAAmB;AAAA,IAEjE,IAAI,cAAc;AAAA,MAAS;AAAA,IAG3B,IAAI,MAAM,iBAAiB;AAAA,MACzB,KAAK,gBAAgB,WAAW,MAAK;AAAA,MACrC;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,UAAU,IAAI,OAAO;AAAA,IAC5C,IAAI,kBAAkB,eAAe,SAAS,GAAG;AAAA,MAC/C,cAAc,EAAE,MAAM,SAAS,QAAQ,OAAM,CAEzC;AAAA,IACN,EAAO;AAAA,MAEL,MAAM;AAAA;AAAA;AAAA,EAIV,MAAM,0BAA0B,CAC9B,WACA,UACG;AAAA,IACH,IAAI,kBAAkB,SAAS;AAAA,MAAG;AAAA,IAElC,WAAW,OAAO,MAAM,KAAK,iBAAiB,GAAG;AAAA,MAC/C,IAAI,CAAC,gBAAgB,WAAW,IAAI,OAAO;AAAA,QAAG;AAAA,MAG9C,MAAM,YAAY,YAAY,IAAI,SAAS,MAAM,QAAQ;AAAA,QACvD;AAAA,QACA,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,MACD,MAAM,gBAAkC,OAAO,iBAAiB,WAAW;AAAA,QACzE,cAAc,EAAE,OAAO,WAAW,YAAY,MAAM,cAAc,KAAK;AAAA,MACzE,CAAC;AAAA,MAED,IAAI;AAAA,QACF,MAAM,KAAK,IAAI;AAAA,QACf,MAAM,MAAM,GAAG,aAAa;AAAA,QAC5B,IAAI,OAAO,OAAO,IAAI,SAAS,YAAY;AAAA,UACzC,IAAI,MAAM,CAAC,WAAU;AAAA,YACnB,IAAI;AAAA,cACF,oBAAoB,WAAW,MAAK;AAAA,cACpC,OAAO,UAAU;AAAA,cAEjB,eAAe,MAAM;AAAA,gBACnB,MAAM;AAAA,eACP;AAAA;AAAA,WAEJ;AAAA,QACH;AAAA,QACA,OAAO,QAAO;AAAA,QACd,oBAAoB,WAAW,MAAK;AAAA,gBACpC;AAAA,QACA,IAAI,IAAI;AAAA,UAAM,kBAAkB,OAAO,GAAG;AAAA;AAAA,MAG5C,MAAM,QAAQ,cAAc,aAAa;AAAA,MACzC,IAAI,OAAO,gCAAgC,OAAO,qBAAqB;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,sBAAsB,CAC1B,MAEA,UACA,SACA,aACiB;AAAA,IACjB,IAAI,eAAe,CAAC,UAAU;AAAA,MAC5B,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,QAAQ,SAAS,SAAS,MAAM,WAAW,4BAA4B,OAAO;AAAA,IAC9E,IAAI,OAAO,UAAU,IAAI,IAAI;AAAA,IAC7B,IAAI,CAAC,MAAM;AAAA,MACT,OAAO,CAAC;AAAA,MACR,UAAU,IAAI,MAAM,IAAI;AAAA,IAC1B;AAAA,IAEA,WAAW,YAAY,MAAM;AAAA,MAC3B,IAAI,SAAS,aAAa,YAAY,SAAS,YAAY,SAAS;AAAA,QAClE,OAAO,MACL,oBAAoB,MAAM,UAAU,OAA0C;AAAA,MAClF;AAAA,IACF;AAAA,IAEA,MAAM,WAAW;AAAA,IACjB,MAAM,WACJ,OAAO,aAAa,aACf,WACD,CAAC,UAEG,SAGA,YAAY,KAAK;AAAA,IAE3B,MAAM,SAA+B;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAAA,IAEA,IAAI,aAAa,WAAW;AAAA,MAC1B,KAAK,QAAQ,MAAM;AAAA,IACrB,EAAO;AAAA,MACL,KAAK,KAAK,MAAM;AAAA;AAAA,IAGlB,MAAM,eAAc,MAAM,qBAAqB,MAAM,MAAM;AAAA,IAE3D,IAAI,QAAQ;AAAA,MACV,MAAM,UAAU,MAAM,qBAAqB,MAAM,MAAM;AAAA,MACvD,OAAO,eAAe;AAAA,MACtB,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxD,IAAI,OAAO;AAAA,QAAS,QAAQ;AAAA,IAC9B;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,mBAA2D,CAC/D,MACA,UACA,YACG;AAAA,IACH,OAAO,oBAAoB,MAAM,UAAU,SAAS,QAAQ;AAAA;AAAA,EAG9D,MAAM,sBAAiE,CACrE,SACA,UACA,YACG;AAAA,IACH,IAAI;AAAA,MAAa,OAAO,MAAM;AAAA,IAE9B,MAAM,QAAQ,WAAW,CAAC;AAAA,IAC1B,WAAW,YAAY,mBAAmB;AAAA,MACxC,IAAI,SAAS,YAAY,WAAW,SAAS,OAAO,UAAU;AAAA,QAC5D,OAAO,MAAM,uBAAuB,SAAS,QAAQ;AAAA,MACvD;AAAA,IACF;AAAA,IACA,MAAM,SAA8B;AAAA,MAClC,IAAI;AAAA,MACJ;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAChB;AAAA,IACA,kBAAkB,IAAI,MAAM;AAAA,IAE5B,MAAM,eAAc,MAAM;AAAA,MACxB,kBAAkB,OAAO,MAAM;AAAA,MAC/B,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA;AAAA,IAGF,IAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,UAAU,MAAM,aAAY;AAAA,MAClC,OAAO,eAAe;AAAA,MACtB,MAAM,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MAC9D,IAAI,MAAM,OAAO;AAAA,QAAS,QAAQ;AAAA,IACpC;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,yBAAuE,CAC3E,SACA,aACG;AAAA,IACH,WAAW,UAAU,MAAM,KAAK,iBAAiB,GAAG;AAAA,MAClD,IAAI,OAAO,YAAY,WAAW,OAAO,OAAO,UAAU;AAAA,QACxD,kBAAkB,OAAO,MAAM;AAAA,QAC/B,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,UACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,kBAAkB,CACtB,WACA,OACA,OACA,sBACG;AAAA,IACH,MAAM,QAAQ,cAAc,KAAK;AAAA,IACjC,IAAI,CAAC,SAAS,MAAM;AAAA,MAAqB;AAAA,IAEzC,MAAM,gBAAgB;AAAA,IACtB,MAAM,SAAS;AAAA,IACf,MAAM,aAAa,MAAM;AAAA,IAEzB,WAAW,OAAO,mBAAmB;AAAA,MACnC,IAAI,IAAI;AAAA,QAAS;AAAA,MACjB,IAAI,UAAU,eAAe,CAAC,IAAI;AAAA,QAAS;AAAA,MAC3C,IAAI,UAAU,cAAc,IAAI;AAAA,QAAS;AAAA,MAEzC,IAAI,IAAI;AAAA,QAAM,qBAAqB,IAAI,MAAM,GAAG;AAAA,MAEhD,IAAI,IAAI;AAAA,QAAS,MAAM,wBAAwB;AAAA,MAC/C,IAAI;AAAA,QACF,MAAM,MAAM,IAAI,SAAS,KAAK,MAAM,eAAe,KAAK;AAAA,QACxD,IAAI,OAAO,OAAO,IAAI,SAAS,YAAY;AAAA,UACzC,IAAI,MAAM,CAAC,WAAU;AAAA,YACnB,IAAI;AAAA,cACF,oBAAoB,WAAW,MAAK;AAAA,cACpC,OAAO,UAAU;AAAA,cACjB,eAAe,MAAM;AAAA,gBACnB,MAAM;AAAA,eACP;AAAA;AAAA,WAEJ;AAAA,QACH;AAAA,QACA,OAAO,QAAO;AAAA,QACd,oBAAoB,WAAW,MAAK;AAAA,gBACpC;AAAA,QACA,IAAI,IAAI;AAAA,UAAS,MAAM,wBAAwB;AAAA;AAAA,MAGjD,IAAI,MAAM;AAAA,QAA8B;AAAA,IAC1C;AAAA;AAAA,EAGF,MAAM,gBAAqD,CAAC,eAAe;AAAA,IACzE,IAAI;AAAA,MAAa,OAAO;AAAA,IAExB,IAAI;AAAA,IACJ,IAAI;AAAA,IAEJ,IAAI,cAAc,OAAO,eAAe,UAAU;AAAA,MAChD,QAAQ,cAAc,UAAoC;AAAA,MAC1D,IAAI,OAAO;AAAA,QACT,QAAQ;AAAA,MACV,EAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QAQd,IAAI,OAAO,MAAM,SAAS,UAAU;AAAA,UAClC,MAAM,IAAI,UAAU,6BAA6B;AAAA,QACnD;AAAA,QACA,QAAQ,YAAY,MAAM,MAAM,MAAM,QAAsB;AAAA,UAC1D,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,UAChB,WAAW,MAAM;AAAA,QACnB,CAAC;AAAA,QACD,QAAQ,cAAc,KAAK;AAAA;AAAA,IAE/B,EAAO;AAAA,MACL,MAAM,IAAI,UAAU,uCAAuC;AAAA;AAAA,IAG7D,MAAM,gBAAgB,SAAS,cAAc,KAAK;AAAA,IAElD,IAAI,cAAc,gBAAgB,CAAC,cAAc,iBAAiB;AAAA,MAChE,MAAM,UACJ;AAAA,MACF,IAAI,OAAO,WAAW,iBAAiB,YAAY;AAAA,QACjD,MAAM,IAAI,WAAW,aAAa,SAAS,mBAAmB;AAAA,MAChE;AAAA,MACA,MAAM,MAAM,IAAI,MAAM,OAAO;AAAA,MAC7B,IAAI,OAAO;AAAA,MACX,MAAM;AAAA,IACR;AAAA,IAEA,cAAc,YAAY;AAAA,IAC1B,cAAc,eAAe;AAAA,IAC7B,cAAc,OAAO;AAAA,MACnB;AAAA,QACE,kBAAkB;AAAA,QAClB,8BAA8B;AAAA,QAC9B,sBAAsB;AAAA,QACtB,eAAe;AAAA,QACf,cAAc,CAAC;AAAA,QACf,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAGA,wBAAwB,cAAc,MAAM,KAAK;AAAA,IAEjD,MAAM,OAAO,UAAU,IAAI,cAAc,IAAI;AAAA,IAC7C,MAAM,WAAW,OAAO,KAAK,MAAM,IAAI,CAAC;AAAA,IACxC,gBAAgB,cAAc,MAAM,OAAO,aAAa,QAAQ;AAAA,IAChE,gBAAgB,cAAc,MAAM,OAAO,YAAY,QAAQ;AAAA,IAE/D,cAAc,aAAa,MAAM;AAAA,IACjC,cAAc,gBAAgB;AAAA,IAC9B,cAAc,OAAO,CAAC;AAAA,IACtB,cAAc,eAAe;AAAA,IAC7B,cAAc,sBAAsB;AAAA,IACpC,cAAc,+BAA+B;AAAA,IAE7C,OAAO,CAAC,cAAc;AAAA;AAAA,EAGxB,MAAM,sBAAiE,CACrE,MACA,UACA,YACG;AAAA,IACH,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,UAAU,uBAAuB,OAAO;AAAA,IAC9C,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAM;AAAA,IAEX,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,MAC9B,IAAI,OAAO,aAAa,YAAY,OAAO,YAAY,SAAS;AAAA,QAC9D,qBAAqB,MAAM,MAAM;AAAA,MACnC;AAAA,IACF;AAAA;AAAA,EAGF,MAAM,QAAQ,MAAM;AAAA,IAClB,YAAY,MAAM,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,MAC1D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,QAC9B,qBAAqB,MAAM,MAAM;AAAA,MACnC;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AAAA,IAGhB,WAAW,UAAU,mBAAmB;AAAA,MACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA,IACF;AAAA,IACA,kBAAkB,MAAM;AAAA;AAAA,EAO1B,MAAM,gBAAgB,CACpB,QACqD;AAAA,IACrD,IAAI,OAAO,QAAQ;AAAA,MAAY,OAAO;AAAA,IACtC,IACE,OACA,OAAO,QAAQ,YACf,OAAQ,IAAkC,gBAAgB;AAAA,MAE1D,OAAO;AAAA,IACT,OAAO;AAAA;AAAA,EAIT,MAAM,KAAgC,CAAC,MAAW,sBAA2B;AAAA,IAE3E,IAAI,cAAc,iBAAiB,GAAG;AAAA,MACpC,OAAO,iBAAiB,MAAM,iBAAiB;AAAA,IACjD;AAAA,IAGA,MAAM,UAAU;AAAA,IAChB,OAAO,IAAI,WACT,CAAC,aAAuD;AAAA,MACtD,IAAI;AAAA,MACJ,IAAI,OAAO,YAAY,WAAW;AAAA,QAChC,QAAO,EAAE,SAAS,QAAQ;AAAA,MAC5B,EAAO;AAAA,QACL,QAAO,WAAW,CAAC;AAAA;AAAA,MAGrB,MAAM,UAAU,MAAK;AAAA,MACrB,MAAM,OAAO,MAAK;AAAA,MAElB,MAAM,eAAe,CAAC,MAA8B;AAAA,QAClD,IAAI,UAAU;AAAA,QACd,IAAI;AAAA,UACF,IAAI,SAAS;AAAA,YACX,QAAQ,CAAC;AAAA,UACX;AAAA,UACA,SAAS,KAAK,CAAC;AAAA,UACf,UAAU;AAAA,kBACV;AAAA,UACA,IAAI,QAAQ,SAAS;AAAA,YACnB,SAAS,SAAS;AAAA,UACpB;AAAA;AAAA;AAAA,MAIJ,MAAM,eAAe,CAAC,MAA8B;AAAA,QAClD,SAAS,MAAM,EAAE,MAAM;AAAA;AAAA,MAGzB,MAAM,mBAAmB,iBACvB,MACA,cACA,KACF;AAAA,MAEA,IAAI;AAAA,MACJ,IAAI,MAAK,cAAc;AAAA,QACrB,mBAAmB,iBACjB,SACA,cACA,KACF;AAAA,MACF;AAAA,MAEA,OAAO,MAAM;AAAA,QACX,iBAAiB;AAAA,QACjB,IAAI,kBAAkB;AAAA,UACpB,iBAAiB;AAAA,QACnB;AAAA;AAAA,KAGN;AAAA;AAAA,EAIF,MAAM,aAAyC,CAAC,MAAM,UAAU,YAAY;AAAA,IAC1E,IAAI,OAAO,YAAY,WAAW;AAAA,MAChC,OAAO,iBAAiB,MAAM,UAAU,EAAE,SAAS,SAAS,MAAM,KAAK,CAAC;AAAA,IAC1E;AAAA,IACA,OAAO,iBAAiB,MAAM,UAAU,KAAM,WAAW,CAAC,GAAI,MAAM,KAAK,CAAC;AAAA;AAAA,EAG5E,MAAM,qBAA+D,CAAC,SAAS;AAAA,IAC7E,IAAI,SAAS,WAAW;AAAA,MACtB,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,MAC/B,IAAI,MAAM;AAAA,QACR,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,UAC9B,qBAAqB,MAAM,MAAM;AAAA,QACnC;AAAA,QACA,UAAU,OAAO,IAAI;AAAA,MACvB;AAAA,IACF,EAAO;AAAA,MAEL,YAAY,WAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,QAC/D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,UAC9B,qBAAqB,WAAW,MAAM;AAAA,QACxC;AAAA,MACF;AAAA,MACA,UAAU,MAAM;AAAA,MAGhB,WAAW,UAAU,mBAAmB;AAAA,QACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,UACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,QAChE;AAAA,MACF;AAAA,MACA,kBAAkB,MAAM;AAAA;AAAA;AAAA,EAS5B,MAAM,OAAmC,CAAC,SAAQ,UAAU;AAAA,IAC1D,IAAI,aAAa;AAAA,MACf,OAAO,MAAM;AAAA,IACf;AAAA,IAEA,MAAM,eAAc,oBAAoB,KAAK,CAAC,UAAU;AAAA,MACtD,IAAI,OAAO;AAAA,QACT,MAAM,SAAS,MACb,YAAY,MAAM,cAAc,MAAM,QAAQ;AAAA,UAC5C;AAAA,UACA,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,QAClB,CAAC,CACH;AAAA,QACA,IAAI,WAAW,MAAM;AAAA,UAEnB,QAAO,cACL,MACF;AAAA,QACF;AAAA,MACF,EAAO;AAAA,QAEL,QAAO,cAAc;AAAA,UACnB,MAAM,MAAM;AAAA,UACZ,QAAQ,MAAM;AAAA,QAChB,CAA0D;AAAA;AAAA,KAE7D;AAAA,IAGD,MAAM,kBAAkB,MAAM;AAAA,MAC5B,aAAY;AAAA;AAAA,IAEd,oBAAoB,IAAI,eAAe;AAAA,IAEvC,OAAO,MAAM;AAAA,MACX,oBAAoB,OAAO,eAAe;AAAA,MAC1C,aAAY;AAAA;AAAA;AAAA,EAIhB,MAAM,YAAW,MAAM;AAAA,IACrB,IAAI;AAAA,MAAa;AAAA,IACjB,cAAc;AAAA,IAGd,WAAW,MAAM,qBAAqB;AAAA,MACpC,IAAI;AAAA,QACF,GAAG;AAAA,QACH,OAAO,KAAK;AAAA,QAGZ,IAAI;AAAA,UACF,oBAAoB,YAAY,GAAG;AAAA,UACnC,MAAM;AAAA;AAAA,IAIZ;AAAA,IACA,oBAAoB,MAAM;AAAA,IAG1B,YAAY,WAAW,SAAS,MAAM,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,MAC/D,WAAW,UAAU,CAAC,GAAG,IAAI,GAAG;AAAA,QAC9B,qBAAqB,WAAW,MAAM;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU,MAAM;AAAA,IAGhB,WAAW,UAAU,mBAAmB;AAAA,MACtC,IAAI,OAAO,UAAU,OAAO,cAAc;AAAA,QACxC,OAAO,OAAO,oBAAoB,SAAS,OAAO,YAAY;AAAA,MAChE;AAAA,IACF;AAAA,IACA,kBAAkB,MAAM;AAAA;AAAA,EAI1B,MAAM,YAA6C,CACjD,MACA,gBACA,QACA,oBACG;AAAA,IACH,IAAI;AAAA,IAEJ,IAAI,OAAO,mBAAmB,YAAY;AAAA,MACxC,WAAW;AAAA,QACT,MAAM;AAAA,QACN;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF,EAAO;AAAA,MACL,WAAY,kBAAkB,CAAC;AAAA;AAAA,IAGjC,IAAI,SAAS;AAAA,IAEb,IAAI,aAAa;AAAA,MAEf,IAAI,SAAS,UAAU;AAAA,QACrB,IAAI;AAAA,UACF,SAAS,SAAS;AAAA,UAClB,MAAM;AAAA,MAGV;AAAA,MACA,OAAO;AAAA,QACL,aAAa,MAAM;AAAA,UACjB,SAAS;AAAA;AAAA,YAEP,MAAM,GAAG;AAAA,UACX,OAAO,UAAU;AAAA;AAAA,MAErB;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,iBAAiB,MAAM,CAAC,UAAU;AAAA,MAC9C,IAAI;AAAA,QAAQ;AAAA,MACZ,IAAI,SAAS,MAAM;AAAA,QACjB,IAAI;AAAA,UACF,SAAS,KAAK,KAA2C;AAAA,UACzD,OAAO,KAAK;AAAA,UACZ,IAAI,SAAS,OAAO;AAAA,YAClB,IAAI;AAAA,cACF,SAAS,MAAM,GAAG;AAAA,cAClB,MAAM;AAAA,UAGV;AAAA;AAAA,MAEJ;AAAA,KACD;AAAA,IAGD,MAAM,aAAa,MAAM;AAAA,MACvB,IAAI;AAAA,QAAQ;AAAA,MACZ,SAAS;AAAA,MACT,IAAI,SAAS,UAAU;AAAA,QACrB,IAAI;AAAA,UACF,SAAS,SAAS;AAAA,UAClB,MAAM;AAAA,MAGV;AAAA;AAAA,IAEF,oBAAoB,IAAI,UAAU;AAAA,IAElC,OAAO;AAAA,MACL,aAAa,MAAM;AAAA,QACjB,IAAI;AAAA,UAAQ;AAAA,QACZ,SAAS;AAAA,QACT,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA;AAAA,UAEJ,MAAM,GAAG;AAAA,QACX,OAAO,UAAU;AAAA;AAAA,IAErB;AAAA;AAAA,EAGF,MAAM,eAAmD,MAAM;AAAA,IAC7D,OAAO,IAAI,WACT,CAAC,aAA8D;AAAA,MAC7D,IAAI,aAAa;AAAA,QACf,SAAS,SAAS;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,MAAM,mBAAmB,CAAC,UAA4B;AAAA,QAEpD,SAAS,KACP,YAAY,MAAM,cAAc,MAAM,QAAQ;AAAA,UAC5C;AAAA,UACA,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,QAClB,CAAC,CACH;AAAA;AAAA,MAGF,MAAM,eAAc,oBAAoB,KAAK,gBAAgB;AAAA,MAE7D,MAAM,aAAa,MAAM;AAAA,QACvB,SAAS,SAAS;AAAA;AAAA,MAEpB,oBAAoB,IAAI,UAAU;AAAA,MAElC,OAAO,MAAM;AAAA,QACX,aAAY;AAAA,QACZ,oBAAoB,OAAO,UAAU;AAAA;AAAA,KAG3C;AAAA;AAAA,EAIF,SAAS,MAAkC,CACzC,MACA,SAC+C;AAAA,IAE/C,IAAI,aAAa;AAAA,MACf,OAAO;AAAA,SACJ,OAAO,cAAc,GAAG;AAAA,UACvB,OAAO;AAAA;AAAA,QAET,IAAI,GAAoD;AAAA,UACtD,OAAO,QAAQ,QAAQ;AAAA,YACrB,OAAO;AAAA,YACP,MAAM;AAAA,UACR,CAAC;AAAA;AAAA,QAEH,MAAM,GAAoD;AAAA,UACxD,OAAO,QAAQ,QAAQ;AAAA,YACrB,OAAO;AAAA,YACP,MAAM;AAAA,UACR,CAAC;AAAA;AAAA,MAEL;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,SAAS;AAAA,IACxB,MAAM,aAAa,SAAS,cAAc;AAAA,IAC1C,MAAM,mBAAmB,SAAS,oBAAoB;AAAA,IAEtD,MAAM,SAAwC,CAAC;AAAA,IAC/C,IAAI,UAA6E;AAAA,IACjF,IAAI,OAAO;AAAA,IACX,IAAI,cAAc;AAAA,IAClB,IAAI,UAA+B;AAAA,IACnC,MAAM,uBAAuB,MAAM;AAAA,MACjC,IAAI,UAAU,SAAS;AAAA,QACrB,OAAO,oBAAoB,SAAS,OAAO;AAAA,MAC7C;AAAA;AAAA,IAGF,MAAM,QAAQ,iBAAiB,MAAM,CAAC,UAAU;AAAA,MAC9C,IAAI;AAAA,QAAM;AAAA,MACV,MAAM,aAAa;AAAA,MAEnB,IAAI,SAAS;AAAA,QAEX,MAAM,IAAI;AAAA,QACV,UAAU;AAAA,QACV,EAAE,EAAE,OAAO,YAAY,MAAM,MAAM,CAAC;AAAA,MACtC,EAAO;AAAA,QAEL,IAAI,OAAO,UAAU,cAAc,eAAe,UAAU;AAAA,UAC1D,QAAQ;AAAA,iBACD;AAAA,cACH,OAAO,MAAM;AAAA,cACb,OAAO,KAAK,UAAU;AAAA,cACtB;AAAA,iBACG;AAAA,cAEH;AAAA,iBACG;AAAA,cACH,MAAM;AAAA,cACN,oBAAoB,OAAO,UAAU;AAAA,cACrC,OAAO;AAAA,cACP,cAAc;AAAA,cACd,qBAAqB;AAAA,cACrB;AAAA;AAAA,QAEN,EAAO;AAAA,UACL,OAAO,KAAK,UAAU;AAAA;AAAA;AAAA,KAG3B;AAAA,IAGD,MAAM,aAAa,MAAM;AAAA,MACvB,OAAO;AAAA,MACP,qBAAqB;AAAA,MACrB,IAAI,SAAS;AAAA,QACX,MAAM,IAAI;AAAA,QACV,UAAU;AAAA,QACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,MACzE;AAAA;AAAA,IAEF,oBAAoB,IAAI,UAAU;AAAA,IAGlC,IAAI,QAAQ;AAAA,MACV,UAAU,MAAM;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA,QACN,IAAI,SAAS;AAAA,UACX,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,QACzE;AAAA;AAAA,MAEF,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxD,IAAI,OAAO;AAAA,QAAS,QAAQ;AAAA,IAC9B;AAAA,IAEA,MAAM,WAA0D;AAAA,OAC7D,OAAO,cAAc,GAAG;AAAA,QACvB,OAAO;AAAA;AAAA,WAEH,KAAI,GAAoD;AAAA,QAE5D,IAAI,OAAO,SAAS,GAAG;AAAA,UACrB,OAAO,EAAE,OAAO,OAAO,MAAM,GAAI,MAAM,MAAM;AAAA,QAC/C;AAAA,QAGA,IAAI,YAAY,MAAM;AAAA,UACpB,OAAO,QAAQ,OACb,IAAI,MACF,qEACF,CACF;AAAA,QACF;AAAA,QAGA,OAAO,IAAI,QACT,CAAC,UAAU,YAAY;AAAA,UACrB,IAAI,aAAa;AAAA,YACf,cAAc;AAAA,YACd,QAAQ,IAAI,oBAAoB,MAAM,UAAU,CAAC;AAAA,YACjD;AAAA,UACF;AAAA,UACA,IAAI,MAAM;AAAA,YACR,SAAS;AAAA,cACP,OAAO;AAAA,cACP,MAAM;AAAA,YACR,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UACA,UAAU;AAAA,SAEd;AAAA;AAAA,MAEF,MAAM,GAAoD;AAAA,QAExD,IAAI,SAAS;AAAA,UACX,MAAM,IAAI;AAAA,UACV,UAAU;AAAA,UACV,EAAE,EAAE,OAAO,WAAgD,MAAM,KAAK,CAAC;AAAA,QACzE;AAAA,QAEA,OAAO;AAAA,QACP,oBAAoB,OAAO,UAAU;AAAA,QACrC,MAAM;AAAA,QAGN,qBAAqB;AAAA,QAErB,OAAO,QAAQ,QAAQ;AAAA,UACrB,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AAAA;AAAA,IAEL;AAAA,IAEA,OAAO;AAAA;AAAA,EAKT,MAAM,OAAmC,CAAC,MAAM,WAAW;AAAA,IACzD,IAAI;AAAA,MAAa,OAAO;AAAA,IAExB,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,MAAM,eAAe,SAAS,aAAa,KAAK,SAAS;AAAA,IACzD,IAAI,cAAc;AAAA,IAClB,IAAI,kBAAkB,OAAO,GAAG;AAAA,MAC9B,WAAW,OAAO,mBAAmB;AAAA,QACnC,IAAI,gBAAgB,MAAM,IAAI,OAAO,GAAG;AAAA,UACtC,cAAc;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,cAAc,EAAE,MAAM,OAAO,CAAuD;AAAA,IACpF,OAAO,gBAAgB;AAAA;AAAA,EAGzB,MAAM,MAAiC,CAAC,MAAM,aAAa;AAAA,IACzD,oBAAoB,MAAM,QAAQ;AAAA;AAAA,EAGpC,MAAM,cAAiD,CAAC,MAAM,aAAa;AAAA,IACzE,OAAO,iBAAiB,MAAM,QAAQ;AAAA;AAAA,EAGxC,MAAM,iBAAuD,CAAC,MAAM,aAAa;AAAA,IAC/E,oBAAoB,MAAM,QAAQ;AAAA;AAAA,EAGpC,MAAM,kBAAyD,CAAC,MAAM,aAAa;AAAA,IACjF,OAAO,oBAAoB,MAAM,UAAU,WAAW,SAAS;AAAA;AAAA,EAGjE,MAAM,sBAAiE,CACrE,MACA,aACG;AAAA,IACH,OAAO,oBAAoB,MAAM,UAAU,EAAE,MAAM,KAAK,GAAG,SAAS;AAAA;AAAA,EAGtE,MAAM,eAAgD,CAAC,SAAS;AAAA,IAC9D,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAM,OAAO,CAAC;AAAA,IACnB,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA;AAAA,EAG7D,MAAM,qBAAyD,CAAC,SAAS;AAAA,IACvE,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAM,OAAO,CAAC;AAAA,IAEnB,OAAO,KACJ,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EACxB,IAAI,CAAC,MAAM;AAAA,MACV,IAAI,EAAE,MAAM;AAAA,QACV,MAAM,UAAW,IAAI,SAAiB,EAAE,SAAiB,GAAG,IAAI;AAAA,QAChE,QAAQ,WAAW,EAAE;AAAA,QACrB,OAAO;AAAA,MACT;AAAA,MACA,OAAO,EAAE;AAAA,KACV;AAAA;AAAA,EAIL,MAAM,gBAAqD,CAAC,SAAS;AAAA,IACnE,MAAM,OAAO,UAAU,IAAI,IAAI;AAAA,IAC/B,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAClB,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE;AAAA;AAAA,EAGxC,MAAM,mBAAqD,MAAM;AAAA,IAC/D,MAAM,QAAkB,CAAC;AAAA,IACzB,YAAY,MAAM,SAAS,WAAW;AAAA,MACpC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG;AAAA,QAChC,MAAM,KAAK,IAAI;AAAA,MACjB;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,MAAM,SAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACI,SAAS,GAAG;AAAA,MACd,OAAO;AAAA;AAAA,IAET;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,cAAc;AAAA,IACd;AAAA,IACA,YAAY;AAAA,EACd;AAAA,EAIE,OAGA,oBAAoB,MAAM;AAAA,IAC1B,OAAO,aAAa;AAAA;AAAA,EAGtB,OAAO;AAAA;;;ACr4CF,SAAS,oBAAuD,CACrE,QACA,QACA,SACY;AAAA,EACZ,MAAM,eAAc,OAAO,oBACzB,KACA,CAAC,UAAU;AAAA,IAET,MAAM,kBAAmB,WACtB;AAAA,IACH,MAAM,WACJ,OAAO,oBAAoB,aACvB,IAAI,gBAAgB,MAAM,cAAc;AAAA,MACtC,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB,CAAC,IACD;AAAA,MACE,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB;AAAA,IACN,OAAO,cAAc,QAAQ;AAAA,KAE/B,OACF;AAAA,EAEA,OAAO;AAAA;AA2EF,SAAS,eAAkD,CAChE,WACA,YACA,SAC8C;AAAA,EAC9C,MAAM,UAAU,kBAAqB;AAAA,IACnC,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AAAA,EAED,MAAM,WAAW,IAAI;AAAA,EAErB,WAAW,QAAQ,YAAY;AAAA,IAC7B,MAAM,UAAU,CAAC,UAAwB;AAAA,MACvC,QAAQ,cAAc;AAAA,QACpB;AAAA,QACA,QAAS,MAAM,UAAU;AAAA,QACzB,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB,CAAkD;AAAA;AAAA,IAEpD,SAAS,IAAI,MAAM,OAAO;AAAA,IAC1B,UAAU,iBAAiB,MAAM,OAAO;AAAA,EAC1C;AAAA,EAGA,IAAI,UAA+B;AAAA,EAGnC,IAAI,SAAS,QAAQ;AAAA,IACnB,UAAU,MAAM;AAAA,MACd,YAAY,MAAM,YAAY,UAAU;AAAA,QACtC,UAAU,oBAAoB,MAAM,OAAO;AAAA,MAC7C;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,SAAS;AAAA;AAAA,IAEnB,QAAQ,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IAChE,IAAI,QAAQ,OAAO;AAAA,MAAS,QAAQ;AAAA,EACtC;AAAA,EAEA,OAAO;AAAA,IACL,kBAAkB,QAAQ;AAAA,IAC1B,qBAAqB,QAAQ;AAAA,IAC7B,eAAe,QAAQ;AAAA,IACvB,OAAO,QAAQ;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,oBAAoB,QAAQ;AAAA,IAC5B,MAAM,QAAQ;AAAA,IACd,qBAAqB,QAAQ;AAAA,IAC7B,wBAAwB,QAAQ;AAAA,IAChC,IAAI,QAAQ;AAAA,IACZ,WAAW,QAAQ;AAAA,IACnB,cAAc,QAAQ;AAAA,IACtB,UAAU,QAAQ;AAAA,QACd,SAAS,GAAG;AAAA,MACd,OAAO,QAAQ;AAAA;AAAA,IAEjB,QAAQ,QAAQ;AAAA,IAChB,MAAM,QAAQ;AAAA,IACd,KAAK,QAAQ;AAAA,IACb,aAAa,QAAQ;AAAA,IACrB,gBAAgB,QAAQ;AAAA,IACxB,iBAAiB,QAAQ;AAAA,IACzB,qBAAqB,QAAQ;AAAA,IAC7B,WAAW,QAAQ;AAAA,IACnB,cAAc,QAAQ;AAAA,IACtB,eAAe,QAAQ;AAAA,IACvB,YAAY,QAAQ;AAAA,IACpB,SAAS,MAAM;AAAA,MAEb,IAAI,SAAS,UAAU,SAAS;AAAA,QAC9B,QAAQ,OAAO,oBAAoB,SAAS,OAAO;AAAA,MACrD;AAAA,MACA,YAAY,MAAM,YAAY,UAAU;AAAA,QACtC,UAAU,oBAAoB,MAAM,OAAO;AAAA,MAC7C;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,SAAS;AAAA;AAAA,EAErB;AAAA;AA4DK,SAAS,IAAuC,CACrD,QACA,QACA,SACY;AAAA,EACZ,OAAO,OAAO,oBACZ,KACA,CAAC,UAAU;AAAA,IACT,OAAO,cAAc;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,IAChB,CAA0D;AAAA,KAE5D,OACF;AAAA;",
13
+ "debugId": "2E89ADED7F0D86C164756E2164756E21",
14
14
  "names": []
15
15
  }
package/dist/types.d.ts CHANGED
@@ -201,9 +201,22 @@ export interface EventTargetLike<E extends Record<string, any>> {
201
201
  removeEventListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: EventListenerOptionsLike | boolean) => void;
202
202
  dispatchEvent: <K extends keyof E & string>(event: DispatchEventInput<E[K], K> | DOMEventLike) => boolean;
203
203
  clear: () => void;
204
- on: <K extends keyof E & string>(type: K, options?: OnOptions | boolean) => ObservableLike<EmissionEvent<E[K], K>>;
204
+ on: {
205
+ <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>): () => void;
206
+ <K extends keyof E & string>(type: K, options?: OnOptions | boolean): ObservableLike<EmissionEvent<E[K], K>>;
207
+ };
205
208
  once: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>> | null, options?: Omit<AddEventListenerOptionsLike, 'once'> | boolean) => () => void;
206
209
  removeAllListeners: <K extends keyof E & string>(type?: K) => void;
210
+ emit: <K extends keyof E & string>(type: K, detail: E[K]) => boolean;
211
+ off: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => void;
212
+ addListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
213
+ removeListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => void;
214
+ prependListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
215
+ prependOnceListener: <K extends keyof E & string>(type: K, listener: EventListenerLike<EmissionEvent<E[K], K>>) => () => void;
216
+ listeners: <K extends keyof E & string>(type: K) => Array<EventListenerLike<EmissionEvent<E[K], K>>>;
217
+ rawListeners: <K extends keyof E & string>(type: K) => Array<EventListenerLike<EmissionEvent<E[K], K>>>;
218
+ listenerCount: <K extends keyof E & string>(type: K) => number;
219
+ eventNames: () => Array<string>;
207
220
  /**
208
221
  * Pipe events from this emitter to another target.
209
222
  * Forwards all events. If mapFn returns null, the event is skipped.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,SAAS,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM;IACjE,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,mEAAmE;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,WAAW,EAAE,OAAO,CAAC;IACrB,wDAAwD;IACxD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,wFAAwF;IACxF,YAAY,IAAI,OAAO,EAAE,CAAC;IAC1B,mDAAmD;IACnD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvE,sEAAsE;IACtE,cAAc,IAAI,IAAI,CAAC;IACvB,2EAA2E;IAC3E,wBAAwB,IAAI,IAAI,CAAC;IACjC,0EAA0E;IAC1E,eAAe,IAAI,IAAI,CAAC;IAGxB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,aAAa,CACrF,CAAC,CAAC,MAAM,CAAC,CAAC,EACV,GAAG,GAAG,GAAG,MAAM,IAAI,CACpB;IACC,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,MAAM,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACnF,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACvF;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,GAAG;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAC3B,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACpC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI;IACrE,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,SAAS,CACP,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,EACnD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,EAC9B,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,YAAY,CAAC;CAEjB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,aAAa,GAAG,OAAO,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9E,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,CAAC;IACjF,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAChE,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,2BAA2B;IAC5D,8EAA8E;IAC9E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CACnD;AAED;;;GAGG;AAEH,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC5D,gBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC3C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1D,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,KAC5C,MAAM,IAAI,CAAC;IAChB,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC9C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1D,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,KACzC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACxC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,KAC9C,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,IAAI,CAAC;IAGlB,EAAE,EAAE;QACF,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACzB,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAClD,MAAM,IAAI,CAAC;QACd,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACzB,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAC5B,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3C,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC/B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAC1D,OAAO,CAAC,EAAE,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,GAAG,OAAO,KAC1D,MAAM,IAAI,CAAC;IAChB,kBAAkB,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAGnE,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IACrE,GAAG,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC9B,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAChD,IAAI,CAAC;IACV,WAAW,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACtC,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAChD,MAAM,IAAI,CAAC;IAChB,cAAc,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACzC,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAChD,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC1C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAChD,MAAM,IAAI,CAAC;IAChB,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC9C,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAChD,MAAM,IAAI,CAAC;IAChB,SAAS,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACpC,IAAI,EAAE,CAAC,KACJ,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,YAAY,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACvC,IAAI,EAAE,CAAC,KACJ,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,aAAa,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/D,UAAU,EAAE,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC;;;OAGG;IAEH,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,EAC1B,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACjC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAC1B,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,KAClE,MAAM,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAG5B,mBAAmB,EAAE,CACnB,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,IAAI,EAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC3D,OAAO,CAAC,EAAE,2BAA2B,KAClC,MAAM,IAAI,CAAC;IAChB,sBAAsB,EAAE,CACtB,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,IAAI,EAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KACxD,IAAI,CAAC;IAGV,SAAS,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACpC,IAAI,EAAE,CAAC,EACP,cAAc,CAAC,EACX,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAChC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAC7C,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,EAC9B,QAAQ,CAAC,EAAE,MAAM,IAAI,KAClB,YAAY,CAAC;IAClB,YAAY,EAAE,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAG9D,MAAM,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EACjC,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,oBAAoB,KAC3B,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACpD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "event-emission",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Lightweight typed event emitter with DOM EventTarget and TC39 Observable compatibility",
5
5
  "keywords": [
6
6
  "event",