@opra/client 0.21.0 → 0.23.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.
Files changed (42) hide show
  1. package/browser.js +174 -115
  2. package/cjs/{http/http-client.js → client.js} +53 -28
  3. package/cjs/collection-node.js +124 -0
  4. package/cjs/constants.js +3 -2
  5. package/cjs/{http/http-request-observable.js → http-request-observable.js} +10 -10
  6. package/cjs/{http/http-request.js → http-request.js} +8 -10
  7. package/cjs/{http/http-response.js → http-response.js} +1 -1
  8. package/cjs/index.js +8 -8
  9. package/cjs/singleton-node.js +68 -0
  10. package/cjs/types.js +44 -0
  11. package/esm/{http/http-client.js → client.js} +52 -27
  12. package/esm/collection-node.js +120 -0
  13. package/esm/constants.js +2 -1
  14. package/esm/{http/http-request-observable.js → http-request-observable.js} +7 -7
  15. package/esm/{http/http-request.js → http-request.js} +8 -10
  16. package/esm/{http/http-response.js → http-response.js} +1 -1
  17. package/esm/index.js +8 -8
  18. package/esm/singleton-node.js +64 -0
  19. package/esm/types.js +41 -0
  20. package/package.json +2 -2
  21. package/types/{http/http-client.d.ts → client.d.ts} +7 -7
  22. package/types/{http/http-collection-node.d.ts → collection-node.d.ts} +24 -24
  23. package/types/constants.d.ts +2 -1
  24. package/types/{http/http-request-observable.d.ts → http-request-observable.d.ts} +7 -12
  25. package/types/{http/http-request.d.ts → http-request.d.ts} +7 -8
  26. package/types/{http/http-response.d.ts → http-response.d.ts} +2 -2
  27. package/types/{http/http-service-base.d.ts → http-service-base.d.ts} +1 -1
  28. package/types/index.d.ts +8 -8
  29. package/types/{http/http-singleton-node.d.ts → singleton-node.d.ts} +15 -15
  30. package/types/types.d.ts +114 -0
  31. package/cjs/http/http-collection-node.js +0 -110
  32. package/cjs/http/http-singleton-node.js +0 -63
  33. package/cjs/http/http-types.js +0 -2
  34. package/esm/http/http-collection-node.js +0 -106
  35. package/esm/http/http-singleton-node.js +0 -59
  36. package/esm/http/http-types.js +0 -1
  37. package/types/http/http-types.d.ts +0 -57
  38. /package/cjs/{http/batch-request.js → batch-request.js} +0 -0
  39. /package/cjs/{http/http-service-base.js → http-service-base.js} +0 -0
  40. /package/esm/{http/batch-request.js → batch-request.js} +0 -0
  41. /package/esm/{http/http-service-base.js → http-service-base.js} +0 -0
  42. /package/types/{http/batch-request.d.ts → batch-request.d.ts} +0 -0
package/browser.js CHANGED
@@ -6,6 +6,11 @@
6
6
  var __defProp = Object.defineProperty;
7
7
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
8
 
9
+ // ../../build/client/esm/client.js
10
+ import { lastValueFrom as lastValueFrom2, Observable as Observable2 } from "rxjs";
11
+ import { isReadableStreamLike } from "rxjs/internal/util/isReadableStreamLike";
12
+ import { DocumentFactory, isBlob, OpraURL as OpraURL2 } from "@opra/common";
13
+
9
14
  // ../../build/client/esm/client-error.js
10
15
  var ClientError = class extends Error {
11
16
  static {
@@ -24,22 +29,21 @@ var ClientError = class extends Error {
24
29
  }
25
30
  };
26
31
 
27
- // ../../build/client/esm/http/http-client.js
28
- import { lastValueFrom as lastValueFrom2, Observable as Observable2 } from "rxjs";
29
- import { isReadableStreamLike } from "rxjs/internal/util/isReadableStreamLike";
30
- import { DocumentFactory, HttpHeaderCodes, HttpParams, isBlob, joinPath } from "@opra/common";
32
+ // ../../build/client/esm/collection-node.js
33
+ import { toArrayDef } from "putil-varhelpers";
31
34
 
32
35
  // ../../build/client/esm/constants.js
33
36
  var JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
34
37
  var TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
35
38
  var FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
36
- var kHttpClientContext = Symbol("kContext");
39
+ var kRequest = Symbol.for("kRequest");
40
+ var kContext = Symbol.for("kContext");
37
41
 
38
- // ../../build/client/esm/http/http-request-observable.js
42
+ // ../../build/client/esm/http-request-observable.js
39
43
  import { lastValueFrom, Observable } from "rxjs";
40
44
  import { uid } from "@opra/common";
41
45
 
42
- // ../../build/client/esm/http/http-request.js
46
+ // ../../build/client/esm/http-request.js
43
47
  import { OpraURL } from "@opra/common";
44
48
  var directCopyProperties = [
45
49
  "cache",
@@ -72,24 +76,22 @@ var HttpRequest = class _HttpRequest {
72
76
  this.referrerPolicy = init?.referrerPolicy || "";
73
77
  this.signal = init?.signal || new AbortController().signal;
74
78
  this.body = init?.body;
75
- this.urlInstance = new OpraURL(init?.url);
76
- if (init?.params)
77
- this.params.appendAll(init.params);
79
+ this.parsedUrl = new OpraURL(init?.url);
80
+ if (init?.params) {
81
+ const params = new URLSearchParams(init.params);
82
+ params.forEach((v, k) => this.params.set(k, v));
83
+ }
78
84
  }
79
85
  /** Returns the URL of request as a string. */
80
86
  get url() {
81
- return this.urlInstance.href;
87
+ return this.parsedUrl;
82
88
  }
83
89
  set url(value) {
84
- this.urlInstance.parse(value);
90
+ this.parsedUrl = value;
85
91
  }
86
92
  /** Returns the searchParams of the URL as OpraURLSearchParams */
87
93
  get params() {
88
- return this.urlInstance.searchParams;
89
- }
90
- /** Returns the path part of URL as OpraURLPath */
91
- get path() {
92
- return this.urlInstance.path;
94
+ return this.parsedUrl.searchParams;
93
95
  }
94
96
  clone(...update) {
95
97
  const out = new _HttpRequest();
@@ -131,17 +133,33 @@ var HttpRequest = class _HttpRequest {
131
133
  }
132
134
  };
133
135
 
134
- // ../../build/client/esm/http/http-request-observable.js
135
- var kRequest = Symbol("kRequest");
136
+ // ../../build/client/esm/types.js
137
+ var HttpObserveType;
138
+ (function(HttpObserveType2) {
139
+ HttpObserveType2["Response"] = "response";
140
+ HttpObserveType2["Body"] = "body";
141
+ HttpObserveType2["Events"] = "events";
142
+ })(HttpObserveType || (HttpObserveType = {}));
143
+ var HttpEventType;
144
+ (function(HttpEventType2) {
145
+ HttpEventType2["Sent"] = "sent";
146
+ HttpEventType2["UploadProgress"] = "upload-progress";
147
+ HttpEventType2["ResponseHeader"] = "response-header";
148
+ HttpEventType2["DownloadProgress"] = "download-progress";
149
+ HttpEventType2["Response"] = "response";
150
+ HttpEventType2["Custom"] = "custom";
151
+ })(HttpEventType || (HttpEventType = {}));
152
+
153
+ // ../../build/client/esm/http-request-observable.js
136
154
  var HttpRequestObservable = class extends Observable {
137
155
  static {
138
156
  __name(this, "HttpRequestObservable");
139
157
  }
140
158
  constructor(context, options) {
141
159
  super((subscriber) => {
142
- context.send(options?.observe || "body", this[kRequest]).subscribe(subscriber);
160
+ context.send(options?.observe || HttpObserveType.Body, this[kRequest]).subscribe(subscriber);
143
161
  });
144
- this[kHttpClientContext] = context;
162
+ this[kContext] = context;
145
163
  this[kRequest] = new HttpRequest(options?.http);
146
164
  this.contentId = uid(6);
147
165
  }
@@ -158,126 +176,137 @@ var HttpRequestObservable = class extends Observable {
158
176
  return this;
159
177
  }
160
178
  async fetch(observe) {
161
- return lastValueFrom(this[kHttpClientContext].send(observe || "body", this[kRequest]));
179
+ return lastValueFrom(this[kContext].send(observe || HttpObserveType.Body, this[kRequest]));
162
180
  }
163
181
  with(cb) {
164
182
  cb(this);
165
183
  return this;
166
184
  }
167
185
  };
168
- HttpRequestObservable.kContext = kHttpClientContext;
169
- HttpRequestObservable.kRequest = kRequest;
170
186
 
171
- // ../../build/client/esm/http/http-collection-node.js
187
+ // ../../build/client/esm/collection-node.js
172
188
  var HttpCollectionNode = class {
173
189
  static {
174
190
  __name(this, "HttpCollectionNode");
175
191
  }
176
192
  constructor(context) {
177
- this[kHttpClientContext] = context;
193
+ this[kContext] = context;
178
194
  }
179
195
  create(data, options) {
180
- const context = this[kHttpClientContext];
196
+ const context = this[kContext];
197
+ context.operation = "create";
181
198
  const requestHost = new HttpRequestObservable(context, options);
182
- const request = requestHost[HttpRequestObservable.kRequest];
199
+ const request = requestHost[kRequest];
183
200
  request.method = "POST";
184
- request.url = context.resourceName;
201
+ request.url.resolve(context.resourceName);
185
202
  request.body = data;
186
203
  if (options?.include)
187
- request.params.set("$include", options.include);
204
+ request.params.set("$include", toArrayDef(options.include, []).join(","));
188
205
  if (options?.pick)
189
- request.params.set("$pick", options.pick);
206
+ request.params.set("$pick", toArrayDef(options.pick, []).join(","));
190
207
  if (options?.omit)
191
- request.params.set("$omit", options.omit);
208
+ request.params.set("$omit", toArrayDef(options.omit, []).join(","));
192
209
  return requestHost;
193
210
  }
194
211
  delete(id, options) {
195
- const context = this[kHttpClientContext];
212
+ if (id == null)
213
+ throw new TypeError(`'id' argument must have a value`);
214
+ const context = this[kContext];
215
+ context.operation = "delete";
196
216
  const requestHost = new HttpRequestObservable(context, options);
197
- const request = requestHost[HttpRequestObservable.kRequest];
217
+ const request = requestHost[kRequest];
198
218
  request.method = "DELETE";
199
- request.path.join({ resource: context.resourceName, key: id });
219
+ request.url.join({ resource: context.resourceName, key: id });
200
220
  return requestHost;
201
221
  }
202
222
  deleteMany(options) {
203
- const context = this[kHttpClientContext];
223
+ const context = this[kContext];
224
+ context.operation = "deleteMany";
204
225
  const requestHost = new HttpRequestObservable(context, options);
205
- const request = requestHost[HttpRequestObservable.kRequest];
226
+ const request = requestHost[kRequest];
206
227
  request.method = "DELETE";
207
- request.url = context.resourceName;
228
+ request.url.join(context.resourceName);
208
229
  if (options?.filter)
209
- request.params.set("$filter", options.filter);
230
+ request.params.set("$filter", String(options.filter));
210
231
  return requestHost;
211
232
  }
212
233
  get(id, options) {
213
- const context = this[kHttpClientContext];
234
+ if (id == null)
235
+ throw new TypeError(`'id' argument must have a value`);
236
+ const context = this[kContext];
237
+ context.operation = "get";
214
238
  const requestHost = new HttpRequestObservable(context, options);
215
- const request = requestHost[HttpRequestObservable.kRequest];
239
+ const request = requestHost[kRequest];
216
240
  request.method = "GET";
217
- request.path.join({ resource: context.resourceName, key: id });
241
+ request.url.join({ resource: context.resourceName, key: id });
218
242
  if (options?.include)
219
- request.params.set("$include", options.include);
243
+ request.params.set("$include", toArrayDef(options.include, []).join(","));
220
244
  if (options?.pick)
221
- request.params.set("$pick", options.pick);
245
+ request.params.set("$pick", toArrayDef(options.pick, []).join(","));
222
246
  if (options?.omit)
223
- request.params.set("$omit", options.omit);
247
+ request.params.set("$omit", toArrayDef(options.omit, []).join(","));
224
248
  return requestHost;
225
249
  }
226
250
  findMany(options) {
227
- const context = this[kHttpClientContext];
251
+ const context = this[kContext];
252
+ context.operation = "findMany";
228
253
  const requestHost = new HttpRequestObservable(context, options);
229
- const request = requestHost[HttpRequestObservable.kRequest];
254
+ const request = requestHost[kRequest];
230
255
  request.method = "GET";
231
- request.url = context.resourceName;
256
+ request.url.join(context.resourceName);
232
257
  if (options?.include)
233
- request.params.set("$include", options.include);
258
+ request.params.set("$include", toArrayDef(options.include, []).join(","));
234
259
  if (options?.pick)
235
- request.params.set("$pick", options.pick);
260
+ request.params.set("$pick", toArrayDef(options.pick, []).join(","));
236
261
  if (options?.omit)
237
- request.params.set("$omit", options.omit);
262
+ request.params.set("$omit", toArrayDef(options.omit, []).join(","));
238
263
  if (options?.sort)
239
- request.params.set("$sort", options.sort);
264
+ request.params.set("$sort", toArrayDef(options.sort, []).join(","));
240
265
  if (options?.filter)
241
- request.params.set("$filter", options.filter);
266
+ request.params.set("$filter", String(options.filter));
242
267
  if (options?.limit != null)
243
- request.params.set("$limit", options.limit);
268
+ request.params.set("$limit", String(options.limit));
244
269
  if (options?.skip != null)
245
- request.params.set("$skip", options.skip);
270
+ request.params.set("$skip", String(options.skip));
246
271
  if (options?.count != null)
247
- request.params.set("$count", options.count);
272
+ request.params.set("$count", String(options.count));
248
273
  if (options?.distinct != null)
249
- request.params.set("$distinct", options.distinct);
274
+ request.params.set("$distinct", String(options.distinct));
250
275
  return requestHost;
251
276
  }
252
277
  update(id, data, options) {
253
- const context = this[kHttpClientContext];
278
+ if (id == null)
279
+ throw new TypeError(`'id' argument must have a value`);
280
+ const context = this[kContext];
281
+ context.operation = "update";
254
282
  const requestHost = new HttpRequestObservable(context, options);
255
- const request = requestHost[HttpRequestObservable.kRequest];
283
+ const request = requestHost[kRequest];
256
284
  request.method = "PATCH";
257
- request.path.join({ resource: context.resourceName, key: id });
285
+ request.url.join({ resource: context.resourceName, key: id });
258
286
  request.body = data;
259
287
  if (options?.include)
260
- request.params.set("$include", options.include);
288
+ request.params.set("$include", String(options.include));
261
289
  if (options?.pick)
262
- request.params.set("$pick", options.pick);
290
+ request.params.set("$pick", String(options.pick));
263
291
  if (options?.omit)
264
- request.params.set("$omit", options.omit);
292
+ request.params.set("$omit", String(options.omit));
265
293
  return requestHost;
266
294
  }
267
295
  updateMany(data, options) {
268
- const context = this[kHttpClientContext];
296
+ const context = this[kContext];
297
+ context.operation = "updateMany";
269
298
  const requestHost = new HttpRequestObservable(context, options);
270
- const request = requestHost[HttpRequestObservable.kRequest];
299
+ const request = requestHost[kRequest];
271
300
  request.method = "PATCH";
272
- request.url = context.resourceName;
301
+ request.url.join(context.resourceName);
273
302
  request.body = data;
274
303
  if (options?.filter)
275
- request.params.set("$filter", options.filter);
304
+ request.params.set("$filter", String(options.filter));
276
305
  return requestHost;
277
306
  }
278
307
  };
279
308
 
280
- // ../../build/client/esm/http/http-response.js
309
+ // ../../build/client/esm/http-response.js
281
310
  var HttpResponse = class _HttpResponse {
282
311
  static {
283
312
  __name(this, "HttpResponse");
@@ -291,76 +320,81 @@ var HttpResponse = class _HttpResponse {
291
320
  this.ok = this.status >= 200 && this.status < 300;
292
321
  this.body = init?.body;
293
322
  this.hasBody = init?.body != null || !!init?.hasBody;
294
- this.totalMatches = init?.totalMatches;
323
+ this.totalCount = init?.totalCount;
295
324
  }
296
325
  clone(update) {
297
326
  return new _HttpResponse({ ...this, ...update });
298
327
  }
299
328
  };
300
329
 
301
- // ../../build/client/esm/http/http-singleton-node.js
330
+ // ../../build/client/esm/singleton-node.js
331
+ import { toArrayDef as toArrayDef2 } from "putil-varhelpers";
302
332
  var HttpSingletonNode = class {
303
333
  static {
304
334
  __name(this, "HttpSingletonNode");
305
335
  }
306
336
  constructor(context) {
307
- this[kHttpClientContext] = context;
337
+ this[kContext] = context;
308
338
  }
309
339
  create(data, options) {
310
- const context = this[kHttpClientContext];
340
+ const context = this[kContext];
341
+ context.operation = "create";
311
342
  const requestHost = new HttpRequestObservable(context, options);
312
- const request = requestHost[HttpRequestObservable.kRequest];
343
+ const request = requestHost[kRequest];
313
344
  request.method = "POST";
314
- request.url = context.resourceName;
345
+ request.url.join(context.resourceName);
315
346
  request.body = data;
316
347
  if (options?.include)
317
- request.params.set("$include", options.include);
348
+ request.params.set("$include", toArrayDef2(options.include, []).join(","));
318
349
  if (options?.pick)
319
- request.params.set("$pick", options.pick);
350
+ request.params.set("$pick", toArrayDef2(options.pick, []).join(","));
320
351
  if (options?.omit)
321
- request.params.set("$omit", options.omit);
352
+ request.params.set("$omit", toArrayDef2(options.omit, []).join(","));
322
353
  return requestHost;
323
354
  }
324
355
  delete(options) {
325
- const context = this[kHttpClientContext];
356
+ const context = this[kContext];
357
+ context.operation = "delete";
326
358
  const requestHost = new HttpRequestObservable(context, options);
327
- const request = requestHost[HttpRequestObservable.kRequest];
359
+ const request = requestHost[kRequest];
328
360
  request.method = "DELETE";
329
- request.path.join({ resource: context.resourceName });
361
+ request.url.join({ resource: context.resourceName });
330
362
  return requestHost;
331
363
  }
332
364
  get(options) {
333
- const context = this[kHttpClientContext];
365
+ const context = this[kContext];
366
+ context.operation = "get";
334
367
  const requestHost = new HttpRequestObservable(context, options);
335
- const request = requestHost[HttpRequestObservable.kRequest];
368
+ const request = requestHost[kRequest];
336
369
  request.method = "GET";
337
- request.path.join({ resource: context.resourceName });
370
+ request.url.join({ resource: context.resourceName });
338
371
  if (options?.include)
339
- request.params.set("$include", options.include);
372
+ request.params.set("$include", toArrayDef2(options.include, []).join(","));
340
373
  if (options?.pick)
341
- request.params.set("$pick", options.pick);
374
+ request.params.set("$pick", toArrayDef2(options.pick, []).join(","));
342
375
  if (options?.omit)
343
- request.params.set("$omit", options.omit);
376
+ request.params.set("$omit", toArrayDef2(options.omit, []).join(","));
344
377
  return requestHost;
345
378
  }
346
379
  update(data, options) {
347
- const context = this[kHttpClientContext];
380
+ const context = this[kContext];
381
+ context.operation = "update";
348
382
  const requestHost = new HttpRequestObservable(context, options);
349
- const request = requestHost[HttpRequestObservable.kRequest];
383
+ const request = requestHost[kRequest];
350
384
  request.method = "PATCH";
351
- request.path.join({ resource: context.resourceName });
385
+ request.url.join({ resource: context.resourceName });
352
386
  request.body = data;
353
387
  if (options?.include)
354
- request.params.set("$include", options.include);
388
+ request.params.set("$include", toArrayDef2(options.include, []).join(","));
355
389
  if (options?.pick)
356
- request.params.set("$pick", options.pick);
390
+ request.params.set("$pick", toArrayDef2(options.pick, []).join(","));
357
391
  if (options?.omit)
358
- request.params.set("$omit", options.omit);
392
+ request.params.set("$omit", toArrayDef2(options.omit, []).join(","));
359
393
  return requestHost;
360
394
  }
361
395
  };
362
396
 
363
- // ../../build/client/esm/http/http-client.js
397
+ // ../../build/client/esm/client.js
364
398
  var kAssets = Symbol("kAssets");
365
399
  var OpraHttpClient = class {
366
400
  static {
@@ -379,7 +413,7 @@ var OpraHttpClient = class {
379
413
  this.defaults = {
380
414
  ...options?.defaults,
381
415
  headers: options?.defaults?.headers instanceof Headers ? options?.defaults?.headers : new Headers(options?.defaults?.headers),
382
- params: options?.defaults?.params instanceof HttpParams ? options?.defaults?.params : new HttpParams(options?.defaults?.params)
416
+ params: options?.defaults?.params instanceof URLSearchParams ? options?.defaults?.params : new URLSearchParams(options?.defaults?.params)
383
417
  };
384
418
  }
385
419
  get serviceUrl() {
@@ -392,7 +426,7 @@ var OpraHttpClient = class {
392
426
  if (promise) {
393
427
  return promise;
394
428
  }
395
- this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest("body", new HttpRequest({
429
+ this[kAssets].metadataPromise = promise = lastValueFrom2(this._sendRequest("Singleton", "get", HttpObserveType.Body, new HttpRequest({
396
430
  method: "GET",
397
431
  url: "$metadata",
398
432
  headers: new Headers({ "accept": "application/json" })
@@ -402,7 +436,7 @@ var OpraHttpClient = class {
402
436
  this[kAssets].api = api;
403
437
  return api;
404
438
  }).catch((e) => {
405
- e.message = "Unable to fetch metadata from " + this.serviceUrl + ". " + e.message;
439
+ e.message = "Unable to fetch metadata from service url (" + this.serviceUrl + "). " + e.message;
406
440
  throw e;
407
441
  }).finally(() => delete this[kAssets].metadataPromise);
408
442
  }
@@ -415,8 +449,10 @@ var OpraHttpClient = class {
415
449
  resourceName = resourceName.name;
416
450
  const ctx = {
417
451
  client: this,
452
+ resourceKind: "Collection",
453
+ operation: "",
418
454
  resourceName,
419
- send: (observe, request) => this._sendRequest(observe, request, ctx),
455
+ send: (observe, request) => this._sendRequest("Collection", ctx.operation, observe, request, ctx),
420
456
  // requestInterceptors: [
421
457
  // // Validate resource exists and is a collection resource
422
458
  // async () => {
@@ -433,8 +469,10 @@ var OpraHttpClient = class {
433
469
  resourceName = resourceName.name;
434
470
  const ctx = {
435
471
  client: this,
472
+ resourceKind: "Singleton",
473
+ operation: "",
436
474
  resourceName,
437
- send: (observe, request) => this._sendRequest(observe, request, ctx),
475
+ send: (observe, request) => this._sendRequest("Singleton", ctx.operation, observe, request, ctx),
438
476
  // requestInterceptors: [
439
477
  // // Validate resource exists and is a singleton resource
440
478
  // async () => {
@@ -446,11 +484,11 @@ var OpraHttpClient = class {
446
484
  };
447
485
  return new HttpSingletonNode(ctx);
448
486
  }
449
- _sendRequest(observe, request, ctx) {
487
+ _sendRequest(resourceKind, operation, observe, request, ctx) {
450
488
  return new Observable2((subscriber) => {
451
489
  (async () => {
452
490
  request.inset(this.defaults);
453
- const url = request.url.includes("://") ? request.url : joinPath(this.serviceUrl, request.url);
491
+ const url = new OpraURL2(request.url, this.serviceUrl);
454
492
  let body;
455
493
  if (request.body) {
456
494
  let contentType;
@@ -492,10 +530,14 @@ var OpraHttpClient = class {
492
530
  await interceptor(ctx, request);
493
531
  }
494
532
  }
495
- if (observe === "events")
496
- subscriber.next({ event: "sent", request });
497
- const response = await this._fetch(url, request);
498
- await this._handleResponse(observe, subscriber, request, response);
533
+ if (observe === HttpObserveType.Events)
534
+ subscriber.next({
535
+ observe,
536
+ request,
537
+ event: HttpEventType.Sent
538
+ });
539
+ const response = await this._fetch(url.toString(), request);
540
+ await this._handleResponse(resourceKind, operation, observe, subscriber, request, response, ctx);
499
541
  })().catch((error) => subscriber.error(error));
500
542
  });
501
543
  }
@@ -505,9 +547,9 @@ var OpraHttpClient = class {
505
547
  _createResponse(init) {
506
548
  return new HttpResponse(init);
507
549
  }
508
- async _handleResponse(observe, subscriber, request, fetchResponse, ctx) {
550
+ async _handleResponse(resourceKind, operation, observe, subscriber, request, fetchResponse, ctx) {
509
551
  const headers = fetchResponse.headers;
510
- if (observe === "events") {
552
+ if (observe === HttpObserveType.Events) {
511
553
  const response2 = this._createResponse({
512
554
  url: fetchResponse.url,
513
555
  headers,
@@ -515,14 +557,21 @@ var OpraHttpClient = class {
515
557
  statusText: fetchResponse.statusText,
516
558
  hasBody: !!fetchResponse.body
517
559
  });
518
- subscriber.next({ event: "headers-received", request, response: response2 });
560
+ subscriber.next({
561
+ observe,
562
+ request,
563
+ event: HttpEventType.ResponseHeader,
564
+ response: response2
565
+ });
519
566
  }
520
567
  let body;
568
+ let totalCount;
521
569
  if (fetchResponse.body) {
522
570
  if (JSON_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || "")) {
523
571
  body = await fetchResponse.json();
524
572
  if (typeof body === "string")
525
573
  body = JSON.parse(body);
574
+ totalCount = body.totalCount;
526
575
  } else if (TEXT_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
527
576
  body = await fetchResponse.text();
528
577
  else if (FORMDATA_CONTENT_TYPE_PATTERN.test(headers.get("Content-Type") || ""))
@@ -533,7 +582,7 @@ var OpraHttpClient = class {
533
582
  body = buf;
534
583
  }
535
584
  }
536
- if (observe === "body" && fetchResponse.status >= 400 && fetchResponse.status < 600) {
585
+ if (observe === HttpObserveType.Body && fetchResponse.status >= 400 && fetchResponse.status < 600) {
537
586
  subscriber.error(new ClientError({
538
587
  message: fetchResponse.status + " " + fetchResponse.statusText,
539
588
  status: fetchResponse.status,
@@ -549,8 +598,8 @@ var OpraHttpClient = class {
549
598
  statusText: fetchResponse.statusText,
550
599
  body
551
600
  };
552
- if (fetchResponse.headers.has(HttpHeaderCodes.X_Opra_Total_Matches))
553
- responseInit.totalMatches = parseInt(fetchResponse.headers.get(HttpHeaderCodes.X_Opra_Total_Matches), 10);
601
+ if (totalCount != null)
602
+ responseInit.totalCount = totalCount;
554
603
  const response = this._createResponse(responseInit);
555
604
  if (ctx) {
556
605
  const responseInterceptors = [
@@ -561,11 +610,19 @@ var OpraHttpClient = class {
561
610
  await interceptor(ctx, observe, request);
562
611
  }
563
612
  }
564
- if (observe === "body") {
565
- subscriber.next(body);
613
+ if (observe === HttpObserveType.Body) {
614
+ if ((resourceKind === "Collection" || resourceKind === "Singleton") && (operation === "create" || operation === "get" || operation === "findMany" || operation === "update"))
615
+ subscriber.next(body.data);
616
+ else
617
+ subscriber.next(body);
566
618
  } else {
567
- if (observe === "events")
568
- subscriber.next({ event: "response", request, response });
619
+ if (observe === HttpObserveType.Events)
620
+ subscriber.next({
621
+ observe,
622
+ request,
623
+ event: HttpEventType.Response,
624
+ response
625
+ });
569
626
  else
570
627
  subscriber.next(response);
571
628
  }
@@ -574,7 +631,7 @@ var OpraHttpClient = class {
574
631
  };
575
632
  OpraHttpClient.kAssets = kAssets;
576
633
 
577
- // ../../build/client/esm/http/http-service-base.js
634
+ // ../../build/client/esm/http-service-base.js
578
635
  var HttpServiceBase = class {
579
636
  static {
580
637
  __name(this, "HttpServiceBase");
@@ -586,6 +643,8 @@ var HttpServiceBase = class {
586
643
  export {
587
644
  ClientError,
588
645
  HttpCollectionNode,
646
+ HttpEventType,
647
+ HttpObserveType,
589
648
  HttpRequest,
590
649
  HttpRequestObservable,
591
650
  HttpResponse,