@nymphjs/nymph 1.0.0-beta.12 → 1.0.0-beta.121
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 +588 -0
- package/README.md +23 -21
- package/dist/Entity.d.ts +295 -12
- package/dist/Entity.js +560 -148
- package/dist/Entity.js.map +1 -1
- package/dist/Entity.test.js +52 -13
- package/dist/Entity.test.js.map +1 -1
- package/dist/Entity.types.d.ts +256 -23
- package/dist/Entity.types.js +1 -2
- package/dist/Nymph.d.ts +590 -13
- package/dist/Nymph.js +846 -180
- package/dist/Nymph.js.map +1 -1
- package/dist/Nymph.types.d.ts +131 -8
- package/dist/Nymph.types.js +47 -5
- package/dist/Nymph.types.js.map +1 -1
- package/dist/conf/defaults.d.ts +1 -1
- package/dist/conf/defaults.js +26 -3
- package/dist/conf/defaults.js.map +1 -1
- package/dist/conf/index.d.ts +50 -2
- package/dist/conf/index.js +2 -8
- package/dist/conf/index.js.map +1 -1
- package/dist/driver/NymphDriver.d.ts +205 -40
- package/dist/driver/NymphDriver.js +712 -238
- package/dist/driver/NymphDriver.js.map +1 -1
- package/dist/driver/index.d.ts +1 -2
- package/dist/driver/index.js +2 -23
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/testArtifacts.d.ts +4 -4
- package/dist/driver/testArtifacts.js +1920 -1086
- package/dist/driver/testArtifacts.js.map +1 -1
- package/dist/errors/ClassNotAvailableError.js +1 -5
- package/dist/errors/ClassNotAvailableError.js.map +1 -1
- package/dist/errors/EntityConflictError.js +1 -5
- package/dist/errors/EntityConflictError.js.map +1 -1
- package/dist/errors/EntityInvalidDataError.d.ts +6 -0
- package/dist/errors/EntityInvalidDataError.js +8 -6
- package/dist/errors/EntityInvalidDataError.js.map +1 -1
- package/dist/errors/EntityIsSleepingReferenceError.js +1 -5
- package/dist/errors/EntityIsSleepingReferenceError.js.map +1 -1
- package/dist/errors/EntityUniqueConstraintError.d.ts +3 -0
- package/dist/errors/EntityUniqueConstraintError.js +7 -0
- package/dist/errors/EntityUniqueConstraintError.js.map +1 -0
- package/dist/errors/HttpError.d.ts +5 -0
- package/dist/errors/HttpError.js +11 -0
- package/dist/errors/HttpError.js.map +1 -0
- package/dist/errors/InvalidParametersError.js +1 -5
- package/dist/errors/InvalidParametersError.js.map +1 -1
- package/dist/errors/InvalidStateError.d.ts +3 -0
- package/dist/errors/InvalidStateError.js +7 -0
- package/dist/errors/InvalidStateError.js.map +1 -0
- package/dist/errors/NotConfiguredError.js +1 -5
- package/dist/errors/NotConfiguredError.js.map +1 -1
- package/dist/errors/QueryFailedError.d.ts +2 -1
- package/dist/errors/QueryFailedError.js +5 -6
- package/dist/errors/QueryFailedError.js.map +1 -1
- package/dist/errors/UnableToConnectError.js +1 -5
- package/dist/errors/UnableToConnectError.js.map +1 -1
- package/dist/errors/index.d.ts +11 -8
- package/dist/errors/index.js +11 -24
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/dist/index.js +14 -34
- package/dist/index.js.map +1 -1
- package/dist/nymphJoiProps.d.ts +1 -1
- package/dist/nymphJoiProps.js +10 -15
- package/dist/nymphJoiProps.js.map +1 -1
- package/dist/testArtifacts.d.ts +19 -6
- package/dist/testArtifacts.js +32 -37
- package/dist/testArtifacts.js.map +1 -1
- package/dist/testMocks.d.ts +27 -12
- package/dist/testMocks.js +40 -29
- package/dist/testMocks.js.map +1 -1
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +40 -29
- package/dist/utils.js.map +1 -1
- package/jest.config.js +31 -5
- package/package.json +33 -23
- package/src/Entity.test.ts +50 -7
- package/src/Entity.ts +489 -150
- package/src/Entity.types.ts +72 -74
- package/src/Nymph.ts +991 -324
- package/src/Nymph.types.ts +201 -27
- package/src/conf/defaults.ts +34 -1
- package/src/conf/index.ts +50 -2
- package/src/driver/NymphDriver.ts +898 -413
- package/src/driver/index.ts +1 -3
- package/src/driver/testArtifacts.ts +2557 -1629
- package/src/errors/EntityUniqueConstraintError.ts +6 -0
- package/src/errors/HttpError.ts +12 -0
- package/src/errors/InvalidStateError.ts +6 -0
- package/src/errors/QueryFailedError.ts +3 -1
- package/src/errors/index.ts +14 -8
- package/src/index.ts +11 -11
- package/src/nymphJoiProps.ts +2 -2
- package/src/testArtifacts.ts +20 -20
- package/src/testMocks.ts +76 -35
- package/src/utils.ts +39 -18
- package/tsconfig.json +6 -3
- package/typedoc.json +4 -0
- package/dist/conf/d.d.ts +0 -6
- package/dist/conf/d.js +0 -3
- package/dist/conf/d.js.map +0 -1
- package/src/conf/d.ts +0 -24
package/dist/utils.js
CHANGED
|
@@ -1,23 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.sortObj = exports.referencesToEntities = exports.entitiesToReferences = exports.classNamesToEntityConstructors = exports.uniqueStrings = exports.xor = void 0;
|
|
7
|
-
const Entity_1 = __importDefault(require("./Entity"));
|
|
8
|
-
function xor(a, b) {
|
|
1
|
+
import Entity from './Entity.js';
|
|
2
|
+
export function xor(a, b) {
|
|
9
3
|
return !!(a && !b) || (!a && b);
|
|
10
4
|
}
|
|
11
|
-
|
|
12
|
-
function uniqueStrings(array) {
|
|
5
|
+
export function uniqueStrings(array) {
|
|
13
6
|
const obj = {};
|
|
14
7
|
for (let i = 0; i < array.length; ++i) {
|
|
15
8
|
obj[array[i]] = true;
|
|
16
9
|
}
|
|
17
10
|
return Object.keys(obj);
|
|
18
11
|
}
|
|
19
|
-
|
|
20
|
-
function classNamesToEntityConstructors(nymph, selectors) {
|
|
12
|
+
export function classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag = false) {
|
|
21
13
|
const newSelectors = [];
|
|
22
14
|
for (const curSelector of selectors) {
|
|
23
15
|
const newSelector = { type: curSelector.type };
|
|
@@ -37,24 +29,31 @@ function classNamesToEntityConstructors(nymph, selectors) {
|
|
|
37
29
|
for (let i = 0; i < tmpArr.length; i++) {
|
|
38
30
|
const name = tmpArr[i][0];
|
|
39
31
|
const [qrefOptions, ...selectors] = tmpArr[i][1];
|
|
40
|
-
const QrefEntityClass =
|
|
32
|
+
const QrefEntityClass = qrefOptions.class
|
|
41
33
|
? nymph.getEntityClass(qrefOptions.class)
|
|
42
|
-
:
|
|
34
|
+
: nymph.getEntityClass('Entity');
|
|
35
|
+
if (enforceRestEnabledFlag && !QrefEntityClass.restEnabled) {
|
|
36
|
+
throw new Error('Not accessible.');
|
|
37
|
+
}
|
|
43
38
|
const options = { ...qrefOptions, class: QrefEntityClass };
|
|
44
39
|
if (!newSelector[key]) {
|
|
45
40
|
newSelector[key] = [];
|
|
46
41
|
}
|
|
47
42
|
newSelector[key].push([
|
|
48
43
|
name,
|
|
49
|
-
[
|
|
44
|
+
[
|
|
45
|
+
options,
|
|
46
|
+
...classNamesToEntityConstructors(nymph, selectors, enforceRestEnabledFlag),
|
|
47
|
+
],
|
|
50
48
|
]);
|
|
51
49
|
}
|
|
52
50
|
}
|
|
53
51
|
else if (key === 'selector' || key === '!selector') {
|
|
54
52
|
const tmpArr = (Array.isArray(value) ? value : [value]);
|
|
55
|
-
newSelector[key] = classNamesToEntityConstructors(nymph, tmpArr);
|
|
53
|
+
newSelector[key] = classNamesToEntityConstructors(nymph, tmpArr, enforceRestEnabledFlag);
|
|
56
54
|
}
|
|
57
55
|
else {
|
|
56
|
+
// @ts-ignore: ts doesn't know what value is here.
|
|
58
57
|
newSelector[key] = value;
|
|
59
58
|
}
|
|
60
59
|
}
|
|
@@ -62,26 +61,35 @@ function classNamesToEntityConstructors(nymph, selectors) {
|
|
|
62
61
|
}
|
|
63
62
|
return newSelectors;
|
|
64
63
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
export function entitiesToReferences(item, existingOnly) {
|
|
65
|
+
if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
|
|
66
|
+
return item;
|
|
67
|
+
}
|
|
68
|
+
else if (item instanceof Entity &&
|
|
69
|
+
typeof item.$toReference === 'function') {
|
|
70
|
+
// Convert entities to references.
|
|
71
|
+
return item.$toReference(existingOnly);
|
|
69
72
|
}
|
|
70
73
|
else if (Array.isArray(item)) {
|
|
71
|
-
|
|
74
|
+
// Recurse into lower arrays.
|
|
75
|
+
return item.map((entry) => entitiesToReferences(entry, existingOnly));
|
|
72
76
|
}
|
|
73
77
|
else if (item instanceof Object) {
|
|
74
78
|
let newObj = Object.create(item);
|
|
75
79
|
for (let [key, value] of Object.entries(item)) {
|
|
76
|
-
newObj[key] = entitiesToReferences(value);
|
|
80
|
+
newObj[key] = entitiesToReferences(value, existingOnly);
|
|
77
81
|
}
|
|
78
82
|
return newObj;
|
|
79
83
|
}
|
|
84
|
+
// Not an entity or array, just return it.
|
|
80
85
|
return item;
|
|
81
86
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
export function referencesToEntities(item, nymph, useSkipAc = false) {
|
|
88
|
+
if (item == null || Buffer.isBuffer(item) || ArrayBuffer.isView(item)) {
|
|
89
|
+
return item;
|
|
90
|
+
}
|
|
91
|
+
else if (Array.isArray(item)) {
|
|
92
|
+
// Check if it's a reference.
|
|
85
93
|
if (item[0] === 'nymph_entity_reference') {
|
|
86
94
|
try {
|
|
87
95
|
const EntityClass = nymph.getEntityClass(item[2]);
|
|
@@ -95,26 +103,29 @@ function referencesToEntities(item, nymph, useSkipAc = false) {
|
|
|
95
103
|
}
|
|
96
104
|
}
|
|
97
105
|
else {
|
|
106
|
+
// Recurse into lower arrays.
|
|
98
107
|
return item.map((entry) => referencesToEntities(entry, nymph, useSkipAc));
|
|
99
108
|
}
|
|
100
109
|
}
|
|
101
|
-
else if (
|
|
110
|
+
else if (Entity && item instanceof Object && !(item instanceof Entity)) {
|
|
102
111
|
for (let [key, value] of Object.entries(item)) {
|
|
103
112
|
item[key] = referencesToEntities(value, nymph);
|
|
104
113
|
}
|
|
105
114
|
}
|
|
115
|
+
// Not an array, just return it.
|
|
106
116
|
return item;
|
|
107
117
|
}
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
export function sortObj(obj) {
|
|
119
|
+
// adapted from
|
|
120
|
+
// http://am.aurlien.net/post/1221493460/sorting-javascript-objects
|
|
110
121
|
const tempArray = Object.keys(obj);
|
|
111
122
|
tempArray.sort();
|
|
112
123
|
for (let i = 0; i < tempArray.length; i++) {
|
|
113
124
|
const temp = obj[tempArray[i]];
|
|
114
125
|
delete obj[tempArray[i]];
|
|
126
|
+
// @ts-ignore: string can't be used to index type T?? yes, it can.
|
|
115
127
|
obj[tempArray[i]] = temp;
|
|
116
128
|
}
|
|
117
129
|
return obj;
|
|
118
130
|
}
|
|
119
|
-
exports.sortObj = sortObj;
|
|
120
131
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
const jestConfig = {
|
|
2
|
+
extensionsToTreatAsEsm: ['.ts', '.tsx'],
|
|
3
|
+
testMatch: [
|
|
4
|
+
'<rootDir>/src/**/__tests__/**/*.{js,ts,jsx,tsx,mjs,mts}',
|
|
5
|
+
'<rootDir>/src/**/?(*.)(spec|test).{js,ts,jsx,tsx,mjs,mts}',
|
|
6
|
+
],
|
|
7
|
+
transform: {
|
|
8
|
+
'^.+\\.(ts|tsx|mts)$': [
|
|
9
|
+
'@swc/jest',
|
|
10
|
+
{
|
|
11
|
+
jsc: {
|
|
12
|
+
parser: {
|
|
13
|
+
syntax: 'typescript',
|
|
14
|
+
tsx: true,
|
|
15
|
+
decorators: true,
|
|
16
|
+
},
|
|
17
|
+
target: 'es2023',
|
|
18
|
+
},
|
|
19
|
+
module: {
|
|
20
|
+
type: 'commonjs',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$'],
|
|
26
|
+
moduleDirectories: ['node_modules', 'src'],
|
|
27
|
+
moduleNameMapper: {
|
|
28
|
+
'^(\\.|\\.\\.)\\/(.+)\\.js': '$1/$2',
|
|
29
|
+
},
|
|
6
30
|
};
|
|
31
|
+
|
|
32
|
+
export default jestConfig;
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nymphjs/nymph",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
4
|
-
"description": "
|
|
5
|
-
"type": "
|
|
3
|
+
"version": "1.0.0-beta.121",
|
|
4
|
+
"description": "Nymph.js - Nymph ORM",
|
|
5
|
+
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"keywords": [
|
|
@@ -14,38 +14,48 @@
|
|
|
14
14
|
"clean": "test -d dist && rm -r dist || true",
|
|
15
15
|
"build": "tsc",
|
|
16
16
|
"watch": "tsc --watch",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"test
|
|
17
|
+
"prepublish": "npm run clean && npm run build",
|
|
18
|
+
"typecheck": "npx tsc --noEmit",
|
|
19
|
+
"test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests",
|
|
20
|
+
"test:watch": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests --watch"
|
|
20
21
|
},
|
|
21
22
|
"publishConfig": {
|
|
22
23
|
"access": "public"
|
|
23
24
|
},
|
|
25
|
+
"homepage": "https://nymph.io",
|
|
24
26
|
"repository": {
|
|
25
27
|
"type": "git",
|
|
26
|
-
"url": "
|
|
28
|
+
"url": "https://forge.sciactive.com/sciactive/nymphjs.git",
|
|
29
|
+
"directory": "packages/nymph"
|
|
27
30
|
},
|
|
28
|
-
"author": "Hunter Perrin <hperrin@
|
|
31
|
+
"author": "Hunter Perrin <hperrin@port87.com>",
|
|
29
32
|
"bugs": {
|
|
30
|
-
"url": "https://
|
|
33
|
+
"url": "https://forge.sciactive.com/sciactive/nymphjs/issues"
|
|
31
34
|
},
|
|
32
35
|
"license": "Apache-2.0",
|
|
33
36
|
"dependencies": {
|
|
34
|
-
"@nymphjs/guid": "^1.0.0-beta.
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
37
|
+
"@nymphjs/guid": "^1.0.0-beta.121",
|
|
38
|
+
"@sciactive/tokenizer": "^3.4.0",
|
|
39
|
+
"debug": "^4.4.3",
|
|
40
|
+
"joi": "^18.2.5",
|
|
41
|
+
"locutus": "^3.0.36",
|
|
42
|
+
"lodash-es": "^4.18.1",
|
|
43
|
+
"n-readlines": "^3.4.1"
|
|
39
44
|
},
|
|
40
45
|
"devDependencies": {
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"@
|
|
44
|
-
"@types/
|
|
45
|
-
"@types/
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
46
|
+
"@swc/core": "^1.16.1",
|
|
47
|
+
"@swc/jest": "^0.2.39",
|
|
48
|
+
"@tsconfig/recommended": "^1.0.13",
|
|
49
|
+
"@types/debug": "^4.1.13",
|
|
50
|
+
"@types/jest": "^30.0.0",
|
|
51
|
+
"@types/locutus": "^0.0.8",
|
|
52
|
+
"@types/lodash-es": "^4.17.12",
|
|
53
|
+
"@types/n-readlines": "^1.0.6",
|
|
54
|
+
"@types/node": "^26.2.0",
|
|
55
|
+
"cross-env": "^10.1.0",
|
|
56
|
+
"jest": "^30.4.2",
|
|
57
|
+
"ts-node": "^10.9.2",
|
|
58
|
+
"typescript": "^7.0.2"
|
|
49
59
|
},
|
|
50
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "74e39aff81353d16831656431e97b66ac6effc18"
|
|
51
61
|
}
|
package/src/Entity.test.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jest } from '@jest/globals';
|
|
2
|
+
|
|
3
|
+
import { cloneDeep } from 'lodash-es';
|
|
4
|
+
|
|
5
|
+
import { MockNymph } from './testMocks.js';
|
|
2
6
|
import {
|
|
3
7
|
TestBModel as TestBModelClass,
|
|
4
8
|
TestModel as TestModelClass,
|
|
5
9
|
TestModelData,
|
|
6
|
-
} from './testArtifacts';
|
|
7
|
-
import { cloneDeep } from 'lodash';
|
|
10
|
+
} from './testArtifacts.js';
|
|
8
11
|
|
|
9
12
|
const nymph = new MockNymph();
|
|
10
13
|
|
|
@@ -142,7 +145,7 @@ describe('Entity', () => {
|
|
|
142
145
|
await testEntity.$refresh();
|
|
143
146
|
|
|
144
147
|
expect(testEntityCopy.mdate ?? Infinity).toBeLessThanOrEqual(
|
|
145
|
-
testEntity.mdate ?? 0
|
|
148
|
+
testEntity.mdate ?? 0,
|
|
146
149
|
);
|
|
147
150
|
});
|
|
148
151
|
|
|
@@ -156,13 +159,25 @@ describe('Entity', () => {
|
|
|
156
159
|
]);
|
|
157
160
|
});
|
|
158
161
|
|
|
162
|
+
it('toReference works even on an unsaved entity', () => {
|
|
163
|
+
const unsavedEntity = TestModel.factorySync();
|
|
164
|
+
const reference = unsavedEntity.$toReference();
|
|
165
|
+
|
|
166
|
+
expect(unsavedEntity.guid).toBeNull();
|
|
167
|
+
expect(reference).toEqual([
|
|
168
|
+
'nymph_entity_reference',
|
|
169
|
+
unsavedEntity.$getGuaranteedGUID(),
|
|
170
|
+
'TestModel',
|
|
171
|
+
]);
|
|
172
|
+
});
|
|
173
|
+
|
|
159
174
|
it('tags work', async () => {
|
|
160
175
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
161
176
|
testEntity.$addTag('test', 'test2');
|
|
162
177
|
expect(testEntity.$hasTag('test', 'test2')).toEqual(true);
|
|
163
178
|
testEntity.$addTag('test', 'test3', 'test4', 'test5', 'test6');
|
|
164
179
|
expect(
|
|
165
|
-
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6')
|
|
180
|
+
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6'),
|
|
166
181
|
).toEqual(true);
|
|
167
182
|
testEntity.$removeTag('test2');
|
|
168
183
|
expect(testEntity.$hasTag('test2')).toEqual(false);
|
|
@@ -183,27 +198,34 @@ describe('Entity', () => {
|
|
|
183
198
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
184
199
|
});
|
|
185
200
|
|
|
186
|
-
it('references
|
|
201
|
+
it('references work', async () => {
|
|
187
202
|
await testEntity.$refresh();
|
|
188
203
|
|
|
204
|
+
await testEntity.reference?.$wake();
|
|
189
205
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
206
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
190
207
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
208
|
+
await testEntity.refObject?.entity.$wake();
|
|
191
209
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
192
210
|
|
|
193
211
|
const entity = await TestModel.factory(testEntity.guid as string);
|
|
194
212
|
|
|
213
|
+
await entity.reference?.$wake();
|
|
195
214
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
215
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
196
216
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
217
|
+
await entity.refObject?.entity.$wake();
|
|
197
218
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
198
219
|
});
|
|
199
220
|
|
|
200
|
-
it('sleeping references wake up', () => {
|
|
221
|
+
it('sleeping references wake up', async () => {
|
|
201
222
|
const entity = TestModel.factoryReference([
|
|
202
223
|
'nymph_entity_reference',
|
|
203
224
|
testEntity.guid as string,
|
|
204
225
|
'TestModel',
|
|
205
226
|
]) as TestModelClass & TestModelData;
|
|
206
227
|
|
|
228
|
+
await entity.$wake();
|
|
207
229
|
expect(entity.guid).toEqual(testEntity.guid);
|
|
208
230
|
expect(entity.cdate).toEqual(testEntity.cdate);
|
|
209
231
|
expect(entity.mdate).toEqual(testEntity.mdate);
|
|
@@ -213,8 +235,11 @@ describe('Entity', () => {
|
|
|
213
235
|
expect(entity.string).toEqual('test');
|
|
214
236
|
expect(entity.array).toEqual(['full', 'of', 'values', 500]);
|
|
215
237
|
expect(entity.number).toEqual(30);
|
|
238
|
+
await entity.reference?.$wake();
|
|
216
239
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
240
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
217
241
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
242
|
+
await entity.refObject?.entity.$wake();
|
|
218
243
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
219
244
|
});
|
|
220
245
|
|
|
@@ -239,6 +264,7 @@ describe('Entity', () => {
|
|
|
239
264
|
array: ['full', 'of', 'values', 500],
|
|
240
265
|
string: 'test',
|
|
241
266
|
null: null,
|
|
267
|
+
uniques: [],
|
|
242
268
|
},
|
|
243
269
|
class: 'TestModel',
|
|
244
270
|
});
|
|
@@ -288,8 +314,11 @@ describe('Entity', () => {
|
|
|
288
314
|
expect(testEntity.string).toEqual('good');
|
|
289
315
|
expect(testEntity.array).toEqual(['imanarray']);
|
|
290
316
|
expect(testEntity.number).toEqual(30);
|
|
317
|
+
await testEntity.reference?.$wake();
|
|
291
318
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
319
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
292
320
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
321
|
+
await testEntity.refObject?.entity.$wake();
|
|
293
322
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
294
323
|
|
|
295
324
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -311,7 +340,9 @@ describe('Entity', () => {
|
|
|
311
340
|
expect(testEntity.$hasTag('notag')).toEqual(false);
|
|
312
341
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
313
342
|
expect(testEntity.$hasTag('newtag')).toEqual(true);
|
|
343
|
+
await testEntity.reference?.$wake();
|
|
314
344
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
345
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
315
346
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
316
347
|
|
|
317
348
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -403,4 +434,16 @@ describe('Entity', () => {
|
|
|
403
434
|
|
|
404
435
|
expect(thrown).toEqual(true);
|
|
405
436
|
});
|
|
437
|
+
|
|
438
|
+
it('JSON with new entities works', async () => {
|
|
439
|
+
testEntity.reference = await TestModel.factory();
|
|
440
|
+
|
|
441
|
+
// Test that an old JSON payload causes a conflict.
|
|
442
|
+
const json = JSON.stringify(testEntity);
|
|
443
|
+
const data = JSON.parse(json);
|
|
444
|
+
|
|
445
|
+
testEntity.$jsonAcceptData(data);
|
|
446
|
+
|
|
447
|
+
expect(testEntity.reference.guid).toBeNull();
|
|
448
|
+
});
|
|
406
449
|
});
|