prostgles-server 4.2.5 → 4.2.6

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 (160) hide show
  1. package/README.md +1 -1
  2. package/dist/AuthHandler.js +1 -1
  3. package/dist/AuthHandler.js.map +1 -1
  4. package/dist/DBEventsManager.js.map +1 -1
  5. package/dist/DBSchemaBuilder.d.ts +11 -6
  6. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  7. package/dist/DBSchemaBuilder.js +8 -0
  8. package/dist/DBSchemaBuilder.js.map +1 -1
  9. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  10. package/dist/DboBuilder/DboBuilder.js +1 -0
  11. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  12. package/dist/DboBuilder/DboBuilderTypes.d.ts +6 -1
  13. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  14. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  15. package/dist/DboBuilder/QueryBuilder/Functions.js +4 -4
  16. package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
  17. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +1 -1
  18. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  19. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
  20. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +1 -1
  21. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  22. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
  23. package/dist/DboBuilder/QueryStreamer.js.map +1 -1
  24. package/dist/DboBuilder/TableHandler/DataValidator.d.ts +63 -0
  25. package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -0
  26. package/dist/DboBuilder/TableHandler/DataValidator.js +259 -0
  27. package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -0
  28. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +11 -11
  29. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  30. package/dist/DboBuilder/TableHandler/TableHandler.js +4 -23
  31. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  32. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  33. package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
  34. package/dist/DboBuilder/TableHandler/insert.js +35 -8
  35. package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
  36. package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
  37. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  38. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts +2 -1
  39. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  40. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +5 -4
  41. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  42. package/dist/DboBuilder/TableHandler/update.d.ts +1 -1
  43. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  44. package/dist/DboBuilder/TableHandler/update.js +22 -29
  45. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  46. package/dist/DboBuilder/TableHandler/updateBatch.js +1 -1
  47. package/dist/DboBuilder/TableHandler/updateBatch.js.map +1 -1
  48. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  49. package/dist/DboBuilder/TableHandler/updateFile.js +1 -1
  50. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  51. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +4 -12
  52. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  53. package/dist/DboBuilder/ViewHandler/ViewHandler.js +5 -46
  54. package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
  55. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  56. package/dist/DboBuilder/ViewHandler/getExistsFilters.js.map +1 -1
  57. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
  58. package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
  59. package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
  60. package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
  61. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  62. package/dist/DboBuilder/ViewHandler/validateViewRules.js.map +1 -1
  63. package/dist/DboBuilder/dboBuilderUtils.d.ts +4 -0
  64. package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
  65. package/dist/DboBuilder/dboBuilderUtils.js +4 -0
  66. package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
  67. package/dist/DboBuilder/find.js.map +1 -1
  68. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  69. package/dist/DboBuilder/getColumns.js +5 -6
  70. package/dist/DboBuilder/getColumns.js.map +1 -1
  71. package/dist/DboBuilder/getCondition.js.map +1 -1
  72. package/dist/DboBuilder/getSubscribeRelatedTables.js +1 -1
  73. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  74. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
  75. package/dist/DboBuilder/insertNestedRecords.d.ts +35 -0
  76. package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -0
  77. package/dist/DboBuilder/insertNestedRecords.js +270 -0
  78. package/dist/DboBuilder/insertNestedRecords.js.map +1 -0
  79. package/dist/DboBuilder/parseMediaOrNestedInsert.d.ts +29 -0
  80. package/dist/DboBuilder/parseMediaOrNestedInsert.d.ts.map +1 -0
  81. package/dist/DboBuilder/parseMediaOrNestedInsert.js +271 -0
  82. package/dist/DboBuilder/parseMediaOrNestedInsert.js.map +1 -0
  83. package/dist/DboBuilder/parseUpdateRules.d.ts +3 -3
  84. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  85. package/dist/DboBuilder/parseUpdateRules.js +21 -13
  86. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  87. package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
  88. package/dist/DboBuilder/runSQL.js.map +1 -1
  89. package/dist/DboBuilder/subscribe.js.map +1 -1
  90. package/dist/DboBuilder/uploadFile.js.map +1 -1
  91. package/dist/FileManager/FileManager.js.map +1 -1
  92. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  93. package/dist/FileManager/initFileManager.js.map +1 -1
  94. package/dist/FileManager/upload.js.map +1 -1
  95. package/dist/FileManager/uploadStream.js.map +1 -1
  96. package/dist/Filtering.js.map +1 -1
  97. package/dist/JSONBValidation/validation.js.map +1 -1
  98. package/dist/PostgresNotifListenManager.js.map +1 -1
  99. package/dist/Prostgles.js.map +1 -1
  100. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  101. package/dist/PubSubManager/addSub.js.map +1 -1
  102. package/dist/PubSubManager/addSync.js.map +1 -1
  103. package/dist/PubSubManager/initPubSubManager.js.map +1 -1
  104. package/dist/PubSubManager/notifListener.js.map +1 -1
  105. package/dist/PubSubManager/pushSubData.js.map +1 -1
  106. package/dist/PublishParser/PublishParser.d.ts +1 -1
  107. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  108. package/dist/PublishParser/PublishParser.js.map +1 -1
  109. package/dist/PublishParser/getFileTableRules.js.map +1 -1
  110. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  111. package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
  112. package/dist/PublishParser/publishTypesAndUtils.d.ts +6 -5
  113. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  114. package/dist/RestApi.js.map +1 -1
  115. package/dist/SchemaWatch.js.map +1 -1
  116. package/dist/SyncReplication.js.map +1 -1
  117. package/dist/TableConfig/TableConfig.d.ts +5 -5
  118. package/dist/TableConfig/TableConfig.d.ts.map +1 -1
  119. package/dist/TableConfig/TableConfig.js.map +1 -1
  120. package/dist/TableConfig/getColumnDefinitionQuery.js.map +1 -1
  121. package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
  122. package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
  123. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  124. package/dist/TableConfig/initTableConfig.js.map +1 -1
  125. package/dist/initProstgles.js.map +1 -1
  126. package/dist/runClientRequest.js.map +1 -1
  127. package/dist/shortestPath.js.map +1 -1
  128. package/dist/utils.js.map +1 -1
  129. package/lib/AuthHandler.ts +3 -3
  130. package/lib/DBSchemaBuilder.ts +25 -10
  131. package/lib/DboBuilder/DboBuilder.ts +1 -0
  132. package/lib/DboBuilder/DboBuilderTypes.ts +17 -1
  133. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +1 -1
  134. package/lib/DboBuilder/TableHandler/DataValidator.ts +425 -0
  135. package/lib/DboBuilder/TableHandler/TableHandler.ts +17 -36
  136. package/lib/DboBuilder/TableHandler/insert.ts +39 -12
  137. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +8 -5
  138. package/lib/DboBuilder/TableHandler/update.ts +25 -37
  139. package/lib/DboBuilder/TableHandler/updateBatch.ts +4 -4
  140. package/lib/DboBuilder/TableHandler/updateFile.ts +4 -3
  141. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +3 -54
  142. package/lib/DboBuilder/dboBuilderUtils.ts +4 -1
  143. package/lib/DboBuilder/getColumns.ts +6 -7
  144. package/lib/DboBuilder/{insertDataParse.ts → insertNestedRecords.ts} +58 -49
  145. package/lib/DboBuilder/parseUpdateRules.ts +22 -22
  146. package/lib/Prostgles.ts +1 -1
  147. package/lib/PublishParser/PublishParser.ts +1 -1
  148. package/lib/PublishParser/publishTypesAndUtils.ts +6 -5
  149. package/lib/TableConfig/TableConfig.ts +7 -6
  150. package/lib/TableConfig/initTableConfig.ts +1 -1
  151. package/lib/initProstgles.ts +1 -1
  152. package/package.json +3 -3
  153. package/tests/client/package-lock.json +23 -23
  154. package/tests/client/package.json +2 -2
  155. package/tests/client/tsconfig.json +1 -1
  156. package/tests/isomorphic_queries.ts +16 -10
  157. package/tests/server/package-lock.json +12 -12
  158. package/tests/server/package.json +1 -1
  159. package/tests/server_only_queries.ts +3 -1
  160. package/lib/DboBuilder/ViewHandler/ColSet.ts +0 -121
@@ -1,7 +1,8 @@
1
1
  import { AnyObject, FieldFilter, isDefined, UpdateParams } from "prostgles-types";
2
2
  import { Filter, LocalParams } from "./DboBuilder";
3
- import { TableRule, UpdateRule, ValidateRow, ValidateRowBasic, ValidateUpdateRowBasic } from "../PublishParser/PublishParser";
3
+ import { TableRule, UpdateRule, ValidateRowBasic, ValidateUpdateRowBasic } from "../PublishParser/PublishParser";
4
4
  import { TableHandler } from "./TableHandler/TableHandler";
5
+ import { prepareNewData } from "./TableHandler/DataValidator";
5
6
 
6
7
  /**
7
8
  * 1) Check if publish is valid
@@ -10,13 +11,12 @@ import { TableHandler } from "./TableHandler/TableHandler";
10
11
  export async function parseUpdateRules(
11
12
  this: TableHandler,
12
13
  filter: Filter,
13
- newData: AnyObject,
14
14
  params?: UpdateParams,
15
15
  tableRules?: TableRule,
16
16
  localParams?: LocalParams
17
17
  ): Promise<{
18
18
  fields: string[];
19
- validateRow?: ValidateRow;
19
+ validateRow?: ValidateRowBasic;
20
20
  finalUpdateFilter: AnyObject;
21
21
  forcedData?: AnyObject;
22
22
  forcedFilter?: AnyObject;
@@ -25,9 +25,6 @@ export async function parseUpdateRules(
25
25
  }> {
26
26
  const { testRule = false } = localParams ?? {};
27
27
  if (!testRule) {
28
- if (!newData || !Object.keys(newData).length) {
29
- throw "no update data provided\nEXPECTING db.table.update(filter, updateData, options)";
30
- }
31
28
  this.checkFilter(filter);
32
29
  }
33
30
 
@@ -54,15 +51,7 @@ export async function parseUpdateRules(
54
51
  throw ` Invalid update rule fo r ${this.name}. fields missing `;
55
52
  }
56
53
  finalUpdateFilter = (await this.prepareWhere({ filter, forcedFilter, filterFields, localParams, tableRule: tableRules })).filter;
57
- // if (forcedFilter) {
58
- // const match = await this.findOne(finalUpdateFilter);
59
- // const requiredItem = await this.findOne(filter);
60
- // if (!match && requiredItem) {
61
- // fields = [];
62
- // }
63
- // }
64
54
  if (tableRules.update.dynamicFields?.length) {
65
-
66
55
  /**
67
56
  * dynamicFields.fields used to allow a custom list of fields for specific records
68
57
  * dynamicFields.filter cannot overlap each other
@@ -120,19 +109,30 @@ export async function parseUpdateRules(
120
109
  await this.validateViewRules({ fields, filterFields, returningFields, forcedFilter, dynamicFields: tableRules.update.dynamicFields, rule: "update" });
121
110
  if (forcedData) {
122
111
  try {
123
- const { data, allowedCols } = this.validateNewData({ row: forcedData, forcedData: undefined, allowedFields: "*", tableRules, fixIssues: false });
112
+ const { data, allowedCols } = await prepareNewData({
113
+ row: forcedData,
114
+ forcedData: undefined,
115
+ allowedFields: "*",
116
+ tableRules,
117
+ fixIssues: false,
118
+ tableConfigurator: this.dboBuilder.prostgles.tableConfigurator,
119
+ tableHandler: this,
120
+ });
124
121
  let updateValidate: ValidateRowBasic | undefined;
125
122
  if(validate){
126
123
  if(!localParams) throw "localParams missing";
127
124
  updateValidate = (args) => validate!({ update: args.row, filter: {}, dbx: this.getFinalDbo(localParams), localParams })
128
125
  }
129
- const updateQ = await this.colSet.getUpdateQuery(
130
- data,
126
+ const updateQ = (await this.dataValidator.parse({
127
+ command: "update",
128
+ rows: [data],
131
129
  allowedCols,
132
- this.tx?.dbTX || this.dboBuilder.dbo,
133
- updateValidate,
134
- localParams
135
- );
130
+ dbTx: this.tx?.dbTX || this.dboBuilder.dbo,
131
+ validationOptions: {
132
+ validate: updateValidate,
133
+ localParams,
134
+ }
135
+ })).getQuery();
136
136
  const query = updateQ + " WHERE FALSE ";
137
137
  await this.db.any("EXPLAIN " + query);
138
138
  } catch (e) {
@@ -147,7 +147,7 @@ export async function parseUpdateRules(
147
147
  /* Update all allowed fields (fields) except the forcedFilter (so that the user cannot change the forced filter values) */
148
148
  const _fields = this.parseFieldFilter(fields);
149
149
 
150
- let validateRow: ValidateRow | undefined;
150
+ let validateRow: ValidateRowBasic | undefined;
151
151
  if(validate){
152
152
  if(!localParams) throw "localParams missing";
153
153
  validateRow = ({ row }) => validate!({ update: row, filter: finalUpdateFilter, localParams, dbx: this.getFinalDbo(localParams) });
package/lib/Prostgles.ts CHANGED
@@ -355,7 +355,7 @@ export class Prostgles {
355
355
  } else if (watchSchema || isObject(watchSchemaType) && "checkIntervalMillis" in watchSchemaType) {
356
356
  /* Full re-init. Sockets must reconnect */
357
357
  console.log("watchSchema: Full re-initialisation", { query })
358
- this.init(onReady, { type: "schema change", query, command });
358
+ this.init(onReady as any, { type: "schema change", query, command });
359
359
  }
360
360
  }
361
361
  }
@@ -31,7 +31,7 @@ export class PublishParser {
31
31
  if (!this.dbo) throw "dbo missing"
32
32
  return {
33
33
  ...(clientInfo || await this.prostgles.authHandler?.getClientInfo(localParams)),
34
- dbo: this.dbo,
34
+ dbo: this.dbo as any,
35
35
  db: this.db,
36
36
  socket: localParams.socket!,
37
37
  tables: this.prostgles.dboBuilder.tables,
@@ -139,6 +139,7 @@ export type ValidateUpdateRowArgs<U = Partial<AnyObject>, F = Filter, DBX = DBHa
139
139
  }
140
140
  export type ValidateRow<R extends AnyObject = AnyObject, S = void> = (args: ValidateRowArgs<R, DBOFullyTyped<S>>) => R | Promise<R>;
141
141
  export type PostValidateRow<R extends AnyObject = AnyObject, S = void> = (args: ValidateRowArgs<R, DBOFullyTyped<S>>) => void | Promise<void>;
142
+ export type PostValidateRowBasic = (args: ValidateRowArgs) => void | Promise<void>;
142
143
  export type ValidateRowBasic = (args: ValidateRowArgs) => AnyObject | Promise<AnyObject>;
143
144
  export type ValidateUpdateRow<R extends AnyObject = AnyObject, S extends DBSchema | void = void> = (args: ValidateUpdateRowArgs<Partial<R>, FullFilter<R, S>, DBOFullyTyped<S>>) => Partial<R> | Promise<Partial<R>>;
144
145
  export type ValidateUpdateRowBasic = (args: ValidateUpdateRowArgs) => AnyObject | Promise<AnyObject>;
@@ -210,18 +211,18 @@ export type InsertRule<Cols extends AnyObject = AnyObject, S extends DBSchema |
210
211
  /**
211
212
  * Validation logic to check/update data for each request. Happens before publish rule checks (for fields, forcedData/forcedFilter)
212
213
  */
213
- preValidate?: ValidateRow<Cols, S>;
214
+ preValidate?: S extends DBSchema? ValidateRow<Cols, S> : ValidateRowBasic;
214
215
 
215
216
  /**
216
217
  * Validation logic to check/update data for each request. Happens after publish rule checks (for fields, forcedData/forcedFilter)
217
218
  */
218
- validate?: ValidateRow<Cols, S>;
219
+ validate?: S extends DBSchema? ValidateRow<Cols, S> : ValidateRowBasic;
219
220
 
220
221
  /**
221
222
  * Validation logic to check/update data after the insert.
222
223
  * Happens in the same transaction so upon throwing an error the record will be deleted (not committed)
223
224
  */
224
- postValidate?: PostValidateRow<Required<Cols>, S>;
225
+ postValidate?: S extends DBSchema? PostValidateRow<Required<Cols>, S> : PostValidateRowBasic;
225
226
 
226
227
  /**
227
228
  * If defined then only nested inserts from these tables are allowed
@@ -272,13 +273,13 @@ export type UpdateRule<Cols extends AnyObject = AnyObject, S extends DBSchema |
272
273
  /**
273
274
  * Validation logic to check/update data for each request
274
275
  */
275
- validate?: ValidateUpdateRow<Cols, S>;
276
+ validate?: S extends DBSchema? ValidateUpdateRow<Cols, S> : ValidateUpdateRowBasic;
276
277
 
277
278
  /**
278
279
  * Validation logic to check/update data after the insert.
279
280
  * Happens in the same transaction so upon throwing an error the record will be deleted (not committed)
280
281
  */
281
- postValidate?: PostValidateRow<Required<Cols>, S>;
282
+ postValidate?: S extends DBSchema? PostValidateRow<Required<Cols>, S> : PostValidateRowBasic;
282
283
  };
283
284
 
284
285
  export type DeleteRule<Cols extends AnyObject = AnyObject, S extends DBSchema | void = void> = {
@@ -1,5 +1,5 @@
1
1
  import { asName as _asName, AnyObject, TableInfo, ALLOWED_EXTENSION, ALLOWED_CONTENT_TYPE, isObject, JSONB, ColumnInfo } from "prostgles-types";
2
- import { isPlainObject, JoinInfo } from "../DboBuilder/DboBuilder";
2
+ import { isPlainObject, JoinInfo, LocalParams } from "../DboBuilder/DboBuilder";
3
3
  import { DB, DBHandlerServer, Prostgles } from "../Prostgles";
4
4
  import { InsertRule, ValidateRowArgs } from "../PublishParser/PublishParser";
5
5
  import { TableHandler } from "../DboBuilder/TableHandler/TableHandler";
@@ -46,7 +46,7 @@ type BaseTableDefinition<LANG_IDS = AnyObject> = {
46
46
  * Hook used to run custom logic before inserting a row.
47
47
  * The returned row must satisfy the table schema
48
48
  */
49
- getPreInsertRow?: (args: ValidateRowArgs) => Promise<{ row: AnyObject; onInserted: Promise<void>; }>;
49
+ getPreInsertRow?: (args: GetPreInsertRowArgs) => Promise<{ row: AnyObject; onInserted: Promise<void>; }>;
50
50
  };
51
51
  triggers?: {
52
52
  [triggerName: string]: {
@@ -296,9 +296,10 @@ export type TableDefinition<LANG_IDS> = {
296
296
  }
297
297
  }
298
298
 
299
- type GetPreInsertRowArgs = ValidateRowArgs & {
300
- preValidate: InsertRule["preValidate"];
299
+ type GetPreInsertRowArgs = Omit<ValidateRowArgs, "localParams"> & {
300
+ // preValidate: InsertRule["preValidate"];
301
301
  validate: InsertRule["validate"];
302
+ localParams: LocalParams | undefined;
302
303
  }
303
304
 
304
305
  /**
@@ -449,7 +450,7 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
449
450
  return undefined;
450
451
  }
451
452
 
452
- getPreInsertRow = async (tableHandler: TableHandler, args: GetPreInsertRowArgs): Promise<AnyObject> => {
453
+ getPreInsertRow = async (tableHandler: TableHandler, args: Pick<GetPreInsertRowArgs, "localParams" | "row" | "validate" | "dbx">): Promise<AnyObject> => {
453
454
  const tableHook = this.config?.[tableHandler.name]?.hooks?.getPreInsertRow;
454
455
  if(tableHandler.is_media){
455
456
  return uploadFile.bind(tableHandler)(args) as Promise<AnyObject>;
@@ -464,4 +465,4 @@ export default class TableConfigurator<LANG_IDS = { en: 1 }> {
464
465
  prevInitQueryHistory?: string[];
465
466
  initialising = false;
466
467
  init = initTableConfig.bind(this);
467
- }
468
+ }
@@ -310,7 +310,7 @@ export const initTableConfig = async function (this: TableConfigurator<any>) {
310
310
  if (!this.prevInitQueryHistory) {
311
311
  this.prevInitQueryHistory = queryHistory;
312
312
  } else if (this.prevInitQueryHistory.join() !== queryHistory.join()) {
313
- this.prostgles.init(this.prostgles.opts.onReady, { type: "TableConfig" });
313
+ this.prostgles.init(this.prostgles.opts.onReady as any, { type: "TableConfig" });
314
314
  } else {
315
315
  console.error("TableConfig loop bug", queryHistory)
316
316
  }
@@ -129,7 +129,7 @@ export const initProstgles = async function(this: Prostgles, onReady: OnReadyCal
129
129
 
130
130
  this.loaded = true;
131
131
  return {
132
- db: this.dbo!,
132
+ db: this.dbo! as any,
133
133
  _db: db,
134
134
  pgp,
135
135
  io: this.opts.io,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.5",
3
+ "version": "4.2.6",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -46,7 +46,7 @@
46
46
  "pg-cursor": "^2.10.3",
47
47
  "pg-promise": "^11.5.4",
48
48
  "prostgles-client": "^4.0.53",
49
- "prostgles-types": "^4.0.68"
49
+ "prostgles-types": "^4.0.70"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/bluebird": "^3.5.36",
@@ -58,6 +58,6 @@
58
58
  "@typescript-eslint/eslint-plugin": "^5.62.0",
59
59
  "@typescript-eslint/parser": "^5.62.0",
60
60
  "eslint": "^8.51.0",
61
- "typescript": "^5.2.2"
61
+ "typescript": "^5.3.3"
62
62
  }
63
63
  }
@@ -10,12 +10,12 @@
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
12
  "@types/node": "^14.14.16",
13
- "prostgles-client": "^4.0.62",
13
+ "prostgles-client": "^4.0.69",
14
14
  "prostgles-types": "^4.0.51",
15
15
  "socket.io-client": "^4.7.1"
16
16
  },
17
17
  "devDependencies": {
18
- "typescript": "^5.0.3"
18
+ "typescript": "^5.3.3"
19
19
  }
20
20
  },
21
21
  "node_modules/@socket.io/component-emitter": {
@@ -75,11 +75,11 @@
75
75
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
76
76
  },
77
77
  "node_modules/prostgles-client": {
78
- "version": "4.0.62",
79
- "resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.62.tgz",
80
- "integrity": "sha512-0tSymKQWkf5hShxyw3kbBzs0wVqwzFYYRqWWTV8zCJGuCLfoKCqhUU6BY257ZAuhRBmMClTa430JR1PccXVYvw==",
78
+ "version": "4.0.69",
79
+ "resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.69.tgz",
80
+ "integrity": "sha512-LbW/uOK04jywVEpzn7f/EzN9XOLvSNwR5qoomIraEuKi/qeFjOQUsWMf/Nxturwvv3B+dgIn4Uv2d/gFznV9Wg==",
81
81
  "dependencies": {
82
- "prostgles-types": "^4.0.67"
82
+ "prostgles-types": "^4.0.70"
83
83
  },
84
84
  "peerDependencies": {
85
85
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
@@ -91,9 +91,9 @@
91
91
  }
92
92
  },
93
93
  "node_modules/prostgles-types": {
94
- "version": "4.0.67",
95
- "resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.67.tgz",
96
- "integrity": "sha512-KOZ+q3apiwmn+97PAGYpdH6EZwOSpA4OmzZX6fzbzGLG2spE1ghrakQIBGa7HqwuuIoejQInKWbRCs4Arm1n6A==",
94
+ "version": "4.0.70",
95
+ "resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.70.tgz",
96
+ "integrity": "sha512-GaAfetF5kD+N4XOI+ifT1vezYAkV3wriE+dqgW9kRCSEVOY8apo71CuJeKkryjOnOY8fBS69jRgOGj4l9TfXhQ==",
97
97
  "dependencies": {
98
98
  "json-schema": "^0.4.0"
99
99
  }
@@ -125,16 +125,16 @@
125
125
  }
126
126
  },
127
127
  "node_modules/typescript": {
128
- "version": "5.0.3",
129
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
130
- "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
128
+ "version": "5.3.3",
129
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
130
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
131
131
  "dev": true,
132
132
  "bin": {
133
133
  "tsc": "bin/tsc",
134
134
  "tsserver": "bin/tsserver"
135
135
  },
136
136
  "engines": {
137
- "node": ">=12.20"
137
+ "node": ">=14.17"
138
138
  }
139
139
  },
140
140
  "node_modules/ws": {
@@ -213,17 +213,17 @@
213
213
  "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
214
214
  },
215
215
  "prostgles-client": {
216
- "version": "4.0.62",
217
- "resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.62.tgz",
218
- "integrity": "sha512-0tSymKQWkf5hShxyw3kbBzs0wVqwzFYYRqWWTV8zCJGuCLfoKCqhUU6BY257ZAuhRBmMClTa430JR1PccXVYvw==",
216
+ "version": "4.0.69",
217
+ "resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.69.tgz",
218
+ "integrity": "sha512-LbW/uOK04jywVEpzn7f/EzN9XOLvSNwR5qoomIraEuKi/qeFjOQUsWMf/Nxturwvv3B+dgIn4Uv2d/gFznV9Wg==",
219
219
  "requires": {
220
- "prostgles-types": "^4.0.67"
220
+ "prostgles-types": "^4.0.70"
221
221
  }
222
222
  },
223
223
  "prostgles-types": {
224
- "version": "4.0.67",
225
- "resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.67.tgz",
226
- "integrity": "sha512-KOZ+q3apiwmn+97PAGYpdH6EZwOSpA4OmzZX6fzbzGLG2spE1ghrakQIBGa7HqwuuIoejQInKWbRCs4Arm1n6A==",
224
+ "version": "4.0.70",
225
+ "resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.70.tgz",
226
+ "integrity": "sha512-GaAfetF5kD+N4XOI+ifT1vezYAkV3wriE+dqgW9kRCSEVOY8apo71CuJeKkryjOnOY8fBS69jRgOGj4l9TfXhQ==",
227
227
  "requires": {
228
228
  "json-schema": "^0.4.0"
229
229
  }
@@ -249,9 +249,9 @@
249
249
  }
250
250
  },
251
251
  "typescript": {
252
- "version": "5.0.3",
253
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
254
- "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
252
+ "version": "5.3.3",
253
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
254
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
255
255
  "dev": true
256
256
  },
257
257
  "ws": {
@@ -13,11 +13,11 @@
13
13
  "license": "ISC",
14
14
  "dependencies": {
15
15
  "@types/node": "^14.14.16",
16
- "prostgles-client": "^4.0.62",
16
+ "prostgles-client": "^4.0.69",
17
17
  "prostgles-types": "^4.0.51",
18
18
  "socket.io-client": "^4.7.1"
19
19
  },
20
20
  "devDependencies": {
21
- "typescript": "^5.0.3"
21
+ "typescript": "^5.3.3"
22
22
  }
23
23
  }
@@ -12,7 +12,7 @@
12
12
  // "declarationMap": true,
13
13
  "keyofStringsOnly": true,
14
14
  "ignoreDeprecations": "5.0",
15
- "skipLibCheck": false,
15
+ "skipLibCheck": true,
16
16
  "outDir": "dist",
17
17
  },
18
18
  "exclude": [
@@ -1,6 +1,6 @@
1
1
  import { strict as assert } from 'assert';
2
2
  import * as fs from "fs";
3
- import type { DBHandlerServer } from "./server/dist/server/index";
3
+ import { DBOFullyTyped } from "../dist/DBSchemaBuilder";
4
4
  import type { DBHandlerClient } from "./client/index";
5
5
 
6
6
  export async function tryRun(desc: string, func: () => any, log?: Function){
@@ -32,8 +32,8 @@ export function tryRunP(desc: string, func: (resolve: any, reject: any) => any,
32
32
  }
33
33
  });
34
34
  }
35
-
36
- export default async function isomorphic(db: Required<DBHandlerServer> | DBHandlerClient, log: (msg: string, extra?: any) => void) {
35
+
36
+ export default async function isomorphic(db: DBOFullyTyped | DBHandlerClient, log: (msg: string, extra?: any) => void) {
37
37
  log("Starting isomorphic queries");
38
38
 
39
39
  const itemsCount = await db.items.count!()
@@ -85,6 +85,12 @@ export default async function isomorphic(db: Required<DBHandlerServer> | DBHandl
85
85
 
86
86
  await db.sql("TRUNCATE files CASCADE");
87
87
  });
88
+ const json = { a: true, arr: "2", arr1: 3, arr2: [1], arrStr: ["1123.string"] }
89
+ await tryRun("merge json", async () => {
90
+ const inserted = await db.tjson.insert!({ colOneOf: "a", json }, { returning: "*" });
91
+ const res = await db.tjson.update!({ colOneOf: "a" },{ json: { $merge: [{ a: false }] } }, { returning: "*" });
92
+ assert.deepStrictEqual(res[0].json, { ...json, a: false });
93
+ });
88
94
 
89
95
  await tryRun("onConflict do update", async () => {
90
96
  const initial = await db.items4.insert!({ id: -99, name: "onConflict", public: "onConflict" }, { returning: "*" });
@@ -109,8 +115,9 @@ export default async function isomorphic(db: Required<DBHandlerServer> | DBHandl
109
115
 
110
116
  await tryRun("Nested insert", async () => {
111
117
 
112
- const { name, avatar: { extension, content_type, original_name } } = await db.users_public_info.insert!({ name: "somename.txt", avatar: mediaFile }, { returning: "*" });
113
-
118
+ const nestedInsert = await db.users_public_info.insert!({ name: "somename.txt", avatar: mediaFile }, { returning: "*" });
119
+ const { name, avatar } = nestedInsert;
120
+ const { extension, content_type, original_name } = avatar;
114
121
  assert.deepStrictEqual(
115
122
  { extension, content_type, original_name },
116
123
  {
@@ -612,8 +619,8 @@ export default async function isomorphic(db: Required<DBHandlerServer> | DBHandl
612
619
 
613
620
  await tryRun("Postgis examples", async () => {
614
621
  await db.shapes.delete!();
615
- const p1 = { ST_GeomFromText: ["POINT(-1 1)", 4326] },
616
- p2 = { ST_GeomFromText: ["POINT(-2 2)", 4326] };
622
+ const p1 = { $ST_GeomFromText: ["POINT(-1 1)", 4326] },
623
+ p2 = { $ST_GeomFromText: ["POINT(-2 2)", 4326] };
617
624
  await db.shapes.insert!([
618
625
  { geom: p1, geog: p1 },
619
626
  { geom: p2, geog: p2 },
@@ -687,7 +694,6 @@ export default async function isomorphic(db: Required<DBHandlerServer> | DBHandl
687
694
  },
688
695
  */
689
696
 
690
- const json = { a: true, arr: "2", arr1: 3, arr2: [1], arrStr: ["1123.string"] }
691
697
  const fo = await db.tjson.insert!({ colOneOf: "a", json }, { returning: "*"});
692
698
  // assert.deepStrictEqual(fo.json, json);
693
699
  await db.tjson.insert!({ colOneOf: "a", json: {...json, o: { o1: 2 } } })
@@ -1147,8 +1153,8 @@ export default async function isomorphic(db: Required<DBHandlerServer> | DBHandl
1147
1153
  assert.equal(res.length, 3);
1148
1154
  res.forEach(row => {
1149
1155
  assert(typeof row.id, "number");
1150
- assert(typeof row.price, "number");
1151
- assert(typeof row.symbol, "string");
1156
+ assert(typeof (row as any).price, "number");
1157
+ assert(typeof (row as any).symbol, "string");
1152
1158
  assert.deepStrictEqual(row.trades, row.tradesAlso);
1153
1159
  if(row.id !== "abc"){
1154
1160
  assert.equal(row.trades.length, 3)
@@ -16,12 +16,12 @@
16
16
  "devDependencies": {
17
17
  "@types/node": "^20.9.2",
18
18
  "tsc-watch": "^4.5.0",
19
- "typescript": "^5.2.2"
19
+ "typescript": "^5.3.3"
20
20
  }
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "4.2.4",
24
+ "version": "4.2.5",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@types/express": "^4.17.13",
@@ -35,7 +35,7 @@
35
35
  "pg-cursor": "^2.10.3",
36
36
  "pg-promise": "^11.5.4",
37
37
  "prostgles-client": "^4.0.53",
38
- "prostgles-types": "^4.0.68"
38
+ "prostgles-types": "^4.0.70"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/bluebird": "^3.5.36",
@@ -47,7 +47,7 @@
47
47
  "@typescript-eslint/eslint-plugin": "^5.62.0",
48
48
  "@typescript-eslint/parser": "^5.62.0",
49
49
  "eslint": "^8.51.0",
50
- "typescript": "^5.2.2"
50
+ "typescript": "^5.3.3"
51
51
  }
52
52
  },
53
53
  "node_modules/@socket.io/component-emitter": {
@@ -989,9 +989,9 @@
989
989
  }
990
990
  },
991
991
  "node_modules/typescript": {
992
- "version": "5.2.2",
993
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
994
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
992
+ "version": "5.3.3",
993
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
994
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
995
995
  "dev": true,
996
996
  "bin": {
997
997
  "tsc": "bin/tsc",
@@ -1548,8 +1548,8 @@
1548
1548
  "pg-cursor": "^2.10.3",
1549
1549
  "pg-promise": "^11.5.4",
1550
1550
  "prostgles-client": "^4.0.53",
1551
- "prostgles-types": "^4.0.68",
1552
- "typescript": "^5.2.2"
1551
+ "prostgles-types": "^4.0.70",
1552
+ "typescript": "^5.3.3"
1553
1553
  }
1554
1554
  },
1555
1555
  "proxy-addr": {
@@ -1805,9 +1805,9 @@
1805
1805
  }
1806
1806
  },
1807
1807
  "typescript": {
1808
- "version": "5.2.2",
1809
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
1810
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
1808
+ "version": "5.3.3",
1809
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
1810
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
1811
1811
  "dev": true
1812
1812
  },
1813
1813
  "undici-types": {
@@ -20,6 +20,6 @@
20
20
  "devDependencies": {
21
21
  "@types/node": "^20.9.2",
22
22
  "tsc-watch": "^4.5.0",
23
- "typescript": "^5.2.2"
23
+ "typescript": "^5.3.3"
24
24
  }
25
25
  }
@@ -20,5 +20,7 @@ export default async function f(db: DBHandlerServer){
20
20
  /** TableConfig onMount works */
21
21
  await db.api_table.findOne!({ id: 1 });
22
22
  const newRow = await db.api_table.insert!({ }, { returning: "*" });
23
- if(newRow.col1 !== null) throw "api_table onMount failed";
23
+ if(newRow.col1 !== null) {
24
+ throw "api_table onMount failed: col1 missing. Got: " + JSON.stringify(newRow);
25
+ }
24
26
  }