prostgles-server 2.0.201 → 2.0.202

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 (58) hide show
  1. package/dist/DboBuilder/delete.d.ts +5 -0
  2. package/dist/DboBuilder/delete.d.ts.map +1 -0
  3. package/dist/DboBuilder/delete.js +121 -0
  4. package/dist/DboBuilder/delete.js.map +1 -0
  5. package/dist/DboBuilder/insert.d.ts.map +1 -1
  6. package/dist/DboBuilder/insert.js +0 -4
  7. package/dist/DboBuilder/insert.js.map +1 -1
  8. package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
  9. package/dist/DboBuilder/insertDataParse.js +2 -43
  10. package/dist/DboBuilder/insertDataParse.js.map +1 -1
  11. package/dist/DboBuilder/update.d.ts +5 -0
  12. package/dist/DboBuilder/update.d.ts.map +1 -0
  13. package/dist/DboBuilder/update.js +111 -0
  14. package/dist/DboBuilder/update.js.map +1 -0
  15. package/dist/DboBuilder/uploadFile.d.ts +6 -0
  16. package/dist/DboBuilder/uploadFile.d.ts.map +1 -0
  17. package/dist/DboBuilder/uploadFile.js +48 -0
  18. package/dist/DboBuilder/uploadFile.js.map +1 -0
  19. package/dist/DboBuilder.d.ts +4 -2
  20. package/dist/DboBuilder.d.ts.map +1 -1
  21. package/dist/DboBuilder.js +12 -172
  22. package/dist/DboBuilder.js.map +1 -1
  23. package/dist/FileManager.d.ts.map +1 -1
  24. package/dist/FileManager.js +2 -0
  25. package/dist/FileManager.js.map +1 -1
  26. package/dist/QueryBuilder.d.ts +5 -1
  27. package/dist/QueryBuilder.d.ts.map +1 -1
  28. package/lib/DboBuilder/delete.d.ts +5 -0
  29. package/lib/DboBuilder/delete.d.ts.map +1 -0
  30. package/lib/DboBuilder/delete.js +120 -0
  31. package/lib/DboBuilder/delete.ts +127 -0
  32. package/lib/DboBuilder/insert.d.ts.map +1 -1
  33. package/lib/DboBuilder/insert.js +0 -4
  34. package/lib/DboBuilder/insert.ts +0 -4
  35. package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
  36. package/lib/DboBuilder/insertDataParse.js +2 -43
  37. package/lib/DboBuilder/insertDataParse.ts +2 -46
  38. package/lib/DboBuilder/update.d.ts +5 -0
  39. package/lib/DboBuilder/update.d.ts.map +1 -0
  40. package/lib/DboBuilder/update.js +110 -0
  41. package/lib/DboBuilder/update.ts +127 -0
  42. package/lib/DboBuilder/uploadFile.d.ts +6 -0
  43. package/lib/DboBuilder/uploadFile.d.ts.map +1 -0
  44. package/lib/DboBuilder/uploadFile.js +47 -0
  45. package/lib/DboBuilder/uploadFile.ts +50 -0
  46. package/lib/DboBuilder.d.ts +4 -2
  47. package/lib/DboBuilder.d.ts.map +1 -1
  48. package/lib/DboBuilder.js +12 -172
  49. package/lib/DboBuilder.ts +15 -198
  50. package/lib/FileManager.d.ts.map +1 -1
  51. package/lib/FileManager.js +2 -0
  52. package/lib/FileManager.ts +1 -0
  53. package/package.json +2 -2
  54. package/tests/client/PID.txt +1 -1
  55. package/tests/isomorphic_queries.d.ts.map +1 -1
  56. package/tests/isomorphic_queries.js +33 -1
  57. package/tests/isomorphic_queries.ts +39 -2
  58. package/tests/server/package-lock.json +3 -3
package/lib/DboBuilder.ts CHANGED
@@ -40,6 +40,8 @@ export type Media = {
40
40
  "name"?: string;
41
41
  "original_name"?: string;
42
42
  "etag"?: string;
43
+ deleted?: string | null;
44
+ deleted_from_storage?: string | null;
43
45
  }
44
46
 
45
47
  export type TxCB = {
@@ -88,6 +90,8 @@ import {
88
90
  import { PubSubManager, asValue, BasicCallback, pickKeys, omitKeys } from "./PubSubManager";
89
91
  import { insertDataParse } from "./DboBuilder/insertDataParse";
90
92
  import { insert } from "./DboBuilder/insert";
93
+ import { update } from "./DboBuilder/update";
94
+ import { _delete } from "./DboBuilder/delete";
91
95
 
92
96
  import { parseFilterItem } from "./Filtering";
93
97
 
@@ -215,7 +219,7 @@ export type Aggregation = {
215
219
  getQuery: (alias: string) => string;
216
220
  };
217
221
 
218
- export type Filter = object | { $and: Filter[] } | { $or: Filter[] } | {};
222
+ export type Filter = AnyObject | { $and: Filter[] } | { $or: Filter[] };
219
223
 
220
224
  type SelectFunc = {
221
225
  alias: string;
@@ -378,9 +382,14 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
378
382
 
379
383
  export function parseError(e: any){
380
384
 
381
- // console.trace("INTERNAL ERROR: ", e);
382
385
  let res = e instanceof Error? e.message : (!Object.keys(e || {}).length? e : (e && e.toString)? e.toString() : e);
383
- if(isPlainObject(e)) res = JSON.stringify(e, null, 2)
386
+ if(isPlainObject(e)) {
387
+ if(typeof e.err === "string"){
388
+ res = e.err;
389
+ } else {
390
+ res = JSON.stringify(e, null, 2)
391
+ }
392
+ }
384
393
  return res;
385
394
  }
386
395
 
@@ -2223,92 +2232,7 @@ export class TableHandler extends ViewHandler {
2223
2232
  }
2224
2233
 
2225
2234
  async update(filter: Filter, newData: AnyObject, params?: UpdateParams, tableRules?: TableRule, localParams?: LocalParams): Promise<AnyObject | void>{
2226
- try {
2227
-
2228
- const parsedRules = await this.parseUpdateRules(filter, newData, params, tableRules, localParams)
2229
- if(localParams?.testRule){
2230
- return parsedRules;
2231
- }
2232
-
2233
- const { fields, validateRow, forcedData, finalUpdateFilter, returningFields, forcedFilter, filterFields } = parsedRules;
2234
-
2235
-
2236
- let { returning, multi = true, onConflictDoNothing = false, fixIssues = false } = params || {};
2237
- const { returnQuery = false } = localParams ?? {};
2238
-
2239
-
2240
- if(params){
2241
- const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
2242
- const bad_params = Object.keys(params).filter(k => !good_params.includes(k));
2243
- if(bad_params && bad_params.length) throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
2244
- }
2245
-
2246
-
2247
- const { data, allowedCols } = this.validateNewData({ row: newData, forcedData, allowedFields: fields, tableRules, fixIssues });
2248
-
2249
- /* Patch data */
2250
- let patchedTextData: {
2251
- fieldName: string;
2252
- from: number;
2253
- to: number;
2254
- text: string;
2255
- md5: string
2256
- }[] = [];
2257
- this.columns.map(c => {
2258
- const d = data[c.name];
2259
- if(c.data_type === "text" && d && isPlainObject(d) && !["from", "to"].find(key => typeof d[key] !== "number")){
2260
- const unrecProps = Object.keys(d).filter(k => !["from", "to", "text", "md5"].includes(k));
2261
- if(unrecProps.length) throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
2262
- patchedTextData.push({ ...d, fieldName: c.name } as (typeof patchedTextData)[number]);
2263
- }
2264
- });
2265
-
2266
- if(patchedTextData && patchedTextData.length){
2267
- if(tableRules && !tableRules.select) throw "Select needs to be permitted to patch data";
2268
- const rows = await this.find(filter, { select: patchedTextData.reduce((a, v) => ({ ...a, [v.fieldName]: 1 }), {}) }, undefined, tableRules);
2269
-
2270
- if(rows.length !== 1) {
2271
- throw "Cannot patch data within a filter that affects more/less than 1 row";
2272
- }
2273
- patchedTextData.map(p => {
2274
- data[p.fieldName] = unpatchText(rows[0][p.fieldName], p);
2275
- })
2276
-
2277
- // https://w3resource.com/PostgreSQL/overlay-function.p hp
2278
- // overlay(coalesce(status, '') placing 'hom' from 2 for 0)
2279
- }
2280
-
2281
- let nData = { ...data };
2282
- // if(tableRules && tableRules.update && tableRules?.update?.validate){
2283
- // nData = await tableRules.update.validate(nData);
2284
- // }
2285
-
2286
- let query = await this.colSet.getUpdateQuery(nData, allowedCols, validateRow) //pgp.helpers.update(nData, columnSet) + " ";
2287
- query += (await this.prepareWhere({
2288
- filter,
2289
- forcedFilter,
2290
- filterFields,
2291
- localParams,
2292
- tableRule: tableRules
2293
- })).where;
2294
- if(onConflictDoNothing) query += " ON CONFLICT DO NOTHING ";
2295
-
2296
- let qType = "none";
2297
- if(returning){
2298
- qType = multi? "any" : "one";
2299
- query += this.makeReturnQuery(await this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
2300
- }
2301
-
2302
- if(returnQuery) return query as unknown as void;
2303
-
2304
- if(this.t){
2305
- return (this.t as any)[qType](query).catch((err: any) => makeErr(err, localParams, this, fields));
2306
- }
2307
- return this.db.tx(t => (t as any)[qType](query)).catch(err => makeErr(err, localParams, this, fields));
2308
- } catch(e){
2309
- if(localParams && localParams.testRule) throw e;
2310
- throw { err: parseError(e), msg: `Issue with dbo.${this.name}.update(${JSON.stringify(filter || {}, null, 2)}, ${JSON.stringify(newData || {}, null, 2)}, ${JSON.stringify(params || {}, null, 2)})` };
2311
- }
2235
+ return update.bind(this)(filter, newData, params, tableRules, localParams);
2312
2236
  };
2313
2237
 
2314
2238
  validateNewData({ row, forcedData, allowedFields, tableRules, fixIssues = false }: ValidatedParams): { data: any; allowedCols: string[] } {
@@ -2367,115 +2291,8 @@ export class TableHandler extends ViewHandler {
2367
2291
  return "";
2368
2292
  }
2369
2293
 
2370
- async delete(filter?: Filter, params?: DeleteParams, param3_unused?: undefined, table_rules?: TableRule, localParams?: LocalParams): Promise<any> { //{ socket, func, has_rules = false, socketDb } = {}
2371
- try {
2372
- const { returning } = params || {};
2373
- filter = filter || {};
2374
- this.checkFilter(filter);
2375
-
2376
- // table_rules = table_rules || {};
2377
-
2378
- let forcedFilter: AnyObject | undefined = {},
2379
- filterFields: FieldFilter | undefined = "*",
2380
- returningFields: FieldFilter | undefined = "*",
2381
- validate: DeleteRule["validate"];
2382
-
2383
- const { testRule = false, returnQuery = false } = localParams || {};
2384
- if(table_rules){
2385
- if(!table_rules.delete) throw "delete rules missing";
2386
- forcedFilter = table_rules.delete.forcedFilter;
2387
- filterFields = table_rules.delete.filterFields;
2388
- returningFields = table_rules.delete.returningFields;
2389
- validate = table_rules.delete.validate;
2390
-
2391
- if(!returningFields) returningFields = get(table_rules, "select.fields");
2392
- if(!returningFields) returningFields = get(table_rules, "delete.filterFields");
2393
-
2394
- if(!filterFields) throw ` Invalid delete rule for ${this.name}. filterFields missing `;
2395
-
2396
- /* Safely test publish rules */
2397
- if(testRule){
2398
- await this.validateViewRules({ filterFields, returningFields, forcedFilter, rule: "delete" });
2399
- return true;
2400
- }
2401
- }
2402
-
2403
-
2404
- if(params){
2405
- const good_params = ["returning"];
2406
- const bad_params = Object.keys(params).filter(k => !good_params.includes(k));
2407
- if(bad_params && bad_params.length) throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
2408
- }
2409
-
2410
- let queryType: keyof pgPromise.ITask<{}> = 'none';
2411
- let _query = "DELETE FROM " + this.escapedName;
2412
- const filterOpts = (await this.prepareWhere({
2413
- filter,
2414
- forcedFilter,
2415
- filterFields,
2416
- localParams,
2417
- tableRule: table_rules
2418
- }))
2419
- _query += filterOpts.where;
2420
- if(validate){
2421
- const _filter = filterOpts.filter;
2422
- await validate(_filter);
2423
- }
2424
-
2425
- let returningQuery = "";
2426
- if(returning){
2427
- queryType = "any";
2428
- if(!returningFields) {
2429
- throw "Returning dissallowed";
2430
- }
2431
- returningQuery = this.makeReturnQuery(await this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
2432
- _query += returningQuery
2433
- }
2434
-
2435
- if(returnQuery) return _query;
2436
-
2437
- /**
2438
- * Delete file
2439
- */
2440
- const dbHandler = (this.t || this.db)
2441
- if(this.is_media && this.dboBuilder.prostgles.fileManager){
2442
-
2443
- if(this.dboBuilder.prostgles.opts.fileTable?.delayedDelete){
2444
- return dbHandler[queryType](`UPDATE ${asName(this.name)} SET deleted = now() ${filterOpts.where} ${returningQuery};`)
2445
- } else {
2446
-
2447
- const txDelete = async (tbl: TableHandler) => {
2448
- if(!tbl.t) throw new Error("Missing transaction object t");
2449
- const files = await this.find(filterOpts.filter);
2450
- for await(const file of files){
2451
- await tbl.t?.any(`DELETE FROM ${asName(this.name)} WHERE id = ` + "${id}", file);
2452
- await tbl.dboBuilder.prostgles.fileManager?.deleteFile(file.name);
2453
- }
2454
-
2455
- if(returning){
2456
- return files.map(f => pickKeys(f, ["id", "name"]));
2457
- }
2458
- }
2459
-
2460
- if(localParams?.dbTX){
2461
- return txDelete(localParams.dbTX[this.name] as TableHandler)
2462
- } else if(this.t) {
2463
- return txDelete(this)
2464
- } else {
2465
-
2466
- return this.dboBuilder.getTX(tx => {
2467
- return txDelete(tx[this.name] as any)
2468
- })
2469
- }
2470
- }
2471
- }
2472
-
2473
- return dbHandler[queryType](_query).catch((err: any) => makeErr(err, localParams));
2474
- } catch(e){
2475
- // console.trace(e)
2476
- if(localParams && localParams.testRule) throw e;
2477
- throw { err: parseError(e), msg: `Issue with dbo.${this.name}.delete(${JSON.stringify(filter || {}, null, 2)}, ${JSON.stringify(params || {}, null, 2)})` };
2478
- }
2294
+ async delete(filter?: Filter, params?: DeleteParams, param3_unused?: undefined, table_rules?: TableRule, localParams?: LocalParams): Promise<any> {
2295
+ return _delete.bind(this)(filter, params, param3_unused, table_rules, localParams);
2479
2296
  };
2480
2297
 
2481
2298
  remove(filter: Filter, params?: UpdateParams, param3_unused?: undefined, tableRules?: TableRule, localParams?: LocalParams){
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["FileManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["FileManager.ts"],"names":[],"mappings":"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"}
@@ -338,6 +338,8 @@ class FileManager {
338
338
  throw `File ${path} could not be found`;
339
339
  }
340
340
  fs.unlinkSync(path);
341
+ if (fs.existsSync(path))
342
+ throw new Error("Could not delete file");
341
343
  }
342
344
  return true;
343
345
  }
@@ -133,6 +133,7 @@ export default class FileManager {
133
133
  throw `File ${path} could not be found`;
134
134
  }
135
135
  fs.unlinkSync(path);
136
+ if(fs.existsSync(path)) throw new Error("Could not delete file");
136
137
  }
137
138
  return true
138
139
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "2.0.201",
3
+ "version": "2.0.202",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "bluebird": "^3.7.2",
30
30
  "file-type": "^17.1.2",
31
31
  "pg-promise": "^10.11.1",
32
- "prostgles-types": "^1.5.163",
32
+ "prostgles-types": "^1.5.165",
33
33
  "sharp": "^0.30.7"
34
34
  },
35
35
  "devDependencies": {
@@ -1 +1 @@
1
- 15439
1
+ 53371
@@ -1 +1 @@
1
- {"version":3,"file":"isomorphic_queries.d.ts","sourceRoot":"","sources":["isomorphic_queries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,iBAYzE;AACD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,oBAW7F;AAED,wBAA8B,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,iBA2vB/F"}
1
+ {"version":3,"file":"isomorphic_queries.d.ts","sourceRoot":"","sources":["isomorphic_queries.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,iBAYzE;AACD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,EAAE,QAAQ,oBAW7F;AAED,wBAA8B,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,iBAgyB/F"}
@@ -510,7 +510,39 @@ async function isomorphic(db) {
510
510
  // });
511
511
  });
512
512
  await tryRun("Local file delete", async () => {
513
- const file = await db.media.delete({ name: fileName }, { returning: "*" });
513
+ const file = {
514
+ data: Buffer.from("str", "utf-8"),
515
+ name: "will delete.txt"
516
+ };
517
+ await db.media.insert(file);
518
+ const files = await db.media.find({ original_name: file.name });
519
+ assert_1.strict.equal(files.length, 1);
520
+ const exists0 = fs.existsSync(__dirname + "/server/media/" + files[0].name);
521
+ assert_1.strict.equal(exists0, true);
522
+ await db.media.delete({ original_name: file.name }, { returning: "*" });
523
+ const exists = fs.existsSync(__dirname + "/server/media/" + files[0].name);
524
+ assert_1.strict.equal(exists, false);
525
+ });
526
+ await tryRun("Local file update", async () => {
527
+ const initialStr = "str";
528
+ const newStr = "str new";
529
+ const file = {
530
+ data: Buffer.from(initialStr, "utf-8"),
531
+ name: "will update.txt"
532
+ };
533
+ const newFile = {
534
+ data: Buffer.from(newStr, "utf-8"),
535
+ name: "will update new.txt"
536
+ };
537
+ await db.media.insert(file);
538
+ const original = await db.media.findOne({ original_name: file.name });
539
+ const initialFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
540
+ assert_1.strict.equal(initialStr, initialFileStr);
541
+ await db.media.update({ id: original.id }, newFile);
542
+ const newFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
543
+ assert_1.strict.equal(newStr, newFileStr);
544
+ const newF = await db.media.findOne({ id: original.id });
545
+ assert_1.strict.equal(newF.original_name, newFile.name);
514
546
  });
515
547
  await tryRun("Exists filter example", async () => {
516
548
  const fo = await db.items.findOne(), f = await db.items.find();
@@ -581,12 +581,49 @@ export default async function isomorphic(db: Partial<DBHandlerServer> | Partial<
581
581
  // });
582
582
  });
583
583
 
584
- await tryRun("Local file delete", async () => {
585
584
 
586
- const file = await db.media.delete({ name: fileName }, { returning: "*" });
585
+ await tryRun("Local file delete", async () => {
586
+ const file = {
587
+ data: Buffer.from("str", "utf-8"),
588
+ name: "will delete.txt"
589
+ }
590
+ await db.media.insert(file);
587
591
 
592
+ const files = await db.media.find({ original_name: file.name });
593
+ assert.equal(files.length, 1);
594
+ const exists0 = fs.existsSync(__dirname + "/server/media/"+files[0].name);
595
+ assert.equal(exists0, true);
596
+ await db.media.delete({ original_name: file.name }, { returning: "*" });
597
+ const exists = fs.existsSync(__dirname + "/server/media/"+files[0].name);
598
+ assert.equal(exists, false);
588
599
  })
589
600
 
601
+ await tryRun("Local file update", async () => {
602
+ const initialStr = "str";
603
+ const newStr = "str new";
604
+ const file = {
605
+ data: Buffer.from(initialStr, "utf-8"),
606
+ name: "will update.txt"
607
+ }
608
+ const newFile = {
609
+ data: Buffer.from(newStr, "utf-8"),
610
+ name: "will update new.txt"
611
+ }
612
+ await db.media.insert(file);
613
+ const original = await db.media.findOne({ original_name: file.name });
614
+
615
+ const initialFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
616
+ assert.equal(initialStr, initialFileStr);
617
+
618
+ await db.media.update({ id: original.id }, newFile);
619
+
620
+ const newFileStr = fs.readFileSync(__dirname + "/server/media/" + original.name).toString('utf8');
621
+ assert.equal(newStr, newFileStr);
622
+
623
+ const newF = await db.media.findOne({ id: original.id });
624
+
625
+ assert.equal(newF.original_name, newFile.name)
626
+ })
590
627
 
591
628
  await tryRun("Exists filter example", async () => {
592
629
 
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "2.0.200",
24
+ "version": "2.0.201",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@aws-sdk/client-s3": "^3.121.0",
@@ -29,7 +29,7 @@
29
29
  "bluebird": "^3.7.2",
30
30
  "file-type": "^17.1.2",
31
31
  "pg-promise": "^10.11.1",
32
- "prostgles-types": "^1.5.163",
32
+ "prostgles-types": "^1.5.165",
33
33
  "sharp": "^0.30.7"
34
34
  },
35
35
  "devDependencies": {
@@ -1371,7 +1371,7 @@
1371
1371
  "bluebird": "^3.7.2",
1372
1372
  "file-type": "^17.1.2",
1373
1373
  "pg-promise": "^10.11.1",
1374
- "prostgles-types": "^1.5.163",
1374
+ "prostgles-types": "^1.5.165",
1375
1375
  "sharp": "^0.30.7",
1376
1376
  "typescript": "^4.7.4"
1377
1377
  }