UNPKG

@dotglitch/ngx-common

Version:

Angular components and utilities that are commonly used.

74 lines 12.5 kB
import { Injectable, isDevMode } from '@angular/core'; import { retry } from 'rxjs/operators'; import { of } from 'rxjs'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; // Total number of _retries_ if there is a 429 response code. const retryCount = 2; export class Fetch { constructor(http) { this.http = http; } // Public interface for making AJAX transactions get(url, options = {}, returnError = false) { return this.request("get", url, options, returnError); } put(url, body, options = {}, returnError = false) { options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {}; return this.request("put", url, options, returnError); } post(url, body, options = {}, returnError = false) { options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {}; return this.request("post", url, options, returnError); } patch(url, body, options = {}, returnError = false) { options.body = (options.body && Object.keys(options.body).length > 0 ? options.body : body) || {}; return this.request("patch", url, options, returnError); } delete(url, options = {}, returnError = false) { return this.request("delete", url, options, returnError); } // Internally, handle the observable as a promise. request(method, url, options = {}, returnError = false) { options.reportProgress = true; // Allow support for different response types. // Generally we shouldn't need this to be anything other than JSON. options.responseType = options.responseType || "json"; options.withCredentials = true; let abort = false; const p = new Promise((resolve, reject) => { const o = this.http.request(method, url, options) .pipe(retry({ delay(error, retryCount) { // 429 and 502 are most common for overloaded // backends -- so we'll retry if we get these errors if (error.status == 429 || error.status == 502) return of({}); if (error.status == 504 && isDevMode()) alert("It looks like you can't reach your development backend anymore"); abort = true; reject(error); throw error; }, count: retryCount })) .subscribe(data => { resolve(data); // provide 3ms slacktime before releasing observable. setTimeout(() => { o.unsubscribe(); }, 3); }); }); return p; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Fetch, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Fetch, providedIn: "root" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: Fetch, decorators: [{ type: Injectable, args: [{ providedIn: "root" }] }], ctorParameters: () => [{ type: i1.HttpClient }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvc2VydmljZXMvZmV0Y2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBRTFCLDZEQUE2RDtBQUM3RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFvQnJCLE1BQU0sT0FBTyxLQUFLO0lBQ2QsWUFDWSxJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3hCLENBQUM7SUFFTCxnREFBZ0Q7SUFDekMsR0FBRyxDQUFJLEdBQVcsRUFBRSxVQUF3QixFQUFFLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDdEUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDTSxHQUFHLENBQUksR0FBVyxFQUFFLElBQVMsRUFBRSxVQUF3QixFQUFFLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDakYsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xHLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ00s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QUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFlLENBQUM7SUFDM0IsQ0FBQzs4R0FsRVEsS0FBSztrSEFBTCxLQUFLLGNBRkYsTUFBTTs7MkZBRVQsS0FBSztrQkFIakIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuXG4vLyBUb3RhbCBudW1iZXIgb2YgX3JldHJpZXNfIGlmIHRoZXJlIGlzIGEgNDI5IHJlc3BvbnNlIGNvZGUuXG5jb25zdCByZXRyeUNvdW50ID0gMjtcblxuZXhwb3J0IHR5cGUgRmV0Y2hPcHRpb25zID0ge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcbiAgICB9O1xuICAgIGJvZHk/OiBhbnksXG4gICAgb2JzZXJ2ZT86ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJztcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgcmVzcG9uc2VUeXBlPzogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JztcbiAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgRmV0Y2gge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgICApIHsgfVxuXG4gICAgLy8gUHVibGljIGludGVyZmFjZSBmb3IgbWFraW5nIEFKQVggdHJhbnNhY3Rpb25zXG4gICAgcHVibGljIGdldDxUPih1cmw6IHN0cmluZywgb3B0aW9uczogRmV0Y2hPcHRpb25zID0ge30sIHJldHVybkVycm9yID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcImdldFwiLCB1cmwsIG9wdGlvbnMsIHJldHVybkVycm9yKTtcbiAgICB9XG4gICAgcHVibGljIHB1dDxUPih1cmw6IHN0cmluZywgYm9keTogYW55LCBvcHRpb25zOiBGZXRjaE9wdGlvbnMgPSB7fSwgcmV0dXJuRXJyb3IgPSBmYWxzZSk6IFByb21pc2U8VD4ge1xuICAgICAgICBvcHRpb25zLmJvZHkgPSAob3B0aW9ucy5ib2R5ICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuYm9keSkubGVuZ3RoID4gMCA/IG9wdGlvbnMuYm9keSA6IGJvZHkpIHx8IHt9O1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwicHV0XCIsIHVybCwgb3B0aW9ucywgcmV0dXJuRXJyb3IpO1xuICAgIH1cbiAgICBwdWJsaWMgcG9zdDxUPih1cmw6IHN0cmluZywgYm9keTogYW55LCBvcHRpb25zOiBGZXRjaE9wdGlvbnMgPSB7fSwgcmV0dXJuRXJyb3IgPSBmYWxzZSk6IFByb21pc2U8VD4ge1xuICAgICAgICBvcHRpb25zLmJvZHkgPSAob3B0aW9ucy5ib2R5ICYmIE9iamVjdC5rZXlzKG9wdGlvbnMuYm9keSkubGVuZ3RoID4gMCA/IG9wdGlvbnMuYm9keSA6IGJvZHkpIHx8IHt9O1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KFwicG9zdFwiLCB1cmwsIG9wdGlvbnMsIHJldHVybkVycm9yKTtcbiAgICB9XG4gICAgcHVibGljIHBhdGNoPFQ+KHVybDogc3RyaW5nLCBib2R5OiBhbnksIG9wdGlvbnM6IEZldGNoT3B0aW9ucyA9IHt9LCByZXR1cm5FcnJvciA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IChvcHRpb25zLmJvZHkgJiYgT2JqZWN0LmtleXMob3B0aW9ucy5ib2R5KS5sZW5ndGggPiAwID8gb3B0aW9ucy5ib2R5IDogYm9keSkgfHwge307XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8VD4oXCJwYXRjaFwiLCB1cmwsIG9wdGlvbnMsIHJldHVybkVycm9yKTtcbiAgICB9XG4gICAgcHVibGljIGRlbGV0ZTxUPih1cmw6IHN0cmluZywgb3B0aW9uczogRmV0Y2hPcHRpb25zID0ge30sIHJldHVybkVycm9yID0gZmFsc2UpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPihcImRlbGV0ZVwiLCB1cmwsIG9wdGlvbnMsIHJldHVybkVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBJbnRlcm5hbGx5LCBoYW5kbGUgdGhlIG9ic2VydmFibGUgYXMgYSBwcm9taXNlLlxuICAgIHByaXZhdGUgcmVxdWVzdDxUPihtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIG9wdGlvbnM6IEZldGNoT3B0aW9ucyA9IHt9LCByZXR1cm5FcnJvciA9IGZhbHNlKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIG9wdGlvbnMucmVwb3J0UHJvZ3Jlc3MgPSB0cnVlO1xuXG4gICAgICAgIC8vIEFsbG93IHN1cHBvcnQgZm9yIGRpZmZlcmVudCByZXNwb25zZSB0eXBlcy5cbiAgICAgICAgLy8gR2VuZXJhbGx5IHdlIHNob3VsZG4ndCBuZWVkIHRoaXMgdG8gYmUgYW55dGhpbmcgb3RoZXIgdGhhbiBKU09OLlxuICAgICAgICBvcHRpb25zLnJlc3BvbnNlVHlwZSA9IG9wdGlvbnMucmVzcG9uc2VUeXBlIHx8IFwianNvblwiO1xuICAgICAgICBvcHRpb25zLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG5cblxuICAgICAgICBsZXQgYWJvcnQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLmh0dHAucmVxdWVzdChtZXRob2QsIHVybCwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAucGlwZShyZXRyeSh7XG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KGVycm9yLCByZXRyeUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA0MjkgYW5kIDUwMiBhcmUgbW9zdCBjb21tb24gZm9yIG92ZXJsb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2tlbmRzIC0tIHNvIHdlJ2xsIHJldHJ5IGlmIHdlIGdldCB0aGVzZSBlcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gNDI5IHx8IGVycm9yLnN0YXR1cyA9PSA1MDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHt9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PSA1MDQgJiYgaXNEZXZNb2RlKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJJdCBsb29rcyBsaWtlIHlvdSBjYW4ndCByZWFjaCB5b3VyIGRldmVsb3BtZW50IGJhY2tlbmQgYW55bW9yZVwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvdW50OiByZXRyeUNvdW50XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhIGFzIHVua25vd24gYXMgVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcHJvdmlkZSAzbXMgc2xhY2t0aW1lIGJlZm9yZSByZWxlYXNpbmcgb2JzZXJ2YWJsZS5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcCBhcyBQcm9taXNlPFQ+O1xuICAgIH1cbn1cbiJdfQ==