@opra/client 0.23.2 → 0.24.1
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/browser.js +53 -43
- package/cjs/client.js +30 -22
- package/cjs/collection-node.js +14 -14
- package/cjs/constants.js +2 -1
- package/cjs/singleton-node.js +8 -8
- package/esm/client.js +31 -23
- package/esm/collection-node.js +14 -14
- package/esm/constants.js +1 -0
- package/esm/singleton-node.js +8 -8
- package/package.json +2 -2
- package/types/client.d.ts +3 -3
- package/types/constants.d.ts +1 -0
- package/types/http-response.d.ts +2 -0
- package/types/types.d.ts +3 -3
package/browser.js
CHANGED
|
@@ -33,6 +33,7 @@ var ClientError = class extends Error {
|
|
|
33
33
|
import { toArrayDef } from "putil-varhelpers";
|
|
34
34
|
|
|
35
35
|
// ../../build/client/esm/constants.js
|
|
36
|
+
var OPRA_JSON_CONTENT_TYPE_PATTERN = /^application\/\bopra\+json\b/i;
|
|
36
37
|
var JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
|
|
37
38
|
var TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
|
|
38
39
|
var FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
|
|
@@ -194,11 +195,11 @@ var HttpCollectionNode = class {
|
|
|
194
195
|
}
|
|
195
196
|
create(data, options) {
|
|
196
197
|
const context = this[kContext];
|
|
197
|
-
context.
|
|
198
|
+
context.endpoint = "create";
|
|
198
199
|
const requestHost = new HttpRequestObservable(context, options);
|
|
199
200
|
const request = requestHost[kRequest];
|
|
200
201
|
request.method = "POST";
|
|
201
|
-
request.url.resolve(context.
|
|
202
|
+
request.url.resolve(context.resource);
|
|
202
203
|
request.body = data;
|
|
203
204
|
if (options?.include)
|
|
204
205
|
request.params.set("$include", toArrayDef(options.include, []).join(","));
|
|
@@ -212,20 +213,20 @@ var HttpCollectionNode = class {
|
|
|
212
213
|
if (id == null)
|
|
213
214
|
throw new TypeError(`'id' argument must have a value`);
|
|
214
215
|
const context = this[kContext];
|
|
215
|
-
context.
|
|
216
|
+
context.endpoint = "delete";
|
|
216
217
|
const requestHost = new HttpRequestObservable(context, options);
|
|
217
218
|
const request = requestHost[kRequest];
|
|
218
219
|
request.method = "DELETE";
|
|
219
|
-
request.url.join({ resource: context.
|
|
220
|
+
request.url.join({ resource: context.resource, key: id });
|
|
220
221
|
return requestHost;
|
|
221
222
|
}
|
|
222
223
|
deleteMany(options) {
|
|
223
224
|
const context = this[kContext];
|
|
224
|
-
context.
|
|
225
|
+
context.endpoint = "deleteMany";
|
|
225
226
|
const requestHost = new HttpRequestObservable(context, options);
|
|
226
227
|
const request = requestHost[kRequest];
|
|
227
228
|
request.method = "DELETE";
|
|
228
|
-
request.url.join(context.
|
|
229
|
+
request.url.join(context.resource);
|
|
229
230
|
if (options?.filter)
|
|
230
231
|
request.params.set("$filter", String(options.filter));
|
|
231
232
|
return requestHost;
|
|
@@ -234,11 +235,11 @@ var HttpCollectionNode = class {
|
|
|
234
235
|
if (id == null)
|
|
235
236
|
throw new TypeError(`'id' argument must have a value`);
|
|
236
237
|
const context = this[kContext];
|
|
237
|
-
context.
|
|
238
|
+
context.endpoint = "get";
|
|
238
239
|
const requestHost = new HttpRequestObservable(context, options);
|
|
239
240
|
const request = requestHost[kRequest];
|
|
240
241
|
request.method = "GET";
|
|
241
|
-
request.url.join({ resource: context.
|
|
242
|
+
request.url.join({ resource: context.resource, key: id });
|
|
242
243
|
if (options?.include)
|
|
243
244
|
request.params.set("$include", toArrayDef(options.include, []).join(","));
|
|
244
245
|
if (options?.pick)
|
|
@@ -249,11 +250,11 @@ var HttpCollectionNode = class {
|
|
|
249
250
|
}
|
|
250
251
|
findMany(options) {
|
|
251
252
|
const context = this[kContext];
|
|
252
|
-
context.
|
|
253
|
+
context.endpoint = "findMany";
|
|
253
254
|
const requestHost = new HttpRequestObservable(context, options);
|
|
254
255
|
const request = requestHost[kRequest];
|
|
255
256
|
request.method = "GET";
|
|
256
|
-
request.url.join(context.
|
|
257
|
+
request.url.join(context.resource);
|
|
257
258
|
if (options?.include)
|
|
258
259
|
request.params.set("$include", toArrayDef(options.include, []).join(","));
|
|
259
260
|
if (options?.pick)
|
|
@@ -278,11 +279,11 @@ var HttpCollectionNode = class {
|
|
|
278
279
|
if (id == null)
|
|
279
280
|
throw new TypeError(`'id' argument must have a value`);
|
|
280
281
|
const context = this[kContext];
|
|
281
|
-
context.
|
|
282
|
+
context.endpoint = "update";
|
|
282
283
|
const requestHost = new HttpRequestObservable(context, options);
|
|
283
284
|
const request = requestHost[kRequest];
|
|
284
285
|
request.method = "PATCH";
|
|
285
|
-
request.url.join({ resource: context.
|
|
286
|
+
request.url.join({ resource: context.resource, key: id });
|
|
286
287
|
request.body = data;
|
|
287
288
|
if (options?.include)
|
|
288
289
|
request.params.set("$include", String(options.include));
|
|
@@ -294,11 +295,11 @@ var HttpCollectionNode = class {
|
|
|
294
295
|
}
|
|
295
296
|
updateMany(data, options) {
|
|
296
297
|
const context = this[kContext];
|
|
297
|
-
context.
|
|
298
|
+
context.endpoint = "updateMany";
|
|
298
299
|
const requestHost = new HttpRequestObservable(context, options);
|
|
299
300
|
const request = requestHost[kRequest];
|
|
300
301
|
request.method = "PATCH";
|
|
301
|
-
request.url.join(context.
|
|
302
|
+
request.url.join(context.resource);
|
|
302
303
|
request.body = data;
|
|
303
304
|
if (options?.filter)
|
|
304
305
|
request.params.set("$filter", String(options.filter));
|
|
@@ -338,11 +339,11 @@ var HttpSingletonNode = class {
|
|
|
338
339
|
}
|
|
339
340
|
create(data, options) {
|
|
340
341
|
const context = this[kContext];
|
|
341
|
-
context.
|
|
342
|
+
context.endpoint = "create";
|
|
342
343
|
const requestHost = new HttpRequestObservable(context, options);
|
|
343
344
|
const request = requestHost[kRequest];
|
|
344
345
|
request.method = "POST";
|
|
345
|
-
request.url.join(context.
|
|
346
|
+
request.url.join(context.resource);
|
|
346
347
|
request.body = data;
|
|
347
348
|
if (options?.include)
|
|
348
349
|
request.params.set("$include", toArrayDef2(options.include, []).join(","));
|
|
@@ -354,20 +355,20 @@ var HttpSingletonNode = class {
|
|
|
354
355
|
}
|
|
355
356
|
delete(options) {
|
|
356
357
|
const context = this[kContext];
|
|
357
|
-
context.
|
|
358
|
+
context.endpoint = "delete";
|
|
358
359
|
const requestHost = new HttpRequestObservable(context, options);
|
|
359
360
|
const request = requestHost[kRequest];
|
|
360
361
|
request.method = "DELETE";
|
|
361
|
-
request.url.join({ resource: context.
|
|
362
|
+
request.url.join({ resource: context.resource });
|
|
362
363
|
return requestHost;
|
|
363
364
|
}
|
|
364
365
|
get(options) {
|
|
365
366
|
const context = this[kContext];
|
|
366
|
-
context.
|
|
367
|
+
context.endpoint = "get";
|
|
367
368
|
const requestHost = new HttpRequestObservable(context, options);
|
|
368
369
|
const request = requestHost[kRequest];
|
|
369
370
|
request.method = "GET";
|
|
370
|
-
request.url.join({ resource: context.
|
|
371
|
+
request.url.join({ resource: context.resource });
|
|
371
372
|
if (options?.include)
|
|
372
373
|
request.params.set("$include", toArrayDef2(options.include, []).join(","));
|
|
373
374
|
if (options?.pick)
|
|
@@ -378,11 +379,11 @@ var HttpSingletonNode = class {
|
|
|
378
379
|
}
|
|
379
380
|
update(data, options) {
|
|
380
381
|
const context = this[kContext];
|
|
381
|
-
context.
|
|
382
|
+
context.endpoint = "update";
|
|
382
383
|
const requestHost = new HttpRequestObservable(context, options);
|
|
383
384
|
const request = requestHost[kRequest];
|
|
384
385
|
request.method = "PATCH";
|
|
385
|
-
request.url.join({ resource: context.
|
|
386
|
+
request.url.join({ resource: context.resource });
|
|
386
387
|
request.body = data;
|
|
387
388
|
if (options?.include)
|
|
388
389
|
request.params.set("$include", toArrayDef2(options.include, []).join(","));
|
|
@@ -426,12 +427,14 @@ var OpraHttpClient = class {
|
|
|
426
427
|
if (promise) {
|
|
427
428
|
return promise;
|
|
428
429
|
}
|
|
429
|
-
this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest(
|
|
430
|
+
this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest(HttpObserveType.Body, new HttpRequest({
|
|
430
431
|
method: "GET",
|
|
431
|
-
url: "
|
|
432
|
+
url: "",
|
|
432
433
|
headers: new Headers({ "accept": "application/json" })
|
|
433
434
|
})));
|
|
434
435
|
return await promise.then(async (body) => {
|
|
436
|
+
if (!body)
|
|
437
|
+
throw new Error(`No response returned.`);
|
|
435
438
|
const api = await DocumentFactory.createDocument(body);
|
|
436
439
|
this[kAssets].api = api;
|
|
437
440
|
return api;
|
|
@@ -449,42 +452,42 @@ var OpraHttpClient = class {
|
|
|
449
452
|
resourceName = resourceName.name;
|
|
450
453
|
const ctx = {
|
|
451
454
|
client: this,
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
resourceName,
|
|
455
|
-
send: (observe, request) => this._sendRequest("Collection", ctx.
|
|
455
|
+
sourceKind: "Collection",
|
|
456
|
+
endpoint: "",
|
|
457
|
+
resource: resourceName,
|
|
458
|
+
send: (observe, request) => this._sendRequest(observe, request, "Collection", ctx.endpoint, ctx),
|
|
456
459
|
// requestInterceptors: [
|
|
457
460
|
// // Validate resource exists and is a collection resource
|
|
458
461
|
// async () => {
|
|
459
462
|
// const metadata = await this.getMetadata();
|
|
460
|
-
// metadata.getCollection(ctx.
|
|
463
|
+
// metadata.getCollection(ctx.sourceName);
|
|
461
464
|
// }
|
|
462
465
|
// ],
|
|
463
466
|
responseInterceptors: []
|
|
464
467
|
};
|
|
465
468
|
return new HttpCollectionNode(ctx);
|
|
466
469
|
}
|
|
467
|
-
singleton(
|
|
468
|
-
if (typeof
|
|
469
|
-
|
|
470
|
+
singleton(sourceName) {
|
|
471
|
+
if (typeof sourceName === "function")
|
|
472
|
+
sourceName = sourceName.name;
|
|
470
473
|
const ctx = {
|
|
471
474
|
client: this,
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
send: (observe, request) => this._sendRequest("Singleton", ctx.
|
|
475
|
+
sourceKind: "Singleton",
|
|
476
|
+
endpoint: "",
|
|
477
|
+
resource: sourceName,
|
|
478
|
+
send: (observe, request) => this._sendRequest(observe, request, "Singleton", ctx.endpoint, ctx),
|
|
476
479
|
// requestInterceptors: [
|
|
477
480
|
// // Validate resource exists and is a singleton resource
|
|
478
481
|
// async () => {
|
|
479
482
|
// const metadata = await this.getMetadata();
|
|
480
|
-
// metadata.getSingleton(ctx.
|
|
483
|
+
// metadata.getSingleton(ctx.sourceName);
|
|
481
484
|
// }
|
|
482
485
|
// ],
|
|
483
486
|
responseInterceptors: []
|
|
484
487
|
};
|
|
485
488
|
return new HttpSingletonNode(ctx);
|
|
486
489
|
}
|
|
487
|
-
_sendRequest(
|
|
490
|
+
_sendRequest(observe, request, sourceKind, endpoint, ctx) {
|
|
488
491
|
return new Observable2((subscriber) => {
|
|
489
492
|
(async () => {
|
|
490
493
|
request.inset(this.defaults);
|
|
@@ -537,7 +540,7 @@ var OpraHttpClient = class {
|
|
|
537
540
|
event: HttpEventType.Sent
|
|
538
541
|
});
|
|
539
542
|
const response = await this._fetch(url.toString(), request);
|
|
540
|
-
await this._handleResponse(
|
|
543
|
+
await this._handleResponse(observe, subscriber, request, response, sourceKind, endpoint, ctx);
|
|
541
544
|
})().catch((error) => subscriber.error(error));
|
|
542
545
|
});
|
|
543
546
|
}
|
|
@@ -547,7 +550,7 @@ var OpraHttpClient = class {
|
|
|
547
550
|
_createResponse(init) {
|
|
548
551
|
return new HttpResponse(init);
|
|
549
552
|
}
|
|
550
|
-
async _handleResponse(
|
|
553
|
+
async _handleResponse(observe, subscriber, request, fetchResponse, sourceKind, endpoint, ctx) {
|
|
551
554
|
const headers = fetchResponse.headers;
|
|
552
555
|
if (observe === HttpObserveType.Events) {
|
|
553
556
|
const response2 = this._createResponse({
|
|
@@ -566,12 +569,17 @@ var OpraHttpClient = class {
|
|
|
566
569
|
}
|
|
567
570
|
let body;
|
|
568
571
|
let totalCount;
|
|
572
|
+
let affected;
|
|
573
|
+
const contentType = headers.get("Content-Type") || "";
|
|
569
574
|
if (fetchResponse.body) {
|
|
570
|
-
if (JSON_CONTENT_TYPE_PATTERN.test(
|
|
575
|
+
if (JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
571
576
|
body = await fetchResponse.json();
|
|
572
577
|
if (typeof body === "string")
|
|
573
578
|
body = JSON.parse(body);
|
|
574
|
-
|
|
579
|
+
if (OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
580
|
+
totalCount = body.totalCount;
|
|
581
|
+
affected = body.affected;
|
|
582
|
+
}
|
|
575
583
|
} else if (TEXT_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
|
|
576
584
|
body = await fetchResponse.text();
|
|
577
585
|
else if (FORMDATA_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
|
|
@@ -600,6 +608,8 @@ var OpraHttpClient = class {
|
|
|
600
608
|
};
|
|
601
609
|
if (totalCount != null)
|
|
602
610
|
responseInit.totalCount = totalCount;
|
|
611
|
+
if (affected != null)
|
|
612
|
+
responseInit.affected = affected;
|
|
603
613
|
const response = this._createResponse(responseInit);
|
|
604
614
|
if (ctx) {
|
|
605
615
|
const responseInterceptors = [
|
|
@@ -611,7 +621,7 @@ var OpraHttpClient = class {
|
|
|
611
621
|
}
|
|
612
622
|
}
|
|
613
623
|
if (observe === HttpObserveType.Body) {
|
|
614
|
-
if ((
|
|
624
|
+
if (OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType))
|
|
615
625
|
subscriber.next(body.data);
|
|
616
626
|
else
|
|
617
627
|
subscriber.next(body);
|
package/cjs/client.js
CHANGED
|
@@ -41,13 +41,15 @@ class OpraHttpClient {
|
|
|
41
41
|
if (promise) {
|
|
42
42
|
return promise;
|
|
43
43
|
}
|
|
44
|
-
this[kAssets].metadataPromise = promise = (0, rxjs_1.lastValueFrom)(this._sendRequest(
|
|
44
|
+
this[kAssets].metadataPromise = promise = (0, rxjs_1.lastValueFrom)(this._sendRequest(types_js_1.HttpObserveType.Body, new http_request_js_1.HttpRequest({
|
|
45
45
|
method: 'GET',
|
|
46
|
-
url: '
|
|
46
|
+
url: '',
|
|
47
47
|
headers: new Headers({ 'accept': 'application/json' })
|
|
48
48
|
})));
|
|
49
49
|
return await promise
|
|
50
50
|
.then(async (body) => {
|
|
51
|
+
if (!body)
|
|
52
|
+
throw new Error(`No response returned.`);
|
|
51
53
|
const api = await common_1.DocumentFactory.createDocument(body);
|
|
52
54
|
this[kAssets].api = api;
|
|
53
55
|
return api;
|
|
@@ -68,43 +70,43 @@ class OpraHttpClient {
|
|
|
68
70
|
resourceName = resourceName.name;
|
|
69
71
|
const ctx = {
|
|
70
72
|
client: this,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
resourceName,
|
|
74
|
-
send: (observe, request) => this._sendRequest('Collection', ctx.
|
|
73
|
+
sourceKind: 'Collection',
|
|
74
|
+
endpoint: '',
|
|
75
|
+
resource: resourceName,
|
|
76
|
+
send: (observe, request) => this._sendRequest(observe, request, 'Collection', ctx.endpoint, ctx),
|
|
75
77
|
// requestInterceptors: [
|
|
76
78
|
// // Validate resource exists and is a collection resource
|
|
77
79
|
// async () => {
|
|
78
80
|
// const metadata = await this.getMetadata();
|
|
79
|
-
// metadata.getCollection(ctx.
|
|
81
|
+
// metadata.getCollection(ctx.sourceName);
|
|
80
82
|
// }
|
|
81
83
|
// ],
|
|
82
84
|
responseInterceptors: []
|
|
83
85
|
};
|
|
84
86
|
return new collection_node_js_1.HttpCollectionNode(ctx);
|
|
85
87
|
}
|
|
86
|
-
singleton(
|
|
88
|
+
singleton(sourceName) {
|
|
87
89
|
// If name argument is a class, we extract name from the class
|
|
88
|
-
if (typeof
|
|
89
|
-
|
|
90
|
+
if (typeof sourceName === 'function')
|
|
91
|
+
sourceName = sourceName.name;
|
|
90
92
|
const ctx = {
|
|
91
93
|
client: this,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
send: (observe, request) => this._sendRequest('Singleton', ctx.
|
|
94
|
+
sourceKind: 'Singleton',
|
|
95
|
+
endpoint: '',
|
|
96
|
+
resource: sourceName,
|
|
97
|
+
send: (observe, request) => this._sendRequest(observe, request, 'Singleton', ctx.endpoint, ctx),
|
|
96
98
|
// requestInterceptors: [
|
|
97
99
|
// // Validate resource exists and is a singleton resource
|
|
98
100
|
// async () => {
|
|
99
101
|
// const metadata = await this.getMetadata();
|
|
100
|
-
// metadata.getSingleton(ctx.
|
|
102
|
+
// metadata.getSingleton(ctx.sourceName);
|
|
101
103
|
// }
|
|
102
104
|
// ],
|
|
103
105
|
responseInterceptors: []
|
|
104
106
|
};
|
|
105
107
|
return new singleton_node_js_1.HttpSingletonNode(ctx);
|
|
106
108
|
}
|
|
107
|
-
_sendRequest(
|
|
109
|
+
_sendRequest(observe, request, sourceKind, endpoint, ctx) {
|
|
108
110
|
return new rxjs_1.Observable(subscriber => {
|
|
109
111
|
(async () => {
|
|
110
112
|
request.inset(this.defaults);
|
|
@@ -161,7 +163,7 @@ class OpraHttpClient {
|
|
|
161
163
|
event: types_js_1.HttpEventType.Sent,
|
|
162
164
|
});
|
|
163
165
|
const response = await this._fetch(url.toString(), request);
|
|
164
|
-
await this._handleResponse(
|
|
166
|
+
await this._handleResponse(observe, subscriber, request, response, sourceKind, endpoint, ctx);
|
|
165
167
|
})().catch(error => subscriber.error(error));
|
|
166
168
|
});
|
|
167
169
|
}
|
|
@@ -171,7 +173,7 @@ class OpraHttpClient {
|
|
|
171
173
|
_createResponse(init) {
|
|
172
174
|
return new http_response_js_1.HttpResponse(init);
|
|
173
175
|
}
|
|
174
|
-
async _handleResponse(
|
|
176
|
+
async _handleResponse(observe, subscriber, request, fetchResponse, sourceKind, endpoint, ctx) {
|
|
175
177
|
const headers = fetchResponse.headers;
|
|
176
178
|
if (observe === types_js_1.HttpObserveType.Events) {
|
|
177
179
|
const response = this._createResponse({
|
|
@@ -190,12 +192,17 @@ class OpraHttpClient {
|
|
|
190
192
|
}
|
|
191
193
|
let body;
|
|
192
194
|
let totalCount;
|
|
195
|
+
let affected;
|
|
196
|
+
const contentType = headers.get('Content-Type') || '';
|
|
193
197
|
if (fetchResponse.body) {
|
|
194
|
-
if (constants_js_1.JSON_CONTENT_TYPE_PATTERN.test(
|
|
198
|
+
if (constants_js_1.JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
195
199
|
body = await fetchResponse.json();
|
|
196
200
|
if (typeof body === 'string')
|
|
197
201
|
body = JSON.parse(body);
|
|
198
|
-
|
|
202
|
+
if (constants_js_1.OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
203
|
+
totalCount = body.totalCount;
|
|
204
|
+
affected = body.affected;
|
|
205
|
+
}
|
|
199
206
|
}
|
|
200
207
|
else if (constants_js_1.TEXT_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || ''))
|
|
201
208
|
body = await fetchResponse.text();
|
|
@@ -225,6 +232,8 @@ class OpraHttpClient {
|
|
|
225
232
|
};
|
|
226
233
|
if (totalCount != null)
|
|
227
234
|
responseInit.totalCount = totalCount;
|
|
235
|
+
if (affected != null)
|
|
236
|
+
responseInit.affected = affected;
|
|
228
237
|
const response = this._createResponse(responseInit);
|
|
229
238
|
if (ctx) {
|
|
230
239
|
const responseInterceptors = [
|
|
@@ -236,8 +245,7 @@ class OpraHttpClient {
|
|
|
236
245
|
}
|
|
237
246
|
}
|
|
238
247
|
if (observe === types_js_1.HttpObserveType.Body) {
|
|
239
|
-
if ((
|
|
240
|
-
(operation === 'create' || operation === 'get' || operation === 'findMany' || operation === 'update'))
|
|
248
|
+
if (constants_js_1.OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType))
|
|
241
249
|
subscriber.next(body.data);
|
|
242
250
|
else
|
|
243
251
|
subscriber.next(body);
|
package/cjs/collection-node.js
CHANGED
|
@@ -10,11 +10,11 @@ class HttpCollectionNode {
|
|
|
10
10
|
}
|
|
11
11
|
create(data, options) {
|
|
12
12
|
const context = this[constants_js_1.kContext];
|
|
13
|
-
context.
|
|
13
|
+
context.endpoint = 'create';
|
|
14
14
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
15
15
|
const request = requestHost[constants_js_1.kRequest];
|
|
16
16
|
request.method = 'POST';
|
|
17
|
-
request.url.resolve(context.
|
|
17
|
+
request.url.resolve(context.resource);
|
|
18
18
|
request.body = data;
|
|
19
19
|
if (options?.include)
|
|
20
20
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
|
@@ -28,20 +28,20 @@ class HttpCollectionNode {
|
|
|
28
28
|
if (id == null)
|
|
29
29
|
throw new TypeError(`'id' argument must have a value`);
|
|
30
30
|
const context = this[constants_js_1.kContext];
|
|
31
|
-
context.
|
|
31
|
+
context.endpoint = 'delete';
|
|
32
32
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
33
33
|
const request = requestHost[constants_js_1.kRequest];
|
|
34
34
|
request.method = 'DELETE';
|
|
35
|
-
request.url.join({ resource: context.
|
|
35
|
+
request.url.join({ resource: context.resource, key: id });
|
|
36
36
|
return requestHost;
|
|
37
37
|
}
|
|
38
38
|
deleteMany(options) {
|
|
39
39
|
const context = this[constants_js_1.kContext];
|
|
40
|
-
context.
|
|
40
|
+
context.endpoint = 'deleteMany';
|
|
41
41
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
42
42
|
const request = requestHost[constants_js_1.kRequest];
|
|
43
43
|
request.method = 'DELETE';
|
|
44
|
-
request.url.join(context.
|
|
44
|
+
request.url.join(context.resource);
|
|
45
45
|
if (options?.filter)
|
|
46
46
|
request.params.set('$filter', String(options.filter));
|
|
47
47
|
return requestHost;
|
|
@@ -50,11 +50,11 @@ class HttpCollectionNode {
|
|
|
50
50
|
if (id == null)
|
|
51
51
|
throw new TypeError(`'id' argument must have a value`);
|
|
52
52
|
const context = this[constants_js_1.kContext];
|
|
53
|
-
context.
|
|
53
|
+
context.endpoint = 'get';
|
|
54
54
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
55
55
|
const request = requestHost[constants_js_1.kRequest];
|
|
56
56
|
request.method = 'GET';
|
|
57
|
-
request.url.join({ resource: context.
|
|
57
|
+
request.url.join({ resource: context.resource, key: id });
|
|
58
58
|
if (options?.include)
|
|
59
59
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
|
60
60
|
if (options?.pick)
|
|
@@ -65,11 +65,11 @@ class HttpCollectionNode {
|
|
|
65
65
|
}
|
|
66
66
|
findMany(options) {
|
|
67
67
|
const context = this[constants_js_1.kContext];
|
|
68
|
-
context.
|
|
68
|
+
context.endpoint = 'findMany';
|
|
69
69
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
70
70
|
const request = requestHost[constants_js_1.kRequest];
|
|
71
71
|
request.method = 'GET';
|
|
72
|
-
request.url.join(context.
|
|
72
|
+
request.url.join(context.resource);
|
|
73
73
|
if (options?.include)
|
|
74
74
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
|
75
75
|
if (options?.pick)
|
|
@@ -94,11 +94,11 @@ class HttpCollectionNode {
|
|
|
94
94
|
if (id == null)
|
|
95
95
|
throw new TypeError(`'id' argument must have a value`);
|
|
96
96
|
const context = this[constants_js_1.kContext];
|
|
97
|
-
context.
|
|
97
|
+
context.endpoint = 'update';
|
|
98
98
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
99
99
|
const request = requestHost[constants_js_1.kRequest];
|
|
100
100
|
request.method = 'PATCH';
|
|
101
|
-
request.url.join({ resource: context.
|
|
101
|
+
request.url.join({ resource: context.resource, key: id });
|
|
102
102
|
request.body = data;
|
|
103
103
|
if (options?.include)
|
|
104
104
|
request.params.set('$include', String(options.include));
|
|
@@ -110,11 +110,11 @@ class HttpCollectionNode {
|
|
|
110
110
|
}
|
|
111
111
|
updateMany(data, options) {
|
|
112
112
|
const context = this[constants_js_1.kContext];
|
|
113
|
-
context.
|
|
113
|
+
context.endpoint = 'updateMany';
|
|
114
114
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
115
115
|
const request = requestHost[constants_js_1.kRequest];
|
|
116
116
|
request.method = 'PATCH';
|
|
117
|
-
request.url.join(context.
|
|
117
|
+
request.url.join(context.resource);
|
|
118
118
|
request.body = data;
|
|
119
119
|
if (options?.filter)
|
|
120
120
|
request.params.set('$filter', String(options.filter));
|
package/cjs/constants.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.kContext = exports.kRequest = exports.FORMDATA_CONTENT_TYPE_PATTERN = exports.TEXT_CONTENT_TYPE_PATTERN = exports.JSON_CONTENT_TYPE_PATTERN = void 0;
|
|
3
|
+
exports.kContext = exports.kRequest = exports.FORMDATA_CONTENT_TYPE_PATTERN = exports.TEXT_CONTENT_TYPE_PATTERN = exports.JSON_CONTENT_TYPE_PATTERN = exports.OPRA_JSON_CONTENT_TYPE_PATTERN = void 0;
|
|
4
|
+
exports.OPRA_JSON_CONTENT_TYPE_PATTERN = /^application\/\bopra\+json\b/i;
|
|
4
5
|
exports.JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
|
|
5
6
|
exports.TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
|
|
6
7
|
exports.FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
|
package/cjs/singleton-node.js
CHANGED
|
@@ -10,11 +10,11 @@ class HttpSingletonNode {
|
|
|
10
10
|
}
|
|
11
11
|
create(data, options) {
|
|
12
12
|
const context = this[constants_js_1.kContext];
|
|
13
|
-
context.
|
|
13
|
+
context.endpoint = 'create';
|
|
14
14
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
15
15
|
const request = requestHost[constants_js_1.kRequest];
|
|
16
16
|
request.method = 'POST';
|
|
17
|
-
request.url.join(context.
|
|
17
|
+
request.url.join(context.resource);
|
|
18
18
|
request.body = data;
|
|
19
19
|
if (options?.include)
|
|
20
20
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
|
@@ -26,20 +26,20 @@ class HttpSingletonNode {
|
|
|
26
26
|
}
|
|
27
27
|
delete(options) {
|
|
28
28
|
const context = this[constants_js_1.kContext];
|
|
29
|
-
context.
|
|
29
|
+
context.endpoint = 'delete';
|
|
30
30
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
31
31
|
const request = requestHost[constants_js_1.kRequest];
|
|
32
32
|
request.method = 'DELETE';
|
|
33
|
-
request.url.join({ resource: context.
|
|
33
|
+
request.url.join({ resource: context.resource });
|
|
34
34
|
return requestHost;
|
|
35
35
|
}
|
|
36
36
|
get(options) {
|
|
37
37
|
const context = this[constants_js_1.kContext];
|
|
38
|
-
context.
|
|
38
|
+
context.endpoint = 'get';
|
|
39
39
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
40
40
|
const request = requestHost[constants_js_1.kRequest];
|
|
41
41
|
request.method = 'GET';
|
|
42
|
-
request.url.join({ resource: context.
|
|
42
|
+
request.url.join({ resource: context.resource });
|
|
43
43
|
if (options?.include)
|
|
44
44
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
|
45
45
|
if (options?.pick)
|
|
@@ -50,11 +50,11 @@ class HttpSingletonNode {
|
|
|
50
50
|
}
|
|
51
51
|
update(data, options) {
|
|
52
52
|
const context = this[constants_js_1.kContext];
|
|
53
|
-
context.
|
|
53
|
+
context.endpoint = 'update';
|
|
54
54
|
const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
|
|
55
55
|
const request = requestHost[constants_js_1.kRequest];
|
|
56
56
|
request.method = 'PATCH';
|
|
57
|
-
request.url.join({ resource: context.
|
|
57
|
+
request.url.join({ resource: context.resource });
|
|
58
58
|
request.body = data;
|
|
59
59
|
if (options?.include)
|
|
60
60
|
request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
|
package/esm/client.js
CHANGED
|
@@ -3,7 +3,7 @@ import { isReadableStreamLike } from 'rxjs/internal/util/isReadableStreamLike';
|
|
|
3
3
|
import { DocumentFactory, isBlob, OpraURL } from '@opra/common';
|
|
4
4
|
import { ClientError } from './client-error.js';
|
|
5
5
|
import { HttpCollectionNode } from './collection-node.js';
|
|
6
|
-
import { FORMDATA_CONTENT_TYPE_PATTERN, JSON_CONTENT_TYPE_PATTERN, TEXT_CONTENT_TYPE_PATTERN } from './constants.js';
|
|
6
|
+
import { FORMDATA_CONTENT_TYPE_PATTERN, JSON_CONTENT_TYPE_PATTERN, OPRA_JSON_CONTENT_TYPE_PATTERN, TEXT_CONTENT_TYPE_PATTERN } from './constants.js';
|
|
7
7
|
import { HttpRequest } from './http-request.js';
|
|
8
8
|
import { HttpResponse } from './http-response.js';
|
|
9
9
|
import { HttpSingletonNode } from './singleton-node.js';
|
|
@@ -38,13 +38,15 @@ export class OpraHttpClient {
|
|
|
38
38
|
if (promise) {
|
|
39
39
|
return promise;
|
|
40
40
|
}
|
|
41
|
-
this[kAssets].metadataPromise = promise = lastValueFrom(this._sendRequest(
|
|
41
|
+
this[kAssets].metadataPromise = promise = lastValueFrom(this._sendRequest(HttpObserveType.Body, new HttpRequest({
|
|
42
42
|
method: 'GET',
|
|
43
|
-
url: '
|
|
43
|
+
url: '',
|
|
44
44
|
headers: new Headers({ 'accept': 'application/json' })
|
|
45
45
|
})));
|
|
46
46
|
return await promise
|
|
47
47
|
.then(async (body) => {
|
|
48
|
+
if (!body)
|
|
49
|
+
throw new Error(`No response returned.`);
|
|
48
50
|
const api = await DocumentFactory.createDocument(body);
|
|
49
51
|
this[kAssets].api = api;
|
|
50
52
|
return api;
|
|
@@ -65,43 +67,43 @@ export class OpraHttpClient {
|
|
|
65
67
|
resourceName = resourceName.name;
|
|
66
68
|
const ctx = {
|
|
67
69
|
client: this,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
resourceName,
|
|
71
|
-
send: (observe, request) => this._sendRequest('Collection', ctx.
|
|
70
|
+
sourceKind: 'Collection',
|
|
71
|
+
endpoint: '',
|
|
72
|
+
resource: resourceName,
|
|
73
|
+
send: (observe, request) => this._sendRequest(observe, request, 'Collection', ctx.endpoint, ctx),
|
|
72
74
|
// requestInterceptors: [
|
|
73
75
|
// // Validate resource exists and is a collection resource
|
|
74
76
|
// async () => {
|
|
75
77
|
// const metadata = await this.getMetadata();
|
|
76
|
-
// metadata.getCollection(ctx.
|
|
78
|
+
// metadata.getCollection(ctx.sourceName);
|
|
77
79
|
// }
|
|
78
80
|
// ],
|
|
79
81
|
responseInterceptors: []
|
|
80
82
|
};
|
|
81
83
|
return new HttpCollectionNode(ctx);
|
|
82
84
|
}
|
|
83
|
-
singleton(
|
|
85
|
+
singleton(sourceName) {
|
|
84
86
|
// If name argument is a class, we extract name from the class
|
|
85
|
-
if (typeof
|
|
86
|
-
|
|
87
|
+
if (typeof sourceName === 'function')
|
|
88
|
+
sourceName = sourceName.name;
|
|
87
89
|
const ctx = {
|
|
88
90
|
client: this,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
send: (observe, request) => this._sendRequest('Singleton', ctx.
|
|
91
|
+
sourceKind: 'Singleton',
|
|
92
|
+
endpoint: '',
|
|
93
|
+
resource: sourceName,
|
|
94
|
+
send: (observe, request) => this._sendRequest(observe, request, 'Singleton', ctx.endpoint, ctx),
|
|
93
95
|
// requestInterceptors: [
|
|
94
96
|
// // Validate resource exists and is a singleton resource
|
|
95
97
|
// async () => {
|
|
96
98
|
// const metadata = await this.getMetadata();
|
|
97
|
-
// metadata.getSingleton(ctx.
|
|
99
|
+
// metadata.getSingleton(ctx.sourceName);
|
|
98
100
|
// }
|
|
99
101
|
// ],
|
|
100
102
|
responseInterceptors: []
|
|
101
103
|
};
|
|
102
104
|
return new HttpSingletonNode(ctx);
|
|
103
105
|
}
|
|
104
|
-
_sendRequest(
|
|
106
|
+
_sendRequest(observe, request, sourceKind, endpoint, ctx) {
|
|
105
107
|
return new Observable(subscriber => {
|
|
106
108
|
(async () => {
|
|
107
109
|
request.inset(this.defaults);
|
|
@@ -158,7 +160,7 @@ export class OpraHttpClient {
|
|
|
158
160
|
event: HttpEventType.Sent,
|
|
159
161
|
});
|
|
160
162
|
const response = await this._fetch(url.toString(), request);
|
|
161
|
-
await this._handleResponse(
|
|
163
|
+
await this._handleResponse(observe, subscriber, request, response, sourceKind, endpoint, ctx);
|
|
162
164
|
})().catch(error => subscriber.error(error));
|
|
163
165
|
});
|
|
164
166
|
}
|
|
@@ -168,7 +170,7 @@ export class OpraHttpClient {
|
|
|
168
170
|
_createResponse(init) {
|
|
169
171
|
return new HttpResponse(init);
|
|
170
172
|
}
|
|
171
|
-
async _handleResponse(
|
|
173
|
+
async _handleResponse(observe, subscriber, request, fetchResponse, sourceKind, endpoint, ctx) {
|
|
172
174
|
const headers = fetchResponse.headers;
|
|
173
175
|
if (observe === HttpObserveType.Events) {
|
|
174
176
|
const response = this._createResponse({
|
|
@@ -187,12 +189,17 @@ export class OpraHttpClient {
|
|
|
187
189
|
}
|
|
188
190
|
let body;
|
|
189
191
|
let totalCount;
|
|
192
|
+
let affected;
|
|
193
|
+
const contentType = headers.get('Content-Type') || '';
|
|
190
194
|
if (fetchResponse.body) {
|
|
191
|
-
if (JSON_CONTENT_TYPE_PATTERN.test(
|
|
195
|
+
if (JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
192
196
|
body = await fetchResponse.json();
|
|
193
197
|
if (typeof body === 'string')
|
|
194
198
|
body = JSON.parse(body);
|
|
195
|
-
|
|
199
|
+
if (OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType)) {
|
|
200
|
+
totalCount = body.totalCount;
|
|
201
|
+
affected = body.affected;
|
|
202
|
+
}
|
|
196
203
|
}
|
|
197
204
|
else if (TEXT_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || ''))
|
|
198
205
|
body = await fetchResponse.text();
|
|
@@ -222,6 +229,8 @@ export class OpraHttpClient {
|
|
|
222
229
|
};
|
|
223
230
|
if (totalCount != null)
|
|
224
231
|
responseInit.totalCount = totalCount;
|
|
232
|
+
if (affected != null)
|
|
233
|
+
responseInit.affected = affected;
|
|
225
234
|
const response = this._createResponse(responseInit);
|
|
226
235
|
if (ctx) {
|
|
227
236
|
const responseInterceptors = [
|
|
@@ -233,8 +242,7 @@ export class OpraHttpClient {
|
|
|
233
242
|
}
|
|
234
243
|
}
|
|
235
244
|
if (observe === HttpObserveType.Body) {
|
|
236
|
-
if ((
|
|
237
|
-
(operation === 'create' || operation === 'get' || operation === 'findMany' || operation === 'update'))
|
|
245
|
+
if (OPRA_JSON_CONTENT_TYPE_PATTERN.test(contentType))
|
|
238
246
|
subscriber.next(body.data);
|
|
239
247
|
else
|
|
240
248
|
subscriber.next(body);
|
package/esm/collection-node.js
CHANGED
|
@@ -7,11 +7,11 @@ export class HttpCollectionNode {
|
|
|
7
7
|
}
|
|
8
8
|
create(data, options) {
|
|
9
9
|
const context = this[kContext];
|
|
10
|
-
context.
|
|
10
|
+
context.endpoint = 'create';
|
|
11
11
|
const requestHost = new HttpRequestObservable(context, options);
|
|
12
12
|
const request = requestHost[kRequest];
|
|
13
13
|
request.method = 'POST';
|
|
14
|
-
request.url.resolve(context.
|
|
14
|
+
request.url.resolve(context.resource);
|
|
15
15
|
request.body = data;
|
|
16
16
|
if (options?.include)
|
|
17
17
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
|
@@ -25,20 +25,20 @@ export class HttpCollectionNode {
|
|
|
25
25
|
if (id == null)
|
|
26
26
|
throw new TypeError(`'id' argument must have a value`);
|
|
27
27
|
const context = this[kContext];
|
|
28
|
-
context.
|
|
28
|
+
context.endpoint = 'delete';
|
|
29
29
|
const requestHost = new HttpRequestObservable(context, options);
|
|
30
30
|
const request = requestHost[kRequest];
|
|
31
31
|
request.method = 'DELETE';
|
|
32
|
-
request.url.join({ resource: context.
|
|
32
|
+
request.url.join({ resource: context.resource, key: id });
|
|
33
33
|
return requestHost;
|
|
34
34
|
}
|
|
35
35
|
deleteMany(options) {
|
|
36
36
|
const context = this[kContext];
|
|
37
|
-
context.
|
|
37
|
+
context.endpoint = 'deleteMany';
|
|
38
38
|
const requestHost = new HttpRequestObservable(context, options);
|
|
39
39
|
const request = requestHost[kRequest];
|
|
40
40
|
request.method = 'DELETE';
|
|
41
|
-
request.url.join(context.
|
|
41
|
+
request.url.join(context.resource);
|
|
42
42
|
if (options?.filter)
|
|
43
43
|
request.params.set('$filter', String(options.filter));
|
|
44
44
|
return requestHost;
|
|
@@ -47,11 +47,11 @@ export class HttpCollectionNode {
|
|
|
47
47
|
if (id == null)
|
|
48
48
|
throw new TypeError(`'id' argument must have a value`);
|
|
49
49
|
const context = this[kContext];
|
|
50
|
-
context.
|
|
50
|
+
context.endpoint = 'get';
|
|
51
51
|
const requestHost = new HttpRequestObservable(context, options);
|
|
52
52
|
const request = requestHost[kRequest];
|
|
53
53
|
request.method = 'GET';
|
|
54
|
-
request.url.join({ resource: context.
|
|
54
|
+
request.url.join({ resource: context.resource, key: id });
|
|
55
55
|
if (options?.include)
|
|
56
56
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
|
57
57
|
if (options?.pick)
|
|
@@ -62,11 +62,11 @@ export class HttpCollectionNode {
|
|
|
62
62
|
}
|
|
63
63
|
findMany(options) {
|
|
64
64
|
const context = this[kContext];
|
|
65
|
-
context.
|
|
65
|
+
context.endpoint = 'findMany';
|
|
66
66
|
const requestHost = new HttpRequestObservable(context, options);
|
|
67
67
|
const request = requestHost[kRequest];
|
|
68
68
|
request.method = 'GET';
|
|
69
|
-
request.url.join(context.
|
|
69
|
+
request.url.join(context.resource);
|
|
70
70
|
if (options?.include)
|
|
71
71
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
|
72
72
|
if (options?.pick)
|
|
@@ -91,11 +91,11 @@ export class HttpCollectionNode {
|
|
|
91
91
|
if (id == null)
|
|
92
92
|
throw new TypeError(`'id' argument must have a value`);
|
|
93
93
|
const context = this[kContext];
|
|
94
|
-
context.
|
|
94
|
+
context.endpoint = 'update';
|
|
95
95
|
const requestHost = new HttpRequestObservable(context, options);
|
|
96
96
|
const request = requestHost[kRequest];
|
|
97
97
|
request.method = 'PATCH';
|
|
98
|
-
request.url.join({ resource: context.
|
|
98
|
+
request.url.join({ resource: context.resource, key: id });
|
|
99
99
|
request.body = data;
|
|
100
100
|
if (options?.include)
|
|
101
101
|
request.params.set('$include', String(options.include));
|
|
@@ -107,11 +107,11 @@ export class HttpCollectionNode {
|
|
|
107
107
|
}
|
|
108
108
|
updateMany(data, options) {
|
|
109
109
|
const context = this[kContext];
|
|
110
|
-
context.
|
|
110
|
+
context.endpoint = 'updateMany';
|
|
111
111
|
const requestHost = new HttpRequestObservable(context, options);
|
|
112
112
|
const request = requestHost[kRequest];
|
|
113
113
|
request.method = 'PATCH';
|
|
114
|
-
request.url.join(context.
|
|
114
|
+
request.url.join(context.resource);
|
|
115
115
|
request.body = data;
|
|
116
116
|
if (options?.filter)
|
|
117
117
|
request.params.set('$filter', String(options.filter));
|
package/esm/constants.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const OPRA_JSON_CONTENT_TYPE_PATTERN = /^application\/\bopra\+json\b/i;
|
|
1
2
|
export const JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
|
|
2
3
|
export const TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
|
|
3
4
|
export const FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
|
package/esm/singleton-node.js
CHANGED
|
@@ -7,11 +7,11 @@ export class HttpSingletonNode {
|
|
|
7
7
|
}
|
|
8
8
|
create(data, options) {
|
|
9
9
|
const context = this[kContext];
|
|
10
|
-
context.
|
|
10
|
+
context.endpoint = 'create';
|
|
11
11
|
const requestHost = new HttpRequestObservable(context, options);
|
|
12
12
|
const request = requestHost[kRequest];
|
|
13
13
|
request.method = 'POST';
|
|
14
|
-
request.url.join(context.
|
|
14
|
+
request.url.join(context.resource);
|
|
15
15
|
request.body = data;
|
|
16
16
|
if (options?.include)
|
|
17
17
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
|
@@ -23,20 +23,20 @@ export class HttpSingletonNode {
|
|
|
23
23
|
}
|
|
24
24
|
delete(options) {
|
|
25
25
|
const context = this[kContext];
|
|
26
|
-
context.
|
|
26
|
+
context.endpoint = 'delete';
|
|
27
27
|
const requestHost = new HttpRequestObservable(context, options);
|
|
28
28
|
const request = requestHost[kRequest];
|
|
29
29
|
request.method = 'DELETE';
|
|
30
|
-
request.url.join({ resource: context.
|
|
30
|
+
request.url.join({ resource: context.resource });
|
|
31
31
|
return requestHost;
|
|
32
32
|
}
|
|
33
33
|
get(options) {
|
|
34
34
|
const context = this[kContext];
|
|
35
|
-
context.
|
|
35
|
+
context.endpoint = 'get';
|
|
36
36
|
const requestHost = new HttpRequestObservable(context, options);
|
|
37
37
|
const request = requestHost[kRequest];
|
|
38
38
|
request.method = 'GET';
|
|
39
|
-
request.url.join({ resource: context.
|
|
39
|
+
request.url.join({ resource: context.resource });
|
|
40
40
|
if (options?.include)
|
|
41
41
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
|
42
42
|
if (options?.pick)
|
|
@@ -47,11 +47,11 @@ export class HttpSingletonNode {
|
|
|
47
47
|
}
|
|
48
48
|
update(data, options) {
|
|
49
49
|
const context = this[kContext];
|
|
50
|
-
context.
|
|
50
|
+
context.endpoint = 'update';
|
|
51
51
|
const requestHost = new HttpRequestObservable(context, options);
|
|
52
52
|
const request = requestHost[kRequest];
|
|
53
53
|
request.method = 'PATCH';
|
|
54
|
-
request.url.join({ resource: context.
|
|
54
|
+
request.url.join({ resource: context.resource });
|
|
55
55
|
request.body = data;
|
|
56
56
|
if (options?.include)
|
|
57
57
|
request.params.set('$include', toArrayDef(options.include, []).join(','));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opra/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.1",
|
|
4
4
|
"description": "Opra Client package",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@browsery/i18next": "^0.6.0",
|
|
47
47
|
"@browsery/stream": "^0.5.0",
|
|
48
48
|
"@browsery/util": "^0.4.0",
|
|
49
|
-
"@opra/common": "^0.
|
|
49
|
+
"@opra/common": "^0.24.1",
|
|
50
50
|
"accepts": "^1.3.8",
|
|
51
51
|
"buffer": "^6.0.3",
|
|
52
52
|
"cookie": "^0.5.0",
|
package/types/client.d.ts
CHANGED
|
@@ -36,10 +36,10 @@ export declare class OpraHttpClient {
|
|
|
36
36
|
get serviceUrl(): string;
|
|
37
37
|
getMetadata(): Promise<ApiDocument>;
|
|
38
38
|
collection<TType = any>(resourceName: string | Type<TType>): HttpCollectionNode<TType>;
|
|
39
|
-
singleton<TType = any>(
|
|
40
|
-
protected _sendRequest<TBody>(
|
|
39
|
+
singleton<TType = any>(sourceName: string | Type<TType>): HttpSingletonNode<TType>;
|
|
40
|
+
protected _sendRequest<TBody>(observe: HttpObserveType, request: HttpRequest, sourceKind?: OpraSchema.Resource.Kind, endpoint?: string, ctx?: HttpClientContext): Observable<HttpResponse<TBody> | TBody | HttpEvent>;
|
|
41
41
|
protected _fetch(url: string, init?: RequestInit): Promise<Response>;
|
|
42
42
|
protected _createResponse(init?: HttpResponse.Initiator): HttpResponse;
|
|
43
|
-
protected _handleResponse(
|
|
43
|
+
protected _handleResponse(observe: HttpObserveType, subscriber: Subscriber<any>, request: HttpRequest, fetchResponse: Response, sourceKind?: OpraSchema.Resource.Kind, endpoint?: string, ctx?: HttpClientContext): Promise<void>;
|
|
44
44
|
}
|
|
45
45
|
export {};
|
package/types/constants.d.ts
CHANGED
package/types/http-response.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare namespace HttpResponse {
|
|
|
7
7
|
body?: any;
|
|
8
8
|
hasBody?: boolean;
|
|
9
9
|
totalCount?: number;
|
|
10
|
+
affected?: number;
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
13
|
export declare class HttpResponse<TBody = any> {
|
|
@@ -35,6 +36,7 @@ export declare class HttpResponse<TBody = any> {
|
|
|
35
36
|
*/
|
|
36
37
|
readonly body: TBody | null;
|
|
37
38
|
readonly totalCount?: number;
|
|
39
|
+
readonly affected?: number;
|
|
38
40
|
/**
|
|
39
41
|
* Returns true if response has body to be received
|
|
40
42
|
*/
|
package/types/types.d.ts
CHANGED
|
@@ -46,9 +46,9 @@ export declare enum HttpEventType {
|
|
|
46
46
|
}
|
|
47
47
|
export interface HttpClientContext {
|
|
48
48
|
client: OpraHttpClient;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
sourceKind: OpraSchema.Resource.Kind;
|
|
50
|
+
resource: string;
|
|
51
|
+
endpoint: string;
|
|
52
52
|
send: HttpRequestHandler;
|
|
53
53
|
requestInterceptors?: RequestInterceptor[];
|
|
54
54
|
responseInterceptors?: ResponseInterceptor[];
|