@qrvey/data-persistence 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/services/cruds/postgresql/postgreSqlClient.service.js +46 -15
- package/dist/cjs/services/cruds/postgresql/postgreSqlClient.service.js.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/{postgreSqlCrud.service-STBDC27Y.mjs → postgreSqlCrud.service-GXH7ZQZY.mjs} +58 -20
- package/dist/esm/postgreSqlCrud.service-GXH7ZQZY.mjs.map +1 -0
- package/package.json +1 -1
- package/dist/esm/postgreSqlCrud.service-STBDC27Y.mjs.map +0 -1
|
@@ -318,7 +318,7 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
318
318
|
switch (column.type) {
|
|
319
319
|
case 'object':
|
|
320
320
|
{
|
|
321
|
-
const valueSerialized =
|
|
321
|
+
const valueSerialized = `${JSON.stringify(value).replace(/'/g, "''")}`;
|
|
322
322
|
expValue = `'${valueSerialized}'::jsonb`;
|
|
323
323
|
}
|
|
324
324
|
break;
|
|
@@ -337,7 +337,7 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
337
337
|
});
|
|
338
338
|
if (Object.keys(jsonSetExpressionGroup).length > 0) {
|
|
339
339
|
Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {
|
|
340
|
-
const jsonSetExpression = this.buildJSONBExpression(jsonSetExpressionGroup[groupIndex]);
|
|
340
|
+
const jsonSetExpression = this.buildJSONBExpression(jsonSetExpressionGroup[groupIndex], 'jsonb_set');
|
|
341
341
|
updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);
|
|
342
342
|
});
|
|
343
343
|
}
|
|
@@ -352,15 +352,21 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
352
352
|
query += this.buildFilterClause(filters);
|
|
353
353
|
return this.runQuery(query);
|
|
354
354
|
}
|
|
355
|
-
|
|
355
|
+
/**
|
|
356
|
+
* @description Builds a jsonb expression like jsonb_insert, or jsonb_set
|
|
357
|
+
* @param jsonSetExpressions
|
|
358
|
+
* @param functionName
|
|
359
|
+
* @returns
|
|
360
|
+
*/
|
|
361
|
+
buildJSONBExpression(jsonSetExpressions, functionName) {
|
|
356
362
|
let jsonSetStringExpr = '';
|
|
357
363
|
jsonSetExpressions.forEach((expression, index) => {
|
|
358
364
|
const { columnName, jsonExpr } = expression;
|
|
359
365
|
if (index === 0) {
|
|
360
|
-
jsonSetStringExpr =
|
|
366
|
+
jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;
|
|
361
367
|
}
|
|
362
368
|
else {
|
|
363
|
-
jsonSetStringExpr =
|
|
369
|
+
jsonSetStringExpr = `${functionName}(${jsonSetStringExpr},${jsonExpr})`;
|
|
364
370
|
}
|
|
365
371
|
});
|
|
366
372
|
return jsonSetStringExpr;
|
|
@@ -409,7 +415,7 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
409
415
|
const attributes = {
|
|
410
416
|
originalString: groupResult,
|
|
411
417
|
path: attributesFromGroup[0].trim(),
|
|
412
|
-
value: attributesFromGroup
|
|
418
|
+
value: attributesFromGroup.slice(1).join(',').trim(),
|
|
413
419
|
functionExpr: '',
|
|
414
420
|
};
|
|
415
421
|
if (columnType == 'array') {
|
|
@@ -417,7 +423,8 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
417
423
|
this.buildArrayAppendExpr(attributes);
|
|
418
424
|
}
|
|
419
425
|
else {
|
|
420
|
-
attributes['functionExpr'] =
|
|
426
|
+
attributes['functionExpr'] =
|
|
427
|
+
this.buildJsonbInsertExpr(attributes);
|
|
421
428
|
}
|
|
422
429
|
return attributes;
|
|
423
430
|
}
|
|
@@ -428,15 +435,39 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
428
435
|
const columnName = arrayPath.shift();
|
|
429
436
|
return `ARRAY_APPEND("${columnName}",${params.value})`;
|
|
430
437
|
}
|
|
431
|
-
|
|
438
|
+
buildJsonbInsertExpr(params) {
|
|
432
439
|
const arrayPath = params.path.split('.');
|
|
433
440
|
const columnName = arrayPath.shift();
|
|
434
|
-
|
|
435
|
-
|
|
441
|
+
const jsonbInsertExpressions = this.getExpressionsByDefinitionForJSONBInsert(columnName, params.value);
|
|
442
|
+
const expressions = this.buildJSONBExpression(jsonbInsertExpressions, 'jsonb_insert');
|
|
443
|
+
return expressions;
|
|
444
|
+
}
|
|
445
|
+
getExpressionsByDefinitionForJSONBInsert(columnName, value) {
|
|
446
|
+
const jsonbInsertExpressions = [];
|
|
447
|
+
try {
|
|
448
|
+
const parsedValue = JSON.parse(value);
|
|
449
|
+
if (Array.isArray(parsedValue)) {
|
|
450
|
+
parsedValue.forEach((arrayValue) => {
|
|
451
|
+
jsonbInsertExpressions.push({
|
|
452
|
+
jsonExpr: `'{0}','${this.serializeJSONValue(arrayValue)}'`,
|
|
453
|
+
columnName: `"${columnName}"`,
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
jsonbInsertExpressions.push({
|
|
459
|
+
jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,
|
|
460
|
+
columnName: `"${columnName}"`,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
436
463
|
}
|
|
437
|
-
|
|
438
|
-
|
|
464
|
+
catch (error) {
|
|
465
|
+
jsonbInsertExpressions.push({
|
|
466
|
+
jsonExpr: `'{0}','${value}'`,
|
|
467
|
+
columnName: `"${columnName}"`,
|
|
468
|
+
});
|
|
439
469
|
}
|
|
470
|
+
return jsonbInsertExpressions;
|
|
440
471
|
}
|
|
441
472
|
getInsertExprFromJsonbDef(queryValue, columnType) {
|
|
442
473
|
const listAppendParams = this.getListAppendDefFromValue(queryValue, columnType);
|
|
@@ -452,10 +483,10 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
452
483
|
action.value.includes('list_append')) {
|
|
453
484
|
action.path = action.path.split('.')[0];
|
|
454
485
|
const column = columns[action.path];
|
|
455
|
-
action.value = this.getInsertExprFromJsonbDef(action.value, column.type);
|
|
456
|
-
action.dynamoFuncName = 'list_append';
|
|
457
486
|
action.value =
|
|
458
487
|
this.replaceExpressionAttributeValuesForDynamoFunctions(action.value, options);
|
|
488
|
+
action.value = this.getInsertExprFromJsonbDef(action.value, column.type);
|
|
489
|
+
action.dynamoFuncName = 'list_append';
|
|
459
490
|
}
|
|
460
491
|
else {
|
|
461
492
|
action.value = this.replaceExpressionAttributeValues(action.value, options);
|
|
@@ -483,7 +514,7 @@ class PostgresqlClientService extends query_service_1.default {
|
|
|
483
514
|
if (exprAttributeValuesKeys.length > 0) {
|
|
484
515
|
exprAttributeValuesKeys.forEach((exprAttribute) => {
|
|
485
516
|
const valueSerialized = this.serializeJSONValue(expressionAttributeValues[exprAttribute]);
|
|
486
|
-
value = value.replace(exprAttribute,
|
|
517
|
+
value = value.replace(exprAttribute, `${valueSerialized}`);
|
|
487
518
|
});
|
|
488
519
|
}
|
|
489
520
|
return value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgreSqlClient.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/postgresql/postgreSqlClient.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgreSqlClient.service.js","sourceRoot":"","sources":["../../../../../src/services/cruds/postgresql/postgreSqlClient.service.ts"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,+BAA+B;;;;;AAE/B,0DAA+B;AAgB/B,oEAA2C;AAC3C,wDAOkC;AAElC,8DAA4D;AAC5D,gEAAsE;AAEtE,MAAqB,uBAA2B,SAAQ,uBAAY;IAEhE,YAAY,WAA8B,EAAE,UAAyB;QACjE,KAAK,CAAC,UAAU,CAAC,CAAC;QA4Hd,sBAAiB,GAAG,UAAU,KAAU;YAC5C,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;QAC3C,CAAC,CAAC;QA7HE,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,6BAAiB,CAAC;IACvD,CAAC;IAED,IAAI,SAAS;QACT,OAAO,CACH,IAAA,0BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5C,IAAA,0BAAY,EAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CACtC,CAAC;IACN,CAAC;IAED,gBAAgB,CAAC,QAAwB,EAAE,KAAa;QACpD,IACI,QAAQ,KAAK,0BAAc,CAAC,QAAQ;YACpC,QAAQ,KAAK,0BAAc,CAAC,YAAY,EAC1C;YACE,OAAO,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;SAC5B;aAAM,IAAI,QAAQ,KAAK,0BAAc,CAAC,WAAW,EAAE;YAChD,OAAO,KAAK,GAAG,GAAG,CAAC;SACtB;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEO,WAAW,CACf,QAAwB,EACxB,SAAiB,EACjB,KAAU;;QAEV,MAAM,cAAc,GAAG,mBAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,QAAQ,GAAG,QAAQ;YACf,CAAC,CAAE,QAAQ,CAAC,WAAW,EAAqB;YAC5C,CAAC,CAAC,0BAAc,CAAC,KAAK,CAAC;QAC3B,MAAM,gBAAgB,GAAG,wCAA4B,CAAC,QAAQ,CAAC,CAAC;QAEhE,IAAI,CAAC,gBAAgB;YACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAEhE,MAAM,cAAc,GAAG,mBAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,UAAU,GACZ,YAAY,KAAI,MAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,0CAAE,IAAI,CAAA,CAAC;QAC7D,MAAM,QAAQ,GAAG,YAAY;YACzB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,wBAAwB,SAAS,IAAI,CAAC;QAE5C,IAAI,QAAQ,KAAK,0BAAc,CAAC,EAAE,EAAE;YAChC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACxC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAM,CAAC,OAAO,CAAC;gBAC3B,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YACvB,OAAO,GAAG,QAAQ,IAAI,gBAAgB,KAAK,eAAe,CAAC,IAAI,CAC3D,IAAI,CACP,GAAG,CAAC;SACR;QAED,IAAI,QAAQ,KAAK,0BAAc,CAAC,OAAO,EAAE;YACrC,OAAO,GAAG,QAAQ,IAAI,gBAAgB,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE;QAED;;WAEG;QACH,IAAI,QAAQ,KAAK,0BAAc,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzD,OAAO,IAAI,QAAQ,IAAI,gBAAgB,IAAI,mBAAM,CAAC,OAAO,CACrD,KAAK,CACR,OAAO,QAAQ,WAAW,CAAC;SAC/B;QAED,IACI,QAAQ,KAAK,0BAAc,CAAC,SAAS;YACrC,QAAQ,KAAK,0BAAc,CAAC,KAAK,EACnC;YACE,OAAO,GAAG,QAAQ,IAAI,gBAAgB,EAAE,CAAC;SAC5C;QAED,IACI,CAAC,QAAQ,KAAK,0BAAc,CAAC,QAAQ;YACjC,QAAQ,KAAK,0BAAc,CAAC,YAAY,CAAC;YAC7C,UAAU,KAAK,OAAO,EACxB;YACE,MAAM,WAAW,GACb,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;YACrD,IAAI,YAAY,GAAG,GAAG,WAAW,UAAU,QAAQ,GAAG,CAAC;YAEvD,IAAI,QAAQ,KAAK,0BAAc,CAAC,YAAY,EAAE;gBAC1C,IAAI,KAAK,KAAK,IAAI,EAAE;oBAChB,YAAY,GAAG,SAAS,YAAY,IAAI,CAAC;iBAC5C;qBAAM;oBACH,YAAY,GAAG,SAAS,YAAY,QAAQ,QAAQ,WAAW,CAAC;iBACnE;aACJ;YACD,OAAO,YAAY,CAAC;SACvB;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,GAAG,QAAQ,IAAI,gBAAgB,IAAI,mBAAM,CAAC,OAAO,CACpD,aAAa,CAChB,EAAE,CAAC;IACR,CAAC;IAEO,iBAAiB,CACrB,OAAqC,EACrC,aAAmC;QAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YACxB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzC,OAAO,IAAI,CAAC,WAAW,CACnB,MAAM,CAAC,QAA0B,EACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,CACf,CAAC;YACN,CAAC,CAAC,CAAC;YACH,OAAO,aAAa,CAAC,IAAI,CACrB,IAAI,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,kCAAsB,CAAC,GAAG,GAAG,CACrD,CAAC;SACL;aAAM;YACH,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC3C;IACL,CAAC;IAMD,kBAAkB,CAAC,OAAqC;QACpD,IAAI,aAAa,GAAW,EAAE,CAAC;QAC/B,IAAI,aAAa,GAAG,IAAI,CAAC;QAEzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAChD,IAAI,CAAC,aAAa,EAAE;gBAChB,aAAa,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;aACrD;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC/B,aAAa,IAAI,GAAG,CAAC;gBACrB,aAAa,IAAI,IAAI,CAAC,kBAAkB,CACpC,KAAyB,CAC5B,CAAC;gBACF,aAAa,IAAI,GAAG,CAAC;aACxB;iBAAM;gBACF,KAAmB,CAAC,OAAO,CAAC,CAAC,MAAe,EAAE,EAAE;oBAC7C,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;wBAChC,MAAM,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAChC,MAA0B,CAC7B,GAAG,CAAC;qBACR;yBAAM;wBACH,MAAM,GAAG,IAAI,CAAC,WAAW,CACrB,MAAM,CAAC,QAA0B,EACjC,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,KAAK,CACf,CAAC;qBACL;oBACD,aAAa,IAAI,GAAG,MAAM,IAAI,GAAG,GAAG,CAAC;gBACzC,CAAC,CAAC,CAAC;aACN;YAED,aAAa,GAAG,KAAK,CAAC;SACzB;QAED,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC7D,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,iBAAiB,CAAC,IAAc;QACpC,OAAO,GAAG,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAC/B,IAAI,CAAC,SAAS,IAAI,2BAAe,CAAC,GACtC,EAAE,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,YAAwB;QAC/C,IAAI;YACA,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9D;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAED,WAAW,CAAC,KAAY;QACpB,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QACnD,IAAI,aAAa,EAAE;YACf,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SACjC;aAAM;YACH,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;SAC1D;IACL,CAAC;IAED,WAAW,CAAC,KAAU;QAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,aAAa,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;YACnD,IAAI,aAAa,EAAE;gBACf,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aACjC;iBAAM;gBACH,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aAC/D;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAW;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACjD,CAAC;QAEF,MAAM,KAAK,GAAG,IAAA,mBAAM,EAChB,eAAe,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAM,CAAC,KAAK,CACtD,IAAI,CAAC,SAAS,CACjB,8BAA8B,EAC/B,IAAI,EACJ,MAAM,CACT,CAAC;QAEF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,iBAAiB,CACrB,KAAa,EACb,OAAsC;QAEtC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAA,CAAC;QACtE,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,mBAAmB,IAAI,uBAAuB;YAC9C,KAAK,IAAI,UAAU,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAoB;QACjD,IAAI,OAAO;YAAE,KAAK,IAAI,aAAa,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,oBAAoB,CACxB,KAAa,EACb,UAA4B;QAE5B,IAAI,UAAU,EAAE;YACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC;YACnC,IAAI,KAAK;gBAAE,KAAK,IAAI,UAAU,KAAK,EAAE,CAAC;YACtC,IAAI,IAAI;gBAAE,KAAK,IAAI,WAAW,IAAI,EAAE,CAAC;SACxC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,eAAe,CACnB,iBAAgD,EAChD,SAAmB,EAAE;QAErB,IAAI,iBAAiB;YACjB,OAAO,QAAQ,iBAAiB,uBAAuB,IAAA,oCAAqB,EACxE,iBAAiB,CACpB,GAAG,CAAC;QACT,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA;YAAE,OAAO,GAAG,CAAC;QAEhC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,WAAW,CAAC,MAAgB;QAChC,MAAM,iBAAiB,GAAa,MAAM,CAAC,IAAI,CAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAC1B,CAAC;QACF,MAAM,UAAU,GAAa,MAAM;aAC9B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAElC,MAAM;aACD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1D,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,UAAU,CAAC,IAAI,CAAC,uBAAuB,KAAK,SAAS,KAAK,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACP,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,UAAwB,EAAE;QACxC,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,eAAe,CACtC,OAAO,CAAC,iBAAiB,EACzB,OAAO,CAAC,MAAM,CACjB,SAAS,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACxE,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC5B,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YACvD,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;SAChE;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,KAAU;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC;YAC7B,MAAM,cAAc,GAAG,KAAK;iBACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACV,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC1B,OAAO,IAAI,IAAI,GAAG,CAAC;iBACtB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACjC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC/B;qBAAM;oBACH,OAAO,IAAI,CAAC;iBACf;YACL,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,CAAC,CAAC;YAEf,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;SACzC;aAAM;YACH,OAAO,mBAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAChC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CACf,OAAqC,EACrC,IAAkB;QAElB,IAAI,KAAK,GAAG,UAAU,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAM,CAAC,KAAK,CAC7D,IAAI,CAAC,SAAS,CACjB,MAAM,CAAC;QAER,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,mBAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,OAAO,GAAG,mBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QACH,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAExC,KAAK,IAAI,SAAS,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEO,gCAAgC,CACpC,YAAyB;QAEzB,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACnD,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CACf,OAAoD,EACpD,kBAA2B,KAAK;QAEhC,IAAI,KAAK,GAAG,eAAe,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAM,CAAC,KAAK,CAClE,IAAI,CAAC,SAAS,CACjB,EAAE,CAAC;QACJ,IAAI,OAAO,EAAE;YACT,KAAK,IAAI,SAAS,CAAC;YAEnB,IAAI,eAAe,EAAE;gBACjB,KAAK,IAAI,IAAI,CAAC,gCAAgC,CAC1C,OAAsB,CACzB,CAAC;aACL;iBAAM;gBACH,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAC3B,OAAuC,CAC1C,CAAC;aACL;SACJ;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,MAAc;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,uBAAuB;IAChC,8DAA8D;IAC9D,OAAqC,EACrC,OAA2B,EAC3B,UAA8C,EAAE;QAEhD,IAAI,KAAK,GAAG,UAAU,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAM,CAAC,KAAK,CAC7D,IAAI,CAAC,SAAS,CACjB,MAAM,CAAC;QAER,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAExC,MAAM,SAAS,GAAG,IAAI,CAAC,mCAAmC,CACtD,GAAG,EACH,OAAO,EACP,OAAO,EACP,oCAAwB,CAAC,GAAG,CAC/B,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,mCAAmC,CACtD,GAAG,EACH,OAAO,EACP,OAAO,EACP,oCAAwB,CAAC,GAAG,CAC/B,CAAC;QAEF,MAAM,qBAAqB,GAAQ,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAQ,EAAE,CAAC;QAC9B,MAAM,sBAAsB,GAAQ,EAAE,CAAC;QACvC,MAAM,cAAc,GAAQ,EAAE,CAAC;QAE/B,qBAAqB,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,EAAE;YAC9C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,GAC9D,UAAU,CAAC;YAEf,8BAA8B;YAC9B,IAAI,cAAc,EAAE;gBAChB,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;aACxD;YAED,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;gBACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAC/C,IAAI,EACJ,KAAK,EACL;oBACI,eAAe;oBACf,UAAU;iBACb,CACJ,CAAC;gBACF,MAAM,UAAU,GAAW,QAAQ,CAAC,UAAU,CAAC;gBAC/C,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;oBACrC,sBAAsB,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBACnD;qBAAM;oBACH,sBAAsB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACrD;aACJ;iBAAM,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,QAAQ,CAAC;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC7C,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,KAAI,SAAS;oBACzB,MAAM,uCAAuC,IAAI,6BAA6B,CAAC;gBACnF,IAAI,cAAc,CAAC;gBACnB,QAAQ,MAAM,CAAC,IAAI,EAAE;oBACjB,KAAK,QAAQ;wBACT;4BACI,MAAM,eAAe,GAAG,GAAG,IAAI,CAAC,SAAS,CACrC,KAAK,CACR,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;4BACxB,QAAQ,GAAG,IAAI,eAAe,UAAU,CAAC;yBAC5C;wBACD,MAAM;oBACV,KAAK,OAAO;wBACR,cAAc,GAAG,mBAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACvC,QAAQ,GAAG,SAAS,cAAc,GAAG,CAAC;wBACtC,MAAM;oBACV;wBACI,cAAc,GAAG,mBAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACvC,QAAQ,GAAG,cAAc,CAAC;wBAC1B,MAAM;iBACb;gBACD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACxB,aAAa,CAAC,IAAI,CAAC,GAAG,mBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC;aAC7D;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAC/C,sBAAsB,CAAC,UAAU,CAAC,EAClC,WAAW,CACd,CAAC;gBAEF,aAAa,CAAC,IAAI,CAAC,GAAG,UAAU,MAAM,iBAAiB,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QAED,kEAAkE;QAClE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,cAAc,CAAC,OAAO,CAAC,CAAC,aAAkB,EAAE,EAAE;gBAC1C,aAAa,CAAC,IAAI,CACd,GAAG,mBAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAC/B,aAAa,CAAC,KAClB,EAAE,CACL,CAAC;YACN,CAAC,CAAC,CAAC;SACN;QAED,KAAK,IAAI,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAExC,KAAK,IAAI,SAAS,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CACxB,kBAAuB,EACvB,YAAoB;QAEpB,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAC,UAAe,EAAE,KAAa,EAAE,EAAE;YAC1D,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC;YAC5C,IAAI,KAAK,KAAK,CAAC,EAAE;gBACb,iBAAiB,GAAG,GAAG,YAAY,IAAI,UAAU,IAAI,QAAQ,GAAG,CAAC;aACpE;iBAAM;gBACH,iBAAiB,GAAG,GAAG,YAAY,IAAI,iBAAiB,IAAI,QAAQ,GAAG,CAAC;aAC3E;QACL,CAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CAAC,KAAU;QACjC,MAAM,eAAe,GACjB,OAAO,KAAK,IAAI,QAAQ;YACpB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAChD,CAAC,CAAC,KAAK,CAAC;QAChB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAEO,6BAA6B,CACjC,IAAY,EACZ,KAAU,EACV,OAAY;QAEZ,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAEhD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CACrD,IAAI,EACJ,IAAI,CACP,GAAG,CAAC;QAEL,IAAI,UAAU,IAAI,oCAAwB,CAAC,GAAG,EAAE;YAC5C,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBAC3C,MAAM,UAAU,GAAG;oBACf,QAAQ,EAAE,KAAK,cAAc,0BAA0B,UAAU,QAAQ,cAAc,qBAAqB,eAAe,GAAG;oBAC9H,UAAU,EAAE,IAAI,UAAU,GAAG;iBAChC,CAAC;gBACF,OAAO,UAAU,CAAC;aACrB;SACJ;QACD,OAAO;YACH,QAAQ,EAAE,KAAK,cAAc,MAAM,eAAe,IAAI,eAAe,EAAE;YACvE,UAAU,EAAE,IAAI,UAAU,GAAG;SAChC,CAAC;IACN,CAAC;IAEO,yBAAyB,CAAC,UAAkB,EAAE,UAAkB;QACpE,MAAM,eAAe,GAAG,0BAA0B,CAAC;QACnD,MAAM,gBAAgB,GAAG,cAAc,CAAC;QAExC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjC,IAAI,WAAW,EAAE;YACb,MAAM,mBAAmB,GAAG,WAAW;iBAClC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;iBAClC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChB,MAAM,UAAU,GAAG;gBACf,cAAc,EAAE,WAAW;gBAC3B,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBACnC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;gBACpD,YAAY,EAAE,EAAE;aACnB,CAAC;YACF,IAAI,UAAU,IAAI,OAAO,EAAE;gBACvB,UAAU,CAAC,cAAc,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;aAC7C;iBAAM;gBACH,UAAU,CAAC,cAAc,CAAC;oBACtB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;aAC7C;YACD,OAAO,UAAU,CAAC;SACrB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,oBAAoB,CAAC,MAAW;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,OAAO,iBAAiB,UAAU,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC;IAC3D,CAAC;IAEO,oBAAoB,CAAC,MAAW;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACrC,MAAM,sBAAsB,GACxB,IAAI,CAAC,wCAAwC,CACzC,UAAU,EACV,MAAM,CAAC,KAAK,CACf,CAAC;QAEN,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CACzC,sBAAsB,EACtB,cAAc,CACjB,CAAC;QACF,OAAO,WAAW,CAAC;IACvB,CAAC;IAEO,wCAAwC,CAC5C,UAAkB,EAClB,KAAa;QAEb,MAAM,sBAAsB,GAAG,EAAE,CAAC;QAClC,IAAI;YACA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC5B,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBAC/B,sBAAsB,CAAC,IAAI,CAAC;wBACxB,QAAQ,EAAE,UAAU,IAAI,CAAC,kBAAkB,CACvC,UAAU,CACb,GAAG;wBACJ,UAAU,EAAE,IAAI,UAAU,GAAG;qBAChC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,sBAAsB,CAAC,IAAI,CAAC;oBACxB,QAAQ,EAAE,UAAU,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG;oBAC3D,UAAU,EAAE,IAAI,UAAU,GAAG;iBAChC,CAAC,CAAC;aACN;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,sBAAsB,CAAC,IAAI,CAAC;gBACxB,QAAQ,EAAE,UAAU,KAAK,GAAG;gBAC5B,UAAU,EAAE,IAAI,UAAU,GAAG;aAChC,CAAC,CAAC;SACN;QACD,OAAO,sBAAsB,CAAC;IAClC,CAAC;IAEO,yBAAyB,CAAC,UAAkB,EAAE,UAAkB;QACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CACnD,UAAU,EACV,UAAU,CACb,CAAC;QACF,IAAI,gBAAgB,IAAI,IAAI,EAAE;YAC1B,UAAU,GAAG,UAAU,CAAC,OAAO,CAC3B,gBAAgB,CAAC,cAAc,EAC/B,gBAAgB,CAAC,YAAY,CAChC,CAAC;SACL;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,mCAAmC,CACvC,OAAc,EACd,OAAkC,EAClC,OAAY,EACZ,UAAkB;QAElB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAC9C,MAAM,CAAC,IAAI,EACX,OAAO,CACV,CAAC;YACF,IACI,OAAO,MAAM,CAAC,KAAK,IAAI,QAAQ;gBAC/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EACtC;gBACE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,KAAK;oBACR,IAAI,CAAC,kDAAkD,CACnD,MAAM,CAAC,KAAK,EACZ,OAAO,CACV,CAAC;gBACN,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,yBAAyB,CACzC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,CACd,CAAC;gBACF,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC;aACzC;iBAAM;gBACH,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,gCAAgC,CAChD,MAAM,CAAC,KAAK,EACZ,OAAO,CACV,CAAC;aACL;YAED,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;YAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;YAC9B,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kDAAkD,CACtD,KAAa,EACb,OAAY;QAEZ,MAAM,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC;QACxE,MAAM,sBAAsB,GAAG,wBAAwB;YACnD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;YACvC,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,uBAAuB,GAAG,yBAAyB;YACrD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;YACxC,CAAC,CAAC,EAAE,CAAC;QAET,yBAAyB;QACzB,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,sBAAsB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBAC7C,KAAK,GAAG,KAAK,CAAC,OAAO,CACjB,aAAa,EACb,wBAAwB,CAAC,aAAa,CAAC,CAC1C,CAAC;YACN,CAAC,CAAC,CAAC;SACN;QAED,0BAA0B;QAC1B,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,uBAAuB,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;gBAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAC3C,yBAAyB,CAAC,aAAa,CAAC,CAC3C,CAAC;gBACF,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,+BAA+B,CACnC,IAAY,EACZ,OAAkC;QAElC,MAAM,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC;QAE7C,IAAI,wBAAwB,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,CACzC,CAAC,aAAqB,EAAE,EAAE;gBACtB,MAAM,kBAAkB,GACpB,wBAAwB,CAAC,aAAa,CAAC,CAAC;gBAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;YAC3D,CAAC,CACJ,CAAC;SACL;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,gCAAgC,CACpC,KAAa,EACb,OAAkC;QAElC,MAAM,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC;QAC9C,IAAI,yBAAyB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;YAC/C,OAAO,yBAAyB,CAAC,KAAK,CAAC,CAAC;SAC3C;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AArvBD,0CAqvBC"}
|
package/dist/esm/index.mjs
CHANGED
|
@@ -29,7 +29,7 @@ var CrudFactory = class {
|
|
|
29
29
|
const isMultiPlatformMode2 = ((_a = process.env.PLATFORM_TYPE) == null ? void 0 : _a.toLowerCase()) === "container";
|
|
30
30
|
let DatabaseCrudService;
|
|
31
31
|
if (isMultiPlatformMode2) {
|
|
32
|
-
const module = await import('./postgreSqlCrud.service-
|
|
32
|
+
const module = await import('./postgreSqlCrud.service-GXH7ZQZY.mjs');
|
|
33
33
|
DatabaseCrudService = module.PostgreSqlCrudService;
|
|
34
34
|
} else {
|
|
35
35
|
const module = await import('./dynamoDbCrud.service-EFYPBZKN.mjs');
|
package/dist/esm/{postgreSqlCrud.service-STBDC27Y.mjs → postgreSqlCrud.service-GXH7ZQZY.mjs}
RENAMED
|
@@ -380,7 +380,9 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
380
380
|
switch (column.type) {
|
|
381
381
|
case "object":
|
|
382
382
|
{
|
|
383
|
-
const valueSerialized =
|
|
383
|
+
const valueSerialized = `${JSON.stringify(
|
|
384
|
+
value
|
|
385
|
+
).replace(/'/g, "''")}`;
|
|
384
386
|
expValue = `'${valueSerialized}'::jsonb`;
|
|
385
387
|
}
|
|
386
388
|
break;
|
|
@@ -400,7 +402,8 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
400
402
|
if (Object.keys(jsonSetExpressionGroup).length > 0) {
|
|
401
403
|
Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {
|
|
402
404
|
const jsonSetExpression = this.buildJSONBExpression(
|
|
403
|
-
jsonSetExpressionGroup[groupIndex]
|
|
405
|
+
jsonSetExpressionGroup[groupIndex],
|
|
406
|
+
"jsonb_set"
|
|
404
407
|
);
|
|
405
408
|
updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);
|
|
406
409
|
});
|
|
@@ -417,14 +420,20 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
417
420
|
query += this.buildFilterClause(filters);
|
|
418
421
|
return this.runQuery(query);
|
|
419
422
|
}
|
|
420
|
-
|
|
423
|
+
/**
|
|
424
|
+
* @description Builds a jsonb expression like jsonb_insert, or jsonb_set
|
|
425
|
+
* @param jsonSetExpressions
|
|
426
|
+
* @param functionName
|
|
427
|
+
* @returns
|
|
428
|
+
*/
|
|
429
|
+
buildJSONBExpression(jsonSetExpressions, functionName) {
|
|
421
430
|
let jsonSetStringExpr = "";
|
|
422
431
|
jsonSetExpressions.forEach((expression, index) => {
|
|
423
432
|
const { columnName, jsonExpr } = expression;
|
|
424
433
|
if (index === 0) {
|
|
425
|
-
jsonSetStringExpr =
|
|
434
|
+
jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;
|
|
426
435
|
} else {
|
|
427
|
-
jsonSetStringExpr =
|
|
436
|
+
jsonSetStringExpr = `${functionName}(${jsonSetStringExpr},${jsonExpr})`;
|
|
428
437
|
}
|
|
429
438
|
});
|
|
430
439
|
return jsonSetStringExpr;
|
|
@@ -472,13 +481,13 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
472
481
|
const attributes = {
|
|
473
482
|
originalString: groupResult,
|
|
474
483
|
path: attributesFromGroup[0].trim(),
|
|
475
|
-
value: attributesFromGroup
|
|
484
|
+
value: attributesFromGroup.slice(1).join(",").trim(),
|
|
476
485
|
functionExpr: ""
|
|
477
486
|
};
|
|
478
487
|
if (columnType == "array") {
|
|
479
488
|
attributes["functionExpr"] = this.buildArrayAppendExpr(attributes);
|
|
480
489
|
} else {
|
|
481
|
-
attributes["functionExpr"] = this.
|
|
490
|
+
attributes["functionExpr"] = this.buildJsonbInsertExpr(attributes);
|
|
482
491
|
}
|
|
483
492
|
return attributes;
|
|
484
493
|
}
|
|
@@ -489,16 +498,45 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
489
498
|
const columnName = arrayPath.shift();
|
|
490
499
|
return `ARRAY_APPEND("${columnName}",${params.value})`;
|
|
491
500
|
}
|
|
492
|
-
|
|
501
|
+
buildJsonbInsertExpr(params) {
|
|
493
502
|
const arrayPath = params.path.split(".");
|
|
494
503
|
const columnName = arrayPath.shift();
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
504
|
+
const jsonbInsertExpressions = this.getExpressionsByDefinitionForJSONBInsert(
|
|
505
|
+
columnName,
|
|
506
|
+
params.value
|
|
507
|
+
);
|
|
508
|
+
const expressions = this.buildJSONBExpression(
|
|
509
|
+
jsonbInsertExpressions,
|
|
510
|
+
"jsonb_insert"
|
|
511
|
+
);
|
|
512
|
+
return expressions;
|
|
513
|
+
}
|
|
514
|
+
getExpressionsByDefinitionForJSONBInsert(columnName, value) {
|
|
515
|
+
const jsonbInsertExpressions = [];
|
|
516
|
+
try {
|
|
517
|
+
const parsedValue = JSON.parse(value);
|
|
518
|
+
if (Array.isArray(parsedValue)) {
|
|
519
|
+
parsedValue.forEach((arrayValue) => {
|
|
520
|
+
jsonbInsertExpressions.push({
|
|
521
|
+
jsonExpr: `'{0}','${this.serializeJSONValue(
|
|
522
|
+
arrayValue
|
|
523
|
+
)}'`,
|
|
524
|
+
columnName: `"${columnName}"`
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
} else {
|
|
528
|
+
jsonbInsertExpressions.push({
|
|
529
|
+
jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,
|
|
530
|
+
columnName: `"${columnName}"`
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
} catch (error) {
|
|
534
|
+
jsonbInsertExpressions.push({
|
|
535
|
+
jsonExpr: `'{0}','${value}'`,
|
|
536
|
+
columnName: `"${columnName}"`
|
|
537
|
+
});
|
|
501
538
|
}
|
|
539
|
+
return jsonbInsertExpressions;
|
|
502
540
|
}
|
|
503
541
|
getInsertExprFromJsonbDef(queryValue, columnType) {
|
|
504
542
|
const listAppendParams = this.getListAppendDefFromValue(
|
|
@@ -522,15 +560,15 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
522
560
|
if (typeof action.value == "string" && action.value.includes("list_append")) {
|
|
523
561
|
action.path = action.path.split(".")[0];
|
|
524
562
|
const column = columns[action.path];
|
|
563
|
+
action.value = this.replaceExpressionAttributeValuesForDynamoFunctions(
|
|
564
|
+
action.value,
|
|
565
|
+
options
|
|
566
|
+
);
|
|
525
567
|
action.value = this.getInsertExprFromJsonbDef(
|
|
526
568
|
action.value,
|
|
527
569
|
column.type
|
|
528
570
|
);
|
|
529
571
|
action.dynamoFuncName = "list_append";
|
|
530
|
-
action.value = this.replaceExpressionAttributeValuesForDynamoFunctions(
|
|
531
|
-
action.value,
|
|
532
|
-
options
|
|
533
|
-
);
|
|
534
572
|
} else {
|
|
535
573
|
action.value = this.replaceExpressionAttributeValues(
|
|
536
574
|
action.value,
|
|
@@ -559,7 +597,7 @@ var PostgresqlClientService = class extends QueryService {
|
|
|
559
597
|
const valueSerialized = this.serializeJSONValue(
|
|
560
598
|
expressionAttributeValues[exprAttribute]
|
|
561
599
|
);
|
|
562
|
-
value = value.replace(exprAttribute,
|
|
600
|
+
value = value.replace(exprAttribute, `${valueSerialized}`);
|
|
563
601
|
});
|
|
564
602
|
}
|
|
565
603
|
return value;
|
|
@@ -689,4 +727,4 @@ var PostgreSqlCrudService = class extends PostgresqlClientService {
|
|
|
689
727
|
|
|
690
728
|
export { PostgreSqlCrudService };
|
|
691
729
|
//# sourceMappingURL=out.js.map
|
|
692
|
-
//# sourceMappingURL=postgreSqlCrud.service-
|
|
730
|
+
//# sourceMappingURL=postgreSqlCrud.service-GXH7ZQZY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport format from 'pg-format';\nimport { QueryResult } from 'pg';\nimport {\n AggregateFunction,\n DbPoolClient,\n FilterLogicOperator,\n} from '../../../types';\nimport {\n ICompositeFilter,\n IFilter,\n IFindOptions,\n IFindPagination,\n ISorting,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport QueryService from './query.service';\nimport {\n FILTER_LOGIC_OPERATORS,\n SORT_DIRECTIONS,\n POSTGRES_FILTER_OPERATOR_MAP,\n DEFAULT_PG_SCHEMA,\n FilterOperator,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport { CrudSchema } from '../../../schemas';\nimport { getTableName } from '../../../helpers/tableHelper';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPoolClient) {\n super(poolClient);\n this.crudSchema = tableSchema;\n }\n\n get dbSchema() {\n return this.crudSchema.schema || DEFAULT_PG_SCHEMA;\n }\n\n get tableName() {\n return (\n getTableName(this.crudSchema.table, 'alias') ||\n getTableName(this.crudSchema.table)\n );\n }\n\n getWildcardValue(operator: FilterOperator, value: string): string {\n if (\n operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS\n ) {\n return '%' + value + '%';\n } else if (operator === FilterOperator.STARTS_WITH) {\n return value + '%';\n } else {\n return value;\n }\n }\n\n private buildClause(\n operator: FilterOperator,\n attribute: string,\n value: any,\n ): string {\n const formattedValue = format.literal(value);\n operator = operator\n ? (operator.toUpperCase() as FilterOperator)\n : FilterOperator.EQUAL;\n const postgresOperator = POSTGRES_FILTER_OPERATOR_MAP[operator];\n\n if (!postgresOperator)\n throw new Error(`Unsupported filter operator: ${operator}`);\n\n const filterProperty = format.ident(attribute);\n const columnExists = !!this.crudSchema.columns[attribute];\n const columnType =\n columnExists && this.crudSchema.columns[attribute]?.type;\n const property = columnExists\n ? filterProperty\n : `(\"qvAttributes\" ->> '${attribute}')`;\n\n if (operator === FilterOperator.IN) {\n const formattedValues = Array.isArray(value)\n ? value.map(format.literal)\n : [formattedValue];\n return `${property} ${postgresOperator} (${formattedValues.join(\n ', ',\n )})`;\n }\n\n if (operator === FilterOperator.BETWEEN) {\n return `${property} ${postgresOperator} ${value[0]} AND ${value[1]}`;\n }\n\n /**\n * ? Additional filter to avoid error when column accepts null values.\n */\n if (operator === FilterOperator.NOT_EQUAL && value !== null) {\n return `(${property} ${postgresOperator} ${format.literal(\n value,\n )} OR ${property} IS NULL)`;\n }\n\n if (\n operator === FilterOperator.NOT_EXIST ||\n operator === FilterOperator.EXIST\n ) {\n return `${property} ${postgresOperator}`;\n }\n\n if (\n (operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS) &&\n columnType === 'array'\n ) {\n const filterValue =\n typeof value === 'number' ? value : `'${value}'`;\n let filterString = `${filterValue} = ANY(${property})`;\n\n if (operator === FilterOperator.NOT_CONTAINS) {\n if (value === null) {\n filterString = `(NOT (${filterString}))`;\n } else {\n filterString = `(NOT (${filterString}) or ${property} IS NULL)`;\n }\n }\n return filterString;\n }\n\n const wildcardValue = this.getWildcardValue(operator, value);\n return `${property} ${postgresOperator} ${format.literal(\n wildcardValue,\n )}`;\n }\n\n private buildFilterClause(\n filters: IFilter[] | ICompositeFilter,\n logicOperator?: FilterLogicOperator,\n ): string {\n if (Array.isArray(filters)) {\n const filterClauses = filters.map((filter) => {\n return this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.value,\n );\n });\n return filterClauses.join(\n ` ${logicOperator ?? FILTER_LOGIC_OPERATORS.AND} `,\n );\n } else {\n return this.buildQueryByClause(filters);\n }\n }\n\n private isCompositeFilter = function (value: any) {\n return 'OR' in value || 'AND' in value;\n };\n\n buildQueryByClause(filters: IFilter[] | ICompositeFilter): string {\n let filterClauses: string = '';\n let isFirstFilter = true;\n\n for (const [key, value] of Object.entries(filters)) {\n if (!isFirstFilter) {\n filterClauses += key === 'AND' ? ' AND ' : ' OR ';\n }\n\n if (this.isCompositeFilter(value)) {\n filterClauses += '(';\n filterClauses += this.buildQueryByClause(\n value as ICompositeFilter,\n );\n filterClauses += ')';\n } else {\n (value as IFilter[]).forEach((filter: IFilter) => {\n let clause = '';\n if (this.isCompositeFilter(filter)) {\n clause = `(${this.buildQueryByClause(\n filter as ICompositeFilter,\n )})`;\n } else {\n clause = this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.value,\n );\n }\n filterClauses += `${clause} ${key} `;\n });\n }\n\n isFirstFilter = false;\n }\n\n filterClauses = filterClauses.replace(/\\s+(AND|OR)\\s*$/, '');\n return filterClauses;\n }\n\n private formatOrderByItem(sort: ISorting): string {\n return `${format.ident(sort.column)} ${\n sort.direction || SORT_DIRECTIONS.ASC\n }`;\n }\n\n private buildOrderByClause(querySorting: ISorting[]): string {\n try {\n return querySorting.map(this.formatOrderByItem).join(', ');\n } catch (error) {\n return '';\n }\n }\n\n formatArray(array: any[]) {\n const isNumberArray = typeof array[0] === 'number';\n if (isNumberArray) {\n return `{${array.join(',')}}`;\n } else {\n return `{${array.map((val) => `\"${val}\"`).join(',')}}`;\n }\n }\n\n formatValue(value: any) {\n if (Array.isArray(value)) {\n if (!value?.length) return '{}';\n const isNumberArray = typeof value[0] === 'number';\n if (isNumberArray) {\n return `{${value.join(',')}}`;\n } else {\n return `{${value.map((val: any) => `\"${val}\"`).join(',')}}`;\n }\n }\n return value;\n }\n\n async createCommand(data: any[]): Promise<any> {\n const keys = Object.keys(data[0]); // Assuming all objects have the same keys\n const values = data.map((item) =>\n keys.map((key) => this.formatValue(item[key])),\n );\n\n const query = format(\n `INSERT INTO ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n const isValidArrayFilters = Array.isArray(filters) && filters?.length;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n if (isValidArrayFilters || isValidCompositeFilters)\n query += ` WHERE ${this.buildFilterClause(filters)}`;\n return query;\n }\n\n addOrderByToQuery(query: string, orderBy?: ISorting[]): string {\n if (orderBy) query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;\n return query;\n }\n\n private addPaginationToQuery(\n query: string,\n pagination?: IFindPagination,\n ): string {\n if (pagination) {\n const { limit, from } = pagination;\n if (limit) query += ` LIMIT ${limit}`;\n if (from) query += ` OFFSET ${from}`;\n }\n return query;\n }\n\n private getSelectClause(\n aggregateFunction: AggregateFunction | undefined,\n fields: string[] = [],\n ) {\n if (aggregateFunction)\n return `CAST(${aggregateFunction}(1) AS INTEGER) AS \"${buildAggFunctionAlias(\n aggregateFunction,\n )}\"`;\n if (!fields?.length) return '*';\n\n return this.parseFields(fields).join(', ');\n }\n\n private parseFields(fields: String[]): String[] {\n const columnsFromSchema: String[] = Object.keys(\n this.crudSchema.columns,\n );\n const attributes: String[] = fields\n .filter((field) => columnsFromSchema.indexOf(field) !== -1)\n .map((field) => `\"${field}\"`);\n\n fields\n .filter((field) => columnsFromSchema.indexOf(field) === -1)\n .forEach((field) => {\n attributes.push(`\"qvAttributes\" ->> '${field}' as \"${field}\"`);\n });\n return attributes;\n }\n\n async findCommand(options: IFindOptions = {}): Promise<T[]> {\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${format.ident(this.dbSchema)}.${format.ident(this.tableName)}`;\n query = this.addFiltersToQuery(query, options.filters);\n if (!options.aggregateFunction) {\n query = this.addOrderByToQuery(query, options.sorting);\n query = this.addPaginationToQuery(query, options.pagination);\n }\n return (await this.runQuery(query)).rows;\n }\n\n sanitizeValue(value: any): string {\n if (Array.isArray(value)) {\n if (value.length === 0) '[]';\n const formattedArray = value\n .map((item) => {\n if (typeof item === 'string') {\n return `'${item}'`;\n } else if (typeof item === 'object') {\n return JSON.stringify(item);\n } else {\n return item;\n }\n })\n .join(',');\n\n return JSON.stringify(formattedArray);\n } else {\n return format.literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = format.literal(this.formatValue(value));\n return `${format.ident(key)} = ${dbValue}`;\n });\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n private buildFilterClauseForFilterGroups(\n filterGroups: IFilter[][],\n ): string {\n const filterClauses = filterGroups.map((filterGroup) => {\n return `(${this.buildFilterClause(filterGroup)})`;\n });\n return filterClauses.join(' OR ');\n }\n\n async deleteCommand(\n filters?: ICompositeFilter | IFilter[] | IFilter[][],\n useFilterGroups: boolean = false,\n ): Promise<QueryResult<any>> {\n let query = `DELETE FROM ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )}`;\n if (filters) {\n query += ' WHERE ';\n\n if (useFilterGroups) {\n query += this.buildFilterClauseForFilterGroups(\n filters as IFilter[][],\n );\n } else {\n query += this.buildFilterClause(\n filters as ICompositeFilter | IFilter[],\n );\n }\n }\n\n return this.runQuery(query);\n }\n\n query(queryText: string, values?: any[]) {\n return this.runQuery(queryText, values);\n }\n\n public async updateExpressionCommand(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: Partial<IUpdateExpressionsOptions> = {},\n ) {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const set = actions.SET || [];\n const add = actions.ADD || [];\n const columns = this.crudSchema.columns;\n\n const setValues = this.replacePathAndValueByAttributeNames(\n set,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.SET,\n );\n const addValues = this.replacePathAndValueByAttributeNames(\n add,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.ADD,\n );\n\n const setValuesAndAddValues: any = setValues.concat(addValues);\n\n const updateClauses: any = [];\n const jsonSetExpressionGroup: any = {};\n const queryFunctions: any = [];\n\n setValuesAndAddValues.forEach((expression: any) => {\n const { path, value, createNewColumn, actionName, dynamoFuncName } =\n expression;\n\n //Dynamo functions replacement\n if (dynamoFuncName) {\n queryFunctions.push({ path, value, dynamoFuncName });\n }\n\n if (path.includes('.') && !dynamoFuncName) {\n const jsonExpr = this.getJSONBSetExpressionByAction(\n path,\n value,\n {\n createNewColumn,\n actionName,\n },\n );\n const columnName: string = jsonExpr.columnName;\n if (!jsonSetExpressionGroup[columnName]) {\n jsonSetExpressionGroup[columnName] = [jsonExpr];\n } else {\n jsonSetExpressionGroup[columnName].push(jsonExpr);\n }\n } else if (!dynamoFuncName) {\n let expValue;\n const column = this.crudSchema.columns[path];\n if (column?.type == undefined)\n throw `Column type definition for column: (${path}) must be in the CrudSchema`;\n let formattedValue;\n switch (column.type) {\n case 'object':\n {\n const valueSerialized = `${JSON.stringify(\n value,\n ).replace(/'/g, \"''\")}`;\n expValue = `'${valueSerialized}'::jsonb`;\n }\n break;\n case 'array':\n formattedValue = format.literal(value);\n expValue = `ARRAY[${formattedValue}]`;\n break;\n default:\n formattedValue = format.literal(value);\n expValue = formattedValue;\n break;\n }\n this.crudSchema.columns;\n updateClauses.push(`${format.ident(path)} = ${expValue}`);\n }\n });\n\n if (Object.keys(jsonSetExpressionGroup).length > 0) {\n Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {\n const jsonSetExpression = this.buildJSONBExpression(\n jsonSetExpressionGroup[groupIndex],\n 'jsonb_set',\n );\n\n updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);\n });\n }\n\n //This is for dynamo functions transformed to postgresql functions\n if (queryFunctions.length > 0) {\n queryFunctions.forEach((queryFunction: any) => {\n updateClauses.push(\n `${format.ident(queryFunction.path)} = ${\n queryFunction.value\n }`,\n );\n });\n }\n\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n /**\n * @description Builds a jsonb expression like jsonb_insert, or jsonb_set\n * @param jsonSetExpressions\n * @param functionName\n * @returns\n */\n private buildJSONBExpression(\n jsonSetExpressions: any,\n functionName: string,\n ) {\n let jsonSetStringExpr = '';\n jsonSetExpressions.forEach((expression: any, index: number) => {\n const { columnName, jsonExpr } = expression;\n if (index === 0) {\n jsonSetStringExpr = `${functionName}(${columnName},${jsonExpr})`;\n } else {\n jsonSetStringExpr = `${functionName}(${jsonSetStringExpr},${jsonExpr})`;\n }\n });\n return jsonSetStringExpr;\n }\n\n /**\n * @description Serializes a JSON value\n * @param value\n * @returns\n */\n private serializeJSONValue(value: any) {\n const valueSerialized =\n typeof value == 'object'\n ? `${JSON.stringify(value).replace(/'/g, \"''\")}`\n : value;\n return valueSerialized;\n }\n\n private getJSONBSetExpressionByAction(\n path: string,\n value: any,\n options: any,\n ) {\n path = path.replace(/\\[(\\d+)\\]/g, '.$1');\n const pathSplitted = path.split('.');\n const parentPath = pathSplitted[0];\n const { createNewColumn, actionName } = options;\n\n const pathSerialized = pathSplitted.slice(1).join(',');\n const valueSerialized = `'${JSON.stringify(value).replace(\n /'/g,\n \"''\",\n )}'`;\n\n if (actionName == DYNAMO_DB_UPDATE_ACTIONS.ADD) {\n if (typeof value != 'string' && !isNaN(value)) {\n const resultExpr = {\n jsonExpr: `'{${pathSerialized}}',to_jsonb(COALESCE((\"${parentPath}\"#>'{${pathSerialized}}')::numeric,0) + ${valueSerialized})`,\n columnName: `\"${parentPath}\"`,\n };\n return resultExpr;\n }\n }\n return {\n jsonExpr: `'{${pathSerialized}}',${valueSerialized},${createNewColumn}`,\n columnName: `\"${parentPath}\"`,\n };\n }\n\n private getListAppendDefFromValue(queryValue: string, columnType: string) {\n const regexListAppend = /list_append\\(([^)]+)\\)/gm;\n const listAppendString = 'list_append(';\n\n const matchList = queryValue.match(regexListAppend) || [];\n const groupResult = matchList[0];\n\n if (groupResult) {\n const attributesFromGroup = groupResult\n .slice(listAppendString.length, -1)\n .split(',');\n const attributes = {\n originalString: groupResult,\n path: attributesFromGroup[0].trim(),\n value: attributesFromGroup.slice(1).join(',').trim(),\n functionExpr: '',\n };\n if (columnType == 'array') {\n attributes['functionExpr'] =\n this.buildArrayAppendExpr(attributes);\n } else {\n attributes['functionExpr'] =\n this.buildJsonbInsertExpr(attributes);\n }\n return attributes;\n }\n\n return null;\n }\n\n private buildArrayAppendExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n return `ARRAY_APPEND(\"${columnName}\",${params.value})`;\n }\n\n private buildJsonbInsertExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n const jsonbInsertExpressions =\n this.getExpressionsByDefinitionForJSONBInsert(\n columnName,\n params.value,\n );\n\n const expressions = this.buildJSONBExpression(\n jsonbInsertExpressions,\n 'jsonb_insert',\n );\n return expressions;\n }\n\n private getExpressionsByDefinitionForJSONBInsert(\n columnName: string,\n value: string,\n ) {\n const jsonbInsertExpressions = [];\n try {\n const parsedValue = JSON.parse(value);\n if (Array.isArray(parsedValue)) {\n parsedValue.forEach((arrayValue) => {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${this.serializeJSONValue(\n arrayValue,\n )}'`,\n columnName: `\"${columnName}\"`,\n });\n });\n } else {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${this.serializeJSONValue(parsedValue)}'`,\n columnName: `\"${columnName}\"`,\n });\n }\n } catch (error) {\n jsonbInsertExpressions.push({\n jsonExpr: `'{0}','${value}'`,\n columnName: `\"${columnName}\"`,\n });\n }\n return jsonbInsertExpressions;\n }\n\n private getInsertExprFromJsonbDef(queryValue: string, columnType: string) {\n const listAppendParams = this.getListAppendDefFromValue(\n queryValue,\n columnType,\n );\n if (listAppendParams != null) {\n queryValue = queryValue.replace(\n listAppendParams.originalString,\n listAppendParams.functionExpr,\n );\n }\n\n return queryValue;\n }\n\n private replacePathAndValueByAttributeNames(\n actions: any[],\n options: IUpdateExpressionsOptions,\n columns: any,\n actionName: string,\n ) {\n return actions.map((action) => {\n action.path = this.replaceExpressionAttributeNames(\n action.path,\n options,\n );\n if (\n typeof action.value == 'string' &&\n action.value.includes('list_append')\n ) {\n action.path = action.path.split('.')[0];\n const column = columns[action.path];\n action.value =\n this.replaceExpressionAttributeValuesForDynamoFunctions(\n action.value,\n options,\n );\n action.value = this.getInsertExprFromJsonbDef(\n action.value,\n column.type,\n );\n action.dynamoFuncName = 'list_append';\n } else {\n action.value = this.replaceExpressionAttributeValues(\n action.value,\n options,\n );\n }\n\n action.actionName = actionName;\n action.createNewColumn = true;\n return action;\n });\n }\n\n private replaceExpressionAttributeValuesForDynamoFunctions(\n value: string,\n options: any,\n ) {\n const { expressionAttributeNames, expressionAttributeValues } = options;\n const exprAttributeNamesKeys = expressionAttributeNames\n ? Object.keys(expressionAttributeNames)\n : [];\n const exprAttributeValuesKeys = expressionAttributeValues\n ? Object.keys(expressionAttributeValues)\n : [];\n\n //Set for attribute names\n if (exprAttributeNamesKeys.length > 0) {\n exprAttributeNamesKeys.forEach((exprAttribute) => {\n value = value.replace(\n exprAttribute,\n expressionAttributeNames[exprAttribute],\n );\n });\n }\n\n //Set for attribute values\n if (exprAttributeValuesKeys.length > 0) {\n exprAttributeValuesKeys.forEach((exprAttribute) => {\n const valueSerialized = this.serializeJSONValue(\n expressionAttributeValues[exprAttribute],\n );\n value = value.replace(exprAttribute, `${valueSerialized}`);\n });\n }\n return value;\n }\n\n private replaceExpressionAttributeNames(\n path: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeNames } = options;\n\n if (expressionAttributeNames) {\n Object.keys(expressionAttributeNames).forEach(\n (attributeName: string) => {\n const attributeNameValue: string =\n expressionAttributeNames[attributeName];\n path = path.replace(attributeName, attributeNameValue);\n },\n );\n }\n return path;\n }\n\n private replaceExpressionAttributeValues(\n value: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeValues } = options;\n if (expressionAttributeValues[value] != undefined) {\n return expressionAttributeValues[value];\n }\n\n return value;\n }\n}\n","import { Client } from 'pg';\n\nexport default class ConnectionService {\n get connectionString() {\n const connectionString =\n process.env.MULTIPLATFORM_PG_CONNECTION_STRING || '';\n if (!connectionString) {\n throw new Error(\n 'MULTIPLATFORM_PG_CONNECTION_STRING environment variable must be configured',\n );\n }\n return connectionString;\n }\n\n async getClient(): Promise<Client> {\n const client: Client = new Client({\n connectionString: this.connectionString,\n });\n await client.connect();\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n client.end();\n } catch {\n // eslint-disable-next-line no-console\n console.log('Error releasing client');\n }\n }\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Client, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPoolClient } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private poolClient?: DbPoolClient) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client = await (this.poolClient\n ? this.poolClient\n : this.connectionService.getClient());\n\n try {\n const result = await client.query(queryText, values);\n return result;\n } catch (error) {\n console.log('[Postgresql-Client] Query Execution Failed:', error);\n throw error;\n } finally {\n if (!this.poolClient)\n this.connectionService.releaseClient(client as Client);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport PostgresqlClientService from './postgreSqlClient.service';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindResult,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas';\nimport { findIdColumnName } from '../../../helpers/tableHelper';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(private tableSchema: typeof CrudSchema) {\n super(tableSchema);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n normalizeInputData(inputData: any) {\n inputData.qvAttributes = {};\n for (const key in inputData) {\n if (!this.tableSchema.columns[key] && key !== 'qvAttributes') {\n inputData.qvAttributes[key] = inputData[key];\n delete inputData[key];\n } else if (\n Array.isArray(inputData[key]) &&\n this.tableSchema.columns[key]?.type !== 'array'\n ) {\n inputData[key] = JSON.stringify(inputData[key]);\n }\n }\n }\n\n getItem(data: { [key: string]: any }): any {\n const resultItem = { ...data, ...data.qvAttributes };\n delete resultItem['qvAttributes'];\n return resultItem;\n }\n\n prepareData(data: T): any {\n const inputData = { ...data } as { [key: string]: any };\n this.normalizeInputData(inputData);\n return inputData;\n }\n\n create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const inputDataArray = data.map((item) => this.prepareData(item));\n return this.createCommand(inputDataArray).then((result) => ({\n unprocessedItems: result\n .filter((r: any) => !r.success)\n .map((r: any) => r.inputData),\n }));\n } else {\n const inputData = this.prepareData(data);\n return this.createCommand([inputData]).then((result) =>\n result.rowCount ? this.getItem(result.rows[0]) : null,\n );\n }\n }\n\n findItem(findOptions: IFindOptions): Promise<T | null> {\n return this.findCommand(findOptions).then((data) => {\n return data?.length\n ? this.getItem(data[0] as { [key: string]: any })\n : null;\n });\n }\n\n private async processQueryResult(\n findOptions: IFindOptions,\n omitPagination: boolean = false,\n ): Promise<IFindResult<T>> {\n const rows = await this.findCommand(findOptions);\n const items = rows.map((row) =>\n this.getItem(row as { [key: string]: any }),\n );\n\n const { limit, from } = findOptions?.pagination || {};\n const hasMoreRecords = items.length && items.length === limit;\n const newFrom = limit && hasMoreRecords ? limit + (from || 0) : null;\n\n const result: IFindResult<T> = {\n items,\n pagination: omitPagination ? null : { limit: limit, from: newFrom },\n count: items.length,\n };\n return result;\n }\n\n async find(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions);\n }\n\n async findAll(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions, true);\n }\n\n async findCount(findOptions: IFindOptions): Promise<number> {\n const items = await this.findCommand({\n ...findOptions,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n });\n\n const aggFunctionProperty = buildAggFunctionAlias(\n AGGREGATE_FUNCTIONS.COUNT,\n );\n const item: any = items.length ? items[0] : {};\n return item[aggFunctionProperty] || 0;\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n ): Promise<any> {\n const savedRecord = await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n await this.updateCommand(filters, this.prepareData(inputData));\n return this.getItem(inputData);\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ): Promise<void> {\n await this.deleteCommand(filters, options?.filterGroups);\n }\n\n runQuery(querySentence: string, values?: any[]) {\n return super.runQuery(querySentence, values);\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n const result = await this.updateExpressionCommand(\n filters,\n actions,\n options,\n );\n return PersistenceErrorWrapper(result);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/cruds/postgresql/postgreSqlClient.service.ts","../../src/services/cruds/postgresql/connection.service.ts","../../src/services/cruds/postgresql/query.service.ts","../../src/services/cruds/postgresql/postgreSqlCrud.service.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable no-console */\n\nimport format from 'pg-format';\nimport { QueryResult } from 'pg';\nimport {\n AggregateFunction,\n DbPoolClient,\n FilterLogicOperator,\n} from '../../../types';\nimport {\n ICompositeFilter,\n IFilter,\n IFindOptions,\n IFindPagination,\n ISorting,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport QueryService from './query.service';\nimport {\n FILTER_LOGIC_OPERATORS,\n SORT_DIRECTIONS,\n POSTGRES_FILTER_OPERATOR_MAP,\n DEFAULT_PG_SCHEMA,\n FilterOperator,\n DYNAMO_DB_UPDATE_ACTIONS,\n} from '../../../utils/constants';\nimport { CrudSchema } from '../../../schemas';\nimport { getTableName } from '../../../helpers/tableHelper';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\n\nexport default class PostgresqlClientService<T> extends QueryService {\n private crudSchema: typeof CrudSchema;\n constructor(tableSchema: typeof CrudSchema, poolClient?: DbPoolClient) {\n super(poolClient);\n this.crudSchema = tableSchema;\n }\n\n get dbSchema() {\n return this.crudSchema.schema || DEFAULT_PG_SCHEMA;\n }\n\n get tableName() {\n return (\n getTableName(this.crudSchema.table, 'alias') ||\n getTableName(this.crudSchema.table)\n );\n }\n\n getWildcardValue(operator: FilterOperator, value: string): string {\n if (\n operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS\n ) {\n return '%' + value + '%';\n } else if (operator === FilterOperator.STARTS_WITH) {\n return value + '%';\n } else {\n return value;\n }\n }\n\n private buildClause(\n operator: FilterOperator,\n attribute: string,\n value: any,\n ): string {\n const formattedValue = format.literal(value);\n operator = operator\n ? (operator.toUpperCase() as FilterOperator)\n : FilterOperator.EQUAL;\n const postgresOperator = POSTGRES_FILTER_OPERATOR_MAP[operator];\n\n if (!postgresOperator)\n throw new Error(`Unsupported filter operator: ${operator}`);\n\n const filterProperty = format.ident(attribute);\n const columnExists = !!this.crudSchema.columns[attribute];\n const columnType =\n columnExists && this.crudSchema.columns[attribute]?.type;\n const property = columnExists\n ? filterProperty\n : `(\"qvAttributes\" ->> '${attribute}')`;\n\n if (operator === FilterOperator.IN) {\n const formattedValues = Array.isArray(value)\n ? value.map(format.literal)\n : [formattedValue];\n return `${property} ${postgresOperator} (${formattedValues.join(\n ', ',\n )})`;\n }\n\n if (operator === FilterOperator.BETWEEN) {\n return `${property} ${postgresOperator} ${value[0]} AND ${value[1]}`;\n }\n\n /**\n * ? Additional filter to avoid error when column accepts null values.\n */\n if (operator === FilterOperator.NOT_EQUAL && value !== null) {\n return `(${property} ${postgresOperator} ${format.literal(\n value,\n )} OR ${property} IS NULL)`;\n }\n\n if (\n operator === FilterOperator.NOT_EXIST ||\n operator === FilterOperator.EXIST\n ) {\n return `${property} ${postgresOperator}`;\n }\n\n if (\n (operator === FilterOperator.CONTAINS ||\n operator === FilterOperator.NOT_CONTAINS) &&\n columnType === 'array'\n ) {\n const filterValue =\n typeof value === 'number' ? value : `'${value}'`;\n let filterString = `${filterValue} = ANY(${property})`;\n\n if (operator === FilterOperator.NOT_CONTAINS) {\n if (value === null) {\n filterString = `(NOT (${filterString}))`;\n } else {\n filterString = `(NOT (${filterString}) or ${property} IS NULL)`;\n }\n }\n return filterString;\n }\n\n const wildcardValue = this.getWildcardValue(operator, value);\n return `${property} ${postgresOperator} ${format.literal(\n wildcardValue,\n )}`;\n }\n\n private buildFilterClause(\n filters: IFilter[] | ICompositeFilter,\n logicOperator?: FilterLogicOperator,\n ): string {\n if (Array.isArray(filters)) {\n const filterClauses = filters.map((filter) => {\n return this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.value,\n );\n });\n return filterClauses.join(\n ` ${logicOperator ?? FILTER_LOGIC_OPERATORS.AND} `,\n );\n } else {\n return this.buildQueryByClause(filters);\n }\n }\n\n private isCompositeFilter = function (value: any) {\n return 'OR' in value || 'AND' in value;\n };\n\n buildQueryByClause(filters: IFilter[] | ICompositeFilter): string {\n let filterClauses: string = '';\n let isFirstFilter = true;\n\n for (const [key, value] of Object.entries(filters)) {\n if (!isFirstFilter) {\n filterClauses += key === 'AND' ? ' AND ' : ' OR ';\n }\n\n if (this.isCompositeFilter(value)) {\n filterClauses += '(';\n filterClauses += this.buildQueryByClause(\n value as ICompositeFilter,\n );\n filterClauses += ')';\n } else {\n (value as IFilter[]).forEach((filter: IFilter) => {\n let clause = '';\n if (this.isCompositeFilter(filter)) {\n clause = `(${this.buildQueryByClause(\n filter as ICompositeFilter,\n )})`;\n } else {\n clause = this.buildClause(\n filter.operator as FilterOperator,\n filter.attribute,\n filter.value,\n );\n }\n filterClauses += `${clause} ${key} `;\n });\n }\n\n isFirstFilter = false;\n }\n\n filterClauses = filterClauses.replace(/\\s+(AND|OR)\\s*$/, '');\n return filterClauses;\n }\n\n private formatOrderByItem(sort: ISorting): string {\n return `${format.ident(sort.column)} ${\n sort.direction || SORT_DIRECTIONS.ASC\n }`;\n }\n\n private buildOrderByClause(querySorting: ISorting[]): string {\n try {\n return querySorting.map(this.formatOrderByItem).join(', ');\n } catch (error) {\n return '';\n }\n }\n\n formatArray(array: any[]) {\n const isNumberArray = typeof array[0] === 'number';\n if (isNumberArray) {\n return `{${array.join(',')}}`;\n } else {\n return `{${array.map((val) => `\"${val}\"`).join(',')}}`;\n }\n }\n\n formatValue(value: any) {\n if (Array.isArray(value)) {\n if (!value?.length) return '{}';\n const isNumberArray = typeof value[0] === 'number';\n if (isNumberArray) {\n return `{${value.join(',')}}`;\n } else {\n return `{${value.map((val: any) => `\"${val}\"`).join(',')}}`;\n }\n }\n return value;\n }\n\n async createCommand(data: any[]): Promise<any> {\n const keys = Object.keys(data[0]); // Assuming all objects have the same keys\n const values = data.map((item) =>\n keys.map((key) => this.formatValue(item[key])),\n );\n\n const query = format(\n `INSERT INTO ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} (%I) VALUES %L RETURNING *;`,\n keys,\n values,\n );\n\n return this.runQuery(query);\n }\n\n private addFiltersToQuery(\n query: string,\n filters?: IFilter[] | ICompositeFilter,\n ): string {\n if (!filters) return query;\n\n const isValidArrayFilters = Array.isArray(filters) && filters?.length;\n const isValidCompositeFilters = this.isCompositeFilter(filters);\n if (isValidArrayFilters || isValidCompositeFilters)\n query += ` WHERE ${this.buildFilterClause(filters)}`;\n return query;\n }\n\n addOrderByToQuery(query: string, orderBy?: ISorting[]): string {\n if (orderBy) query += ` ORDER BY ${this.buildOrderByClause(orderBy)}`;\n return query;\n }\n\n private addPaginationToQuery(\n query: string,\n pagination?: IFindPagination,\n ): string {\n if (pagination) {\n const { limit, from } = pagination;\n if (limit) query += ` LIMIT ${limit}`;\n if (from) query += ` OFFSET ${from}`;\n }\n return query;\n }\n\n private getSelectClause(\n aggregateFunction: AggregateFunction | undefined,\n fields: string[] = [],\n ) {\n if (aggregateFunction)\n return `CAST(${aggregateFunction}(1) AS INTEGER) AS \"${buildAggFunctionAlias(\n aggregateFunction,\n )}\"`;\n if (!fields?.length) return '*';\n\n return this.parseFields(fields).join(', ');\n }\n\n private parseFields(fields: String[]): String[] {\n const columnsFromSchema: String[] = Object.keys(\n this.crudSchema.columns,\n );\n const attributes: String[] = fields\n .filter((field) => columnsFromSchema.indexOf(field) !== -1)\n .map((field) => `\"${field}\"`);\n\n fields\n .filter((field) => columnsFromSchema.indexOf(field) === -1)\n .forEach((field) => {\n attributes.push(`\"qvAttributes\" ->> '${field}' as \"${field}\"`);\n });\n return attributes;\n }\n\n async findCommand(options: IFindOptions = {}): Promise<T[]> {\n let query = `SELECT ${this.getSelectClause(\n options.aggregateFunction,\n options.fields,\n )} FROM ${format.ident(this.dbSchema)}.${format.ident(this.tableName)}`;\n query = this.addFiltersToQuery(query, options.filters);\n if (!options.aggregateFunction) {\n query = this.addOrderByToQuery(query, options.sorting);\n query = this.addPaginationToQuery(query, options.pagination);\n }\n return (await this.runQuery(query)).rows;\n }\n\n sanitizeValue(value: any): string {\n if (Array.isArray(value)) {\n if (value.length === 0) '[]';\n const formattedArray = value\n .map((item) => {\n if (typeof item === 'string') {\n return `'${item}'`;\n } else if (typeof item === 'object') {\n return JSON.stringify(item);\n } else {\n return item;\n }\n })\n .join(',');\n\n return JSON.stringify(formattedArray);\n } else {\n return format.literal(value);\n }\n }\n\n async updateCommand(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<any>,\n ): Promise<QueryResult<any>> {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const updateClauses = Object.entries(data).map(([key, value]) => {\n const dbValue = format.literal(this.formatValue(value));\n return `${format.ident(key)} = ${dbValue}`;\n });\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n private buildFilterClauseForFilterGroups(\n filterGroups: IFilter[][],\n ): string {\n const filterClauses = filterGroups.map((filterGroup) => {\n return `(${this.buildFilterClause(filterGroup)})`;\n });\n return filterClauses.join(' OR ');\n }\n\n async deleteCommand(\n filters?: ICompositeFilter | IFilter[] | IFilter[][],\n useFilterGroups: boolean = false,\n ): Promise<QueryResult<any>> {\n let query = `DELETE FROM ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )}`;\n if (filters) {\n query += ' WHERE ';\n\n if (useFilterGroups) {\n query += this.buildFilterClauseForFilterGroups(\n filters as IFilter[][],\n );\n } else {\n query += this.buildFilterClause(\n filters as ICompositeFilter | IFilter[],\n );\n }\n }\n\n return this.runQuery(query);\n }\n\n query(queryText: string, values?: any[]) {\n return this.runQuery(queryText, values);\n }\n\n public async updateExpressionCommand(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: Partial<IUpdateExpressionsOptions> = {},\n ) {\n let query = `UPDATE ${format.ident(this.dbSchema)}.${format.ident(\n this.tableName,\n )} SET`;\n\n const set = actions.SET || [];\n const add = actions.ADD || [];\n const columns = this.crudSchema.columns;\n\n const setValues = this.replacePathAndValueByAttributeNames(\n set,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.SET,\n );\n const addValues = this.replacePathAndValueByAttributeNames(\n add,\n options,\n columns,\n DYNAMO_DB_UPDATE_ACTIONS.ADD,\n );\n\n const setValuesAndAddValues: any = setValues.concat(addValues);\n\n const updateClauses: any = [];\n const jsonSetExpressionGroup: any = {};\n const queryFunctions: any = [];\n\n setValuesAndAddValues.forEach((expression: any) => {\n const { path, value, createNewColumn, actionName, dynamoFuncName } =\n expression;\n\n //Dynamo functions replacement\n if (dynamoFuncName) {\n queryFunctions.push({ path, value, dynamoFuncName });\n }\n\n if (path.includes('.') && !dynamoFuncName) {\n const jsonExpr = this.getJSONBSetExpressionByAction(\n path,\n value,\n {\n createNewColumn,\n actionName,\n },\n );\n const columnName: string = jsonExpr.columnName;\n if (!jsonSetExpressionGroup[columnName]) {\n jsonSetExpressionGroup[columnName] = [jsonExpr];\n } else {\n jsonSetExpressionGroup[columnName].push(jsonExpr);\n }\n } else if (!dynamoFuncName) {\n let expValue;\n const column = this.crudSchema.columns[path];\n if (column?.type == undefined)\n throw `Column type definition for column: (${path}) must be in the CrudSchema`;\n let formattedValue;\n switch (column.type) {\n case 'object':\n {\n const valueSerialized =\n this.serializeJSONValue(value);\n expValue = `'${valueSerialized}'::jsonb`;\n }\n break;\n case 'array':\n formattedValue = format.literal(value);\n expValue = `ARRAY[${formattedValue}]`;\n break;\n default:\n formattedValue = format.literal(value);\n expValue = formattedValue;\n break;\n }\n this.crudSchema.columns;\n updateClauses.push(`${format.ident(path)} = ${expValue}`);\n }\n });\n\n if (Object.keys(jsonSetExpressionGroup).length > 0) {\n Object.keys(jsonSetExpressionGroup).forEach((groupIndex) => {\n const jsonSetExpression = this.buildJSONBExpression(\n jsonSetExpressionGroup[groupIndex],\n );\n\n updateClauses.push(`${groupIndex} = ${jsonSetExpression}`);\n });\n }\n\n //This is for dynamo functions transformed to postgresql functions\n if (queryFunctions.length > 0) {\n queryFunctions.forEach((queryFunction: any) => {\n updateClauses.push(\n `${format.ident(queryFunction.path)} = ${\n queryFunction.value\n }`,\n );\n });\n }\n\n query += ` ${updateClauses.join(', ')}`;\n\n query += ' WHERE ';\n query += this.buildFilterClause(filters);\n\n return this.runQuery(query);\n }\n\n private buildJSONBExpression(jsonSetExpressions: any) {\n let jsonSetStringExpr = '';\n jsonSetExpressions.forEach((expression: any, index: number) => {\n const { columnName, jsonExpr } = expression;\n if (index === 0) {\n jsonSetStringExpr = `jsonb_set(${columnName},${jsonExpr})`;\n } else {\n jsonSetStringExpr = `jsonb_set(${jsonSetStringExpr},${jsonExpr})`;\n }\n });\n return jsonSetStringExpr;\n }\n\n /**\n * @description Serializes a JSON value\n * @param value\n * @returns\n */\n private serializeJSONValue(value: any) {\n const valueSerialized =\n typeof value == 'object'\n ? `${JSON.stringify(value).replace(/'/g, \"''\")}`\n : value;\n return valueSerialized;\n }\n\n private getJSONBSetExpressionByAction(\n path: string,\n value: any,\n options: any,\n ) {\n path = path.replace(/\\[(\\d+)\\]/g, '.$1');\n const pathSplitted = path.split('.');\n const parentPath = pathSplitted[0];\n const { createNewColumn, actionName } = options;\n\n const pathSerialized = pathSplitted.slice(1).join(',');\n const valueSerialized = `'${JSON.stringify(value).replace(\n /'/g,\n \"''\",\n )}'`;\n\n if (actionName == DYNAMO_DB_UPDATE_ACTIONS.ADD) {\n if (typeof value != 'string' && !isNaN(value)) {\n const resultExpr = {\n jsonExpr: `'{${pathSerialized}}',to_jsonb(COALESCE((\"${parentPath}\"#>'{${pathSerialized}}')::numeric,0) + ${valueSerialized})`,\n columnName: `\"${parentPath}\"`,\n };\n return resultExpr;\n }\n }\n return {\n jsonExpr: `'{${pathSerialized}}',${valueSerialized},${createNewColumn}`,\n columnName: `\"${parentPath}\"`,\n };\n }\n\n private getListAppendDefFromValue(queryValue: string, columnType: string) {\n const regexListAppend = /list_append\\(([^)]+)\\)/gm;\n const listAppendString = 'list_append(';\n\n const matchList = queryValue.match(regexListAppend) || [];\n const groupResult = matchList[0];\n\n if (groupResult) {\n const attributesFromGroup = groupResult\n .slice(listAppendString.length, -1)\n .split(',');\n const attributes = {\n originalString: groupResult,\n path: attributesFromGroup[0].trim(),\n value: attributesFromGroup[1].trim(),\n functionExpr: '',\n };\n if (columnType == 'array') {\n attributes['functionExpr'] =\n this.buildArrayAppendExpr(attributes);\n } else {\n attributes['functionExpr'] = this.buildJsonbExpr(attributes);\n }\n return attributes;\n }\n\n return null;\n }\n\n private buildArrayAppendExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n return `ARRAY_APPEND(\"${columnName}\",${params.value})`;\n }\n\n private buildJsonbExpr(params: any) {\n const arrayPath = params.path.split('.');\n const columnName = arrayPath.shift();\n if (arrayPath.length > 0) {\n return `jsonb_insert(\"${columnName}\", '{${arrayPath.join(\n ',',\n )},0}', ${params.value})`;\n } else {\n return `jsonb_insert(\"${columnName}\",'{0}', ${params.value})`;\n }\n }\n\n private getInsertExprFromJsonbDef(queryValue: string, columnType: string) {\n const listAppendParams = this.getListAppendDefFromValue(\n queryValue,\n columnType,\n );\n if (listAppendParams != null) {\n queryValue = queryValue.replace(\n listAppendParams.originalString,\n listAppendParams.functionExpr,\n );\n }\n\n return queryValue;\n }\n\n private replacePathAndValueByAttributeNames(\n actions: any[],\n options: IUpdateExpressionsOptions,\n columns: any,\n actionName: string,\n ) {\n return actions.map((action) => {\n action.path = this.replaceExpressionAttributeNames(\n action.path,\n options,\n );\n if (\n typeof action.value == 'string' &&\n action.value.includes('list_append')\n ) {\n action.path = action.path.split('.')[0];\n const column = columns[action.path];\n\n action.value = this.getInsertExprFromJsonbDef(\n action.value,\n column.type,\n );\n action.dynamoFuncName = 'list_append';\n action.value =\n this.replaceExpressionAttributeValuesForDynamoFunctions(\n action.value,\n options,\n );\n } else {\n action.value = this.replaceExpressionAttributeValues(\n action.value,\n options,\n );\n }\n\n action.actionName = actionName;\n action.createNewColumn = true;\n return action;\n });\n }\n\n private replaceExpressionAttributeValuesForDynamoFunctions(\n value: string,\n options: any,\n ) {\n const { expressionAttributeNames, expressionAttributeValues } = options;\n const exprAttributeNamesKeys = expressionAttributeNames\n ? Object.keys(expressionAttributeNames)\n : [];\n const exprAttributeValuesKeys = expressionAttributeValues\n ? Object.keys(expressionAttributeValues)\n : [];\n\n //Set for attribute names\n if (exprAttributeNamesKeys.length > 0) {\n exprAttributeNamesKeys.forEach((exprAttribute) => {\n value = value.replace(\n exprAttribute,\n expressionAttributeNames[exprAttribute],\n );\n });\n }\n\n //Set for attribute values\n if (exprAttributeValuesKeys.length > 0) {\n exprAttributeValuesKeys.forEach((exprAttribute) => {\n const valueSerialized = this.serializeJSONValue(\n expressionAttributeValues[exprAttribute],\n );\n value = value.replace(exprAttribute, `'${valueSerialized}'`);\n });\n }\n return value;\n }\n\n private replaceExpressionAttributeNames(\n path: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeNames } = options;\n\n if (expressionAttributeNames) {\n Object.keys(expressionAttributeNames).forEach(\n (attributeName: string) => {\n const attributeNameValue: string =\n expressionAttributeNames[attributeName];\n path = path.replace(attributeName, attributeNameValue);\n },\n );\n }\n return path;\n }\n\n private replaceExpressionAttributeValues(\n value: string,\n options: IUpdateExpressionsOptions,\n ) {\n const { expressionAttributeValues } = options;\n if (expressionAttributeValues[value] != undefined) {\n return expressionAttributeValues[value];\n }\n\n return value;\n }\n}\n","import { Client } from 'pg';\n\nexport default class ConnectionService {\n get connectionString() {\n const connectionString =\n process.env.MULTIPLATFORM_PG_CONNECTION_STRING || '';\n if (!connectionString) {\n throw new Error(\n 'MULTIPLATFORM_PG_CONNECTION_STRING environment variable must be configured',\n );\n }\n return connectionString;\n }\n\n async getClient(): Promise<Client> {\n const client: Client = new Client({\n connectionString: this.connectionString,\n });\n await client.connect();\n return client;\n }\n\n releaseClient(client: Client): void {\n try {\n client.end();\n } catch {\n // eslint-disable-next-line no-console\n console.log('Error releasing client');\n }\n }\n}\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Client, QueryResult } from 'pg';\nimport ConnectionService from './connection.service';\nimport { DbPoolClient } from '../../../types';\n\nexport default class QueryService {\n private connectionService: ConnectionService;\n\n constructor(private poolClient?: DbPoolClient) {\n this.connectionService = new ConnectionService();\n }\n\n async runQuery(\n queryText: string,\n values?: any[],\n ): Promise<QueryResult<any>> {\n const client = await (this.poolClient\n ? this.poolClient\n : this.connectionService.getClient());\n\n try {\n const result = await client.query(queryText, values);\n return result;\n } catch (error) {\n console.log('[Postgresql-Client] Query Execution Failed:', error);\n throw error;\n } finally {\n if (!this.poolClient)\n this.connectionService.releaseClient(client as Client);\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport PostgresqlClientService from './postgreSqlClient.service';\nimport {\n ICompositeFilter,\n ICreateMultipleResponse,\n ICrudService,\n IFilter,\n IFindOptions,\n IFindResult,\n IRemoveOptions,\n IUpdateExpressions,\n IUpdateExpressionsOptions,\n} from '../../../interfaces';\nimport { CrudSchema } from '../../../schemas';\nimport { findIdColumnName } from '../../../helpers/tableHelper';\nimport { AGGREGATE_FUNCTIONS } from '../../../utils/constants';\nimport { buildAggFunctionAlias } from '../../../helpers/queryHelpers';\nimport { PersistenceErrorWrapper } from '../../../helpers/errorHelper';\nexport class PostgreSqlCrudService<T>\n extends PostgresqlClientService<T>\n implements ICrudService<T>\n{\n constructor(private tableSchema: typeof CrudSchema) {\n super(tableSchema);\n }\n\n private get idColumnName(): string | undefined {\n return findIdColumnName(this.tableSchema.columns);\n }\n\n normalizeInputData(inputData: any) {\n inputData.qvAttributes = {};\n for (const key in inputData) {\n if (!this.tableSchema.columns[key] && key !== 'qvAttributes') {\n inputData.qvAttributes[key] = inputData[key];\n delete inputData[key];\n } else if (\n Array.isArray(inputData[key]) &&\n this.tableSchema.columns[key]?.type !== 'array'\n ) {\n inputData[key] = JSON.stringify(inputData[key]);\n }\n }\n }\n\n getItem(data: { [key: string]: any }): any {\n const resultItem = { ...data, ...data.qvAttributes };\n delete resultItem['qvAttributes'];\n return resultItem;\n }\n\n prepareData(data: T): any {\n const inputData = { ...data } as { [key: string]: any };\n this.normalizeInputData(inputData);\n return inputData;\n }\n\n create(data: T | T[]): Promise<T | ICreateMultipleResponse> {\n if (Array.isArray(data)) {\n const inputDataArray = data.map((item) => this.prepareData(item));\n return this.createCommand(inputDataArray).then((result) => ({\n unprocessedItems: result\n .filter((r: any) => !r.success)\n .map((r: any) => r.inputData),\n }));\n } else {\n const inputData = this.prepareData(data);\n return this.createCommand([inputData]).then((result) =>\n result.rowCount ? this.getItem(result.rows[0]) : null,\n );\n }\n }\n\n findItem(findOptions: IFindOptions): Promise<T | null> {\n return this.findCommand(findOptions).then((data) => {\n return data?.length\n ? this.getItem(data[0] as { [key: string]: any })\n : null;\n });\n }\n\n private async processQueryResult(\n findOptions: IFindOptions,\n omitPagination: boolean = false,\n ): Promise<IFindResult<T>> {\n const rows = await this.findCommand(findOptions);\n const items = rows.map((row) =>\n this.getItem(row as { [key: string]: any }),\n );\n\n const { limit, from } = findOptions?.pagination || {};\n const hasMoreRecords = items.length && items.length === limit;\n const newFrom = limit && hasMoreRecords ? limit + (from || 0) : null;\n\n const result: IFindResult<T> = {\n items,\n pagination: omitPagination ? null : { limit: limit, from: newFrom },\n count: items.length,\n };\n return result;\n }\n\n async find(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions);\n }\n\n async findAll(findOptions: IFindOptions): Promise<IFindResult<T>> {\n return this.processQueryResult(findOptions, true);\n }\n\n async findCount(findOptions: IFindOptions): Promise<number> {\n const items = await this.findCommand({\n ...findOptions,\n aggregateFunction: AGGREGATE_FUNCTIONS.COUNT,\n });\n\n const aggFunctionProperty = buildAggFunctionAlias(\n AGGREGATE_FUNCTIONS.COUNT,\n );\n const item: any = items.length ? items[0] : {};\n return item[aggFunctionProperty] || 0;\n }\n\n async update(\n filters: IFilter[] | ICompositeFilter,\n data: Partial<T>,\n ): Promise<any> {\n const savedRecord = await this.findItem({ filters });\n\n const inputData: any = {\n ...savedRecord,\n ...data,\n } as {\n [key: string]: any;\n };\n\n await this.updateCommand(filters, this.prepareData(inputData));\n return this.getItem(inputData);\n }\n\n async remove(\n filters: IFilter[] | ICompositeFilter | IFilter[][],\n options: IRemoveOptions,\n ): Promise<void> {\n await this.deleteCommand(filters, options?.filterGroups);\n }\n\n runQuery(querySentence: string, values?: any[]) {\n return super.runQuery(querySentence, values);\n }\n\n async updateExpressions(\n filters: IFilter[] | ICompositeFilter,\n actions: IUpdateExpressions,\n options: IUpdateExpressionsOptions,\n ): Promise<any> {\n const result = await this.updateExpressionCommand(\n filters,\n actions,\n options,\n );\n return PersistenceErrorWrapper(result);\n }\n}\n"]}
|