@kephas/angular
Version:
Provides integration capabilities with Angular.
98 lines • 10.9 kB
JavaScript
import { SingletonAppServiceContract, AppServiceContract, AppService, Priority } from '@kephas/core';
import { HttpClient, HttpHandler, HttpXhrBackend, HttpBackend, XhrFactory, HTTP_INTERCEPTORS } from '@angular/common/http';
import { Injector, Injectable } from '@angular/core';
import * as i0 from "@angular/core";
import * as i1 from "../../../public-api";
import * as i2 from "@angular/common/http";
SingletonAppServiceContract()(XhrFactory);
AppServiceContract()(HttpBackend);
AppServiceContract()(Injector);
AppServiceContract()(HttpXhrBackend);
AppService({ overridePriority: Priority.Low })(HttpXhrBackend);
// tslint:disable: max-classes-per-file
/**
* Browser implementation for an `XhrFactory`.
*
* @export
* @class BrowserXhrFactory
* @implements {XhrFactory}
*/
export class BrowserXhrFactory {
build() {
return new XMLHttpRequest();
}
}
/**
* `HttpHandler` which applies an `HttpInterceptor` to an `HttpRequest`.
*
*
*/
export class HttpInterceptorHandler {
constructor(next, interceptor) {
this.next = next;
this.interceptor = interceptor;
}
handle(req) {
return this.interceptor.intercept(req, this.next);
}
}
/**
* An injectable `HttpHandler` that applies multiple interceptors
* to a request before passing it to the given `HttpBackend`.
*
* The interceptors are loaded lazily from the injector, to allow
* interceptors to themselves inject classes depending indirectly
* on `HttpInterceptingHandler` itself.
* @see `HttpInterceptor`
*/
export class HttpInterceptingHandler {
/**
* Creates an instance of HttpInterceptingHandler.
* @param {HttpBackend} backend
* @param {Injector} injector
* @memberof HttpInterceptingHandler
*/
constructor(backend, injector) {
this.backend = backend;
this.injector = injector;
this.chain = null;
}
handle(req) {
if (this.chain === null) {
const interceptors = this.injector.get(HTTP_INTERCEPTORS, []);
this.chain = interceptors.reduceRight((next, interceptor) => new HttpInterceptorHandler(next, interceptor), this.backend);
}
return this.chain.handle(req);
}
}
HttpInterceptingHandler.ɵprov = i0.ɵɵdefineInjectable({ factory: function HttpInterceptingHandler_Factory() { return new i1.HttpInterceptingHandler(i0.ɵɵinject(i2.HttpBackend), i0.ɵɵinject(i0.INJECTOR)); }, token: i1.HttpInterceptingHandler, providedIn: "root" });
HttpInterceptingHandler.decorators = [
{ type: Injectable, args: [{ providedIn: 'root' },] }
];
HttpInterceptingHandler.ctorParameters = () => [
{ type: HttpBackend },
{ type: Injector }
];
/**
* Registry for HTTP client services.
*
* @export
* @class HttpClientAppServiceInfoRegistry
*/
export class HttpClientAppServiceInfoRegistry {
/**
* Gets the providers for the HTTP client.
*
* @returns {((StaticClassProvider | ExistingProvider)[])}
* @memberof HttpClientAppServiceInfoRegistry
*/
getHttpClientProviders() {
return [
{ provide: HttpClient, useClass: HttpClient, deps: [HttpHandler] },
{ provide: HttpHandler, useClass: HttpInterceptingHandler, deps: [HttpBackend, Injector] },
{ provide: HttpBackend, useClass: HttpXhrBackend, deps: [XhrFactory] },
{ provide: XhrFactory, useClass: BrowserXhrFactory, deps: [] },
];
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEFwcFNlcnZpY2VJbmZvUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvaHR0cC9odHRwQXBwU2VydmljZUluZm9SZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFDeEUsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFDcEQsVUFBVSxFQUEwQixpQkFBaUIsRUFDeEQsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsUUFBUSxFQUF1QixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFFMUUsMkJBQTJCLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQyxrQkFBa0IsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0Isa0JBQWtCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUUvRCx1Q0FBdUM7QUFFdkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixLQUFLO1FBQ0QsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDSjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQy9CLFlBQW9CLElBQWlCLEVBQVUsV0FBNEI7UUFBdkQsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtJQUMzRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQXFCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFFRDs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFHaEM7Ozs7O09BS0c7SUFDSCxZQUFvQixPQUFvQixFQUFVLFFBQWtCO1FBQWhELFlBQU8sR0FBUCxPQUFPLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBUjVELFVBQUssR0FBdUIsSUFBSSxDQUFDO0lBU3pDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBcUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtZQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQ2pDLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNGO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7O1lBcEJKLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQWxEVyxXQUFXO1lBSS9DLFFBQVE7O0FBcUVqQjs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQ0FBZ0M7SUFFekM7Ozs7O09BS0c7SUFDSSxzQkFBc0I7UUFDekIsT0FBTztZQUNILEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2xFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzFGLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIFNpbmdsZXRvbkFwcFNlcnZpY2VDb250cmFjdCwgQXBwU2VydmljZUNvbnRyYWN0LCBBcHBTZXJ2aWNlLCBQcmlvcml0eVxyXG59IGZyb20gJ0BrZXBoYXMvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBIdHRwQ2xpZW50LCBIdHRwSGFuZGxlciwgSHR0cFhockJhY2tlbmQsIEh0dHBCYWNrZW5kLFxyXG4gICAgWGhyRmFjdG9yeSwgSHR0cFJlcXVlc3QsIEh0dHBFdmVudCwgSFRUUF9JTlRFUkNFUFRPUlMsIEh0dHBJbnRlcmNlcHRvclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBJbmplY3RvciwgU3RhdGljQ2xhc3NQcm92aWRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuU2luZ2xldG9uQXBwU2VydmljZUNvbnRyYWN0KCkoWGhyRmFjdG9yeSk7XHJcbkFwcFNlcnZpY2VDb250cmFjdCgpKEh0dHBCYWNrZW5kKTtcclxuQXBwU2VydmljZUNvbnRyYWN0KCkoSW5qZWN0b3IpO1xyXG5BcHBTZXJ2aWNlQ29udHJhY3QoKShIdHRwWGhyQmFja2VuZCk7XHJcbkFwcFNlcnZpY2UoeyBvdmVycmlkZVByaW9yaXR5OiBQcmlvcml0eS5Mb3cgfSkoSHR0cFhockJhY2tlbmQpO1xyXG5cclxuLy8gdHNsaW50OmRpc2FibGU6IG1heC1jbGFzc2VzLXBlci1maWxlXHJcblxyXG4vKipcclxuICogQnJvd3NlciBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gYFhockZhY3RvcnlgLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjbGFzcyBCcm93c2VyWGhyRmFjdG9yeVxyXG4gKiBAaW1wbGVtZW50cyB7WGhyRmFjdG9yeX1cclxuICovXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VyWGhyRmFjdG9yeSBpbXBsZW1lbnRzIFhockZhY3Rvcnkge1xyXG4gICAgYnVpbGQoKTogWE1MSHR0cFJlcXVlc3Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGBIdHRwSGFuZGxlcmAgd2hpY2ggYXBwbGllcyBhbiBgSHR0cEludGVyY2VwdG9yYCB0byBhbiBgSHR0cFJlcXVlc3RgLlxyXG4gKlxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEh0dHBJbnRlcmNlcHRvckhhbmRsZXIgaW1wbGVtZW50cyBIdHRwSGFuZGxlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5leHQ6IEh0dHBIYW5kbGVyLCBwcml2YXRlIGludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3IpIHtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGUocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdChyZXEsIHRoaXMubmV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBpbmplY3RhYmxlIGBIdHRwSGFuZGxlcmAgdGhhdCBhcHBsaWVzIG11bHRpcGxlIGludGVyY2VwdG9yc1xyXG4gKiB0byBhIHJlcXVlc3QgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGdpdmVuIGBIdHRwQmFja2VuZGAuXHJcbiAqXHJcbiAqIFRoZSBpbnRlcmNlcHRvcnMgYXJlIGxvYWRlZCBsYXppbHkgZnJvbSB0aGUgaW5qZWN0b3IsIHRvIGFsbG93XHJcbiAqIGludGVyY2VwdG9ycyB0byB0aGVtc2VsdmVzIGluamVjdCBjbGFzc2VzIGRlcGVuZGluZyBpbmRpcmVjdGx5XHJcbiAqIG9uIGBIdHRwSW50ZXJjZXB0aW5nSGFuZGxlcmAgaXRzZWxmLlxyXG4gKiBAc2VlIGBIdHRwSW50ZXJjZXB0b3JgXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSHR0cEludGVyY2VwdGluZ0hhbmRsZXIgaW1wbGVtZW50cyBIdHRwSGFuZGxlciB7XHJcbiAgICBwcml2YXRlIGNoYWluOiBIdHRwSGFuZGxlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBIdHRwSW50ZXJjZXB0aW5nSGFuZGxlci5cclxuICAgICAqIEBwYXJhbSB7SHR0cEJhY2tlbmR9IGJhY2tlbmRcclxuICAgICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXHJcbiAgICAgKiBAbWVtYmVyb2YgSHR0cEludGVyY2VwdGluZ0hhbmRsZXJcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZW5kOiBIdHRwQmFja2VuZCwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGUocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoYWluID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IHRoaXMuaW5qZWN0b3IuZ2V0KEhUVFBfSU5URVJDRVBUT1JTLCBbXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhaW4gPSBpbnRlcmNlcHRvcnMucmVkdWNlUmlnaHQoXHJcbiAgICAgICAgICAgICAgICAobmV4dCwgaW50ZXJjZXB0b3IpID0+IG5ldyBIdHRwSW50ZXJjZXB0b3JIYW5kbGVyKG5leHQsIGludGVyY2VwdG9yKSwgdGhpcy5iYWNrZW5kKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKHJlcSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RyeSBmb3IgSFRUUCBjbGllbnQgc2VydmljZXMuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEh0dHBDbGllbnRBcHBTZXJ2aWNlSW5mb1JlZ2lzdHJ5XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudEFwcFNlcnZpY2VJbmZvUmVnaXN0cnkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJvdmlkZXJzIGZvciB0aGUgSFRUUCBjbGllbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgeygoU3RhdGljQ2xhc3NQcm92aWRlciB8IEV4aXN0aW5nUHJvdmlkZXIpW10pfVxyXG4gICAgICogQG1lbWJlcm9mIEh0dHBDbGllbnRBcHBTZXJ2aWNlSW5mb1JlZ2lzdHJ5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRIdHRwQ2xpZW50UHJvdmlkZXJzKCk6IChTdGF0aWNDbGFzc1Byb3ZpZGVyKVtdIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7IHByb3ZpZGU6IEh0dHBDbGllbnQsIHVzZUNsYXNzOiBIdHRwQ2xpZW50LCBkZXBzOiBbSHR0cEhhbmRsZXJdIH0sXHJcbiAgICAgICAgICAgIHsgcHJvdmlkZTogSHR0cEhhbmRsZXIsIHVzZUNsYXNzOiBIdHRwSW50ZXJjZXB0aW5nSGFuZGxlciwgZGVwczogW0h0dHBCYWNrZW5kLCBJbmplY3Rvcl0gfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiBIdHRwQmFja2VuZCwgdXNlQ2xhc3M6IEh0dHBYaHJCYWNrZW5kLCBkZXBzOiBbWGhyRmFjdG9yeV0gfSxcclxuICAgICAgICAgICAgeyBwcm92aWRlOiBYaHJGYWN0b3J5LCB1c2VDbGFzczogQnJvd3NlclhockZhY3RvcnksIGRlcHM6IFtdIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxufVxyXG4iXX0=