@elite.framework/ng.core 2.0.18 → 2.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"elite.framework-ng.core-services.mjs","sources":["../tmp-esm2022/services/lib/rest.service.js","../tmp-esm2022/services/lib/base.service.js","../tmp-esm2022/services/lib/generic.service.js","../tmp-esm2022/services/lib/ssr-cookie.service.js","../tmp-esm2022/services/lib/SwalService.service.js","../tmp-esm2022/services/lib/permissions.service.js","../tmp-esm2022/services/lib/permissions-guard.service.js","../tmp-esm2022/services/lib/logger.interface.js","../tmp-esm2022/services/lib/logger.service.js","../tmp-esm2022/services/lib/id-parser.service.js","../tmp-esm2022/services/lib/query-parser.js","../tmp-esm2022/services/elite.framework-ng.core-services.js"],"sourcesContent":["import { HttpClient, HttpParams } from \"@angular/common/http\";\nimport { Injectable, Inject, inject } from \"@angular/core\";\nimport { ENVIRONMENT, CORE_OPTIONS } from \"@elite.framework/ng.core/tokens\";\nimport { throwError, catchError } from \"rxjs\";\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common/http\";\nexport class RestService {\n options;\n http;\n environment = inject(ENVIRONMENT);\n constructor(options, http) {\n this.options = options;\n this.http = http;\n }\n getApiFromStore(apiName) {\n return this.environment.apiUrl;\n }\n handleError(err) {\n // this.httpErrorReporter.reportError(err);\n return throwError(() => err);\n }\n request(request, config, api) {\n // debugger\n config = config || {};\n api = api || this.getApiFromStore(config.apiName);\n const { method, params, ...options } = request;\n const { observe = \"body\" /* Rest.Observe.Body */, skipHandleError } = config;\n const url = this.removeDuplicateSlashes(api + request.url);\n const httpClient = this.getHttpClient(config.skipAddingHeader ?? false);\n return httpClient\n .request(method, url, {\n observe,\n ...(params && {\n params: this.getParams(params, config.httpParamEncoder),\n }),\n ...options,\n })\n .pipe(catchError(err => (skipHandleError ? throwError(() => err) : this.handleError(err))));\n }\n getHttpClient(isExternal) {\n return /* isExternal ? this.externalHttp : */ this.http;\n }\n getParams(params, encoder) {\n const filteredParams = Object.entries(params).reduce((acc, [key, value]) => {\n if (isUndefinedOrEmptyString(value))\n return acc;\n if (value === null && !this.options.sendNullsAsQueryParam)\n return acc;\n acc[key] = value;\n return acc;\n }, {});\n return encoder\n ? new HttpParams({ encoder, fromObject: filteredParams })\n : new HttpParams({ fromObject: filteredParams });\n }\n removeDuplicateSlashes(url) {\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, deps: [{ token: CORE_OPTIONS }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [CORE_OPTIONS]\n }] }, { type: i1.HttpClient }] });\nexport function isUndefinedOrEmptyString(value) {\n return value === undefined || value === '';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBYyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFLMUQsTUFBTSxPQUFPLFdBQVc7SUFHWTtJQUN0QjtJQUhKLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsWUFDa0MsT0FBYSxFQUNuQyxJQUFnQjtRQURNLFlBQU8sR0FBUCxPQUFPLENBQU07UUFDbkMsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUd4QixDQUFDO0lBRUssZUFBZSxDQUFDLE9BQTJCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLDJDQUEyQztRQUMzQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxDQUNMLE9BQXlDLEVBQ3pDLE1BQW9CLEVBQ3BCLEdBQVk7UUFFWixXQUFXO1FBQ1gsTUFBTSxHQUFHLE1BQU0sSUFBSyxFQUFrQixDQUFDO1FBQ3ZDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDL0MsTUFBTSxFQUFFLE9BQU8saUNBQW9CLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVELE1BQU0sVUFBVSxHQUFlLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sVUFBVTthQUNkLE9BQU8sQ0FBSSxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLE9BQU87WUFDUCxHQUFHLENBQUMsTUFBTSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7YUFDeEQsQ0FBQztZQUNGLEdBQUcsT0FBTztTQUNKLENBQUM7YUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ08sYUFBYSxDQUFDLFVBQW1CO1FBQ3ZDLE9BQU8sc0NBQXNDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQW1CLEVBQUUsT0FBNEI7UUFDakUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUN0RSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxPQUFPO1lBQ1osQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUN6RCxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsR0FBVztRQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7dUdBM0RVLFdBQVcsa0JBR1osWUFBWTsyR0FIWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUlJLE1BQU07MkJBQUMsWUFBWTs7QUE0RHhCLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFjO0lBQ3JELE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb290LCBSZXN0IH0gZnJvbSBcIkBlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHNcIjtcbmltcG9ydCB7IEVOVklST05NRU5ULCBDT1JFX09QVElPTlMgfSBmcm9tIFwiQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3Rva2Vuc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgY2F0Y2hFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSB7XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KENPUkVfT1BUSU9OUykgcHJvdGVjdGVkIG9wdGlvbnM6IFJvb3QsXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgLy8gcHJvdGVjdGVkIGh0dHBFcnJvclJlcG9ydGVyOiBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UsXG4gICkgeyB9XG5cbiAgcHJvdGVjdGVkIGdldEFwaUZyb21TdG9yZShhcGlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwaVVybDtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yKGVycik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgfVxuXG4gIHJlcXVlc3Q8VCwgUj4oXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8VD4gfCBSZXN0LlJlcXVlc3Q8VD4sXG4gICAgY29uZmlnPzogUmVzdC5Db25maWcsXG4gICAgYXBpPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCAoe30gYXMgUmVzdC5Db25maWcpO1xuICAgIGFwaSA9IGFwaSB8fCB0aGlzLmdldEFwaUZyb21TdG9yZShjb25maWcuYXBpTmFtZSk7XG4gICAgY29uc3QgeyBtZXRob2QsIHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmVxdWVzdDtcbiAgICBjb25zdCB7IG9ic2VydmUgPSBSZXN0Lk9ic2VydmUuQm9keSwgc2tpcEhhbmRsZUVycm9yIH0gPSBjb25maWc7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKCBhcGkgKyByZXF1ZXN0LnVybCk7XG5cbiAgICBjb25zdCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gdGhpcy5nZXRIdHRwQ2xpZW50KGNvbmZpZy5za2lwQWRkaW5nSGVhZGVyID8/IGZhbHNlKTtcbiAgICByZXR1cm4gaHR0cENsaWVudFxuICAgICAgLnJlcXVlc3Q8Uj4obWV0aG9kLCB1cmwsIHtcbiAgICAgICAgb2JzZXJ2ZSxcbiAgICAgICAgLi4uKHBhcmFtcyAmJiB7XG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldFBhcmFtcyhwYXJhbXMsIGNvbmZpZy5odHRwUGFyYW1FbmNvZGVyKSxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9IGFzIGFueSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IChza2lwSGFuZGxlRXJyb3IgPyB0aHJvd0Vycm9yKCgpID0+IGVycikgOiB0aGlzLmhhbmRsZUVycm9yKGVycikpKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRIdHRwQ2xpZW50KGlzRXh0ZXJuYWw6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gLyogaXNFeHRlcm5hbCA/IHRoaXMuZXh0ZXJuYWxIdHRwIDogKi8gdGhpcy5odHRwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXMocGFyYW1zOiBSZXN0LlBhcmFtcywgZW5jb2Rlcj86IEh0dHBQYXJhbWV0ZXJDb2RlYyk6IEh0dHBQYXJhbXMge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlKSkgcmV0dXJuIGFjYztcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAhdGhpcy5vcHRpb25zLnNlbmROdWxsc0FzUXVlcnlQYXJhbSkgcmV0dXJuIGFjYztcbiAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gICAgcmV0dXJuIGVuY29kZXJcbiAgICAgID8gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyLCBmcm9tT2JqZWN0OiBmaWx0ZXJlZFBhcmFtcyB9KVxuICAgICAgOiBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IGZpbHRlcmVkUGFyYW1zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJyk7XG4gIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class BaseService {\n restService;\n apiName = '';\n moduleName = '';\n constructor(restService) {\n this.restService = restService;\n }\n getList = (input, endpoint) => {\n const params = Object.keys(input).reduce((acc, key) => {\n acc[key] = input[key];\n return acc;\n }, {});\n const url = endpoint ? endpoint : `/${this.moduleName}/${this.apiName}`;\n return this.restService.request({\n method: 'GET',\n url: url,\n params: params,\n }, { apiName: this.apiName })\n .pipe(map(response => response));\n };\n get = (id) => this.restService.request({\n method: 'GET',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n create = (input) => this.restService.request({\n method: 'POST',\n url: this.buildUrl(),\n body: input,\n }, { apiName: this.apiName });\n update = (id, input) => this.restService.request({\n method: 'PUT',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n delete = (id) => this.restService.request({\n method: 'DELETE',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n buildUrl(id) {\n if (!id)\n return `/${this.moduleName}/${this.apiName}`;\n if (Array.isArray(id)) {\n // Array-based composite key: ['123', '456'] => /123/456\n return `/${this.moduleName}/${this.apiName}/${id.join('/')}`;\n }\n if (typeof id === 'object') {\n // Object-based composite key: {id:123, biId:456} => /123/456\n return `/${this.moduleName}/${this.apiName}/${Object.values(id).join('/')}`;\n }\n // Single id\n return `/${this.moduleName}/${this.apiName}/${id}`;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03QyxNQUFNLE9BQU8sV0FBVztJQUdIO0lBRm5CLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFlBQW1CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUc3QyxPQUFPLEdBQUcsQ0FBQyxLQUFTLEVBQUUsUUFBaUIsRUFBRyxFQUFFO1FBRTFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFTixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUE0QjtZQUN6RCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLE1BQU07U0FDZixFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM1QixJQUFJLENBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQzFCLENBQUM7SUFDSixDQUFDLENBQUM7SUFDSixHQUFHLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEVBQUUsQ0FDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQVc7UUFDakMsTUFBTSxFQUFFLEtBQUs7UUFDYixHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7S0FDdkIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBVztRQUNqQyxNQUFNLEVBQUUsTUFBTTtRQUNkLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ3BCLElBQUksRUFBRSxLQUFLO0tBQ1osRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEtBQVUsRUFBRSxFQUFFLENBQzlFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFXO1FBQ2pDLE1BQU0sRUFBRSxLQUFLO1FBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3RCLElBQUksRUFBRSxLQUFLO0tBQ1osRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUVoQyxNQUFNLEdBQUcsQ0FBQyxFQUFzRCxFQUFFLEVBQUUsQ0FDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQVk7UUFDbEMsTUFBTSxFQUFFLFFBQVE7UUFDaEIsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0tBQ3ZCLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFHeEIsUUFBUSxDQUFDLEVBQXVEO1FBQ3RFLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXRELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3RCLHdEQUF3RDtZQUN4RCxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQiw2REFBNkQ7WUFDN0QsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlFLENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUNyRCxDQUFDO3VHQWxFWSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGVkUmVzdWx0IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBCYXNlU2VydmljZSB7XG4gIGFwaU5hbWUgPSAnJztcbiAgbW9kdWxlTmFtZSA9ICcnO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7fVxuXG5cbiAgICBnZXRMaXN0ID0gKGlucHV0OmFueSwgZW5kcG9pbnQ/OiBzdHJpbmcgKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5rZXlzKGlucHV0KS5yZWR1Y2UoKGFjYzphbnksIGtleSkgPT4ge1xuICAgICAgICBhY2Nba2V5XSA9IGlucHV0W2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG5cbiAgICAgICBjb25zdCB1cmwgPSBlbmRwb2ludCA/IGVuZHBvaW50IDogYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9YDtcblxuICAgICAgcmV0dXJuIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIFBhZ2luYXRlZFJlc3VsdDxhbnk+Pih7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgKTtcbiAgICB9O1xuICBnZXQgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBhbnk+KHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xuXG5jcmVhdGUgPSAoaW5wdXQ6IGFueSkgPT5cbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiB0aGlzLmJ1aWxkVXJsKCksXG4gICAgYm9keTogaW5wdXQsXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xuXG51cGRhdGUgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbnB1dDogYW55KSA9PlxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBhbnk+KHtcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXG4gICAgYm9keTogaW5wdXQsXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xuXG5kZWxldGUgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCB2b2lkPih7XG4gICAgbWV0aG9kOiAnREVMRVRFJyxcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxuICB9LCB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9KTtcblxuXG5wcml2YXRlIGJ1aWxkVXJsKGlkPzogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4pOiBzdHJpbmcge1xuICBpZiAoIWlkKSByZXR1cm4gYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9YDtcblxuICBpZiAoQXJyYXkuaXNBcnJheShpZCkpIHtcbiAgICAvLyBBcnJheS1iYXNlZCBjb21wb3NpdGUga2V5OiBbJzEyMycsICc0NTYnXSA9PiAvMTIzLzQ1NlxuICAgIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtpZC5qb2luKCcvJyl9YDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaWQgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2JqZWN0LWJhc2VkIGNvbXBvc2l0ZSBrZXk6IHtpZDoxMjMsIGJpSWQ6NDU2fSA9PiAvMTIzLzQ1NlxuICAgIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtPYmplY3QudmFsdWVzKGlkKS5qb2luKCcvJyl9YDtcbiAgfVxuXG4gIC8vIFNpbmdsZSBpZFxuICByZXR1cm4gYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9LyR7aWR9YDtcbn1cblxufVxuIl19","// src/app/services/generic.service.ts\nimport { HttpParams } from '@angular/common/http';\n/**\n * GenericService<T, K>:\n * - T = نوع الكائن (Model)\n * - K = نوع المفتاح الأساسي (ID)، افتراضي number\n *\n * يحتوي على جميع دوال الـ CRUD القياسية للتوريث في الخدمات المتخصصة.\n */\nexport class GenericService {\n http;\n constructor(http) {\n this.http = http;\n }\n /**\n * جلب كل السجلات\n */\n getAll() {\n // ملاحظة: يمكن إضافة معالج أخطاء مركزي هنا أو عبر Interceptor\n return this.http.get(this.baseUrl);\n }\n /**\n * جلب سجل واحد بناءً على المعرف\n */\n getById(id) {\n // ملاحظة: تأكد أن الـ endpoint يدعم GET برقم المعرف\n return this.http.get(`${this.baseUrl}/${id}`);\n }\n /**\n * إنشاء سجل جديد\n */\n create(item) {\n // ملاحظة: استخدم Partial<T> للسماح ببعض الحقول الاختيارية\n return this.http.post(this.baseUrl, item);\n }\n /**\n * تحديث سجل موجود\n */\n update(id, item) {\n // ملاحظة: هنا نُعيد Observable<void> لأن API قد لا تُرجع الجسم نفسه\n return this.http.put(`${this.baseUrl}`, item);\n }\n /**\n * حذف سجل\n */\n delete(id) {\n // ملاحظة: يُفضّل استخدام Confirm قبل الحذف في الواجهة\n return this.http.delete(`${this.baseUrl}/${id}`);\n }\n /** endpoint قابل للتخصيص — يمكن للفرع override–ها */\n getPageUrl() {\n return this.baseUrl;\n }\n /**\n * جلب صفحة من البيانات مع دعم الفلاتر والفرز\n * @param pageIndex صفر-based\n * @param pageSize عدد السجلات\n * @param filters كائن Partial<T> أو Record<string,any>\n * @param sort نص الفرز، مثلاً \"eiNa:desc\"\n */\n getPage(pageIndex, pageSize, filters, sort) {\n // debugger\n let params = new HttpParams()\n .set('pageIndex', pageIndex.toString())\n .set('pageSize', pageSize.toString());\n if (filters) {\n Object.entries(filters).forEach(([key, val]) => {\n if (val != null && val !== '') {\n params = params.set(key, val.toString());\n }\n });\n }\n if (sort) {\n params = params.set('sort', sort);\n }\n // return this.http\n // .get<T[]>(this.getPageUrl(), { params, observe: 'response' })\n // .pipe(\n // map((resp: HttpResponse<T[]>) => ({\n // items: resp.body || [],\n // totalCount: Number(resp.headers.get('X-Total-Count')) || resp.body?.length || 0\n // }))\n // );\n return this.http.get(this.getPageUrl(), { params });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvZ2VuZXJpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBSzVFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQU9aO0lBQXRCLFlBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTTtRQUNKLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxPQUFPLENBQUMsRUFBSztRQUNYLG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUVyQiwwREFBMEQ7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUVGLE1BQU0sQ0FBQyxFQUFLLEVBQUUsSUFBZ0I7UUFDN0Isb0VBQW9FO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQUs7UUFDVixzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSUYscURBQXFEO0lBQzFDLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDSCxPQUFPLENBQ0wsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsT0FBNkIsRUFDN0IsSUFBYTtRQUViLFdBQVc7UUFDWCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUMxQixHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixrRUFBa0U7UUFDbEUsV0FBVztRQUNYLDBDQUEwQztRQUMxQyxnQ0FBZ0M7UUFDaEMsd0ZBQXdGO1FBQ3hGLFVBQVU7UUFDVixPQUFPO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixFQUFFLE1BQU0sRUFBRSxDQUNYLENBQUM7SUFDRixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvYXBwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZS50c1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXN1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuLyoqXG4gKiBHZW5lcmljU2VydmljZTxULCBLPjpcbiAqICAtIFQgPSDZhtmI2Lkg2KfZhNmD2KfYptmGIChNb2RlbClcbiAqICAtIEsgPSDZhtmI2Lkg2KfZhNmF2YHYqtin2K0g2KfZhNij2LPYp9iz2YogKElEKdiMINin2YHYqtix2KfYttmKIG51bWJlclxuICpcbiAqINmK2K3YqtmI2Yog2LnZhNmJINis2YXZiti5INiv2YjYp9mEINin2YTZgCBDUlVEINin2YTZgtmK2KfYs9mK2Kkg2YTZhNiq2YjYsdmK2Ksg2YHZiiDYp9mE2K7Yr9mF2KfYqiDYp9mE2YXYqtiu2LXYtdipLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCwgSyA9IG51bWJlcj4gaW1wbGVtZW50cyBDcnVkU2VydmljZTxULCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiDinI/vuI8g2LnZhNmJINmD2YQg2K7Yr9mF2Kkg2YHYsdi52YrYqSDYo9mGINiq2LnYsdmR2YEg2YfYsNinOlxuICAgKiDZhdir2KfZhDogcHJvdGVjdGVkIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vYXBpL2pvYnR5cHMnO1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJhc2VVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvKipcbiAgICog2KzZhNioINmD2YQg2KfZhNiz2KzZhNin2KpcbiAgICovXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YrZhdmD2YYg2KXYttin2YHYqSDZhdi52KfZhNisINij2K7Yt9in2KEg2YXYsdmD2LLZiiDZh9mG2Kcg2KPZiCDYudio2LEgSW50ZXJjZXB0b3JcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUW10+KHRoaXMuYmFzZVVybCk7XG4gIH1cblxuICAvKipcbiAgICog2KzZhNioINiz2KzZhCDZiNin2K3YryDYqNmG2KfYodmLINi52YTZiSDYp9mE2YXYudix2YFcbiAgICovXG5cbiAgZ2V0QnlJZChpZDogSyk6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2KrYo9mD2K8g2KPZhiDYp9mE2YAgZW5kcG9pbnQg2YrYr9i52YUgR0VUINio2LHZgtmFINin2YTZhdi52LHZgVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYpdmG2LTYp9ihINiz2KzZhCDYrNiv2YrYr1xuICAgKi9cbiAgY3JlYXRlKGl0ZW06IFBhcnRpYWw8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIC8vINmF2YTYp9it2LjYqTog2KfYs9iq2K7Yr9mFIFBhcnRpYWw8VD4g2YTZhNiz2YXYp9itINio2KjYudi2INin2YTYrdmC2YjZhCDYp9mE2KfYrtiq2YrYp9ix2YrYqVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJhc2VVcmwsIGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqINiq2K3Yr9mK2Ksg2LPYrNmEINmF2YjYrNmI2K9cbiAgICovXG5cbiAgIHVwZGF0ZShpZDogSywgaXRlbTogUGFydGlhbDxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YfZhtinINmG2Y/YudmK2K8gT2JzZXJ2YWJsZTx2b2lkPiDZhNij2YYgQVBJINmC2K8g2YTYpyDYqtmP2LHYrNi5INin2YTYrNiz2YUg2YbZgdiz2YdcbiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oYCR7dGhpcy5iYXNlVXJsfWAsIGl0ZW0pO1xuICB9XG4gIC8qKlxuICAgKiDYrdiw2YEg2LPYrNmEXG4gICAqL1xuICBkZWxldGUoaWQ6IEspOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyDZhdmE2KfYrdi42Kk6INmK2Y/Zgdi22ZHZhCDYp9iz2KrYrtiv2KfZhSBDb25maXJtINmC2KjZhCDYp9mE2K3YsNmBINmB2Yog2KfZhNmI2KfYrNmH2KlcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCk7XG4gIH1cblxuXG5cbiAvKiogZW5kcG9pbnQg2YLYp9io2YQg2YTZhNiq2K7YtdmK2LUg4oCUINmK2YXZg9mGINmE2YTZgdix2Lkgb3ZlcnJpZGXigJPZh9inICovXG4gIHByb3RlY3RlZCBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gICAvKipcbiAgICog2KzZhNioINi12YHYrdipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDZhdi5INiv2LnZhSDYp9mE2YHZhNin2KrYsSDZiNin2YTZgdix2LJcbiAgICogQHBhcmFtIHBhZ2VJbmRleCDYtdmB2LEtYmFzZWRcbiAgICogQHBhcmFtIHBhZ2VTaXplINi52K/YryDYp9mE2LPYrNmE2KfYqlxuICAgKiBAcGFyYW0gZmlsdGVycyDZg9in2KbZhiBQYXJ0aWFsPFQ+INij2YggUmVjb3JkPHN0cmluZyxhbnk+XG4gICAqIEBwYXJhbSBzb3J0INmG2LUg2KfZhNmB2LHYstiMINmF2KvZhNin2YsgXCJlaU5hOmRlc2NcIlxuICAgKi9cbiAgZ2V0UGFnZShcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHNvcnQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdwYWdlSW5kZXgnLCBwYWdlSW5kZXgudG9TdHJpbmcoKSlcbiAgICAgIC5zZXQoJ3BhZ2VTaXplJywgIHBhZ2VTaXplLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc29ydCcsIHNvcnQpO1xuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5nZXQ8VFtdPih0aGlzLmdldFBhZ2VVcmwoKSwgeyBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBtYXAoKHJlc3A6IEh0dHBSZXNwb25zZTxUW10+KSA9PiAoe1xuICAgIC8vICAgICAgIGl0ZW1zOiByZXNwLmJvZHkgfHwgW10sXG4gICAgLy8gICAgICAgdG90YWxDb3VudDogTnVtYmVyKHJlc3AuaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSkgfHwgcmVzcC5ib2R5Py5sZW5ndGggfHwgMFxuICAgIC8vICAgICB9KSlcbiAgICAvLyAgICk7XG4gICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnaW5hdGVkUmVzdWx0PFQ+PihcbiAgICB0aGlzLmdldFBhZ2VVcmwoKSxcbiAgICB7IHBhcmFtcyB9XG4gICk7XG4gIH1cblxuXG59XG4iXX0=","import { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n// Define the `Request` token\nexport const REQUEST = new InjectionToken('REQUEST');\nexport class SsrCookieService {\n document;\n platformId;\n request;\n documentIsAccessible;\n static initialUrl = '';\n constructor(document, \n // Get the `PLATFORM_ID` so we can check if we're in a browser.\n platformId, request) {\n this.document = document;\n this.platformId = platformId;\n this.request = request;\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n SsrCookieService.initialUrl = this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookie Regular Expression\n *\n * @param name Cookie name\n * @returns property RegExp\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static getCookieRegExp(name) {\n const escapedName = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n /**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @param encodedURIComponent A value representing an encoded URI component.\n *\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static safeDecodeURIComponent(encodedURIComponent) {\n try {\n return decodeURIComponent(encodedURIComponent);\n }\n catch {\n // probably it is not uri encoded. return as is\n return encodedURIComponent;\n }\n }\n /**\n * Return `true` if {@link Document} is accessible, otherwise return `false`\n *\n * @param name Cookie name\n * @returns boolean - whether cookie with specified name exists\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n check(name) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n return regExp.test((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n }\n isDocumentIsAccessible() {\n return this.documentIsAccessible;\n }\n get url() {\n return this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookies by name\n *\n * @param name Cookie name\n * @returns property value\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n get(name) {\n if (this.check(name)) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n const result = regExp.exec((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n return result[1] ? SsrCookieService.safeDecodeURIComponent(result[1]) : '';\n }\n else {\n return '';\n }\n }\n /**\n * Get all cookies in JSON format\n *\n * @returns all the cookies in json\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n getAll() {\n const cookies = {};\n const cookieString = this.documentIsAccessible ? this.document?.cookie : this.request?.headers.cookie;\n if (cookieString && cookieString !== '') {\n cookieString.split(';').forEach((currentCookie) => {\n const [cookieName, cookieValue] = currentCookie.split('=');\n cookies[SsrCookieService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] = SsrCookieService.safeDecodeURIComponent(cookieValue);\n });\n }\n return cookies;\n }\n set(name, value, expiresOrOptions, path, domain, secure, sameSite, partitioned) {\n if (!this.documentIsAccessible) {\n return;\n }\n if (typeof expiresOrOptions === 'number' || expiresOrOptions instanceof Date || path || domain || secure || sameSite) {\n const optionsBody = {\n expires: expiresOrOptions,\n path,\n domain,\n secure,\n sameSite: sameSite ? sameSite : 'Lax',\n partitioned,\n };\n this.set(name, value, optionsBody);\n return;\n }\n let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n const options = expiresOrOptions ? expiresOrOptions : {};\n if (options.expires) {\n if (typeof options.expires === 'number') {\n const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n }\n else {\n cookieString += 'expires=' + options.expires.toUTCString() + ';';\n }\n }\n if (options.path) {\n cookieString += 'path=' + options.path + ';';\n }\n if (options.domain) {\n cookieString += 'domain=' + options.domain + ';';\n }\n if (options.secure === false && options.sameSite === 'None') {\n options.secure = true;\n console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);\n }\n if (options.secure) {\n cookieString += 'secure;';\n }\n if (!options.sameSite) {\n options.sameSite = 'Lax';\n }\n cookieString += 'sameSite=' + options.sameSite + ';';\n if (options.partitioned) {\n cookieString += 'Partitioned;';\n }\n this.document.cookie = cookieString;\n }\n /**\n * Delete cookie by name\n *\n * @param name Cookie name\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Cookie secure flag\n * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n delete(name, path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n }\n /**\n * Delete all cookies\n *\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Is the Cookie secure\n * @param sameSite Is the cookie same site\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n deleteAll(path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const cookies = this.getAll();\n for (const cookieName in cookies) {\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain, secure, sameSite);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [REQUEST]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNvb2tpZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc3NyLWNvb2tpZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBVSxTQUFTLENBQUMsQ0FBQztBQUs5RCxNQUFNLE9BQU8sZ0JBQWdCO0lBS0M7SUFFRztJQUNRO0lBUHRCLG9CQUFvQixDQUFVO0lBQy9DLE1BQU0sQ0FBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXhCLFlBQzRCLFFBQWtCO0lBQzVDLCtEQUErRDtJQUNsQyxVQUFlLEVBQ1AsT0FBZ0I7UUFIM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRXJELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FB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Q0FBQztJQUNILENBQUM7dUdBaFNVLGdCQUFnQixrQkFLakIsUUFBUSxhQUVSLFdBQVcsYUFDQyxPQUFPOzJHQVJsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gRGVmaW5lIHRoZSBgUmVxdWVzdGAgdG9rZW5cbmV4cG9ydCBjb25zdCBSRVFVRVNUID0gbmV3IEluamVjdGlvblRva2VuPFJlcXVlc3Q+KCdSRVFVRVNUJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTc3JDb29raWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudElzQWNjZXNzaWJsZTogYm9vbGVhbjtcbiAgc3RhdGljICBpbml0aWFsVXJsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgLy8gR2V0IHRoZSBgUExBVEZPUk1fSURgIHNvIHdlIGNhbiBjaGVjayBpZiB3ZSdyZSBpbiBhIGJyb3dzZXIuXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRVFVRVNUKSBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3RcbiAgKSB7XG4gICAgdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgU3NyQ29va2llU2VydmljZS5pbml0aWFsVXJsID0gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWUgUmVndWxhciBFeHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IFJlZ0V4cFxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtcXFtcXF1cXHtcXH1cXChcXClcXHxcXD1cXDtcXCtcXD9cXCxcXC5cXCpcXF5cXCRdKS9naSwgJ1xcXFwkMScpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol4nICsgZXNjYXBlZE5hbWUgKyAnfDtcXFxccyonICsgZXNjYXBlZE5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZW5jb2RlZCB2ZXJzaW9uIG9mIGFuIGVuY29kZWQgY29tcG9uZW50IG9mIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFVSSUNvbXBvbmVudCBBIHZhbHVlIHJlcHJlc2VudGluZyBhbiBlbmNvZGVkIFVSSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB1bmVuY29kZWQgdmVyc2lvbiBvZiBhbiBlbmNvZGVkIGNvbXBvbmVudCBvZiBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc3RhdGljIHNhZmVEZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSUNvbXBvbmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByb2JhYmx5IGl0IGlzIG5vdCB1cmkgZW5jb2RlZC4gcmV0dXJuIGFzIGlzXG4gICAgICByZXR1cm4gZW5jb2RlZFVSSUNvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgRG9jdW1lbnR9IGlzIGFjY2Vzc2libGUsIG90aGVyd2lzZSByZXR1cm4gYGZhbHNlYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gd2hldGhlciBjb29raWUgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgY2hlY2sobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCByZWdFeHA6IFJlZ0V4cCA9IFNzckNvb2tpZVNlcnZpY2UuZ2V0Q29va2llUmVnRXhwKG5hbWUpO1xuICAgIHJldHVybiByZWdFeHAudGVzdCgodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llICA6IHRoaXMucmVxdWVzdD8uaGVhZGVycy5jb29raWUpID8/ICcnKTtcbiAgfVxuICBpc0RvY3VtZW50SXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlIDtcbiAgfVxuIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWVzIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2hlY2sobmFtZSkpIHtcbiAgICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gU3NyQ29va2llU2VydmljZS5nZXRDb29raWVSZWdFeHAobmFtZSk7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSB8YW55PSByZWdFeHAuZXhlYygodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llIDogdGhpcy5yZXF1ZXN0Py5oZWFkZXJzLmNvb2tpZSkgPz8gJycpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0WzFdID8gU3NyQ29va2llU2VydmljZS5zYWZlRGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNvb2tpZXMgaW4gSlNPTiBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMgYWxsIHRoZSBjb29raWVzIGluIGpzb25cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBjb29raWVTdHJpbmc6IGFueSA9IHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPyB0aGlzLmRvY3VtZW50Py5jb29raWUgOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnMuY29va2llO1xuXG4gICAgaWYgKGNvb2tpZVN0cmluZyAmJiBjb29raWVTdHJpbmcgIT09ICcnKSB7XG4gICAgICBjb29raWVTdHJpbmcuc3BsaXQoJzsnKS5mb3JFYWNoKChjdXJyZW50Q29va2llOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBbY29va2llTmFtZSwgY29va2llVmFsdWVdID0gY3VycmVudENvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgICBjb29raWVzW1NzckNvb2tpZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVOYW1lLnJlcGxhY2UoL14gLywgJycpKV0gPSBTc3JDb29raWVTZXJ2aWNlLnNhZmVEZWNvZGVVUklDb21wb25lbnQoY29va2llVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvb2tpZSBiYXNlZCBvbiBwcm92aWRlZCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAgICAgQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlICAgIENvb2tpZSB2YWx1ZVxuICAgKiBAcGFyYW0gZXhwaXJlcyAgTnVtYmVyIG9mIGRheXMgdW50aWwgdGhlIGNvb2tpZXMgZXhwaXJlcyBvciBhbiBhY3R1YWwgYERhdGVgXG4gICAqIEBwYXJhbSBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluICAgQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlICAgU2VjdXJlIGZsYWdcbiAgICogQHBhcmFtIHNhbWVTaXRlIE9XQVNQIHNhbWUgc2l0ZSB0b2tlbiBgTGF4YCwgYE5vbmVgLCBvciBgU3RyaWN0YC4gRGVmYXVsdHMgdG8gYExheGBcbiAgICogQHBhcmFtIHBhcnRpdGlvbmVkIFBhcnRpdGlvbmVkIGZsYWdcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlLFxuICAgIHBhdGg/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHNlY3VyZT86IGJvb2xlYW4sXG4gICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnLFxuICAgIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIENvb2tpZSdzIHBhcmFtZXRlcnM6XG4gICAqIDxwcmU+XG4gICAqIGV4cGlyZXMgIE51bWJlciBvZiBkYXlzIHVudGlsIHRoZSBjb29raWVzIGV4cGlyZXMgb3IgYW4gYWN0dWFsIGBEYXRlYFxuICAgKiBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIHNlY3VyZSBDb29raWUgc2VjdXJlIGZsYWdcbiAgICogc2FtZVNpdGUgT1dBU1Agc2FtZSBzaXRlIHRva2VuIGBMYXhgLCBgTm9uZWAsIG9yIGBTdHJpY3RgLiBEZWZhdWx0cyB0byBgTGF4YFxuICAgKiA8L3ByZT5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAgICBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgIEJvZHkgd2l0aCBjb29raWUncyBwYXJhbXNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBleHBpcmVzPzogbnVtYmVyIHwgRGF0ZTtcbiAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICBkb21haW4/OiBzdHJpbmc7XG4gICAgICBzZWN1cmU/OiBib29sZWFuO1xuICAgICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnO1xuICAgICAgcGFydGl0aW9uZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZDtcblxuICBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlc09yT3B0aW9ucz86IG51bWJlciB8IERhdGUgfCBhbnksXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgc2VjdXJlPzogYm9vbGVhbixcbiAgICBzYW1lU2l0ZT86ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcsXG4gICAgcGFydGl0aW9uZWQ/OiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwaXJlc09yT3B0aW9ucyA9PT0gJ251bWJlcicgfHwgZXhwaXJlc09yT3B0aW9ucyBpbnN0YW5jZW9mIERhdGUgfHwgcGF0aCB8fCBkb21haW4gfHwgc2VjdXJlIHx8IHNhbWVTaXRlKSB7XG4gICAgICBjb25zdCBvcHRpb25zQm9keSA9IHtcbiAgICAgICAgZXhwaXJlczogZXhwaXJlc09yT3B0aW9ucyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBzZWN1cmUsXG4gICAgICAgIHNhbWVTaXRlOiBzYW1lU2l0ZSA/IHNhbWVTaXRlIDogJ0xheCcsXG4gICAgICAgIHBhcnRpdGlvbmVkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnNCb2R5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29va2llU3RyaW5nOiBzdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJzsnO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4cGlyZXNPck9wdGlvbnMgPyBleHBpcmVzT3JPcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5leHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGF0ZUV4cGlyZXM6IERhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG9wdGlvbnMuZXhwaXJlcyAqIDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgZGF0ZUV4cGlyZXMudG9VVENTdHJpbmcoKSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucGF0aCkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdwYXRoPScgKyBvcHRpb25zLnBhdGggKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICBjb29raWVTdHJpbmcgKz0gJ2RvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlID09PSBmYWxzZSAmJiBvcHRpb25zLnNhbWVTaXRlID09PSAnTm9uZScpIHtcbiAgICAgIG9wdGlvbnMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtuZ3gtY29va2llLXNlcnZpY2VdIENvb2tpZSAke25hbWV9IHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUuYCArXG4gICAgICAgICAgYE1vcmUgZGV0YWlscyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZXJtZWlzdGVyL25neC1jb29raWUtc2VydmljZS9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTU5NzcyMDEzMGBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlY3VyZSkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdzZWN1cmU7JztcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuc2FtZVNpdGUpIHtcbiAgICAgIG9wdGlvbnMuc2FtZVNpdGUgPSAnTGF4JztcbiAgICB9XG5cbiAgICBjb29raWVTdHJpbmcgKz0gJ3NhbWVTaXRlPScgKyBvcHRpb25zLnNhbWVTaXRlICsgJzsnO1xuXG4gICAgaWYgKG9wdGlvbnMucGFydGl0aW9uZWQpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSAnUGFydGl0aW9uZWQ7JztcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY29va2llIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIENvb2tpZSBzZWN1cmUgZmxhZ1xuICAgKiBAcGFyYW0gc2FtZVNpdGUgQ29va2llIHNhbWVTaXRlIGZsYWcgLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvU2V0LUNvb2tpZS9TYW1lU2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGUobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcsIHNlY3VyZT86IGJvb2xlYW4sIHNhbWVTaXRlOiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnID0gJ0xheCcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZSgnVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQnKTtcbiAgICB0aGlzLnNldChuYW1lLCAnJywgeyBleHBpcmVzOiBleHBpcmVzRGF0ZSwgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgY29va2llc1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIElzIHRoZSBDb29raWUgc2VjdXJlXG4gICAqIEBwYXJhbSBzYW1lU2l0ZSBJcyB0aGUgY29va2llIHNhbWUgc2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nLCBzZWN1cmU/OiBib29sZWFuLCBzYW1lU2l0ZTogJ0xheCcgfCAnTm9uZScgfCAnU3RyaWN0JyA9ICdMYXgnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29va2llczogYW55ID0gdGhpcy5nZXRBbGwoKTtcblxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBpbiBjb29raWVzKSB7XG4gICAgICBpZiAoY29va2llcy5oYXNPd25Qcm9wZXJ0eShjb29raWVOYW1lKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZVNpdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport Swal from 'sweetalert2';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ngx-translate/core\";\nexport class SwalService {\n translate;\n defaultClass = {\n container: 'swal2-container'\n };\n constructor(translate) {\n this.translate = translate;\n }\n t(key) {\n return this.translate.instant(key);\n }\n /** رسالة تأكيد */\n confirm(title = this.t('Confirm.Title'), text = this.t('Confirm.Text'), confirmButtonText = this.t('Confirm.Yes'), cancelButtonText = this.t('Confirm.Cancel')) {\n return Swal.fire({\n icon: 'warning',\n title,\n text,\n showCancelButton: true,\n confirmButtonText,\n cancelButtonText,\n customClass: this.defaultClass\n });\n }\n /** رسالة نجاح */\n success(title, text, timer = 2000) {\n return Swal.fire({\n icon: 'success',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n }\n /** رسالة خطأ */\n error(title, text, footer) {\n return Swal.fire({\n icon: 'error',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n footer: footer ? this.t(footer) : undefined,\n customClass: this.defaultClass\n });\n }\n /** رسالة معلومات */\n info(title, text) {\n return Swal.fire({\n icon: 'info',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n customClass: this.defaultClass\n });\n }\n /** أي خيارات مخصصة */\n alert(options) {\n const translated = {\n ...options,\n title: options.title ? this.t(options.title) : undefined,\n text: options.text ? this.t(options.text) : undefined,\n footer: options.footer ? this.t(options.footer) : undefined,\n customClass: this.defaultClass\n };\n return Swal.fire(translated);\n }\n /** Toast */\n toast(title, icon = 'info', position = 'top-end', timer = 3000) {\n const Toast = Swal.mixin({\n toast: true,\n position,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n Toast.fire({ icon, title: this.t(title) });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.TranslateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhbFNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL1N3YWxTZXJ2aWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLElBSU4sTUFBTSxhQUFhLENBQUM7OztBQUdyQixNQUFNLE9BQU8sV0FBVztJQUtGO0lBSlosWUFBWSxHQUFHO1FBQ3JCLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQztJQUVGLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUcsQ0FBQztJQUUzQyxDQUFDLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUNMLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDN0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJB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O0lBQzdDLENBQUM7dUdBdEdVLFdBQVc7MkdBQVgsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBTd2FsLCB7XG4gIFN3ZWV0QWxlcnRPcHRpb25zLFxuICBTd2VldEFsZXJ0UmVzdWx0LFxuICBTd2VldEFsZXJ0SWNvblxufSBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3dhbFNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRDbGFzcyA9IHtcbiAgICBjb250YWluZXI6ICdzd2FsMi1jb250YWluZXInXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHJpdmF0ZSB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICB9XG5cbiAgLyoqINix2LPYp9mE2Kkg2KrYo9mD2YrYryAqL1xuICBjb25maXJtKFxuICAgIHRpdGxlID0gdGhpcy50KCdDb25maXJtLlRpdGxlJyksXG4gICAgdGV4dCA9IHRoaXMudCgnQ29uZmlybS5UZXh0JyksXG4gICAgY29uZmlybUJ1dHRvblRleHQgPSB0aGlzLnQoJ0NvbmZpcm0uWWVzJyksXG4gICAgY2FuY2VsQnV0dG9uVGV4dCA9IHRoaXMudCgnQ29uZmlybS5DYW5jZWwnKVxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICd3YXJuaW5nJyxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgICBjdXN0b21DbGFzczogdGhpcy5kZWZhdWx0Q2xhc3NcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDYsdiz2KfZhNipINmG2KzYp9itICovXG4gIHN1Y2Nlc3MoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpbWVyID0gMjAwMFxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDYrti32KMgKi9cbiAgZXJyb3IoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGZvb3Rlcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICB0aXRsZTogdGhpcy50KHRpdGxlKSxcbiAgICAgIHRleHQ6IHRleHQgPyB0aGlzLnQodGV4dCkgOiB1bmRlZmluZWQsXG4gICAgICBmb290ZXI6IGZvb3RlciA/IHRoaXMudChmb290ZXIpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDZhdi52YTZiNmF2KfYqiAqL1xuICBpbmZvKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdpbmZvJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbUNsYXNzOiB0aGlzLmRlZmF1bHRDbGFzc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqINij2Yog2K7Zitin2LHYp9iqINmF2K7Ytdi12KkgKi9cbiAgYWxlcnQoXG4gICAgb3B0aW9uczogU3dlZXRBbGVydE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTd2VldEFsZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlZDogU3dlZXRBbGVydE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPyB0aGlzLnQob3B0aW9ucy50aXRsZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgdGV4dDogb3B0aW9ucy50ZXh0ID8gdGhpcy50KG9wdGlvbnMudGV4dCBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgZm9vdGVyOiBvcHRpb25zLmZvb3RlciA/IHRoaXMudChvcHRpb25zLmZvb3RlciBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfTtcbiAgICByZXR1cm4gU3dhbC5maXJlKHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgLyoqIFRvYXN0ICovXG4gIHRvYXN0KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgaWNvbjogU3dlZXRBbGVydEljb24gPSAnaW5mbycsXG4gICAgcG9zaXRpb246IFN3ZWV0QWxlcnRPcHRpb25zWydwb3NpdGlvbiddID0gJ3RvcC1lbmQnLFxuICAgIHRpbWVyID0gMzAwMFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBUb2FzdCA9IFN3YWwubWl4aW4oe1xuICAgICAgdG9hc3Q6IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gICAgVG9hc3QuZmlyZSh7IGljb24sIHRpdGxlOiB0aGlzLnQodGl0bGUpIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class PermissionsService {\n _permissions$ = new BehaviorSubject(new Set());\n // Load permissions (e.g., from API or token claims)\n setPermissions(permissions) {\n this._permissions$.next(new Set(permissions));\n }\n getPermissions() {\n return Array.from(this._permissions$.value);\n }\n // Synchronous check\n isGranted(permissionName) {\n return this._permissions$.value.has(permissionName);\n }\n // Async check (optional if needed for guards or effects)\n isGrantedAsync(permissionName) {\n return new Promise(resolve => {\n resolve(this.isGranted(permissionName));\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFcEUsb0RBQW9EO0lBQ3BELGNBQWMsQ0FBQyxXQUFxQjtRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixTQUFTLENBQUMsY0FBc0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxjQUFjLENBQUMsY0FBc0I7UUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0F0QlUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9wZXJtaXNzaW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xyXG5cclxuICAvLyBMb2FkIHBlcm1pc3Npb25zIChlLmcuLCBmcm9tIEFQSSBvciB0b2tlbiBjbGFpbXMpXHJcbiAgc2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLl9wZXJtaXNzaW9ucyQubmV4dChuZXcgU2V0KHBlcm1pc3Npb25zKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9wZXJtaXNzaW9ucyQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gU3luY2hyb25vdXMgY2hlY2tcclxuICBpc0dyYW50ZWQocGVybWlzc2lvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zJC52YWx1ZS5oYXMocGVybWlzc2lvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXN5bmMgY2hlY2sgKG9wdGlvbmFsIGlmIG5lZWRlZCBmb3IgZ3VhcmRzIG9yIGVmZmVjdHMpXHJcbiAgaXNHcmFudGVkQXN5bmMocGVybWlzc2lvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICByZXNvbHZlKHRoaXMuaXNHcmFudGVkKHBlcm1pc3Npb25OYW1lKSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19","import { inject, Injectable } from '@angular/core';\nimport { Router, RouterStateSnapshot } from '@angular/router';\nimport { PermissionsService } from './permissions.service';\nimport { DEFAULT_REDIRECT_KEY } from '@elite.framework/ng.core/models';\nimport { isFunction, isPlainObject, transformStringToArray } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./permissions.service\";\nimport * as i2 from \"@angular/router\";\nexport const ngxPermissionsGuard = (route, state) => {\n const guard = inject(NgxPermissionsGuard);\n if (state instanceof RouterStateSnapshot) {\n return guard.hasPermissions(route, state);\n }\n return guard.hasPermissions(route);\n};\nexport class NgxPermissionsGuard {\n permissions;\n router;\n constructor(permissions, router) {\n this.permissions = permissions;\n this.router = router;\n }\n canActivate(route, state) {\n return this.hasPermissions(route, state);\n }\n canActivateChild(route, state) {\n return this.hasPermissions(route, state);\n }\n canLoad(route) {\n return this.hasPermissions(route);\n }\n canMatch(route) {\n return this.hasPermissions(route);\n }\n async hasPermissions(route, state) {\n const data = route.data?.['permissions'];\n const only = [];\n const except = [];\n if (data?.only) {\n if (isFunction(data.only)) {\n const result = data.only(route, state);\n only.push(...transformStringToArray(result));\n }\n else {\n only.push(...transformStringToArray(data.only));\n }\n }\n if (data?.except) {\n if (isFunction(data.except)) {\n const result = data.except(route, state);\n except.push(...transformStringToArray(result));\n }\n else {\n except.push(...transformStringToArray(data.except));\n }\n }\n const permissions = {\n only,\n except,\n redirectTo: data?.redirectTo\n };\n // --- rest of the guard logic ---\n // EXCEPT check\n if (permissions.except?.length) {\n for (const perm of permissions.except) {\n if (await this.permissions.isGrantedAsync(perm)) {\n this.handleRedirect(permissions, perm, route, state);\n return false;\n }\n }\n }\n // ONLY check\n if (permissions.only?.length) {\n for (const perm of permissions.only) {\n if (await this.permissions.isGrantedAsync(perm)) {\n return true;\n }\n }\n this.handleRedirect(permissions, permissions.only[0], route, state);\n return false;\n }\n return true;\n }\n handleRedirect(permissions, failedPermission, route, state) {\n const redirectTo = permissions.redirectTo;\n if (!redirectTo)\n return;\n // If redirectTo is a function\n const resolvedRedirect = isFunction(redirectTo)\n ? redirectTo(failedPermission, route, state)\n : redirectTo;\n if (typeof resolvedRedirect === 'string') {\n this.router.navigate([resolvedRedirect]); // wrap string in array\n }\n else if (Array.isArray(resolvedRedirect)) {\n this.router.navigate(resolvedRedirect); // array is fine\n }\n else if (isPlainObject(resolvedRedirect)) {\n // Object: check for failedPermission key first\n const target = resolvedRedirect[failedPermission] ?? resolvedRedirect[DEFAULT_REDIRECT_KEY];\n if (target) {\n if (typeof target === 'string') {\n this.router.navigate([target]);\n }\n else if (Array.isArray(target)) {\n this.router.navigate(target);\n }\n else if (isFunction(target)) {\n this.router.navigate([target(failedPermission, route, state)]);\n }\n }\n }\n else {\n console.warn('Unknown redirect type', resolvedRedirect);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, deps: [{ token: i1.PermissionsService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.PermissionsService }, { type: i2.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLWd1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQU1MLE1BQU0sRUFDTixtQkFBbUIsRUFFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQXdFLE1BQU0saUNBQWlDLENBQUM7QUFDN0ksT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQVFuRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBb0QsQ0FDbEYsS0FBcUMsRUFDckMsS0FBeUMsRUFDekMsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUdGLE1BQU0sT0FBTyxtQkFBbUI7SUFFcEI7SUFDQTtJQUZWLFlBQ1UsV0FBK0IsRUFDL0IsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNuRSxPQUFPLElBQUks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akMsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzt1R0FySFksbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuTWF0Y2hGbixcclxuICBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBVcmxTZWdtZW50XHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vcGVybWlzc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfUkVESVJFQ1RfS0VZLCBFeGNlcHRGbiwgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhLCBPbmx5Rm4sIFJlZGlyZWN0VG8sIFJlZGlyZWN0VG9GbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1BsYWluT2JqZWN0LCB0cmFuc2Zvcm1TdHJpbmdUb0FycmF5IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmd4UGVybWlzc2lvbnNEYXRhIHtcclxuICBvbmx5Pzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgZXhjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgcmVkaXJlY3RUbz86IFJlZGlyZWN0VG8gfCBSZWRpcmVjdFRvRm4gfCBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZ3hQZXJtaXNzaW9uc0d1YXJkOiBDYW5BY3RpdmF0ZUZuIHwgQ2FuQWN0aXZhdGVDaGlsZEZuIHwgQ2FuTWF0Y2hGbiA9IChcclxuICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IFJvdXRlLFxyXG4gIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90IHwgVXJsU2VnbWVudFtdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGd1YXJkID0gaW5qZWN0KE5neFBlcm1pc3Npb25zR3VhcmQpO1xyXG4gIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgIHJldHVybiBndWFyZC5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuICByZXR1cm4gZ3VhcmQuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG59O1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE5neFBlcm1pc3Npb25zR3VhcmQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge31cclxuXHJcbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKHJvdXRlLCBzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5Mb2FkKHJvdXRlOiBSb3V0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuTWF0Y2gocm91dGU6IFJvdXRlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSk7XHJcbiAgfVxyXG5cclxuYXN5bmMgaGFzUGVybWlzc2lvbnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgY29uc3QgZGF0YSA9IHJvdXRlLmRhdGE/LlsncGVybWlzc2lvbnMnXSBhcyBOZ3hQZXJtaXNzaW9uc1JvdXRlckRhdGEgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3Qgb25seTogc3RyaW5nW10gPSBbXTtcclxuICBjb25zdCBleGNlcHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGlmIChkYXRhPy5vbmx5KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbjxPbmx5Rm4+KGRhdGEub25seSkpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5vbmx5KHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgIG9ubHkucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KHJlc3VsdCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb25seS5wdXNoKC4uLnRyYW5zZm9ybVN0cmluZ1RvQXJyYXkoZGF0YS5vbmx5KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoZGF0YT8uZXhjZXB0KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbjxFeGNlcHRGbj4oZGF0YS5leGNlcHQpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuZXhjZXB0KHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgIGV4Y2VwdC5wdXNoKC4uLnRyYW5zZm9ybVN0cmluZ1RvQXJyYXkocmVzdWx0KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGNlcHQucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KGRhdGEuZXhjZXB0KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBwZXJtaXNzaW9uczogTmd4UGVybWlzc2lvbnNEYXRhID0ge1xyXG4gICAgb25seSxcclxuICAgIGV4Y2VwdCxcclxuICAgIHJlZGlyZWN0VG86IGRhdGE/LnJlZGlyZWN0VG9cclxuICB9O1xyXG5cclxuICAvLyAtLS0gcmVzdCBvZiB0aGUgZ3VhcmQgbG9naWMgLS0tXHJcbiAgLy8gRVhDRVBUIGNoZWNrXHJcbiAgaWYgKHBlcm1pc3Npb25zLmV4Y2VwdD8ubGVuZ3RoKSB7XHJcbiAgICBmb3IgKGNvbnN0IHBlcm0gb2YgcGVybWlzc2lvbnMuZXhjZXB0KSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLnBlcm1pc3Npb25zLmlzR3JhbnRlZEFzeW5jKHBlcm0pKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVSZWRpcmVjdChwZXJtaXNzaW9ucywgcGVybSwgcm91dGUsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE9OTFkgY2hlY2tcclxuICBpZiAocGVybWlzc2lvbnMub25seT8ubGVuZ3RoKSB7XHJcbiAgICBmb3IgKGNvbnN0IHBlcm0gb2YgcGVybWlzc2lvbnMub25seSkge1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5pc0dyYW50ZWRBc3luYyhwZXJtKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZVJlZGlyZWN0KHBlcm1pc3Npb25zLCBwZXJtaXNzaW9ucy5vbmx5WzBdLCByb3V0ZSwgc3RhdGUpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcblxyXG5wcml2YXRlIGhhbmRsZVJlZGlyZWN0KFxyXG4gIHBlcm1pc3Npb25zOiBOZ3hQZXJtaXNzaW9uc0RhdGEsXHJcbiAgZmFpbGVkUGVybWlzc2lvbjogc3RyaW5nLFxyXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgUm91dGUsXHJcbiAgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90XHJcbikge1xyXG4gIGNvbnN0IHJlZGlyZWN0VG8gPSBwZXJtaXNzaW9ucy5yZWRpcmVjdFRvO1xyXG5cclxuICBpZiAoIXJlZGlyZWN0VG8pIHJldHVybjtcclxuXHJcbiAgLy8gSWYgcmVkaXJlY3RUbyBpcyBhIGZ1bmN0aW9uXHJcbiAgY29uc3QgcmVzb2x2ZWRSZWRpcmVjdCA9XHJcbiAgICBpc0Z1bmN0aW9uPFJlZGlyZWN0VG9Gbj4ocmVkaXJlY3RUbylcclxuICAgICAgPyByZWRpcmVjdFRvKGZhaWxlZFBlcm1pc3Npb24sIHJvdXRlLCBzdGF0ZSlcclxuICAgICAgOiByZWRpcmVjdFRvO1xyXG5cclxuICBpZiAodHlwZW9mIHJlc29sdmVkUmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcmVzb2x2ZWRSZWRpcmVjdF0pOyAvLyB3cmFwIHN0cmluZyBpbiBhcnJheVxyXG4gIH1cclxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkUmVkaXJlY3QpKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyZXNvbHZlZFJlZGlyZWN0KTsgLy8gYXJyYXkgaXMgZmluZVxyXG4gIH1cclxuICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHJlc29sdmVkUmVkaXJlY3QpKSB7XHJcbiAgICAvLyBPYmplY3Q6IGNoZWNrIGZvciBmYWlsZWRQZXJtaXNzaW9uIGtleSBmaXJzdFxyXG4gICAgY29uc3QgdGFyZ2V0ID1cclxuICAgICAgcmVzb2x2ZWRSZWRpcmVjdFtmYWlsZWRQZXJtaXNzaW9uXSA/PyByZXNvbHZlZFJlZGlyZWN0W0RFRkFVTFRfUkVESVJFQ1RfS0VZXTtcclxuXHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0YXJnZXRdKTtcclxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZSh0YXJnZXQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb248UmVkaXJlY3RUb0ZuPih0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldChmYWlsZWRQZXJtaXNzaW9uLCByb3V0ZSwgc3RhdGUpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gcmVkaXJlY3QgdHlwZScsIHJlc29sdmVkUmVkaXJlY3QpO1xyXG4gIH1cclxufVxyXG5cclxufVxyXG4iXX0=","// logger.interface.ts\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"OFF\"] = 4] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2xvZ2dlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIseUNBQVMsQ0FBQTtJQUNULHVDQUFRLENBQUE7SUFDUix1Q0FBUSxDQUFBO0lBQ1IseUNBQVMsQ0FBQTtJQUNULHFDQUFPLENBQUE7QUFDVCxDQUFDLEVBTlcsUUFBUSxLQUFSLFFBQVEsUUFNbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuaW50ZXJmYWNlLnRzXHJcbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcclxuICBERUJVRyA9IDAsXHJcbiAgSU5GTyA9IDEsXHJcbiAgV0FSTiA9IDIsXHJcbiAgRVJST1IgPSAzLFxyXG4gIE9GRiA9IDRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyU2VydmljZSB7XHJcbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIHNldExvZ0xldmVsKGxldmVsOiBMb2dMZXZlbCk6IHZvaWQ7XHJcbn1cclxuIl19","// logger.service.ts\nimport { Injectable, Inject, Optional } from '@angular/core';\nimport { LogLevel } from './logger.interface';\nimport { ENVIRONMENT } from '@elite.framework/ng.core/tokens';\nimport * as i0 from \"@angular/core\";\n// Remove the separate LoggerConfig interface since we're using EnvironmentConfig\n// and extend EnvironmentConfig to include logger-specific properties\nexport class LoggerService {\n environment;\n level = LogLevel.DEBUG;\n enableConsole = true;\n prefix = '[App]';\n timestamp = true;\n constructor(environment) {\n this.environment = environment;\n // Use environment configuration if provided\n if (this.environment) {\n this.configureFromEnvironment(this.environment);\n }\n // Fallback: In production, default to WARN level\n if (typeof window !== 'undefined' && window.location.hostname !== 'localhost') {\n this.level = LogLevel.WARN;\n this.enableConsole = false;\n }\n }\n configureFromEnvironment(env) {\n // Map string log levels from environment to LogLevel enum\n this.level = this.mapLogLevel(env.logLevel);\n // Use production flag to determine console logging\n this.enableConsole = !env.production;\n // Set prefix from environment if available\n this.prefix = `[${env['appName'] || 'App'}]`;\n // Enable timestamp in development, disable in production for performance\n this.timestamp = !env.production;\n }\n mapLogLevel(level) {\n switch (level) {\n case 'debug': return LogLevel.DEBUG;\n case 'info': return LogLevel.INFO;\n case 'warn': return LogLevel.WARN;\n case 'error': return LogLevel.ERROR;\n case 'off': return LogLevel.OFF;\n default: return LogLevel.WARN;\n }\n }\n debug(message, ...args) {\n if (this.shouldLog(LogLevel.DEBUG)) {\n this.log('DEBUG', message, args, 'color: blue');\n }\n }\n info(message, ...args) {\n if (this.shouldLog(LogLevel.INFO)) {\n this.log('INFO', message, args, 'color: green');\n }\n }\n warn(message, ...args) {\n if (this.shouldLog(LogLevel.WARN)) {\n this.log('WARN', message, args, 'color: orange');\n }\n }\n error(message, ...args) {\n if (this.shouldLog(LogLevel.ERROR)) {\n this.log('ERROR', message, args, 'color: red');\n // Send to external services only for errors in production\n if (this.environment?.production) {\n this.sendToExternalService('ERROR', message, args);\n }\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n shouldLog(level) {\n return level >= this.level && this.enableConsole;\n }\n log(level, message, args, style) {\n if (!this.enableConsole)\n return;\n const timestamp = this.timestamp ? new Date().toISOString() : '';\n const formattedPrefix = this.prefix ? `${this.prefix}` : '';\n const logMessage = `${timestamp} ${formattedPrefix} [${level}] ${message}`;\n if (args.length > 0) {\n console.log(`%c${logMessage}`, style, ...args);\n }\n else {\n console.log(`%c${logMessage}`, style);\n }\n }\n sendToExternalService(level, message, args) {\n // Integrate with external logging services from environment\n try {\n const sentryUrl = this.environment?.externalServices?.['sentry'];\n const logRocketUrl = this.environment?.externalServices?.['logRocket'];\n // Example: Send to configured external services\n if (sentryUrl) {\n // this.sendToSentry(level, message, args);\n }\n if (logRocketUrl) {\n // this.sendToLogRocket(level, message, args);\n }\n // Send to backend if apiUrl is available\n if (this.environment?.apiUrl) {\n // this.http.post(`${this.environment.apiUrl}/logs`, {\n // level, message, args, timestamp: new Date()\n // }).subscribe();\n }\n }\n catch (error) {\n // Don't use this.error here to avoid infinite loops\n console.error('Failed to send log to external service:', error);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, deps: [{ token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ENVIRONMENT]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFakYsaUZBQWlGO0FBQ2pGLHFFQUFxRTtBQUtyRSxNQUFNLE9BQU8sYUFBYTtJQU02QjtJQUw3QyxLQUFLLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNqQyxhQUFhLEdBQVksSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBVyxPQUFPLENBQUM7SUFDekIsU0FBUyxHQUFZLElBQUksQ0FBQztJQUVsQyxZQUFxRCxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbEYsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5RSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxHQUFzQjtRQUNyRCwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLEtBQUss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QkFBa0I7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysb0RBQW9EO1lBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7dUdBekhVLGFBQWEsa0JBTVEsV0FBVzsyR0FOaEMsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuc2VydmljZS50c1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElMb2dnZXJTZXJ2aWNlLCBMb2dMZXZlbCB9IGZyb20gJy4vbG9nZ2VyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudENvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xyXG5cclxuLy8gUmVtb3ZlIHRoZSBzZXBhcmF0ZSBMb2dnZXJDb25maWcgaW50ZXJmYWNlIHNpbmNlIHdlJ3JlIHVzaW5nIEVudmlyb25tZW50Q29uZmlnXHJcbi8vIGFuZCBleHRlbmQgRW52aXJvbm1lbnRDb25maWcgdG8gaW5jbHVkZSBsb2dnZXItc3BlY2lmaWMgcHJvcGVydGllc1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIElMb2dnZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLkRFQlVHO1xyXG4gIHByaXZhdGUgZW5hYmxlQ29uc29sZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdbQXBwXSc7XHJcbiAgcHJpdmF0ZSB0aW1lc3RhbXA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50PzogRW52aXJvbm1lbnRDb25maWcpIHtcclxuICAgIC8vIFVzZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogSW4gcHJvZHVjdGlvbiwgZGVmYXVsdCB0byBXQVJOIGxldmVsXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSAnbG9jYWxob3N0Jykge1xyXG4gICAgICB0aGlzLmxldmVsID0gTG9nTGV2ZWwuV0FSTjtcclxuICAgICAgdGhpcy5lbmFibGVDb25zb2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudChlbnY6IEVudmlyb25tZW50Q29uZmlnKTogdm9pZCB7XHJcbiAgICAvLyBNYXAgc3RyaW5nIGxvZyBsZXZlbHMgZnJvbSBlbnZpcm9ubWVudCB0byBMb2dMZXZlbCBlbnVtXHJcbiAgICB0aGlzLmxldmVsID0gdGhpcy5tYXBMb2dMZXZlbChlbnYubG9nTGV2ZWwpO1xyXG5cclxuICAgIC8vIFVzZSBwcm9kdWN0aW9uIGZsYWcgdG8gZGV0ZXJtaW5lIGNvbnNvbGUgbG9nZ2luZ1xyXG4gICAgdGhpcy5lbmFibGVDb25zb2xlID0gIWVudi5wcm9kdWN0aW9uO1xyXG5cclxuICAgIC8vIFNldCBwcmVmaXggZnJvbSBlbnZpcm9ubWVudCBpZiBhdmFpbGFibGVcclxuICAgIHRoaXMucHJlZml4ID0gYFske2VudlsnYXBwTmFtZSddIHx8ICdBcHAnfV1gO1xyXG5cclxuICAgIC8vIEVuYWJsZSB0aW1lc3RhbXAgaW4gZGV2ZWxvcG1lbnQsIGRpc2FibGUgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZm9ybWFuY2VcclxuICAgIHRoaXMudGltZXN0YW1wID0gIWVudi5wcm9kdWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBMb2dMZXZlbChsZXZlbDogc3RyaW5nKTogTG9nTGV2ZWwge1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICBjYXNlICdkZWJ1Zyc6IHJldHVybiBMb2dMZXZlbC5ERUJVRztcclxuICAgICAgY2FzZSAnaW5mbyc6IHJldHVybiBMb2dMZXZlbC5JTkZPO1xyXG4gICAgICBjYXNlICd3YXJuJzogcmV0dXJuIExvZ0xldmVsLldBUk47XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuIExvZ0xldmVsLkVSUk9SO1xyXG4gICAgICBjYXNlICdvZmYnOiByZXR1cm4gTG9nTGV2ZWwuT0ZGO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gTG9nTGV2ZWwuV0FSTjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5ERUJVRykpIHtcclxuICAgICAgdGhpcy5sb2coJ0RFQlVHJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBibHVlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5JTkZPKSkge1xyXG4gICAgICB0aGlzLmxvZygnSU5GTycsIG1lc3NhZ2UsIGFyZ3MsICdjb2xvcjogZ3JlZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nKExvZ0xldmVsLldBUk4pKSB7XHJcbiAgICAgIHRoaXMubG9nKCdXQVJOJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBvcmFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5FUlJPUikpIHtcclxuICAgICAgdGhpcy5sb2coJ0VSUk9SJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiByZWQnKTtcclxuXHJcbiAgICAgIC8vIFNlbmQgdG8gZXh0ZXJuYWwgc2VydmljZXMgb25seSBmb3IgZXJyb3JzIGluIHByb2R1Y3Rpb25cclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNlbmRUb0V4dGVybmFsU2VydmljZSgnRVJST1InLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TG9nTGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsZXZlbCA+PSB0aGlzLmxldmVsICYmIHRoaXMuZW5hYmxlQ29uc29sZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYXJnczogYW55W10sIHN0eWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVDb25zb2xlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy50aW1lc3RhbXAgPyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgOiAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlZFByZWZpeCA9IHRoaXMucHJlZml4ID8gYCR7dGhpcy5wcmVmaXh9YCA6ICcnO1xyXG5cclxuICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgJHt0aW1lc3RhbXB9ICR7Zm9ybWF0dGVkUHJlZml4fSBbJHtsZXZlbH1dICR7bWVzc2FnZX1gO1xyXG5cclxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYCVjJHtsb2dNZXNzYWdlfWAsIHN0eWxlLCAuLi5hcmdzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGAlYyR7bG9nTWVzc2FnZX1gLCBzdHlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRUb0V4dGVybmFsU2VydmljZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyBJbnRlZ3JhdGUgd2l0aCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2VzIGZyb20gZW52aXJvbm1lbnRcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbnRyeVVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/Llsnc2VudHJ5J107XHJcbiAgICAgIGNvbnN0IGxvZ1JvY2tldFVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/LlsnbG9nUm9ja2V0J107XHJcblxyXG4gICAgICAvLyBFeGFtcGxlOiBTZW5kIHRvIGNvbmZpZ3VyZWQgZXh0ZXJuYWwgc2VydmljZXNcclxuICAgICAgaWYgKHNlbnRyeVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvU2VudHJ5KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvZ1JvY2tldFVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvTG9nUm9ja2V0KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2VuZCB0byBiYWNrZW5kIGlmIGFwaVVybCBpcyBhdmFpbGFibGVcclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFwaVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVXJsfS9sb2dzYCwge1xyXG4gICAgICAgIC8vICAgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3MsIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgICAgIC8vIH0pLnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBEb24ndCB1c2UgdGhpcy5lcnJvciBoZXJlIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZW5kIGxvZyB0byBleHRlcm5hbCBzZXJ2aWNlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class IdParserService {\n /**\n * Extract IDs from a model based on comma-separated field names.\n * Example: \"id,biId\" => [model.id, model.biId]\n */\n parseIds(model, idField) {\n if (!idField)\n return null;\n const fields = idField.split(',').map(f => f.trim()).filter(Boolean);\n if (fields.length === 1) {\n return model[fields[0]];\n }\n return fields.map(f => model[f]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtcGFyc2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9pZC1wYXJzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWU7UUFDbEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7dUdBZlUsZUFBZTsyR0FBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIElkUGFyc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBJRHMgZnJvbSBhIG1vZGVsIGJhc2VkIG9uIGNvbW1hLXNlcGFyYXRlZCBmaWVsZCBuYW1lcy5cclxuICAgKiBFeGFtcGxlOiBcImlkLGJpSWRcIiA9PiBbbW9kZWwuaWQsIG1vZGVsLmJpSWRdXHJcbiAgICovXHJcbiAgcGFyc2VJZHMobW9kZWw6IGFueSwgaWRGaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IGFueSB7XHJcbiAgICBpZiAoIWlkRmllbGQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZpZWxkcyA9IGlkRmllbGQuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbFtmaWVsZHNbMF1dO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gbW9kZWxbZl0pO1xyXG4gIH1cclxufVxyXG4iXX0=","export class QueryParser {\n static parse(queryString) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: []\n };\n if (!queryString)\n return params;\n const queryParts = queryString.split('&');\n for (const part of queryParts) {\n if (part.startsWith('$filter=')) {\n this.parseFilter(part.substring('$filter='.length), params);\n }\n else if (part.startsWith('$orderby=')) {\n this.parseOrderBy(part.substring('$orderby='.length), params);\n }\n else if (part.startsWith('$groupby=')) {\n params.groupBy = part.substring('$groupby='.length).split(',').map(f => f.trim());\n }\n else if (part.startsWith('$top=')) {\n params.top = Number(part.substring('$top='.length));\n }\n else if (part.startsWith('$skip=')) {\n params.skip = Number(part.substring('$skip='.length));\n }\n else if (part.startsWith('$expand=')) {\n params.expand = part.substring('$expand='.length).split(',').map(f => f.trim());\n }\n }\n return params;\n }\n static toString(params) {\n const parts = [];\n if (params.filters?.length) {\n const filterStr = this.buildFilterString(params.filters);\n parts.push(`$filter=${encodeURIComponent(filterStr)}`);\n }\n if (params.orderBy?.length) {\n const orderByStr = params.orderBy.map(o => `${o.field} ${o.direction}`).join(',');\n parts.push(`$orderby=${encodeURIComponent(orderByStr)}`);\n }\n if (params.groupBy?.length) {\n parts.push(`$groupby=${encodeURIComponent(params.groupBy.join(','))}`);\n }\n if (params.top !== undefined) {\n parts.push(`$top=${params.top}`);\n }\n if (params.skip !== undefined) {\n parts.push(`$skip=${params.skip}`);\n }\n if (params.expand?.length) {\n parts.push(`$expand=${encodeURIComponent(params.expand.join(','))}`);\n }\n return parts.join('&');\n }\n static buildFilterString(filters) {\n return filters.map((group, index) => {\n const groupStr = group.conditions\n .map(condition => {\n let val = condition.value;\n if (typeof val === 'string') {\n val = `'${val.replace(/'/g, \"''\")}'`;\n }\n else if (typeof val === 'boolean') {\n val = val ? 'true' : 'false';\n }\n return `${condition.field} ${condition.operator} ${val}`;\n })\n .join(` ${group.logicalOperator} `);\n // For the first group, no groupLogicalOperator is needed\n if (index === 0) {\n return group.conditions.length > 1 ? `(${groupStr})` : groupStr;\n }\n else {\n const joinOp = group.groupLogicalOperator || 'and';\n return group.conditions.length > 1 ? `${joinOp} (${groupStr})` : `${joinOp} ${groupStr}`;\n }\n }).join(' ');\n }\n static parseFilter(filterString, params) {\n const decodedString = decodeURIComponent(filterString);\n // Handle individual conditions and groups\n const groups = [];\n // Split by top-level AND/OR operators\n const topLevelPattern = /(?:^|\\s)(and|or)\\s+(?=(?:[^()]*\\([^()]*\\))*[^()]*$)/gi;\n const segments = [];\n let lastIndex = 0;\n let match;\n while ((match = topLevelPattern.exec(decodedString)) !== null) {\n const operator = match[1];\n const segment = decodedString.substring(lastIndex, match.index).trim();\n if (segment) {\n segments.push({ condition: segment, operator });\n }\n lastIndex = match.index + match[0].length;\n }\n // Add the last segment\n const lastSegment = decodedString.substring(lastIndex).trim();\n if (lastSegment) {\n segments.push({ condition: lastSegment, operator: undefined });\n }\n // Parse each segment\n segments.forEach((segment, index) => {\n let conditions = [];\n // Check if it's a group with parentheses\n if (segment.condition.startsWith('(') && segment.condition.endsWith(')')) {\n const innerCondition = segment.condition.slice(1, -1).trim();\n conditions = this.parseConditions(innerCondition);\n }\n else {\n // Individual condition\n conditions = this.parseConditions(segment.condition);\n }\n if (conditions.length > 0) {\n const group = {\n logicalOperator: 'and', // Default for conditions within group\n conditions: conditions\n };\n // For groups after the first, set the groupLogicalOperator\n if (index > 0) {\n group.groupLogicalOperator = segment.operator?.toLowerCase() || 'and';\n }\n // If it's a single condition group, we can detect OR operators within\n if (conditions.length === 1 && segment.condition.includes(' or ')) {\n group.logicalOperator = 'or';\n }\n else if (conditions.length > 1) {\n // Detect the logical operator used within the group\n group.logicalOperator = segment.condition.toLowerCase().includes(' or ') ? 'or' : 'and';\n }\n groups.push(group);\n }\n });\n params.filters = groups;\n }\n static parseConditions(conditionString) {\n const conditions = [];\n // Split by AND/OR but be careful not to split within quotes or parentheses\n const pattern = /(\\w+)\\s+(eq|ne|gt|ge|lt|le|contains|startswith|endswith)\\s+('[^']*'|\\d+|true|false)/gi;\n let match;\n while ((match = pattern.exec(conditionString)) !== null) {\n const [, field, operator, rawValue] = match;\n let value = rawValue.trim();\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\")) {\n value = rawValue.slice(1, -1).replace(/''/g, \"'\");\n }\n else if (!isNaN(Number(rawValue))) {\n value = Number(rawValue);\n }\n else if (rawValue.toLowerCase() === 'true') {\n value = true;\n }\n else if (rawValue.toLowerCase() === 'false') {\n value = false;\n }\n conditions.push({\n field: field.trim(),\n operator: operator.trim().toLowerCase(),\n value\n });\n }\n return conditions;\n }\n static parseOrderBy(orderByString, params) {\n const decodedString = decodeURIComponent(orderByString);\n const clauses = decodedString.split(',');\n for (const clause of clauses) {\n const parts = clause.trim().split(/\\s+/);\n const field = parts[0];\n const direction = parts[1]?.toLowerCase() || 'asc';\n params.orderBy?.push({\n field,\n direction\n });\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcXVlcnktcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUVoQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRSxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUF1QjtRQUNyQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFFM0IsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekQsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRixLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNyRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFVBQVU7aUJBQzlCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDZixJQUFJLEdBQUcsR0FBOEIsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFFckQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDNUIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDdkMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNwQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDL0IsQ0FBQztnQkFFRCxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNELENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUV0Qyx5REFBeUQ7WUFDekQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxLQUFLLENBQUM7Z0JBQ25ELE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQW9CLEVBQUUsTUFBdUI7UUFDdEUsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFdkQsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFFakMsc0NBQXNDO1FBQ3RDLE1BQU0sZUFBZSxHQUFHLHVEQUF1RCxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUErQyxFQUFFLENBQUM7UUFFaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBNkIsQ0FBQztRQUVsQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZFLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1QyxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztZQUV2Qyx5Q0FBeUM7WUFDekMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0QsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHVCQUF1QjtnQkFDdkIsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sS0FBSyxHQUFnQjtvQkFDekIsZUFBZSxFQUFFLEtBQUssRUFBRSxzQ0FBc0M7b0JBQzlELFVBQVUsRUFBRSxVQUFVO2lCQUN2QixDQUFDO2dCQUVGLDJEQUEyRDtnQkFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2QsS0FBSyxDQUFDLG9CQUFvQixHQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFtQixJQUFJLEtBQUssQ0FBQztnQkFDMUYsQ0FBQztnQkFFRCxzRUFBc0U7Z0JBQ3RFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbEUsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNqQyxvREFBb0Q7b0JBQ3BELEtBQUssQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMxRixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUMsZUFBdUI7UUFDcEQsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUV6QywyRUFBMkU7UUFDM0UsTUFBTSxPQUFPLEdBQUcsdUZBQXVGLENBQUM7UUFDeEcsSUFBSSxLQUE2QixDQUFDO1FBRWxDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBRTVDLElBQUksS0FBSyxHQUFRLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVqQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7aUJBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNCLENBQUM7aUJBQU0sSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzdDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDZixDQUFDO2lCQUFNLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUM5QyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLENBQUM7WUFFRCxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNuQixRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDdkMsS0FBSzthQUNOLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFxQixFQUFFLE1BQXVCO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixNQUFNLFNBQVMsR0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFxQixJQUFJLEtBQUssQ0FBQztZQUV2RSxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztnQkFDbkIsS0FBSztnQkFDTCxTQUFTO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ29uZGl0aW9uIHtcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XHJcbiAgbG9naWNhbE9wZXJhdG9yOiAnYW5kJyB8ICdvcic7XHJcbiAgZ3JvdXBMb2dpY2FsT3BlcmF0b3I/OiAnYW5kJyB8ICdvcic7XHJcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlQYXJhbWV0ZXJzIHtcclxuICBmaWx0ZXJzOiBGaWx0ZXJHcm91cFtdO1xyXG4gIG9yZGVyQnk/OiB7IGZpZWxkOiBzdHJpbmc7IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfVtdO1xyXG4gIGdyb3VwQnk/OiBzdHJpbmdbXTtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgc2tpcD86IG51bWJlcjtcclxuICBleHBhbmQ/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5UGFyc2VyIHtcclxuICBzdGF0aWMgcGFyc2UocXVlcnlTdHJpbmc6IHN0cmluZyk6IFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgIG9yZGVyQnk6IFtdLFxyXG4gICAgICBncm91cEJ5OiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFydHMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBxdWVyeVBhcnRzKSB7XHJcbiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRmaWx0ZXI9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRmlsdGVyKHBhcnQuc3Vic3RyaW5nKCckZmlsdGVyPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRvcmRlcmJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZU9yZGVyQnkocGFydC5zdWJzdHJpbmcoJyRvcmRlcmJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRncm91cGJ5PScpKSB7XHJcbiAgICAgICAgcGFyYW1zLmdyb3VwQnkgPSBwYXJ0LnN1YnN0cmluZygnJGdyb3VwYnk9Jy5sZW5ndGgpLnNwbGl0KCcsJykubWFwKGYgPT4gZi50cmltKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnQuc3RhcnRzV2l0aCgnJHRvcD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy50b3AgPSBOdW1iZXIocGFydC5zdWJzdHJpbmcoJyR0b3A9Jy5sZW5ndGgpKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRza2lwPScpKSB7XHJcbiAgICAgICAgcGFyYW1zLnNraXAgPSBOdW1iZXIocGFydC5zdWJzdHJpbmcoJyRza2lwPScubGVuZ3RoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckZXhwYW5kPScpKSB7XHJcbiAgICAgICAgcGFyYW1zLmV4cGFuZCA9IHBhcnQuc3Vic3RyaW5nKCckZXhwYW5kPScubGVuZ3RoKS5zcGxpdCgnLCcpLm1hcChmID0+IGYudHJpbSgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdG9TdHJpbmcocGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmlsdGVyU3RyID0gdGhpcy5idWlsZEZpbHRlclN0cmluZyhwYXJhbXMuZmlsdGVycyk7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRmaWx0ZXI9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsdGVyU3RyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLm9yZGVyQnk/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBvcmRlckJ5U3RyID0gcGFyYW1zLm9yZGVyQnkubWFwKG8gPT4gYCR7by5maWVsZH0gJHtvLmRpcmVjdGlvbn1gKS5qb2luKCcsJyk7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRvcmRlcmJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZGVyQnlTdHIpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMuZ3JvdXBCeT8ubGVuZ3RoKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRncm91cGJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5ncm91cEJ5LmpvaW4oJywnKSl9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRvcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCR0b3A9JHtwYXJhbXMudG9wfWApO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy5za2lwICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcGFydHMucHVzaChgJHNraXA9JHtwYXJhbXMuc2tpcH1gKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMuZXhwYW5kPy5sZW5ndGgpIHtcclxuICAgICAgcGFydHMucHVzaChgJGV4cGFuZD0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbXMuZXhwYW5kLmpvaW4oJywnKSl9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRmlsdGVyU3RyaW5nKGZpbHRlcnM6IEZpbHRlckdyb3VwW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZpbHRlcnMubWFwKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBTdHIgPSBncm91cC5jb25kaXRpb25zXHJcbiAgICAgICAgLm1hcChjb25kaXRpb24gPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IGNvbmRpdGlvbi52YWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsID0gYCcke3ZhbC5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwgPyAndHJ1ZScgOiAnZmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24uZmllbGR9ICR7Y29uZGl0aW9uLm9wZXJhdG9yfSAke3ZhbH1gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmpvaW4oYCAke2dyb3VwLmxvZ2ljYWxPcGVyYXRvcn0gYCk7XHJcblxyXG4gICAgICAvLyBGb3IgdGhlIGZpcnN0IGdyb3VwLCBubyBncm91cExvZ2ljYWxPcGVyYXRvciBpcyBuZWVkZWRcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID4gMSA/IGAoJHtncm91cFN0cn0pYCA6IGdyb3VwU3RyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGpvaW5PcCA9IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yIHx8ICdhbmQnO1xyXG4gICAgICAgIHJldHVybiBncm91cC5jb25kaXRpb25zLmxlbmd0aCA+IDEgPyBgJHtqb2luT3B9ICgke2dyb3VwU3RyfSlgIDogYCR7am9pbk9wfSAke2dyb3VwU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRmlsdGVyKGZpbHRlclN0cmluZzogc3RyaW5nLCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHJpbmcpO1xyXG5cclxuICAgIC8vIEhhbmRsZSBpbmRpdmlkdWFsIGNvbmRpdGlvbnMgYW5kIGdyb3Vwc1xyXG4gICAgY29uc3QgZ3JvdXBzOiBGaWx0ZXJHcm91cFtdID0gW107XHJcblxyXG4gICAgLy8gU3BsaXQgYnkgdG9wLWxldmVsIEFORC9PUiBvcGVyYXRvcnNcclxuICAgIGNvbnN0IHRvcExldmVsUGF0dGVybiA9IC8oPzpefFxccykoYW5kfG9yKVxccysoPz0oPzpbXigpXSpcXChbXigpXSpcXCkpKlteKCldKiQpL2dpO1xyXG4gICAgY29uc3Qgc2VnbWVudHM6IHsgY29uZGl0aW9uOiBzdHJpbmc7IG9wZXJhdG9yPzogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIGxldCBsYXN0SW5kZXggPSAwO1xyXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSB0b3BMZXZlbFBhdHRlcm4uZXhlYyhkZWNvZGVkU3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBtYXRjaFsxXTtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChzZWdtZW50KSB7XHJcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGNvbmRpdGlvbjogc2VnbWVudCwgb3BlcmF0b3IgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgbGFzdCBzZWdtZW50XHJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCkudHJpbSgpO1xyXG4gICAgaWYgKGxhc3RTZWdtZW50KSB7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goeyBjb25kaXRpb246IGxhc3RTZWdtZW50LCBvcGVyYXRvcjogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIGVhY2ggc2VnbWVudFxyXG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZ3JvdXAgd2l0aCBwYXJlbnRoZXNlc1xyXG4gICAgICBpZiAoc2VnbWVudC5jb25kaXRpb24uc3RhcnRzV2l0aCgnKCcpICYmIHNlZ21lbnQuY29uZGl0aW9uLmVuZHNXaXRoKCcpJykpIHtcclxuICAgICAgICBjb25zdCBpbm5lckNvbmRpdGlvbiA9IHNlZ21lbnQuY29uZGl0aW9uLnNsaWNlKDEsIC0xKS50cmltKCk7XHJcbiAgICAgICAgY29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGlubmVyQ29uZGl0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJbmRpdmlkdWFsIGNvbmRpdGlvblxyXG4gICAgICAgIGNvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhzZWdtZW50LmNvbmRpdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBncm91cDogRmlsdGVyR3JvdXAgPSB7XHJcbiAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLCAvLyBEZWZhdWx0IGZvciBjb25kaXRpb25zIHdpdGhpbiBncm91cFxyXG4gICAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9uc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEZvciBncm91cHMgYWZ0ZXIgdGhlIGZpcnN0LCBzZXQgdGhlIGdyb3VwTG9naWNhbE9wZXJhdG9yXHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPSAoc2VnbWVudC5vcGVyYXRvcj8udG9Mb3dlckNhc2UoKSBhcyAnYW5kJyB8ICdvcicpIHx8ICdhbmQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgaXQncyBhIHNpbmdsZSBjb25kaXRpb24gZ3JvdXAsIHdlIGNhbiBkZXRlY3QgT1Igb3BlcmF0b3JzIHdpdGhpblxyXG4gICAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSAmJiBzZWdtZW50LmNvbmRpdGlvbi5pbmNsdWRlcygnIG9yICcpKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnb3InO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAvLyBEZXRlY3QgdGhlIGxvZ2ljYWwgb3BlcmF0b3IgdXNlZCB3aXRoaW4gdGhlIGdyb3VwXHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSBzZWdtZW50LmNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgb3IgJykgPyAnb3InIDogJ2FuZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtcy5maWx0ZXJzID0gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VDb25kaXRpb25zKGNvbmRpdGlvblN0cmluZzogc3RyaW5nKTogRmlsdGVyQ29uZGl0aW9uW10ge1xyXG4gICAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvLyBTcGxpdCBieSBBTkQvT1IgYnV0IGJlIGNhcmVmdWwgbm90IHRvIHNwbGl0IHdpdGhpbiBxdW90ZXMgb3IgcGFyZW50aGVzZXNcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKFxcdyspXFxzKyhlcXxuZXxndHxnZXxsdHxsZXxjb250YWluc3xzdGFydHN3aXRofGVuZHN3aXRoKVxccysoJ1teJ10qJ3xcXGQrfHRydWV8ZmFsc2UpL2dpO1xyXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoY29uZGl0aW9uU3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3QgWywgZmllbGQsIG9wZXJhdG9yLCByYXdWYWx1ZV0gPSBtYXRjaDtcclxuXHJcbiAgICAgIGxldCB2YWx1ZTogYW55ID0gcmF3VmFsdWUudHJpbSgpO1xyXG5cclxuICAgICAgaWYgKHJhd1ZhbHVlLnN0YXJ0c1dpdGgoXCInXCIpICYmIHJhd1ZhbHVlLmVuZHNXaXRoKFwiJ1wiKSkge1xyXG4gICAgICAgIHZhbHVlID0gcmF3VmFsdWUuc2xpY2UoMSwgLTEpLnJlcGxhY2UoLycnL2csIFwiJ1wiKTtcclxuICAgICAgfSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKHJhd1ZhbHVlKSkpIHtcclxuICAgICAgICB2YWx1ZSA9IE51bWJlcihyYXdWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKHJhd1ZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpIHtcclxuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC50cmltKCksXHJcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb25kaXRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VPcmRlckJ5KG9yZGVyQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cmluZyk7XHJcbiAgICBjb25zdCBjbGF1c2VzID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGNsYXVzZXMpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBjbGF1c2UudHJpbSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gcGFydHNbMF07XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IChwYXJ0c1sxXT8udG9Mb3dlckNhc2UoKSBhcyAnYXNjJyB8ICdkZXNjJykgfHwgJ2FzYyc7XHJcblxyXG4gICAgICBwYXJhbXMub3JkZXJCeT8ucHVzaCh7XHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLmNvcmUtc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2VsaXRlLmZyYW1ld29yay1uZy5jb3JlLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.RestService","i1","i1.PermissionsService"],"mappings":"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"}
1
+ {"version":3,"file":"elite.framework-ng.core-services.mjs","sources":["../tmp-esm2022/services/lib/rest.service.js","../tmp-esm2022/services/lib/base.service.js","../tmp-esm2022/services/lib/generic.service.js","../tmp-esm2022/services/lib/ssr-cookie.service.js","../tmp-esm2022/services/lib/SwalService.service.js","../tmp-esm2022/services/lib/permissions.service.js","../tmp-esm2022/services/lib/permissions-guard.service.js","../tmp-esm2022/services/lib/logger.interface.js","../tmp-esm2022/services/lib/logger.service.js","../tmp-esm2022/services/lib/id-parser.service.js","../tmp-esm2022/services/lib/query-parser.js","../tmp-esm2022/services/elite.framework-ng.core-services.js"],"sourcesContent":["import { HttpClient, HttpParams } from \"@angular/common/http\";\nimport { Injectable, Inject, inject } from \"@angular/core\";\nimport { ENVIRONMENT, CORE_OPTIONS } from \"@elite.framework/ng.core/tokens\";\nimport { throwError, catchError } from \"rxjs\";\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common/http\";\nexport class RestService {\n options;\n http;\n environment = inject(ENVIRONMENT);\n constructor(options, http) {\n this.options = options;\n this.http = http;\n }\n getApiFromStore(apiName) {\n return this.environment.apiUrl;\n }\n handleError(err) {\n // this.httpErrorReporter.reportError(err);\n return throwError(() => err);\n }\n request(request, config, api) {\n // debugger\n config = config || {};\n api = api || this.getApiFromStore(config.apiName);\n const { method, params, ...options } = request;\n const { observe = \"body\" /* Rest.Observe.Body */, skipHandleError } = config;\n const url = this.removeDuplicateSlashes(api + request.url);\n const httpClient = this.getHttpClient(config.skipAddingHeader ?? false);\n return httpClient\n .request(method, url, {\n observe,\n ...(params && {\n params: this.getParams(params, config.httpParamEncoder),\n }),\n ...options,\n })\n .pipe(catchError(err => (skipHandleError ? throwError(() => err) : this.handleError(err))));\n }\n getHttpClient(isExternal) {\n return /* isExternal ? this.externalHttp : */ this.http;\n }\n getParams(params, encoder) {\n const filteredParams = Object.entries(params).reduce((acc, [key, value]) => {\n if (isUndefinedOrEmptyString(value))\n return acc;\n if (value === null && !this.options.sendNullsAsQueryParam)\n return acc;\n acc[key] = value;\n return acc;\n }, {});\n return encoder\n ? new HttpParams({ encoder, fromObject: filteredParams })\n : new HttpParams({ fromObject: filteredParams });\n }\n removeDuplicateSlashes(url) {\n return url.replace(/([^:]\\/)\\/+/g, '$1');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, deps: [{ token: CORE_OPTIONS }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: RestService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [CORE_OPTIONS]\n }] }, { type: i1.HttpClient }] });\nexport function isUndefinedOrEmptyString(value) {\n return value === undefined || value === '';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcmVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBYyxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFLMUQsTUFBTSxPQUFPLFdBQVc7SUFHWTtJQUN0QjtJQUhKLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsWUFDa0MsT0FBYSxFQUNuQyxJQUFnQjtRQURNLFlBQU8sR0FBUCxPQUFPLENBQU07UUFDbkMsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUd4QixDQUFDO0lBRUssZUFBZSxDQUFDLE9BQTJCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLDJDQUEyQztRQUMzQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxDQUNMLE9BQXlDLEVBQ3pDLE1BQW9CLEVBQ3BCLEdBQVk7UUFFWixXQUFXO1FBQ1gsTUFBTSxHQUFHLE1BQU0sSUFBSyxFQUFrQixDQUFDO1FBQ3ZDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDL0MsTUFBTSxFQUFFLE9BQU8saUNBQW9CLEVBQUUsZUFBZSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVELE1BQU0sVUFBVSxHQUFlLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sVUFBVTthQUNkLE9BQU8sQ0FBSSxNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ3ZCLE9BQU87WUFDUCxHQUFHLENBQUMsTUFBTSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7YUFDeEQsQ0FBQztZQUNGLEdBQUcsT0FBTztTQUNKLENBQUM7YUFDUixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBQ08sYUFBYSxDQUFDLFVBQW1CO1FBQ3ZDLE9BQU8sc0NBQXNDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMxRCxDQUFDO0lBRU8sU0FBUyxDQUFDLE1BQW1CLEVBQUUsT0FBNEI7UUFDakUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUNoRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtnQkFBRSxPQUFPLEdBQUcsQ0FBQztZQUN0RSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDO1FBQ2QsT0FBTyxPQUFPO1lBQ1osQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUN6RCxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsR0FBVztRQUN4QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7dUdBM0RVLFdBQVcsa0JBR1osWUFBWTsyR0FIWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUlJLE1BQU07MkJBQUMsWUFBWTs7QUE0RHhCLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFjO0lBQ3JELE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVxdWVzdCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSb290LCBSZXN0IH0gZnJvbSBcIkBlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHNcIjtcbmltcG9ydCB7IEVOVklST05NRU5ULCBDT1JFX09QVElPTlMgfSBmcm9tIFwiQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3Rva2Vuc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgY2F0Y2hFcnJvciB9IGZyb20gXCJyeGpzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSB7XG4gIHByaXZhdGUgZW52aXJvbm1lbnQgPSBpbmplY3QoRU5WSVJPTk1FTlQpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KENPUkVfT1BUSU9OUykgcHJvdGVjdGVkIG9wdGlvbnM6IFJvb3QsXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNlcnZpY2UsXG4gICAgLy8gcHJvdGVjdGVkIGh0dHBFcnJvclJlcG9ydGVyOiBIdHRwRXJyb3JSZXBvcnRlclNlcnZpY2UsXG4gICkgeyB9XG5cbiAgcHJvdGVjdGVkIGdldEFwaUZyb21TdG9yZShhcGlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50LmFwaVVybDtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yKGVycik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcbiAgfVxuXG4gIHJlcXVlc3Q8VCwgUj4oXG4gICAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8VD4gfCBSZXN0LlJlcXVlc3Q8VD4sXG4gICAgY29uZmlnPzogUmVzdC5Db25maWcsXG4gICAgYXBpPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCAoe30gYXMgUmVzdC5Db25maWcpO1xuICAgIGFwaSA9IGFwaSB8fCB0aGlzLmdldEFwaUZyb21TdG9yZShjb25maWcuYXBpTmFtZSk7XG4gICAgY29uc3QgeyBtZXRob2QsIHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmVxdWVzdDtcbiAgICBjb25zdCB7IG9ic2VydmUgPSBSZXN0Lk9ic2VydmUuQm9keSwgc2tpcEhhbmRsZUVycm9yIH0gPSBjb25maWc7XG4gICAgY29uc3QgdXJsID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVTbGFzaGVzKCBhcGkgKyByZXF1ZXN0LnVybCk7XG5cbiAgICBjb25zdCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gdGhpcy5nZXRIdHRwQ2xpZW50KGNvbmZpZy5za2lwQWRkaW5nSGVhZGVyID8/IGZhbHNlKTtcbiAgICByZXR1cm4gaHR0cENsaWVudFxuICAgICAgLnJlcXVlc3Q8Uj4obWV0aG9kLCB1cmwsIHtcbiAgICAgICAgb2JzZXJ2ZSxcbiAgICAgICAgLi4uKHBhcmFtcyAmJiB7XG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmdldFBhcmFtcyhwYXJhbXMsIGNvbmZpZy5odHRwUGFyYW1FbmNvZGVyKSxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9IGFzIGFueSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IChza2lwSGFuZGxlRXJyb3IgPyB0aHJvd0Vycm9yKCgpID0+IGVycikgOiB0aGlzLmhhbmRsZUVycm9yKGVycikpKSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRIdHRwQ2xpZW50KGlzRXh0ZXJuYWw6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gLyogaXNFeHRlcm5hbCA/IHRoaXMuZXh0ZXJuYWxIdHRwIDogKi8gdGhpcy5odHRwO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXMocGFyYW1zOiBSZXN0LlBhcmFtcywgZW5jb2Rlcj86IEh0dHBQYXJhbWV0ZXJDb2RlYyk6IEh0dHBQYXJhbXMge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlKSkgcmV0dXJuIGFjYztcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAhdGhpcy5vcHRpb25zLnNlbmROdWxsc0FzUXVlcnlQYXJhbSkgcmV0dXJuIGFjYztcbiAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIGFueSk7XG4gICAgcmV0dXJuIGVuY29kZXJcbiAgICAgID8gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyLCBmcm9tT2JqZWN0OiBmaWx0ZXJlZFBhcmFtcyB9KVxuICAgICAgOiBuZXcgSHR0cFBhcmFtcyh7IGZyb21PYmplY3Q6IGZpbHRlcmVkUGFyYW1zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVTbGFzaGVzKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnJlcGxhY2UoLyhbXjpdXFwvKVxcLysvZywgJyQxJyk7XG4gIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRPckVtcHR5U3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJztcbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { RestService } from './rest.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./rest.service\";\nexport class BaseService {\n restService;\n apiName = '';\n moduleName = '';\n constructor(restService) {\n this.restService = restService;\n }\n getList = (input, endpoint) => {\n const params = Object.keys(input).reduce((acc, key) => {\n acc[key] = input[key];\n return acc;\n }, {});\n const url = endpoint ? endpoint : `/${this.moduleName}/${this.apiName}`;\n return this.restService.request({\n method: 'GET',\n url: url,\n params: params,\n }, { apiName: this.apiName })\n .pipe(map(response => response));\n };\n get = (id) => this.restService.request({\n method: 'GET',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n create = (input) => this.restService.request({\n method: 'POST',\n url: this.buildUrl(),\n body: input,\n }, { apiName: this.apiName });\n update = (id, input) => this.restService.request({\n method: 'PUT',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n patch = (id, input) => this.restService.request({\n method: 'PATCH',\n url: this.buildUrl(id),\n body: input,\n }, { apiName: this.apiName });\n delete = (id) => this.restService.request({\n method: 'DELETE',\n url: this.buildUrl(id),\n }, { apiName: this.apiName });\n buildUrl(id) {\n if (!id)\n return `/${this.moduleName}/${this.apiName}`;\n if (Array.isArray(id)) {\n // Array-based composite key: ['123', '456'] => /123/456\n return `/${this.moduleName}/${this.apiName}/${id.join('/')}`;\n }\n if (typeof id === 'object') {\n // Object-based composite key: {id:123, biId:456} => /123/456\n return `/${this.moduleName}/${this.apiName}/${Object.values(id).join('/')}`;\n }\n // Single id\n return `/${this.moduleName}/${this.apiName}/${id}`;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, deps: [{ token: i1.RestService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: BaseService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: i1.RestService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03QyxNQUFNLE9BQU8sV0FBVztJQUlIO0lBSG5CLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFFYixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFlBQW1CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUcsQ0FBQztJQUc3QyxPQUFPLEdBQUcsQ0FBQyxLQUFTLEVBQUUsUUFBaUIsRUFBRyxFQUFFO1FBRTFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFTixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV6RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUE0QjtZQUN6RCxNQUFNLEVBQUUsS0FBSztZQUNiLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLE1BQU07U0FDZixFQUFFLEVBQUUsT0FBTyxFQUFF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ZXNDb250ZW50IjpbIlxyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2luYXRlZFJlc3VsdCB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcclxuICBhcGlOYW1lID0gJyc7XHJcblxyXG4gIG1vZHVsZU5hbWUgPSAnJztcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlKSB7fVxyXG5cclxuXHJcbiAgICBnZXRMaXN0ID0gKGlucHV0OmFueSwgZW5kcG9pbnQ/OiBzdHJpbmcgKSA9PiB7XHJcblxyXG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhpbnB1dCkucmVkdWNlKChhY2M6YW55LCBrZXkpID0+IHtcclxuICAgICAgICBhY2Nba2V5XSA9IGlucHV0W2tleV07XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwge30pO1xyXG5cclxuICAgICAgIGNvbnN0IHVybCA9IGVuZHBvaW50ID8gZW5kcG9pbnQgOiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX1gO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIFBhZ2luYXRlZFJlc3VsdDxhbnk+Pih7XHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICB1cmw6IHVybCxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcclxuICAgICAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgZ2V0ID0gKGlkOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgUmVjb3JkPHN0cmluZywgYW55PikgPT5cclxuICB0aGlzLnJlc3RTZXJ2aWNlLnJlcXVlc3Q8YW55LCBhbnk+KHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gIH0sIHsgYXBpTmFtZTogdGhpcy5hcGlOYW1lIH0pO1xyXG5cclxuY3JlYXRlID0gKGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybCgpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG51cGRhdGUgPSAoaWQ6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbnB1dDogYW55KSA9PlxyXG4gIHRoaXMucmVzdFNlcnZpY2UucmVxdWVzdDxhbnksIGFueT4oe1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgICBib2R5OiBpbnB1dCxcclxuICB9LCB7IGFwaU5hbWU6IHRoaXMuYXBpTmFtZSB9KTtcclxuXHJcbiBwYXRjaCA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4sIGlucHV0OiBhbnkpID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgYW55Pih7XHJcbiAgICBtZXRob2Q6ICdQQVRDSCcsXHJcbiAgICB1cmw6IHRoaXMuYnVpbGRVcmwoaWQpLFxyXG4gICAgYm9keTogaW5wdXQsXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxuXHJcbmRlbGV0ZSA9IChpZDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4pID0+XHJcbiAgdGhpcy5yZXN0U2VydmljZS5yZXF1ZXN0PGFueSwgdm9pZD4oe1xyXG4gICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgIHVybDogdGhpcy5idWlsZFVybChpZCksXHJcbiAgfSwgeyBhcGlOYW1lOiB0aGlzLmFwaU5hbWUgfSk7XHJcblxyXG5cclxucHJpdmF0ZSBidWlsZFVybChpZD86IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHtcclxuICBpZiAoIWlkKSByZXR1cm4gYC8ke3RoaXMubW9kdWxlTmFtZX0vJHt0aGlzLmFwaU5hbWV9YDtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoaWQpKSB7XHJcbiAgICAvLyBBcnJheS1iYXNlZCBjb21wb3NpdGUga2V5OiBbJzEyMycsICc0NTYnXSA9PiAvMTIzLzQ1NlxyXG4gICAgcmV0dXJuIGAvJHt0aGlzLm1vZHVsZU5hbWV9LyR7dGhpcy5hcGlOYW1lfS8ke2lkLmpvaW4oJy8nKX1gO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiBpZCA9PT0gJ29iamVjdCcpIHtcclxuICAgIC8vIE9iamVjdC1iYXNlZCBjb21wb3NpdGUga2V5OiB7aWQ6MTIzLCBiaUlkOjQ1Nn0gPT4gLzEyMy80NTZcclxuICAgIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtPYmplY3QudmFsdWVzKGlkKS5qb2luKCcvJyl9YDtcclxuICB9XHJcblxyXG4gIC8vIFNpbmdsZSBpZFxyXG4gIHJldHVybiBgLyR7dGhpcy5tb2R1bGVOYW1lfS8ke3RoaXMuYXBpTmFtZX0vJHtpZH1gO1xyXG59XHJcblxyXG59XHJcbiJdfQ==","// src/app/services/generic.service.ts\nimport { HttpParams } from '@angular/common/http';\n/**\n * GenericService<T, K>:\n * - T = نوع الكائن (Model)\n * - K = نوع المفتاح الأساسي (ID)، افتراضي number\n *\n * يحتوي على جميع دوال الـ CRUD القياسية للتوريث في الخدمات المتخصصة.\n */\nexport class GenericService {\n http;\n constructor(http) {\n this.http = http;\n }\n /**\n * جلب كل السجلات\n */\n getAll() {\n // ملاحظة: يمكن إضافة معالج أخطاء مركزي هنا أو عبر Interceptor\n return this.http.get(this.baseUrl);\n }\n /**\n * جلب سجل واحد بناءً على المعرف\n */\n getById(id) {\n // ملاحظة: تأكد أن الـ endpoint يدعم GET برقم المعرف\n return this.http.get(`${this.baseUrl}/${id}`);\n }\n /**\n * إنشاء سجل جديد\n */\n create(item) {\n // ملاحظة: استخدم Partial<T> للسماح ببعض الحقول الاختيارية\n return this.http.post(this.baseUrl, item);\n }\n /**\n * تحديث سجل موجود\n */\n update(id, item) {\n // ملاحظة: هنا نُعيد Observable<void> لأن API قد لا تُرجع الجسم نفسه\n return this.http.put(`${this.baseUrl}`, item);\n }\n /**\n * حذف سجل\n */\n delete(id) {\n // ملاحظة: يُفضّل استخدام Confirm قبل الحذف في الواجهة\n return this.http.delete(`${this.baseUrl}/${id}`);\n }\n /** endpoint قابل للتخصيص — يمكن للفرع override–ها */\n getPageUrl() {\n return this.baseUrl;\n }\n /**\n * جلب صفحة من البيانات مع دعم الفلاتر والفرز\n * @param pageIndex صفر-based\n * @param pageSize عدد السجلات\n * @param filters كائن Partial<T> أو Record<string,any>\n * @param sort نص الفرز، مثلاً \"eiNa:desc\"\n */\n getPage(pageIndex, pageSize, filters, sort) {\n // debugger\n let params = new HttpParams()\n .set('pageIndex', pageIndex.toString())\n .set('pageSize', pageSize.toString());\n if (filters) {\n Object.entries(filters).forEach(([key, val]) => {\n if (val != null && val !== '') {\n params = params.set(key, val.toString());\n }\n });\n }\n if (sort) {\n params = params.set('sort', sort);\n }\n // return this.http\n // .get<T[]>(this.getPageUrl(), { params, observe: 'response' })\n // .pipe(\n // map((resp: HttpResponse<T[]>) => ({\n // items: resp.body || [],\n // totalCount: Number(resp.headers.get('X-Total-Count')) || resp.body?.length || 0\n // }))\n // );\n return this.http.get(this.getPageUrl(), { params });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvZ2VuZXJpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQztBQUN0QyxPQUFPLEVBQWMsVUFBVSxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBSzVFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBZ0IsY0FBYztJQU9aO0lBQXRCLFlBQXNCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRTFDOztPQUVHO0lBQ0gsTUFBTTtRQUNKLDhEQUE4RDtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFFSCxPQUFPLENBQUMsRUFBSztRQUNYLG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFnQjtRQUVyQiwwREFBMEQ7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUVGLE1BQU0sQ0FBQyxFQUFLLEVBQUUsSUFBZ0I7UUFDN0Isb0VBQW9FO1FBQ25FLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQUs7UUFDVixzREFBc0Q7UUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSUYscURBQXFEO0lBQzFDLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFQTs7Ozs7O01BTUU7SUFDSCxPQUFPLENBQ0wsU0FBaUIsRUFDakIsUUFBZ0IsRUFDaEIsT0FBNkIsRUFDN0IsSUFBYTtRQUViLFdBQVc7UUFDWCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUMxQixHQUFHLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN0QyxHQUFHLENBQUMsVUFBVSxFQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixrRUFBa0U7UUFDbEUsV0FBVztRQUNYLDBDQUEwQztRQUMxQyxnQ0FBZ0M7UUFDaEMsd0ZBQXdGO1FBQ3hGLFVBQVU7UUFDVixPQUFPO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUNqQixFQUFFLE1BQU0sRUFBRSxDQUNYLENBQUM7SUFDRixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvYXBwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZS50c1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYWdpbmF0ZWRSZXN1bHQgfSBmcm9tICdAZWxpdGUuZnJhbWV3b3JrL25nLmNvcmUvbW9kZWxzJztcblxuLyoqXG4gKiBHZW5lcmljU2VydmljZTxULCBLPjpcbiAqICAtIFQgPSDZhtmI2Lkg2KfZhNmD2KfYptmGIChNb2RlbClcbiAqICAtIEsgPSDZhtmI2Lkg2KfZhNmF2YHYqtin2K0g2KfZhNij2LPYp9iz2YogKElEKdiMINin2YHYqtix2KfYttmKIG51bWJlclxuICpcbiAqINmK2K3YqtmI2Yog2LnZhNmJINis2YXZiti5INiv2YjYp9mEINin2YTZgCBDUlVEINin2YTZgtmK2KfYs9mK2Kkg2YTZhNiq2YjYsdmK2Ksg2YHZiiDYp9mE2K7Yr9mF2KfYqiDYp9mE2YXYqtiu2LXYtdipLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCwgSyA9IG51bWJlcj4gaW1wbGVtZW50cyBDcnVkU2VydmljZTxULCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIC8qKlxuICAgKiDinI/vuI8g2LnZhNmJINmD2YQg2K7Yr9mF2Kkg2YHYsdi52YrYqSDYo9mGINiq2LnYsdmR2YEg2YfYsNinOlxuICAgKiDZhdir2KfZhDogcHJvdGVjdGVkIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vYXBpL2pvYnR5cHMnO1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJhc2VVcmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvKipcbiAgICog2KzZhNioINmD2YQg2KfZhNiz2KzZhNin2KpcbiAgICovXG4gIGdldEFsbCgpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YrZhdmD2YYg2KXYttin2YHYqSDZhdi52KfZhNisINij2K7Yt9in2KEg2YXYsdmD2LLZiiDZh9mG2Kcg2KPZiCDYudio2LEgSW50ZXJjZXB0b3JcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUW10+KHRoaXMuYmFzZVVybCk7XG4gIH1cblxuICAvKipcbiAgICog2KzZhNioINiz2KzZhCDZiNin2K3YryDYqNmG2KfYodmLINi52YTZiSDYp9mE2YXYudix2YFcbiAgICovXG5cbiAgZ2V0QnlJZChpZDogSyk6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2KrYo9mD2K8g2KPZhiDYp9mE2YAgZW5kcG9pbnQg2YrYr9i52YUgR0VUINio2LHZgtmFINin2YTZhdi52LHZgVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuYmFzZVVybH0vJHtpZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDYpdmG2LTYp9ihINiz2KzZhCDYrNiv2YrYr1xuICAgKi9cbiAgY3JlYXRlKGl0ZW06IFBhcnRpYWw8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIC8vINmF2YTYp9it2LjYqTog2KfYs9iq2K7Yr9mFIFBhcnRpYWw8VD4g2YTZhNiz2YXYp9itINio2KjYudi2INin2YTYrdmC2YjZhCDYp9mE2KfYrtiq2YrYp9ix2YrYqVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLmJhc2VVcmwsIGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqINiq2K3Yr9mK2Ksg2LPYrNmEINmF2YjYrNmI2K9cbiAgICovXG5cbiAgIHVwZGF0ZShpZDogSywgaXRlbTogUGFydGlhbDxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIC8vINmF2YTYp9it2LjYqTog2YfZhtinINmG2Y/YudmK2K8gT2JzZXJ2YWJsZTx2b2lkPiDZhNij2YYgQVBJINmC2K8g2YTYpyDYqtmP2LHYrNi5INin2YTYrNiz2YUg2YbZgdiz2YdcbiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4oYCR7dGhpcy5iYXNlVXJsfWAsIGl0ZW0pO1xuICB9XG4gIC8qKlxuICAgKiDYrdiw2YEg2LPYrNmEXG4gICAqL1xuICBkZWxldGUoaWQ6IEspOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAvLyDZhdmE2KfYrdi42Kk6INmK2Y/Zgdi22ZHZhCDYp9iz2KrYrtiv2KfZhSBDb25maXJtINmC2KjZhCDYp9mE2K3YsNmBINmB2Yog2KfZhNmI2KfYrNmH2KlcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPihgJHt0aGlzLmJhc2VVcmx9LyR7aWR9YCk7XG4gIH1cblxuXG5cbiAvKiogZW5kcG9pbnQg2YLYp9io2YQg2YTZhNiq2K7YtdmK2LUg4oCUINmK2YXZg9mGINmE2YTZgdix2Lkgb3ZlcnJpZGXigJPZh9inICovXG4gIHByb3RlY3RlZCBnZXRQYWdlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgfVxuXG4gICAvKipcbiAgICog2KzZhNioINi12YHYrdipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDZhdi5INiv2LnZhSDYp9mE2YHZhNin2KrYsSDZiNin2YTZgdix2LJcbiAgICogQHBhcmFtIHBhZ2VJbmRleCDYtdmB2LEtYmFzZWRcbiAgICogQHBhcmFtIHBhZ2VTaXplINi52K/YryDYp9mE2LPYrNmE2KfYqlxuICAgKiBAcGFyYW0gZmlsdGVycyDZg9in2KbZhiBQYXJ0aWFsPFQ+INij2YggUmVjb3JkPHN0cmluZyxhbnk+XG4gICAqIEBwYXJhbSBzb3J0INmG2LUg2KfZhNmB2LHYstiMINmF2KvZhNin2YsgXCJlaU5hOmRlc2NcIlxuICAgKi9cbiAgZ2V0UGFnZShcbiAgICBwYWdlSW5kZXg6IG51bWJlcixcbiAgICBwYWdlU2l6ZTogbnVtYmVyLFxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHNvcnQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICAvLyBkZWJ1Z2dlclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAuc2V0KCdwYWdlSW5kZXgnLCBwYWdlSW5kZXgudG9TdHJpbmcoKSlcbiAgICAgIC5zZXQoJ3BhZ2VTaXplJywgIHBhZ2VTaXplLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGtleSwgdmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc29ydCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnc29ydCcsIHNvcnQpO1xuICAgIH1cblxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5nZXQ8VFtdPih0aGlzLmdldFBhZ2VVcmwoKSwgeyBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAvLyAgIC5waXBlKFxuICAgIC8vICAgICBtYXAoKHJlc3A6IEh0dHBSZXNwb25zZTxUW10+KSA9PiAoe1xuICAgIC8vICAgICAgIGl0ZW1zOiByZXNwLmJvZHkgfHwgW10sXG4gICAgLy8gICAgICAgdG90YWxDb3VudDogTnVtYmVyKHJlc3AuaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKSkgfHwgcmVzcC5ib2R5Py5sZW5ndGggfHwgMFxuICAgIC8vICAgICB9KSlcbiAgICAvLyAgICk7XG4gICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnaW5hdGVkUmVzdWx0PFQ+PihcbiAgICB0aGlzLmdldFBhZ2VVcmwoKSxcbiAgICB7IHBhcmFtcyB9XG4gICk7XG4gIH1cblxuXG59XG4iXX0=","import { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID } from '@angular/core';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport * as i0 from \"@angular/core\";\n// Define the `Request` token\nexport const REQUEST = new InjectionToken('REQUEST');\nexport class SsrCookieService {\n document;\n platformId;\n request;\n documentIsAccessible;\n static initialUrl = '';\n constructor(document, \n // Get the `PLATFORM_ID` so we can check if we're in a browser.\n platformId, request) {\n this.document = document;\n this.platformId = platformId;\n this.request = request;\n this.documentIsAccessible = isPlatformBrowser(this.platformId);\n SsrCookieService.initialUrl = this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookie Regular Expression\n *\n * @param name Cookie name\n * @returns property RegExp\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static getCookieRegExp(name) {\n const escapedName = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n }\n /**\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @param encodedURIComponent A value representing an encoded URI component.\n *\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n static safeDecodeURIComponent(encodedURIComponent) {\n try {\n return decodeURIComponent(encodedURIComponent);\n }\n catch {\n // probably it is not uri encoded. return as is\n return encodedURIComponent;\n }\n }\n /**\n * Return `true` if {@link Document} is accessible, otherwise return `false`\n *\n * @param name Cookie name\n * @returns boolean - whether cookie with specified name exists\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n check(name) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n return regExp.test((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n }\n isDocumentIsAccessible() {\n return this.documentIsAccessible;\n }\n get url() {\n return this.documentIsAccessible ? this.document.location.href : this.request?.url;\n }\n /**\n * Get cookies by name\n *\n * @param name Cookie name\n * @returns property value\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n get(name) {\n if (this.check(name)) {\n name = encodeURIComponent(name);\n const regExp = SsrCookieService.getCookieRegExp(name);\n const result = regExp.exec((this.documentIsAccessible ? this.document.cookie : this.request?.headers.cookie) ?? '');\n return result[1] ? SsrCookieService.safeDecodeURIComponent(result[1]) : '';\n }\n else {\n return '';\n }\n }\n /**\n * Get all cookies in JSON format\n *\n * @returns all the cookies in json\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n getAll() {\n const cookies = {};\n const cookieString = this.documentIsAccessible ? this.document?.cookie : this.request?.headers.cookie;\n if (cookieString && cookieString !== '') {\n cookieString.split(';').forEach((currentCookie) => {\n const [cookieName, cookieValue] = currentCookie.split('=');\n cookies[SsrCookieService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] = SsrCookieService.safeDecodeURIComponent(cookieValue);\n });\n }\n return cookies;\n }\n set(name, value, expiresOrOptions, path, domain, secure, sameSite, partitioned) {\n if (!this.documentIsAccessible) {\n return;\n }\n if (typeof expiresOrOptions === 'number' || expiresOrOptions instanceof Date || path || domain || secure || sameSite) {\n const optionsBody = {\n expires: expiresOrOptions,\n path,\n domain,\n secure,\n sameSite: sameSite ? sameSite : 'Lax',\n partitioned,\n };\n this.set(name, value, optionsBody);\n return;\n }\n let cookieString = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n const options = expiresOrOptions ? expiresOrOptions : {};\n if (options.expires) {\n if (typeof options.expires === 'number') {\n const dateExpires = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n }\n else {\n cookieString += 'expires=' + options.expires.toUTCString() + ';';\n }\n }\n if (options.path) {\n cookieString += 'path=' + options.path + ';';\n }\n if (options.domain) {\n cookieString += 'domain=' + options.domain + ';';\n }\n if (options.secure === false && options.sameSite === 'None') {\n options.secure = true;\n console.warn(`[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`);\n }\n if (options.secure) {\n cookieString += 'secure;';\n }\n if (!options.sameSite) {\n options.sameSite = 'Lax';\n }\n cookieString += 'sameSite=' + options.sameSite + ';';\n if (options.partitioned) {\n cookieString += 'Partitioned;';\n }\n this.document.cookie = cookieString;\n }\n /**\n * Delete cookie by name\n *\n * @param name Cookie name\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Cookie secure flag\n * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n delete(name, path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n }\n /**\n * Delete all cookies\n *\n * @param path Cookie path\n * @param domain Cookie domain\n * @param secure Is the Cookie secure\n * @param sameSite Is the cookie same site\n *\n * @author: Stepan Suvorov\n * @since: 1.0.0\n */\n deleteAll(path, domain, secure, sameSite = 'Lax') {\n if (!this.documentIsAccessible) {\n return;\n }\n const cookies = this.getAll();\n for (const cookieName in cookies) {\n if (cookies.hasOwnProperty(cookieName)) {\n this.delete(cookieName, path, domain, secure, sameSite);\n }\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: REQUEST, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SsrCookieService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }], ctorParameters: () => [{ type: Document, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [REQUEST]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLWNvb2tpZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvc3NyLWNvb2tpZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFOUQsNkJBQTZCO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBVSxTQUFTLENBQUMsQ0FBQztBQUs5RCxNQUFNLE9BQU8sZ0JBQWdCO0lBS0M7SUFFRztJQUNRO0lBUHRCLG9CQUFvQixDQUFVO0lBQy9DLE1BQU0sQ0FBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRXhCLFlBQzRCLFFBQWtCO0lBQzVDLCtEQUErRDtJQUNsQyxVQUFlLEVBQ1AsT0FBZ0I7UUFIM0IsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVmLGVBQVUsR0FBVixVQUFVLENBQUs7UUFDUCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRXJELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztJQUM1RyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDakMsTUFBTSxXQUFXLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FB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Q0FBQztJQUNILENBQUM7dUdBaFNVLGdCQUFnQixrQkFLakIsUUFBUSxhQUVSLFdBQVcsYUFDQyxPQUFPOzJHQVJsQixnQkFBZ0IsY0FGZixNQUFNOzsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gRGVmaW5lIHRoZSBgUmVxdWVzdGAgdG9rZW5cbmV4cG9ydCBjb25zdCBSRVFVRVNUID0gbmV3IEluamVjdGlvblRva2VuPFJlcXVlc3Q+KCdSRVFVRVNUJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTc3JDb29raWVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudElzQWNjZXNzaWJsZTogYm9vbGVhbjtcbiAgc3RhdGljICBpbml0aWFsVXJsID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgLy8gR2V0IHRoZSBgUExBVEZPUk1fSURgIHNvIHdlIGNhbiBjaGVjayBpZiB3ZSdyZSBpbiBhIGJyb3dzZXIuXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRVFVRVNUKSBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3RcbiAgKSB7XG4gICAgdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG4gICAgU3NyQ29va2llU2VydmljZS5pbml0aWFsVXJsID0gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWUgUmVndWxhciBFeHByZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIENvb2tpZSBuYW1lXG4gICAqIEByZXR1cm5zIHByb3BlcnR5IFJlZ0V4cFxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBzdGF0aWMgZ2V0Q29va2llUmVnRXhwKG5hbWU6IHN0cmluZyk6IFJlZ0V4cCB7XG4gICAgY29uc3QgZXNjYXBlZE5hbWU6IHN0cmluZyA9IG5hbWUucmVwbGFjZSgvKFtcXFtcXF1cXHtcXH1cXChcXClcXHxcXD1cXDtcXCtcXD9cXCxcXC5cXCpcXF5cXCRdKS9naSwgJ1xcXFwkMScpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/Ol4nICsgZXNjYXBlZE5hbWUgKyAnfDtcXFxccyonICsgZXNjYXBlZE5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVuZW5jb2RlZCB2ZXJzaW9uIG9mIGFuIGVuY29kZWQgY29tcG9uZW50IG9mIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpLlxuICAgKlxuICAgKiBAcGFyYW0gZW5jb2RlZFVSSUNvbXBvbmVudCBBIHZhbHVlIHJlcHJlc2VudGluZyBhbiBlbmNvZGVkIFVSSSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSB1bmVuY29kZWQgdmVyc2lvbiBvZiBhbiBlbmNvZGVkIGNvbXBvbmVudCBvZiBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKS5cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc3RhdGljIHNhZmVEZWNvZGVVUklDb21wb25lbnQoZW5jb2RlZFVSSUNvbXBvbmVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkVVJJQ29tcG9uZW50KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHByb2JhYmx5IGl0IGlzIG5vdCB1cmkgZW5jb2RlZC4gcmV0dXJuIGFzIGlzXG4gICAgICByZXR1cm4gZW5jb2RlZFVSSUNvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGB0cnVlYCBpZiB7QGxpbmsgRG9jdW1lbnR9IGlzIGFjY2Vzc2libGUsIG90aGVyd2lzZSByZXR1cm4gYGZhbHNlYFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBDb29raWUgbmFtZVxuICAgKiBAcmV0dXJucyBib29sZWFuIC0gd2hldGhlciBjb29raWUgd2l0aCBzcGVjaWZpZWQgbmFtZSBleGlzdHNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgY2hlY2sobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICBjb25zdCByZWdFeHA6IFJlZ0V4cCA9IFNzckNvb2tpZVNlcnZpY2UuZ2V0Q29va2llUmVnRXhwKG5hbWUpO1xuICAgIHJldHVybiByZWdFeHAudGVzdCgodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llICA6IHRoaXMucmVxdWVzdD8uaGVhZGVycy5jb29raWUpID8/ICcnKTtcbiAgfVxuICBpc0RvY3VtZW50SXNBY2Nlc3NpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlIDtcbiAgfVxuIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQubG9jYXRpb24uaHJlZiA6IHRoaXMucmVxdWVzdD8udXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb29raWVzIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgQ29va2llIG5hbWVcbiAgICogQHJldHVybnMgcHJvcGVydHkgdmFsdWVcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY2hlY2sobmFtZSkpIHtcbiAgICAgIG5hbWUgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSk7XG5cbiAgICAgIGNvbnN0IHJlZ0V4cDogUmVnRXhwID0gU3NyQ29va2llU2VydmljZS5nZXRDb29raWVSZWdFeHAobmFtZSk7XG4gICAgICBjb25zdCByZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSB8YW55PSByZWdFeHAuZXhlYygodGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSA/IHRoaXMuZG9jdW1lbnQuY29va2llIDogdGhpcy5yZXF1ZXN0Py5oZWFkZXJzLmNvb2tpZSkgPz8gJycpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0WzFdID8gU3NyQ29va2llU2VydmljZS5zYWZlRGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGNvb2tpZXMgaW4gSlNPTiBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybnMgYWxsIHRoZSBjb29raWVzIGluIGpzb25cbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgZ2V0QWxsKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBjb25zdCBjb29raWVTdHJpbmc6IGFueSA9IHRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUgPyB0aGlzLmRvY3VtZW50Py5jb29raWUgOiB0aGlzLnJlcXVlc3Q/LmhlYWRlcnMuY29va2llO1xuXG4gICAgaWYgKGNvb2tpZVN0cmluZyAmJiBjb29raWVTdHJpbmcgIT09ICcnKSB7XG4gICAgICBjb29raWVTdHJpbmcuc3BsaXQoJzsnKS5mb3JFYWNoKChjdXJyZW50Q29va2llOmFueSkgPT4ge1xuICAgICAgICBjb25zdCBbY29va2llTmFtZSwgY29va2llVmFsdWVdID0gY3VycmVudENvb2tpZS5zcGxpdCgnPScpO1xuICAgICAgICBjb29raWVzW1NzckNvb2tpZVNlcnZpY2Uuc2FmZURlY29kZVVSSUNvbXBvbmVudChjb29raWVOYW1lLnJlcGxhY2UoL14gLywgJycpKV0gPSBTc3JDb29raWVTZXJ2aWNlLnNhZmVEZWNvZGVVUklDb21wb25lbnQoY29va2llVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb2tpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvb2tpZSBiYXNlZCBvbiBwcm92aWRlZCBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAgICAgQ29va2llIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlICAgIENvb2tpZSB2YWx1ZVxuICAgKiBAcGFyYW0gZXhwaXJlcyAgTnVtYmVyIG9mIGRheXMgdW50aWwgdGhlIGNvb2tpZXMgZXhwaXJlcyBvciBhbiBhY3R1YWwgYERhdGVgXG4gICAqIEBwYXJhbSBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBAcGFyYW0gZG9tYWluICAgQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlICAgU2VjdXJlIGZsYWdcbiAgICogQHBhcmFtIHNhbWVTaXRlIE9XQVNQIHNhbWUgc2l0ZSB0b2tlbiBgTGF4YCwgYE5vbmVgLCBvciBgU3RyaWN0YC4gRGVmYXVsdHMgdG8gYExheGBcbiAgICogQHBhcmFtIHBhcnRpdGlvbmVkIFBhcnRpdGlvbmVkIGZsYWdcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlLFxuICAgIHBhdGg/OiBzdHJpbmcsXG4gICAgZG9tYWluPzogc3RyaW5nLFxuICAgIHNlY3VyZT86IGJvb2xlYW4sXG4gICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnLFxuICAgIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTZXQgY29va2llIGJhc2VkIG9uIHByb3ZpZGVkIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIENvb2tpZSdzIHBhcmFtZXRlcnM6XG4gICAqIDxwcmU+XG4gICAqIGV4cGlyZXMgIE51bWJlciBvZiBkYXlzIHVudGlsIHRoZSBjb29raWVzIGV4cGlyZXMgb3IgYW4gYWN0dWFsIGBEYXRlYFxuICAgKiBwYXRoICAgICBDb29raWUgcGF0aFxuICAgKiBkb21haW4gICBDb29raWUgZG9tYWluXG4gICAqIHNlY3VyZSBDb29raWUgc2VjdXJlIGZsYWdcbiAgICogc2FtZVNpdGUgT1dBU1Agc2FtZSBzaXRlIHRva2VuIGBMYXhgLCBgTm9uZWAsIG9yIGBTdHJpY3RgLiBEZWZhdWx0cyB0byBgTGF4YFxuICAgKiA8L3ByZT5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICAgIENvb2tpZSBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSAgICBDb29raWUgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgIEJvZHkgd2l0aCBjb29raWUncyBwYXJhbXNcbiAgICpcbiAgICogQGF1dGhvcjogU3RlcGFuIFN1dm9yb3ZcbiAgICogQHNpbmNlOiAxLjAuMFxuICAgKi9cbiAgc2V0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBleHBpcmVzPzogbnVtYmVyIHwgRGF0ZTtcbiAgICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgICBkb21haW4/OiBzdHJpbmc7XG4gICAgICBzZWN1cmU/OiBib29sZWFuO1xuICAgICAgc2FtZVNpdGU/OiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnO1xuICAgICAgcGFydGl0aW9uZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgKTogdm9pZDtcblxuICBzZXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgZXhwaXJlc09yT3B0aW9ucz86IG51bWJlciB8IERhdGUgfCBhbnksXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBkb21haW4/OiBzdHJpbmcsXG4gICAgc2VjdXJlPzogYm9vbGVhbixcbiAgICBzYW1lU2l0ZT86ICdMYXgnIHwgJ05vbmUnIHwgJ1N0cmljdCcsXG4gICAgcGFydGl0aW9uZWQ/OiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudElzQWNjZXNzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZXhwaXJlc09yT3B0aW9ucyA9PT0gJ251bWJlcicgfHwgZXhwaXJlc09yT3B0aW9ucyBpbnN0YW5jZW9mIERhdGUgfHwgcGF0aCB8fCBkb21haW4gfHwgc2VjdXJlIHx8IHNhbWVTaXRlKSB7XG4gICAgICBjb25zdCBvcHRpb25zQm9keSA9IHtcbiAgICAgICAgZXhwaXJlczogZXhwaXJlc09yT3B0aW9ucyxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgZG9tYWluLFxuICAgICAgICBzZWN1cmUsXG4gICAgICAgIHNhbWVTaXRlOiBzYW1lU2l0ZSA/IHNhbWVTaXRlIDogJ0xheCcsXG4gICAgICAgIHBhcnRpdGlvbmVkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnNCb2R5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY29va2llU3RyaW5nOiBzdHJpbmcgPSBlbmNvZGVVUklDb21wb25lbnQobmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgJzsnO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGV4cGlyZXNPck9wdGlvbnMgPyBleHBpcmVzT3JPcHRpb25zIDoge307XG5cbiAgICBpZiAob3B0aW9ucy5leHBpcmVzKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZXhwaXJlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3QgZGF0ZUV4cGlyZXM6IERhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLmdldFRpbWUoKSArIG9wdGlvbnMuZXhwaXJlcyAqIDEwMDAgKiA2MCAqIDYwICogMjQpO1xuXG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgZGF0ZUV4cGlyZXMudG9VVENTdHJpbmcoKSArICc7JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvb2tpZVN0cmluZyArPSAnZXhwaXJlcz0nICsgb3B0aW9ucy5leHBpcmVzLnRvVVRDU3RyaW5nKCkgKyAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucGF0aCkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdwYXRoPScgKyBvcHRpb25zLnBhdGggKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZG9tYWluKSB7XG4gICAgICBjb29raWVTdHJpbmcgKz0gJ2RvbWFpbj0nICsgb3B0aW9ucy5kb21haW4gKyAnOyc7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2VjdXJlID09PSBmYWxzZSAmJiBvcHRpb25zLnNhbWVTaXRlID09PSAnTm9uZScpIHtcbiAgICAgIG9wdGlvbnMuc2VjdXJlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtuZ3gtY29va2llLXNlcnZpY2VdIENvb2tpZSAke25hbWV9IHdhcyBmb3JjZWQgd2l0aCBzZWN1cmUgZmxhZyBiZWNhdXNlIHNhbWVTaXRlPU5vbmUuYCArXG4gICAgICAgICAgYE1vcmUgZGV0YWlscyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZXJtZWlzdGVyL25neC1jb29raWUtc2VydmljZS9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTU5NzcyMDEzMGBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNlY3VyZSkge1xuICAgICAgY29va2llU3RyaW5nICs9ICdzZWN1cmU7JztcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuc2FtZVNpdGUpIHtcbiAgICAgIG9wdGlvbnMuc2FtZVNpdGUgPSAnTGF4JztcbiAgICB9XG5cbiAgICBjb29raWVTdHJpbmcgKz0gJ3NhbWVTaXRlPScgKyBvcHRpb25zLnNhbWVTaXRlICsgJzsnO1xuXG4gICAgaWYgKG9wdGlvbnMucGFydGl0aW9uZWQpIHtcbiAgICAgIGNvb2tpZVN0cmluZyArPSAnUGFydGl0aW9uZWQ7JztcbiAgICB9XG5cbiAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY29va2llIGJ5IG5hbWVcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgICBDb29raWUgbmFtZVxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIENvb2tpZSBzZWN1cmUgZmxhZ1xuICAgKiBAcGFyYW0gc2FtZVNpdGUgQ29va2llIHNhbWVTaXRlIGZsYWcgLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvU2V0LUNvb2tpZS9TYW1lU2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGUobmFtZTogc3RyaW5nLCBwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcsIHNlY3VyZT86IGJvb2xlYW4sIHNhbWVTaXRlOiAnTGF4JyB8ICdOb25lJyB8ICdTdHJpY3QnID0gJ0xheCcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG9jdW1lbnRJc0FjY2Vzc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZSgnVGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMSBHTVQnKTtcbiAgICB0aGlzLnNldChuYW1lLCAnJywgeyBleHBpcmVzOiBleHBpcmVzRGF0ZSwgcGF0aCwgZG9tYWluLCBzZWN1cmUsIHNhbWVTaXRlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgY29va2llc1xuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAgIENvb2tpZSBwYXRoXG4gICAqIEBwYXJhbSBkb21haW4gQ29va2llIGRvbWFpblxuICAgKiBAcGFyYW0gc2VjdXJlIElzIHRoZSBDb29raWUgc2VjdXJlXG4gICAqIEBwYXJhbSBzYW1lU2l0ZSBJcyB0aGUgY29va2llIHNhbWUgc2l0ZVxuICAgKlxuICAgKiBAYXV0aG9yOiBTdGVwYW4gU3V2b3JvdlxuICAgKiBAc2luY2U6IDEuMC4wXG4gICAqL1xuICBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nLCBzZWN1cmU/OiBib29sZWFuLCBzYW1lU2l0ZTogJ0xheCcgfCAnTm9uZScgfCAnU3RyaWN0JyA9ICdMYXgnKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50SXNBY2Nlc3NpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29va2llczogYW55ID0gdGhpcy5nZXRBbGwoKTtcblxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBpbiBjb29raWVzKSB7XG4gICAgICBpZiAoY29va2llcy5oYXNPd25Qcm9wZXJ0eShjb29raWVOYW1lKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZVNpdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport Swal from 'sweetalert2';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ngx-translate/core\";\nexport class SwalService {\n translate;\n defaultClass = {\n container: 'swal2-container'\n };\n constructor(translate) {\n this.translate = translate;\n }\n t(key) {\n return this.translate.instant(key);\n }\n /** رسالة تأكيد */\n confirm(title = this.t('Confirm.Title'), text = this.t('Confirm.Text'), confirmButtonText = this.t('Confirm.Yes'), cancelButtonText = this.t('Confirm.Cancel')) {\n return Swal.fire({\n icon: 'warning',\n title,\n text,\n showCancelButton: true,\n confirmButtonText,\n cancelButtonText,\n customClass: this.defaultClass\n });\n }\n /** رسالة نجاح */\n success(title, text, timer = 2000) {\n return Swal.fire({\n icon: 'success',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n }\n /** رسالة خطأ */\n error(title, text, footer) {\n return Swal.fire({\n icon: 'error',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n footer: footer ? this.t(footer) : undefined,\n customClass: this.defaultClass\n });\n }\n /** رسالة معلومات */\n info(title, text) {\n return Swal.fire({\n icon: 'info',\n title: this.t(title),\n text: text ? this.t(text) : undefined,\n customClass: this.defaultClass\n });\n }\n /** أي خيارات مخصصة */\n alert(options) {\n const translated = {\n ...options,\n title: options.title ? this.t(options.title) : undefined,\n text: options.text ? this.t(options.text) : undefined,\n footer: options.footer ? this.t(options.footer) : undefined,\n customClass: this.defaultClass\n };\n return Swal.fire(translated);\n }\n /** Toast */\n toast(title, icon = 'info', position = 'top-end', timer = 3000) {\n const Toast = Swal.mixin({\n toast: true,\n position,\n timer,\n showConfirmButton: false,\n customClass: this.defaultClass\n });\n Toast.fire({ icon, title: this.t(title) });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: SwalService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.TranslateService }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhbFNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL1N3YWxTZXJ2aWNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLElBSU4sTUFBTSxhQUFhLENBQUM7OztBQUdyQixNQUFNLE9BQU8sV0FBVztJQUtGO0lBSlosWUFBWSxHQUFHO1FBQ3JCLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQztJQUVGLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO0lBQUcsQ0FBQztJQUUzQyxDQUFDLENBQUMsR0FBVztRQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUNMLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFDN0IsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUUzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUs7WUFDTCxJQUFJO1lBQ0osZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixpQkFBaUI7WUFDakIsZ0JBQWdCO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJB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O0lBQzdDLENBQUM7dUdBdEdVLFdBQVc7MkdBQVgsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBTd2FsLCB7XG4gIFN3ZWV0QWxlcnRPcHRpb25zLFxuICBTd2VldEFsZXJ0UmVzdWx0LFxuICBTd2VldEFsZXJ0SWNvblxufSBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3dhbFNlcnZpY2Uge1xuICBwcml2YXRlIGRlZmF1bHRDbGFzcyA9IHtcbiAgICBjb250YWluZXI6ICdzd2FsMi1jb250YWluZXInXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHt9XG5cbiAgcHJpdmF0ZSB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xuICB9XG5cbiAgLyoqINix2LPYp9mE2Kkg2KrYo9mD2YrYryAqL1xuICBjb25maXJtKFxuICAgIHRpdGxlID0gdGhpcy50KCdDb25maXJtLlRpdGxlJyksXG4gICAgdGV4dCA9IHRoaXMudCgnQ29uZmlybS5UZXh0JyksXG4gICAgY29uZmlybUJ1dHRvblRleHQgPSB0aGlzLnQoJ0NvbmZpcm0uWWVzJyksXG4gICAgY2FuY2VsQnV0dG9uVGV4dCA9IHRoaXMudCgnQ29uZmlybS5DYW5jZWwnKVxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICd3YXJuaW5nJyxcbiAgICAgIHRpdGxlLFxuICAgICAgdGV4dCxcbiAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICBjb25maXJtQnV0dG9uVGV4dCxcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQsXG4gICAgICBjdXN0b21DbGFzczogdGhpcy5kZWZhdWx0Q2xhc3NcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiDYsdiz2KfZhNipINmG2KzYp9itICovXG4gIHN1Y2Nlc3MoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIHRpbWVyID0gMjAwMFxuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDYrti32KMgKi9cbiAgZXJyb3IoXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICB0ZXh0Pzogc3RyaW5nLFxuICAgIGZvb3Rlcj86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdlcnJvcicsXG4gICAgICB0aXRsZTogdGhpcy50KHRpdGxlKSxcbiAgICAgIHRleHQ6IHRleHQgPyB0aGlzLnQodGV4dCkgOiB1bmRlZmluZWQsXG4gICAgICBmb290ZXI6IGZvb3RlciA/IHRoaXMudChmb290ZXIpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gIH1cblxuICAvKiog2LHYs9in2YTYqSDZhdi52YTZiNmF2KfYqiAqL1xuICBpbmZvKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgdGV4dD86IHN0cmluZ1xuICApOiBQcm9taXNlPFN3ZWV0QWxlcnRSZXN1bHQ+IHtcbiAgICByZXR1cm4gU3dhbC5maXJlKHtcbiAgICAgIGljb246ICdpbmZvJyxcbiAgICAgIHRpdGxlOiB0aGlzLnQodGl0bGUpLFxuICAgICAgdGV4dDogdGV4dCA/IHRoaXMudCh0ZXh0KSA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbUNsYXNzOiB0aGlzLmRlZmF1bHRDbGFzc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqINij2Yog2K7Zitin2LHYp9iqINmF2K7Ytdi12KkgKi9cbiAgYWxlcnQoXG4gICAgb3B0aW9uczogU3dlZXRBbGVydE9wdGlvbnNcbiAgKTogUHJvbWlzZTxTd2VldEFsZXJ0UmVzdWx0PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlZDogU3dlZXRBbGVydE9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgPyB0aGlzLnQob3B0aW9ucy50aXRsZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgdGV4dDogb3B0aW9ucy50ZXh0ID8gdGhpcy50KG9wdGlvbnMudGV4dCBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgZm9vdGVyOiBvcHRpb25zLmZvb3RlciA/IHRoaXMudChvcHRpb25zLmZvb3RlciBhcyBzdHJpbmcpIDogdW5kZWZpbmVkLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfTtcbiAgICByZXR1cm4gU3dhbC5maXJlKHRyYW5zbGF0ZWQpO1xuICB9XG5cbiAgLyoqIFRvYXN0ICovXG4gIHRvYXN0KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgaWNvbjogU3dlZXRBbGVydEljb24gPSAnaW5mbycsXG4gICAgcG9zaXRpb246IFN3ZWV0QWxlcnRPcHRpb25zWydwb3NpdGlvbiddID0gJ3RvcC1lbmQnLFxuICAgIHRpbWVyID0gMzAwMFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBUb2FzdCA9IFN3YWwubWl4aW4oe1xuICAgICAgdG9hc3Q6IHRydWUsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHRpbWVyLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgY3VzdG9tQ2xhc3M6IHRoaXMuZGVmYXVsdENsYXNzXG4gICAgfSk7XG4gICAgVG9hc3QuZmlyZSh7IGljb24sIHRpdGxlOiB0aGlzLnQodGl0bGUpIH0pO1xuICB9XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class PermissionsService {\n _permissions$ = new BehaviorSubject(new Set());\n // Load permissions (e.g., from API or token claims)\n setPermissions(permissions) {\n this._permissions$.next(new Set(permissions));\n }\n getPermissions() {\n return Array.from(this._permissions$.value);\n }\n // Synchronous check\n isGranted(permissionName) {\n return this._permissions$.value.has(permissionName);\n }\n // Async check (optional if needed for guards or effects)\n isGrantedAsync(permissionName) {\n return new Promise(resolve => {\n resolve(this.isGranted(permissionName));\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: PermissionsService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUd2QyxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFcEUsb0RBQW9EO0lBQ3BELGNBQWMsQ0FBQyxXQUFxQjtRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixTQUFTLENBQUMsY0FBc0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCxjQUFjLENBQUMsY0FBc0I7UUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt1R0F0QlUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9wZXJtaXNzaW9ucyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xyXG5cclxuICAvLyBMb2FkIHBlcm1pc3Npb25zIChlLmcuLCBmcm9tIEFQSSBvciB0b2tlbiBjbGFpbXMpXHJcbiAgc2V0UGVybWlzc2lvbnMocGVybWlzc2lvbnM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLl9wZXJtaXNzaW9ucyQubmV4dChuZXcgU2V0KHBlcm1pc3Npb25zKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9wZXJtaXNzaW9ucyQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gU3luY2hyb25vdXMgY2hlY2tcclxuICBpc0dyYW50ZWQocGVybWlzc2lvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zJC52YWx1ZS5oYXMocGVybWlzc2lvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXN5bmMgY2hlY2sgKG9wdGlvbmFsIGlmIG5lZWRlZCBmb3IgZ3VhcmRzIG9yIGVmZmVjdHMpXHJcbiAgaXNHcmFudGVkQXN5bmMocGVybWlzc2lvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICByZXNvbHZlKHRoaXMuaXNHcmFudGVkKHBlcm1pc3Npb25OYW1lKSk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19","import { inject, Injectable } from '@angular/core';\nimport { Router, RouterStateSnapshot } from '@angular/router';\nimport { PermissionsService } from './permissions.service';\nimport { DEFAULT_REDIRECT_KEY } from '@elite.framework/ng.core/models';\nimport { isFunction, isPlainObject, transformStringToArray } from '@elite.framework/ng.core/utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"./permissions.service\";\nimport * as i2 from \"@angular/router\";\nexport const ngxPermissionsGuard = (route, state) => {\n const guard = inject(NgxPermissionsGuard);\n if (state instanceof RouterStateSnapshot) {\n return guard.hasPermissions(route, state);\n }\n return guard.hasPermissions(route);\n};\nexport class NgxPermissionsGuard {\n permissions;\n router;\n constructor(permissions, router) {\n this.permissions = permissions;\n this.router = router;\n }\n canActivate(route, state) {\n return this.hasPermissions(route, state);\n }\n canActivateChild(route, state) {\n return this.hasPermissions(route, state);\n }\n canLoad(route) {\n return this.hasPermissions(route);\n }\n canMatch(route) {\n return this.hasPermissions(route);\n }\n async hasPermissions(route, state) {\n const data = route.data?.['permissions'];\n const only = [];\n const except = [];\n if (data?.only) {\n if (isFunction(data.only)) {\n const result = data.only(route, state);\n only.push(...transformStringToArray(result));\n }\n else {\n only.push(...transformStringToArray(data.only));\n }\n }\n if (data?.except) {\n if (isFunction(data.except)) {\n const result = data.except(route, state);\n except.push(...transformStringToArray(result));\n }\n else {\n except.push(...transformStringToArray(data.except));\n }\n }\n const permissions = {\n only,\n except,\n redirectTo: data?.redirectTo\n };\n // --- rest of the guard logic ---\n // EXCEPT check\n if (permissions.except?.length) {\n for (const perm of permissions.except) {\n if (await this.permissions.isGrantedAsync(perm)) {\n this.handleRedirect(permissions, perm, route, state);\n return false;\n }\n }\n }\n // ONLY check\n if (permissions.only?.length) {\n for (const perm of permissions.only) {\n if (await this.permissions.isGrantedAsync(perm)) {\n return true;\n }\n }\n this.handleRedirect(permissions, permissions.only[0], route, state);\n return false;\n }\n return true;\n }\n handleRedirect(permissions, failedPermission, route, state) {\n const redirectTo = permissions.redirectTo;\n if (!redirectTo)\n return;\n // If redirectTo is a function\n const resolvedRedirect = isFunction(redirectTo)\n ? redirectTo(failedPermission, route, state)\n : redirectTo;\n if (typeof resolvedRedirect === 'string') {\n this.router.navigate([resolvedRedirect]); // wrap string in array\n }\n else if (Array.isArray(resolvedRedirect)) {\n this.router.navigate(resolvedRedirect); // array is fine\n }\n else if (isPlainObject(resolvedRedirect)) {\n // Object: check for failedPermission key first\n const target = resolvedRedirect[failedPermission] ?? resolvedRedirect[DEFAULT_REDIRECT_KEY];\n if (target) {\n if (typeof target === 'string') {\n this.router.navigate([target]);\n }\n else if (Array.isArray(target)) {\n this.router.navigate(target);\n }\n else if (isFunction(target)) {\n this.router.navigate([target(failedPermission, route, state)]);\n }\n }\n }\n else {\n console.warn('Unknown redirect type', resolvedRedirect);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, deps: [{ token: i1.PermissionsService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: NgxPermissionsGuard, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: i1.PermissionsService }, { type: i2.Router }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL3Blcm1pc3Npb25zLWd1YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQU1MLE1BQU0sRUFDTixtQkFBbUIsRUFFcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUl6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQXdFLE1BQU0saUNBQWlDLENBQUM7QUFDN0ksT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7OztBQVFuRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBb0QsQ0FDbEYsS0FBcUMsRUFDckMsS0FBeUMsRUFDekMsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFDLElBQUksS0FBSyxZQUFZLG1CQUFtQixFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUdGLE1BQU0sT0FBTyxtQkFBbUI7SUFFcEI7SUFDQTtJQUZWLFlBQ1UsV0FBK0IsRUFDL0IsTUFBYztRQURkLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ3JCLENBQUM7SUFFSixXQUFXLENBQUMsS0FBNkIsRUFBRSxLQUEwQjtRQUNuRSxPQUFPLElBQUks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akMsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQWUsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzt1R0FySFksbUJBQW1COzJHQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgQ2FuQWN0aXZhdGVDaGlsZEZuLFxyXG4gIENhbkFjdGl2YXRlRm4sXHJcbiAgQ2FuTWF0Y2hGbixcclxuICBSb3V0ZSxcclxuICBSb3V0ZXIsXHJcbiAgUm91dGVyU3RhdGVTbmFwc2hvdCxcclxuICBVcmxTZWdtZW50XHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuXHJcbmltcG9ydCB7IFBlcm1pc3Npb25zU2VydmljZSB9IGZyb20gJy4vcGVybWlzc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfUkVESVJFQ1RfS0VZLCBFeGNlcHRGbiwgTmd4UGVybWlzc2lvbnNSb3V0ZXJEYXRhLCBPbmx5Rm4sIFJlZGlyZWN0VG8sIFJlZGlyZWN0VG9GbiB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1BsYWluT2JqZWN0LCB0cmFuc2Zvcm1TdHJpbmdUb0FycmF5IH0gZnJvbSAnQGVsaXRlLmZyYW1ld29yay9uZy5jb3JlL3V0aWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmd4UGVybWlzc2lvbnNEYXRhIHtcclxuICBvbmx5Pzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgZXhjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgcmVkaXJlY3RUbz86IFJlZGlyZWN0VG8gfCBSZWRpcmVjdFRvRm4gfCBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZ3hQZXJtaXNzaW9uc0d1YXJkOiBDYW5BY3RpdmF0ZUZuIHwgQ2FuQWN0aXZhdGVDaGlsZEZuIHwgQ2FuTWF0Y2hGbiA9IChcclxuICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IFJvdXRlLFxyXG4gIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90IHwgVXJsU2VnbWVudFtdXHJcbikgPT4ge1xyXG4gIGNvbnN0IGd1YXJkID0gaW5qZWN0KE5neFBlcm1pc3Npb25zR3VhcmQpO1xyXG4gIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgIHJldHVybiBndWFyZC5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuICByZXR1cm4gZ3VhcmQuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG59O1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE5neFBlcm1pc3Npb25zR3VhcmQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge31cclxuXHJcbiAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuQWN0aXZhdGVDaGlsZChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1Blcm1pc3Npb25zKHJvdXRlLCBzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICBjYW5Mb2FkKHJvdXRlOiBSb3V0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzUGVybWlzc2lvbnMocm91dGUpO1xyXG4gIH1cclxuXHJcbiAgY2FuTWF0Y2gocm91dGU6IFJvdXRlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNQZXJtaXNzaW9ucyhyb3V0ZSk7XHJcbiAgfVxyXG5cclxuYXN5bmMgaGFzUGVybWlzc2lvbnMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBSb3V0ZSwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgY29uc3QgZGF0YSA9IHJvdXRlLmRhdGE/LlsncGVybWlzc2lvbnMnXSBhcyBOZ3hQZXJtaXNzaW9uc1JvdXRlckRhdGEgfCB1bmRlZmluZWQ7XHJcbiAgY29uc3Qgb25seTogc3RyaW5nW10gPSBbXTtcclxuICBjb25zdCBleGNlcHQ6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGlmIChkYXRhPy5vbmx5KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbjxPbmx5Rm4+KGRhdGEub25seSkpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5vbmx5KHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgIG9ubHkucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KHJlc3VsdCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb25seS5wdXNoKC4uLnRyYW5zZm9ybVN0cmluZ1RvQXJyYXkoZGF0YS5vbmx5KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAoZGF0YT8uZXhjZXB0KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbjxFeGNlcHRGbj4oZGF0YS5leGNlcHQpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuZXhjZXB0KHJvdXRlLCBzdGF0ZSk7XHJcbiAgICAgIGV4Y2VwdC5wdXNoKC4uLnRyYW5zZm9ybVN0cmluZ1RvQXJyYXkocmVzdWx0KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGNlcHQucHVzaCguLi50cmFuc2Zvcm1TdHJpbmdUb0FycmF5KGRhdGEuZXhjZXB0KSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdCBwZXJtaXNzaW9uczogTmd4UGVybWlzc2lvbnNEYXRhID0ge1xyXG4gICAgb25seSxcclxuICAgIGV4Y2VwdCxcclxuICAgIHJlZGlyZWN0VG86IGRhdGE/LnJlZGlyZWN0VG9cclxuICB9O1xyXG5cclxuICAvLyAtLS0gcmVzdCBvZiB0aGUgZ3VhcmQgbG9naWMgLS0tXHJcbiAgLy8gRVhDRVBUIGNoZWNrXHJcbiAgaWYgKHBlcm1pc3Npb25zLmV4Y2VwdD8ubGVuZ3RoKSB7XHJcbiAgICBmb3IgKGNvbnN0IHBlcm0gb2YgcGVybWlzc2lvbnMuZXhjZXB0KSB7XHJcbiAgICAgIGlmIChhd2FpdCB0aGlzLnBlcm1pc3Npb25zLmlzR3JhbnRlZEFzeW5jKHBlcm0pKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVSZWRpcmVjdChwZXJtaXNzaW9ucywgcGVybSwgcm91dGUsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE9OTFkgY2hlY2tcclxuICBpZiAocGVybWlzc2lvbnMub25seT8ubGVuZ3RoKSB7XHJcbiAgICBmb3IgKGNvbnN0IHBlcm0gb2YgcGVybWlzc2lvbnMub25seSkge1xyXG4gICAgICBpZiAoYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5pc0dyYW50ZWRBc3luYyhwZXJtKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZVJlZGlyZWN0KHBlcm1pc3Npb25zLCBwZXJtaXNzaW9ucy5vbmx5WzBdLCByb3V0ZSwgc3RhdGUpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcblxyXG5wcml2YXRlIGhhbmRsZVJlZGlyZWN0KFxyXG4gIHBlcm1pc3Npb25zOiBOZ3hQZXJtaXNzaW9uc0RhdGEsXHJcbiAgZmFpbGVkUGVybWlzc2lvbjogc3RyaW5nLFxyXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgUm91dGUsXHJcbiAgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90XHJcbikge1xyXG4gIGNvbnN0IHJlZGlyZWN0VG8gPSBwZXJtaXNzaW9ucy5yZWRpcmVjdFRvO1xyXG5cclxuICBpZiAoIXJlZGlyZWN0VG8pIHJldHVybjtcclxuXHJcbiAgLy8gSWYgcmVkaXJlY3RUbyBpcyBhIGZ1bmN0aW9uXHJcbiAgY29uc3QgcmVzb2x2ZWRSZWRpcmVjdCA9XHJcbiAgICBpc0Z1bmN0aW9uPFJlZGlyZWN0VG9Gbj4ocmVkaXJlY3RUbylcclxuICAgICAgPyByZWRpcmVjdFRvKGZhaWxlZFBlcm1pc3Npb24sIHJvdXRlLCBzdGF0ZSlcclxuICAgICAgOiByZWRpcmVjdFRvO1xyXG5cclxuICBpZiAodHlwZW9mIHJlc29sdmVkUmVkaXJlY3QgPT09ICdzdHJpbmcnKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcmVzb2x2ZWRSZWRpcmVjdF0pOyAvLyB3cmFwIHN0cmluZyBpbiBhcnJheVxyXG4gIH1cclxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc29sdmVkUmVkaXJlY3QpKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShyZXNvbHZlZFJlZGlyZWN0KTsgLy8gYXJyYXkgaXMgZmluZVxyXG4gIH1cclxuICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHJlc29sdmVkUmVkaXJlY3QpKSB7XHJcbiAgICAvLyBPYmplY3Q6IGNoZWNrIGZvciBmYWlsZWRQZXJtaXNzaW9uIGtleSBmaXJzdFxyXG4gICAgY29uc3QgdGFyZ2V0ID1cclxuICAgICAgcmVzb2x2ZWRSZWRpcmVjdFtmYWlsZWRQZXJtaXNzaW9uXSA/PyByZXNvbHZlZFJlZGlyZWN0W0RFRkFVTFRfUkVESVJFQ1RfS0VZXTtcclxuXHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0YXJnZXRdKTtcclxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZSh0YXJnZXQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb248UmVkaXJlY3RUb0ZuPih0YXJnZXQpKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldChmYWlsZWRQZXJtaXNzaW9uLCByb3V0ZSwgc3RhdGUpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZWxzZSB7XHJcbiAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gcmVkaXJlY3QgdHlwZScsIHJlc29sdmVkUmVkaXJlY3QpO1xyXG4gIH1cclxufVxyXG5cclxufVxyXG4iXX0=","// logger.interface.ts\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"OFF\"] = 4] = \"OFF\";\n})(LogLevel || (LogLevel = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmcuY29yZS9zZXJ2aWNlcy9zcmMvbGliL2xvZ2dlci5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBTixJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIseUNBQVMsQ0FBQTtJQUNULHVDQUFRLENBQUE7SUFDUix1Q0FBUSxDQUFBO0lBQ1IseUNBQVMsQ0FBQTtJQUNULHFDQUFPLENBQUE7QUFDVCxDQUFDLEVBTlcsUUFBUSxLQUFSLFFBQVEsUUFNbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuaW50ZXJmYWNlLnRzXHJcbmV4cG9ydCBlbnVtIExvZ0xldmVsIHtcclxuICBERUJVRyA9IDAsXHJcbiAgSU5GTyA9IDEsXHJcbiAgV0FSTiA9IDIsXHJcbiAgRVJST1IgPSAzLFxyXG4gIE9GRiA9IDRcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyU2VydmljZSB7XHJcbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcclxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xyXG4gIHNldExvZ0xldmVsKGxldmVsOiBMb2dMZXZlbCk6IHZvaWQ7XHJcbn1cclxuIl19","// logger.service.ts\nimport { Injectable, Inject, Optional } from '@angular/core';\nimport { LogLevel } from './logger.interface';\nimport { ENVIRONMENT } from '@elite.framework/ng.core/tokens';\nimport * as i0 from \"@angular/core\";\n// Remove the separate LoggerConfig interface since we're using EnvironmentConfig\n// and extend EnvironmentConfig to include logger-specific properties\nexport class LoggerService {\n environment;\n level = LogLevel.DEBUG;\n enableConsole = true;\n prefix = '[App]';\n timestamp = true;\n constructor(environment) {\n this.environment = environment;\n // Use environment configuration if provided\n if (this.environment) {\n this.configureFromEnvironment(this.environment);\n }\n // Fallback: In production, default to WARN level\n if (typeof window !== 'undefined' && window.location.hostname !== 'localhost') {\n this.level = LogLevel.WARN;\n this.enableConsole = false;\n }\n }\n configureFromEnvironment(env) {\n // Map string log levels from environment to LogLevel enum\n this.level = this.mapLogLevel(env.logLevel);\n // Use production flag to determine console logging\n this.enableConsole = !env.production;\n // Set prefix from environment if available\n this.prefix = `[${env['appName'] || 'App'}]`;\n // Enable timestamp in development, disable in production for performance\n this.timestamp = !env.production;\n }\n mapLogLevel(level) {\n switch (level) {\n case 'debug': return LogLevel.DEBUG;\n case 'info': return LogLevel.INFO;\n case 'warn': return LogLevel.WARN;\n case 'error': return LogLevel.ERROR;\n case 'off': return LogLevel.OFF;\n default: return LogLevel.WARN;\n }\n }\n debug(message, ...args) {\n if (this.shouldLog(LogLevel.DEBUG)) {\n this.log('DEBUG', message, args, 'color: blue');\n }\n }\n info(message, ...args) {\n if (this.shouldLog(LogLevel.INFO)) {\n this.log('INFO', message, args, 'color: green');\n }\n }\n warn(message, ...args) {\n if (this.shouldLog(LogLevel.WARN)) {\n this.log('WARN', message, args, 'color: orange');\n }\n }\n error(message, ...args) {\n if (this.shouldLog(LogLevel.ERROR)) {\n this.log('ERROR', message, args, 'color: red');\n // Send to external services only for errors in production\n if (this.environment?.production) {\n this.sendToExternalService('ERROR', message, args);\n }\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n shouldLog(level) {\n return level >= this.level && this.enableConsole;\n }\n log(level, message, args, style) {\n if (!this.enableConsole)\n return;\n const timestamp = this.timestamp ? new Date().toISOString() : '';\n const formattedPrefix = this.prefix ? `${this.prefix}` : '';\n const logMessage = `${timestamp} ${formattedPrefix} [${level}] ${message}`;\n if (args.length > 0) {\n console.log(`%c${logMessage}`, style, ...args);\n }\n else {\n console.log(`%c${logMessage}`, style);\n }\n }\n sendToExternalService(level, message, args) {\n // Integrate with external logging services from environment\n try {\n const sentryUrl = this.environment?.externalServices?.['sentry'];\n const logRocketUrl = this.environment?.externalServices?.['logRocket'];\n // Example: Send to configured external services\n if (sentryUrl) {\n // this.sendToSentry(level, message, args);\n }\n if (logRocketUrl) {\n // this.sendToLogRocket(level, message, args);\n }\n // Send to backend if apiUrl is available\n if (this.environment?.apiUrl) {\n // this.http.post(`${this.environment.apiUrl}/logs`, {\n // level, message, args, timestamp: new Date()\n // }).subscribe();\n }\n }\n catch (error) {\n // Don't use this.error here to avoid infinite loops\n console.error('Failed to send log to external service:', error);\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, deps: [{ token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: LoggerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ENVIRONMENT]\n }] }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9sb2dnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBa0IsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFakYsaUZBQWlGO0FBQ2pGLHFFQUFxRTtBQUtyRSxNQUFNLE9BQU8sYUFBYTtJQU02QjtJQUw3QyxLQUFLLEdBQWEsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNqQyxhQUFhLEdBQVksSUFBSSxDQUFDO0lBQzlCLE1BQU0sR0FBVyxPQUFPLENBQUM7SUFDekIsU0FBUyxHQUFZLElBQUksQ0FBQztJQUVsQyxZQUFxRCxXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbEYsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5RSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxHQUFzQjtRQUNyRCwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLEtBQUss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QkFBa0I7WUFDcEIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysb0RBQW9EO1lBQ3BELE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7dUdBekhVLGFBQWEsa0JBTVEsV0FBVzsyR0FOaEMsYUFBYSxjQUZaLE1BQU07OzJGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBsb2dnZXIuc2VydmljZS50c1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElMb2dnZXJTZXJ2aWNlLCBMb2dMZXZlbCB9IGZyb20gJy4vbG9nZ2VyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEVOVklST05NRU5ULCBFbnZpcm9ubWVudENvbmZpZyB9IGZyb20gJ0BlbGl0ZS5mcmFtZXdvcmsvbmcuY29yZS90b2tlbnMnO1xyXG5cclxuLy8gUmVtb3ZlIHRoZSBzZXBhcmF0ZSBMb2dnZXJDb25maWcgaW50ZXJmYWNlIHNpbmNlIHdlJ3JlIHVzaW5nIEVudmlyb25tZW50Q29uZmlnXHJcbi8vIGFuZCBleHRlbmQgRW52aXJvbm1lbnRDb25maWcgdG8gaW5jbHVkZSBsb2dnZXItc3BlY2lmaWMgcHJvcGVydGllc1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyU2VydmljZSBpbXBsZW1lbnRzIElMb2dnZXJTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxldmVsOiBMb2dMZXZlbCA9IExvZ0xldmVsLkRFQlVHO1xyXG4gIHByaXZhdGUgZW5hYmxlQ29uc29sZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBwcmVmaXg6IHN0cmluZyA9ICdbQXBwXSc7XHJcbiAgcHJpdmF0ZSB0aW1lc3RhbXA6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEVOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50PzogRW52aXJvbm1lbnRDb25maWcpIHtcclxuICAgIC8vIFVzZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXHJcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogSW4gcHJvZHVjdGlvbiwgZGVmYXVsdCB0byBXQVJOIGxldmVsXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSAnbG9jYWxob3N0Jykge1xyXG4gICAgICB0aGlzLmxldmVsID0gTG9nTGV2ZWwuV0FSTjtcclxuICAgICAgdGhpcy5lbmFibGVDb25zb2xlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUZyb21FbnZpcm9ubWVudChlbnY6IEVudmlyb25tZW50Q29uZmlnKTogdm9pZCB7XHJcbiAgICAvLyBNYXAgc3RyaW5nIGxvZyBsZXZlbHMgZnJvbSBlbnZpcm9ubWVudCB0byBMb2dMZXZlbCBlbnVtXHJcbiAgICB0aGlzLmxldmVsID0gdGhpcy5tYXBMb2dMZXZlbChlbnYubG9nTGV2ZWwpO1xyXG5cclxuICAgIC8vIFVzZSBwcm9kdWN0aW9uIGZsYWcgdG8gZGV0ZXJtaW5lIGNvbnNvbGUgbG9nZ2luZ1xyXG4gICAgdGhpcy5lbmFibGVDb25zb2xlID0gIWVudi5wcm9kdWN0aW9uO1xyXG5cclxuICAgIC8vIFNldCBwcmVmaXggZnJvbSBlbnZpcm9ubWVudCBpZiBhdmFpbGFibGVcclxuICAgIHRoaXMucHJlZml4ID0gYFske2VudlsnYXBwTmFtZSddIHx8ICdBcHAnfV1gO1xyXG5cclxuICAgIC8vIEVuYWJsZSB0aW1lc3RhbXAgaW4gZGV2ZWxvcG1lbnQsIGRpc2FibGUgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZm9ybWFuY2VcclxuICAgIHRoaXMudGltZXN0YW1wID0gIWVudi5wcm9kdWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXBMb2dMZXZlbChsZXZlbDogc3RyaW5nKTogTG9nTGV2ZWwge1xyXG4gICAgc3dpdGNoIChsZXZlbCkge1xyXG4gICAgICBjYXNlICdkZWJ1Zyc6IHJldHVybiBMb2dMZXZlbC5ERUJVRztcclxuICAgICAgY2FzZSAnaW5mbyc6IHJldHVybiBMb2dMZXZlbC5JTkZPO1xyXG4gICAgICBjYXNlICd3YXJuJzogcmV0dXJuIExvZ0xldmVsLldBUk47XHJcbiAgICAgIGNhc2UgJ2Vycm9yJzogcmV0dXJuIExvZ0xldmVsLkVSUk9SO1xyXG4gICAgICBjYXNlICdvZmYnOiByZXR1cm4gTG9nTGV2ZWwuT0ZGO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gTG9nTGV2ZWwuV0FSTjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5ERUJVRykpIHtcclxuICAgICAgdGhpcy5sb2coJ0RFQlVHJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBibHVlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5JTkZPKSkge1xyXG4gICAgICB0aGlzLmxvZygnSU5GTycsIG1lc3NhZ2UsIGFyZ3MsICdjb2xvcjogZ3JlZW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2hvdWxkTG9nKExvZ0xldmVsLldBUk4pKSB7XHJcbiAgICAgIHRoaXMubG9nKCdXQVJOJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiBvcmFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNob3VsZExvZyhMb2dMZXZlbC5FUlJPUikpIHtcclxuICAgICAgdGhpcy5sb2coJ0VSUk9SJywgbWVzc2FnZSwgYXJncywgJ2NvbG9yOiByZWQnKTtcclxuXHJcbiAgICAgIC8vIFNlbmQgdG8gZXh0ZXJuYWwgc2VydmljZXMgb25seSBmb3IgZXJyb3JzIGluIHByb2R1Y3Rpb25cclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LnByb2R1Y3Rpb24pIHtcclxuICAgICAgICB0aGlzLnNlbmRUb0V4dGVybmFsU2VydmljZSgnRVJST1InLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TG9nTGV2ZWwobGV2ZWw6IExvZ0xldmVsKTogdm9pZCB7XHJcbiAgICB0aGlzLmxldmVsID0gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNob3VsZExvZyhsZXZlbDogTG9nTGV2ZWwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsZXZlbCA+PSB0aGlzLmxldmVsICYmIHRoaXMuZW5hYmxlQ29uc29sZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9nKGxldmVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgYXJnczogYW55W10sIHN0eWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbmFibGVDb25zb2xlKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy50aW1lc3RhbXAgPyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgOiAnJztcclxuICAgIGNvbnN0IGZvcm1hdHRlZFByZWZpeCA9IHRoaXMucHJlZml4ID8gYCR7dGhpcy5wcmVmaXh9YCA6ICcnO1xyXG5cclxuICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgJHt0aW1lc3RhbXB9ICR7Zm9ybWF0dGVkUHJlZml4fSBbJHtsZXZlbH1dICR7bWVzc2FnZX1gO1xyXG5cclxuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5sb2coYCVjJHtsb2dNZXNzYWdlfWAsIHN0eWxlLCAuLi5hcmdzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGAlYyR7bG9nTWVzc2FnZX1gLCBzdHlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRUb0V4dGVybmFsU2VydmljZShsZXZlbDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGFyZ3M6IGFueVtdKTogdm9pZCB7XHJcbiAgICAvLyBJbnRlZ3JhdGUgd2l0aCBleHRlcm5hbCBsb2dnaW5nIHNlcnZpY2VzIGZyb20gZW52aXJvbm1lbnRcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHNlbnRyeVVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/Llsnc2VudHJ5J107XHJcbiAgICAgIGNvbnN0IGxvZ1JvY2tldFVybCA9IHRoaXMuZW52aXJvbm1lbnQ/LmV4dGVybmFsU2VydmljZXM/LlsnbG9nUm9ja2V0J107XHJcblxyXG4gICAgICAvLyBFeGFtcGxlOiBTZW5kIHRvIGNvbmZpZ3VyZWQgZXh0ZXJuYWwgc2VydmljZXNcclxuICAgICAgaWYgKHNlbnRyeVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvU2VudHJ5KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGxvZ1JvY2tldFVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuc2VuZFRvTG9nUm9ja2V0KGxldmVsLCBtZXNzYWdlLCBhcmdzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2VuZCB0byBiYWNrZW5kIGlmIGFwaVVybCBpcyBhdmFpbGFibGVcclxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQ/LmFwaVVybCkge1xyXG4gICAgICAgIC8vIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVXJsfS9sb2dzYCwge1xyXG4gICAgICAgIC8vICAgbGV2ZWwsIG1lc3NhZ2UsIGFyZ3MsIHRpbWVzdGFtcDogbmV3IERhdGUoKVxyXG4gICAgICAgIC8vIH0pLnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvLyBEb24ndCB1c2UgdGhpcy5lcnJvciBoZXJlIHRvIGF2b2lkIGluZmluaXRlIGxvb3BzXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZW5kIGxvZyB0byBleHRlcm5hbCBzZXJ2aWNlOicsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class IdParserService {\n /**\n * Extract IDs from a model based on comma-separated field names.\n * Example: \"id,biId\" => [model.id, model.biId]\n */\n parseIds(model, idField) {\n if (!idField)\n return null;\n const fields = idField.split(',').map(f => f.trim()).filter(Boolean);\n if (fields.length === 1) {\n return model[fields[0]];\n }\n return fields.map(f => model[f]);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.8\", ngImport: i0, type: IdParserService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtcGFyc2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2xpYi9pZC1wYXJzZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWU7UUFDbEMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUUxQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7dUdBZlUsZUFBZTsyR0FBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIElkUGFyc2VyU2VydmljZSB7XHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBJRHMgZnJvbSBhIG1vZGVsIGJhc2VkIG9uIGNvbW1hLXNlcGFyYXRlZCBmaWVsZCBuYW1lcy5cclxuICAgKiBFeGFtcGxlOiBcImlkLGJpSWRcIiA9PiBbbW9kZWwuaWQsIG1vZGVsLmJpSWRdXHJcbiAgICovXHJcbiAgcGFyc2VJZHMobW9kZWw6IGFueSwgaWRGaWVsZDogc3RyaW5nKTogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSB8IGFueSB7XHJcbiAgICBpZiAoIWlkRmllbGQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZpZWxkcyA9IGlkRmllbGQuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xyXG5cclxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBtb2RlbFtmaWVsZHNbMF1dO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaWVsZHMubWFwKGYgPT4gbW9kZWxbZl0pO1xyXG4gIH1cclxufVxyXG4iXX0=","export class QueryParser {\n static parse(queryString) {\n const params = {\n filters: [],\n orderBy: [],\n groupBy: [],\n select: [],\n aggregates: []\n };\n if (!queryString)\n return params;\n const queryParts = queryString.split('&');\n for (const part of queryParts) {\n if (part.startsWith('$filter=')) {\n this.parseFilter(part.substring('$filter='.length), params);\n }\n else if (part.startsWith('$orderby=')) {\n this.parseOrderBy(part.substring('$orderby='.length), params);\n }\n else if (part.startsWith('$groupby=')) {\n this.parseGroupBy(part.substring('$groupby='.length), params);\n }\n else if (part.startsWith('$select=')) {\n this.parseSelect(part.substring('$select='.length), params);\n }\n else if (part.startsWith('$aggregate=')) {\n this.parseAggregate(part.substring('$aggregate='.length), params);\n }\n else if (part.startsWith('$top=')) {\n params.top = Number(part.substring('$top='.length));\n }\n else if (part.startsWith('$skip=')) {\n params.skip = Number(part.substring('$skip='.length));\n }\n else if (part.startsWith('$expand=')) {\n params.expand = part.substring('$expand='.length).split(',').map(f => f.trim());\n }\n else if (part.startsWith('$count=')) {\n params.includeCount = part.substring('$count='.length).toLowerCase() === 'true';\n }\n }\n return params;\n }\n static toString(params) {\n const parts = [];\n if (params.filters?.length) {\n const filterStr = this.buildFilterString(params.filters);\n parts.push(`$filter=${encodeURIComponent(filterStr)}`);\n }\n if (params.orderBy?.length) {\n const orderByStr = params.orderBy.map(o => `${o.field} ${o.direction}`).join(',');\n parts.push(`$orderby=${encodeURIComponent(orderByStr)}`);\n }\n if (params.groupBy?.length) {\n const groupByStr = this.buildGroupByString(params.groupBy);\n parts.push(`$groupby=${encodeURIComponent(groupByStr)}`);\n }\n if (params.select?.length) {\n const selectStr = this.buildSelectString(params.select);\n parts.push(`$select=${encodeURIComponent(selectStr)}`);\n }\n if (params.aggregates?.length) {\n const aggregateStr = this.buildAggregateString(params.aggregates);\n parts.push(`$aggregate=${encodeURIComponent(aggregateStr)}`);\n }\n if (params.top !== undefined) {\n parts.push(`$top=${params.top}`);\n }\n if (params.skip !== undefined) {\n parts.push(`$skip=${params.skip}`);\n }\n if (params.expand?.length) {\n parts.push(`$expand=${encodeURIComponent(params.expand.join(','))}`);\n }\n if (params.includeCount !== undefined) {\n parts.push(`$count=${params.includeCount}`);\n }\n return parts.join('&');\n }\n static buildFilterString(filters) {\n return filters.map((group, index) => {\n const groupStr = group.conditions\n .map(condition => {\n let val = condition.value;\n if (typeof val === 'string') {\n val = `'${val.replace(/'/g, \"''\")}'`;\n }\n else if (typeof val === 'boolean') {\n val = val ? 'true' : 'false';\n }\n return `${condition.field} ${condition.operator} ${val}`;\n })\n .join(` ${group.logicalOperator} `);\n // For the first group, no groupLogicalOperator is needed\n if (index === 0) {\n return group.conditions.length > 1 ? `(${groupStr})` : groupStr;\n }\n else {\n const joinOp = group.groupLogicalOperator || 'and';\n return group.conditions.length > 1 ? `${joinOp} (${groupStr})` : `${joinOp} ${groupStr}`;\n }\n }).join(' ');\n }\n static buildGroupByString(groupBy) {\n return groupBy\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(group => {\n let groupStr = group.propertyName;\n // Add display name if provided\n if (group.displayName) {\n groupStr += ` as ${group.displayName}`;\n }\n // Add metadata for UI\n const metadata = [];\n if (group.showTotal !== undefined) {\n metadata.push(`showTotal:${group.showTotal}`);\n }\n if (group.totalBackground) {\n metadata.push(`totalBg:${group.totalBackground}`);\n }\n if (group.groupHeaderBackground) {\n metadata.push(`headerBg:${group.groupHeaderBackground}`);\n }\n if (metadata.length > 0) {\n groupStr += `(${metadata.join(';')})`;\n }\n return groupStr;\n })\n .join(',');\n }\n static buildSelectString(select) {\n return select\n .sort((a, b) => (a.order || 0) - (b.order || 0))\n .map(item => {\n let selectStr = item.propertyName;\n // Add display name if provided\n if (item.displayName) {\n selectStr += ` as ${item.displayName}`;\n }\n // Add aggregate function if provided\n if (item.aggregateFunction) {\n selectStr += ` with ${item.aggregateFunction}`;\n }\n // Add visibility metadata\n const metadata = [];\n if (item.isVisible !== undefined) {\n metadata.push(`visible:${item.isVisible}`);\n }\n if (metadata.length > 0) {\n selectStr += `(${metadata.join(';')})`;\n }\n return selectStr;\n })\n .join(',');\n }\n static buildAggregateString(aggregates) {\n return aggregates\n .map(agg => {\n let aggStr = `${agg.aggregateFunction}(${agg.propertyName})`;\n if (agg.alias) {\n aggStr += ` as ${agg.alias}`;\n }\n return aggStr;\n })\n .join(',');\n }\n static parseFilter(filterString, params) {\n const decodedString = decodeURIComponent(filterString);\n const groups = [];\n // Split by top-level AND/OR operators\n const topLevelPattern = /(?:^|\\s)(and|or)\\s+(?=(?:[^()]*\\([^()]*\\))*[^()]*$)/gi;\n const segments = [];\n let lastIndex = 0;\n let match;\n while ((match = topLevelPattern.exec(decodedString)) !== null) {\n const operator = match[1];\n const segment = decodedString.substring(lastIndex, match.index).trim();\n if (segment) {\n segments.push({ condition: segment, operator });\n }\n lastIndex = match.index + match[0].length;\n }\n // Add the last segment\n const lastSegment = decodedString.substring(lastIndex).trim();\n if (lastSegment) {\n segments.push({ condition: lastSegment, operator: undefined });\n }\n // Parse each segment\n segments.forEach((segment, index) => {\n let conditions = [];\n // Check if it's a group with parentheses\n if (segment.condition.startsWith('(') && segment.condition.endsWith(')')) {\n const innerCondition = segment.condition.slice(1, -1).trim();\n conditions = this.parseConditions(innerCondition);\n }\n else {\n // Individual condition\n conditions = this.parseConditions(segment.condition);\n }\n if (conditions.length > 0) {\n const group = {\n logicalOperator: 'and',\n conditions: conditions\n };\n // For groups after the first, set the groupLogicalOperator\n if (index > 0) {\n group.groupLogicalOperator = segment.operator?.toLowerCase() || 'and';\n }\n // Detect the logical operator used within the group\n if (conditions.length === 1 && segment.condition.includes(' or ')) {\n group.logicalOperator = 'or';\n }\n else if (conditions.length > 1) {\n group.logicalOperator = segment.condition.toLowerCase().includes(' or ') ? 'or' : 'and';\n }\n groups.push(group);\n }\n });\n params.filters = groups;\n }\n static parseConditions(conditionString) {\n const conditions = [];\n // Enhanced pattern to handle more operators and complex values\n const pattern = /(\\w+(?:\\.\\w+)*)\\s+(eq|ne|gt|ge|lt|le|contains|startswith|endswith|in|notin)\\s+('[^']*'|\\[[^\\]]*\\]|\\d+|true|false|null)/gi;\n let match;\n while ((match = pattern.exec(conditionString)) !== null) {\n const [, field, operator, rawValue] = match;\n let value = rawValue.trim();\n if (rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\")) {\n value = rawValue.slice(1, -1).replace(/''/g, \"'\");\n }\n else if (rawValue.startsWith('[') && rawValue.endsWith(']')) {\n // Handle array values for IN/NOT IN operators\n value = rawValue.slice(1, -1).split(',').map(v => {\n const trimmed = v.trim().replace(/^'|'$/g, '');\n return isNaN(Number(trimmed)) ? trimmed : Number(trimmed);\n });\n }\n else if (!isNaN(Number(rawValue))) {\n value = Number(rawValue);\n }\n else if (rawValue.toLowerCase() === 'true') {\n value = true;\n }\n else if (rawValue.toLowerCase() === 'false') {\n value = false;\n }\n else if (rawValue.toLowerCase() === 'null') {\n value = null;\n }\n conditions.push({\n field: field.trim(),\n operator: operator.trim().toLowerCase(),\n value\n });\n }\n return conditions;\n }\n static parseOrderBy(orderByString, params) {\n const decodedString = decodeURIComponent(orderByString);\n const clauses = decodedString.split(',');\n for (const clause of clauses) {\n const parts = clause.trim().split(/\\s+/);\n const field = parts[0];\n const direction = parts[1]?.toLowerCase() || 'asc';\n params.orderBy?.push({\n field,\n direction\n });\n }\n }\n static parseGroupBy(groupByString, params) {\n const decodedString = decodeURIComponent(groupByString);\n const groups = decodedString.split(',');\n params.groupBy = groups.map((groupStr, index) => {\n const group = {\n propertyName: '',\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = groupStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = groupStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias\n const aliasMatch = baseStr.match(/^(.*?)\\s+as\\s+(.*)$/);\n if (aliasMatch) {\n group.propertyName = aliasMatch[1].trim();\n group.displayName = aliasMatch[2].trim();\n }\n else {\n group.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n switch (key) {\n case 'showTotal':\n group.showTotal = value.toLowerCase() === 'true';\n break;\n case 'totalBg':\n group.totalBackground = value;\n break;\n case 'headerBg':\n group.groupHeaderBackground = value;\n break;\n }\n });\n }\n return group;\n });\n }\n static parseSelect(selectString, params) {\n const decodedString = decodeURIComponent(selectString);\n const items = decodedString.split(',');\n params.select = items.map((itemStr, index) => {\n const item = {\n propertyName: '',\n isVisible: true,\n order: index\n };\n // Check for metadata in parentheses\n const metadataMatch = itemStr.match(/^(.*?)\\((.*)\\)$/);\n let baseStr = itemStr;\n let metadataStr = '';\n if (metadataMatch) {\n baseStr = metadataMatch[1];\n metadataStr = metadataMatch[2];\n }\n // Check for display name alias and aggregate function\n const aliasMatch = baseStr.match(/^(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+with\\s+(\\w+))?$/);\n if (aliasMatch) {\n item.propertyName = aliasMatch[1].trim();\n if (aliasMatch[2]) {\n item.displayName = aliasMatch[2].trim();\n }\n if (aliasMatch[3]) {\n item.aggregateFunction = aliasMatch[3].trim();\n }\n }\n else {\n item.propertyName = baseStr.trim();\n }\n // Parse metadata\n if (metadataStr) {\n const metadataParts = metadataStr.split(';');\n metadataParts.forEach(part => {\n const [key, value] = part.split(':');\n if (key === 'visible') {\n item.isVisible = value.toLowerCase() === 'true';\n }\n });\n }\n return item;\n });\n }\n static parseAggregate(aggregateString, params) {\n const decodedString = decodeURIComponent(aggregateString);\n const aggregates = decodedString.split(',');\n params.aggregates = aggregates.map(aggStr => {\n const agg = {\n propertyName: '',\n aggregateFunction: ''\n };\n // Match pattern: function(property) as alias\n const match = aggStr.match(/^(\\w+)\\((\\w+)\\)(?:\\s+as\\s+(\\w+))?$/);\n if (match) {\n agg.aggregateFunction = match[1];\n agg.propertyName = match[2];\n if (match[3]) {\n agg.alias = match[3];\n }\n }\n return agg;\n });\n }\n // Helper method to convert QueryParameters to ODataQueryParameters (C# equivalent)\n static toODataQueryParameters(params) {\n return {\n Filters: params.filters.map(group => ({\n LogicalOperator: group.logicalOperator,\n GroupLogicalOperator: group.groupLogicalOperator,\n Conditions: group.conditions.map(cond => ({\n Field: cond.field,\n Operator: cond.operator,\n Value: cond.value\n }))\n })),\n OrderBy: params.orderBy?.map(order => ({\n Field: order.field,\n Direction: order.direction\n })) || [],\n GroupBy: params.groupBy?.map(group => ({\n PropertyName: group.propertyName,\n DisplayName: group.displayName,\n ShowTotal: group.showTotal ?? true,\n TotalBackground: group.totalBackground,\n GroupHeaderBackground: group.groupHeaderBackground,\n Order: group.order\n })) || [],\n Select: params.select?.map(sel => ({\n PropertyName: sel.propertyName,\n DisplayName: sel.displayName,\n AggregateFunction: sel.aggregateFunction,\n IsVisible: sel.isVisible ?? true,\n Order: sel.order\n })) || [],\n Aggregates: params.aggregates?.map(agg => ({\n PropertyName: agg.propertyName,\n AggregateFunction: agg.aggregateFunction,\n Alias: agg.alias\n })) || [],\n Top: params.top,\n Skip: params.skip,\n Expand: params.expand,\n IncludeCount: params.includeCount\n };\n }\n // Helper method to create query parameters from UI model\n static fromUIModel(model) {\n const params = {\n filters: model.advancedFilters || [],\n orderBy: model.sorting || [],\n groupBy: model.grouping || [],\n select: model.columns || [],\n aggregates: model.aggregates || [],\n top: model.pagination?.top,\n skip: model.pagination?.skip,\n expand: model.expand,\n includeCount: model.pagination?.includeCount\n };\n return params;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy5jb3JlL3NlcnZpY2VzL3NyYy9saWIvcXVlcnktcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDQSxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLFdBQW1CO1FBQzlCLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEUsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxN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SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25kaXRpb24ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwIHtcclxuICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnIHwgJ29yJztcclxuICBncm91cExvZ2ljYWxPcGVyYXRvcj86ICdhbmQnIHwgJ29yJztcclxuICBjb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cGluZ0NvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgc2hvd1RvdGFsPzogYm9vbGVhbjtcclxuICB0b3RhbEJhY2tncm91bmQ/OiBzdHJpbmc7XHJcbiAgZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kPzogc3RyaW5nO1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdENvbmZpZyB7XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgYWdncmVnYXRlRnVuY3Rpb24/OiBzdHJpbmc7XHJcbiAgaXNWaXNpYmxlPzogYm9vbGVhbjtcclxuICBvcmRlcj86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZ2dyZWdhdGVDb25maWcge1xyXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiBzdHJpbmc7XHJcbiAgYWxpYXM/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlQYXJhbWV0ZXJzIHtcclxuICBmaWx0ZXJzOiBGaWx0ZXJHcm91cFtdO1xyXG4gIG9yZGVyQnk/OiB7IGZpZWxkOiBzdHJpbmc7IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfVtdO1xyXG4gIGdyb3VwQnk/OiBHcm91cGluZ0NvbmZpZ1tdO1xyXG4gIHNlbGVjdD86IFNlbGVjdENvbmZpZ1tdO1xyXG4gIGFnZ3JlZ2F0ZXM/OiBBZ2dyZWdhdGVDb25maWdbXTtcclxuICB0b3A/OiBudW1iZXI7XHJcbiAgc2tpcD86IG51bWJlcjtcclxuICBleHBhbmQ/OiBzdHJpbmdbXTtcclxuICBpbmNsdWRlQ291bnQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlQYXJzZXIge1xyXG4gIHN0YXRpYyBwYXJzZShxdWVyeVN0cmluZzogc3RyaW5nKTogUXVlcnlQYXJhbWV0ZXJzIHtcclxuICAgIGNvbnN0IHBhcmFtczogUXVlcnlQYXJhbWV0ZXJzID0ge1xyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgb3JkZXJCeTogW10sXHJcbiAgICAgIGdyb3VwQnk6IFtdLFxyXG4gICAgICBzZWxlY3Q6IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFydHMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBxdWVyeVBhcnRzKSB7XHJcbiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRmaWx0ZXI9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlRmlsdGVyKHBhcnQuc3Vic3RyaW5nKCckZmlsdGVyPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRvcmRlcmJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZU9yZGVyQnkocGFydC5zdWJzdHJpbmcoJyRvcmRlcmJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRncm91cGJ5PScpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJzZUdyb3VwQnkocGFydC5zdWJzdHJpbmcoJyRncm91cGJ5PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRzZWxlY3Q9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlU2VsZWN0KHBhcnQuc3Vic3RyaW5nKCckc2VsZWN0PScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyRhZ2dyZWdhdGU9JykpIHtcclxuICAgICAgICB0aGlzLnBhcnNlQWdncmVnYXRlKHBhcnQuc3Vic3RyaW5nKCckYWdncmVnYXRlPScubGVuZ3RoKSwgcGFyYW1zKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0LnN0YXJ0c1dpdGgoJyR0b3A9JykpIHtcclxuICAgICAgICBwYXJhbXMudG9wID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckdG9wPScubGVuZ3RoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckc2tpcD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gTnVtYmVyKHBhcnQuc3Vic3RyaW5nKCckc2tpcD0nLmxlbmd0aCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKHBhcnQuc3RhcnRzV2l0aCgnJGV4cGFuZD0nKSkge1xyXG4gICAgICAgIHBhcmFtcy5leHBhbmQgPSBwYXJ0LnN1YnN0cmluZygnJGV4cGFuZD0nLmxlbmd0aCkuc3BsaXQoJywnKS5tYXAoZiA9PiBmLnRyaW0oKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydC5zdGFydHNXaXRoKCckY291bnQ9JykpIHtcclxuICAgICAgICBwYXJhbXMuaW5jbHVkZUNvdW50ID0gcGFydC5zdWJzdHJpbmcoJyRjb3VudD0nLmxlbmd0aCkudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0b1N0cmluZyhwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAocGFyYW1zLmZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJTdHIgPSB0aGlzLmJ1aWxkRmlsdGVyU3RyaW5nKHBhcmFtcy5maWx0ZXJzKTtcclxuICAgICAgcGFydHMucHVzaChgJGZpbHRlcj0ke2VuY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHIpfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMub3JkZXJCeT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyQnlTdHIgPSBwYXJhbXMub3JkZXJCeS5tYXAobyA9PiBgJHtvLmZpZWxkfSAke28uZGlyZWN0aW9ufWApLmpvaW4oJywnKTtcclxuICAgICAgcGFydHMucHVzaChgJG9yZGVyYnk9JHtlbmNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5ncm91cEJ5Py5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZ3JvdXBCeVN0ciA9IHRoaXMuYnVpbGRHcm91cEJ5U3RyaW5nKHBhcmFtcy5ncm91cEJ5KTtcclxuICAgICAgcGFydHMucHVzaChgJGdyb3VwYnk9JHtlbmNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5zZWxlY3Q/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RTdHIgPSB0aGlzLmJ1aWxkU2VsZWN0U3RyaW5nKHBhcmFtcy5zZWxlY3QpO1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkc2VsZWN0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlbGVjdFN0cil9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5hZ2dyZWdhdGVzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgYWdncmVnYXRlU3RyID0gdGhpcy5idWlsZEFnZ3JlZ2F0ZVN0cmluZyhwYXJhbXMuYWdncmVnYXRlcyk7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRhZ2dyZWdhdGU9JHtlbmNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLnRvcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCR0b3A9JHtwYXJhbXMudG9wfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMuc2tpcCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRza2lwPSR7cGFyYW1zLnNraXB9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcy5leHBhbmQ/Lmxlbmd0aCkge1xyXG4gICAgICBwYXJ0cy5wdXNoKGAkZXhwYW5kPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5leHBhbmQuam9pbignLCcpKX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLmluY2x1ZGVDb3VudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHBhcnRzLnB1c2goYCRjb3VudD0ke3BhcmFtcy5pbmNsdWRlQ291bnR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRmlsdGVyU3RyaW5nKGZpbHRlcnM6IEZpbHRlckdyb3VwW10pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZpbHRlcnMubWFwKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXBTdHIgPSBncm91cC5jb25kaXRpb25zXHJcbiAgICAgICAgLm1hcChjb25kaXRpb24gPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IGNvbmRpdGlvbi52YWx1ZTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdmFsID0gYCcke3ZhbC5yZXBsYWNlKC8nL2csIFwiJydcIil9J2A7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwgPyAndHJ1ZScgOiAnZmFsc2UnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBgJHtjb25kaXRpb24uZmllbGR9ICR7Y29uZGl0aW9uLm9wZXJhdG9yfSAke3ZhbH1gO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmpvaW4oYCAke2dyb3VwLmxvZ2ljYWxPcGVyYXRvcn0gYCk7XHJcblxyXG4gICAgICAvLyBGb3IgdGhlIGZpcnN0IGdyb3VwLCBubyBncm91cExvZ2ljYWxPcGVyYXRvciBpcyBuZWVkZWRcclxuICAgICAgaWYgKGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwLmNvbmRpdGlvbnMubGVuZ3RoID4gMSA/IGAoJHtncm91cFN0cn0pYCA6IGdyb3VwU3RyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGpvaW5PcCA9IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yIHx8ICdhbmQnO1xyXG4gICAgICAgIHJldHVybiBncm91cC5jb25kaXRpb25zLmxlbmd0aCA+IDEgPyBgJHtqb2luT3B9ICgke2dyb3VwU3RyfSlgIDogYCR7am9pbk9wfSAke2dyb3VwU3RyfWA7XHJcbiAgICAgIH1cclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkR3JvdXBCeVN0cmluZyhncm91cEJ5OiBHcm91cGluZ0NvbmZpZ1tdKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBncm91cEJ5XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGdyb3VwID0+IHtcclxuICAgICAgICBsZXQgZ3JvdXBTdHIgPSBncm91cC5wcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIC8vIEFkZCBkaXNwbGF5IG5hbWUgaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoZ3JvdXAuZGlzcGxheU5hbWUpIHtcclxuICAgICAgICAgIGdyb3VwU3RyICs9IGAgYXMgJHtncm91cC5kaXNwbGF5TmFtZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQWRkIG1ldGFkYXRhIGZvciBVSVxyXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChncm91cC5zaG93VG90YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbWV0YWRhdGEucHVzaChgc2hvd1RvdGFsOiR7Z3JvdXAuc2hvd1RvdGFsfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAudG90YWxCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGB0b3RhbEJnOiR7Z3JvdXAudG90YWxCYWNrZ3JvdW5kfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JvdXAuZ3JvdXBIZWFkZXJCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICBtZXRhZGF0YS5wdXNoKGBoZWFkZXJCZzoke2dyb3VwLmdyb3VwSGVhZGVyQmFja2dyb3VuZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBncm91cFN0ciArPSBgKCR7bWV0YWRhdGEuam9pbignOycpfSlgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyb3VwU3RyO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignLCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRTZWxlY3RTdHJpbmcoc2VsZWN0OiBTZWxlY3RDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc2VsZWN0XHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5vcmRlciB8fCAwKSAtIChiLm9yZGVyIHx8IDApKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxldCBzZWxlY3RTdHIgPSBpdGVtLnByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGRpc3BsYXkgbmFtZSBpZiBwcm92aWRlZFxyXG4gICAgICAgIGlmIChpdGVtLmRpc3BsYXlOYW1lKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCBhcyAke2l0ZW0uZGlzcGxheU5hbWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCBhZ2dyZWdhdGUgZnVuY3Rpb24gaWYgcHJvdmlkZWRcclxuICAgICAgICBpZiAoaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbikge1xyXG4gICAgICAgICAgc2VsZWN0U3RyICs9IGAgd2l0aCAke2l0ZW0uYWdncmVnYXRlRnVuY3Rpb259YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCB2aXNpYmlsaXR5IG1ldGFkYXRhXHJcbiAgICAgICAgY29uc3QgbWV0YWRhdGE6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNWaXNpYmxlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG1ldGFkYXRhLnB1c2goYHZpc2libGU6JHtpdGVtLmlzVmlzaWJsZX1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXRhZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBzZWxlY3RTdHIgKz0gYCgke21ldGFkYXRhLmpvaW4oJzsnKX0pYDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzZWxlY3RTdHI7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCcsJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBidWlsZEFnZ3JlZ2F0ZVN0cmluZyhhZ2dyZWdhdGVzOiBBZ2dyZWdhdGVDb25maWdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYWdncmVnYXRlc1xyXG4gICAgICAubWFwKGFnZyA9PiB7XHJcbiAgICAgICAgbGV0IGFnZ1N0ciA9IGAke2FnZy5hZ2dyZWdhdGVGdW5jdGlvbn0oJHthZ2cucHJvcGVydHlOYW1lfSlgO1xyXG5cclxuICAgICAgICBpZiAoYWdnLmFsaWFzKSB7XHJcbiAgICAgICAgICBhZ2dTdHIgKz0gYCBhcyAke2FnZy5hbGlhc31gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnZ1N0cjtcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJywnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlRmlsdGVyKGZpbHRlclN0cmluZzogc3RyaW5nLCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyk6IHZvaWQge1xyXG4gICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChmaWx0ZXJTdHJpbmcpO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBGaWx0ZXJHcm91cFtdID0gW107XHJcblxyXG4gICAgLy8gU3BsaXQgYnkgdG9wLWxldmVsIEFORC9PUiBvcGVyYXRvcnNcclxuICAgIGNvbnN0IHRvcExldmVsUGF0dGVybiA9IC8oPzpefFxccykoYW5kfG9yKVxccysoPz0oPzpbXigpXSpcXChbXigpXSpcXCkpKlteKCldKiQpL2dpO1xyXG4gICAgY29uc3Qgc2VnbWVudHM6IHsgY29uZGl0aW9uOiBzdHJpbmc7IG9wZXJhdG9yPzogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIGxldCBsYXN0SW5kZXggPSAwO1xyXG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSB0b3BMZXZlbFBhdHRlcm4uZXhlYyhkZWNvZGVkU3RyaW5nKSkgIT09IG51bGwpIHtcclxuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBtYXRjaFsxXTtcclxuICAgICAgY29uc3Qgc2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChzZWdtZW50KSB7XHJcbiAgICAgICAgc2VnbWVudHMucHVzaCh7IGNvbmRpdGlvbjogc2VnbWVudCwgb3BlcmF0b3IgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgbGFzdCBzZWdtZW50XHJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGRlY29kZWRTdHJpbmcuc3Vic3RyaW5nKGxhc3RJbmRleCkudHJpbSgpO1xyXG4gICAgaWYgKGxhc3RTZWdtZW50KSB7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goeyBjb25kaXRpb246IGxhc3RTZWdtZW50LCBvcGVyYXRvcjogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBhcnNlIGVhY2ggc2VnbWVudFxyXG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCwgaW5kZXgpID0+IHtcclxuICAgICAgbGV0IGNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZ3JvdXAgd2l0aCBwYXJlbnRoZXNlc1xyXG4gICAgICBpZiAoc2VnbWVudC5jb25kaXRpb24uc3RhcnRzV2l0aCgnKCcpICYmIHNlZ21lbnQuY29uZGl0aW9uLmVuZHNXaXRoKCcpJykpIHtcclxuICAgICAgICBjb25zdCBpbm5lckNvbmRpdGlvbiA9IHNlZ21lbnQuY29uZGl0aW9uLnNsaWNlKDEsIC0xKS50cmltKCk7XHJcbiAgICAgICAgY29uZGl0aW9ucyA9IHRoaXMucGFyc2VDb25kaXRpb25zKGlubmVyQ29uZGl0aW9uKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBJbmRpdmlkdWFsIGNvbmRpdGlvblxyXG4gICAgICAgIGNvbmRpdGlvbnMgPSB0aGlzLnBhcnNlQ29uZGl0aW9ucyhzZWdtZW50LmNvbmRpdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBncm91cDogRmlsdGVyR3JvdXAgPSB7XHJcbiAgICAgICAgICBsb2dpY2FsT3BlcmF0b3I6ICdhbmQnLFxyXG4gICAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9uc1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEZvciBncm91cHMgYWZ0ZXIgdGhlIGZpcnN0LCBzZXQgdGhlIGdyb3VwTG9naWNhbE9wZXJhdG9yXHJcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xyXG4gICAgICAgICAgZ3JvdXAuZ3JvdXBMb2dpY2FsT3BlcmF0b3IgPSAoc2VnbWVudC5vcGVyYXRvcj8udG9Mb3dlckNhc2UoKSBhcyAnYW5kJyB8ICdvcicpIHx8ICdhbmQnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGV0ZWN0IHRoZSBsb2dpY2FsIG9wZXJhdG9yIHVzZWQgd2l0aGluIHRoZSBncm91cFxyXG4gICAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSAmJiBzZWdtZW50LmNvbmRpdGlvbi5pbmNsdWRlcygnIG9yICcpKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSAnb3InO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBncm91cC5sb2dpY2FsT3BlcmF0b3IgPSBzZWdtZW50LmNvbmRpdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCcgb3IgJykgPyAnb3InIDogJ2FuZCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHBhcmFtcy5maWx0ZXJzID0gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VDb25kaXRpb25zKGNvbmRpdGlvblN0cmluZzogc3RyaW5nKTogRmlsdGVyQ29uZGl0aW9uW10ge1xyXG4gICAgY29uc3QgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcclxuXHJcbiAgICAvLyBFbmhhbmNlZCBwYXR0ZXJuIHRvIGhhbmRsZSBtb3JlIG9wZXJhdG9ycyBhbmQgY29tcGxleCB2YWx1ZXNcclxuICAgIGNvbnN0IHBhdHRlcm4gPSAvKFxcdysoPzpcXC5cXHcrKSopXFxzKyhlcXxuZXxndHxnZXxsdHxsZXxjb250YWluc3xzdGFydHN3aXRofGVuZHN3aXRofGlufG5vdGluKVxccysoJ1teJ10qJ3xcXFtbXlxcXV0qXFxdfFxcZCt8dHJ1ZXxmYWxzZXxudWxsKS9naTtcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuXHJcbiAgICB3aGlsZSAoKG1hdGNoID0gcGF0dGVybi5leGVjKGNvbmRpdGlvblN0cmluZykpICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IFssIGZpZWxkLCBvcGVyYXRvciwgcmF3VmFsdWVdID0gbWF0Y2g7XHJcblxyXG4gICAgICBsZXQgdmFsdWU6IGFueSA9IHJhd1ZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICAgIGlmIChyYXdWYWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiByYXdWYWx1ZS5lbmRzV2l0aChcIidcIikpIHtcclxuICAgICAgICB2YWx1ZSA9IHJhd1ZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUuc3RhcnRzV2l0aCgnWycpICYmIHJhd1ZhbHVlLmVuZHNXaXRoKCddJykpIHtcclxuICAgICAgICAvLyBIYW5kbGUgYXJyYXkgdmFsdWVzIGZvciBJTi9OT1QgSU4gb3BlcmF0b3JzXHJcbiAgICAgICAgdmFsdWUgPSByYXdWYWx1ZS5zbGljZSgxLCAtMSkuc3BsaXQoJywnKS5tYXAodiA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gdi50cmltKCkucmVwbGFjZSgvXid8JyQvZywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuIGlzTmFOKE51bWJlcih0cmltbWVkKSkgPyB0cmltbWVkIDogTnVtYmVyKHRyaW1tZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIocmF3VmFsdWUpKSkge1xyXG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHJhd1ZhbHVlKTtcclxuICAgICAgfSBlbHNlIGlmIChyYXdWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHtcclxuICAgICAgICB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAocmF3VmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ251bGwnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBmaWVsZC50cmltKCksXHJcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLnRyaW0oKS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb25kaXRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VPcmRlckJ5KG9yZGVyQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQob3JkZXJCeVN0cmluZyk7XHJcbiAgICBjb25zdCBjbGF1c2VzID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIGNsYXVzZXMpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBjbGF1c2UudHJpbSgpLnNwbGl0KC9cXHMrLyk7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gcGFydHNbMF07XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IChwYXJ0c1sxXT8udG9Mb3dlckNhc2UoKSBhcyAnYXNjJyB8ICdkZXNjJykgfHwgJ2FzYyc7XHJcblxyXG4gICAgICBwYXJhbXMub3JkZXJCeT8ucHVzaCh7XHJcbiAgICAgICAgZmllbGQsXHJcbiAgICAgICAgZGlyZWN0aW9uXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VHcm91cEJ5KGdyb3VwQnlTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoZ3JvdXBCeVN0cmluZyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmdyb3VwQnkgPSBncm91cHMubWFwKChncm91cFN0ciwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwaW5nQ29uZmlnID0ge1xyXG4gICAgICAgIHByb3BlcnR5TmFtZTogJycsXHJcbiAgICAgICAgb3JkZXI6IGluZGV4XHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgbWV0YWRhdGEgaW4gcGFyZW50aGVzZXNcclxuICAgICAgY29uc3QgbWV0YWRhdGFNYXRjaCA9IGdyb3VwU3RyLm1hdGNoKC9eKC4qPylcXCgoLiopXFwpJC8pO1xyXG4gICAgICBsZXQgYmFzZVN0ciA9IGdyb3VwU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzXHJcbiAgICAgIGNvbnN0IGFsaWFzTWF0Y2ggPSBiYXNlU3RyLm1hdGNoKC9eKC4qPylcXHMrYXNcXHMrKC4qKSQvKTtcclxuICAgICAgaWYgKGFsaWFzTWF0Y2gpIHtcclxuICAgICAgICBncm91cC5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBncm91cC5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgICBjYXNlICdzaG93VG90YWwnOlxyXG4gICAgICAgICAgICAgIGdyb3VwLnNob3dUb3RhbCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndG90YWxCZyc6XHJcbiAgICAgICAgICAgICAgZ3JvdXAudG90YWxCYWNrZ3JvdW5kID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hlYWRlckJnJzpcclxuICAgICAgICAgICAgICBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGdyb3VwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZVNlbGVjdChzZWxlY3RTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoc2VsZWN0U3RyaW5nKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gZGVjb2RlZFN0cmluZy5zcGxpdCgnLCcpO1xyXG5cclxuICAgIHBhcmFtcy5zZWxlY3QgPSBpdGVtcy5tYXAoKGl0ZW1TdHIsIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IFNlbGVjdENvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBvcmRlcjogaW5kZXhcclxuICAgICAgfTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGZvciBtZXRhZGF0YSBpbiBwYXJlbnRoZXNlc1xyXG4gICAgICBjb25zdCBtZXRhZGF0YU1hdGNoID0gaXRlbVN0ci5tYXRjaCgvXiguKj8pXFwoKC4qKVxcKSQvKTtcclxuICAgICAgbGV0IGJhc2VTdHIgPSBpdGVtU3RyO1xyXG4gICAgICBsZXQgbWV0YWRhdGFTdHIgPSAnJztcclxuXHJcbiAgICAgIGlmIChtZXRhZGF0YU1hdGNoKSB7XHJcbiAgICAgICAgYmFzZVN0ciA9IG1ldGFkYXRhTWF0Y2hbMV07XHJcbiAgICAgICAgbWV0YWRhdGFTdHIgPSBtZXRhZGF0YU1hdGNoWzJdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBmb3IgZGlzcGxheSBuYW1lIGFsaWFzIGFuZCBhZ2dyZWdhdGUgZnVuY3Rpb25cclxuICAgICAgY29uc3QgYWxpYXNNYXRjaCA9IGJhc2VTdHIubWF0Y2goL14oLio/KSg/Olxccythc1xccysoLio/KSk/KD86XFxzK3dpdGhcXHMrKFxcdyspKT8kLyk7XHJcbiAgICAgIGlmIChhbGlhc01hdGNoKSB7XHJcbiAgICAgICAgaXRlbS5wcm9wZXJ0eU5hbWUgPSBhbGlhc01hdGNoWzFdLnRyaW0oKTtcclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFsyXSkge1xyXG4gICAgICAgICAgaXRlbS5kaXNwbGF5TmFtZSA9IGFsaWFzTWF0Y2hbMl0udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxpYXNNYXRjaFszXSkge1xyXG4gICAgICAgICAgaXRlbS5hZ2dyZWdhdGVGdW5jdGlvbiA9IGFsaWFzTWF0Y2hbM10udHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpdGVtLnByb3BlcnR5TmFtZSA9IGJhc2VTdHIudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQYXJzZSBtZXRhZGF0YVxyXG4gICAgICBpZiAobWV0YWRhdGFTdHIpIHtcclxuICAgICAgICBjb25zdCBtZXRhZGF0YVBhcnRzID0gbWV0YWRhdGFTdHIuc3BsaXQoJzsnKTtcclxuICAgICAgICBtZXRhZGF0YVBhcnRzLmZvckVhY2gocGFydCA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0LnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgICAgaXRlbS5pc1Zpc2libGUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUFnZ3JlZ2F0ZShhZ2dyZWdhdGVTdHJpbmc6IHN0cmluZywgcGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRlY29kZWRTdHJpbmcgPSBkZWNvZGVVUklDb21wb25lbnQoYWdncmVnYXRlU3RyaW5nKTtcclxuICAgIGNvbnN0IGFnZ3JlZ2F0ZXMgPSBkZWNvZGVkU3RyaW5nLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgcGFyYW1zLmFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGVzLm1hcChhZ2dTdHIgPT4ge1xyXG4gICAgICBjb25zdCBhZ2c6IEFnZ3JlZ2F0ZUNvbmZpZyA9IHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6ICcnLFxyXG4gICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uOiAnJ1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy8gTWF0Y2ggcGF0dGVybjogZnVuY3Rpb24ocHJvcGVydHkpIGFzIGFsaWFzXHJcbiAgICAgIGNvbnN0IG1hdGNoID0gYWdnU3RyLm1hdGNoKC9eKFxcdyspXFwoKFxcdyspXFwpKD86XFxzK2FzXFxzKyhcXHcrKSk/JC8pO1xyXG4gICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICBhZ2cuYWdncmVnYXRlRnVuY3Rpb24gPSBtYXRjaFsxXTtcclxuICAgICAgICBhZ2cucHJvcGVydHlOYW1lID0gbWF0Y2hbMl07XHJcbiAgICAgICAgaWYgKG1hdGNoWzNdKSB7XHJcbiAgICAgICAgICBhZ2cuYWxpYXMgPSBtYXRjaFszXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBhZ2c7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBRdWVyeVBhcmFtZXRlcnMgdG8gT0RhdGFRdWVyeVBhcmFtZXRlcnMgKEMjIGVxdWl2YWxlbnQpXHJcbiAgc3RhdGljIHRvT0RhdGFRdWVyeVBhcmFtZXRlcnMocGFyYW1zOiBRdWVyeVBhcmFtZXRlcnMpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgRmlsdGVyczogcGFyYW1zLmZpbHRlcnMubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgTG9naWNhbE9wZXJhdG9yOiBncm91cC5sb2dpY2FsT3BlcmF0b3IsXHJcbiAgICAgICAgR3JvdXBMb2dpY2FsT3BlcmF0b3I6IGdyb3VwLmdyb3VwTG9naWNhbE9wZXJhdG9yLFxyXG4gICAgICAgIENvbmRpdGlvbnM6IGdyb3VwLmNvbmRpdGlvbnMubWFwKGNvbmQgPT4gKHtcclxuICAgICAgICAgIEZpZWxkOiBjb25kLmZpZWxkLFxyXG4gICAgICAgICAgT3BlcmF0b3I6IGNvbmQub3BlcmF0b3IsXHJcbiAgICAgICAgICBWYWx1ZTogY29uZC52YWx1ZVxyXG4gICAgICAgIH0pKVxyXG4gICAgICB9KSksXHJcbiAgICAgIE9yZGVyQnk6IHBhcmFtcy5vcmRlckJ5Py5tYXAob3JkZXIgPT4gKHtcclxuICAgICAgICBGaWVsZDogb3JkZXIuZmllbGQsXHJcbiAgICAgICAgRGlyZWN0aW9uOiBvcmRlci5kaXJlY3Rpb25cclxuICAgICAgfSkpIHx8IFtdLFxyXG4gICAgICBHcm91cEJ5OiBwYXJhbXMuZ3JvdXBCeT8ubWFwKGdyb3VwID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBncm91cC5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgRGlzcGxheU5hbWU6IGdyb3VwLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgIFNob3dUb3RhbDogZ3JvdXAuc2hvd1RvdGFsID8/IHRydWUsXHJcbiAgICAgICAgVG90YWxCYWNrZ3JvdW5kOiBncm91cC50b3RhbEJhY2tncm91bmQsXHJcbiAgICAgICAgR3JvdXBIZWFkZXJCYWNrZ3JvdW5kOiBncm91cC5ncm91cEhlYWRlckJhY2tncm91bmQsXHJcbiAgICAgICAgT3JkZXI6IGdyb3VwLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgU2VsZWN0OiBwYXJhbXMuc2VsZWN0Py5tYXAoc2VsID0+ICh7XHJcbiAgICAgICAgUHJvcGVydHlOYW1lOiBzZWwucHJvcGVydHlOYW1lLFxyXG4gICAgICAgIERpc3BsYXlOYW1lOiBzZWwuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IHNlbC5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBJc1Zpc2libGU6IHNlbC5pc1Zpc2libGUgPz8gdHJ1ZSxcclxuICAgICAgICBPcmRlcjogc2VsLm9yZGVyXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgQWdncmVnYXRlczogcGFyYW1zLmFnZ3JlZ2F0ZXM/Lm1hcChhZ2cgPT4gKHtcclxuICAgICAgICBQcm9wZXJ0eU5hbWU6IGFnZy5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgQWdncmVnYXRlRnVuY3Rpb246IGFnZy5hZ2dyZWdhdGVGdW5jdGlvbixcclxuICAgICAgICBBbGlhczogYWdnLmFsaWFzXHJcbiAgICAgIH0pKSB8fCBbXSxcclxuICAgICAgVG9wOiBwYXJhbXMudG9wLFxyXG4gICAgICBTa2lwOiBwYXJhbXMuc2tpcCxcclxuICAgICAgRXhwYW5kOiBwYXJhbXMuZXhwYW5kLFxyXG4gICAgICBJbmNsdWRlQ291bnQ6IHBhcmFtcy5pbmNsdWRlQ291bnRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBxdWVyeSBwYXJhbWV0ZXJzIGZyb20gVUkgbW9kZWxcclxuICBzdGF0aWMgZnJvbVVJTW9kZWwobW9kZWw6IGFueSk6IFF1ZXJ5UGFyYW1ldGVycyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFF1ZXJ5UGFyYW1ldGVycyA9IHtcclxuICAgICAgZmlsdGVyczogbW9kZWwuYWR2YW5jZWRGaWx0ZXJzIHx8IFtdLFxyXG4gICAgICBvcmRlckJ5OiBtb2RlbC5zb3J0aW5nIHx8IFtdLFxyXG4gICAgICBncm91cEJ5OiBtb2RlbC5ncm91cGluZyB8fCBbXSxcclxuICAgICAgc2VsZWN0OiBtb2RlbC5jb2x1bW5zIHx8IFtdLFxyXG4gICAgICBhZ2dyZWdhdGVzOiBtb2RlbC5hZ2dyZWdhdGVzIHx8IFtdLFxyXG4gICAgICB0b3A6IG1vZGVsLnBhZ2luYXRpb24/LnRvcCxcclxuICAgICAgc2tpcDogbW9kZWwucGFnaW5hdGlvbj8uc2tpcCxcclxuICAgICAgZXhwYW5kOiBtb2RlbC5leHBhbmQsXHJcbiAgICAgIGluY2x1ZGVDb3VudDogbW9kZWwucGFnaW5hdGlvbj8uaW5jbHVkZUNvdW50XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpdGUuZnJhbWV3b3JrLW5nLmNvcmUtc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nLmNvcmUvc2VydmljZXMvc3JjL2VsaXRlLmZyYW1ld29yay1uZy5jb3JlLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1.RestService","i1","i1.PermissionsService"],"mappings":"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"}