adminforth 1.3.54-next.21 → 1.3.54-next.23

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 (39) hide show
  1. package/dataConnectors/baseConnector.ts +0 -1
  2. package/dist/auth.js +42 -57
  3. package/dist/auth.js.map +1 -0
  4. package/dist/basePlugin.js +1 -1
  5. package/dist/basePlugin.js.map +1 -0
  6. package/dist/dataConnectors/baseConnector.js +108 -129
  7. package/dist/dataConnectors/baseConnector.js.map +1 -0
  8. package/dist/dataConnectors/clickhouse.js +126 -149
  9. package/dist/dataConnectors/clickhouse.js.map +1 -0
  10. package/dist/dataConnectors/mongo.js +75 -102
  11. package/dist/dataConnectors/mongo.js.map +1 -0
  12. package/dist/dataConnectors/postgres.js +118 -143
  13. package/dist/dataConnectors/postgres.js.map +1 -0
  14. package/dist/dataConnectors/sqlite.js +107 -130
  15. package/dist/dataConnectors/sqlite.js.map +1 -0
  16. package/dist/index.js +197 -218
  17. package/dist/index.js.map +1 -0
  18. package/dist/modules/codeInjector.js +471 -496
  19. package/dist/modules/codeInjector.js.map +1 -0
  20. package/dist/modules/configValidator.js +14 -23
  21. package/dist/modules/configValidator.js.map +1 -0
  22. package/dist/modules/operationalResource.js +50 -71
  23. package/dist/modules/operationalResource.js.map +1 -0
  24. package/dist/modules/restApi.js +104 -117
  25. package/dist/modules/restApi.js.map +1 -0
  26. package/dist/modules/styleGenerator.js +1 -1
  27. package/dist/modules/styleGenerator.js.map +1 -0
  28. package/dist/modules/styles.js +1 -1
  29. package/dist/modules/styles.js.map +1 -0
  30. package/dist/modules/utils.js +1 -1
  31. package/dist/modules/utils.js.map +1 -0
  32. package/dist/servers/express.js +30 -43
  33. package/dist/servers/express.js.map +1 -0
  34. package/dist/types/AdminForthConfig.js +1 -1
  35. package/dist/types/AdminForthConfig.js.map +1 -0
  36. package/dist/types/FrontendAPI.js +1 -1
  37. package/dist/types/FrontendAPI.js.map +1 -0
  38. package/package.json +1 -1
  39. package/tsconfig.json +4 -4
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import dayjs from 'dayjs';
11
2
  import pkg from 'pg';
12
3
  import { AdminForthDataTypes, AdminForthFilterOperators, AdminForthSortDirections } from '../types/AdminForthConfig.js';
@@ -34,19 +25,18 @@ class PostgresConnector extends AdminForthBaseConnector {
34
25
  this.db = new Client({
35
26
  connectionString: url
36
27
  });
37
- (() => __awaiter(this, void 0, void 0, function* () {
38
- yield this.db.connect();
28
+ (async () => {
29
+ await this.db.connect();
39
30
  this.db.on('error', (err) => {
40
31
  console.log('Postgres error: ', err.message, err.stack);
41
32
  this.db.end();
42
33
  this.db = new PostgresConnector({ url }).db;
43
34
  });
44
- }))();
35
+ })();
45
36
  }
46
- discoverFields(resource) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const tableName = resource.table;
49
- const stmt = yield this.db.query(`
37
+ async discoverFields(resource) {
38
+ const tableName = resource.table;
39
+ const stmt = await this.db.query(`
50
40
  SELECT
51
41
  a.attname AS name,
52
42
  pg_catalog.format_type(a.atttypid, a.atttypmod) AS type,
@@ -69,67 +59,66 @@ class PostgresConnector extends AdminForthBaseConnector {
69
59
  ORDER BY
70
60
  a.attnum;
71
61
  `, [tableName]);
72
- const rows = stmt.rows;
73
- const fieldTypes = {};
74
- rows.forEach((row) => {
75
- const field = {};
76
- const baseType = row.type.toLowerCase();
77
- if (baseType == 'int') {
78
- field.type = AdminForthDataTypes.INTEGER;
79
- field._underlineType = 'int';
80
- }
81
- else if (baseType.includes('float') || baseType.includes('double')) {
82
- field.type = AdminForthDataTypes.FLOAT;
83
- field._underlineType = 'float';
84
- }
85
- else if (baseType.includes('bool')) {
86
- field.type = AdminForthDataTypes.BOOLEAN;
87
- field._underlineType = 'bool';
88
- }
89
- else if (baseType == 'uuid') {
90
- field.type = AdminForthDataTypes.STRING;
91
- field._underlineType = 'uuid';
92
- }
93
- else if (baseType.includes('character varying')) {
94
- field.type = AdminForthDataTypes.STRING;
95
- field._underlineType = 'varchar';
96
- const length = baseType.match(/\d+/);
97
- field.maxLength = length ? parseInt(length[0]) : null;
98
- }
99
- else if (baseType == 'text') {
100
- field.type = AdminForthDataTypes.TEXT;
101
- field._underlineType = 'text';
102
- }
103
- else if (baseType.includes('decimal(')) {
104
- field.type = AdminForthDataTypes.DECIMAL;
105
- field._underlineType = 'decimal';
106
- const [precision, scale] = baseType.match(/\d+/g);
107
- field.precision = parseInt(precision);
108
- field.scale = parseInt(scale);
109
- }
110
- else if (baseType == 'real') {
111
- field.type = AdminForthDataTypes.FLOAT;
112
- field._underlineType = 'real';
113
- }
114
- else if (baseType == 'date') {
115
- field.type = AdminForthDataTypes.DATE;
116
- field._underlineType = 'timestamp';
117
- }
118
- else if (baseType.includes('date') || baseType.includes('time')) {
119
- field.type = AdminForthDataTypes.DATETIME;
120
- field._underlineType = 'timestamp';
121
- }
122
- else {
123
- field.type = 'unknown';
124
- }
125
- field._baseTypeDebug = baseType;
126
- field.primaryKey = row.pk == 1;
127
- field.default = row.dflt_value;
128
- field.required = row.notnull && !row.dflt_value;
129
- fieldTypes[row.name] = field;
130
- });
131
- return fieldTypes;
62
+ const rows = stmt.rows;
63
+ const fieldTypes = {};
64
+ rows.forEach((row) => {
65
+ const field = {};
66
+ const baseType = row.type.toLowerCase();
67
+ if (baseType == 'int') {
68
+ field.type = AdminForthDataTypes.INTEGER;
69
+ field._underlineType = 'int';
70
+ }
71
+ else if (baseType.includes('float') || baseType.includes('double')) {
72
+ field.type = AdminForthDataTypes.FLOAT;
73
+ field._underlineType = 'float';
74
+ }
75
+ else if (baseType.includes('bool')) {
76
+ field.type = AdminForthDataTypes.BOOLEAN;
77
+ field._underlineType = 'bool';
78
+ }
79
+ else if (baseType == 'uuid') {
80
+ field.type = AdminForthDataTypes.STRING;
81
+ field._underlineType = 'uuid';
82
+ }
83
+ else if (baseType.includes('character varying')) {
84
+ field.type = AdminForthDataTypes.STRING;
85
+ field._underlineType = 'varchar';
86
+ const length = baseType.match(/\d+/);
87
+ field.maxLength = length ? parseInt(length[0]) : null;
88
+ }
89
+ else if (baseType == 'text') {
90
+ field.type = AdminForthDataTypes.TEXT;
91
+ field._underlineType = 'text';
92
+ }
93
+ else if (baseType.includes('decimal(')) {
94
+ field.type = AdminForthDataTypes.DECIMAL;
95
+ field._underlineType = 'decimal';
96
+ const [precision, scale] = baseType.match(/\d+/g);
97
+ field.precision = parseInt(precision);
98
+ field.scale = parseInt(scale);
99
+ }
100
+ else if (baseType == 'real') {
101
+ field.type = AdminForthDataTypes.FLOAT;
102
+ field._underlineType = 'real';
103
+ }
104
+ else if (baseType == 'date') {
105
+ field.type = AdminForthDataTypes.DATE;
106
+ field._underlineType = 'timestamp';
107
+ }
108
+ else if (baseType.includes('date') || baseType.includes('time')) {
109
+ field.type = AdminForthDataTypes.DATETIME;
110
+ field._underlineType = 'timestamp';
111
+ }
112
+ else {
113
+ field.type = 'unknown';
114
+ }
115
+ field._baseTypeDebug = baseType;
116
+ field.primaryKey = row.pk == 1;
117
+ field.default = row.dflt_value;
118
+ field.required = row.notnull && !row.dflt_value;
119
+ fieldTypes[row.name] = field;
132
120
  });
121
+ return fieldTypes;
133
122
  }
134
123
  getFieldValue(field, value) {
135
124
  if (field.type == AdminForthDataTypes.DATETIME) {
@@ -231,81 +220,67 @@ class PostgresConnector extends AdminForthBaseConnector {
231
220
  values: filterValues,
232
221
  };
233
222
  }
234
- getDataWithOriginalTypes(_a) {
235
- return __awaiter(this, arguments, void 0, function* ({ resource, limit, offset, sort, filters }) {
236
- const columns = resource.dataSourceColumns.map((col) => `"${col.name}"`).join(', ');
237
- const tableName = resource.table;
238
- const { sql: where, paramsCount, values: filterValues } = this.whereClauseAndValues(resource, filters);
239
- const limitOffset = `LIMIT $${paramsCount} OFFSET $${paramsCount + 1}`;
240
- const d = [...filterValues, limit, offset];
241
- const orderBy = sort.length ? `ORDER BY ${sort.map((s) => `"${s.field}" ${this.SortDirectionsMap[s.direction]}`).join(', ')}` : '';
242
- const selectQuery = `SELECT ${columns} FROM ${tableName} ${where} ${orderBy} ${limitOffset}`;
243
- if (process.env.HEAVY_DEBUG) {
244
- console.log('🪲 PG selectQuery:', selectQuery, 'params:', d);
223
+ async getDataWithOriginalTypes({ resource, limit, offset, sort, filters }) {
224
+ const columns = resource.dataSourceColumns.map((col) => `"${col.name}"`).join(', ');
225
+ const tableName = resource.table;
226
+ const { sql: where, paramsCount, values: filterValues } = this.whereClauseAndValues(resource, filters);
227
+ const limitOffset = `LIMIT $${paramsCount} OFFSET $${paramsCount + 1}`;
228
+ const d = [...filterValues, limit, offset];
229
+ const orderBy = sort.length ? `ORDER BY ${sort.map((s) => `"${s.field}" ${this.SortDirectionsMap[s.direction]}`).join(', ')}` : '';
230
+ const selectQuery = `SELECT ${columns} FROM ${tableName} ${where} ${orderBy} ${limitOffset}`;
231
+ if (process.env.HEAVY_DEBUG) {
232
+ console.log('🪲 PG selectQuery:', selectQuery, 'params:', d);
233
+ }
234
+ const stmt = await this.db.query(selectQuery, d);
235
+ const rows = stmt.rows;
236
+ return rows.map((row) => {
237
+ const newRow = {};
238
+ for (const [key, value] of Object.entries(row)) {
239
+ newRow[key] = value;
245
240
  }
246
- const stmt = yield this.db.query(selectQuery, d);
247
- const rows = stmt.rows;
248
- return rows.map((row) => {
249
- const newRow = {};
250
- for (const [key, value] of Object.entries(row)) {
251
- newRow[key] = value;
252
- }
253
- return newRow;
254
- });
241
+ return newRow;
255
242
  });
256
243
  }
257
- getCount(_a) {
258
- return __awaiter(this, arguments, void 0, function* ({ resource, filters }) {
259
- const tableName = resource.table;
260
- const { sql: where, values: filterValues } = this.whereClauseAndValues(resource, filters);
261
- const stmt = yield this.db.query(`SELECT COUNT(*) FROM ${tableName} ${where}`, filterValues);
262
- return stmt.rows[0].count;
263
- });
244
+ async getCount({ resource, filters }) {
245
+ const tableName = resource.table;
246
+ const { sql: where, values: filterValues } = this.whereClauseAndValues(resource, filters);
247
+ const stmt = await this.db.query(`SELECT COUNT(*) FROM ${tableName} ${where}`, filterValues);
248
+ return stmt.rows[0].count;
264
249
  }
265
- getMinMaxForColumnsWithOriginalTypes(_a) {
266
- return __awaiter(this, arguments, void 0, function* ({ resource, columns }) {
267
- const tableName = resource.table;
268
- const result = {};
269
- yield Promise.all(columns.map((col) => __awaiter(this, void 0, void 0, function* () {
270
- const stmt = yield this.db.query(`SELECT MIN(${col.name}) as min, MAX(${col.name}) as max FROM ${tableName}`);
271
- const { min, max } = stmt.rows[0];
272
- result[col.name] = {
273
- min, max,
274
- };
275
- })));
276
- return result;
277
- });
250
+ async getMinMaxForColumnsWithOriginalTypes({ resource, columns }) {
251
+ const tableName = resource.table;
252
+ const result = {};
253
+ await Promise.all(columns.map(async (col) => {
254
+ const stmt = await this.db.query(`SELECT MIN(${col.name}) as min, MAX(${col.name}) as max FROM ${tableName}`);
255
+ const { min, max } = stmt.rows[0];
256
+ result[col.name] = {
257
+ min, max,
258
+ };
259
+ }));
260
+ return result;
278
261
  }
279
- createRecordOriginalValues(_a) {
280
- return __awaiter(this, arguments, void 0, function* ({ resource, record }) {
281
- const tableName = resource.table;
282
- const columns = Object.keys(record);
283
- const placeholders = columns.map((_, i) => `$${i + 1}`).join(', ');
284
- const values = columns.map((colName) => record[colName]);
285
- for (let i = 0; i < columns.length; i++) {
286
- columns[i] = `"${columns[i]}"`;
287
- }
288
- yield this.db.query(`INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${placeholders})`, values);
289
- });
262
+ async createRecordOriginalValues({ resource, record }) {
263
+ const tableName = resource.table;
264
+ const columns = Object.keys(record);
265
+ const placeholders = columns.map((_, i) => `$${i + 1}`).join(', ');
266
+ const values = columns.map((colName) => record[colName]);
267
+ for (let i = 0; i < columns.length; i++) {
268
+ columns[i] = `"${columns[i]}"`;
269
+ }
270
+ await this.db.query(`INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${placeholders})`, values);
290
271
  }
291
- updateRecordOriginalValues(_a) {
292
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId, newValues }) {
293
- const values = [...Object.values(newValues), recordId];
294
- const columnsWithPlaceholders = Object.keys(newValues).map((col, i) => `"${col}" = $${i + 1}`).join(', ');
295
- yield this.db.query(`UPDATE ${resource.table} SET ${columnsWithPlaceholders} WHERE "${this.getPrimaryKey(resource)}" = $${values.length}`, values);
296
- });
272
+ async updateRecordOriginalValues({ resource, recordId, newValues }) {
273
+ const values = [...Object.values(newValues), recordId];
274
+ const columnsWithPlaceholders = Object.keys(newValues).map((col, i) => `"${col}" = $${i + 1}`).join(', ');
275
+ await this.db.query(`UPDATE ${resource.table} SET ${columnsWithPlaceholders} WHERE "${this.getPrimaryKey(resource)}" = $${values.length}`, values);
297
276
  }
298
- deleteRecord(_a) {
299
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId }) {
300
- const res = yield this.db.query(`DELETE FROM ${resource.table} WHERE "${this.getPrimaryKey(resource)}" = $1`, [recordId]);
301
- return res.rowCount > 0;
302
- });
277
+ async deleteRecord({ resource, recordId }) {
278
+ const res = await this.db.query(`DELETE FROM ${resource.table} WHERE "${this.getPrimaryKey(resource)}" = $1`, [recordId]);
279
+ return res.rowCount > 0;
303
280
  }
304
- close() {
305
- return __awaiter(this, void 0, void 0, function* () {
306
- yield this.db.end();
307
- });
281
+ async close() {
282
+ await this.db.end();
308
283
  }
309
284
  }
310
285
  export default PostgresConnector;
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9kYXRhQ29ubmVjdG9ycy9wb3N0Z3Jlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxtQkFBbUIsRUFBc0IseUJBQXlCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sOEJBQThCLENBQUM7QUFDNUssT0FBTyx1QkFBdUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBR3ZCLE1BQU0saUJBQWtCLFNBQVEsdUJBQXVCO0lBSW5ELFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDZixLQUFLLEVBQUUsQ0FBQztRQWNaLGlCQUFZLEdBQUc7WUFDWCxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7WUFDbkMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJO1lBQ3BDLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRztZQUNuQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUc7WUFDbkMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJO1lBQ3JDLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSTtZQUNyQyxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07WUFDeEMsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO1lBQzFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSTtZQUNwQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVE7U0FDNUMsQ0FBQztRQUVGLHNCQUFpQixHQUFHO1lBQ2hCLENBQUMsd0JB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
286
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../dataConnectors/postgres.ts"],"names":[],"mappings":"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"}