prostgles-server 4.2.567 → 4.2.570

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/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/Auth/utils/removeExpressRoute.d.ts.map +1 -1
  8. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts +1 -1
  9. package/dist/DBSchemaBuilder/getColumnTypescriptDefinition.d.ts.map +1 -1
  10. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts +1 -1
  11. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
  12. package/dist/DboBuilder/DboBuilder.js +4 -4
  13. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  14. package/dist/DboBuilder/DboBuilderTypes.d.ts +2 -18
  15. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  16. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  17. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +15 -5
  18. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  19. package/dist/DboBuilder/TableHandler/TableHandler.js +4 -3
  20. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  21. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  22. package/dist/DboBuilder/TableHandler/delete.js +17 -14
  23. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  24. package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
  25. package/dist/DboBuilder/TableHandler/insert/insert.js +3 -12
  26. package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
  27. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.d.ts.map +1 -1
  28. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js +10 -15
  29. package/dist/DboBuilder/TableHandler/insert/insertNestedRecords.js.map +1 -1
  30. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js +1 -1
  31. package/dist/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.js.map +1 -1
  32. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +8 -6
  33. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  34. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +30 -48
  35. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  36. package/dist/DboBuilder/TableHandler/update.d.ts +1 -1
  37. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  38. package/dist/DboBuilder/TableHandler/update.js +8 -18
  39. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  40. package/dist/DboBuilder/TableHandler/updateFile.d.ts +2 -3
  41. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  42. package/dist/DboBuilder/TableHandler/updateFile.js +8 -28
  43. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  44. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +2 -2
  45. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  46. package/dist/DboBuilder/ViewHandler/getInfo.d.ts +1 -1
  47. package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
  48. package/dist/DboBuilder/ViewHandler/getInfo.js +12 -1
  49. package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
  50. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  51. package/dist/DboBuilder/getColumns.js +29 -4
  52. package/dist/DboBuilder/getColumns.js.map +1 -1
  53. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
  54. package/dist/DboBuilder/uploadFile.d.ts +5 -6
  55. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  56. package/dist/DboBuilder/uploadFile.js +28 -42
  57. package/dist/DboBuilder/uploadFile.js.map +1 -1
  58. package/dist/FileManager/FileManager.d.ts +22 -78
  59. package/dist/FileManager/FileManager.d.ts.map +1 -1
  60. package/dist/FileManager/FileManager.js +1 -219
  61. package/dist/FileManager/FileManager.js.map +1 -1
  62. package/dist/FileManager/getFileTableConfig.d.ts +26 -0
  63. package/dist/FileManager/getFileTableConfig.d.ts.map +1 -0
  64. package/dist/FileManager/getFileTableConfig.js +113 -0
  65. package/dist/FileManager/getFileTableConfig.js.map +1 -0
  66. package/dist/FileManager/getLocalStorageClient.d.ts +3 -0
  67. package/dist/FileManager/getLocalStorageClient.d.ts.map +1 -0
  68. package/dist/FileManager/getLocalStorageClient.js +105 -0
  69. package/dist/FileManager/getLocalStorageClient.js.map +1 -0
  70. package/dist/FileManager/getValidatedFileType.d.ts +2 -2
  71. package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
  72. package/dist/FileManager/getValidatedFileType.js +7 -9
  73. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  74. package/dist/FileManager/setupFileServeHandler.d.ts +9 -0
  75. package/dist/FileManager/setupFileServeHandler.d.ts.map +1 -0
  76. package/dist/FileManager/setupFileServeHandler.js +114 -0
  77. package/dist/FileManager/setupFileServeHandler.js.map +1 -0
  78. package/dist/Filtering/Filtering.d.ts +1 -1
  79. package/dist/Logging.d.ts +1 -1
  80. package/dist/Logging.d.ts.map +1 -1
  81. package/dist/Prostgles.d.ts +52 -6
  82. package/dist/Prostgles.d.ts.map +1 -1
  83. package/dist/Prostgles.js +7 -47
  84. package/dist/Prostgles.js.map +1 -1
  85. package/dist/ProstglesTypes.d.ts +19 -22
  86. package/dist/ProstglesTypes.d.ts.map +1 -1
  87. package/dist/ProstglesTypes.js.map +1 -1
  88. package/dist/PubSubManager/notifListener.d.ts.map +1 -1
  89. package/dist/PubSubManager/notifListener.js +0 -1
  90. package/dist/PubSubManager/notifListener.js.map +1 -1
  91. package/dist/PublishParser/getDBSchemaTable.d.ts +2 -2
  92. package/dist/PublishParser/getDBSchemaTable.d.ts.map +1 -1
  93. package/dist/PublishParser/getDBSchemaTable.js +5 -3
  94. package/dist/PublishParser/getDBSchemaTable.js.map +1 -1
  95. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  96. package/dist/PublishParser/getSchemaFromPublish.js +2 -2
  97. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  98. package/dist/PublishParser/publishTypesAndUtils.d.ts +1 -0
  99. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  100. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  101. package/dist/RestApi.d.ts +4 -6
  102. package/dist/RestApi.d.ts.map +1 -1
  103. package/dist/RestApi.js +6 -5
  104. package/dist/RestApi.js.map +1 -1
  105. package/dist/TableConfig/{TableConfig.d.ts → TableConfigTypes.d.ts} +19 -64
  106. package/dist/TableConfig/TableConfigTypes.d.ts.map +1 -0
  107. package/dist/TableConfig/TableConfigTypes.js +3 -0
  108. package/dist/TableConfig/TableConfigTypes.js.map +1 -0
  109. package/dist/TableConfig/TableConfigurator.d.ts +104 -0
  110. package/dist/TableConfig/TableConfigurator.d.ts.map +1 -0
  111. package/dist/TableConfig/{TableConfig.js → TableConfigurator.js} +31 -44
  112. package/dist/TableConfig/TableConfigurator.js.map +1 -0
  113. package/dist/TableConfig/applyTableConfig.d.ts.map +1 -1
  114. package/dist/TableConfig/applyTableConfig.js +0 -1
  115. package/dist/TableConfig/applyTableConfig.js.map +1 -1
  116. package/dist/TableConfig/getColumnConfig.d.ts +1 -1
  117. package/dist/TableConfig/getColumnConfig.d.ts.map +1 -1
  118. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts +1 -1
  119. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts.map +1 -1
  120. package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -1
  121. package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
  122. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +1 -1
  123. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  124. package/dist/TableConfig/getCreateSchemaQueries.d.ts +26 -8
  125. package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
  126. package/dist/TableConfig/getSchemaDiffQueries.d.ts.map +1 -1
  127. package/dist/TableConfig/getSchemaDiffQueries.js +12 -8
  128. package/dist/TableConfig/getSchemaDiffQueries.js.map +1 -1
  129. package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
  130. package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
  131. package/dist/TableConfig/getTableColumnQueries.js +19 -19
  132. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  133. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts +26 -10
  134. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts.map +1 -1
  135. package/dist/TableConfig/getTableConfigSchemaQueries.js +8 -10
  136. package/dist/TableConfig/getTableConfigSchemaQueries.js.map +1 -1
  137. package/dist/TableConfig/indexes/getIndexesQueries.d.ts +1 -1
  138. package/dist/TableConfig/indexes/getIndexesQueries.d.ts.map +1 -1
  139. package/dist/TableConfig/initTableConfig.d.ts +1 -1
  140. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  141. package/dist/TableConfig/initTableConfig.js +6 -3
  142. package/dist/TableConfig/initTableConfig.js.map +1 -1
  143. package/dist/WebsocketAPI/getClientSchema.d.ts.map +1 -1
  144. package/dist/WebsocketAPI/getClientSchema.js +6 -1
  145. package/dist/WebsocketAPI/getClientSchema.js.map +1 -1
  146. package/dist/index.d.ts +3 -2
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +1 -0
  149. package/dist/index.js.map +1 -1
  150. package/dist/initProstgles.d.ts.map +1 -1
  151. package/dist/initProstgles.js +1 -2
  152. package/dist/initProstgles.js.map +1 -1
  153. package/dist/runClientRequest.js +1 -1
  154. package/dist/runClientRequest.js.map +1 -1
  155. package/dist/updateConfiguration.d.ts.map +1 -1
  156. package/dist/updateConfiguration.js +0 -3
  157. package/dist/updateConfiguration.js.map +1 -1
  158. package/eslint.config.mjs +0 -3
  159. package/lib/Auth/AuthTypes.ts +6 -7
  160. package/lib/Auth/endpoints/setCatchAllRequestHandler.ts +6 -2
  161. package/lib/DBSchemaBuilder/getColumnTypescriptDefinition.ts +1 -1
  162. package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -1
  163. package/lib/DboBuilder/DboBuilder.ts +4 -4
  164. package/lib/DboBuilder/DboBuilderTypes.ts +7 -20
  165. package/lib/DboBuilder/TableHandler/TableHandler.ts +7 -4
  166. package/lib/DboBuilder/TableHandler/delete.ts +23 -17
  167. package/lib/DboBuilder/TableHandler/insert/insert.ts +3 -12
  168. package/lib/DboBuilder/TableHandler/insert/insertNestedRecords.ts +13 -17
  169. package/lib/DboBuilder/TableHandler/insert/insertRowWithNestedRecords.ts +1 -1
  170. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +41 -54
  171. package/lib/DboBuilder/TableHandler/update.ts +8 -19
  172. package/lib/DboBuilder/TableHandler/updateFile.ts +20 -42
  173. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +1 -1
  174. package/lib/DboBuilder/ViewHandler/getInfo.ts +19 -2
  175. package/lib/DboBuilder/getColumns.ts +40 -4
  176. package/lib/DboBuilder/uploadFile.ts +34 -50
  177. package/lib/FileManager/FileManager.ts +23 -249
  178. package/lib/FileManager/getFileTableConfig.ts +140 -0
  179. package/lib/FileManager/getLocalStorageClient.ts +118 -0
  180. package/lib/FileManager/getValidatedFileType.ts +14 -22
  181. package/lib/FileManager/setupFileServeHandler.ts +102 -0
  182. package/lib/Logging.ts +0 -3
  183. package/lib/Prostgles.ts +8 -44
  184. package/lib/ProstglesTypes.ts +30 -24
  185. package/lib/PubSubManager/notifListener.ts +0 -2
  186. package/lib/PublishParser/getDBSchemaTable.ts +6 -3
  187. package/lib/PublishParser/getSchemaFromPublish.ts +2 -1
  188. package/lib/PublishParser/publishTypesAndUtils.ts +1 -0
  189. package/lib/RestApi.ts +12 -12
  190. package/lib/TableConfig/{TableConfig.ts → TableConfigTypes.ts} +18 -217
  191. package/lib/TableConfig/TableConfigurator.ts +191 -0
  192. package/lib/TableConfig/applyTableConfig.ts +2 -3
  193. package/lib/TableConfig/getColumnConfig.ts +2 -2
  194. package/lib/TableConfig/getColumnSQLDefinitionQuery.ts +2 -2
  195. package/lib/TableConfig/getConstraintDefinitionQueries.ts +1 -1
  196. package/lib/TableConfig/getCreateSchemaQueries.ts +1 -1
  197. package/lib/TableConfig/getSchemaDiffQueries.ts +14 -11
  198. package/lib/TableConfig/getTableColumnQueries.ts +22 -20
  199. package/lib/TableConfig/getTableConfigSchemaQueries.ts +20 -22
  200. package/lib/TableConfig/indexes/getIndexesQueries.ts +1 -1
  201. package/lib/TableConfig/initTableConfig.ts +7 -6
  202. package/lib/WebsocketAPI/getClientSchema.ts +7 -1
  203. package/lib/index.ts +3 -2
  204. package/lib/initProstgles.ts +1 -2
  205. package/lib/runClientRequest.ts +1 -1
  206. package/lib/updateConfiguration.ts +0 -3
  207. package/package.json +2 -3
  208. package/dist/FileManager/initFileManager.d.ts +0 -18
  209. package/dist/FileManager/initFileManager.d.ts.map +0 -1
  210. package/dist/FileManager/initFileManager.js +0 -257
  211. package/dist/FileManager/initFileManager.js.map +0 -1
  212. package/dist/FileManager/upload.d.ts +0 -4
  213. package/dist/FileManager/upload.d.ts.map +0 -1
  214. package/dist/FileManager/upload.js +0 -90
  215. package/dist/FileManager/upload.js.map +0 -1
  216. package/dist/FileManager/uploadStream.d.ts +0 -4
  217. package/dist/FileManager/uploadStream.d.ts.map +0 -1
  218. package/dist/FileManager/uploadStream.js +0 -100
  219. package/dist/FileManager/uploadStream.js.map +0 -1
  220. package/dist/TableConfig/TableConfig.d.ts.map +0 -1
  221. package/dist/TableConfig/TableConfig.js.map +0 -1
  222. package/lib/FileManager/initFileManager.ts +0 -254
  223. package/lib/FileManager/upload.ts +0 -59
  224. package/lib/FileManager/uploadStream.ts +0 -76
@@ -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