@nymphjs/nymph 1.0.0-beta.1 → 1.0.0-beta.100
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 +535 -0
- package/README.md +14 -22
- package/dist/Entity.d.ts +293 -10
- package/dist/Entity.js +571 -149
- package/dist/Entity.js.map +1 -1
- package/dist/Entity.test.js +67 -26
- 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 +497 -13
- package/dist/Nymph.js +761 -188
- package/dist/Nymph.js.map +1 -1
- package/dist/Nymph.types.d.ts +95 -26
- package/dist/Nymph.types.js +3 -5
- package/dist/Nymph.types.js.map +1 -1
- package/dist/conf/d.d.ts +43 -0
- package/dist/conf/d.js +1 -2
- 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 +2 -2
- package/dist/conf/index.js +2 -8
- package/dist/conf/index.js.map +1 -1
- package/dist/driver/NymphDriver.d.ts +181 -43
- package/dist/driver/NymphDriver.js +532 -285
- package/dist/driver/NymphDriver.js.map +1 -1
- package/dist/driver/index.d.ts +2 -2
- package/dist/driver/index.js +3 -23
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/testArtifacts.d.ts +2 -2
- package/dist/driver/testArtifacts.js +939 -219
- 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/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.js +2 -5
- 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 +10 -8
- package/dist/errors/index.js +10 -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.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 +28 -11
- package/dist/testMocks.js +44 -28
- 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 +11 -2
- package/package.json +24 -20
- package/src/Entity.test.ts +63 -13
- package/src/Entity.ts +498 -156
- package/src/Entity.types.ts +72 -74
- package/src/Nymph.ts +904 -336
- package/src/Nymph.types.ts +179 -44
- package/src/conf/d.ts +25 -0
- package/src/conf/defaults.ts +34 -1
- package/src/conf/index.ts +2 -2
- package/src/driver/NymphDriver.ts +650 -460
- package/src/driver/index.ts +2 -2
- package/src/driver/testArtifacts.ts +966 -196
- package/src/errors/EntityUniqueConstraintError.ts +6 -0
- package/src/errors/InvalidStateError.ts +6 -0
- package/src/errors/index.ts +12 -8
- package/src/index.ts +11 -11
- package/src/nymphJoiProps.ts +2 -2
- package/src/testArtifacts.ts +20 -20
- package/src/testMocks.ts +85 -37
- package/src/type/locutus.d.ts +3 -0
- package/src/utils.ts +39 -18
- package/tsconfig.json +5 -3
- package/typedoc.json +4 -0
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,15 @@
|
|
|
1
|
+
import { createDefaultEsmPreset } from 'ts-jest';
|
|
2
|
+
|
|
3
|
+
const presetConfig = createDefaultEsmPreset();
|
|
4
|
+
|
|
1
5
|
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
|
2
|
-
|
|
3
|
-
|
|
6
|
+
const jestConfig = {
|
|
7
|
+
...presetConfig,
|
|
4
8
|
testEnvironment: 'node',
|
|
5
9
|
rootDir: 'src/',
|
|
10
|
+
moduleNameMapper: {
|
|
11
|
+
'^(\\.|\\.\\.)\\/(.+)\\.js': '$1/$2',
|
|
12
|
+
},
|
|
6
13
|
};
|
|
14
|
+
|
|
15
|
+
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.100",
|
|
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,9 +14,9 @@
|
|
|
14
14
|
"clean": "test -d dist && rm -r dist || true",
|
|
15
15
|
"build": "tsc",
|
|
16
16
|
"watch": "tsc --watch",
|
|
17
|
-
"
|
|
18
|
-
"test": "jest",
|
|
19
|
-
"test:watch": "jest --watch"
|
|
17
|
+
"prepublish": "npm run clean && npm run build",
|
|
18
|
+
"test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest",
|
|
19
|
+
"test:watch": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" npx jest --watch"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"access": "public"
|
|
@@ -31,21 +31,25 @@
|
|
|
31
31
|
},
|
|
32
32
|
"license": "Apache-2.0",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@nymphjs/guid": "^1.0.0-beta.
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
34
|
+
"@nymphjs/guid": "^1.0.0-beta.100",
|
|
35
|
+
"@sciactive/tokenizer": "^3.0.2",
|
|
36
|
+
"debug": "^4.4.0",
|
|
37
|
+
"joi": "^17.13.3",
|
|
38
|
+
"locutus": "^2.0.32",
|
|
39
|
+
"lodash-es": "^4.17.21",
|
|
40
|
+
"n-readlines": "^1.0.3"
|
|
39
41
|
},
|
|
40
42
|
"devDependencies": {
|
|
41
|
-
"@tsconfig/recommended": "^1.0.
|
|
42
|
-
"@types/
|
|
43
|
-
"@types/
|
|
44
|
-
"@types/
|
|
45
|
-
"@types/
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
43
|
+
"@tsconfig/recommended": "^1.0.8",
|
|
44
|
+
"@types/debug": "^4.1.12",
|
|
45
|
+
"@types/jest": "^29.5.14",
|
|
46
|
+
"@types/locutus": "^0.0.8",
|
|
47
|
+
"@types/lodash-es": "^4.17.12",
|
|
48
|
+
"@types/n-readlines": "^1.0.6",
|
|
49
|
+
"jest": "^29.7.0",
|
|
50
|
+
"ts-jest": "^29.2.5",
|
|
51
|
+
"ts-node": "^10.9.2",
|
|
52
|
+
"typescript": "^5.7.2"
|
|
49
53
|
},
|
|
50
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "254b2ccd1cc7838dcbf08e860d2833475a15b244"
|
|
51
55
|
}
|
package/src/Entity.test.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { cloneDeep } from 'lodash';
|
|
1
|
+
import { jest } from '@jest/globals';
|
|
2
|
+
|
|
3
|
+
import { cloneDeep } from 'lodash-es';
|
|
4
|
+
|
|
5
|
+
import { MockNymph } from './testMocks.js';
|
|
6
|
+
import {
|
|
7
|
+
TestBModel as TestBModelClass,
|
|
8
|
+
TestModel as TestModelClass,
|
|
9
|
+
TestModelData,
|
|
10
|
+
} from './testArtifacts.js';
|
|
4
11
|
|
|
5
12
|
const nymph = new MockNymph();
|
|
6
13
|
|
|
@@ -9,11 +16,11 @@ jest.mock('./Nymph', () => ({
|
|
|
9
16
|
default: nymph,
|
|
10
17
|
}));
|
|
11
18
|
|
|
12
|
-
nymph.addEntityClass(
|
|
13
|
-
nymph.addEntityClass(
|
|
19
|
+
const TestModel = nymph.addEntityClass(TestModelClass);
|
|
20
|
+
const TestBModel = nymph.addEntityClass(TestBModelClass);
|
|
14
21
|
|
|
15
22
|
let testEntity = TestModel.factorySync();
|
|
16
|
-
let entityReferenceTest:
|
|
23
|
+
let entityReferenceTest: TestModelClass & TestModelData;
|
|
17
24
|
let entityReferenceGuid: string;
|
|
18
25
|
|
|
19
26
|
describe('Entity', () => {
|
|
@@ -71,7 +78,7 @@ describe('Entity', () => {
|
|
|
71
78
|
|
|
72
79
|
it('array searching work', async () => {
|
|
73
80
|
const testInArray = await TestModel.factory(testEntity.guid as string);
|
|
74
|
-
const array: (string | (
|
|
81
|
+
const array: (string | (TestModelClass & TestModelData))[] = [
|
|
75
82
|
'thing',
|
|
76
83
|
testInArray,
|
|
77
84
|
];
|
|
@@ -125,17 +132,20 @@ describe('Entity', () => {
|
|
|
125
132
|
});
|
|
126
133
|
|
|
127
134
|
it('conflict fails to save', async () => {
|
|
135
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
136
|
+
|
|
128
137
|
const testEntityCopy = await TestModel.factory(testEntity.guid as string);
|
|
129
138
|
expect(await testEntityCopy.$save()).toEqual(true);
|
|
139
|
+
expect(testEntityCopy.mdate ?? 0).toBeGreaterThan(testEntity.mdate ?? 0);
|
|
130
140
|
|
|
131
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
141
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
132
142
|
|
|
133
143
|
expect(await testEntity.$save()).toEqual(false);
|
|
134
144
|
|
|
135
145
|
await testEntity.$refresh();
|
|
136
146
|
|
|
137
147
|
expect(testEntityCopy.mdate ?? Infinity).toBeLessThanOrEqual(
|
|
138
|
-
testEntity.mdate ?? 0
|
|
148
|
+
testEntity.mdate ?? 0,
|
|
139
149
|
);
|
|
140
150
|
});
|
|
141
151
|
|
|
@@ -149,13 +159,25 @@ describe('Entity', () => {
|
|
|
149
159
|
]);
|
|
150
160
|
});
|
|
151
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
|
+
|
|
152
174
|
it('tags work', async () => {
|
|
153
175
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
154
176
|
testEntity.$addTag('test', 'test2');
|
|
155
177
|
expect(testEntity.$hasTag('test', 'test2')).toEqual(true);
|
|
156
178
|
testEntity.$addTag('test', 'test3', 'test4', 'test5', 'test6');
|
|
157
179
|
expect(
|
|
158
|
-
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6')
|
|
180
|
+
testEntity.$hasTag('test', 'test3', 'test4', 'test5', 'test6'),
|
|
159
181
|
).toEqual(true);
|
|
160
182
|
testEntity.$removeTag('test2');
|
|
161
183
|
expect(testEntity.$hasTag('test2')).toEqual(false);
|
|
@@ -176,27 +198,34 @@ describe('Entity', () => {
|
|
|
176
198
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
177
199
|
});
|
|
178
200
|
|
|
179
|
-
it('references
|
|
201
|
+
it('references work', async () => {
|
|
180
202
|
await testEntity.$refresh();
|
|
181
203
|
|
|
204
|
+
await testEntity.reference?.$wake();
|
|
182
205
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
206
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
183
207
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
208
|
+
await testEntity.refObject?.entity.$wake();
|
|
184
209
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
185
210
|
|
|
186
211
|
const entity = await TestModel.factory(testEntity.guid as string);
|
|
187
212
|
|
|
213
|
+
await entity.reference?.$wake();
|
|
188
214
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
215
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
189
216
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
217
|
+
await entity.refObject?.entity.$wake();
|
|
190
218
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
191
219
|
});
|
|
192
220
|
|
|
193
|
-
it('sleeping references wake up', () => {
|
|
221
|
+
it('sleeping references wake up', async () => {
|
|
194
222
|
const entity = TestModel.factoryReference([
|
|
195
223
|
'nymph_entity_reference',
|
|
196
224
|
testEntity.guid as string,
|
|
197
225
|
'TestModel',
|
|
198
|
-
]) as
|
|
226
|
+
]) as TestModelClass & TestModelData;
|
|
199
227
|
|
|
228
|
+
await entity.$wake();
|
|
200
229
|
expect(entity.guid).toEqual(testEntity.guid);
|
|
201
230
|
expect(entity.cdate).toEqual(testEntity.cdate);
|
|
202
231
|
expect(entity.mdate).toEqual(testEntity.mdate);
|
|
@@ -206,8 +235,11 @@ describe('Entity', () => {
|
|
|
206
235
|
expect(entity.string).toEqual('test');
|
|
207
236
|
expect(entity.array).toEqual(['full', 'of', 'values', 500]);
|
|
208
237
|
expect(entity.number).toEqual(30);
|
|
238
|
+
await entity.reference?.$wake();
|
|
209
239
|
expect(entity.reference?.guid).toEqual(entityReferenceGuid);
|
|
240
|
+
await Promise.all(entity.refArray?.map((e) => e.$wake()) || []);
|
|
210
241
|
expect(entity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
242
|
+
await entity.refObject?.entity.$wake();
|
|
211
243
|
expect(entity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
212
244
|
});
|
|
213
245
|
|
|
@@ -232,6 +264,7 @@ describe('Entity', () => {
|
|
|
232
264
|
array: ['full', 'of', 'values', 500],
|
|
233
265
|
string: 'test',
|
|
234
266
|
null: null,
|
|
267
|
+
uniques: [],
|
|
235
268
|
},
|
|
236
269
|
class: 'TestModel',
|
|
237
270
|
});
|
|
@@ -281,8 +314,11 @@ describe('Entity', () => {
|
|
|
281
314
|
expect(testEntity.string).toEqual('good');
|
|
282
315
|
expect(testEntity.array).toEqual(['imanarray']);
|
|
283
316
|
expect(testEntity.number).toEqual(30);
|
|
317
|
+
await testEntity.reference?.$wake();
|
|
284
318
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
319
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
285
320
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
321
|
+
await testEntity.refObject?.entity.$wake();
|
|
286
322
|
expect(testEntity.refObject?.entity.guid).toEqual(entityReferenceGuid);
|
|
287
323
|
|
|
288
324
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -304,7 +340,9 @@ describe('Entity', () => {
|
|
|
304
340
|
expect(testEntity.$hasTag('notag')).toEqual(false);
|
|
305
341
|
expect(testEntity.$hasTag('test')).toEqual(true);
|
|
306
342
|
expect(testEntity.$hasTag('newtag')).toEqual(true);
|
|
343
|
+
await testEntity.reference?.$wake();
|
|
307
344
|
expect(testEntity.reference?.guid).toEqual(entityReferenceGuid);
|
|
345
|
+
await Promise.all(testEntity.refArray?.map((e) => e.$wake()) || []);
|
|
308
346
|
expect(testEntity.refArray?.[0].guid).toEqual(entityReferenceGuid);
|
|
309
347
|
|
|
310
348
|
expect(await testEntity.$refresh()).toEqual(true);
|
|
@@ -396,4 +434,16 @@ describe('Entity', () => {
|
|
|
396
434
|
|
|
397
435
|
expect(thrown).toEqual(true);
|
|
398
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
|
+
});
|
|
399
449
|
});
|