adminforth 2.73.1 → 3.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/commands/createApp/templates/package.json.hbs +1 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +49 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/modules/codeInjector.d.ts +0 -1
  7. package/dist/modules/codeInjector.d.ts.map +1 -1
  8. package/dist/modules/codeInjector.js +0 -17
  9. package/dist/modules/codeInjector.js.map +1 -1
  10. package/dist/modules/restApi.d.ts +1 -0
  11. package/dist/modules/restApi.d.ts.map +1 -1
  12. package/dist/modules/restApi.js +26 -1
  13. package/dist/modules/restApi.js.map +1 -1
  14. package/dist/modules/utils.d.ts +1 -0
  15. package/dist/modules/utils.d.ts.map +1 -1
  16. package/dist/modules/utils.js +13 -0
  17. package/dist/modules/utils.js.map +1 -1
  18. package/dist/spa/src/afcl/Select.vue +3 -7
  19. package/dist/spa/src/components/ListActionsThreeDots.vue +1 -1
  20. package/dist/spa/src/components/ResourceListTable.vue +10 -14
  21. package/dist/spa/src/types/Common.ts +0 -5
  22. package/dist/spa/tailwind.config.js +1 -3
  23. package/dist/types/Common.d.ts +0 -4
  24. package/dist/types/Common.d.ts.map +1 -1
  25. package/dist/types/Common.js.map +1 -1
  26. package/package.json +25 -7
  27. package/dist/dataConnectors/clickhouse.d.ts +0 -106
  28. package/dist/dataConnectors/clickhouse.d.ts.map +0 -1
  29. package/dist/dataConnectors/clickhouse.js +0 -611
  30. package/dist/dataConnectors/clickhouse.js.map +0 -1
  31. package/dist/dataConnectors/mongo.d.ts +0 -118
  32. package/dist/dataConnectors/mongo.d.ts.map +0 -1
  33. package/dist/dataConnectors/mongo.js +0 -458
  34. package/dist/dataConnectors/mongo.js.map +0 -1
  35. package/dist/dataConnectors/mysql.d.ts +0 -87
  36. package/dist/dataConnectors/mysql.d.ts.map +0 -1
  37. package/dist/dataConnectors/mysql.js +0 -569
  38. package/dist/dataConnectors/mysql.js.map +0 -1
  39. package/dist/dataConnectors/postgres.d.ts +0 -90
  40. package/dist/dataConnectors/postgres.d.ts.map +0 -1
  41. package/dist/dataConnectors/postgres.js +0 -538
  42. package/dist/dataConnectors/postgres.js.map +0 -1
  43. package/dist/dataConnectors/qdrant.d.ts +0 -57
  44. package/dist/dataConnectors/qdrant.d.ts.map +0 -1
  45. package/dist/dataConnectors/qdrant.js +0 -469
  46. package/dist/dataConnectors/qdrant.js.map +0 -1
  47. package/dist/dataConnectors/sqlite.d.ts +0 -92
  48. package/dist/dataConnectors/sqlite.d.ts.map +0 -1
  49. package/dist/dataConnectors/sqlite.js +0 -553
  50. package/dist/dataConnectors/sqlite.js.map +0 -1
@@ -1,118 +0,0 @@
1
- import { IAdminForthDataSourceConnector, IAdminForthSingleFilter, IAdminForthAndOrFilter, AdminForthResource, IAggregationRule, IGroupByRule } from '../types/Back.js';
2
- import AdminForthBaseConnector from './baseConnector.js';
3
- import { AdminForthSortDirections } from '../types/Common.js';
4
- declare class MongoConnector extends AdminForthBaseConnector implements IAdminForthDataSourceConnector {
5
- setupClient(url: any): Promise<void>;
6
- OperatorsMap: {
7
- eq: (value: any) => any;
8
- ne: (value: any) => {
9
- $ne: any;
10
- };
11
- gt: (value: any) => {
12
- $gt: any;
13
- };
14
- lt: (value: any) => {
15
- $lt: any;
16
- };
17
- gte: (value: any) => {
18
- $gte: any;
19
- };
20
- lte: (value: any) => {
21
- $lte: any;
22
- };
23
- like: (value: any) => {
24
- $regex: any;
25
- };
26
- ilike: (value: any) => {
27
- $regex: any;
28
- $options: string;
29
- };
30
- in: (value: any) => {
31
- $in: any;
32
- };
33
- nin: (value: any) => {
34
- $nin: any;
35
- };
36
- and: (value: any) => {
37
- $and: any;
38
- };
39
- or: (value: any) => {
40
- $or: any;
41
- };
42
- isEmpty: () => any;
43
- isNotEmpty: () => {
44
- $ne: any;
45
- };
46
- };
47
- SortDirectionsMap: {
48
- asc: number;
49
- desc: number;
50
- };
51
- getAllTables(): Promise<Array<string>>;
52
- getAllColumnsInTable(collectionName: string): Promise<Array<{
53
- name: string;
54
- type: string;
55
- isPrimaryKey?: boolean;
56
- sampleValue?: any;
57
- }>>;
58
- discoverFields(resource: any): Promise<any>;
59
- getPrimaryKey(resource: any): any;
60
- getFieldValue(field: any, value: any): any;
61
- setFieldValue(field: any, value: any): any;
62
- getFilterQuery(resource: AdminForthResource, filter: IAdminForthSingleFilter | IAdminForthAndOrFilter): any;
63
- getAggregateWithOriginalTypes({ resource, filters, aggregations, groupBy }: {
64
- resource: AdminForthResource;
65
- filters: IAdminForthAndOrFilter;
66
- aggregations: {
67
- [alias: string]: IAggregationRule;
68
- };
69
- groupBy?: IGroupByRule | IGroupByRule[];
70
- }): Promise<Array<{
71
- group?: string;
72
- [key: string]: any;
73
- }>>;
74
- getDataWithOriginalTypes({ resource, limit, offset, sort, filters, columns }: {
75
- resource: AdminForthResource;
76
- limit: number;
77
- offset: number;
78
- sort: {
79
- field: string;
80
- direction: AdminForthSortDirections;
81
- }[];
82
- filters: IAdminForthAndOrFilter;
83
- columns?: Array<{
84
- name: string;
85
- }>;
86
- }): Promise<any[]>;
87
- getCount({ resource, filters }: {
88
- resource: AdminForthResource;
89
- filters: IAdminForthAndOrFilter;
90
- }): Promise<number>;
91
- getMinMaxForColumnsWithOriginalTypes({ resource, columns }: {
92
- resource: any;
93
- columns: any;
94
- }): Promise<Record<string, {
95
- min: any;
96
- max: any;
97
- }>>;
98
- createRecordOriginalValues({ resource, record }: {
99
- resource: any;
100
- record: any;
101
- }): Promise<string>;
102
- updateRecordOriginalValues({ resource, recordId, newValues }: {
103
- resource: any;
104
- recordId: any;
105
- newValues: any;
106
- }): Promise<void>;
107
- deleteRecord({ resource, recordId }: {
108
- resource: any;
109
- recordId: any;
110
- }): Promise<boolean>;
111
- deleteMany({ resource, recordIds }: {
112
- resource: AdminForthResource;
113
- recordIds: string[];
114
- }): Promise<number>;
115
- close(): Promise<void>;
116
- }
117
- export default MongoConnector;
118
- //# sourceMappingURL=mongo.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../dataConnectors/mongo.ts"],"names":[],"mappings":"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"}
@@ -1,458 +0,0 @@
1
- import dayjs from 'dayjs';
2
- import { MongoClient } from 'mongodb';
3
- import { Decimal128, Double } from 'bson';
4
- import AdminForthBaseConnector from './baseConnector.js';
5
- import { afLogger } from '../modules/logger.js';
6
- import { AdminForthDataTypes, AdminForthFilterOperators, AdminForthSortDirections, } from '../types/Common.js';
7
- const escapeRegex = (value) => {
8
- return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // Escapes special characters
9
- };
10
- function normalizeMongoValue(v) {
11
- if (v == null) {
12
- return v;
13
- }
14
- if (v instanceof Decimal128) {
15
- return v.toString();
16
- }
17
- if (v instanceof Double) {
18
- return v.valueOf();
19
- }
20
- if (typeof v === "object" && v.$numberDecimal) {
21
- return String(v.$numberDecimal);
22
- }
23
- if (typeof v === "object" && v.$numberDouble) {
24
- return Number(v.$numberDouble);
25
- }
26
- return v;
27
- }
28
- class MongoConnector extends AdminForthBaseConnector {
29
- constructor() {
30
- super(...arguments);
31
- this.OperatorsMap = {
32
- [AdminForthFilterOperators.EQ]: (value) => value,
33
- [AdminForthFilterOperators.NE]: (value) => ({ $ne: value }),
34
- [AdminForthFilterOperators.GT]: (value) => ({ $gt: value }),
35
- [AdminForthFilterOperators.LT]: (value) => ({ $lt: value }),
36
- [AdminForthFilterOperators.GTE]: (value) => ({ $gte: value }),
37
- [AdminForthFilterOperators.LTE]: (value) => ({ $lte: value }),
38
- [AdminForthFilterOperators.LIKE]: (value) => ({ $regex: escapeRegex(value) }),
39
- [AdminForthFilterOperators.ILIKE]: (value) => ({ $regex: escapeRegex(value), $options: 'i' }),
40
- [AdminForthFilterOperators.IN]: (value) => ({ $in: value }),
41
- [AdminForthFilterOperators.NIN]: (value) => ({ $nin: value }),
42
- [AdminForthFilterOperators.AND]: (value) => ({ $and: value }),
43
- [AdminForthFilterOperators.OR]: (value) => ({ $or: value }),
44
- [AdminForthFilterOperators.IS_EMPTY]: () => null,
45
- [AdminForthFilterOperators.IS_NOT_EMPTY]: () => ({ $ne: null }),
46
- };
47
- this.SortDirectionsMap = {
48
- [AdminForthSortDirections.asc]: 1,
49
- [AdminForthSortDirections.desc]: -1,
50
- };
51
- }
52
- async setupClient(url) {
53
- this.client = new MongoClient(url);
54
- (async () => {
55
- try {
56
- await this.client.connect();
57
- this.client.on('error', (err) => {
58
- afLogger.error(`Mongo error: ${err.message}`);
59
- });
60
- afLogger.info('Connected to Mongo');
61
- }
62
- catch (e) {
63
- afLogger.error(`Failed to connect to Mongo: ${e}`);
64
- }
65
- })();
66
- }
67
- async getAllTables() {
68
- const db = this.client.db();
69
- const collections = await db.listCollections().toArray();
70
- return collections.map(col => col.name);
71
- }
72
- async getAllColumnsInTable(collectionName) {
73
- const sampleDocs = await this.client.db().collection(collectionName).find({}).sort({ _id: -1 }).limit(100).toArray();
74
- const fieldTypes = new Map();
75
- const sampleValues = new Map();
76
- function detectType(value) {
77
- if (value === null || value === undefined)
78
- return 'string';
79
- if (typeof value === 'string')
80
- return 'string';
81
- if (typeof value === 'boolean')
82
- return 'boolean';
83
- if (typeof value === 'number') {
84
- return Number.isInteger(value) ? 'integer' : 'float';
85
- }
86
- if (value instanceof Date)
87
- return 'datetime';
88
- if (value && typeof value === 'object' && ('$numberDecimal' in value || value._bsontype === 'Decimal128'))
89
- return 'decimal';
90
- if (typeof value === 'object')
91
- return 'json';
92
- return 'string';
93
- }
94
- function addType(name, type) {
95
- if (!fieldTypes.has(name)) {
96
- fieldTypes.set(name, new Set());
97
- }
98
- fieldTypes.get(name).add(type);
99
- }
100
- function flattenObject(obj, prefix = '') {
101
- Object.entries(obj).forEach(([key, value]) => {
102
- const fullKey = prefix ? `${prefix}.${key}` : key;
103
- if (!fieldTypes.has(fullKey)) {
104
- fieldTypes.set(fullKey, new Set());
105
- sampleValues.set(fullKey, value);
106
- }
107
- if (value instanceof Buffer) {
108
- addType(fullKey, 'json');
109
- return;
110
- }
111
- if (value &&
112
- typeof value === 'object' &&
113
- ('$numberDecimal' in value || value._bsontype === 'Decimal128')) {
114
- addType(fullKey, 'decimal');
115
- return;
116
- }
117
- if (value &&
118
- typeof value === 'object' &&
119
- !Array.isArray(value) &&
120
- !(value instanceof Date)) {
121
- addType(fullKey, 'json');
122
- return;
123
- }
124
- addType(fullKey, detectType(value));
125
- });
126
- }
127
- for (const doc of sampleDocs) {
128
- flattenObject(doc);
129
- }
130
- return Array.from(fieldTypes.entries()).map(([name, types]) => {
131
- var _a;
132
- const primaryKey = name === '_id';
133
- const priority = ['datetime', 'date', 'decimal', 'integer', 'float', 'boolean', 'json', 'string'];
134
- const matched = priority.find(t => types.has(t)) || 'string';
135
- const typeMap = {
136
- string: AdminForthDataTypes.STRING,
137
- integer: AdminForthDataTypes.INTEGER,
138
- float: AdminForthDataTypes.FLOAT,
139
- boolean: AdminForthDataTypes.BOOLEAN,
140
- datetime: AdminForthDataTypes.DATETIME,
141
- date: AdminForthDataTypes.DATE,
142
- json: AdminForthDataTypes.JSON,
143
- decimal: AdminForthDataTypes.DECIMAL,
144
- };
145
- return Object.assign(Object.assign({ name, type: (_a = typeMap[matched]) !== null && _a !== void 0 ? _a : AdminForthDataTypes.STRING }, (primaryKey ? { isPrimaryKey: true } : {})), { sampleValue: sampleValues.get(name) });
146
- });
147
- }
148
- async discoverFields(resource) {
149
- return resource.columns.filter((col) => !col.virtual).reduce((acc, col) => {
150
- if (!col.type) {
151
- throw new Error(`Type is not defined for column ${col.name} in resource ${resource.table}`);
152
- }
153
- acc[col.name] = {
154
- name: col.name,
155
- type: col.type,
156
- primaryKey: col.primaryKey,
157
- virtual: col.virtual,
158
- _underlineType: col._underlineType,
159
- };
160
- return acc;
161
- }, {});
162
- }
163
- getPrimaryKey(resource) {
164
- for (const col of resource.dataSourceColumns) {
165
- if (col.primaryKey) {
166
- return col.name;
167
- }
168
- }
169
- }
170
- getFieldValue(field, value) {
171
- if (field.type == AdminForthDataTypes.DATETIME) {
172
- if (!value) {
173
- return null;
174
- }
175
- return dayjs(Date.parse(value)).toISOString();
176
- }
177
- else if (field.type == AdminForthDataTypes.DATE) {
178
- if (!value) {
179
- return null;
180
- }
181
- return dayjs(Date.parse(value)).toISOString().split('T')[0];
182
- }
183
- else if (field.type == AdminForthDataTypes.BOOLEAN) {
184
- return value === null ? null : !!value;
185
- }
186
- else if (field.type == AdminForthDataTypes.DECIMAL) {
187
- if (value === null || value === undefined) {
188
- return null;
189
- }
190
- return value === null || value === void 0 ? void 0 : value.toString();
191
- }
192
- return value;
193
- }
194
- setFieldValue(field, value) {
195
- if (value === undefined)
196
- return undefined;
197
- if (value === null)
198
- return null;
199
- if (field.type === AdminForthDataTypes.DATETIME) {
200
- if (value === "" || value === null) {
201
- return null;
202
- }
203
- return dayjs(value).isValid() ? dayjs(value).toDate() : null;
204
- }
205
- if (field.type === AdminForthDataTypes.INTEGER) {
206
- if (value === "" || value === null) {
207
- return null;
208
- }
209
- return Number.isFinite(value) ? Math.trunc(value) : null;
210
- }
211
- if (field.type === AdminForthDataTypes.FLOAT) {
212
- if (value === "" || value === null) {
213
- return null;
214
- }
215
- return Number.isFinite(value) ? value : null;
216
- }
217
- if (field.type === AdminForthDataTypes.DECIMAL) {
218
- if (value === "" || value === null) {
219
- return null;
220
- }
221
- return value.toString();
222
- }
223
- return value;
224
- }
225
- getFilterQuery(resource, filter) {
226
- // accept raw NoSQL filters for MongoDB
227
- if (filter.insecureRawNoSQL !== undefined) {
228
- return filter.insecureRawNoSQL;
229
- }
230
- // explicitly ignore raw SQL filters for MongoDB
231
- if (filter.insecureRawSQL !== undefined) {
232
- afLogger.warn(`⚠️ Ignoring insecureRawSQL filter for MongoDB:, ${filter.insecureRawSQL}`);
233
- return {};
234
- }
235
- if (filter.field) {
236
- // Field-to-field comparisons via $expr
237
- if (filter.rightField) {
238
- const left = `$${filter.field}`;
239
- const right = `$${filter.rightField}`;
240
- const op = filter.operator;
241
- const exprOpMap = {
242
- [AdminForthFilterOperators.GT]: '$gt',
243
- [AdminForthFilterOperators.GTE]: '$gte',
244
- [AdminForthFilterOperators.LT]: '$lt',
245
- [AdminForthFilterOperators.LTE]: '$lte',
246
- [AdminForthFilterOperators.EQ]: '$eq',
247
- [AdminForthFilterOperators.NE]: '$ne',
248
- };
249
- const mongoExprOp = exprOpMap[op];
250
- if (!mongoExprOp) {
251
- // For unsupported ops with rightField, return empty condition
252
- return {};
253
- }
254
- return { $expr: { [mongoExprOp]: [left, right] } };
255
- }
256
- const column = resource.dataSourceColumns.find((col) => col.name === filter.field);
257
- const filterValue = filter.value;
258
- if ([AdminForthDataTypes.INTEGER, AdminForthDataTypes.DECIMAL, AdminForthDataTypes.FLOAT].includes(column.type)) {
259
- // Handle array values for IN/NIN operators
260
- const convertedValue = Array.isArray(filterValue)
261
- ? filterValue.map(v => +v)
262
- : +filterValue;
263
- return { [filter.field]: this.OperatorsMap[filter.operator](convertedValue) };
264
- }
265
- return { [filter.field]: this.OperatorsMap[filter.operator](filterValue) };
266
- }
267
- // filter is a AndOr filter
268
- return this.OperatorsMap[filter.operator](filter.subFilters
269
- // mongodb should ignore raw SQL, but allow raw NoSQL
270
- .filter((f) => f.insecureRawSQL === undefined)
271
- .map((f) => this.getFilterQuery(resource, f)));
272
- }
273
- async getAggregateWithOriginalTypes({ resource, filters, aggregations, groupBy }) {
274
- var _a, _b;
275
- const collection = this.client.db().collection(resource.table);
276
- const match = ((_a = filters === null || filters === void 0 ? void 0 : filters.subFilters) === null || _a === void 0 ? void 0 : _a.length) ? this.getFilterQuery(resource, filters) : {};
277
- const groupByRules = this.normalizeGroupByRules(groupBy);
278
- let groupId = null;
279
- if (groupByRules.length) {
280
- groupId = {};
281
- }
282
- for (const [index, groupByRule] of groupByRules.entries()) {
283
- const alias = this.getGroupByResultAlias(groupByRule, index, groupByRules.length);
284
- if (groupByRule.type === 'field') {
285
- const g = groupByRule;
286
- groupId[alias] = `$${g.field}`;
287
- continue;
288
- }
289
- const g = groupByRule;
290
- const tz = (_b = g.timezone) !== null && _b !== void 0 ? _b : 'UTC';
291
- const dateTruncSpec = {
292
- date: `$${g.field}`,
293
- unit: g.truncation,
294
- timezone: tz,
295
- };
296
- if (g.truncation === 'week') {
297
- dateTruncSpec.startOfWeek = 'Mon';
298
- }
299
- groupId[alias] = { $dateTrunc: dateTruncSpec };
300
- }
301
- const groupStage = {
302
- _id: groupId,
303
- };
304
- for (const [alias, rule] of Object.entries(aggregations)) {
305
- switch (rule.operation) {
306
- case 'count':
307
- groupStage[alias] = { $sum: 1 };
308
- break;
309
- case 'count_distinct':
310
- groupStage[alias] = { $addToSet: `$${rule.field}` };
311
- break;
312
- case 'sum':
313
- groupStage[alias] = { $sum: { $toDouble: `$${rule.field}` } };
314
- break;
315
- case 'avg':
316
- groupStage[alias] = { $avg: { $toDouble: `$${rule.field}` } };
317
- break;
318
- case 'min':
319
- groupStage[alias] = { $min: { $toDouble: `$${rule.field}` } };
320
- break;
321
- case 'max':
322
- groupStage[alias] = { $max: { $toDouble: `$${rule.field}` } };
323
- break;
324
- case 'median':
325
- groupStage[alias] = { $push: { $toDouble: `$${rule.field}` } };
326
- break;
327
- }
328
- }
329
- const pipeline = [];
330
- if (Object.keys(match).length) {
331
- pipeline.push({ $match: match });
332
- }
333
- pipeline.push({ $group: groupStage });
334
- pipeline.push({
335
- $project: Object.assign(Object.assign({ _id: 0 }, Object.fromEntries(groupByRules.map((groupByRule, index) => {
336
- var _a;
337
- const alias = this.getGroupByResultAlias(groupByRule, index, groupByRules.length);
338
- return [alias, groupByRule.type === 'date_trunc' ? {
339
- $cond: {
340
- if: { $eq: [{ $type: `$_id.${alias}` }, "date"] },
341
- then: {
342
- $dateToString: {
343
- format: "%Y-%m-%d",
344
- date: `$_id.${alias}`,
345
- timezone: (_a = groupByRule.timezone) !== null && _a !== void 0 ? _a : 'UTC'
346
- }
347
- },
348
- else: `$_id.${alias}`
349
- }
350
- } : `$_id.${alias}`];
351
- }))), Object.fromEntries(Object.keys(groupStage)
352
- .filter(k => k !== '_id')
353
- .map(k => { var _a; return [k, ((_a = aggregations[k]) === null || _a === void 0 ? void 0 : _a.operation) === 'count_distinct' ? { $size: `$${k}` } : `$${k}`]; }))),
354
- });
355
- const calculateMedian = (arr) => {
356
- if (!Array.isArray(arr) || arr.length === 0)
357
- return null;
358
- const sorted = [...arr].sort((a, b) => a - b);
359
- const mid = Math.floor(sorted.length / 2);
360
- return sorted.length % 2 === 0
361
- ? (sorted[mid - 1] + sorted[mid]) / 2
362
- : sorted[mid];
363
- };
364
- const result = await collection.aggregate(pipeline).toArray();
365
- const medianAliases = Object.keys(aggregations).filter(alias => aggregations[alias].operation === 'median');
366
- return result.map(row => {
367
- medianAliases.forEach(alias => {
368
- row[alias] = calculateMedian(row[alias]);
369
- });
370
- return row;
371
- });
372
- }
373
- async getDataWithOriginalTypes({ resource, limit, offset, sort, filters, columns }) {
374
- // const columns = resource.dataSourceColumns.filter(c=> !c.virtual).map((col) => col.name).join(', ');
375
- const tableName = resource.table;
376
- const collection = this.client.db().collection(tableName);
377
- const query = filters.subFilters.length ? this.getFilterQuery(resource, filters) : {};
378
- const sortArray = sort.map((s) => {
379
- return [s.field, this.SortDirectionsMap[s.direction]];
380
- });
381
- const projection = columns
382
- ? Object.fromEntries(columns.map((col) => [col.name, 1]))
383
- : undefined;
384
- const result = await collection.find(query, projection ? { projection } : undefined)
385
- .sort(sortArray)
386
- .skip(offset)
387
- .limit(limit)
388
- .toArray();
389
- return result;
390
- }
391
- async getCount({ resource, filters }) {
392
- let normalizedFilters = filters;
393
- if (filters) {
394
- // validate and normalize in case this method is called from dataAPI
395
- const filterValidation = this.validateAndNormalizeFilters(filters, resource);
396
- if (!filterValidation.ok) {
397
- throw new Error(filterValidation.error);
398
- }
399
- normalizedFilters = filterValidation.normalizedFilters;
400
- }
401
- const collection = this.client.db().collection(resource.table);
402
- const query = normalizedFilters.subFilters.length ? this.getFilterQuery(resource, normalizedFilters) : {};
403
- return await collection.countDocuments(query);
404
- }
405
- async getMinMaxForColumnsWithOriginalTypes({ resource, columns }) {
406
- const tableName = resource.table;
407
- const collection = this.client.db().collection(tableName);
408
- const result = {};
409
- for (const column of columns) {
410
- const [doc] = await collection
411
- .aggregate([
412
- { $group: { _id: null, min: { $min: `$${column.name}` }, max: { $max: `$${column.name}` } } },
413
- { $project: { _id: 0, min: 1, max: 1 } },
414
- ])
415
- .toArray();
416
- result[column.name] = {
417
- min: normalizeMongoValue(doc === null || doc === void 0 ? void 0 : doc.min),
418
- max: normalizeMongoValue(doc === null || doc === void 0 ? void 0 : doc.max),
419
- };
420
- }
421
- return result;
422
- }
423
- async createRecordOriginalValues({ resource, record }) {
424
- const tableName = resource.table;
425
- const collection = this.client.db().collection(tableName);
426
- const columns = Object.keys(record);
427
- const newRecord = {};
428
- for (const colName of columns) {
429
- newRecord[colName] = record[colName];
430
- }
431
- const ret = await collection.insertOne(newRecord);
432
- return ret.insertedId;
433
- }
434
- async updateRecordOriginalValues({ resource, recordId, newValues }) {
435
- const collection = this.client.db().collection(resource.table);
436
- await collection.updateOne({ [this.getPrimaryKey(resource)]: recordId }, { $set: newValues });
437
- }
438
- async deleteRecord({ resource, recordId }) {
439
- const primaryKey = this.getPrimaryKey(resource);
440
- const collection = this.client.db().collection(resource.table);
441
- const res = await collection.deleteOne({ [primaryKey]: recordId });
442
- return res.deletedCount > 0;
443
- }
444
- async deleteMany({ resource, recordIds }) {
445
- var _a;
446
- if (!recordIds || recordIds.length === 0) {
447
- return 0;
448
- }
449
- const collection = this.client.db().collection(resource.table);
450
- const res = await collection.deleteMany({ [this.getPrimaryKey(resource)]: { $in: recordIds } });
451
- return (_a = res.deletedCount) !== null && _a !== void 0 ? _a : 0;
452
- }
453
- async close() {
454
- await this.client.close();
455
- }
456
- }
457
- export default MongoConnector;
458
- //# sourceMappingURL=mongo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../dataConnectors/mongo.ts"],"names":[],"mappings":"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"}