{"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/ponyfill.ts","../src/polyfill.ts"],"sourcesContent":["// Adapted from https://github.com/okikio/bundle/blob/main/src/ts/util/WebWorker.ts, which is licensed under the MIT license.\n// If the above file is removed or modified, you can access the original state in the following GitHub Gist: https://gist.github.com/okikio/6809cfc0cdbf1df4c0573addaaf7e259\n\nexport * from \"./constants.ts\";\nexport * from \"./polyfill.ts\";\nexport * from \"./ponyfill.ts\";\n\nexport { default } from \"./polyfill.ts\";","/**\n * indicates if SharedWorker is supported, in the global scope\n */\nexport const SharedWorkerSupported = \"SharedWorker\" in globalThis;","// Adapted from https://github.com/okikio/bundle/blob/main/src/ts/util/WebWorker.ts, which is licensed under the MIT license.\n// If the above file is removed or modified, you can access the original state in the following GitHub Gist: https://gist.github.com/okikio/6809cfc0cdbf1df4c0573addaaf7e259\n\nimport { SharedWorkerSupported } from \"./constants.ts\";\n\n/**\n * A polyfill class for `SharedWorker`, it accepts a URL/string as well as any other options the spec. allows for `SharedWorker`. It supports all the same methods and properties as the original, except it adds compatibility methods and properties for older browsers that don't support `SharedWorker`, so, it can switch to normal `Workers` instead. \n */\nexport class SharedWorkerPonyfill implements SharedWorker, EventTarget, AbstractWorker {\n  /**\n   * The actual worker that is used, depending on browser support it can be either a `SharedWorker` or a normal `Worker`.\n   */\n  public ActualWorker: SharedWorker | Worker;\n  constructor(worker: SharedWorker | Worker) {\n    this.ActualWorker = worker;\n  }\n\n  /**\n   * An EventListener called when MessageEvent of type message is fired on the port—that is, when the port receives a message.\n   */\n  public get onmessage() {\n    if (SharedWorkerSupported) {\n      return (this.ActualWorker as SharedWorker)?.port.onmessage;\n    } else {\n      return (this.ActualWorker as Worker).onmessage as unknown as MessagePort[\"onmessage\"];\n    }\n  }\n\n  public set onmessage(value: MessagePort[\"onmessage\"] | Worker[\"onmessage\"]) {\n    if (SharedWorkerSupported) {\n      (this.ActualWorker as SharedWorker).port.onmessage = value as MessagePort[\"onmessage\"];\n    } else {\n      (this.ActualWorker as Worker).onmessage = value as Worker[\"onmessage\"];\n    }\n  }\n\n  /**\n   * An EventListener called when a MessageEvent of type MessageError is fired—that is, when it receives a message that cannot be deserialized.\n   */\n  public get onmessageerror() {\n    if (SharedWorkerSupported) {\n      return (this.ActualWorker as SharedWorker)?.port.onmessageerror;\n    } else {\n      return (this.ActualWorker as Worker).onmessageerror;\n    }\n  }\n\n  public set onmessageerror(value: MessagePort[\"onmessageerror\"] | Worker[\"onmessageerror\"]) {\n    if (SharedWorkerSupported) {\n      (this.ActualWorker as SharedWorker).port.onmessageerror = value as MessagePort[\"onmessageerror\"];\n    } else {\n      (this.ActualWorker as Worker).onmessageerror = value as Worker[\"onmessageerror\"];\n    }\n  }\n\n  /**\n   * Starts the sending of messages queued on the port (only needed when using EventTarget.addEventListener; it is implied when using MessagePort.onmessage.)\n   */\n  public start() {\n    if (SharedWorkerSupported) {\n      return (this.ActualWorker as SharedWorker)?.port.start();\n    }\n  }\n\n  /**\n   * Clones message and transmits it to worker's global environment. transfer can be passed as a list of objects that are to be transferred rather than cloned.\n   */\n  public postMessage(message: any, transfer?: Transferable[] | StructuredSerializeOptions) {\n    if (SharedWorkerSupported) {\n      return (this.ActualWorker as SharedWorker)?.port.postMessage(message, transfer as Transferable[]);\n    } else {\n      return (this.ActualWorker as Worker).postMessage(message, transfer as Transferable[]);\n    }\n  }\n\n  /**\n   * Immediately terminates the worker. This does not let worker finish its operations; it is halted at once. ServiceWorker instances do not support this method.\n   */\n  public terminate() {\n    if (SharedWorkerSupported) {\n      return (this.ActualWorker as SharedWorker)?.port.close();\n    } else {\n      return (this.ActualWorker as Worker).terminate();\n    }\n  }\n\n  /**\n   * Disconnects the port, so it is no longer active.\n   */\n  public close() {\n    return this.terminate();\n  }\n\n  /**\n   * Returns a MessagePort object used to communicate with and control the shared worker.\n   */\n  public get port() {\n    return (SharedWorkerSupported ? (this.ActualWorker as SharedWorker).port : this.ActualWorker) as MessagePort;\n  }\n\n  /**\n   * Is an EventListener that is called whenever an ErrorEvent of type error event occurs.\n   */\n  public get onerror() { return this.ActualWorker.onerror; }\n  public set onerror(value: ((this: AbstractWorker, ev: ErrorEvent) => any) | null) {\n    this.ActualWorker.onerror = value;\n  }\n\n  /**\n   * Registers an event handler of a specific event type on the EventTarget\n   */\n  public addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n  public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;\n  public addEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n  public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void {\n    if (SharedWorkerSupported && type !== \"error\") {\n      return (this.ActualWorker as SharedWorker)?.port.addEventListener(type, listener, options)\n    } else {\n      return this.ActualWorker.addEventListener(type, listener, options);\n    }\n  }\n\n  /**\n   * Removes an event listener from the EventTarget.\n   */\n  public removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n  public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;\n  public removeEventListener<K extends keyof MessagePortEventMap>(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | EventListenerOptions): void;\n  public removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void {\n    if (SharedWorkerSupported && type !== \"error\") {\n      return (this.ActualWorker as SharedWorker)?.port.removeEventListener(type, listener, options)\n    } else {\n      return this.ActualWorker.removeEventListener(type, listener, options);\n    }\n  }\n\n  /**\n   * Dispatches an event to this EventTarget.\n   */\n  public dispatchEvent(event: Event) {\n    return this.ActualWorker.dispatchEvent(event);\n  }\n}\n\nexport default SharedWorkerPonyfill;","// Adapted from https://github.com/okikio/bundle/blob/main/src/ts/util/WebWorker.ts, which is licensed under the MIT license.\n// If the above file is removed or modified, you can access the original state in the following GitHub Gist: https://gist.github.com/okikio/6809cfc0cdbf1df4c0573addaaf7e259\n\nimport { SharedWorkerSupported } from \"./constants.ts\";\nimport { SharedWorkerPonyfill } from \"./ponyfill.ts\";\n\n/**\n * A polyfill class for `SharedWorker`, it accepts a URL/string as well as any other options the spec. allows for `SharedWorker`. It supports all the same methods and properties as the original, except it adds compatibility methods and properties for older browsers that don't support `SharedWorker`, so, it can switch to normal `Workers` instead. \n */\nexport class SharedWorkerPolyfill extends SharedWorkerPonyfill {\n  constructor(url: string | URL, opts?: WorkerOptions) {\n    let worker: SharedWorker | Worker;\n    if (SharedWorkerSupported) {\n      worker = new SharedWorker(url, opts);\n    } else {\n      worker = new Worker(url, opts);\n    }\n\n    super(worker);\n  }\n}\n\nexport default SharedWorkerPolyfill;"],"mappings":"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","names":[]}