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.
- package/dist/DboBuilder/delete.d.ts +5 -0
- package/dist/DboBuilder/delete.d.ts.map +1 -0
- package/dist/DboBuilder/delete.js +121 -0
- package/dist/DboBuilder/delete.js.map +1 -0
- package/dist/DboBuilder/insert.d.ts.map +1 -1
- package/dist/DboBuilder/insert.js +0 -4
- package/dist/DboBuilder/insert.js.map +1 -1
- package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/dist/DboBuilder/insertDataParse.js +2 -43
- package/dist/DboBuilder/insertDataParse.js.map +1 -1
- package/dist/DboBuilder/update.d.ts +5 -0
- package/dist/DboBuilder/update.d.ts.map +1 -0
- package/dist/DboBuilder/update.js +111 -0
- package/dist/DboBuilder/update.js.map +1 -0
- package/dist/DboBuilder/uploadFile.d.ts +6 -0
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -0
- package/dist/DboBuilder/uploadFile.js +48 -0
- package/dist/DboBuilder/uploadFile.js.map +1 -0
- package/dist/DboBuilder.d.ts +4 -2
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +12 -172
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +2 -0
- package/dist/FileManager.js.map +1 -1
- package/dist/QueryBuilder.d.ts +5 -1
- package/dist/QueryBuilder.d.ts.map +1 -1
- package/lib/DboBuilder/delete.d.ts +5 -0
- package/lib/DboBuilder/delete.d.ts.map +1 -0
- package/lib/DboBuilder/delete.js +120 -0
- package/lib/DboBuilder/delete.ts +127 -0
- package/lib/DboBuilder/insert.d.ts.map +1 -1
- package/lib/DboBuilder/insert.js +0 -4
- package/lib/DboBuilder/insert.ts +0 -4
- package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/lib/DboBuilder/insertDataParse.js +2 -43
- package/lib/DboBuilder/insertDataParse.ts +2 -46
- package/lib/DboBuilder/update.d.ts +5 -0
- package/lib/DboBuilder/update.d.ts.map +1 -0
- package/lib/DboBuilder/update.js +110 -0
- package/lib/DboBuilder/update.ts +127 -0
- package/lib/DboBuilder/uploadFile.d.ts +6 -0
- package/lib/DboBuilder/uploadFile.d.ts.map +1 -0
- package/lib/DboBuilder/uploadFile.js +47 -0
- package/lib/DboBuilder/uploadFile.ts +50 -0
- package/lib/DboBuilder.d.ts +4 -2
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +12 -172
- package/lib/DboBuilder.ts +15 -198
- package/lib/FileManager.d.ts.map +1 -1
- package/lib/FileManager.js +2 -0
- package/lib/FileManager.ts +1 -0
- package/package.json +2 -2
- package/tests/client/PID.txt +1 -1
- package/tests/isomorphic_queries.d.ts.map +1 -1
- package/tests/isomorphic_queries.js +33 -1
- package/tests/isomorphic_queries.ts +39 -2
- 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 =
|
|
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))
|
|
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
|
-
|
|
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> {
|
|
2371
|
-
|
|
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){
|
package/lib/FileManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["FileManager.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAO,MAAM,SAAS,CAAC;AAMlC,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAkD,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAK/I,eAAO,MAAM,eAAe,SAAgB,MAAM,aAAW,QAAQ,MAAM,CAE1E,CAAA;AAED,oBAAY,YAAY,GAAG;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC;IACV;;OAEG;IACD;QAAE,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GAC7C;QAAE,OAAO,EACL;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,GACjB;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KACrB,CAAA;CACN,CAAA;AAED,oBAAY,QAAQ,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,oBAAY,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAY,YAAY,GAAG;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,OAAO,GAAG,MAAM,SAAS,CAAC;AAC1B,MAAM,CAAC,OAAO,OAAO,WAAW;IAE9B,MAAM,CAAC,eAAe,gBAAuB,MAAM,mBAAmB,MAAM,2GAS3E;IAED,QAAQ,CAAC,EAAE,EAAE,CAAC;IAEd,MAAM,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,GAAG,IAAI,eAAe,CAGzB;IACD,IAAI,EAAE,IAAI,EAAE,CAGX;IAED,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAiB;gBAE3B,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,EAAE,YAAY;IA6BhE,UAAU,CAAC,IAAI,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["FileManager.ts"],"names":[],"mappings":"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"}
|
package/lib/FileManager.js
CHANGED
package/lib/FileManager.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prostgles-server",
|
|
3
|
-
"version": "2.0.
|
|
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.
|
|
32
|
+
"prostgles-types": "^1.5.165",
|
|
33
33
|
"sharp": "^0.30.7"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
package/tests/client/PID.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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,
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
1374
|
+
"prostgles-types": "^1.5.165",
|
|
1375
1375
|
"sharp": "^0.30.7",
|
|
1376
1376
|
"typescript": "^4.7.4"
|
|
1377
1377
|
}
|