@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 +18 -5
- package/THIRD_PARTY_NOTICES.md +1 -28
- package/dist/index.cjs +25 -49
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -10
- package/dist/runtime.cjs +68 -125
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +43 -90
- package/dist/types.cjs +13 -24
- package/dist/types.js +0 -4
- package/package.json +23 -29
- package/dist/mini/index.cjs +0 -1
- package/dist/mini/index.d.ts +0 -8
- package/dist/mini/index.js +0 -1
- package/dist/mini/runtime.cjs +0 -1
- package/dist/mini/runtime.d.ts +0 -13
- package/dist/mini/runtime.js +0 -1
- package/dist/mini/types.cjs +0 -1
- package/dist/mini/types.d.ts +0 -143
- package/dist/mini/types.js +0 -0
- /package/{LICENCE.md → LICENSE.md} +0 -0
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
|
+
[](https://www.npmjs.com/package/@livon/runtime)
|
|
7
|
+
[](https://libraries.io/npm/%40livon%2Fruntime)
|
|
8
|
+
[](https://github.com/live-input-vector-output-node/livon-ts/actions/workflows/code-quality.yml)
|
|
9
|
+
[](https://www.npmjs.com/package/@livon/runtime)
|
|
10
|
+
[](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://
|
|
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://
|
|
154
|
-
- [@livon/schema](https://
|
|
155
|
-
- [Runtime Design](https://
|
|
156
|
-
- [Event Flow](https://
|
|
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)
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,28 +1 @@
|
|
|
1
|
-
|
|
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
|
-
|
|
13
|
-
(()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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://
|
|
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
|
-
|
|
13
|
-
(()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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)=>
|
|
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 :
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
106
|
-
const name = typeof value.name
|
|
107
|
-
const stack = typeof value.stack
|
|
108
|
-
const context = isContextRecord(value.context) ? value.context :
|
|
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 (
|
|
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 (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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
|
-
} :
|
|
194
|
+
} : void 0;
|
|
241
195
|
const metadata = mergeMetadata(roomMeta, inputMetadata);
|
|
242
196
|
const id = inputId ?? createEventId();
|
|
243
197
|
const status = inputStatus ?? fallbackStatus;
|
|
244
|
-
if (
|
|
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 (
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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 (
|
|
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
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
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://
|
|
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
|
-
|
|
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)=>
|
|
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 :
|
|
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
|
|
61
|
-
|
|
62
|
-
|
|
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
|
|
68
|
-
const name = typeof value.name
|
|
69
|
-
const stack = typeof value.stack
|
|
70
|
-
const context = isContextRecord(value.context) ? value.context :
|
|
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 (
|
|
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 (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
} :
|
|
166
|
+
} : void 0;
|
|
203
167
|
const metadata = mergeMetadata(roomMeta, inputMetadata);
|
|
204
168
|
const id = inputId ?? createEventId();
|
|
205
169
|
const status = inputStatus ?? fallbackStatus;
|
|
206
|
-
if (
|
|
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 (
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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 (
|
|
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
|
-
|
|
13
|
-
(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
package/package.json
CHANGED
|
@@ -1,49 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livon/runtime",
|
|
3
|
-
"version": "0.
|
|
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
|
-
"
|
|
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
|
}
|
package/dist/mini/index.cjs
DELETED
|
@@ -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});
|
package/dist/mini/index.d.ts
DELETED
|
@@ -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';
|
package/dist/mini/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{runtime as r}from"./runtime.js";export{r as runtime};
|
package/dist/mini/runtime.cjs
DELETED
|
@@ -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});
|
package/dist/mini/runtime.d.ts
DELETED
|
@@ -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;
|
package/dist/mini/runtime.js
DELETED
|
@@ -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};
|
package/dist/mini/types.cjs
DELETED
|
@@ -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});
|
package/dist/mini/types.d.ts
DELETED
|
@@ -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
|
-
}
|
package/dist/mini/types.js
DELETED
|
File without changes
|
|
File without changes
|