@qrvey/data-persistence 0.5.7 → 0.5.8

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 (40) hide show
  1. package/dist/cjs/helpers/crudHelpers.js +3 -4
  2. package/dist/cjs/helpers/crudHelpers.js.map +1 -1
  3. package/dist/cjs/helpers/errorHelper.js +1 -2
  4. package/dist/cjs/helpers/errorHelper.js.map +1 -1
  5. package/dist/cjs/helpers/queryHelpers.js +2 -2
  6. package/dist/cjs/helpers/queryHelpers.js.map +1 -1
  7. package/dist/cjs/helpers/tableHelper.js +4 -5
  8. package/dist/cjs/helpers/tableHelper.js.map +1 -1
  9. package/dist/cjs/services/crud.service.js.map +1 -1
  10. package/dist/cjs/services/crudFactory.service.js +17 -7
  11. package/dist/cjs/services/crudFactory.service.js.map +1 -1
  12. package/dist/cjs/services/cruds/dynamodb/dynamoDbCrud.service.js.map +1 -1
  13. package/dist/cjs/services/cruds/dynamodb/queryBuilder.service.js.map +1 -1
  14. package/dist/cjs/services/cruds/dynamodb/queryBuilderCondition.service.js.map +1 -1
  15. package/dist/cjs/services/cruds/postgresql/connection.service.js.map +1 -1
  16. package/dist/cjs/services/cruds/postgresql/postgreSqlClient.service.js.map +1 -1
  17. package/dist/cjs/services/cruds/postgresql/postgreSqlCrud.service.js.map +1 -1
  18. package/dist/cjs/services/cruds/postgresql/query.service.js.map +1 -1
  19. package/dist/cjs/services/dbPool.service.js +1 -2
  20. package/dist/cjs/services/dbPool.service.js.map +1 -1
  21. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  22. package/dist/cjs/utils/constants.js +2 -2
  23. package/dist/cjs/utils/constants.js.map +1 -1
  24. package/dist/esm/{chunk-DHIGNHXS.mjs → chunk-2H6RO6ZL.mjs} +4 -6
  25. package/dist/esm/chunk-2H6RO6ZL.mjs.map +1 -0
  26. package/dist/esm/{chunk-6MOAJFFY.mjs → chunk-2OYWEFNZ.mjs} +8 -15
  27. package/dist/esm/chunk-2OYWEFNZ.mjs.map +1 -0
  28. package/dist/esm/{dynamoDbCrud.service-J7ZOB5QW.mjs → dynamoDbCrud.service-NRSGRPDQ.mjs} +30 -56
  29. package/dist/esm/dynamoDbCrud.service-NRSGRPDQ.mjs.map +1 -0
  30. package/dist/esm/index.d.mts +1 -1
  31. package/dist/esm/index.mjs +6 -7
  32. package/dist/esm/index.mjs.map +1 -1
  33. package/dist/esm/{postgreSqlCrud.service-JGJELA6R.mjs → postgreSqlCrud.service-AD2CHR2Z.mjs} +13 -22
  34. package/dist/esm/postgreSqlCrud.service-AD2CHR2Z.mjs.map +1 -0
  35. package/dist/types/index.d.ts +1 -1
  36. package/package.json +8 -8
  37. package/dist/esm/chunk-6MOAJFFY.mjs.map +0 -1
  38. package/dist/esm/chunk-DHIGNHXS.mjs.map +0 -1
  39. package/dist/esm/dynamoDbCrud.service-J7ZOB5QW.mjs.map +0 -1
  40. package/dist/esm/postgreSqlCrud.service-JGJELA6R.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { getTableName, findIdColumnName, getPrimaryKeyColumns, PersistenceErrorWrapper } from './chunk-DHIGNHXS.mjs';
2
- import { __privateAdd, __spreadProps, __spreadValues, FILTER_OPERATOR_MAP, DYNAMODB_OPERATORS, __privateMethod, DYNAMO_DB_UPDATE_ACTIONS } from './chunk-6MOAJFFY.mjs';
1
+ import { getTableName, findIdColumnName, getPrimaryKeyColumns, PersistenceErrorWrapper } from './chunk-2H6RO6ZL.mjs';
2
+ import { __privateAdd, __spreadProps, __spreadValues, FILTER_OPERATOR_MAP, DYNAMODB_OPERATORS, __privateMethod, DYNAMO_DB_UPDATE_ACTIONS } from './chunk-2OYWEFNZ.mjs';
3
3
  import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
4
4
  import { DynamoDBDocumentClient, GetCommand, QueryCommand, ScanCommand, PutCommand, UpdateCommand, DeleteCommand, BatchWriteCommand } from '@aws-sdk/lib-dynamodb';
5
5
 
@@ -40,8 +40,7 @@ var DynamoDbClientService = class {
40
40
  TableName: this.tableName
41
41
  }, options);
42
42
  const result = await this.dynamoDBClient.send(new QueryCommand(params));
43
- if (result.$metadata)
44
- delete result.$metadata;
43
+ if (result.$metadata) delete result.$metadata;
45
44
  return result;
46
45
  }
47
46
  /**
@@ -54,8 +53,7 @@ var DynamoDbClientService = class {
54
53
  });
55
54
  const command = new ScanCommand(params);
56
55
  const response = await this.dynamoDBClient.send(command);
57
- if (response.$metadata)
58
- delete response.$metadata;
56
+ if (response.$metadata) delete response.$metadata;
59
57
  return response;
60
58
  }
61
59
  /**
@@ -122,8 +120,7 @@ var DynamoDbClientService = class {
122
120
  return deleteRequestKeys;
123
121
  }
124
122
  async batchRemove(filterGroups) {
125
- if (!(filterGroups == null ? void 0 : filterGroups.length))
126
- return;
123
+ if (!(filterGroups == null ? void 0 : filterGroups.length)) return;
127
124
  const deleteRequests = filterGroups.map((filterGroup) => ({
128
125
  DeleteRequest: {
129
126
  Key: this.buildDeleteRequestKeys(filterGroup)
@@ -314,8 +311,7 @@ var QueryBuilderConditionService = class {
314
311
  const valueExpressions = value.map((val, index) => {
315
312
  let valueExpression = `:${this.tempKey}${index + 1}1`;
316
313
  for (const [i] of Object.entries(this.attributeValues)) {
317
- if (i === valueExpression)
318
- valueExpression += "1";
314
+ if (i === valueExpression) valueExpression += "1";
319
315
  }
320
316
  this.attributeValues[valueExpression] = val;
321
317
  return valueExpression;
@@ -328,8 +324,7 @@ var QueryBuilderConditionService = class {
328
324
  let valueExpression = `:${this.tempKey}1`;
329
325
  if (valueExpression in this.attributeValues) {
330
326
  for (const [index] of Object.entries(this.attributeValues)) {
331
- if (index === valueExpression)
332
- valueExpression += "1";
327
+ if (index === valueExpression) valueExpression += "1";
333
328
  }
334
329
  }
335
330
  if (!omitAttributeValues)
@@ -350,8 +345,7 @@ var QueryBuilderConditionService = class {
350
345
  if (filter == null ? void 0 : filter.logicOperator) {
351
346
  if ((_a2 = filter == null ? void 0 : filter.config) == null ? void 0 : _a2.openExpression) {
352
347
  filterExpression = filterExpression.replace(/\s+(AND|OR)\s*$/, ` ${filter.config.parentKey} (`);
353
- if (filterExpression === "")
354
- filterExpression += "(";
348
+ if (filterExpression === "") filterExpression += "(";
355
349
  filterExpression += `${filter.expression} ${filter.logicOperator} `;
356
350
  } else if ((_b = filter == null ? void 0 : filter.config) == null ? void 0 : _b.closeExpression) {
357
351
  filterExpression += `${filter.expression}) ${filter.config.parentKey} `;
@@ -394,13 +388,11 @@ var QueryBuilderService = class {
394
388
  return this;
395
389
  }
396
390
  ascending() {
397
- if (!this.useScan)
398
- this.command.ScanIndexForward = true;
391
+ if (!this.useScan) this.command.ScanIndexForward = true;
399
392
  return this;
400
393
  }
401
394
  descending() {
402
- if (!this.useScan)
403
- this.command.ScanIndexForward = false;
395
+ if (!this.useScan) this.command.ScanIndexForward = false;
404
396
  return this;
405
397
  }
406
398
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -409,8 +401,7 @@ var QueryBuilderService = class {
409
401
  return this;
410
402
  }
411
403
  projection(fields = []) {
412
- if (!fields.length)
413
- return this;
404
+ if (!fields.length) return this;
414
405
  const expression = [];
415
406
  fields.forEach((field) => {
416
407
  const key = this.condition.project(field);
@@ -445,15 +436,11 @@ var QueryBuilderService = class {
445
436
  };
446
437
 
447
438
  // src/services/cruds/dynamodb/dynamoDbCrud.service.ts
448
- var _prepareAndExecuteUpdateExpression, prepareAndExecuteUpdateExpression_fn, _buildUpdateExpressionQuery, buildUpdateExpressionQuery_fn, _getKeyObjectForUpdateExpression, getKeyObjectForUpdateExpression_fn, _getUpdateExpressionOptions, getUpdateExpressionOptions_fn, _extractUpdateExpressionAttributesAndNames, extractUpdateExpressionAttributesAndNames_fn;
439
+ var _DynamoDbCrudService_instances, prepareAndExecuteUpdateExpression_fn, buildUpdateExpressionQuery_fn, getKeyObjectForUpdateExpression_fn, getUpdateExpressionOptions_fn, extractUpdateExpressionAttributesAndNames_fn;
449
440
  var DynamoDbCrudService = class {
450
441
  constructor(tableSchema) {
451
442
  this.tableSchema = tableSchema;
452
- __privateAdd(this, _prepareAndExecuteUpdateExpression);
453
- __privateAdd(this, _buildUpdateExpressionQuery);
454
- __privateAdd(this, _getKeyObjectForUpdateExpression);
455
- __privateAdd(this, _getUpdateExpressionOptions);
456
- __privateAdd(this, _extractUpdateExpressionAttributesAndNames);
443
+ __privateAdd(this, _DynamoDbCrudService_instances);
457
444
  this.dynamoDbClientService = new DynamoDbClientService(this.tableName);
458
445
  }
459
446
  get tableName() {
@@ -490,8 +477,7 @@ var DynamoDbCrudService = class {
490
477
  this.applyPagination(query, options.pagination);
491
478
  if (options.consistentRead)
492
479
  query.consistentRead(options.consistentRead);
493
- if (options.fields)
494
- query.projection(options.fields);
480
+ if (options.fields) query.projection(options.fields);
495
481
  this.applyFilters(query, options);
496
482
  if (options.aggregateFunction === "COUNT" /* COUNT */)
497
483
  query.count();
@@ -502,8 +488,7 @@ var DynamoDbCrudService = class {
502
488
  ).then((res) => {
503
489
  var _a2, _b2;
504
490
  const pagination = {};
505
- if (res.lastEvaluatedKey)
506
- pagination.from = res.lastEvaluatedKey;
491
+ if (res.lastEvaluatedKey) pagination.from = res.lastEvaluatedKey;
507
492
  if ((_a2 = options.pagination) == null ? void 0 : _a2.limit)
508
493
  pagination.limit = (_b2 = options.pagination) == null ? void 0 : _b2.limit;
509
494
  return {
@@ -549,8 +534,7 @@ var DynamoDbCrudService = class {
549
534
  return result;
550
535
  }
551
536
  applyPagination(query, pagination) {
552
- if (pagination == null ? void 0 : pagination.limit)
553
- query.limit(pagination.limit);
537
+ if (pagination == null ? void 0 : pagination.limit) query.limit(pagination.limit);
554
538
  if (pagination == null ? void 0 : pagination.from)
555
539
  query.startKey(this.decryptPaginationKey(pagination.from));
556
540
  }
@@ -580,8 +564,7 @@ var DynamoDbCrudService = class {
580
564
  buildFindItemQuery(options) {
581
565
  var _a;
582
566
  const query = new QueryBuilderService();
583
- if ((_a = options.index) == null ? void 0 : _a.indexName)
584
- query.usingIndex(options.index.indexName);
567
+ if ((_a = options.index) == null ? void 0 : _a.indexName) query.usingIndex(options.index.indexName);
585
568
  this.applyFilters(query, options);
586
569
  query.projection(options.fields);
587
570
  query.limit(1);
@@ -591,10 +574,8 @@ var DynamoDbCrudService = class {
591
574
  const query = this.buildFindItemQuery(options);
592
575
  return this.dynamoDbClientService.query(query.get()).then((result) => {
593
576
  var _a;
594
- if ((_a = result.Items) == null ? void 0 : _a.length)
595
- return result.Items[0];
596
- if (options.throwErrorIfNull)
597
- throw new Error("NOT_FOUND");
577
+ if ((_a = result.Items) == null ? void 0 : _a.length) return result.Items[0];
578
+ if (options.throwErrorIfNull) throw new Error("NOT_FOUND");
598
579
  return null;
599
580
  });
600
581
  }
@@ -627,8 +608,7 @@ var DynamoDbCrudService = class {
627
608
  });
628
609
  }
629
610
  applyCompoundFilters(query, options) {
630
- if (!options.filters)
631
- return;
611
+ if (!options.filters) return;
632
612
  this.buildFilterExpression(query, options);
633
613
  }
634
614
  buildFilterExpression(query, options, parentKey) {
@@ -672,8 +652,7 @@ var DynamoDbCrudService = class {
672
652
  }
673
653
  applySorting(query, sorting, sortIndex) {
674
654
  if (sorting == null ? void 0 : sorting.length) {
675
- if (sortIndex)
676
- query.usingIndex(sortIndex);
655
+ if (sortIndex) query.usingIndex(sortIndex);
677
656
  if (sorting[0].direction === "DESC") {
678
657
  query.descending();
679
658
  } else {
@@ -716,7 +695,7 @@ var DynamoDbCrudService = class {
716
695
  }
717
696
  async updateExpressions(filters, actions, options) {
718
697
  try {
719
- return await __privateMethod(this, _prepareAndExecuteUpdateExpression, prepareAndExecuteUpdateExpression_fn).call(this, filters, actions, options);
698
+ return await __privateMethod(this, _DynamoDbCrudService_instances, prepareAndExecuteUpdateExpression_fn).call(this, filters, actions, options);
720
699
  } catch (error) {
721
700
  PersistenceErrorWrapper(error);
722
701
  }
@@ -726,19 +705,19 @@ var DynamoDbCrudService = class {
726
705
  throw new Error("Method not implemented.");
727
706
  }
728
707
  };
729
- _prepareAndExecuteUpdateExpression = new WeakSet();
708
+ _DynamoDbCrudService_instances = new WeakSet();
730
709
  prepareAndExecuteUpdateExpression_fn = async function(filters, actions, options) {
731
- const queryObject = __privateMethod(this, _buildUpdateExpressionQuery, buildUpdateExpressionQuery_fn).call(this, { filters }).get();
710
+ const queryObject = __privateMethod(this, _DynamoDbCrudService_instances, buildUpdateExpressionQuery_fn).call(this, { filters }).get();
732
711
  const primaryKeys = this.defaultPrimaryKeys;
733
- const keyObject = __privateMethod(this, _getKeyObjectForUpdateExpression, getKeyObjectForUpdateExpression_fn).call(this, queryObject, primaryKeys);
712
+ const keyObject = __privateMethod(this, _DynamoDbCrudService_instances, getKeyObjectForUpdateExpression_fn).call(this, queryObject, primaryKeys);
734
713
  const updateExpressions = [];
735
714
  Object.keys(actions).forEach((action) => {
736
- const actionUpdateExpression = __privateMethod(this, _extractUpdateExpressionAttributesAndNames, extractUpdateExpressionAttributesAndNames_fn).call(this, actions, action);
715
+ const actionUpdateExpression = __privateMethod(this, _DynamoDbCrudService_instances, extractUpdateExpressionAttributesAndNames_fn).call(this, actions, action);
737
716
  updateExpressions.push(actionUpdateExpression);
738
717
  });
739
718
  const dbParams = __spreadValues({
740
719
  UpdateExpression: updateExpressions.join(" ")
741
- }, __privateMethod(this, _getUpdateExpressionOptions, getUpdateExpressionOptions_fn).call(this, options));
720
+ }, __privateMethod(this, _DynamoDbCrudService_instances, getUpdateExpressionOptions_fn).call(this, options));
742
721
  const { ExpressionAttributeValues, ExpressionAttributeNames } = queryObject;
743
722
  if (Object.keys(ExpressionAttributeValues).length > 0) {
744
723
  dbParams["ExpressionAttributeValues"] = __spreadValues(__spreadValues({}, ExpressionAttributeValues), dbParams.ExpressionAttributeValues);
@@ -753,16 +732,13 @@ prepareAndExecuteUpdateExpression_fn = async function(filters, actions, options)
753
732
  dbParams
754
733
  );
755
734
  };
756
- _buildUpdateExpressionQuery = new WeakSet();
757
735
  buildUpdateExpressionQuery_fn = function(options) {
758
736
  var _a;
759
737
  const query = new QueryBuilderService();
760
- if ((_a = options.index) == null ? void 0 : _a.indexName)
761
- query.usingIndex(options.index.indexName);
738
+ if ((_a = options.index) == null ? void 0 : _a.indexName) query.usingIndex(options.index.indexName);
762
739
  this.applyFilters(query, options);
763
740
  return query;
764
741
  };
765
- _getKeyObjectForUpdateExpression = new WeakSet();
766
742
  getKeyObjectForUpdateExpression_fn = function(queryObject, primaryKeys) {
767
743
  const keyObject = {};
768
744
  Object.keys(queryObject.ExpressionAttributeNames).forEach(
@@ -778,7 +754,6 @@ getKeyObjectForUpdateExpression_fn = function(queryObject, primaryKeys) {
778
754
  );
779
755
  return keyObject;
780
756
  };
781
- _getUpdateExpressionOptions = new WeakSet();
782
757
  getUpdateExpressionOptions_fn = function(options) {
783
758
  const updateExprOptions = {
784
759
  ReturnValues: options.returnValues
@@ -789,7 +764,6 @@ getUpdateExpressionOptions_fn = function(options) {
789
764
  updateExprOptions.ExpressionAttributeValues = options.expressionAttributeValues;
790
765
  return updateExprOptions;
791
766
  };
792
- _extractUpdateExpressionAttributesAndNames = new WeakSet();
793
767
  extractUpdateExpressionAttributesAndNames_fn = function(actions, actionType) {
794
768
  const actionUpdateExpressions = [];
795
769
  actions[actionType].forEach((action) => {
@@ -818,5 +792,5 @@ extractUpdateExpressionAttributesAndNames_fn = function(actions, actionType) {
818
792
  };
819
793
 
820
794
  export { DynamoDbCrudService };
821
- //# sourceMappingURL=out.js.map
822
- //# sourceMappingURL=dynamoDbCrud.service-J7ZOB5QW.mjs.map
795
+ //# sourceMappingURL=dynamoDbCrud.service-NRSGRPDQ.mjs.map
796
+ //# sourceMappingURL=dynamoDbCrud.service-NRSGRPDQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/cruds/dynamodb/dynamoDbClient.service.ts","../../src/services/cruds/dynamodb/queryBuilderCondition.service.ts","../../src/services/cruds/dynamodb/queryBuilder.service.ts","../../src/services/cruds/dynamodb/dynamoDbCrud.service.ts"],"names":["_a","_b"],"mappings":"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","file":"dynamoDbCrud.service-NRSGRPDQ.mjs","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport {\n DynamoDBDocumentClient,\n GetCommand,\n QueryCommand,\n PutCommand,\n UpdateCommand,\n DeleteCommand,\n GetCommandInput,\n QueryCommandInput,\n PutCommandInput,\n UpdateCommandInput,\n DeleteCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n ScanCommand,\n BatchWriteCommandInput,\n BatchWriteCommand,\n} from '@aws-sdk/lib-dynamodb';\nimport { IFilter } from '../../../interfaces';\n\nconst AWS_REGION = process.env.AWS_DEFAULT_REGION;\n\n/**\n * Ref:\n * - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html\n * - https://www.fernandomc.com/posts/eight-examples-of-fetching-data-from-dynamodb-with-node/\n */\nexport default class DynamoDbClientService {\n private tableName: string;\n protected dynamoDBClient: DynamoDBDocumentClient;\n\n constructor(tableName: string) {\n if (!tableName)\n throw new Error(\n 'The \"tableName\" is required to use a DynamoDbClientService.',\n );\n this.tableName = tableName;\n const client = new DynamoDBClient({ region: AWS_REGION });\n this.dynamoDBClient = DynamoDBDocumentClient.from(client, {\n marshallOptions: {\n removeUndefinedValues: true,\n },\n });\n }\n\n /**\n * Get an item by key\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {GetCommandInput} options\n */\n public async getByKey(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<GetCommandInput> = {},\n ) {\n const params: GetCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n const result = await this.dynamoDBClient.send(new GetCommand(params));\n return result.Item;\n }\n\n /**\n * Query a table\n * @param {QueryCommandInput} options\n */\n public async query(\n options: Omit<QueryCommandInput, 'TableName'> = {},\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: QueryCommandInput = {\n TableName: this.tableName,\n ...options,\n };\n const result: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(new QueryCommand(params));\n\n if (result.$metadata) delete result.$metadata;\n return result;\n }\n\n /**\n * Scan a table\n * @param {ScanInput} options\n */\n public async scan(\n input: ScanCommandInput,\n ): Promise<Omit<QueryCommandOutput, '$metadata'>> {\n const params: ScanCommandInput = {\n ...input,\n TableName: this.tableName,\n };\n\n const command = new ScanCommand(params);\n const response: Partial<QueryCommandOutput> =\n await this.dynamoDBClient.send(command);\n if (response.$metadata) delete response.$metadata;\n return response;\n }\n\n /**\n * Create/Replace a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} input\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async put(input: Record<string, any>) {\n const params: PutCommandInput = {\n TableName: this.tableName,\n Item: input,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new PutCommand(params));\n }\n\n /**\n * Update a item object\n * To take care:\n * - https://stackoverflow.com/questions/43667229/difference-between-dynamodb-putitem-vs-updateitem\n * @param {Object} keyObject - Ex: { jobId: 1234 }\n * @param {UpdateCommandInput} updateObject\n */\n public async update(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n ...options,\n };\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n\n /**\n * Delete/Remove an item object\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public async remove(keyObject: Record<string, any>) {\n const params: DeleteCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ReturnValues: 'NONE',\n };\n return await this.dynamoDBClient.send(new DeleteCommand(params));\n }\n\n public batchWrittenPut(data: Record<string, any>) {\n const putRequests = data.map((item: any) => ({\n PutRequest: {\n Item: item,\n },\n }));\n const params = {\n RequestItems: {\n [this.tableName]: putRequests,\n },\n } as BatchWriteCommandInput;\n const insertCommand = new BatchWriteCommand(params);\n return this.dynamoDBClient.send(insertCommand);\n }\n\n private buildDeleteRequestKeys(filters: IFilter[]) {\n const deleteRequestKeys: any = {};\n filters.forEach((filter) => {\n deleteRequestKeys[filter.attribute] = filter.value;\n });\n return deleteRequestKeys;\n }\n\n async batchRemove(filterGroups: IFilter[][]): Promise<void> {\n if (!filterGroups?.length) return;\n\n const deleteRequests = filterGroups.map((filterGroup: IFilter[]) => ({\n DeleteRequest: {\n Key: this.buildDeleteRequestKeys(filterGroup),\n },\n }));\n\n const params = {\n RequestItems: {\n [this.tableName]: deleteRequests,\n },\n } as BatchWriteCommandInput;\n\n await this.dynamoDBClient.send(new BatchWriteCommand(params));\n }\n\n public async updateExpressions(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n keyObject: Record<string, any>,\n options: Partial<UpdateCommandInput> = {},\n ) {\n const params: UpdateCommandInput = {\n TableName: this.tableName,\n Key: keyObject,\n ...options,\n };\n\n return await this.dynamoDBClient.send(new UpdateCommand(params));\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { QueryCommandInput } from '@aws-sdk/client-dynamodb';\nimport { UpdateCommandInput } from '@aws-sdk/lib-dynamodb';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\n\nexport default class QueryBuilderConditionService\n implements IQueryBuilderCondition\n{\n private query;\n private command: Pick<\n QueryCommandInput,\n | 'FilterExpression'\n | 'KeyConditionExpression'\n | 'ExpressionAttributeNames'\n | 'ExpressionAttributeValues'\n > &\n Pick<UpdateCommandInput, 'UpdateExpression'>;\n private queryFrom: METHOD_TO_QUERY | undefined;\n private tempKey: string = '';\n private tempLogicOperator: string | null = null;\n private config: any;\n private wheres: string[] = [];\n private filters: string[] = [];\n private updates: string[] = [];\n private attributeNames: Record<string, string> = {};\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private attributeValues: Record<string, any> = {};\n\n constructor(query: IQueryBuilder) {\n this.query = query;\n this.command = {};\n }\n\n public get() {\n this.build();\n return this.command;\n }\n\n public setKey(key: string) {\n this.tempKey = key;\n return this;\n }\n setTmpLogicOp(logicOp: string) {\n this.tempLogicOperator = logicOp;\n return this;\n }\n\n setConfig(config: any) {\n this.config = config;\n return this;\n }\n\n public from(methodName: METHOD_TO_QUERY) {\n this.queryFrom = methodName;\n return this;\n }\n\n eq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} = ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notEq(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <> ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n contains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n notContains(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `NOT contains(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n in(keyValue: any) {\n const keyValues = Array.isArray(keyValue) ? keyValue : [keyValue];\n const { key, value } = this.generateKeyValue(keyValues);\n let expression: any = `${key} IN (${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n beginsWith(keyValue: string) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `begins_with(${key}, ${value})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n project(keyValue: string): string {\n const key = `#${keyValue}`;\n this.attributeNames[key] = keyValue;\n return key;\n }\n\n gt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} > ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n gte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} >= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lte(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} <= ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n lt(keyValue: any) {\n const { key, value } = this.generateKeyValue(keyValue);\n let expression: any = `${key} < ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n attribute_not_exists(keyValue: string) {\n const { key } = this.generateKeyValue(keyValue, null, true);\n let expression: any = `attribute_not_exists(${key})`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n between(keyValues: any) {\n const isValidValues =\n Array.isArray(keyValues) && keyValues?.length === 2;\n if (!isValidValues)\n throw new Error(\n 'The value for between filter operator should be an Array with 2 values.',\n );\n\n const { key, value } = this.generateKeyValue(keyValues, ' AND');\n let expression: any = `${key} between ${value}`;\n if (this.tempLogicOperator)\n expression = { expression, logicOperator: this.tempLogicOperator, config: this.config };\n this.setExpression(expression);\n return this.query;\n }\n\n private setExpression(expression: string): void {\n switch (this.queryFrom) {\n case METHOD_TO_QUERY.filter:\n this.filters.push(expression);\n break;\n case METHOD_TO_QUERY.update:\n this.updates.push(expression);\n break;\n default:\n this.wheres.push(expression);\n break;\n }\n }\n\n private generateKeyValue(\n value: string[] | string,\n separatorCharacter: string | null = ',',\n omitAttributeValues: boolean = false,\n ): {\n key: string;\n value: string;\n } {\n const keyExpression = `#${this.tempKey}1`;\n\n this.attributeNames[keyExpression] = this.tempKey;\n\n if (Array.isArray(value)) {\n const valueExpressions = value.map((val, index) => {\n let valueExpression = `:${this.tempKey}${index + 1}1`;\n for (const [i] of Object.entries(this.attributeValues)) {\n if (i === valueExpression) valueExpression += '1';\n }\n this.attributeValues[valueExpression] = val;\n return valueExpression;\n });\n return {\n key: keyExpression,\n value: valueExpressions.join(`${separatorCharacter} `),\n };\n } else {\n let valueExpression = `:${this.tempKey}1`;\n if (valueExpression in this.attributeValues) {\n for (const [index] of Object.entries(this.attributeValues)) {\n if (index === valueExpression) valueExpression += '1';\n }\n }\n if (!omitAttributeValues)\n this.attributeValues[valueExpression] = value;\n return { key: keyExpression, value: valueExpression };\n }\n }\n\n private build(): void {\n if (this.wheres.length > 0) {\n const keyConditionExpression = this.wheres.join(' AND ');\n this.command['KeyConditionExpression'] = keyConditionExpression;\n }\n if (this.filters.length > 0) {\n let filterExpression = '';\n\n this.filters?.forEach((filter: any, index) => {\n if (filter?.logicOperator) {\n if (filter?.config?.openExpression) {\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, ` ${filter.config.parentKey} (`);\n if (filterExpression === '') filterExpression += '('\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n } else if (filter?.config?.closeExpression) {\n filterExpression += `${filter.expression}) ${filter.config.parentKey} `; \n } else {\n filterExpression += `${filter.expression} ${filter.logicOperator} `;\n }\n }\n });\n filterExpression = filterExpression.replace(/\\s+(AND|OR)\\s*$/, '');\n this.command['FilterExpression'] = filterExpression;\n }\n if (this.updates.length > 0) {\n const filterExpression = this.updates.join(', ');\n this.command['UpdateExpression'] = `SET ${filterExpression}`;\n }\n if (Object.values(this.attributeNames).length > 0)\n this.command['ExpressionAttributeNames'] = this.attributeNames;\n\n if (Object.values(this.attributeValues).length > 0)\n this.command['ExpressionAttributeValues'] = this.attributeValues;\n }\n}\n","import { QueryCommandInput, ScanCommandInput } from '@aws-sdk/client-dynamodb';\nimport { IQueryBuilderCondition } from '../../../interfaces/queryBuilderCondition.interface';\nimport QueryBuilderConditionService from './queryBuilderCondition.service';\nimport { METHOD_TO_QUERY } from '../../../helpers/queryHelpers';\nimport { IQueryBuilder } from '../../../interfaces/queryBuilder.interface';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\n\nexport default class QueryBuilderService implements IQueryBuilder {\n private command: Omit<QueryCommandInput & ScanCommandInput, 'TableName'>;\n private condition: IQueryBuilderCondition;\n\n constructor(private useScan = false) {\n this.command = {};\n\n this.condition = new QueryBuilderConditionService(this);\n }\n\n get() {\n const condition = this.condition.get();\n return { ...this.command, ...condition };\n }\n\n limit(num: number): IQueryBuilder {\n this.command.Limit = num;\n return this;\n }\n\n usingIndex(indexName: string): IQueryBuilder {\n this.command.IndexName = indexName;\n return this;\n }\n\n ascending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = true;\n return this;\n }\n\n descending(): IQueryBuilder {\n if (!this.useScan) this.command.ScanIndexForward = false;\n return this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n startKey(lastEvaluatedKey: Record<string, any>): IQueryBuilder {\n this.command.ExclusiveStartKey = lastEvaluatedKey;\n return this;\n }\n\n projection(fields: string[] = []) {\n if (!fields.length) return this;\n\n const expression: string[] = [];\n fields.forEach((field) => {\n const key = this.condition.project(field);\n expression.push(key);\n });\n this.command.ProjectionExpression = expression.join(',');\n return this;\n }\n\n where(keyName: string): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(null)\n .from(METHOD_TO_QUERY.where);\n return this.condition;\n }\n\n filter(\n keyName: string,\n logicOperator: string = 'AND',\n config?: any\n ): IQueryBuilderCondition {\n this.condition\n .setKey(keyName)\n .setTmpLogicOp(logicOperator)\n .setConfig(config)\n .from(METHOD_TO_QUERY.filter);\n return this.condition;\n }\n\n update(attribute: Record<string, string>): IQueryBuilder {\n for (const [key, value] of Object.entries(attribute)) {\n this.condition.setKey(key).from(METHOD_TO_QUERY.update);\n this.condition.eq(value);\n }\n return this;\n }\n\n consistentRead(consistentRead: boolean): IQueryBuilder {\n this.command.ConsistentRead = consistentRead;\n return this;\n }\n\n count(): IQueryBuilder {\n this.command.Select = AGGREGATE_FUNCTIONS.COUNT;\n return this;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport DynamoDbClientService from './dynamoDbClient.service';\nimport QueryBuilderService from './queryBuilder.service';\n\nimport {\n AGGREGATE_FUNCTIONS,\n DYNAMODB_OPERATORS,\n FILTER_OPERATOR_MAP,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindPagination,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas/crudSchema';\nimport {\n findIdColumnName,\n getPrimaryKeyColumns,\n getTableName,\n} from '../../../helpers/tableHelper';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nimport {\n QueryCommandInput,\n QueryCommandOutput,\n ScanCommandInput,\n} from '@aws-sdk/lib-dynamodb';\n\nexport class DynamoDbCrudService<T> implements ICrudService<T> {\n private dynamoDbClientService: DynamoDbClientService;\n\n constructor(private tableSchema: typeof CrudSchema) {\n this.dynamoDbClientService = new DynamoDbClientService(this.tableName);\n }\n\n private get tableName(): string {\n return getTableName(this.tableSchema.table);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n private get defaultPrimaryKeys(): string[] {\n return getPrimaryKeyColumns(this.tableSchema.columns);\n }\n\n async create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const response =\n await this.dynamoDbClientService.batchWrittenPut(data);\n return {\n unprocessedItems: response.UnprocessedItems ?? [],\n };\n } else {\n await this.dynamoDbClientService.put(data as Record<string, any>);\n return data as T;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars\n runQuery(queryCommand: any): Promise<any> {\n throw new Error('Method not implemented.');\n }\n\n find(options: IFindOptions = {}): Promise<any> {\n const query = new QueryBuilderService(options.useScan);\n\n if (options.index?.indexName)\n query.usingIndex(options.index?.indexName);\n\n this.applySorting(query, options.sorting, options.index?.indexName);\n this.applyPagination(query, options.pagination);\n\n if (options.consistentRead)\n query.consistentRead(options.consistentRead);\n\n if (options.fields) query.projection(options.fields);\n\n this.applyFilters(query, options);\n\n if (options.aggregateFunction === AGGREGATE_FUNCTIONS.COUNT)\n query.count();\n\n return this.fetchResults(\n query.get(),\n options.pagination?.limit,\n options.useScan,\n ).then((res: any) => {\n const pagination: IFindPagination = {};\n if (res.lastEvaluatedKey) pagination.from = res.lastEvaluatedKey;\n if (options.pagination?.limit)\n pagination.limit = options.pagination?.limit;\n return {\n items: res.items,\n pagination,\n count: res.count,\n };\n });\n }\n\n async fetchResults(\n command: ScanCommandInput | QueryCommandInput,\n limit: number = 100,\n useScan: boolean = false,\n ): Promise<unknown> {\n let results: unknown[] = [];\n let lastEvaluatedKey: Record<string, unknown> = {};\n let rowsCount = 0;\n\n do {\n const result = await this.fetchBatch(\n command,\n useScan,\n lastEvaluatedKey,\n );\n const rows = result.Items ?? [];\n results = results.concat(rows);\n lastEvaluatedKey = result.LastEvaluatedKey ?? {};\n rowsCount += result.Count || rows.length;\n } while (rowsCount < limit && this.isNotEmptyObject(lastEvaluatedKey));\n\n const encryptedLastEvaluatedKey = this.isNotEmptyObject(\n lastEvaluatedKey,\n )\n ? this.encryptPaginationKey(lastEvaluatedKey)\n : null;\n return {\n items: results,\n lastEvaluatedKey: encryptedLastEvaluatedKey,\n count: rowsCount,\n };\n }\n\n async fetchBatch(\n command: ScanCommandInput | QueryCommandInput,\n useScan: boolean,\n lastEvaluatedKey: Record<string, unknown>,\n ): Promise<Partial<QueryCommandOutput>> {\n if (this.isNotEmptyObject(lastEvaluatedKey))\n command.ExclusiveStartKey = lastEvaluatedKey;\n\n const result = await (useScan\n ? this.dynamoDbClientService.scan(command)\n : this.dynamoDbClientService.query(command));\n\n if (command.Select !== AGGREGATE_FUNCTIONS.COUNT) {\n command.Limit = (command.Limit ?? 0) - (result.Items?.length ?? 0);\n }\n\n return result;\n }\n\n applyPagination(\n query: QueryBuilderService,\n pagination: IFindPagination | undefined,\n ) {\n if (pagination?.limit) query.limit(pagination.limit);\n if (pagination?.from)\n query.startKey(this.decryptPaginationKey(pagination.from));\n }\n\n async findAll(\n options: IFindOptions = {},\n allResults: any[] = [],\n rowsCount: number = 0,\n ): Promise<any> {\n const { items, pagination, count } = await this.find(options);\n allResults.push(...items);\n rowsCount += count;\n\n if (pagination?.from)\n await this.findAll({ ...options, pagination }, allResults);\n\n return {\n items: allResults,\n pagination: null,\n count: rowsCount,\n };\n }\n\n async findCount(options: IFindOptions = {}): Promise<number> {\n const findOptions = {\n ...options,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n };\n if (options.pagination?.from) {\n return this.find(findOptions).then((res) => res.count);\n } else {\n return this.findAll(findOptions).then((res) => res.count);\n }\n }\n\n buildFindItemQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n\n this.applyFilters(query, options);\n query.projection(options.fields);\n query.limit(1);\n\n return query;\n }\n\n findItem(options: IFindOptions): Promise<T | null> {\n const query = this.buildFindItemQuery(options);\n return this.dynamoDbClientService.query(query.get()).then((result) => {\n if (result.Items?.length) return result.Items[0] as T;\n if (options.throwErrorIfNull) throw new Error('NOT_FOUND');\n return null;\n });\n }\n\n applyWhereFilter(query: QueryBuilderService, filter: IFilter) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.where(filter.attribute) as any)[operator](filter.value);\n }\n\n applyFilterFilter(\n query: QueryBuilderService,\n filter: IFilter,\n logicOperator: string = 'AND',\n config?: any,\n ) {\n const operator =\n FILTER_OPERATOR_MAP[\n filter.operator?.toUpperCase() ?? DYNAMODB_OPERATORS.EQUAL\n ];\n (query.filter(filter.attribute, logicOperator, config) as any)[\n operator\n ](filter.value);\n }\n\n applyFilters(query: QueryBuilderService, options: IFindOptions) {\n if (Array.isArray(options.filters)) {\n this.applySimpleFilters(query, options);\n } else {\n this.applyCompoundFilters(query, options);\n }\n }\n\n applySimpleFilters(query: QueryBuilderService, options: IFindOptions) {\n const queryIndexColumns = options.index?.columns ?? [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties: string[] = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n const filters = options.filters as IFilter[];\n filters.forEach((filter: IFilter) => {\n const isWhereProperty = whereProperties.includes(filter.attribute);\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, filter)\n : this.applyFilterFilter(query, filter);\n });\n }\n\n applyCompoundFilters(query: QueryBuilderService, options: IFindOptions) {\n if (!options.filters) return;\n this.buildFilterExpression(query, options);\n }\n\n buildFilterExpression(\n query: QueryBuilderService,\n options: IFindOptions,\n parentKey?: string,\n ) {\n const compositeFilters = options.filters as ICompositeFilter;\n const queryIndexColumns = options.index?.columns || [];\n const defaultWhereProperties = this.defaultPrimaryKeys;\n\n const whereProperties = queryIndexColumns?.length\n ? queryIndexColumns\n : defaultWhereProperties;\n\n for (const [key, value] of Object.entries(compositeFilters)) {\n value.forEach(\n (filter: IFilter | ICompositeFilter, index: number) => {\n const isCompositeFilter = 'OR' in filter || 'AND' in filter;\n if (isCompositeFilter) {\n const newOptions = {\n ...options,\n filters: filter,\n };\n this.buildFilterExpression(query, newOptions, key);\n } else {\n const simpleFilter = filter as IFilter;\n const isWhereProperty = whereProperties.includes(\n simpleFilter.attribute,\n );\n let config;\n if (parentKey) {\n config = {\n parentKey,\n openExpression: index === 0,\n closeExpression: index === value.length - 1,\n };\n }\n\n isWhereProperty && !options.useScan\n ? this.applyWhereFilter(query, simpleFilter)\n : this.applyFilterFilter(\n query,\n simpleFilter,\n key,\n config,\n );\n }\n },\n );\n }\n }\n\n applySorting(query: QueryBuilderService, sorting: any, sortIndex?: string) {\n if (sorting?.length) {\n if (sortIndex) query.usingIndex(sortIndex);\n if (sorting[0].direction === 'DESC') {\n query.descending();\n } else {\n query.ascending();\n }\n }\n }\n\n isNotEmptyObject(obj: unknown) {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n Object.keys(obj).length > 0\n );\n }\n\n encryptPaginationKey(key: Record<string, any>): string {\n const jsonKey = JSON.stringify(key);\n return Buffer.from(jsonKey).toString('base64');\n }\n\n decryptPaginationKey(encodedKey: string): Record<string, any> {\n const decodedKey = Buffer.from(encodedKey, 'base64').toString('utf-8');\n return JSON.parse(decodedKey);\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n { replace = false },\n ): Promise<any> {\n const savedRecord = await this.findItem({\n filters: filters as IFilter[],\n });\n\n if (replace) {\n //delete all attributes of savedRecord except those that as marked as primary columns in the schema\n }\n\n const newData: any = {\n ...savedRecord,\n ...data,\n };\n\n await this.dynamoDbClientService.put(newData);\n return newData;\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ) {\n if (options?.filterGroups) {\n await this.dynamoDbClientService.batchRemove(\n filters as IFilter[][],\n );\n } else {\n const key = (filters as IFilter[]).reduce((obj: any, item: any) => {\n const property = item.attribute;\n obj[property] = item.value;\n return obj;\n }, {});\n await this.dynamoDbClientService.remove(key);\n }\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n try {\n return await this.#prepareAndExecuteUpdateExpression(\n filters,\n actions,\n options,\n );\n } catch (error: any) {\n PersistenceErrorWrapper(error);\n }\n }\n\n async #prepareAndExecuteUpdateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ) {\n const queryObject = this.#buildUpdateExpressionQuery({ filters }).get();\n const primaryKeys = this.defaultPrimaryKeys;\n\n const keyObject: any = this.#getKeyObjectForUpdateExpression(\n queryObject,\n primaryKeys,\n );\n\n const updateExpressions: any = [];\n\n Object.keys(actions).forEach((action: string) => {\n const actionUpdateExpression =\n this.#extractUpdateExpressionAttributesAndNames(\n actions,\n action,\n );\n updateExpressions.push(actionUpdateExpression);\n });\n\n const dbParams = {\n UpdateExpression: updateExpressions.join(' '),\n ...this.#getUpdateExpressionOptions(options),\n };\n\n const { ExpressionAttributeValues, ExpressionAttributeNames } =\n queryObject;\n if (Object.keys(ExpressionAttributeValues).length > 0) {\n dbParams['ExpressionAttributeValues'] = {\n ...ExpressionAttributeValues,\n ...dbParams.ExpressionAttributeValues,\n };\n }\n\n if (Object.keys(ExpressionAttributeNames).length > 0) {\n dbParams['ExpressionAttributeNames'] = {\n ...ExpressionAttributeNames,\n ...dbParams.ExpressionAttributeNames,\n };\n }\n if (queryObject.FilterExpression)\n dbParams['ConditionExpression'] = queryObject.FilterExpression;\n\n return this.dynamoDbClientService.updateExpressions(\n keyObject,\n dbParams,\n );\n }\n\n #buildUpdateExpressionQuery(options: IFindOptions): QueryBuilderService {\n const query = new QueryBuilderService();\n\n if (options.index?.indexName) query.usingIndex(options.index.indexName);\n this.applyFilters(query, options);\n\n return query;\n }\n\n #getKeyObjectForUpdateExpression(queryObject: any, primaryKeys: any) {\n const keyObject: any = {};\n\n Object.keys(queryObject.ExpressionAttributeNames).forEach(\n (attribute) => {\n const sanitizedAttribute = attribute\n .replace('#', '')\n .replace('1', '');\n if (primaryKeys.includes(sanitizedAttribute)) {\n const valueName = `:${sanitizedAttribute}1`;\n keyObject[sanitizedAttribute] =\n queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeValues[valueName];\n delete queryObject.ExpressionAttributeNames[attribute];\n }\n },\n );\n\n return keyObject;\n }\n\n #getUpdateExpressionOptions(options: IUpdateExpressionsOptions) {\n const updateExprOptions: any = {\n ReturnValues: options.returnValues,\n };\n\n if (options.expressionAttributeNames)\n updateExprOptions.ExpressionAttributeNames =\n options.expressionAttributeNames;\n if (options.expressionAttributeValues)\n updateExprOptions.ExpressionAttributeValues =\n options.expressionAttributeValues;\n\n return updateExprOptions;\n }\n\n #extractUpdateExpressionAttributesAndNames(\n actions: any,\n actionType: string,\n ) {\n const actionUpdateExpressions: any = [];\n\n actions[actionType].forEach((action: any) => {\n switch (actionType) {\n case DYNAMO_DB_UPDATE_ACTIONS.DELETE:\n case DYNAMO_DB_UPDATE_ACTIONS.REMOVE:\n actionUpdateExpressions.push(`${action.path}`);\n break;\n\n case DYNAMO_DB_UPDATE_ACTIONS.ADD:\n case DYNAMO_DB_UPDATE_ACTIONS.SET:\n {\n let operator = '';\n if (actionType == DYNAMO_DB_UPDATE_ACTIONS.SET)\n operator = '=';\n actionUpdateExpressions.push(\n `${action.path} ${operator}${action.value}`,\n );\n }\n break;\n }\n });\n\n const actionUpdateExpression = `${actionType} ${actionUpdateExpressions.join(\n ', ',\n )}`;\n\n return actionUpdateExpression;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n runRawQuery(query: string, params: any[]): Promise<any> {\n throw new Error('Method not implemented.');\n }\n}\n"]}
@@ -178,4 +178,4 @@ declare function buildSort(column: string, direction?: string): ISorting;
178
178
 
179
179
  declare function getDbPool(poolConfig?: PoolConfig): Pool | undefined;
180
180
 
181
- export { AggregateFunction, CrudSchema, CrudService, FilterInput, ICrudService, IFilter, IFindOptions, IFindPagination, ISorting, SortDirection, buildFilter, buildQueryIndex, buildSort, getDbPool };
181
+ export { type AggregateFunction, CrudSchema, CrudService, type FilterInput, type ICrudService, type IFilter, type IFindOptions, type IFindPagination, type ISorting, type SortDirection, buildFilter, buildQueryIndex, buildSort, getDbPool };
@@ -1,4 +1,4 @@
1
- import { FILTER_LOGIC_OPERATORS, CONNECTION_CLOSING_MODES, isMultiPlatformMode, __spreadProps, __spreadValues, __objRest } from './chunk-6MOAJFFY.mjs';
1
+ import { FILTER_LOGIC_OPERATORS, CONNECTION_CLOSING_MODES, __spreadValues, __objRest, isMultiPlatformMode, __spreadProps } from './chunk-2OYWEFNZ.mjs';
2
2
  import { Pool } from 'pg';
3
3
 
4
4
  // src/helpers/crudHelpers.ts
@@ -30,10 +30,10 @@ var CrudFactory = class {
30
30
  const isMultiPlatformMode2 = ((_a = process.env.PLATFORM_TYPE) == null ? void 0 : _a.toLowerCase()) === "container";
31
31
  let DatabaseCrudService;
32
32
  if (isMultiPlatformMode2) {
33
- const module = await import('./postgreSqlCrud.service-JGJELA6R.mjs');
33
+ const module = await import('./postgreSqlCrud.service-AD2CHR2Z.mjs');
34
34
  DatabaseCrudService = module.PostgreSqlCrudService;
35
35
  } else {
36
- const module = await import('./dynamoDbCrud.service-J7ZOB5QW.mjs');
36
+ const module = await import('./dynamoDbCrud.service-NRSGRPDQ.mjs');
37
37
  DatabaseCrudService = module.DynamoDbCrudService;
38
38
  }
39
39
  return new DatabaseCrudService(crudSchema, pool);
@@ -96,7 +96,7 @@ var CrudService = class {
96
96
  );
97
97
  }
98
98
  findAll(options) {
99
- const _a = options, findAllOptions = __objRest(_a, ["pagination"]);
99
+ const _a = options, { pagination } = _a, findAllOptions = __objRest(_a, ["pagination"]);
100
100
  return this.getCrudServiceInstance().then(
101
101
  (crudService) => crudService.findAll(findAllOptions)
102
102
  );
@@ -143,8 +143,7 @@ Object.values(
143
143
  // src/types/connectionClosingMode.type.ts
144
144
  Object.values(CONNECTION_CLOSING_MODES);
145
145
  function getDbPool(poolConfig) {
146
- if (!isMultiPlatformMode())
147
- return void 0;
146
+ if (!isMultiPlatformMode()) return void 0;
148
147
  const pool = new Pool(__spreadProps(__spreadValues({}, poolConfig), {
149
148
  connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING
150
149
  }));
@@ -152,5 +151,5 @@ function getDbPool(poolConfig) {
152
151
  }
153
152
 
154
153
  export { CrudSchema, crud_service_default as CrudService, buildFilter, buildQueryIndex, buildSort, getDbPool };
155
- //# sourceMappingURL=out.js.map
154
+ //# sourceMappingURL=index.mjs.map
156
155
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/helpers/crudHelpers.ts","../../src/services/crudFactory.service.ts","../../src/services/crud.service.ts","../../src/schemas/crudSchema.ts","../../src/types/filterLogicOperator.type.ts","../../src/types/connectionClosingMode.type.ts","../../src/services/dbPool.service.ts"],"names":["isMultiPlatformMode"],"mappings":"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","sourcesContent":["import { ISorting } from '../interfaces';\nimport { SortDirection } from '../types';\nimport { SORT_DIRECTIONS } from '../utils/constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n) {\n return {\n attribute,\n operator,\n value,\n relativePath,\n };\n}\n\nexport function buildQueryIndex(indexName: string, columns: string[]) {\n return {\n indexName,\n columns,\n };\n}\n\nexport function buildSort(\n column: string,\n direction: string = SORT_DIRECTIONS.ASC,\n): ISorting {\n return {\n column,\n direction: direction as SortDirection,\n };\n}\n","import { Pool } from 'pg';\nimport { ICrudService } from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { DbPool } from '../types';\nexport class CrudFactory {\n static async databaseClientService<T>(\n crudSchema: typeof CrudSchema,\n pool?: Pool,\n ): Promise<ICrudService<T>> {\n const isMultiPlatformMode =\n process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n\n let DatabaseCrudService: new <T>(\n schema: typeof CrudSchema,\n poolClient?: DbPool,\n ) => ICrudService<T>;\n\n if (isMultiPlatformMode) {\n const module = await import(\n './cruds/postgresql/postgreSqlCrud.service'\n );\n DatabaseCrudService = module.PostgreSqlCrudService;\n } else {\n const module = await import(\n './cruds/dynamodb/dynamoDbCrud.service'\n );\n DatabaseCrudService = module.DynamoDbCrudService;\n }\n\n return new DatabaseCrudService(crudSchema, pool);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\nimport {\n buildQueryIndex,\n buildFilter,\n buildSort,\n} from '../helpers/crudHelpers';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n IFilter,\n IFindOptions,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { CrudFactory } from './crudFactory.service';\n\nclass CrudService<T> {\n private crudSchema: typeof CrudSchema;\n\n constructor(\n crudSchema: typeof CrudSchema,\n private pool?: Pool,\n ) {\n this.crudSchema = crudSchema;\n }\n\n private async getCrudServiceInstance() {\n const crudService = await CrudFactory.databaseClientService(\n this.crudSchema,\n this.pool,\n );\n return crudService;\n }\n\n private getDefaultValue(columnName: string): any {\n const column = this.crudSchema.columns[columnName];\n return column ? column.default : undefined;\n }\n\n private setDefaultValues(data: any) {\n const defaultValues: { [key: string]: any } = {};\n const columns = this.crudSchema.columns;\n\n for (const columnName in columns) {\n const missingColumnValue = !(columnName in data);\n const columnDefaultValue = this.getDefaultValue(columnName);\n if (missingColumnValue && columnDefaultValue) {\n defaultValues[columnName] = columnDefaultValue;\n }\n }\n\n return { ...defaultValues, ...data };\n }\n\n create(data: T | T[]): Promise<unknown | ICreateMultipleResponse> {\n const processedData = Array.isArray(data)\n ? data.map(this.setDefaultValues.bind(this))\n : this.setDefaultValues(data);\n\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.create(processedData),\n );\n }\n\n find(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.find(options),\n );\n }\n\n findItem(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findItem(options),\n );\n }\n\n update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.update(filters, data, {}),\n );\n }\n\n remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions = {},\n ): Promise<void> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.remove(filters, options),\n );\n }\n\n findAll(options: IFindOptions) {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n const { pagination, ...findAllOptions } = options;\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findAll(findAllOptions),\n );\n }\n\n findCount(findCountOptions: IFindOptions): Promise<number> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findCount(findCountOptions),\n );\n }\n\n buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n ) {\n return buildFilter(attribute, value, operator, relativePath);\n }\n\n buildQueryIndex(indexName: string, columns: string[]) {\n return buildQueryIndex(indexName, columns);\n }\n\n buildSort(column: string, direction: string) {\n return buildSort(column, direction);\n }\n\n updateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options?: IUpdateExpressionsOptions,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.updateExpressions(filters, actions, options),\n );\n }\n\n runRawQuery(query: string, params: any[]) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.runRawQuery(query, params),\n );\n }\n}\n\nexport default CrudService;\n","import { PoolClient } from 'pg';\nimport { ITableName, ITableColumns } from '../interfaces';\n\nexport class CrudSchema {\n static table: string | ITableName;\n static columns: ITableColumns;\n static usePool?: boolean = false;\n static schema: string | null = null;\n static poolClient?: PoolClient;\n static isTemporalTable: boolean = false;\n}\n","import { FILTER_LOGIC_OPERATORS } from '../utils/constants';\n\nconst VALID_FILTER_LOGIC_OPERATORS: FILTER_LOGIC_OPERATORS[] = Object.values(\n FILTER_LOGIC_OPERATORS,\n);\n\nexport type FilterLogicOperator = (typeof VALID_FILTER_LOGIC_OPERATORS)[number];\n","import { CONNECTION_CLOSING_MODES } from '../utils/constants';\n\nconst VALID_CONNECTION_CLOSING_MODES: CONNECTION_CLOSING_MODES[] =\n Object.values(CONNECTION_CLOSING_MODES);\n\nexport type ConnectionClosingMode =\n (typeof VALID_CONNECTION_CLOSING_MODES)[number];\n","import { Pool, PoolConfig } from 'pg';\nimport { isMultiPlatformMode } from '../utils/constants';\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...poolConfig,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n });\n return pool;\n}\n"]}
1
+ {"version":3,"sources":["../../src/helpers/crudHelpers.ts","../../src/services/crudFactory.service.ts","../../src/services/crud.service.ts","../../src/schemas/crudSchema.ts","../../src/types/filterLogicOperator.type.ts","../../src/types/connectionClosingMode.type.ts","../../src/services/dbPool.service.ts"],"names":["isMultiPlatformMode"],"mappings":"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","file":"index.mjs","sourcesContent":["import { ISorting } from '../interfaces';\nimport { SortDirection } from '../types';\nimport { SORT_DIRECTIONS } from '../utils/constants';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n) {\n return {\n attribute,\n operator,\n value,\n relativePath,\n };\n}\n\nexport function buildQueryIndex(indexName: string, columns: string[]) {\n return {\n indexName,\n columns,\n };\n}\n\nexport function buildSort(\n column: string,\n direction: string = SORT_DIRECTIONS.ASC,\n): ISorting {\n return {\n column,\n direction: direction as SortDirection,\n };\n}\n","import { Pool } from 'pg';\nimport { ICrudService } from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { DbPool } from '../types';\nexport class CrudFactory {\n static async databaseClientService<T>(\n crudSchema: typeof CrudSchema,\n pool?: Pool,\n ): Promise<ICrudService<T>> {\n const isMultiPlatformMode =\n process.env.PLATFORM_TYPE?.toLowerCase() === 'container';\n\n let DatabaseCrudService: new <T>(\n schema: typeof CrudSchema,\n poolClient?: DbPool,\n ) => ICrudService<T>;\n\n if (isMultiPlatformMode) {\n const module = await import(\n './cruds/postgresql/postgreSqlCrud.service'\n );\n DatabaseCrudService = module.PostgreSqlCrudService;\n } else {\n const module = await import(\n './cruds/dynamodb/dynamoDbCrud.service'\n );\n DatabaseCrudService = module.DynamoDbCrudService;\n }\n\n return new DatabaseCrudService(crudSchema, pool);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Pool } from 'pg';\nimport {\n buildQueryIndex,\n buildFilter,\n buildSort,\n} from '../helpers/crudHelpers';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n IFilter,\n IFindOptions,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../interfaces';\nimport { CrudSchema } from '../schemas';\nimport { CrudFactory } from './crudFactory.service';\n\nclass CrudService<T> {\n private crudSchema: typeof CrudSchema;\n\n constructor(\n crudSchema: typeof CrudSchema,\n private pool?: Pool,\n ) {\n this.crudSchema = crudSchema;\n }\n\n private async getCrudServiceInstance() {\n const crudService = await CrudFactory.databaseClientService(\n this.crudSchema,\n this.pool,\n );\n return crudService;\n }\n\n private getDefaultValue(columnName: string): any {\n const column = this.crudSchema.columns[columnName];\n return column ? column.default : undefined;\n }\n\n private setDefaultValues(data: any) {\n const defaultValues: { [key: string]: any } = {};\n const columns = this.crudSchema.columns;\n\n for (const columnName in columns) {\n const missingColumnValue = !(columnName in data);\n const columnDefaultValue = this.getDefaultValue(columnName);\n if (missingColumnValue && columnDefaultValue) {\n defaultValues[columnName] = columnDefaultValue;\n }\n }\n\n return { ...defaultValues, ...data };\n }\n\n create(data: T | T[]): Promise<unknown | ICreateMultipleResponse> {\n const processedData = Array.isArray(data)\n ? data.map(this.setDefaultValues.bind(this))\n : this.setDefaultValues(data);\n\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.create(processedData),\n );\n }\n\n find(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.find(options),\n );\n }\n\n findItem(options: IFindOptions) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findItem(options),\n );\n }\n\n update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.update(filters, data, {}),\n );\n }\n\n remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions = {},\n ): Promise<void> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.remove(filters, options),\n );\n }\n\n findAll(options: IFindOptions) {\n // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars\n const { pagination, ...findAllOptions } = options;\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findAll(findAllOptions),\n );\n }\n\n findCount(findCountOptions: IFindOptions): Promise<number> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.findCount(findCountOptions),\n );\n }\n\n buildFilter(\n attribute: string,\n value: any,\n operator = 'EQUAL',\n relativePath = undefined,\n ) {\n return buildFilter(attribute, value, operator, relativePath);\n }\n\n buildQueryIndex(indexName: string, columns: string[]) {\n return buildQueryIndex(indexName, columns);\n }\n\n buildSort(column: string, direction: string) {\n return buildSort(column, direction);\n }\n\n updateExpression(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options?: IUpdateExpressionsOptions,\n ): Promise<T | null> {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.updateExpressions(filters, actions, options),\n );\n }\n\n runRawQuery(query: string, params: any[]) {\n return this.getCrudServiceInstance().then((crudService) =>\n crudService.runRawQuery(query, params),\n );\n }\n}\n\nexport default CrudService;\n","import { PoolClient } from 'pg';\nimport { ITableName, ITableColumns } from '../interfaces';\n\nexport class CrudSchema {\n static table: string | ITableName;\n static columns: ITableColumns;\n static usePool?: boolean = false;\n static schema: string | null = null;\n static poolClient?: PoolClient;\n static isTemporalTable: boolean = false;\n}\n","import { FILTER_LOGIC_OPERATORS } from '../utils/constants';\n\nconst VALID_FILTER_LOGIC_OPERATORS: FILTER_LOGIC_OPERATORS[] = Object.values(\n FILTER_LOGIC_OPERATORS,\n);\n\nexport type FilterLogicOperator = (typeof VALID_FILTER_LOGIC_OPERATORS)[number];\n","import { CONNECTION_CLOSING_MODES } from '../utils/constants';\n\nconst VALID_CONNECTION_CLOSING_MODES: CONNECTION_CLOSING_MODES[] =\n Object.values(CONNECTION_CLOSING_MODES);\n\nexport type ConnectionClosingMode =\n (typeof VALID_CONNECTION_CLOSING_MODES)[number];\n","import { Pool, PoolConfig } from 'pg';\nimport { isMultiPlatformMode } from '../utils/constants';\n\nexport function getDbPool(poolConfig?: PoolConfig) {\n if (!isMultiPlatformMode()) return undefined;\n\n const pool = new Pool({\n ...poolConfig,\n connectionString: process.env.MULTIPLATFORM_PG_CONNECTION_STRING,\n });\n return pool;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { findIdColumnName, buildAggFunctionAlias, PersistenceErrorWrapper, getTableName } from './chunk-DHIGNHXS.mjs';
2
- import { __spreadValues, __spreadProps, DEFAULT_PG_SCHEMA, POSTGRES_FILTER_OPERATOR_MAP, DYNAMO_DB_UPDATE_ACTIONS } from './chunk-6MOAJFFY.mjs';
1
+ import { findIdColumnName, buildAggFunctionAlias, PersistenceErrorWrapper, getTableName } from './chunk-2H6RO6ZL.mjs';
2
+ import { __spreadValues, __spreadProps, DEFAULT_PG_SCHEMA, POSTGRES_FILTER_OPERATOR_MAP, DYNAMO_DB_UPDATE_ACTIONS } from './chunk-2OYWEFNZ.mjs';
3
3
  import format from 'pg-format';
4
4
  import { Client } from 'pg';
5
5
 
@@ -208,8 +208,7 @@ var PostgresqlClientService = class extends QueryService {
208
208
  }
209
209
  formatValue(value) {
210
210
  if (Array.isArray(value)) {
211
- if (!(value == null ? void 0 : value.length))
212
- return "{}";
211
+ if (!(value == null ? void 0 : value.length)) return "{}";
213
212
  const isNumberArray = typeof value[0] === "number";
214
213
  if (isNumberArray) {
215
214
  return `{${value.join(",")}}`;
@@ -239,32 +238,27 @@ var PostgresqlClientService = class extends QueryService {
239
238
  return isValidArrayFilters || isValidCompositeFilters;
240
239
  }
241
240
  replaceFilterTokensInQuery(query, filters) {
242
- if (!filters)
243
- return query;
241
+ if (!filters) return query;
244
242
  if (this.isValidFiltersInput(filters)) {
245
243
  const filterClause = this.buildFilterClause(filters);
246
244
  return query.replace(/{{filters}}/g, filterClause);
247
245
  }
248
246
  }
249
247
  addFiltersToQuery(query, filters) {
250
- if (!filters)
251
- return query;
248
+ if (!filters) return query;
252
249
  if (this.isValidFiltersInput(filters))
253
250
  query += ` WHERE ${this.buildFilterClause(filters)}`;
254
251
  return query;
255
252
  }
256
253
  addOrderByToQuery(query, orderBy) {
257
- if (orderBy)
258
- query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;
254
+ if (orderBy) query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;
259
255
  return query;
260
256
  }
261
257
  addPaginationToQuery(query, pagination) {
262
258
  if (pagination) {
263
259
  const { limit, from } = pagination;
264
- if (limit)
265
- query += ` LIMIT ${limit}`;
266
- if (from)
267
- query += ` OFFSET ${from}`;
260
+ if (limit) query += ` LIMIT ${limit}`;
261
+ if (from) query += ` OFFSET ${from}`;
268
262
  }
269
263
  return query;
270
264
  }
@@ -273,8 +267,7 @@ var PostgresqlClientService = class extends QueryService {
273
267
  return `CAST(${aggregateFunction}(1) AS INTEGER) AS "${buildAggFunctionAlias(
274
268
  aggregateFunction
275
269
  )}"`;
276
- if (!(fields == null ? void 0 : fields.length))
277
- return "*";
270
+ if (!(fields == null ? void 0 : fields.length)) return "*";
278
271
  return this.parseFields(fields).join(", ");
279
272
  }
280
273
  parseFields(fields) {
@@ -323,8 +316,7 @@ var PostgresqlClientService = class extends QueryService {
323
316
  }
324
317
  sanitizeValue(value) {
325
318
  if (Array.isArray(value)) {
326
- if (value.length === 0)
327
- ;
319
+ if (value.length === 0) ;
328
320
  const formattedArray = value.map((item) => {
329
321
  if (typeof item === "string") {
330
322
  return `'${item}'`;
@@ -766,8 +758,7 @@ var PostgreSqlCrudService = class extends PostgresqlClientService {
766
758
  const schemaColumns = Object.entries(this.tableSchema.columns);
767
759
  schemaColumns.forEach(([key, value]) => {
768
760
  if (value.type === "big_number") {
769
- if (data[key])
770
- data[key] = Number(data[key]);
761
+ if (data[key]) data[key] = Number(data[key]);
771
762
  }
772
763
  });
773
764
  const resultItem = __spreadValues(__spreadValues({}, data), data.qvAttributes);
@@ -862,5 +853,5 @@ var PostgreSqlCrudService = class extends PostgresqlClientService {
862
853
  };
863
854
 
864
855
  export { PostgreSqlCrudService };
865
- //# sourceMappingURL=out.js.map
866
- //# sourceMappingURL=postgreSqlCrud.service-JGJELA6R.mjs.map
856
+ //# sourceMappingURL=postgreSqlCrud.service-AD2CHR2Z.mjs.map
857
+ //# sourceMappingURL=postgreSqlCrud.service-AD2CHR2Z.mjs.map