UNPKG

ngx-endpoints

Version:

A library to dynamically load data from http endpoints / urls in angular

209 lines 14.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { NgxEndpointService } from './ngx-endpoints.service'; import { NgxEndPointData } from './ngx-endpoint.format'; import { BehaviorSubject } from 'rxjs'; import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./ngx-endpoints.service"; import * as i2 from "./ngx-endpoint.format"; /** * @template T */ var NgxEndPoint = /** @class */ (function () { function NgxEndPoint(endpointservice, _endpoint) { this.endpointservice = endpointservice; this._endpoint = _endpoint; /** * data stores the last requested data as Behaviorsubject that can be subscribed. */ this.data = new BehaviorSubject(null); /** * if a request is already pending no additional request should be made to the datasource */ this.requestPending = new BehaviorSubject(false); /** * Is the endpoint alive and returns data ? */ this.isAlive = new BehaviorSubject(false); /** * Delivering internal process information */ this.events = new BehaviorSubject(''); /** * for live sources this option will be used to stop the process */ this.running = true; this.endpoint = _endpoint; Object.assign(this.data, new Array()); } /** * Requests data from an http source * Optionally converts relative dates (now-1d) into readable urls by DatesOutputFormat * Adds the result of the request to BehaviorSubject data that can be subscribed */ /** * Requests data from an http source * Optionally converts relative dates (now-1d) into readable urls by DatesOutputFormat * Adds the result of the request to BehaviorSubject data that can be subscribed * @return {?} */ NgxEndPoint.prototype.requestData = /** * Requests data from an http source * Optionally converts relative dates (now-1d) into readable urls by DatesOutputFormat * Adds the result of the request to BehaviorSubject data that can be subscribed * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.requestInternal()]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; /** * @return {?} */ NgxEndPoint.prototype.requestInternal = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!!this.requestPending.getValue()) return [3 /*break*/, 2]; this.addEvent('requesting data from endpoint', this.endpoint); this.requestPending.next(true); this.convertDates(this.endpoint.convertDates); return [4 /*yield*/, this.request()]; case 1: _a.sent(); this.requestPending.next(false); return [3 /*break*/, 3]; case 2: this.addEvent('a request is pending', this.endpoint); _a.label = 3; case 3: return [2 /*return*/]; } }); }); }; /** * @param {?} conversion * @return {?} */ NgxEndPoint.prototype.convertDates = /** * @param {?} conversion * @return {?} */ function (conversion) { if (conversion) { this.endpoint.endPointUrl = this.endpointservice.convertDatesInURL(this.endpoint.endPointUrl, this.endpoint.convertDatesOutputFormat); this.addEvent('converted endpointurl', this.endpoint); } }; /** * @return {?} */ NgxEndPoint.prototype.request = /** * @return {?} */ function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var currentData, error_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, this.endpointservice.getData(this.endpoint.endPointUrl, this.endpoint.requestOptions)]; case 1: currentData = _a.sent(); if (!this.isAlive.getValue() && currentData != null) { this.isAlive.next(true); this.addEvent('endpoint is alive', this.endpoint); } this.data.next(currentData); this.addEvent('updated data', this.endpoint); return [3 /*break*/, 3]; case 2: error_1 = _a.sent(); this.addEvent(error_1, this.endpoint); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }; /** * @param {?} item * @param {?} endpointdata * @return {?} */ NgxEndPoint.prototype.addEvent = /** * @param {?} item * @param {?} endpointdata * @return {?} */ function (item, endpointdata) { this.events.next(JSON.stringify({ event: item, endpoint: endpointdata })); }; NgxEndPoint.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxEndPoint.ctorParameters = function () { return [ { type: NgxEndpointService }, { type: NgxEndPointData } ]; }; /** @nocollapse */ NgxEndPoint.ngInjectableDef = i0.defineInjectable({ factory: function NgxEndPoint_Factory() { return new NgxEndPoint(i0.inject(i1.NgxEndpointService), i0.inject(i2.NgxEndPointData)); }, token: NgxEndPoint, providedIn: "root" }); return NgxEndPoint; }()); export { NgxEndPoint }; if (false) { /** * raw data that is used for later identification of the endpoint * @type {?} */ NgxEndPoint.prototype.endpoint; /** * data stores the last requested data as Behaviorsubject that can be subscribed. * @type {?} */ NgxEndPoint.prototype.data; /** * if a request is already pending no additional request should be made to the datasource * @type {?} */ NgxEndPoint.prototype.requestPending; /** * Is the endpoint alive and returns data ? * @type {?} */ NgxEndPoint.prototype.isAlive; /** * Delivering internal process information * @type {?} */ NgxEndPoint.prototype.events; /** * for live sources this option will be used to stop the process * @type {?} */ NgxEndPoint.prototype.running; /** @type {?} */ NgxEndPoint.prototype.endpointservice; /** @type {?} */ NgxEndPoint.prototype._endpoint; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1lbmRwb2ludHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVuZHBvaW50cy9uZ3gtZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFhLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFFcEU7SUE0QkUscUJBQW1CLGVBQW1DLEVBQVksU0FBMEI7UUFBekUsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQVksY0FBUyxHQUFULFNBQVMsQ0FBaUI7Ozs7UUFqQnJGLFNBQUksR0FBRyxJQUFJLGVBQWUsQ0FBSSxJQUFJLENBQUMsQ0FBQzs7OztRQUlwQyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFNLEtBQUssQ0FBQyxDQUFDOzs7O1FBSWpELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBTSxLQUFLLENBQUMsQ0FBQzs7OztRQUkxQyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7Ozs7UUFJekMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVwQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztNQUlFOzs7Ozs7O0lBQ1csaUNBQVc7Ozs7OztJQUF4Qjs7Ozs0QkFDRSxxQkFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUE7O3dCQUE1QixTQUE0QixDQUFDOzs7OztLQUM5Qjs7OztJQUdlLHFDQUFlOzs7SUFBL0I7Ozs7OzZCQUNNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBL0Isd0JBQStCO3dCQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDOUMscUJBQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFBOzt3QkFBcEIsU0FBb0IsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Ozt3QkFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7OztLQUd4RDs7Ozs7SUFFTyxrQ0FBWTs7OztJQUFwQixVQUFxQixVQUFVO1FBQzdCLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDdEksSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDOzs7O0lBRWEsNkJBQU87OztJQUFyQjs7Ozs7Ozt3QkFFd0IscUJBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBQTs7d0JBQTVHLFdBQVcsR0FBRyxTQUE4Rjt3QkFDbEgsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTs0QkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3lCQUNuRDt3QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7O3dCQUU3QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Ozs7OztLQUV2Qzs7Ozs7O0lBRU8sOEJBQVE7Ozs7O0lBQWhCLFVBQWlCLElBQVMsRUFBRSxZQUE2QjtRQUV2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7O2dCQWhGRixVQUFVLFNBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzs7O2dCQVBRLGtCQUFrQjtnQkFDbEIsZUFBZTs7O3NCQUR4QjtDQXNGQyxBQWpGRCxJQWlGQztTQTlFWSxXQUFXOzs7Ozs7SUFJdEIsK0JBQWlDOzs7OztJQUlqQywyQkFBMkM7Ozs7O0lBSTNDLHFDQUF3RDs7Ozs7SUFJeEQsOEJBQWlEOzs7OztJQUlqRCw2QkFBZ0Q7Ozs7O0lBSWhELDhCQUFzQjs7SUFDVixzQ0FBMEM7O0lBQUUsZ0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4RW5kcG9pbnRTZXJ2aWNlIH0gZnJvbSAnLi9uZ3gtZW5kcG9pbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd4RW5kUG9pbnREYXRhIH0gZnJvbSAnLi9uZ3gtZW5kcG9pbnQuZm9ybWF0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmd4RW5kUG9pbnQ8VD4ge1xuICAvKipcbiAgKiByYXcgZGF0YSB0aGF0IGlzIHVzZWQgZm9yIGxhdGVyIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBlbmRwb2ludFxuICAqL1xuICBwdWJsaWMgZW5kcG9pbnQ6IE5neEVuZFBvaW50RGF0YTtcbiAgLyoqXG4gICogZGF0YSBzdG9yZXMgdGhlIGxhc3QgcmVxdWVzdGVkIGRhdGEgYXMgQmVoYXZpb3JzdWJqZWN0IHRoYXQgY2FuIGJlIHN1YnNjcmliZWQuXG4gICovXG4gIHB1YmxpYyBkYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUPihudWxsKTtcbiAgLyoqXG4gICogaWYgYSByZXF1ZXN0IGlzIGFscmVhZHkgcGVuZGluZyBubyBhZGRpdGlvbmFsIHJlcXVlc3Qgc2hvdWxkIGJlIG1hZGUgdG8gdGhlIGRhdGFzb3VyY2VcbiAgKi9cbiAgcHVibGljIHJlcXVlc3RQZW5kaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKTtcbiAgLyoqXG4gICogSXMgdGhlIGVuZHBvaW50IGFsaXZlIGFuZCByZXR1cm5zIGRhdGEgP1xuICAqL1xuICBwdWJsaWMgaXNBbGl2ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihmYWxzZSk7XG4gIC8qKlxuICAqIERlbGl2ZXJpbmcgaW50ZXJuYWwgcHJvY2VzcyBpbmZvcm1hdGlvblxuICAqL1xuICBwdWJsaWMgZXZlbnRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgLyoqXG4gICogZm9yIGxpdmUgc291cmNlcyB0aGlzIG9wdGlvbiB3aWxsIGJlIHVzZWQgdG8gc3RvcCB0aGUgcHJvY2Vzc1xuICAqL1xuICBwdWJsaWMgcnVubmluZyA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludHNlcnZpY2U6IE5neEVuZHBvaW50U2VydmljZSwgcHJvdGVjdGVkIF9lbmRwb2ludDogTmd4RW5kUG9pbnREYXRhKSB7XG4gICAgdGhpcy5lbmRwb2ludCA9IF9lbmRwb2ludDtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgbmV3IEFycmF5PGFueT4oKSk7XG4gIH1cblxuICAvKipcbiAgKiBSZXF1ZXN0cyBkYXRhIGZyb20gYW4gaHR0cCBzb3VyY2VcbiAgKiBPcHRpb25hbGx5IGNvbnZlcnRzIHJlbGF0aXZlIGRhdGVzIChub3ctMWQpIGludG8gcmVhZGFibGUgdXJscyBieSBEYXRlc091dHB1dEZvcm1hdFxuICAqIEFkZHMgdGhlIHJlc3VsdCBvZiB0aGUgcmVxdWVzdCB0byBCZWhhdmlvclN1YmplY3QgZGF0YSB0aGF0IGNhbiBiZSBzdWJzY3JpYmVkXG4gICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0RGF0YSgpIHtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RJbnRlcm5hbCgpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVxdWVzdEludGVybmFsKCkge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0UGVuZGluZy5nZXRWYWx1ZSgpKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50KCdyZXF1ZXN0aW5nIGRhdGEgZnJvbSBlbmRwb2ludCcsIHRoaXMuZW5kcG9pbnQpO1xuICAgICAgdGhpcy5yZXF1ZXN0UGVuZGluZy5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jb252ZXJ0RGF0ZXModGhpcy5lbmRwb2ludC5jb252ZXJ0RGF0ZXMpO1xuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0KCk7XG4gICAgICB0aGlzLnJlcXVlc3RQZW5kaW5nLm5leHQoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZEV2ZW50KCdhIHJlcXVlc3QgaXMgcGVuZGluZycsIHRoaXMuZW5kcG9pbnQpO1xuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZXMoY29udmVyc2lvbikge1xuICAgIGlmIChjb252ZXJzaW9uKSB7XG4gICAgICB0aGlzLmVuZHBvaW50LmVuZFBvaW50VXJsID0gdGhpcy5lbmRwb2ludHNlcnZpY2UuY29udmVydERhdGVzSW5VUkwodGhpcy5lbmRwb2ludC5lbmRQb2ludFVybCwgdGhpcy5lbmRwb2ludC5jb252ZXJ0RGF0ZXNPdXRwdXRGb3JtYXQpO1xuICAgICAgdGhpcy5hZGRFdmVudCgnY29udmVydGVkIGVuZHBvaW50dXJsJywgdGhpcy5lbmRwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50RGF0YSA9IGF3YWl0IHRoaXMuZW5kcG9pbnRzZXJ2aWNlLmdldERhdGE8VD4odGhpcy5lbmRwb2ludC5lbmRQb2ludFVybCwgdGhpcy5lbmRwb2ludC5yZXF1ZXN0T3B0aW9ucyk7XG4gICAgICBpZiAoIXRoaXMuaXNBbGl2ZS5nZXRWYWx1ZSgpICYmIGN1cnJlbnREYXRhICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5pc0FsaXZlLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ2VuZHBvaW50IGlzIGFsaXZlJywgdGhpcy5lbmRwb2ludCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEubmV4dChjdXJyZW50RGF0YSk7XG4gICAgICB0aGlzLmFkZEV2ZW50KCd1cGRhdGVkIGRhdGEnLCB0aGlzLmVuZHBvaW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hZGRFdmVudChlcnJvciwgdGhpcy5lbmRwb2ludCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRFdmVudChpdGVtOiBhbnksIGVuZHBvaW50ZGF0YTogTmd4RW5kUG9pbnREYXRhKSB7XG5cbiAgICB0aGlzLmV2ZW50cy5uZXh0KEpTT04uc3RyaW5naWZ5KHtldmVudDogaXRlbSwgZW5kcG9pbnQ6IGVuZHBvaW50ZGF0YX0pKTtcbiAgfVxufVxuIl19