vsrepo 2.6.0 → 2.7.0
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 +24 -0
- package/README.md +3 -2
- package/README.pt-BR.md +3 -2
- package/dist/VSRepoAdapter.d.ts +12 -0
- package/dist/VSRepoAdapter.js.map +1 -1
- package/dist/VSRepository.d.ts +50 -4
- package/dist/VSRepository.js +57 -28
- package/dist/VSRepository.js.map +1 -1
- package/dist/decorators/query-method.decorator.d.ts +3 -24
- package/dist/decorators/query-method.decorator.js +4 -27
- package/dist/decorators/query-method.decorator.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/resolvers/dynamic-methods.resolver.d.ts +6 -5
- package/dist/internal/resolvers/dynamic-methods.resolver.js +112 -98
- package/dist/internal/resolvers/dynamic-methods.resolver.js.map +1 -1
- package/dist/internal/utils/vs-placeholder-parser.util.d.ts +2 -0
- package/dist/internal/utils/vs-placeholder-parser.util.js +62 -0
- package/dist/internal/utils/vs-placeholder-parser.util.js.map +1 -0
- package/dist/internal/utils/vs-query-builder.util.d.ts +5 -1
- package/dist/internal/utils/vs-query-builder.util.js +1 -13
- package/dist/internal/utils/vs-query-builder.util.js.map +1 -1
- package/dist/internal/utils/vs-raw-query-builder.util.d.ts +238 -0
- package/dist/internal/utils/vs-raw-query-builder.util.js +433 -0
- package/dist/internal/utils/vs-raw-query-builder.util.js.map +1 -0
- package/dist/internal/utils/vs-sql.util.d.ts +100 -0
- package/dist/internal/utils/vs-sql.util.js +151 -0
- package/dist/internal/utils/vs-sql.util.js.map +1 -0
- package/dist/internal/validators/decorators.validator.js +1 -1
- package/dist/internal/validators/decorators.validator.js.map +1 -1
- package/dist/internal/validators/vsrepo.validator.js +1 -0
- package/dist/internal/validators/vsrepo.validator.js.map +1 -1
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.d.ts +8 -0
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js +3 -0
- package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js.map +1 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.d.ts +7 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.js +3 -0
- package/dist/types/vsrepo/vs-raw-query-builder-target.type.js.map +1 -0
- package/dist/types/vsrepo/vsrepo-options.type.d.ts +18 -0
- package/package.json +3 -2
|
@@ -13,21 +13,24 @@ const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
|
13
13
|
const vsrepo_error_type_enum_1 = require("../enums/vsrepo-error-type.enum");
|
|
14
14
|
const debug_arg_symbol_constant_1 = require("../constants/debug-arg-symbol.constant");
|
|
15
15
|
const db_arg_util_1 = require("../utils/db-arg.util");
|
|
16
|
+
const vs_placeholder_parser_util_1 = require("../utils/vs-placeholder-parser.util");
|
|
16
17
|
class DynamicMethodsResolver {
|
|
17
18
|
logger;
|
|
18
19
|
adapter;
|
|
19
20
|
mergeWheresResolver;
|
|
20
21
|
validator;
|
|
21
22
|
defaultOrdering;
|
|
22
|
-
|
|
23
|
+
vsPlaceholders;
|
|
24
|
+
constructor(logger, adapter, mergeWheresResolver, validator, defaultOrdering, vsPlaceholders = false) {
|
|
23
25
|
this.logger = logger;
|
|
24
26
|
this.adapter = adapter;
|
|
25
27
|
this.mergeWheresResolver = mergeWheresResolver;
|
|
26
28
|
this.validator = validator;
|
|
27
29
|
this.defaultOrdering = defaultOrdering;
|
|
30
|
+
this.vsPlaceholders = vsPlaceholders;
|
|
28
31
|
}
|
|
29
|
-
keywordTemplate = (keyword, allowAtTheEnd = false) => new RegExp(`${keyword}(?=[\\p{Lu}]|[^\\p{ASCII}]${allowAtTheEnd ? "|$" : ""})`, "u");
|
|
30
|
-
fieldModifiers = {
|
|
32
|
+
static keywordTemplate = (keyword, allowAtTheEnd = false) => new RegExp(`${keyword}(?=[\\p{Lu}]|[^\\p{ASCII}]${allowAtTheEnd ? "|$" : ""})`, "u");
|
|
33
|
+
static fieldModifiers = {
|
|
31
34
|
IsNull: this.keywordTemplate("IsNull", true),
|
|
32
35
|
IsNotNull: this.keywordTemplate("IsNotNull", true),
|
|
33
36
|
IsTrue: this.keywordTemplate("IsTrue", true),
|
|
@@ -57,12 +60,12 @@ class DynamicMethodsResolver {
|
|
|
57
60
|
Every: this.keywordTemplate("Every", true),
|
|
58
61
|
None: this.keywordTemplate("None", true),
|
|
59
62
|
};
|
|
60
|
-
operators = {
|
|
63
|
+
static operators = {
|
|
61
64
|
And: this.keywordTemplate("And"),
|
|
62
65
|
Or: this.keywordTemplate("Or"),
|
|
63
66
|
AND: this.keywordTemplate("AND"),
|
|
64
67
|
};
|
|
65
|
-
customizationModifiers = {
|
|
68
|
+
static customizationModifiers = {
|
|
66
69
|
Distinct: this.keywordTemplate("Distinct"),
|
|
67
70
|
OrderBy: this.keywordTemplate("OrderBy"),
|
|
68
71
|
PaginatedAndOrdered: /PaginatedAndOrdered$/,
|
|
@@ -75,12 +78,10 @@ class DynamicMethodsResolver {
|
|
|
75
78
|
this.logger.logError(errorMessage);
|
|
76
79
|
throw new VSRepoError_1.VSRepoError(errorMessage, vsrepo_error_type_enum_1.VSRepoErrorType.RESOLVER);
|
|
77
80
|
}
|
|
78
|
-
validateIndexedArg(args, positionIndex, validate
|
|
81
|
+
validateIndexedArg(args, positionIndex, validate) {
|
|
79
82
|
const value = args.at(positionIndex);
|
|
80
83
|
if (value === debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL) {
|
|
81
|
-
return
|
|
82
|
-
? `<args>[${positionIndex < 0 ? args.length + positionIndex : positionIndex}]`
|
|
83
|
-
: value);
|
|
84
|
+
return `<args>[${positionIndex < 0 ? args.length + positionIndex : positionIndex}]`;
|
|
84
85
|
}
|
|
85
86
|
return validate(value);
|
|
86
87
|
}
|
|
@@ -351,49 +352,51 @@ class DynamicMethodsResolver {
|
|
|
351
352
|
resolveDynamicMethodCustomization(dynamicMethodInfo, methodData) {
|
|
352
353
|
const dynamicMethodCustomization = {};
|
|
353
354
|
if (!dynamicMethodInfo.ignoreIgnoreConflicts) {
|
|
354
|
-
if (
|
|
355
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
355
|
+
if (DynamicMethodsResolver.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
356
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.IgnoreConflicts, "");
|
|
356
357
|
dynamicMethodCustomization.ignoreConflicts = true;
|
|
357
358
|
}
|
|
358
359
|
}
|
|
359
|
-
else if (
|
|
360
|
+
else if (DynamicMethodsResolver.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
360
361
|
this.logAndThrowError(`This dynamic method prefix doesn't support the "IgnoreConflicts" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
361
362
|
}
|
|
362
363
|
if (!dynamicMethodInfo.ignoreOrderByAndPagination) {
|
|
363
|
-
if (
|
|
364
|
+
if (DynamicMethodsResolver.customizationModifiers.PaginatedAndOrdered.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
364
365
|
dynamicMethodCustomization.orderPosition = -2;
|
|
365
366
|
dynamicMethodCustomization.paginationPosition = -3;
|
|
366
367
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
367
368
|
dynamicMethodInfo.otherParams.push("order");
|
|
368
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
369
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.PaginatedAndOrdered, "");
|
|
369
370
|
dynamicMethodInfo.argsCount += 2;
|
|
370
371
|
}
|
|
371
|
-
else if (
|
|
372
|
+
else if (DynamicMethodsResolver.customizationModifiers.OrderedAndPaginated.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
372
373
|
dynamicMethodCustomization.orderPosition = -3;
|
|
373
374
|
dynamicMethodCustomization.paginationPosition = -2;
|
|
374
375
|
dynamicMethodInfo.otherParams.push("order");
|
|
375
376
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
376
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
377
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.OrderedAndPaginated, "");
|
|
377
378
|
dynamicMethodInfo.argsCount += 2;
|
|
378
379
|
}
|
|
379
|
-
else if (
|
|
380
|
+
else if (DynamicMethodsResolver.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
380
381
|
dynamicMethodCustomization.paginationPosition = -2;
|
|
381
382
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
382
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
383
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Paginated, "");
|
|
383
384
|
dynamicMethodInfo.argsCount++;
|
|
384
385
|
}
|
|
385
|
-
else if (
|
|
386
|
+
else if (DynamicMethodsResolver.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
386
387
|
dynamicMethodCustomization.orderPosition = -2;
|
|
387
388
|
dynamicMethodInfo.otherParams.push("order");
|
|
388
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
389
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Ordered, "");
|
|
389
390
|
dynamicMethodInfo.argsCount++;
|
|
390
391
|
}
|
|
391
|
-
const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(
|
|
392
|
+
const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.OrderBy);
|
|
392
393
|
if (keySplitedOrderBy[1]) {
|
|
393
|
-
if (
|
|
394
|
+
if (DynamicMethodsResolver.customizationModifiers.Distinct.test(keySplitedOrderBy[1])) {
|
|
394
395
|
this.logAndThrowError(`The "Distinct" modifier cannot appear after the "OrderBy" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
395
396
|
}
|
|
396
|
-
const orderByFields = keySplitedOrderBy[1]
|
|
397
|
+
const orderByFields = keySplitedOrderBy[1]
|
|
398
|
+
.split(DynamicMethodsResolver.operators.And)
|
|
399
|
+
.map(uncapitalize_util_1.uncapitalize);
|
|
397
400
|
dynamicMethodCustomization.injectOrdering = orderByFields.map(field => {
|
|
398
401
|
if (field.endsWith("Asc")) {
|
|
399
402
|
field = field.replace(/Asc$/, "");
|
|
@@ -409,21 +412,21 @@ class DynamicMethodsResolver {
|
|
|
409
412
|
dynamicMethodInfo.keyToMapReplaced = keySplitedOrderBy[0];
|
|
410
413
|
dynamicMethodCustomization.injectOrdering ??= methodData.injectOrdering;
|
|
411
414
|
}
|
|
412
|
-
else if (
|
|
413
|
-
|
|
414
|
-
|
|
415
|
+
else if (DynamicMethodsResolver.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced) ||
|
|
416
|
+
DynamicMethodsResolver.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced) ||
|
|
417
|
+
DynamicMethodsResolver.customizationModifiers.OrderBy.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
415
418
|
this.logAndThrowError(`This dynamic method prefix doesn't support the ordering or pagination modifiers: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
416
419
|
}
|
|
417
420
|
if (!dynamicMethodInfo.ignoreDistinct) {
|
|
418
|
-
const keySplitedDistinct = dynamicMethodInfo.keyToMapReplaced.split(
|
|
421
|
+
const keySplitedDistinct = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.Distinct);
|
|
419
422
|
if (keySplitedDistinct[1]) {
|
|
420
423
|
dynamicMethodCustomization.distinctKeys = keySplitedDistinct[1]
|
|
421
|
-
.split(
|
|
424
|
+
.split(DynamicMethodsResolver.operators.And)
|
|
422
425
|
.map(uncapitalize_util_1.uncapitalize);
|
|
423
426
|
}
|
|
424
427
|
dynamicMethodInfo.keyToMapReplaced = keySplitedDistinct[0];
|
|
425
428
|
}
|
|
426
|
-
else if (
|
|
429
|
+
else if (DynamicMethodsResolver.customizationModifiers.Distinct.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
427
430
|
this.logAndThrowError(`This dynamic method prefix doesn't support the "Distinct" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
428
431
|
}
|
|
429
432
|
return dynamicMethodCustomization;
|
|
@@ -431,113 +434,113 @@ class DynamicMethodsResolver {
|
|
|
431
434
|
resolveUglyWhere(keySplitedAnd) {
|
|
432
435
|
const uglyWhere = { name: "", pushProperty: "$$$" };
|
|
433
436
|
let nullMode = undefined;
|
|
434
|
-
if (
|
|
437
|
+
if (DynamicMethodsResolver.fieldModifiers.IsNull.test(keySplitedAnd)) {
|
|
435
438
|
uglyWhere.pushProperty = "$$$";
|
|
436
439
|
uglyWhere.autoInjectVal = null;
|
|
437
440
|
nullMode = "is";
|
|
438
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
441
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNull, "");
|
|
439
442
|
}
|
|
440
|
-
else if (
|
|
443
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsNotNull.test(keySplitedAnd)) {
|
|
441
444
|
uglyWhere.pushProperty = "not";
|
|
442
445
|
uglyWhere.autoInjectVal = null;
|
|
443
446
|
nullMode = "not";
|
|
444
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
447
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNotNull, "");
|
|
445
448
|
}
|
|
446
|
-
else if (
|
|
449
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsTrue.test(keySplitedAnd)) {
|
|
447
450
|
uglyWhere.pushProperty = "$$$";
|
|
448
451
|
uglyWhere.autoInjectVal = true;
|
|
449
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
452
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsTrue, "");
|
|
450
453
|
}
|
|
451
|
-
else if (
|
|
454
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsFalse.test(keySplitedAnd)) {
|
|
452
455
|
uglyWhere.pushProperty = "$$$";
|
|
453
456
|
uglyWhere.autoInjectVal = false;
|
|
454
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
457
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsFalse, "");
|
|
455
458
|
}
|
|
456
459
|
else {
|
|
457
|
-
if (
|
|
460
|
+
if (DynamicMethodsResolver.fieldModifiers.IgnoreCase.test(keySplitedAnd)) {
|
|
458
461
|
uglyWhere.properties = {};
|
|
459
462
|
uglyWhere.properties.ignoreCase = true;
|
|
460
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
463
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IgnoreCase, "");
|
|
461
464
|
}
|
|
462
|
-
if (
|
|
463
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
465
|
+
if (DynamicMethodsResolver.fieldModifiers.Optional.test(keySplitedAnd)) {
|
|
466
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Optional, "");
|
|
464
467
|
}
|
|
465
|
-
if (
|
|
468
|
+
if (DynamicMethodsResolver.fieldModifiers.NotBetween.test(keySplitedAnd)) {
|
|
466
469
|
uglyWhere.pushProperty = "not";
|
|
467
470
|
uglyWhere.betweenMode = true;
|
|
468
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
471
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotBetween, "");
|
|
469
472
|
}
|
|
470
|
-
else if (
|
|
473
|
+
else if (DynamicMethodsResolver.fieldModifiers.Between.test(keySplitedAnd)) {
|
|
471
474
|
uglyWhere.pushProperty = "$$$";
|
|
472
475
|
uglyWhere.betweenMode = true;
|
|
473
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
476
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Between, "");
|
|
474
477
|
}
|
|
475
|
-
else if (
|
|
478
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotStartsWith.test(keySplitedAnd)) {
|
|
476
479
|
uglyWhere.pushProperty = "not.startsWith";
|
|
477
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
480
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotStartsWith, "");
|
|
478
481
|
}
|
|
479
|
-
else if (
|
|
482
|
+
else if (DynamicMethodsResolver.fieldModifiers.StartsWith.test(keySplitedAnd)) {
|
|
480
483
|
uglyWhere.pushProperty = "startsWith";
|
|
481
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
484
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.StartsWith, "");
|
|
482
485
|
}
|
|
483
|
-
else if (
|
|
486
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotEndsWith.test(keySplitedAnd)) {
|
|
484
487
|
uglyWhere.pushProperty = "not.endsWith";
|
|
485
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
488
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEndsWith, "");
|
|
486
489
|
}
|
|
487
|
-
else if (
|
|
490
|
+
else if (DynamicMethodsResolver.fieldModifiers.EndsWith.test(keySplitedAnd)) {
|
|
488
491
|
uglyWhere.pushProperty = "endsWith";
|
|
489
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
492
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.EndsWith, "");
|
|
490
493
|
}
|
|
491
|
-
else if (
|
|
494
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotContains.test(keySplitedAnd)) {
|
|
492
495
|
uglyWhere.pushProperty = "not.contains";
|
|
493
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
496
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotContains, "");
|
|
494
497
|
}
|
|
495
|
-
else if (
|
|
498
|
+
else if (DynamicMethodsResolver.fieldModifiers.Contains.test(keySplitedAnd)) {
|
|
496
499
|
uglyWhere.pushProperty = "contains";
|
|
497
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
500
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Contains, "");
|
|
498
501
|
}
|
|
499
|
-
else if (
|
|
502
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotEquals.test(keySplitedAnd)) {
|
|
500
503
|
uglyWhere.pushProperty = "not";
|
|
501
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
504
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEquals, "");
|
|
502
505
|
}
|
|
503
|
-
else if (
|
|
506
|
+
else if (DynamicMethodsResolver.fieldModifiers.Equals.test(keySplitedAnd)) {
|
|
504
507
|
uglyWhere.pushProperty = "$$$";
|
|
505
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
508
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Equals, "");
|
|
506
509
|
}
|
|
507
|
-
else if (
|
|
510
|
+
else if (DynamicMethodsResolver.fieldModifiers.LessThanEqual.test(keySplitedAnd)) {
|
|
508
511
|
uglyWhere.pushProperty = "lte";
|
|
509
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
512
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThanEqual, "");
|
|
510
513
|
}
|
|
511
|
-
else if (
|
|
514
|
+
else if (DynamicMethodsResolver.fieldModifiers.LessThan.test(keySplitedAnd)) {
|
|
512
515
|
uglyWhere.pushProperty = "lt";
|
|
513
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
516
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThan, "");
|
|
514
517
|
}
|
|
515
|
-
else if (
|
|
518
|
+
else if (DynamicMethodsResolver.fieldModifiers.GreaterThanEqual.test(keySplitedAnd)) {
|
|
516
519
|
uglyWhere.pushProperty = "gte";
|
|
517
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
520
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThanEqual, "");
|
|
518
521
|
}
|
|
519
|
-
else if (
|
|
522
|
+
else if (DynamicMethodsResolver.fieldModifiers.GreaterThan.test(keySplitedAnd)) {
|
|
520
523
|
uglyWhere.pushProperty = "gt";
|
|
521
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
524
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThan, "");
|
|
522
525
|
}
|
|
523
|
-
else if (
|
|
526
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotIn.test(keySplitedAnd)) {
|
|
524
527
|
uglyWhere.pushProperty = "notIn";
|
|
525
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
528
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotIn, "");
|
|
526
529
|
}
|
|
527
|
-
else if (
|
|
530
|
+
else if (DynamicMethodsResolver.fieldModifiers.In.test(keySplitedAnd)) {
|
|
528
531
|
uglyWhere.pushProperty = "in";
|
|
529
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
532
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.In, "");
|
|
530
533
|
}
|
|
531
|
-
else if (
|
|
534
|
+
else if (DynamicMethodsResolver.fieldModifiers.Not.test(keySplitedAnd)) {
|
|
532
535
|
uglyWhere.pushProperty = "not";
|
|
533
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
536
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Not, "");
|
|
534
537
|
}
|
|
535
538
|
else {
|
|
536
539
|
uglyWhere.pushProperty = "$$$";
|
|
537
540
|
}
|
|
538
541
|
}
|
|
539
|
-
if (
|
|
540
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
542
|
+
if (DynamicMethodsResolver.fieldModifiers.Without.test(keySplitedAnd)) {
|
|
543
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Without);
|
|
541
544
|
const specificField = keySplitedConector[1];
|
|
542
545
|
if (!specificField) {
|
|
543
546
|
if (nullMode) {
|
|
@@ -553,8 +556,8 @@ class DynamicMethodsResolver {
|
|
|
553
556
|
}
|
|
554
557
|
keySplitedAnd = keySplitedConector[0];
|
|
555
558
|
}
|
|
556
|
-
else if (
|
|
557
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
559
|
+
else if (DynamicMethodsResolver.fieldModifiers.With.test(keySplitedAnd)) {
|
|
560
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.With);
|
|
558
561
|
const specificField = keySplitedConector[1];
|
|
559
562
|
if (!specificField) {
|
|
560
563
|
if (nullMode) {
|
|
@@ -570,8 +573,8 @@ class DynamicMethodsResolver {
|
|
|
570
573
|
}
|
|
571
574
|
keySplitedAnd = keySplitedConector[0];
|
|
572
575
|
}
|
|
573
|
-
else if (
|
|
574
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
576
|
+
else if (DynamicMethodsResolver.fieldModifiers.Some.test(keySplitedAnd)) {
|
|
577
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Some);
|
|
575
578
|
const specificField = keySplitedConector[1];
|
|
576
579
|
if (!specificField) {
|
|
577
580
|
uglyWhere.pushProperty = "_some";
|
|
@@ -582,8 +585,8 @@ class DynamicMethodsResolver {
|
|
|
582
585
|
}
|
|
583
586
|
keySplitedAnd = keySplitedConector[0];
|
|
584
587
|
}
|
|
585
|
-
else if (
|
|
586
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
588
|
+
else if (DynamicMethodsResolver.fieldModifiers.Every.test(keySplitedAnd)) {
|
|
589
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Every);
|
|
587
590
|
const specificField = keySplitedConector[1];
|
|
588
591
|
if (!specificField) {
|
|
589
592
|
uglyWhere.pushProperty = "_every";
|
|
@@ -594,8 +597,8 @@ class DynamicMethodsResolver {
|
|
|
594
597
|
}
|
|
595
598
|
keySplitedAnd = keySplitedConector[0];
|
|
596
599
|
}
|
|
597
|
-
else if (
|
|
598
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
600
|
+
else if (DynamicMethodsResolver.fieldModifiers.None.test(keySplitedAnd)) {
|
|
601
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.None);
|
|
599
602
|
const specificField = keySplitedConector[1];
|
|
600
603
|
if (!specificField) {
|
|
601
604
|
uglyWhere.pushProperty = "_none";
|
|
@@ -616,7 +619,7 @@ class DynamicMethodsResolver {
|
|
|
616
619
|
prettyWheres: [],
|
|
617
620
|
};
|
|
618
621
|
let ANDMode = false;
|
|
619
|
-
let keysSplitedAND = dynamicMethodInfo.keyToMapReplaced.split(
|
|
622
|
+
let keysSplitedAND = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.operators.AND);
|
|
620
623
|
if (keysSplitedAND.length > 1) {
|
|
621
624
|
ANDMode = true;
|
|
622
625
|
}
|
|
@@ -624,10 +627,10 @@ class DynamicMethodsResolver {
|
|
|
624
627
|
let orMode = false;
|
|
625
628
|
let keysSplitedOr;
|
|
626
629
|
if (idx === 0) {
|
|
627
|
-
keysSplitedOr = keySplitedAND.split(
|
|
630
|
+
keysSplitedOr = keySplitedAND.split(DynamicMethodsResolver.operators.Or);
|
|
628
631
|
}
|
|
629
632
|
else {
|
|
630
|
-
if (
|
|
633
|
+
if (DynamicMethodsResolver.operators.Or.test(keySplitedAND)) {
|
|
631
634
|
this.logAndThrowError(`The logical operator "Or" cannot appear after an "AND" (all caps): ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
632
635
|
}
|
|
633
636
|
keysSplitedOr = [keySplitedAND];
|
|
@@ -638,7 +641,7 @@ class DynamicMethodsResolver {
|
|
|
638
641
|
for (let i = 0; i < keysSplitedOr.length; i++) {
|
|
639
642
|
if (keysSplitedOr[i] === "")
|
|
640
643
|
continue;
|
|
641
|
-
const keysSplitedAnd = keysSplitedOr[i].split(
|
|
644
|
+
const keysSplitedAnd = keysSplitedOr[i].split(DynamicMethodsResolver.operators.And);
|
|
642
645
|
for (const keySplitedAnd of keysSplitedAnd) {
|
|
643
646
|
if (keySplitedAnd === "")
|
|
644
647
|
continue;
|
|
@@ -714,10 +717,9 @@ class DynamicMethodsResolver {
|
|
|
714
717
|
vsrepoArgs.options = { db: options.db ?? this.adapter.getDbClient() };
|
|
715
718
|
if (!withoutWhere) {
|
|
716
719
|
vsrepoArgs.where =
|
|
717
|
-
// *
|
|
718
|
-
specificWhere ===
|
|
719
|
-
?
|
|
720
|
-
"<args>[0]"
|
|
720
|
+
// * Validação necessária para o DEBUG MODE
|
|
721
|
+
typeof specificWhere === "string"
|
|
722
|
+
? specificWhere
|
|
721
723
|
: this.mergeWheresResolver.resolve(options.see, specificWhere);
|
|
722
724
|
}
|
|
723
725
|
if (!withoutSelect) {
|
|
@@ -881,7 +883,7 @@ class DynamicMethodsResolver {
|
|
|
881
883
|
else if (dynamicMethodInfo.onlyBaseWheres) {
|
|
882
884
|
vsrepoResolveArgsData.specificWhere =
|
|
883
885
|
dynamicMethodInfo.whereIndex !== undefined
|
|
884
|
-
? this.validateIndexedArg(args, dynamicMethodInfo.whereIndex, value => this.validator.validateWhere(value)
|
|
886
|
+
? this.validateIndexedArg(args, dynamicMethodInfo.whereIndex, value => this.validator.validateWhere(value))
|
|
885
887
|
: {};
|
|
886
888
|
}
|
|
887
889
|
return this.resolveVSRepoArgs(vsrepoResolveArgsData);
|
|
@@ -932,7 +934,6 @@ class DynamicMethodsResolver {
|
|
|
932
934
|
return result;
|
|
933
935
|
}
|
|
934
936
|
catch (err) {
|
|
935
|
-
// ? Deixar o catch para se quiser fazer algum tratamento antes de lançar o erro
|
|
936
937
|
this.logger.endPerformLog(start);
|
|
937
938
|
this.logger.logError(`Failed to run dynamic method '${String(originalKey)}' (-> ${dynamicMethodInfo.method})`, err);
|
|
938
939
|
throw err;
|
|
@@ -948,7 +949,7 @@ class DynamicMethodsResolver {
|
|
|
948
949
|
const originalKey = method.propertyKey;
|
|
949
950
|
const modifyingQueryMethod = method.modifying ?? false;
|
|
950
951
|
const valueQueryMethod = method.value;
|
|
951
|
-
const singleResult = method.singleResult;
|
|
952
|
+
const singleResult = method.singleResult ?? false;
|
|
952
953
|
const spreadArgsMode = method.spreadArgs;
|
|
953
954
|
instance[originalKey] = async (...args) => {
|
|
954
955
|
let db;
|
|
@@ -974,11 +975,24 @@ class DynamicMethodsResolver {
|
|
|
974
975
|
queryArgs = queryArgValidated.args;
|
|
975
976
|
}
|
|
976
977
|
db ??= this.adapter.getDbClient();
|
|
978
|
+
let finalQuery = valueQueryMethod;
|
|
979
|
+
let finalArgs = queryArgs;
|
|
980
|
+
if (this.vsPlaceholders) {
|
|
981
|
+
const compiled = vs_placeholder_parser_util_1.VSPlaceholdersParser.parse(valueQueryMethod, queryArgs ?? []).compile(index => this.adapter.getPlaceholder(index));
|
|
982
|
+
finalQuery = compiled.text;
|
|
983
|
+
finalArgs = compiled.args;
|
|
984
|
+
}
|
|
985
|
+
this.logger.logDebug(`QueryMethod '${String(originalKey)}':`, {
|
|
986
|
+
query: finalQuery,
|
|
987
|
+
args: finalArgs ?? [],
|
|
988
|
+
modifying: modifyingQueryMethod,
|
|
989
|
+
singleResult,
|
|
990
|
+
});
|
|
977
991
|
const start = this.logger.startPerformLog(`run ${String(originalKey)} (Modifying: ${modifyingQueryMethod})`);
|
|
978
992
|
try {
|
|
979
|
-
const result = await this.adapter.query(
|
|
993
|
+
const result = await this.adapter.query(finalQuery, {
|
|
980
994
|
db,
|
|
981
|
-
args:
|
|
995
|
+
args: finalArgs,
|
|
982
996
|
modifying: modifyingQueryMethod,
|
|
983
997
|
});
|
|
984
998
|
const resolved = singleResult && Array.isArray(result) ? (result[0] ?? null) : result;
|