prostgles-server 2.0.178 → 2.0.181

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 (103) hide show
  1. package/dist/AuthHandler.d.ts +4 -4
  2. package/dist/AuthHandler.d.ts.map +1 -1
  3. package/dist/DBSchemaBuilder.d.ts +6 -6
  4. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  5. package/dist/DBSchemaBuilder.js +38 -15
  6. package/dist/DBSchemaBuilder.js.map +1 -1
  7. package/dist/DboBuilder.d.ts +20 -21
  8. package/dist/DboBuilder.d.ts.map +1 -1
  9. package/dist/DboBuilder.js +7 -2
  10. package/dist/DboBuilder.js.map +1 -1
  11. package/dist/Prostgles.d.ts +8 -10
  12. package/dist/Prostgles.d.ts.map +1 -1
  13. package/dist/Prostgles.js.map +1 -1
  14. package/dist/PubSubManager.js +1 -1
  15. package/dist/PubSubManager.js.map +1 -1
  16. package/dist/PublishParser.d.ts +37 -37
  17. package/dist/PublishParser.d.ts.map +1 -1
  18. package/dist/PublishParser.js.map +1 -1
  19. package/dist/index.d.ts +2 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/lib/AuthHandler.d.ts +148 -0
  23. package/lib/AuthHandler.d.ts.map +1 -0
  24. package/lib/AuthHandler.js +411 -0
  25. package/lib/AuthHandler.ts +3 -3
  26. package/lib/DBEventsManager.d.ts +38 -0
  27. package/lib/DBEventsManager.d.ts.map +1 -0
  28. package/lib/DBEventsManager.js +136 -0
  29. package/lib/DBSchemaBuilder.d.ts +11 -0
  30. package/lib/DBSchemaBuilder.d.ts.map +1 -0
  31. package/lib/DBSchemaBuilder.js +108 -0
  32. package/lib/DBSchemaBuilder.ts +75 -33
  33. package/lib/DboBuilder.d.ts +428 -0
  34. package/lib/DboBuilder.d.ts.map +1 -0
  35. package/lib/DboBuilder.js +3083 -0
  36. package/lib/DboBuilder.ts +33 -27
  37. package/lib/FileManager.d.ts +168 -0
  38. package/lib/FileManager.d.ts.map +1 -0
  39. package/lib/FileManager.js +474 -0
  40. package/lib/Filtering.d.ts +15 -0
  41. package/lib/Filtering.d.ts.map +1 -0
  42. package/lib/Filtering.js +299 -0
  43. package/lib/PostgresNotifListenManager.d.ts +27 -0
  44. package/lib/PostgresNotifListenManager.d.ts.map +1 -0
  45. package/lib/PostgresNotifListenManager.js +122 -0
  46. package/lib/Prostgles.d.ts +193 -0
  47. package/lib/Prostgles.d.ts.map +1 -0
  48. package/lib/Prostgles.js +579 -0
  49. package/lib/Prostgles.ts +6 -6
  50. package/lib/PubSubManager.d.ts +157 -0
  51. package/lib/PubSubManager.d.ts.map +1 -0
  52. package/lib/PubSubManager.js +1400 -0
  53. package/lib/PubSubManager.ts +1 -1
  54. package/lib/PublishParser.d.ts +262 -0
  55. package/lib/PublishParser.d.ts.map +1 -0
  56. package/lib/PublishParser.js +390 -0
  57. package/lib/PublishParser.ts +39 -38
  58. package/lib/QueryBuilder.d.ts +124 -0
  59. package/lib/QueryBuilder.d.ts.map +1 -0
  60. package/lib/QueryBuilder.js +1349 -0
  61. package/lib/SyncReplication.d.ts +34 -0
  62. package/lib/SyncReplication.d.ts.map +1 -0
  63. package/lib/SyncReplication.js +411 -0
  64. package/lib/TableConfig.d.ts +175 -0
  65. package/lib/TableConfig.d.ts.map +1 -0
  66. package/lib/TableConfig.js +231 -0
  67. package/lib/index.d.ts +10 -0
  68. package/lib/index.d.ts.map +1 -0
  69. package/lib/index.js +45 -0
  70. package/lib/index.ts +3 -4
  71. package/lib/shortestPath.d.ts +10 -0
  72. package/lib/shortestPath.d.ts.map +1 -0
  73. package/lib/shortestPath.js +111 -0
  74. package/lib/utils.d.ts +2 -0
  75. package/lib/utils.d.ts.map +1 -0
  76. package/lib/utils.js +5 -0
  77. package/package.json +3 -3
  78. package/tests/client/PID.txt +1 -1
  79. package/tests/client/index.d.ts +1 -1
  80. package/tests/client/index.d.ts.map +1 -1
  81. package/tests/client/package-lock.json +15 -15
  82. package/tests/client/package.json +1 -1
  83. package/tests/client_only_queries.d.ts +4 -0
  84. package/tests/client_only_queries.d.ts.map +1 -0
  85. package/tests/isomorphic_queries.d.ts +6 -0
  86. package/tests/isomorphic_queries.d.ts.map +1 -0
  87. package/tests/server/DBoGenerated.d.ts +227 -323
  88. package/tests/server/dboTypeCheck.d.ts +2 -0
  89. package/tests/server/dboTypeCheck.d.ts.map +1 -0
  90. package/tests/server/dboTypeCheck.js +16 -0
  91. package/tests/server/dboTypeCheck.ts +20 -0
  92. package/tests/server/index.d.ts +2 -0
  93. package/tests/server/index.d.ts.map +1 -0
  94. package/tests/server/index.js +11 -11
  95. package/tests/server/index.ts +23 -16
  96. package/tests/server/package-lock.json +5 -5
  97. package/tests/server/publishTypeCheck.d.ts +2 -0
  98. package/tests/server/publishTypeCheck.d.ts.map +1 -0
  99. package/tests/server/publishTypeCheck.js +120 -0
  100. package/tests/server/publishTypeCheck.ts +129 -0
  101. package/tests/server/tsconfig.json +4 -5
  102. package/tests/server_only_queries.d.ts +2 -0
  103. package/tests/server_only_queries.d.ts.map +1 -0
@@ -1,10 +1,10 @@
1
- import { getKeys, RULE_METHODS, AnyObject, get, TableSchemaForClient, DBSchemaTable, MethodKey, TableInfo, FullFilter, DBSchemaColumns, DBSchema, DBTableSchema } from "prostgles-types";
1
+ import { getKeys, RULE_METHODS, AnyObject, get, TableSchemaForClient, DBSchemaTable, MethodKey, TableInfo, FullFilter } from "prostgles-types";
2
2
  import { ClientInfo } from "./AuthHandler";
3
3
  import { CommonTableRules, Filter, isPlainObject, LocalParams, PRGLIOSocket, TableHandler, ViewHandler } from "./DboBuilder";
4
4
  import { Prostgles, DBHandlerServer, DB, TABLE_METHODS } from "./Prostgles";
5
5
  import type { DBOFullyTyped, PublishFullyTyped } from "./DBSchemaBuilder";
6
6
  export type Method = (...args: any) => ( any | Promise<any> );
7
- export type PublishMethods<S extends DBSchema | undefined = undefined> = (params: PublishParams<S>) => { [key:string]: Method } | Promise<{ [key:string]: Method }>;
7
+ export type PublishMethods<S = void> = (params: PublishParams<S>) => { [key:string]: Method } | Promise<{ [key:string]: Method }>;
8
8
 
9
9
  export type Awaitable<T> = T | Promise<T>;
10
10
 
@@ -129,12 +129,13 @@ export type UpdateRequestData<R extends AnyObject = AnyObject> = UpdateRequestDa
129
129
  export type ValidateRow<R extends AnyObject = AnyObject> = (row: R) => R | Promise<R>;
130
130
  export type ValidateUpdateRow<R extends AnyObject = AnyObject> = (args: { update: Partial<R>, filter: FullFilter<R> }) => R | Promise<R>;
131
131
 
132
- export type SelectRule<S extends DBTableSchema | undefined = undefined> = {
132
+
133
+ export type SelectRule<Cols extends AnyObject = AnyObject> = {
133
134
 
134
135
  /**
135
136
  * Fields allowed to be selected. Tip: Use false to exclude field
136
137
  */
137
- fields: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
138
+ fields: FieldFilter<Cols>;
138
139
 
139
140
  /**
140
141
  * The maximum number of rows a user can get in a select query. null by default. Unless a null or higher limit is specified 100 rows will be returned by the default
@@ -144,12 +145,12 @@ export type SelectRule<S extends DBTableSchema | undefined = undefined> = {
144
145
  /**
145
146
  * Filter added to every query (e.g. user_id) to restrict access
146
147
  */
147
- forcedFilter?: FullFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
148
+ forcedFilter?: FullFilter<Cols>;
148
149
 
149
150
  /**
150
151
  * Fields user can filter by
151
152
  * */
152
- filterFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
153
+ filterFields?: FieldFilter<Cols>;
153
154
 
154
155
  /**
155
156
  * Validation logic to check/update data for each request
@@ -157,39 +158,39 @@ export type SelectRule<S extends DBTableSchema | undefined = undefined> = {
157
158
  validate?(args: SelectRequestData): SelectRequestData | Promise<SelectRequestData>;
158
159
 
159
160
  }
160
- export type InsertRule<S extends DBTableSchema | undefined = undefined> = {
161
+ export type InsertRule<Cols extends AnyObject = AnyObject> = {
161
162
 
162
163
  /**
163
164
  * Fields allowed to be inserted. Tip: Use false to exclude field
164
165
  */
165
- fields: SelectRule<S>["fields"]
166
+ fields: SelectRule<Cols>["fields"]
166
167
 
167
168
  /**
168
169
  * Data to include/overwrite on each insert
169
170
  */
170
- forcedData?: Partial<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
171
+ forcedData?: Partial<Cols>;
171
172
 
172
173
  /**
173
174
  * Fields user can view after inserting
174
175
  */
175
- returningFields?: SelectRule<S>["fields"]
176
+ returningFields?: SelectRule<Cols>["fields"]
176
177
 
177
178
  /**
178
179
  * Validation logic to check/update data for each request. Happens before publish rule checks (for fields, forcedData/forcedFilter)
179
180
  */
180
- preValidate?: ValidateRow<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
181
+ preValidate?: ValidateRow<Cols>;
181
182
 
182
183
  /**
183
184
  * Validation logic to check/update data for each request. Happens after publish rule checks (for fields, forcedData/forcedFilter)
184
185
  */
185
- validate?: InsertRule<S>["preValidate"]
186
+ validate?: InsertRule<Cols>["preValidate"]
186
187
  }
187
- export type UpdateRule<S extends DBTableSchema | undefined = undefined> = {
188
+ export type UpdateRule<Cols extends AnyObject = AnyObject> = {
188
189
 
189
190
  /**
190
191
  * Fields allowed to be updated. Tip: Use false/0 to exclude field
191
192
  */
192
- fields: SelectRule<S>["fields"]
193
+ fields: SelectRule<Cols>["fields"]
193
194
 
194
195
  /**
195
196
  * Row level FGAC
@@ -199,71 +200,71 @@ export type UpdateRule<S extends DBTableSchema | undefined = undefined> = {
199
200
  * Specify in decreasing order of specificity otherwise a more general filter will match first
200
201
  */
201
202
  dynamicFields?: {
202
- filter: SelectRule<S>["forcedFilter"]
203
- fields: SelectRule<S>["fields"]
203
+ filter: SelectRule<Cols>["forcedFilter"]
204
+ fields: SelectRule<Cols>["fields"]
204
205
  }[];
205
206
 
206
207
  /**
207
208
  * Filter added to every query (e.g. user_id) to restrict access
208
209
  * This filter cannot be updated
209
210
  */
210
- forcedFilter?: SelectRule<S>["forcedFilter"]
211
+ forcedFilter?: SelectRule<Cols>["forcedFilter"]
211
212
 
212
213
  /**
213
214
  * Data to include/overwrite on each updatDBe
214
215
  */
215
- forcedData?: InsertRule<S>["forcedData"]
216
+ forcedData?: InsertRule<Cols>["forcedData"]
216
217
 
217
218
  /**
218
219
  * Fields user can use to find the updates
219
220
  */
220
- filterFields?: SelectRule<S>["fields"]
221
+ filterFields?: SelectRule<Cols>["fields"]
221
222
 
222
223
  /**
223
224
  * Fields user can view after updating
224
225
  */
225
- returningFields?: SelectRule<S>["fields"]
226
+ returningFields?: SelectRule<Cols>["fields"]
226
227
 
227
228
  /**
228
229
  * Validation logic to check/update data for each request
229
230
  */
230
- validate?: ValidateUpdateRow<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
231
+ validate?: ValidateUpdateRow<Cols>;
231
232
 
232
233
  };
233
234
 
234
- export type DeleteRule<S extends DBTableSchema | undefined = undefined> = {
235
+ export type DeleteRule<Cols extends AnyObject = AnyObject> = {
235
236
 
236
237
  /**
237
238
  * Filter added to every query (e.g. user_id) to restrict access
238
239
  */
239
- forcedFilter?: FullFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
240
+ forcedFilter?: SelectRule<Cols>["forcedFilter"]
240
241
 
241
242
  /**
242
243
  * Fields user can filter by
243
244
  */
244
- filterFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
245
+ filterFields: FieldFilter<Cols>;
245
246
 
246
247
  /**
247
248
  * Fields user can view after deleting
248
249
  */
249
- returningFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
250
+ returningFields?: SelectRule<Cols>["filterFields"]
250
251
 
251
252
  /**
252
253
  * Validation logic to check/update data for each request
253
254
  */
254
- validate?(...args: any[]): UpdateRequestData<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
255
+ validate?(...args: any[]): Awaitable<void>;// UpdateRequestData<Cols>;
255
256
  }
256
- export type SyncRule<S extends DBTableSchema | undefined = undefined> = {
257
+ export type SyncRule<Cols extends AnyObject = AnyObject> = {
257
258
 
258
259
  /**
259
260
  * Primary keys used in updating data
260
261
  */
261
- id_fields: S extends DBTableSchema? (keyof S["dataTypes"])[] : string[];
262
+ id_fields: (keyof Cols)[];
262
263
 
263
264
  /**
264
265
  * Numerical incrementing fieldname (last updated timestamp) used to sync items
265
266
  */
266
- synced_field: S extends DBTableSchema? (keyof S["dataTypes"]) : string;
267
+ synced_field: keyof Cols;
267
268
 
268
269
  /**
269
270
  * EXPERIMENTAL. Disabled by default. If true then server will attempt to delete any records missing from client.
@@ -284,25 +285,25 @@ export type SubscribeRule = {
284
285
  throttle?: number;
285
286
  }
286
287
 
287
- export type ViewRule<S extends DBTableSchema | undefined = undefined> = CommonTableRules & {
288
+ export type ViewRule<S = AnyObject> = CommonTableRules & {
288
289
  /**
289
290
  * What can be read from the table
290
291
  */
291
292
  select?: SelectRule<S>;
292
293
  };
293
- export type TableRule<S extends DBTableSchema | undefined = undefined> = ViewRule<S> & {
294
+ export type TableRule<S = AnyObject> = ViewRule<S> & {
294
295
  insert?: InsertRule<S>;
295
296
  update?: UpdateRule<S>;
296
297
  delete?: DeleteRule<S>;
297
298
  sync?: SyncRule<S>;
298
299
  subscribe?: SubscribeRule;
299
300
  };
300
- export type PublishViewRule<S extends DBTableSchema | undefined = undefined> = {
301
+ export type PublishViewRule<S extends AnyObject = AnyObject> = {
301
302
  select?: SelectRule<S> | PublishAllOrNothing
302
303
  getColumns?: PublishAllOrNothing;
303
304
  getInfo?: PublishAllOrNothing;
304
305
  };
305
- export type PublishTableRule<S extends DBTableSchema | undefined = undefined> = PublishViewRule<S> & {
306
+ export type PublishTableRule<S extends AnyObject = AnyObject> = PublishViewRule<S> & {
306
307
  insert?: InsertRule<S> | PublishAllOrNothing
307
308
  update?: UpdateRule<S> | PublishAllOrNothing
308
309
  delete?: DeleteRule<S> | PublishAllOrNothing
@@ -327,7 +328,7 @@ export type ParsedPublishTable = {
327
328
  // export type Publish = {
328
329
  // tablesOrViews: {[key:string]: TableRule | ViewRule | "*" }
329
330
  // }
330
- export type PublishParams<S extends DBSchema | undefined = undefined> = {
331
+ export type PublishParams<S = void> = {
331
332
  sid?: string;
332
333
  dbo: DBOFullyTyped<S>;
333
334
  db?: DB;
@@ -336,14 +337,14 @@ export type PublishParams<S extends DBSchema | undefined = undefined> = {
336
337
  }
337
338
  export type RequestParams = { dbo?: DBHandlerServer, socket?: any };
338
339
  export type PublishAllOrNothing = true | "*" | false | null;
339
- export type PublishObject<Schema extends DBSchema | undefined = undefined> = {
340
- [table_name: string]: (PublishTableRule | PublishViewRule | PublishAllOrNothing )
340
+ type PublishObject = {
341
+ [table_name: string]: (PublishTableRule | PublishViewRule | PublishAllOrNothing )
341
342
  };
342
343
  export type ParsedPublishTables = {
343
344
  [table_name: string]: ParsedPublishTable
344
345
  };
345
- export type PublishedResult<Schema extends DBSchema | undefined = undefined> = PublishAllOrNothing | PublishFullyTyped<Schema> ;
346
- export type Publish<Schema extends DBSchema | undefined = undefined> = PublishedResult<Schema> | ((params: PublishParams<Schema>) => Awaitable<PublishedResult<Schema>>);
346
+ export type PublishedResult<Schema = void> = PublishAllOrNothing | PublishFullyTyped<Schema> ;
347
+ export type Publish<Schema = void> = PublishedResult<Schema> | ((params: PublishParams<Schema>) => Awaitable<PublishedResult<Schema>>);
347
348
 
348
349
  export class PublishParser {
349
350
  publish: any;
@@ -0,0 +1,124 @@
1
+ import { Filter, LocalParams, TableHandler } from "./DboBuilder";
2
+ import { TableRule } from "./PublishParser";
3
+ import { SelectParams, ColumnInfo, PG_COLUMN_UDT_DATA_TYPE, Select } from "prostgles-types";
4
+ export declare type SelectItem = {
5
+ type: "column" | "function" | "aggregation" | "joinedColumn" | "computed";
6
+ getFields: (args?: any[]) => string[] | "*";
7
+ getQuery: (tableAlias?: string) => string;
8
+ columnPGDataType?: string;
9
+ column_udt_type?: PG_COLUMN_UDT_DATA_TYPE;
10
+ alias: string;
11
+ selected: boolean;
12
+ };
13
+ export declare type NewQuery = {
14
+ allFields: string[];
15
+ /**
16
+ * Contains user selection and all the allowed columns. Allowed columns not selected are marked with selected: false
17
+ */
18
+ select: SelectItem[];
19
+ table: string;
20
+ where: string;
21
+ orderBy: string[];
22
+ having: string;
23
+ limit: number;
24
+ offset: number;
25
+ isLeftJoin: boolean;
26
+ joins?: NewQuery[];
27
+ tableAlias?: string;
28
+ $path?: string[];
29
+ };
30
+ export declare const asNameAlias: (field: string, tableAlias?: string) => string;
31
+ export declare const parseFunctionObject: (funcData: any) => {
32
+ funcName: string;
33
+ args: any[];
34
+ };
35
+ export declare const parseFunction: (funcData: {
36
+ func: string | FunctionSpec;
37
+ args: any[];
38
+ functions: FunctionSpec[];
39
+ allowedFields: string[];
40
+ }) => FunctionSpec;
41
+ declare type GetQueryArgs = {
42
+ allColumns: ColumnInfo[];
43
+ allowedFields: string[];
44
+ args: any[];
45
+ tableAlias?: string;
46
+ ctidField?: string;
47
+ };
48
+ export declare type FieldSpec = {
49
+ name: string;
50
+ type: "column" | "computed";
51
+ /**
52
+ * allowedFields passed for multicol functions (e.g.: $rowhash)
53
+ */
54
+ getQuery: (params: Omit<GetQueryArgs, "args">) => string;
55
+ };
56
+ export declare type FunctionSpec = {
57
+ name: string;
58
+ description?: string;
59
+ /**
60
+ * If true then it can be used in filters and is expected to return boolean
61
+ */
62
+ canBeUsedForFilter?: boolean;
63
+ /**
64
+ * If true then the first argument is expected to be a column name
65
+ */
66
+ singleColArg: boolean;
67
+ /**
68
+ * If true then this func can be used within where clause
69
+ */
70
+ /**
71
+ * Number of arguments expected
72
+ */
73
+ numArgs: number;
74
+ /**
75
+ * If provided then the number of column names provided to the function (from getFields()) must not be less than this
76
+ * By default every function is checked against numArgs
77
+ */
78
+ minCols?: number;
79
+ type: "function" | "aggregation" | "computed";
80
+ /**
81
+ * getFields: string[] -> used to validate user supplied field names. It will be fired before querying to validate against allowed columns
82
+ * if not field names are used from arguments then return an empty array
83
+ */
84
+ getFields: (args: any[]) => "*" | string[];
85
+ /**
86
+ * allowedFields passed for multicol functions (e.g.: $rowhash)
87
+ */
88
+ getQuery: (params: GetQueryArgs) => string;
89
+ returnType?: PG_COLUMN_UDT_DATA_TYPE;
90
+ };
91
+ /**
92
+ * Each function expects a column at the very least
93
+ */
94
+ export declare const FUNCTIONS: FunctionSpec[];
95
+ export declare const COMPUTED_FIELDS: FieldSpec[];
96
+ export declare class SelectItemBuilder {
97
+ select: SelectItem[];
98
+ private allFields;
99
+ private allowedFields;
100
+ private computedFields;
101
+ private functions;
102
+ private allowedFieldsIncludingComputed;
103
+ private isView;
104
+ private columns;
105
+ constructor(params: {
106
+ allowedFields: string[];
107
+ computedFields: FieldSpec[];
108
+ functions: FunctionSpec[];
109
+ allFields: string[];
110
+ isView: boolean;
111
+ columns: ColumnInfo[];
112
+ });
113
+ private checkField;
114
+ private addItem;
115
+ private addFunction;
116
+ addColumn: (fieldName: string, selected: boolean) => void;
117
+ parseUserSelect: (userSelect: Select, joinParse?: (key: string, val: any, throwErr: (msg: string) => any) => any) => Promise<any[]>;
118
+ }
119
+ export declare function getNewQuery(_this: TableHandler, filter: Filter, selectParams: (SelectParams & {
120
+ alias?: string;
121
+ }), param3_unused: any, tableRules: TableRule | undefined, localParams: LocalParams | undefined, columns: ColumnInfo[]): Promise<NewQuery>;
122
+ export declare function makeQuery(_this: TableHandler, q: NewQuery, depth?: number, joinFields?: string[], selectParams?: SelectParams): string;
123
+ export {};
124
+ //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["QueryBuilder.ts"],"names":[],"mappings":"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"}