@nymphjs/client 1.0.0-beta.9 → 1.0.0-beta.91

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 (70) hide show
  1. package/CHANGELOG.md +378 -0
  2. package/README.md +6 -6
  3. package/asyncitertest.js +53 -0
  4. package/dist/Entity.d.ts +156 -0
  5. package/{lib → dist}/Entity.js +202 -104
  6. package/dist/Entity.js.map +1 -0
  7. package/dist/Entity.types.d.ts +218 -0
  8. package/dist/Entity.types.js +2 -0
  9. package/{lib → dist}/EntityWeakCache.d.ts +1 -1
  10. package/{lib → dist}/EntityWeakCache.js +5 -9
  11. package/dist/EntityWeakCache.js.map +1 -0
  12. package/dist/HttpRequester.d.ts +78 -0
  13. package/dist/HttpRequester.js +365 -0
  14. package/dist/HttpRequester.js.map +1 -0
  15. package/{lib → dist}/Nymph.d.ts +44 -11
  16. package/{lib → dist}/Nymph.js +118 -39
  17. package/dist/Nymph.js.map +1 -0
  18. package/{lib → dist}/Nymph.types.d.ts +74 -2
  19. package/dist/Nymph.types.js +2 -0
  20. package/{lib → dist}/PubSub.d.ts +16 -10
  21. package/{lib → dist}/PubSub.js +172 -108
  22. package/dist/PubSub.js.map +1 -0
  23. package/{lib → dist}/PubSub.types.d.ts +8 -3
  24. package/dist/PubSub.types.js +2 -0
  25. package/{lib → dist}/entityRefresh.d.ts +1 -1
  26. package/{lib → dist}/entityRefresh.js +21 -13
  27. package/dist/entityRefresh.js.map +1 -0
  28. package/dist/index.d.ts +13 -0
  29. package/dist/index.js +13 -2
  30. package/dist/index.js.map +1 -1
  31. package/{lib → dist}/utils.d.ts +1 -1
  32. package/{lib → dist}/utils.js +28 -21
  33. package/dist/utils.js.map +1 -0
  34. package/jest.config.js +11 -2
  35. package/package.json +23 -27
  36. package/src/Entity.ts +170 -104
  37. package/src/Entity.types.ts +29 -47
  38. package/src/EntityWeakCache.ts +8 -6
  39. package/src/HttpRequester.ts +308 -35
  40. package/src/Nymph.ts +134 -70
  41. package/src/Nymph.types.ts +41 -2
  42. package/src/PubSub.ts +214 -141
  43. package/src/PubSub.types.ts +10 -5
  44. package/src/entityRefresh.ts +6 -6
  45. package/src/index.ts +10 -10
  46. package/src/utils.ts +12 -5
  47. package/tsconfig.json +6 -4
  48. package/typedoc.json +4 -0
  49. package/dist/index.js.LICENSE.txt +0 -8
  50. package/lib/Entity.d.ts +0 -51
  51. package/lib/Entity.js.map +0 -1
  52. package/lib/Entity.types.d.ts +0 -65
  53. package/lib/Entity.types.js +0 -3
  54. package/lib/EntityWeakCache.js.map +0 -1
  55. package/lib/HttpRequester.d.ts +0 -42
  56. package/lib/HttpRequester.js +0 -160
  57. package/lib/HttpRequester.js.map +0 -1
  58. package/lib/Nymph.js.map +0 -1
  59. package/lib/Nymph.types.js +0 -3
  60. package/lib/PubSub.js.map +0 -1
  61. package/lib/PubSub.types.js +0 -3
  62. package/lib/entityRefresh.js.map +0 -1
  63. package/lib/index.d.ts +0 -13
  64. package/lib/index.js +0 -34
  65. package/lib/index.js.map +0 -1
  66. package/lib/utils.js.map +0 -1
  67. package/webpack.config.js +0 -28
  68. /package/{lib → dist}/Entity.types.js.map +0 -0
  69. /package/{lib → dist}/Nymph.types.js.map +0 -0
  70. /package/{lib → dist}/PubSub.types.js.map +0 -0
@@ -1,21 +1,73 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InvalidStateError = exports.EntityIsSleepingReferenceError = void 0;
4
- const lodash_1 = require("lodash");
5
- const utils_1 = require("./utils");
6
- const sleepErr = 'This entity is in a sleeping reference state. ' +
7
- 'You must use .$ready() to wake it.';
8
- class Entity {
9
- constructor(guid) {
10
- this.guid = null;
11
- this.cdate = null;
12
- this.mdate = null;
13
- this.tags = [];
14
- this.$originalTags = [];
15
- this.$dirty = {};
16
- this.$isASleepingReference = false;
17
- this.$sleepingReference = null;
18
- this.$readyPromise = null;
1
+ import { difference, isEqual } from 'lodash-es';
2
+ import { uniqueStrings, entitiesToReferences, referencesToEntities, sortObj, } from './utils.js';
3
+ export default class Entity {
4
+ /**
5
+ * The instance of Nymph to use for queries.
6
+ */
7
+ static nymph = {};
8
+ /**
9
+ * The lookup name for this entity.
10
+ *
11
+ * This is used for reference arrays (and sleeping references) and server
12
+ * requests.
13
+ */
14
+ static class = 'Entity';
15
+ /**
16
+ * The instance of Nymph to use for queries.
17
+ */
18
+ $nymph;
19
+ /**
20
+ * The entity's Globally Unique ID.
21
+ */
22
+ guid = null;
23
+ /**
24
+ * The creation date of the entity as a high precision Unix timestamp.
25
+ */
26
+ cdate = null;
27
+ /**
28
+ * The modified date of the entity as a high precision Unix timestamp.
29
+ */
30
+ mdate = null;
31
+ /**
32
+ * Array of the entity's tags.
33
+ */
34
+ tags = [];
35
+ /**
36
+ * Array of the entity's original tags (for patch).
37
+ */
38
+ $originalTags = [];
39
+ /**
40
+ * A map of props to whether they're dirty (for patch).
41
+ */
42
+ $dirty = {};
43
+ /**
44
+ * The data proxy handler.
45
+ */
46
+ $dataHandler;
47
+ /**
48
+ * The actual data store.
49
+ */
50
+ $dataStore;
51
+ /**
52
+ * The data proxy object.
53
+ */
54
+ $data;
55
+ /**
56
+ * Whether this instance is a sleeping reference.
57
+ */
58
+ $isASleepingReference = false;
59
+ /**
60
+ * The reference to use to wake.
61
+ */
62
+ $sleepingReference = null;
63
+ /**
64
+ * A promise that resolved when the entity's data is wake.
65
+ */
66
+ $wakePromise = null;
67
+ /**
68
+ * Initialize an entity.
69
+ */
70
+ constructor(..._rest) {
19
71
  this.$nymph = this.constructor.nymph;
20
72
  this.$dataHandler = {
21
73
  has: (data, name) => {
@@ -85,16 +137,6 @@ class Entity {
85
137
  };
86
138
  this.$dataStore = {};
87
139
  this.$data = new Proxy(this.$dataStore, this.$dataHandler);
88
- if (guid != null) {
89
- this.guid = guid;
90
- this.$isASleepingReference = true;
91
- this.$sleepingReference = [
92
- 'nymph_entity_reference',
93
- this.guid,
94
- this.constructor.class,
95
- ];
96
- this.$ready();
97
- }
98
140
  return new Proxy(this, {
99
141
  has(entity, name) {
100
142
  if (typeof name !== 'string' ||
@@ -164,34 +206,87 @@ class Entity {
164
206
  },
165
207
  });
166
208
  }
209
+ /**
210
+ * Create or retrieve a new entity instance.
211
+ *
212
+ * Note that this will always return an entity, even if the GUID is not found.
213
+ *
214
+ * @param guid An optional GUID to retrieve.
215
+ */
167
216
  static async factory(guid) {
168
- const cacheEntity = (guid ? this.nymph.getEntityFromCache(this, guid) : null);
169
- const entity = cacheEntity || new this(guid);
217
+ const cacheEntity = (guid
218
+ ? this.nymph.getEntityFromCache(this, guid)
219
+ : null);
220
+ if (cacheEntity) {
221
+ return cacheEntity;
222
+ }
223
+ const entity = new this();
170
224
  if (guid != null) {
171
- await entity.$ready();
225
+ entity.guid = guid;
226
+ entity.$isASleepingReference = true;
227
+ entity.$sleepingReference = [
228
+ 'nymph_entity_reference',
229
+ guid,
230
+ this.class,
231
+ ];
232
+ await entity.$wake();
172
233
  }
173
234
  return entity;
174
235
  }
175
- static factorySync(guid) {
176
- const cacheEntity = (guid ? this.nymph.getEntityFromCache(this, guid) : null);
177
- return cacheEntity || new this(guid);
236
+ /**
237
+ * Create a new entity instance.
238
+ */
239
+ static factorySync() {
240
+ return new this();
178
241
  }
242
+ /**
243
+ * Create a new sleeping reference instance.
244
+ *
245
+ * Sleeping references won't retrieve their data from the server until they
246
+ * are readied with `$wake()` or a parent's `$wakeAll()`.
247
+ *
248
+ * @param reference The Nymph Entity Reference to use to wake.
249
+ * @returns The new instance.
250
+ */
179
251
  static factoryReference(reference) {
180
- const cacheEntity = (reference[1] ? this.nymph.getEntityFromCache(this, reference[1]) : null);
252
+ const cacheEntity = (reference[1]
253
+ ? this.nymph.getEntityFromCache(this, reference[1])
254
+ : null);
181
255
  const entity = cacheEntity || new this();
182
256
  if (!cacheEntity) {
183
257
  entity.$referenceSleep(reference);
184
258
  }
185
259
  return entity;
186
260
  }
261
+ /**
262
+ * Call a static method on the server version of this entity.
263
+ *
264
+ * @param method The name of the method.
265
+ * @param params The parameters to call the method with.
266
+ * @returns The value that the method on the server returned.
267
+ */
187
268
  static async serverCallStatic(method, params) {
188
- const data = await this.nymph.serverCallStatic(this.class, method, Array.prototype.slice.call(params));
269
+ const data = await this.nymph.serverCallStatic(this.class, method,
270
+ // Turn the params into a real array, in case an arguments object was
271
+ // passed.
272
+ Array.prototype.slice.call(params));
189
273
  return data.return;
190
274
  }
275
+ /**
276
+ * Call a static iterator method on the server version of this entity.
277
+ *
278
+ * @param method The name of the method.
279
+ * @param params The parameters to call the method with.
280
+ * @returns An iterator that iterates over values that the method on the server yields.
281
+ */
282
+ static async serverCallStaticIterator(method, params) {
283
+ return await this.nymph.serverCallStaticIterator(this.class, method,
284
+ // Turn the params into a real array, in case an arguments object was
285
+ // passed.
286
+ Array.prototype.slice.call(params));
287
+ }
191
288
  toJSON() {
192
- if (this.$isASleepingReference) {
193
- throw new EntityIsSleepingReferenceError(sleepErr);
194
- }
289
+ this.$check();
195
290
  const obj = {
196
291
  class: this.constructor.class,
197
292
  guid: this.guid,
@@ -201,7 +296,7 @@ class Entity {
201
296
  data: {},
202
297
  };
203
298
  for (let [key, value] of Object.entries(this.$dataStore)) {
204
- obj.data[key] = (0, utils_1.entitiesToReferences)(value);
299
+ obj.data[key] = entitiesToReferences(value);
205
300
  }
206
301
  return obj;
207
302
  }
@@ -220,7 +315,7 @@ class Entity {
220
315
  this.$dataStore = Object.entries(entityJson.data)
221
316
  .map(([key, value]) => {
222
317
  this.$dirty[key] = false;
223
- return { key, value: (0, utils_1.referencesToEntities)(value, this.$nymph) };
318
+ return { key, value: referencesToEntities(value, this.$nymph) };
224
319
  })
225
320
  .reduce((obj, { key, value }) => Object.assign(obj, { [key]: value }), {});
226
321
  this.$data = new Proxy(this.$dataStore, this.$dataHandler);
@@ -228,18 +323,14 @@ class Entity {
228
323
  return this;
229
324
  }
230
325
  $addTag(...tags) {
231
- if (this.$isASleepingReference) {
232
- throw new EntityIsSleepingReferenceError(sleepErr);
233
- }
326
+ this.$check();
234
327
  if (tags.length < 1) {
235
328
  return;
236
329
  }
237
- this.tags = (0, utils_1.uniqueStrings)([...this.tags, ...tags]);
330
+ this.tags = uniqueStrings([...this.tags, ...tags]);
238
331
  }
239
332
  $arraySearch(array, strict = false) {
240
- if (this.$isASleepingReference) {
241
- throw new EntityIsSleepingReferenceError(sleepErr);
242
- }
333
+ this.$check();
243
334
  if (!Array.isArray(array)) {
244
335
  return -1;
245
336
  }
@@ -252,16 +343,12 @@ class Entity {
252
343
  return -1;
253
344
  }
254
345
  async $delete() {
255
- if (this.$isASleepingReference) {
256
- throw new EntityIsSleepingReferenceError(sleepErr);
257
- }
346
+ this.$check();
258
347
  const guid = this.guid;
259
348
  return (await this.$nymph.deleteEntity(this)) === guid;
260
349
  }
261
350
  $equals(object) {
262
- if (this.$isASleepingReference) {
263
- throw new EntityIsSleepingReferenceError(sleepErr);
264
- }
351
+ this.$check();
265
352
  if (!(object instanceof Entity)) {
266
353
  return false;
267
354
  }
@@ -276,16 +363,16 @@ class Entity {
276
363
  if (object.mdate !== this.mdate) {
277
364
  return false;
278
365
  }
279
- const obData = (0, utils_1.sortObj)(object.toJSON());
366
+ const obData = sortObj(object.toJSON());
280
367
  obData.tags?.sort();
281
- const myData = (0, utils_1.sortObj)(this.toJSON());
368
+ // obData.data = sortObj(obData.data);
369
+ const myData = sortObj(this.toJSON());
282
370
  myData.tags?.sort();
283
- return (0, lodash_1.isEqual)(obData, myData);
371
+ // myData.data = sortObj(myData.data);
372
+ return isEqual(obData, myData);
284
373
  }
285
374
  $getPatch() {
286
- if (this.$isASleepingReference) {
287
- throw new EntityIsSleepingReferenceError(sleepErr);
288
- }
375
+ this.$check();
289
376
  if (this.guid == null) {
290
377
  throw new InvalidStateError("You can't make a patch from an unsaved entity.");
291
378
  }
@@ -301,7 +388,7 @@ class Entity {
301
388
  for (let [key, dirty] of Object.entries(this.$dirty)) {
302
389
  if (dirty) {
303
390
  if (key in this.$data) {
304
- patch.set[key] = (0, utils_1.entitiesToReferences)(this.$data[key]);
391
+ patch.set[key] = entitiesToReferences(this.$data[key]);
305
392
  }
306
393
  else {
307
394
  patch.unset.push(key);
@@ -311,9 +398,7 @@ class Entity {
311
398
  return patch;
312
399
  }
313
400
  $hasTag(...tags) {
314
- if (this.$isASleepingReference) {
315
- throw new EntityIsSleepingReferenceError(sleepErr);
316
- }
401
+ this.$check();
317
402
  if (!tags.length) {
318
403
  return false;
319
404
  }
@@ -324,13 +409,14 @@ class Entity {
324
409
  }
325
410
  return true;
326
411
  }
412
+ $isDirty(property) {
413
+ return property in this.$dirty ? this.$dirty[property] : null;
414
+ }
327
415
  $inArray(array, strict = false) {
328
416
  return this.$arraySearch(array, strict) !== -1;
329
417
  }
330
418
  $is(object) {
331
- if (this.$isASleepingReference) {
332
- throw new EntityIsSleepingReferenceError(sleepErr);
333
- }
419
+ this.$check();
334
420
  if (!(object instanceof Entity)) {
335
421
  return false;
336
422
  }
@@ -341,31 +427,48 @@ class Entity {
341
427
  return false;
342
428
  }
343
429
  else {
344
- const obData = (0, utils_1.sortObj)(object.toJSON());
430
+ const obData = sortObj(object.toJSON());
345
431
  obData.tags?.sort();
346
- const myData = (0, utils_1.sortObj)(this.toJSON());
432
+ // obData.data = sortObj(obData.data);
433
+ const myData = sortObj(this.toJSON());
347
434
  myData.tags?.sort();
348
- return (0, lodash_1.isEqual)(obData, myData);
435
+ // myData.data = sortObj(myData.data);
436
+ return isEqual(obData, myData);
349
437
  }
350
438
  }
351
439
  async $patch() {
352
- if (this.$isASleepingReference) {
353
- throw new EntityIsSleepingReferenceError(sleepErr);
354
- }
440
+ this.$check();
355
441
  const mdate = this.mdate;
356
442
  await this.$nymph.patchEntity(this);
357
443
  return mdate !== this.mdate;
358
444
  }
359
- $ready() {
445
+ /**
446
+ * Check if this is a sleeping reference and throw an error if so.
447
+ */
448
+ $check() {
449
+ if (this.$isASleepingReference || this.$sleepingReference != null) {
450
+ throw new EntityIsSleepingReferenceError('This entity is in a sleeping reference state. You must use .$wake() to wake it.');
451
+ }
452
+ }
453
+ /**
454
+ * Check if this is a sleeping reference.
455
+ */
456
+ $asleep() {
457
+ return this.$isASleepingReference || this.$sleepingReference != null;
458
+ }
459
+ /**
460
+ * Wake from a sleeping reference.
461
+ */
462
+ $wake() {
360
463
  if (!this.$isASleepingReference) {
361
- this.$readyPromise = null;
464
+ this.$wakePromise = null;
362
465
  return Promise.resolve(this);
363
466
  }
364
467
  if (this.$sleepingReference?.[1] == null) {
365
- throw new InvalidStateError('Tried to ready a sleeping reference with no GUID.');
468
+ throw new InvalidStateError('Tried to wake a sleeping reference with no GUID.');
366
469
  }
367
- if (!this.$readyPromise) {
368
- this.$readyPromise = this.$nymph
470
+ if (!this.$wakePromise) {
471
+ this.$wakePromise = this.$nymph
369
472
  .getEntityData({ class: this.constructor }, { type: '&', guid: this.$sleepingReference[1] })
370
473
  .then((data) => {
371
474
  if (data == null) {
@@ -375,15 +478,18 @@ class Entity {
375
478
  return this.$init(data);
376
479
  })
377
480
  .finally(() => {
378
- this.$readyPromise = null;
481
+ this.$wakePromise = null;
379
482
  });
380
483
  }
381
- return this.$readyPromise;
484
+ return this.$wakePromise;
382
485
  }
383
- $readyAll(level) {
486
+ $wakeAll(level) {
384
487
  return new Promise((resolve, reject) => {
385
- const readyProps = () => {
488
+ // Run this once this entity is awake.
489
+ const wakeProps = () => {
386
490
  let newLevel;
491
+ // If level is undefined, keep going forever, otherwise, stop once we've
492
+ // gone deep enough.
387
493
  if (level !== undefined) {
388
494
  newLevel = level - 1;
389
495
  }
@@ -392,15 +498,16 @@ class Entity {
392
498
  return;
393
499
  }
394
500
  const promises = [];
501
+ // Go through data looking for entities to wake.
395
502
  for (let [key, value] of Object.entries(this.$data)) {
396
503
  if (value instanceof Entity && value.$isASleepingReference) {
397
- promises.push(value.$readyAll(newLevel));
504
+ promises.push(value.$wakeAll(newLevel));
398
505
  }
399
506
  else if (Array.isArray(value)) {
400
507
  for (let i = 0; i < value.length; i++) {
401
508
  if (value[i] instanceof Entity &&
402
509
  value[i].$isASleepingReference) {
403
- promises.push(value[i].$readyAll(newLevel));
510
+ promises.push(value[i].$wakeAll(newLevel));
404
511
  }
405
512
  }
406
513
  }
@@ -413,10 +520,10 @@ class Entity {
413
520
  }
414
521
  };
415
522
  if (this.$isASleepingReference) {
416
- this.$ready().then(readyProps, (errObj) => reject(errObj));
523
+ this.$wake().then(wakeProps, (errObj) => reject(errObj));
417
524
  }
418
525
  else {
419
- readyProps();
526
+ wakeProps();
420
527
  }
421
528
  });
422
529
  }
@@ -427,7 +534,7 @@ class Entity {
427
534
  }
428
535
  async $refresh() {
429
536
  if (this.$isASleepingReference) {
430
- await this.$ready();
537
+ await this.$wake();
431
538
  return true;
432
539
  }
433
540
  if (this.guid == null) {
@@ -443,22 +550,18 @@ class Entity {
443
550
  return this.guid == null ? 0 : true;
444
551
  }
445
552
  $removeTag(...tags) {
446
- if (this.$isASleepingReference) {
447
- throw new EntityIsSleepingReferenceError(sleepErr);
448
- }
449
- this.tags = (0, lodash_1.difference)(this.tags, tags);
553
+ this.$check();
554
+ this.tags = difference(this.tags, tags);
450
555
  }
451
556
  async $save() {
452
- if (this.$isASleepingReference) {
453
- throw new EntityIsSleepingReferenceError(sleepErr);
454
- }
557
+ this.$check();
455
558
  await this.$nymph.saveEntity(this);
456
559
  return !!this.guid;
457
560
  }
458
561
  async $serverCall(method, params, stateless = false) {
459
- if (this.$isASleepingReference) {
460
- throw new EntityIsSleepingReferenceError(sleepErr);
461
- }
562
+ this.$check();
563
+ // Turn the params into a real array, in case an arguments object was
564
+ // passed.
462
565
  const paramArray = Array.prototype.slice.call(params);
463
566
  const data = await this.$nymph.serverCall(this, method, paramArray, stateless);
464
567
  if (!stateless && data.entity) {
@@ -480,21 +583,16 @@ class Entity {
480
583
  ];
481
584
  }
482
585
  }
483
- exports.default = Entity;
484
- Entity.nymph = {};
485
- Entity.class = 'Entity';
486
- class EntityIsSleepingReferenceError extends Error {
586
+ export class EntityIsSleepingReferenceError extends Error {
487
587
  constructor(message) {
488
588
  super(message);
489
589
  this.name = 'EntityIsSleepingReferenceError';
490
590
  }
491
591
  }
492
- exports.EntityIsSleepingReferenceError = EntityIsSleepingReferenceError;
493
- class InvalidStateError extends Error {
592
+ export class InvalidStateError extends Error {
494
593
  constructor(message) {
495
594
  super(message);
496
595
  this.name = 'InvalidStateError';
497
596
  }
498
597
  }
499
- exports.InvalidStateError = InvalidStateError;
500
598
  //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}