@nymphjs/nymph 1.0.0-beta.46 → 1.0.0-beta.48
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 +8 -0
- package/README.md +3 -3
- package/package.json +12 -12
- package/src/Entity.test.ts +2 -2
- package/src/Entity.ts +26 -26
- package/src/Nymph.ts +9 -9
- package/src/Nymph.types.ts +33 -33
- package/src/driver/NymphDriver.ts +50 -50
- package/src/driver/testArtifacts.ts +125 -125
- package/src/nymphJoiProps.ts +2 -2
- package/src/testArtifacts.ts +1 -1
- package/src/testMocks.ts +5 -5
- package/src/utils.ts +4 -4
|
@@ -28,7 +28,7 @@ export default abstract class NymphDriver {
|
|
|
28
28
|
protected nymph: Nymph = new Proxy({} as Nymph, {
|
|
29
29
|
get() {
|
|
30
30
|
throw new Error(
|
|
31
|
-
'Attempted access of Nymph instance before driver initialization!'
|
|
31
|
+
'Attempted access of Nymph instance before driver initialization!',
|
|
32
32
|
);
|
|
33
33
|
},
|
|
34
34
|
});
|
|
@@ -73,7 +73,7 @@ export default abstract class NymphDriver {
|
|
|
73
73
|
abstract inTransaction(): Promise<boolean>;
|
|
74
74
|
abstract deleteEntityByID(
|
|
75
75
|
guid: string,
|
|
76
|
-
classConstructor: EntityConstructor
|
|
76
|
+
classConstructor: EntityConstructor,
|
|
77
77
|
): Promise<boolean>;
|
|
78
78
|
abstract deleteEntityByID(guid: string, className?: string): Promise<boolean>;
|
|
79
79
|
abstract deleteUID(name: string): Promise<boolean>;
|
|
@@ -84,7 +84,7 @@ export default abstract class NymphDriver {
|
|
|
84
84
|
abstract disconnect(): Promise<boolean>;
|
|
85
85
|
|
|
86
86
|
protected abstract exportEntities(
|
|
87
|
-
writeLine: (line: string) => void
|
|
87
|
+
writeLine: (line: string) => void,
|
|
88
88
|
): Promise<void>;
|
|
89
89
|
abstract getEntities<T extends EntityConstructor = EntityConstructor>(
|
|
90
90
|
options: Options<T> & { return: 'count' },
|
|
@@ -123,7 +123,7 @@ export default abstract class NymphDriver {
|
|
|
123
123
|
protected posixRegexMatch(
|
|
124
124
|
pattern: string,
|
|
125
125
|
subject: string,
|
|
126
|
-
caseInsensitive = false
|
|
126
|
+
caseInsensitive = false,
|
|
127
127
|
) {
|
|
128
128
|
const posixClasses = [
|
|
129
129
|
// '[[:<:]]',
|
|
@@ -203,11 +203,11 @@ export default abstract class NymphDriver {
|
|
|
203
203
|
guid: string,
|
|
204
204
|
tags: string[],
|
|
205
205
|
sdata: SerializedEntityData,
|
|
206
|
-
etype: string
|
|
206
|
+
etype: string,
|
|
207
207
|
) => Promise<void>,
|
|
208
208
|
saveUIDCallback: (name: string, value: number) => Promise<void>,
|
|
209
209
|
startTransactionCallback: (() => Promise<void>) | null = null,
|
|
210
|
-
commitTransactionCallback: (() => Promise<void>) | null = null
|
|
210
|
+
commitTransactionCallback: (() => Promise<void>) | null = null,
|
|
211
211
|
) {
|
|
212
212
|
let rl: ReadLines;
|
|
213
213
|
try {
|
|
@@ -229,7 +229,7 @@ export default abstract class NymphDriver {
|
|
|
229
229
|
continue;
|
|
230
230
|
}
|
|
231
231
|
const entityMatch = text.match(
|
|
232
|
-
/^\s*{([0-9A-Fa-f]+)}<([-\w_]+)>\[([^\]]*)\]\s
|
|
232
|
+
/^\s*{([0-9A-Fa-f]+)}<([-\w_]+)>\[([^\]]*)\]\s*$/,
|
|
233
233
|
);
|
|
234
234
|
const propMatch = text.match(/^\s*([^=]+)\s*=\s*(.*\S)\s*$/);
|
|
235
235
|
const uidMatch = text.match(/^\s*<([^>]+)>\[(\d+)\]\s*$/);
|
|
@@ -273,7 +273,7 @@ export default abstract class NymphDriver {
|
|
|
273
273
|
sdata: SerializedEntityData,
|
|
274
274
|
selectors: Selector[],
|
|
275
275
|
guid: string | null = null,
|
|
276
|
-
tags: string[] | null = null
|
|
276
|
+
tags: string[] | null = null,
|
|
277
277
|
) {
|
|
278
278
|
const formattedSelectors = this.formatSelectors(selectors).selectors;
|
|
279
279
|
|
|
@@ -295,7 +295,7 @@ export default abstract class NymphDriver {
|
|
|
295
295
|
const tmpArr = (Array.isArray(value) ? value : [value]) as Selector[];
|
|
296
296
|
pass = xor(
|
|
297
297
|
this.checkData(data, sdata, tmpArr, guid, tags),
|
|
298
|
-
xor(typeIsNot, clauseNot)
|
|
298
|
+
xor(typeIsNot, clauseNot),
|
|
299
299
|
);
|
|
300
300
|
} else {
|
|
301
301
|
if (key === 'qref' || key === '!qref') {
|
|
@@ -324,7 +324,7 @@ export default abstract class NymphDriver {
|
|
|
324
324
|
case '!tag':
|
|
325
325
|
pass = xor(
|
|
326
326
|
(tags ?? []).indexOf(propName) !== -1,
|
|
327
|
-
xor(typeIsNot, clauseNot)
|
|
327
|
+
xor(typeIsNot, clauseNot),
|
|
328
328
|
);
|
|
329
329
|
break;
|
|
330
330
|
case 'defined':
|
|
@@ -335,7 +335,7 @@ export default abstract class NymphDriver {
|
|
|
335
335
|
case '!truthy':
|
|
336
336
|
pass = xor(
|
|
337
337
|
propName in data && data[propName],
|
|
338
|
-
xor(typeIsNot, clauseNot)
|
|
338
|
+
xor(typeIsNot, clauseNot),
|
|
339
339
|
);
|
|
340
340
|
break;
|
|
341
341
|
case 'ref':
|
|
@@ -344,7 +344,7 @@ export default abstract class NymphDriver {
|
|
|
344
344
|
pass = xor(
|
|
345
345
|
propName in data &&
|
|
346
346
|
this.entityReferenceSearch(data[propName], testRefValue),
|
|
347
|
-
xor(typeIsNot, clauseNot)
|
|
347
|
+
xor(typeIsNot, clauseNot),
|
|
348
348
|
);
|
|
349
349
|
break;
|
|
350
350
|
case 'equal':
|
|
@@ -354,7 +354,7 @@ export default abstract class NymphDriver {
|
|
|
354
354
|
propName in data &&
|
|
355
355
|
JSON.stringify(data[propName]) ===
|
|
356
356
|
JSON.stringify(testEqualValue),
|
|
357
|
-
xor(typeIsNot, clauseNot)
|
|
357
|
+
xor(typeIsNot, clauseNot),
|
|
358
358
|
);
|
|
359
359
|
break;
|
|
360
360
|
case 'contain':
|
|
@@ -365,9 +365,9 @@ export default abstract class NymphDriver {
|
|
|
365
365
|
pass = xor(
|
|
366
366
|
propName in data &&
|
|
367
367
|
JSON.stringify(data[propName]).indexOf(
|
|
368
|
-
JSON.stringify(testContainValue)
|
|
368
|
+
JSON.stringify(testContainValue),
|
|
369
369
|
) !== -1,
|
|
370
|
-
xor(typeIsNot, clauseNot)
|
|
370
|
+
xor(typeIsNot, clauseNot),
|
|
371
371
|
);
|
|
372
372
|
break;
|
|
373
373
|
case 'like':
|
|
@@ -382,9 +382,9 @@ export default abstract class NymphDriver {
|
|
|
382
382
|
escapeRegExp(testLikeValue)
|
|
383
383
|
.replace('%', () => '.*')
|
|
384
384
|
.replace('_', () => '.') +
|
|
385
|
-
'$'
|
|
385
|
+
'$',
|
|
386
386
|
).test(data[propName]),
|
|
387
|
-
xor(typeIsNot, clauseNot)
|
|
387
|
+
xor(typeIsNot, clauseNot),
|
|
388
388
|
);
|
|
389
389
|
break;
|
|
390
390
|
case 'match':
|
|
@@ -396,7 +396,7 @@ export default abstract class NymphDriver {
|
|
|
396
396
|
pass = xor(
|
|
397
397
|
propName in data &&
|
|
398
398
|
this.posixRegexMatch(testMatchValue, data[propName]),
|
|
399
|
-
xor(typeIsNot, clauseNot)
|
|
399
|
+
xor(typeIsNot, clauseNot),
|
|
400
400
|
);
|
|
401
401
|
break;
|
|
402
402
|
case 'imatch':
|
|
@@ -410,9 +410,9 @@ export default abstract class NymphDriver {
|
|
|
410
410
|
this.posixRegexMatch(
|
|
411
411
|
testIMatchValue,
|
|
412
412
|
data[propName],
|
|
413
|
-
true
|
|
413
|
+
true,
|
|
414
414
|
),
|
|
415
|
-
xor(typeIsNot, clauseNot)
|
|
415
|
+
xor(typeIsNot, clauseNot),
|
|
416
416
|
);
|
|
417
417
|
break;
|
|
418
418
|
case 'gt':
|
|
@@ -422,7 +422,7 @@ export default abstract class NymphDriver {
|
|
|
422
422
|
)[1] as number;
|
|
423
423
|
pass = xor(
|
|
424
424
|
propName in data && data[propName] > testGTValue,
|
|
425
|
-
xor(typeIsNot, clauseNot)
|
|
425
|
+
xor(typeIsNot, clauseNot),
|
|
426
426
|
);
|
|
427
427
|
break;
|
|
428
428
|
case 'gte':
|
|
@@ -432,7 +432,7 @@ export default abstract class NymphDriver {
|
|
|
432
432
|
)[1] as number;
|
|
433
433
|
pass = xor(
|
|
434
434
|
propName in data && data[propName] >= testGTEValue,
|
|
435
|
-
xor(typeIsNot, clauseNot)
|
|
435
|
+
xor(typeIsNot, clauseNot),
|
|
436
436
|
);
|
|
437
437
|
break;
|
|
438
438
|
case 'lt':
|
|
@@ -442,7 +442,7 @@ export default abstract class NymphDriver {
|
|
|
442
442
|
)[1] as number;
|
|
443
443
|
pass = xor(
|
|
444
444
|
propName in data && data[propName] < testLTValue,
|
|
445
|
-
xor(typeIsNot, clauseNot)
|
|
445
|
+
xor(typeIsNot, clauseNot),
|
|
446
446
|
);
|
|
447
447
|
break;
|
|
448
448
|
case 'lte':
|
|
@@ -452,7 +452,7 @@ export default abstract class NymphDriver {
|
|
|
452
452
|
)[1] as number;
|
|
453
453
|
pass = xor(
|
|
454
454
|
propName in data && data[propName] <= testLTEValue,
|
|
455
|
-
xor(typeIsNot, clauseNot)
|
|
455
|
+
xor(typeIsNot, clauseNot),
|
|
456
456
|
);
|
|
457
457
|
break;
|
|
458
458
|
}
|
|
@@ -510,7 +510,7 @@ export default abstract class NymphDriver {
|
|
|
510
510
|
| EntityInterface
|
|
511
511
|
| EntityReference
|
|
512
512
|
| string
|
|
513
|
-
| (EntityInterface | EntityReference | string)[]
|
|
513
|
+
| (EntityInterface | EntityReference | string)[],
|
|
514
514
|
) {
|
|
515
515
|
// Get the GUID, if the passed $entity is an object.
|
|
516
516
|
const guids: string[] = [];
|
|
@@ -553,7 +553,7 @@ export default abstract class NymphDriver {
|
|
|
553
553
|
|
|
554
554
|
public formatSelectors(
|
|
555
555
|
selectors: Selector[],
|
|
556
|
-
options: Options = {}
|
|
556
|
+
options: Options = {},
|
|
557
557
|
): {
|
|
558
558
|
selectors: FormattedSelector[];
|
|
559
559
|
qrefs: [Options, ...FormattedSelector[]][];
|
|
@@ -599,7 +599,7 @@ export default abstract class NymphDriver {
|
|
|
599
599
|
const newSelectors = this.formatSelectors(qrefSelectors, options);
|
|
600
600
|
qrefs.push(
|
|
601
601
|
[newOptions, ...newSelectors.selectors],
|
|
602
|
-
...newSelectors.qrefs
|
|
602
|
+
...newSelectors.qrefs,
|
|
603
603
|
);
|
|
604
604
|
formatArr[i] = [name, [newOptions, ...newSelectors.selectors]];
|
|
605
605
|
}
|
|
@@ -651,8 +651,8 @@ export default abstract class NymphDriver {
|
|
|
651
651
|
key: string,
|
|
652
652
|
value: any,
|
|
653
653
|
typeIsOr: boolean,
|
|
654
|
-
typeIsNot: boolean
|
|
655
|
-
) => string
|
|
654
|
+
typeIsNot: boolean,
|
|
655
|
+
) => string,
|
|
656
656
|
) {
|
|
657
657
|
const queryParts = [];
|
|
658
658
|
for (const curSelector of selectors) {
|
|
@@ -687,7 +687,7 @@ export default abstract class NymphDriver {
|
|
|
687
687
|
performQueryCallback: (
|
|
688
688
|
options: Options<T>,
|
|
689
689
|
formattedSelectors: FormattedSelector[],
|
|
690
|
-
etype: string
|
|
690
|
+
etype: string,
|
|
691
691
|
) => {
|
|
692
692
|
result: any;
|
|
693
693
|
},
|
|
@@ -703,7 +703,7 @@ export default abstract class NymphDriver {
|
|
|
703
703
|
getDataNameAndSValueCallback: (row: any) => {
|
|
704
704
|
name: string;
|
|
705
705
|
svalue: string;
|
|
706
|
-
}
|
|
706
|
+
},
|
|
707
707
|
): { result: any; process: () => number | Error };
|
|
708
708
|
protected getEntitesRowLike<T extends EntityConstructor = EntityConstructor>(
|
|
709
709
|
options: Options<T> & { return: 'guid' },
|
|
@@ -711,7 +711,7 @@ export default abstract class NymphDriver {
|
|
|
711
711
|
performQueryCallback: (
|
|
712
712
|
options: Options<T>,
|
|
713
713
|
formattedSelectors: FormattedSelector[],
|
|
714
|
-
etype: string
|
|
714
|
+
etype: string,
|
|
715
715
|
) => {
|
|
716
716
|
result: any;
|
|
717
717
|
},
|
|
@@ -727,7 +727,7 @@ export default abstract class NymphDriver {
|
|
|
727
727
|
getDataNameAndSValueCallback: (row: any) => {
|
|
728
728
|
name: string;
|
|
729
729
|
svalue: string;
|
|
730
|
-
}
|
|
730
|
+
},
|
|
731
731
|
): { result: any; process: () => string[] | Error };
|
|
732
732
|
protected getEntitesRowLike<T extends EntityConstructor = EntityConstructor>(
|
|
733
733
|
options: Options<T>,
|
|
@@ -735,7 +735,7 @@ export default abstract class NymphDriver {
|
|
|
735
735
|
performQueryCallback: (
|
|
736
736
|
options: Options<T>,
|
|
737
737
|
formattedSelectors: FormattedSelector[],
|
|
738
|
-
etype: string
|
|
738
|
+
etype: string,
|
|
739
739
|
) => {
|
|
740
740
|
result: any;
|
|
741
741
|
},
|
|
@@ -751,7 +751,7 @@ export default abstract class NymphDriver {
|
|
|
751
751
|
getDataNameAndSValueCallback: (row: any) => {
|
|
752
752
|
name: string;
|
|
753
753
|
svalue: string;
|
|
754
|
-
}
|
|
754
|
+
},
|
|
755
755
|
): { result: any; process: () => ReturnType<T['factorySync']>[] | Error };
|
|
756
756
|
protected getEntitesRowLike<T extends EntityConstructor = EntityConstructor>(
|
|
757
757
|
options: Options<T>,
|
|
@@ -759,7 +759,7 @@ export default abstract class NymphDriver {
|
|
|
759
759
|
performQueryCallback: (
|
|
760
760
|
options: Options<T>,
|
|
761
761
|
formattedSelectors: FormattedSelector[],
|
|
762
|
-
etype: string
|
|
762
|
+
etype: string,
|
|
763
763
|
) => {
|
|
764
764
|
result: any;
|
|
765
765
|
},
|
|
@@ -775,7 +775,7 @@ export default abstract class NymphDriver {
|
|
|
775
775
|
getDataNameAndSValueCallback: (row: any) => {
|
|
776
776
|
name: string;
|
|
777
777
|
svalue: string;
|
|
778
|
-
}
|
|
778
|
+
},
|
|
779
779
|
): {
|
|
780
780
|
result: any;
|
|
781
781
|
process: () => ReturnType<T['factorySync']>[] | string[] | number | Error;
|
|
@@ -791,7 +791,7 @@ export default abstract class NymphDriver {
|
|
|
791
791
|
['&', '!&', '|', '!|'].indexOf(selector.type) === -1
|
|
792
792
|
) {
|
|
793
793
|
throw new InvalidParametersError(
|
|
794
|
-
'Invalid query selector passed: ' + JSON.stringify(selector)
|
|
794
|
+
'Invalid query selector passed: ' + JSON.stringify(selector),
|
|
795
795
|
);
|
|
796
796
|
}
|
|
797
797
|
}
|
|
@@ -820,7 +820,7 @@ export default abstract class NymphDriver {
|
|
|
820
820
|
const entity = this.pullCache<ReturnType<T['factorySync']>>(
|
|
821
821
|
selectors[0]['guid'],
|
|
822
822
|
EntityClass.class,
|
|
823
|
-
!!options.skipAc
|
|
823
|
+
!!options.skipAc,
|
|
824
824
|
);
|
|
825
825
|
if (
|
|
826
826
|
entity != null &&
|
|
@@ -829,7 +829,7 @@ export default abstract class NymphDriver {
|
|
|
829
829
|
entity.hasTag(
|
|
830
830
|
...(Array.isArray(selectors[0].tag)
|
|
831
831
|
? selectors[0].tag
|
|
832
|
-
: [selectors[0].tag])
|
|
832
|
+
: [selectors[0].tag]),
|
|
833
833
|
))
|
|
834
834
|
) {
|
|
835
835
|
const guid = entity.guid;
|
|
@@ -858,7 +858,7 @@ export default abstract class NymphDriver {
|
|
|
858
858
|
const { result } = performQueryCallback(
|
|
859
859
|
options,
|
|
860
860
|
formattedSelectors.selectors,
|
|
861
|
-
etype
|
|
861
|
+
etype,
|
|
862
862
|
);
|
|
863
863
|
|
|
864
864
|
return {
|
|
@@ -948,7 +948,7 @@ export default abstract class NymphDriver {
|
|
|
948
948
|
data: EntityData,
|
|
949
949
|
sdata: SerializedEntityData,
|
|
950
950
|
cdate: number,
|
|
951
|
-
etype: string
|
|
951
|
+
etype: string,
|
|
952
952
|
) => Promise<boolean>,
|
|
953
953
|
saveExistingEntityCallback: (
|
|
954
954
|
entity: EntityInterface,
|
|
@@ -957,12 +957,12 @@ export default abstract class NymphDriver {
|
|
|
957
957
|
data: EntityData,
|
|
958
958
|
sdata: SerializedEntityData,
|
|
959
959
|
mdate: number,
|
|
960
|
-
etype: string
|
|
960
|
+
etype: string,
|
|
961
961
|
) => Promise<boolean>,
|
|
962
962
|
startTransactionCallback: (() => Promise<void>) | null = null,
|
|
963
963
|
commitTransactionCallback:
|
|
964
964
|
| ((success: boolean) => Promise<boolean>)
|
|
965
|
-
| null = null
|
|
965
|
+
| null = null,
|
|
966
966
|
) {
|
|
967
967
|
// Get a modified date.
|
|
968
968
|
const mdate = Date.now();
|
|
@@ -985,7 +985,7 @@ export default abstract class NymphDriver {
|
|
|
985
985
|
data,
|
|
986
986
|
sdata,
|
|
987
987
|
cdate,
|
|
988
|
-
etype
|
|
988
|
+
etype,
|
|
989
989
|
);
|
|
990
990
|
if (success) {
|
|
991
991
|
entity.guid = newId;
|
|
@@ -1004,7 +1004,7 @@ export default abstract class NymphDriver {
|
|
|
1004
1004
|
data,
|
|
1005
1005
|
sdata,
|
|
1006
1006
|
mdate,
|
|
1007
|
-
etype
|
|
1007
|
+
etype,
|
|
1008
1008
|
);
|
|
1009
1009
|
if (success) {
|
|
1010
1010
|
entity.mdate = mdate;
|
|
@@ -1021,7 +1021,7 @@ export default abstract class NymphDriver {
|
|
|
1021
1021
|
entity.mdate as number,
|
|
1022
1022
|
entity.tags,
|
|
1023
1023
|
data,
|
|
1024
|
-
sdata
|
|
1024
|
+
sdata,
|
|
1025
1025
|
);
|
|
1026
1026
|
}
|
|
1027
1027
|
return success;
|
|
@@ -1038,7 +1038,7 @@ export default abstract class NymphDriver {
|
|
|
1038
1038
|
protected pullCache<T extends EntityInterface = EntityInterface>(
|
|
1039
1039
|
guid: string,
|
|
1040
1040
|
className: string,
|
|
1041
|
-
useSkipAc = false
|
|
1041
|
+
useSkipAc = false,
|
|
1042
1042
|
): T | null {
|
|
1043
1043
|
// Increment the entity access count.
|
|
1044
1044
|
if (!(guid in this.entityCount)) {
|
|
@@ -1056,7 +1056,7 @@ export default abstract class NymphDriver {
|
|
|
1056
1056
|
entity.tags = this.entityCache[guid]['tags'];
|
|
1057
1057
|
entity.$putData(
|
|
1058
1058
|
this.entityCache[guid]['data'],
|
|
1059
|
-
this.entityCache[guid]['sdata']
|
|
1059
|
+
this.entityCache[guid]['sdata'],
|
|
1060
1060
|
);
|
|
1061
1061
|
return entity;
|
|
1062
1062
|
}
|
|
@@ -1080,7 +1080,7 @@ export default abstract class NymphDriver {
|
|
|
1080
1080
|
mdate: number,
|
|
1081
1081
|
tags: string[],
|
|
1082
1082
|
data: EntityData,
|
|
1083
|
-
sdata: SerializedEntityData
|
|
1083
|
+
sdata: SerializedEntityData,
|
|
1084
1084
|
) {
|
|
1085
1085
|
if (guid == null) {
|
|
1086
1086
|
return;
|