@rivmux/runtime-worker 0.3.0 → 0.5.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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { NormalizedRivmuxPlayerOptions, PlayerError, WorkerCommand, WorkerMessage } from "@rivmux/protocol";
2
-
3
2
  //#region src/index.d.ts
4
3
  type WorkerLike = Pick<Worker, 'addEventListener' | 'postMessage' | 'removeEventListener' | 'terminate'>;
5
4
  type RuntimeWorkerFactory = (options: NormalizedRivmuxPlayerOptions) => WorkerLike;
@@ -7,6 +6,13 @@ type WorkerClientHooks = {
7
6
  onMessage(message: WorkerMessage): void;
8
7
  onError(error: PlayerError): void;
9
8
  };
9
+ /**
10
+ * Returns the packaged WASM asset URL for the application bundler to track.
11
+ *
12
+ * Vite rewrites this static URL during the client build and emits the matching
13
+ * binary next to the application assets.
14
+ */
15
+ declare function getBundledWasmUrl(): string;
10
16
  declare class WorkerClient {
11
17
  private readonly worker;
12
18
  private readonly hooks;
@@ -31,14 +37,17 @@ declare class WorkerClient {
31
37
  private resolveAttach;
32
38
  private resolveStop;
33
39
  private resolveDestroy;
40
+ private rejectAttach;
41
+ private rejectStop;
34
42
  private rejectAll;
35
43
  private flushQueuedCommands;
36
44
  private startTimeout;
45
+ private failClient;
37
46
  private clearAttachTimer;
38
47
  private clearStoppedTimer;
39
48
  private clearDestroyedTimer;
40
49
  }
41
50
  declare function createRuntimeWorker(options: NormalizedRivmuxPlayerOptions): WorkerLike;
42
51
  //#endregion
43
- export { RuntimeWorkerFactory, WorkerClient, WorkerClientHooks, WorkerLike, createRuntimeWorker };
52
+ export { RuntimeWorkerFactory, WorkerClient, WorkerClientHooks, WorkerLike, createRuntimeWorker, getBundledWasmUrl };
44
53
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;KAEY,UAAA,GAAa,IAAI,CAAC,MAAA;AAAA,KAElB,oBAAA,IAAwB,OAAA,EAAS,6BAAA,KAAkC,UAAU;AAAA,KAO7E,iBAAA;EACV,SAAA,CAAU,OAAA,EAAS,aAAA;EACnB,OAAA,CAAQ,KAAA,EAAO,WAAW;AAAA;AAAA,cAKf,YAAA;EAAA,iBACM,MAAA;EAAA,iBACA,KAAA;EAAA,iBACA,aAAA;EAAA,iBAGA,WAAA;EAAA,QAKT,aAAA;EAAA,QACA,WAAA;EAAA,QACA,cAAA;EAAA,QACA,WAAA;EAAA,QACA,cAAA;EAAA,QACA,WAAA;EAAA,QACA,YAAA;EAAA,QACA,cAAA;cAEI,MAAA,EAAQ,UAAA,EAAY,KAAA,EAAO,iBAAA;EAOvC,IAAA,CAAK,OAAA,EAAS,aAAA;EASd,wBAAA,CAAyB,OAAA,EAAS,aAAA,GAAgB,OAAA;EAYlD,cAAA,CAAe,OAAA,EAAS,aAAA,GAAgB,OAAA;EAYxC,gBAAA,CAAiB,OAAA,EAAS,aAAA,GAAgB,OAAA;EAY1C,OAAA;EAAA,QAOQ,mBAAA;EAAA,QA4BA,2BAAA;EAAA,QAQA,aAAA;EAAA,QAMA,WAAA;EAAA,QAMA,cAAA;EAAA,QAMA,SAAA;EAAA,QAaA,mBAAA;EAAA,QAaA,YAAA;EAAA,QAQA,gBAAA;EAAA,QAOA,iBAAA;EAAA,QAOA,mBAAA;AAAA;AAAA,iBAQM,mBAAA,CAAoB,OAAA,EAAS,6BAAA,GAAgC,UAAU"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;KAIY,aAAa,KAAK;KAElB,wBAAwB,SAAS,kCAAkC;KAOnE;EACV,UAAU,SAAS;EACnB,QAAQ,OAAO;;;;;;;;iBASD;cAMH;mBACM;mBACA;mBACA;mBAGA;UAIT;UACA;UACA;UACA;UACA;UACA;UACA;UACA;cAEI,QAAQ,YAAY,OAAO;EAOvC,KAAK,SAAS;EASd,yBAAyB,SAAS,gBAAgB;EAYlD,eAAe,SAAS,gBAAgB;EAYxC,iBAAiB,SAAS,gBAAgB;EAY1C;UAOQ;UA+BA;UAQA;UAMA;UAMA;UAMA;UAMA;UAMA;UAaA;UAaA;UAQA;UAKA;UAOA;UAOA;;iBAQM,oBAAoB,SAAS,gCAAgC"}
package/dist/index.js CHANGED
@@ -1,4 +1,14 @@
1
1
  //#region src/index.ts
2
+ const bundledWasmUrl = new URL("./rivmux-transmux-core.wasm", import.meta.url);
3
+ /**
4
+ * Returns the packaged WASM asset URL for the application bundler to track.
5
+ *
6
+ * Vite rewrites this static URL during the client build and emits the matching
7
+ * binary next to the application assets.
8
+ */
9
+ function getBundledWasmUrl() {
10
+ return bundledWasmUrl.href;
11
+ }
2
12
  const REQUEST_TIMEOUT_MS = 5e3;
3
13
  var WorkerClient = class {
4
14
  worker;
@@ -8,8 +18,7 @@ var WorkerClient = class {
8
18
  };
9
19
  handleError = (event) => {
10
20
  const error = createRuntimeWorkerError("RIVMUX_WORKER_ERROR", event.message || "Worker runtime failed.", true, event.error);
11
- this.rejectAll(error);
12
- this.hooks.onError(error);
21
+ this.failClient(error);
13
22
  };
14
23
  pendingAttach;
15
24
  pendingStop;
@@ -82,11 +91,14 @@ var WorkerClient = class {
82
91
  return;
83
92
  }
84
93
  if (message.type === "stopped") {
94
+ this.rejectAttach(createRuntimeWorkerError("RIVMUX_ATTACH_CANCELLED", "Media source attachment was cancelled by stop.", false));
85
95
  this.resolveStop();
86
96
  return;
87
97
  }
88
98
  if (message.type === "destroyed") {
89
99
  this.resolveDestroy();
100
+ this.rejectAttach(createRuntimeWorkerError("RIVMUX_ATTACH_CANCELLED", "Media source attachment was cancelled by destroy.", false));
101
+ this.rejectStop(createRuntimeWorkerError("RIVMUX_STOP_CANCELLED", "Stop was superseded by destroy.", false));
90
102
  return;
91
103
  }
92
104
  if (message.type === "error") this.rejectPendingForWorkerError(message.error);
@@ -110,6 +122,16 @@ var WorkerClient = class {
110
122
  this.pendingDestroy?.resolve();
111
123
  this.pendingDestroy = void 0;
112
124
  }
125
+ rejectAttach(error) {
126
+ this.clearAttachTimer();
127
+ this.pendingAttach?.reject(error);
128
+ this.pendingAttach = void 0;
129
+ }
130
+ rejectStop(error) {
131
+ this.clearStoppedTimer();
132
+ this.pendingStop?.reject(error);
133
+ this.pendingStop = void 0;
134
+ }
113
135
  rejectAll(error) {
114
136
  this.queuedCommands = [];
115
137
  this.clearAttachTimer();
@@ -133,9 +155,13 @@ var WorkerClient = class {
133
155
  return setTimeout(() => {
134
156
  const error = createRuntimeWorkerError(code, message, true);
135
157
  reject(error);
136
- this.rejectAll(error);
158
+ this.failClient(error);
137
159
  }, REQUEST_TIMEOUT_MS);
138
160
  }
161
+ failClient(error) {
162
+ this.rejectAll(error);
163
+ this.hooks.onError(error);
164
+ }
139
165
  clearAttachTimer() {
140
166
  if (this.attachTimer !== void 0) {
141
167
  clearTimeout(this.attachTimer);
@@ -177,6 +203,6 @@ function createRuntimeWorkerError(code, message, terminal, cause) {
177
203
  };
178
204
  }
179
205
  //#endregion
180
- export { WorkerClient, createRuntimeWorker };
206
+ export { WorkerClient, createRuntimeWorker, getBundledWasmUrl };
181
207
 
182
208
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { NormalizedRivmuxPlayerOptions, PlayerError, WorkerCommand, WorkerMessage } from '@rivmux/protocol'\n\nexport type WorkerLike = Pick<Worker, 'addEventListener' | 'postMessage' | 'removeEventListener' | 'terminate'>\n\nexport type RuntimeWorkerFactory = (options: NormalizedRivmuxPlayerOptions) => WorkerLike\n\ntype PendingRequest = {\n resolve: () => void\n reject: (error: PlayerError) => void\n}\n\nexport type WorkerClientHooks = {\n onMessage(message: WorkerMessage): void\n onError(error: PlayerError): void\n}\n\nconst REQUEST_TIMEOUT_MS = 5000\n\nexport class WorkerClient {\n private readonly worker: WorkerLike\n private readonly hooks: WorkerClientHooks\n private readonly handleMessage = (event: MessageEvent<WorkerMessage>): void => {\n this.handleWorkerMessage(event.data)\n }\n private readonly handleError = (event: ErrorEvent): void => {\n const error = createRuntimeWorkerError('RIVMUX_WORKER_ERROR', event.message || 'Worker runtime failed.', true, event.error)\n this.rejectAll(error)\n this.hooks.onError(error)\n }\n private pendingAttach?: PendingRequest\n private pendingStop?: PendingRequest\n private pendingDestroy?: PendingRequest\n private workerReady = false\n private queuedCommands: WorkerCommand[] = []\n private attachTimer?: ReturnType<typeof setTimeout>\n private stoppedTimer?: ReturnType<typeof setTimeout>\n private destroyedTimer?: ReturnType<typeof setTimeout>\n\n constructor(worker: WorkerLike, hooks: WorkerClientHooks) {\n this.worker = worker\n this.hooks = hooks\n this.worker.addEventListener('message', this.handleMessage as EventListener)\n this.worker.addEventListener('error', this.handleError as EventListener)\n }\n\n post(command: WorkerCommand): void {\n if (!this.workerReady) {\n this.queuedCommands.push(command)\n return\n }\n\n this.worker.postMessage(command)\n }\n\n waitForMediaSourceHandle(command: WorkerCommand): Promise<void> {\n if (this.pendingAttach !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_ATTACH_IN_PROGRESS', 'A media source attach request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingAttach = { resolve, reject }\n this.attachTimer = this.startTimeout('RIVMUX_ATTACH_TIMEOUT', 'Timed out waiting for worker MediaSourceHandle.', reject)\n this.post(command)\n })\n }\n\n waitForStopped(command: WorkerCommand): Promise<void> {\n if (this.pendingStop !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_STOP_IN_PROGRESS', 'A stop request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingStop = { resolve, reject }\n this.stoppedTimer = this.startTimeout('RIVMUX_STOP_TIMEOUT', 'Timed out waiting for worker stop.', reject)\n this.post(command)\n })\n }\n\n waitForDestroyed(command: WorkerCommand): Promise<void> {\n if (this.pendingDestroy !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_DESTROY_IN_PROGRESS', 'A destroy request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingDestroy = { resolve, reject }\n this.destroyedTimer = this.startTimeout('RIVMUX_DESTROY_TIMEOUT', 'Timed out waiting for worker destroy.', reject)\n this.post(command)\n })\n }\n\n dispose(): void {\n this.rejectAll(createRuntimeWorkerError('RIVMUX_WORKER_DISPOSED', 'Worker client was disposed.', true))\n this.worker.removeEventListener('message', this.handleMessage as EventListener)\n this.worker.removeEventListener('error', this.handleError as EventListener)\n this.worker.terminate()\n }\n\n private handleWorkerMessage(message: WorkerMessage): void {\n if (message.type === 'worker-ready') {\n this.flushQueuedCommands()\n return\n }\n\n this.hooks.onMessage(message)\n\n if (message.type === 'media-source-handle') {\n this.resolveAttach()\n return\n }\n\n if (message.type === 'stopped') {\n this.resolveStop()\n return\n }\n\n if (message.type === 'destroyed') {\n this.resolveDestroy()\n return\n }\n\n if (message.type === 'error') {\n this.rejectPendingForWorkerError(message.error)\n }\n }\n\n private rejectPendingForWorkerError(error: PlayerError): void {\n if (!error.terminal) {\n return\n }\n\n this.rejectAll(error)\n }\n\n private resolveAttach(): void {\n this.clearAttachTimer()\n this.pendingAttach?.resolve()\n this.pendingAttach = undefined\n }\n\n private resolveStop(): void {\n this.clearStoppedTimer()\n this.pendingStop?.resolve()\n this.pendingStop = undefined\n }\n\n private resolveDestroy(): void {\n this.clearDestroyedTimer()\n this.pendingDestroy?.resolve()\n this.pendingDestroy = undefined\n }\n\n private rejectAll(error: PlayerError): void {\n this.queuedCommands = []\n this.clearAttachTimer()\n this.clearStoppedTimer()\n this.clearDestroyedTimer()\n this.pendingAttach?.reject(error)\n this.pendingStop?.reject(error)\n this.pendingDestroy?.reject(error)\n this.pendingAttach = undefined\n this.pendingStop = undefined\n this.pendingDestroy = undefined\n }\n\n private flushQueuedCommands(): void {\n if (this.workerReady) {\n return\n }\n\n this.workerReady = true\n const commands = this.queuedCommands\n this.queuedCommands = []\n for (const command of commands) {\n this.worker.postMessage(command)\n }\n }\n\n private startTimeout(code: string, message: string, reject: (error: PlayerError) => void): ReturnType<typeof setTimeout> {\n return setTimeout(() => {\n const error = createRuntimeWorkerError(code, message, true)\n reject(error)\n this.rejectAll(error)\n }, REQUEST_TIMEOUT_MS)\n }\n\n private clearAttachTimer(): void {\n if (this.attachTimer !== undefined) {\n clearTimeout(this.attachTimer)\n this.attachTimer = undefined\n }\n }\n\n private clearStoppedTimer(): void {\n if (this.stoppedTimer !== undefined) {\n clearTimeout(this.stoppedTimer)\n this.stoppedTimer = undefined\n }\n }\n\n private clearDestroyedTimer(): void {\n if (this.destroyedTimer !== undefined) {\n clearTimeout(this.destroyedTimer)\n this.destroyedTimer = undefined\n }\n }\n}\n\nexport function createRuntimeWorker(options: NormalizedRivmuxPlayerOptions): WorkerLike {\n const url = options.runtime.workerUrl === undefined ? new URL('./rivmux-runtime-worker.js', import.meta.url) : options.runtime.workerUrl\n\n return new Worker(url, {\n name: 'rivmux-runtime-worker',\n type: 'module',\n })\n}\n\nfunction createRuntimeWorkerError(code: string, message: string, terminal: boolean, cause?: unknown): PlayerError {\n return cause === undefined ? { kind: 'runtime', code, message, terminal } : { kind: 'runtime', code, message, terminal, cause }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { NormalizedRivmuxPlayerOptions, PlayerError, WorkerCommand, WorkerMessage } from '@rivmux/protocol'\n\nconst bundledWasmUrl = new URL('./rivmux-transmux-core.wasm', import.meta.url)\n\nexport type WorkerLike = Pick<Worker, 'addEventListener' | 'postMessage' | 'removeEventListener' | 'terminate'>\n\nexport type RuntimeWorkerFactory = (options: NormalizedRivmuxPlayerOptions) => WorkerLike\n\ntype PendingRequest = {\n resolve: () => void\n reject: (error: PlayerError) => void\n}\n\nexport type WorkerClientHooks = {\n onMessage(message: WorkerMessage): void\n onError(error: PlayerError): void\n}\n\n/**\n * Returns the packaged WASM asset URL for the application bundler to track.\n *\n * Vite rewrites this static URL during the client build and emits the matching\n * binary next to the application assets.\n */\nexport function getBundledWasmUrl(): string {\n return bundledWasmUrl.href\n}\n\nconst REQUEST_TIMEOUT_MS = 5000\n\nexport class WorkerClient {\n private readonly worker: WorkerLike\n private readonly hooks: WorkerClientHooks\n private readonly handleMessage = (event: MessageEvent<WorkerMessage>): void => {\n this.handleWorkerMessage(event.data)\n }\n private readonly handleError = (event: ErrorEvent): void => {\n const error = createRuntimeWorkerError('RIVMUX_WORKER_ERROR', event.message || 'Worker runtime failed.', true, event.error)\n this.failClient(error)\n }\n private pendingAttach?: PendingRequest\n private pendingStop?: PendingRequest\n private pendingDestroy?: PendingRequest\n private workerReady = false\n private queuedCommands: WorkerCommand[] = []\n private attachTimer?: ReturnType<typeof setTimeout>\n private stoppedTimer?: ReturnType<typeof setTimeout>\n private destroyedTimer?: ReturnType<typeof setTimeout>\n\n constructor(worker: WorkerLike, hooks: WorkerClientHooks) {\n this.worker = worker\n this.hooks = hooks\n this.worker.addEventListener('message', this.handleMessage as EventListener)\n this.worker.addEventListener('error', this.handleError as EventListener)\n }\n\n post(command: WorkerCommand): void {\n if (!this.workerReady) {\n this.queuedCommands.push(command)\n return\n }\n\n this.worker.postMessage(command)\n }\n\n waitForMediaSourceHandle(command: WorkerCommand): Promise<void> {\n if (this.pendingAttach !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_ATTACH_IN_PROGRESS', 'A media source attach request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingAttach = { resolve, reject }\n this.attachTimer = this.startTimeout('RIVMUX_ATTACH_TIMEOUT', 'Timed out waiting for worker MediaSourceHandle.', reject)\n this.post(command)\n })\n }\n\n waitForStopped(command: WorkerCommand): Promise<void> {\n if (this.pendingStop !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_STOP_IN_PROGRESS', 'A stop request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingStop = { resolve, reject }\n this.stoppedTimer = this.startTimeout('RIVMUX_STOP_TIMEOUT', 'Timed out waiting for worker stop.', reject)\n this.post(command)\n })\n }\n\n waitForDestroyed(command: WorkerCommand): Promise<void> {\n if (this.pendingDestroy !== undefined) {\n return Promise.reject(createRuntimeWorkerError('RIVMUX_DESTROY_IN_PROGRESS', 'A destroy request is already pending.', false))\n }\n\n return new Promise((resolve, reject) => {\n this.pendingDestroy = { resolve, reject }\n this.destroyedTimer = this.startTimeout('RIVMUX_DESTROY_TIMEOUT', 'Timed out waiting for worker destroy.', reject)\n this.post(command)\n })\n }\n\n dispose(): void {\n this.rejectAll(createRuntimeWorkerError('RIVMUX_WORKER_DISPOSED', 'Worker client was disposed.', true))\n this.worker.removeEventListener('message', this.handleMessage as EventListener)\n this.worker.removeEventListener('error', this.handleError as EventListener)\n this.worker.terminate()\n }\n\n private handleWorkerMessage(message: WorkerMessage): void {\n if (message.type === 'worker-ready') {\n this.flushQueuedCommands()\n return\n }\n\n this.hooks.onMessage(message)\n\n if (message.type === 'media-source-handle') {\n this.resolveAttach()\n return\n }\n\n if (message.type === 'stopped') {\n this.rejectAttach(createRuntimeWorkerError('RIVMUX_ATTACH_CANCELLED', 'Media source attachment was cancelled by stop.', false))\n this.resolveStop()\n return\n }\n\n if (message.type === 'destroyed') {\n this.resolveDestroy()\n this.rejectAttach(createRuntimeWorkerError('RIVMUX_ATTACH_CANCELLED', 'Media source attachment was cancelled by destroy.', false))\n this.rejectStop(createRuntimeWorkerError('RIVMUX_STOP_CANCELLED', 'Stop was superseded by destroy.', false))\n return\n }\n\n if (message.type === 'error') {\n this.rejectPendingForWorkerError(message.error)\n }\n }\n\n private rejectPendingForWorkerError(error: PlayerError): void {\n if (!error.terminal) {\n return\n }\n\n this.rejectAll(error)\n }\n\n private resolveAttach(): void {\n this.clearAttachTimer()\n this.pendingAttach?.resolve()\n this.pendingAttach = undefined\n }\n\n private resolveStop(): void {\n this.clearStoppedTimer()\n this.pendingStop?.resolve()\n this.pendingStop = undefined\n }\n\n private resolveDestroy(): void {\n this.clearDestroyedTimer()\n this.pendingDestroy?.resolve()\n this.pendingDestroy = undefined\n }\n\n private rejectAttach(error: PlayerError): void {\n this.clearAttachTimer()\n this.pendingAttach?.reject(error)\n this.pendingAttach = undefined\n }\n\n private rejectStop(error: PlayerError): void {\n this.clearStoppedTimer()\n this.pendingStop?.reject(error)\n this.pendingStop = undefined\n }\n\n private rejectAll(error: PlayerError): void {\n this.queuedCommands = []\n this.clearAttachTimer()\n this.clearStoppedTimer()\n this.clearDestroyedTimer()\n this.pendingAttach?.reject(error)\n this.pendingStop?.reject(error)\n this.pendingDestroy?.reject(error)\n this.pendingAttach = undefined\n this.pendingStop = undefined\n this.pendingDestroy = undefined\n }\n\n private flushQueuedCommands(): void {\n if (this.workerReady) {\n return\n }\n\n this.workerReady = true\n const commands = this.queuedCommands\n this.queuedCommands = []\n for (const command of commands) {\n this.worker.postMessage(command)\n }\n }\n\n private startTimeout(code: string, message: string, reject: (error: PlayerError) => void): ReturnType<typeof setTimeout> {\n return setTimeout(() => {\n const error = createRuntimeWorkerError(code, message, true)\n reject(error)\n this.failClient(error)\n }, REQUEST_TIMEOUT_MS)\n }\n\n private failClient(error: PlayerError): void {\n this.rejectAll(error)\n this.hooks.onError(error)\n }\n\n private clearAttachTimer(): void {\n if (this.attachTimer !== undefined) {\n clearTimeout(this.attachTimer)\n this.attachTimer = undefined\n }\n }\n\n private clearStoppedTimer(): void {\n if (this.stoppedTimer !== undefined) {\n clearTimeout(this.stoppedTimer)\n this.stoppedTimer = undefined\n }\n }\n\n private clearDestroyedTimer(): void {\n if (this.destroyedTimer !== undefined) {\n clearTimeout(this.destroyedTimer)\n this.destroyedTimer = undefined\n }\n }\n}\n\nexport function createRuntimeWorker(options: NormalizedRivmuxPlayerOptions): WorkerLike {\n const url = options.runtime.workerUrl === undefined ? new URL('./rivmux-runtime-worker.js', import.meta.url) : options.runtime.workerUrl\n\n return new Worker(url, {\n name: 'rivmux-runtime-worker',\n type: 'module',\n })\n}\n\nfunction createRuntimeWorkerError(code: string, message: string, terminal: boolean, cause?: unknown): PlayerError {\n return cause === undefined ? { kind: 'runtime', code, message, terminal } : { kind: 'runtime', code, message, terminal, cause }\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { NormalizedNetworkOptions, NormalizedRivmuxPlayerOptions, PlayerError, WorkerCommand, WorkerMessage } from "@rivmux/protocol";
2
-
3
2
  //#region src/latency/buffer-ranges.d.ts
4
3
  type BufferedRange = {
5
4
  start: number;
@@ -89,16 +88,10 @@ type CoreEvent = {
89
88
  type: 'mediaSegment';
90
89
  data: CoreMediaSegment;
91
90
  } | {
92
- type: 'videoConfig';
91
+ type: 'trackConfig';
93
92
  data: unknown;
94
93
  } | {
95
- type: 'audioConfig';
96
- data: unknown;
97
- } | {
98
- type: 'videoSample';
99
- data: unknown;
100
- } | {
101
- type: 'audioSample';
94
+ type: 'sample';
102
95
  data: unknown;
103
96
  } | {
104
97
  type: 'metadata';
@@ -135,7 +128,7 @@ declare class WasmTransmuxCoreHost implements TransmuxCoreHost {
135
128
  }
136
129
  declare function normalizeCoreEvents(value: unknown): CoreEvent[];
137
130
  //#endregion
138
- //#region src/runtime.d.ts
131
+ //#region src/runtime/types.d.ts
139
132
  type RuntimeMseCleanupOptions = {
140
133
  force?: boolean;
141
134
  };
@@ -170,53 +163,50 @@ type RuntimeWorkerDependencies = {
170
163
  detectRuntime?: () => PlayerError | undefined;
171
164
  now?: () => number;
172
165
  };
166
+ //#endregion
167
+ //#region src/runtime/index.d.ts
173
168
  declare class RuntimeWorker {
174
169
  private readonly port;
175
- private readonly createMseController;
176
- private readonly createLoader;
177
- private readonly createTransmuxCore;
178
170
  private readonly detectRuntime;
179
171
  private readonly now;
180
172
  private state;
181
173
  private url?;
182
174
  private options?;
183
- private mse?;
184
- private loader?;
185
- private transmuxCore?;
175
+ private readonly session;
186
176
  private latencyController?;
187
177
  private videoState?;
188
178
  private lastLatencyMetrics;
189
179
  private statsTimer?;
190
180
  private statsTickInFlight;
191
- private loaderRunId;
192
- private outputBytes;
193
181
  private appendQueueMaxLength;
194
182
  private appendQueueMaxBytes;
183
+ private commandTail;
184
+ private lifecycleGeneration;
185
+ private lifecycleAbortController;
186
+ private fatalCleanupPromise;
195
187
  constructor(port: RuntimeWorkerPort, dependencies?: RuntimeWorkerDependencies);
196
188
  handleCommand(command: WorkerCommand): Promise<void>;
189
+ private executeCommand;
197
190
  private attachMediaSource;
198
191
  private start;
199
192
  private stop;
200
193
  private destroy;
201
194
  private startLoader;
202
- private runLoader;
203
195
  private closeLoader;
204
- private closeCurrentLoader;
205
- private isCurrentLoader;
206
196
  private postStats;
207
- private processTransmuxEvents;
208
197
  private collectMseStats;
209
- private appendToMse;
210
- private retryAppendAfterQuotaCleanup;
211
198
  private quotaCleanupCutoff;
212
199
  private applyLatencyPolicy;
213
200
  private startStatsTimer;
214
201
  private stopStatsTimer;
215
202
  private emitStatsTick;
203
+ private currentLifecycleContext;
204
+ private isLifecycleContextCurrent;
216
205
  private fail;
217
206
  private failWithError;
218
207
  private enterFatalErrorState;
219
208
  private post;
209
+ private invalidateLifecycle;
220
210
  }
221
211
  //#endregion
222
212
  //#region src/loader/http-flv-loader.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"rivmux-runtime-worker.d.ts","names":[],"sources":["../src/latency/buffer-ranges.ts","../src/loader/loader.ts","../src/wasm/rivmux-transmux-wasm.ts","../src/runtime.ts","../src/loader/http-flv-loader.ts","../src/mse/mse-controller.ts","../src/mse/source-buffer-queue.ts","../src/mse/mime.ts","../src/wasm/wasm-loader.ts","../src/worker-entry.ts"],"mappings":"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"}
1
+ {"version":3,"file":"rivmux-runtime-worker.d.ts","names":[],"sources":["../src/latency/buffer-ranges.ts","../src/loader/loader.ts","../src/wasm/rivmux-transmux-wasm.ts","../src/runtime/types.ts","../src/runtime/index.ts","../src/loader/http-flv-loader.ts","../src/mse/mse-controller.ts","../src/mse/source-buffer-queue.ts","../src/mse/mime.ts","../src/wasm/wasm-loader.ts","../src/worker-entry.ts"],"mappings":"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"}