{"version":3,"file":"index.mjs","names":[],"sources":["../../src/helpers/worker-handler-registry.ts","../../src/helpers/worker-message-queue.ts"],"sourcesContent":["import { IWorkerHandlerRegistry } from '../abstract/worker-handler-registry';\nimport { WorkerInstance } from '../abstract/worker-instance';\n\nexport class WorkerHandlerRegistry implements IWorkerHandlerRegistry {\n  private readonly handlers = new Map<string, WorkerInstance<any, any>>();\n\n  register(requestType: string, handler: WorkerInstance<any, any>): void {\n    this.handlers.set(requestType, handler);\n  }\n\n  resolve(requestType: string): WorkerInstance<any, any> | undefined {\n    return this.handlers.get(requestType);\n  }\n}\n","import { WorkerRequestMessage } from '../abstract/worker-message';\r\nimport { IWorkerMessageQueue } from '../abstract/worker-queue';\r\n\r\nconst COMPACTION_THRESHOLD = 1024;\r\n\r\n// @injectable\r\nexport class WorkerMessageQueue implements IWorkerMessageQueue {\r\n  private _queue: WorkerRequestMessage<any>[];\r\n  private _head: number;\r\n  private _enqueueTimes: number[];\r\n  private _stalledEntries: boolean[];\r\n  private _recentStalledWaitTimesMs: number[];\r\n\r\n  constructor() {\r\n    this._queue = [];\r\n    this._head = 0;\r\n    this._enqueueTimes = [];\r\n    this._stalledEntries = [];\r\n    this._recentStalledWaitTimesMs = [];\r\n  }\r\n\r\n  get size(): number {\r\n    return this._queue.length - this._head;\r\n  }\r\n\r\n  get queue(): WorkerRequestMessage<any>[] {\r\n    return this._queue.slice(this._head);\r\n  }\r\n\r\n  enqueue(message: WorkerRequestMessage<any>): void {\r\n    this._queue.push(message);\r\n    this._enqueueTimes.push(performance.now());\r\n    this._stalledEntries.push(false);\r\n  }\r\n\r\n  dequeue(): WorkerRequestMessage<any> {\r\n    if (this._head >= this._queue.length) {\r\n      return undefined;\r\n    }\r\n\r\n    const item = this._queue[this._head];\r\n    const enqueuedAt = this._enqueueTimes[this._head];\r\n    const wasStalled = this._stalledEntries[this._head] === true;\r\n    this._head++;\r\n\r\n    if (enqueuedAt !== undefined && wasStalled) {\r\n      this._recentStalledWaitTimesMs.push(performance.now() - enqueuedAt);\r\n    }\r\n\r\n    // Compact the backing array once the consumed prefix is large enough\r\n    // to avoid unbounded memory growth.\r\n    if (this._head >= COMPACTION_THRESHOLD || this._head * 2 >= this._queue.length) {\r\n      this._queue = this._queue.slice(this._head);\r\n      this._enqueueTimes = this._enqueueTimes.slice(this._head);\r\n      this._stalledEntries = this._stalledEntries.slice(this._head);\r\n      this._head = 0;\r\n    }\r\n\r\n    return item;\r\n  }\r\n\r\n  /** Marks all currently queued messages as stalled until they are eventually dispatched. */\r\n  markAllAsStalled(): void {\r\n    for (let i = this._head; i < this._stalledEntries.length; i++) {\r\n      this._stalledEntries[i] = true;\r\n    }\r\n  }\r\n\r\n  /** Returns and clears wait times for messages that previously stalled before dispatch. */\r\n  flushWaitTimes(): number[] {\r\n    if (!this._recentStalledWaitTimesMs.length) return [];\r\n    const result = this._recentStalledWaitTimesMs;\r\n    this._recentStalledWaitTimesMs = [];\r\n    return result;\r\n  }\r\n\r\n  peek(): WorkerRequestMessage<any> {\r\n    if (this._head < this._queue.length) {\r\n      return this._queue[this._head];\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  clear(): void {\r\n    this._queue = [];\r\n    this._head = 0;\r\n    this._enqueueTimes = [];\r\n    this._stalledEntries = [];\r\n    this._recentStalledWaitTimesMs = [];\r\n  }\r\n}\r\n"],"mappings":";AAGA,IAAa,wBAAb,MAAqE;CACnE,2BAA4B,IAAI,IAAsC;CAEtE,SAAS,aAAqB,SAAyC;EACrE,KAAK,SAAS,IAAI,aAAa,OAAO;CACxC;CAEA,QAAQ,aAA2D;EACjE,OAAO,KAAK,SAAS,IAAI,WAAW;CACtC;AACF;;;ACVA,MAAM,uBAAuB;AAG7B,IAAa,qBAAb,MAA+D;CAC7D;CACA;CACA;CACA;CACA;CAEA,cAAc;EACZ,KAAK,SAAS,CAAC;EACf,KAAK,QAAQ;EACb,KAAK,gBAAgB,CAAC;EACtB,KAAK,kBAAkB,CAAC;EACxB,KAAK,4BAA4B,CAAC;CACpC;CAEA,IAAI,OAAe;EACjB,OAAO,KAAK,OAAO,SAAS,KAAK;CACnC;CAEA,IAAI,QAAqC;EACvC,OAAO,KAAK,OAAO,MAAM,KAAK,KAAK;CACrC;CAEA,QAAQ,SAA0C;EAChD,KAAK,OAAO,KAAK,OAAO;EACxB,KAAK,cAAc,KAAK,YAAY,IAAI,CAAC;EACzC,KAAK,gBAAgB,KAAK,KAAK;CACjC;CAEA,UAAqC;EACnC,IAAI,KAAK,SAAS,KAAK,OAAO,QAC5B;EAGF,MAAM,OAAO,KAAK,OAAO,KAAK;EAC9B,MAAM,aAAa,KAAK,cAAc,KAAK;EAC3C,MAAM,aAAa,KAAK,gBAAgB,KAAK,WAAW;EACxD,KAAK;EAEL,IAAI,eAAe,KAAA,KAAa,YAC9B,KAAK,0BAA0B,KAAK,YAAY,IAAI,IAAI,UAAU;EAKpE,IAAI,KAAK,SAAS,wBAAwB,KAAK,QAAQ,KAAK,KAAK,OAAO,QAAQ;GAC9E,KAAK,SAAS,KAAK,OAAO,MAAM,KAAK,KAAK;GAC1C,KAAK,gBAAgB,KAAK,cAAc,MAAM,KAAK,KAAK;GACxD,KAAK,kBAAkB,KAAK,gBAAgB,MAAM,KAAK,KAAK;GAC5D,KAAK,QAAQ;EACf;EAEA,OAAO;CACT;;CAGA,mBAAyB;EACvB,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,gBAAgB,QAAQ,KACxD,KAAK,gBAAgB,KAAK;CAE9B;;CAGA,iBAA2B;EACzB,IAAI,CAAC,KAAK,0BAA0B,QAAQ,OAAO,CAAC;EACpD,MAAM,SAAS,KAAK;EACpB,KAAK,4BAA4B,CAAC;EAClC,OAAO;CACT;CAEA,OAAkC;EAChC,IAAI,KAAK,QAAQ,KAAK,OAAO,QAC3B,OAAO,KAAK,OAAO,KAAK;CAI5B;CAEA,QAAc;EACZ,KAAK,SAAS,CAAC;EACf,KAAK,QAAQ;EACb,KAAK,gBAAgB,CAAC;EACtB,KAAK,kBAAkB,CAAC;EACxB,KAAK,4BAA4B,CAAC;CACpC;AACF"}