remult 0.20.0-exp.1 → 0.20.0-exp.10

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.
@@ -3,7 +3,7 @@ export function remultNext(options) {
3
3
  let result = createRemultServer(options, {
4
4
  buildGenericRequest: req => req
5
5
  });
6
- return Object.assign((req, res) => result.handle(req, res), result, {
6
+ return Object.assign((req, res) => result.handle(req, res).then(() => { }), result, {
7
7
  getRemult: (...args) => result.getRemult(...args),
8
8
  handle: (...args) => result.handle(...args),
9
9
  openApiDoc: (...args) => result.openApiDoc(...args),
@@ -0,0 +1,3 @@
1
+ import type { RequestEvent, Handle } from '@sveltejs/kit';
2
+ import { RemultServer, RemultServerOptions } from './server';
3
+ export declare function remultSveltekit(options?: RemultServerOptions<RequestEvent>): RemultServer<RequestEvent> & Handle;
@@ -0,0 +1,83 @@
1
+ import { createRemultServer } from './server';
2
+ export function remultSveltekit(options) {
3
+ let result = createRemultServer(options, {
4
+ buildGenericRequest: event => ({
5
+ url: event.request.url,
6
+ method: event.request.method,
7
+ body: event.locals["_tempJson"],
8
+ on: (e, do1) => {
9
+ if (e === 'close') {
10
+ event.locals["_tempOnClose"] = do1;
11
+ }
12
+ }
13
+ })
14
+ });
15
+ const handler = async ({ event, resolve }) => {
16
+ if (event.url.pathname.startsWith(options.rootPath)) {
17
+ let json = {};
18
+ try {
19
+ if (event.request.method == 'POST' || event.request.method == 'PUT') {
20
+ json = await event.request.json();
21
+ }
22
+ }
23
+ catch (error) {
24
+ console.log(error);
25
+ }
26
+ let sseResponse = undefined;
27
+ event.locals["_tempOnClose"] = () => { };
28
+ const response = {
29
+ end: () => { },
30
+ json: () => { },
31
+ status: () => {
32
+ return response;
33
+ },
34
+ write: () => { },
35
+ writeHead: (status, headers) => {
36
+ if (status === 200 && headers) {
37
+ const contentType = headers['Content-Type'];
38
+ if (contentType === 'text/event-stream') {
39
+ const messages = [];
40
+ response.write = (x) => messages.push(x);
41
+ const stream = new ReadableStream({
42
+ start: (controller) => {
43
+ for (const message of messages) {
44
+ controller.enqueue(message);
45
+ }
46
+ response.write = (data) => {
47
+ controller.enqueue(data);
48
+ };
49
+ },
50
+ cancel: () => {
51
+ response.write = () => { };
52
+ event.locals["_tempOnClose"]();
53
+ }
54
+ });
55
+ sseResponse = new Response(stream, { headers });
56
+ }
57
+ }
58
+ }
59
+ };
60
+ event.locals["_tempJson"] = json;
61
+ const responseFromRemultHandler = await result.handle(event, response);
62
+ if (sseResponse !== undefined) {
63
+ return sseResponse;
64
+ }
65
+ if (responseFromRemultHandler) {
66
+ return new Response(JSON.stringify(responseFromRemultHandler.data), {
67
+ status: responseFromRemultHandler.statusCode
68
+ });
69
+ }
70
+ }
71
+ return new Promise((res) => {
72
+ result.withRemult(event, undefined, async () => {
73
+ res(await resolve(event));
74
+ });
75
+ });
76
+ };
77
+ return Object.assign(handler, {
78
+ getRemult: (req) => result.getRemult(req),
79
+ openApiDoc: (options) => result.openApiDoc(options),
80
+ registerRouter: x => result.registerRouter(x),
81
+ withRemult: (...args) => result.withRemult(...args)
82
+ });
83
+ }
@@ -255,7 +255,13 @@ export class RemultServerImplementation {
255
255
  }
256
256
  process(what) {
257
257
  return async (req, origRes) => {
258
- let myReq = new ExpressRequestBridgeToDataApiRequest(req);
258
+ const genReq = this.coreOptions.buildGenericRequest(req);
259
+ if (!genReq.query) {
260
+ genReq.query = req["_tempQuery"];
261
+ }
262
+ if (!genReq.params)
263
+ genReq.params = req["_tempParams"];
264
+ let myReq = new ExpressRequestBridgeToDataApiRequest(genReq);
259
265
  let myRes = new ExpressResponseBridgeToDataApiResponse(origRes, req);
260
266
  await this.runWithRemult(async (remult) => {
261
267
  remult.liveQueryPublisher = new LiveQueryPublisher(() => remult.subscriptionServer, () => remult.liveQueryStorage, this.runWithSerializedJsonContextData);
@@ -285,7 +291,7 @@ export class RemultServerImplementation {
285
291
  });
286
292
  }
287
293
  }
288
- await what(remult, myReq, myRes, req, origRes);
294
+ await what(remult, myReq, myRes, genReq, origRes);
289
295
  });
290
296
  };
291
297
  }
@@ -871,6 +877,7 @@ class RouteImplementation {
871
877
  }
872
878
  query[key] = [current, val];
873
879
  });
880
+ origReq["_tempQuery"] = query;
874
881
  req.query = query;
875
882
  }
876
883
  let lowerPath = path.toLowerCase();
@@ -878,7 +885,7 @@ class RouteImplementation {
878
885
  if (m) {
879
886
  let h = m.get(req.method.toLowerCase());
880
887
  if (h) {
881
- h(req, res, next);
888
+ h(origReq, res, next);
882
889
  return;
883
890
  }
884
891
  }
@@ -889,10 +896,12 @@ class RouteImplementation {
889
896
  if (m) {
890
897
  let h = m.get(req.method.toLowerCase());
891
898
  if (h) {
892
- if (!req.params)
899
+ if (!req.params) {
893
900
  req.params = {};
901
+ origReq["_tempParams"] = req.params;
902
+ }
894
903
  req.params.id = path.substring(idPosition + 1);
895
- h(req, res, next);
904
+ h(origReq, res, next);
896
905
  return;
897
906
  }
898
907
  }
@@ -15,7 +15,7 @@ export declare class DataApi<T = any> {
15
15
  findOptions: FindOptions<T>;
16
16
  }>;
17
17
  getArray(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
18
- liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeRequest: () => any, queryChannel: string): Promise<void>;
18
+ liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeRequest: () => Promise<any>, queryChannel: string): Promise<void>;
19
19
  private buildWhere;
20
20
  private doOnId;
21
21
  put(response: DataApiResponse, id: any, body: any): Promise<void>;
@@ -128,7 +128,7 @@ export class DataApi {
128
128
  try {
129
129
  const r = await this.getArrayImpl(response, request, filterBody);
130
130
  const data = {
131
- requestJson: serializeRequest(),
131
+ requestJson: await serializeRequest(),
132
132
  findOptionsJson: findOptionsToJson(r.findOptions, this.repository.metadata),
133
133
  lastIds: r.r.map(y => this.repository.metadata.idMetadata.getId(y))
134
134
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.20.0-exp.1",
3
+ "version": "0.20.0-exp.10",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
package/remult-next.js CHANGED
@@ -8,7 +8,7 @@ function remultNext(options) {
8
8
  var result = server_1.createRemultServer(options, {
9
9
  buildGenericRequest: function (req) { return req; }
10
10
  });
11
- return Object.assign(function (req, res) { return result.handle(req, res); }, result, {
11
+ return Object.assign(function (req, res) { return result.handle(req, res).then(function () { }); }, result, {
12
12
  getRemult: function () {
13
13
  var args = [];
14
14
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -0,0 +1,3 @@
1
+ import type { RequestEvent, Handle } from '@sveltejs/kit';
2
+ import { RemultServer, RemultServerOptions } from './server';
3
+ export declare function remultSveltekit(options?: RemultServerOptions<RequestEvent>): RemultServer<RequestEvent> & Handle;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remultSveltekit = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var server_1 = require("./server");
6
+ function remultSveltekit(options) {
7
+ var _this = this;
8
+ var result = server_1.createRemultServer(options, {
9
+ buildGenericRequest: function (event) {
10
+ return ({
11
+ url: event.request.url,
12
+ method: event.request.method,
13
+ body: event.locals["_tempJson"],
14
+ on: function (e, do1) {
15
+ if (e === 'close') {
16
+ event.locals["_tempOnClose"] = do1;
17
+ }
18
+ }
19
+ });
20
+ }
21
+ });
22
+ var handler = function (_a) {
23
+ var event = _a.event, resolve = _a.resolve;
24
+ return tslib_1.__awaiter(_this, void 0, void 0, function () {
25
+ var json, error_1, sseResponse_1, response_1, responseFromRemultHandler;
26
+ var _this = this;
27
+ return tslib_1.__generator(this, function (_b) {
28
+ switch (_b.label) {
29
+ case 0:
30
+ if (!event.url.pathname.startsWith(options.rootPath)) return [3 /*break*/, 7];
31
+ json = {};
32
+ _b.label = 1;
33
+ case 1:
34
+ _b.trys.push([1, 4, , 5]);
35
+ if (!(event.request.method == 'POST' || event.request.method == 'PUT')) return [3 /*break*/, 3];
36
+ return [4 /*yield*/, event.request.json()];
37
+ case 2:
38
+ json = _b.sent();
39
+ _b.label = 3;
40
+ case 3: return [3 /*break*/, 5];
41
+ case 4:
42
+ error_1 = _b.sent();
43
+ console.log(error_1);
44
+ return [3 /*break*/, 5];
45
+ case 5:
46
+ sseResponse_1 = undefined;
47
+ event.locals["_tempOnClose"] = function () { };
48
+ response_1 = {
49
+ end: function () { },
50
+ json: function () { },
51
+ status: function () {
52
+ return response_1;
53
+ },
54
+ write: function () { },
55
+ writeHead: function (status, headers) {
56
+ if (status === 200 && headers) {
57
+ var contentType = headers['Content-Type'];
58
+ if (contentType === 'text/event-stream') {
59
+ var messages_1 = [];
60
+ response_1.write = function (x) { return messages_1.push(x); };
61
+ var stream = new ReadableStream({
62
+ start: function (controller) {
63
+ var e_1, _a;
64
+ try {
65
+ for (var messages_2 = tslib_1.__values(messages_1), messages_2_1 = messages_2.next(); !messages_2_1.done; messages_2_1 = messages_2.next()) {
66
+ var message = messages_2_1.value;
67
+ controller.enqueue(message);
68
+ }
69
+ }
70
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
71
+ finally {
72
+ try {
73
+ if (messages_2_1 && !messages_2_1.done && (_a = messages_2.return)) _a.call(messages_2);
74
+ }
75
+ finally { if (e_1) throw e_1.error; }
76
+ }
77
+ response_1.write = function (data) {
78
+ controller.enqueue(data);
79
+ };
80
+ },
81
+ cancel: function () {
82
+ response_1.write = function () { };
83
+ event.locals["_tempOnClose"]();
84
+ }
85
+ });
86
+ sseResponse_1 = new Response(stream, { headers: headers });
87
+ }
88
+ }
89
+ }
90
+ };
91
+ event.locals["_tempJson"] = json;
92
+ return [4 /*yield*/, result.handle(event, response_1)];
93
+ case 6:
94
+ responseFromRemultHandler = _b.sent();
95
+ if (sseResponse_1 !== undefined) {
96
+ return [2 /*return*/, sseResponse_1];
97
+ }
98
+ if (responseFromRemultHandler) {
99
+ return [2 /*return*/, new Response(JSON.stringify(responseFromRemultHandler.data), {
100
+ status: responseFromRemultHandler.statusCode
101
+ })];
102
+ }
103
+ _b.label = 7;
104
+ case 7: return [2 /*return*/, new Promise(function (res) {
105
+ result.withRemult(event, undefined, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
106
+ var _a;
107
+ return tslib_1.__generator(this, function (_b) {
108
+ switch (_b.label) {
109
+ case 0:
110
+ _a = res;
111
+ return [4 /*yield*/, resolve(event)];
112
+ case 1:
113
+ _a.apply(void 0, [_b.sent()]);
114
+ return [2 /*return*/];
115
+ }
116
+ });
117
+ }); });
118
+ })];
119
+ }
120
+ });
121
+ });
122
+ };
123
+ return Object.assign(handler, {
124
+ getRemult: function (req) { return result.getRemult(req); },
125
+ openApiDoc: function (options) { return result.openApiDoc(options); },
126
+ registerRouter: function (x) { return result.registerRouter(x); },
127
+ withRemult: function () {
128
+ var args = [];
129
+ for (var _i = 0; _i < arguments.length; _i++) {
130
+ args[_i] = arguments[_i];
131
+ }
132
+ return result.withRemult.apply(result, tslib_1.__spread(args));
133
+ }
134
+ });
135
+ }
136
+ exports.remultSveltekit = remultSveltekit;
@@ -472,12 +472,18 @@ var RemultServerImplementation = /** @class */ (function () {
472
472
  RemultServerImplementation.prototype.process = function (what) {
473
473
  var _this = this;
474
474
  return function (req, origRes) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
475
- var myReq, myRes;
475
+ var genReq, myReq, myRes;
476
476
  var _this = this;
477
477
  return tslib_1.__generator(this, function (_a) {
478
478
  switch (_a.label) {
479
479
  case 0:
480
- myReq = new ExpressRequestBridgeToDataApiRequest(req);
480
+ genReq = this.coreOptions.buildGenericRequest(req);
481
+ if (!genReq.query) {
482
+ genReq.query = req["_tempQuery"];
483
+ }
484
+ if (!genReq.params)
485
+ genReq.params = req["_tempParams"];
486
+ myReq = new ExpressRequestBridgeToDataApiRequest(genReq);
481
487
  myRes = new ExpressResponseBridgeToDataApiResponse(origRes, req);
482
488
  return [4 /*yield*/, this.runWithRemult(function (remult) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
483
489
  var _a, user;
@@ -519,7 +525,7 @@ var RemultServerImplementation = /** @class */ (function () {
519
525
  case 5:
520
526
  _b.sent();
521
527
  _b.label = 6;
522
- case 6: return [4 /*yield*/, what(remult, myReq, myRes, req, origRes)];
528
+ case 6: return [4 /*yield*/, what(remult, myReq, myRes, genReq, origRes)];
523
529
  case 7:
524
530
  _b.sent();
525
531
  return [2 /*return*/];
@@ -1245,6 +1251,7 @@ var RouteImplementation = /** @class */ (function () {
1245
1251
  }
1246
1252
  query_1[key] = [current, val];
1247
1253
  });
1254
+ origReq["_tempQuery"] = query_1;
1248
1255
  req.query = query_1;
1249
1256
  }
1250
1257
  var lowerPath = path.toLowerCase();
@@ -1252,7 +1259,7 @@ var RouteImplementation = /** @class */ (function () {
1252
1259
  if (m) {
1253
1260
  var h = m.get(req.method.toLowerCase());
1254
1261
  if (h) {
1255
- h(req, res, next);
1262
+ h(origReq, res, next);
1256
1263
  return;
1257
1264
  }
1258
1265
  }
@@ -1263,10 +1270,12 @@ var RouteImplementation = /** @class */ (function () {
1263
1270
  if (m) {
1264
1271
  var h = m.get(req.method.toLowerCase());
1265
1272
  if (h) {
1266
- if (!req.params)
1273
+ if (!req.params) {
1267
1274
  req.params = {};
1275
+ origReq["_tempParams"] = req.params;
1276
+ }
1268
1277
  req.params.id = path.substring(idPosition + 1);
1269
- h(req, res, next);
1278
+ h(origReq, res, next);
1270
1279
  return;
1271
1280
  }
1272
1281
  }
package/src/data-api.d.ts CHANGED
@@ -15,7 +15,7 @@ export declare class DataApi<T = any> {
15
15
  findOptions: FindOptions<T>;
16
16
  }>;
17
17
  getArray(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
18
- liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeRequest: () => any, queryChannel: string): Promise<void>;
18
+ liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeRequest: () => Promise<any>, queryChannel: string): Promise<void>;
19
19
  private buildWhere;
20
20
  private doOnId;
21
21
  put(response: DataApiResponse, id: any, body: any): Promise<void>;
package/src/data-api.js CHANGED
@@ -210,42 +210,45 @@ var DataApi = /** @class */ (function () {
210
210
  DataApi.prototype.liveQuery = function (response, request, filterBody, serializeRequest, queryChannel) {
211
211
  return tslib_1.__awaiter(this, void 0, void 0, function () {
212
212
  var r, data, err_3;
213
+ var _a;
213
214
  var _this = this;
214
- return tslib_1.__generator(this, function (_a) {
215
- switch (_a.label) {
215
+ return tslib_1.__generator(this, function (_b) {
216
+ switch (_b.label) {
216
217
  case 0:
217
218
  if (!this.repository.metadata.apiReadAllowed) {
218
219
  response.forbidden();
219
220
  return [2 /*return*/];
220
221
  }
221
- _a.label = 1;
222
+ _b.label = 1;
222
223
  case 1:
223
- _a.trys.push([1, 4, , 5]);
224
+ _b.trys.push([1, 5, , 6]);
224
225
  return [4 /*yield*/, this.getArrayImpl(response, request, filterBody)];
225
226
  case 2:
226
- r = _a.sent();
227
- data = {
228
- requestJson: serializeRequest(),
229
- findOptionsJson: rest_data_provider_1.findOptionsToJson(r.findOptions, this.repository.metadata),
230
- lastIds: r.r.map(function (y) { return _this.repository.metadata.idMetadata.getId(y); })
231
- };
227
+ r = _b.sent();
228
+ _a = {};
229
+ return [4 /*yield*/, serializeRequest()];
230
+ case 3:
231
+ data = (_a.requestJson = _b.sent(),
232
+ _a.findOptionsJson = rest_data_provider_1.findOptionsToJson(r.findOptions, this.repository.metadata),
233
+ _a.lastIds = r.r.map(function (y) { return _this.repository.metadata.idMetadata.getId(y); }),
234
+ _a);
232
235
  return [4 /*yield*/, this.remult.liveQueryStorage.add({
233
236
  entityKey: this.repository.metadata.key,
234
237
  id: queryChannel,
235
238
  data: data
236
239
  })];
237
- case 3:
238
- _a.sent();
239
- response.success(r.r);
240
- return [3 /*break*/, 5];
241
240
  case 4:
242
- err_3 = _a.sent();
241
+ _b.sent();
242
+ response.success(r.r);
243
+ return [3 /*break*/, 6];
244
+ case 5:
245
+ err_3 = _b.sent();
243
246
  if (err_3.isForbiddenError)
244
247
  response.forbidden();
245
248
  else
246
249
  response.error(err_3);
247
- return [3 /*break*/, 5];
248
- case 5: return [2 /*return*/];
250
+ return [3 /*break*/, 6];
251
+ case 6: return [2 /*return*/];
249
252
  }
250
253
  });
251
254
  });