@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.
Files changed (127) hide show
  1. package/.jsdoc +3 -1
  2. package/CHANGELOG.md +11 -5
  3. package/package.json +5 -5
  4. package/src/client/Client.js +78 -83
  5. package/src/client/{Context.js → ClientContext.js} +48 -38
  6. package/src/client/ClientContextManager.js +115 -0
  7. package/src/client/{Plugin.js → ClientPlugin.js} +22 -18
  8. package/src/client/{PluginManager.js → ClientPluginManager.js} +39 -35
  9. package/src/client/{Socket.js → ClientSocket.js} +54 -65
  10. package/src/client/{StateManager.js → ClientStateManager.js} +7 -8
  11. package/src/client/index.js +17 -41
  12. package/src/common/BasePlugin.js +56 -51
  13. package/src/common/BasePluginManager.js +175 -139
  14. package/src/common/BaseStateManager.js +316 -120
  15. package/src/common/BatchedTransport.js +24 -24
  16. package/src/common/ParameterBag.js +18 -6
  17. package/src/common/PromiseStore.js +1 -0
  18. package/src/common/{BaseSharedState.js → SharedState.js} +271 -199
  19. package/src/common/{BaseSharedStateCollection.js → SharedStateCollection.js} +92 -61
  20. package/src/common/logger.js +5 -0
  21. package/src/common/shared-state-types.js +76 -0
  22. package/src/common/version.js +1 -1
  23. package/src/server/Server.js +391 -354
  24. package/src/server/ServerClient.js +73 -0
  25. package/src/server/{Context.js → ServerContext.js} +85 -66
  26. package/src/server/{ContextManager.js → ServerContextManager.js} +98 -85
  27. package/src/server/{Plugin.js → ServerPlugin.js} +10 -24
  28. package/src/server/{PluginManager.js → ServerPluginManager.js} +76 -69
  29. package/src/server/{Socket.js → ServerSocket.js} +19 -18
  30. package/src/server/{Sockets.js → ServerSockets.js} +36 -27
  31. package/src/server/ServerStateManager.js +515 -0
  32. package/src/{common → server}/SharedStatePrivate.js +61 -26
  33. package/src/server/audit-schema.js +1 -1
  34. package/src/server/crypto.js +2 -0
  35. package/src/server/index.js +18 -21
  36. package/types/client/Client.d.ts +74 -95
  37. package/types/client/{Context.d.ts → ClientContext.d.ts} +25 -26
  38. package/types/client/{ContextManager.d.ts → ClientContextManager.d.ts} +19 -22
  39. package/types/client/{Plugin.d.ts → ClientPlugin.d.ts} +17 -20
  40. package/types/client/{PluginManager.d.ts → ClientPluginManager.d.ts} +13 -36
  41. package/types/client/ClientSocket.d.ts +74 -0
  42. package/types/client/{StateManager.d.ts → ClientStateManager.d.ts} +11 -15
  43. package/types/client/index.d.ts +26 -2
  44. package/types/common/BasePlugin.d.ts +52 -46
  45. package/types/common/BasePluginManager.d.ts +68 -44
  46. package/types/common/BaseStateManager.d.ts +207 -97
  47. package/types/common/BatchedTransport.d.ts +1 -5
  48. package/types/common/ParameterBag.d.ts +16 -18
  49. package/types/common/PromiseStore.d.ts +1 -1
  50. package/types/common/SharedState.d.ts +297 -0
  51. package/types/common/{BaseSharedStateCollection.d.ts → SharedStateCollection.d.ts} +34 -18
  52. package/types/common/constants.d.ts +0 -2
  53. package/types/common/logger.d.ts +2 -1
  54. package/types/common/shared-state-types.d.ts +83 -0
  55. package/types/common/sockets-utils.d.ts +0 -5
  56. package/types/common/version.d.ts +1 -2
  57. package/types/server/Server.d.ts +78 -132
  58. package/types/server/ServerClient.d.ts +45 -0
  59. package/types/server/{Context.d.ts → ServerContext.d.ts} +53 -43
  60. package/types/server/ServerContextManager.d.ts +80 -0
  61. package/types/server/{Plugin.d.ts → ServerPlugin.d.ts} +19 -33
  62. package/types/server/{PluginManager.d.ts → ServerPluginManager.d.ts} +39 -37
  63. package/types/server/ServerSocket.d.ts +85 -0
  64. package/types/server/ServerSockets.d.ts +50 -0
  65. package/types/server/ServerStateManager.d.ts +189 -0
  66. package/types/server/SharedStatePrivate.d.ts +21 -0
  67. package/types/server/audit-network-latency.worker.d.ts +1 -2
  68. package/types/server/audit-schema.d.ts +0 -1
  69. package/types/server/crypto.d.ts +2 -1
  70. package/types/server/index.d.ts +24 -2
  71. package/src/client/ContextManager.js +0 -111
  72. package/src/client/SharedState.js +0 -84
  73. package/src/client/SharedStateCollection.js +0 -38
  74. package/src/server/Client.js +0 -55
  75. package/src/server/SharedState.js +0 -85
  76. package/src/server/SharedStateCollection.js +0 -39
  77. package/src/server/StateManager.js +0 -696
  78. package/types/client/Client.d.ts.map +0 -1
  79. package/types/client/Context.d.ts.map +0 -1
  80. package/types/client/ContextManager.d.ts.map +0 -1
  81. package/types/client/Plugin.d.ts.map +0 -1
  82. package/types/client/PluginManager.d.ts.map +0 -1
  83. package/types/client/SharedState.d.ts +0 -85
  84. package/types/client/SharedState.d.ts.map +0 -1
  85. package/types/client/SharedStateCollection.d.ts +0 -41
  86. package/types/client/SharedStateCollection.d.ts.map +0 -1
  87. package/types/client/Socket.d.ts +0 -149
  88. package/types/client/Socket.d.ts.map +0 -1
  89. package/types/client/StateManager.d.ts.map +0 -1
  90. package/types/client/index.d.ts.map +0 -1
  91. package/types/common/BasePlugin.d.ts.map +0 -1
  92. package/types/common/BasePluginManager.d.ts.map +0 -1
  93. package/types/common/BaseSharedState.d.ts +0 -244
  94. package/types/common/BaseSharedState.d.ts.map +0 -1
  95. package/types/common/BaseSharedStateCollection.d.ts.map +0 -1
  96. package/types/common/BaseStateManager.d.ts.map +0 -1
  97. package/types/common/BatchedTransport.d.ts.map +0 -1
  98. package/types/common/ParameterBag.d.ts.map +0 -1
  99. package/types/common/PromiseStore.d.ts.map +0 -1
  100. package/types/common/SharedStatePrivate.d.ts +0 -21
  101. package/types/common/SharedStatePrivate.d.ts.map +0 -1
  102. package/types/common/constants.d.ts.map +0 -1
  103. package/types/common/logger.d.ts.map +0 -1
  104. package/types/common/sockets-utils.d.ts.map +0 -1
  105. package/types/common/version.d.ts.map +0 -1
  106. package/types/server/Client.d.ts +0 -45
  107. package/types/server/Client.d.ts.map +0 -1
  108. package/types/server/Context.d.ts.map +0 -1
  109. package/types/server/ContextManager.d.ts +0 -69
  110. package/types/server/ContextManager.d.ts.map +0 -1
  111. package/types/server/Plugin.d.ts.map +0 -1
  112. package/types/server/PluginManager.d.ts.map +0 -1
  113. package/types/server/Server.d.ts.map +0 -1
  114. package/types/server/SharedState.d.ts +0 -86
  115. package/types/server/SharedState.d.ts.map +0 -1
  116. package/types/server/SharedStateCollection.d.ts +0 -41
  117. package/types/server/SharedStateCollection.d.ts.map +0 -1
  118. package/types/server/Socket.d.ts +0 -164
  119. package/types/server/Socket.d.ts.map +0 -1
  120. package/types/server/Sockets.d.ts +0 -80
  121. package/types/server/Sockets.d.ts.map +0 -1
  122. package/types/server/StateManager.d.ts +0 -405
  123. package/types/server/StateManager.d.ts.map +0 -1
  124. package/types/server/audit-network-latency.worker.d.ts.map +0 -1
  125. package/types/server/audit-schema.d.ts.map +0 -1
  126. package/types/server/crypto.d.ts.map +0 -1
  127. 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._transport = transport;
16
- this._listeners = new Map();
17
- this._stack = [];
18
- this._sending = false;
18
+ this.#transport = transport;
19
19
 
20
- this._transport.addListener(BATCHED_TRANSPORT_CHANNEL, stack => {
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._listeners.has(channel)) {
27
- const callbacks = this._listeners.get(channel);
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._listeners.has(channel)) {
36
- this._listeners.set(channel, new Set());
35
+ if (!this.#listeners.has(channel)) {
36
+ this.#listeners.set(channel, new Set());
37
37
  }
38
38
 
39
- const callbacks = this._listeners.get(channel);
39
+ const callbacks = this.#listeners.get(channel);
40
40
  callbacks.add(callback);
41
41
  }
42
42
 
43
43
  async emit(channel, ...args) {
44
- this._stack.push([channel, args]);
44
+ this.#stack.push([channel, args]);
45
45
 
46
- if (!this._sending) {
47
- this._sending = true;
46
+ if (!this.#sending) {
47
+ this.#sending = true;
48
48
  await false;
49
- this._sending = false;
50
- const stack = this._stack;
51
- this._stack = [];
52
- this._transport.emit(BATCHED_TRANSPORT_CHANNEL, stack);
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._listeners.has(channel)) {
58
- const callbacks = this._listeners.get(channel);
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._listeners.clear();
66
- } else if (this._listeners.has(channel)) {
67
- const callbacks = this._listeners.get(channel);
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, default is always null for `event` params
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)) {
@@ -1,5 +1,6 @@
1
1
  import { idGenerator } from '@ircam/sc-utils';
2
2
 
3
+ /** @private */
3
4
  export default class PromiseStore {
4
5
  constructor(name) {
5
6
  this.name = name;