{"version":3,"file":"bravobit-bb-foundation-http.mjs","sources":["../../../projects/bb-foundation/http/src/lib/http.interfaces.ts","../../../projects/bb-foundation/http/src/lib/classes/http.config.ts","../../../projects/bb-foundation/http/src/lib/classes/http.error.ts","../../../projects/bb-foundation/http/src/lib/interceptors/base-url.interceptor.ts","../../../projects/bb-foundation/http/src/lib/interceptors/error.interceptor.ts","../../../projects/bb-foundation/http/src/lib/http.config.ts","../../../projects/bb-foundation/http/src/lib/http.module.ts","../../../projects/bb-foundation/http/src/bravobit-bb-foundation-http.ts"],"sourcesContent":["import {HttpConfig} from './classes/http.config';\nimport {InjectionToken} from '@angular/core';\n\nexport interface HttpConfigData {\n    url: HttpConfigUrl;\n    alias?: {\n        prefix?: string;\n        standard?: string;\n    };\n    disableErrorParsing?: boolean;\n}\n\nexport type HttpConfigPlatformUrl = string | { browser: string, server: string };\nexport type HttpConfigAlias = { alias: string, url: HttpConfigPlatformUrl };\nexport type HttpConfigUrl = HttpConfigPlatformUrl | HttpConfigAlias[];\n\nexport const HTTP_CONFIG = new InjectionToken<HttpConfig>('http config');\nexport const HTTP_CONFIG_DATA = new InjectionToken<HttpConfigData>('http config data');\n","import {HttpConfigAlias, HttpConfigData, HttpConfigUrl} from '../http.interfaces';\n\ndeclare let ngDevMode;\n\nexport class HttpConfig {\n\n    readonly aliases: HttpConfigAlias[];\n    readonly prefix: string;\n    readonly defaultAlias: string;\n    readonly disableErrorParsing: boolean;\n\n    constructor(data: HttpConfigData) {\n        // Get the data from the config.\n        this.prefix = data?.alias?.prefix ?? '$';\n        this.disableErrorParsing = data?.disableErrorParsing ?? false;\n\n        // Parse the aliases.\n        const standardAlias = data?.alias?.standard ?? 'api';\n        this.aliases = this.parseAliases(data?.url, standardAlias);\n\n        // Get the default alias.\n        const firstAvailableAlias = this.aliases?.[0]?.alias ?? null;\n        this.defaultAlias = `${this.prefix}${firstAvailableAlias}`;\n    }\n\n    private parseAliases = (value: HttpConfigUrl, standardAlias: string) => {\n        if (!Array.isArray(value)) {\n           value = [{alias: standardAlias, url: value}];\n        }\n\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            const stringRegex = /^[a-zA-Z]+$/;\n            for (const item of value) {\n                if (!!item?.alias && !stringRegex.test(item?.alias)) {\n                    console?.warn?.(`[HttpModule]: Invalid HTTP-alias in HttpConfig named \"${item?.alias}\"; only latin characters should be used.`);\n                }\n            }\n        }\n\n        return value;\n    };\n\n}\n","import {HttpErrorResponse} from '@angular/common/http';\n\nexport class HttpError extends HttpErrorResponse {\n\n    constructor(error: HttpErrorResponse) {\n        super(error);\n    }\n\n    get<T = any>(token: string, delimiter: string = '.') {\n        const error = this.error ?? {};\n        return (token ?? '')\n            .split(delimiter)\n            .reduce((previous, current) => previous?.[current] ? previous?.[current] : null, error) as T;\n    }\n\n    has(token: string, delimiter: string = '.') {\n        return !!this.get(token, delimiter);\n    }\n\n    includes<T = any>(token: string, value: T) {\n        const array = this.get<T[]>(token);\n        return (array ?? []).includes(value);\n    }\n\n}\n","import {HTTP_CONFIG, HttpConfigAlias, HttpConfigPlatformUrl} from '../http.interfaces';\nimport {HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {HttpConfig} from '../classes/http.config';\nimport {isPlatformServer} from '@angular/common';\n\ndeclare let ngDevMode;\n\n@Injectable()\nexport class BaseUrlInterceptor implements HttpInterceptor {\n\n    // Dependencies.\n    private readonly _config: HttpConfig = inject(HTTP_CONFIG);\n    private readonly _platformId: Object = inject(PLATFORM_ID);\n\n    // Aliases.\n    private readonly _aliases: HttpConfigAlias[] = this._config?.aliases;\n    private readonly _prefix: string = this._config?.prefix;\n    private readonly _extractRegex: RegExp = new RegExp(`\\\\${this._prefix}[a-zA-Z]+`);\n\n    intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n        const url = this.getUrlBasedOnAlias(request.url);\n        const modified = request.clone({url});\n\n        return next.handle(modified);\n    }\n\n    private getUrlBasedOnAlias(url: string) {\n        const matches = this._extractRegex.exec(url);\n        if (!matches) {\n            return url;\n        }\n\n        return matches.reduce((previous, current) => {\n            const alias = this.getAlias(current);\n            const stringAlias = this.convertUrlToString(alias?.url);\n            if (!stringAlias) {\n                return previous;\n            }\n\n            return previous.replace(current, stringAlias);\n        }, url);\n    }\n\n    private convertUrlToString(url: HttpConfigPlatformUrl) {\n        if (typeof url === 'string') {\n            return url;\n        }\n\n        return isPlatformServer(this._platformId)\n            ? url?.server ?? url?.browser ?? null\n            : url?.browser ?? null;\n    }\n\n    private getAlias(value: string) {\n        const alias = value.replace(this._prefix, '');\n        const fetched = this._aliases?.find(item => item.alias === alias) ?? null;\n        if (fetched) {\n            return fetched;\n        }\n\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n            const available = this._aliases\n                .map(item => `\\$${item?.alias}`)\n                .join(', ');\n            console?.warn?.(`[HttpModule]: Used an invalid HTTP-alias named \"${value}\", skipped parsing; Available aliases is one of (${available}).`);\n        }\n\n        return null;\n    }\n\n}\n","import {HttpErrorResponse, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {HttpConfig} from '../classes/http.config';\nimport {inject, Injectable} from '@angular/core';\nimport {HttpError} from '../classes/http.error';\nimport {HTTP_CONFIG} from '../http.interfaces';\nimport {catchError} from 'rxjs/operators';\nimport {throwError} from 'rxjs';\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n\n    // Dependencies.\n    private readonly _config: HttpConfig = inject(HTTP_CONFIG);\n\n    // State.\n    private readonly _disabled = this._config?.disableErrorParsing ?? false;\n\n    intercept(request: HttpRequest<unknown>, next: HttpHandler) {\n        return next.handle(request).pipe(\n            catchError(error => {\n                // If we have a matching http error response\n                // re-map it with our custom class (if not disabled).\n                if (!this._disabled && error instanceof HttpErrorResponse) {\n                    const parsed = new HttpError(error);\n                    return throwError(() => parsed);\n                }\n\n                // We did not match anything, just re-trow the error.\n                return throwError(() => error);\n            })\n        );\n    }\n\n}\n","import {HTTP_CONFIG, HTTP_CONFIG_DATA, HttpConfigData} from './http.interfaces';\nimport {EnvironmentProviders, makeEnvironmentProviders} from '@angular/core';\nimport {BaseUrlInterceptor} from './interceptors/base-url.interceptor';\nimport {ErrorInterceptor} from './interceptors/error.interceptor';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {HttpConfig} from './classes/http.config';\n\nexport function provideHttpConfig(config: HttpConfigData): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {provide: HTTP_CONFIG_DATA, useValue: config},\n        {provide: HTTP_CONFIG, useFactory: createHttpConfig, deps: [HTTP_CONFIG_DATA]},\n        {provide: HTTP_INTERCEPTORS, useClass: BaseUrlInterceptor, multi: true},\n        {provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}\n    ]);\n}\n\nexport function createHttpConfig(data: HttpConfigData) {\n    return new HttpConfig(data);\n}\n","import {ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core';\nimport {HttpConfigData} from './http.interfaces';\nimport {provideHttpConfig} from './http.config';\n\n@NgModule()\nexport class HttpModule {\n\n    constructor(@Optional() @SkipSelf() private _parent?: HttpModule) {\n        if (this._parent) {\n            throw new Error('HttpModule is already loaded; Import it in the core module only.');\n        }\n    }\n\n    static forRoot(config: HttpConfigData): ModuleWithProviders<HttpModule> {\n        return {\n            ngModule: HttpModule,\n            providers: [\n                provideHttpConfig(config)\n            ]\n        };\n    }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}