vsrepo 2.5.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 +611 -531
- package/LICENSE +20 -20
- package/README.md +221 -1243
- package/README.pt-BR.md +221 -1246
- package/dist/VSRepoAdapter.d.ts +12 -0
- package/dist/VSRepoAdapter.js.map +1 -1
- package/dist/VSRepository.d.ts +93 -5
- package/dist/VSRepository.js +116 -35
- package/dist/VSRepository.js.map +1 -1
- package/dist/decorators/dynamic-method.decorator.d.ts +1 -1
- package/dist/decorators/dynamic-method.decorator.js +2 -4
- package/dist/decorators/dynamic-method.decorator.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 +5 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/enums/vsrepo-error-type.enum.d.ts +3 -1
- package/dist/internal/enums/vsrepo-error-type.enum.js +2 -0
- package/dist/internal/enums/vsrepo-error-type.enum.js.map +1 -1
- package/dist/internal/resolvers/dynamic-methods.resolver.d.ts +7 -1
- package/dist/internal/resolvers/dynamic-methods.resolver.js +191 -112
- package/dist/internal/resolvers/dynamic-methods.resolver.js.map +1 -1
- package/dist/internal/utils/vs-logger.util.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 +239 -0
- package/dist/internal/utils/vs-query-builder.util.js +401 -0
- package/dist/internal/utils/vs-query-builder.util.js.map +1 -0
- 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/utils/with-db.util.js.map +1 -1
- package/dist/internal/validators/decorators.validator.js +3 -7
- package/dist/internal/validators/decorators.validator.js.map +1 -1
- package/dist/internal/validators/schemas/pagination.schema.d.ts +2 -2
- package/dist/internal/validators/schemas/pagination.schema.js +2 -2
- package/dist/internal/validators/schemas/pagination.schema.js.map +1 -1
- package/dist/internal/validators/schemas/relations.schema.d.ts +4 -0
- package/dist/internal/validators/schemas/relations.schema.js +39 -0
- package/dist/internal/validators/schemas/relations.schema.js.map +1 -0
- package/dist/internal/validators/schemas/see-mode.schema.d.ts +3 -0
- package/dist/internal/validators/schemas/see-mode.schema.js +38 -0
- package/dist/internal/validators/schemas/see-mode.schema.js.map +1 -0
- package/dist/internal/validators/schemas/select.schema.d.ts +4 -0
- package/dist/internal/validators/schemas/select.schema.js +39 -0
- package/dist/internal/validators/schemas/select.schema.js.map +1 -0
- package/dist/internal/validators/vsrepo.validator.js +7 -5
- package/dist/internal/validators/vsrepo.validator.js.map +1 -1
- package/dist/types/dynamic-methods/dynamic-method-info.type.d.ts +1 -0
- package/dist/types/utils/query-args.type.d.ts +1 -4
- 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 +27 -0
- package/package.json +88 -80
|
@@ -13,25 +13,75 @@ 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
|
-
|
|
32
|
+
static keywordTemplate = (keyword, allowAtTheEnd = false) => new RegExp(`${keyword}(?=[\\p{Lu}]|[^\\p{ASCII}]${allowAtTheEnd ? "|$" : ""})`, "u");
|
|
33
|
+
static fieldModifiers = {
|
|
34
|
+
IsNull: this.keywordTemplate("IsNull", true),
|
|
35
|
+
IsNotNull: this.keywordTemplate("IsNotNull", true),
|
|
36
|
+
IsTrue: this.keywordTemplate("IsTrue", true),
|
|
37
|
+
IsFalse: this.keywordTemplate("IsFalse", true),
|
|
38
|
+
IgnoreCase: this.keywordTemplate("IgnoreCase", true),
|
|
39
|
+
Optional: this.keywordTemplate("Optional", true),
|
|
40
|
+
NotBetween: this.keywordTemplate("NotBetween", true),
|
|
41
|
+
Between: this.keywordTemplate("Between", true),
|
|
42
|
+
NotStartsWith: this.keywordTemplate("NotStartsWith", true),
|
|
43
|
+
StartsWith: this.keywordTemplate("StartsWith", true),
|
|
44
|
+
NotEndsWith: this.keywordTemplate("NotEndsWith", true),
|
|
45
|
+
EndsWith: this.keywordTemplate("EndsWith", true),
|
|
46
|
+
NotContains: this.keywordTemplate("NotContains", true),
|
|
47
|
+
Contains: this.keywordTemplate("Contains", true),
|
|
48
|
+
LessThanEqual: this.keywordTemplate("LessThanEqual", true),
|
|
49
|
+
LessThan: this.keywordTemplate("LessThan", true),
|
|
50
|
+
GreaterThanEqual: this.keywordTemplate("GreaterThanEqual", true),
|
|
51
|
+
GreaterThan: this.keywordTemplate("GreaterThan", true),
|
|
52
|
+
NotIn: this.keywordTemplate("NotIn", true),
|
|
53
|
+
In: this.keywordTemplate("In", true),
|
|
54
|
+
Not: this.keywordTemplate("Not", true),
|
|
55
|
+
Equals: this.keywordTemplate("Equals", true),
|
|
56
|
+
NotEquals: this.keywordTemplate("NotEquals", true),
|
|
57
|
+
Without: this.keywordTemplate("Without", true),
|
|
58
|
+
With: this.keywordTemplate("With", true),
|
|
59
|
+
Some: this.keywordTemplate("Some", true),
|
|
60
|
+
Every: this.keywordTemplate("Every", true),
|
|
61
|
+
None: this.keywordTemplate("None", true),
|
|
62
|
+
};
|
|
63
|
+
static operators = {
|
|
64
|
+
And: this.keywordTemplate("And"),
|
|
65
|
+
Or: this.keywordTemplate("Or"),
|
|
66
|
+
AND: this.keywordTemplate("AND"),
|
|
67
|
+
};
|
|
68
|
+
static customizationModifiers = {
|
|
69
|
+
Distinct: this.keywordTemplate("Distinct"),
|
|
70
|
+
OrderBy: this.keywordTemplate("OrderBy"),
|
|
71
|
+
PaginatedAndOrdered: /PaginatedAndOrdered$/,
|
|
72
|
+
OrderedAndPaginated: /OrderedAndPaginated$/,
|
|
73
|
+
Paginated: /Paginated$/,
|
|
74
|
+
Ordered: /Ordered$/,
|
|
75
|
+
IgnoreConflicts: /IgnoreConflicts$/,
|
|
76
|
+
};
|
|
77
|
+
logAndThrowError(errorMessage) {
|
|
78
|
+
this.logger.logError(errorMessage);
|
|
79
|
+
throw new VSRepoError_1.VSRepoError(errorMessage, vsrepo_error_type_enum_1.VSRepoErrorType.RESOLVER);
|
|
80
|
+
}
|
|
81
|
+
validateIndexedArg(args, positionIndex, validate) {
|
|
30
82
|
const value = args.at(positionIndex);
|
|
31
83
|
if (value === debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL) {
|
|
32
|
-
return
|
|
33
|
-
? `<args>[${positionIndex < 0 ? args.length + positionIndex : positionIndex}]`
|
|
34
|
-
: value);
|
|
84
|
+
return `<args>[${positionIndex < 0 ? args.length + positionIndex : positionIndex}]`;
|
|
35
85
|
}
|
|
36
86
|
return validate(value);
|
|
37
87
|
}
|
|
@@ -49,6 +99,7 @@ class DynamicMethodsResolver {
|
|
|
49
99
|
ignoreDistinct: true,
|
|
50
100
|
whereParams: [],
|
|
51
101
|
otherParams: [],
|
|
102
|
+
originalDynamicMethodName: dynamicMethod,
|
|
52
103
|
};
|
|
53
104
|
if (dynamicMethod.startsWith("findOneBy")) {
|
|
54
105
|
dynamicMethodInfo.keyToMapReplaced = dynamicMethod.replace("findOneBy", "");
|
|
@@ -61,14 +112,6 @@ class DynamicMethodsResolver {
|
|
|
61
112
|
dynamicMethodInfo.ignoreDistinct = false;
|
|
62
113
|
dynamicMethodInfo.method = "findMany";
|
|
63
114
|
}
|
|
64
|
-
// else if (dynamicMethod === "groupBy") {
|
|
65
|
-
// dynamicMethodInfo.keyToMapReplaced = dynamicMethod.replace("groupBy", "");
|
|
66
|
-
// dynamicMethodInfo.ignoreSelect = true;
|
|
67
|
-
// dynamicMethodInfo.ignoreWhere = true;
|
|
68
|
-
// dynamicMethodInfo.method = "groupBy";
|
|
69
|
-
// dynamicMethodInfo.otherParams.push("prismaArgs"); // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
70
|
-
// dynamicMethodInfo.argsCount++;
|
|
71
|
-
// }
|
|
72
115
|
else if (dynamicMethod.startsWith("findOneOrThrowBy")) {
|
|
73
116
|
dynamicMethodInfo.keyToMapReplaced = dynamicMethod.replace("findOneOrThrowBy", "");
|
|
74
117
|
dynamicMethodInfo.ignoreOrderByAndPagination = false;
|
|
@@ -302,59 +345,65 @@ class DynamicMethodsResolver {
|
|
|
302
345
|
dynamicMethodInfo.method = "findOne";
|
|
303
346
|
}
|
|
304
347
|
else {
|
|
305
|
-
|
|
306
|
-
this.logger.logError(errorMessage);
|
|
307
|
-
throw new VSRepoError_1.VSRepoError(errorMessage, vsrepo_error_type_enum_1.VSRepoErrorType.RESOLVER);
|
|
348
|
+
this.logAndThrowError(`Unknown dynamic method: ${dynamicMethod}.`);
|
|
308
349
|
}
|
|
309
350
|
return dynamicMethodInfo;
|
|
310
351
|
}
|
|
311
352
|
resolveDynamicMethodCustomization(dynamicMethodInfo, methodData) {
|
|
312
353
|
const dynamicMethodCustomization = {};
|
|
313
354
|
if (!dynamicMethodInfo.ignoreIgnoreConflicts) {
|
|
314
|
-
if (dynamicMethodInfo.keyToMapReplaced
|
|
315
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
355
|
+
if (DynamicMethodsResolver.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
356
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.IgnoreConflicts, "");
|
|
316
357
|
dynamicMethodCustomization.ignoreConflicts = true;
|
|
317
358
|
}
|
|
318
359
|
}
|
|
360
|
+
else if (DynamicMethodsResolver.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
361
|
+
this.logAndThrowError(`This dynamic method prefix doesn't support the "IgnoreConflicts" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
362
|
+
}
|
|
319
363
|
if (!dynamicMethodInfo.ignoreOrderByAndPagination) {
|
|
320
|
-
if (dynamicMethodInfo.keyToMapReplaced
|
|
364
|
+
if (DynamicMethodsResolver.customizationModifiers.PaginatedAndOrdered.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
321
365
|
dynamicMethodCustomization.orderPosition = -2;
|
|
322
366
|
dynamicMethodCustomization.paginationPosition = -3;
|
|
323
367
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
324
368
|
dynamicMethodInfo.otherParams.push("order");
|
|
325
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
369
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.PaginatedAndOrdered, "");
|
|
326
370
|
dynamicMethodInfo.argsCount += 2;
|
|
327
371
|
}
|
|
328
|
-
else if (dynamicMethodInfo.keyToMapReplaced
|
|
372
|
+
else if (DynamicMethodsResolver.customizationModifiers.OrderedAndPaginated.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
329
373
|
dynamicMethodCustomization.orderPosition = -3;
|
|
330
374
|
dynamicMethodCustomization.paginationPosition = -2;
|
|
331
375
|
dynamicMethodInfo.otherParams.push("order");
|
|
332
376
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
333
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
377
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.OrderedAndPaginated, "");
|
|
334
378
|
dynamicMethodInfo.argsCount += 2;
|
|
335
379
|
}
|
|
336
|
-
else if (dynamicMethodInfo.keyToMapReplaced
|
|
380
|
+
else if (DynamicMethodsResolver.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
337
381
|
dynamicMethodCustomization.paginationPosition = -2;
|
|
338
382
|
dynamicMethodInfo.otherParams.push("pagination");
|
|
339
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
383
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Paginated, "");
|
|
340
384
|
dynamicMethodInfo.argsCount++;
|
|
341
385
|
}
|
|
342
|
-
else if (dynamicMethodInfo.keyToMapReplaced
|
|
386
|
+
else if (DynamicMethodsResolver.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
343
387
|
dynamicMethodCustomization.orderPosition = -2;
|
|
344
388
|
dynamicMethodInfo.otherParams.push("order");
|
|
345
|
-
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(
|
|
389
|
+
dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Ordered, "");
|
|
346
390
|
dynamicMethodInfo.argsCount++;
|
|
347
391
|
}
|
|
348
|
-
const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(
|
|
392
|
+
const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.OrderBy);
|
|
349
393
|
if (keySplitedOrderBy[1]) {
|
|
350
|
-
|
|
394
|
+
if (DynamicMethodsResolver.customizationModifiers.Distinct.test(keySplitedOrderBy[1])) {
|
|
395
|
+
this.logAndThrowError(`The "Distinct" modifier cannot appear after the "OrderBy" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
396
|
+
}
|
|
397
|
+
const orderByFields = keySplitedOrderBy[1]
|
|
398
|
+
.split(DynamicMethodsResolver.operators.And)
|
|
399
|
+
.map(uncapitalize_util_1.uncapitalize);
|
|
351
400
|
dynamicMethodCustomization.injectOrdering = orderByFields.map(field => {
|
|
352
401
|
if (field.endsWith("Asc")) {
|
|
353
|
-
field = field.replace(
|
|
402
|
+
field = field.replace(/Asc$/, "");
|
|
354
403
|
return { [field]: "ASC" };
|
|
355
404
|
}
|
|
356
405
|
else if (field.endsWith("Desc")) {
|
|
357
|
-
field = field.replace(
|
|
406
|
+
field = field.replace(/Desc$/, "");
|
|
358
407
|
return { [field]: "DESC" };
|
|
359
408
|
}
|
|
360
409
|
return { [field]: "ASC" };
|
|
@@ -363,119 +412,135 @@ class DynamicMethodsResolver {
|
|
|
363
412
|
dynamicMethodInfo.keyToMapReplaced = keySplitedOrderBy[0];
|
|
364
413
|
dynamicMethodCustomization.injectOrdering ??= methodData.injectOrdering;
|
|
365
414
|
}
|
|
415
|
+
else if (DynamicMethodsResolver.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced) ||
|
|
416
|
+
DynamicMethodsResolver.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced) ||
|
|
417
|
+
DynamicMethodsResolver.customizationModifiers.OrderBy.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
418
|
+
this.logAndThrowError(`This dynamic method prefix doesn't support the ordering or pagination modifiers: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
419
|
+
}
|
|
366
420
|
if (!dynamicMethodInfo.ignoreDistinct) {
|
|
367
|
-
const keySplitedDistinct = dynamicMethodInfo.keyToMapReplaced.split(
|
|
421
|
+
const keySplitedDistinct = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.Distinct);
|
|
368
422
|
if (keySplitedDistinct[1]) {
|
|
369
423
|
dynamicMethodCustomization.distinctKeys = keySplitedDistinct[1]
|
|
370
|
-
.split(
|
|
424
|
+
.split(DynamicMethodsResolver.operators.And)
|
|
371
425
|
.map(uncapitalize_util_1.uncapitalize);
|
|
372
426
|
}
|
|
373
427
|
dynamicMethodInfo.keyToMapReplaced = keySplitedDistinct[0];
|
|
374
428
|
}
|
|
429
|
+
else if (DynamicMethodsResolver.customizationModifiers.Distinct.test(dynamicMethodInfo.keyToMapReplaced)) {
|
|
430
|
+
this.logAndThrowError(`This dynamic method prefix doesn't support the "Distinct" modifier: ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
431
|
+
}
|
|
375
432
|
return dynamicMethodCustomization;
|
|
376
433
|
}
|
|
377
434
|
resolveUglyWhere(keySplitedAnd) {
|
|
378
435
|
const uglyWhere = { name: "", pushProperty: "$$$" };
|
|
379
436
|
let nullMode = undefined;
|
|
380
|
-
if (
|
|
437
|
+
if (DynamicMethodsResolver.fieldModifiers.IsNull.test(keySplitedAnd)) {
|
|
381
438
|
uglyWhere.pushProperty = "$$$";
|
|
382
439
|
uglyWhere.autoInjectVal = null;
|
|
383
440
|
nullMode = "is";
|
|
384
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
441
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNull, "");
|
|
385
442
|
}
|
|
386
|
-
else if (
|
|
443
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsNotNull.test(keySplitedAnd)) {
|
|
387
444
|
uglyWhere.pushProperty = "not";
|
|
388
445
|
uglyWhere.autoInjectVal = null;
|
|
389
446
|
nullMode = "not";
|
|
390
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
447
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNotNull, "");
|
|
391
448
|
}
|
|
392
|
-
else if (
|
|
449
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsTrue.test(keySplitedAnd)) {
|
|
393
450
|
uglyWhere.pushProperty = "$$$";
|
|
394
451
|
uglyWhere.autoInjectVal = true;
|
|
395
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
452
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsTrue, "");
|
|
396
453
|
}
|
|
397
|
-
else if (
|
|
454
|
+
else if (DynamicMethodsResolver.fieldModifiers.IsFalse.test(keySplitedAnd)) {
|
|
398
455
|
uglyWhere.pushProperty = "$$$";
|
|
399
456
|
uglyWhere.autoInjectVal = false;
|
|
400
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
457
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsFalse, "");
|
|
401
458
|
}
|
|
402
459
|
else {
|
|
403
|
-
if (
|
|
460
|
+
if (DynamicMethodsResolver.fieldModifiers.IgnoreCase.test(keySplitedAnd)) {
|
|
404
461
|
uglyWhere.properties = {};
|
|
405
462
|
uglyWhere.properties.ignoreCase = true;
|
|
406
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
463
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IgnoreCase, "");
|
|
407
464
|
}
|
|
408
|
-
if (
|
|
409
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
465
|
+
if (DynamicMethodsResolver.fieldModifiers.Optional.test(keySplitedAnd)) {
|
|
466
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Optional, "");
|
|
410
467
|
}
|
|
411
|
-
if (
|
|
468
|
+
if (DynamicMethodsResolver.fieldModifiers.NotBetween.test(keySplitedAnd)) {
|
|
412
469
|
uglyWhere.pushProperty = "not";
|
|
413
470
|
uglyWhere.betweenMode = true;
|
|
414
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
471
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotBetween, "");
|
|
415
472
|
}
|
|
416
|
-
else if (
|
|
473
|
+
else if (DynamicMethodsResolver.fieldModifiers.Between.test(keySplitedAnd)) {
|
|
417
474
|
uglyWhere.pushProperty = "$$$";
|
|
418
475
|
uglyWhere.betweenMode = true;
|
|
419
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
476
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Between, "");
|
|
420
477
|
}
|
|
421
|
-
else if (
|
|
478
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotStartsWith.test(keySplitedAnd)) {
|
|
422
479
|
uglyWhere.pushProperty = "not.startsWith";
|
|
423
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
480
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotStartsWith, "");
|
|
424
481
|
}
|
|
425
|
-
else if (
|
|
482
|
+
else if (DynamicMethodsResolver.fieldModifiers.StartsWith.test(keySplitedAnd)) {
|
|
426
483
|
uglyWhere.pushProperty = "startsWith";
|
|
427
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
484
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.StartsWith, "");
|
|
428
485
|
}
|
|
429
|
-
else if (
|
|
486
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotEndsWith.test(keySplitedAnd)) {
|
|
430
487
|
uglyWhere.pushProperty = "not.endsWith";
|
|
431
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
488
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEndsWith, "");
|
|
432
489
|
}
|
|
433
|
-
else if (
|
|
490
|
+
else if (DynamicMethodsResolver.fieldModifiers.EndsWith.test(keySplitedAnd)) {
|
|
434
491
|
uglyWhere.pushProperty = "endsWith";
|
|
435
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
492
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.EndsWith, "");
|
|
436
493
|
}
|
|
437
|
-
else if (
|
|
494
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotContains.test(keySplitedAnd)) {
|
|
438
495
|
uglyWhere.pushProperty = "not.contains";
|
|
439
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
496
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotContains, "");
|
|
440
497
|
}
|
|
441
|
-
else if (
|
|
498
|
+
else if (DynamicMethodsResolver.fieldModifiers.Contains.test(keySplitedAnd)) {
|
|
442
499
|
uglyWhere.pushProperty = "contains";
|
|
443
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
500
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Contains, "");
|
|
501
|
+
}
|
|
502
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotEquals.test(keySplitedAnd)) {
|
|
503
|
+
uglyWhere.pushProperty = "not";
|
|
504
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEquals, "");
|
|
444
505
|
}
|
|
445
|
-
else if (
|
|
506
|
+
else if (DynamicMethodsResolver.fieldModifiers.Equals.test(keySplitedAnd)) {
|
|
507
|
+
uglyWhere.pushProperty = "$$$";
|
|
508
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Equals, "");
|
|
509
|
+
}
|
|
510
|
+
else if (DynamicMethodsResolver.fieldModifiers.LessThanEqual.test(keySplitedAnd)) {
|
|
446
511
|
uglyWhere.pushProperty = "lte";
|
|
447
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
512
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThanEqual, "");
|
|
448
513
|
}
|
|
449
|
-
else if (
|
|
514
|
+
else if (DynamicMethodsResolver.fieldModifiers.LessThan.test(keySplitedAnd)) {
|
|
450
515
|
uglyWhere.pushProperty = "lt";
|
|
451
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
516
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThan, "");
|
|
452
517
|
}
|
|
453
|
-
else if (
|
|
518
|
+
else if (DynamicMethodsResolver.fieldModifiers.GreaterThanEqual.test(keySplitedAnd)) {
|
|
454
519
|
uglyWhere.pushProperty = "gte";
|
|
455
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
520
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThanEqual, "");
|
|
456
521
|
}
|
|
457
|
-
else if (
|
|
522
|
+
else if (DynamicMethodsResolver.fieldModifiers.GreaterThan.test(keySplitedAnd)) {
|
|
458
523
|
uglyWhere.pushProperty = "gt";
|
|
459
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
524
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThan, "");
|
|
460
525
|
}
|
|
461
|
-
else if (
|
|
526
|
+
else if (DynamicMethodsResolver.fieldModifiers.NotIn.test(keySplitedAnd)) {
|
|
462
527
|
uglyWhere.pushProperty = "notIn";
|
|
463
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
528
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotIn, "");
|
|
464
529
|
}
|
|
465
|
-
else if (
|
|
530
|
+
else if (DynamicMethodsResolver.fieldModifiers.In.test(keySplitedAnd)) {
|
|
466
531
|
uglyWhere.pushProperty = "in";
|
|
467
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
532
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.In, "");
|
|
468
533
|
}
|
|
469
|
-
else if (
|
|
534
|
+
else if (DynamicMethodsResolver.fieldModifiers.Not.test(keySplitedAnd)) {
|
|
470
535
|
uglyWhere.pushProperty = "not";
|
|
471
|
-
keySplitedAnd = keySplitedAnd.replace(
|
|
536
|
+
keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Not, "");
|
|
472
537
|
}
|
|
473
538
|
else {
|
|
474
539
|
uglyWhere.pushProperty = "$$$";
|
|
475
540
|
}
|
|
476
541
|
}
|
|
477
|
-
if (
|
|
478
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
542
|
+
if (DynamicMethodsResolver.fieldModifiers.Without.test(keySplitedAnd)) {
|
|
543
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Without);
|
|
479
544
|
const specificField = keySplitedConector[1];
|
|
480
545
|
if (!specificField) {
|
|
481
546
|
if (nullMode) {
|
|
@@ -487,12 +552,12 @@ class DynamicMethodsResolver {
|
|
|
487
552
|
}
|
|
488
553
|
}
|
|
489
554
|
else {
|
|
490
|
-
uglyWhere.pushProperty = `_without.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? "" : `.${uglyWhere.pushProperty}`}`;
|
|
555
|
+
uglyWhere.pushProperty = `_without.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? (uglyWhere.properties ? ".equals" : "") : `.${uglyWhere.pushProperty}`}`;
|
|
491
556
|
}
|
|
492
557
|
keySplitedAnd = keySplitedConector[0];
|
|
493
558
|
}
|
|
494
|
-
else if (
|
|
495
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
559
|
+
else if (DynamicMethodsResolver.fieldModifiers.With.test(keySplitedAnd)) {
|
|
560
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.With);
|
|
496
561
|
const specificField = keySplitedConector[1];
|
|
497
562
|
if (!specificField) {
|
|
498
563
|
if (nullMode) {
|
|
@@ -504,43 +569,43 @@ class DynamicMethodsResolver {
|
|
|
504
569
|
}
|
|
505
570
|
}
|
|
506
571
|
else {
|
|
507
|
-
uglyWhere.pushProperty = `_with.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? "" : `.${uglyWhere.pushProperty}`}`;
|
|
572
|
+
uglyWhere.pushProperty = `_with.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? (uglyWhere.properties ? ".equals" : "") : `.${uglyWhere.pushProperty}`}`;
|
|
508
573
|
}
|
|
509
574
|
keySplitedAnd = keySplitedConector[0];
|
|
510
575
|
}
|
|
511
|
-
else if (
|
|
512
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
576
|
+
else if (DynamicMethodsResolver.fieldModifiers.Some.test(keySplitedAnd)) {
|
|
577
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Some);
|
|
513
578
|
const specificField = keySplitedConector[1];
|
|
514
579
|
if (!specificField) {
|
|
515
580
|
uglyWhere.pushProperty = "_some";
|
|
516
581
|
uglyWhere.autoInjectVal = {};
|
|
517
582
|
}
|
|
518
583
|
else {
|
|
519
|
-
uglyWhere.pushProperty = `_some.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? "" : `.${uglyWhere.pushProperty}`}`;
|
|
584
|
+
uglyWhere.pushProperty = `_some.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? (uglyWhere.properties ? ".equals" : "") : `.${uglyWhere.pushProperty}`}`;
|
|
520
585
|
}
|
|
521
586
|
keySplitedAnd = keySplitedConector[0];
|
|
522
587
|
}
|
|
523
|
-
else if (
|
|
524
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
588
|
+
else if (DynamicMethodsResolver.fieldModifiers.Every.test(keySplitedAnd)) {
|
|
589
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.Every);
|
|
525
590
|
const specificField = keySplitedConector[1];
|
|
526
591
|
if (!specificField) {
|
|
527
592
|
uglyWhere.pushProperty = "_every";
|
|
528
593
|
uglyWhere.autoInjectVal = {};
|
|
529
594
|
}
|
|
530
595
|
else {
|
|
531
|
-
uglyWhere.pushProperty = `_every.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? "" : `.${uglyWhere.pushProperty}`}`;
|
|
596
|
+
uglyWhere.pushProperty = `_every.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? (uglyWhere.properties ? ".equals" : "") : `.${uglyWhere.pushProperty}`}`;
|
|
532
597
|
}
|
|
533
598
|
keySplitedAnd = keySplitedConector[0];
|
|
534
599
|
}
|
|
535
|
-
else if (
|
|
536
|
-
const keySplitedConector = keySplitedAnd.split(
|
|
600
|
+
else if (DynamicMethodsResolver.fieldModifiers.None.test(keySplitedAnd)) {
|
|
601
|
+
const keySplitedConector = keySplitedAnd.split(DynamicMethodsResolver.fieldModifiers.None);
|
|
537
602
|
const specificField = keySplitedConector[1];
|
|
538
603
|
if (!specificField) {
|
|
539
604
|
uglyWhere.pushProperty = "_none";
|
|
540
605
|
uglyWhere.autoInjectVal = {};
|
|
541
606
|
}
|
|
542
607
|
else {
|
|
543
|
-
uglyWhere.pushProperty = `_none.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? "" : `.${uglyWhere.pushProperty}`}`;
|
|
608
|
+
uglyWhere.pushProperty = `_none.${(0, uncapitalize_util_1.uncapitalize)(specificField)}${uglyWhere.pushProperty === "$$$" ? (uglyWhere.properties ? ".equals" : "") : `.${uglyWhere.pushProperty}`}`;
|
|
544
609
|
}
|
|
545
610
|
keySplitedAnd = keySplitedConector[0];
|
|
546
611
|
}
|
|
@@ -554,20 +619,29 @@ class DynamicMethodsResolver {
|
|
|
554
619
|
prettyWheres: [],
|
|
555
620
|
};
|
|
556
621
|
let ANDMode = false;
|
|
557
|
-
let keysSplitedAND = dynamicMethodInfo.keyToMapReplaced.split(
|
|
622
|
+
let keysSplitedAND = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.operators.AND);
|
|
558
623
|
if (keysSplitedAND.length > 1) {
|
|
559
624
|
ANDMode = true;
|
|
560
625
|
}
|
|
561
626
|
keysSplitedAND.forEach((keySplitedAND, idx) => {
|
|
562
627
|
let orMode = false;
|
|
563
|
-
let keysSplitedOr
|
|
628
|
+
let keysSplitedOr;
|
|
629
|
+
if (idx === 0) {
|
|
630
|
+
keysSplitedOr = keySplitedAND.split(DynamicMethodsResolver.operators.Or);
|
|
631
|
+
}
|
|
632
|
+
else {
|
|
633
|
+
if (DynamicMethodsResolver.operators.Or.test(keySplitedAND)) {
|
|
634
|
+
this.logAndThrowError(`The logical operator "Or" cannot appear after an "AND" (all caps): ${dynamicMethodInfo.originalDynamicMethodName}.`);
|
|
635
|
+
}
|
|
636
|
+
keysSplitedOr = [keySplitedAND];
|
|
637
|
+
}
|
|
564
638
|
if (keysSplitedOr.length > 1) {
|
|
565
639
|
orMode = true;
|
|
566
640
|
}
|
|
567
641
|
for (let i = 0; i < keysSplitedOr.length; i++) {
|
|
568
642
|
if (keysSplitedOr[i] === "")
|
|
569
643
|
continue;
|
|
570
|
-
const keysSplitedAnd = keysSplitedOr[i].split(
|
|
644
|
+
const keysSplitedAnd = keysSplitedOr[i].split(DynamicMethodsResolver.operators.And);
|
|
571
645
|
for (const keySplitedAnd of keysSplitedAnd) {
|
|
572
646
|
if (keySplitedAnd === "")
|
|
573
647
|
continue;
|
|
@@ -643,10 +717,9 @@ class DynamicMethodsResolver {
|
|
|
643
717
|
vsrepoArgs.options = { db: options.db ?? this.adapter.getDbClient() };
|
|
644
718
|
if (!withoutWhere) {
|
|
645
719
|
vsrepoArgs.where =
|
|
646
|
-
// *
|
|
647
|
-
specificWhere ===
|
|
648
|
-
?
|
|
649
|
-
"<args>[0]"
|
|
720
|
+
// * Validação necessária para o DEBUG MODE
|
|
721
|
+
typeof specificWhere === "string"
|
|
722
|
+
? specificWhere
|
|
650
723
|
: this.mergeWheresResolver.resolve(options.see, specificWhere);
|
|
651
724
|
}
|
|
652
725
|
if (!withoutSelect) {
|
|
@@ -718,9 +791,7 @@ class DynamicMethodsResolver {
|
|
|
718
791
|
adjust++;
|
|
719
792
|
continue;
|
|
720
793
|
}
|
|
721
|
-
const arg = args[j - adjust] === debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL
|
|
722
|
-
? `<args>[${j - adjust}]`
|
|
723
|
-
: args[j - adjust];
|
|
794
|
+
const arg = args[j - adjust] === debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL ? `<args>[${j - adjust}]` : args[j - adjust];
|
|
724
795
|
// ? Avaliar necessidade dessa validação; era usada por compatibilidade direta com o prisma
|
|
725
796
|
if (currentWhereRslvd.betweenMode && arg !== undefined) {
|
|
726
797
|
current[context[i]] = { between: arg };
|
|
@@ -782,7 +853,7 @@ class DynamicMethodsResolver {
|
|
|
782
853
|
if (!dynamicMethodInfo.ignoreWhere) {
|
|
783
854
|
dynamicMethodWhereOps = this.resolvePrettyWheres(dynamicMethodInfo);
|
|
784
855
|
}
|
|
785
|
-
instance
|
|
856
|
+
instance._vsrepocache.set(originalKey, (args, methodOptions) => {
|
|
786
857
|
const vsrepoResolveArgsData = {
|
|
787
858
|
instance,
|
|
788
859
|
options: methodOptions ?? {},
|
|
@@ -796,9 +867,7 @@ class DynamicMethodsResolver {
|
|
|
796
867
|
pagination: dynamicMethodCustomization.paginationPosition !== undefined
|
|
797
868
|
? this.validateIndexedArg(args, dynamicMethodCustomization.paginationPosition, value => this.validator.validatePagination(value))
|
|
798
869
|
: undefined,
|
|
799
|
-
dataPayload: dynamicMethodInfo.dataIndex !== undefined
|
|
800
|
-
? args.at(dynamicMethodInfo.dataIndex)
|
|
801
|
-
: undefined,
|
|
870
|
+
dataPayload: dynamicMethodInfo.dataIndex !== undefined ? args.at(dynamicMethodInfo.dataIndex) : undefined,
|
|
802
871
|
createPayload: dynamicMethodInfo.createIndex !== undefined
|
|
803
872
|
? args.at(dynamicMethodInfo.createIndex)
|
|
804
873
|
: undefined,
|
|
@@ -814,7 +883,7 @@ class DynamicMethodsResolver {
|
|
|
814
883
|
else if (dynamicMethodInfo.onlyBaseWheres) {
|
|
815
884
|
vsrepoResolveArgsData.specificWhere =
|
|
816
885
|
dynamicMethodInfo.whereIndex !== undefined
|
|
817
|
-
? this.validateIndexedArg(args, dynamicMethodInfo.whereIndex, value => this.validator.validateWhere(value)
|
|
886
|
+
? this.validateIndexedArg(args, dynamicMethodInfo.whereIndex, value => this.validator.validateWhere(value))
|
|
818
887
|
: {};
|
|
819
888
|
}
|
|
820
889
|
return this.resolveVSRepoArgs(vsrepoResolveArgsData);
|
|
@@ -825,7 +894,7 @@ class DynamicMethodsResolver {
|
|
|
825
894
|
for (let i = 0; i <= dynamicMethodInfo.argsCount; i++) {
|
|
826
895
|
argsSimulation.push(debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL);
|
|
827
896
|
}
|
|
828
|
-
const vsrepoArgs = instance
|
|
897
|
+
const vsrepoArgs = instance._vsrepocache.get(originalKey)(argsSimulation);
|
|
829
898
|
const { db: _, ...options } = vsrepoArgs.options ?? {};
|
|
830
899
|
this.logger.logDebug(`Args preview for ${originalKey}:`, {
|
|
831
900
|
...vsrepoArgs,
|
|
@@ -833,7 +902,6 @@ class DynamicMethodsResolver {
|
|
|
833
902
|
});
|
|
834
903
|
}
|
|
835
904
|
instance[originalKey] = async (...args) => {
|
|
836
|
-
let db = this.adapter.getDbClient();
|
|
837
905
|
let methodOptions;
|
|
838
906
|
if (args.length < dynamicMethodInfo.argsCount) {
|
|
839
907
|
const missingParams = dynamicMethodInfo.whereParams
|
|
@@ -846,12 +914,11 @@ class DynamicMethodsResolver {
|
|
|
846
914
|
else if (args.length > dynamicMethodInfo.argsCount) {
|
|
847
915
|
const optionsArg = args[args.length - 1];
|
|
848
916
|
methodOptions = this.validator.validateMethodOptions(optionsArg);
|
|
849
|
-
db = methodOptions.db ?? db;
|
|
850
917
|
}
|
|
851
918
|
else {
|
|
852
919
|
args.push("1");
|
|
853
920
|
}
|
|
854
|
-
const vsrepoArgs = instance
|
|
921
|
+
const vsrepoArgs = instance._vsrepocache.get(originalKey)(args, methodOptions);
|
|
855
922
|
const start = this.logger.startPerformLog(`run ${String(originalKey)} (-> ${dynamicMethodInfo.method})`);
|
|
856
923
|
try {
|
|
857
924
|
// * Todos os métodos do adapter seguem essa precedencia de parametros
|
|
@@ -867,7 +934,6 @@ class DynamicMethodsResolver {
|
|
|
867
934
|
return result;
|
|
868
935
|
}
|
|
869
936
|
catch (err) {
|
|
870
|
-
// ? Deixar o catch para se quiser fazer algum tratamento antes de lançar o erro
|
|
871
937
|
this.logger.endPerformLog(start);
|
|
872
938
|
this.logger.logError(`Failed to run dynamic method '${String(originalKey)}' (-> ${dynamicMethodInfo.method})`, err);
|
|
873
939
|
throw err;
|
|
@@ -883,7 +949,7 @@ class DynamicMethodsResolver {
|
|
|
883
949
|
const originalKey = method.propertyKey;
|
|
884
950
|
const modifyingQueryMethod = method.modifying ?? false;
|
|
885
951
|
const valueQueryMethod = method.value;
|
|
886
|
-
const singleResult = method.singleResult;
|
|
952
|
+
const singleResult = method.singleResult ?? false;
|
|
887
953
|
const spreadArgsMode = method.spreadArgs;
|
|
888
954
|
instance[originalKey] = async (...args) => {
|
|
889
955
|
let db;
|
|
@@ -909,11 +975,24 @@ class DynamicMethodsResolver {
|
|
|
909
975
|
queryArgs = queryArgValidated.args;
|
|
910
976
|
}
|
|
911
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
|
+
});
|
|
912
991
|
const start = this.logger.startPerformLog(`run ${String(originalKey)} (Modifying: ${modifyingQueryMethod})`);
|
|
913
992
|
try {
|
|
914
|
-
const result = await this.adapter.query(
|
|
993
|
+
const result = await this.adapter.query(finalQuery, {
|
|
915
994
|
db,
|
|
916
|
-
args:
|
|
995
|
+
args: finalArgs,
|
|
917
996
|
modifying: modifyingQueryMethod,
|
|
918
997
|
});
|
|
919
998
|
const resolved = singleResult && Array.isArray(result) ? (result[0] ?? null) : result;
|