@neohm/nestend 3.3.9 → 3.3.11
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/README.md +168 -67
- package/dist/admin/admin.module.d.ts.map +1 -1
- package/dist/admin/admin.module.js.map +1 -1
- package/dist/admin/controllers/admin.api.key.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.api.key.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.api.key.controller.js +6 -6
- package/dist/admin/controllers/admin.api.key.controller.js.map +1 -1
- package/dist/admin/controllers/admin.email.template.controller.d.ts +18 -0
- package/dist/admin/controllers/admin.email.template.controller.d.ts.map +1 -0
- package/dist/admin/controllers/admin.email.template.controller.js +106 -0
- package/dist/admin/controllers/admin.email.template.controller.js.map +1 -0
- package/dist/admin/controllers/admin.pdf.template.controller.d.ts +18 -0
- package/dist/admin/controllers/admin.pdf.template.controller.d.ts.map +1 -0
- package/dist/admin/controllers/admin.pdf.template.controller.js +106 -0
- package/dist/admin/controllers/admin.pdf.template.controller.js.map +1 -0
- package/dist/admin/controllers/admin.role.controller.d.ts +5 -17
- package/dist/admin/controllers/admin.role.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.role.controller.js +7 -6
- package/dist/admin/controllers/admin.role.controller.js.map +1 -1
- package/dist/admin/controllers/admin.scheduled.task.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.scheduled.task.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.scheduled.task.controller.js +6 -6
- package/dist/admin/controllers/admin.scheduled.task.controller.js.map +1 -1
- package/dist/admin/controllers/admin.scope.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.scope.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.scope.controller.js +6 -6
- package/dist/admin/controllers/admin.scope.controller.js.map +1 -1
- package/dist/admin/controllers/admin.system.user.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.system.user.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.system.user.controller.js +6 -6
- package/dist/admin/controllers/admin.system.user.controller.js.map +1 -1
- package/dist/admin/controllers/admin.tenant.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.tenant.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.tenant.controller.js +7 -7
- package/dist/admin/controllers/admin.tenant.controller.js.map +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.tenant.user.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.tenant.user.controller.js +6 -6
- package/dist/admin/controllers/admin.tenant.user.controller.js.map +1 -1
- package/dist/admin/controllers/admin.user.controller.d.ts +4 -10
- package/dist/admin/controllers/admin.user.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.user.controller.js +6 -6
- package/dist/admin/controllers/admin.user.controller.js.map +1 -1
- package/dist/admin/controllers/system.role.controller.d.ts +4 -10
- package/dist/admin/controllers/system.role.controller.d.ts.map +1 -1
- package/dist/admin/controllers/system.role.controller.js +6 -6
- package/dist/admin/controllers/system.role.controller.js.map +1 -1
- package/dist/admin/dtos/add.email.template.dto.d.ts +9 -0
- package/dist/admin/dtos/add.email.template.dto.d.ts.map +1 -0
- package/dist/admin/dtos/add.email.template.dto.js +68 -0
- package/dist/admin/dtos/add.email.template.dto.js.map +1 -0
- package/dist/admin/dtos/add.pdf.template.dto.d.ts +8 -0
- package/dist/admin/dtos/add.pdf.template.dto.d.ts.map +1 -0
- package/dist/admin/dtos/add.pdf.template.dto.js +58 -0
- package/dist/admin/dtos/add.pdf.template.dto.js.map +1 -0
- package/dist/admin/dtos/add.tenant.dto.d.ts +1 -0
- package/dist/admin/dtos/add.tenant.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.tenant.dto.js +7 -0
- package/dist/admin/dtos/add.tenant.dto.js.map +1 -1
- package/dist/admin/dtos/email.template.list.dto.d.ts +4 -0
- package/dist/admin/dtos/email.template.list.dto.d.ts.map +1 -0
- package/dist/admin/dtos/email.template.list.dto.js +8 -0
- package/dist/admin/dtos/email.template.list.dto.js.map +1 -0
- package/dist/admin/dtos/pdf.template.list.dto.d.ts +4 -0
- package/dist/admin/dtos/pdf.template.list.dto.d.ts.map +1 -0
- package/dist/admin/dtos/pdf.template.list.dto.js +8 -0
- package/dist/admin/dtos/pdf.template.list.dto.js.map +1 -0
- package/dist/admin/es6.classes.d.ts +14 -5
- package/dist/admin/es6.classes.d.ts.map +1 -1
- package/dist/admin/es6.classes.js +24 -2
- package/dist/admin/es6.classes.js.map +1 -1
- package/dist/admin/libraries/admin.role.list.processor.d.ts +11 -0
- package/dist/admin/libraries/admin.role.list.processor.d.ts.map +1 -0
- package/dist/admin/libraries/admin.role.list.processor.js +39 -0
- package/dist/admin/libraries/admin.role.list.processor.js.map +1 -0
- package/dist/admin/libraries/admin.user.list.processor.d.ts +6 -10
- package/dist/admin/libraries/admin.user.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/admin.user.list.processor.js +17 -8
- package/dist/admin/libraries/admin.user.list.processor.js.map +1 -1
- package/dist/admin/libraries/api.key.list.processor.d.ts +6 -10
- package/dist/admin/libraries/api.key.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/api.key.list.processor.js +55 -26
- package/dist/admin/libraries/api.key.list.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.list.processor.d.ts +7 -10
- package/dist/admin/libraries/client.user.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/client.user.list.processor.js +35 -25
- package/dist/admin/libraries/client.user.list.processor.js.map +1 -1
- package/dist/admin/libraries/email.template.data.processor.d.ts +13 -0
- package/dist/admin/libraries/email.template.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/email.template.data.processor.js +51 -0
- package/dist/admin/libraries/email.template.data.processor.js.map +1 -0
- package/dist/admin/libraries/email.template.list.processor.d.ts +11 -0
- package/dist/admin/libraries/email.template.list.processor.d.ts.map +1 -0
- package/dist/admin/libraries/email.template.list.processor.js +40 -0
- package/dist/admin/libraries/email.template.list.processor.js.map +1 -0
- package/dist/admin/libraries/pdf.template.data.processor.d.ts +13 -0
- package/dist/admin/libraries/pdf.template.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/pdf.template.data.processor.js +48 -0
- package/dist/admin/libraries/pdf.template.data.processor.js.map +1 -0
- package/dist/admin/libraries/pdf.template.list.processor.d.ts +11 -0
- package/dist/admin/libraries/pdf.template.list.processor.d.ts.map +1 -0
- package/dist/admin/libraries/pdf.template.list.processor.js +39 -0
- package/dist/admin/libraries/pdf.template.list.processor.js.map +1 -0
- package/dist/admin/libraries/role.list.processor.d.ts +6 -21
- package/dist/admin/libraries/role.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/role.list.processor.js +17 -32
- package/dist/admin/libraries/role.list.processor.js.map +1 -1
- package/dist/admin/libraries/scheduled.task.list.processor.d.ts +6 -10
- package/dist/admin/libraries/scheduled.task.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scheduled.task.list.processor.js +27 -10
- package/dist/admin/libraries/scheduled.task.list.processor.js.map +1 -1
- package/dist/admin/libraries/scope.list.processor.d.ts +6 -10
- package/dist/admin/libraries/scope.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/scope.list.processor.js +13 -7
- package/dist/admin/libraries/scope.list.processor.js.map +1 -1
- package/dist/admin/libraries/system.user.list.processor.d.ts +7 -10
- package/dist/admin/libraries/system.user.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/system.user.list.processor.js +34 -23
- package/dist/admin/libraries/system.user.list.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/tenant.data.processor.js +1 -0
- package/dist/admin/libraries/tenant.data.processor.js.map +1 -1
- package/dist/admin/libraries/tenant.list.processor.d.ts +6 -10
- package/dist/admin/libraries/tenant.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/tenant.list.processor.js +27 -10
- package/dist/admin/libraries/tenant.list.processor.js.map +1 -1
- package/dist/admin/services/template.service.d.ts +7 -0
- package/dist/admin/services/template.service.d.ts.map +1 -0
- package/dist/admin/services/template.service.js +34 -0
- package/dist/admin/services/template.service.js.map +1 -0
- package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/auth/helpers/auth.js +1 -1
- package/dist/auth/helpers/auth.js.map +1 -1
- package/dist/common/common.module.d.ts.map +1 -1
- package/dist/common/common.module.js +2 -0
- package/dist/common/common.module.js.map +1 -1
- package/dist/common/dtos/common.list.filter.dto.d.ts.map +1 -1
- package/dist/common/dtos/common.list.filter.dto.js +4 -0
- package/dist/common/dtos/common.list.filter.dto.js.map +1 -1
- package/dist/common/dtos/filter.dto.d.ts +0 -2
- package/dist/common/dtos/filter.dto.d.ts.map +1 -1
- package/dist/common/dtos/filter.dto.js +0 -10
- package/dist/common/dtos/filter.dto.js.map +1 -1
- package/dist/common/enums/filter.value.type.enum.d.ts +3 -1
- package/dist/common/enums/filter.value.type.enum.d.ts.map +1 -1
- package/dist/common/enums/filter.value.type.enum.js +3 -1
- package/dist/common/enums/filter.value.type.enum.js.map +1 -1
- package/dist/common/enums/sql.default.enum.d.ts +1 -0
- package/dist/common/enums/sql.default.enum.d.ts.map +1 -1
- package/dist/common/enums/sql.default.enum.js +1 -0
- package/dist/common/enums/sql.default.enum.js.map +1 -1
- package/dist/common/libraries/common.list.processor.d.ts +7 -22
- package/dist/common/libraries/common.list.processor.d.ts.map +1 -1
- package/dist/common/libraries/common.list.processor.js +14 -159
- package/dist/common/libraries/common.list.processor.js.map +1 -1
- package/dist/common/libraries/filter.operator.defaults.d.ts +4 -0
- package/dist/common/libraries/filter.operator.defaults.d.ts.map +1 -0
- package/dist/common/libraries/filter.operator.defaults.js +26 -0
- package/dist/common/libraries/filter.operator.defaults.js.map +1 -0
- package/dist/common/libraries/predicate.set.d.ts +14 -0
- package/dist/common/libraries/predicate.set.d.ts.map +1 -0
- package/dist/common/libraries/predicate.set.js +48 -0
- package/dist/common/libraries/predicate.set.js.map +1 -0
- package/dist/common/services/list.filter.service.d.ts +19 -0
- package/dist/common/services/list.filter.service.d.ts.map +1 -0
- package/dist/common/services/list.filter.service.js +225 -0
- package/dist/common/services/list.filter.service.js.map +1 -0
- package/dist/common/services/sql.service.d.ts.map +1 -1
- package/dist/common/services/sql.service.js +1 -1
- package/dist/common/services/sql.service.js.map +1 -1
- package/dist/common/types/list.types.d.ts +25 -0
- package/dist/common/types/list.types.d.ts.map +1 -1
- package/dist/constants/entity.constants.d.ts +1 -0
- package/dist/constants/entity.constants.d.ts.map +1 -1
- package/dist/constants/entity.constants.js +1 -0
- package/dist/constants/entity.constants.js.map +1 -1
- package/dist/constants/entity.maps.d.ts +2 -0
- package/dist/constants/entity.maps.d.ts.map +1 -1
- package/dist/constants/entity.maps.js +2 -0
- package/dist/constants/entity.maps.js.map +1 -1
- package/dist/document/document.module.d.ts.map +1 -1
- package/dist/document/document.module.js +3 -1
- package/dist/document/document.module.js.map +1 -1
- package/dist/document/dtos/pdf.document.options.dto.d.ts +17 -0
- package/dist/document/dtos/pdf.document.options.dto.d.ts.map +1 -0
- package/dist/document/dtos/pdf.document.options.dto.js +13 -0
- package/dist/document/dtos/pdf.document.options.dto.js.map +1 -0
- package/dist/document/dtos/pdf.template.attributes.dto.d.ts +3 -0
- package/dist/document/dtos/pdf.template.attributes.dto.d.ts.map +1 -0
- package/dist/document/dtos/pdf.template.attributes.dto.js +7 -0
- package/dist/document/dtos/pdf.template.attributes.dto.js.map +1 -0
- package/dist/document/entities/document.entity.d.ts +1 -0
- package/dist/document/entities/document.entity.d.ts.map +1 -1
- package/dist/document/entities/document.entity.js +4 -0
- package/dist/document/entities/document.entity.js.map +1 -1
- package/dist/document/entities/pdf.template.entity.d.ts +9 -0
- package/dist/document/entities/pdf.template.entity.d.ts.map +1 -0
- package/dist/document/entities/pdf.template.entity.js +38 -0
- package/dist/document/entities/pdf.template.entity.js.map +1 -0
- package/dist/document/enums/pdf.default.enum.d.ts +2 -1
- package/dist/document/enums/pdf.default.enum.d.ts.map +1 -1
- package/dist/document/enums/pdf.default.enum.js +1 -0
- package/dist/document/enums/pdf.default.enum.js.map +1 -1
- package/dist/document/es6.classes.d.ts +6 -5
- package/dist/document/es6.classes.d.ts.map +1 -1
- package/dist/document/es6.classes.js +14 -2
- package/dist/document/es6.classes.js.map +1 -1
- package/dist/document/libraries/process.pdf.document.d.ts +16 -0
- package/dist/document/libraries/process.pdf.document.d.ts.map +1 -0
- package/dist/document/libraries/process.pdf.document.js +47 -0
- package/dist/document/libraries/process.pdf.document.js.map +1 -0
- package/dist/document/services/document.service.d.ts +2 -2
- package/dist/document/services/document.service.d.ts.map +1 -1
- package/dist/document/services/document.service.js +5 -2
- package/dist/document/services/document.service.js.map +1 -1
- package/dist/document/services/pdf.template.service.d.ts +12 -0
- package/dist/document/services/pdf.template.service.d.ts.map +1 -0
- package/dist/document/services/pdf.template.service.js +57 -0
- package/dist/document/services/pdf.template.service.js.map +1 -0
- package/dist/document/types/document.types.d.ts +3 -0
- package/dist/document/types/document.types.d.ts.map +1 -1
- package/dist/document/types/pdf.types.d.ts +4 -0
- package/dist/document/types/pdf.types.d.ts.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/migrations/1749600000002.CreateSysTenantsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000002.CreateSysTenantsTable.js +1 -0
- package/dist/migrations/1749600000002.CreateSysTenantsTable.js.map +1 -1
- package/dist/migrations/1749600000003.CreateSysUsersTable.js +2 -2
- package/dist/migrations/1749600000003.CreateSysUsersTable.js.map +1 -1
- package/dist/migrations/1749600000020.CreateSysEmailTemplatesTable.d.ts.map +1 -1
- package/dist/migrations/1749600000020.CreateSysEmailTemplatesTable.js +11 -1
- package/dist/migrations/1749600000020.CreateSysEmailTemplatesTable.js.map +1 -1
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.d.ts.map +1 -1
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.js +1 -0
- package/dist/migrations/1749600000028.CreateSysDocumentsTable.js.map +1 -1
- package/dist/migrations/1749600000029.CreateSysPdfTemplatesTable.d.ts +6 -0
- package/dist/migrations/1749600000029.CreateSysPdfTemplatesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000029.CreateSysPdfTemplatesTable.js +33 -0
- package/dist/migrations/1749600000029.CreateSysPdfTemplatesTable.js.map +1 -0
- package/dist/notification/entities/email.template.entity.d.ts +2 -2
- package/dist/notification/entities/email.template.entity.d.ts.map +1 -1
- package/dist/notification/entities/email.template.entity.js +2 -2
- package/dist/notification/entities/email.template.entity.js.map +1 -1
- package/dist/tenant/entities/tenant.entity.d.ts +1 -0
- package/dist/tenant/entities/tenant.entity.d.ts.map +1 -1
- package/dist/tenant/entities/tenant.entity.js +5 -1
- package/dist/tenant/entities/tenant.entity.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,167 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CommonListProcessor = void 0;
|
|
4
|
-
const
|
|
5
|
-
const filter_operator_enum_1 = require("../enums/filter.operator.enum");
|
|
6
|
-
const filter_value_type_enum_1 = require("../enums/filter.value.type.enum");
|
|
7
|
-
const sort_direction_enum_1 = require("../enums/sort.direction.enum");
|
|
8
|
-
const sql_default_enum_1 = require("../enums/sql.default.enum");
|
|
9
|
-
const filter_operator_registry_1 = require("./filter.operator.registry");
|
|
10
|
-
const SEARCH_PARAM = 'search_str';
|
|
11
|
-
const SOFT_DELETE_COLUMN = 'deleted_at';
|
|
12
|
-
function escapeLikePattern(value) {
|
|
13
|
-
return value.replace(/[\\%_]/g, (character) => `\\${character}`);
|
|
14
|
-
}
|
|
4
|
+
const predicate_set_1 = require("./predicate.set");
|
|
15
5
|
class CommonListProcessor {
|
|
16
6
|
constructor() {
|
|
17
|
-
this.
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
total: result.total,
|
|
31
|
-
page: result.page,
|
|
32
|
-
limit: result.limit,
|
|
33
|
-
total_pages: result.total_pages,
|
|
34
|
-
};
|
|
35
|
-
return finalResult;
|
|
36
|
-
}
|
|
37
|
-
constructFinalQuery() {
|
|
38
|
-
let query = this.config.query;
|
|
39
|
-
const columnStatement = this.config.columns
|
|
40
|
-
.map((column) => `${column.key} ${column.identifier}`)
|
|
41
|
-
.join(', ');
|
|
42
|
-
query = 'select ' + columnStatement + ' from ' + query;
|
|
43
|
-
const wrapperQuery = `select * from ( ${query} ) query where true`;
|
|
44
|
-
let conditionStatement = '';
|
|
45
|
-
for (const condition of this.conditions)
|
|
46
|
-
conditionStatement += ` and ( ${condition} )`;
|
|
47
|
-
const finalQuery = wrapperQuery + conditionStatement + this.constructOrderByStatement();
|
|
48
|
-
return finalQuery;
|
|
49
|
-
}
|
|
50
|
-
constructOrderByStatement() {
|
|
51
|
-
const sorts = this.payload?.sorts?.length
|
|
52
|
-
? this.payload.sorts.map((sort) => ({
|
|
53
|
-
field: this.resolveColumn(sort.identifier).identifier,
|
|
54
|
-
direction: sort.direction,
|
|
55
|
-
}))
|
|
56
|
-
: this.config.defaultSort
|
|
57
|
-
? [this.config.defaultSort]
|
|
58
|
-
: [];
|
|
59
|
-
if (!sorts.length)
|
|
60
|
-
return '';
|
|
61
|
-
const orderStatement = sorts
|
|
62
|
-
.map((sort) => `${sort.field} ${sort.direction === sort_direction_enum_1.SortDirection.DESC
|
|
63
|
-
? sort_direction_enum_1.SortDirection.DESC
|
|
64
|
-
: sort_direction_enum_1.SortDirection.ASC}`)
|
|
65
|
-
.join(', ');
|
|
66
|
-
return ` order by ${orderStatement}`;
|
|
67
|
-
}
|
|
68
|
-
constructFilterConditions() {
|
|
69
|
-
this.conditions = [];
|
|
70
|
-
this.filterParams = {};
|
|
71
|
-
for (const [index, filter] of (this.payload?.filters ?? []).entries()) {
|
|
72
|
-
const column = this.resolveColumn(filter.identifier);
|
|
73
|
-
const buildClause = filter_operator_registry_1.FILTER_OPERATORS[filter.operator];
|
|
74
|
-
if (!buildClause)
|
|
75
|
-
throw new operation_exception_1.OperationException(`Unsupported filter operator: ${filter.operator}`);
|
|
76
|
-
const { clause, params } = buildClause(column.identifier, `filter_${index}`, this.transformFilterValue(filter));
|
|
77
|
-
this.conditions.push(clause);
|
|
78
|
-
Object.assign(this.filterParams, params);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
constructSoftDeleteCondition() {
|
|
82
|
-
if (this.config.includeDeleted)
|
|
83
|
-
return;
|
|
84
|
-
const column = this.config.columns.find((candidate) => candidate.identifier === SOFT_DELETE_COLUMN);
|
|
85
|
-
if (!column)
|
|
86
|
-
return;
|
|
87
|
-
const filtered = (this.payload?.filters ?? []).some((filter) => filter.identifier === SOFT_DELETE_COLUMN);
|
|
88
|
-
if (filtered)
|
|
89
|
-
return;
|
|
90
|
-
this.conditions.push(`${SOFT_DELETE_COLUMN} IS NULL`);
|
|
91
|
-
}
|
|
92
|
-
constructSearchCondition() {
|
|
93
|
-
const term = this.payload?.str?.trim();
|
|
94
|
-
if (!term)
|
|
95
|
-
return;
|
|
96
|
-
const columns = this.config.columns.filter((column) => column.searchable);
|
|
97
|
-
if (!columns.length)
|
|
98
|
-
throw new operation_exception_1.OperationException('This list does not support free-text search');
|
|
99
|
-
const clause = columns
|
|
100
|
-
.map((column) => `CAST(${column.identifier} AS TEXT) ILIKE :${SEARCH_PARAM} ESCAPE '\\'`)
|
|
101
|
-
.join(' or ');
|
|
102
|
-
this.conditions.push(clause);
|
|
103
|
-
this.filterParams[SEARCH_PARAM] = `%${escapeLikePattern(term)}%`;
|
|
104
|
-
}
|
|
105
|
-
resolveColumn(identifier) {
|
|
106
|
-
const column = this.config.columns.find((candidate) => candidate.identifier === identifier);
|
|
107
|
-
if (!column)
|
|
108
|
-
throw new operation_exception_1.OperationException(`Unknown filter identifier: ${identifier}`);
|
|
109
|
-
return column;
|
|
110
|
-
}
|
|
111
|
-
transformFilterValue(filter) {
|
|
112
|
-
switch (filter.operator) {
|
|
113
|
-
case filter_operator_enum_1.FilterOperatorEnum.IS_NULL:
|
|
114
|
-
return !['false', '0', ''].includes((filter.value ?? '').trim().toLowerCase());
|
|
115
|
-
case filter_operator_enum_1.FilterOperatorEnum.IN:
|
|
116
|
-
return this.splitFilterValue(filter).map((part) => this.castFilterValue(part, filter.value_type));
|
|
117
|
-
case filter_operator_enum_1.FilterOperatorEnum.BETWEEN: {
|
|
118
|
-
const parts = this.splitFilterValue(filter);
|
|
119
|
-
if (parts.length !== 2)
|
|
120
|
-
throw new operation_exception_1.OperationException(`Filter on ${filter.identifier} expects exactly two comma-separated values`);
|
|
121
|
-
return parts.map((part) => this.castFilterValue(part, filter.value_type));
|
|
122
|
-
}
|
|
123
|
-
default:
|
|
124
|
-
return this.castFilterValue(filter.value, filter.value_type);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
splitFilterValue(filter) {
|
|
128
|
-
const parts = (filter.value ?? '')
|
|
129
|
-
.split(',')
|
|
130
|
-
.map((part) => part.trim())
|
|
131
|
-
.filter((part) => part.length);
|
|
132
|
-
if (!parts.length)
|
|
133
|
-
throw new operation_exception_1.OperationException(`Filter on ${filter.identifier} received no values`);
|
|
134
|
-
return parts;
|
|
135
|
-
}
|
|
136
|
-
castFilterValue(raw, valueType) {
|
|
137
|
-
switch (valueType) {
|
|
138
|
-
case filter_value_type_enum_1.FilterValueTypeEnum.NULL:
|
|
139
|
-
return null;
|
|
140
|
-
case filter_value_type_enum_1.FilterValueTypeEnum.NUMBER: {
|
|
141
|
-
const numeric = Number(raw);
|
|
142
|
-
if (raw === null || raw === '' || Number.isNaN(numeric))
|
|
143
|
-
throw new operation_exception_1.OperationException(`Invalid numeric filter value: ${raw}`);
|
|
144
|
-
return numeric;
|
|
145
|
-
}
|
|
146
|
-
case filter_value_type_enum_1.FilterValueTypeEnum.DATE: {
|
|
147
|
-
const date = new Date(raw);
|
|
148
|
-
if (Number.isNaN(date.getTime()))
|
|
149
|
-
throw new operation_exception_1.OperationException(`Invalid date filter value: ${raw}`);
|
|
150
|
-
return date;
|
|
151
|
-
}
|
|
152
|
-
case filter_value_type_enum_1.FilterValueTypeEnum.BOOLEAN: {
|
|
153
|
-
const normalized = (raw ?? '').trim().toLowerCase();
|
|
154
|
-
if (normalized === 'true')
|
|
155
|
-
return true;
|
|
156
|
-
if (normalized === 'false')
|
|
157
|
-
return false;
|
|
158
|
-
throw new operation_exception_1.OperationException(`Invalid boolean filter value: ${raw}`);
|
|
159
|
-
}
|
|
160
|
-
case filter_value_type_enum_1.FilterValueTypeEnum.STRING:
|
|
161
|
-
return raw;
|
|
162
|
-
default:
|
|
163
|
-
throw new operation_exception_1.OperationException(`Unsupported filter value type: ${String(valueType)}`);
|
|
164
|
-
}
|
|
7
|
+
this.predicates = new predicate_set_1.PredicateSet();
|
|
8
|
+
}
|
|
9
|
+
applyCustomPredicates() { }
|
|
10
|
+
handle() {
|
|
11
|
+
this.predicates.reset();
|
|
12
|
+
for (const clause of this.config?.predicates ?? [])
|
|
13
|
+
this.predicates.add(clause);
|
|
14
|
+
this.applyCustomPredicates();
|
|
15
|
+
return this.listFilterService.execute({
|
|
16
|
+
config: this.config,
|
|
17
|
+
payload: this.payload,
|
|
18
|
+
predicates: this.predicates,
|
|
19
|
+
});
|
|
165
20
|
}
|
|
166
21
|
}
|
|
167
22
|
exports.CommonListProcessor = CommonListProcessor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.list.processor.js","sourceRoot":"","sources":["../../../src/common/libraries/common.list.processor.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.list.processor.js","sourceRoot":"","sources":["../../../src/common/libraries/common.list.processor.ts"],"names":[],"mappings":";;;AAGA,mDAA+C;AAc/C,MAAa,mBAAmB;IAAhC;QAKqB,eAAU,GAAG,IAAI,4BAAY,EAAE,CAAC;IA0BrD,CAAC;IAjBW,qBAAqB,KAAU,CAAC;IAEhC,MAAM;QACd,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAIxB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;YAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;IACL,CAAC;CACF;AA/BD,kDA+BC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FilterOperatorEnum } from '../enums/filter.operator.enum';
|
|
2
|
+
import { FilterValueTypeEnum } from '../enums/filter.value.type.enum';
|
|
3
|
+
export declare const DEFAULT_OPERATORS: Record<FilterValueTypeEnum, FilterOperatorEnum[]>;
|
|
4
|
+
//# sourceMappingURL=filter.operator.defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.operator.defaults.d.ts","sourceRoot":"","sources":["../../../src/common/libraries/filter.operator.defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AActE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,mBAAmB,EACnB,kBAAkB,EAAE,CAqBrB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_OPERATORS = void 0;
|
|
4
|
+
const filter_operator_enum_1 = require("../enums/filter.operator.enum");
|
|
5
|
+
const filter_value_type_enum_1 = require("../enums/filter.value.type.enum");
|
|
6
|
+
const { EQ, NE, IN, GT, GTE, LT, LTE, LIKE, ILIKE, BETWEEN, IS_NULL } = filter_operator_enum_1.FilterOperatorEnum;
|
|
7
|
+
exports.DEFAULT_OPERATORS = {
|
|
8
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.STRING]: [EQ, NE, IN, LIKE, ILIKE, IS_NULL],
|
|
9
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.NUMBER]: [
|
|
10
|
+
EQ,
|
|
11
|
+
NE,
|
|
12
|
+
IN,
|
|
13
|
+
GT,
|
|
14
|
+
GTE,
|
|
15
|
+
LT,
|
|
16
|
+
LTE,
|
|
17
|
+
BETWEEN,
|
|
18
|
+
IS_NULL,
|
|
19
|
+
],
|
|
20
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.DATE]: [EQ, NE, GT, GTE, LT, LTE, BETWEEN, IS_NULL],
|
|
21
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.DATETIME]: [EQ, NE, GT, GTE, LT, LTE, BETWEEN, IS_NULL],
|
|
22
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.BOOLEAN]: [EQ, NE, IS_NULL],
|
|
23
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.UUID]: [EQ, NE, IN, IS_NULL],
|
|
24
|
+
[filter_value_type_enum_1.FilterValueTypeEnum.JSON]: [IS_NULL],
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=filter.operator.defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.operator.defaults.js","sourceRoot":"","sources":["../../../src/common/libraries/filter.operator.defaults.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,4EAAsE;AAEtE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GACnE,yCAAkB,CAAC;AAWR,QAAA,iBAAiB,GAG1B;IACF,CAAC,4CAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IAChE,CAAC,4CAAmB,CAAC,MAAM,CAAC,EAAE;QAC5B,EAAE;QACF,EAAE;QACF,EAAE;QACF,EAAE;QACF,GAAG;QACH,EAAE;QACF,GAAG;QACH,OAAO;QACP,OAAO;KACR;IACD,CAAC,4CAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;IACxE,CAAC,4CAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;IAC5E,CAAC,4CAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;IAEhD,CAAC,4CAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC;IAEjD,CAAC,4CAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;CACtC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SqlParams } from '../types/sql.types';
|
|
2
|
+
export declare class PredicateSet {
|
|
3
|
+
private clauses;
|
|
4
|
+
private params;
|
|
5
|
+
private sequence;
|
|
6
|
+
add(clause: string, value?: unknown): void;
|
|
7
|
+
add(clause: string, params: SqlParams): void;
|
|
8
|
+
reset(): void;
|
|
9
|
+
get statement(): string;
|
|
10
|
+
get bindings(): SqlParams;
|
|
11
|
+
get isEmpty(): boolean;
|
|
12
|
+
private isParamBag;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=predicate.set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.set.d.ts","sourceRoot":"","sources":["../../../src/common/libraries/predicate.set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAgB/C,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAK;IAYrB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAC1C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI;IAqB5C,KAAK,IAAI,IAAI;IAMb,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,QAAQ,IAAI,SAAS,CAExB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,OAAO,CAAC,UAAU;CASnB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PredicateSet = void 0;
|
|
4
|
+
const VALUE_PLACEHOLDER = /:value\b/g;
|
|
5
|
+
class PredicateSet {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.clauses = [];
|
|
8
|
+
this.params = {};
|
|
9
|
+
this.sequence = 0;
|
|
10
|
+
}
|
|
11
|
+
add(clause, value) {
|
|
12
|
+
if (value === undefined) {
|
|
13
|
+
this.clauses.push(clause);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (this.isParamBag(value)) {
|
|
17
|
+
this.clauses.push(clause);
|
|
18
|
+
Object.assign(this.params, value);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const name = `predicate_${this.sequence++}`;
|
|
22
|
+
this.clauses.push(clause.replace(VALUE_PLACEHOLDER, `:${name}`));
|
|
23
|
+
this.params[name] = value;
|
|
24
|
+
}
|
|
25
|
+
reset() {
|
|
26
|
+
this.clauses = [];
|
|
27
|
+
this.params = {};
|
|
28
|
+
this.sequence = 0;
|
|
29
|
+
}
|
|
30
|
+
get statement() {
|
|
31
|
+
return this.clauses.map((clause) => ` and ( ${clause} )`).join('');
|
|
32
|
+
}
|
|
33
|
+
get bindings() {
|
|
34
|
+
return this.params;
|
|
35
|
+
}
|
|
36
|
+
get isEmpty() {
|
|
37
|
+
return this.clauses.length === 0;
|
|
38
|
+
}
|
|
39
|
+
isParamBag(value) {
|
|
40
|
+
return (typeof value === 'object' &&
|
|
41
|
+
value !== null &&
|
|
42
|
+
!Array.isArray(value) &&
|
|
43
|
+
!(value instanceof Date) &&
|
|
44
|
+
Object.getPrototypeOf(value) === Object.prototype);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.PredicateSet = PredicateSet;
|
|
48
|
+
//# sourceMappingURL=predicate.set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate.set.js","sourceRoot":"","sources":["../../../src/common/libraries/predicate.set.ts"],"names":[],"mappings":";;;AAGA,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAatC,MAAa,YAAY;IAAzB;QACU,YAAO,GAAa,EAAE,CAAC;QACvB,WAAM,GAAc,EAAE,CAAC;QACvB,aAAQ,GAAG,CAAC,CAAC;IAiEvB,CAAC;IAnDC,GAAG,CAAC,MAAc,EAAE,KAAe;QACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QAID,MAAM,IAAI,GAAG,aAAa,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IACnC,CAAC;IAMO,UAAU,CAAC,KAAc;QAC/B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC;YACxB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,CAClD,CAAC;IACJ,CAAC;CACF;AApED,oCAoEC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SqlService } from './sql.service';
|
|
2
|
+
import { CommonListResult, ListFilterRequest } from '../types/list.types';
|
|
3
|
+
export declare class ListFilterService {
|
|
4
|
+
private readonly sqlService;
|
|
5
|
+
constructor(sqlService: SqlService);
|
|
6
|
+
execute(request: ListFilterRequest): Promise<CommonListResult>;
|
|
7
|
+
private constructFinalQuery;
|
|
8
|
+
private constructOrderByStatement;
|
|
9
|
+
private constructFilterConditions;
|
|
10
|
+
private constructSoftDeleteCondition;
|
|
11
|
+
private constructSearchCondition;
|
|
12
|
+
private resolveColumn;
|
|
13
|
+
private allowedOperators;
|
|
14
|
+
private assertOperatorAllowed;
|
|
15
|
+
private transformFilterValue;
|
|
16
|
+
private splitFilterValue;
|
|
17
|
+
private castFilterValue;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=list.filter.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.filter.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/list.filter.service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAEL,gBAAgB,EAEhB,iBAAiB,EAElB,MAAM,qBAAqB,CAAC;AAiD7B,qBACa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,UAAU;IAE7C,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuCpE,OAAO,CAAC,mBAAmB;IAyC3B,OAAO,CAAC,yBAAyB;IAgCjC,OAAO,CAAC,yBAAyB;IAkCjC,OAAO,CAAC,4BAA4B;IAoBpC,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;CAuDxB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ListFilterService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const operation_exception_1 = require("../../global/exceptions/operation.exception");
|
|
15
|
+
const filter_operator_enum_1 = require("../enums/filter.operator.enum");
|
|
16
|
+
const filter_value_type_enum_1 = require("../enums/filter.value.type.enum");
|
|
17
|
+
const sort_direction_enum_1 = require("../enums/sort.direction.enum");
|
|
18
|
+
const sql_default_enum_1 = require("../enums/sql.default.enum");
|
|
19
|
+
const sql_service_1 = require("./sql.service");
|
|
20
|
+
const filter_operator_registry_1 = require("../libraries/filter.operator.registry");
|
|
21
|
+
const filter_operator_defaults_1 = require("../libraries/filter.operator.defaults");
|
|
22
|
+
const SEARCH_PARAM = 'search_str';
|
|
23
|
+
const SOFT_DELETE_COLUMN = 'deleted_at';
|
|
24
|
+
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
25
|
+
function escapeLikePattern(value) {
|
|
26
|
+
return value.replace(/[\\%_]/g, (character) => `\\${character}`);
|
|
27
|
+
}
|
|
28
|
+
const CALENDAR_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
29
|
+
function isRealCalendarDate(value) {
|
|
30
|
+
const [year, month, day] = value.split('-').map(Number);
|
|
31
|
+
const parsed = new Date(Date.UTC(year, month - 1, day));
|
|
32
|
+
return (parsed.getUTCFullYear() === year &&
|
|
33
|
+
parsed.getUTCMonth() === month - 1 &&
|
|
34
|
+
parsed.getUTCDate() === day);
|
|
35
|
+
}
|
|
36
|
+
let ListFilterService = class ListFilterService {
|
|
37
|
+
constructor(sqlService) {
|
|
38
|
+
this.sqlService = sqlService;
|
|
39
|
+
}
|
|
40
|
+
async execute(request) {
|
|
41
|
+
const context = {
|
|
42
|
+
...request,
|
|
43
|
+
conditions: [],
|
|
44
|
+
filterParams: {},
|
|
45
|
+
};
|
|
46
|
+
this.constructFilterConditions(context);
|
|
47
|
+
this.constructSearchCondition(context);
|
|
48
|
+
this.constructSoftDeleteCondition(context);
|
|
49
|
+
const finalQuery = this.constructFinalQuery(context);
|
|
50
|
+
const page = Math.max(context.payload?.page ?? sql_default_enum_1.SqlDefault.PAGE, 1);
|
|
51
|
+
const limit = Math.min(Math.max(context.payload?.limit ?? sql_default_enum_1.SqlDefault.LIMIT, 1), context.config.maxLimit ?? sql_default_enum_1.SqlDefault.MAX_LIMIT);
|
|
52
|
+
const result = await this.sqlService.paginate(finalQuery, context.filterParams, { page, limit });
|
|
53
|
+
return {
|
|
54
|
+
records: result.data,
|
|
55
|
+
total: result.total,
|
|
56
|
+
page: result.page,
|
|
57
|
+
limit: result.limit,
|
|
58
|
+
total_pages: result.total_pages,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
constructFinalQuery(context) {
|
|
62
|
+
let query = context.config.query;
|
|
63
|
+
const columnStatement = context.config.columns
|
|
64
|
+
.map((column) => `${column.key} ${column.identifier}`)
|
|
65
|
+
.join(', ');
|
|
66
|
+
query =
|
|
67
|
+
'select ' +
|
|
68
|
+
columnStatement +
|
|
69
|
+
' from ' +
|
|
70
|
+
query +
|
|
71
|
+
' where true' +
|
|
72
|
+
context.predicates.statement;
|
|
73
|
+
const wrapperQuery = `select * from ( ${query} ) query where true`;
|
|
74
|
+
let conditionStatement = '';
|
|
75
|
+
for (const condition of context.conditions)
|
|
76
|
+
conditionStatement += ` and ( ${condition} )`;
|
|
77
|
+
const finalQuery = wrapperQuery +
|
|
78
|
+
conditionStatement +
|
|
79
|
+
this.constructOrderByStatement(context);
|
|
80
|
+
return finalQuery;
|
|
81
|
+
}
|
|
82
|
+
constructOrderByStatement(context) {
|
|
83
|
+
const sorts = context.payload?.sorts?.length
|
|
84
|
+
? context.payload.sorts.map((sort) => ({
|
|
85
|
+
field: this.resolveColumn(context, sort.identifier).identifier,
|
|
86
|
+
direction: sort.direction,
|
|
87
|
+
}))
|
|
88
|
+
: context.config.defaultSort
|
|
89
|
+
? [context.config.defaultSort]
|
|
90
|
+
: [];
|
|
91
|
+
if (!sorts.length)
|
|
92
|
+
return '';
|
|
93
|
+
const orderStatement = sorts
|
|
94
|
+
.map((sort) => `${sort.field} ${sort.direction === sort_direction_enum_1.SortDirection.DESC
|
|
95
|
+
? sort_direction_enum_1.SortDirection.DESC
|
|
96
|
+
: sort_direction_enum_1.SortDirection.ASC}`)
|
|
97
|
+
.join(', ');
|
|
98
|
+
return ` order by ${orderStatement}`;
|
|
99
|
+
}
|
|
100
|
+
constructFilterConditions(context) {
|
|
101
|
+
context.conditions = [];
|
|
102
|
+
context.filterParams = { ...context.predicates.bindings };
|
|
103
|
+
for (const [index, filter] of (context.payload?.filters ?? []).entries()) {
|
|
104
|
+
const column = this.resolveColumn(context, filter.identifier);
|
|
105
|
+
const buildClause = filter_operator_registry_1.FILTER_OPERATORS[filter.operator];
|
|
106
|
+
if (!buildClause)
|
|
107
|
+
throw new operation_exception_1.OperationException(`Unsupported filter operator: ${filter.operator}`);
|
|
108
|
+
this.assertOperatorAllowed(column, filter.operator);
|
|
109
|
+
const { clause, params } = buildClause(column.identifier, `filter_${index}`, this.transformFilterValue(filter, column));
|
|
110
|
+
context.conditions.push(clause);
|
|
111
|
+
Object.assign(context.filterParams, params);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
constructSoftDeleteCondition(context) {
|
|
115
|
+
if (context.config.includeDeleted)
|
|
116
|
+
return;
|
|
117
|
+
const column = context.config.columns.find((candidate) => candidate.identifier === SOFT_DELETE_COLUMN);
|
|
118
|
+
if (!column)
|
|
119
|
+
return;
|
|
120
|
+
context.conditions.push(`${SOFT_DELETE_COLUMN} IS NULL`);
|
|
121
|
+
}
|
|
122
|
+
constructSearchCondition(context) {
|
|
123
|
+
const term = context.payload?.str?.trim();
|
|
124
|
+
if (!term)
|
|
125
|
+
return;
|
|
126
|
+
const columns = context.config.columns.filter((column) => column.searchable);
|
|
127
|
+
if (!columns.length)
|
|
128
|
+
throw new operation_exception_1.OperationException('This list does not support free-text search');
|
|
129
|
+
const clause = columns
|
|
130
|
+
.map((column) => `CAST(${column.identifier} AS TEXT) ILIKE :${SEARCH_PARAM} ESCAPE '\\'`)
|
|
131
|
+
.join(' or ');
|
|
132
|
+
context.conditions.push(clause);
|
|
133
|
+
context.filterParams[SEARCH_PARAM] = `%${escapeLikePattern(term)}%`;
|
|
134
|
+
}
|
|
135
|
+
resolveColumn(context, identifier) {
|
|
136
|
+
const column = context.config.columns.find((candidate) => candidate.identifier === identifier);
|
|
137
|
+
if (!column)
|
|
138
|
+
throw new operation_exception_1.OperationException(`Unknown filter identifier: ${identifier}`);
|
|
139
|
+
return column;
|
|
140
|
+
}
|
|
141
|
+
allowedOperators(column) {
|
|
142
|
+
const supported = filter_operator_defaults_1.DEFAULT_OPERATORS[column.type ?? filter_value_type_enum_1.FilterValueTypeEnum.STRING];
|
|
143
|
+
if (!column.operators)
|
|
144
|
+
return supported;
|
|
145
|
+
return column.operators.filter((operator) => supported.includes(operator));
|
|
146
|
+
}
|
|
147
|
+
assertOperatorAllowed(column, operator) {
|
|
148
|
+
if (this.allowedOperators(column).includes(operator))
|
|
149
|
+
return;
|
|
150
|
+
throw new operation_exception_1.OperationException(`Operator ${operator} is not available on ${column.identifier}`);
|
|
151
|
+
}
|
|
152
|
+
transformFilterValue(filter, column) {
|
|
153
|
+
switch (filter.operator) {
|
|
154
|
+
case filter_operator_enum_1.FilterOperatorEnum.IS_NULL:
|
|
155
|
+
return !['false', '0', ''].includes((filter.value ?? '').trim().toLowerCase());
|
|
156
|
+
case filter_operator_enum_1.FilterOperatorEnum.IN:
|
|
157
|
+
return this.splitFilterValue(filter).map((part) => this.castFilterValue(part, column));
|
|
158
|
+
case filter_operator_enum_1.FilterOperatorEnum.BETWEEN: {
|
|
159
|
+
const parts = this.splitFilterValue(filter);
|
|
160
|
+
if (parts.length !== 2)
|
|
161
|
+
throw new operation_exception_1.OperationException(`Filter on ${filter.identifier} expects exactly two comma-separated values`);
|
|
162
|
+
return parts.map((part) => this.castFilterValue(part, column));
|
|
163
|
+
}
|
|
164
|
+
default:
|
|
165
|
+
return this.castFilterValue(filter.value, column);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
splitFilterValue(filter) {
|
|
169
|
+
const parts = (filter.value ?? '')
|
|
170
|
+
.split(',')
|
|
171
|
+
.map((part) => part.trim())
|
|
172
|
+
.filter((part) => part.length);
|
|
173
|
+
if (!parts.length)
|
|
174
|
+
throw new operation_exception_1.OperationException(`Filter on ${filter.identifier} received no values`);
|
|
175
|
+
return parts;
|
|
176
|
+
}
|
|
177
|
+
castFilterValue(raw, column) {
|
|
178
|
+
const valueType = column.type ?? filter_value_type_enum_1.FilterValueTypeEnum.STRING;
|
|
179
|
+
switch (valueType) {
|
|
180
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.UUID: {
|
|
181
|
+
if (!UUID_PATTERN.test(raw?.trim() ?? ''))
|
|
182
|
+
throw new operation_exception_1.OperationException(`Invalid uuid filter value on ${column.identifier}`);
|
|
183
|
+
return raw.trim();
|
|
184
|
+
}
|
|
185
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.JSON:
|
|
186
|
+
throw new operation_exception_1.OperationException(`${column.identifier} cannot be compared by value`);
|
|
187
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.NUMBER: {
|
|
188
|
+
const numeric = Number(raw);
|
|
189
|
+
if (raw === null || raw === '' || Number.isNaN(numeric))
|
|
190
|
+
throw new operation_exception_1.OperationException(`Invalid numeric filter value: ${raw}`);
|
|
191
|
+
return numeric;
|
|
192
|
+
}
|
|
193
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.DATE: {
|
|
194
|
+
const value = raw?.trim() ?? '';
|
|
195
|
+
if (!CALENDAR_DATE_PATTERN.test(value) || !isRealCalendarDate(value))
|
|
196
|
+
throw new operation_exception_1.OperationException(`Invalid date filter value on ${column.identifier}: expected YYYY-MM-DD`);
|
|
197
|
+
return value;
|
|
198
|
+
}
|
|
199
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.DATETIME: {
|
|
200
|
+
const date = new Date(raw);
|
|
201
|
+
if (Number.isNaN(date.getTime()))
|
|
202
|
+
throw new operation_exception_1.OperationException(`Invalid datetime filter value on ${column.identifier}`);
|
|
203
|
+
return date;
|
|
204
|
+
}
|
|
205
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.BOOLEAN: {
|
|
206
|
+
const normalized = (raw ?? '').trim().toLowerCase();
|
|
207
|
+
if (normalized === 'true')
|
|
208
|
+
return true;
|
|
209
|
+
if (normalized === 'false')
|
|
210
|
+
return false;
|
|
211
|
+
throw new operation_exception_1.OperationException(`Invalid boolean filter value: ${raw}`);
|
|
212
|
+
}
|
|
213
|
+
case filter_value_type_enum_1.FilterValueTypeEnum.STRING:
|
|
214
|
+
return raw;
|
|
215
|
+
default:
|
|
216
|
+
throw new operation_exception_1.OperationException(`Unsupported filter value type: ${String(valueType)}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
exports.ListFilterService = ListFilterService;
|
|
221
|
+
exports.ListFilterService = ListFilterService = __decorate([
|
|
222
|
+
(0, common_1.Injectable)(),
|
|
223
|
+
__metadata("design:paramtypes", [sql_service_1.SqlService])
|
|
224
|
+
], ListFilterService);
|
|
225
|
+
//# sourceMappingURL=list.filter.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.filter.service.js","sourceRoot":"","sources":["../../../src/common/services/list.filter.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/sql.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,eAAe,EAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,oBAAoB,CAAC;AAW5B,qBACa,UAAU;IAWG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IALpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CACY;gBAId,UAAU,CAAC,EAAE,UAAU;IAG1D,UAAU,CAAC,CAAC,GAAG,MAAM,EACzB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAKT,mBAAmB,CAAC,CAAC,GAAG,MAAM,EAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC;IAKT,QAAQ,CAAC,CAAC,GAAG,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMd,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOd,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAMT,MAAM,CACV,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,OAAO,CAAC;IAUb,KAAK,CACT,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAaZ,QAAQ,CAAC,CAAC,GAAG,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sql.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/sql.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,eAAe,EAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,EACT,MAAM,EACP,MAAM,oBAAoB,CAAC;AAW5B,qBACa,UAAU;IAWG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IALpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CACY;gBAId,UAAU,CAAC,EAAE,UAAU;IAG1D,UAAU,CAAC,CAAC,GAAG,MAAM,EACzB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAKT,mBAAmB,CAAC,CAAC,GAAG,MAAM,EAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC;IAKT,QAAQ,CAAC,CAAC,GAAG,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAMd,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAOd,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,CAAC,EAAE,CAAC;IAMT,MAAM,CACV,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,OAAO,CAAC;IAUb,KAAK,CACT,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,MAAM,CAAC;IAaZ,QAAQ,CAAC,CAAC,GAAG,MAAM,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,SAAc,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAuBxB,IAAI,CAAC,MAAM,GAAE,SAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IAanE,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAM1E,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAKtC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,aAAa;IAIrB,OAAO,KAAK,UAAU,GAOrB;YAEa,GAAG;CAalB"}
|
|
@@ -54,7 +54,7 @@ let SqlService = SqlService_1 = class SqlService {
|
|
|
54
54
|
}
|
|
55
55
|
async paginate(sql, params = {}, options) {
|
|
56
56
|
const page = Math.max(options?.page ?? sql_default_enum_1.SqlDefault.PAGE, 1);
|
|
57
|
-
const limit = Math.max(options?.limit ?? sql_default_enum_1.SqlDefault.LIMIT, 1);
|
|
57
|
+
const limit = Math.min(Math.max(options?.limit ?? sql_default_enum_1.SqlDefault.LIMIT, 1), sql_default_enum_1.SqlDefault.MAX_LIMIT);
|
|
58
58
|
const source = this.trimStatement(sql);
|
|
59
59
|
const [data, total] = await Promise.all([
|
|
60
60
|
this.executeSql(`${source} LIMIT :${sql_default_enum_1.SqlDefault.LIMIT_PARAM} OFFSET :${sql_default_enum_1.SqlDefault.OFFSET_PARAM}`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql.service.js","sourceRoot":"","sources":["../../../src/common/services/sql.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAsD;AACtD,qCAAqC;AACrC,qFAAiF;AACjF,gEAAuD;AACvD,8DAAqD;AACrD,4EAGyC;AAkBlC,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAWrB,YAAyC,UAAuB;QAAvB,eAAU,GAAV,UAAU,CAAa;IAAG,CAAC;IAGpE,KAAK,CAAC,UAAU,CACd,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,OAAO,IAAI,CAAC,GAAG,CAAM,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,2BAAS,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAGD,KAAK,CAAC,mBAAmB,CACvB,GAAW,EACX,SAAoB,EAAE;QAEtB,OAAO,IAAI,CAAC,GAAG,CAAM,GAAG,EAAE,MAAM,EAAE,2BAAS,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAGD,KAAK,CAAC,QAAQ,CACZ,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAI,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzB,CAAC;IAGD,KAAK,CAAC,WAAW,CACf,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAS,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAO,IAAI,IAAI,CAAC;IAC9C,CAAC;IAGD,KAAK,CAAC,WAAW,CACf,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAS,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC;IACvD,CAAC;IAGD,KAAK,CAAC,MAAM,CACV,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,kBAAkB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,EACxD,MAAM,EACN,OAAO,CACR,CAAC;QACF,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;IAGD,KAAK,CAAC,KAAK,CACT,GAAW,EACX,SAAoB,EAAE,EACtB,OAA2B;QAE3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,oCAAoC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,yBAAyB,EACpF,MAAM,EACN,OAAO,CACR,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;IAMD,KAAK,CAAC,QAAQ,CACZ,GAAW,EACX,SAAoB,EAAE,EACtB,OAA4B;QAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,6BAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,6BAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sql.service.js","sourceRoot":"","sources":["../../../src/common/services/sql.service.ts"],"names":[],"mappings":"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"}
|