prostgles-server 2.0.35 → 2.0.39
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.d.ts.map +1 -1
- package/dist/DboBuilder.js +3 -2
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.js +2 -2
- package/dist/FileManager.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +14 -2
- package/dist/Prostgles.js.map +1 -1
- package/dist/QueryBuilder.d.ts +5 -3
- package/dist/QueryBuilder.d.ts.map +1 -1
- package/dist/QueryBuilder.js +6 -3
- package/dist/QueryBuilder.js.map +1 -1
- package/dist/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig.js +10 -5
- package/dist/TableConfig.js.map +1 -1
- package/lib/DboBuilder.ts +3 -2
- package/lib/FileManager.ts +2 -2
- package/lib/Prostgles.ts +13 -2
- package/lib/QueryBuilder.ts +13 -7
- package/lib/TableConfig.ts +11 -6
- package/package.json +1 -1
- package/tests/client/index.ts +1 -1
- package/tests/client/package-lock.json +15 -15
- package/tests/client/package.json +1 -1
- package/tests/client_only_queries.js +22 -0
- package/tests/client_only_queries.ts +25 -0
- package/tests/server/media/{12126216-b58a-4208-893b-53a84e210246.txt → 48fb78e1-8abd-4319-93d7-e297cc2f7bcf.txt} +0 -0
- package/tests/server/media/{21e8b340-0e8b-493f-b22f-ad552633ad62.txt → 511f1b8e-f1a3-483c-9f60-487c23e590f0.txt} +0 -0
- package/tests/server/media/{d41e6db5-b6c3-438d-ba3a-6f6f90d706f6.txt → 67768352-adbd-4709-8127-4597fdd21be8.txt} +0 -0
- package/tests/server/media/{ec3e2f4f-0870-4fc2-badc-f71f873dac47.txt → 6edbb1e0-b776-4cfc-9570-1d86c53fcc8d.txt} +0 -0
- package/tests/server/package-lock.json +1 -1
package/dist/TableConfig.js
CHANGED
|
@@ -54,7 +54,7 @@ class TableConfigurator {
|
|
|
54
54
|
}
|
|
55
55
|
if ("isLookupTable" in tableConf && Object.keys((_a = tableConf.isLookupTable) === null || _a === void 0 ? void 0 : _a.values).length) {
|
|
56
56
|
const rows = Object.keys((_b = tableConf.isLookupTable) === null || _b === void 0 ? void 0 : _b.values).map(id => { var _a; return (Object.assign({ id }, ((_a = tableConf.isLookupTable) === null || _a === void 0 ? void 0 : _a.values[id]))); });
|
|
57
|
-
if (dropIfExists || !((_c = this.dbo) === null || _c === void 0 ? void 0 : _c[tableName])) {
|
|
57
|
+
if (dropIfExists || dropIfExistsCascade || !((_c = this.dbo) === null || _c === void 0 ? void 0 : _c[tableName])) {
|
|
58
58
|
const keys = Object.keys(rows[0]).filter(k => k !== "id");
|
|
59
59
|
queries.push(`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
60
60
|
id TEXT PRIMARY KEY
|
|
@@ -64,12 +64,15 @@ class TableConfigurator {
|
|
|
64
64
|
const values = this.prostgles.pgp.helpers.values(row);
|
|
65
65
|
queries.push(this.prostgles.pgp.as.format(`INSERT INTO ${tableName} (${["id", ...keys].map(t => prostgles_types_1.asName(t)).join(", ")}) ` + " VALUES ${values:raw} ;", { values }));
|
|
66
66
|
});
|
|
67
|
-
console.log("Created lookup table " + tableName)
|
|
67
|
+
// console.log("Created lookup table " + tableName)
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
if (queries.length) {
|
|
72
|
-
|
|
72
|
+
const q = queries.join("\n");
|
|
73
|
+
console.log("TableConfig: \n", q);
|
|
74
|
+
yield this.db.multi(q);
|
|
75
|
+
yield this.prostgles.refreshDBO();
|
|
73
76
|
}
|
|
74
77
|
queries = [];
|
|
75
78
|
/* Create referenced columns */
|
|
@@ -118,7 +121,9 @@ class TableConfigurator {
|
|
|
118
121
|
}
|
|
119
122
|
})));
|
|
120
123
|
if (queries.length) {
|
|
121
|
-
|
|
124
|
+
const q = queries.join("\n");
|
|
125
|
+
console.log("TableConfig: \n", q);
|
|
126
|
+
yield this.db.multi(q);
|
|
122
127
|
}
|
|
123
128
|
});
|
|
124
129
|
}
|
|
@@ -129,7 +134,7 @@ function columnExists(args) {
|
|
|
129
134
|
return __awaiter(this, void 0, void 0, function* () {
|
|
130
135
|
const { db, tableName, colName } = args;
|
|
131
136
|
return Boolean((_a = (yield db.oneOrNone(`
|
|
132
|
-
SELECT column_name
|
|
137
|
+
SELECT column_name, table_name
|
|
133
138
|
FROM information_schema.columns
|
|
134
139
|
WHERE table_name=${PubSubManager_1.asValue(tableName)} and column_name=${PubSubManager_1.asValue(colName)}
|
|
135
140
|
LIMIT 1;
|
package/dist/TableConfig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableConfig.js","sourceRoot":"","sources":["../lib/TableConfig.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qDAAoD;AAIpD,mDAA0C;AAyE1C;;GAEG;AACH,MAAqB,iBAAiB;IAQlC,YAAY,SAAoB;QAKhC,eAAU,GAAG,CAAC,MAAoC,EAA4B,EAAE;;YAC5E,mBAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,0CAAG,MAAM,CAAC,GAAG,2CAAG,IAAI,CAAC;QACzD,CAAC,CAAA;QAED,gBAAW,GAAG,CAAC,MAAiD,EAAQ,EAAE;YACtE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACrC,IAAG,IAAI,EAAC;gBACJ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;gBACzB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC1B,IAAG,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,GAAG;oBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,sBAAsB,GAAG,EAAE,CAAA;gBAC1G,IAAG,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,GAAG;oBAAE,MAAM,GAAG,MAAM,CAAC,GAAG,yBAAyB,GAAG,EAAE,CAAA;aAChH;QACL,CAAC,CAAA;QAhBG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IARD,IAAI,GAAG,KAAgB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAA,CAAC,CAAC;IAAA,CAAC;IACnD,IAAI,EAAE,KAAS,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,CAAC,CAAC;IAAA,CAAC;IAuBpC,IAAI;;YACN,IAAI,OAAO,GAAa,EAAE,CAAC;YAE3B,0BAA0B;YAC1B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;;gBACrC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzC,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,mBAAmB,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC;gBACxE,IAAG,mBAAmB,EAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,wBAAwB,SAAS,WAAW,CAAC,CAAC;iBAC9D;qBAAM,IAAG,YAAY,EAAC;oBACnB,OAAO,CAAC,IAAI,CAAC,wBAAwB,SAAS,IAAI,CAAC,CAAC;iBACvD;gBACD,IAAG,eAAe,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,OAAC,SAAS,CAAC,aAAa,0CAAE,MAAM,CAAC,CAAC,MAAM,EAAC;oBACnF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,OAAC,SAAS,CAAC,aAAa,0CAAE,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,WAAC,OAAA,iBAAG,EAAE,IAAK,OAAC,SAAS,CAAC,aAAa,0CAAE,MAAM,CAAC,EAAE,EAAE,EAAG,CAAA,EAAA,CAAC,CAAC;oBACxH,IAAG,YAAY,IAAI,QAAC,IAAI,CAAC,GAAG,0CAAG,SAAS,EAAC,EAAC;
|
|
1
|
+
{"version":3,"file":"TableConfig.js","sourceRoot":"","sources":["../lib/TableConfig.ts"],"names":[],"mappings":"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"}
|
package/lib/DboBuilder.ts
CHANGED
|
@@ -856,7 +856,7 @@ export class ViewHandler {
|
|
|
856
856
|
if(maxLimit && !Number.isInteger(maxLimit)) throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
|
|
857
857
|
}
|
|
858
858
|
|
|
859
|
-
let q = await getNewQuery(this as unknown as TableHandler, filter, selectParams, param3_unused, tableRules, localParams),
|
|
859
|
+
let q = await getNewQuery(this as unknown as TableHandler, filter, selectParams, param3_unused, tableRules, localParams, this.columns),
|
|
860
860
|
_query = makeQuery(this as unknown as TableHandler, q, undefined, undefined, selectParams);
|
|
861
861
|
// console.log(_query, JSON.stringify(q, null, 2))
|
|
862
862
|
if(testRule){
|
|
@@ -2316,7 +2316,8 @@ export class TableHandler extends ViewHandler {
|
|
|
2316
2316
|
allowedFields,
|
|
2317
2317
|
computedFields: COMPUTED_FIELDS,
|
|
2318
2318
|
functions: FUNCTIONS.filter(f => f.type === "function" && f.singleColArg),
|
|
2319
|
-
isView: this.is_view
|
|
2319
|
+
isView: this.is_view,
|
|
2320
|
+
columns: this.columns,
|
|
2320
2321
|
});
|
|
2321
2322
|
await sBuilder.parseUserSelect(returning);
|
|
2322
2323
|
|
package/lib/FileManager.ts
CHANGED
|
@@ -370,8 +370,8 @@ export default class FileManager {
|
|
|
370
370
|
foreign_id ${pkField.udt_name} ${refType === "one"? " PRIMARY KEY " : ""} REFERENCES ${asName(refTable)}(${asName(pkField.name)}),
|
|
371
371
|
media_id UUID NOT NULL REFERENCES ${asName(tableName)}(id)
|
|
372
372
|
)
|
|
373
|
-
|
|
374
|
-
|
|
373
|
+
`;
|
|
374
|
+
console.log(`Creating ${action} ...`, lookupTableName);
|
|
375
375
|
await this.db.any(query);
|
|
376
376
|
console.log(`Created ${action}`);
|
|
377
377
|
|
package/lib/Prostgles.ts
CHANGED
|
@@ -615,7 +615,12 @@ export class Prostgles<DBO = DbHandler> {
|
|
|
615
615
|
await this.refreshDBO();
|
|
616
616
|
if(this.opts.tableConfig){
|
|
617
617
|
this.tableConfigurator = new TableConfigurator(this as any);
|
|
618
|
-
|
|
618
|
+
try {
|
|
619
|
+
await this.tableConfigurator.init();
|
|
620
|
+
} catch(e){
|
|
621
|
+
console.error("TableConfigurator: ",e);
|
|
622
|
+
throw e;
|
|
623
|
+
}
|
|
619
624
|
}
|
|
620
625
|
|
|
621
626
|
/* 3. Make DBO object from all tables and views */
|
|
@@ -627,7 +632,13 @@ export class Prostgles<DBO = DbHandler> {
|
|
|
627
632
|
if(!awsS3Config && !localConfig) throw "fileTable missing param: Must provide awsS3Config OR localConfig";
|
|
628
633
|
await this.refreshDBO();
|
|
629
634
|
this.fileManager = new FileManager(awsS3Config || localConfig, imageOptions);
|
|
630
|
-
|
|
635
|
+
|
|
636
|
+
try {
|
|
637
|
+
await this.fileManager.init(this as any);
|
|
638
|
+
} catch(e){
|
|
639
|
+
console.error("FileManager: ",e);
|
|
640
|
+
throw e;
|
|
641
|
+
}
|
|
631
642
|
}
|
|
632
643
|
await this.refreshDBO();
|
|
633
644
|
|
package/lib/QueryBuilder.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
import { pgp, Filter, LocalParams, isPlainObject, TableHandler, ViewHandler } from "./DboBuilder";
|
|
8
8
|
import { TableRule, flat } from "./Prostgles";
|
|
9
|
-
import { SelectParamsBasic as SelectParams, isEmpty, FieldFilter, asName, TextFilter_FullTextSearchFilterKeys, TS_PG_Types } from "prostgles-types";
|
|
9
|
+
import { SelectParamsBasic as SelectParams, isEmpty, FieldFilter, asName, TextFilter_FullTextSearchFilterKeys, TS_PG_Types, ColumnInfo } from "prostgles-types";
|
|
10
10
|
import { get } from "./utils";
|
|
11
11
|
|
|
12
12
|
|
|
@@ -629,13 +629,15 @@ export class SelectItemBuilder {
|
|
|
629
629
|
private functions: FunctionSpec[];
|
|
630
630
|
private allowedFieldsIncludingComputed: string[];
|
|
631
631
|
private isView: boolean;
|
|
632
|
+
private columns: ColumnInfo[];
|
|
632
633
|
|
|
633
|
-
constructor(params: { allowedFields: string[]; computedFields: FieldSpec[]; functions: FunctionSpec[]; allFields: string[]; isView: boolean }){
|
|
634
|
+
constructor(params: { allowedFields: string[]; computedFields: FieldSpec[]; functions: FunctionSpec[]; allFields: string[]; isView: boolean; columns: ColumnInfo[]; }){
|
|
634
635
|
this.allFields = params.allFields;
|
|
635
636
|
this.allowedFields = params.allowedFields;
|
|
636
637
|
this.computedFields = params.computedFields;
|
|
637
638
|
this.isView = params.isView;
|
|
638
639
|
this.functions = params.functions;
|
|
640
|
+
this.columns = params.columns;
|
|
639
641
|
this.allowedFieldsIncludingComputed = this.allowedFields.concat(this.computedFields? this.computedFields.map(cf => cf.name) : []);
|
|
640
642
|
if(!this.allowedFields.length){
|
|
641
643
|
throw "allowedFields empty/missing";
|
|
@@ -716,9 +718,11 @@ export class SelectItemBuilder {
|
|
|
716
718
|
}
|
|
717
719
|
}
|
|
718
720
|
|
|
721
|
+
const colDef = this.columns.find(c => c.name === fieldName);
|
|
719
722
|
let alias = selected? fieldName : ("not_selected_" + fieldName);
|
|
720
723
|
this.addItem({
|
|
721
724
|
type: "column",
|
|
725
|
+
columnPGDataType: colDef?.data_type,
|
|
722
726
|
alias,
|
|
723
727
|
getQuery: () => asName(fieldName),
|
|
724
728
|
getFields: () => [fieldName],
|
|
@@ -830,10 +834,11 @@ export class SelectItemBuilder {
|
|
|
830
834
|
export async function getNewQuery(
|
|
831
835
|
_this: TableHandler,
|
|
832
836
|
filter: Filter,
|
|
833
|
-
selectParams
|
|
837
|
+
selectParams: SelectParams & { alias?: string },
|
|
834
838
|
param3_unused = null,
|
|
835
|
-
tableRules
|
|
836
|
-
localParams
|
|
839
|
+
tableRules: TableRule,
|
|
840
|
+
localParams: LocalParams,
|
|
841
|
+
columns: ColumnInfo[],
|
|
837
842
|
): Promise<NewQuery> {
|
|
838
843
|
|
|
839
844
|
if((localParams?.socket || localParams?.httpReq) && !get(tableRules, "select.fields")){
|
|
@@ -866,7 +871,7 @@ export async function getNewQuery(
|
|
|
866
871
|
// allFieldsIncludingComputed = allCols.concat(COMPUTED_FIELDS.map(c => c.name)),
|
|
867
872
|
allowedFields = _this.parseFieldFilter(get(tableRules, "select.fields")) || _this.column_names.slice(0),
|
|
868
873
|
// allowedFieldsIncludingComputed = _this.parseFieldFilter(get(tableRules, "select.fields"), true, allFieldsIncludingComputed) || allFieldsIncludingComputed,
|
|
869
|
-
sBuilder = new SelectItemBuilder({ allowedFields, computedFields: COMPUTED_FIELDS, isView: _this.is_view, functions: FUNCTIONS, allFields: _this.column_names.slice(0) });
|
|
874
|
+
sBuilder = new SelectItemBuilder({ allowedFields, computedFields: COMPUTED_FIELDS, isView: _this.is_view, functions: FUNCTIONS, allFields: _this.column_names.slice(0), columns });
|
|
870
875
|
|
|
871
876
|
|
|
872
877
|
|
|
@@ -934,7 +939,8 @@ export async function getNewQuery(
|
|
|
934
939
|
{ ...j_selectParams, alias: j_alias },
|
|
935
940
|
param3_unused,
|
|
936
941
|
j_tableRules,
|
|
937
|
-
localParams
|
|
942
|
+
localParams,
|
|
943
|
+
columns
|
|
938
944
|
);
|
|
939
945
|
joinQuery.isLeftJoin = j_isLeftJoin;
|
|
940
946
|
joinQuery.tableAlias = j_alias;
|
package/lib/TableConfig.ts
CHANGED
|
@@ -119,7 +119,7 @@ export default class TableConfigurator {
|
|
|
119
119
|
}
|
|
120
120
|
if("isLookupTable" in tableConf && Object.keys(tableConf.isLookupTable?.values).length){
|
|
121
121
|
const rows = Object.keys(tableConf.isLookupTable?.values).map(id => ({ id, ...(tableConf.isLookupTable?.values[id]) }));
|
|
122
|
-
if(dropIfExists || !this.dbo?.[tableName]){
|
|
122
|
+
if(dropIfExists || dropIfExistsCascade || !this.dbo?.[tableName]){
|
|
123
123
|
const keys = Object.keys(rows[0]).filter(k => k !== "id");
|
|
124
124
|
queries.push(`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
125
125
|
id TEXT PRIMARY KEY
|
|
@@ -130,13 +130,16 @@ export default class TableConfigurator {
|
|
|
130
130
|
const values = this.prostgles.pgp.helpers.values(row)
|
|
131
131
|
queries.push(this.prostgles.pgp.as.format(`INSERT INTO ${tableName} (${["id", ...keys].map(t => asName(t)).join(", ")}) ` + " VALUES ${values:raw} ;", { values} ))
|
|
132
132
|
});
|
|
133
|
-
console.log("Created lookup table " + tableName)
|
|
133
|
+
// console.log("Created lookup table " + tableName)
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
});
|
|
137
137
|
|
|
138
|
-
if(queries.length){
|
|
139
|
-
|
|
138
|
+
if(queries.length){
|
|
139
|
+
const q = queries.join("\n");
|
|
140
|
+
console.log("TableConfig: \n", q)
|
|
141
|
+
await this.db.multi(q);
|
|
142
|
+
await this.prostgles.refreshDBO()
|
|
140
143
|
}
|
|
141
144
|
queries = [];
|
|
142
145
|
|
|
@@ -195,7 +198,9 @@ export default class TableConfigurator {
|
|
|
195
198
|
}));
|
|
196
199
|
|
|
197
200
|
if(queries.length){
|
|
198
|
-
|
|
201
|
+
const q = queries.join("\n");
|
|
202
|
+
console.log("TableConfig: \n", q)
|
|
203
|
+
await this.db.multi(q);
|
|
199
204
|
}
|
|
200
205
|
}
|
|
201
206
|
}
|
|
@@ -204,7 +209,7 @@ export default class TableConfigurator {
|
|
|
204
209
|
async function columnExists(args: {tableName: string; colName: string; db: DB }){
|
|
205
210
|
const { db, tableName, colName } = args;
|
|
206
211
|
return Boolean((await db.oneOrNone(`
|
|
207
|
-
SELECT column_name
|
|
212
|
+
SELECT column_name, table_name
|
|
208
213
|
FROM information_schema.columns
|
|
209
214
|
WHERE table_name=${asValue(tableName)} and column_name=${asValue(colName)}
|
|
210
215
|
LIMIT 1;
|
package/package.json
CHANGED
package/tests/client/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ import io from "socket.io-client";
|
|
|
3
3
|
|
|
4
4
|
import isomorphic from "../isomorphic_queries";
|
|
5
5
|
import client_only from "../client_only_queries";
|
|
6
|
-
export { DBHandlerClient,
|
|
6
|
+
export { DBHandlerClient, Auth } from "prostgles-client/dist/prostgles";
|
|
7
7
|
|
|
8
8
|
const start = Date.now();
|
|
9
9
|
const log = (msg: string, extra?: any) => {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@types/node": "^14.14.16",
|
|
13
13
|
"@types/socket.io-client": "^1.4.35",
|
|
14
|
-
"prostgles-client": "^1.5.
|
|
14
|
+
"prostgles-client": "^1.5.110",
|
|
15
15
|
"prostgles-types": "^1.5.68",
|
|
16
16
|
"socket.io-client": "^4.2.0"
|
|
17
17
|
}
|
|
@@ -114,17 +114,17 @@
|
|
|
114
114
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
|
115
115
|
},
|
|
116
116
|
"node_modules/prostgles-client": {
|
|
117
|
-
"version": "1.5.
|
|
118
|
-
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-1.5.
|
|
119
|
-
"integrity": "sha512-
|
|
117
|
+
"version": "1.5.110",
|
|
118
|
+
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-1.5.110.tgz",
|
|
119
|
+
"integrity": "sha512-7++MFe/D2202w/HN5zzvDDZCbIgZN1jqQ9J2lznJQI3nTyWA1QqbzYzN+Ny4txZvOXJwEWeetC1jLDDptDoz4A==",
|
|
120
120
|
"dependencies": {
|
|
121
|
-
"prostgles-types": "^1.5.
|
|
121
|
+
"prostgles-types": "^1.5.104"
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
124
|
"node_modules/prostgles-types": {
|
|
125
|
-
"version": "1.5.
|
|
126
|
-
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-1.5.
|
|
127
|
-
"integrity": "sha512-
|
|
125
|
+
"version": "1.5.104",
|
|
126
|
+
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-1.5.104.tgz",
|
|
127
|
+
"integrity": "sha512-PBgwJ+EraVZgBS7hn2KBkxlHVGhLDQB6ks8KABA6IwR5Kcmu9Hjx4stZa64xHa1ZUTbWe2OuNKZkIAXockXVrA=="
|
|
128
128
|
},
|
|
129
129
|
"node_modules/socket.io-client": {
|
|
130
130
|
"version": "4.2.0",
|
|
@@ -275,17 +275,17 @@
|
|
|
275
275
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
|
276
276
|
},
|
|
277
277
|
"prostgles-client": {
|
|
278
|
-
"version": "1.5.
|
|
279
|
-
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-1.5.
|
|
280
|
-
"integrity": "sha512-
|
|
278
|
+
"version": "1.5.110",
|
|
279
|
+
"resolved": "https://registry.npmjs.org/prostgles-client/-/prostgles-client-1.5.110.tgz",
|
|
280
|
+
"integrity": "sha512-7++MFe/D2202w/HN5zzvDDZCbIgZN1jqQ9J2lznJQI3nTyWA1QqbzYzN+Ny4txZvOXJwEWeetC1jLDDptDoz4A==",
|
|
281
281
|
"requires": {
|
|
282
|
-
"prostgles-types": "^1.5.
|
|
282
|
+
"prostgles-types": "^1.5.104"
|
|
283
283
|
}
|
|
284
284
|
},
|
|
285
285
|
"prostgles-types": {
|
|
286
|
-
"version": "1.5.
|
|
287
|
-
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-1.5.
|
|
288
|
-
"integrity": "sha512-
|
|
286
|
+
"version": "1.5.104",
|
|
287
|
+
"resolved": "https://registry.npmjs.org/prostgles-types/-/prostgles-types-1.5.104.tgz",
|
|
288
|
+
"integrity": "sha512-PBgwJ+EraVZgBS7hn2KBkxlHVGhLDQB6ks8KABA6IwR5Kcmu9Hjx4stZa64xHa1ZUTbWe2OuNKZkIAXockXVrA=="
|
|
289
289
|
},
|
|
290
290
|
"socket.io-client": {
|
|
291
291
|
"version": "4.2.0",
|
|
@@ -112,6 +112,28 @@ async function client_only(db, auth, log, methods) {
|
|
|
112
112
|
{ id: 2, public: 'public data' }
|
|
113
113
|
]);
|
|
114
114
|
});
|
|
115
|
+
// await tryRun("Duplicate subscription", async () => {
|
|
116
|
+
// return new Promise(async (resolve, reject) => {
|
|
117
|
+
// let data1 = [], data2 = [], cntr = 0;
|
|
118
|
+
// function check(){
|
|
119
|
+
// cntr++;
|
|
120
|
+
// if(cntr === 2){
|
|
121
|
+
// assert.equal(data1.length, data2.length);
|
|
122
|
+
// console.error(data1, data2)
|
|
123
|
+
// reject( data1);
|
|
124
|
+
// resolve(data1)
|
|
125
|
+
// }
|
|
126
|
+
// }
|
|
127
|
+
// const sub1 = await db.planes.subscribe({}, {}, data => {
|
|
128
|
+
// data1 = data;
|
|
129
|
+
// check()
|
|
130
|
+
// });
|
|
131
|
+
// const sub2 = await db.planes.subscribe({}, {}, data => {
|
|
132
|
+
// data2 = data;
|
|
133
|
+
// check()
|
|
134
|
+
// });
|
|
135
|
+
// })
|
|
136
|
+
// })
|
|
115
137
|
const cols = await db.insert_rules.getColumns();
|
|
116
138
|
assert_1.strict.equal(cols.filter(({ insert, update: u, select: s, delete: d }) => insert && !u && !s && !d).length, 3, "Validated getColumns failed");
|
|
117
139
|
/* Validated insert */
|
|
@@ -134,6 +134,31 @@ export default async function client_only(db: DBHandlerClient, auth: Auth, log:
|
|
|
134
134
|
]);
|
|
135
135
|
});
|
|
136
136
|
|
|
137
|
+
// await tryRun("Duplicate subscription", async () => {
|
|
138
|
+
|
|
139
|
+
// return new Promise(async (resolve, reject) => {
|
|
140
|
+
// let data1 = [], data2 = [], cntr = 0;
|
|
141
|
+
// function check(){
|
|
142
|
+
// cntr++;
|
|
143
|
+
// if(cntr === 2){
|
|
144
|
+
// assert.equal(data1.length, data2.length);
|
|
145
|
+
// console.error(data1, data2)
|
|
146
|
+
// reject( data1);
|
|
147
|
+
// resolve(data1)
|
|
148
|
+
// }
|
|
149
|
+
// }
|
|
150
|
+
|
|
151
|
+
// const sub1 = await db.planes.subscribe({}, {}, data => {
|
|
152
|
+
// data1 = data;
|
|
153
|
+
// check()
|
|
154
|
+
// });
|
|
155
|
+
// const sub2 = await db.planes.subscribe({}, {}, data => {
|
|
156
|
+
// data2 = data;
|
|
157
|
+
// check()
|
|
158
|
+
// });
|
|
159
|
+
// })
|
|
160
|
+
// })
|
|
161
|
+
|
|
137
162
|
const cols = await db.insert_rules.getColumns();
|
|
138
163
|
assert.equal(cols.filter(({ insert, update: u, select: s, delete: d }) => insert && !u && !s && !d).length, 3, "Validated getColumns failed")
|
|
139
164
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|