@soundworks/core 4.0.0-alpha.28 → 4.0.0-alpha.29
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/.jsdoc +3 -1
- package/CHANGELOG.md +11 -5
- package/package.json +5 -5
- package/src/client/Client.js +78 -83
- package/src/client/{Context.js → ClientContext.js} +48 -38
- package/src/client/ClientContextManager.js +115 -0
- package/src/client/{Plugin.js → ClientPlugin.js} +22 -18
- package/src/client/{PluginManager.js → ClientPluginManager.js} +39 -35
- package/src/client/{Socket.js → ClientSocket.js} +54 -65
- package/src/client/{StateManager.js → ClientStateManager.js} +7 -8
- package/src/client/index.js +17 -41
- package/src/common/BasePlugin.js +56 -51
- package/src/common/BasePluginManager.js +175 -139
- package/src/common/BaseStateManager.js +316 -120
- package/src/common/BatchedTransport.js +24 -24
- package/src/common/ParameterBag.js +18 -6
- package/src/common/PromiseStore.js +1 -0
- package/src/common/{BaseSharedState.js → SharedState.js} +271 -199
- package/src/common/{BaseSharedStateCollection.js → SharedStateCollection.js} +92 -61
- package/src/common/logger.js +5 -0
- package/src/common/shared-state-types.js +76 -0
- package/src/common/version.js +1 -1
- package/src/server/Server.js +391 -354
- package/src/server/ServerClient.js +73 -0
- package/src/server/{Context.js → ServerContext.js} +85 -66
- package/src/server/{ContextManager.js → ServerContextManager.js} +98 -85
- package/src/server/{Plugin.js → ServerPlugin.js} +10 -24
- package/src/server/{PluginManager.js → ServerPluginManager.js} +76 -69
- package/src/server/{Socket.js → ServerSocket.js} +19 -18
- package/src/server/{Sockets.js → ServerSockets.js} +36 -27
- package/src/server/ServerStateManager.js +515 -0
- package/src/{common → server}/SharedStatePrivate.js +61 -26
- package/src/server/audit-schema.js +1 -1
- package/src/server/crypto.js +2 -0
- package/src/server/index.js +18 -21
- package/types/client/Client.d.ts +74 -95
- package/types/client/{Context.d.ts → ClientContext.d.ts} +25 -26
- package/types/client/{ContextManager.d.ts → ClientContextManager.d.ts} +19 -22
- package/types/client/{Plugin.d.ts → ClientPlugin.d.ts} +17 -20
- package/types/client/{PluginManager.d.ts → ClientPluginManager.d.ts} +13 -36
- package/types/client/ClientSocket.d.ts +74 -0
- package/types/client/{StateManager.d.ts → ClientStateManager.d.ts} +11 -15
- package/types/client/index.d.ts +26 -2
- package/types/common/BasePlugin.d.ts +52 -46
- package/types/common/BasePluginManager.d.ts +68 -44
- package/types/common/BaseStateManager.d.ts +207 -97
- package/types/common/BatchedTransport.d.ts +1 -5
- package/types/common/ParameterBag.d.ts +16 -18
- package/types/common/PromiseStore.d.ts +1 -1
- package/types/common/SharedState.d.ts +297 -0
- package/types/common/{BaseSharedStateCollection.d.ts → SharedStateCollection.d.ts} +34 -18
- package/types/common/constants.d.ts +0 -2
- package/types/common/logger.d.ts +2 -1
- package/types/common/shared-state-types.d.ts +83 -0
- package/types/common/sockets-utils.d.ts +0 -5
- package/types/common/version.d.ts +1 -2
- package/types/server/Server.d.ts +78 -132
- package/types/server/ServerClient.d.ts +45 -0
- package/types/server/{Context.d.ts → ServerContext.d.ts} +53 -43
- package/types/server/ServerContextManager.d.ts +80 -0
- package/types/server/{Plugin.d.ts → ServerPlugin.d.ts} +19 -33
- package/types/server/{PluginManager.d.ts → ServerPluginManager.d.ts} +39 -37
- package/types/server/ServerSocket.d.ts +85 -0
- package/types/server/ServerSockets.d.ts +50 -0
- package/types/server/ServerStateManager.d.ts +189 -0
- package/types/server/SharedStatePrivate.d.ts +21 -0
- package/types/server/audit-network-latency.worker.d.ts +1 -2
- package/types/server/audit-schema.d.ts +0 -1
- package/types/server/crypto.d.ts +2 -1
- package/types/server/index.d.ts +24 -2
- package/src/client/ContextManager.js +0 -111
- package/src/client/SharedState.js +0 -84
- package/src/client/SharedStateCollection.js +0 -38
- package/src/server/Client.js +0 -55
- package/src/server/SharedState.js +0 -85
- package/src/server/SharedStateCollection.js +0 -39
- package/src/server/StateManager.js +0 -696
- package/types/client/Client.d.ts.map +0 -1
- package/types/client/Context.d.ts.map +0 -1
- package/types/client/ContextManager.d.ts.map +0 -1
- package/types/client/Plugin.d.ts.map +0 -1
- package/types/client/PluginManager.d.ts.map +0 -1
- package/types/client/SharedState.d.ts +0 -85
- package/types/client/SharedState.d.ts.map +0 -1
- package/types/client/SharedStateCollection.d.ts +0 -41
- package/types/client/SharedStateCollection.d.ts.map +0 -1
- package/types/client/Socket.d.ts +0 -149
- package/types/client/Socket.d.ts.map +0 -1
- package/types/client/StateManager.d.ts.map +0 -1
- package/types/client/index.d.ts.map +0 -1
- package/types/common/BasePlugin.d.ts.map +0 -1
- package/types/common/BasePluginManager.d.ts.map +0 -1
- package/types/common/BaseSharedState.d.ts +0 -244
- package/types/common/BaseSharedState.d.ts.map +0 -1
- package/types/common/BaseSharedStateCollection.d.ts.map +0 -1
- package/types/common/BaseStateManager.d.ts.map +0 -1
- package/types/common/BatchedTransport.d.ts.map +0 -1
- package/types/common/ParameterBag.d.ts.map +0 -1
- package/types/common/PromiseStore.d.ts.map +0 -1
- package/types/common/SharedStatePrivate.d.ts +0 -21
- package/types/common/SharedStatePrivate.d.ts.map +0 -1
- package/types/common/constants.d.ts.map +0 -1
- package/types/common/logger.d.ts.map +0 -1
- package/types/common/sockets-utils.d.ts.map +0 -1
- package/types/common/version.d.ts.map +0 -1
- package/types/server/Client.d.ts +0 -45
- package/types/server/Client.d.ts.map +0 -1
- package/types/server/Context.d.ts.map +0 -1
- package/types/server/ContextManager.d.ts +0 -69
- package/types/server/ContextManager.d.ts.map +0 -1
- package/types/server/Plugin.d.ts.map +0 -1
- package/types/server/PluginManager.d.ts.map +0 -1
- package/types/server/Server.d.ts.map +0 -1
- package/types/server/SharedState.d.ts +0 -86
- package/types/server/SharedState.d.ts.map +0 -1
- package/types/server/SharedStateCollection.d.ts +0 -41
- package/types/server/SharedStateCollection.d.ts.map +0 -1
- package/types/server/Socket.d.ts +0 -164
- package/types/server/Socket.d.ts.map +0 -1
- package/types/server/Sockets.d.ts +0 -80
- package/types/server/Sockets.d.ts.map +0 -1
- package/types/server/StateManager.d.ts +0 -405
- package/types/server/StateManager.d.ts.map +0 -1
- package/types/server/audit-network-latency.worker.d.ts.map +0 -1
- package/types/server/audit-schema.d.ts.map +0 -1
- package/types/server/crypto.d.ts.map +0 -1
- package/types/server/index.d.ts.map +0 -1
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { delay } from '@ircam/sc-utils';
|
|
2
|
-
|
|
3
1
|
import { BATCHED_TRANSPORT_CHANNEL } from './constants.js';
|
|
4
2
|
|
|
5
3
|
/**
|
|
@@ -11,20 +9,22 @@ import { BATCHED_TRANSPORT_CHANNEL } from './constants.js';
|
|
|
11
9
|
* @private
|
|
12
10
|
*/
|
|
13
11
|
class BatchedTransport {
|
|
12
|
+
#transport = null;
|
|
13
|
+
#listeners = new Map();
|
|
14
|
+
#stack = [];
|
|
15
|
+
#sending = false;
|
|
16
|
+
|
|
14
17
|
constructor(transport) {
|
|
15
|
-
this
|
|
16
|
-
this._listeners = new Map();
|
|
17
|
-
this._stack = [];
|
|
18
|
-
this._sending = false;
|
|
18
|
+
this.#transport = transport;
|
|
19
19
|
|
|
20
|
-
this.
|
|
20
|
+
this.#transport.addListener(BATCHED_TRANSPORT_CHANNEL, stack => {
|
|
21
21
|
stack.forEach(entry => {
|
|
22
22
|
const [channel, args] = entry;
|
|
23
23
|
// server side the transport is the same EventEmitter instance
|
|
24
24
|
// for both state manager server and client, so channel might not exist
|
|
25
25
|
// one side or the other.
|
|
26
|
-
if (this.
|
|
27
|
-
const callbacks = this.
|
|
26
|
+
if (this.#listeners.has(channel)) {
|
|
27
|
+
const callbacks = this.#listeners.get(channel);
|
|
28
28
|
callbacks.forEach(callback => callback(...args));
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -32,39 +32,39 @@ class BatchedTransport {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
addListener(channel, callback) {
|
|
35
|
-
if (!this.
|
|
36
|
-
this.
|
|
35
|
+
if (!this.#listeners.has(channel)) {
|
|
36
|
+
this.#listeners.set(channel, new Set());
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
const callbacks = this.
|
|
39
|
+
const callbacks = this.#listeners.get(channel);
|
|
40
40
|
callbacks.add(callback);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
async emit(channel, ...args) {
|
|
44
|
-
this.
|
|
44
|
+
this.#stack.push([channel, args]);
|
|
45
45
|
|
|
46
|
-
if (!this
|
|
47
|
-
this
|
|
46
|
+
if (!this.#sending) {
|
|
47
|
+
this.#sending = true;
|
|
48
48
|
await false;
|
|
49
|
-
this
|
|
50
|
-
const stack = this
|
|
51
|
-
this
|
|
52
|
-
this.
|
|
49
|
+
this.#sending = false;
|
|
50
|
+
const stack = this.#stack;
|
|
51
|
+
this.#stack = [];
|
|
52
|
+
this.#transport.emit(BATCHED_TRANSPORT_CHANNEL, stack);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
removeListener(channel, callback) {
|
|
57
|
-
if (!this.
|
|
58
|
-
const callbacks = this.
|
|
57
|
+
if (!this.#listeners.has(channel)) {
|
|
58
|
+
const callbacks = this.#listeners.get(channel);
|
|
59
59
|
callbacks.delete(callback);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
removeAllListeners(channel = null) {
|
|
64
64
|
if (channel === null) {
|
|
65
|
-
this.
|
|
66
|
-
} else if (this.
|
|
67
|
-
const callbacks = this.
|
|
65
|
+
this.#listeners.clear();
|
|
66
|
+
} else if (this.#listeners.has(channel)) {
|
|
67
|
+
const callbacks = this.#listeners.get(channel);
|
|
68
68
|
callbacks.clear();
|
|
69
69
|
}
|
|
70
70
|
}
|
|
@@ -4,6 +4,7 @@ import equal from 'fast-deep-equal';
|
|
|
4
4
|
export const sharedOptions = {
|
|
5
5
|
nullable: false,
|
|
6
6
|
event: false, // if event=true, nullable=true
|
|
7
|
+
required: false, // if required=true, default is set to init value
|
|
7
8
|
metas: {},
|
|
8
9
|
filterChange: true,
|
|
9
10
|
immediate: false,
|
|
@@ -129,10 +130,7 @@ export const types = {
|
|
|
129
130
|
};
|
|
130
131
|
|
|
131
132
|
|
|
132
|
-
/**
|
|
133
|
-
* Bag of parameters.
|
|
134
|
-
* @private
|
|
135
|
-
*/
|
|
133
|
+
/** @private */
|
|
136
134
|
class ParameterBag {
|
|
137
135
|
static validateSchema(schema) {
|
|
138
136
|
for (let name in schema) {
|
|
@@ -149,8 +147,13 @@ class ParameterBag {
|
|
|
149
147
|
const required = types[def.type].required;
|
|
150
148
|
|
|
151
149
|
required.forEach(key => {
|
|
152
|
-
if (def.event === true && key === 'default') {
|
|
153
|
-
// do nothing
|
|
150
|
+
if ((def.event === true || def.required === true) && key === 'default') {
|
|
151
|
+
// do nothing:
|
|
152
|
+
// - default is always null for `event` params
|
|
153
|
+
// - default is always null for `required` params
|
|
154
|
+
if ('default' in def && def.default !== null) {
|
|
155
|
+
throw new TypeError(`[StateManager.registerSchema] Invalid schema definition for param ${name} - "default" propaerty is set and not null while the parameter definition is declared as "event" or "required"`);
|
|
156
|
+
}
|
|
154
157
|
} else if (!Object.prototype.hasOwnProperty.call(def, key)) {
|
|
155
158
|
throw new TypeError(`[StateManager.registerSchema] Invalid schema definition - param "${name}" (type "${def.type}"): "${key}" key is required`);
|
|
156
159
|
}
|
|
@@ -211,6 +214,15 @@ class ParameterBag {
|
|
|
211
214
|
def.default = null;
|
|
212
215
|
}
|
|
213
216
|
|
|
217
|
+
if (def.required === true) {
|
|
218
|
+
// throw if value is not given in init values
|
|
219
|
+
if (initValues[name] === undefined || initValues[name] === null) {
|
|
220
|
+
throw new Error(`[SharedState.create] Invalid init value for required param "${name}", cannot be null or undefined`);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
def.default = initValues[name];
|
|
224
|
+
}
|
|
225
|
+
|
|
214
226
|
let initValue;
|
|
215
227
|
|
|
216
228
|
if (Object.prototype.hasOwnProperty.call(initValues, name)) {
|