@nymphjs/nymph 1.0.0-beta.123 → 1.0.0-beta.125

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/dist/testMocks.js CHANGED
@@ -68,7 +68,6 @@ export class MockNymph {
68
68
  return await this.driver.getEntity(options, ...selectors);
69
69
  }
70
70
  async saveEntity(entity) {
71
- const className = entity.constructor.class;
72
71
  if (entity.guid == null) {
73
72
  entity.guid = guid();
74
73
  entity.cdate = Date.now();
@@ -79,7 +78,7 @@ export class MockNymph {
79
78
  }
80
79
  entity.mdate = Date.now();
81
80
  const entityJson = {
82
- class: className,
81
+ class: entity.constructor,
83
82
  guid: entity.guid,
84
83
  cdate: entity.cdate,
85
84
  mdate: entity.mdate,
@@ -1 +1 @@
1
- {"version":3,"file":"testMocks.js","sourceRoot":"","sources":["../src/testMocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testMocks.js","sourceRoot":"","sources":["../src/testMocks.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import Nymph from './Nymph.js';
2
- import { Selector } from './Nymph.types.js';
3
2
  export declare function xor(a: any, b: any): boolean;
4
3
  export declare function uniqueStrings(array: string[]): string[];
5
- export declare function classNamesToEntityConstructors(nymph: Nymph, selectors: Selector[], enforceRestEnabledFlag?: boolean): Selector[];
4
+ export declare function entityConstructorsToClassNames(item: any): any;
5
+ export declare function classNamesToEntityConstructors<T extends any>(nymph: Nymph, item: T, enforceRestEnabledFlag?: boolean): T;
6
6
  export declare function entitiesToReferences(item: any, existingOnly?: boolean): any;
7
- export declare function referencesToEntities(item: any, nymph: Nymph, useSkipAc?: boolean): any;
7
+ export declare function referencesToEntities(item: any, nymph: Nymph, useSkipAc?: boolean, enforceRestEnabledFlag?: boolean): any;
8
8
  export declare function sortObj<T extends {
9
9
  [k: string]: any;
10
10
  }>(obj: T): T;
package/dist/utils.js CHANGED
@@ -9,67 +9,81 @@ export function uniqueStrings(array) {
9
9
  }
10
10
  return Object.keys(obj);
11
11
  }
12
- export function classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag = false) {
13
- const newSelectors = [];
14
- for (const curSelector of selectors) {
15
- const newSelector = { type: curSelector.type };
16
- for (const k in curSelector) {
17
- const key = k;
18
- const value = curSelector[key];
19
- if (key === 'type') {
20
- continue;
21
- }
22
- if (value === undefined) {
23
- continue;
24
- }
25
- if (key === 'qref' || key === '!qref') {
26
- const tmpArr = (Array.isArray((value ?? [])[0])
27
- ? value
28
- : [value]);
29
- for (let i = 0; i < tmpArr.length; i++) {
30
- const name = tmpArr[i][0];
31
- const [qrefOptions, ...selectors] = tmpArr[i][1];
32
- const QrefEntityClass = qrefOptions.class
33
- ? nymph.getEntityClass(qrefOptions.class)
34
- : nymph.getEntityClass('Entity');
35
- if (enforceRestEnabledFlag && !QrefEntityClass.restEnabled) {
36
- throw new Error('Not accessible.');
37
- }
38
- const options = { ...qrefOptions, class: QrefEntityClass };
39
- if (!newSelector[key]) {
40
- newSelector[key] = [];
41
- }
42
- newSelector[key].push([
43
- name,
44
- [
45
- options,
46
- ...classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag),
47
- ],
48
- ]);
49
- }
50
- }
51
- else if (key === 'selector' || key === '!selector') {
52
- const tmpArr = (Array.isArray(value) ? value : [value]);
53
- newSelector[key] = classNamesToEntityConstructors(nymph, tmpArr, enforceRestEnabledFlag);
54
- }
55
- else {
56
- // @ts-ignore: ts doesn't know what value is here.
57
- newSelector[key] = value;
58
- }
12
+ export function entityConstructorsToClassNames(item) {
13
+ if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
14
+ return item;
15
+ }
16
+ else if (typeof item === 'function' && item.prototype instanceof Entity) {
17
+ // Convert entity classes to class references.
18
+ return ['nymph_class_reference', item.class];
19
+ }
20
+ else if (item instanceof Entity) {
21
+ // Don't touch entities.
22
+ return item;
23
+ }
24
+ else if (Array.isArray(item)) {
25
+ // Recurse into lower arrays.
26
+ return item.map((entry) => entityConstructorsToClassNames(entry));
27
+ }
28
+ else if (item instanceof Object) {
29
+ let newObj = Object.create(item);
30
+ for (let [key, value] of Object.entries(item)) {
31
+ newObj[key] = entityConstructorsToClassNames(value);
32
+ }
33
+ return newObj;
34
+ }
35
+ // Not an entity or array, just return it.
36
+ return item;
37
+ }
38
+ export function classNamesToEntityConstructors(nymph, item, enforceRestEnabledFlag = false) {
39
+ if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
40
+ return item;
41
+ }
42
+ else if (Array.isArray(item) &&
43
+ item.length === 2 &&
44
+ item[0] === 'nymph_class_reference' &&
45
+ typeof item[1] === 'string') {
46
+ // Convert class references to entity classes.
47
+ const EntityClass = nymph.getEntityClass(item[1]);
48
+ if (enforceRestEnabledFlag && !EntityClass.restEnabled) {
49
+ throw new Error('Not accessible.');
50
+ }
51
+ return EntityClass;
52
+ }
53
+ else if (item instanceof Entity) {
54
+ // Don't touch entities.
55
+ return item;
56
+ }
57
+ else if (typeof item === 'function' && item.prototype instanceof Entity) {
58
+ // Don't touch Entity classes.
59
+ return item;
60
+ }
61
+ else if (Array.isArray(item)) {
62
+ // Recurse into lower arrays.
63
+ return item.map((entry) => classNamesToEntityConstructors(nymph, entry, enforceRestEnabledFlag));
64
+ }
65
+ else if (item instanceof Object) {
66
+ let newObj = Object.create(item);
67
+ for (let [key, value] of Object.entries(item)) {
68
+ newObj[key] = classNamesToEntityConstructors(nymph, value, enforceRestEnabledFlag);
59
69
  }
60
- newSelectors.push(newSelector);
70
+ return newObj;
61
71
  }
62
- return newSelectors;
72
+ // Not an entity or array, just return it.
73
+ return item;
63
74
  }
64
75
  export function entitiesToReferences(item, existingOnly) {
65
76
  if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
66
77
  return item;
67
78
  }
68
- else if (item instanceof Entity &&
69
- typeof item.$toReference === 'function') {
79
+ else if (item instanceof Entity) {
70
80
  // Convert entities to references.
71
81
  return item.$toReference(existingOnly);
72
82
  }
83
+ else if (typeof item === 'function' && item.prototype instanceof Entity) {
84
+ // Don't touch Entity classes.
85
+ return item;
86
+ }
73
87
  else if (Array.isArray(item)) {
74
88
  // Recurse into lower arrays.
75
89
  return item.map((entry) => entitiesToReferences(entry, existingOnly));
@@ -84,7 +98,7 @@ export function entitiesToReferences(item, existingOnly) {
84
98
  // Not an entity or array, just return it.
85
99
  return item;
86
100
  }
87
- export function referencesToEntities(item, nymph, useSkipAc = false) {
101
+ export function referencesToEntities(item, nymph, useSkipAc = false, enforceRestEnabledFlag = false) {
88
102
  if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
89
103
  return item;
90
104
  }
@@ -93,6 +107,9 @@ export function referencesToEntities(item, nymph, useSkipAc = false) {
93
107
  if (item[0] === 'nymph_entity_reference') {
94
108
  try {
95
109
  const EntityClass = nymph.getEntityClass(item[2]);
110
+ if (enforceRestEnabledFlag && !EntityClass.restEnabled) {
111
+ throw new Error('Not accessible.');
112
+ }
96
113
  const entity = EntityClass.factoryReference(item);
97
114
  entity.$useSkipAc(useSkipAc);
98
115
  entity.$nymph = nymph;
@@ -104,13 +121,23 @@ export function referencesToEntities(item, nymph, useSkipAc = false) {
104
121
  }
105
122
  else {
106
123
  // Recurse into lower arrays.
107
- return item.map((entry) => referencesToEntities(entry, nymph, useSkipAc));
124
+ return item.map((entry) => referencesToEntities(entry, nymph, useSkipAc, enforceRestEnabledFlag));
108
125
  }
109
126
  }
110
- else if (Entity && item instanceof Object && !(item instanceof Entity)) {
127
+ else if (item instanceof Entity) {
128
+ // Don't touch entities.
129
+ return item;
130
+ }
131
+ else if (typeof item === 'function' && item.prototype instanceof Entity) {
132
+ // Don't touch Entity classes.
133
+ return item;
134
+ }
135
+ else if (item instanceof Object) {
136
+ let newObj = Object.create(item);
111
137
  for (let [key, value] of Object.entries(item)) {
112
- item[key] = referencesToEntities(value, nymph);
138
+ newObj[key] = referencesToEntities(value, nymph, useSkipAc, enforceRestEnabledFlag);
113
139
  }
140
+ return newObj;
114
141
  }
115
142
  // Not an array, just return it.
116
143
  return item;
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nymphjs/nymph",
3
- "version": "1.0.0-beta.123",
3
+ "version": "1.0.0-beta.125",
4
4
  "description": "Application Data and Access Framework for Node.js and the Browser",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "license": "Apache-2.0",
45
45
  "dependencies": {
46
- "@nymphjs/guid": "^1.0.0-beta.123",
46
+ "@nymphjs/guid": "^1.0.0-beta.125",
47
47
  "@sciactive/tokenizer": "^3.4.0",
48
48
  "debug": "^4.4.3",
49
49
  "joi": "^18.2.5",
@@ -66,5 +66,5 @@
66
66
  "ts-node": "^10.9.2",
67
67
  "typescript": "^7.0.2"
68
68
  },
69
- "gitHead": "c37dc940d7bf39e0f63158add6d0c54e7c050782"
69
+ "gitHead": "b87bd7ebda690fc8c491835e44fece78dc650b9c"
70
70
  }
@@ -273,7 +273,7 @@ describe('Entity', () => {
273
273
  null: null,
274
274
  uniques: [],
275
275
  },
276
- class: 'TestModel',
276
+ class: ['nymph_class_reference', 'TestModel'],
277
277
  });
278
278
  });
279
279
 
@@ -333,7 +333,7 @@ describe('Entity', () => {
333
333
  testEntity.cdate = 13;
334
334
  testEntity.mdate = 14;
335
335
  testEntity.$jsonAcceptPatch({
336
- class: TestModel.class,
336
+ class: TestModel,
337
337
  guid: testEntity.guid as string,
338
338
  mdate: 15,
339
339
  set: {
@@ -379,7 +379,7 @@ describe('Entity', () => {
379
379
  testEntity.cdate = 13;
380
380
  testEntity.mdate = 14;
381
381
  testEntity.$jsonAcceptPatch({
382
- class: TestModel.class,
382
+ class: TestModel,
383
383
  guid: testEntity.guid as string,
384
384
  mdate: 15,
385
385
  set: {
@@ -424,7 +424,7 @@ describe('Entity', () => {
424
424
 
425
425
  try {
426
426
  testEntity.$jsonAcceptPatch({
427
- class: TestModel.class,
427
+ class: TestModel,
428
428
  guid: data.guid,
429
429
  mdate: data.mdate,
430
430
  set: {
package/src/Entity.ts CHANGED
@@ -22,7 +22,9 @@ import {
22
22
  MethodFailedError,
23
23
  } from './errors/index.js';
24
24
  import {
25
+ classNamesToEntityConstructors,
25
26
  entitiesToReferences,
27
+ entityConstructorsToClassNames,
26
28
  referencesToEntities,
27
29
  uniqueStrings,
28
30
  } from './utils.js';
@@ -272,7 +274,11 @@ export default class Entity<
272
274
 
273
275
  if (this.$sdata.hasOwnProperty(name)) {
274
276
  data[name] = referencesToEntities(
275
- JSON.parse(this.$sdata[name]),
277
+ classNamesToEntityConstructors(
278
+ this.$nymph,
279
+ JSON.parse(this.$sdata[name]),
280
+ false,
281
+ ),
276
282
  this.$nymph,
277
283
  this.$skipAc,
278
284
  );
@@ -325,7 +331,11 @@ export default class Entity<
325
331
 
326
332
  if (this.$sdata.hasOwnProperty(name)) {
327
333
  data[name] = referencesToEntities(
328
- JSON.parse(this.$sdata[name]),
334
+ classNamesToEntityConstructors(
335
+ this.$nymph,
336
+ JSON.parse(this.$sdata[name]),
337
+ false,
338
+ ),
329
339
  this.$nymph,
330
340
  this.$skipAc,
331
341
  );
@@ -587,7 +597,7 @@ export default class Entity<
587
597
  return this.$sleepingReference;
588
598
  }
589
599
  const obj: EntityJson = {
590
- class: (this.constructor as any).class as string,
600
+ class: entityConstructorsToClassNames(this.constructor),
591
601
  guid: this.guid,
592
602
  cdate: this.cdate,
593
603
  mdate: this.mdate,
@@ -599,7 +609,9 @@ export default class Entity<
599
609
  ...Object.keys(this.$sdata),
600
610
  ]) {
601
611
  if (this.$privateData.indexOf(key) === -1) {
602
- obj.data[key] = entitiesToReferences(this.$data[key], true);
612
+ obj.data[key] = entityConstructorsToClassNames(
613
+ entitiesToReferences(this.$data[key], true),
614
+ );
603
615
  }
604
616
  }
605
617
  return obj;
@@ -617,6 +629,11 @@ export default class Entity<
617
629
  if (data.$nymph !== nymph) {
618
630
  data.$setNymph(nymph);
619
631
  }
632
+ } else if (
633
+ typeof data === 'function' &&
634
+ data.prototype instanceof Entity
635
+ ) {
636
+ data.nymph = nymph;
620
637
  } else if (typeof data === 'object') {
621
638
  for (let name in data) {
622
639
  recurseData(data[name]);
@@ -715,7 +732,9 @@ export default class Entity<
715
732
  const _unused: any = (this as any)[key];
716
733
  }
717
734
  }
718
- return entitiesToReferences({ ...this.$dataStore }, referenceOnlyExisting);
735
+ return entityConstructorsToClassNames(
736
+ entitiesToReferences({ ...this.$dataStore }, referenceOnlyExisting),
737
+ );
719
738
  }
720
739
 
721
740
  public $getSData() {
@@ -801,7 +820,11 @@ export default class Entity<
801
820
  cdate: this.cdate,
802
821
  mdate: this.mdate,
803
822
  tags: this.tags,
804
- ...referencesToEntities(this.$dataStore, this.$nymph, this.$skipAc),
823
+ ...referencesToEntities(
824
+ classNamesToEntityConstructors(this.$nymph, this.$dataStore, false),
825
+ this.$nymph,
826
+ this.$skipAc,
827
+ ),
805
828
  };
806
829
  }
807
830
 
@@ -946,6 +969,7 @@ export default class Entity<
946
969
 
947
970
  this.$putData({
948
971
  ...nonAllowlistData,
972
+ // Data has already been dereferenced.
949
973
  ...data,
950
974
  ...protectedData,
951
975
  ...privateData,
@@ -1002,11 +1026,8 @@ export default class Entity<
1002
1026
  ) {
1003
1027
  continue;
1004
1028
  }
1005
- (this.$data as any)[name] = referencesToEntities(
1006
- patch.set[name],
1007
- this.$nymph,
1008
- this.$skipAc,
1009
- );
1029
+ // Data has already been dereferenced.
1030
+ (this.$data as any)[name] = patch.set[name];
1010
1031
  }
1011
1032
 
1012
1033
  for (const name of patch.unset) {
@@ -1060,7 +1081,7 @@ export default class Entity<
1060
1081
  }
1061
1082
  for (const name in data) {
1062
1083
  (this.$dataStore as any)[name] = referencesToEntities(
1063
- data[name],
1084
+ classNamesToEntityConstructors(this.$nymph, data[name], false),
1064
1085
  this.$nymph,
1065
1086
  this.$skipAc,
1066
1087
  );
@@ -13,6 +13,7 @@ export type ACProperties = {
13
13
  };
14
14
 
15
15
  export type EntityReference = ['nymph_entity_reference', string, string];
16
+ export type ClassReference = ['nymph_class_reference', string];
16
17
 
17
18
  export type EntityData = {
18
19
  [k: string]: any;
@@ -31,7 +32,7 @@ export type EntityObject = {
31
32
  };
32
33
 
33
34
  export type EntityJson = {
34
- class: string;
35
+ class: EntityConstructor;
35
36
  guid: string | null;
36
37
  cdate: number | null;
37
38
  mdate: number | null;
@@ -40,7 +41,7 @@ export type EntityJson = {
40
41
  };
41
42
 
42
43
  export type EntityPatch = {
43
- class: string;
44
+ class: EntityConstructor;
44
45
  guid: string;
45
46
  mdate: number | null;
46
47
  set: EntityData;
@@ -249,6 +250,9 @@ export interface EntityInterface extends DataObjectInterface {
249
250
  /**
250
251
  * Accept JSON data from the client.
251
252
  *
253
+ * The given data must already be dereferenced (class references turned into
254
+ * classes and entity references turned into entities).
255
+ *
252
256
  * This function uses the security protection lists:
253
257
  *
254
258
  * - $protectedTags
@@ -265,6 +269,9 @@ export interface EntityInterface extends DataObjectInterface {
265
269
  /**
266
270
  * Accept JSON patch from the client.
267
271
  *
272
+ * The given data must already be dereferenced (class references turned into
273
+ * classes and entity references turned into entities).
274
+ *
268
275
  * This function uses the security protection lists:
269
276
  *
270
277
  * - $protectedTags
@@ -6,6 +6,7 @@ import { Tokenizer } from '@sciactive/tokenizer';
6
6
 
7
7
  import type Nymph from '../Nymph.js';
8
8
  import type { Selector, Options, FormattedSelector } from '../Nymph.types.js';
9
+ import Entity from '../Entity.js';
9
10
  import type { EntityInstanceType, EntityObjectType } from '../Entity.js';
10
11
  import type {
11
12
  EntityConstructor,
@@ -735,8 +736,19 @@ export default abstract class NymphDriver {
735
736
  ) {
736
737
  return true;
737
738
  }
739
+ if (
740
+ value instanceof Entity &&
741
+ value.guid != null &&
742
+ guids.indexOf(value.guid) !== -1
743
+ ) {
744
+ return true;
745
+ }
738
746
  // Search through arrays and objects looking for the reference.
739
- if (value != null && (Array.isArray(value) || typeof value === 'object')) {
747
+ if (
748
+ value != null &&
749
+ (Array.isArray(value) ||
750
+ (typeof value === 'object' && !(value instanceof Entity)))
751
+ ) {
740
752
  for (const key in value) {
741
753
  if (this.entityReferenceSearch(value[key], guids)) {
742
754
  return true;
package/src/testMocks.ts CHANGED
@@ -154,8 +154,6 @@ export class MockNymph {
154
154
  }
155
155
 
156
156
  public async saveEntity(entity: EntityInterface): Promise<boolean> {
157
- const className = (entity.constructor as any).class as string;
158
-
159
157
  if (entity.guid == null) {
160
158
  entity.guid = guid();
161
159
  entity.cdate = Date.now();
@@ -171,7 +169,7 @@ export class MockNymph {
171
169
  entity.mdate = Date.now();
172
170
 
173
171
  const entityJson: EntityJson = {
174
- class: className,
172
+ class: entity.constructor as EntityConstructor,
175
173
  guid: entity.guid,
176
174
  cdate: entity.cdate,
177
175
  mdate: entity.mdate,