remult 0.17.2 → 0.18.0
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/SseSubscriptionServer.d.ts +23 -0
- package/SseSubscriptionServer.js +143 -0
- package/ably.d.ts +13 -0
- package/ably.js +59 -0
- package/esm/SseSubscriptionServer.d.ts +23 -0
- package/esm/SseSubscriptionServer.js +102 -0
- package/esm/ably.d.ts +13 -0
- package/esm/ably.js +28 -0
- package/esm/graphql.js +0 -1
- package/esm/index.d.ts +7 -4
- package/esm/index.js +4 -2
- package/esm/live-query/data-provider-live-query-storage.d.ts +23 -0
- package/esm/live-query/data-provider-live-query-storage.js +78 -0
- package/esm/myLog.d.ts +1 -0
- package/esm/myLog.js +5 -0
- package/esm/postgres/postgres-data-provider.d.ts +4 -2
- package/esm/postgres/postgres-data-provider.js +18 -6
- package/esm/postgres/schema-builder.d.ts +2 -1
- package/esm/postgres/schema-builder.js +49 -29
- package/esm/remult-knex/index.d.ts +10 -32
- package/esm/remult-knex/index.js +75 -51
- package/esm/remult-mongo.d.ts +9 -2
- package/esm/remult-mongo.js +24 -8
- package/esm/remult-next.d.ts +11 -0
- package/esm/remult-next.js +27 -0
- package/esm/server/core.d.ts +2 -0
- package/esm/server/core.js +2 -0
- package/esm/server/expressBridge.d.ts +19 -7
- package/esm/server/expressBridge.js +135 -31
- package/esm/server/index.d.ts +2 -1
- package/esm/server/index.js +2 -1
- package/esm/server/initDataProvider.d.ts +2 -0
- package/esm/server/initDataProvider.js +14 -0
- package/esm/src/buildRestDataProvider.d.ts +31 -0
- package/esm/src/buildRestDataProvider.js +110 -0
- package/esm/src/column-interfaces.d.ts +44 -8
- package/esm/src/column.d.ts +3 -3
- package/esm/src/context.d.ts +39 -36
- package/esm/src/context.js +87 -117
- package/esm/src/data-api.d.ts +9 -3
- package/esm/src/data-api.js +130 -63
- package/esm/src/data-interfaces.d.ts +5 -1
- package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/esm/src/data-providers/array-entity-data-provider.js +2 -17
- package/esm/src/data-providers/rest-data-provider.d.ts +4 -3
- package/esm/src/data-providers/rest-data-provider.js +64 -23
- package/esm/src/data-providers/sql-database.d.ts +7 -3
- package/esm/src/data-providers/sql-database.js +60 -17
- package/esm/src/data-providers/web-sql-data-provider.d.ts +3 -0
- package/esm/src/data-providers/web-sql-data-provider.js +23 -9
- package/esm/src/entity.d.ts +2 -2
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
- package/esm/src/filter/filter-interfaces.d.ts +5 -5
- package/esm/src/filter/filter-interfaces.js +31 -26
- package/esm/src/live-query/LiveQueryClient.d.ts +1 -0
- package/esm/src/live-query/LiveQueryClient.js +184 -0
- package/esm/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/esm/src/live-query/SseSubscriptionClient.js +86 -0
- package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/esm/src/live-query/SubscriptionChannel.js +121 -0
- package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
- package/esm/src/live-query/SubscriptionServer.js +108 -0
- package/esm/src/remult-proxy.d.ts +1 -1
- package/esm/src/remult-proxy.js +52 -7
- package/esm/src/remult3/RepositoryImplementation.d.ts +14 -5
- package/esm/src/remult3/RepositoryImplementation.js +124 -44
- package/esm/src/remult3/getId.d.ts +2 -0
- package/esm/src/remult3/getId.js +7 -0
- package/esm/src/remult3/remult3.d.ts +67 -10
- package/esm/src/remult3/remult3.js +1 -0
- package/esm/src/server-action.d.ts +5 -1
- package/esm/src/server-action.js +11 -12
- package/esm/src/shared-tests/db-tests-setup.d.ts +12 -5
- package/esm/src/shared-tests/db-tests-setup.js +14 -6
- package/esm/src/shared-tests/db-tests.db-tests.js +71 -10
- package/esm/src/sort.d.ts +1 -0
- package/esm/src/sort.js +18 -0
- package/esm/src/sql-command.d.ts +5 -2
- package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
- package/esm/src/tests/entityForCustomFilter.js +20 -21
- package/esm/src/tests/frontend-database-tests-setup.spec.js +3 -4
- package/esm/src/tests/testHelper.spec.d.ts +3 -1
- package/esm/src/tests/testHelper.spec.js +63 -60
- package/esm/src/valueConverters.js +15 -7
- package/graphql.js +0 -1
- package/index.d.ts +7 -4
- package/index.js +7 -3
- package/live-query/data-provider-live-query-storage.d.ts +23 -0
- package/live-query/data-provider-live-query-storage.js +236 -0
- package/myLog.d.ts +1 -0
- package/myLog.js +20 -0
- package/package.json +18 -1
- package/postgres/postgres-data-provider.d.ts +4 -2
- package/postgres/postgres-data-provider.js +54 -39
- package/postgres/schema-builder.d.ts +2 -1
- package/postgres/schema-builder.js +118 -70
- package/remult-express.js +1 -1
- package/remult-knex/index.d.ts +10 -32
- package/remult-knex/index.js +134 -87
- package/remult-mongo.d.ts +9 -2
- package/remult-mongo.js +39 -7
- package/remult-next.d.ts +11 -0
- package/remult-next.js +73 -0
- package/server/JsonEntityFileStorage.js +2 -2
- package/server/core.d.ts +2 -0
- package/server/core.js +5 -1
- package/server/expressBridge.d.ts +19 -7
- package/server/expressBridge.js +283 -69
- package/server/index.d.ts +2 -1
- package/server/index.js +3 -1
- package/server/initDataProvider.d.ts +2 -0
- package/server/initDataProvider.js +26 -0
- package/src/buildRestDataProvider.d.ts +31 -0
- package/src/buildRestDataProvider.js +162 -0
- package/src/column-interfaces.d.ts +44 -8
- package/src/column.d.ts +3 -3
- package/src/context.d.ts +39 -36
- package/src/context.js +171 -166
- package/src/data-api.d.ts +9 -3
- package/src/data-api.js +233 -88
- package/src/data-interfaces.d.ts +5 -1
- package/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/src/data-providers/array-entity-data-provider.js +2 -17
- package/src/data-providers/rest-data-provider.d.ts +4 -3
- package/src/data-providers/rest-data-provider.js +105 -39
- package/src/data-providers/sql-database.d.ts +7 -3
- package/src/data-providers/sql-database.js +89 -16
- package/src/data-providers/web-sql-data-provider.d.ts +3 -0
- package/src/data-providers/web-sql-data-provider.js +56 -11
- package/src/entity.d.ts +2 -2
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
- package/src/filter/filter-interfaces.d.ts +5 -5
- package/src/filter/filter-interfaces.js +31 -26
- package/src/live-query/LiveQueryClient.d.ts +1 -0
- package/src/live-query/LiveQueryClient.js +283 -0
- package/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/src/live-query/SseSubscriptionClient.js +150 -0
- package/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/src/live-query/SubscriptionChannel.js +209 -0
- package/src/live-query/SubscriptionServer.d.ts +38 -0
- package/src/live-query/SubscriptionServer.js +258 -0
- package/src/remult-proxy.d.ts +1 -1
- package/src/remult-proxy.js +153 -8
- package/src/remult3/RepositoryImplementation.d.ts +14 -5
- package/src/remult3/RepositoryImplementation.js +200 -85
- package/src/remult3/getId.d.ts +2 -0
- package/src/remult3/getId.js +11 -0
- package/src/remult3/remult3.d.ts +67 -10
- package/src/remult3/remult3.js +1 -0
- package/src/server-action.d.ts +5 -1
- package/src/server-action.js +11 -11
- package/src/shared-tests/db-tests-setup.d.ts +12 -5
- package/src/shared-tests/db-tests-setup.js +17 -8
- package/src/shared-tests/db-tests.db-tests.js +140 -8
- package/src/sort.d.ts +1 -0
- package/src/sort.js +18 -0
- package/src/sql-command.d.ts +5 -2
- package/src/tests/entityForCustomFilter.d.ts +6 -6
- package/src/tests/entityForCustomFilter.js +30 -31
- package/src/tests/frontend-database-tests-setup.spec.js +5 -6
- package/src/tests/testHelper.spec.d.ts +3 -1
- package/src/tests/testHelper.spec.js +104 -100
- package/src/valueConverters.js +15 -7
package/server/expressBridge.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.RemultAsyncLocalStorage = exports.createRemultServerCore = void 0;
|
|
3
|
+
exports.JobsInQueueEntity = exports.EntityQueueStorage = exports.RemultServerImplementation = exports.RemultAsyncLocalStorage = exports.createRemultServerCore = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var server_action_1 = require("../src/server-action");
|
|
6
6
|
var data_api_1 = require("../src/data-api");
|
|
@@ -8,12 +8,19 @@ var context_1 = require("../src/context");
|
|
|
8
8
|
var remult3_1 = require("../src/remult3");
|
|
9
9
|
var id_entity_1 = require("../src/id-entity");
|
|
10
10
|
var remult_proxy_1 = require("../src/remult-proxy");
|
|
11
|
+
var SubscriptionServer_1 = require("../src/live-query/SubscriptionServer");
|
|
12
|
+
var SubscriptionChannel_1 = require("../src/live-query/SubscriptionChannel");
|
|
13
|
+
var initDataProvider_1 = require("./initDataProvider");
|
|
14
|
+
var SseSubscriptionServer_1 = require("../SseSubscriptionServer");
|
|
11
15
|
;
|
|
12
16
|
function createRemultServerCore(options) {
|
|
13
17
|
var _this = this;
|
|
14
18
|
if (!options) {
|
|
15
19
|
options = {};
|
|
16
20
|
}
|
|
21
|
+
if (!options.subscriptionServer) {
|
|
22
|
+
options.subscriptionServer = new SseSubscriptionServer_1.SseSubscriptionServer();
|
|
23
|
+
}
|
|
17
24
|
if (options.logApiEndPoints === undefined)
|
|
18
25
|
options.logApiEndPoints = true;
|
|
19
26
|
server_action_1.actionInfo.runningOnServer = true;
|
|
@@ -23,51 +30,116 @@ function createRemultServerCore(options) {
|
|
|
23
30
|
if (!options.queueStorage) {
|
|
24
31
|
options.queueStorage = new InMemoryQueueStorage();
|
|
25
32
|
}
|
|
26
|
-
var dataProvider;
|
|
27
|
-
if (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
else
|
|
31
|
-
dataProvider = Promise.resolve(options.dataProvider);
|
|
33
|
+
var dataProvider = initDataProvider_1.initDataProvider(options.dataProvider);
|
|
34
|
+
if (options.ensureSchema === undefined)
|
|
35
|
+
options.ensureSchema = true;
|
|
36
|
+
RemultAsyncLocalStorage.enable();
|
|
32
37
|
dataProvider = dataProvider.then(function (dp) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
38
|
+
var remult;
|
|
39
|
+
var _this = this;
|
|
33
40
|
return tslib_1.__generator(this, function (_a) {
|
|
34
41
|
switch (_a.label) {
|
|
35
42
|
case 0:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
remult = new context_1.Remult(dp);
|
|
44
|
+
return [4 /*yield*/, new Promise(function (res) {
|
|
45
|
+
RemultAsyncLocalStorage.instance.run(remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
46
|
+
var started_1, startConsoleLog, entitiesMetadata, _a, _b, item, e_1_1;
|
|
47
|
+
var e_1, _c;
|
|
48
|
+
return tslib_1.__generator(this, function (_d) {
|
|
49
|
+
switch (_d.label) {
|
|
50
|
+
case 0:
|
|
51
|
+
if (!options.ensureSchema) return [3 /*break*/, 10];
|
|
52
|
+
started_1 = false;
|
|
53
|
+
startConsoleLog = function () {
|
|
54
|
+
if (started_1)
|
|
55
|
+
return;
|
|
56
|
+
started_1 = true;
|
|
57
|
+
console.time("Ensure Schema");
|
|
58
|
+
};
|
|
59
|
+
if (!dp.ensureSchema) return [3 /*break*/, 2];
|
|
60
|
+
startConsoleLog();
|
|
61
|
+
entitiesMetadata = options.entities.map(function (e) { return remult.repo(e).metadata; });
|
|
62
|
+
return [4 /*yield*/, dp.ensureSchema(entitiesMetadata)];
|
|
63
|
+
case 1:
|
|
64
|
+
_d.sent();
|
|
65
|
+
_d.label = 2;
|
|
66
|
+
case 2:
|
|
67
|
+
_d.trys.push([2, 7, 8, 9]);
|
|
68
|
+
_a = tslib_1.__values([options.liveQueryStorage, options.queueStorage]), _b = _a.next();
|
|
69
|
+
_d.label = 3;
|
|
70
|
+
case 3:
|
|
71
|
+
if (!!_b.done) return [3 /*break*/, 6];
|
|
72
|
+
item = _b.value;
|
|
73
|
+
if (!(item === null || item === void 0 ? void 0 : item.ensureSchema)) return [3 /*break*/, 5];
|
|
74
|
+
startConsoleLog();
|
|
75
|
+
return [4 /*yield*/, item.ensureSchema()];
|
|
76
|
+
case 4:
|
|
77
|
+
_d.sent();
|
|
78
|
+
_d.label = 5;
|
|
79
|
+
case 5:
|
|
80
|
+
_b = _a.next();
|
|
81
|
+
return [3 /*break*/, 3];
|
|
82
|
+
case 6: return [3 /*break*/, 9];
|
|
83
|
+
case 7:
|
|
84
|
+
e_1_1 = _d.sent();
|
|
85
|
+
e_1 = { error: e_1_1 };
|
|
86
|
+
return [3 /*break*/, 9];
|
|
87
|
+
case 8:
|
|
88
|
+
try {
|
|
89
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
90
|
+
}
|
|
91
|
+
finally { if (e_1) throw e_1.error; }
|
|
92
|
+
return [7 /*endfinally*/];
|
|
93
|
+
case 9:
|
|
94
|
+
if (started_1)
|
|
95
|
+
console.timeEnd("Ensure Schema");
|
|
96
|
+
_d.label = 10;
|
|
97
|
+
case 10:
|
|
98
|
+
if (!options.initApi) return [3 /*break*/, 12];
|
|
99
|
+
return [4 /*yield*/, options.initApi(remult)];
|
|
100
|
+
case 11:
|
|
101
|
+
_d.sent();
|
|
102
|
+
_d.label = 12;
|
|
103
|
+
case 12:
|
|
104
|
+
res({});
|
|
105
|
+
return [2 /*return*/];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}); });
|
|
109
|
+
})];
|
|
110
|
+
case 1:
|
|
111
|
+
_a.sent();
|
|
112
|
+
return [2 /*return*/, dp];
|
|
40
113
|
}
|
|
41
114
|
});
|
|
42
115
|
}); });
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
case 0: return [4 /*yield*/, options.initApi(remult)];
|
|
57
|
-
case 1:
|
|
58
|
-
_a.sent();
|
|
59
|
-
res({});
|
|
60
|
-
return [2 /*return*/];
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}); });
|
|
64
|
-
})];
|
|
65
|
-
case 1:
|
|
66
|
-
_a.sent();
|
|
67
|
-
return [2 /*return*/, dp];
|
|
116
|
+
if (!options.requestSerializer) {
|
|
117
|
+
options.requestSerializer = {
|
|
118
|
+
toJson: function (x) {
|
|
119
|
+
var e_2, _a;
|
|
120
|
+
var r = {
|
|
121
|
+
url: x.url
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
for (var _b = tslib_1.__values(['session', 'auth', 'user']), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
125
|
+
var key = _c.value;
|
|
126
|
+
if (x[key])
|
|
127
|
+
r[key] = x[key];
|
|
128
|
+
}
|
|
68
129
|
}
|
|
69
|
-
|
|
70
|
-
|
|
130
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
131
|
+
finally {
|
|
132
|
+
try {
|
|
133
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
134
|
+
}
|
|
135
|
+
finally { if (e_2) throw e_2.error; }
|
|
136
|
+
}
|
|
137
|
+
return r;
|
|
138
|
+
},
|
|
139
|
+
fromJson: function (x) {
|
|
140
|
+
return x;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
71
143
|
}
|
|
72
144
|
{
|
|
73
145
|
var allControllers = [];
|
|
@@ -119,16 +191,90 @@ var RemultAsyncLocalStorage = /** @class */ (function () {
|
|
|
119
191
|
return RemultAsyncLocalStorage;
|
|
120
192
|
}());
|
|
121
193
|
exports.RemultAsyncLocalStorage = RemultAsyncLocalStorage;
|
|
194
|
+
/* @internal*/
|
|
122
195
|
var RemultServerImplementation = /** @class */ (function () {
|
|
123
196
|
function RemultServerImplementation(queue, options, dataProvider) {
|
|
197
|
+
var _this = this;
|
|
124
198
|
this.queue = queue;
|
|
125
199
|
this.options = options;
|
|
126
200
|
this.dataProvider = dataProvider;
|
|
201
|
+
this.liveQueryStorage = new SubscriptionServer_1.InMemoryLiveQueryStorage();
|
|
202
|
+
this.runWithRequest = function (req, entityKey, what) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
203
|
+
var _loop_1, _a, _b, e, state_1, e_3_1;
|
|
204
|
+
var e_3, _c;
|
|
205
|
+
var _this = this;
|
|
206
|
+
return tslib_1.__generator(this, function (_d) {
|
|
207
|
+
switch (_d.label) {
|
|
208
|
+
case 0:
|
|
209
|
+
_loop_1 = function (e) {
|
|
210
|
+
var key;
|
|
211
|
+
return tslib_1.__generator(this, function (_a) {
|
|
212
|
+
switch (_a.label) {
|
|
213
|
+
case 0:
|
|
214
|
+
key = remult3_1.getEntityKey(e);
|
|
215
|
+
if (!(key === entityKey)) return [3 /*break*/, 2];
|
|
216
|
+
return [4 /*yield*/, new Promise(function (result) {
|
|
217
|
+
_this.withRemult(_this.options.requestSerializer.fromJson(req), undefined, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
218
|
+
return tslib_1.__generator(this, function (_a) {
|
|
219
|
+
switch (_a.label) {
|
|
220
|
+
case 0: return [4 /*yield*/, what(remult_proxy_1.remult.repo(e))];
|
|
221
|
+
case 1:
|
|
222
|
+
_a.sent();
|
|
223
|
+
result({});
|
|
224
|
+
return [2 /*return*/];
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}); });
|
|
228
|
+
})];
|
|
229
|
+
case 1:
|
|
230
|
+
_a.sent();
|
|
231
|
+
return [2 /*return*/, { value: void 0 }];
|
|
232
|
+
case 2: return [2 /*return*/];
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
};
|
|
236
|
+
_d.label = 1;
|
|
237
|
+
case 1:
|
|
238
|
+
_d.trys.push([1, 6, 7, 8]);
|
|
239
|
+
_a = tslib_1.__values(this.options.entities), _b = _a.next();
|
|
240
|
+
_d.label = 2;
|
|
241
|
+
case 2:
|
|
242
|
+
if (!!_b.done) return [3 /*break*/, 5];
|
|
243
|
+
e = _b.value;
|
|
244
|
+
return [5 /*yield**/, _loop_1(e)];
|
|
245
|
+
case 3:
|
|
246
|
+
state_1 = _d.sent();
|
|
247
|
+
if (typeof state_1 === "object")
|
|
248
|
+
return [2 /*return*/, state_1.value];
|
|
249
|
+
_d.label = 4;
|
|
250
|
+
case 4:
|
|
251
|
+
_b = _a.next();
|
|
252
|
+
return [3 /*break*/, 2];
|
|
253
|
+
case 5: return [3 /*break*/, 8];
|
|
254
|
+
case 6:
|
|
255
|
+
e_3_1 = _d.sent();
|
|
256
|
+
e_3 = { error: e_3_1 };
|
|
257
|
+
return [3 /*break*/, 8];
|
|
258
|
+
case 7:
|
|
259
|
+
try {
|
|
260
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
261
|
+
}
|
|
262
|
+
finally { if (e_3) throw e_3.error; }
|
|
263
|
+
return [7 /*endfinally*/];
|
|
264
|
+
case 8: throw new Error("Couldn't find entity " + entityKey);
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
}); };
|
|
127
268
|
this.registeredRouter = false;
|
|
128
269
|
this.hasQueue = false;
|
|
129
270
|
/* internal */
|
|
130
271
|
this.backendMethodsOpenApi = [];
|
|
272
|
+
if (options.liveQueryStorage)
|
|
273
|
+
this.liveQueryStorage = options.liveQueryStorage;
|
|
274
|
+
if (options.subscriptionServer)
|
|
275
|
+
this.subscriptionServer = options.subscriptionServer;
|
|
131
276
|
}
|
|
277
|
+
;
|
|
132
278
|
RemultServerImplementation.prototype.withRemult = function (req, res, next) {
|
|
133
279
|
var _this = this;
|
|
134
280
|
this.process(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
@@ -136,15 +282,18 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
136
282
|
return [2 /*return*/];
|
|
137
283
|
}); }); })(req, res);
|
|
138
284
|
};
|
|
139
|
-
RemultServerImplementation.prototype.
|
|
285
|
+
RemultServerImplementation.prototype.getRouteImpl = function () {
|
|
140
286
|
if (!this.routeImpl) {
|
|
141
287
|
this.routeImpl = new RouteImplementation();
|
|
142
288
|
this.registerRouter(this.routeImpl);
|
|
143
289
|
}
|
|
144
|
-
return this.routeImpl
|
|
290
|
+
return this.routeImpl;
|
|
291
|
+
};
|
|
292
|
+
RemultServerImplementation.prototype.handle = function (req, gRes) {
|
|
293
|
+
return this.getRouteImpl().handle(req, gRes);
|
|
145
294
|
};
|
|
146
295
|
RemultServerImplementation.prototype.registerRouter = function (r) {
|
|
147
|
-
var
|
|
296
|
+
var e_4, _a, e_5, _b;
|
|
148
297
|
var _this = this;
|
|
149
298
|
if (this.registeredRouter)
|
|
150
299
|
throw "Router already registered";
|
|
@@ -156,7 +305,7 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
156
305
|
var z = c[server_action_1.classBackendMethodsArray];
|
|
157
306
|
if (z)
|
|
158
307
|
try {
|
|
159
|
-
for (var z_1 = (
|
|
308
|
+
for (var z_1 = (e_5 = void 0, tslib_1.__values(z)), z_1_1 = z_1.next(); !z_1_1.done; z_1_1 = z_1.next()) {
|
|
160
309
|
var a = z_1_1.value;
|
|
161
310
|
var x = a[server_action_1.serverActionField];
|
|
162
311
|
if (!x) {
|
|
@@ -165,21 +314,21 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
165
314
|
this.addAction(x, r);
|
|
166
315
|
}
|
|
167
316
|
}
|
|
168
|
-
catch (
|
|
317
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
169
318
|
finally {
|
|
170
319
|
try {
|
|
171
320
|
if (z_1_1 && !z_1_1.done && (_b = z_1.return)) _b.call(z_1);
|
|
172
321
|
}
|
|
173
|
-
finally { if (
|
|
322
|
+
finally { if (e_5) throw e_5.error; }
|
|
174
323
|
}
|
|
175
324
|
}
|
|
176
325
|
}
|
|
177
|
-
catch (
|
|
326
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
178
327
|
finally {
|
|
179
328
|
try {
|
|
180
329
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
181
330
|
}
|
|
182
|
-
finally { if (
|
|
331
|
+
finally { if (e_4) throw e_4.error; }
|
|
183
332
|
}
|
|
184
333
|
if (this.hasQueue)
|
|
185
334
|
this.addAction({
|
|
@@ -207,6 +356,40 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
207
356
|
},
|
|
208
357
|
doWork: undefined
|
|
209
358
|
}, r);
|
|
359
|
+
if (this.options.subscriptionServer instanceof SseSubscriptionServer_1.SseSubscriptionServer) {
|
|
360
|
+
var streamPath = this.options.rootPath + '/' + SubscriptionChannel_1.streamUrl;
|
|
361
|
+
r.route(streamPath).get(this.process(function (remult, req, res, origReq, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
362
|
+
return tslib_1.__generator(this, function (_a) {
|
|
363
|
+
remult.subscriptionServer.openHttpServerStream(origReq, origRes);
|
|
364
|
+
return [2 /*return*/];
|
|
365
|
+
});
|
|
366
|
+
}); }));
|
|
367
|
+
r.route(streamPath + '/subscribe').post(this.process(function (remult, req, res, origReq, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
368
|
+
return tslib_1.__generator(this, function (_a) {
|
|
369
|
+
remult.subscriptionServer.subscribeToChannel(origReq.body, res, remult);
|
|
370
|
+
return [2 /*return*/];
|
|
371
|
+
});
|
|
372
|
+
}); }));
|
|
373
|
+
r.route(streamPath + '/unsubscribe').post(this.process(function (remult, req, res, origReq, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
374
|
+
return tslib_1.__generator(this, function (_a) {
|
|
375
|
+
remult.subscriptionServer.subscribeToChannel(origReq.body, res, remult, true);
|
|
376
|
+
return [2 /*return*/];
|
|
377
|
+
});
|
|
378
|
+
}); }));
|
|
379
|
+
}
|
|
380
|
+
r.route(this.options.rootPath + '/' + SubscriptionChannel_1.liveQueryKeepAliveRoute).post(this.process(function (remult, req, res, origReq, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
381
|
+
var _a, _b;
|
|
382
|
+
return tslib_1.__generator(this, function (_c) {
|
|
383
|
+
switch (_c.label) {
|
|
384
|
+
case 0:
|
|
385
|
+
_b = (_a = res).success;
|
|
386
|
+
return [4 /*yield*/, remult.liveQueryStorage.keepAliveAndReturnUnknownQueryIds(origReq.body)];
|
|
387
|
+
case 1:
|
|
388
|
+
_b.apply(_a, [_c.sent()]);
|
|
389
|
+
return [2 /*return*/];
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
}); }));
|
|
210
393
|
}
|
|
211
394
|
this.options.entities.forEach(function (e) {
|
|
212
395
|
var key = remult3_1.getEntityKey(e);
|
|
@@ -220,19 +403,22 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
220
403
|
var _this = this;
|
|
221
404
|
var myRoute = this.options.rootPath + '/' + key;
|
|
222
405
|
if (this.options.logApiEndPoints)
|
|
223
|
-
console.
|
|
406
|
+
console.info("[remult] " + myRoute);
|
|
224
407
|
r.route(myRoute)
|
|
225
|
-
.get(this.process(function (c, req, res) {
|
|
226
|
-
return dataApiFactory(c).httpGet(res, req);
|
|
408
|
+
.get(this.process(function (c, req, res, orig) {
|
|
409
|
+
return dataApiFactory(c).httpGet(res, req, function () { return _this.options.requestSerializer.toJson(orig); });
|
|
227
410
|
})).put(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
228
411
|
return [2 /*return*/, dataApiFactory(c).put(res, '', orig.body)];
|
|
229
412
|
}); }); }))
|
|
230
413
|
.delete(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
231
414
|
return [2 /*return*/, dataApiFactory(c).delete(res, '')];
|
|
232
415
|
}); }); }))
|
|
233
|
-
.post(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
234
|
-
|
|
235
|
-
|
|
416
|
+
.post(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
417
|
+
var _this = this;
|
|
418
|
+
return tslib_1.__generator(this, function (_a) {
|
|
419
|
+
return [2 /*return*/, dataApiFactory(c).httpPost(res, req, orig.body, function () { return _this.options.requestSerializer.toJson(orig); })];
|
|
420
|
+
});
|
|
421
|
+
}); }));
|
|
236
422
|
r.route(myRoute + '/:id')
|
|
237
423
|
//@ts-ignore
|
|
238
424
|
.get(this.process(function (c, req, res, orig) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
@@ -249,19 +435,22 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
249
435
|
};
|
|
250
436
|
RemultServerImplementation.prototype.process = function (what) {
|
|
251
437
|
var _this = this;
|
|
252
|
-
return function (req,
|
|
438
|
+
return function (req, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
253
439
|
var myReq, myRes, remult, _a;
|
|
254
440
|
var _this = this;
|
|
255
441
|
return tslib_1.__generator(this, function (_b) {
|
|
256
442
|
switch (_b.label) {
|
|
257
443
|
case 0:
|
|
258
444
|
myReq = new ExpressRequestBridgeToDataApiRequest(req);
|
|
259
|
-
myRes = new ExpressResponseBridgeToDataApiResponse(
|
|
445
|
+
myRes = new ExpressResponseBridgeToDataApiResponse(origRes, req);
|
|
260
446
|
remult = new context_1.Remult();
|
|
447
|
+
remult.liveQueryPublisher = new SubscriptionServer_1.LiveQueryPublisher(function () { return remult.subscriptionServer; }, function () { return remult.liveQueryStorage; }, this.runWithRequest);
|
|
261
448
|
_a = remult;
|
|
262
449
|
return [4 /*yield*/, this.dataProvider];
|
|
263
450
|
case 1:
|
|
264
451
|
_a.dataProvider = (_b.sent());
|
|
452
|
+
remult.subscriptionServer = this.subscriptionServer;
|
|
453
|
+
remult.liveQueryStorage = this.liveQueryStorage;
|
|
265
454
|
return [4 /*yield*/, new Promise(function (res) {
|
|
266
455
|
RemultAsyncLocalStorage.instance.run(remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
267
456
|
var user;
|
|
@@ -286,11 +475,19 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
286
475
|
_a.label = 4;
|
|
287
476
|
case 4:
|
|
288
477
|
if (!this.options.initRequest) return [3 /*break*/, 6];
|
|
289
|
-
return [4 /*yield*/, this.options.initRequest(
|
|
478
|
+
return [4 /*yield*/, this.options.initRequest(req, {
|
|
479
|
+
remult: remult,
|
|
480
|
+
get liveQueryStorage() {
|
|
481
|
+
return remult.liveQueryStorage;
|
|
482
|
+
},
|
|
483
|
+
set liveQueryStorage(value) {
|
|
484
|
+
remult.liveQueryStorage = value;
|
|
485
|
+
}
|
|
486
|
+
})];
|
|
290
487
|
case 5:
|
|
291
488
|
_a.sent();
|
|
292
489
|
_a.label = 6;
|
|
293
|
-
case 6: return [4 /*yield*/, what(remult, myReq, myRes, req)];
|
|
490
|
+
case 6: return [4 /*yield*/, what(remult, myReq, myRes, req, origRes)];
|
|
294
491
|
case 7:
|
|
295
492
|
_a.sent();
|
|
296
493
|
res({});
|
|
@@ -339,7 +536,7 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
339
536
|
})();
|
|
340
537
|
_this.backendMethodsOpenApi.push({ path: myUrl, allowed: allowed, tag: tag });
|
|
341
538
|
if (_this.options.logApiEndPoints)
|
|
342
|
-
console.
|
|
539
|
+
console.info("[remult] " + myUrl);
|
|
343
540
|
if (queue) {
|
|
344
541
|
_this.hasQueue = true;
|
|
345
542
|
_this.queue.mapQueuedAction(myUrl, what);
|
|
@@ -366,7 +563,7 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
366
563
|
});
|
|
367
564
|
};
|
|
368
565
|
RemultServerImplementation.prototype.openApiDoc = function (options) {
|
|
369
|
-
var
|
|
566
|
+
var e_6, _a, e_7, _b;
|
|
370
567
|
var r = new context_1.Remult();
|
|
371
568
|
if (!options.version)
|
|
372
569
|
options.version = "1.0.0";
|
|
@@ -416,15 +613,15 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
416
613
|
return item;
|
|
417
614
|
}
|
|
418
615
|
};
|
|
419
|
-
var
|
|
420
|
-
var
|
|
616
|
+
var _loop_2 = function (e) {
|
|
617
|
+
var e_8, _a;
|
|
421
618
|
var meta = r.repo(e).metadata;
|
|
422
619
|
var key = remult3_1.getEntityKey(e);
|
|
423
620
|
var parameters = [];
|
|
424
621
|
if (key) {
|
|
425
622
|
var properties = {};
|
|
426
623
|
try {
|
|
427
|
-
for (var _b = (
|
|
624
|
+
for (var _b = (e_8 = void 0, tslib_1.__values(meta.fields)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
428
625
|
var f = _c.value;
|
|
429
626
|
var type = f.valueType == String ? "string" :
|
|
430
627
|
f.valueType == Boolean ? "boolean" :
|
|
@@ -452,12 +649,12 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
452
649
|
});
|
|
453
650
|
}
|
|
454
651
|
}
|
|
455
|
-
catch (
|
|
652
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
456
653
|
finally {
|
|
457
654
|
try {
|
|
458
655
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
459
656
|
}
|
|
460
|
-
finally { if (
|
|
657
|
+
finally { if (e_8) throw e_8.error; }
|
|
461
658
|
}
|
|
462
659
|
spec.components.schemas[key] = {
|
|
463
660
|
type: "object",
|
|
@@ -597,15 +794,15 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
597
794
|
try {
|
|
598
795
|
for (var _c = tslib_1.__values(this.options.entities), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
599
796
|
var e = _d.value;
|
|
600
|
-
|
|
797
|
+
_loop_2(e);
|
|
601
798
|
}
|
|
602
799
|
}
|
|
603
|
-
catch (
|
|
800
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
604
801
|
finally {
|
|
605
802
|
try {
|
|
606
803
|
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
607
804
|
}
|
|
608
|
-
finally { if (
|
|
805
|
+
finally { if (e_6) throw e_6.error; }
|
|
609
806
|
}
|
|
610
807
|
try {
|
|
611
808
|
for (var _e = tslib_1.__values(this.backendMethodsOpenApi), _f = _e.next(); !_f.done; _f = _e.next()) {
|
|
@@ -648,12 +845,12 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
648
845
|
};
|
|
649
846
|
}
|
|
650
847
|
}
|
|
651
|
-
catch (
|
|
848
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
652
849
|
finally {
|
|
653
850
|
try {
|
|
654
851
|
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
655
852
|
}
|
|
656
|
-
finally { if (
|
|
853
|
+
finally { if (e_7) throw e_7.error; }
|
|
657
854
|
}
|
|
658
855
|
spec.components.schemas["InvalidResponse"] = {
|
|
659
856
|
"type": "object",
|
|
@@ -670,6 +867,7 @@ var RemultServerImplementation = /** @class */ (function () {
|
|
|
670
867
|
};
|
|
671
868
|
return RemultServerImplementation;
|
|
672
869
|
}());
|
|
870
|
+
exports.RemultServerImplementation = RemultServerImplementation;
|
|
673
871
|
var ExpressRequestBridgeToDataApiRequest = /** @class */ (function () {
|
|
674
872
|
function ExpressRequestBridgeToDataApiRequest(r) {
|
|
675
873
|
this.r = r;
|
|
@@ -740,7 +938,11 @@ var inProcessQueueHandler = /** @class */ (function () {
|
|
|
740
938
|
this.actions.get(url)(body, req, {
|
|
741
939
|
error: function (error) { return job.setErrorResult(data_api_1.serializeError(error)); },
|
|
742
940
|
success: function (result) { return job.setResult(result); },
|
|
743
|
-
progress: function (progress) { return job.setProgress(progress); }
|
|
941
|
+
progress: function (progress) { return job.setProgress(progress); },
|
|
942
|
+
created: function () { throw Error("Created response not expected for queue"); },
|
|
943
|
+
deleted: function () { throw Error("deleted response not expected for queue"); },
|
|
944
|
+
notFound: function () { throw Error("notFound response not expected for queue"); },
|
|
945
|
+
forbidden: function () { return job.setErrorResult("Forbidden"); }
|
|
744
946
|
});
|
|
745
947
|
return [2 /*return*/, id];
|
|
746
948
|
}
|
|
@@ -954,6 +1156,18 @@ var RouteImplementation = /** @class */ (function () {
|
|
|
954
1156
|
function class_1() {
|
|
955
1157
|
this.statusCode = 200;
|
|
956
1158
|
}
|
|
1159
|
+
class_1.prototype.write = function (data) {
|
|
1160
|
+
gRes.write(data);
|
|
1161
|
+
};
|
|
1162
|
+
class_1.prototype.writeHead = function (statusCode, headers) {
|
|
1163
|
+
gRes.writeHead(statusCode, headers);
|
|
1164
|
+
this.statusCode = statusCode;
|
|
1165
|
+
res({ statusCode: statusCode });
|
|
1166
|
+
};
|
|
1167
|
+
class_1.prototype.flush = function () {
|
|
1168
|
+
if (gRes.flush)
|
|
1169
|
+
gRes.flush();
|
|
1170
|
+
};
|
|
957
1171
|
class_1.prototype.json = function (data) {
|
|
958
1172
|
if (gRes !== undefined)
|
|
959
1173
|
gRes.json(data);
|
package/server/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GenericRequest, RemultServer, RemultServerOptions } from './expressBridge';
|
|
2
|
-
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer } from './expressBridge';
|
|
2
|
+
export { queuedJobInfo, QueueStorage, GenericRequest, GenericRequestHandler, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions } from './expressBridge';
|
|
3
3
|
export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
|
|
4
|
+
export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
|
|
4
5
|
export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
package/server/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createRemultServer = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
|
|
3
|
+
exports.createRemultServer = exports.DataProviderLiveQueryStorage = exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
|
|
4
4
|
var expressBridge_1 = require("./expressBridge");
|
|
5
5
|
var initAsyncHooks_1 = require("./initAsyncHooks");
|
|
6
6
|
var JsonEntityFileStorage_1 = require("./JsonEntityFileStorage");
|
|
7
7
|
Object.defineProperty(exports, "JsonEntityFileStorage", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonEntityFileStorage; } });
|
|
8
8
|
Object.defineProperty(exports, "JsonFileDataProvider", { enumerable: true, get: function () { return JsonEntityFileStorage_1.JsonFileDataProvider; } });
|
|
9
|
+
var data_provider_live_query_storage_1 = require("../live-query/data-provider-live-query-storage");
|
|
10
|
+
Object.defineProperty(exports, "DataProviderLiveQueryStorage", { enumerable: true, get: function () { return data_provider_live_query_storage_1.DataProviderLiveQueryStorage; } });
|
|
9
11
|
function createRemultServer(options) {
|
|
10
12
|
initAsyncHooks_1.initAsyncHooks();
|
|
11
13
|
return expressBridge_1.createRemultServerCore(options);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initDataProvider = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
function initDataProvider(optionsDataProvider) {
|
|
6
|
+
var _this = this;
|
|
7
|
+
var dataProvider;
|
|
8
|
+
if (typeof optionsDataProvider === "function") {
|
|
9
|
+
dataProvider = optionsDataProvider();
|
|
10
|
+
}
|
|
11
|
+
else
|
|
12
|
+
dataProvider = Promise.resolve(optionsDataProvider);
|
|
13
|
+
dataProvider = dataProvider.then(function (dp) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
14
|
+
return tslib_1.__generator(this, function (_a) {
|
|
15
|
+
switch (_a.label) {
|
|
16
|
+
case 0:
|
|
17
|
+
if (dp)
|
|
18
|
+
return [2 /*return*/, dp];
|
|
19
|
+
return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('./JsonEntityFileStorage')); })];
|
|
20
|
+
case 1: return [2 /*return*/, new (_a.sent()).JsonFileDataProvider('./db')];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}); });
|
|
24
|
+
return dataProvider;
|
|
25
|
+
}
|
|
26
|
+
exports.initDataProvider = initDataProvider;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { RestDataProviderHttpProvider } from "./data-interfaces";
|
|
2
|
+
import { RestDataProviderHttpProviderUsingFetch } from './data-providers/rest-data-provider';
|
|
3
|
+
export declare function buildRestDataProvider(provider: ExternalHttpProvider | typeof fetch): RestDataProviderHttpProviderUsingFetch | RestDataProviderHttpProvider;
|
|
4
|
+
export declare function isExternalHttpProvider(item: any): boolean;
|
|
5
|
+
export declare class HttpProviderBridgeToRestDataProviderHttpProvider implements RestDataProviderHttpProvider {
|
|
6
|
+
private http;
|
|
7
|
+
constructor(http: ExternalHttpProvider);
|
|
8
|
+
post(url: string, data: any): Promise<any>;
|
|
9
|
+
delete(url: string): Promise<void>;
|
|
10
|
+
put(url: string, data: any): Promise<any>;
|
|
11
|
+
get(url: string): Promise<any>;
|
|
12
|
+
}
|
|
13
|
+
export declare function retry<T>(what: () => Promise<T>): Promise<T>;
|
|
14
|
+
export declare function toPromise<T>(p: Promise<T> | {
|
|
15
|
+
toPromise(): Promise<T>;
|
|
16
|
+
}): Promise<any>;
|
|
17
|
+
export declare function processHttpException(ex: any): Promise<any>;
|
|
18
|
+
export interface ExternalHttpProvider {
|
|
19
|
+
post(url: string, data: any): Promise<any> | {
|
|
20
|
+
toPromise(): Promise<any>;
|
|
21
|
+
};
|
|
22
|
+
delete(url: string): Promise<void> | {
|
|
23
|
+
toPromise(): Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
put(url: string, data: any): Promise<any> | {
|
|
26
|
+
toPromise(): Promise<any>;
|
|
27
|
+
};
|
|
28
|
+
get(url: string): Promise<any> | {
|
|
29
|
+
toPromise(): Promise<any>;
|
|
30
|
+
};
|
|
31
|
+
}
|