ngx-endpoints
Version:
A library to dynamically load data from http endpoints / urls in angular
161 lines • 12.5 kB
JavaScript
/**
* @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=