UNPKG

@opra/client

Version:
138 lines (137 loc) 5.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HttpRequestObservable = void 0; const tslib_1 = require("tslib"); const type_is_1 = tslib_1.__importDefault(require("@browsery/type-is")); const common_1 = require("@opra/common"); const rxjs_1 = require("rxjs"); const constants_js_1 = require("../constants.js"); const client_error_js_1 = require("../core/client-error.js"); const http_observable_type_enum_js_1 = require("./enums/http-observable-type.enum.js"); const http_interceptor_handler_js_1 = require("./http-interceptor-handler.js"); const http_event_js_1 = require("./interfaces/http-event.js"); /** * * @class HttpRequestObservable */ class HttpRequestObservable extends rxjs_1.Observable { constructor(backend, init) { super(subscriber => { const observe = this[constants_js_1.kContext].observe; new http_interceptor_handler_js_1.HttpInterceptorHandler(backend.interceptors || [], this[constants_js_1.kBackend]) .handle(this[constants_js_1.kContext]) .subscribe({ next(event) { if (observe === http_observable_type_enum_js_1.HttpObserveType.Events) { subscriber.next(event); return; } if (observe === http_observable_type_enum_js_1.HttpObserveType.ResponseHeader && event.type === http_event_js_1.HttpEventType.ResponseHeader) { subscriber.next(event.response); subscriber.complete(); return; } if (event.type === http_event_js_1.HttpEventType.Response) { const { response } = event; if (observe === http_observable_type_enum_js_1.HttpObserveType.Response) { subscriber.next(response); subscriber.complete(); return; } const isOpraResponse = type_is_1.default.is(event.response.contentType || '', [common_1.MimeTypes.opra_response_json]); if (response.status >= 400 && response.status < 600) { subscriber.error(new client_error_js_1.ClientError({ message: response.status + ' ' + response.statusText, status: response.status, issues: isOpraResponse ? response.body.errors : undefined, })); subscriber.complete(); return; } subscriber.next(event.response.body); subscriber.complete(); } }, error(error) { subscriber.error(error); }, complete() { subscriber.complete(); }, }); }); Object.defineProperty(this, constants_js_1.kBackend, { enumerable: false, value: backend, }); Object.defineProperty(this, constants_js_1.kContext, { enumerable: false, value: { ...init, observe: http_observable_type_enum_js_1.HttpObserveType.Body, headers: new Headers(init?.headers), }, }); } clone() { return new HttpRequestObservable(this[constants_js_1.kBackend], this[constants_js_1.kContext]); } options(options) { Object.assign(this[constants_js_1.kContext], options); return this; } header(arg0, value) { const target = this[constants_js_1.kContext].headers; if (typeof arg0 === 'object') { const h = arg0 instanceof Headers ? arg0 : new Headers(arg0); h.forEach((v, k) => { if (k.toLowerCase() === 'set-cookie') { target.append(k, v); } else target.set(k, v); }); return this; } if (value == null || value === '') target.delete(arg0); else target.append(arg0, String(value)); return this; } param(arg0, value) { if (value && typeof value === 'object') { value = JSON.stringify(value); } const target = this[constants_js_1.kContext].url.searchParams; if (typeof arg0 === 'object') { if (typeof arg0.forEach === 'function') { arg0.forEach((v, k) => target.set(String(k), String(v))); } else { Object.entries(arg0).forEach(entry => target.set(String(entry[0]), String(entry[1]))); } return this; } if (value == null) target.delete(arg0); else target.set(arg0, String(value)); return this; } observe(observe) { if (observe === this[constants_js_1.kContext].observe) return this; const cloned = this.clone(); cloned[constants_js_1.kContext].observe = observe || http_observable_type_enum_js_1.HttpObserveType.Body; return cloned; } getBody() { return (0, rxjs_1.lastValueFrom)(this.observe(http_observable_type_enum_js_1.HttpObserveType.Body)); } getResponse() { return (0, rxjs_1.lastValueFrom)(this.observe(http_observable_type_enum_js_1.HttpObserveType.Response)); } } exports.HttpRequestObservable = HttpRequestObservable;