@webda/postgres 3.4.4 → 4.0.0-beta.2
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/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/postgresstore.d.ts +1 -0
- package/lib/postgresstore.d.ts.map +1 -0
- package/lib/postgresstore.js +11 -11
- package/lib/postgresstore.js.map +1 -1
- package/lib/postgresstore.spec.d.ts +14 -0
- package/lib/postgresstore.spec.d.ts.map +1 -0
- package/lib/postgresstore.spec.js +130 -0
- package/lib/postgresstore.spec.js.map +1 -0
- package/lib/sqlstore.d.ts +3 -1
- package/lib/sqlstore.d.ts.map +1 -0
- package/lib/sqlstore.js +6 -5
- package/lib/sqlstore.js.map +1 -1
- package/package.json +14 -9
- package/webda.module.json +18 -75
- package/test/config.json +0 -56
package/lib/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
package/lib/postgresstore.d.ts
CHANGED
|
@@ -112,3 +112,4 @@ export declare class PostgresStore<T extends CoreModel = CoreModel, K extends Po
|
|
|
112
112
|
_deleteItemFromCollection(uuid: string, attribute: string, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<any>;
|
|
113
113
|
}
|
|
114
114
|
export default PostgresStore;
|
|
115
|
+
//# sourceMappingURL=postgresstore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresstore.d.ts","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAuE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAarE;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACxD;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,gBAAgB,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC7C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEL,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa;CAO9C;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa,CACxB,CAAC,SAAS,SAAS,GAAG,SAAS,EAC/B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CACjD,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IAE5B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG;IAI1B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B;;OAEG;IACG,UAAU;IAahB;;;OAGG;IACH,SAAS;IAIT;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAS5E;;;;;OAKG;IACG,WAAW;IA6DjB;;OAEG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAInD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,GAAG,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAYhH;;OAEG;IACG,gBAAgB,CACpB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,GAAG,EACxB,uBAAuB,CAAC,EAAE,MAAM,GAC/B,OAAO,CAAC,IAAI,CAAC;IAgBhB;;OAEG;IACH,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;IAMzF;;OAEG;IACG,oBAAoB,CACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,EAC7C,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;IAkBf;;OAEG;IACG,uBAAuB,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,GAAG,EACvB,uBAAuB,EAAE,MAAM,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;IAyBf;;OAEG;IACG,yBAAyB,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,GAAG,EACvB,uBAAuB,EAAE,MAAM,EAC/B,UAAU,EAAE,IAAI,GACf,OAAO,CAAC,GAAG,CAAC;CAkBhB;AAED,eAAe,aAAa,CAAC"}
|
package/lib/postgresstore.js
CHANGED
|
@@ -86,7 +86,7 @@ export class PostgresStore extends SQLStore {
|
|
|
86
86
|
*/
|
|
87
87
|
async executeQuery(query, values = []) {
|
|
88
88
|
this.log("DEBUG", "Query", query);
|
|
89
|
-
|
|
89
|
+
const res = await this.client.query(query, values);
|
|
90
90
|
return {
|
|
91
91
|
rows: res.rows.map(r => this.initModel(r.data)),
|
|
92
92
|
rowCount: res.rowCount
|
|
@@ -104,7 +104,7 @@ export class PostgresStore extends SQLStore {
|
|
|
104
104
|
const models = webda.getModels();
|
|
105
105
|
const app = webda.getApplication();
|
|
106
106
|
const validator = new RegExpStringValidator(this.parameters.views);
|
|
107
|
-
for (
|
|
107
|
+
for (const model of Object.values(models)) {
|
|
108
108
|
const store = webda.getModelStore(model);
|
|
109
109
|
if (!(store instanceof PostgresStore)) {
|
|
110
110
|
continue;
|
|
@@ -116,12 +116,12 @@ export class PostgresStore extends SQLStore {
|
|
|
116
116
|
continue;
|
|
117
117
|
}
|
|
118
118
|
const plural = webda.getApplication().getModelPlural(model.getIdentifier());
|
|
119
|
-
for (
|
|
119
|
+
for (const field of Object.keys(schema.properties)) {
|
|
120
120
|
if (field === "uuid" || !field.match(/^[0-9a-zA-Z-_$]+$/)) {
|
|
121
121
|
continue;
|
|
122
122
|
}
|
|
123
123
|
let cast = "";
|
|
124
|
-
|
|
124
|
+
const type = schema.properties[field].type;
|
|
125
125
|
if (type === "number") {
|
|
126
126
|
cast = "::bigint";
|
|
127
127
|
}
|
|
@@ -169,7 +169,7 @@ export class PostgresStore extends SQLStore {
|
|
|
169
169
|
if (itemWriteCondition) {
|
|
170
170
|
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
171
171
|
}
|
|
172
|
-
|
|
172
|
+
const res = await this.sqlQuery(query, args);
|
|
173
173
|
if (res.rowCount === 0) {
|
|
174
174
|
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
175
175
|
}
|
|
@@ -183,7 +183,7 @@ export class PostgresStore extends SQLStore {
|
|
|
183
183
|
if (itemWriteCondition) {
|
|
184
184
|
query += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
185
185
|
}
|
|
186
|
-
|
|
186
|
+
const res = await this.sqlQuery(query, args);
|
|
187
187
|
if (res.rowCount === 0) {
|
|
188
188
|
if (itemWriteCondition) {
|
|
189
189
|
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
@@ -197,7 +197,7 @@ export class PostgresStore extends SQLStore {
|
|
|
197
197
|
* @override
|
|
198
198
|
*/
|
|
199
199
|
getQueryCondition(itemWriteCondition, itemWriteConditionField, params) {
|
|
200
|
-
|
|
200
|
+
const condition = itemWriteCondition instanceof Date ? itemWriteCondition.toISOString() : itemWriteCondition;
|
|
201
201
|
params.push(condition);
|
|
202
202
|
return ` AND data->>'${itemWriteConditionField}'=$${params.length}`;
|
|
203
203
|
}
|
|
@@ -211,8 +211,8 @@ export class PostgresStore extends SQLStore {
|
|
|
211
211
|
args.push(p.value);
|
|
212
212
|
data = `jsonb_set(${data}, '{${p.property}}', (COALESCE(data->>'${p.property}','0')::int + $${index + 2})::text::jsonb)::jsonb`;
|
|
213
213
|
});
|
|
214
|
-
|
|
215
|
-
|
|
214
|
+
const query = `UPDATE ${this.parameters.table} SET data = jsonb_set(${data}, '{_lastUpdate}', '"${updateDate.toISOString()}"'::jsonb) WHERE uuid = $1`;
|
|
215
|
+
const res = await this.sqlQuery(query, args);
|
|
216
216
|
if (res.rowCount === 0) {
|
|
217
217
|
throw new StoreNotFoundError(uid, this.getName());
|
|
218
218
|
}
|
|
@@ -234,7 +234,7 @@ export class PostgresStore extends SQLStore {
|
|
|
234
234
|
args.push(itemWriteCondition);
|
|
235
235
|
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'=$${args.length}`;
|
|
236
236
|
}
|
|
237
|
-
|
|
237
|
+
const res = await this.sqlQuery(query, args);
|
|
238
238
|
if (res.rowCount === 0) {
|
|
239
239
|
if (itemWriteCondition) {
|
|
240
240
|
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
|
@@ -256,7 +256,7 @@ export class PostgresStore extends SQLStore {
|
|
|
256
256
|
args.push(itemWriteCondition);
|
|
257
257
|
query += ` AND (data#>>'{${attribute}, ${index}}')::jsonb->>'${itemWriteConditionField}'=$2`;
|
|
258
258
|
}
|
|
259
|
-
|
|
259
|
+
const res = await this.sqlQuery(query, args);
|
|
260
260
|
if (res.rowCount === 0) {
|
|
261
261
|
if (itemWriteCondition) {
|
|
262
262
|
throw new UpdateConditionFailError(uuid, itemWriteConditionField, itemWriteCondition);
|
package/lib/postgresstore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgresstore.js","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,qBAAqB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAgC,MAAM,IAAI,CAAC;AAClD,OAAO,EAAa,QAAQ,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IAyBxD,YAAY,MAAW,EAAE,KAAoB;QAC3C,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,eAAe,KAApB,IAAI,CAAC,eAAe,GAAK,IAAI,EAAC;QAC9B,IAAI,CAAC,OAAO,KAAZ,IAAI,CAAC,OAAO,GAAK,KAAK,EAAC;QACvB,IAAI,CAAC,UAAU,KAAf,IAAI,CAAC,UAAU,GAAK,EAAE,EAAC;QACvB,IAAI,CAAC,KAAK,KAAV,IAAI,CAAC,KAAK,GAAK,CAAC,UAAU,CAAC,EAAC;IAC9B,CAAC;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAGX,SAAQ,QAAc;IAGtB;;OAEG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CACN,OAAO,EACP,8BAA8B,IAAI,CAAC,UAAU,CAAC,KAAK,wDAAwD,IAAI,CAAC,UAAU,CAAC,KAAK,2BAA2B,CAC5J,CAAC;QACF,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACrB,8BAA8B,IAAI,CAAC,UAAU,CAAC,KAAK,wDAAwD,IAAI,CAAC,UAAU,CAAC,KAAK,2BAA2B,CAC5J,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,SAAgB,EAAE;QAClD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,
|
|
1
|
+
{"version":3,"file":"postgresstore.js","sourceRoot":"","sources":["../src/postgresstore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Ident } from "@webda/core";
|
|
2
|
+
import { StoreTest } from "@webda/core/lib/stores/store.spec.js";
|
|
3
|
+
import PostgresStore from "./postgresstore.js";
|
|
4
|
+
export declare class PostgresTest extends StoreTest<PostgresStore> {
|
|
5
|
+
getIdentStore(): Promise<PostgresStore<any>>;
|
|
6
|
+
getUserStore(): Promise<PostgresStore<any>>;
|
|
7
|
+
getModelClass(): typeof Ident;
|
|
8
|
+
deleteConcurrent(): Promise<void>;
|
|
9
|
+
createTable(): Promise<void>;
|
|
10
|
+
cov(): Promise<void>;
|
|
11
|
+
stoppedPostgres(): Promise<void>;
|
|
12
|
+
createViews(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=postgresstore.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresstore.spec.d.ts","sourceRoot":"","sources":["../src/postgresstore.spec.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,EAAS,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAc5C,qBACa,YAAa,SAAQ,SAAS,CAAC,aAAa,CAAC;IAClD,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAY5C,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAYjD,aAAa;IAKP,gBAAgB;IAKhB,WAAW;IAuBX,GAAG;IAaH,eAAe;IAUf,WAAW;CA4BlB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { suite, test } from "@testdeck/mocha";
|
|
8
|
+
import { Ident } from "@webda/core";
|
|
9
|
+
import { StoreTest } from "@webda/core/lib/stores/store.spec.js";
|
|
10
|
+
import * as assert from "assert";
|
|
11
|
+
import pg from "pg";
|
|
12
|
+
import PostgresStore from "./postgresstore.js";
|
|
13
|
+
const params = {
|
|
14
|
+
database: "webda.io",
|
|
15
|
+
postgresqlServer: {
|
|
16
|
+
host: "localhost",
|
|
17
|
+
user: "webda.io",
|
|
18
|
+
database: "webda.io",
|
|
19
|
+
password: "webda.io",
|
|
20
|
+
statement_timeout: 60000,
|
|
21
|
+
max: 2
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
let PostgresTest = class PostgresTest extends StoreTest {
|
|
25
|
+
async getIdentStore() {
|
|
26
|
+
return this.addService(PostgresStore, {
|
|
27
|
+
...params,
|
|
28
|
+
asyncDelete: true,
|
|
29
|
+
table: "idents",
|
|
30
|
+
model: "Webda/Ident"
|
|
31
|
+
}, "idents");
|
|
32
|
+
}
|
|
33
|
+
async getUserStore() {
|
|
34
|
+
return this.addService(PostgresStore, {
|
|
35
|
+
...params,
|
|
36
|
+
table: "users",
|
|
37
|
+
model: "Webda/User"
|
|
38
|
+
}, "users");
|
|
39
|
+
}
|
|
40
|
+
getModelClass() {
|
|
41
|
+
return Ident;
|
|
42
|
+
}
|
|
43
|
+
async deleteConcurrent() {
|
|
44
|
+
return super.deleteConcurrent();
|
|
45
|
+
}
|
|
46
|
+
async createTable() {
|
|
47
|
+
const client = new pg.Client({
|
|
48
|
+
host: "localhost",
|
|
49
|
+
user: "webda.io",
|
|
50
|
+
database: "webda.io",
|
|
51
|
+
password: "webda.io"
|
|
52
|
+
});
|
|
53
|
+
try {
|
|
54
|
+
await client.connect();
|
|
55
|
+
await client.query("DROP TABLE IF EXISTS create_test");
|
|
56
|
+
const store = this.getService("idents");
|
|
57
|
+
store.getParameters().table = "create_test";
|
|
58
|
+
store.getParameters().autoCreateTable = true;
|
|
59
|
+
await store.init();
|
|
60
|
+
await store.save({ test: 1 });
|
|
61
|
+
const res = await store.getClient().query("SELECT * FROM create_test");
|
|
62
|
+
assert.strictEqual(res.rowCount, 1);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
await client.end();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async cov() {
|
|
69
|
+
const store = this.identStore;
|
|
70
|
+
store.getParameters().usePool = false;
|
|
71
|
+
await store.init();
|
|
72
|
+
await store.query("test = TRUE");
|
|
73
|
+
//assert.rejects(() => store._find({}, 12, 10), /Query should be a string/);
|
|
74
|
+
assert.strictEqual(store.getClient(), store.client);
|
|
75
|
+
// Test checkTable
|
|
76
|
+
store.getParameters().autoCreateTable = false;
|
|
77
|
+
await store.checkTable();
|
|
78
|
+
}
|
|
79
|
+
async stoppedPostgres() {
|
|
80
|
+
const obj = await this.identStore.save({
|
|
81
|
+
test: 0
|
|
82
|
+
});
|
|
83
|
+
await obj.patch({ test: 1 });
|
|
84
|
+
await new Promise(resolve => setTimeout(resolve, 20000));
|
|
85
|
+
await obj.patch({ test: 2 });
|
|
86
|
+
}
|
|
87
|
+
async createViews() {
|
|
88
|
+
const store = this.identStore;
|
|
89
|
+
let info = await store.getClient().query(`SELECT 'DROP VIEW ' || table_name || ';'
|
|
90
|
+
FROM information_schema.views
|
|
91
|
+
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
|
|
92
|
+
AND table_name !~ '^pg_';`);
|
|
93
|
+
store.getParameters().viewPrefix = "view_";
|
|
94
|
+
// Execute all the drop views
|
|
95
|
+
await store.createViews();
|
|
96
|
+
info = await store
|
|
97
|
+
.getClient()
|
|
98
|
+
.query("SELECT table_name FROM information_schema.views WHERE table_schema NOT IN ('pg_catalog', 'information_schema')");
|
|
99
|
+
assert.deepStrictEqual(info.rows.sort((a, b) => a.table_name.localeCompare(b.table_name)), [
|
|
100
|
+
{ table_name: "view_idents" },
|
|
101
|
+
{ table_name: "view_myidents" },
|
|
102
|
+
{ table_name: "view_mysimpleusers" },
|
|
103
|
+
{ table_name: "view_simpleusers" },
|
|
104
|
+
{ table_name: "view_testidents" },
|
|
105
|
+
{ table_name: "view_users" }
|
|
106
|
+
]);
|
|
107
|
+
store.getParameters().viewPrefix = "";
|
|
108
|
+
await store.createViews();
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
__decorate([
|
|
112
|
+
test
|
|
113
|
+
], PostgresTest.prototype, "deleteConcurrent", null);
|
|
114
|
+
__decorate([
|
|
115
|
+
test
|
|
116
|
+
], PostgresTest.prototype, "createTable", null);
|
|
117
|
+
__decorate([
|
|
118
|
+
test
|
|
119
|
+
], PostgresTest.prototype, "cov", null);
|
|
120
|
+
__decorate([
|
|
121
|
+
test
|
|
122
|
+
], PostgresTest.prototype, "stoppedPostgres", null);
|
|
123
|
+
__decorate([
|
|
124
|
+
test
|
|
125
|
+
], PostgresTest.prototype, "createViews", null);
|
|
126
|
+
PostgresTest = __decorate([
|
|
127
|
+
suite
|
|
128
|
+
], PostgresTest);
|
|
129
|
+
export { PostgresTest };
|
|
130
|
+
//# sourceMappingURL=postgresstore.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgresstore.spec.js","sourceRoot":"","sources":["../src/postgresstore.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/sqlstore.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CoreModel, ModelLink, Store, StoreParameters
|
|
1
|
+
import { CoreModel, ModelLink, Store, StoreParameters } from "@webda/core";
|
|
2
|
+
import * as WebdaQL from "@webda/ql";
|
|
2
3
|
export interface SQLDatabase {
|
|
3
4
|
name: string;
|
|
4
5
|
}
|
|
@@ -75,3 +76,4 @@ export declare abstract class SQLStore<T extends CoreModel, K extends SQLStorePa
|
|
|
75
76
|
_save(object: T): Promise<any>;
|
|
76
77
|
__clean(): Promise<void>;
|
|
77
78
|
}
|
|
79
|
+
//# sourceMappingURL=sqlstore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlstore.d.ts","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,SAAS,EACT,KAAK,EAEL,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,uBAAwB,SAAQ,OAAO,CAAC,oBAAoB;IACvE,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,MAAM;IAOzF,iBAAiB,IAAI,MAAM;CAW5B;AAED,8BAAsB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CAAE,SAAQ,KAAK,CAClH,CAAC,EACD,CAAC,CACF;IACC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAK1D;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEvE;;;;OAIG;IACH,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAWhC;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM;IAY3E,QAAQ,CAAC,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM;IAE5D,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;IA4BvE;;OAEG;IACG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;QACxC,OAAO,EAAE,CAAC,EAAE,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC;KAC5B,CAAC;IAuBF;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5C;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAQ9D;;OAEG;IACG,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAO3C;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;IAElG;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,GAAG,EAAE,uBAAuB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAajH,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IASzC;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ9B,OAAO;CAGd"}
|
package/lib/sqlstore.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Store, StoreNotFoundError, StoreParameters, UpdateConditionFailError
|
|
1
|
+
import { Store, StoreNotFoundError, StoreParameters, UpdateConditionFailError } from "@webda/core";
|
|
2
|
+
import * as WebdaQL from "@webda/ql";
|
|
2
3
|
export class SQLStoreParameters extends StoreParameters {
|
|
3
4
|
}
|
|
4
5
|
export class SQLComparisonExpression extends WebdaQL.ComparisonExpression {
|
|
@@ -49,7 +50,7 @@ export class SQLStore extends Store {
|
|
|
49
50
|
if (writeCondition) {
|
|
50
51
|
query += this.getQueryCondition(writeCondition, writeConditionField, args);
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
+
const res = await this.sqlQuery(query, args);
|
|
53
54
|
if (res.rowCount === 0 && writeCondition) {
|
|
54
55
|
throw new UpdateConditionFailError(uid, writeConditionField, writeCondition);
|
|
55
56
|
}
|
|
@@ -102,14 +103,14 @@ export class SQLStore extends Store {
|
|
|
102
103
|
* @override
|
|
103
104
|
*/
|
|
104
105
|
async _exists(uid) {
|
|
105
|
-
|
|
106
|
+
const res = await this.sqlQuery(`SELECT uuid FROM ${this.parameters.table} WHERE ${this.getModel().getUuidField()} = $1`, [this.getUuid(uid)]);
|
|
106
107
|
return res.rowCount === 1;
|
|
107
108
|
}
|
|
108
109
|
/**
|
|
109
110
|
* @override
|
|
110
111
|
*/
|
|
111
112
|
async _get(uid, raiseIfNotFound) {
|
|
112
|
-
|
|
113
|
+
const res = await this.sqlQuery(`${this.getModel().getUuidField()} = $1`, [this.getUuid(uid)]);
|
|
113
114
|
if (res.rowCount === 0 && raiseIfNotFound) {
|
|
114
115
|
throw new StoreNotFoundError(uid, this.getName());
|
|
115
116
|
}
|
|
@@ -133,7 +134,7 @@ export class SQLStore extends Store {
|
|
|
133
134
|
if (itemWriteCondition) {
|
|
134
135
|
q += this.getQueryCondition(itemWriteCondition, itemWriteConditionField, args);
|
|
135
136
|
}
|
|
136
|
-
|
|
137
|
+
const res = await this.sqlQuery(q, args);
|
|
137
138
|
if (res.rowCount === 0) {
|
|
138
139
|
throw new UpdateConditionFailError(uid, itemWriteConditionField, itemWriteCondition);
|
|
139
140
|
}
|
package/lib/sqlstore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlstore.js","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EACL,kBAAkB,EAClB,eAAe,EACf,wBAAwB,
|
|
1
|
+
{"version":3,"file":"sqlstore.js","sourceRoot":"","sources":["../src/sqlstore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webda/postgres",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-beta.2",
|
|
4
4
|
"description": "Implements Postgres on webda",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"postgres",
|
|
@@ -14,12 +14,15 @@
|
|
|
14
14
|
"build": "webda build",
|
|
15
15
|
"build:watch": "webda build --watch",
|
|
16
16
|
"pretest": "npm run build",
|
|
17
|
-
"lint": "
|
|
18
|
-
"lint:fix": "
|
|
19
|
-
"test": "c8 mocha"
|
|
17
|
+
"lint": "eslint",
|
|
18
|
+
"lint:fix": "eslint --fix",
|
|
19
|
+
"test": "c8 mocha",
|
|
20
|
+
"format": "prettier --check src/**/*",
|
|
21
|
+
"format:fix": "prettier --write src/**/*"
|
|
20
22
|
},
|
|
21
23
|
"dependencies": {
|
|
22
|
-
"@webda/core": "^
|
|
24
|
+
"@webda/core": "^4.0.0-beta.2",
|
|
25
|
+
"@webda/ql": "^4.0.0-beta.2",
|
|
23
26
|
"pg": "^8.7.1"
|
|
24
27
|
},
|
|
25
28
|
"files": [
|
|
@@ -47,12 +50,13 @@
|
|
|
47
50
|
"namespace": "Webda"
|
|
48
51
|
},
|
|
49
52
|
"devDependencies": {
|
|
50
|
-
"@types/node": "
|
|
51
|
-
"@webda/shell": "^
|
|
53
|
+
"@types/node": "20.0.0",
|
|
54
|
+
"@webda/shell": "^4.0.0-beta.2",
|
|
55
|
+
"tsx": "^4.17.0"
|
|
52
56
|
},
|
|
53
57
|
"type": "module",
|
|
54
58
|
"engines": {
|
|
55
|
-
"node": ">=
|
|
59
|
+
"node": ">=20.0.0"
|
|
56
60
|
},
|
|
57
61
|
"nx": {
|
|
58
62
|
"implicitDependencies": [
|
|
@@ -60,5 +64,6 @@
|
|
|
60
64
|
"@webda/shell"
|
|
61
65
|
]
|
|
62
66
|
},
|
|
63
|
-
"
|
|
67
|
+
"license": "LGPL-3.0-only",
|
|
68
|
+
"gitHead": "e992dcfb82cefa6cd5c61c54a0e63778b6f53d8e"
|
|
64
69
|
}
|
package/webda.module.json
CHANGED
|
@@ -76,15 +76,6 @@
|
|
|
76
76
|
"description": "Additional models\n\nAllow this store to manage other models",
|
|
77
77
|
"default": []
|
|
78
78
|
},
|
|
79
|
-
"asyncDelete": {
|
|
80
|
-
"type": "boolean",
|
|
81
|
-
"description": "async delete"
|
|
82
|
-
},
|
|
83
|
-
"expose": {
|
|
84
|
-
"$ref": "#/definitions/StoreExposeParameters",
|
|
85
|
-
"description": "Expose the service to an urls",
|
|
86
|
-
"deprecated": "will probably be removed in 4.0 in favor of Expose annotation"
|
|
87
|
-
},
|
|
88
79
|
"strict": {
|
|
89
80
|
"type": "boolean",
|
|
90
81
|
"description": "Allow to load object that does not have the type data\n\nIf set to true, then the Store will only managed the defined _model and no model extending this one",
|
|
@@ -170,7 +161,7 @@
|
|
|
170
161
|
"properties": {
|
|
171
162
|
"writable": {
|
|
172
163
|
"type": "boolean",
|
|
173
|
-
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored or ended."
|
|
164
|
+
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored, or ended."
|
|
174
165
|
},
|
|
175
166
|
"writableEnded": {
|
|
176
167
|
"type": "boolean",
|
|
@@ -202,7 +193,7 @@
|
|
|
202
193
|
},
|
|
203
194
|
"closed": {
|
|
204
195
|
"type": "boolean",
|
|
205
|
-
"description": "Is true after 'close' has been emitted."
|
|
196
|
+
"description": "Is `true` after `'close'` has been emitted."
|
|
206
197
|
},
|
|
207
198
|
"errored": {
|
|
208
199
|
"anyOf": [
|
|
@@ -232,7 +223,7 @@
|
|
|
232
223
|
},
|
|
233
224
|
"writableNeedDrain": {
|
|
234
225
|
"type": "boolean",
|
|
235
|
-
"description": "Is `true` if the stream's buffer has been full and stream will emit 'drain'
|
|
226
|
+
"description": "Is `true` if the stream's buffer has been full and stream will emit `'drain'`."
|
|
236
227
|
},
|
|
237
228
|
"readable": {
|
|
238
229
|
"type": "boolean",
|
|
@@ -282,7 +273,7 @@
|
|
|
282
273
|
},
|
|
283
274
|
"allowHalfOpen": {
|
|
284
275
|
"type": "boolean",
|
|
285
|
-
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `
|
|
276
|
+
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `true`.\n\nThis can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is emitted."
|
|
286
277
|
}
|
|
287
278
|
},
|
|
288
279
|
"required": [
|
|
@@ -694,7 +685,7 @@
|
|
|
694
685
|
]
|
|
695
686
|
}
|
|
696
687
|
],
|
|
697
|
-
"description": "Diffie
|
|
688
|
+
"description": "`'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. ECDHE-based perfect forward secrecy will still be available."
|
|
698
689
|
},
|
|
699
690
|
"ecdhCurve": {
|
|
700
691
|
"type": "string",
|
|
@@ -1020,7 +1011,7 @@
|
|
|
1020
1011
|
"properties": {
|
|
1021
1012
|
"writable": {
|
|
1022
1013
|
"type": "boolean",
|
|
1023
|
-
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored or ended."
|
|
1014
|
+
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored, or ended."
|
|
1024
1015
|
},
|
|
1025
1016
|
"writableEnded": {
|
|
1026
1017
|
"type": "boolean",
|
|
@@ -1052,7 +1043,7 @@
|
|
|
1052
1043
|
},
|
|
1053
1044
|
"closed": {
|
|
1054
1045
|
"type": "boolean",
|
|
1055
|
-
"description": "Is true after 'close' has been emitted."
|
|
1046
|
+
"description": "Is `true` after `'close'` has been emitted."
|
|
1056
1047
|
},
|
|
1057
1048
|
"errored": {
|
|
1058
1049
|
"anyOf": [
|
|
@@ -1082,7 +1073,7 @@
|
|
|
1082
1073
|
},
|
|
1083
1074
|
"writableNeedDrain": {
|
|
1084
1075
|
"type": "boolean",
|
|
1085
|
-
"description": "Is `true` if the stream's buffer has been full and stream will emit 'drain'
|
|
1076
|
+
"description": "Is `true` if the stream's buffer has been full and stream will emit `'drain'`."
|
|
1086
1077
|
},
|
|
1087
1078
|
"readable": {
|
|
1088
1079
|
"type": "boolean",
|
|
@@ -1132,7 +1123,7 @@
|
|
|
1132
1123
|
},
|
|
1133
1124
|
"allowHalfOpen": {
|
|
1134
1125
|
"type": "boolean",
|
|
1135
|
-
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `
|
|
1126
|
+
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `true`.\n\nThis can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is emitted."
|
|
1136
1127
|
}
|
|
1137
1128
|
},
|
|
1138
1129
|
"required": [
|
|
@@ -1266,7 +1257,7 @@
|
|
|
1266
1257
|
"properties": {
|
|
1267
1258
|
"writable": {
|
|
1268
1259
|
"type": "boolean",
|
|
1269
|
-
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored or ended."
|
|
1260
|
+
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored, or ended."
|
|
1270
1261
|
},
|
|
1271
1262
|
"writableEnded": {
|
|
1272
1263
|
"type": "boolean",
|
|
@@ -1298,7 +1289,7 @@
|
|
|
1298
1289
|
},
|
|
1299
1290
|
"closed": {
|
|
1300
1291
|
"type": "boolean",
|
|
1301
|
-
"description": "Is true after 'close' has been emitted."
|
|
1292
|
+
"description": "Is `true` after `'close'` has been emitted."
|
|
1302
1293
|
},
|
|
1303
1294
|
"errored": {
|
|
1304
1295
|
"anyOf": [
|
|
@@ -1328,7 +1319,7 @@
|
|
|
1328
1319
|
},
|
|
1329
1320
|
"writableNeedDrain": {
|
|
1330
1321
|
"type": "boolean",
|
|
1331
|
-
"description": "Is `true` if the stream's buffer has been full and stream will emit 'drain'
|
|
1322
|
+
"description": "Is `true` if the stream's buffer has been full and stream will emit `'drain'`."
|
|
1332
1323
|
},
|
|
1333
1324
|
"readable": {
|
|
1334
1325
|
"type": "boolean",
|
|
@@ -1378,7 +1369,7 @@
|
|
|
1378
1369
|
},
|
|
1379
1370
|
"allowHalfOpen": {
|
|
1380
1371
|
"type": "boolean",
|
|
1381
|
-
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `
|
|
1372
|
+
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `true`.\n\nThis can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is emitted."
|
|
1382
1373
|
}
|
|
1383
1374
|
},
|
|
1384
1375
|
"required": [
|
|
@@ -1790,7 +1781,7 @@
|
|
|
1790
1781
|
]
|
|
1791
1782
|
}
|
|
1792
1783
|
],
|
|
1793
|
-
"description": "Diffie
|
|
1784
|
+
"description": "`'auto'` or custom Diffie-Hellman parameters, required for non-ECDHE perfect forward secrecy. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available. ECDHE-based perfect forward secrecy will still be available."
|
|
1794
1785
|
},
|
|
1795
1786
|
"ecdhCurve": {
|
|
1796
1787
|
"type": "string",
|
|
@@ -2116,7 +2107,7 @@
|
|
|
2116
2107
|
"properties": {
|
|
2117
2108
|
"writable": {
|
|
2118
2109
|
"type": "boolean",
|
|
2119
|
-
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored or ended."
|
|
2110
|
+
"description": "Is `true` if it is safe to call `writable.write()`, which means the stream has not been destroyed, errored, or ended."
|
|
2120
2111
|
},
|
|
2121
2112
|
"writableEnded": {
|
|
2122
2113
|
"type": "boolean",
|
|
@@ -2148,7 +2139,7 @@
|
|
|
2148
2139
|
},
|
|
2149
2140
|
"closed": {
|
|
2150
2141
|
"type": "boolean",
|
|
2151
|
-
"description": "Is true after 'close' has been emitted."
|
|
2142
|
+
"description": "Is `true` after `'close'` has been emitted."
|
|
2152
2143
|
},
|
|
2153
2144
|
"errored": {
|
|
2154
2145
|
"anyOf": [
|
|
@@ -2178,7 +2169,7 @@
|
|
|
2178
2169
|
},
|
|
2179
2170
|
"writableNeedDrain": {
|
|
2180
2171
|
"type": "boolean",
|
|
2181
|
-
"description": "Is `true` if the stream's buffer has been full and stream will emit 'drain'
|
|
2172
|
+
"description": "Is `true` if the stream's buffer has been full and stream will emit `'drain'`."
|
|
2182
2173
|
},
|
|
2183
2174
|
"readable": {
|
|
2184
2175
|
"type": "boolean",
|
|
@@ -2228,7 +2219,7 @@
|
|
|
2228
2219
|
},
|
|
2229
2220
|
"allowHalfOpen": {
|
|
2230
2221
|
"type": "boolean",
|
|
2231
|
-
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `
|
|
2222
|
+
"description": "If `false` then the stream will automatically end the writable side when the readable side ends. Set initially by the `allowHalfOpen` constructor option, which defaults to `true`.\n\nThis can be changed manually to change the half-open behavior of an existing`Duplex` stream instance, but must be changed before the `'end'` event is emitted."
|
|
2232
2223
|
}
|
|
2233
2224
|
},
|
|
2234
2225
|
"required": [
|
|
@@ -2369,7 +2360,6 @@
|
|
|
2369
2360
|
}
|
|
2370
2361
|
},
|
|
2371
2362
|
"required": [
|
|
2372
|
-
"asyncDelete",
|
|
2373
2363
|
"database",
|
|
2374
2364
|
"slowQueryThreshold",
|
|
2375
2365
|
"table",
|
|
@@ -2377,53 +2367,6 @@
|
|
|
2377
2367
|
],
|
|
2378
2368
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
2379
2369
|
"definitions": {
|
|
2380
|
-
"StoreExposeParameters": {
|
|
2381
|
-
"type": "object",
|
|
2382
|
-
"properties": {
|
|
2383
|
-
"url": {
|
|
2384
|
-
"type": "string",
|
|
2385
|
-
"description": "URL endpoint to use to expose REST Resources API",
|
|
2386
|
-
"default": "service.getName().toLowerCase()"
|
|
2387
|
-
},
|
|
2388
|
-
"restrict": {
|
|
2389
|
-
"type": "object",
|
|
2390
|
-
"properties": {
|
|
2391
|
-
"create": {
|
|
2392
|
-
"type": "boolean",
|
|
2393
|
-
"description": "Do not expose the POST"
|
|
2394
|
-
},
|
|
2395
|
-
"update": {
|
|
2396
|
-
"type": "boolean",
|
|
2397
|
-
"description": "Do not expose the PUT and PATCH"
|
|
2398
|
-
},
|
|
2399
|
-
"get": {
|
|
2400
|
-
"type": "boolean",
|
|
2401
|
-
"description": "Do not expose the GET"
|
|
2402
|
-
},
|
|
2403
|
-
"delete": {
|
|
2404
|
-
"type": "boolean",
|
|
2405
|
-
"description": "Do not expose the DELETE"
|
|
2406
|
-
},
|
|
2407
|
-
"query": {
|
|
2408
|
-
"type": "boolean",
|
|
2409
|
-
"description": "Do not expose the query endpoint"
|
|
2410
|
-
}
|
|
2411
|
-
},
|
|
2412
|
-
"description": "You can restrict any part of the CRUD",
|
|
2413
|
-
"default": {}
|
|
2414
|
-
},
|
|
2415
|
-
"queryMethod": {
|
|
2416
|
-
"type": "string",
|
|
2417
|
-
"enum": [
|
|
2418
|
-
"PUT",
|
|
2419
|
-
"GET"
|
|
2420
|
-
],
|
|
2421
|
-
"description": "For confidentiality sometimes you might prefer to expose query through PUT To avoid GET logging",
|
|
2422
|
-
"default": "GET"
|
|
2423
|
-
}
|
|
2424
|
-
},
|
|
2425
|
-
"deprecated": "Store should not be exposed directly anymore\nYou should use the DomainService instead"
|
|
2426
|
-
},
|
|
2427
2370
|
"global.BufferEncoding": {
|
|
2428
2371
|
"type": "string",
|
|
2429
2372
|
"enum": [
|
package/test/config.json
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 2,
|
|
3
|
-
"parameters": {
|
|
4
|
-
"database": "webda.io",
|
|
5
|
-
"postgresqlServer": {
|
|
6
|
-
"host": "localhost",
|
|
7
|
-
"user": "webda.io",
|
|
8
|
-
"database": "webda.io",
|
|
9
|
-
"password": "webda.io",
|
|
10
|
-
"statement_timeout": 60000,
|
|
11
|
-
"max": 2
|
|
12
|
-
},
|
|
13
|
-
"usePool": true,
|
|
14
|
-
"sessionSecret": "Lp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5ENLp4B72FPU5n6q4EpVRGyPFnZp5cgLRPScVWixW52Yq84hD4MmnfVfgxKQ5EN"
|
|
15
|
-
},
|
|
16
|
-
"services": {
|
|
17
|
-
"ConsoleLogger": {
|
|
18
|
-
"type": "Webda/ConsoleLogger",
|
|
19
|
-
"logLevel": "INFO"
|
|
20
|
-
},
|
|
21
|
-
"IdentsMapper": {
|
|
22
|
-
"type": "Webda/Mapper",
|
|
23
|
-
"source": "idents",
|
|
24
|
-
"targetAttribute": "idents",
|
|
25
|
-
"target": "users",
|
|
26
|
-
"attribute": "_user",
|
|
27
|
-
"fields": "type,_lastUpdate,counter",
|
|
28
|
-
"cascade": true
|
|
29
|
-
},
|
|
30
|
-
"idents": {
|
|
31
|
-
"expose": {
|
|
32
|
-
"restrict": {
|
|
33
|
-
"create": true,
|
|
34
|
-
"update": true,
|
|
35
|
-
"get": true
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
"asyncDelete": true,
|
|
39
|
-
"type": "PostgresStore",
|
|
40
|
-
"table": "idents",
|
|
41
|
-
"model": "Webda/Ident"
|
|
42
|
-
},
|
|
43
|
-
"users": {
|
|
44
|
-
"expose": {
|
|
45
|
-
"url": "/users",
|
|
46
|
-
"restrict": {
|
|
47
|
-
"authentication": true,
|
|
48
|
-
"create": true
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"type": "PostgresStore",
|
|
52
|
-
"table": "users",
|
|
53
|
-
"model": "Webda/User"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|