@soundworks/core 3.6.0 → 4.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/.eslintrc +16 -0
  2. package/LICENSE +1 -1
  3. package/README.md +32 -30
  4. package/package.json +57 -26
  5. package/src/client/Client.js +391 -0
  6. package/src/client/Context.js +225 -0
  7. package/src/client/ContextManager.js +111 -0
  8. package/src/client/Plugin.js +66 -0
  9. package/src/client/PluginManager.js +123 -0
  10. package/src/client/SharedState.js +84 -0
  11. package/src/client/Socket.js +389 -0
  12. package/src/client/StateManager.js +67 -0
  13. package/src/client/index.js +77 -0
  14. package/src/common/BasePlugin.js +163 -0
  15. package/src/common/BasePluginManager.js +227 -0
  16. package/src/common/BaseSharedState.js +473 -0
  17. package/src/common/BaseStateManager.js +200 -0
  18. package/{common → src/common}/ParameterBag.js +82 -122
  19. package/{common → src/common}/SharedStatePrivate.js +56 -64
  20. package/src/common/constants.js +51 -0
  21. package/src/common/logger.js +154 -0
  22. package/src/common/promise-store.js +25 -0
  23. package/src/common/sockets-utils.js +73 -0
  24. package/src/common/utils.js +22 -0
  25. package/src/server/Client.js +50 -0
  26. package/src/server/Context.js +99 -0
  27. package/src/server/ContextManager.js +266 -0
  28. package/src/server/Plugin.js +77 -0
  29. package/src/server/PluginManager.js +150 -0
  30. package/src/server/Server.js +849 -0
  31. package/src/server/SharedState.js +86 -0
  32. package/{server → src/server}/Socket.js +119 -94
  33. package/{server → src/server}/Sockets.js +73 -61
  34. package/{common/SharedStateManagerServer.js → src/server/StateManager.js} +183 -131
  35. package/src/server/audit-network-latency.worker.js +57 -0
  36. package/src/server/audit-schema.js +42 -0
  37. package/src/server/index.js +45 -0
  38. package/tsconfig.json +21 -0
  39. package/types/client/Client.d.ts +194 -0
  40. package/types/client/Client.d.ts.map +1 -0
  41. package/types/client/Context.d.ts +139 -0
  42. package/types/client/Context.d.ts.map +1 -0
  43. package/types/client/ContextManager.d.ts +45 -0
  44. package/types/client/ContextManager.d.ts.map +1 -0
  45. package/types/client/Plugin.d.ts +53 -0
  46. package/types/client/Plugin.d.ts.map +1 -0
  47. package/types/client/PluginManager.d.ts +96 -0
  48. package/types/client/PluginManager.d.ts.map +1 -0
  49. package/types/client/SharedState.d.ts +85 -0
  50. package/types/client/SharedState.d.ts.map +1 -0
  51. package/types/client/Socket.d.ts +138 -0
  52. package/types/client/Socket.d.ts.map +1 -0
  53. package/types/client/StateManager.d.ts +72 -0
  54. package/types/client/StateManager.d.ts.map +1 -0
  55. package/types/client/index.d.ts +11 -0
  56. package/types/client/index.d.ts.map +1 -0
  57. package/types/common/BasePlugin.d.ts +145 -0
  58. package/types/common/BasePlugin.d.ts.map +1 -0
  59. package/types/common/BasePluginManager.d.ts +88 -0
  60. package/types/common/BasePluginManager.d.ts.map +1 -0
  61. package/types/common/BaseSharedState.d.ts +173 -0
  62. package/types/common/BaseSharedState.d.ts.map +1 -0
  63. package/types/common/BaseStateManager.d.ts +70 -0
  64. package/types/common/BaseStateManager.d.ts.map +1 -0
  65. package/types/common/ParameterBag.d.ts +143 -0
  66. package/types/common/ParameterBag.d.ts.map +1 -0
  67. package/types/common/SharedStatePrivate.d.ts +20 -0
  68. package/types/common/SharedStatePrivate.d.ts.map +1 -0
  69. package/types/common/constants.d.ts +35 -0
  70. package/types/common/constants.d.ts.map +1 -0
  71. package/types/common/logger.d.ts +16 -0
  72. package/types/common/logger.d.ts.map +1 -0
  73. package/types/common/promise-store.d.ts +4 -0
  74. package/types/common/promise-store.d.ts.map +1 -0
  75. package/types/common/sockets-utils.d.ts +9 -0
  76. package/types/common/sockets-utils.d.ts.map +1 -0
  77. package/types/common/utils.d.ts +5 -0
  78. package/types/common/utils.d.ts.map +1 -0
  79. package/types/server/Client.d.ts +40 -0
  80. package/types/server/Client.d.ts.map +1 -0
  81. package/types/server/Context.d.ts +59 -0
  82. package/types/server/Context.d.ts.map +1 -0
  83. package/types/server/ContextManager.d.ts +69 -0
  84. package/types/server/ContextManager.d.ts.map +1 -0
  85. package/types/server/Plugin.d.ts +70 -0
  86. package/types/server/Plugin.d.ts.map +1 -0
  87. package/types/server/PluginManager.d.ts +91 -0
  88. package/types/server/PluginManager.d.ts.map +1 -0
  89. package/types/server/Server.d.ts +223 -0
  90. package/types/server/Server.d.ts.map +1 -0
  91. package/types/server/SharedState.d.ts +86 -0
  92. package/types/server/SharedState.d.ts.map +1 -0
  93. package/types/server/Socket.d.ts +128 -0
  94. package/types/server/Socket.d.ts.map +1 -0
  95. package/types/server/Sockets.d.ts +73 -0
  96. package/types/server/Sockets.d.ts.map +1 -0
  97. package/types/server/StateManager.d.ts +190 -0
  98. package/types/server/StateManager.d.ts.map +1 -0
  99. package/types/server/audit-network-latency.worker.d.ts +2 -0
  100. package/types/server/audit-network-latency.worker.d.ts.map +1 -0
  101. package/types/server/audit-schema.d.ts +27 -0
  102. package/types/server/audit-schema.d.ts.map +1 -0
  103. package/types/server/index.d.ts +7 -0
  104. package/types/server/index.d.ts.map +1 -0
  105. package/client/AbstractExperience.js +0 -54
  106. package/client/AbstractPlugin.js +0 -230
  107. package/client/Client.js +0 -190
  108. package/client/PluginManager.js +0 -267
  109. package/client/Socket.js +0 -338
  110. package/client/index.js +0 -48
  111. package/client.js +0 -28
  112. package/common/SharedState.js +0 -480
  113. package/common/SharedStateManagerClient.js +0 -194
  114. package/common/Signal.js +0 -40
  115. package/common/SignalAll.js +0 -44
  116. package/common/shared-state-utils.js +0 -90
  117. package/common/sockets-encoder-decoder.js +0 -73
  118. package/server/AbstractExperience.js +0 -126
  119. package/server/AbstractPlugin.js +0 -211
  120. package/server/Client.js +0 -70
  121. package/server/PluginManager.js +0 -177
  122. package/server/Server.js +0 -746
  123. package/server/index.js +0 -49
  124. package/server/utils/logger.js +0 -134
  125. package/server.js +0 -28
@@ -1,18 +1,5 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.types = exports.sharedOptions = exports.default = void 0;
7
-
8
- var _lodash = _interopRequireDefault(require("lodash.clonedeep"));
9
-
10
- var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- // import types from './types';
15
- // import shallowClone from 'shallow-clone';
1
+ import cloneDeep from 'lodash.clonedeep';
2
+ import equal from 'fast-deep-equal';
16
3
 
17
4
  /**
18
5
  * @typedef {Object} server.SharedStateManagerServer~schema
@@ -44,7 +31,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
44
31
  * }
45
32
  * }
46
33
  */
47
-
48
34
  /**
49
35
  * @typedef {Object} server.SharedStateManagerServer~schemaBooleanDef
50
36
  *
@@ -62,15 +48,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
62
48
  * (which has no state per se). As such, setting this options to `false` if
63
49
  * `event=true` does not make sens.
64
50
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
65
- * trigger any change (e.g. call the subscribe listeners) immediately on the
51
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
66
52
  * state that generate the update (i.e. calling `set`), before propagating the
67
53
  * change on the network. This option can be usefull in cases the network
68
54
  * would introduce a noticeable latency on the client. If for some reason
69
- * the value is overriden server-side (e.g. in an updateHook) the listeners
55
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
70
56
  * will be called again on when the "real" / final value will be received.
71
57
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
72
58
  */
73
-
74
59
  /**
75
60
  * @typedef {Object} server.SharedStateManagerServer~schemaStringDef
76
61
  *
@@ -88,15 +73,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
88
73
  * (which has no state per se). As such, setting this options to `false` if
89
74
  * `event=true` does not make sens.
90
75
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
91
- * trigger any change (e.g. call the subscribe listeners) immediately on the
76
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
92
77
  * state that generate the update (i.e. calling `set`), before propagating the
93
78
  * change on the network. This option can be usefull in cases the network
94
79
  * would introduce a noticeable latency on the client. If for some reason
95
- * the value is overriden server-side (e.g. in an updateHook) the listeners
80
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
96
81
  * will be called again on when the "real" / final value will be received.
97
82
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
98
83
  */
99
-
100
84
  /**
101
85
  @typedef {Object} server.SharedStateManagerServer~schemaIntegerDef
102
86
  *
@@ -116,15 +100,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
116
100
  * (which has no state per se). As such, setting this options to `false` if
117
101
  * `event=true` does not make sens.
118
102
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
119
- * trigger any change (e.g. call the subscribe listeners) immediately on the
103
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
120
104
  * state that generate the update (i.e. calling `set`), before propagating the
121
105
  * change on the network. This option can be usefull in cases the network
122
106
  * would introduce a noticeable latency on the client. If for some reason
123
- * the value is overriden server-side (e.g. in an updateHook) the listeners
107
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
124
108
  * will be called again on when the "real" / final value will be received.
125
109
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
126
110
  */
127
-
128
111
  /**
129
112
  * @typedef {Object} server.SharedStateManagerServer~schemaFloatDef
130
113
  *
@@ -144,15 +127,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
144
127
  * (which has no state per se). As such, setting this options to `false` if
145
128
  * `event=true` does not make sens.
146
129
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
147
- * trigger any change (e.g. call the subscribe listeners) immediately on the
130
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
148
131
  * state that generate the update (i.e. calling `set`), before propagating the
149
132
  * change on the network. This option can be usefull in cases the network
150
133
  * would introduce a noticeable latency on the client. If for some reason
151
- * the value is overriden server-side (e.g. in an updateHook) the listeners
134
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
152
135
  * will be called again on when the "real" / final value will be received.
153
136
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
154
137
  */
155
-
156
138
  /**
157
139
  * @typedef {Object} server.SharedStateManagerServer~schemaEnumDef
158
140
  *
@@ -171,15 +153,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
171
153
  * (which has no state per se). As such, setting this options to `false` if
172
154
  * `event=true` does not make sens.
173
155
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
174
- * trigger any change (e.g. call the subscribe listeners) immediately on the
156
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
175
157
  * state that generate the update (i.e. calling `set`), before propagating the
176
158
  * change on the network. This option can be usefull in cases the network
177
159
  * would introduce a noticeable latency on the client. If for some reason
178
- * the value is overriden server-side (e.g. in an updateHook) the listeners
160
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
179
161
  * will be called again on when the "real" / final value will be received.
180
162
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
181
163
  */
182
-
183
164
  /**
184
165
  * @typedef {Object} server.SharedStateManagerServer~schemaAnyDef
185
166
  *
@@ -200,65 +181,59 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
200
181
  * (which has no state per se). As such, setting this options to `false` if
201
182
  * `event=true` does not make sens.
202
183
  * @property {Boolean} [immediate=false] - Setting this option to `true` will
203
- * trigger any change (e.g. call the subscribe listeners) immediately on the
184
+ * trigger any change (e.g. call the `onUpdate` listeners) immediately on the
204
185
  * state that generate the update (i.e. calling `set`), before propagating the
205
186
  * change on the network. This option can be usefull in cases the network
206
187
  * would introduce a noticeable latency on the client. If for some reason
207
- * the value is overriden server-side (e.g. in an updateHook) the listeners
188
+ * the value is overriden server-side (e.g. in an `updateHook`) the listeners
208
189
  * will be called again on when the "real" / final value will be received.
209
190
  * @property {Object} [metas={}] - Optionnal metadata of the parameter.
210
191
  */
211
- const sharedOptions = {
192
+
193
+ export const sharedOptions = {
212
194
  nullable: false,
213
- event: false,
214
- // if event=true, nullable=true
195
+ event: false, // if event=true, nullable=true
215
196
  metas: {},
216
197
  filterChange: true,
217
- immediate: false
198
+ immediate: false,
218
199
  };
219
- exports.sharedOptions = sharedOptions;
220
- const types = {
200
+
201
+ export const types = {
221
202
  boolean: {
222
203
  required: ['default'],
223
-
224
204
  get defaultOptions() {
225
- return Object.assign((0, _lodash.default)(sharedOptions), {});
205
+ return Object.assign(cloneDeep(sharedOptions), {});
226
206
  },
227
-
228
207
  coerceFunction: (name, def, value) => {
229
208
  if (typeof value !== 'boolean') {
230
209
  throw new TypeError(`[stateManager] Invalid value for boolean param "${name}": ${value}`);
231
210
  }
232
211
 
233
212
  return value;
234
- }
213
+ },
235
214
  },
236
215
  string: {
237
216
  required: ['default'],
238
-
239
217
  get defaultOptions() {
240
- return Object.assign((0, _lodash.default)(sharedOptions), {});
218
+ return Object.assign(cloneDeep(sharedOptions), {});
241
219
  },
242
-
243
220
  coerceFunction: (name, def, value) => {
244
221
  if (typeof value !== 'string') {
245
222
  throw new TypeError(`[stateManager] Invalid value for string param "${name}": ${value}`);
246
223
  }
247
224
 
248
225
  return value;
249
- }
226
+ },
250
227
  },
251
228
  integer: {
252
229
  required: ['default'],
253
-
254
230
  get defaultOptions() {
255
- return Object.assign((0, _lodash.default)(sharedOptions), {
231
+ return Object.assign(cloneDeep(sharedOptions), {
256
232
  min: -Infinity,
257
- max: +Infinity
233
+ max: +Infinity,
258
234
  });
259
235
  },
260
-
261
- sanitizeSchema: def => {
236
+ sanitizeSchema: (def) => {
262
237
  // sanitize `null` values in received schema, this prevent a bug when
263
238
  // `min` and `max` are explicitely set to `±Infinity`, the schema is stringified
264
239
  // when sent over the network and therefore Infinity is transformed to `null`
@@ -281,19 +256,17 @@ const types = {
281
256
  }
282
257
 
283
258
  return Math.max(def.min, Math.min(def.max, value));
284
- }
259
+ },
285
260
  },
286
261
  float: {
287
262
  required: ['default'],
288
-
289
263
  get defaultOptions() {
290
- return Object.assign((0, _lodash.default)(sharedOptions), {
264
+ return Object.assign(cloneDeep(sharedOptions), {
291
265
  min: -Infinity,
292
- max: +Infinity
266
+ max: +Infinity,
293
267
  });
294
268
  },
295
-
296
- sanitizeSchema: def => {
269
+ sanitizeSchema: (def) => {
297
270
  // sanitize `null` values in received schema, this prevent a bug when
298
271
  // `min` and `max` are explicitely set to `±Infinity`, the schema is stringified
299
272
  // when sent over the network and therefore Infinity is transformed to `null`
@@ -311,66 +284,63 @@ const types = {
311
284
  return def;
312
285
  },
313
286
  coerceFunction: (name, def, value) => {
314
- if (typeof value !== 'number' || value !== value) {
315
- // reject NaN
287
+ if (typeof value !== 'number' || value !== value) { // reject NaN
316
288
  throw new TypeError(`[stateManager] Invalid value for float param "${name}": ${value}`);
317
289
  }
318
290
 
319
291
  return Math.max(def.min, Math.min(def.max, value));
320
- }
292
+ },
321
293
  },
322
294
  enum: {
323
295
  required: ['default', 'list'],
324
-
325
296
  get defaultOptions() {
326
- return Object.assign((0, _lodash.default)(sharedOptions), {});
297
+ return Object.assign(cloneDeep(sharedOptions), {});
327
298
  },
328
-
329
299
  coerceFunction: (name, def, value) => {
330
300
  if (def.list.indexOf(value) === -1) {
331
301
  throw new TypeError(`[stateManager] Invalid value for enum param "${name}": ${value}`);
332
302
  }
333
303
 
304
+
334
305
  return value;
335
- }
306
+ },
336
307
  },
337
308
  any: {
338
309
  required: ['default'],
339
-
340
310
  get defaultOptions() {
341
- return Object.assign((0, _lodash.default)(sharedOptions), {});
311
+ return Object.assign(cloneDeep(sharedOptions), {});
342
312
  },
343
-
344
313
  coerceFunction: (name, def, value) => {
345
314
  // no check as it can have any type...
346
315
  return value;
347
- }
348
- }
316
+ },
317
+ },
349
318
  };
319
+
320
+
350
321
  /**
351
322
  * Bag of parameters.
352
323
  * @private
353
324
  */
354
-
355
- exports.types = types;
356
-
357
325
  class ParameterBag {
358
326
  static validateSchema(schema) {
359
327
  for (let name in schema) {
360
328
  const def = schema[name];
361
329
 
362
- if (!def.hasOwnProperty('type')) {
330
+ if (!Object.prototype.hasOwnProperty.call(def, 'type')) {
363
331
  throw new TypeError(`[stateManager] Invalid schema definition - param "${name}": "type" key is required`);
364
332
  }
365
333
 
366
- if (!types.hasOwnProperty(def.type)) {
334
+ if (!Object.prototype.hasOwnProperty.call(types, def.type)) {
367
335
  throw new TypeError(`[stateManager] Invalid schema definition - param "${name}": "{ type: '${def.type}' }" does not exists`);
368
336
  }
369
337
 
370
338
  const required = types[def.type].required;
371
- required.forEach(function (key) {
372
- if (def.event === true && key === 'default') {// do nothing, default is always null for `event` params
373
- } else if (!def.hasOwnProperty(key)) {
339
+
340
+ required.forEach(key => {
341
+ if (def.event === true && key === 'default') {
342
+ // do nothing, default is always null for `event` params
343
+ } else if (!Object.prototype.hasOwnProperty.call(def, key)) {
374
344
  throw new TypeError(`[stateManager] Invalid schema definition - param "${name}" (type "${def.type}"): "${key}" key is required`);
375
345
  }
376
346
  });
@@ -382,8 +352,9 @@ class ParameterBag {
382
352
  throw new Error(`[stateManager] schema is mandatory`);
383
353
  }
384
354
 
385
- schema = (0, _lodash.default)(schema);
386
- initValues = (0, _lodash.default)(initValues);
355
+ schema = cloneDeep(schema);
356
+ initValues = cloneDeep(initValues);
357
+
387
358
  /**
388
359
  * List of parameters.
389
360
  *
@@ -393,8 +364,8 @@ class ParameterBag {
393
364
  * @instance
394
365
  * @private
395
366
  */
396
-
397
367
  this._values = {};
368
+
398
369
  /**
399
370
  * List of schema with init values.
400
371
  *
@@ -404,29 +375,26 @@ class ParameterBag {
404
375
  * @instance
405
376
  * @private
406
377
  */
407
-
408
378
  this._schema = {};
409
- ParameterBag.validateSchema(schema); // make shure initValues make sens according to the given schema
410
379
 
380
+ ParameterBag.validateSchema(schema);
381
+
382
+ // make shure initValues make sens according to the given schema
411
383
  for (let name in initValues) {
412
- if (!schema.hasOwnProperty(name)) {
384
+ if (!Object.prototype.hasOwnProperty.call(schema, name)) {
413
385
  throw new ReferenceError(`[stateManager] init value defined for undefined param "${name}"`);
414
386
  }
415
387
  }
416
388
 
417
389
  for (let [name, def] of Object.entries(schema)) {
418
- const {
419
- defaultOptions,
420
- coerceFunction
421
- } = types[def.type];
422
-
423
390
  if (types[def.type].sanitizeSchema) {
424
391
  def = types[def.type].sanitizeSchema(def);
425
392
  }
426
393
 
427
- def = Object.assign({}, defaultOptions, def); // if event property is set to true, the param must
394
+ const { defaultOptions } = types[def.type];
395
+ def = Object.assign({}, defaultOptions, def);
396
+ // if event property is set to true, the param must
428
397
  // be nullable and its default value is `undefined`
429
-
430
398
  if (def.event === true) {
431
399
  def.nullable = true;
432
400
  def.default = null;
@@ -434,37 +402,38 @@ class ParameterBag {
434
402
 
435
403
  let initValue;
436
404
 
437
- if (initValues.hasOwnProperty(name)) {
405
+ if (Object.prototype.hasOwnProperty.call(initValues, name)) {
438
406
  initValue = initValues[name];
439
407
  } else {
440
408
  initValue = def.default;
441
409
  }
442
410
 
443
- this._schema[name] = def; // coerce init value and store in definition
444
411
 
412
+ this._schema[name] = def;
413
+ // coerce init value and store in definition
445
414
  initValue = this.set(name, initValue)[0];
415
+
446
416
  this._schema[name].initValue = initValue;
447
417
  this._values[name] = initValue;
418
+
448
419
  }
449
420
  }
421
+
450
422
  /**
451
423
  * Define if the parameter exists.
452
424
  *
453
425
  * @param {String} name - Name of the parameter.
454
426
  * @return {Boolean}
455
427
  */
456
-
457
-
458
428
  has(name) {
459
- return this._schema.hasOwnProperty(name);
429
+ return Object.prototype.hasOwnProperty.call(this._schema, name);
460
430
  }
431
+
461
432
  /**
462
433
  * Return values of all parameters as a flat object.
463
434
  *
464
435
  * @return {Object}
465
436
  */
466
-
467
-
468
437
  getValues() {
469
438
  let values = {};
470
439
 
@@ -474,6 +443,7 @@ class ParameterBag {
474
443
 
475
444
  return values;
476
445
  }
446
+
477
447
  /**
478
448
  * Return the value of the given parameter. If the parameter is of `any` type,
479
449
  * a deep copy is returned.
@@ -481,19 +451,18 @@ class ParameterBag {
481
451
  * @param {String} name - Name of the parameter.
482
452
  * @return {Mixed} - Value of the parameter.
483
453
  */
484
-
485
-
486
454
  get(name) {
487
455
  if (!this.has(name)) {
488
456
  throw new ReferenceError(`[stateManager] Cannot get value of undefined parameter "${name}"`);
489
457
  }
490
458
 
491
459
  if (this._schema[name].type === 'any') {
492
- return (0, _lodash.default)(this._values[name]);
460
+ return cloneDeep(this._values[name]);
493
461
  } else {
494
462
  return this._values[name];
495
463
  }
496
464
  }
465
+
497
466
  /**
498
467
  * Set the value of a parameter. If the value of the parameter is updated
499
468
  * (aka if previous value is different from new value) all registered
@@ -505,32 +474,31 @@ class ParameterBag {
505
474
  * if the value has not changed.
506
475
  * @return {Array} - [new value, updated flag].
507
476
  */
508
-
509
-
510
477
  set(name, value) {
511
478
  if (!this.has(name)) {
512
479
  throw new ReferenceError(`[stateManager] Cannot set value of undefined parameter "${name}"`);
513
480
  }
514
481
 
515
482
  const def = this._schema[name];
516
- const {
517
- coerceFunction
518
- } = types[def.type];
483
+ const { coerceFunction } = types[def.type];
519
484
 
520
485
  if (value === null && def.nullable === false) {
521
486
  throw new TypeError(`[stateManager] Invalid value for ${def.type} param "${name}": value is null and param is not nullable`);
522
487
  } else if (value === null && def.nullable === true) {
523
- value = value;
488
+ value = null;
524
489
  } else {
525
490
  value = coerceFunction(name, def, value);
526
491
  }
527
492
 
528
493
  const currentValue = this._values[name];
529
- const updated = !(0, _fastDeepEqual.default)(currentValue, value);
530
- this._values[name] = value; // return tuple so that the state manager can handle the `filterChange` option
494
+ const updated = !equal(currentValue, value);
495
+
496
+ this._values[name] = value;
531
497
 
498
+ // return tuple so that the state manager can handle the `filterChange` option
532
499
  return [value, updated];
533
500
  }
501
+
534
502
  /**
535
503
  * Reset a parameter to its initialization values. Reset all parameters if no argument.
536
504
  * @note - prefer `state.set(state.getInitValues())`
@@ -553,8 +521,6 @@ class ParameterBag {
553
521
  *
554
522
  * @return {Object}
555
523
  */
556
-
557
-
558
524
  getSchema(name = null) {
559
525
  if (name === null) {
560
526
  return this._schema;
@@ -565,31 +531,25 @@ class ParameterBag {
565
531
 
566
532
  return this._schema[name];
567
533
  }
568
- } // return the default value, if initValue has been given, return init values
569
-
534
+ }
570
535
 
536
+ // return the default value, if initValue has been given, return init values
571
537
  getInitValues() {
572
538
  const initValues = {};
573
-
574
539
  for (let [name, def] of Object.entries(this._schema)) {
575
540
  initValues[name] = def.initValue;
576
541
  }
577
-
578
542
  return initValues;
579
- } // return the default value, if initValue has been given, return init values
580
-
543
+ }
581
544
 
545
+ // return the default value, if initValue has been given, return init values
582
546
  getDefaults() {
583
547
  const defaults = {};
584
-
585
548
  for (let [name, def] of Object.entries(this._schema)) {
586
549
  defaults[name] = def.defaults;
587
550
  }
588
-
589
551
  return defaults;
590
552
  }
591
-
592
553
  }
593
554
 
594
- var _default = ParameterBag;
595
- exports.default = _default;
555
+ export default ParameterBag;