@livon/runtime 0.27.0-rc.5 → 0.28.0-rc.4

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/README.md CHANGED
@@ -1,5 +1,14 @@
1
+ <!-- Generated from website/docs/packages/*.md. Do not edit directly. -->
2
+
1
3
  # @livon/runtime
2
4
 
5
+
6
+ [![npm](https://img.shields.io/npm/v/%40livon%2Fruntime)](https://www.npmjs.com/package/@livon/runtime)
7
+ [![dependencies](https://img.shields.io/librariesio/release/npm/%40livon%2Fruntime?label=dependencies)](https://libraries.io/npm/%40livon%2Fruntime)
8
+ [![code quality](https://img.shields.io/github/actions/workflow/status/live-input-vector-output-node/livon-ts/code-quality.yml?branch=main&label=code%20quality)](https://github.com/live-input-vector-output-node/livon-ts/actions/workflows/code-quality.yml)
9
+ [![package size](https://img.shields.io/npm/unpacked-size/%40livon%2Fruntime?label=package%20size)](https://www.npmjs.com/package/@livon/runtime)
10
+ [![license](https://img.shields.io/github/license/live-input-vector-output-node/livon-ts)](https://github.com/live-input-vector-output-node/livon-ts)
11
+
3
12
  ## Install
4
13
 
5
14
  ```sh
@@ -8,12 +17,16 @@ pnpm add @livon/runtime
8
17
 
9
18
  ## Purpose
10
19
 
11
- [@livon/runtime](https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime) is the event pipeline core. It composes modules and executes hook chains for:
20
+ [@livon/runtime](https://livon.tech/docs/packages/runtime) is the event pipeline core. It composes modules and executes hook chains for:
12
21
 
13
22
  - `onReceive`
14
23
  - `onSend`
15
24
  - `onError`
16
25
 
26
+ ## Best for
27
+
28
+ Use this package when you need deterministic event flow orchestration across transports and schema execution.
29
+
17
30
  ## Basic usage
18
31
 
19
32
  ```ts
@@ -150,7 +163,7 @@ You can also scope to rooms via `ctx.room(roomId)`.
150
163
 
151
164
  ## Related pages
152
165
 
153
- - [Validated by Default](https://live-input-vector-output-node.github.io/livon-ts/docs/core/validated-by-default)
154
- - [@livon/schema](https://live-input-vector-output-node.github.io/livon-ts/docs/packages/schema)
155
- - [Runtime Design](https://live-input-vector-output-node.github.io/livon-ts/docs/technical/runtime-design)
156
- - [Event Flow](https://live-input-vector-output-node.github.io/livon-ts/docs/technical/event-flow)
166
+ - [Validated by Default](https://livon.tech/docs/core/validated-by-default)
167
+ - [@livon/schema](https://livon.tech/docs/packages/schema)
168
+ - [Runtime Design](https://livon.tech/docs/technical/runtime-design)
169
+ - [Event Flow](https://livon.tech/docs/technical/event-flow)
@@ -1,28 +1 @@
1
- Third-Party Notices
2
-
3
- This package includes third-party software. The following licenses apply:
4
-
5
- ------------------------------------------------------------------------------
6
- msgpackr
7
- ------------------------------------------------------------------------------
8
- License: MIT
9
-
10
- Copyright (c) 2020 Kris Zyp
11
-
12
- Permission is hereby granted, free of charge, to any person obtaining a copy
13
- of this software and associated documentation files (the "Software"), to deal
14
- in the Software without restriction, including without limitation the rights
15
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
- copies of the Software, and to permit persons to whom the Software is
17
- furnished to do so, subject to the following conditions:
18
-
19
- The above copyright notice and this permission notice shall be included in all
20
- copies or substantial portions of the Software.
21
-
22
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
- SOFTWARE.
1
+ No third-party notices are required for this package at this time.
package/dist/index.cjs CHANGED
@@ -1,60 +1,36 @@
1
1
  "use strict";
2
- const __rslib_import_meta_url__ = /*#__PURE__*/ (function () {
3
- return typeof document === 'undefined'
4
- ? new (require('url'.replace('', '')).URL)('file:' + __filename).href
5
- : (document.currentScript && document.currentScript.src) ||
6
- new URL('main.js', document.baseURI).href;
7
- })();
8
- ;
9
- // The require scope
10
2
  var __webpack_require__ = {};
11
-
12
- // webpack/runtime/define_property_getters
13
- (() => {
14
- __webpack_require__.d = (exports, definition) => {
15
- for(var key in definition) {
16
- if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
17
- Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
18
- }
19
- }
20
- };
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
21
10
  })();
22
- // webpack/runtime/has_own_property
23
- (() => {
24
- __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
25
13
  })();
26
- // webpack/runtime/make_namespace_object
27
- (() => {
28
- // define __esModule on exports
29
- __webpack_require__.r = (exports) => {
30
- if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
31
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
32
- }
33
- Object.defineProperty(exports, '__esModule', { value: true });
34
- };
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
35
23
  })();
36
24
  var __webpack_exports__ = {};
37
- // ESM COMPAT FLAG
38
25
  __webpack_require__.r(__webpack_exports__);
39
-
40
- // EXPORTS
41
26
  __webpack_require__.d(__webpack_exports__, {
42
- runtime: () => (/* reexport */ external_runtime_cjs_namespaceObject.runtime)
27
+ runtime: ()=>external_runtime_cjs_namespaceObject.runtime
43
28
  });
44
-
45
- ;// CONCATENATED MODULE: external "./runtime.cjs"
46
29
  const external_runtime_cjs_namespaceObject = require("./runtime.cjs");
47
- ;// CONCATENATED MODULE: ./src/index.ts
48
- /**
49
- * Public package entrypoint for `@livon/runtime`.
50
- *
51
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
52
- */
53
-
54
30
  exports.runtime = __webpack_exports__.runtime;
55
- for(var __rspack_i in __webpack_exports__) {
56
- if(["runtime"].indexOf(__rspack_i) === -1) {
57
- exports[__rspack_i] = __webpack_exports__[__rspack_i];
58
- }
59
- }
60
- Object.defineProperty(exports, '__esModule', { value: true });
31
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
32
+ "runtime"
33
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
34
+ Object.defineProperty(exports, '__esModule', {
35
+ value: true
36
+ });
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Public package entrypoint for `@livon/runtime`.
3
3
  *
4
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
4
+ * @see https://livon.tech/docs/packages/runtime
5
5
  */
6
6
  export { runtime } from './runtime.js';
7
7
  export type { RuntimeEventContext, EventStatus, EventError, EventEnvelopeBase, EventEnvelopePayload, EventEnvelopeError, EventEnvelope, EventAck, EmitInputBase, EmitInputPayload, EmitInputError, EmitInput, EmitEvent, EmitReceive, EmitSend, EmitError, RoomSelector, StateGet, StateSet, RuntimeState, RuntimeContext, RuntimeHook, RuntimeModule, RuntimeOnError, RuntimeInput, RuntimeModuleRegister, RuntimeHookRegister, RuntimeOnErrorRegister, RuntimeHookSubscription, RuntimeUnsubscribe, RuntimeRegistry, RuntimeStart, PartialEventEnvelopeBase, PartialEventEnvelopePayload, PartialEventEnvelopeError, PartialEventEnvelopeEmpty, PartialEventEnvelope, } from './types.js';
package/dist/index.js CHANGED
@@ -1,12 +1,2 @@
1
1
  import { runtime } from "./runtime.js";
2
-
3
- ;// CONCATENATED MODULE: external "./runtime.js"
4
-
5
- ;// CONCATENATED MODULE: ./src/index.ts
6
- /**
7
- * Public package entrypoint for `@livon/runtime`.
8
- *
9
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
10
- */
11
-
12
2
  export { runtime };
package/dist/runtime.cjs CHANGED
@@ -1,42 +1,30 @@
1
1
  "use strict";
2
- const __rslib_import_meta_url__ = /*#__PURE__*/ (function () {
3
- return typeof document === 'undefined'
4
- ? new (require('url'.replace('', '')).URL)('file:' + __filename).href
5
- : (document.currentScript && document.currentScript.src) ||
6
- new URL('main.js', document.baseURI).href;
7
- })();
8
- ;
9
- // The require scope
10
2
  var __webpack_require__ = {};
11
-
12
- // webpack/runtime/define_property_getters
13
- (() => {
14
- __webpack_require__.d = (exports, definition) => {
15
- for(var key in definition) {
16
- if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
17
- Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
18
- }
19
- }
20
- };
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
21
10
  })();
22
- // webpack/runtime/has_own_property
23
- (() => {
24
- __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
25
13
  })();
26
- // webpack/runtime/make_namespace_object
27
- (() => {
28
- // define __esModule on exports
29
- __webpack_require__.r = (exports) => {
30
- if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
31
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
32
- }
33
- Object.defineProperty(exports, '__esModule', { value: true });
34
- };
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
35
23
  })();
36
24
  var __webpack_exports__ = {};
37
25
  __webpack_require__.r(__webpack_exports__);
38
26
  __webpack_require__.d(__webpack_exports__, {
39
- runtime: () => (runtime)
27
+ runtime: ()=>runtime
40
28
  });
41
29
  const createHookStore = ()=>({
42
30
  onReceive: [],
@@ -55,9 +43,7 @@ const createState = ()=>{
55
43
  };
56
44
  };
57
45
  const mergeMetadata = (base, extra)=>{
58
- if (!base && !extra) {
59
- return undefined;
60
- }
46
+ if (!base && !extra) return;
61
47
  return {
62
48
  ...base ?? {},
63
49
  ...extra ?? {}
@@ -66,22 +52,18 @@ const mergeMetadata = (base, extra)=>{
66
52
  let fallbackEventIdCounter = 0;
67
53
  const createEventId = ()=>{
68
54
  const cryptoValue = globalThis.crypto;
69
- if (cryptoValue?.randomUUID) {
70
- return cryptoValue.randomUUID();
71
- }
72
- fallbackEventIdCounter = fallbackEventIdCounter + 1;
55
+ if (cryptoValue?.randomUUID) return cryptoValue.randomUUID();
56
+ fallbackEventIdCounter += 1;
73
57
  return `evt_${Date.now().toString(36)}_${fallbackEventIdCounter.toString(36)}`;
74
58
  };
75
- const isContextRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
59
+ const isContextRecord = (value)=>'object' == typeof value && null !== value && !Array.isArray(value);
76
60
  const contextRecordFrom = (value)=>{
77
- if (!value || !isContextRecord(value)) {
78
- return undefined;
79
- }
61
+ if (!value || !isContextRecord(value)) return;
80
62
  return value;
81
63
  };
82
64
  const errorFromUnknown = (error)=>{
83
65
  if (error instanceof Error) {
84
- const context = isContextRecord(error.context) ? error.context : undefined;
66
+ const context = isContextRecord(error.context) ? error.context : void 0;
85
67
  return {
86
68
  message: error.message,
87
69
  ...error.name ? {
@@ -95,17 +77,15 @@ const errorFromUnknown = (error)=>{
95
77
  } : {}
96
78
  };
97
79
  }
98
- if (typeof error === 'string') {
99
- return {
100
- message: error
101
- };
102
- }
103
- if (typeof error === 'object' && error !== null) {
80
+ if ('string' == typeof error) return {
81
+ message: error
82
+ };
83
+ if ('object' == typeof error && null !== error) {
104
84
  const value = error;
105
- const message = typeof value.message === 'string' ? value.message : 'Unknown error';
106
- const name = typeof value.name === 'string' ? value.name : undefined;
107
- const stack = typeof value.stack === 'string' ? value.stack : undefined;
108
- const context = isContextRecord(value.context) ? value.context : undefined;
85
+ const message = 'string' == typeof value.message ? value.message : 'Unknown error';
86
+ const name = 'string' == typeof value.name ? value.name : void 0;
87
+ const stack = 'string' == typeof value.stack ? value.stack : void 0;
88
+ const context = isContextRecord(value.context) ? value.context : void 0;
109
89
  return {
110
90
  message,
111
91
  ...name ? {
@@ -127,9 +107,7 @@ const registerHook = (hooks)=>(hook)=>{
127
107
  hooks.push(hook);
128
108
  const unsub = ()=>{
129
109
  const index = hooks.indexOf(hook);
130
- if (index >= 0) {
131
- hooks.splice(index, 1);
132
- }
110
+ if (index >= 0) hooks.splice(index, 1);
133
111
  };
134
112
  return {
135
113
  unsub
@@ -139,25 +117,13 @@ const registerErrorHook = (hooks)=>(hook)=>{
139
117
  hooks.push(hook);
140
118
  const unsub = ()=>{
141
119
  const index = hooks.indexOf(hook);
142
- if (index >= 0) {
143
- hooks.splice(index, 1);
144
- }
120
+ if (index >= 0) hooks.splice(index, 1);
145
121
  };
146
122
  return {
147
123
  unsub
148
124
  };
149
125
  };
150
- /**
151
- * runtime is part of the public LIVON API.
152
- *
153
- * @remarks
154
- * Parameter and return types are defined in the TypeScript signature.
155
- *
156
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
157
- *
158
- * @example
159
- * const result = runtime(undefined as never);
160
- */ const runtime = (inputOrModule, ...rest)=>{
126
+ const runtime = (inputOrModule, ...rest)=>{
161
127
  const input = 'modules' in inputOrModule ? inputOrModule : {
162
128
  modules: [
163
129
  inputOrModule,
@@ -174,17 +140,13 @@ const registerErrorHook = (hooks)=>(hook)=>{
174
140
  hooks.onError.forEach((handler)=>{
175
141
  try {
176
142
  handler(runtimeError, eventEnvelope, runtimeContext);
177
- } catch {
178
- // ignore secondary errors
179
- }
143
+ } catch {}
180
144
  });
181
145
  };
182
146
  const mergeContext = (base, update)=>{
183
147
  const left = contextRecordFrom(base);
184
148
  const right = contextRecordFrom(update);
185
- if (!left && !right) {
186
- return undefined;
187
- }
149
+ if (!left && !right) return;
188
150
  return {
189
151
  ...left ?? {},
190
152
  ...right ?? {}
@@ -193,9 +155,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
193
155
  const payloadFromEvent = (event)=>event.payload;
194
156
  const errorFromEvent = (event)=>event.error;
195
157
  const mergeEvent = (base, update)=>{
196
- if (!update) {
197
- return base;
198
- }
158
+ if (!update) return base;
199
159
  const nextId = update.id ?? base.id;
200
160
  const nextEvent = update.event ?? base.event;
201
161
  const nextStatus = update.status ?? base.status;
@@ -203,9 +163,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
203
163
  const nextContext = mergeContext(base.context, update.context);
204
164
  const nextPayload = payloadFromEvent(update) ?? payloadFromEvent(base);
205
165
  const nextError = errorFromEvent(update) ?? errorFromEvent(base);
206
- if (nextPayload === undefined && nextError === undefined) {
207
- throw new Error('Event envelope must contain payload or error.');
208
- }
166
+ if (void 0 === nextPayload && void 0 === nextError) throw new Error('Event envelope must contain payload or error.');
209
167
  const mergedEnvelopeBase = {
210
168
  ...base,
211
169
  id: nextId,
@@ -214,19 +172,15 @@ const registerErrorHook = (hooks)=>(hook)=>{
214
172
  metadata: nextMetadata,
215
173
  context: nextContext
216
174
  };
217
- if (nextPayload !== undefined && nextError !== undefined) {
218
- return {
219
- ...mergedEnvelopeBase,
220
- payload: nextPayload,
221
- error: nextError
222
- };
223
- }
224
- if (nextPayload !== undefined) {
225
- return {
226
- ...mergedEnvelopeBase,
227
- payload: nextPayload
228
- };
229
- }
175
+ if (void 0 !== nextPayload && void 0 !== nextError) return {
176
+ ...mergedEnvelopeBase,
177
+ payload: nextPayload,
178
+ error: nextError
179
+ };
180
+ if (void 0 !== nextPayload) return {
181
+ ...mergedEnvelopeBase,
182
+ payload: nextPayload
183
+ };
230
184
  const definedError = nextError;
231
185
  return {
232
186
  ...mergedEnvelopeBase,
@@ -237,13 +191,11 @@ const registerErrorHook = (hooks)=>(hook)=>{
237
191
  const { id: inputId, event, status: inputStatus, metadata: inputMetadata, context, payload, error } = emitInput;
238
192
  const roomMeta = roomName ? {
239
193
  room: roomName
240
- } : undefined;
194
+ } : void 0;
241
195
  const metadata = mergeMetadata(roomMeta, inputMetadata);
242
196
  const id = inputId ?? createEventId();
243
197
  const status = inputStatus ?? fallbackStatus;
244
- if (payload === undefined && error === undefined) {
245
- throw new Error('Emit input must contain payload or error.');
246
- }
198
+ if (void 0 === payload && void 0 === error) throw new Error('Emit input must contain payload or error.');
247
199
  const envelopeBase = {
248
200
  id,
249
201
  event,
@@ -251,19 +203,15 @@ const registerErrorHook = (hooks)=>(hook)=>{
251
203
  metadata,
252
204
  context
253
205
  };
254
- if (payload !== undefined && error !== undefined) {
255
- return {
256
- ...envelopeBase,
257
- payload,
258
- error
259
- };
260
- }
261
- if (payload !== undefined) {
262
- return {
263
- ...envelopeBase,
264
- payload
265
- };
266
- }
206
+ if (void 0 !== payload && void 0 !== error) return {
207
+ ...envelopeBase,
208
+ payload,
209
+ error
210
+ };
211
+ if (void 0 !== payload) return {
212
+ ...envelopeBase,
213
+ payload
214
+ };
267
215
  const definedError = error;
268
216
  return {
269
217
  ...envelopeBase,
@@ -281,9 +229,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
281
229
  };
282
230
  const invokeHook = (input)=>{
283
231
  const hook = input.hookChain[input.hookIndex];
284
- if (!hook) {
285
- return Promise.resolve(input.eventEnvelope);
286
- }
232
+ if (!hook) return Promise.resolve(input.eventEnvelope);
287
233
  let nextPromise;
288
234
  let nextCalled = false;
289
235
  const next = (update)=>{
@@ -297,9 +243,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
297
243
  return nextPromise;
298
244
  };
299
245
  const result = hook(input.eventEnvelope, input.runtimeContext, next);
300
- if (result === undefined && nextCalled) {
301
- return nextPromise ?? Promise.resolve(input.eventEnvelope);
302
- }
246
+ if (void 0 === result && nextCalled) return nextPromise ?? Promise.resolve(input.eventEnvelope);
303
247
  return Promise.resolve(result).then((value)=>value ?? nextPromise ?? input.eventEnvelope);
304
248
  };
305
249
  const runReceive = (eventEnvelope, runtimeContext)=>invokeHook({
@@ -419,11 +363,10 @@ const registerErrorHook = (hooks)=>(hook)=>{
419
363
  mod.register(registry);
420
364
  });
421
365
  };
422
-
423
366
  exports.runtime = __webpack_exports__.runtime;
424
- for(var __rspack_i in __webpack_exports__) {
425
- if(["runtime"].indexOf(__rspack_i) === -1) {
426
- exports[__rspack_i] = __webpack_exports__[__rspack_i];
427
- }
428
- }
429
- Object.defineProperty(exports, '__esModule', { value: true });
367
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
368
+ "runtime"
369
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
370
+ Object.defineProperty(exports, '__esModule', {
371
+ value: true
372
+ });
package/dist/runtime.d.ts CHANGED
@@ -5,7 +5,7 @@ import type { RuntimeStart } from './types.js';
5
5
  * @remarks
6
6
  * Parameter and return types are defined in the TypeScript signature.
7
7
  *
8
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
8
+ * @see https://livon.tech/docs/packages/runtime
9
9
  *
10
10
  * @example
11
11
  * const result = runtime(undefined as never);
package/dist/runtime.js CHANGED
@@ -1,5 +1,3 @@
1
-
2
- ;// CONCATENATED MODULE: ./src/runtime.ts
3
1
  const createHookStore = ()=>({
4
2
  onReceive: [],
5
3
  onSend: [],
@@ -17,9 +15,7 @@ const createState = ()=>{
17
15
  };
18
16
  };
19
17
  const mergeMetadata = (base, extra)=>{
20
- if (!base && !extra) {
21
- return undefined;
22
- }
18
+ if (!base && !extra) return;
23
19
  return {
24
20
  ...base ?? {},
25
21
  ...extra ?? {}
@@ -28,22 +24,18 @@ const mergeMetadata = (base, extra)=>{
28
24
  let fallbackEventIdCounter = 0;
29
25
  const createEventId = ()=>{
30
26
  const cryptoValue = globalThis.crypto;
31
- if (cryptoValue?.randomUUID) {
32
- return cryptoValue.randomUUID();
33
- }
34
- fallbackEventIdCounter = fallbackEventIdCounter + 1;
27
+ if (cryptoValue?.randomUUID) return cryptoValue.randomUUID();
28
+ fallbackEventIdCounter += 1;
35
29
  return `evt_${Date.now().toString(36)}_${fallbackEventIdCounter.toString(36)}`;
36
30
  };
37
- const isContextRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
31
+ const isContextRecord = (value)=>'object' == typeof value && null !== value && !Array.isArray(value);
38
32
  const contextRecordFrom = (value)=>{
39
- if (!value || !isContextRecord(value)) {
40
- return undefined;
41
- }
33
+ if (!value || !isContextRecord(value)) return;
42
34
  return value;
43
35
  };
44
36
  const errorFromUnknown = (error)=>{
45
37
  if (error instanceof Error) {
46
- const context = isContextRecord(error.context) ? error.context : undefined;
38
+ const context = isContextRecord(error.context) ? error.context : void 0;
47
39
  return {
48
40
  message: error.message,
49
41
  ...error.name ? {
@@ -57,17 +49,15 @@ const errorFromUnknown = (error)=>{
57
49
  } : {}
58
50
  };
59
51
  }
60
- if (typeof error === 'string') {
61
- return {
62
- message: error
63
- };
64
- }
65
- if (typeof error === 'object' && error !== null) {
52
+ if ('string' == typeof error) return {
53
+ message: error
54
+ };
55
+ if ('object' == typeof error && null !== error) {
66
56
  const value = error;
67
- const message = typeof value.message === 'string' ? value.message : 'Unknown error';
68
- const name = typeof value.name === 'string' ? value.name : undefined;
69
- const stack = typeof value.stack === 'string' ? value.stack : undefined;
70
- const context = isContextRecord(value.context) ? value.context : undefined;
57
+ const message = 'string' == typeof value.message ? value.message : 'Unknown error';
58
+ const name = 'string' == typeof value.name ? value.name : void 0;
59
+ const stack = 'string' == typeof value.stack ? value.stack : void 0;
60
+ const context = isContextRecord(value.context) ? value.context : void 0;
71
61
  return {
72
62
  message,
73
63
  ...name ? {
@@ -89,9 +79,7 @@ const registerHook = (hooks)=>(hook)=>{
89
79
  hooks.push(hook);
90
80
  const unsub = ()=>{
91
81
  const index = hooks.indexOf(hook);
92
- if (index >= 0) {
93
- hooks.splice(index, 1);
94
- }
82
+ if (index >= 0) hooks.splice(index, 1);
95
83
  };
96
84
  return {
97
85
  unsub
@@ -101,25 +89,13 @@ const registerErrorHook = (hooks)=>(hook)=>{
101
89
  hooks.push(hook);
102
90
  const unsub = ()=>{
103
91
  const index = hooks.indexOf(hook);
104
- if (index >= 0) {
105
- hooks.splice(index, 1);
106
- }
92
+ if (index >= 0) hooks.splice(index, 1);
107
93
  };
108
94
  return {
109
95
  unsub
110
96
  };
111
97
  };
112
- /**
113
- * runtime is part of the public LIVON API.
114
- *
115
- * @remarks
116
- * Parameter and return types are defined in the TypeScript signature.
117
- *
118
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
119
- *
120
- * @example
121
- * const result = runtime(undefined as never);
122
- */ const runtime = (inputOrModule, ...rest)=>{
98
+ const runtime = (inputOrModule, ...rest)=>{
123
99
  const input = 'modules' in inputOrModule ? inputOrModule : {
124
100
  modules: [
125
101
  inputOrModule,
@@ -136,17 +112,13 @@ const registerErrorHook = (hooks)=>(hook)=>{
136
112
  hooks.onError.forEach((handler)=>{
137
113
  try {
138
114
  handler(runtimeError, eventEnvelope, runtimeContext);
139
- } catch {
140
- // ignore secondary errors
141
- }
115
+ } catch {}
142
116
  });
143
117
  };
144
118
  const mergeContext = (base, update)=>{
145
119
  const left = contextRecordFrom(base);
146
120
  const right = contextRecordFrom(update);
147
- if (!left && !right) {
148
- return undefined;
149
- }
121
+ if (!left && !right) return;
150
122
  return {
151
123
  ...left ?? {},
152
124
  ...right ?? {}
@@ -155,9 +127,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
155
127
  const payloadFromEvent = (event)=>event.payload;
156
128
  const errorFromEvent = (event)=>event.error;
157
129
  const mergeEvent = (base, update)=>{
158
- if (!update) {
159
- return base;
160
- }
130
+ if (!update) return base;
161
131
  const nextId = update.id ?? base.id;
162
132
  const nextEvent = update.event ?? base.event;
163
133
  const nextStatus = update.status ?? base.status;
@@ -165,9 +135,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
165
135
  const nextContext = mergeContext(base.context, update.context);
166
136
  const nextPayload = payloadFromEvent(update) ?? payloadFromEvent(base);
167
137
  const nextError = errorFromEvent(update) ?? errorFromEvent(base);
168
- if (nextPayload === undefined && nextError === undefined) {
169
- throw new Error('Event envelope must contain payload or error.');
170
- }
138
+ if (void 0 === nextPayload && void 0 === nextError) throw new Error('Event envelope must contain payload or error.');
171
139
  const mergedEnvelopeBase = {
172
140
  ...base,
173
141
  id: nextId,
@@ -176,19 +144,15 @@ const registerErrorHook = (hooks)=>(hook)=>{
176
144
  metadata: nextMetadata,
177
145
  context: nextContext
178
146
  };
179
- if (nextPayload !== undefined && nextError !== undefined) {
180
- return {
181
- ...mergedEnvelopeBase,
182
- payload: nextPayload,
183
- error: nextError
184
- };
185
- }
186
- if (nextPayload !== undefined) {
187
- return {
188
- ...mergedEnvelopeBase,
189
- payload: nextPayload
190
- };
191
- }
147
+ if (void 0 !== nextPayload && void 0 !== nextError) return {
148
+ ...mergedEnvelopeBase,
149
+ payload: nextPayload,
150
+ error: nextError
151
+ };
152
+ if (void 0 !== nextPayload) return {
153
+ ...mergedEnvelopeBase,
154
+ payload: nextPayload
155
+ };
192
156
  const definedError = nextError;
193
157
  return {
194
158
  ...mergedEnvelopeBase,
@@ -199,13 +163,11 @@ const registerErrorHook = (hooks)=>(hook)=>{
199
163
  const { id: inputId, event, status: inputStatus, metadata: inputMetadata, context, payload, error } = emitInput;
200
164
  const roomMeta = roomName ? {
201
165
  room: roomName
202
- } : undefined;
166
+ } : void 0;
203
167
  const metadata = mergeMetadata(roomMeta, inputMetadata);
204
168
  const id = inputId ?? createEventId();
205
169
  const status = inputStatus ?? fallbackStatus;
206
- if (payload === undefined && error === undefined) {
207
- throw new Error('Emit input must contain payload or error.');
208
- }
170
+ if (void 0 === payload && void 0 === error) throw new Error('Emit input must contain payload or error.');
209
171
  const envelopeBase = {
210
172
  id,
211
173
  event,
@@ -213,19 +175,15 @@ const registerErrorHook = (hooks)=>(hook)=>{
213
175
  metadata,
214
176
  context
215
177
  };
216
- if (payload !== undefined && error !== undefined) {
217
- return {
218
- ...envelopeBase,
219
- payload,
220
- error
221
- };
222
- }
223
- if (payload !== undefined) {
224
- return {
225
- ...envelopeBase,
226
- payload
227
- };
228
- }
178
+ if (void 0 !== payload && void 0 !== error) return {
179
+ ...envelopeBase,
180
+ payload,
181
+ error
182
+ };
183
+ if (void 0 !== payload) return {
184
+ ...envelopeBase,
185
+ payload
186
+ };
229
187
  const definedError = error;
230
188
  return {
231
189
  ...envelopeBase,
@@ -243,9 +201,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
243
201
  };
244
202
  const invokeHook = (input)=>{
245
203
  const hook = input.hookChain[input.hookIndex];
246
- if (!hook) {
247
- return Promise.resolve(input.eventEnvelope);
248
- }
204
+ if (!hook) return Promise.resolve(input.eventEnvelope);
249
205
  let nextPromise;
250
206
  let nextCalled = false;
251
207
  const next = (update)=>{
@@ -259,9 +215,7 @@ const registerErrorHook = (hooks)=>(hook)=>{
259
215
  return nextPromise;
260
216
  };
261
217
  const result = hook(input.eventEnvelope, input.runtimeContext, next);
262
- if (result === undefined && nextCalled) {
263
- return nextPromise ?? Promise.resolve(input.eventEnvelope);
264
- }
218
+ if (void 0 === result && nextCalled) return nextPromise ?? Promise.resolve(input.eventEnvelope);
265
219
  return Promise.resolve(result).then((value)=>value ?? nextPromise ?? input.eventEnvelope);
266
220
  };
267
221
  const runReceive = (eventEnvelope, runtimeContext)=>invokeHook({
@@ -381,5 +335,4 @@ const registerErrorHook = (hooks)=>(hook)=>{
381
335
  mod.register(registry);
382
336
  });
383
337
  };
384
-
385
338
  export { runtime };
package/dist/types.cjs CHANGED
@@ -1,29 +1,18 @@
1
1
  "use strict";
2
- const __rslib_import_meta_url__ = /*#__PURE__*/ (function () {
3
- return typeof document === 'undefined'
4
- ? new (require('url'.replace('', '')).URL)('file:' + __filename).href
5
- : (document.currentScript && document.currentScript.src) ||
6
- new URL('main.js', document.baseURI).href;
7
- })();
8
- ;
9
- // The require scope
10
2
  var __webpack_require__ = {};
11
-
12
- // webpack/runtime/make_namespace_object
13
- (() => {
14
- // define __esModule on exports
15
- __webpack_require__.r = (exports) => {
16
- if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
17
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
18
- }
19
- Object.defineProperty(exports, '__esModule', { value: true });
20
- };
3
+ (()=>{
4
+ __webpack_require__.r = (exports1)=>{
5
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
6
+ value: 'Module'
7
+ });
8
+ Object.defineProperty(exports1, '__esModule', {
9
+ value: true
10
+ });
11
+ };
21
12
  })();
22
13
  var __webpack_exports__ = {};
23
14
  __webpack_require__.r(__webpack_exports__);
24
-
25
-
26
- for(var __rspack_i in __webpack_exports__) {
27
- exports[__rspack_i] = __webpack_exports__[__rspack_i];
28
- }
29
- Object.defineProperty(exports, '__esModule', { value: true });
15
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
16
+ Object.defineProperty(exports, '__esModule', {
17
+ value: true
18
+ });
package/dist/types.js CHANGED
@@ -1,4 +0,0 @@
1
-
2
- ;// CONCATENATED MODULE: ./src/types.ts
3
-
4
-
package/package.json CHANGED
@@ -1,49 +1,43 @@
1
1
  {
2
2
  "name": "@livon/runtime",
3
- "version": "0.27.0-rc.5",
3
+ "version": "0.28.0-rc.4",
4
4
  "private": false,
5
5
  "type": "module",
6
+ "description": "Deterministic event pipeline runtime for LIVON.",
6
7
  "publishConfig": {
7
8
  "access": "public"
8
9
  },
10
+ "main": "./dist/index.cjs",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
9
13
  "files": [
10
14
  "dist",
11
15
  "README.md",
12
- "LICENCE.md",
16
+ "LICENSE.md",
13
17
  "THIRD_PARTY_NOTICES.md"
14
18
  ],
19
+ "license": "MIT",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/live-input-vector-output-node/livon-ts.git",
23
+ "directory": "packages/runtime"
24
+ },
25
+ "homepage": "https://livon.tech/docs/packages/runtime",
26
+ "bugs": {
27
+ "url": "https://github.com/live-input-vector-output-node/livon-ts/issues"
28
+ },
29
+ "keywords": [
30
+ "livon",
31
+ "runtime",
32
+ "api",
33
+ "events",
34
+ "typescript"
35
+ ],
15
36
  "exports": {
16
37
  ".": {
17
38
  "types": "./dist/index.d.ts",
18
- "development": "./src/index.ts",
19
39
  "import": "./dist/index.js",
20
40
  "require": "./dist/index.cjs"
21
- },
22
- "./mini": {
23
- "types": "./dist/mini/index.d.ts",
24
- "import": "./dist/mini/index.js",
25
- "require": "./dist/mini/index.cjs"
26
41
  }
27
- },
28
- "dependencies": {},
29
- "devDependencies": {
30
- "@rslib/core": "latest",
31
- "@typescript-eslint/eslint-plugin": "8.54.0",
32
- "@typescript-eslint/parser": "8.54.0",
33
- "eslint": "9.0.0",
34
- "typescript": "latest",
35
- "vitest": "latest",
36
- "@livon/config": "0.27.0-rc.5"
37
- },
38
- "scripts": {
39
- "build": "rslib build",
40
- "postbuild": "rslib build -c rslib.mini.config.ts",
41
- "build:watch": "rslib dev",
42
- "dev": "true",
43
- "lint": "eslint .",
44
- "typecheck": "tsc -p tsconfig.json --noEmit",
45
- "test": "vitest run -c vitest.unit.config.ts",
46
- "test:unit": "vitest run -c vitest.unit.config.ts",
47
- "test:integration": "vitest run -c vitest.integration.config.ts"
48
42
  }
49
43
  }
@@ -1 +0,0 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,_)=>{for(var r in _)__webpack_require__.o(_,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:_[r]})},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{runtime:()=>external_runtime_cjs_namespaceObject.runtime});const external_runtime_cjs_namespaceObject=require("./runtime.cjs");for(var __rspack_i in exports.runtime=__webpack_exports__.runtime,__webpack_exports__)-1===["runtime"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,8 +0,0 @@
1
- /**
2
- * Public package entrypoint for `@livon/runtime`.
3
- *
4
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
5
- */
6
- export { runtime } from './runtime.js';
7
- export type { RuntimeEventContext, EventStatus, EventError, EventEnvelopeBase, EventEnvelopePayload, EventEnvelopeError, EventEnvelope, EventAck, EmitInputBase, EmitInputPayload, EmitInputError, EmitInput, EmitEvent, EmitReceive, EmitSend, EmitError, RoomSelector, StateGet, StateSet, RuntimeState, RuntimeContext, RuntimeHook, RuntimeModule, RuntimeOnError, RuntimeInput, RuntimeModuleRegister, RuntimeHookRegister, RuntimeOnErrorRegister, RuntimeHookSubscription, RuntimeUnsubscribe, RuntimeRegistry, RuntimeStart, PartialEventEnvelopeBase, PartialEventEnvelopePayload, PartialEventEnvelopeError, PartialEventEnvelopeEmpty, PartialEventEnvelope, } from './types.js';
8
- export type { RuntimeStart as RuntimeFactory } from './types.js';
@@ -1 +0,0 @@
1
- import{runtime as r}from"./runtime.js";export{r as runtime};
@@ -1 +0,0 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{runtime:()=>runtime});const createHookStore=()=>({onReceive:[],onSend:[],onError:[]}),createState=()=>{let e=new Map;return{get:r=>e.get(r),set:(r,t)=>{e.set(r,t)}}},mergeMetadata=(e,r)=>{if(e||r)return{...e??{},...r??{}}};let fallbackEventIdCounter=0;const createEventId=()=>{let e=globalThis.crypto;return e?.randomUUID?e.randomUUID():(fallbackEventIdCounter+=1,`evt_${Date.now().toString(36)}_${fallbackEventIdCounter.toString(36)}`)},isContextRecord=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),contextRecordFrom=e=>{if(e&&isContextRecord(e))return e},errorFromUnknown=e=>{if(e instanceof Error){let r=isContextRecord(e.context)?e.context:void 0;return{message:e.message,...e.name?{name:e.name}:{},...e.stack?{stack:e.stack}:{},...r?{context:r}:{}}}if("string"==typeof e)return{message:e};if("object"==typeof e&&null!==e){let r="string"==typeof e.message?e.message:"Unknown error",t="string"==typeof e.name?e.name:void 0,o="string"==typeof e.stack?e.stack:void 0,n=isContextRecord(e.context)?e.context:void 0;return{message:r,...t?{name:t}:{},...o?{stack:o}:{},...n?{context:n}:{}}}return{message:"Unknown error"}},registerHook=e=>r=>(e.push(r),{unsub:()=>{let t=e.indexOf(r);t>=0&&e.splice(t,1)}}),registerErrorHook=e=>r=>(e.push(r),{unsub:()=>{let t=e.indexOf(r);t>=0&&e.splice(t,1)}}),runtime=(e,...r)=>{let t=("modules"in e?e:{modules:[e,...r]}).modules,o=createState(),n=createHookStore(),a=registerHook(n.onReceive),i=registerHook(n.onSend),s=registerErrorHook(n.onError),c=({runtimeError:e,eventEnvelope:r,runtimeContext:t})=>{n.onError.forEach(o=>{try{o(e,r,t)}catch{}})},_=(e,r)=>{let t=contextRecordFrom(e),o=contextRecordFrom(r);if(t||o)return{...t??{},...o??{}}},u=({emitInput:e,fallbackStatus:r,roomName:t})=>{let{id:o,event:n,status:a,metadata:i,context:s,payload:c,error:_}=e,u=mergeMetadata(t?{room:t}:void 0,i),l=o??createEventId();if(void 0===c&&void 0===_)throw Error("Emit input must contain payload or error.");let d={id:l,event:n,status:a??r,metadata:u,context:s};return void 0!==c&&void 0!==_?{...d,payload:c,error:_}:void 0!==c?{...d,payload:c}:{...d,error:_}},l=({runtimeError:e,eventEnvelope:r})=>{let t=errorFromUnknown(e),o=_(r.context,t.context);return{...r,error:t,context:o}},d=e=>{let r,t=e.hookChain[e.hookIndex];if(!t)return Promise.resolve(e.eventEnvelope);let o=!1,n=t(e.eventEnvelope,e.runtimeContext,t=>(o=!0,r=d({hookChain:e.hookChain,hookIndex:e.hookIndex+1,eventEnvelope:((e,r)=>{if(!r)return e;let t=r.id??e.id,o=r.event??e.event,n=r.status??e.status,a=mergeMetadata(e.metadata,r.metadata),i=_(e.context,r.context),s=r.payload??e.payload,c=r.error??e.error;if(void 0===s&&void 0===c)throw Error("Event envelope must contain payload or error.");let u={...e,id:t,event:o,status:n,metadata:a,context:i};return void 0!==s&&void 0!==c?{...u,payload:s,error:c}:void 0!==s?{...u,payload:s}:{...u,error:c}})(e.eventEnvelope,t),runtimeContext:e.runtimeContext})));return void 0===n&&o?r??Promise.resolve(e.eventEnvelope):Promise.resolve(n).then(t=>t??r??e.eventEnvelope)},m=({runtimeContext:e,roomName:r})=>async t=>{let o=u({emitInput:t,fallbackStatus:"sending",roomName:r});try{return await d({hookChain:n.onSend,hookIndex:0,eventEnvelope:o,runtimeContext:e}),{ok:!0}}catch(t){let r=l({runtimeError:t,eventEnvelope:o});return c({runtimeError:t,eventEnvelope:r,runtimeContext:e}),{ok:!1,error:r.error.message}}},p=e=>{let r={},t={runtimeContext:r,roomName:e};return r.emitReceive=(({runtimeContext:e,roomName:r})=>async t=>{let o=u({emitInput:t,fallbackStatus:"receiving",roomName:r});try{return await d({hookChain:n.onReceive,hookIndex:0,eventEnvelope:o,runtimeContext:e}),{ok:!0}}catch(t){let r=l({runtimeError:t,eventEnvelope:o});return c({runtimeError:t,eventEnvelope:r,runtimeContext:e}),{ok:!1,error:r.error.message}}})(t),r.emitSend=m(t),r.emitError=(({runtimeContext:e,roomName:r})=>async t=>{let o=u({emitInput:t,fallbackStatus:"sending",roomName:r}),n=o.error??{message:"Unknown error"},a={...o,error:n};return c({runtimeError:n,eventEnvelope:a,runtimeContext:e}),{ok:!0}})(t),r.emitEvent=async e=>m(t)(e),r.room=e=>p(e),r.state=o,r},v=p(),k={emitReceive:v.emitReceive,emitSend:v.emitSend,emitError:v.emitError,onReceive:a,onSend:i,onError:s,state:o};t.forEach(e=>{e.register(k)})};for(var __rspack_i in exports.runtime=__webpack_exports__.runtime,__webpack_exports__)-1===["runtime"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,13 +0,0 @@
1
- import type { RuntimeStart } from './types.js';
2
- /**
3
- * runtime is part of the public LIVON API.
4
- *
5
- * @remarks
6
- * Parameter and return types are defined in the TypeScript signature.
7
- *
8
- * @see https://live-input-vector-output-node.github.io/livon-ts/docs/packages/runtime
9
- *
10
- * @example
11
- * const result = runtime(undefined as never);
12
- */
13
- export declare const runtime: RuntimeStart;
@@ -1 +0,0 @@
1
- let e=(e,t)=>{if(e||t)return{...e??{},...t??{}}},t=0,r=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),o=e=>{if(e&&r(e))return e},n=e=>t=>(e.push(t),{unsub:()=>{let r=e.indexOf(t);r>=0&&e.splice(r,1)}}),i=(i,...a)=>{let s,l,v=("modules"in i?i:{modules:[i,...a]}).modules,m=(s=new Map,{get:e=>s.get(e),set:(e,t)=>{s.set(e,t)}}),u=[],d=[],c=[],p=n(u),E=n(d),h=(l=c,e=>(l.push(e),{unsub:()=>{let t=l.indexOf(e);t>=0&&l.splice(t,1)}})),k=({runtimeError:e,eventEnvelope:t,runtimeContext:r})=>{c.forEach(o=>{try{o(e,t,r)}catch{}})},f=(e,t)=>{let r=o(e),n=o(t);if(r||n)return{...r??{},...n??{}}},x=({emitInput:r,fallbackStatus:o,roomName:n})=>{let i,{id:a,event:s,status:l,metadata:v,context:m,payload:u,error:d}=r,c=e(n?{room:n}:void 0,v),p=a??(i=globalThis.crypto,i?.randomUUID?i.randomUUID():(t+=1,`evt_${Date.now().toString(36)}_${t.toString(36)}`));if(void 0===u&&void 0===d)throw Error("Emit input must contain payload or error.");let E={id:p,event:s,status:l??o,metadata:c,context:m};return void 0!==u&&void 0!==d?{...E,payload:u,error:d}:void 0!==u?{...E,payload:u}:{...E,error:d}},g=({runtimeError:e,eventEnvelope:t})=>{let o=(e=>{if(e instanceof Error){let t=r(e.context)?e.context:void 0;return{message:e.message,...e.name?{name:e.name}:{},...e.stack?{stack:e.stack}:{},...t?{context:t}:{}}}if("string"==typeof e)return{message:e};if("object"==typeof e&&null!==e){let t="string"==typeof e.message?e.message:"Unknown error",o="string"==typeof e.name?e.name:void 0,n="string"==typeof e.stack?e.stack:void 0,i=r(e.context)?e.context:void 0;return{message:t,...o?{name:o}:{},...n?{stack:n}:{},...i?{context:i}:{}}}return{message:"Unknown error"}})(e),n=f(t.context,o.context);return{...t,error:o,context:n}},y=t=>{let r,o=t.hookChain[t.hookIndex];if(!o)return Promise.resolve(t.eventEnvelope);let n=!1,i=o(t.eventEnvelope,t.runtimeContext,o=>(n=!0,r=y({hookChain:t.hookChain,hookIndex:t.hookIndex+1,eventEnvelope:((t,r)=>{if(!r)return t;let o=r.id??t.id,n=r.event??t.event,i=r.status??t.status,a=e(t.metadata,r.metadata),s=f(t.context,r.context),l=r.payload??t.payload,v=r.error??t.error;if(void 0===l&&void 0===v)throw Error("Event envelope must contain payload or error.");let m={...t,id:o,event:n,status:i,metadata:a,context:s};return void 0!==l&&void 0!==v?{...m,payload:l,error:v}:void 0!==l?{...m,payload:l}:{...m,error:v}})(t.eventEnvelope,o),runtimeContext:t.runtimeContext})));return void 0===i&&n?r??Promise.resolve(t.eventEnvelope):Promise.resolve(i).then(e=>e??r??t.eventEnvelope)},C=({runtimeContext:e,roomName:t})=>async r=>{let o=x({emitInput:r,fallbackStatus:"sending",roomName:t});try{return await y({hookChain:d,hookIndex:0,eventEnvelope:o,runtimeContext:e}),{ok:!0}}catch(r){let t=g({runtimeError:r,eventEnvelope:o});return k({runtimeError:r,eventEnvelope:t,runtimeContext:e}),{ok:!1,error:t.error.message}}},w=e=>{let t={},r={runtimeContext:t,roomName:e};return t.emitReceive=(({runtimeContext:e,roomName:t})=>async r=>{let o=x({emitInput:r,fallbackStatus:"receiving",roomName:t});try{return await y({hookChain:u,hookIndex:0,eventEnvelope:o,runtimeContext:e}),{ok:!0}}catch(r){let t=g({runtimeError:r,eventEnvelope:o});return k({runtimeError:r,eventEnvelope:t,runtimeContext:e}),{ok:!1,error:t.error.message}}})(r),t.emitSend=C(r),t.emitError=(({runtimeContext:e,roomName:t})=>async r=>{let o=x({emitInput:r,fallbackStatus:"sending",roomName:t}),n=o.error??{message:"Unknown error"},i={...o,error:n};return k({runtimeError:n,eventEnvelope:i,runtimeContext:e}),{ok:!0}})(r),t.emitEvent=async e=>C(r)(e),t.room=e=>w(e),t.state=m,t},b=w(),S={emitReceive:b.emitReceive,emitSend:b.emitSend,emitError:b.emitError,onReceive:p,onSend:E,onError:h,state:m};v.forEach(e=>{e.register(S)})};export{i as runtime};
@@ -1 +0,0 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};for(var __rspack_i in __webpack_require__.r(__webpack_exports__),__webpack_exports__)exports[__rspack_i]=__webpack_exports__[__rspack_i];Object.defineProperty(exports,"__esModule",{value:!0});
@@ -1,143 +0,0 @@
1
- export interface RuntimeEventContext {
2
- }
3
- export type EventStatus = 'sending' | 'receiving' | 'failed';
4
- export interface EventError {
5
- message: string;
6
- name?: string;
7
- stack?: string;
8
- context?: Readonly<RuntimeEventContext>;
9
- }
10
- export interface EventEnvelopeBase {
11
- id: string;
12
- event: string;
13
- status: EventStatus;
14
- metadata?: Readonly<Record<string, unknown>>;
15
- context?: RuntimeEventContext;
16
- }
17
- export interface EventEnvelopePayload extends EventEnvelopeBase {
18
- payload: Uint8Array;
19
- error?: EventError;
20
- }
21
- export interface EventEnvelopeError extends EventEnvelopeBase {
22
- error: EventError;
23
- payload?: Uint8Array;
24
- }
25
- export type EventEnvelope = EventEnvelopePayload | EventEnvelopeError;
26
- export interface EmitInputBase {
27
- id?: string;
28
- event: string;
29
- status?: EventStatus;
30
- metadata?: Readonly<Record<string, unknown>>;
31
- context?: RuntimeEventContext;
32
- }
33
- export interface EmitInputPayload extends EmitInputBase {
34
- payload: Uint8Array;
35
- error?: EventError;
36
- }
37
- export interface EmitInputError extends EmitInputBase {
38
- error: EventError;
39
- payload?: Uint8Array;
40
- }
41
- export type EmitInput = EmitInputPayload | EmitInputError;
42
- export interface EventAck {
43
- ok: boolean;
44
- error?: string;
45
- metadata?: Readonly<Record<string, unknown>>;
46
- }
47
- export interface EmitEvent {
48
- (input: EmitInput): Promise<EventAck>;
49
- }
50
- export interface EmitReceive {
51
- (input: EmitInput): Promise<EventAck>;
52
- }
53
- export interface EmitSend {
54
- (input: EmitInput): Promise<EventAck>;
55
- }
56
- export interface EmitError {
57
- (input: EmitInput): Promise<EventAck>;
58
- }
59
- export interface RoomSelector {
60
- (name: string): RuntimeContext;
61
- }
62
- export interface StateGet {
63
- <T = unknown>(key: string): T | undefined;
64
- }
65
- export interface StateSet {
66
- <T = unknown>(key: string, value: T): void;
67
- }
68
- export interface RuntimeState {
69
- get: StateGet;
70
- set: StateSet;
71
- }
72
- export interface RuntimeContext {
73
- emitEvent: EmitEvent;
74
- emitReceive: EmitReceive;
75
- emitSend: EmitSend;
76
- emitError: EmitError;
77
- room: RoomSelector;
78
- state: RuntimeState;
79
- }
80
- export interface RuntimeNext {
81
- (update?: PartialEventEnvelope): Promise<EventEnvelope>;
82
- }
83
- export interface RuntimeHook {
84
- (envelope: EventEnvelope, ctx: RuntimeContext, next: RuntimeNext): Promise<EventEnvelope> | EventEnvelope;
85
- }
86
- export interface RuntimeModule {
87
- name: string;
88
- register: RuntimeModuleRegister;
89
- }
90
- export interface RuntimeOnError {
91
- (error: unknown, envelope: EventEnvelope, ctx: RuntimeContext): void;
92
- }
93
- export interface RuntimeHookSubscription {
94
- unsub: RuntimeUnsubscribe;
95
- }
96
- export interface RuntimeUnsubscribe {
97
- (): void;
98
- }
99
- export interface RuntimeInput {
100
- modules: readonly RuntimeModule[];
101
- }
102
- export interface RuntimeModuleRegister {
103
- (registry: RuntimeRegistry): void;
104
- }
105
- export interface RuntimeHookRegister {
106
- (hook: RuntimeHook): RuntimeHookSubscription;
107
- }
108
- export interface RuntimeOnErrorRegister {
109
- (hook: RuntimeOnError): RuntimeHookSubscription;
110
- }
111
- export interface RuntimeRegistry {
112
- emitReceive: EmitReceive;
113
- emitSend: EmitSend;
114
- emitError: EmitError;
115
- onReceive: RuntimeHookRegister;
116
- onSend: RuntimeHookRegister;
117
- onError: RuntimeOnErrorRegister;
118
- state: RuntimeState;
119
- }
120
- export interface PartialEventEnvelopeBase {
121
- id?: string;
122
- event?: string;
123
- status?: EventStatus;
124
- metadata?: Readonly<Record<string, unknown>>;
125
- context?: RuntimeEventContext;
126
- }
127
- export interface PartialEventEnvelopePayload extends PartialEventEnvelopeBase {
128
- payload?: Uint8Array;
129
- error?: EventError;
130
- }
131
- export interface PartialEventEnvelopeError extends PartialEventEnvelopeBase {
132
- error?: EventError;
133
- payload?: Uint8Array;
134
- }
135
- export interface PartialEventEnvelopeEmpty extends PartialEventEnvelopeBase {
136
- payload?: undefined;
137
- error?: undefined;
138
- }
139
- export type PartialEventEnvelope = PartialEventEnvelopePayload | PartialEventEnvelopeError | PartialEventEnvelopeEmpty;
140
- export interface RuntimeStart {
141
- (...modules: RuntimeModule[]): void;
142
- (input: RuntimeInput): void;
143
- }
File without changes
File without changes