prostgles-server 2.0.175 → 2.0.178

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.
@@ -4,7 +4,7 @@ import { CommonTableRules, Filter, isPlainObject, LocalParams, PRGLIOSocket, Tab
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> = (params: PublishParams<S>) => { [key:string]: Method } | Promise<{ [key:string]: Method }>;
7
+ export type PublishMethods<S extends DBSchema | undefined = undefined> = (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,12 @@ 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 = any> = {
132
+ export type SelectRule<S extends DBTableSchema | undefined = undefined> = {
133
133
 
134
134
  /**
135
135
  * Fields allowed to be selected. Tip: Use false to exclude field
136
136
  */
137
- fields: FieldFilter<DBSchemaColumns<S["columns"]>>;
137
+ fields: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
138
138
 
139
139
  /**
140
140
  * 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 +144,12 @@ export type SelectRule<S extends DBTableSchema = any> = {
144
144
  /**
145
145
  * Filter added to every query (e.g. user_id) to restrict access
146
146
  */
147
- forcedFilter?: FullFilter<DBSchemaColumns<S["columns"]>>;
147
+ forcedFilter?: FullFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
148
148
 
149
149
  /**
150
150
  * Fields user can filter by
151
151
  * */
152
- filterFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
152
+ filterFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
153
153
 
154
154
  /**
155
155
  * Validation logic to check/update data for each request
@@ -157,39 +157,39 @@ export type SelectRule<S extends DBTableSchema = any> = {
157
157
  validate?(args: SelectRequestData): SelectRequestData | Promise<SelectRequestData>;
158
158
 
159
159
  }
160
- export type InsertRule<S extends DBTableSchema = any> = {
160
+ export type InsertRule<S extends DBTableSchema | undefined = undefined> = {
161
161
 
162
162
  /**
163
163
  * Fields allowed to be inserted. Tip: Use false to exclude field
164
164
  */
165
- fields: FieldFilter<DBSchemaColumns<S["columns"]>>;
165
+ fields: SelectRule<S>["fields"]
166
166
 
167
167
  /**
168
168
  * Data to include/overwrite on each insert
169
169
  */
170
- forcedData?: Partial<DBSchemaColumns<S["columns"]>>;
170
+ forcedData?: Partial<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
171
171
 
172
172
  /**
173
173
  * Fields user can view after inserting
174
174
  */
175
- returningFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
175
+ returningFields?: SelectRule<S>["fields"]
176
176
 
177
177
  /**
178
178
  * Validation logic to check/update data for each request. Happens before publish rule checks (for fields, forcedData/forcedFilter)
179
179
  */
180
- preValidate?: ValidateRow<DBSchemaColumns<S["columns"]>>;
180
+ preValidate?: ValidateRow<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
181
181
 
182
182
  /**
183
183
  * Validation logic to check/update data for each request. Happens after publish rule checks (for fields, forcedData/forcedFilter)
184
184
  */
185
- validate?: ValidateRow<DBSchemaColumns<S["columns"]>>;
185
+ validate?: InsertRule<S>["preValidate"]
186
186
  }
187
- export type UpdateRule<S extends DBTableSchema = any> = {
187
+ export type UpdateRule<S extends DBTableSchema | undefined = undefined> = {
188
188
 
189
189
  /**
190
190
  * Fields allowed to be updated. Tip: Use false/0 to exclude field
191
191
  */
192
- fields: FieldFilter<DBSchemaColumns<S["columns"]>>;
192
+ fields: SelectRule<S>["fields"]
193
193
 
194
194
  /**
195
195
  * Row level FGAC
@@ -199,71 +199,71 @@ export type UpdateRule<S extends DBTableSchema = any> = {
199
199
  * Specify in decreasing order of specificity otherwise a more general filter will match first
200
200
  */
201
201
  dynamicFields?: {
202
- filter: FullFilter<DBSchemaColumns<S["columns"]>>;
203
- fields: FieldFilter<DBSchemaColumns<S["columns"]>>;
202
+ filter: SelectRule<S>["forcedFilter"]
203
+ fields: SelectRule<S>["fields"]
204
204
  }[];
205
205
 
206
206
  /**
207
207
  * Filter added to every query (e.g. user_id) to restrict access
208
208
  * This filter cannot be updated
209
209
  */
210
- forcedFilter?: FullFilter<DBSchemaColumns<S["columns"]>>;
210
+ forcedFilter?: SelectRule<S>["forcedFilter"]
211
211
 
212
212
  /**
213
213
  * Data to include/overwrite on each updatDBe
214
214
  */
215
- forcedData?: Partial<DBSchemaColumns<S["columns"]>>
215
+ forcedData?: InsertRule<S>["forcedData"]
216
216
 
217
217
  /**
218
218
  * Fields user can use to find the updates
219
219
  */
220
- filterFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
220
+ filterFields?: SelectRule<S>["fields"]
221
221
 
222
222
  /**
223
223
  * Fields user can view after updating
224
224
  */
225
- returningFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
225
+ returningFields?: SelectRule<S>["fields"]
226
226
 
227
227
  /**
228
228
  * Validation logic to check/update data for each request
229
229
  */
230
- validate?: ValidateUpdateRow<DBSchemaColumns<S["columns"]>>;
230
+ validate?: ValidateUpdateRow<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
231
231
 
232
232
  };
233
233
 
234
- export type DeleteRule<S extends DBTableSchema = any> = {
234
+ export type DeleteRule<S extends DBTableSchema | undefined = undefined> = {
235
235
 
236
236
  /**
237
237
  * Filter added to every query (e.g. user_id) to restrict access
238
238
  */
239
- forcedFilter?: FullFilter<DBSchemaColumns<S["columns"]>>;
239
+ forcedFilter?: FullFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
240
240
 
241
241
  /**
242
242
  * Fields user can filter by
243
243
  */
244
- filterFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
244
+ filterFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
245
245
 
246
246
  /**
247
247
  * Fields user can view after deleting
248
248
  */
249
- returningFields?: FieldFilter<DBSchemaColumns<S["columns"]>>;
249
+ returningFields?: FieldFilter<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
250
250
 
251
251
  /**
252
252
  * Validation logic to check/update data for each request
253
253
  */
254
- validate?(...args: any[]): UpdateRequestData<DBSchemaColumns<S["columns"]>>;
254
+ validate?(...args: any[]): UpdateRequestData<S extends DBTableSchema? DBSchemaColumns<S["columns"]> : AnyObject>;
255
255
  }
256
- export type SyncRule<S extends DBTableSchema = any> = {
256
+ export type SyncRule<S extends DBTableSchema | undefined = undefined> = {
257
257
 
258
258
  /**
259
259
  * Primary keys used in updating data
260
260
  */
261
- id_fields: string[];
261
+ id_fields: S extends DBTableSchema? (keyof S["dataTypes"])[] : string[];
262
262
 
263
263
  /**
264
264
  * Numerical incrementing fieldname (last updated timestamp) used to sync items
265
265
  */
266
- synced_field: string;
266
+ synced_field: S extends DBTableSchema? (keyof S["dataTypes"]) : string;
267
267
 
268
268
  /**
269
269
  * EXPERIMENTAL. Disabled by default. If true then server will attempt to delete any records missing from client.
@@ -284,25 +284,25 @@ export type SubscribeRule = {
284
284
  throttle?: number;
285
285
  }
286
286
 
287
- export type ViewRule<S extends DBTableSchema> = CommonTableRules & {
287
+ export type ViewRule<S extends DBTableSchema | undefined = undefined> = CommonTableRules & {
288
288
  /**
289
289
  * What can be read from the table
290
290
  */
291
291
  select?: SelectRule<S>;
292
292
  };
293
- export type TableRule<S extends DBTableSchema = any> = ViewRule<S> & {
293
+ export type TableRule<S extends DBTableSchema | undefined = undefined> = ViewRule<S> & {
294
294
  insert?: InsertRule<S>;
295
295
  update?: UpdateRule<S>;
296
296
  delete?: DeleteRule<S>;
297
297
  sync?: SyncRule<S>;
298
298
  subscribe?: SubscribeRule;
299
299
  };
300
- export type PublishViewRule<S extends DBTableSchema = any> = {
300
+ export type PublishViewRule<S extends DBTableSchema | undefined = undefined> = {
301
301
  select?: SelectRule<S> | PublishAllOrNothing
302
302
  getColumns?: PublishAllOrNothing;
303
303
  getInfo?: PublishAllOrNothing;
304
304
  };
305
- export type PublishTableRule<S extends DBTableSchema = any> = PublishViewRule<S> & {
305
+ export type PublishTableRule<S extends DBTableSchema | undefined = undefined> = PublishViewRule<S> & {
306
306
  insert?: InsertRule<S> | PublishAllOrNothing
307
307
  update?: UpdateRule<S> | PublishAllOrNothing
308
308
  delete?: DeleteRule<S> | PublishAllOrNothing
@@ -327,7 +327,7 @@ export type ParsedPublishTable = {
327
327
  // export type Publish = {
328
328
  // tablesOrViews: {[key:string]: TableRule | ViewRule | "*" }
329
329
  // }
330
- export type PublishParams<S extends DBSchema = any> = {
330
+ export type PublishParams<S extends DBSchema | undefined = undefined> = {
331
331
  sid?: string;
332
332
  dbo: DBOFullyTyped<S>;
333
333
  db?: DB;
@@ -336,14 +336,14 @@ export type PublishParams<S extends DBSchema = any> = {
336
336
  }
337
337
  export type RequestParams = { dbo?: DBHandlerServer, socket?: any };
338
338
  export type PublishAllOrNothing = true | "*" | false | null;
339
- export type PublishObject<Schema extends DBSchema = any> = {
339
+ export type PublishObject<Schema extends DBSchema | undefined = undefined> = {
340
340
  [table_name: string]: (PublishTableRule | PublishViewRule | PublishAllOrNothing )
341
341
  };
342
342
  export type ParsedPublishTables = {
343
343
  [table_name: string]: ParsedPublishTable
344
344
  };
345
- export type PublishedResult<Schema extends DBSchema = any> = PublishAllOrNothing | PublishFullyTyped<Schema> ;
346
- export type Publish<Schema extends DBSchema = any> = PublishedResult<Schema> | ((params: PublishParams<Schema>) => Awaitable<PublishedResult<Schema>>);
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>>);
347
347
 
348
348
  export class PublishParser {
349
349
  publish: any;
package/lib/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Prostgles, ProstglesInitOptions } from "./Prostgles";
2
2
  import { DBSchema } from "prostgles-types";
3
3
 
4
- function prostgles<S extends DBSchema = any>(params: ProstglesInitOptions<S>){
4
+ function prostgles<S extends DBSchema | undefined = undefined>(params: ProstglesInitOptions<S>){
5
5
 
6
6
  let prgl = new Prostgles<S>(params as any);
7
7
  return prgl.init(params.onReady);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "2.0.175",
3
+ "version": "2.0.178",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +1 @@
1
- 77066
1
+ 85322
@@ -10,6 +10,7 @@
10
10
  // "rootDir": ".",
11
11
  // "declaration": true,
12
12
  // "declarationMap": true,
13
+ "keyofStringsOnly": true
13
14
  },
14
15
  "exclude": [
15
16
  "dist"
@@ -457,7 +457,7 @@ export default async function isomorphic(db: Partial<DBHandlerServer> | Partial<
457
457
  assert.deepStrictEqual(MonAgg, [{ added: "Dec", public: '2' }]);
458
458
 
459
459
  // Returning
460
- const returningParam = { returning: { id: 1, name: 1, public: 1 , $rowhash: 1, added_day: { "$day": ["added"] } }} ; // ctid: 1,
460
+ const returningParam: Parameters<typeof db.items4_pub.insert>[1] = { returning: { id: 1, name: 1, public: 1 , $rowhash: 1, added_day: { "$day": ["added"] } }} ; // ctid: 1,
461
461
  let i = await db.items4_pub.insert( { name: "abc123", public: "public data", added: new Date('04 Dec 1995 00:12:00 GMT') }, returningParam);
462
462
  assert.deepStrictEqual(i, { id: 1, name: 'abc123', public: 'public data', $rowhash: '347c26babad535aa697a794af89195fe', added_day: 'monday' }); // , ctid: '(0,1)'
463
463
 
@@ -3,9 +3,6 @@
3
3
 
4
4
  /* SCHEMA DEFINITON. Table names have been altered to work with Typescript */
5
5
  /* DBO Definition. Isomorphic */
6
- undefined tx: (t: TxCB) => Promise<any | void> ;
7
- };
8
-
9
6
 
10
7
  type DBSchema = {
11
8
  "\"*\"": {
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "2.0.174",
24
+ "version": "2.0.177",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@aws-sdk/client-s3": "^3.95.0",
@@ -12,6 +12,7 @@
12
12
  // "rootDir": ".",
13
13
  // "declaration": true,
14
14
  // "declarationMap": true,
15
+ "keyofStringsOnly": true
15
16
  },
16
17
  "exclude": [
17
18
  "dist",