{"version":3,"sources":["../../../src/worker/expose.ts","../../../src/serializers.ts","../../../src/common.ts","../../../src/symbols.ts","../../../src/transferable.ts","../../../src/worker/worker.browser.ts"],"sourcesContent":["/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport isSomeObservable from 'is-observable-2-1-0'\nimport type { Observable, Subscription } from 'observable-fns'\n\nimport { deserialize, serialize } from '../common.ts'\nimport type { TransferDescriptor } from '../transferable.ts'\nimport { isTransferDescriptor } from '../transferable.ts'\nimport type {\n  MasterJobCancelMessage,\n  MasterJobRunMessage,\n  SerializedError,\n  WorkerInitMessage,\n  WorkerJobErrorMessage,\n  WorkerJobResultMessage,\n  WorkerJobStartMessage,\n  WorkerUncaughtErrorMessage,\n} from '../types/messages.ts'\nimport {\n  MasterMessageType,\n  WorkerMessageType,\n} from '../types/messages.ts'\nimport type {\n  AbstractedWorkerAPI, WorkerFunction, WorkerModule,\n} from '../types/worker.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\nconst isErrorEvent = (value: Event): value is ErrorEvent => value && (value as ErrorEvent).error\n\nexport function createExpose(implementation: AbstractedWorkerAPI, self: WorkerGlobalScope) {\n  let exposeCalled = false\n\n  const activeSubscriptions = new Map<number, Subscription<any>>()\n\n  const isMasterJobCancelMessage = (thing: any): thing is MasterJobCancelMessage => thing && thing.type === MasterMessageType.cancel\n  const isMasterJobRunMessage = (thing: any): thing is MasterJobRunMessage => thing && thing.type === MasterMessageType.run\n\n  /**\n * There are issues with `is-observable` not recognizing zen-observable's instances.\n * We are using `observable-fns`, but it's based on zen-observable, too.\n */\n  const isObservable = (thing: any): thing is Observable<any> => isSomeObservable(thing) || isZenObservable(thing)\n\n  function isZenObservable(thing: any): thing is Observable<any> {\n    return thing && typeof thing === 'object' && typeof thing.subscribe === 'function'\n  }\n\n  function deconstructTransfer(thing: any) {\n    return isTransferDescriptor(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }\n  }\n\n  function postFunctionInitMessage() {\n    const initMessage: WorkerInitMessage = {\n      exposed: { type: 'function' },\n      type: WorkerMessageType.init,\n    }\n    implementation.postMessageToMaster(initMessage)\n  }\n\n  function postModuleInitMessage(methodNames: string[]) {\n    const initMessage: WorkerInitMessage = {\n      exposed: {\n        methods: methodNames,\n        type: 'module',\n      },\n      type: WorkerMessageType.init,\n    }\n    implementation.postMessageToMaster(initMessage)\n  }\n\n  function postJobErrorMessage(uid: number, rawError: Error | TransferDescriptor<Error>) {\n    const { payload: error, transferables } = deconstructTransfer(rawError)\n    const errorMessage: WorkerJobErrorMessage = {\n      error: serialize(error) as any as SerializedError,\n      type: WorkerMessageType.error,\n      uid,\n    }\n    implementation.postMessageToMaster(errorMessage, transferables)\n  }\n\n  function postJobResultMessage(uid: number, completed: boolean, resultValue?: any) {\n    const { payload, transferables } = deconstructTransfer(resultValue)\n    const resultMessage: WorkerJobResultMessage = {\n      complete: completed ? true : undefined,\n      payload,\n      type: WorkerMessageType.result,\n      uid,\n    }\n    implementation.postMessageToMaster(resultMessage, transferables)\n  }\n\n  function postJobStartMessage(uid: number, resultType: WorkerJobStartMessage['resultType']) {\n    const startMessage: WorkerJobStartMessage = {\n      resultType,\n      type: WorkerMessageType.running,\n      uid,\n    }\n    implementation.postMessageToMaster(startMessage)\n  }\n\n  function postUncaughtErrorMessage(error: Error) {\n    try {\n      const errorMessage: WorkerUncaughtErrorMessage = {\n        error: serialize(error) as any as SerializedError,\n        type: WorkerMessageType.uncaughtError,\n      }\n      implementation.postMessageToMaster(errorMessage)\n    } catch (subError) {\n    // tslint:disable-next-line no-console\n      console.error(\n        'Not reporting uncaught error back to master thread as it ' + 'occured while reporting an uncaught error already.' + '\\nLatest error:',\n        subError,\n        '\\nOriginal error:',\n        error,\n      )\n    }\n  }\n\n  async function runFunction(jobUID: number, fn: WorkerFunction, args: any[]) {\n    let syncResult: any\n\n    try {\n      syncResult = fn(...args)\n    } catch (ex) {\n      const error = ex as Error\n      return postJobErrorMessage(jobUID, error)\n    }\n\n    const resultType = isObservable(syncResult) ? 'observable' : 'promise'\n    postJobStartMessage(jobUID, resultType)\n\n    if (isObservable(syncResult)) {\n      const subscription = syncResult.subscribe(\n        value => postJobResultMessage(jobUID, false, serialize(value)),\n        (error) => {\n          postJobErrorMessage(jobUID, serialize(error) as any)\n          activeSubscriptions.delete(jobUID)\n        },\n        () => {\n          postJobResultMessage(jobUID, true)\n          activeSubscriptions.delete(jobUID)\n        },\n      )\n      activeSubscriptions.set(jobUID, subscription)\n    } else {\n      try {\n        const result = await syncResult\n        postJobResultMessage(jobUID, true, serialize(result))\n      } catch (error) {\n        postJobErrorMessage(jobUID, serialize(error) as any)\n      }\n    }\n  }\n\n  /**\n * Expose a function or a module (an object whose values are functions)\n * to the main thread. Must be called exactly once in every worker thread\n * to signal its API to the main thread.\n *\n * @param exposed Function or object whose values are functions\n */\n  const expose = (exposed: WorkerFunction | WorkerModule<any>) => {\n    if (!implementation.isWorkerRuntime()) {\n      throw new Error('expose() called in the master thread.')\n    }\n    if (exposeCalled) {\n      throw new Error('expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.')\n    }\n    exposeCalled = true\n\n    if (typeof exposed === 'function') {\n      implementation.subscribeToMasterMessages((messageData: unknown) => {\n        if (isMasterJobRunMessage(messageData) && !messageData.method) {\n          runFunction(messageData.uid, exposed, messageData.args.map(deserialize))\n        }\n      })\n      postFunctionInitMessage()\n    } else if (typeof exposed === 'object' && exposed) {\n      implementation.subscribeToMasterMessages((messageData: unknown) => {\n        if (isMasterJobRunMessage(messageData) && messageData.method) {\n          runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(deserialize))\n        }\n      })\n\n      const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function')\n      postModuleInitMessage(methodNames)\n    } else {\n      throw new Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`)\n    }\n\n    implementation.subscribeToMasterMessages((messageData: unknown) => {\n      if (isMasterJobCancelMessage(messageData)) {\n        const jobUID = messageData.uid\n        const subscription = activeSubscriptions.get(jobUID)\n\n        if (subscription) {\n          subscription.unsubscribe()\n          activeSubscriptions.delete(jobUID)\n        }\n      }\n    })\n  }\n\n  if (typeof globalThis !== 'undefined' && typeof self.addEventListener === 'function' && implementation.isWorkerRuntime()) {\n    self.addEventListener('error', (event) => {\n    // Post with some delay, so the master had some time to subscribe to messages\n      setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250)\n    })\n    self.addEventListener('unhandledrejection', (event) => {\n      const error = (event as any).reason\n      if (error && typeof (error as any).message === 'string') {\n      // Post with some delay, so the master had some time to subscribe to messages\n        setTimeout(() => postUncaughtErrorMessage(error), 250)\n      }\n    })\n  }\n\n  if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation.isWorkerRuntime()) {\n    process.on('uncaughtException', (error) => {\n    // Post with some delay, so the master had some time to subscribe to messages\n      setTimeout(() => postUncaughtErrorMessage(error), 250)\n    })\n    process.on('unhandledRejection', (error) => {\n      if (error && typeof (error as any).message === 'string') {\n      // Post with some delay, so the master had some time to subscribe to messages\n        setTimeout(() => postUncaughtErrorMessage(error as any), 250)\n      }\n    })\n  }\n\n  return expose\n}\n","/* eslint-disable import-x/no-internal-modules */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { SerializedError } from './types/messages.ts'\n\nexport interface Serializer<Msg = JsonSerializable, Input = any> {\n  deserialize(message: Msg): Input\n  serialize(input: Input): Msg\n}\n\nexport interface SerializerImplementation<Msg = JsonSerializable, Input = any> {\n  deserialize(message: Msg, defaultDeserialize: (msg: Msg) => Input): Input\n  serialize(input: Input, defaultSerialize: (inp: Input) => Msg): Msg\n}\n\nexport function extendSerializer<MessageType, InputType = any>(\n  extend: Serializer<MessageType, InputType>,\n  implementation: SerializerImplementation<MessageType, InputType>,\n): Serializer<MessageType, InputType> {\n  const fallbackDeserializer = extend.deserialize.bind(extend)\n  const fallbackSerializer = extend.serialize.bind(extend)\n\n  return {\n    deserialize(message: MessageType): InputType {\n      return implementation.deserialize(message, fallbackDeserializer)\n    },\n\n    serialize(input: InputType): MessageType {\n      return implementation.serialize(input, fallbackSerializer)\n    },\n  }\n}\n\ntype JsonSerializablePrimitive = string | number | boolean | null\n\ntype JsonSerializableObject = {\n  [key: string]: JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[] | undefined\n}\n\nexport type JsonSerializable = JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[]\n\nconst DefaultErrorSerializer: Serializer<SerializedError, Error> = {\n  deserialize(message: SerializedError): Error {\n    return Object.assign(new Error(message.message), {\n      name: message.name,\n      stack: message.stack,\n    })\n  },\n  serialize(error: Error): SerializedError {\n    return {\n      __error_marker: '$$error',\n      message: error.message,\n      name: error.name,\n      stack: error.stack,\n    }\n  },\n}\n\nconst isSerializedError = (thing: any): thing is SerializedError =>\n  thing && typeof thing === 'object' && '__error_marker' in thing && thing.__error_marker === '$$error'\n\nexport const DefaultSerializer: Serializer<JsonSerializable> = {\n  deserialize(message: JsonSerializable): any {\n    return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message\n  },\n  serialize(input: any): JsonSerializable {\n    return input instanceof Error ? (DefaultErrorSerializer.serialize(input) as any as JsonSerializable) : input\n  },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n  JsonSerializable, Serializer, SerializerImplementation,\n} from './serializers.ts'\nimport { DefaultSerializer, extendSerializer } from './serializers.ts'\n\ndeclare global {\n  var registeredSerializer: Serializer<JsonSerializable>\n}\n\nglobalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSerializer\n\nexport function registerSerializer(serializer: SerializerImplementation<JsonSerializable>) {\n  globalThis.registeredSerializer = extendSerializer(globalThis.registeredSerializer, serializer)\n}\n\nexport function deserialize(message: JsonSerializable): any {\n  return globalThis.registeredSerializer.deserialize(message)\n}\n\nexport function serialize(input: any): JsonSerializable {\n  return globalThis.registeredSerializer.serialize(input)\n}\n","export const $errors = Symbol('thread.errors')\nexport const $events = Symbol('thread.events')\nexport const $terminate = Symbol('thread.terminate')\nexport const $transferable = Symbol('thread.transferable')\nexport const $worker = Symbol('thread.worker')\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { $transferable } from './symbols.ts'\n\nexport interface TransferDescriptor<T = any> {\n  [$transferable]: true\n  send: T\n  transferables: Transferable[]\n}\n\nfunction isTransferable(thing: any): thing is Transferable {\n  if (!thing || typeof thing !== 'object') return false\n  // Don't check too thoroughly, since the list of transferable things in JS might grow over time\n  return true\n}\n\nexport function isTransferDescriptor(thing: any): thing is TransferDescriptor {\n  return thing && typeof thing === 'object' && thing[$transferable]\n}\n\n/**\n * Mark a transferable object as such, so it will no be serialized and\n * deserialized on messaging with the main thread, but to transfer\n * ownership of it to the receiving thread.\n *\n * Only works with array buffers, message ports and few more special\n * types of objects, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer(transferable: Transferable): TransferDescriptor\n\n/**\n * Mark transferable objects within an arbitrary object or array as\n * being a transferable object. They will then not be serialized\n * and deserialized on messaging with the main thread, but ownership\n * of them will be tranferred to the receiving thread.\n *\n * Only array buffers, message ports and few more special types of\n * objects can be transferred, but it's much faster than serializing and\n * deserializing them.\n *\n * Note:\n * The transferable object cannot be accessed by this thread again\n * unless the receiving thread transfers it back again!\n *\n * @param transferable Array buffer, message port or similar.\n * @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>\n */\nexport function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor\n\nexport function Transfer<T>(payload: T, transferables?: Transferable[]): TransferDescriptor {\n  console.log('Transfer')\n  if (!transferables) {\n    if (!isTransferable(payload)) throw new Error('Not transferable')\n    transferables = [payload]\n  }\n\n  return {\n    [$transferable]: true,\n    send: payload,\n    transferables,\n  }\n}\n","/* eslint-disable import-x/no-internal-modules */\n\n/// <reference lib=\"webworker\" />\n// tslint:disable no-shadowed-variable\n\nimport type { AbstractedWorkerAPI } from '../types/worker.ts'\nimport { createExpose } from './expose.ts'\nimport type { WorkerGlobalScope } from './WorkerGlobalScope.ts'\n\ndeclare const self: WorkerGlobalScope\n\nconst isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {\n  const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window\n  return self !== undefined && self['postMessage'] && !isWindowContext ? true : false\n}\n\nconst postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList?) {\n  self.postMessage(data, transferList)\n}\n\nconst subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {\n  const messageHandler = (messageEvent: MessageEvent) => {\n    onMessage(messageEvent.data)\n  }\n  const unsubscribe = () => {\n    self.removeEventListener('message', messageHandler as EventListener)\n  }\n  self.addEventListener('message', messageHandler as EventListener)\n  return unsubscribe\n}\n\nconst addEventListener = self.addEventListener.bind(this)\nconst postMessage = self.postMessage.bind(this)\nconst removeEventListener = self.removeEventListener.bind(this)\n\nexport {\n  addEventListener,\n  postMessage,\n  removeEventListener,\n}\n\nconst expose = createExpose({\n  isWorkerRuntime, postMessageToMaster, subscribeToMasterMessages,\n}, {\n  addEventListener, postMessage, removeEventListener,\n})\n\nexport {\n  isWorkerRuntime,\n  postMessageToMaster,\n  subscribeToMasterMessages,\n}\n\nexport { registerSerializer } from '../common.ts'\nexport { Transfer } from '../transferable.ts'\nexport { expose }\n"],"mappings":"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","names":["self","expose","isWorkerRuntime","postMessageToMaster","subscribeToMasterMessages"]}