adminforth 1.3.54-next.9 → 1.3.55-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 (224) hide show
  1. package/dist/auth.d.ts +31 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +42 -56
  4. package/dist/auth.js.map +1 -0
  5. package/dist/basePlugin.d.ts +18 -0
  6. package/dist/basePlugin.d.ts.map +1 -0
  7. package/dist/basePlugin.js +1 -0
  8. package/dist/basePlugin.js.map +1 -0
  9. package/dist/dataConnectors/baseConnector.d.ts +94 -0
  10. package/dist/dataConnectors/baseConnector.d.ts.map +1 -0
  11. package/dist/dataConnectors/baseConnector.js +108 -122
  12. package/dist/dataConnectors/baseConnector.js.map +1 -0
  13. package/dist/dataConnectors/clickhouse.d.ts +92 -0
  14. package/dist/dataConnectors/clickhouse.d.ts.map +1 -0
  15. package/dist/dataConnectors/clickhouse.js +132 -149
  16. package/dist/dataConnectors/clickhouse.js.map +1 -0
  17. package/dist/dataConnectors/mongo.d.ts +93 -0
  18. package/dist/dataConnectors/mongo.d.ts.map +1 -0
  19. package/dist/dataConnectors/mongo.js +75 -101
  20. package/dist/dataConnectors/mongo.js.map +1 -0
  21. package/dist/dataConnectors/postgres.d.ts +71 -0
  22. package/dist/dataConnectors/postgres.d.ts.map +1 -0
  23. package/dist/dataConnectors/postgres.js +124 -143
  24. package/dist/dataConnectors/postgres.js.map +1 -0
  25. package/dist/dataConnectors/sqlite.d.ts +67 -0
  26. package/dist/dataConnectors/sqlite.d.ts.map +1 -0
  27. package/dist/dataConnectors/sqlite.js +113 -130
  28. package/dist/dataConnectors/sqlite.js.map +1 -0
  29. package/dist/index.d.ts +92 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +197 -217
  32. package/dist/index.js.map +1 -0
  33. package/dist/modules/codeInjector.d.ts +35 -0
  34. package/dist/modules/codeInjector.d.ts.map +1 -0
  35. package/dist/modules/codeInjector.js +480 -486
  36. package/dist/modules/codeInjector.js.map +1 -0
  37. package/dist/modules/configValidator.d.ts +12 -0
  38. package/dist/modules/configValidator.d.ts.map +1 -0
  39. package/dist/modules/configValidator.js +31 -22
  40. package/dist/modules/configValidator.js.map +1 -0
  41. package/dist/modules/operationalResource.d.ts +17 -0
  42. package/dist/modules/operationalResource.d.ts.map +1 -0
  43. package/dist/modules/operationalResource.js +50 -70
  44. package/dist/modules/operationalResource.js.map +1 -0
  45. package/dist/modules/restApi.d.ts +10 -0
  46. package/dist/modules/restApi.d.ts.map +1 -0
  47. package/dist/modules/restApi.js +104 -116
  48. package/dist/modules/restApi.js.map +1 -0
  49. package/dist/modules/styleGenerator.d.ts +9 -0
  50. package/dist/modules/styleGenerator.d.ts.map +1 -0
  51. package/dist/modules/styleGenerator.js +1 -0
  52. package/dist/modules/styleGenerator.js.map +1 -0
  53. package/dist/modules/styles.d.ts +96 -0
  54. package/dist/modules/styles.d.ts.map +1 -0
  55. package/dist/modules/styles.js +1 -0
  56. package/dist/modules/styles.js.map +1 -0
  57. package/dist/modules/utils.d.ts +39 -0
  58. package/dist/modules/utils.d.ts.map +1 -0
  59. package/dist/modules/utils.js +1 -0
  60. package/dist/modules/utils.js.map +1 -0
  61. package/dist/plugins/audit-log/types.d.ts +35 -0
  62. package/dist/plugins/audit-log/types.d.ts.map +1 -0
  63. package/dist/plugins/audit-log/types.js +2 -0
  64. package/dist/plugins/audit-log/types.js.map +1 -0
  65. package/dist/plugins/chat-gpt/types.d.ts +82 -0
  66. package/dist/plugins/chat-gpt/types.d.ts.map +1 -0
  67. package/dist/plugins/chat-gpt/types.js +2 -0
  68. package/dist/plugins/chat-gpt/types.js.map +1 -0
  69. package/dist/plugins/email-password-reset/types.d.ts +28 -0
  70. package/dist/plugins/email-password-reset/types.d.ts.map +1 -0
  71. package/dist/plugins/email-password-reset/types.js +2 -0
  72. package/dist/plugins/email-password-reset/types.js.map +1 -0
  73. package/dist/plugins/foreign-inline-list/types.d.ts +19 -0
  74. package/dist/plugins/foreign-inline-list/types.d.ts.map +1 -0
  75. package/dist/plugins/foreign-inline-list/types.js +2 -0
  76. package/dist/plugins/foreign-inline-list/types.js.map +1 -0
  77. package/dist/plugins/import-export/types.d.ts +3 -0
  78. package/dist/plugins/import-export/types.d.ts.map +1 -0
  79. package/dist/plugins/import-export/types.js +2 -0
  80. package/dist/plugins/import-export/types.js.map +1 -0
  81. package/dist/plugins/rich-editor/custom/async-queue.d.ts +8 -0
  82. package/dist/plugins/rich-editor/custom/async-queue.d.ts.map +1 -0
  83. package/dist/plugins/rich-editor/custom/async-queue.js +29 -0
  84. package/dist/plugins/rich-editor/custom/async-queue.js.map +1 -0
  85. package/dist/plugins/rich-editor/dist/custom/async-queue.d.ts +8 -0
  86. package/dist/plugins/rich-editor/dist/custom/async-queue.d.ts.map +1 -0
  87. package/dist/plugins/rich-editor/dist/custom/async-queue.js +29 -0
  88. package/dist/plugins/rich-editor/dist/custom/async-queue.js.map +1 -0
  89. package/dist/plugins/rich-editor/types.d.ts +153 -0
  90. package/dist/plugins/rich-editor/types.d.ts.map +1 -0
  91. package/dist/plugins/rich-editor/types.js +16 -0
  92. package/dist/plugins/rich-editor/types.js.map +1 -0
  93. package/dist/plugins/two-factors-auth/types.d.ts +18 -0
  94. package/dist/plugins/two-factors-auth/types.d.ts.map +1 -0
  95. package/dist/plugins/two-factors-auth/types.js +2 -0
  96. package/dist/plugins/two-factors-auth/types.js.map +1 -0
  97. package/dist/plugins/upload/types.d.ts +132 -0
  98. package/dist/plugins/upload/types.d.ts.map +1 -0
  99. package/dist/plugins/upload/types.js +2 -0
  100. package/dist/plugins/upload/types.js.map +1 -0
  101. package/dist/servers/express.d.ts +18 -0
  102. package/dist/servers/express.d.ts.map +1 -0
  103. package/dist/servers/express.js +30 -42
  104. package/dist/servers/express.js.map +1 -0
  105. package/dist/spa/index.html +2 -2
  106. package/dist/spa/package-lock.json +87 -1
  107. package/dist/spa/package.json +4 -1
  108. package/dist/spa/src/App.vue +154 -50
  109. package/dist/spa/src/components/AcceptModal.vue +1 -1
  110. package/dist/spa/src/components/Breadcrumbs.vue +1 -1
  111. package/dist/spa/src/components/CustomDatePicker.vue +1 -1
  112. package/dist/spa/src/components/CustomDateRangePicker.vue +1 -1
  113. package/dist/spa/src/components/CustomRangePicker.vue +9 -5
  114. package/dist/spa/src/components/Dropdown.vue +4 -4
  115. package/dist/spa/src/components/Filters.vue +2 -2
  116. package/dist/spa/src/components/MenuLink.vue +3 -0
  117. package/dist/spa/src/components/ResourceForm.vue +67 -36
  118. package/dist/spa/src/components/ResourceListTable.vue +216 -144
  119. package/dist/spa/src/components/SkeleteLoader.vue +4 -4
  120. package/dist/spa/src/components/Toast.vue +3 -2
  121. package/dist/spa/src/components/ValueRenderer.vue +81 -6
  122. package/dist/spa/src/composables/useFrontendApi.ts +1 -1
  123. package/dist/spa/src/composables/useStores.ts +18 -14
  124. package/dist/spa/src/index.scss +4 -0
  125. package/{spa → dist/spa}/src/renderers/CompactUUID.vue +4 -4
  126. package/{spa → dist/spa}/src/renderers/CountryFlag.vue +2 -2
  127. package/dist/spa/src/router/index.ts +4 -8
  128. package/dist/spa/src/spa_types/core.ts +2 -0
  129. package/dist/spa/src/stores/core.ts +6 -2
  130. package/dist/spa/src/stores/filters.ts +15 -10
  131. package/dist/spa/src/stores/toast.ts +22 -6
  132. package/dist/spa/src/types/AdminForthConfig.ts +340 -55
  133. package/dist/spa/src/types/FrontendAPI.ts +52 -30
  134. package/dist/spa/src/utils.ts +59 -2
  135. package/dist/spa/src/views/CreateView.vue +15 -4
  136. package/dist/spa/src/views/EditView.vue +20 -7
  137. package/dist/spa/src/views/ListView.vue +132 -38
  138. package/dist/spa/src/views/LoginView.vue +50 -18
  139. package/dist/spa/src/views/ShowView.vue +25 -15
  140. package/dist/types/AdminForthConfig.d.ts +1619 -0
  141. package/dist/types/AdminForthConfig.d.ts.map +1 -0
  142. package/dist/types/AdminForthConfig.js +1 -0
  143. package/dist/types/AdminForthConfig.js.map +1 -0
  144. package/{types/FrontendAPI.ts → dist/types/FrontendAPI.d.ts} +27 -52
  145. package/dist/types/FrontendAPI.d.ts.map +1 -0
  146. package/dist/types/FrontendAPI.js +1 -0
  147. package/dist/types/FrontendAPI.js.map +1 -0
  148. package/package.json +16 -6
  149. package/auth.ts +0 -140
  150. package/basePlugin.ts +0 -70
  151. package/dataConnectors/baseConnector.ts +0 -216
  152. package/dataConnectors/clickhouse.ts +0 -338
  153. package/dataConnectors/mongo.ts +0 -202
  154. package/dataConnectors/postgres.ts +0 -306
  155. package/dataConnectors/sqlite.ts +0 -254
  156. package/index.ts +0 -428
  157. package/modules/codeInjector.ts +0 -736
  158. package/modules/configValidator.ts +0 -571
  159. package/modules/operationalResource.ts +0 -98
  160. package/modules/restApi.ts +0 -718
  161. package/modules/styleGenerator.ts +0 -55
  162. package/modules/styles.ts +0 -126
  163. package/modules/utils.ts +0 -472
  164. package/servers/express.ts +0 -259
  165. package/spa/.eslintrc.cjs +0 -14
  166. package/spa/README.md +0 -39
  167. package/spa/env.d.ts +0 -1
  168. package/spa/index.html +0 -23
  169. package/spa/package-lock.json +0 -4602
  170. package/spa/package.json +0 -51
  171. package/spa/postcss.config.js +0 -6
  172. package/spa/public/assets/favicon.png +0 -0
  173. package/spa/src/App.vue +0 -418
  174. package/spa/src/assets/base.css +0 -2
  175. package/spa/src/assets/logo.svg +0 -19
  176. package/spa/src/components/AcceptModal.vue +0 -45
  177. package/spa/src/components/Breadcrumbs.vue +0 -41
  178. package/spa/src/components/BreadcrumbsWithButtons.vue +0 -26
  179. package/spa/src/components/CustomDatePicker.vue +0 -176
  180. package/spa/src/components/CustomDateRangePicker.vue +0 -218
  181. package/spa/src/components/CustomRangePicker.vue +0 -156
  182. package/spa/src/components/Dropdown.vue +0 -168
  183. package/spa/src/components/Filters.vue +0 -222
  184. package/spa/src/components/HelloWorld.vue +0 -17
  185. package/spa/src/components/MenuLink.vue +0 -27
  186. package/spa/src/components/ResourceForm.vue +0 -290
  187. package/spa/src/components/ResourceListTable.vue +0 -466
  188. package/spa/src/components/SingleSkeletLoader.vue +0 -13
  189. package/spa/src/components/SkeleteLoader.vue +0 -23
  190. package/spa/src/components/Toast.vue +0 -78
  191. package/spa/src/components/ValueRenderer.vue +0 -114
  192. package/spa/src/components/icons/IconCalendar.vue +0 -5
  193. package/spa/src/components/icons/IconCommunity.vue +0 -7
  194. package/spa/src/components/icons/IconDocumentation.vue +0 -7
  195. package/spa/src/components/icons/IconEcosystem.vue +0 -7
  196. package/spa/src/components/icons/IconSupport.vue +0 -7
  197. package/spa/src/components/icons/IconTime.vue +0 -5
  198. package/spa/src/components/icons/IconTooling.vue +0 -19
  199. package/spa/src/composables/useFrontendApi.ts +0 -26
  200. package/spa/src/composables/useStores.ts +0 -131
  201. package/spa/src/index.scss +0 -31
  202. package/spa/src/main.ts +0 -18
  203. package/spa/src/router/index.ts +0 -59
  204. package/spa/src/spa_types/core.ts +0 -53
  205. package/spa/src/stores/core.ts +0 -148
  206. package/spa/src/stores/filters.ts +0 -27
  207. package/spa/src/stores/modal.ts +0 -48
  208. package/spa/src/stores/toast.ts +0 -31
  209. package/spa/src/stores/user.ts +0 -72
  210. package/spa/src/utils.ts +0 -160
  211. package/spa/src/views/CreateView.vue +0 -167
  212. package/spa/src/views/EditView.vue +0 -170
  213. package/spa/src/views/ListView.vue +0 -352
  214. package/spa/src/views/LoginView.vue +0 -192
  215. package/spa/src/views/ResourceParent.vue +0 -17
  216. package/spa/src/views/ShowView.vue +0 -186
  217. package/spa/tailwind.config.js +0 -17
  218. package/spa/tsconfig.app.json +0 -14
  219. package/spa/tsconfig.json +0 -11
  220. package/spa/tsconfig.node.json +0 -19
  221. package/spa/vite.config.ts +0 -56
  222. package/tsconfig.json +0 -112
  223. package/types/AdminForthConfig.ts +0 -1762
  224. /package/{spa → dist/spa}/src/components/ThreeDotsMenu.vue +0 -0
@@ -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 { MongoClient } from 'mongodb';
12
3
  import { AdminForthDataTypes, AdminForthFilterOperators, AdminForthSortDirections } from '../types/AdminForthConfig.js';
@@ -31,9 +22,9 @@ class MongoConnector extends AdminForthBaseConnector {
31
22
  [AdminForthSortDirections.desc]: -1,
32
23
  };
33
24
  this.db = new MongoClient(url);
34
- (() => __awaiter(this, void 0, void 0, function* () {
25
+ (async () => {
35
26
  try {
36
- yield this.db.connect();
27
+ await this.db.connect();
37
28
  this.db.on('error', (err) => {
38
29
  console.log('Mongo error: ', err.message);
39
30
  });
@@ -42,24 +33,22 @@ class MongoConnector extends AdminForthBaseConnector {
42
33
  catch (e) {
43
34
  console.error('ERROR: Failed to connect to Mongo', e);
44
35
  }
45
- }))();
36
+ })();
46
37
  }
47
- discoverFields(resource) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- return resource.columns.filter((col) => !col.virtual).reduce((acc, col) => {
50
- if (!col.type) {
51
- throw new Error(`Type is not defined for column ${col.name} in resource ${resource.table}`);
52
- }
53
- acc[col.name] = {
54
- name: col.name,
55
- type: col.type,
56
- primaryKey: col.primaryKey,
57
- virtual: col.virtual,
58
- _underlineType: col._underlineType,
59
- };
60
- return acc;
61
- }, {});
62
- });
38
+ async discoverFields(resource) {
39
+ return resource.columns.filter((col) => !col.virtual).reduce((acc, col) => {
40
+ if (!col.type) {
41
+ throw new Error(`Type is not defined for column ${col.name} in resource ${resource.table}`);
42
+ }
43
+ acc[col.name] = {
44
+ name: col.name,
45
+ type: col.type,
46
+ primaryKey: col.primaryKey,
47
+ virtual: col.virtual,
48
+ _underlineType: col._underlineType,
49
+ };
50
+ return acc;
51
+ }, {});
63
52
  }
64
53
  getPrimaryKey(resource) {
65
54
  for (const col of resource.dataSourceColumns) {
@@ -108,87 +97,72 @@ class MongoConnector extends AdminForthBaseConnector {
108
97
  }
109
98
  return value;
110
99
  }
111
- genQuery(_a) {
112
- return __awaiter(this, arguments, void 0, function* ({ filters }) {
113
- const query = {};
114
- for (const filter of filters) {
115
- query[filter.field] = this.OperatorsMap[filter.operator](filter.value);
116
- }
117
- return query;
118
- });
100
+ async genQuery({ filters }) {
101
+ const query = {};
102
+ for (const filter of filters) {
103
+ query[filter.field] = this.OperatorsMap[filter.operator](filter.value);
104
+ }
105
+ return query;
119
106
  }
120
- getDataWithOriginalTypes(_a) {
121
- return __awaiter(this, arguments, void 0, function* ({ resource, limit, offset, sort, filters }) {
122
- // const columns = resource.dataSourceColumns.filter(c=> !c.virtual).map((col) => col.name).join(', ');
123
- const tableName = resource.table;
124
- const collection = this.db.db().collection(tableName);
125
- const query = yield this.genQuery({ filters });
126
- const sortArray = sort.map((s) => {
127
- return [s.field, this.SortDirectionsMap[s.direction]];
128
- });
129
- const result = yield collection.find(query)
130
- .sort(sortArray)
131
- .skip(offset)
132
- .limit(limit)
133
- .toArray();
134
- return result;
107
+ async getDataWithOriginalTypes({ resource, limit, offset, sort, filters }) {
108
+ // const columns = resource.dataSourceColumns.filter(c=> !c.virtual).map((col) => col.name).join(', ');
109
+ const tableName = resource.table;
110
+ const collection = this.db.db().collection(tableName);
111
+ const query = await this.genQuery({ filters });
112
+ const sortArray = sort.map((s) => {
113
+ return [s.field, this.SortDirectionsMap[s.direction]];
135
114
  });
115
+ const result = await collection.find(query)
116
+ .sort(sortArray)
117
+ .skip(offset)
118
+ .limit(limit)
119
+ .toArray();
120
+ return result;
136
121
  }
137
- getCount(_a) {
138
- return __awaiter(this, arguments, void 0, function* ({ resource, filters }) {
139
- const collection = this.db.db().collection(resource.table);
140
- const query = {};
141
- for (const filter of filters) {
142
- query[filter.field] = this.OperatorsMap[filter.operator](filter.value);
143
- }
144
- return yield collection.countDocuments(query);
145
- });
122
+ async getCount({ resource, filters }) {
123
+ const collection = this.db.db().collection(resource.table);
124
+ const query = {};
125
+ for (const filter of filters) {
126
+ query[filter.field] = this.OperatorsMap[filter.operator](filter.value);
127
+ }
128
+ return await collection.countDocuments(query);
146
129
  }
147
- getMinMaxForColumnsWithOriginalTypes(_a) {
148
- return __awaiter(this, arguments, void 0, function* ({ resource, columns }) {
149
- const tableName = resource.table;
150
- const collection = this.db.db().collection(tableName);
151
- const result = {};
152
- for (const column of columns) {
153
- result[column] = yield collection
154
- .aggregate([
155
- { $group: { _id: null, min: { $min: `$${column}` }, max: { $max: `$${column}` } } },
156
- ])
157
- .toArray();
158
- }
159
- return result;
160
- });
130
+ async getMinMaxForColumnsWithOriginalTypes({ resource, columns }) {
131
+ const tableName = resource.table;
132
+ const collection = this.db.db().collection(tableName);
133
+ const result = {};
134
+ for (const column of columns) {
135
+ result[column] = await collection
136
+ .aggregate([
137
+ { $group: { _id: null, min: { $min: `$${column}` }, max: { $max: `$${column}` } } },
138
+ ])
139
+ .toArray();
140
+ }
141
+ return result;
161
142
  }
162
- createRecordOriginalValues(_a) {
163
- return __awaiter(this, arguments, void 0, function* ({ resource, record }) {
164
- const tableName = resource.table;
165
- const collection = this.db.db().collection(tableName);
166
- const columns = Object.keys(record);
167
- const newRecord = {};
168
- for (const colName of columns) {
169
- newRecord[colName] = record[colName];
170
- }
171
- yield collection.insertOne(newRecord);
172
- });
143
+ async createRecordOriginalValues({ resource, record }) {
144
+ const tableName = resource.table;
145
+ const collection = this.db.db().collection(tableName);
146
+ const columns = Object.keys(record);
147
+ const newRecord = {};
148
+ for (const colName of columns) {
149
+ newRecord[colName] = record[colName];
150
+ }
151
+ await collection.insertOne(newRecord);
173
152
  }
174
- updateRecordOriginalValues(_a) {
175
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId, newValues }) {
176
- const collection = this.db.db().collection(resource.table);
177
- yield collection.updateOne({ [this.getPrimaryKey(resource)]: recordId }, { $set: newValues });
178
- });
153
+ async updateRecordOriginalValues({ resource, recordId, newValues }) {
154
+ const collection = this.db.db().collection(resource.table);
155
+ await collection.updateOne({ [this.getPrimaryKey(resource)]: recordId }, { $set: newValues });
179
156
  }
180
- deleteRecord(_a) {
181
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId }) {
182
- const primaryKey = this.getPrimaryKey(resource);
183
- const collection = this.db.db().collection(resource.table);
184
- const res = yield collection.deleteOne({ [primaryKey]: recordId });
185
- return res.deletedCount > 0;
186
- });
157
+ async deleteRecord({ resource, recordId }) {
158
+ const primaryKey = this.getPrimaryKey(resource);
159
+ const collection = this.db.db().collection(resource.table);
160
+ const res = await collection.deleteOne({ [primaryKey]: recordId });
161
+ return res.deletedCount > 0;
187
162
  }
188
- close() {
189
- return __awaiter(this, void 0, void 0, function* () {
190
- yield this.db.close();
191
- });
163
+ async close() {
164
+ await this.db.close();
192
165
  }
193
166
  }
194
167
  export default MongoConnector;
168
+ //# sourceMappingURL=mongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../dataConnectors/mongo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { AdminForthResource, AdminForthFilterOperators, IAdminForthDataSourceConnector } from '../types/AdminForthConfig.js';
2
+ import AdminForthBaseConnector from './baseConnector.js';
3
+ declare class PostgresConnector extends AdminForthBaseConnector implements IAdminForthDataSourceConnector {
4
+ db: any;
5
+ constructor({ url }: {
6
+ url: any;
7
+ });
8
+ OperatorsMap: {
9
+ eq: string;
10
+ ne: string;
11
+ gt: string;
12
+ lt: string;
13
+ gte: string;
14
+ lte: string;
15
+ like: string;
16
+ ilike: string;
17
+ in: string;
18
+ nin: string;
19
+ };
20
+ SortDirectionsMap: {
21
+ asc: string;
22
+ desc: string;
23
+ };
24
+ discoverFields(resource: any): Promise<{}>;
25
+ getFieldValue(field: any, value: any): any;
26
+ setFieldValue(field: any, value: any): any;
27
+ whereClauseAndValues(resource: AdminForthResource, filters: {
28
+ field: string;
29
+ operator: AdminForthFilterOperators;
30
+ value: any;
31
+ }[]): {
32
+ sql: string;
33
+ paramsCount: number;
34
+ values: any[];
35
+ };
36
+ getDataWithOriginalTypes({ resource, limit, offset, sort, filters }: {
37
+ resource: any;
38
+ limit: any;
39
+ offset: any;
40
+ sort: any;
41
+ filters: any;
42
+ }): Promise<any[]>;
43
+ getCount({ resource, filters }: {
44
+ resource: AdminForthResource;
45
+ filters: {
46
+ field: string;
47
+ operator: AdminForthFilterOperators;
48
+ value: any;
49
+ }[];
50
+ }): Promise<number>;
51
+ getMinMaxForColumnsWithOriginalTypes({ resource, columns }: {
52
+ resource: any;
53
+ columns: any;
54
+ }): Promise<{}>;
55
+ createRecordOriginalValues({ resource, record }: {
56
+ resource: any;
57
+ record: any;
58
+ }): Promise<void>;
59
+ updateRecordOriginalValues({ resource, recordId, newValues }: {
60
+ resource: any;
61
+ recordId: any;
62
+ newValues: any;
63
+ }): Promise<void>;
64
+ deleteRecord({ resource, recordId }: {
65
+ resource: any;
66
+ recordId: any;
67
+ }): Promise<boolean>;
68
+ close(): Promise<void>;
69
+ }
70
+ export default PostgresConnector;
71
+ //# sourceMappingURL=postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../dataConnectors/postgres.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,kBAAkB,EAAE,yBAAyB,EAA4B,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC5K,OAAO,uBAAuB,MAAM,oBAAoB,CAAC;AAIzD,cAAM,iBAAkB,SAAQ,uBAAwB,YAAW,8BAA8B;IAE7F,EAAE,EAAE,GAAG,CAAC;gBAEI,EAAE,GAAG,EAAE;;KAAA;IAenB,YAAY;;;;;;;;;;;MAWV;IAEF,iBAAiB;;;MAGf;IAEI,cAAc,CAAC,QAAQ,KAAA;IAwF7B,aAAa,CAAC,KAAK,KAAA,EAAE,KAAK,KAAA;IAyC1B,aAAa,CAAC,KAAK,KAAA,EAAE,KAAK,KAAA;IAgB1B,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,yBAAyB,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,EAAE,GAAI;QAClI,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,GAAG,EAAE,CAAC;KACf;IA6CK,wBAAwB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;;;;;;KAAA,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAwBpF,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAAE,QAAQ,EAAE,kBAAkB,CAAC;QAAC,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,yBAAyB,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,EAAE,CAAC;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAOlK,oCAAoC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;;;KAAA;IAa1D,0BAA0B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;;;KAAA;IAW/C,0BAA0B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAG,SAAS,EAAE;;;;KAAA;IAM7D,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE;;;KAAA,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,KAAK;CAGd;AAED,eAAe,iBAAiB,CAAC"}
@@ -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) {
@@ -154,7 +143,12 @@ class PostgresConnector extends AdminForthBaseConnector {
154
143
  }
155
144
  if (field.type == AdminForthDataTypes.JSON) {
156
145
  if (typeof value == 'string') {
157
- return JSON.parse(value);
146
+ try {
147
+ return JSON.parse(value);
148
+ }
149
+ catch (e) {
150
+ return { 'error': `Failed to parse JSON: ${e.message}` };
151
+ }
158
152
  }
159
153
  else if (typeof value == 'object') {
160
154
  return value;
@@ -226,80 +220,67 @@ class PostgresConnector extends AdminForthBaseConnector {
226
220
  values: filterValues,
227
221
  };
228
222
  }
229
- getDataWithOriginalTypes(_a) {
230
- return __awaiter(this, arguments, void 0, function* ({ resource, limit, offset, sort, filters }) {
231
- const columns = resource.dataSourceColumns.map((col) => `"${col.name}"`).join(', ');
232
- const tableName = resource.table;
233
- const { sql: where, paramsCount, values: filterValues } = this.whereClauseAndValues(resource, filters);
234
- const limitOffset = `LIMIT $${paramsCount} OFFSET $${paramsCount + 1}`;
235
- const d = [...filterValues, limit, offset];
236
- const orderBy = sort.length ? `ORDER BY ${sort.map((s) => `"${s.field}" ${this.SortDirectionsMap[s.direction]}`).join(', ')}` : '';
237
- const selectQuery = `SELECT ${columns} FROM ${tableName} ${where} ${orderBy} ${limitOffset}`;
238
- if (process.env.HEAVY_DEBUG) {
239
- 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;
240
240
  }
241
- const stmt = yield this.db.query(selectQuery, d);
242
- const rows = stmt.rows;
243
- return rows.map((row) => {
244
- const newRow = {};
245
- for (const [key, value] of Object.entries(row)) {
246
- newRow[key] = value;
247
- }
248
- return newRow;
249
- });
241
+ return newRow;
250
242
  });
251
243
  }
252
- getCount(_a) {
253
- return __awaiter(this, arguments, void 0, function* ({ resource, filters }) {
254
- const tableName = resource.table;
255
- const { sql: where, values: filterValues } = this.whereClauseAndValues(resource, filters);
256
- const stmt = yield this.db.query(`SELECT COUNT(*) FROM ${tableName} ${where}`, filterValues);
257
- return stmt.rows[0].count;
258
- });
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;
259
249
  }
260
- getMinMaxForColumnsWithOriginalTypes(_a) {
261
- return __awaiter(this, arguments, void 0, function* ({ resource, columns }) {
262
- const tableName = resource.table;
263
- const result = {};
264
- yield Promise.all(columns.map((col) => __awaiter(this, void 0, void 0, function* () {
265
- const stmt = yield this.db.query(`SELECT MIN(${col.name}) as min, MAX(${col.name}) as max FROM ${tableName}`);
266
- const { min, max } = stmt.rows[0];
267
- result[col.name] = {
268
- min, max,
269
- };
270
- })));
271
- return result;
272
- });
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;
273
261
  }
274
- createRecordOriginalValues(_a) {
275
- return __awaiter(this, arguments, void 0, function* ({ resource, record }) {
276
- const tableName = resource.table;
277
- const columns = Object.keys(record);
278
- const placeholders = columns.map((_, i) => `$${i + 1}`).join(', ');
279
- const values = columns.map((colName) => record[colName]);
280
- for (let i = 0; i < columns.length; i++) {
281
- columns[i] = `"${columns[i]}"`;
282
- }
283
- yield this.db.query(`INSERT INTO ${tableName} (${columns.join(', ')}) VALUES (${placeholders})`, values);
284
- });
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);
285
271
  }
286
- updateRecordOriginalValues(_a) {
287
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId, newValues }) {
288
- const values = [...Object.values(newValues), recordId];
289
- const columnsWithPlaceholders = Object.keys(newValues).map((col, i) => `"${col}" = $${i + 1}`).join(', ');
290
- yield this.db.query(`UPDATE ${resource.table} SET ${columnsWithPlaceholders} WHERE "${this.getPrimaryKey(resource)}" = $${values.length}`, values);
291
- });
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);
292
276
  }
293
- deleteRecord(_a) {
294
- return __awaiter(this, arguments, void 0, function* ({ resource, recordId }) {
295
- const res = yield this.db.query(`DELETE FROM ${resource.table} WHERE "${this.getPrimaryKey(resource)}" = $1`, [recordId]);
296
- return res.rowCount > 0;
297
- });
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;
298
280
  }
299
- close() {
300
- return __awaiter(this, void 0, void 0, function* () {
301
- yield this.db.end();
302
- });
281
+ async close() {
282
+ await this.db.end();
303
283
  }
304
284
  }
305
285
  export default PostgresConnector;
286
+ //# sourceMappingURL=postgres.js.map