@opra/client 0.22.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.
@@ -1,109 +1,123 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpCollectionNode = void 0;
4
+ const putil_varhelpers_1 = require("putil-varhelpers");
4
5
  const constants_js_1 = require("./constants.js");
5
6
  const http_request_observable_js_1 = require("./http-request-observable.js");
6
7
  class HttpCollectionNode {
7
8
  constructor(context) {
8
- this[constants_js_1.kHttpClientContext] = context;
9
+ this[constants_js_1.kContext] = context;
9
10
  }
10
11
  create(data, options) {
11
- const context = this[constants_js_1.kHttpClientContext];
12
+ const context = this[constants_js_1.kContext];
13
+ context.operation = 'create';
12
14
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
13
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
15
+ const request = requestHost[constants_js_1.kRequest];
14
16
  request.method = 'POST';
15
- request.url = context.resourceName;
17
+ request.url.resolve(context.resourceName);
16
18
  request.body = data;
17
19
  if (options?.include)
18
- request.params.set('$include', options.include);
20
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
19
21
  if (options?.pick)
20
- request.params.set('$pick', options.pick);
22
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
21
23
  if (options?.omit)
22
- request.params.set('$omit', options.omit);
24
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
23
25
  return requestHost;
24
26
  }
25
27
  delete(id, options) {
26
- const context = this[constants_js_1.kHttpClientContext];
28
+ if (id == null)
29
+ throw new TypeError(`'id' argument must have a value`);
30
+ const context = this[constants_js_1.kContext];
31
+ context.operation = 'delete';
27
32
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
28
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
33
+ const request = requestHost[constants_js_1.kRequest];
29
34
  request.method = 'DELETE';
30
- request.path.join({ resource: context.resourceName, key: id });
35
+ request.url.join({ resource: context.resourceName, key: id });
31
36
  return requestHost;
32
37
  }
33
38
  deleteMany(options) {
34
- const context = this[constants_js_1.kHttpClientContext];
39
+ const context = this[constants_js_1.kContext];
40
+ context.operation = 'deleteMany';
35
41
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
36
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
42
+ const request = requestHost[constants_js_1.kRequest];
37
43
  request.method = 'DELETE';
38
- request.url = context.resourceName;
44
+ request.url.join(context.resourceName);
39
45
  if (options?.filter)
40
- request.params.set('$filter', options.filter);
46
+ request.params.set('$filter', String(options.filter));
41
47
  return requestHost;
42
48
  }
43
49
  get(id, options) {
44
- const context = this[constants_js_1.kHttpClientContext];
50
+ if (id == null)
51
+ throw new TypeError(`'id' argument must have a value`);
52
+ const context = this[constants_js_1.kContext];
53
+ context.operation = 'get';
45
54
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
46
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
55
+ const request = requestHost[constants_js_1.kRequest];
47
56
  request.method = 'GET';
48
- request.path.join({ resource: context.resourceName, key: id });
57
+ request.url.join({ resource: context.resourceName, key: id });
49
58
  if (options?.include)
50
- request.params.set('$include', options.include);
59
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
51
60
  if (options?.pick)
52
- request.params.set('$pick', options.pick);
61
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
53
62
  if (options?.omit)
54
- request.params.set('$omit', options.omit);
63
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
55
64
  return requestHost;
56
65
  }
57
66
  findMany(options) {
58
- const context = this[constants_js_1.kHttpClientContext];
67
+ const context = this[constants_js_1.kContext];
68
+ context.operation = 'findMany';
59
69
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
60
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
70
+ const request = requestHost[constants_js_1.kRequest];
61
71
  request.method = 'GET';
62
- request.url = context.resourceName;
72
+ request.url.join(context.resourceName);
63
73
  if (options?.include)
64
- request.params.set('$include', options.include);
74
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
65
75
  if (options?.pick)
66
- request.params.set('$pick', options.pick);
76
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
67
77
  if (options?.omit)
68
- request.params.set('$omit', options.omit);
78
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
69
79
  if (options?.sort)
70
- request.params.set('$sort', options.sort);
80
+ request.params.set('$sort', (0, putil_varhelpers_1.toArrayDef)(options.sort, []).join(','));
71
81
  if (options?.filter)
72
- request.params.set('$filter', options.filter);
82
+ request.params.set('$filter', String(options.filter));
73
83
  if (options?.limit != null)
74
- request.params.set('$limit', options.limit);
84
+ request.params.set('$limit', String(options.limit));
75
85
  if (options?.skip != null)
76
- request.params.set('$skip', options.skip);
86
+ request.params.set('$skip', String(options.skip));
77
87
  if (options?.count != null)
78
- request.params.set('$count', options.count);
88
+ request.params.set('$count', String(options.count));
79
89
  if (options?.distinct != null)
80
- request.params.set('$distinct', options.distinct);
90
+ request.params.set('$distinct', String(options.distinct));
81
91
  return requestHost;
82
92
  }
83
93
  update(id, data, options) {
84
- const context = this[constants_js_1.kHttpClientContext];
94
+ if (id == null)
95
+ throw new TypeError(`'id' argument must have a value`);
96
+ const context = this[constants_js_1.kContext];
97
+ context.operation = 'update';
85
98
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
86
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
99
+ const request = requestHost[constants_js_1.kRequest];
87
100
  request.method = 'PATCH';
88
- request.path.join({ resource: context.resourceName, key: id });
101
+ request.url.join({ resource: context.resourceName, key: id });
89
102
  request.body = data;
90
103
  if (options?.include)
91
- request.params.set('$include', options.include);
104
+ request.params.set('$include', String(options.include));
92
105
  if (options?.pick)
93
- request.params.set('$pick', options.pick);
106
+ request.params.set('$pick', String(options.pick));
94
107
  if (options?.omit)
95
- request.params.set('$omit', options.omit);
108
+ request.params.set('$omit', String(options.omit));
96
109
  return requestHost;
97
110
  }
98
111
  updateMany(data, options) {
99
- const context = this[constants_js_1.kHttpClientContext];
112
+ const context = this[constants_js_1.kContext];
113
+ context.operation = 'updateMany';
100
114
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
101
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
115
+ const request = requestHost[constants_js_1.kRequest];
102
116
  request.method = 'PATCH';
103
- request.url = context.resourceName;
117
+ request.url.join(context.resourceName);
104
118
  request.body = data;
105
119
  if (options?.filter)
106
- request.params.set('$filter', options.filter);
120
+ request.params.set('$filter', String(options.filter));
107
121
  return requestHost;
108
122
  }
109
123
  }
package/cjs/constants.js CHANGED
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.kHttpClientContext = 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 = void 0;
4
4
  exports.JSON_CONTENT_TYPE_PATTERN = /^application\/([\w-]+\+)?\bjson\b/i;
5
5
  exports.TEXT_CONTENT_TYPE_PATTERN = /^text\/.*$/i;
6
6
  exports.FORMDATA_CONTENT_TYPE_PATTERN = /^multipart\/\bform-data\b/i;
7
- exports.kHttpClientContext = Symbol('kContext');
7
+ exports.kRequest = Symbol.for('kRequest');
8
+ exports.kContext = Symbol.for('kContext');
@@ -6,18 +6,18 @@ const common_1 = require("@opra/common");
6
6
  const constants_js_1 = require("./constants.js");
7
7
  const http_request_js_1 = require("./http-request.js");
8
8
  const types_js_1 = require("./types.js");
9
- const kRequest = Symbol('kRequest');
10
9
  class HttpRequestObservable extends rxjs_1.Observable {
11
10
  constructor(context, options) {
12
11
  super((subscriber) => {
13
- context.send(options?.observe || types_js_1.HttpObserveType.Body, this[kRequest]).subscribe((subscriber));
12
+ context.send(options?.observe || types_js_1.HttpObserveType.Body, this[constants_js_1.kRequest])
13
+ .subscribe((subscriber));
14
14
  });
15
- this[constants_js_1.kHttpClientContext] = context;
16
- this[kRequest] = new http_request_js_1.HttpRequest(options?.http);
15
+ this[constants_js_1.kContext] = context;
16
+ this[constants_js_1.kRequest] = new http_request_js_1.HttpRequest(options?.http);
17
17
  this.contentId = (0, common_1.uid)(6);
18
18
  }
19
19
  header(name, value) {
20
- const headers = this[kRequest].headers;
20
+ const headers = this[constants_js_1.kRequest].headers;
21
21
  if (Array.isArray(value))
22
22
  value.forEach(v => headers.append(name, String(v)));
23
23
  else
@@ -25,11 +25,12 @@ class HttpRequestObservable extends rxjs_1.Observable {
25
25
  return this;
26
26
  }
27
27
  param(name, value) {
28
- this[kRequest].params.append(name, value);
28
+ this[constants_js_1.kRequest].params.append(name, value);
29
29
  return this;
30
30
  }
31
31
  async fetch(observe) {
32
- return (0, rxjs_1.lastValueFrom)(this[constants_js_1.kHttpClientContext].send(observe || types_js_1.HttpObserveType.Body, this[kRequest]));
32
+ return (0, rxjs_1.lastValueFrom)(this[constants_js_1.kContext]
33
+ .send(observe || types_js_1.HttpObserveType.Body, this[constants_js_1.kRequest]));
33
34
  }
34
35
  with(cb) {
35
36
  cb(this);
@@ -37,5 +38,3 @@ class HttpRequestObservable extends rxjs_1.Observable {
37
38
  }
38
39
  }
39
40
  exports.HttpRequestObservable = HttpRequestObservable;
40
- HttpRequestObservable.kContext = constants_js_1.kHttpClientContext;
41
- HttpRequestObservable.kRequest = kRequest;
@@ -21,24 +21,22 @@ class HttpRequest {
21
21
  this.referrerPolicy = init?.referrerPolicy || '';
22
22
  this.signal = init?.signal || new AbortController().signal;
23
23
  this.body = init?.body;
24
- this.urlInstance = new common_1.OpraURL(init?.url);
25
- if (init?.params)
26
- this.params.appendAll(init.params);
24
+ this.parsedUrl = new common_1.OpraURL(init?.url);
25
+ if (init?.params) {
26
+ const params = new URLSearchParams(init.params);
27
+ params.forEach((v, k) => this.params.set(k, v));
28
+ }
27
29
  }
28
30
  /** Returns the URL of request as a string. */
29
31
  get url() {
30
- return this.urlInstance.href;
32
+ return this.parsedUrl;
31
33
  }
32
34
  set url(value) {
33
- this.urlInstance.parse(value);
35
+ this.parsedUrl = value;
34
36
  }
35
37
  /** Returns the searchParams of the URL as OpraURLSearchParams */
36
38
  get params() {
37
- return this.urlInstance.searchParams;
38
- }
39
- /** Returns the path part of URL as OpraURLPath */
40
- get path() {
41
- return this.urlInstance.path;
39
+ return this.parsedUrl.searchParams;
42
40
  }
43
41
  clone(...update) {
44
42
  const out = new HttpRequest();
@@ -1,62 +1,67 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpSingletonNode = void 0;
4
+ const putil_varhelpers_1 = require("putil-varhelpers");
4
5
  const constants_js_1 = require("./constants.js");
5
6
  const http_request_observable_js_1 = require("./http-request-observable.js");
6
7
  class HttpSingletonNode {
7
8
  constructor(context) {
8
- this[constants_js_1.kHttpClientContext] = context;
9
+ this[constants_js_1.kContext] = context;
9
10
  }
10
11
  create(data, options) {
11
- const context = this[constants_js_1.kHttpClientContext];
12
+ const context = this[constants_js_1.kContext];
13
+ context.operation = 'create';
12
14
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
13
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
15
+ const request = requestHost[constants_js_1.kRequest];
14
16
  request.method = 'POST';
15
- request.url = context.resourceName;
17
+ request.url.join(context.resourceName);
16
18
  request.body = data;
17
19
  if (options?.include)
18
- request.params.set('$include', options.include);
20
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
19
21
  if (options?.pick)
20
- request.params.set('$pick', options.pick);
22
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
21
23
  if (options?.omit)
22
- request.params.set('$omit', options.omit);
24
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
23
25
  return requestHost;
24
26
  }
25
27
  delete(options) {
26
- const context = this[constants_js_1.kHttpClientContext];
28
+ const context = this[constants_js_1.kContext];
29
+ context.operation = 'delete';
27
30
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
28
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
31
+ const request = requestHost[constants_js_1.kRequest];
29
32
  request.method = 'DELETE';
30
- request.path.join({ resource: context.resourceName });
33
+ request.url.join({ resource: context.resourceName });
31
34
  return requestHost;
32
35
  }
33
36
  get(options) {
34
- const context = this[constants_js_1.kHttpClientContext];
37
+ const context = this[constants_js_1.kContext];
38
+ context.operation = 'get';
35
39
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
36
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
40
+ const request = requestHost[constants_js_1.kRequest];
37
41
  request.method = 'GET';
38
- request.path.join({ resource: context.resourceName });
42
+ request.url.join({ resource: context.resourceName });
39
43
  if (options?.include)
40
- request.params.set('$include', options.include);
44
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
41
45
  if (options?.pick)
42
- request.params.set('$pick', options.pick);
46
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
43
47
  if (options?.omit)
44
- request.params.set('$omit', options.omit);
48
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
45
49
  return requestHost;
46
50
  }
47
51
  update(data, options) {
48
- const context = this[constants_js_1.kHttpClientContext];
52
+ const context = this[constants_js_1.kContext];
53
+ context.operation = 'update';
49
54
  const requestHost = new http_request_observable_js_1.HttpRequestObservable(context, options);
50
- const request = requestHost[http_request_observable_js_1.HttpRequestObservable.kRequest];
55
+ const request = requestHost[constants_js_1.kRequest];
51
56
  request.method = 'PATCH';
52
- request.path.join({ resource: context.resourceName });
57
+ request.url.join({ resource: context.resourceName });
53
58
  request.body = data;
54
59
  if (options?.include)
55
- request.params.set('$include', options.include);
60
+ request.params.set('$include', (0, putil_varhelpers_1.toArrayDef)(options.include, []).join(','));
56
61
  if (options?.pick)
57
- request.params.set('$pick', options.pick);
62
+ request.params.set('$pick', (0, putil_varhelpers_1.toArrayDef)(options.pick, []).join(','));
58
63
  if (options?.omit)
59
- request.params.set('$omit', options.omit);
64
+ request.params.set('$omit', (0, putil_varhelpers_1.toArrayDef)(options.omit, []).join(','));
60
65
  return requestHost;
61
66
  }
62
67
  }
package/esm/client.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { lastValueFrom, Observable } from 'rxjs';
2
2
  import { isReadableStreamLike } from 'rxjs/internal/util/isReadableStreamLike';
3
- import { DocumentFactory, HttpHeaderCodes, HttpParams, isBlob, joinPath } from '@opra/common';
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
6
  import { FORMDATA_CONTENT_TYPE_PATTERN, JSON_CONTENT_TYPE_PATTERN, TEXT_CONTENT_TYPE_PATTERN } from './constants.js';
@@ -24,8 +24,8 @@ export class OpraHttpClient {
24
24
  ...options?.defaults,
25
25
  headers: options?.defaults?.headers instanceof Headers
26
26
  ? options?.defaults?.headers : new Headers(options?.defaults?.headers),
27
- params: options?.defaults?.params instanceof HttpParams
28
- ? options?.defaults?.params : new HttpParams(options?.defaults?.params)
27
+ params: options?.defaults?.params instanceof URLSearchParams
28
+ ? options?.defaults?.params : new URLSearchParams(options?.defaults?.params)
29
29
  };
30
30
  }
31
31
  get serviceUrl() {
@@ -38,7 +38,7 @@ export class OpraHttpClient {
38
38
  if (promise) {
39
39
  return promise;
40
40
  }
41
- this[kAssets].metadataPromise = promise = lastValueFrom(this._sendRequest(HttpObserveType.Body, new HttpRequest({
41
+ this[kAssets].metadataPromise = promise = lastValueFrom(this._sendRequest('Singleton', 'get', HttpObserveType.Body, new HttpRequest({
42
42
  method: 'GET',
43
43
  url: '$metadata',
44
44
  headers: new Headers({ 'accept': 'application/json' })
@@ -50,7 +50,7 @@ export class OpraHttpClient {
50
50
  return api;
51
51
  })
52
52
  .catch((e) => {
53
- e.message = 'Unable to fetch metadata from ' + this.serviceUrl + '. ' + e.message;
53
+ e.message = 'Unable to fetch metadata from service url (' + this.serviceUrl + '). ' + e.message;
54
54
  throw e;
55
55
  })
56
56
  .finally(() => delete this[kAssets].metadataPromise);
@@ -65,8 +65,10 @@ export class OpraHttpClient {
65
65
  resourceName = resourceName.name;
66
66
  const ctx = {
67
67
  client: this,
68
+ resourceKind: 'Collection',
69
+ operation: '',
68
70
  resourceName,
69
- send: (observe, request) => this._sendRequest(observe, request, ctx),
71
+ send: (observe, request) => this._sendRequest('Collection', ctx.operation, observe, request, ctx),
70
72
  // requestInterceptors: [
71
73
  // // Validate resource exists and is a collection resource
72
74
  // async () => {
@@ -84,8 +86,10 @@ export class OpraHttpClient {
84
86
  resourceName = resourceName.name;
85
87
  const ctx = {
86
88
  client: this,
89
+ resourceKind: 'Singleton',
90
+ operation: '',
87
91
  resourceName,
88
- send: (observe, request) => this._sendRequest(observe, request, ctx),
92
+ send: (observe, request) => this._sendRequest('Singleton', ctx.operation, observe, request, ctx),
89
93
  // requestInterceptors: [
90
94
  // // Validate resource exists and is a singleton resource
91
95
  // async () => {
@@ -97,11 +101,11 @@ export class OpraHttpClient {
97
101
  };
98
102
  return new HttpSingletonNode(ctx);
99
103
  }
100
- _sendRequest(observe, request, ctx) {
104
+ _sendRequest(resourceKind, operation, observe, request, ctx) {
101
105
  return new Observable(subscriber => {
102
106
  (async () => {
103
107
  request.inset(this.defaults);
104
- const url = request.url.includes('://') ? request.url : joinPath(this.serviceUrl, request.url);
108
+ const url = new OpraURL(request.url, this.serviceUrl);
105
109
  let body;
106
110
  if (request.body) {
107
111
  let contentType;
@@ -153,8 +157,8 @@ export class OpraHttpClient {
153
157
  request,
154
158
  event: HttpEventType.Sent,
155
159
  });
156
- const response = await this._fetch(url, request);
157
- await this._handleResponse(observe, subscriber, request, response);
160
+ const response = await this._fetch(url.toString(), request);
161
+ await this._handleResponse(resourceKind, operation, observe, subscriber, request, response, ctx);
158
162
  })().catch(error => subscriber.error(error));
159
163
  });
160
164
  }
@@ -164,7 +168,7 @@ export class OpraHttpClient {
164
168
  _createResponse(init) {
165
169
  return new HttpResponse(init);
166
170
  }
167
- async _handleResponse(observe, subscriber, request, fetchResponse, ctx) {
171
+ async _handleResponse(resourceKind, operation, observe, subscriber, request, fetchResponse, ctx) {
168
172
  const headers = fetchResponse.headers;
169
173
  if (observe === HttpObserveType.Events) {
170
174
  const response = this._createResponse({
@@ -182,11 +186,13 @@ export class OpraHttpClient {
182
186
  });
183
187
  }
184
188
  let body;
189
+ let totalCount;
185
190
  if (fetchResponse.body) {
186
191
  if (JSON_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || '')) {
187
192
  body = await fetchResponse.json();
188
193
  if (typeof body === 'string')
189
194
  body = JSON.parse(body);
195
+ totalCount = body.totalCount;
190
196
  }
191
197
  else if (TEXT_CONTENT_TYPE_PATTERN.test(headers.get('Content-Type') || ''))
192
198
  body = await fetchResponse.text();
@@ -214,8 +220,8 @@ export class OpraHttpClient {
214
220
  statusText: fetchResponse.statusText,
215
221
  body
216
222
  };
217
- if (fetchResponse.headers.has(HttpHeaderCodes.X_Total_Count))
218
- responseInit.totalCount = parseInt(fetchResponse.headers.get(HttpHeaderCodes.X_Total_Count), 10);
223
+ if (totalCount != null)
224
+ responseInit.totalCount = totalCount;
219
225
  const response = this._createResponse(responseInit);
220
226
  if (ctx) {
221
227
  const responseInterceptors = [
@@ -227,7 +233,11 @@ export class OpraHttpClient {
227
233
  }
228
234
  }
229
235
  if (observe === HttpObserveType.Body) {
230
- subscriber.next(body);
236
+ if ((resourceKind === 'Collection' || resourceKind === 'Singleton') &&
237
+ (operation === 'create' || operation === 'get' || operation === 'findMany' || operation === 'update'))
238
+ subscriber.next(body.data);
239
+ else
240
+ subscriber.next(body);
231
241
  }
232
242
  else {
233
243
  if (observe === HttpObserveType.Events)
@@ -1,106 +1,120 @@
1
- import { kHttpClientContext } from './constants.js';
1
+ import { toArrayDef } from 'putil-varhelpers';
2
+ import { kContext, kRequest } from './constants.js';
2
3
  import { HttpRequestObservable } from './http-request-observable.js';
3
4
  export class HttpCollectionNode {
4
5
  constructor(context) {
5
- this[kHttpClientContext] = context;
6
+ this[kContext] = context;
6
7
  }
7
8
  create(data, options) {
8
- const context = this[kHttpClientContext];
9
+ const context = this[kContext];
10
+ context.operation = 'create';
9
11
  const requestHost = new HttpRequestObservable(context, options);
10
- const request = requestHost[HttpRequestObservable.kRequest];
12
+ const request = requestHost[kRequest];
11
13
  request.method = 'POST';
12
- request.url = context.resourceName;
14
+ request.url.resolve(context.resourceName);
13
15
  request.body = data;
14
16
  if (options?.include)
15
- request.params.set('$include', options.include);
17
+ request.params.set('$include', toArrayDef(options.include, []).join(','));
16
18
  if (options?.pick)
17
- request.params.set('$pick', options.pick);
19
+ request.params.set('$pick', toArrayDef(options.pick, []).join(','));
18
20
  if (options?.omit)
19
- request.params.set('$omit', options.omit);
21
+ request.params.set('$omit', toArrayDef(options.omit, []).join(','));
20
22
  return requestHost;
21
23
  }
22
24
  delete(id, options) {
23
- const context = this[kHttpClientContext];
25
+ if (id == null)
26
+ throw new TypeError(`'id' argument must have a value`);
27
+ const context = this[kContext];
28
+ context.operation = 'delete';
24
29
  const requestHost = new HttpRequestObservable(context, options);
25
- const request = requestHost[HttpRequestObservable.kRequest];
30
+ const request = requestHost[kRequest];
26
31
  request.method = 'DELETE';
27
- request.path.join({ resource: context.resourceName, key: id });
32
+ request.url.join({ resource: context.resourceName, key: id });
28
33
  return requestHost;
29
34
  }
30
35
  deleteMany(options) {
31
- const context = this[kHttpClientContext];
36
+ const context = this[kContext];
37
+ context.operation = 'deleteMany';
32
38
  const requestHost = new HttpRequestObservable(context, options);
33
- const request = requestHost[HttpRequestObservable.kRequest];
39
+ const request = requestHost[kRequest];
34
40
  request.method = 'DELETE';
35
- request.url = context.resourceName;
41
+ request.url.join(context.resourceName);
36
42
  if (options?.filter)
37
- request.params.set('$filter', options.filter);
43
+ request.params.set('$filter', String(options.filter));
38
44
  return requestHost;
39
45
  }
40
46
  get(id, options) {
41
- const context = this[kHttpClientContext];
47
+ if (id == null)
48
+ throw new TypeError(`'id' argument must have a value`);
49
+ const context = this[kContext];
50
+ context.operation = 'get';
42
51
  const requestHost = new HttpRequestObservable(context, options);
43
- const request = requestHost[HttpRequestObservable.kRequest];
52
+ const request = requestHost[kRequest];
44
53
  request.method = 'GET';
45
- request.path.join({ resource: context.resourceName, key: id });
54
+ request.url.join({ resource: context.resourceName, key: id });
46
55
  if (options?.include)
47
- request.params.set('$include', options.include);
56
+ request.params.set('$include', toArrayDef(options.include, []).join(','));
48
57
  if (options?.pick)
49
- request.params.set('$pick', options.pick);
58
+ request.params.set('$pick', toArrayDef(options.pick, []).join(','));
50
59
  if (options?.omit)
51
- request.params.set('$omit', options.omit);
60
+ request.params.set('$omit', toArrayDef(options.omit, []).join(','));
52
61
  return requestHost;
53
62
  }
54
63
  findMany(options) {
55
- const context = this[kHttpClientContext];
64
+ const context = this[kContext];
65
+ context.operation = 'findMany';
56
66
  const requestHost = new HttpRequestObservable(context, options);
57
- const request = requestHost[HttpRequestObservable.kRequest];
67
+ const request = requestHost[kRequest];
58
68
  request.method = 'GET';
59
- request.url = context.resourceName;
69
+ request.url.join(context.resourceName);
60
70
  if (options?.include)
61
- request.params.set('$include', options.include);
71
+ request.params.set('$include', toArrayDef(options.include, []).join(','));
62
72
  if (options?.pick)
63
- request.params.set('$pick', options.pick);
73
+ request.params.set('$pick', toArrayDef(options.pick, []).join(','));
64
74
  if (options?.omit)
65
- request.params.set('$omit', options.omit);
75
+ request.params.set('$omit', toArrayDef(options.omit, []).join(','));
66
76
  if (options?.sort)
67
- request.params.set('$sort', options.sort);
77
+ request.params.set('$sort', toArrayDef(options.sort, []).join(','));
68
78
  if (options?.filter)
69
- request.params.set('$filter', options.filter);
79
+ request.params.set('$filter', String(options.filter));
70
80
  if (options?.limit != null)
71
- request.params.set('$limit', options.limit);
81
+ request.params.set('$limit', String(options.limit));
72
82
  if (options?.skip != null)
73
- request.params.set('$skip', options.skip);
83
+ request.params.set('$skip', String(options.skip));
74
84
  if (options?.count != null)
75
- request.params.set('$count', options.count);
85
+ request.params.set('$count', String(options.count));
76
86
  if (options?.distinct != null)
77
- request.params.set('$distinct', options.distinct);
87
+ request.params.set('$distinct', String(options.distinct));
78
88
  return requestHost;
79
89
  }
80
90
  update(id, data, options) {
81
- const context = this[kHttpClientContext];
91
+ if (id == null)
92
+ throw new TypeError(`'id' argument must have a value`);
93
+ const context = this[kContext];
94
+ context.operation = 'update';
82
95
  const requestHost = new HttpRequestObservable(context, options);
83
- const request = requestHost[HttpRequestObservable.kRequest];
96
+ const request = requestHost[kRequest];
84
97
  request.method = 'PATCH';
85
- request.path.join({ resource: context.resourceName, key: id });
98
+ request.url.join({ resource: context.resourceName, key: id });
86
99
  request.body = data;
87
100
  if (options?.include)
88
- request.params.set('$include', options.include);
101
+ request.params.set('$include', String(options.include));
89
102
  if (options?.pick)
90
- request.params.set('$pick', options.pick);
103
+ request.params.set('$pick', String(options.pick));
91
104
  if (options?.omit)
92
- request.params.set('$omit', options.omit);
105
+ request.params.set('$omit', String(options.omit));
93
106
  return requestHost;
94
107
  }
95
108
  updateMany(data, options) {
96
- const context = this[kHttpClientContext];
109
+ const context = this[kContext];
110
+ context.operation = 'updateMany';
97
111
  const requestHost = new HttpRequestObservable(context, options);
98
- const request = requestHost[HttpRequestObservable.kRequest];
112
+ const request = requestHost[kRequest];
99
113
  request.method = 'PATCH';
100
- request.url = context.resourceName;
114
+ request.url.join(context.resourceName);
101
115
  request.body = data;
102
116
  if (options?.filter)
103
- request.params.set('$filter', options.filter);
117
+ request.params.set('$filter', String(options.filter));
104
118
  return requestHost;
105
119
  }
106
120
  }