UNPKG

ngx-endpoints

Version:

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

161 lines 12.5 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 */ export class NgxEndPoint { /** * @param {?} endpointservice * @param {?} _endpoint */ constructor(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 * @return {?} */ requestData() { return tslib_1.__awaiter(this, void 0, void 0, function* () { yield this.requestInternal(); }); } /** * @return {?} */ requestInternal() { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (!this.requestPending.getValue()) { this.addEvent('requesting data from endpoint', this.endpoint); this.requestPending.next(true); this.convertDates(this.endpoint.convertDates); yield this.request(); this.requestPending.next(false); } else { this.addEvent('a request is pending', this.endpoint); } }); } /** * @param {?} conversion * @return {?} */ convertDates(conversion) { if (conversion) { this.endpoint.endPointUrl = this.endpointservice.convertDatesInURL(this.endpoint.endPointUrl, this.endpoint.convertDatesOutputFormat); this.addEvent('converted endpointurl', this.endpoint); } } /** * @return {?} */ request() { return tslib_1.__awaiter(this, void 0, void 0, function* () { try { /** @type {?} */ const currentData = yield this.endpointservice.getData(this.endpoint.endPointUrl, this.endpoint.requestOptions); 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); } catch (error) { this.addEvent(error, this.endpoint); } }); } /** * @param {?} item * @param {?} endpointdata * @return {?} */ addEvent(item, endpointdata) { this.events.next(JSON.stringify({ event: item, endpoint: endpointdata })); } } NgxEndPoint.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxEndPoint.ctorParameters = () => [ { 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" }); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1lbmRwb2ludHMvIiwic291cmNlcyI6WyJsaWIvbmd4LWVuZHBvaW50cy9uZ3gtZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFhLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFLcEUsTUFBTSxPQUFPLFdBQVc7Ozs7O0lBeUJ0QixZQUFtQixlQUFtQyxFQUFZLFNBQTBCO1FBQXpFLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCOzs7O1FBakJyRixTQUFJLEdBQUcsSUFBSSxlQUFlLENBQUksSUFBSSxDQUFDLENBQUM7Ozs7UUFJcEMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxLQUFLLENBQUMsQ0FBQzs7OztRQUlqRCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQU0sS0FBSyxDQUFDLENBQUM7Ozs7UUFJMUMsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDOzs7O1FBSXpDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7Ozs7O0lBT1ksV0FBVzs7WUFDdEIsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDL0IsQ0FBQztLQUFBOzs7O0lBR2UsZUFBZTs7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFFdEQ7UUFDSCxDQUFDO0tBQUE7Ozs7O0lBRU8sWUFBWSxDQUFDLFVBQVU7UUFDN0IsSUFBSSxVQUFVLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN0SSxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7Ozs7SUFFYSxPQUFPOztZQUNuQixJQUFJOztzQkFDSSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDbEgsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlDO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQztLQUFBOzs7Ozs7SUFFTyxRQUFRLENBQUMsSUFBUyxFQUFFLFlBQTZCO1FBRXZELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7O1lBaEZGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVBRLGtCQUFrQjtZQUNsQixlQUFlOzs7Ozs7OztJQVd0QiwrQkFBaUM7Ozs7O0lBSWpDLDJCQUEyQzs7Ozs7SUFJM0MscUNBQXdEOzs7OztJQUl4RCw4QkFBaUQ7Ozs7O0lBSWpELDZCQUFnRDs7Ozs7SUFJaEQsOEJBQXNCOztJQUNWLHNDQUEwQzs7SUFBRSxnQ0FBb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hFbmRwb2ludFNlcnZpY2UgfSBmcm9tICcuL25neC1lbmRwb2ludHMuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3hFbmRQb2ludERhdGEgfSBmcm9tICcuL25neC1lbmRwb2ludC5mb3JtYXQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdGFibGUsIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOZ3hFbmRQb2ludDxUPiB7XG4gIC8qKlxuICAqIHJhdyBkYXRhIHRoYXQgaXMgdXNlZCBmb3IgbGF0ZXIgaWRlbnRpZmljYXRpb24gb2YgdGhlIGVuZHBvaW50XG4gICovXG4gIHB1YmxpYyBlbmRwb2ludDogTmd4RW5kUG9pbnREYXRhO1xuICAvKipcbiAgKiBkYXRhIHN0b3JlcyB0aGUgbGFzdCByZXF1ZXN0ZWQgZGF0YSBhcyBCZWhhdmlvcnN1YmplY3QgdGhhdCBjYW4gYmUgc3Vic2NyaWJlZC5cbiAgKi9cbiAgcHVibGljIGRhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQ+KG51bGwpO1xuICAvKipcbiAgKiBpZiBhIHJlcXVlc3QgaXMgYWxyZWFkeSBwZW5kaW5nIG5vIGFkZGl0aW9uYWwgcmVxdWVzdCBzaG91bGQgYmUgbWFkZSB0byB0aGUgZGF0YXNvdXJjZVxuICAqL1xuICBwdWJsaWMgcmVxdWVzdFBlbmRpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oZmFsc2UpO1xuICAvKipcbiAgKiBJcyB0aGUgZW5kcG9pbnQgYWxpdmUgYW5kIHJldHVybnMgZGF0YSA/XG4gICovXG4gIHB1YmxpYyBpc0FsaXZlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KGZhbHNlKTtcbiAgLyoqXG4gICogRGVsaXZlcmluZyBpbnRlcm5hbCBwcm9jZXNzIGluZm9ybWF0aW9uXG4gICovXG4gIHB1YmxpYyBldmVudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAvKipcbiAgKiBmb3IgbGl2ZSBzb3VyY2VzIHRoaXMgb3B0aW9uIHdpbGwgYmUgdXNlZCB0byBzdG9wIHRoZSBwcm9jZXNzXG4gICovXG4gIHB1YmxpYyBydW5uaW5nID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IocHVibGljIGVuZHBvaW50c2VydmljZTogTmd4RW5kcG9pbnRTZXJ2aWNlLCBwcm90ZWN0ZWQgX2VuZHBvaW50OiBOZ3hFbmRQb2ludERhdGEpIHtcbiAgICB0aGlzLmVuZHBvaW50ID0gX2VuZHBvaW50O1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBuZXcgQXJyYXk8YW55PigpKTtcbiAgfVxuXG4gIC8qKlxuICAqIFJlcXVlc3RzIGRhdGEgZnJvbSBhbiBodHRwIHNvdXJjZVxuICAqIE9wdGlvbmFsbHkgY29udmVydHMgcmVsYXRpdmUgZGF0ZXMgKG5vdy0xZCkgaW50byByZWFkYWJsZSB1cmxzIGJ5IERhdGVzT3V0cHV0Rm9ybWF0XG4gICogQWRkcyB0aGUgcmVzdWx0IG9mIHRoZSByZXF1ZXN0IHRvIEJlaGF2aW9yU3ViamVjdCBkYXRhIHRoYXQgY2FuIGJlIHN1YnNjcmliZWRcbiAgKi9cbiAgcHVibGljIGFzeW5jIHJlcXVlc3REYXRhKCkge1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdEludGVybmFsKCk7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhc3luYyByZXF1ZXN0SW50ZXJuYWwoKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3RQZW5kaW5nLmdldFZhbHVlKCkpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnQoJ3JlcXVlc3RpbmcgZGF0YSBmcm9tIGVuZHBvaW50JywgdGhpcy5lbmRwb2ludCk7XG4gICAgICB0aGlzLnJlcXVlc3RQZW5kaW5nLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmNvbnZlcnREYXRlcyh0aGlzLmVuZHBvaW50LmNvbnZlcnREYXRlcyk7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoKTtcbiAgICAgIHRoaXMucmVxdWVzdFBlbmRpbmcubmV4dChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRXZlbnQoJ2EgcmVxdWVzdCBpcyBwZW5kaW5nJywgdGhpcy5lbmRwb2ludCk7XG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlcyhjb252ZXJzaW9uKSB7XG4gICAgaWYgKGNvbnZlcnNpb24pIHtcbiAgICAgIHRoaXMuZW5kcG9pbnQuZW5kUG9pbnRVcmwgPSB0aGlzLmVuZHBvaW50c2VydmljZS5jb252ZXJ0RGF0ZXNJblVSTCh0aGlzLmVuZHBvaW50LmVuZFBvaW50VXJsLCB0aGlzLmVuZHBvaW50LmNvbnZlcnREYXRlc091dHB1dEZvcm1hdCk7XG4gICAgICB0aGlzLmFkZEV2ZW50KCdjb252ZXJ0ZWQgZW5kcG9pbnR1cmwnLCB0aGlzLmVuZHBvaW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcXVlc3QoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gYXdhaXQgdGhpcy5lbmRwb2ludHNlcnZpY2UuZ2V0RGF0YTxUPih0aGlzLmVuZHBvaW50LmVuZFBvaW50VXJsLCB0aGlzLmVuZHBvaW50LnJlcXVlc3RPcHRpb25zKTtcbiAgICAgIGlmICghdGhpcy5pc0FsaXZlLmdldFZhbHVlKCkgJiYgY3VycmVudERhdGEgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmlzQWxpdmUubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnZW5kcG9pbnQgaXMgYWxpdmUnLCB0aGlzLmVuZHBvaW50KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YS5uZXh0KGN1cnJlbnREYXRhKTtcbiAgICAgIHRoaXMuYWRkRXZlbnQoJ3VwZGF0ZWQgZGF0YScsIHRoaXMuZW5kcG9pbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50KGVycm9yLCB0aGlzLmVuZHBvaW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50KGl0ZW06IGFueSwgZW5kcG9pbnRkYXRhOiBOZ3hFbmRQb2ludERhdGEpIHtcblxuICAgIHRoaXMuZXZlbnRzLm5leHQoSlNPTi5zdHJpbmdpZnkoe2V2ZW50OiBpdGVtLCBlbmRwb2ludDogZW5kcG9pbnRkYXRhfSkpO1xuICB9XG59XG4iXX0=