@nymphjs/nymph 1.0.0-beta.7 → 1.0.0-beta.70
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 +320 -0
- package/README.md +13 -21
- 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 +39 -17
- package/dist/Entity.test.js.map +1 -1
- package/dist/Entity.types.d.ts +225 -19
- package/dist/Nymph.d.ts +423 -11
- package/dist/Nymph.js +685 -176
- package/dist/Nymph.js.map +1 -1
- package/dist/Nymph.types.d.ts +31 -7
- package/dist/Nymph.types.js +2 -1
- package/dist/Nymph.types.js.map +1 -1
- package/dist/conf/d.d.ts +26 -0
- package/dist/conf/defaults.js +22 -0
- package/dist/conf/defaults.js.map +1 -1
- package/dist/driver/NymphDriver.d.ts +129 -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 +336 -42
- 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 +15 -10
- package/dist/testMocks.js +37 -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 +32 -11
- package/src/Entity.ts +423 -134
- package/src/Entity.types.ts +32 -66
- package/src/Nymph.ts +618 -195
- package/src/Nymph.types.ts +97 -26
- package/src/conf/d.ts +8 -0
- package/src/conf/defaults.ts +24 -0
- package/src/driver/NymphDriver.ts +281 -311
- package/src/driver/testArtifacts.ts +384 -173
- 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 +64 -32
- 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,26 +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);
|
|
36
|
-
|
|
39
|
+
// class NymphEntity extends Entity {}
|
|
40
|
+
this.Entity = this.addEntityClass(Entity_1.default);
|
|
37
41
|
}
|
|
38
|
-
addEntityClass(
|
|
39
|
-
|
|
40
|
-
|
|
42
|
+
addEntityClass(EntityClass) {
|
|
43
|
+
const nymph = this;
|
|
44
|
+
this.entityClasses[EntityClass.class] = class extends EntityClass {
|
|
45
|
+
static nymph = nymph;
|
|
46
|
+
constructor(...args) {
|
|
47
|
+
super(...args);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
return this.entityClasses[EntityClass.class];
|
|
41
51
|
}
|
|
42
52
|
getEntityClass(className) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
+
}
|
|
47
70
|
}
|
|
48
|
-
throw new errors_1.ClassNotAvailableError(
|
|
71
|
+
throw new errors_1.ClassNotAvailableError(`Tried to use missing class by etype "${etype}".`);
|
|
49
72
|
}
|
|
50
73
|
async getEntity(options = {}, ...selectors) {
|
|
51
|
-
|
|
74
|
+
// @ts-ignore: The selector type is correct here.
|
|
75
|
+
return await this.driver.getEntity(options, ...selectors);
|
|
52
76
|
}
|
|
53
77
|
async saveEntity(entity) {
|
|
54
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.70",
|
|
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.70",
|
|
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": "f9462cc4f589e8b2d8bdaf7bf7b985c7dc34321a"
|
|
51
53
|
}
|
package/src/Entity.test.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import { MockNymph } from './testMocks';
|
|
2
|
-
import { TestBModel, TestModel, TestModelData } from './testArtifacts';
|
|
3
1
|
import { cloneDeep } from 'lodash';
|
|
4
2
|
|
|
3
|
+
import { MockNymph } from './testMocks';
|
|
4
|
+
import {
|
|
5
|
+
TestBModel as TestBModelClass,
|
|
6
|
+
TestModel as TestModelClass,
|
|
7
|
+
TestModelData,
|
|
8
|
+
} from './testArtifacts';
|
|
9
|
+
|
|
5
10
|
const nymph = new MockNymph();
|
|
6
11
|
|
|
7
12
|
jest.mock('./Nymph', () => ({
|
|
@@ -9,11 +14,11 @@ jest.mock('./Nymph', () => ({
|
|
|
9
14
|
default: nymph,
|
|
10
15
|
}));
|
|
11
16
|
|
|
12
|
-
nymph.addEntityClass(
|
|
13
|
-
nymph.addEntityClass(
|
|
17
|
+
const TestModel = nymph.addEntityClass(TestModelClass);
|
|
18
|
+
const TestBModel = nymph.addEntityClass(TestBModelClass);
|
|
14
19
|
|
|
15
20
|
let testEntity = TestModel.factorySync();
|
|
16
|
-
let entityReferenceTest:
|
|
21
|
+
let entityReferenceTest: TestModelClass & TestModelData;
|
|
17
22
|
let entityReferenceGuid: string;
|
|
18
23
|
|
|
19
24
|
describe('Entity', () => {
|
|
@@ -71,7 +76,7 @@ describe('Entity', () => {
|
|
|
71
76
|
|
|
72
77
|
it('array searching work', async () => {
|
|
73
78
|
const testInArray = await TestModel.factory(testEntity.guid as string);
|
|
74
|
-
const array: (string | (
|
|
79
|
+
const array: (string | (TestModelClass & TestModelData))[] = [
|
|
75
80
|
'thing',
|
|
76
81
|
testInArray,
|
|
77
82
|
];
|
|
@@ -138,7 +143,7 @@ describe('Entity', () => {
|
|
|
138
143
|
await testEntity.$refresh();
|
|
139
144
|
|
|
140
145
|
expect(testEntityCopy.mdate ?? Infinity).toBeLessThanOrEqual(
|
|
141
|
-
testEntity.mdate ?? 0
|
|
146
|
+
testEntity.mdate ?? 0,
|
|
142
147
|
);
|
|
143
148
|
});
|
|
144
149
|
|
|
@@ -158,7 +163,7 @@ describe('Entity', () => {
|
|
|
158
163
|
expect(testEntity.$hasTag('test', 'test2')).toEqual(true);
|
|
159
164
|
testEntity.$addTag('test', 'test3', 'test4', 'test5', 'test6');
|
|
160
165
|
expect(
|
|
161
|
-
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6')
|
|
166
|
+
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6'),
|
|
162
167
|
).toEqual(true);
|
|
163
168
|
testEntity.$removeTag('test2');
|
|
164
169
|
expect(testEntity.$hasTag('test2')).toEqual(false);
|
|
@@ -179,27 +184,34 @@ describe('Entity', () => {
|
|
|
179
184
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
180
185
|
});
|
|
181
186
|
|
|
182
|
-
it('references
|
|
187
|
+
it('references work', async () => {
|
|
183
188
|
await testEntity.$refresh();
|
|
184
189
|
|
|
190
|
+
await testEntity.reference?.$wake();
|
|
185
191
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
192
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
186
193
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
194
|
+
await testEntity.refObject?.entity.$wake();
|
|
187
195
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
188
196
|
|
|
189
197
|
const entity = await TestModel.factory(testEntity.guid as string);
|
|
190
198
|
|
|
199
|
+
await entity.reference?.$wake();
|
|
191
200
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
201
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
192
202
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
203
|
+
await entity.refObject?.entity.$wake();
|
|
193
204
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
194
205
|
});
|
|
195
206
|
|
|
196
|
-
it('sleeping references wake up', () => {
|
|
207
|
+
it('sleeping references wake up', async () => {
|
|
197
208
|
const entity = TestModel.factoryReference([
|
|
198
209
|
'nymph_entity_reference',
|
|
199
210
|
testEntity.guid as string,
|
|
200
211
|
'TestModel',
|
|
201
|
-
]) as
|
|
212
|
+
]) as TestModelClass & TestModelData;
|
|
202
213
|
|
|
214
|
+
await entity.$wake();
|
|
203
215
|
expect(entity.guid).toEqual(testEntity.guid);
|
|
204
216
|
expect(entity.cdate).toEqual(testEntity.cdate);
|
|
205
217
|
expect(entity.mdate).toEqual(testEntity.mdate);
|
|
@@ -209,8 +221,11 @@ describe('Entity', () => {
|
|
|
209
221
|
expect(entity.string).toEqual('test');
|
|
210
222
|
expect(entity.array).toEqual(['full', 'of', 'values', 500]);
|
|
211
223
|
expect(entity.number).toEqual(30);
|
|
224
|
+
await entity.reference?.$wake();
|
|
212
225
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
226
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
213
227
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
228
|
+
await entity.refObject?.entity.$wake();
|
|
214
229
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
215
230
|
});
|
|
216
231
|
|
|
@@ -235,6 +250,7 @@ describe('Entity', () => {
|
|
|
235
250
|
array: ['full', 'of', 'values', 500],
|
|
236
251
|
string: 'test',
|
|
237
252
|
null: null,
|
|
253
|
+
uniques: [],
|
|
238
254
|
},
|
|
239
255
|
class: 'TestModel',
|
|
240
256
|
});
|
|
@@ -284,8 +300,11 @@ describe('Entity', () => {
|
|
|
284
300
|
expect(testEntity.string).toEqual('good');
|
|
285
301
|
expect(testEntity.array).toEqual(['imanarray']);
|
|
286
302
|
expect(testEntity.number).toEqual(30);
|
|
303
|
+
await testEntity.reference?.$wake();
|
|
287
304
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
305
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
288
306
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
307
|
+
await testEntity.refObject?.entity.$wake();
|
|
289
308
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
290
309
|
|
|
291
310
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -307,7 +326,9 @@ describe('Entity', () => {
|
|
|
307
326
|
expect(testEntity.$hasTag('notag')).toEqual(false);
|
|
308
327
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
309
328
|
expect(testEntity.$hasTag('newtag')).toEqual(true);
|
|
329
|
+
await testEntity.reference?.$wake();
|
|
310
330
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
331
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
311
332
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
312
333
|
|
|
313
334
|
expect(await testEntity.$refresh()).toEqual(true);
|