@opra/client 1.0.0-alpha.21 → 1.0.0-alpha.23

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.
@@ -0,0 +1,617 @@
1
+ /****************************************
2
+ * All rights reserved Panates® 2022-2024
3
+ * http://www.panates.com
4
+ *****************************************/
5
+
6
+ var __create = Object.create;
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __getProtoOf = Object.getPrototypeOf;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+
35
+ // ../../build/client/esm/index.js
36
+ var esm_exports = {};
37
+ __export(esm_exports, {
38
+ Backend: () => Backend,
39
+ ClientError: () => ClientError,
40
+ FetchBackend: () => FetchBackend,
41
+ HttpBackend: () => HttpBackend,
42
+ HttpClientBase: () => HttpClientBase,
43
+ HttpEventType: () => HttpEventType,
44
+ HttpObserveType: () => HttpObserveType,
45
+ HttpRequestObservable: () => HttpRequestObservable,
46
+ HttpResponse: () => HttpResponse,
47
+ OpraHttpClient: () => OpraHttpClient,
48
+ kBackend: () => kBackend,
49
+ kClient: () => kClient,
50
+ kContext: () => kContext,
51
+ urlPath: () => urlPath
52
+ });
53
+ module.exports = __toCommonJS(esm_exports);
54
+
55
+ // ../../build/client/esm/constants.js
56
+ var kClient = Symbol.for("kClient");
57
+ var kBackend = Symbol.for("kBackend");
58
+ var kContext = Symbol.for("kContext");
59
+
60
+ // ../../build/client/esm/core/backend.js
61
+ var _Backend = class _Backend {
62
+ constructor(options) {
63
+ this.document = options == null ? void 0 : options.document;
64
+ }
65
+ };
66
+ __name(_Backend, "Backend");
67
+ var Backend = _Backend;
68
+
69
+ // ../../build/client/esm/core/client-error.js
70
+ var _ClientError = class _ClientError extends Error {
71
+ constructor(init, cause) {
72
+ super(init.message);
73
+ this.cause = cause;
74
+ this.issues = init.issues || [];
75
+ this.status = init.status;
76
+ if (cause) {
77
+ this.cause = cause;
78
+ if (cause.stack)
79
+ this.stack = cause.stack;
80
+ }
81
+ }
82
+ };
83
+ __name(_ClientError, "ClientError");
84
+ var ClientError = _ClientError;
85
+
86
+ // ../../build/client/esm/http/enums/http-observable-type.enum.js
87
+ var HttpObserveType;
88
+ (function(HttpObserveType2) {
89
+ HttpObserveType2["ResponseHeader"] = "response-header";
90
+ HttpObserveType2["Response"] = "response";
91
+ HttpObserveType2["Body"] = "body";
92
+ HttpObserveType2["Events"] = "events";
93
+ })(HttpObserveType || (HttpObserveType = {}));
94
+
95
+ // ../../build/client/esm/http/fetch-backend.js
96
+ var import_type_is = __toESM(require("@browsery/type-is"), 1);
97
+ var import_common = require("@opra/common");
98
+ var import_rxjs = require("rxjs");
99
+ var import_isReadableStreamLike = require("rxjs/internal/util/isReadableStreamLike");
100
+
101
+ // ../../build/client/esm/http/http-backend.js
102
+ var _HttpBackend = class _HttpBackend extends Backend {
103
+ constructor(serviceUrl, options) {
104
+ super(options);
105
+ const u = new URL(serviceUrl);
106
+ this.serviceUrl = u.toString().split("?")[0].split("#")[0];
107
+ if (!this.serviceUrl.endsWith("/"))
108
+ this.serviceUrl += "/";
109
+ }
110
+ };
111
+ __name(_HttpBackend, "HttpBackend");
112
+ var HttpBackend = _HttpBackend;
113
+
114
+ // ../../build/client/esm/http/http-response.js
115
+ var _HttpResponse = class _HttpResponse {
116
+ constructor(init) {
117
+ this.hasBody = false;
118
+ this.headers = (init == null ? void 0 : init.headers) instanceof Headers ? init == null ? void 0 : init.headers : new Headers(init == null ? void 0 : init.headers);
119
+ this.status = (init == null ? void 0 : init.status) || 200;
120
+ this.statusText = (init == null ? void 0 : init.statusText) || "OK";
121
+ this.url = (init == null ? void 0 : init.url) || null;
122
+ this.ok = this.status >= 200 && this.status < 300;
123
+ this.body = init == null ? void 0 : init.body;
124
+ this.hasBody = (init == null ? void 0 : init.body) != null || !!(init == null ? void 0 : init.hasBody);
125
+ this.contentType = (this.headers.get("content-type") || "").split(";")[0];
126
+ }
127
+ clone(update) {
128
+ return new _HttpResponse({ ...this, ...update });
129
+ }
130
+ };
131
+ __name(_HttpResponse, "HttpResponse");
132
+ var HttpResponse = _HttpResponse;
133
+
134
+ // ../../build/client/esm/http/interfaces/http-event.js
135
+ var HttpEventType;
136
+ (function(HttpEventType2) {
137
+ HttpEventType2["Sent"] = "Sent";
138
+ HttpEventType2["UploadProgress"] = "UploadProgress";
139
+ HttpEventType2["ResponseHeader"] = "ResponseHeader";
140
+ HttpEventType2["DownloadProgress"] = "DownloadProgress";
141
+ HttpEventType2["Response"] = "Response";
142
+ HttpEventType2["User"] = "User";
143
+ })(HttpEventType || (HttpEventType = {}));
144
+
145
+ // ../../build/client/esm/http/fetch-backend.js
146
+ var _FetchBackend = class _FetchBackend extends HttpBackend {
147
+ constructor(serviceUrl, options) {
148
+ var _a, _b, _c, _d, _e, _f;
149
+ super(serviceUrl, options);
150
+ this.interceptors = Array.from(/* @__PURE__ */ new Set([...(options == null ? void 0 : options.interceptors) || []]));
151
+ this.defaults = {
152
+ ...options == null ? void 0 : options.defaults,
153
+ headers: ((_a = options == null ? void 0 : options.defaults) == null ? void 0 : _a.headers) instanceof Headers ? (_b = options == null ? void 0 : options.defaults) == null ? void 0 : _b.headers : new Headers((_c = options == null ? void 0 : options.defaults) == null ? void 0 : _c.headers),
154
+ params: ((_d = options == null ? void 0 : options.defaults) == null ? void 0 : _d.params) instanceof URLSearchParams ? (_e = options == null ? void 0 : options.defaults) == null ? void 0 : _e.params : new URLSearchParams((_f = options == null ? void 0 : options.defaults) == null ? void 0 : _f.params)
155
+ };
156
+ }
157
+ handle(init) {
158
+ return new import_rxjs.Observable((subscriber) => {
159
+ (async () => {
160
+ let request = this.prepareRequest(init);
161
+ if (request.body && init.reportProgress) {
162
+ const stream = request.body;
163
+ const contentLength = request.headers.get("content-length") || "0";
164
+ const total = parseInt(contentLength, 10) || 0;
165
+ let loaded = 0;
166
+ const progressTrackingStream = new TransformStream({
167
+ transform(chunk, controller) {
168
+ controller.enqueue(chunk);
169
+ loaded += chunk.byteLength;
170
+ subscriber.next({
171
+ type: HttpEventType.UploadProgress,
172
+ request,
173
+ total,
174
+ loaded
175
+ });
176
+ }
177
+ });
178
+ request = new Request(request.url, {
179
+ cache: request.cache,
180
+ credentials: request.credentials,
181
+ headers: request.headers,
182
+ integrity: request.integrity,
183
+ keepalive: request.keepalive,
184
+ method: request.method,
185
+ mode: request.mode,
186
+ redirect: request.redirect,
187
+ referrer: request.referrer,
188
+ referrerPolicy: request.referrerPolicy,
189
+ signal: request.signal,
190
+ body: stream.pipeThrough(progressTrackingStream),
191
+ window: init.window,
192
+ ...{
193
+ // undici library requires
194
+ duplex: "half"
195
+ }
196
+ });
197
+ }
198
+ const fetchPromise = this.send(request);
199
+ subscriber.next({
200
+ request,
201
+ type: HttpEventType.Sent
202
+ });
203
+ const fetchResponse = await fetchPromise;
204
+ const headersResponse = this.createResponse({
205
+ url: fetchResponse.url,
206
+ headers: fetchResponse.headers,
207
+ status: fetchResponse.status,
208
+ statusText: fetchResponse.statusText,
209
+ hasBody: !!fetchResponse.body
210
+ });
211
+ subscriber.next({
212
+ request,
213
+ type: HttpEventType.ResponseHeader,
214
+ response: headersResponse
215
+ });
216
+ let body;
217
+ if (fetchResponse.body) {
218
+ if (init.reportProgress) {
219
+ const fetchBody = fetchResponse.body;
220
+ const contentLength = fetchResponse.headers.get("content-length") || "0";
221
+ const total = parseInt(contentLength, 10) || 0;
222
+ let loaded = 0;
223
+ const res = new Response(new ReadableStream({
224
+ async start(controller) {
225
+ const reader = fetchBody.getReader();
226
+ for (; ; ) {
227
+ const { done, value } = await reader.read();
228
+ if (done)
229
+ break;
230
+ loaded += value.byteLength;
231
+ controller.enqueue(value);
232
+ subscriber.next({
233
+ type: HttpEventType.DownloadProgress,
234
+ request,
235
+ total,
236
+ loaded
237
+ });
238
+ }
239
+ controller.close();
240
+ }
241
+ }));
242
+ body = await this.parseBody(res);
243
+ } else {
244
+ body = await this.parseBody(fetchResponse);
245
+ }
246
+ }
247
+ const response = this.createResponse({
248
+ url: fetchResponse.url,
249
+ headers: fetchResponse.headers,
250
+ status: fetchResponse.status,
251
+ statusText: fetchResponse.statusText,
252
+ body
253
+ });
254
+ subscriber.next({
255
+ request,
256
+ type: HttpEventType.Response,
257
+ response
258
+ });
259
+ subscriber.complete();
260
+ })().catch((error) => subscriber.error(error));
261
+ });
262
+ }
263
+ send(request) {
264
+ return fetch(request);
265
+ }
266
+ prepareRequest(init) {
267
+ const headers = init.headers || new Headers();
268
+ const requestInit = {
269
+ ...init,
270
+ headers
271
+ };
272
+ this.defaults.headers.forEach((val, key) => {
273
+ if (!headers.has(key))
274
+ headers.set(key, val);
275
+ });
276
+ const url = new URL(requestInit.url, this.serviceUrl);
277
+ if (this.defaults.params.size) {
278
+ this.defaults.params.forEach((val, key) => {
279
+ if (!url.searchParams.has(key))
280
+ url.searchParams.set(key, val);
281
+ });
282
+ requestInit.url = url.toString();
283
+ }
284
+ const body = requestInit.body;
285
+ if (body) {
286
+ let contentType = "";
287
+ if (typeof body === "string" || typeof body === "number" || typeof body === "boolean") {
288
+ contentType = 'text/plain; charset="UTF-8"';
289
+ requestInit.body = new Blob([String(body)], { type: contentType });
290
+ headers.set("Content-Length", String(requestInit.body.size));
291
+ delete requestInit.duplex;
292
+ } else if ((0, import_isReadableStreamLike.isReadableStreamLike)(body)) {
293
+ contentType = "application/octet-stream";
294
+ requestInit.duplex = "half";
295
+ } else if (Buffer.isBuffer(body)) {
296
+ contentType = "application/octet-stream";
297
+ headers.set("Content-Length", String(body.length));
298
+ delete requestInit.duplex;
299
+ } else if ((0, import_common.isBlob)(body)) {
300
+ contentType = body.type || "application/octet-stream";
301
+ headers.set("Content-Length", String(body.size));
302
+ delete requestInit.duplex;
303
+ } else if ((0, import_common.isFormData)(body)) {
304
+ delete requestInit.duplex;
305
+ } else {
306
+ contentType = 'application/json;charset="UTF-8"';
307
+ requestInit.body = new Blob([JSON.stringify(body)], { type: contentType });
308
+ headers.set("Content-Length", String(requestInit.body.size));
309
+ delete requestInit.duplex;
310
+ }
311
+ if (contentType && !headers.has("Content-Type"))
312
+ headers.set("Content-Type", contentType);
313
+ }
314
+ return new Request(url.toString(), requestInit);
315
+ }
316
+ createResponse(init) {
317
+ return new HttpResponse(init);
318
+ }
319
+ async parseBody(fetchResponse) {
320
+ let body;
321
+ const contentType = fetchResponse.headers.get("Content-Type") || "";
322
+ if (import_type_is.default.is(contentType, ["json", "application/*+json"])) {
323
+ body = await fetchResponse.json();
324
+ if (typeof body === "string")
325
+ body = JSON.parse(body);
326
+ } else if (import_type_is.default.is(contentType, ["text"]))
327
+ body = await fetchResponse.text();
328
+ else if (import_type_is.default.is(contentType, ["multipart"]))
329
+ body = await fetchResponse.formData();
330
+ else {
331
+ const buf = await fetchResponse.arrayBuffer();
332
+ if (buf.byteLength)
333
+ body = buf;
334
+ }
335
+ return body;
336
+ }
337
+ };
338
+ __name(_FetchBackend, "FetchBackend");
339
+ var FetchBackend = _FetchBackend;
340
+
341
+ // ../../build/client/esm/http/http-client-base.js
342
+ var import_common3 = require("@opra/common");
343
+
344
+ // ../../build/client/esm/http/http-request-observable.js
345
+ var import_type_is2 = __toESM(require("@browsery/type-is"), 1);
346
+ var import_common2 = require("@opra/common");
347
+ var import_rxjs2 = require("rxjs");
348
+
349
+ // ../../build/client/esm/http/http-interceptor-handler.js
350
+ var _HttpInterceptorHandler = class _HttpInterceptorHandler {
351
+ constructor(interceptors, finalHandler) {
352
+ this.chain = interceptors.reduceRight((chainTailFn, interceptor) => (initialRequest, handler) => interceptor.intercept(initialRequest, {
353
+ handle: /* @__PURE__ */ __name((downstreamRequest) => chainTailFn(downstreamRequest, handler), "handle")
354
+ }), chainEnd);
355
+ this.finalHandler = finalHandler;
356
+ }
357
+ handle(initialRequest) {
358
+ return this.chain(initialRequest, (req) => this.finalHandler.handle(req));
359
+ }
360
+ };
361
+ __name(_HttpInterceptorHandler, "HttpInterceptorHandler");
362
+ var HttpInterceptorHandler = _HttpInterceptorHandler;
363
+ function chainEnd(req, handler) {
364
+ return handler(req);
365
+ }
366
+ __name(chainEnd, "chainEnd");
367
+
368
+ // ../../build/client/esm/http/http-request-observable.js
369
+ var _HttpRequestObservable = class _HttpRequestObservable extends import_rxjs2.Observable {
370
+ constructor(backend, init) {
371
+ super((subscriber) => {
372
+ const observe = this[kContext].observe;
373
+ new HttpInterceptorHandler(backend.interceptors || [], this[kBackend]).handle(this[kContext]).subscribe({
374
+ next(event) {
375
+ if (observe === HttpObserveType.Events) {
376
+ subscriber.next(event);
377
+ return;
378
+ }
379
+ if (observe === HttpObserveType.ResponseHeader && event.type === HttpEventType.ResponseHeader) {
380
+ subscriber.next(event.response);
381
+ subscriber.complete();
382
+ return;
383
+ }
384
+ if (event.type === HttpEventType.Response) {
385
+ const { response } = event;
386
+ if (observe === HttpObserveType.Response) {
387
+ subscriber.next(response);
388
+ subscriber.complete();
389
+ return;
390
+ }
391
+ const isOpraResponse = import_type_is2.default.is(event.response.contentType || "", [import_common2.MimeTypes.opra_response_json]);
392
+ if (response.status >= 400 && response.status < 600) {
393
+ subscriber.error(new ClientError({
394
+ message: response.status + " " + response.statusText,
395
+ status: response.status,
396
+ issues: isOpraResponse ? response.body.errors : void 0
397
+ }));
398
+ subscriber.complete();
399
+ return;
400
+ }
401
+ subscriber.next(event.response.body);
402
+ subscriber.complete();
403
+ }
404
+ },
405
+ error(error) {
406
+ subscriber.error(error);
407
+ },
408
+ complete() {
409
+ subscriber.complete();
410
+ }
411
+ });
412
+ });
413
+ Object.defineProperty(this, kBackend, {
414
+ enumerable: false,
415
+ value: backend
416
+ });
417
+ Object.defineProperty(this, kContext, {
418
+ enumerable: false,
419
+ value: {
420
+ ...init,
421
+ observe: HttpObserveType.Body,
422
+ headers: new Headers(init == null ? void 0 : init.headers)
423
+ }
424
+ });
425
+ }
426
+ clone() {
427
+ return new _HttpRequestObservable(this[kBackend], this[kContext]);
428
+ }
429
+ options(options) {
430
+ Object.assign(this[kContext], options);
431
+ return this;
432
+ }
433
+ header(arg0, value) {
434
+ const target = this[kContext].headers;
435
+ if (typeof arg0 === "object") {
436
+ const h = arg0 instanceof Headers ? arg0 : new Headers(arg0);
437
+ h.forEach((v, k) => {
438
+ if (k.toLowerCase() === "set-cookie") {
439
+ target.append(k, v);
440
+ } else
441
+ target.set(k, v);
442
+ });
443
+ return this;
444
+ }
445
+ if (value == null || value === "")
446
+ target.delete(arg0);
447
+ else
448
+ target.append(arg0, String(value));
449
+ return this;
450
+ }
451
+ param(arg0, value) {
452
+ if (value && typeof value === "object") {
453
+ value = JSON.stringify(value);
454
+ }
455
+ const target = this[kContext].url.searchParams;
456
+ if (typeof arg0 === "object") {
457
+ if (typeof arg0.forEach === "function") {
458
+ arg0.forEach((v, k) => target.set(String(k), String(v)));
459
+ } else {
460
+ Object.entries(arg0).forEach((entry) => target.set(String(entry[0]), String(entry[1])));
461
+ }
462
+ return this;
463
+ }
464
+ if (value == null)
465
+ target.delete(arg0);
466
+ else
467
+ target.set(arg0, String(value));
468
+ return this;
469
+ }
470
+ observe(observe) {
471
+ if (observe === this[kContext].observe)
472
+ return this;
473
+ const cloned = this.clone();
474
+ cloned[kContext].observe = observe || HttpObserveType.Body;
475
+ return cloned;
476
+ }
477
+ getBody() {
478
+ return (0, import_rxjs2.lastValueFrom)(this.observe(HttpObserveType.Body));
479
+ }
480
+ getResponse() {
481
+ return (0, import_rxjs2.lastValueFrom)(this.observe(HttpObserveType.Response));
482
+ }
483
+ };
484
+ __name(_HttpRequestObservable, "HttpRequestObservable");
485
+ var HttpRequestObservable = _HttpRequestObservable;
486
+
487
+ // ../../build/client/esm/http/http-client-base.js
488
+ var SPLIT_BACKSLASH_PATTERN = /^(\/*)(.+)/;
489
+ var _HttpClientBase = class _HttpClientBase {
490
+ constructor(backend) {
491
+ Object.defineProperty(this, kBackend, {
492
+ enumerable: false,
493
+ value: backend
494
+ });
495
+ }
496
+ get serviceUrl() {
497
+ return this[kBackend].serviceUrl;
498
+ }
499
+ async fetchDocument(options) {
500
+ const documentMap = {};
501
+ const getDocument = /* @__PURE__ */ __name(async (documentId) => {
502
+ const req = this.request("$schema", {
503
+ headers: new Headers({ accept: "application/json" })
504
+ });
505
+ if (documentId)
506
+ req.param("id", documentId);
507
+ const body2 = await req.getBody().catch((e) => {
508
+ e.message = "Error fetching api schema from url (" + this.serviceUrl + ").\n" + e.message;
509
+ throw e;
510
+ });
511
+ if (body2.references) {
512
+ const oldReferences = body2.references;
513
+ body2.references = {};
514
+ for (const [ns, obj] of Object.entries(oldReferences)) {
515
+ if (documentMap[obj.id] === null)
516
+ throw new Error("Circular reference detected");
517
+ documentMap[obj.id] = null;
518
+ const x = await getDocument(obj.id);
519
+ body2.references[ns] = documentMap[obj.id] = x;
520
+ }
521
+ }
522
+ return body2;
523
+ }, "getDocument");
524
+ const body = await getDocument(options == null ? void 0 : options.documentId);
525
+ return await import_common3.ApiDocumentFactory.createDocument(body).catch((e) => {
526
+ e.message = "Error loading api document.\n" + e.message;
527
+ throw e;
528
+ });
529
+ }
530
+ request(path, options) {
531
+ var _a;
532
+ path = ((_a = SPLIT_BACKSLASH_PATTERN.exec(path)) == null ? void 0 : _a[2]) || "";
533
+ const observable = new HttpRequestObservable(this[kBackend], {
534
+ ...options,
535
+ method: (options == null ? void 0 : options.method) || "GET",
536
+ url: new URL(path, this.serviceUrl)
537
+ });
538
+ if (options == null ? void 0 : options.params)
539
+ observable.param(options.params);
540
+ return observable;
541
+ }
542
+ delete(path, options) {
543
+ return this.request(path, {
544
+ ...options,
545
+ method: "DELETE"
546
+ });
547
+ }
548
+ get(path, options) {
549
+ return this.request(path, {
550
+ ...options,
551
+ method: "GET"
552
+ });
553
+ }
554
+ patch(path, requestBody, options) {
555
+ return this.request(path, {
556
+ ...options,
557
+ method: "PATCH",
558
+ body: requestBody
559
+ });
560
+ }
561
+ post(path, requestBody, options) {
562
+ return this.request(path, {
563
+ ...options,
564
+ method: "POST",
565
+ body: requestBody
566
+ });
567
+ }
568
+ put(path, requestBody, options) {
569
+ return this.request(path, {
570
+ ...options,
571
+ method: "PUT",
572
+ body: requestBody
573
+ });
574
+ }
575
+ };
576
+ __name(_HttpClientBase, "HttpClientBase");
577
+ var HttpClientBase = _HttpClientBase;
578
+
579
+ // ../../build/client/esm/http/http-client.js
580
+ var _OpraHttpClient = class _OpraHttpClient extends HttpClientBase {
581
+ constructor(serviceUrl, options) {
582
+ super(new FetchBackend(serviceUrl, options));
583
+ }
584
+ get defaults() {
585
+ return this[kBackend].defaults;
586
+ }
587
+ };
588
+ __name(_OpraHttpClient, "OpraHttpClient");
589
+ var OpraHttpClient = _OpraHttpClient;
590
+
591
+ // ../../build/client/esm/http/http-utils.js
592
+ function urlPath(strings, ...values) {
593
+ let str = "";
594
+ let i;
595
+ for (i = 0; i < strings.length; i++) {
596
+ str += strings[0] + encodeURIComponent(values[i]);
597
+ }
598
+ return str;
599
+ }
600
+ __name(urlPath, "urlPath");
601
+ // Annotate the CommonJS export names for ESM import in node:
602
+ 0 && (module.exports = {
603
+ Backend,
604
+ ClientError,
605
+ FetchBackend,
606
+ HttpBackend,
607
+ HttpClientBase,
608
+ HttpEventType,
609
+ HttpObserveType,
610
+ HttpRequestObservable,
611
+ HttpResponse,
612
+ OpraHttpClient,
613
+ kBackend,
614
+ kClient,
615
+ kContext,
616
+ urlPath
617
+ });
@@ -0,0 +1,8 @@
1
+ /****************************************
2
+ * All rights reserved Panates® 2022-2024
3
+ * http://www.panates.com
4
+ *****************************************/
5
+
6
+ var _=Object.create;var w=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var d=(n,e)=>w(n,"name",{value:e,configurable:!0});var ae=(n,e)=>{for(var t in e)w(n,t,{get:e[t],enumerable:!0})},K=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of te(e))!se.call(n,a)&&a!==t&&w(n,a,{get:()=>e[a],enumerable:!(r=ee(e,a))||r.enumerable});return n};var M=(n,e,t)=>(t=n!=null?_(re(n)):{},K(e||!n||!n.__esModule?w(t,"default",{value:n,enumerable:!0}):t,n)),oe=n=>K(w({},"__esModule",{value:!0}),n);var he={};ae(he,{Backend:()=>S,ClientError:()=>b,FetchBackend:()=>P,HttpBackend:()=>R,HttpClientBase:()=>k,HttpEventType:()=>f,HttpObserveType:()=>u,HttpRequestObservable:()=>U,HttpResponse:()=>T,OpraHttpClient:()=>N,kBackend:()=>h,kClient:()=>V,kContext:()=>l,urlPath:()=>ce});module.exports=oe(he);var V=Symbol.for("kClient"),h=Symbol.for("kBackend"),l=Symbol.for("kContext");var O=class O{constructor(e){this.document=e==null?void 0:e.document}};d(O,"Backend");var S=O;var H=class H extends Error{constructor(e,t){super(e.message),this.cause=t,this.issues=e.issues||[],this.status=e.status,t&&(this.cause=t,t.stack&&(this.stack=t.stack))}};d(H,"ClientError");var b=H;var u;(function(n){n.ResponseHeader="response-header",n.Response="response",n.Body="body",n.Events="events"})(u||(u={}));var j=M(require("@browsery/type-is"),1),E=require("@opra/common"),W=require("rxjs"),$=require("rxjs/internal/util/isReadableStreamLike");var A=class A extends S{constructor(e,t){super(t);let r=new URL(e);this.serviceUrl=r.toString().split("?")[0].split("#")[0],this.serviceUrl.endsWith("/")||(this.serviceUrl+="/")}};d(A,"HttpBackend");var R=A;var L=class L{constructor(e){this.hasBody=!1,this.headers=(e==null?void 0:e.headers)instanceof Headers?e==null?void 0:e.headers:new Headers(e==null?void 0:e.headers),this.status=(e==null?void 0:e.status)||200,this.statusText=(e==null?void 0:e.statusText)||"OK",this.url=(e==null?void 0:e.url)||null,this.ok=this.status>=200&&this.status<300,this.body=e==null?void 0:e.body,this.hasBody=(e==null?void 0:e.body)!=null||!!(e!=null&&e.hasBody),this.contentType=(this.headers.get("content-type")||"").split(";")[0]}clone(e){return new L({...this,...e})}};d(L,"HttpResponse");var T=L;var f;(function(n){n.Sent="Sent",n.UploadProgress="UploadProgress",n.ResponseHeader="ResponseHeader",n.DownloadProgress="DownloadProgress",n.Response="Response",n.User="User"})(f||(f={}));var I=class I extends R{constructor(e,t){var r,a,s,o,c,m;super(e,t),this.interceptors=Array.from(new Set([...(t==null?void 0:t.interceptors)||[]])),this.defaults={...t==null?void 0:t.defaults,headers:((r=t==null?void 0:t.defaults)==null?void 0:r.headers)instanceof Headers?(a=t==null?void 0:t.defaults)==null?void 0:a.headers:new Headers((s=t==null?void 0:t.defaults)==null?void 0:s.headers),params:((o=t==null?void 0:t.defaults)==null?void 0:o.params)instanceof URLSearchParams?(c=t==null?void 0:t.defaults)==null?void 0:c.params:new URLSearchParams((m=t==null?void 0:t.defaults)==null?void 0:m.params)}}handle(e){return new W.Observable(t=>{(async()=>{let r=this.prepareRequest(e);if(r.body&&e.reportProgress){let y=r.body,p=r.headers.get("content-length")||"0",i=parseInt(p,10)||0,x=0,v=new TransformStream({transform(g,D){D.enqueue(g),x+=g.byteLength,t.next({type:f.UploadProgress,request:r,total:i,loaded:x})}});r=new Request(r.url,{cache:r.cache,credentials:r.credentials,headers:r.headers,integrity:r.integrity,keepalive:r.keepalive,method:r.method,mode:r.mode,redirect:r.redirect,referrer:r.referrer,referrerPolicy:r.referrerPolicy,signal:r.signal,body:y.pipeThrough(v),window:e.window,duplex:"half"})}let a=this.send(r);t.next({request:r,type:f.Sent});let s=await a,o=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,hasBody:!!s.body});t.next({request:r,type:f.ResponseHeader,response:o});let c;if(s.body)if(e.reportProgress){let y=s.body,p=s.headers.get("content-length")||"0",i=parseInt(p,10)||0,x=0,v=new Response(new ReadableStream({async start(g){let D=y.getReader();for(;;){let{done:Z,value:G}=await D.read();if(Z)break;x+=G.byteLength,g.enqueue(G),t.next({type:f.DownloadProgress,request:r,total:i,loaded:x})}g.close()}}));c=await this.parseBody(v)}else c=await this.parseBody(s);let m=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,body:c});t.next({request:r,type:f.Response,response:m}),t.complete()})().catch(r=>t.error(r))})}send(e){return fetch(e)}prepareRequest(e){let t=e.headers||new Headers,r={...e,headers:t};this.defaults.headers.forEach((o,c)=>{t.has(c)||t.set(c,o)});let a=new URL(r.url,this.serviceUrl);this.defaults.params.size&&(this.defaults.params.forEach((o,c)=>{a.searchParams.has(c)||a.searchParams.set(c,o)}),r.url=a.toString());let s=r.body;if(s){let o="";typeof s=="string"||typeof s=="number"||typeof s=="boolean"?(o='text/plain; charset="UTF-8"',r.body=new Blob([String(s)],{type:o}),t.set("Content-Length",String(r.body.size)),delete r.duplex):(0,$.isReadableStreamLike)(s)?(o="application/octet-stream",r.duplex="half"):Buffer.isBuffer(s)?(o="application/octet-stream",t.set("Content-Length",String(s.length)),delete r.duplex):(0,E.isBlob)(s)?(o=s.type||"application/octet-stream",t.set("Content-Length",String(s.size)),delete r.duplex):((0,E.isFormData)(s)||(o='application/json;charset="UTF-8"',r.body=new Blob([JSON.stringify(s)],{type:o}),t.set("Content-Length",String(r.body.size))),delete r.duplex),o&&!t.has("Content-Type")&&t.set("Content-Type",o)}return new Request(a.toString(),r)}createResponse(e){return new T(e)}async parseBody(e){let t,r=e.headers.get("Content-Type")||"";if(j.default.is(r,["json","application/*+json"]))t=await e.json(),typeof t=="string"&&(t=JSON.parse(t));else if(j.default.is(r,["text"]))t=await e.text();else if(j.default.is(r,["multipart"]))t=await e.formData();else{let a=await e.arrayBuffer();a.byteLength&&(t=a)}return t}};d(I,"FetchBackend");var P=I;var Y=require("@opra/common");var Q=M(require("@browsery/type-is"),1),X=require("@opra/common"),B=require("rxjs");var z=class z{constructor(e,t){this.chain=e.reduceRight((r,a)=>(s,o)=>a.intercept(s,{handle:d(c=>r(c,o),"handle")}),ne),this.finalHandler=t}handle(e){return this.chain(e,t=>this.finalHandler.handle(t))}};d(z,"HttpInterceptorHandler");var q=z;function ne(n,e){return e(n)}d(ne,"chainEnd");var C=class C extends B.Observable{constructor(e,t){super(r=>{let a=this[l].observe;new q(e.interceptors||[],this[h]).handle(this[l]).subscribe({next(s){if(a===u.Events){r.next(s);return}if(a===u.ResponseHeader&&s.type===f.ResponseHeader){r.next(s.response),r.complete();return}if(s.type===f.Response){let{response:o}=s;if(a===u.Response){r.next(o),r.complete();return}let c=Q.default.is(s.response.contentType||"",[X.MimeTypes.opra_response_json]);if(o.status>=400&&o.status<600){r.error(new b({message:o.status+" "+o.statusText,status:o.status,issues:c?o.body.errors:void 0})),r.complete();return}r.next(s.response.body),r.complete()}},error(s){r.error(s)},complete(){r.complete()}})}),Object.defineProperty(this,h,{enumerable:!1,value:e}),Object.defineProperty(this,l,{enumerable:!1,value:{...t,observe:u.Body,headers:new Headers(t==null?void 0:t.headers)}})}clone(){return new C(this[h],this[l])}options(e){return Object.assign(this[l],e),this}header(e,t){let r=this[l].headers;return typeof e=="object"?((e instanceof Headers?e:new Headers(e)).forEach((s,o)=>{o.toLowerCase()==="set-cookie"?r.append(o,s):r.set(o,s)}),this):(t==null||t===""?r.delete(e):r.append(e,String(t)),this)}param(e,t){t&&typeof t=="object"&&(t=JSON.stringify(t));let r=this[l].url.searchParams;return typeof e=="object"?(typeof e.forEach=="function"?e.forEach((a,s)=>r.set(String(s),String(a))):Object.entries(e).forEach(a=>r.set(String(a[0]),String(a[1]))),this):(t==null?r.delete(e):r.set(e,String(t)),this)}observe(e){if(e===this[l].observe)return this;let t=this.clone();return t[l].observe=e||u.Body,t}getBody(){return(0,B.lastValueFrom)(this.observe(u.Body))}getResponse(){return(0,B.lastValueFrom)(this.observe(u.Response))}};d(C,"HttpRequestObservable");var U=C;var de=/^(\/*)(.+)/,F=class F{constructor(e){Object.defineProperty(this,h,{enumerable:!1,value:e})}get serviceUrl(){return this[h].serviceUrl}async fetchDocument(e){let t={},r=d(async s=>{let o=this.request("$schema",{headers:new Headers({accept:"application/json"})});s&&o.param("id",s);let c=await o.getBody().catch(m=>{throw m.message="Error fetching api schema from url ("+this.serviceUrl+`).
7
+ `+m.message,m});if(c.references){let m=c.references;c.references={};for(let[y,p]of Object.entries(m)){if(t[p.id]===null)throw new Error("Circular reference detected");t[p.id]=null;let i=await r(p.id);c.references[y]=t[p.id]=i}}return c},"getDocument"),a=await r(e==null?void 0:e.documentId);return await Y.ApiDocumentFactory.createDocument(a).catch(s=>{throw s.message=`Error loading api document.
8
+ `+s.message,s})}request(e,t){var a;e=((a=de.exec(e))==null?void 0:a[2])||"";let r=new U(this[h],{...t,method:(t==null?void 0:t.method)||"GET",url:new URL(e,this.serviceUrl)});return t!=null&&t.params&&r.param(t.params),r}delete(e,t){return this.request(e,{...t,method:"DELETE"})}get(e,t){return this.request(e,{...t,method:"GET"})}patch(e,t,r){return this.request(e,{...r,method:"PATCH",body:t})}post(e,t,r){return this.request(e,{...r,method:"POST",body:t})}put(e,t,r){return this.request(e,{...r,method:"PUT",body:t})}};d(F,"HttpClientBase");var k=F;var J=class J extends k{constructor(e,t){super(new P(e,t))}get defaults(){return this[h].defaults}};d(J,"OpraHttpClient");var N=J;function ce(n,...e){let t="",r;for(r=0;r<n.length;r++)t+=n[0]+encodeURIComponent(e[r]);return t}d(ce,"urlPath");0&&(module.exports={Backend,ClientError,FetchBackend,HttpBackend,HttpClientBase,HttpEventType,HttpObserveType,HttpRequestObservable,HttpResponse,OpraHttpClient,kBackend,kClient,kContext,urlPath});
@@ -0,0 +1,8 @@
1
+ /****************************************
2
+ * All rights reserved Panates® 2022-2024
3
+ * http://www.panates.com
4
+ *****************************************/
5
+
6
+ var G=Object.defineProperty;var n=(c,e)=>G(c,"name",{value:e,configurable:!0});var K=Symbol.for("kClient"),h=Symbol.for("kBackend"),l=Symbol.for("kContext");var q=class q{constructor(e){this.document=e==null?void 0:e.document}};n(q,"Backend");var w=q;var C=class C extends Error{constructor(e,t){super(e.message),this.cause=t,this.issues=e.issues||[],this.status=e.status,t&&(this.cause=t,t.stack&&(this.stack=t.stack))}};n(C,"ClientError");var S=C;var m;(function(c){c.ResponseHeader="response-header",c.Response="response",c.Body="body",c.Events="events"})(m||(m={}));import D from"@browsery/type-is";import{isBlob as M,isFormData as V}from"@opra/common";import{Observable as W}from"rxjs";import{isReadableStreamLike as $}from"rxjs/internal/util/isReadableStreamLike";var v=class v extends w{constructor(e,t){super(t);let r=new URL(e);this.serviceUrl=r.toString().split("?")[0].split("#")[0],this.serviceUrl.endsWith("/")||(this.serviceUrl+="/")}};n(v,"HttpBackend");var b=v;var T=class T{constructor(e){this.hasBody=!1,this.headers=(e==null?void 0:e.headers)instanceof Headers?e==null?void 0:e.headers:new Headers(e==null?void 0:e.headers),this.status=(e==null?void 0:e.status)||200,this.statusText=(e==null?void 0:e.statusText)||"OK",this.url=(e==null?void 0:e.url)||null,this.ok=this.status>=200&&this.status<300,this.body=e==null?void 0:e.body,this.hasBody=(e==null?void 0:e.body)!=null||!!(e!=null&&e.hasBody),this.contentType=(this.headers.get("content-type")||"").split(";")[0]}clone(e){return new T({...this,...e})}};n(T,"HttpResponse");var R=T;var f;(function(c){c.Sent="Sent",c.UploadProgress="UploadProgress",c.ResponseHeader="ResponseHeader",c.DownloadProgress="DownloadProgress",c.Response="Response",c.User="User"})(f||(f={}));var O=class O extends b{constructor(e,t){var r,o,s,a,d,u;super(e,t),this.interceptors=Array.from(new Set([...(t==null?void 0:t.interceptors)||[]])),this.defaults={...t==null?void 0:t.defaults,headers:((r=t==null?void 0:t.defaults)==null?void 0:r.headers)instanceof Headers?(o=t==null?void 0:t.defaults)==null?void 0:o.headers:new Headers((s=t==null?void 0:t.defaults)==null?void 0:s.headers),params:((a=t==null?void 0:t.defaults)==null?void 0:a.params)instanceof URLSearchParams?(d=t==null?void 0:t.defaults)==null?void 0:d.params:new URLSearchParams((u=t==null?void 0:t.defaults)==null?void 0:u.params)}}handle(e){return new W(t=>{(async()=>{let r=this.prepareRequest(e);if(r.body&&e.reportProgress){let y=r.body,p=r.headers.get("content-length")||"0",i=parseInt(p,10)||0,x=0,j=new TransformStream({transform(g,E){E.enqueue(g),x+=g.byteLength,t.next({type:f.UploadProgress,request:r,total:i,loaded:x})}});r=new Request(r.url,{cache:r.cache,credentials:r.credentials,headers:r.headers,integrity:r.integrity,keepalive:r.keepalive,method:r.method,mode:r.mode,redirect:r.redirect,referrer:r.referrer,referrerPolicy:r.referrerPolicy,signal:r.signal,body:y.pipeThrough(j),window:e.window,duplex:"half"})}let o=this.send(r);t.next({request:r,type:f.Sent});let s=await o,a=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,hasBody:!!s.body});t.next({request:r,type:f.ResponseHeader,response:a});let d;if(s.body)if(e.reportProgress){let y=s.body,p=s.headers.get("content-length")||"0",i=parseInt(p,10)||0,x=0,j=new Response(new ReadableStream({async start(g){let E=y.getReader();for(;;){let{done:J,value:z}=await E.read();if(J)break;x+=z.byteLength,g.enqueue(z),t.next({type:f.DownloadProgress,request:r,total:i,loaded:x})}g.close()}}));d=await this.parseBody(j)}else d=await this.parseBody(s);let u=this.createResponse({url:s.url,headers:s.headers,status:s.status,statusText:s.statusText,body:d});t.next({request:r,type:f.Response,response:u}),t.complete()})().catch(r=>t.error(r))})}send(e){return fetch(e)}prepareRequest(e){let t=e.headers||new Headers,r={...e,headers:t};this.defaults.headers.forEach((a,d)=>{t.has(d)||t.set(d,a)});let o=new URL(r.url,this.serviceUrl);this.defaults.params.size&&(this.defaults.params.forEach((a,d)=>{o.searchParams.has(d)||o.searchParams.set(d,a)}),r.url=o.toString());let s=r.body;if(s){let a="";typeof s=="string"||typeof s=="number"||typeof s=="boolean"?(a='text/plain; charset="UTF-8"',r.body=new Blob([String(s)],{type:a}),t.set("Content-Length",String(r.body.size)),delete r.duplex):$(s)?(a="application/octet-stream",r.duplex="half"):Buffer.isBuffer(s)?(a="application/octet-stream",t.set("Content-Length",String(s.length)),delete r.duplex):M(s)?(a=s.type||"application/octet-stream",t.set("Content-Length",String(s.size)),delete r.duplex):(V(s)||(a='application/json;charset="UTF-8"',r.body=new Blob([JSON.stringify(s)],{type:a}),t.set("Content-Length",String(r.body.size))),delete r.duplex),a&&!t.has("Content-Type")&&t.set("Content-Type",a)}return new Request(o.toString(),r)}createResponse(e){return new R(e)}async parseBody(e){let t,r=e.headers.get("Content-Type")||"";if(D.is(r,["json","application/*+json"]))t=await e.json(),typeof t=="string"&&(t=JSON.parse(t));else if(D.is(r,["text"]))t=await e.text();else if(D.is(r,["multipart"]))t=await e.formData();else{let o=await e.arrayBuffer();o.byteLength&&(t=o)}return t}};n(O,"FetchBackend");var P=O;import{ApiDocumentFactory as _}from"@opra/common";import X from"@browsery/type-is";import{MimeTypes as Y}from"@opra/common";import{lastValueFrom as F,Observable as Z}from"rxjs";var H=class H{constructor(e,t){this.chain=e.reduceRight((r,o)=>(s,a)=>o.intercept(s,{handle:n(d=>r(d,a),"handle")}),Q),this.finalHandler=t}handle(e){return this.chain(e,t=>this.finalHandler.handle(t))}};n(H,"HttpInterceptorHandler");var B=H;function Q(c,e){return e(c)}n(Q,"chainEnd");var k=class k extends Z{constructor(e,t){super(r=>{let o=this[l].observe;new B(e.interceptors||[],this[h]).handle(this[l]).subscribe({next(s){if(o===m.Events){r.next(s);return}if(o===m.ResponseHeader&&s.type===f.ResponseHeader){r.next(s.response),r.complete();return}if(s.type===f.Response){let{response:a}=s;if(o===m.Response){r.next(a),r.complete();return}let d=X.is(s.response.contentType||"",[Y.opra_response_json]);if(a.status>=400&&a.status<600){r.error(new S({message:a.status+" "+a.statusText,status:a.status,issues:d?a.body.errors:void 0})),r.complete();return}r.next(s.response.body),r.complete()}},error(s){r.error(s)},complete(){r.complete()}})}),Object.defineProperty(this,h,{enumerable:!1,value:e}),Object.defineProperty(this,l,{enumerable:!1,value:{...t,observe:m.Body,headers:new Headers(t==null?void 0:t.headers)}})}clone(){return new k(this[h],this[l])}options(e){return Object.assign(this[l],e),this}header(e,t){let r=this[l].headers;return typeof e=="object"?((e instanceof Headers?e:new Headers(e)).forEach((s,a)=>{a.toLowerCase()==="set-cookie"?r.append(a,s):r.set(a,s)}),this):(t==null||t===""?r.delete(e):r.append(e,String(t)),this)}param(e,t){t&&typeof t=="object"&&(t=JSON.stringify(t));let r=this[l].url.searchParams;return typeof e=="object"?(typeof e.forEach=="function"?e.forEach((o,s)=>r.set(String(s),String(o))):Object.entries(e).forEach(o=>r.set(String(o[0]),String(o[1]))),this):(t==null?r.delete(e):r.set(e,String(t)),this)}observe(e){if(e===this[l].observe)return this;let t=this.clone();return t[l].observe=e||m.Body,t}getBody(){return F(this.observe(m.Body))}getResponse(){return F(this.observe(m.Response))}};n(k,"HttpRequestObservable");var U=k;var ee=/^(\/*)(.+)/,A=class A{constructor(e){Object.defineProperty(this,h,{enumerable:!1,value:e})}get serviceUrl(){return this[h].serviceUrl}async fetchDocument(e){let t={},r=n(async s=>{let a=this.request("$schema",{headers:new Headers({accept:"application/json"})});s&&a.param("id",s);let d=await a.getBody().catch(u=>{throw u.message="Error fetching api schema from url ("+this.serviceUrl+`).
7
+ `+u.message,u});if(d.references){let u=d.references;d.references={};for(let[y,p]of Object.entries(u)){if(t[p.id]===null)throw new Error("Circular reference detected");t[p.id]=null;let i=await r(p.id);d.references[y]=t[p.id]=i}}return d},"getDocument"),o=await r(e==null?void 0:e.documentId);return await _.createDocument(o).catch(s=>{throw s.message=`Error loading api document.
8
+ `+s.message,s})}request(e,t){var o;e=((o=ee.exec(e))==null?void 0:o[2])||"";let r=new U(this[h],{...t,method:(t==null?void 0:t.method)||"GET",url:new URL(e,this.serviceUrl)});return t!=null&&t.params&&r.param(t.params),r}delete(e,t){return this.request(e,{...t,method:"DELETE"})}get(e,t){return this.request(e,{...t,method:"GET"})}patch(e,t,r){return this.request(e,{...r,method:"PATCH",body:t})}post(e,t,r){return this.request(e,{...r,method:"POST",body:t})}put(e,t,r){return this.request(e,{...r,method:"PUT",body:t})}};n(A,"HttpClientBase");var L=A;var I=class I extends L{constructor(e,t){super(new P(e,t))}get defaults(){return this[h].defaults}};n(I,"OpraHttpClient");var N=I;function Me(c,...e){let t="",r;for(r=0;r<c.length;r++)t+=c[0]+encodeURIComponent(e[r]);return t}n(Me,"urlPath");export{w as Backend,S as ClientError,P as FetchBackend,b as HttpBackend,L as HttpClientBase,f as HttpEventType,m as HttpObserveType,U as HttpRequestObservable,R as HttpResponse,N as OpraHttpClient,h as kBackend,K as kClient,l as kContext,Me as urlPath};