prostgles-server 4.2.567 → 4.2.569

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 (223) hide show
  1. package/dist/Auth/AuthTypes.d.ts +5 -5
  2. package/dist/Auth/AuthTypes.d.ts.map +1 -1
  3. package/dist/Auth/AuthTypes.js.map +1 -1
  4. package/dist/Auth/endpoints/setCatchAllRequestHandler.d.ts.map +1 -1
  5. package/dist/Auth/endpoints/setCatchAllRequestHandler.js +2 -2
  6. package/dist/Auth/endpoints/setCatchAllRequestHandler.js.map +1 -1
  7. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts +1 -1
  8. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts.map +1 -1
  9. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts +1 -1
  10. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
  11. package/dist/DboBuilder/DboBuilder.js +4 -4
  12. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  13. package/dist/DboBuilder/DboBuilderTypes.d.ts +2 -18
  14. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  15. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  16. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +15 -5
  17. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  18. package/dist/DboBuilder/TableHandler/TableHandler.js +4 -3
  19. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  20. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  21. package/dist/DboBuilder/TableHandler/delete.js +17 -14
  22. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  23. package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
  24. package/dist/DboBuilder/TableHandler/insert/insert.js +3 -12
  25. package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
  26. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.d.ts.map +1 -1
  27. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js +10 -15
  28. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js.map +1 -1
  29. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js +1 -1
  30. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js.map +1 -1
  31. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +8 -6
  32. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  33. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +30 -48
  34. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  35. package/dist/DboBuilder/TableHandler/update.d.ts +1 -1
  36. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  37. package/dist/DboBuilder/TableHandler/update.js +8 -18
  38. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  39. package/dist/DboBuilder/TableHandler/updateFile.d.ts +2 -3
  40. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  41. package/dist/DboBuilder/TableHandler/updateFile.js +8 -28
  42. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  43. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +2 -2
  44. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  45. package/dist/DboBuilder/ViewHandler/getInfo.d.ts +1 -1
  46. package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
  47. package/dist/DboBuilder/ViewHandler/getInfo.js +12 -1
  48. package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
  49. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  50. package/dist/DboBuilder/getColumns.js +29 -4
  51. package/dist/DboBuilder/getColumns.js.map +1 -1
  52. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
  53. package/dist/DboBuilder/uploadFile.d.ts +5 -6
  54. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  55. package/dist/DboBuilder/uploadFile.js +28 -42
  56. package/dist/DboBuilder/uploadFile.js.map +1 -1
  57. package/dist/FileManager/FileManager.d.ts +22 -78
  58. package/dist/FileManager/FileManager.d.ts.map +1 -1
  59. package/dist/FileManager/FileManager.js +1 -219
  60. package/dist/FileManager/FileManager.js.map +1 -1
  61. package/dist/FileManager/getFileTableConfig.d.ts +26 -0
  62. package/dist/FileManager/getFileTableConfig.d.ts.map +1 -0
  63. package/dist/FileManager/getFileTableConfig.js +115 -0
  64. package/dist/FileManager/getFileTableConfig.js.map +1 -0
  65. package/dist/FileManager/getLocalStorageClient.d.ts +3 -0
  66. package/dist/FileManager/getLocalStorageClient.d.ts.map +1 -0
  67. package/dist/FileManager/getLocalStorageClient.js +105 -0
  68. package/dist/FileManager/getLocalStorageClient.js.map +1 -0
  69. package/dist/FileManager/getValidatedFileType.d.ts +2 -2
  70. package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
  71. package/dist/FileManager/getValidatedFileType.js +7 -9
  72. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  73. package/dist/FileManager/setupFileServeHandler.d.ts +9 -0
  74. package/dist/FileManager/setupFileServeHandler.d.ts.map +1 -0
  75. package/dist/FileManager/setupFileServeHandler.js +114 -0
  76. package/dist/FileManager/setupFileServeHandler.js.map +1 -0
  77. package/dist/Filtering/Filtering.d.ts +1 -1
  78. package/dist/Logging.d.ts +1 -1
  79. package/dist/Logging.d.ts.map +1 -1
  80. package/dist/Prostgles.d.ts +52 -6
  81. package/dist/Prostgles.d.ts.map +1 -1
  82. package/dist/Prostgles.js +8 -47
  83. package/dist/Prostgles.js.map +1 -1
  84. package/dist/ProstglesTypes.d.ts +23 -21
  85. package/dist/ProstglesTypes.d.ts.map +1 -1
  86. package/dist/ProstglesTypes.js.map +1 -1
  87. package/dist/PubSubManager/notifListener.d.ts.map +1 -1
  88. package/dist/PubSubManager/notifListener.js +0 -1
  89. package/dist/PubSubManager/notifListener.js.map +1 -1
  90. package/dist/PublishParser/getDBSchemaTable.d.ts +2 -2
  91. package/dist/PublishParser/getDBSchemaTable.d.ts.map +1 -1
  92. package/dist/PublishParser/getDBSchemaTable.js +5 -3
  93. package/dist/PublishParser/getDBSchemaTable.js.map +1 -1
  94. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  95. package/dist/PublishParser/getSchemaFromPublish.js +2 -2
  96. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  97. package/dist/PublishParser/publishTypesAndUtils.d.ts +1 -0
  98. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  99. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  100. package/dist/RestApi.d.ts +1 -5
  101. package/dist/RestApi.d.ts.map +1 -1
  102. package/dist/RestApi.js +10 -5
  103. package/dist/RestApi.js.map +1 -1
  104. package/dist/TableConfig/{TableConfig.d.ts → TableConfigTypes.d.ts} +19 -64
  105. package/dist/TableConfig/TableConfigTypes.d.ts.map +1 -0
  106. package/dist/TableConfig/TableConfigTypes.js +3 -0
  107. package/dist/TableConfig/TableConfigTypes.js.map +1 -0
  108. package/dist/TableConfig/TableConfigurator.d.ts +104 -0
  109. package/dist/TableConfig/TableConfigurator.d.ts.map +1 -0
  110. package/dist/TableConfig/{TableConfig.js → TableConfigurator.js} +31 -44
  111. package/dist/TableConfig/TableConfigurator.js.map +1 -0
  112. package/dist/TableConfig/applyTableConfig.d.ts.map +1 -1
  113. package/dist/TableConfig/applyTableConfig.js +0 -1
  114. package/dist/TableConfig/applyTableConfig.js.map +1 -1
  115. package/dist/TableConfig/getColumnConfig.d.ts +1 -1
  116. package/dist/TableConfig/getColumnConfig.d.ts.map +1 -1
  117. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts +1 -1
  118. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts.map +1 -1
  119. package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -1
  120. package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
  121. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +1 -1
  122. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  123. package/dist/TableConfig/getCreateSchemaQueries.d.ts +26 -8
  124. package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
  125. package/dist/TableConfig/getSchemaDiffQueries.d.ts.map +1 -1
  126. package/dist/TableConfig/getSchemaDiffQueries.js +12 -8
  127. package/dist/TableConfig/getSchemaDiffQueries.js.map +1 -1
  128. package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
  129. package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
  130. package/dist/TableConfig/getTableColumnQueries.js +19 -19
  131. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  132. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts +26 -10
  133. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts.map +1 -1
  134. package/dist/TableConfig/getTableConfigSchemaQueries.js +8 -10
  135. package/dist/TableConfig/getTableConfigSchemaQueries.js.map +1 -1
  136. package/dist/TableConfig/indexes/getIndexesQueries.d.ts +1 -1
  137. package/dist/TableConfig/indexes/getIndexesQueries.d.ts.map +1 -1
  138. package/dist/TableConfig/initTableConfig.d.ts +1 -1
  139. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  140. package/dist/TableConfig/initTableConfig.js +6 -3
  141. package/dist/TableConfig/initTableConfig.js.map +1 -1
  142. package/dist/WebsocketAPI/getClientSchema.d.ts.map +1 -1
  143. package/dist/WebsocketAPI/getClientSchema.js +6 -1
  144. package/dist/WebsocketAPI/getClientSchema.js.map +1 -1
  145. package/dist/index.d.ts +3 -2
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +1 -0
  148. package/dist/index.js.map +1 -1
  149. package/dist/initProstgles.d.ts.map +1 -1
  150. package/dist/initProstgles.js +2 -5
  151. package/dist/initProstgles.js.map +1 -1
  152. package/dist/runClientRequest.js +1 -1
  153. package/dist/runClientRequest.js.map +1 -1
  154. package/dist/updateConfiguration.d.ts.map +1 -1
  155. package/dist/updateConfiguration.js +0 -3
  156. package/dist/updateConfiguration.js.map +1 -1
  157. package/eslint.config.mjs +0 -3
  158. package/lib/Auth/AuthTypes.ts +6 -7
  159. package/lib/Auth/endpoints/setCatchAllRequestHandler.ts +6 -2
  160. package/lib/DBSchemaBuilder/getColumnTypescriptDefinition.ts +1 -1
  161. package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -1
  162. package/lib/DboBuilder/DboBuilder.ts +4 -4
  163. package/lib/DboBuilder/DboBuilderTypes.ts +7 -20
  164. package/lib/DboBuilder/TableHandler/TableHandler.ts +7 -4
  165. package/lib/DboBuilder/TableHandler/delete.ts +23 -17
  166. package/lib/DboBuilder/TableHandler/insert/insert.ts +3 -12
  167. package/lib/DboBuilder/TableHandler/insert/insertNestedRecords.ts +13 -17
  168. package/lib/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.ts +1 -1
  169. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +41 -54
  170. package/lib/DboBuilder/TableHandler/update.ts +8 -19
  171. package/lib/DboBuilder/TableHandler/updateFile.ts +20 -42
  172. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +1 -1
  173. package/lib/DboBuilder/ViewHandler/getInfo.ts +19 -2
  174. package/lib/DboBuilder/getColumns.ts +40 -4
  175. package/lib/DboBuilder/uploadFile.ts +34 -50
  176. package/lib/FileManager/FileManager.ts +23 -249
  177. package/lib/FileManager/getFileTableConfig.ts +142 -0
  178. package/lib/FileManager/getLocalStorageClient.ts +118 -0
  179. package/lib/FileManager/getValidatedFileType.ts +14 -22
  180. package/lib/FileManager/setupFileServeHandler.ts +102 -0
  181. package/lib/Logging.ts +0 -3
  182. package/lib/Prostgles.ts +9 -44
  183. package/lib/ProstglesTypes.ts +34 -23
  184. package/lib/PubSubManager/notifListener.ts +0 -2
  185. package/lib/PublishParser/getDBSchemaTable.ts +6 -3
  186. package/lib/PublishParser/getSchemaFromPublish.ts +2 -1
  187. package/lib/PublishParser/publishTypesAndUtils.ts +1 -0
  188. package/lib/RestApi.ts +12 -12
  189. package/lib/TableConfig/{TableConfig.ts → TableConfigTypes.ts} +18 -217
  190. package/lib/TableConfig/TableConfigurator.ts +191 -0
  191. package/lib/TableConfig/applyTableConfig.ts +2 -3
  192. package/lib/TableConfig/getColumnConfig.ts +2 -2
  193. package/lib/TableConfig/getColumnSQLDefinitionQuery.ts +2 -2
  194. package/lib/TableConfig/getConstraintDefinitionQueries.ts +1 -1
  195. package/lib/TableConfig/getCreateSchemaQueries.ts +1 -1
  196. package/lib/TableConfig/getSchemaDiffQueries.ts +14 -11
  197. package/lib/TableConfig/getTableColumnQueries.ts +22 -20
  198. package/lib/TableConfig/getTableConfigSchemaQueries.ts +20 -22
  199. package/lib/TableConfig/indexes/getIndexesQueries.ts +1 -1
  200. package/lib/TableConfig/initTableConfig.ts +7 -6
  201. package/lib/WebsocketAPI/getClientSchema.ts +7 -1
  202. package/lib/index.ts +3 -2
  203. package/lib/initProstgles.ts +2 -6
  204. package/lib/runClientRequest.ts +1 -1
  205. package/lib/updateConfiguration.ts +0 -3
  206. package/package.json +2 -3
  207. package/dist/FileManager/initFileManager.d.ts +0 -18
  208. package/dist/FileManager/initFileManager.d.ts.map +0 -1
  209. package/dist/FileManager/initFileManager.js +0 -257
  210. package/dist/FileManager/initFileManager.js.map +0 -1
  211. package/dist/FileManager/upload.d.ts +0 -4
  212. package/dist/FileManager/upload.d.ts.map +0 -1
  213. package/dist/FileManager/upload.js +0 -90
  214. package/dist/FileManager/upload.js.map +0 -1
  215. package/dist/FileManager/uploadStream.d.ts +0 -4
  216. package/dist/FileManager/uploadStream.d.ts.map +0 -1
  217. package/dist/FileManager/uploadStream.js +0 -100
  218. package/dist/FileManager/uploadStream.js.map +0 -1
  219. package/dist/TableConfig/TableConfig.d.ts.map +0 -1
  220. package/dist/TableConfig/TableConfig.js.map +0 -1
  221. package/lib/FileManager/initFileManager.ts +0 -254
  222. package/lib/FileManager/upload.ts +0 -59
  223. package/lib/FileManager/uploadStream.ts +0 -76
package/lib/RestApi.ts CHANGED
@@ -31,11 +31,6 @@ export type ExpressApp = {
31
31
  } & Omit<Express, "_router" | "router">;
32
32
 
33
33
  export type RestApiConfig = {
34
- /**
35
- * Express server instance
36
- */
37
- expressApp: Express;
38
-
39
34
  /**
40
35
  * Defaults to "/api"
41
36
  */
@@ -52,7 +47,7 @@ export class RestApi {
52
47
  };
53
48
  expressApp: ExpressApp;
54
49
  path = "/api";
55
- constructor({ expressApp, path, prostgles }: RestApiConfig & { prostgles: Prostgles }) {
50
+ constructor({ path, prostgles }: RestApiConfig & { prostgles: Prostgles }) {
56
51
  if (isDefined(path) && !path.trim()) {
57
52
  throw new Error("path cannot be empty");
58
53
  }
@@ -64,19 +59,24 @@ export class RestApi {
64
59
  methods: `${path}/methods/:name`,
65
60
  schema: `${path}/schema`,
66
61
  };
67
- this.expressApp = expressApp as ExpressApp;
62
+ const { expressApp } = prostgles.opts;
63
+ if (!expressApp) {
64
+ throw new Error("RestApi requires an expressApp to be provided in prostgles.opts");
65
+ }
66
+ this.expressApp = expressApp;
68
67
  /** Must check if json parser is loaded */
69
68
 
70
- expressApp.post(this.routes.db, this.onPostTableCommand);
71
- expressApp.post(this.routes.sql, this.onPostSql);
72
- expressApp.post(this.routes.methods, this.onPostMethod);
73
- expressApp.post(this.routes.schema, this.onPostSchema);
69
+ this.expressApp.post(this.routes.db, this.onPostTableCommand);
70
+ this.expressApp.post(this.routes.sql, this.onPostSql);
71
+ this.expressApp.post(this.routes.methods, this.onPostMethod);
72
+ this.expressApp.post(this.routes.schema, this.onPostSchema);
74
73
  }
75
74
 
76
75
  destroy = () => {
77
76
  this.expressApp.removeListener(this.routes.db, this.onPostTableCommand);
78
77
  this.expressApp.removeListener(this.routes.sql, this.onPostSql);
79
78
  this.expressApp.removeListener(this.routes.methods, this.onPostMethod);
79
+ this.expressApp.removeListener(this.routes.schema, this.onPostSchema);
80
80
  removeExpressRoute(this.expressApp, [this.path]);
81
81
  };
82
82
  onPostMethod = async (req: ExpressReq, res: ExpressRes) => {
@@ -120,7 +120,7 @@ export class RestApi {
120
120
  onPostSql = async (req: ExpressReq, res: ExpressRes) => {
121
121
  const [query, params, options] = req.body || [];
122
122
  try {
123
- const data = await runClientSqlRequest.bind(this.prostgles)(
123
+ const data: unknown = await runClientSqlRequest.bind(this.prostgles)(
124
124
  {
125
125
  query,
126
126
  params,
@@ -1,18 +1,16 @@
1
+ import type pgPromise from "pg-promise";
1
2
  import type {
2
3
  ALLOWED_CONTENT_TYPE,
3
4
  ALLOWED_EXTENSION,
4
5
  AnyObject,
5
- ColumnInfo,
6
6
  DBSchema,
7
7
  JSONB,
8
+ MaybePromise,
8
9
  StrictUnion,
9
10
  } from "prostgles-types";
10
- import { isObject } from "prostgles-types";
11
11
  import type { JoinInfo, LocalParams } from "../DboBuilder/DboBuilder";
12
- import type { TableHandler } from "../DboBuilder/TableHandler/TableHandler";
13
- import { uploadFile } from "../DboBuilder/uploadFile";
14
12
  import type { DBOFullyTyped } from "../DBSchemaBuilder/DBSchemaBuilder";
15
- import type { DB, DBHandlerServer, Prostgles } from "../Prostgles";
13
+ import type { DB, DBHandlerServer } from "../Prostgles";
16
14
  import type {
17
15
  AfterAllTsTrigger,
18
16
  AfterEachTsTrigger,
@@ -21,37 +19,14 @@ import type {
21
19
  SyncConfig,
22
20
  ValidateRowArgsCommon,
23
21
  } from "../PublishParser/PublishParser";
24
- import {
25
- DEFAULT_SYNC_BATCH_SIZE,
26
- DEFAULT_SYNC_THROTTLE,
27
- } from "../PubSubManager/PubSubManagerUtils";
28
- import { initTableConfig } from "./initTableConfig";
29
22
 
30
- type ColExtraInfo = {
23
+ export type ColExtraInfo = {
31
24
  min?: string | number;
32
25
  max?: string | number;
33
26
  hint?: string;
34
27
  };
35
28
 
36
- type LangToTranslation = Record<string, string>;
37
-
38
- export const parseI18N = <Config extends LangToTranslation>(params: {
39
- config?: Config | string;
40
- lang?: string;
41
- defaultLang: string;
42
- defaultValue: string | undefined;
43
- }): undefined | string => {
44
- const { config, lang, defaultLang, defaultValue } = params;
45
- if (config) {
46
- if (isObject(config)) {
47
- return config[lang ?? defaultLang] ?? config[defaultLang];
48
- } else if (typeof config === "string") {
49
- return config;
50
- }
51
- }
52
-
53
- return defaultValue;
54
- };
29
+ export type LangToTranslation = Record<string, string>;
55
30
 
56
31
  type BaseTableDefinition<R = AnyObject, DBX = DBHandlerServer> = {
57
32
  info?: {
@@ -71,6 +46,17 @@ type BaseTableDefinition<R = AnyObject, DBX = DBHandlerServer> = {
71
46
  beforeEach?: BeforeEachTsTrigger<R, DBX>[];
72
47
  afterEach?: AfterEachTsTrigger<R, DBX>[];
73
48
  afterAll?: AfterAllTsTrigger<R, DBX>[];
49
+ onInsteadOfDelete?: (args: {
50
+ dbx: DBX;
51
+ tx: pgPromise.ITask<{}>;
52
+ returningQuery: string;
53
+ isOneOrNone: boolean;
54
+ queryType: "any" | "none";
55
+ filterOpts: {
56
+ where: string;
57
+ filter: AnyObject;
58
+ };
59
+ }) => Promise<AnyObject[]>;
74
60
  };
75
61
  triggers?: {
76
62
  [triggerName: string]: {
@@ -254,7 +240,7 @@ export type TableDefinition<
254
240
  onMount?: (params: {
255
241
  dbo: DBHandlerServer;
256
242
  _db: DB;
257
- }) => Promise<void | { onUnmount: () => void }>;
243
+ }) => MaybePromise<void | { onUnmount: () => void }>;
258
244
  columns?: {
259
245
  [column_name: string]: ColumnConfig<LANG_IDS>;
260
246
  };
@@ -268,7 +254,7 @@ export type TableDefinition<
268
254
  dropIfExists?: boolean;
269
255
  /**
270
256
  * E.g.:
271
- * colname
257
+ * columnName
272
258
  * col1, col2
273
259
  * col1 > col3
274
260
  */
@@ -352,188 +338,3 @@ export type TableConfig<LANG_IDS = { en: 1 }, S = void> =
352
338
  : {
353
339
  [table_name: string]: TableDefinition<LANG_IDS> | LookupTableDefinition<LANG_IDS>;
354
340
  };
355
-
356
- /**
357
- * Will be run between initSQL and fileTable
358
- */
359
- export default class TableConfigurator {
360
- instanceId = Date.now() + Math.random();
361
-
362
- get config() {
363
- return this.prostgles.opts.tableConfig ?? {};
364
- }
365
- get dbo(): DBHandlerServer {
366
- if (!this.prostgles.dbo) throw "this.prostgles.dbo missing";
367
- return this.prostgles.dbo;
368
- }
369
- get db(): DB {
370
- if (!this.prostgles.db) throw "this.prostgles.db missing";
371
- return this.prostgles.db;
372
- }
373
- prostgles: Prostgles;
374
-
375
- constructor(prostgles: Prostgles) {
376
- this.prostgles = prostgles;
377
- }
378
-
379
- destroy = async () => {
380
- for (const { onUnmount } of Object.values(this.tableOnMounts)) {
381
- try {
382
- await onUnmount();
383
- } catch (error) {
384
- console.error(error);
385
- }
386
- }
387
- };
388
-
389
- tableOnMounts: Record<string, { onUnmount: () => void | Promise<void> }> = {};
390
- setTableOnMounts = async () => {
391
- this.tableOnMounts = {};
392
- for (const [tableName, tableConfig] of Object.entries(this.config)) {
393
- if ("onMount" in tableConfig && tableConfig.onMount) {
394
- const cleanup = await tableConfig.onMount({
395
- dbo: this.dbo,
396
- _db: this.db,
397
- });
398
- if (cleanup) {
399
- this.tableOnMounts[tableName] = cleanup;
400
- }
401
- }
402
- }
403
- };
404
-
405
- getColumnConfig = (tableName: string, colName: string): ColumnConfig | undefined => {
406
- const tconf = this.config[tableName];
407
- if (tconf && "columns" in tconf) {
408
- return tconf.columns?.[colName];
409
- }
410
- return undefined;
411
- };
412
-
413
- getTableSyncConfig = (tableName: string) => {
414
- const syncConfig = this.config[tableName]?.syncConfig;
415
- return (
416
- syncConfig && {
417
- ...syncConfig,
418
- batch_size: syncConfig.batch_size ?? DEFAULT_SYNC_BATCH_SIZE,
419
- throttle: syncConfig.throttle ?? DEFAULT_SYNC_THROTTLE,
420
- }
421
- );
422
- };
423
-
424
- getTableLabel = (params: { tableName: string; lang?: string }) => {
425
- const tconf = this.config[params.tableName];
426
-
427
- return parseI18N({
428
- config: tconf?.info?.label,
429
- lang: params.lang,
430
- defaultLang: "en",
431
- defaultValue: params.tableName,
432
- });
433
- };
434
-
435
- getColInfo = (params: {
436
- col: string;
437
- table: string;
438
- lang?: string;
439
- }): (ColExtraInfo & { label?: string } & Pick<ColumnInfo, "jsonbSchema">) | undefined => {
440
- const colConf = this.getColumnConfig(params.table, params.col);
441
- let result: Partial<ReturnType<typeof this.getColInfo>> = undefined;
442
- if (colConf) {
443
- if (isObject(colConf)) {
444
- const { jsonbSchema, jsonbSchemaType, info } = colConf;
445
- result = {
446
- ...info,
447
- ...((jsonbSchema || jsonbSchemaType) && {
448
- jsonbSchema: {
449
- nullable: colConf.nullable,
450
- ...(jsonbSchema || { type: jsonbSchemaType }),
451
- },
452
- }),
453
- };
454
-
455
- /**
456
- * Get labels from TableConfig if specified
457
- */
458
- if (colConf.label) {
459
- const { lang } = params;
460
- const lbl = colConf.label;
461
- if (["string", "object"].includes(typeof lbl)) {
462
- if (typeof lbl === "string") {
463
- result ??= {};
464
- result.label = lbl;
465
- } else if (lang && (lbl[lang as "en"] || lbl.en)) {
466
- result ??= {};
467
- result.label = lbl[lang as "en"] || lbl.en;
468
- }
469
- }
470
- }
471
- }
472
- }
473
-
474
- return result;
475
- };
476
-
477
- checkColVal = (params: { col: string; table: string; value?: number | string }): void => {
478
- const conf = this.getColInfo(params);
479
- if (conf) {
480
- const { value } = params;
481
- const { min, max } = conf;
482
- if (min !== undefined && value !== undefined && value < min)
483
- throw `${params.col} must be greater than ${min}`;
484
- if (max !== undefined && value !== undefined && value > max)
485
- throw `${params.col} must be less than ${max}`;
486
- }
487
- };
488
-
489
- getJoinInfo = (sourceTable: string, targetTable: string): JoinInfo | undefined => {
490
- if (
491
- sourceTable in this.config &&
492
- this.config[sourceTable] &&
493
- "columns" in this.config[sourceTable]
494
- ) {
495
- const td = this.config[sourceTable];
496
- if ("columns" in td && td.columns?.[targetTable]) {
497
- const cd = td.columns[targetTable];
498
- if (isObject(cd) && "joinDef" in cd) {
499
- if (!cd.joinDef) throw "cd.joinDef missing";
500
- const { joinDef } = cd;
501
- const res: JoinInfo = {
502
- expectOne: false,
503
- paths: joinDef.map(({ sourceTable, targetTable: table, on }) => ({
504
- source: sourceTable,
505
- target: targetTable,
506
- table,
507
- on,
508
- })),
509
- };
510
-
511
- return res;
512
- }
513
- }
514
- }
515
- return undefined;
516
- };
517
-
518
- getPreInsertRow = async (
519
- tableHandler: TableHandler,
520
- args: Pick<
521
- GetPreInsertRowArgs,
522
- "localParams" | "row" | "validate" | "dbx" | "tx" | "command" | "data"
523
- >,
524
- ): Promise<AnyObject> => {
525
- const tableHook = this.config[tableHandler.name]?.hooks?.getPreInsertRow;
526
- if (tableHandler.is_media) {
527
- return uploadFile.bind(tableHandler)(args);
528
- }
529
- if (tableHook) {
530
- return tableHook(args);
531
- }
532
-
533
- return args.row;
534
- };
535
-
536
- prevInitQueryHistory?: string[];
537
- initialising = false;
538
- init = initTableConfig.bind(this);
539
- }
@@ -0,0 +1,191 @@
1
+ import type { ColumnInfo } from "prostgles-types";
2
+ import { isObject } from "prostgles-types";
3
+ import type { JoinInfo } from "../DboBuilder/DboBuilder";
4
+ import type { DB, DBHandlerServer, Prostgles } from "../Prostgles";
5
+ import {
6
+ DEFAULT_SYNC_BATCH_SIZE,
7
+ DEFAULT_SYNC_THROTTLE,
8
+ } from "../PubSubManager/PubSubManagerUtils";
9
+ import { initTableConfig } from "./initTableConfig";
10
+ import type { ColExtraInfo, ColumnConfig, LangToTranslation } from "./TableConfigTypes";
11
+
12
+ /**
13
+ * Runs after initSQL
14
+ */
15
+ export class TableConfigurator {
16
+ instanceId = Date.now() + Math.random();
17
+
18
+ get config() {
19
+ return this.prostgles.mergedTableConfig ?? {};
20
+ }
21
+ get dbo(): DBHandlerServer {
22
+ if (!this.prostgles.dbo) throw "this.prostgles.dbo missing";
23
+ return this.prostgles.dbo;
24
+ }
25
+ get db(): DB {
26
+ if (!this.prostgles.db) throw "this.prostgles.db missing";
27
+ return this.prostgles.db;
28
+ }
29
+ prostgles: Prostgles;
30
+
31
+ constructor(prostgles: Prostgles) {
32
+ this.prostgles = prostgles;
33
+ }
34
+
35
+ destroy = async () => {
36
+ for (const { onUnmount } of Object.values(this.tableOnMounts)) {
37
+ try {
38
+ await onUnmount();
39
+ } catch (error) {
40
+ console.error(error);
41
+ }
42
+ }
43
+ };
44
+
45
+ tableOnMounts: Record<string, { onUnmount: () => void | Promise<void> }> = {};
46
+ setTableOnMounts = async () => {
47
+ this.tableOnMounts = {};
48
+ for (const [tableName, tableConfig] of Object.entries(this.config)) {
49
+ if ("onMount" in tableConfig && tableConfig.onMount) {
50
+ const cleanup = await tableConfig.onMount({
51
+ dbo: this.dbo,
52
+ _db: this.db,
53
+ });
54
+ if (cleanup) {
55
+ this.tableOnMounts[tableName] = cleanup;
56
+ }
57
+ }
58
+ }
59
+ };
60
+
61
+ getColumnConfig = (tableName: string, colName: string): ColumnConfig | undefined => {
62
+ const tableConfig = this.config[tableName];
63
+ if (tableConfig && "columns" in tableConfig) {
64
+ return tableConfig.columns?.[colName];
65
+ }
66
+ return undefined;
67
+ };
68
+
69
+ getTableSyncConfig = (tableName: string) => {
70
+ const syncConfig = this.config[tableName]?.syncConfig;
71
+ return (
72
+ syncConfig && {
73
+ ...syncConfig,
74
+ batch_size: syncConfig.batch_size ?? DEFAULT_SYNC_BATCH_SIZE,
75
+ throttle: syncConfig.throttle ?? DEFAULT_SYNC_THROTTLE,
76
+ }
77
+ );
78
+ };
79
+
80
+ getTableLabel = (params: { tableName: string; lang?: string }) => {
81
+ const tableConfig = this.config[params.tableName];
82
+
83
+ return parseI18N({
84
+ config: tableConfig?.info?.label,
85
+ lang: params.lang,
86
+ defaultLang: "en",
87
+ defaultValue: params.tableName,
88
+ });
89
+ };
90
+
91
+ getColInfo = (params: {
92
+ col: string;
93
+ table: string;
94
+ lang?: string;
95
+ }): (ColExtraInfo & { label?: string } & Pick<ColumnInfo, "jsonbSchema">) | undefined => {
96
+ const colConf = this.getColumnConfig(params.table, params.col);
97
+ let result: Partial<ReturnType<typeof this.getColInfo>> = undefined;
98
+ if (colConf) {
99
+ if (isObject(colConf)) {
100
+ const { jsonbSchema, jsonbSchemaType, info } = colConf;
101
+ result = {
102
+ ...info,
103
+ ...((jsonbSchema || jsonbSchemaType) && {
104
+ jsonbSchema: {
105
+ nullable: colConf.nullable,
106
+ ...(jsonbSchema || { type: jsonbSchemaType }),
107
+ },
108
+ }),
109
+ };
110
+
111
+ /**
112
+ * Get labels from TableConfig if specified
113
+ */
114
+ if (colConf.label) {
115
+ const { lang } = params;
116
+ const lbl = colConf.label;
117
+ if (["string", "object"].includes(typeof lbl)) {
118
+ if (typeof lbl === "string") {
119
+ result ??= {};
120
+ result.label = lbl;
121
+ } else if (lang && (lbl[lang as "en"] || lbl.en)) {
122
+ result ??= {};
123
+ result.label = lbl[lang as "en"] || lbl.en;
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+
130
+ return result;
131
+ };
132
+
133
+ checkColVal = (params: { col: string; table: string; value?: number | string }): void => {
134
+ const conf = this.getColInfo(params);
135
+ if (conf) {
136
+ const { value } = params;
137
+ const { min, max } = conf;
138
+ if (min !== undefined && value !== undefined && value < min)
139
+ throw `${params.col} must be greater than ${min}`;
140
+ if (max !== undefined && value !== undefined && value > max)
141
+ throw `${params.col} must be less than ${max}`;
142
+ }
143
+ };
144
+
145
+ getJoinInfo = (sourceTable: string, targetTable: string): JoinInfo | undefined => {
146
+ const sourceTableConfig = this.config[sourceTable];
147
+ if (sourceTableConfig && "columns" in sourceTableConfig) {
148
+ const targetColConfig = sourceTableConfig.columns?.[targetTable];
149
+ if (targetColConfig) {
150
+ if (isObject(targetColConfig) && "joinDef" in targetColConfig) {
151
+ if (!targetColConfig.joinDef) throw "targetColConfig.joinDef missing";
152
+ const { joinDef } = targetColConfig;
153
+ const res: JoinInfo = {
154
+ expectOne: false,
155
+ paths: joinDef.map(({ sourceTable, targetTable: table, on }) => ({
156
+ source: sourceTable,
157
+ target: targetTable,
158
+ table,
159
+ on,
160
+ })),
161
+ };
162
+
163
+ return res;
164
+ }
165
+ }
166
+ }
167
+ return undefined;
168
+ };
169
+
170
+ prevInitQueryHistory?: string[];
171
+ initialising = false;
172
+ init = initTableConfig.bind(this);
173
+ }
174
+
175
+ export const parseI18N = <Config extends LangToTranslation>(params: {
176
+ config?: Config | string;
177
+ lang?: string;
178
+ defaultLang: string;
179
+ defaultValue: string | undefined;
180
+ }): undefined | string => {
181
+ const { config, lang, defaultLang, defaultValue } = params;
182
+ if (config) {
183
+ if (isObject(config)) {
184
+ return config[lang ?? defaultLang] ?? config[defaultLang];
185
+ } else if (typeof config === "string") {
186
+ return config;
187
+ }
188
+ }
189
+
190
+ return defaultValue;
191
+ };
@@ -36,7 +36,7 @@ export const applyTableConfig = async (prostgles: Prostgles, commit = false) =>
36
36
  const { fileTable, tableConfig, tableConfigMigrations, onLog, sqlFilePath } = prostgles.opts;
37
37
  const createSchemaQ = await getTableConfigSchemaQueries(
38
38
  { fileTable, tableConfig, tableConfigMigrations, sqlFilePath, onLog },
39
- utils
39
+ utils,
40
40
  );
41
41
 
42
42
  /**
@@ -72,11 +72,10 @@ export const applyTableConfig = async (prostgles: Prostgles, commit = false) =>
72
72
  [
73
73
  dropTablesQ,
74
74
  ...createSchemaQ.tableQueries,
75
- ...createSchemaQ.fileTableSchemaQuery,
76
75
  ...createSchemaQ.indexQueries,
77
76
  ...createSchemaQ.constraintQueries,
78
77
  ...createSchemaQ.triggerQueries,
79
- ].join("\n")
78
+ ].join("\n"),
80
79
  )
81
80
  .catch((err) => {
82
81
  console.error(getQueryErrorPositionInfo(err as ProstglesError));
@@ -1,9 +1,9 @@
1
- import type { ColumnConfig, TableConfig } from "../TableConfig/TableConfig";
1
+ import type { ColumnConfig, TableConfig } from "./TableConfigTypes";
2
2
 
3
3
  export const getColumnConfig = (
4
4
  config: TableConfig,
5
5
  tableName: string,
6
- colName: string
6
+ colName: string,
7
7
  ): ColumnConfig | undefined => {
8
8
  const tconf = config[tableName];
9
9
  if (tconf && "columns" in tconf) {
@@ -4,7 +4,7 @@ import { VALIDATE_SCHEMA_FUNCNAME } from "../JSONBSchemaValidation/validateJSONB
4
4
  import type { DB } from "../Prostgles";
5
5
  import { fromEntries } from "../PublishParser/applyScopeToTableRules";
6
6
  import { asValue } from "../PubSubManager/PubSubManagerUtils";
7
- import type { BaseColumnTypes, ColumnConfig } from "./TableConfig";
7
+ import type { BaseColumnTypes, ColumnConfig } from "./TableConfigTypes";
8
8
 
9
9
  type Args = {
10
10
  column: string;
@@ -30,7 +30,7 @@ export const getColumnSQLDefinitionQuery = async ({
30
30
  const colNameEsc = escapedColumnName ?? asName(column);
31
31
  const getColTypeDef = (colConf: BaseColumnTypes, pgType: "TEXT" | "JSONB") => {
32
32
  const { nullable, defaultValue } = colConf;
33
- return `${pgType} ${!nullable ? " NOT NULL " : ""} ${defaultValue ? ` DEFAULT ${asValue(defaultValue)} ` : ""}`;
33
+ return `${pgType} ${!nullable ? "NOT NULL" : ""} ${defaultValue ? `DEFAULT ${asValue(defaultValue)}` : ""} `;
34
34
  };
35
35
 
36
36
  const getDefinition = async () => {
@@ -1,5 +1,5 @@
1
1
  import { asName } from "prostgles-types";
2
- import type { TableConfig } from "./TableConfig";
2
+ import type { TableConfig } from "./TableConfigTypes";
3
3
 
4
4
  type Args = {
5
5
  tableName: string;
@@ -3,7 +3,7 @@ import { asName } from "prostgles-types";
3
3
  import type { DB } from "../initProstgles";
4
4
  import type { ProstglesInitOptions, TableConfigMigrations } from "../ProstglesTypes";
5
5
  import { fetchTableConstraints } from "./fetchTableConstraints";
6
- import type { TableConfig } from "./TableConfig";
6
+ import type { TableConfig } from "./TableConfigTypes";
7
7
  export type RequiredUndefined<T> = {
8
8
  [K in keyof Required<T>]: T[K];
9
9
  };
@@ -29,7 +29,7 @@ export const getSchemaDiffQueries = ({
29
29
  const droppedTableQueries =
30
30
  droppedTableIdents.length ? [`DROP TABLE ${droppedTableIdents.join(", ")} CASCADE;`] : [];
31
31
 
32
- const droppedColumns: { table_ident: string; column_name: string }[] = [];
32
+ // const droppedColumns: { table_ident: string; column_name: string }[] = [];
33
33
 
34
34
  const tableAndColQueries = newSchema
35
35
  .flatMap(({ table_ident, table_name, columns }) => {
@@ -42,7 +42,7 @@ export const getSchemaDiffQueries = ({
42
42
  (c) =>
43
43
  c.column_name_escaped +
44
44
  " " +
45
- newSchemaTableDefinitions[table_name]![c.column_name_escaped]
45
+ newSchemaTableDefinitions[table_name]![c.column_name_escaped],
46
46
  )
47
47
  .join(",\n"),
48
48
  `);`,
@@ -52,13 +52,13 @@ export const getSchemaDiffQueries = ({
52
52
 
53
53
  if (!isEqual(columns, oldTable.columns)) return;
54
54
 
55
- const droppedColumnQueries =
56
- oldTable.columns
57
- ?.filter((oc) => !columns?.some((c) => c.column_name === oc.column_name))
58
- .map((dc) => {
59
- droppedColumns.push({ table_ident, column_name: dc.column_name });
60
- return `ALTER TABLE ${table_ident} DROP COLUMN ${dc.column_name};`;
61
- }) ?? [];
55
+ // const droppedColumnQueries =
56
+ // oldTable.columns
57
+ // ?.filter((oc) => !columns?.some((c) => c.column_name === oc.column_name))
58
+ // .map((dc) => {
59
+ // droppedColumns.push({ table_ident, column_name: dc.column_name });
60
+ // return `ALTER TABLE ${table_ident} DROP COLUMN ${dc.column_name};`;
61
+ // }) ?? [];
62
62
 
63
63
  const alteredAndNewColumns =
64
64
  columns?.flatMap((c) => {
@@ -76,7 +76,7 @@ export const getSchemaDiffQueries = ({
76
76
  `${alterTableQuery} ` +
77
77
  (c.column_default !== null ?
78
78
  `SET DEFAULT ${asValue(c.column_default)};`
79
- : `DROP DEFAULT;`)
79
+ : `DROP DEFAULT;`),
80
80
  );
81
81
  }
82
82
  if (c.udt_name !== oldCol.udt_name) {
@@ -89,7 +89,10 @@ export const getSchemaDiffQueries = ({
89
89
  return queries;
90
90
  }) ?? [];
91
91
 
92
- return [...droppedColumnQueries, ...alteredAndNewColumns];
92
+ return [
93
+ // ...droppedColumnQueries,
94
+ ...alteredAndNewColumns,
95
+ ];
93
96
  })
94
97
  .filter(isDefined);
95
98