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.
- package/README.md +1 -1
- package/dist/AuthHandler.js +1 -1
- package/dist/AuthHandler.js.map +1 -1
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.d.ts +11 -6
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +8 -0
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +1 -0
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts +6 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +4 -4
- package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
- package/dist/DboBuilder/QueryStreamer.js.map +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts +63 -0
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -0
- package/dist/DboBuilder/TableHandler/DataValidator.js +259 -0
- package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -0
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts +11 -11
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +4 -23
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.js +35 -8
- package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
- package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts +2 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +5 -4
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler/update.d.ts +1 -1
- package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/update.js +22 -29
- package/dist/DboBuilder/TableHandler/update.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateBatch.js +1 -1
- package/dist/DboBuilder/TableHandler/updateBatch.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +4 -12
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.js +5 -46
- package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsFilters.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/validateViewRules.js.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.d.ts +4 -0
- package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.js +4 -0
- package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
- package/dist/DboBuilder/find.js.map +1 -1
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +5 -6
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
- package/dist/DboBuilder/insertNestedRecords.d.ts +35 -0
- package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -0
- package/dist/DboBuilder/insertNestedRecords.js +270 -0
- package/dist/DboBuilder/insertNestedRecords.js.map +1 -0
- package/dist/DboBuilder/parseMediaOrNestedInsert.d.ts +29 -0
- package/dist/DboBuilder/parseMediaOrNestedInsert.d.ts.map +1 -0
- package/dist/DboBuilder/parseMediaOrNestedInsert.js +271 -0
- package/dist/DboBuilder/parseMediaOrNestedInsert.js.map +1 -0
- package/dist/DboBuilder/parseUpdateRules.d.ts +3 -3
- package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +21 -13
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/subscribe.js.map +1 -1
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/FileManager/FileManager.js.map +1 -1
- package/dist/FileManager/getValidatedFileType.js.map +1 -1
- package/dist/FileManager/initFileManager.js.map +1 -1
- package/dist/FileManager/upload.js.map +1 -1
- package/dist/FileManager/uploadStream.js.map +1 -1
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validation.js.map +1 -1
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addSub.js.map +1 -1
- package/dist/PubSubManager/addSync.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PubSubManager/notifListener.js.map +1 -1
- package/dist/PubSubManager/pushSubData.js.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts +1 -1
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/getFileTableRules.js.map +1 -1
- package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
- package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.d.ts +6 -5
- package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
- package/dist/RestApi.js.map +1 -1
- package/dist/SchemaWatch.js.map +1 -1
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig/TableConfig.d.ts +5 -5
- package/dist/TableConfig/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig/TableConfig.js.map +1 -1
- package/dist/TableConfig/getColumnDefinitionQuery.js.map +1 -1
- package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
- package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
- package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/dist/initProstgles.js.map +1 -1
- package/dist/runClientRequest.js.map +1 -1
- package/dist/shortestPath.js.map +1 -1
- package/dist/utils.js.map +1 -1
- package/lib/AuthHandler.ts +3 -3
- package/lib/DBSchemaBuilder.ts +25 -10
- package/lib/DboBuilder/DboBuilder.ts +1 -0
- package/lib/DboBuilder/DboBuilderTypes.ts +17 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +1 -1
- package/lib/DboBuilder/TableHandler/DataValidator.ts +425 -0
- package/lib/DboBuilder/TableHandler/TableHandler.ts +17 -36
- package/lib/DboBuilder/TableHandler/insert.ts +39 -12
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +8 -5
- package/lib/DboBuilder/TableHandler/update.ts +25 -37
- package/lib/DboBuilder/TableHandler/updateBatch.ts +4 -4
- package/lib/DboBuilder/TableHandler/updateFile.ts +4 -3
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +3 -54
- package/lib/DboBuilder/dboBuilderUtils.ts +4 -1
- package/lib/DboBuilder/getColumns.ts +6 -7
- package/lib/DboBuilder/{insertDataParse.ts → insertNestedRecords.ts} +58 -49
- package/lib/DboBuilder/parseUpdateRules.ts +22 -22
- package/lib/Prostgles.ts +1 -1
- package/lib/PublishParser/PublishParser.ts +1 -1
- package/lib/PublishParser/publishTypesAndUtils.ts +6 -5
- package/lib/TableConfig/TableConfig.ts +7 -6
- package/lib/TableConfig/initTableConfig.ts +1 -1
- package/lib/initProstgles.ts +1 -1
- package/package.json +3 -3
- package/tests/client/package-lock.json +23 -23
- package/tests/client/package.json +2 -2
- package/tests/client/tsconfig.json +1 -1
- package/tests/isomorphic_queries.ts +16 -10
- package/tests/server/package-lock.json +12 -12
- package/tests/server/package.json +1 -1
- package/tests/server_only_queries.ts +3 -1
- 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,
|
|
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?:
|
|
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 } =
|
|
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.
|
|
130
|
-
|
|
126
|
+
const updateQ = (await this.dataValidator.parse({
|
|
127
|
+
command: "update",
|
|
128
|
+
rows: [data],
|
|
131
129
|
allowedCols,
|
|
132
|
-
this.tx?.dbTX || this.dboBuilder.dbo,
|
|
133
|
-
|
|
134
|
-
|
|
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:
|
|
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:
|
|
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
|
}
|
package/lib/initProstgles.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prostgles-server",
|
|
3
|
-
"version": "4.2.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
79
|
-
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.
|
|
80
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
95
|
-
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.
|
|
96
|
-
"integrity": "sha512-
|
|
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.
|
|
129
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.
|
|
130
|
-
"integrity": "sha512-
|
|
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": ">=
|
|
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.
|
|
217
|
-
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-4.0.
|
|
218
|
-
"integrity": "sha512-
|
|
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.
|
|
220
|
+
"prostgles-types": "^4.0.70"
|
|
221
221
|
}
|
|
222
222
|
},
|
|
223
223
|
"prostgles-types": {
|
|
224
|
-
"version": "4.0.
|
|
225
|
-
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-4.0.
|
|
226
|
-
"integrity": "sha512-
|
|
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.
|
|
253
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.
|
|
254
|
-
"integrity": "sha512-
|
|
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.
|
|
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.
|
|
21
|
+
"typescript": "^5.3.3"
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { strict as assert } from 'assert';
|
|
2
2
|
import * as fs from "fs";
|
|
3
|
-
import
|
|
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:
|
|
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
|
|
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.
|
|
19
|
+
"typescript": "^5.3.3"
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"../..": {
|
|
23
23
|
"name": "prostgles-server",
|
|
24
|
-
"version": "4.2.
|
|
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.
|
|
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.
|
|
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.
|
|
993
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.
|
|
994
|
-
"integrity": "sha512-
|
|
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.
|
|
1552
|
-
"typescript": "^5.
|
|
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.
|
|
1809
|
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.
|
|
1810
|
-
"integrity": "sha512-
|
|
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,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)
|
|
23
|
+
if(newRow.col1 !== null) {
|
|
24
|
+
throw "api_table onMount failed: col1 missing. Got: " + JSON.stringify(newRow);
|
|
25
|
+
}
|
|
24
26
|
}
|