@nymphjs/nymph 1.0.0-beta.8 → 1.0.0-beta.80
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/CHANGELOG.md +376 -0
- package/README.md +9 -19
- package/dist/Entity.d.ts +269 -7
- package/dist/Entity.js +491 -105
- package/dist/Entity.js.map +1 -1
- package/dist/Entity.test.js +25 -3
- package/dist/Entity.test.js.map +1 -1
- package/dist/Entity.types.d.ts +225 -19
- package/dist/Nymph.d.ts +430 -11
- package/dist/Nymph.js +686 -168
- package/dist/Nymph.js.map +1 -1
- package/dist/Nymph.types.d.ts +65 -7
- package/dist/Nymph.types.js +2 -1
- package/dist/Nymph.types.js.map +1 -1
- package/dist/conf/d.d.ts +30 -0
- package/dist/conf/defaults.js +27 -0
- package/dist/conf/defaults.js.map +1 -1
- package/dist/driver/NymphDriver.d.ts +136 -38
- package/dist/driver/NymphDriver.js +264 -131
- package/dist/driver/NymphDriver.js.map +1 -1
- package/dist/driver/testArtifacts.d.ts +1 -1
- package/dist/driver/testArtifacts.js +493 -51
- package/dist/driver/testArtifacts.js.map +1 -1
- package/dist/errors/EntityInvalidDataError.d.ts +6 -0
- package/dist/errors/EntityInvalidDataError.js +7 -1
- package/dist/errors/EntityInvalidDataError.js.map +1 -1
- package/dist/errors/EntityUniqueConstraintError.d.ts +3 -0
- package/dist/errors/EntityUniqueConstraintError.js +11 -0
- package/dist/errors/EntityUniqueConstraintError.js.map +1 -0
- package/dist/errors/InvalidStateError.d.ts +3 -0
- package/dist/errors/InvalidStateError.js +11 -0
- package/dist/errors/InvalidStateError.js.map +1 -0
- package/dist/errors/QueryFailedError.js +1 -0
- package/dist/errors/QueryFailedError.js.map +1 -1
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/testArtifacts.d.ts +17 -5
- package/dist/testArtifacts.js +31 -27
- package/dist/testArtifacts.js.map +1 -1
- package/dist/testMocks.d.ts +13 -10
- package/dist/testMocks.js +32 -13
- package/dist/testMocks.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +21 -5
- package/dist/utils.js.map +1 -1
- package/package.json +16 -14
- package/src/Entity.test.ts +22 -5
- package/src/Entity.ts +423 -134
- package/src/Entity.types.ts +32 -66
- package/src/Nymph.ts +609 -176
- package/src/Nymph.types.ts +131 -26
- package/src/conf/d.ts +12 -0
- package/src/conf/defaults.ts +31 -0
- package/src/driver/NymphDriver.ts +289 -311
- package/src/driver/testArtifacts.ts +562 -181
- package/src/errors/EntityUniqueConstraintError.ts +6 -0
- package/src/errors/InvalidStateError.ts +6 -0
- package/src/errors/index.ts +4 -0
- package/src/nymphJoiProps.ts +2 -2
- package/src/testArtifacts.ts +18 -19
- package/src/testMocks.ts +55 -30
- package/src/utils.ts +22 -8
- package/tsconfig.json +3 -3
- package/typedoc.json +4 -0
package/dist/testMocks.js
CHANGED
|
@@ -9,10 +9,11 @@ const errors_1 = require("./errors");
|
|
|
9
9
|
const Entity_1 = __importDefault(require("./Entity"));
|
|
10
10
|
const entities = {};
|
|
11
11
|
class MockNymphDriver {
|
|
12
|
+
nymph;
|
|
12
13
|
constructor(nymph) {
|
|
13
14
|
this.nymph = nymph;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
async getEntity(options = {}, ...selectors) {
|
|
16
17
|
const guid = typeof selectors[0] === 'string' ? selectors[0] : selectors[0].guid;
|
|
17
18
|
if (!options || !guid || typeof guid !== 'string' || !(guid in entities)) {
|
|
18
19
|
return null;
|
|
@@ -29,31 +30,49 @@ class MockNymphDriver {
|
|
|
29
30
|
}
|
|
30
31
|
exports.MockNymphDriver = MockNymphDriver;
|
|
31
32
|
class MockNymph {
|
|
33
|
+
entityClasses = {};
|
|
34
|
+
driver;
|
|
35
|
+
Tilmeld = undefined;
|
|
36
|
+
Entity;
|
|
32
37
|
constructor() {
|
|
33
|
-
this.entityClasses = {};
|
|
34
|
-
this.Tilmeld = undefined;
|
|
35
38
|
this.driver = new MockNymphDriver(this);
|
|
39
|
+
// class NymphEntity extends Entity {}
|
|
36
40
|
this.Entity = this.addEntityClass(Entity_1.default);
|
|
37
41
|
}
|
|
38
|
-
addEntityClass(
|
|
42
|
+
addEntityClass(EntityClass) {
|
|
39
43
|
const nymph = this;
|
|
40
|
-
class
|
|
44
|
+
this.entityClasses[EntityClass.class] = class extends EntityClass {
|
|
45
|
+
static nymph = nymph;
|
|
41
46
|
constructor(...args) {
|
|
42
47
|
super(...args);
|
|
43
48
|
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
this.entityClasses[entityClass.class] = NymphEntity;
|
|
47
|
-
return NymphEntity;
|
|
49
|
+
};
|
|
50
|
+
return this.entityClasses[EntityClass.class];
|
|
48
51
|
}
|
|
49
52
|
getEntityClass(className) {
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
let key = null;
|
|
54
|
+
if (typeof className === 'string') {
|
|
55
|
+
key = className;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
key = className.class;
|
|
59
|
+
}
|
|
60
|
+
if (key in this.entityClasses) {
|
|
61
|
+
return this.entityClasses[key];
|
|
62
|
+
}
|
|
63
|
+
throw new errors_1.ClassNotAvailableError(`Tried to use missing class "${key}".`);
|
|
64
|
+
}
|
|
65
|
+
getEntityClassByEtype(etype) {
|
|
66
|
+
for (const EntityClass of Object.values(this.entityClasses)) {
|
|
67
|
+
if (EntityClass.ETYPE === etype) {
|
|
68
|
+
return EntityClass;
|
|
69
|
+
}
|
|
52
70
|
}
|
|
53
|
-
throw new errors_1.ClassNotAvailableError(
|
|
71
|
+
throw new errors_1.ClassNotAvailableError(`Tried to use missing class by etype "${etype}".`);
|
|
54
72
|
}
|
|
55
73
|
async getEntity(options = {}, ...selectors) {
|
|
56
|
-
|
|
74
|
+
// @ts-ignore: The selector type is correct here.
|
|
75
|
+
return await this.driver.getEntity(options, ...selectors);
|
|
57
76
|
}
|
|
58
77
|
async saveEntity(entity) {
|
|
59
78
|
const className = entity.constructor.class;
|
package/dist/testMocks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testMocks.js","sourceRoot":"","sources":["../src/testMocks.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAqC;
|
|
1
|
+
{"version":3,"file":"testMocks.js","sourceRoot":"","sources":["../src/testMocks.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import Nymph from './Nymph';
|
|
|
2
2
|
import { Selector } from './Nymph.types';
|
|
3
3
|
export declare function xor(a: any, b: any): boolean;
|
|
4
4
|
export declare function uniqueStrings(array: string[]): string[];
|
|
5
|
-
export declare function classNamesToEntityConstructors(nymph: Nymph, selectors: Selector[]): Selector[];
|
|
5
|
+
export declare function classNamesToEntityConstructors(nymph: Nymph, selectors: Selector[], enforceRestEnabledFlag?: boolean): Selector[];
|
|
6
6
|
export declare function entitiesToReferences(item: any): any;
|
|
7
7
|
export declare function referencesToEntities(item: any, nymph: Nymph, useSkipAc?: boolean): any;
|
|
8
8
|
export declare function sortObj<T extends {
|
package/dist/utils.js
CHANGED
|
@@ -17,7 +17,7 @@ function uniqueStrings(array) {
|
|
|
17
17
|
return Object.keys(obj);
|
|
18
18
|
}
|
|
19
19
|
exports.uniqueStrings = uniqueStrings;
|
|
20
|
-
function classNamesToEntityConstructors(nymph, selectors) {
|
|
20
|
+
function classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag = false) {
|
|
21
21
|
const newSelectors = [];
|
|
22
22
|
for (const curSelector of selectors) {
|
|
23
23
|
const newSelector = { type: curSelector.type };
|
|
@@ -37,24 +37,31 @@ function classNamesToEntityConstructors(nymph, selectors) {
|
|
|
37
37
|
for (let i = 0; i < tmpArr.length; i++) {
|
|
38
38
|
const name = tmpArr[i][0];
|
|
39
39
|
const [qrefOptions, ...selectors] = tmpArr[i][1];
|
|
40
|
-
const QrefEntityClass =
|
|
40
|
+
const QrefEntityClass = qrefOptions.class
|
|
41
41
|
? nymph.getEntityClass(qrefOptions.class)
|
|
42
|
-
:
|
|
42
|
+
: nymph.getEntityClass('Entity');
|
|
43
|
+
if (enforceRestEnabledFlag && !QrefEntityClass.restEnabled) {
|
|
44
|
+
throw new Error('Not accessible.');
|
|
45
|
+
}
|
|
43
46
|
const options = { ...qrefOptions, class: QrefEntityClass };
|
|
44
47
|
if (!newSelector[key]) {
|
|
45
48
|
newSelector[key] = [];
|
|
46
49
|
}
|
|
47
50
|
newSelector[key].push([
|
|
48
51
|
name,
|
|
49
|
-
[
|
|
52
|
+
[
|
|
53
|
+
options,
|
|
54
|
+
...classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag),
|
|
55
|
+
],
|
|
50
56
|
]);
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
else if (key === 'selector' || key === '!selector') {
|
|
54
60
|
const tmpArr = (Array.isArray(value) ? value : [value]);
|
|
55
|
-
newSelector[key] = classNamesToEntityConstructors(nymph, tmpArr);
|
|
61
|
+
newSelector[key] = classNamesToEntityConstructors(nymph, tmpArr, enforceRestEnabledFlag);
|
|
56
62
|
}
|
|
57
63
|
else {
|
|
64
|
+
// @ts-ignore: ts doesn't know what value is here.
|
|
58
65
|
newSelector[key] = value;
|
|
59
66
|
}
|
|
60
67
|
}
|
|
@@ -65,9 +72,11 @@ function classNamesToEntityConstructors(nymph, selectors) {
|
|
|
65
72
|
exports.classNamesToEntityConstructors = classNamesToEntityConstructors;
|
|
66
73
|
function entitiesToReferences(item) {
|
|
67
74
|
if (item instanceof Entity_1.default && typeof item.$toReference === 'function') {
|
|
75
|
+
// Convert entities to references.
|
|
68
76
|
return item.$toReference();
|
|
69
77
|
}
|
|
70
78
|
else if (Array.isArray(item)) {
|
|
79
|
+
// Recurse into lower arrays.
|
|
71
80
|
return item.map((entry) => entitiesToReferences(entry));
|
|
72
81
|
}
|
|
73
82
|
else if (item instanceof Object) {
|
|
@@ -77,11 +86,13 @@ function entitiesToReferences(item) {
|
|
|
77
86
|
}
|
|
78
87
|
return newObj;
|
|
79
88
|
}
|
|
89
|
+
// Not an entity or array, just return it.
|
|
80
90
|
return item;
|
|
81
91
|
}
|
|
82
92
|
exports.entitiesToReferences = entitiesToReferences;
|
|
83
93
|
function referencesToEntities(item, nymph, useSkipAc = false) {
|
|
84
94
|
if (Array.isArray(item)) {
|
|
95
|
+
// Check if it's a reference.
|
|
85
96
|
if (item[0] === 'nymph_entity_reference') {
|
|
86
97
|
try {
|
|
87
98
|
const EntityClass = nymph.getEntityClass(item[2]);
|
|
@@ -95,6 +106,7 @@ function referencesToEntities(item, nymph, useSkipAc = false) {
|
|
|
95
106
|
}
|
|
96
107
|
}
|
|
97
108
|
else {
|
|
109
|
+
// Recurse into lower arrays.
|
|
98
110
|
return item.map((entry) => referencesToEntities(entry, nymph, useSkipAc));
|
|
99
111
|
}
|
|
100
112
|
}
|
|
@@ -103,15 +115,19 @@ function referencesToEntities(item, nymph, useSkipAc = false) {
|
|
|
103
115
|
item[key] = referencesToEntities(value, nymph);
|
|
104
116
|
}
|
|
105
117
|
}
|
|
118
|
+
// Not an array, just return it.
|
|
106
119
|
return item;
|
|
107
120
|
}
|
|
108
121
|
exports.referencesToEntities = referencesToEntities;
|
|
109
122
|
function sortObj(obj) {
|
|
123
|
+
// adapted from
|
|
124
|
+
// http://am.aurlien.net/post/1221493460/sorting-javascript-objects
|
|
110
125
|
const tempArray = Object.keys(obj);
|
|
111
126
|
tempArray.sort();
|
|
112
127
|
for (let i = 0; i < tempArray.length; i++) {
|
|
113
128
|
const temp = obj[tempArray[i]];
|
|
114
129
|
delete obj[tempArray[i]];
|
|
130
|
+
// @ts-ignore: string can't be used to index type T?? yes, it can.
|
|
115
131
|
obj[tempArray[i]] = temp;
|
|
116
132
|
}
|
|
117
133
|
return obj;
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAK9B,SAAgB,GAAG,CAAC,CAAM,EAAE,CAAM;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAFD,kBAEC;AAED,SAAgB,aAAa,CAAC,KAAe;IAC3C,MAAM,GAAG,GAA0B,EAAE,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nymphjs/nymph",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-beta.80",
|
|
4
|
+
"description": "Nymph.js - Nymph ORM",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"clean": "test -d dist && rm -r dist || true",
|
|
15
15
|
"build": "tsc",
|
|
16
16
|
"watch": "tsc --watch",
|
|
17
|
-
"
|
|
17
|
+
"prepublish": "npm run clean && npm run build",
|
|
18
18
|
"test": "jest",
|
|
19
19
|
"test:watch": "jest --watch"
|
|
20
20
|
},
|
|
@@ -31,21 +31,23 @@
|
|
|
31
31
|
},
|
|
32
32
|
"license": "Apache-2.0",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@nymphjs/guid": "^1.0.0-beta.
|
|
35
|
-
"
|
|
34
|
+
"@nymphjs/guid": "^1.0.0-beta.80",
|
|
35
|
+
"debug": "^4.3.5",
|
|
36
|
+
"joi": "^17.12.2",
|
|
36
37
|
"locutus": "^2.0.16",
|
|
37
38
|
"lodash": "^4.17.21",
|
|
38
39
|
"n-readlines": "^1.0.3"
|
|
39
40
|
},
|
|
40
41
|
"devDependencies": {
|
|
41
|
-
"@tsconfig/recommended": "^1.0.
|
|
42
|
-
"@types/
|
|
43
|
-
"@types/
|
|
44
|
-
"@types/
|
|
45
|
-
"@types/
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
42
|
+
"@tsconfig/recommended": "^1.0.3",
|
|
43
|
+
"@types/debug": "^4.1.12",
|
|
44
|
+
"@types/jest": "^29.5.12",
|
|
45
|
+
"@types/locutus": "^0.0.8",
|
|
46
|
+
"@types/lodash": "^4.14.202",
|
|
47
|
+
"@types/n-readlines": "^1.0.6",
|
|
48
|
+
"jest": "^29.7.0",
|
|
49
|
+
"ts-jest": "^29.1.2",
|
|
50
|
+
"typescript": "^5.3.3"
|
|
49
51
|
},
|
|
50
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "685cfbb55dbc7826d97af1f05c7cc32f06852a6f"
|
|
51
53
|
}
|
package/src/Entity.test.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { cloneDeep } from 'lodash';
|
|
2
|
+
|
|
1
3
|
import { MockNymph } from './testMocks';
|
|
2
4
|
import {
|
|
3
5
|
TestBModel as TestBModelClass,
|
|
4
6
|
TestModel as TestModelClass,
|
|
5
7
|
TestModelData,
|
|
6
8
|
} from './testArtifacts';
|
|
7
|
-
import { cloneDeep } from 'lodash';
|
|
8
9
|
|
|
9
10
|
const nymph = new MockNymph();
|
|
10
11
|
|
|
@@ -142,7 +143,7 @@ describe('Entity', () => {
|
|
|
142
143
|
await testEntity.$refresh();
|
|
143
144
|
|
|
144
145
|
expect(testEntityCopy.mdate ?? Infinity).toBeLessThanOrEqual(
|
|
145
|
-
testEntity.mdate ?? 0
|
|
146
|
+
testEntity.mdate ?? 0,
|
|
146
147
|
);
|
|
147
148
|
});
|
|
148
149
|
|
|
@@ -162,7 +163,7 @@ describe('Entity', () => {
|
|
|
162
163
|
expect(testEntity.$hasTag('test', 'test2')).toEqual(true);
|
|
163
164
|
testEntity.$addTag('test', 'test3', 'test4', 'test5', 'test6');
|
|
164
165
|
expect(
|
|
165
|
-
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6')
|
|
166
|
+
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6'),
|
|
166
167
|
).toEqual(true);
|
|
167
168
|
testEntity.$removeTag('test2');
|
|
168
169
|
expect(testEntity.$hasTag('test2')).toEqual(false);
|
|
@@ -183,27 +184,34 @@ describe('Entity', () => {
|
|
|
183
184
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
184
185
|
});
|
|
185
186
|
|
|
186
|
-
it('references
|
|
187
|
+
it('references work', async () => {
|
|
187
188
|
await testEntity.$refresh();
|
|
188
189
|
|
|
190
|
+
await testEntity.reference?.$wake();
|
|
189
191
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
192
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
190
193
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
194
|
+
await testEntity.refObject?.entity.$wake();
|
|
191
195
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
192
196
|
|
|
193
197
|
const entity = await TestModel.factory(testEntity.guid as string);
|
|
194
198
|
|
|
199
|
+
await entity.reference?.$wake();
|
|
195
200
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
201
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
196
202
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
203
|
+
await entity.refObject?.entity.$wake();
|
|
197
204
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
198
205
|
});
|
|
199
206
|
|
|
200
|
-
it('sleeping references wake up', () => {
|
|
207
|
+
it('sleeping references wake up', async () => {
|
|
201
208
|
const entity = TestModel.factoryReference([
|
|
202
209
|
'nymph_entity_reference',
|
|
203
210
|
testEntity.guid as string,
|
|
204
211
|
'TestModel',
|
|
205
212
|
]) as TestModelClass & TestModelData;
|
|
206
213
|
|
|
214
|
+
await entity.$wake();
|
|
207
215
|
expect(entity.guid).toEqual(testEntity.guid);
|
|
208
216
|
expect(entity.cdate).toEqual(testEntity.cdate);
|
|
209
217
|
expect(entity.mdate).toEqual(testEntity.mdate);
|
|
@@ -213,8 +221,11 @@ describe('Entity', () => {
|
|
|
213
221
|
expect(entity.string).toEqual('test');
|
|
214
222
|
expect(entity.array).toEqual(['full', 'of', 'values', 500]);
|
|
215
223
|
expect(entity.number).toEqual(30);
|
|
224
|
+
await entity.reference?.$wake();
|
|
216
225
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
226
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
217
227
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
228
|
+
await entity.refObject?.entity.$wake();
|
|
218
229
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
219
230
|
});
|
|
220
231
|
|
|
@@ -239,6 +250,7 @@ describe('Entity', () => {
|
|
|
239
250
|
array: ['full', 'of', 'values', 500],
|
|
240
251
|
string: 'test',
|
|
241
252
|
null: null,
|
|
253
|
+
uniques: [],
|
|
242
254
|
},
|
|
243
255
|
class: 'TestModel',
|
|
244
256
|
});
|
|
@@ -288,8 +300,11 @@ describe('Entity', () => {
|
|
|
288
300
|
expect(testEntity.string).toEqual('good');
|
|
289
301
|
expect(testEntity.array).toEqual(['imanarray']);
|
|
290
302
|
expect(testEntity.number).toEqual(30);
|
|
303
|
+
await testEntity.reference?.$wake();
|
|
291
304
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
305
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
292
306
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
307
|
+
await testEntity.refObject?.entity.$wake();
|
|
293
308
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
294
309
|
|
|
295
310
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -311,7 +326,9 @@ describe('Entity', () => {
|
|
|
311
326
|
expect(testEntity.$hasTag('notag')).toEqual(false);
|
|
312
327
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
313
328
|
expect(testEntity.$hasTag('newtag')).toEqual(true);
|
|
329
|
+
await testEntity.reference?.$wake();
|
|
314
330
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
331
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
315
332
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
316
333
|
|
|
317
334
|
expect(await testEntity.$refresh()).toEqual(true);
|