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.
Files changed (41) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +3 -2
  3. package/README.pt-BR.md +3 -2
  4. package/dist/VSRepoAdapter.d.ts +12 -0
  5. package/dist/VSRepoAdapter.js.map +1 -1
  6. package/dist/VSRepository.d.ts +50 -4
  7. package/dist/VSRepository.js +57 -28
  8. package/dist/VSRepository.js.map +1 -1
  9. package/dist/decorators/query-method.decorator.d.ts +3 -24
  10. package/dist/decorators/query-method.decorator.js +4 -27
  11. package/dist/decorators/query-method.decorator.js.map +1 -1
  12. package/dist/index.d.ts +4 -0
  13. package/dist/index.js +5 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/internal/resolvers/dynamic-methods.resolver.d.ts +6 -5
  16. package/dist/internal/resolvers/dynamic-methods.resolver.js +112 -98
  17. package/dist/internal/resolvers/dynamic-methods.resolver.js.map +1 -1
  18. package/dist/internal/utils/vs-placeholder-parser.util.d.ts +2 -0
  19. package/dist/internal/utils/vs-placeholder-parser.util.js +62 -0
  20. package/dist/internal/utils/vs-placeholder-parser.util.js.map +1 -0
  21. package/dist/internal/utils/vs-query-builder.util.d.ts +5 -1
  22. package/dist/internal/utils/vs-query-builder.util.js +1 -13
  23. package/dist/internal/utils/vs-query-builder.util.js.map +1 -1
  24. package/dist/internal/utils/vs-raw-query-builder.util.d.ts +238 -0
  25. package/dist/internal/utils/vs-raw-query-builder.util.js +433 -0
  26. package/dist/internal/utils/vs-raw-query-builder.util.js.map +1 -0
  27. package/dist/internal/utils/vs-sql.util.d.ts +100 -0
  28. package/dist/internal/utils/vs-sql.util.js +151 -0
  29. package/dist/internal/utils/vs-sql.util.js.map +1 -0
  30. package/dist/internal/validators/decorators.validator.js +1 -1
  31. package/dist/internal/validators/decorators.validator.js.map +1 -1
  32. package/dist/internal/validators/vsrepo.validator.js +1 -0
  33. package/dist/internal/validators/vsrepo.validator.js.map +1 -1
  34. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.d.ts +8 -0
  35. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js +3 -0
  36. package/dist/types/vsrepo/vs-raw-query-builder-cte-query.type.js.map +1 -0
  37. package/dist/types/vsrepo/vs-raw-query-builder-target.type.d.ts +7 -0
  38. package/dist/types/vsrepo/vs-raw-query-builder-target.type.js +3 -0
  39. package/dist/types/vsrepo/vs-raw-query-builder-target.type.js.map +1 -0
  40. package/dist/types/vsrepo/vsrepo-options.type.d.ts +18 -0
  41. 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
- constructor(logger, adapter, mergeWheresResolver, validator, defaultOrdering) {
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, parseDebugToString = true) {
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 (parseDebugToString
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 (this.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
355
- dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(this.customizationModifiers.IgnoreConflicts, "");
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 (this.customizationModifiers.IgnoreConflicts.test(dynamicMethodInfo.keyToMapReplaced)) {
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 (this.customizationModifiers.PaginatedAndOrdered.test(dynamicMethodInfo.keyToMapReplaced)) {
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(this.customizationModifiers.PaginatedAndOrdered, "");
369
+ dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.PaginatedAndOrdered, "");
369
370
  dynamicMethodInfo.argsCount += 2;
370
371
  }
371
- else if (this.customizationModifiers.OrderedAndPaginated.test(dynamicMethodInfo.keyToMapReplaced)) {
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(this.customizationModifiers.OrderedAndPaginated, "");
377
+ dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.OrderedAndPaginated, "");
377
378
  dynamicMethodInfo.argsCount += 2;
378
379
  }
379
- else if (this.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced)) {
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(this.customizationModifiers.Paginated, "");
383
+ dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Paginated, "");
383
384
  dynamicMethodInfo.argsCount++;
384
385
  }
385
- else if (this.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced)) {
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(this.customizationModifiers.Ordered, "");
389
+ dynamicMethodInfo.keyToMapReplaced = dynamicMethodInfo.keyToMapReplaced.replace(DynamicMethodsResolver.customizationModifiers.Ordered, "");
389
390
  dynamicMethodInfo.argsCount++;
390
391
  }
391
- const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(this.customizationModifiers.OrderBy);
392
+ const keySplitedOrderBy = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.OrderBy);
392
393
  if (keySplitedOrderBy[1]) {
393
- if (this.customizationModifiers.Distinct.test(keySplitedOrderBy[1])) {
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].split(this.operators.And).map(uncapitalize_util_1.uncapitalize);
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 (this.customizationModifiers.Paginated.test(dynamicMethodInfo.keyToMapReplaced) ||
413
- this.customizationModifiers.Ordered.test(dynamicMethodInfo.keyToMapReplaced) ||
414
- this.customizationModifiers.OrderBy.test(dynamicMethodInfo.keyToMapReplaced)) {
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(this.customizationModifiers.Distinct);
421
+ const keySplitedDistinct = dynamicMethodInfo.keyToMapReplaced.split(DynamicMethodsResolver.customizationModifiers.Distinct);
419
422
  if (keySplitedDistinct[1]) {
420
423
  dynamicMethodCustomization.distinctKeys = keySplitedDistinct[1]
421
- .split(this.operators.And)
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 (this.customizationModifiers.Distinct.test(dynamicMethodInfo.keyToMapReplaced)) {
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 (this.fieldModifiers.IsNull.test(keySplitedAnd)) {
437
+ if (DynamicMethodsResolver.fieldModifiers.IsNull.test(keySplitedAnd)) {
435
438
  uglyWhere.pushProperty = "$$$";
436
439
  uglyWhere.autoInjectVal = null;
437
440
  nullMode = "is";
438
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.IsNull, "");
441
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNull, "");
439
442
  }
440
- else if (this.fieldModifiers.IsNotNull.test(keySplitedAnd)) {
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(this.fieldModifiers.IsNotNull, "");
447
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsNotNull, "");
445
448
  }
446
- else if (this.fieldModifiers.IsTrue.test(keySplitedAnd)) {
449
+ else if (DynamicMethodsResolver.fieldModifiers.IsTrue.test(keySplitedAnd)) {
447
450
  uglyWhere.pushProperty = "$$$";
448
451
  uglyWhere.autoInjectVal = true;
449
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.IsTrue, "");
452
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsTrue, "");
450
453
  }
451
- else if (this.fieldModifiers.IsFalse.test(keySplitedAnd)) {
454
+ else if (DynamicMethodsResolver.fieldModifiers.IsFalse.test(keySplitedAnd)) {
452
455
  uglyWhere.pushProperty = "$$$";
453
456
  uglyWhere.autoInjectVal = false;
454
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.IsFalse, "");
457
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IsFalse, "");
455
458
  }
456
459
  else {
457
- if (this.fieldModifiers.IgnoreCase.test(keySplitedAnd)) {
460
+ if (DynamicMethodsResolver.fieldModifiers.IgnoreCase.test(keySplitedAnd)) {
458
461
  uglyWhere.properties = {};
459
462
  uglyWhere.properties.ignoreCase = true;
460
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.IgnoreCase, "");
463
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.IgnoreCase, "");
461
464
  }
462
- if (this.fieldModifiers.Optional.test(keySplitedAnd)) {
463
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.Optional, "");
465
+ if (DynamicMethodsResolver.fieldModifiers.Optional.test(keySplitedAnd)) {
466
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Optional, "");
464
467
  }
465
- if (this.fieldModifiers.NotBetween.test(keySplitedAnd)) {
468
+ if (DynamicMethodsResolver.fieldModifiers.NotBetween.test(keySplitedAnd)) {
466
469
  uglyWhere.pushProperty = "not";
467
470
  uglyWhere.betweenMode = true;
468
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotBetween, "");
471
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotBetween, "");
469
472
  }
470
- else if (this.fieldModifiers.Between.test(keySplitedAnd)) {
473
+ else if (DynamicMethodsResolver.fieldModifiers.Between.test(keySplitedAnd)) {
471
474
  uglyWhere.pushProperty = "$$$";
472
475
  uglyWhere.betweenMode = true;
473
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.Between, "");
476
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Between, "");
474
477
  }
475
- else if (this.fieldModifiers.NotStartsWith.test(keySplitedAnd)) {
478
+ else if (DynamicMethodsResolver.fieldModifiers.NotStartsWith.test(keySplitedAnd)) {
476
479
  uglyWhere.pushProperty = "not.startsWith";
477
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotStartsWith, "");
480
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotStartsWith, "");
478
481
  }
479
- else if (this.fieldModifiers.StartsWith.test(keySplitedAnd)) {
482
+ else if (DynamicMethodsResolver.fieldModifiers.StartsWith.test(keySplitedAnd)) {
480
483
  uglyWhere.pushProperty = "startsWith";
481
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.StartsWith, "");
484
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.StartsWith, "");
482
485
  }
483
- else if (this.fieldModifiers.NotEndsWith.test(keySplitedAnd)) {
486
+ else if (DynamicMethodsResolver.fieldModifiers.NotEndsWith.test(keySplitedAnd)) {
484
487
  uglyWhere.pushProperty = "not.endsWith";
485
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotEndsWith, "");
488
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEndsWith, "");
486
489
  }
487
- else if (this.fieldModifiers.EndsWith.test(keySplitedAnd)) {
490
+ else if (DynamicMethodsResolver.fieldModifiers.EndsWith.test(keySplitedAnd)) {
488
491
  uglyWhere.pushProperty = "endsWith";
489
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.EndsWith, "");
492
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.EndsWith, "");
490
493
  }
491
- else if (this.fieldModifiers.NotContains.test(keySplitedAnd)) {
494
+ else if (DynamicMethodsResolver.fieldModifiers.NotContains.test(keySplitedAnd)) {
492
495
  uglyWhere.pushProperty = "not.contains";
493
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotContains, "");
496
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotContains, "");
494
497
  }
495
- else if (this.fieldModifiers.Contains.test(keySplitedAnd)) {
498
+ else if (DynamicMethodsResolver.fieldModifiers.Contains.test(keySplitedAnd)) {
496
499
  uglyWhere.pushProperty = "contains";
497
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.Contains, "");
500
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Contains, "");
498
501
  }
499
- else if (this.fieldModifiers.NotEquals.test(keySplitedAnd)) {
502
+ else if (DynamicMethodsResolver.fieldModifiers.NotEquals.test(keySplitedAnd)) {
500
503
  uglyWhere.pushProperty = "not";
501
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotEquals, "");
504
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotEquals, "");
502
505
  }
503
- else if (this.fieldModifiers.Equals.test(keySplitedAnd)) {
506
+ else if (DynamicMethodsResolver.fieldModifiers.Equals.test(keySplitedAnd)) {
504
507
  uglyWhere.pushProperty = "$$$";
505
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.Equals, "");
508
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Equals, "");
506
509
  }
507
- else if (this.fieldModifiers.LessThanEqual.test(keySplitedAnd)) {
510
+ else if (DynamicMethodsResolver.fieldModifiers.LessThanEqual.test(keySplitedAnd)) {
508
511
  uglyWhere.pushProperty = "lte";
509
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.LessThanEqual, "");
512
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThanEqual, "");
510
513
  }
511
- else if (this.fieldModifiers.LessThan.test(keySplitedAnd)) {
514
+ else if (DynamicMethodsResolver.fieldModifiers.LessThan.test(keySplitedAnd)) {
512
515
  uglyWhere.pushProperty = "lt";
513
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.LessThan, "");
516
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.LessThan, "");
514
517
  }
515
- else if (this.fieldModifiers.GreaterThanEqual.test(keySplitedAnd)) {
518
+ else if (DynamicMethodsResolver.fieldModifiers.GreaterThanEqual.test(keySplitedAnd)) {
516
519
  uglyWhere.pushProperty = "gte";
517
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.GreaterThanEqual, "");
520
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThanEqual, "");
518
521
  }
519
- else if (this.fieldModifiers.GreaterThan.test(keySplitedAnd)) {
522
+ else if (DynamicMethodsResolver.fieldModifiers.GreaterThan.test(keySplitedAnd)) {
520
523
  uglyWhere.pushProperty = "gt";
521
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.GreaterThan, "");
524
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.GreaterThan, "");
522
525
  }
523
- else if (this.fieldModifiers.NotIn.test(keySplitedAnd)) {
526
+ else if (DynamicMethodsResolver.fieldModifiers.NotIn.test(keySplitedAnd)) {
524
527
  uglyWhere.pushProperty = "notIn";
525
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.NotIn, "");
528
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.NotIn, "");
526
529
  }
527
- else if (this.fieldModifiers.In.test(keySplitedAnd)) {
530
+ else if (DynamicMethodsResolver.fieldModifiers.In.test(keySplitedAnd)) {
528
531
  uglyWhere.pushProperty = "in";
529
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.In, "");
532
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.In, "");
530
533
  }
531
- else if (this.fieldModifiers.Not.test(keySplitedAnd)) {
534
+ else if (DynamicMethodsResolver.fieldModifiers.Not.test(keySplitedAnd)) {
532
535
  uglyWhere.pushProperty = "not";
533
- keySplitedAnd = keySplitedAnd.replace(this.fieldModifiers.Not, "");
536
+ keySplitedAnd = keySplitedAnd.replace(DynamicMethodsResolver.fieldModifiers.Not, "");
534
537
  }
535
538
  else {
536
539
  uglyWhere.pushProperty = "$$$";
537
540
  }
538
541
  }
539
- if (this.fieldModifiers.Without.test(keySplitedAnd)) {
540
- const keySplitedConector = keySplitedAnd.split(this.fieldModifiers.Without);
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 (this.fieldModifiers.With.test(keySplitedAnd)) {
557
- const keySplitedConector = keySplitedAnd.split(this.fieldModifiers.With);
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 (this.fieldModifiers.Some.test(keySplitedAnd)) {
574
- const keySplitedConector = keySplitedAnd.split(this.fieldModifiers.Some);
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 (this.fieldModifiers.Every.test(keySplitedAnd)) {
586
- const keySplitedConector = keySplitedAnd.split(this.fieldModifiers.Every);
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 (this.fieldModifiers.None.test(keySplitedAnd)) {
598
- const keySplitedConector = keySplitedAnd.split(this.fieldModifiers.None);
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(this.operators.AND);
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(this.operators.Or);
630
+ keysSplitedOr = keySplitedAND.split(DynamicMethodsResolver.operators.Or);
628
631
  }
629
632
  else {
630
- if (this.operators.Or.test(keySplitedAND)) {
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(this.operators.And);
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
- // * Essa validação é so para o debug mode
718
- specificWhere === debug_arg_symbol_constant_1.DEBUG_ARG_SYMBOL
719
- ? // * 0 pois o whereIndex sempre vem no 0, se algum dia ele puder aparecer em outro lugar irá precisar corrigir isso
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), false)
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(valueQueryMethod, {
993
+ const result = await this.adapter.query(finalQuery, {
980
994
  db,
981
- args: queryArgs,
995
+ args: finalArgs,
982
996
  modifying: modifyingQueryMethod,
983
997
  });
984
998
  const resolved = singleResult && Array.isArray(result) ? (result[0] ?? null) : result;