http-request-manager 18.2.0 → 19.0.0

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.
Files changed (51) hide show
  1. package/esm2022/lib/http-request-manager.module.mjs +5 -5
  2. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +3 -3
  3. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +3 -3
  4. package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +3 -3
  5. package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +3 -3
  6. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +3 -3
  7. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +4 -4
  8. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +3 -3
  9. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +3 -3
  10. package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +3 -3
  11. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +4 -4
  12. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +3 -3
  13. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +3 -3
  14. package/esm2022/lib/interceptors/credentials.interceptor.mjs +3 -3
  15. package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +3 -3
  16. package/esm2022/lib/interceptors/request-error.interceptor.mjs +3 -3
  17. package/esm2022/lib/interceptors/request-header.interceptor.mjs +3 -3
  18. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +6 -6
  19. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +8 -8
  20. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +3 -3
  21. package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +3 -3
  22. package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +3 -3
  23. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +3 -3
  24. package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +3 -3
  25. package/esm2022/lib/services/request-manager-services/request.service.mjs +7 -5
  26. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +100 -7
  27. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +4 -3
  28. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +12 -0
  29. package/esm2022/lib/services/utils/app.service.mjs +3 -3
  30. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +3 -3
  31. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +3 -3
  32. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +3 -3
  33. package/esm2022/lib/services/utils/headers.service.mjs +3 -3
  34. package/esm2022/lib/services/utils/object-merger.service.mjs +3 -3
  35. package/esm2022/lib/services/utils/path-query.service.mjs +3 -3
  36. package/esm2022/lib/services/utils/utils.service.mjs +3 -3
  37. package/esm2022/lib/services/ws-manager-service/models/assortment-data.model.mjs +10 -0
  38. package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +133 -0
  39. package/fesm2022/http-request-manager.mjs +341 -116
  40. package/fesm2022/http-request-manager.mjs.map +1 -1
  41. package/http-request-manager-19.0.0.tgz +0 -0
  42. package/lib/services/database-manager-services/database.manager.service.d.ts +1 -1
  43. package/lib/services/database-manager-services/db.storage.service.d.ts +2 -2
  44. package/lib/services/request-manager-services/request.service.d.ts +2 -1
  45. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +21 -8
  46. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +4 -1
  47. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +14 -0
  48. package/lib/services/ws-manager-service/models/assortment-data.model.d.ts +10 -0
  49. package/lib/services/ws-manager-service/websocket.service.d.ts +21 -0
  50. package/package.json +1 -1
  51. package/http-request-manager-18.2.0.tgz +0 -0
@@ -320,10 +320,10 @@ export class RequestSignalsManagerDemoComponent {
320
320
  onSelectAIType(type) {
321
321
  this.AIType = type;
322
322
  }
323
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestSignalsManagerDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
324
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RequestSignalsManagerDemoComponent, selector: "app-request-signals-manager-demo", viewQueries: [{ propertyName: "failedState", first: true, predicate: ["failedState"], descendants: true, static: true }, { propertyName: "pollingState", first: true, predicate: ["pollingState"], descendants: true, static: true }], ngImport: i0, template: "<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".btn{min-width:120px}.mat-mdc-row .mat-mdc-cell{border-bottom:1px solid transparent;border-top:1px solid transparent;cursor:pointer}.mat-mdc-row:hover .mat-mdc-cell{border-color:currentColor;background-color:#f5f5f5}.container{height:400px;overflow:auto}.box{padding:10px;border:1px solid #ccc}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.FileDownloaderComponent, selector: "app-file-downloader", inputs: ["delayError", "apiRequest", "displayErrorMessage", "saveFileAs", "labels", "disabled"], outputs: ["completed", "failed"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] }); }
323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsManagerDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RequestSignalsManagerDemoComponent, selector: "app-request-signals-manager-demo", viewQueries: [{ propertyName: "failedState", first: true, predicate: ["failedState"], descendants: true, static: true }, { propertyName: "pollingState", first: true, predicate: ["pollingState"], descendants: true, static: true }], ngImport: i0, template: "<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".btn{min-width:120px}.mat-mdc-row .mat-mdc-cell{border-bottom:1px solid transparent;border-top:1px solid transparent;cursor:pointer}.mat-mdc-row:hover .mat-mdc-cell{border-color:currentColor;background-color:#f5f5f5}.container{height:400px;overflow:auto}.box{padding:10px;border:1px solid #ccc}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i14.FileDownloaderComponent, selector: "app-file-downloader", inputs: ["delayError", "apiRequest", "displayErrorMessage", "saveFileAs", "labels", "disabled"], outputs: ["completed", "failed"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }] }); }
325
325
  }
326
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestSignalsManagerDemoComponent, decorators: [{
326
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsManagerDemoComponent, decorators: [{
327
327
  type: Component,
328
328
  args: [{ selector: 'app-request-signals-manager-demo', template: "<div style=\"margin: 2rem;\">\n\n <h2>\n <span>HTTP Request Signals Manager</span>\n <span style=\"margin-left: .5rem;\">\n <mat-icon color=\"accent\">fiber_new</mat-icon>\n </span>\n </h2>\n\n <div [formGroup]=\"requestForm\" style=\"margin-top: 2rem;\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Adapter (Model)</mat-label>\n <mat-select formControlName=\"adapter\" #adapterSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let adapter of sampleAdaptors\" [value]=\"adapter.value\">\n {{adapter.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Mapper (Model)</mat-label>\n <mat-select formControlName=\"mapper\" #mapperSelect>\n <mat-option>None</mat-option>\n <mat-option *ngFor=\"let mapper of sampleMappers\" [value]=\"mapper.value\">\n {{mapper.label}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <div style=\"display: flex; margin-bottom: 2rem;\" *ngIf=\"adapterSelect.value || mapperSelect.value\">\n <div style=\"flex:1\" class=\"box\">\n <h3>Adapter (Incoming)</h3>\n <div *ngIf=\"adapterSelect.value; else NO_ADAPTER\">\n {{ props(adapterSelect.value) | json }}\n </div>\n <ng-template #NO_ADAPTER>No Transformation</ng-template>\n </div>\n <div style=\"flex:1\" class=\"box\">\n <h3>Mapper (Outgoing)</h3>\n <div *ngIf=\"mapperSelect.value; else NO_MAPPER\">\n {{ props(mapperSelect.value) | json }}\n </div>\n <ng-template #NO_MAPPER>No Transformation</ng-template>\n </div>\n </div>\n <div>\n <mat-form-field appearance=\"outline\">\n <mat-label>RestPath (/ delimited)</mat-label>\n <input matInput placeholder=\"clients/list\" formControlName=\"path\">\n </mat-form-field>\n </div>\n <div>\n <div formArrayName=\"headers\">\n <div *ngFor=\"let task of headers.controls; let i = index\" [formGroupName]=\"i\">\n <div style=\"display: flex; gap: .5rem\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Key</mat-label>\n <input matInput placeholder=\"authentication\" formControlName=\"key\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Value</mat-label>\n <input matInput placeholder=\"sample\" formControlName=\"value\">\n </mat-form-field>\n <div style=\"margin-top: .5rem;\">\n <button mat-icon-button (click)=\"removeHeader(i)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n <button mat-stroked-button (click)=\"addHeader()\" class=\"btn\">Add Header</button>\n </div>\n <div style=\"margin-top: 2rem; display: flex; flex-direction:column; gap: 1rem;\">\n <div>\n <mat-slide-toggle #failedState>Retry on Failed</mat-slide-toggle>\n <div *ngIf=\"failedState.checked\" style=\"display: flex; gap: .5rem; margin-top: 1rem;\" formGroupName=\"retry\">\n <mat-form-field appearance=\"outline\">\n <mat-label>#of Times</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"times\" value=\"3\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay Until Next</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"delay\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n <div>\n <mat-slide-toggle #pollingState>Polling</mat-slide-toggle>\n <div *ngIf=\"pollingState.checked\">\n <mat-form-field appearance=\"outline\" style=\"margin-top: 1rem\">\n <mat-label>#of Seconds</mat-label>\n <input matInput placeholder=\"3\" formControlName=\"polling\" value=\"3\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"margin-bottom: 1rem; margin-top: 2rem;\">\n <mat-progress-bar mode=\"indeterminate\"\n *ngIf=\"isPending()\"\n ></mat-progress-bar>\n <mat-progress-bar mode=\"determinate\"\n *ngIf=\"pollingState.checked && !isPending()\"\n [value]=\"countdown()\"\n ></mat-progress-bar>\n </div>\n\n <div style=\"margin-top: 1rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onGetRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"GET_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ GET_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"GET_result\">\n {{ GET_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">POST Request</h2>\n <div>\n <button mat-raised-button (click)=\"onCreateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"POST_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ POST_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"POST_result\">\n {{ POST_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">PUT Request</h2>\n <div>\n <button mat-raised-button (click)=\"onUpdateRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <div *ngIf=\"PUT_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ PUT_error }}</mat-error>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"PUT_result\">\n {{ PUT_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">DELETE Request</h2>\n <div>\n <button mat-raised-button (click)=\"onDeleteRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <h3>Include Record ID in the RestPath</h3>\n\n <div *ngIf=\"DELETE_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ DELETE_error }}</mat-error>\n </div>\n\n <div style=\"margin-top: 1rem;\" *ngIf=\"DELETE_result\">\n {{ DELETE_result | json }}\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1\">Streaming GET Request</h2>\n <div>\n <button mat-raised-button (click)=\"onStreamRequest()\" class=\"btn\">Request</button>\n </div>\n </div>\n\n <!-- <div *ngIf=\"(STREAM_error$ | async) as stream_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ stream_error }}</mat-error>\n </div> -->\n\n <div style=\"margin-top: 1rem;\">\n <div *ngIf=\"STREAM_result as data\" class=\"container\">\n <table mat-table [dataSource]=\"data\">\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> ID </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.id}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef> First Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.name}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"lastName\">\n <th mat-header-cell *matHeaderCellDef> Last Name </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.lastName}} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"age\">\n <th mat-header-cell *matHeaderCellDef> Age </th>\n <td mat-cell *matCellDef=\"let element\"> {{element.age}} </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 2rem\">\n <mat-divider></mat-divider>\n </div>\n\n <div style=\"margin-top: 2rem\">\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; padding-top: .5rem;\">AI -<span *ngIf=\"AIType === 1\">STREAMING</span> POST Request</h2>\n <div style=\"display: flex; gap: 1rem;\">\n <button mat-raised-button [matMenuTriggerFor]=\"menu\" style=\"min-width: 120px;\">\n <mat-icon>lan</mat-icon>\n <span *ngIf=\"AIType === 0; else LOCAL\">Server</span>\n <ng-template #LOCAL>\n Local\n </ng-template>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"onSelectAIType(0)\">Server</button>\n <button mat-menu-item (click)=\"onSelectAIType(1)\">Local</button>\n </mat-menu>\n <div>\n <button mat-raised-button (click)=\"onStreamPostRequest()\" class=\"btn\">Ask Me</button>\n </div>\n </div>\n </div>\n\n <div style=\"display: flex;\">\n <mat-form-field appearance=\"outline\" style=\"flex:1\">\n <mat-label>Ask me a Question</mat-label>\n <textarea matInput placeholder=\"Why is the sky blue?\" [formControl]=\"questionControl\"></textarea>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"STREAM_AI_error\" style=\"margin-top: .5rem;\">\n <mat-error>{{ STREAM_AI_error }}</mat-error>\n </div>\n\n <div *ngIf=\"AIType === 1; else ALTERNATIVE\" style=\"color: red;\">\n You must have Ollama active and the 'phi3:latest' model to use this feature.\n </div>\n <ng-template #ALTERNATIVE>\n <span style=\"color: gray;\">\n Define the RestPath to the API endpoint that will handle the AI request.\n Use: 'ai/chat' for server\n </span>\n </ng-template>\n\n <div>\n <div *ngIf=\"STREAM_AI_result\" style=\"margin-top: 1rem; font-size: 1.2rem; border-radius: 1rem; border: black 1px solid; padding: 2rem;\">\n <p style=\"margin-bottom: .5rem; white-space:pre-wrap; line-height: 1.6rem;\">{{STREAM_AI_result}}</p>\n </div>\n </div>\n\n </div>\n\n <div style=\"margin-top: 1.5rem; margin-bottom: 1rem; line-height: 1.5rem;\">\n <mat-divider></mat-divider>\n </div>\n\n <div>\n <div style=\"display: flex;\">\n <h2 style=\"flex:1; margin-bottom: 0; padding-top: .5rem; display: flex;\">\n <div>\n Download File\n </div>\n <div style=\"flex:1; margin-left: 1rem;\">\n <mat-slide-toggle #disable>\n <span *ngIf=\"disable.checked; else DISABLE\">\n Enable\n </span>\n <ng-template #DISABLE>Disable</ng-template>\n </mat-slide-toggle>\n </div>\n </h2>\n <div>\n <app-file-downloader\n [disabled]=\"disable.checked\"\n [delayError]=\"3\"\n [apiRequest]=\"downloadRequest\"\n (completed)=\"onDownloadCompleted()\"\n (failed)=\"onDownloadFailed($event)\"\n ></app-file-downloader>\n </div>\n </div>\n </div>\n\n</div>\n", styles: [".btn{min-width:120px}.mat-mdc-row .mat-mdc-cell{border-bottom:1px solid transparent;border-top:1px solid transparent;cursor:pointer}.mat-mdc-row:hover .mat-mdc-cell{border-color:currentColor;background-color:#f5f5f5}.container{height:400px;overflow:auto}.box{padding:10px;border:1px solid #ccc}\n"] }]
329
329
  }], ctorParameters: () => [], propDecorators: { failedState: [{
@@ -5,10 +5,10 @@ export class WithCredentialsInterceptor {
5
5
  req = req.clone({ withCredentials: true });
6
6
  return next.handle(req);
7
7
  }
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WithCredentialsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WithCredentialsInterceptor }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WithCredentialsInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WithCredentialsInterceptor }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WithCredentialsInterceptor, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WithCredentialsInterceptor, decorators: [{
12
12
  type: Injectable
13
13
  }] });
14
14
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbHMuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2ludGVyY2VwdG9ycy9jcmVkZW50aWFscy5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQyxNQUFNLE9BQU8sMEJBQTBCO0lBRXJDLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRzlDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFFMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBUlUsMEJBQTBCO21IQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBJbnRlcmNlcHRvciwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXaXRoQ3JlZGVudGlhbHNJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOlxuICAgIE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcblxuICAgICAgcmVxID0gcmVxLmNsb25lKHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pXG5cbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXEpO1xuICB9XG59XG4iXX0=
@@ -33,10 +33,10 @@ export class ProxyDebuggerInterceptor {
33
33
  }
34
34
  return next.handle(req);
35
35
  }
36
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyDebuggerInterceptor, deps: [{ token: PROXY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
37
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyDebuggerInterceptor }); }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProxyDebuggerInterceptor, deps: [{ token: PROXY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
37
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProxyDebuggerInterceptor }); }
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyDebuggerInterceptor, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProxyDebuggerInterceptor, decorators: [{
40
40
  type: Injectable
41
41
  }], ctorParameters: () => [{ type: undefined, decorators: [{
42
42
  type: Optional
@@ -40,10 +40,10 @@ export class RequestErrorInterceptor {
40
40
  return throwError(() => error);
41
41
  }));
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestErrorInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestErrorInterceptor }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestErrorInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestErrorInterceptor }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestErrorInterceptor, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestErrorInterceptor, decorators: [{
47
47
  type: Injectable
48
48
  }] });
49
49
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1lcnJvci5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvaW50ZXJjZXB0b3JzL3JlcXVlc3QtZXJyb3IuaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFjLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFekQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTs7QUFHN0YsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUdFLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUE7S0FxRGxEO0lBbkRDLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBRWhELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBRTFCLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUV0QyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUN0QyxPQUFPLEVBQUUsNkNBQTZDO2dCQUN0RCxNQUFNLEVBQUUsSUFBSTtnQkFDWixLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU87Z0JBQzFCLElBQUksRUFBRSxNQUFNO2dCQUNaLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFdBQVc7YUFDaEMsQ0FBQyxDQUFBO1lBRUYsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUU5QyxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUE7Z0JBQ3JDLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFBO2dCQUU1RSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtvQkFDN0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVO2lCQUN2QixDQUFDLENBQUE7Z0JBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUE7WUFFOUMsQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBRS9CLFlBQVksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtnQkFDdEMsWUFBWSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUE7Z0JBRTVFLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFO29CQUM3QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztvQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVU7aUJBQ3ZCLENBQUMsQ0FBQTtnQkFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUU5QyxDQUFDO1lBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFaEMsQ0FBQyxDQUFDLENBRUgsQ0FBQTtJQUNILENBQUM7K0dBckRVLHVCQUF1QjttSEFBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgVG9hc3RNZXNzYWdlRGlzcGxheVNlcnZpY2UsIFRvYXN0RGlzcGxheSwgVG9hc3RDb2xvcnMgfSBmcm9tICd0b2FzdC1tZXNzYWdlLWRpc3BsYXknXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0RXJyb3JJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgdG9hc3RNZXNzYWdlID0gaW5qZWN0KFRvYXN0TWVzc2FnZURpc3BsYXlTZXJ2aWNlKVxuXG4gIGludGVyY2VwdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSkucGlwZShcblxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUVycm9yID0gVG9hc3REaXNwbGF5LmFkYXB0KHtcbiAgICAgICAgICBtZXNzYWdlOiAnVGhpcyBpcyBhIHRvYXN0IG1lc3NhZ2UuIFRoaXMgaXMgYW4gRXJyb3IhIScsXG4gICAgICAgICAgYWN0aW9uOiAnT0snLFxuICAgICAgICAgIGNvbG9yOiBUb2FzdENvbG9ycy5TVUNDRVNTLFxuICAgICAgICAgIGljb246ICdpbmZvJyxcbiAgICAgICAgICBkdXJhdGlvbjogNSAqIDEwMDAsIC8vNSBzZWNvbmRzXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA+PSA0MDAgJiYgZXJyb3Iuc3RhdHVzIDwgNTAwKSB7XG5cbiAgICAgICAgICBkaXNwbGF5RXJyb3IuY29sb3IgPSBUb2FzdENvbG9ycy5XQVJOXG4gICAgICAgICAgZGlzcGxheUVycm9yLm1lc3NhZ2UgPSBlcnJvci5lcnJvciB8fCBgJHtlcnJvci5zdGF0dXN9OiAke2Vycm9yLnN0YXR1c1RleHR9YFxuXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQ2xpZW50IEVycm9yOicsIHtcbiAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5lcnJvcixcbiAgICAgICAgICAgIHRleHQ6IGVycm9yLnN0YXR1c1RleHQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRoaXMudG9hc3RNZXNzYWdlLnRvYXN0TWVzc2FnZShkaXNwbGF5RXJyb3IpXG5cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPj0gNTAwKSB7XG5cbiAgICAgICAgICBkaXNwbGF5RXJyb3IuY29sb3IgPSBUb2FzdENvbG9ycy5FUlJPUlxuICAgICAgICAgIGRpc3BsYXlFcnJvci5tZXNzYWdlID0gZXJyb3IuZXJyb3IgfHwgYCR7ZXJyb3Iuc3RhdHVzfTogJHtlcnJvci5zdGF0dXNUZXh0fWBcblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NlcnZlciBFcnJvcjonLCB7XG4gICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3IsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvci5zdGF0dXNUZXh0LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aGlzLnRvYXN0TWVzc2FnZS50b2FzdE1lc3NhZ2UoZGlzcGxheUVycm9yKVxuXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcilcblxuICAgICAgfSlcblxuICAgIClcbiAgfVxuXG59XG5cblxuIl19
@@ -32,10 +32,10 @@ export class RequestHeadersInterceptor {
32
32
  ngOnDestroy() {
33
33
  this.subscriptions.unsubscribe();
34
34
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestHeadersInterceptor, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
36
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestHeadersInterceptor }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestHeadersInterceptor, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
36
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestHeadersInterceptor }); }
37
37
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestHeadersInterceptor, decorators: [{
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestHeadersInterceptor, decorators: [{
39
39
  type: Injectable
40
40
  }], ctorParameters: () => [{ type: i1.TranslateService }] });
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1oZWFkZXIuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL2ludGVyY2VwdG9ycy9yZXF1ZXN0LWhlYWRlci5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUloRCxNQUFNLE9BQU8seUJBQXlCO0lBS3BDLElBQUksV0FBVztRQUViLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFFdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUVuRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUVsQyxDQUFDO0lBRUQsWUFDVSxTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQWhCckMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ2xDLGFBQVEsR0FBRyxPQUFPLENBQUE7UUFpQmhCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVk7YUFDMUIsU0FBUyxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUE7UUFDdkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsT0FBeUIsRUFBRSxJQUFpQjtRQUVwRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QixVQUFVLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFLGtCQUFrQjtnQkFDbEMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPO2dCQUMzQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDakM7U0FDRixDQUFDLENBQUE7UUFFRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ2xDLENBQUM7K0dBNUNVLHlCQUF5QjttSEFBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cFJlcXVlc3QsIEh0dHBIYW5kbGVyLCBIdHRwRXZlbnQsIEh0dHBJbnRlcmNlcHRvciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGFuZ0NoYW5nZUV2ZW50LCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcblxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpXG4gIGxhbmd1YWdlID0gJ2VuLUNBJ1xuXG4gIGdldCBjdXJyZW50RGF0ZSgpIHtcblxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpXG5cbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKVxuXG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWBcblxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZVxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zOiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gYCR7cGFyYW1zLmxhbmd9LUNBYFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG5cbiAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XG4gICAgICBzZXRIZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiB0aGlzLmxhbmd1YWdlIHx8ICdlbi1DQScsXG4gICAgICAgICdDdXJyZW50LURhdGUnOiB0aGlzLmN1cnJlbnREYXRlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KVxuXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKVxuICB9XG59XG5cbiJdfQ==
@@ -9,7 +9,7 @@ export class DatabaseManagerService extends DbService {
9
9
  this.createNewDatabase();
10
10
  }
11
11
  getDatabaseTables() {
12
- return from(this.DBOpened()).pipe(map(() => this.db.tables.map(item => item.name)));
12
+ return from(this.DBOpened()).pipe(map(() => this.db.tables.map((item) => item.name)));
13
13
  }
14
14
  hasDatabaseTable(table) {
15
15
  return from(this.DBOpened()).pipe(map(() => {
@@ -20,7 +20,7 @@ export class DatabaseManagerService extends DbService {
20
20
  return from(this.DBOpened()).pipe(map((res) => {
21
21
  this.hasDatabase().then((res) => {
22
22
  const tables = this.db.tables;
23
- const found = tables.find(item => item.name === this.clean(table)) || null;
23
+ const found = tables.find((item) => item.name === this.clean(table)) || null;
24
24
  if (!found) {
25
25
  console.warn('No Such Table:', this.clean(table));
26
26
  return;
@@ -107,13 +107,13 @@ export class DatabaseManagerService extends DbService {
107
107
  .trim(); // Trim leading or trailing spaces
108
108
  return cleanStr;
109
109
  }
110
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatabaseManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
111
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatabaseManagerService, providedIn: 'root' }); }
110
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
111
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerService, providedIn: 'root' }); }
112
112
  }
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatabaseManagerService, decorators: [{
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerService, decorators: [{
114
114
  type: Injectable,
115
115
  args: [{
116
116
  providedIn: 'root'
117
117
  }]
118
118
  }], ctorParameters: () => [] });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UubWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2VzL2RhdGFiYXNlLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLMUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFNBQVM7SUFFbkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQy9CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDakQsQ0FBQTtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDL0IsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7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LENBQUMsQ0FBeUIsa0NBQWtDO1FBRXJFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7K0dBcExVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYlNlcnZpY2UgfSBmcm9tICcuL2RiLnN0b3JhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IFRhYmxlU2NoZW1hRGVmIH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtc2NoZW1hJztcbmltcG9ydCB7IEVNUFRZLCBmcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFiYXNlTWFuYWdlclNlcnZpY2UgZXh0ZW5kcyBEYlNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyBcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jcmVhdGVOZXdEYXRhYmFzZSgpXG4gIH1cblxuICBnZXREYXRhYmFzZVRhYmxlcygpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYi50YWJsZXMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSlcbiAgICApXG4gIH1cblxuICBoYXNEYXRhYmFzZVRhYmxlKHRhYmxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUV4aXN0cyh0aGlzLmNsZWFuKHRhYmxlKSlcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0RGF0YWJhc2VUYWJsZSh0YWJsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmhhc0RhdGFiYXNlKCkudGhlbigocmVzKSA9PiB7XG5cbiAgICAgICAgICBjb25zdCB0YWJsZXMgPSB0aGlzLmRiLnRhYmxlc1xuICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGFibGVzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHRoaXMuY2xlYW4odGFibGUpKSB8fCBudWxsXG5cbiAgICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gU3VjaCBUYWJsZTonLCB0aGlzLmNsZWFuKHRhYmxlKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXREYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG5cbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgocmVzKSA9PiB0aGlzLmdldERhdGFiYXNlVGFibGUodGFibGUpKSxcbiAgICAgIG1hcCgoZGJUYWJsZTogYW55KSA9PiB7XG4gICAgICAgIGlmKCFkYlRhYmxlKSByZXR1cm4gW11cbiAgICAgICAgY29uc3QgY29scyA9IGRiVGFibGUuc2NoZW1hLmluZGV4ZXMubWFwKChjb2w6IGFueSkgPT4gY29sLm5hbWUpXG4gICAgICAgIGNvbnN0IHByaSA9IGRiVGFibGUuc2NoZW1hLnByaW1LZXkubmFtZVxuICAgICAgICByZXR1cm4gW3ByaSwgLi4uY29sc11cbiAgICAgIH0pXG4gICAgKVxuXG4gIH1cblxuICBjcmVhdGVEYXRhYmFzZVRhYmxlKHRhYmxlRGVmOiBUYWJsZVNjaGVtYURlZikge1xuICAgIHRoaXMuY3JlYXRlVGFibGUodGFibGVEZWYudGFibGUsIHRhYmxlRGVmLnNjaGVtYSlcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpXG4gIH1cblxuICB1cGRhdGVEYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlRGVmOiBUYWJsZVNjaGVtYURlZikge1xuXG4gIH1cblxuICAvLyBDUlVEXG4gIGZpbmRUYWJsZVJlY29yZHModGFibGU6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgXG4gIH1cblxuICBmaW5kVGFibGVSZWNvcmQodGFibGU6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBcbiAgfVxuXG4gIGdldFRhYmxlUmVjb3Jkcyh0YWJsZTogc3RyaW5nKSB7XG4gICAgXG4gIH1cblxuICBnZXRUYWJsZVJlY29yZCh0YWJsZTogc3RyaW5nLCBpZDogbnVtYmVyKSB7XG4gICAgXG4gIH1cblxuICBjcmVhdGVUYWJsZVJlY29yZCh0YWJsZTogc3RyaW5nLCByZWNvcmQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVRhYmxlUmVjb3Jkcyh0YWJsZSwgW3JlY29yZF0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGl0ZW06IGFueSkgPT4gaXRlbSA/IGl0ZW1bMF0gOiBudWxsKSlcbiAgfVxuXG4gIGNyZWF0ZVRhYmxlUmVjb3Jkcyh0YWJsZTogc3RyaW5nLCByZWNvcmRzOiBhbnlbXSkge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2VUYWJsZSh0YWJsZSkucGlwZShcblxuICAgICAgc3dpdGNoTWFwKCh0YWJsZURhdGE6IGFueSkgPT4ge1xuICAgICAgICBcbiAgICAgICAgaWYoIXRhYmxlRGF0YSkgcmV0dXJuIEVNUFRZXG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2VUYWJsZVNjaGVtYSh0YWJsZSkucGlwZShcblxuICAgICAgICAgIG1hcCgoc2NoZW1hOiBzdHJpbmdbXSkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBpbnNlcnRSZWNvcmRzID0gcmVjb3Jkcy5tYXAoKHJlY29yZDogYW55KSA9PiB7XG5cbiAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0RnJvbVNjaGVtYTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9XG5cbiAgICAgICAgICAgICAgc2NoZW1hLmZvckVhY2goKGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gKHJlY29yZCBhcyBhbnkpW2ZpZWxkXSA/PyBudWxsXG4gICAgICAgICAgICAgICAgb2JqZWN0RnJvbVNjaGVtYVtmaWVsZF0gPSBkYXRhXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdEZyb21TY2hlbWFcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGFibGVEYXRhLmJ1bGtQdXQoaW5zZXJ0UmVjb3JkcylcbiAgICAgICAgICAgIHJldHVybiBpbnNlcnRSZWNvcmRzXG5cbiAgICAgICAgICB9KVxuXG4gICAgICAgIClcblxuICAgICAgfSlcblxuICAgIClcblxuICB9XG5cbiAgdXBkYXRlVGFibGVSZWNvcmQodGFibGU6IHN0cmluZywgcmVjb3JkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVUYWJsZVJlY29yZHModGFibGUsIFtyZWNvcmRdKVxuICAgIC5waXBlKFxuICAgICAgbWFwKGl0ZW0gPT4gaXRlbS5sZW5ndGggPiAwID8gaXRlbVswXSA6IG51bGwpXG4gICAgKVxuICB9XG5cbiAgdXBkYXRlVGFibGVSZWNvcmRzKHRhYmxlOiBzdHJpbmcsIHJlY29yZHM6IGFueVtdKSB7XG4gICAgXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2VUYWJsZSh0YWJsZSkucGlwZShcblxuICAgICAgc3dpdGNoTWFwKCh0YWJsZURhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFiYXNlVGFibGVTY2hlbWEodGFibGUpLnBpcGUoXG5cbiAgICAgICAgICBtYXAoKHNjaGVtYTogc3RyaW5nW10pID0+IHtcblxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0UmVjb3JkcyA9IHJlY29yZHMubWFwKChyZWNvcmQ6IGFueSkgPT4ge1xuXG4gICAgICAgICAgICAgIGNvbnN0IG9iamVjdEZyb21TY2hlbWE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxuXG4gICAgICAgICAgICAgIHNjaGVtYS5mb3JFYWNoKChmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IChyZWNvcmQgYXMgYW55KVtmaWVsZF0gPz8gbnVsbFxuICAgICAgICAgICAgICAgIG9iamVjdEZyb21TY2hlbWFbZmllbGRdID0gZGF0YVxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiBvYmplY3RGcm9tU2NoZW1hXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRhYmxlRGF0YS5idWxrUHV0KGluc2VydFJlY29yZHMpLnRoZW4oKCkgPT4gY29uc29sZS5sb2coJ1VwZGF0ZWQgREInKSlcbiAgICAgICAgICAgIHJldHVybiBpbnNlcnRSZWNvcmRzXG5cbiAgICAgICAgICB9KVxuXG4gICAgICAgIClcblxuICAgICAgfSlcblxuICAgIClcblxuICB9XG5cbiAgZGVsZXRlVGFibGVSZWNvcmQ8VD4odGFibGU6IHN0cmluZywgaWQ6IG51bWJlcikge1xuICAgIFxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xlYW5TdHIgPSBzdHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc10vZywgJ18nKSAvLyBSZXBsYWNlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBleGNlcHQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJykgICAgICAgICAgICAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG4gICAgICAudG9Mb3dlckNhc2UoKSAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZVxuICAgICAgLnRyaW0oKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlc1xuICBcbiAgICByZXR1cm4gY2xlYW5TdHI7XG4gIH1cblxufVxuIl19
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UubWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2VzL2RhdGFiYXNlLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLMUQsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFNBQVM7SUFFbkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQy9CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN4RCxDQUFBO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMs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LElBQUksRUFBRSxDQUFDLENBQXlCLGtDQUFrQztRQUVyRSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOytHQXBMVSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZyQixNQUFNOzs0RkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJTZXJ2aWNlIH0gZnJvbSAnLi9kYi5zdG9yYWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBUYWJsZVNjaGVtYURlZiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXNjaGVtYSc7XG5pbXBvcnQgeyBFTVBUWSwgZnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhYmFzZU1hbmFnZXJTZXJ2aWNlIGV4dGVuZHMgRGJTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jcmVhdGVOZXdEYXRhYmFzZSgpXG4gIH1cblxuICBnZXREYXRhYmFzZVRhYmxlcygpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5kYi50YWJsZXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0ubmFtZSkpXG4gICAgKVxuICB9XG5cbiAgaGFzRGF0YWJhc2VUYWJsZSh0YWJsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5EQk9wZW5lZCgpKS5waXBlKFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVFeGlzdHModGhpcy5jbGVhbih0YWJsZSkpXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldERhdGFiYXNlVGFibGUodGFibGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5EQk9wZW5lZCgpKS5waXBlKFxuICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5oYXNEYXRhYmFzZSgpLnRoZW4oKHJlcykgPT4ge1xuXG4gICAgICAgICAgY29uc3QgdGFibGVzID0gdGhpcy5kYi50YWJsZXNcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHRhYmxlcy5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ubmFtZSA9PT0gdGhpcy5jbGVhbih0YWJsZSkpIHx8IG51bGxcblxuICAgICAgICAgIGlmKCFmb3VuZCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBTdWNoIFRhYmxlOicsIHRoaXMuY2xlYW4odGFibGUpKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgIH1cblxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBnZXREYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XG5cbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgocmVzKSA9PiB0aGlzLmdldERhdGFiYXNlVGFibGUodGFibGUpKSxcbiAgICAgIG1hcCgoZGJUYWJsZTogYW55KSA9PiB7XG4gICAgICAgIGlmKCFkYlRhYmxlKSByZXR1cm4gW11cbiAgICAgICAgY29uc3QgY29scyA9IGRiVGFibGUuc2NoZW1hLmluZGV4ZXMubWFwKChjb2w6IGFueSkgPT4gY29sLm5hbWUpXG4gICAgICAgIGNvbnN0IHByaSA9IGRiVGFibGUuc2NoZW1hLnByaW1LZXkubmFtZVxuICAgICAgICByZXR1cm4gW3ByaSwgLi4uY29sc11cbiAgICAgIH0pXG4gICAgKVxuXG4gIH1cblxuICBjcmVhdGVEYXRhYmFzZVRhYmxlKHRhYmxlRGVmOiBUYWJsZVNjaGVtYURlZikge1xuICAgIHRoaXMuY3JlYXRlVGFibGUodGFibGVEZWYudGFibGUsIHRhYmxlRGVmLnNjaGVtYSlcbiAgICByZXR1cm4gZnJvbSh0aGlzLkRCT3BlbmVkKCkpXG4gIH1cblxuICB1cGRhdGVEYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlRGVmOiBUYWJsZVNjaGVtYURlZikge1xuXG4gIH1cblxuICAvLyBDUlVEXG4gIGZpbmRUYWJsZVJlY29yZHModGFibGU6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblxuICB9XG5cbiAgZmluZFRhYmxlUmVjb3JkKHRhYmxlOiBzdHJpbmcsIGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cbiAgfVxuXG4gIGdldFRhYmxlUmVjb3Jkcyh0YWJsZTogc3RyaW5nKSB7XG5cbiAgfVxuXG4gIGdldFRhYmxlUmVjb3JkKHRhYmxlOiBzdHJpbmcsIGlkOiBudW1iZXIpIHtcblxuICB9XG5cbiAgY3JlYXRlVGFibGVSZWNvcmQodGFibGU6IHN0cmluZywgcmVjb3JkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVUYWJsZVJlY29yZHModGFibGUsIFtyZWNvcmRdKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChpdGVtOiBhbnkpID0+IGl0ZW0gPyBpdGVtWzBdIDogbnVsbCkpXG4gIH1cblxuICBjcmVhdGVUYWJsZVJlY29yZHModGFibGU6IHN0cmluZywgcmVjb3JkczogYW55W10pIHtcblxuICAgIHJldHVybiB0aGlzLmdldERhdGFiYXNlVGFibGUodGFibGUpLnBpcGUoXG5cbiAgICAgIHN3aXRjaE1hcCgodGFibGVEYXRhOiBhbnkpID0+IHtcblxuICAgICAgICBpZighdGFibGVEYXRhKSByZXR1cm4gRU1QVFlcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlKS5waXBlKFxuXG4gICAgICAgICAgbWFwKChzY2hlbWE6IHN0cmluZ1tdKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGluc2VydFJlY29yZHMgPSByZWNvcmRzLm1hcCgocmVjb3JkOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgICBjb25zdCBvYmplY3RGcm9tU2NoZW1hOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cblxuICAgICAgICAgICAgICBzY2hlbWEuZm9yRWFjaCgoZmllbGQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAocmVjb3JkIGFzIGFueSlbZmllbGRdID8/IG51bGxcbiAgICAgICAgICAgICAgICBvYmplY3RGcm9tU2NoZW1hW2ZpZWxkXSA9IGRhdGFcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0RnJvbVNjaGVtYVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0YWJsZURhdGEuYnVsa1B1dChpbnNlcnRSZWNvcmRzKVxuICAgICAgICAgICAgcmV0dXJuIGluc2VydFJlY29yZHNcblxuICAgICAgICAgIH0pXG5cbiAgICAgICAgKVxuXG4gICAgICB9KVxuXG4gICAgKVxuXG4gIH1cblxuICB1cGRhdGVUYWJsZVJlY29yZCh0YWJsZTogc3RyaW5nLCByZWNvcmQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhYmxlUmVjb3Jkcyh0YWJsZSwgW3JlY29yZF0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDAgPyBpdGVtWzBdIDogbnVsbClcbiAgICApXG4gIH1cblxuICB1cGRhdGVUYWJsZVJlY29yZHModGFibGU6IHN0cmluZywgcmVjb3JkczogYW55W10pIHtcblxuICAgIHJldHVybiB0aGlzLmdldERhdGFiYXNlVGFibGUodGFibGUpLnBpcGUoXG5cbiAgICAgIHN3aXRjaE1hcCgodGFibGVEYXRhOiBhbnkpID0+IHtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhYmFzZVRhYmxlU2NoZW1hKHRhYmxlKS5waXBlKFxuXG4gICAgICAgICAgbWFwKChzY2hlbWE6IHN0cmluZ1tdKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IGluc2VydFJlY29yZHMgPSByZWNvcmRzLm1hcCgocmVjb3JkOiBhbnkpID0+IHtcblxuICAgICAgICAgICAgICBjb25zdCBvYmplY3RGcm9tU2NoZW1hOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cblxuICAgICAgICAgICAgICBzY2hlbWEuZm9yRWFjaCgoZmllbGQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAocmVjb3JkIGFzIGFueSlbZmllbGRdID8/IG51bGxcbiAgICAgICAgICAgICAgICBvYmplY3RGcm9tU2NoZW1hW2ZpZWxkXSA9IGRhdGFcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0RnJvbVNjaGVtYVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0YWJsZURhdGEuYnVsa1B1dChpbnNlcnRSZWNvcmRzKS50aGVuKCgpID0+IGNvbnNvbGUubG9nKCdVcGRhdGVkIERCJykpXG4gICAgICAgICAgICByZXR1cm4gaW5zZXJ0UmVjb3Jkc1xuXG4gICAgICAgICAgfSlcblxuICAgICAgICApXG5cbiAgICAgIH0pXG5cbiAgICApXG5cbiAgfVxuXG4gIGRlbGV0ZVRhYmxlUmVjb3JkPFQ+KHRhYmxlOiBzdHJpbmcsIGlkOiBudW1iZXIpIHtcblxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbihzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xlYW5TdHIgPSBzdHJcbiAgICAgIC5yZXBsYWNlKC9bXmEtekEtWjAtOVxcc10vZywgJ18nKSAvLyBSZXBsYWNlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBleGNlcHQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJykgICAgICAgICAgICAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzXG4gICAgICAudG9Mb3dlckNhc2UoKSAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZVxuICAgICAgLnRyaW0oKTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlc1xuXG4gICAgcmV0dXJuIGNsZWFuU3RyO1xuICB9XG5cbn1cbiJdfQ==
@@ -9,7 +9,7 @@ export class DbService extends Dexie {
9
9
  return this.vr + 1;
10
10
  }
11
11
  get getTables() {
12
- return this.db.tables.map(item => item.name);
12
+ return this.db.tables.map((item) => item.name);
13
13
  }
14
14
  async hasDatabase() {
15
15
  return await Dexie.exists(this.storageDB).then((res) => {
@@ -22,13 +22,13 @@ export class DbService extends Dexie {
22
22
  this.storageDB = "global_storage_db";
23
23
  this.db = new Dexie(this.storageDB);
24
24
  this.getTable = (table) => {
25
- return this.db.tables.find(item => item.name === table);
25
+ return this.db.tables.find((item) => item.name === table);
26
26
  };
27
27
  this.tableExists = (table) => {
28
- return (this.getTables.find(item => item === table)) ? true : false;
28
+ return (this.getTables.find((item) => item === table)) ? true : false;
29
29
  };
30
30
  this.db = this;
31
- this.open().then(data => {
31
+ this.open().then((data) => {
32
32
  }).catch(err => {
33
33
  this.createNewDatabase();
34
34
  });
@@ -131,13 +131,13 @@ export class DbService extends Dexie {
131
131
  .replace(/\s+/g, '_');
132
132
  return cleanStr.trim().toLowerCase();
133
133
  }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
135
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbService, providedIn: 'root' }); }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
135
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, providedIn: 'root' }); }
136
136
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbService, decorators: [{
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DbService, decorators: [{
138
138
  type: Injectable,
139
139
  args: [{
140
140
  providedIn: 'root',
141
141
  }]
142
142
  }], ctorParameters: () => [] });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2VzL2RiLnN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBYyxNQUFNLE9BQU8sQ0FBQzs7QUFLbkMsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBTWxDLElBQUksRUFBRTtRQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE9BQU8sTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtZQUN4QixPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQVVEO1FBRUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7UUFqQzlCLGNBQVMs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TyxJQUFJLENBQUE7SUFFYixDQUFDO0lBRU8sZUFBZSxDQUFDLElBQXFCO1FBRTNDLElBQUcsQ0FBQyxJQUFJO1lBQUUsT0FBTTtRQUVoQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3pELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBRTFFLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVztRQUU3QixNQUFNLFFBQVEsR0FBRyxHQUFHO2FBQ2pCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7YUFDOUIsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUVyQixPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUV4QyxDQUFDOytHQXRMVSxTQUFTO21IQUFULFNBQVMsY0FGUixNQUFNOzs0RkFFUCxTQUFTO2tCQUhyQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBEZXhpZSwge1RhYmxlfSBmcm9tICdkZXhpZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYlNlcnZpY2UgZXh0ZW5kcyBEZXhpZSB7XG5cbiAgc3RvcmFnZURCID0gXCJnbG9iYWxfc3RvcmFnZV9kYlwiXG5cbiAgZGIgPSBuZXcgRGV4aWUodGhpcy5zdG9yYWdlREIpXG5cbiAgZ2V0IHZyKCkge1xuICAgIHJldHVybiAodGhpcy5kYi52ZXJubyA9PT0gMCkgPyAxIDogdGhpcy5kYi52ZXJubyArIDFcbiAgfVxuXG4gIGdldCBuZXh0VnIoKSB7XG4gICAgcmV0dXJuIHRoaXMudnIgKyAxXG4gIH1cblxuICBnZXQgZ2V0VGFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLmRiLnRhYmxlcy5tYXAoaXRlbSA9PiBpdGVtLm5hbWUpXG4gIH1cblxuICBhc3luYyBoYXNEYXRhYmFzZSgpIHtcbiAgICByZXR1cm4gYXdhaXQgRGV4aWUuZXhpc3RzKHRoaXMuc3RvcmFnZURCKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3RGF0YWJhc2UoKVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0pXG4gIH1cblxuICBnZXRUYWJsZSA9ICh0YWJsZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGIudGFibGVzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IHRhYmxlKVxuICB9XG5cbiAgdGFibGVFeGlzdHMgPSAodGFibGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAodGhpcy5nZXRUYWJsZXMuZmluZChpdGVtID0+IGl0ZW0gPT09IHRhYmxlKSkgPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgICBzdXBlcihcImdsb2JhbF9zdG9yYWdlX2RiXCIpXG5cbiAgICAgIHRoaXMuZGIgPSB0aGlzXG4gICAgICB0aGlzLm9wZW4oKS50aGVuKGRhdGEgPT4ge1xuXG4gICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZU5ld0RhdGFiYXNlKClcbiAgICAgIH0pXG5cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVUYWJsZSh0YWJsZTogc3RyaW5nLCBmaW5kOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfG51bWJlciB9LCBkYXRhOiBhbnkpIHtcblxuICAgIGNvbnN0IHRhYmxlU291cmNlID0gdGhpcy5nZXRUYWJsZSh0YWJsZSlcblxuICAgIGlmKCF0YWJsZVNvdXJjZSB8fCAhZmluZCB8fCAhKGZpbmQua2V5IHx8IGZpbmQudmFsdWUpKSByZXR1cm4gZmFsc2VcblxuICAgIGF3YWl0IHRhYmxlU291cmNlPy53aGVyZShmaW5kLmtleSkuZXF1YWxzKGZpbmQudmFsdWUpLmZpcnN0KClcbiAgICAudGhlbihhc3luYyAocmVjOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IG5ld1JlYyA9IHRoaXMudXBkYXRlT2JqZWN0S2V5cyhyZWMsIGRhdGEpXG4gICAgICBhd2FpdCB0YWJsZVNvdXJjZT8udXBkYXRlKHJlYy5pZCwgbmV3UmVjKVxuICAgIH0pXG5cbiAgICByZXR1cm4gdHJ1ZVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlTmV3RGF0YWJhc2UoKSB7XG5cbiAgICBjb25zdCBkYiA9IG5ldyBEZXhpZSgnZ2xvYmFsX3N0b3JhZ2VfZGInKTtcblxuICAgIGlmICghYXdhaXQgRGV4aWUuZXhpc3RzKGRiLm5hbWUpKSB7XG4gICAgICBkYi52ZXJzaW9uKDEpLnN0b3Jlcyh7fSlcbiAgICB9XG5cbiAgICBhd2FpdCBkYi5vcGVuKClcblxuICB9XG5cbiAgLy8gYXN5bmMgY3JlYXRlVGFibGUodGFibGU6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpIHtcbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlKHRhYmxlOiBzdHJpbmcsIHNjaGVtYTogc3RyaW5nKSB7XG5cbiAgICAvLyBjb25zb2xlLmxvZygnY3JlYXRlVGFibGU6JywgdGFibGUsIHNjaGVtYSlcblxuICAgIHRoaXMuaGFzRGF0YWJhc2UoKS50aGVuKGFzeW5jKHJlcykgPT4ge1xuXG4gICAgICBjb25zdCB0YWJsZURlZiA9IHRoaXMubm9ybWFsaXplU3RyaW5nKHRhYmxlKVxuICAgICAgY29uc3Qgc2NoZW1hRGVmID0gdGhpcy5ub3JtYWxpemVTdHJpbmcoc2NoZW1hKVxuXG4gICAgICB0YWJsZSA9IHRhYmxlRGVmIHx8ICcnXG4gICAgICBzY2hlbWEgPSBzY2hlbWFEZWYgfHwgJydcblxuICAgICAgaWYodGFibGUgPT09ICcnIHx8IHNjaGVtYSA9PT0gJycpIHJldHVyblxuXG4gICAgICBpZighdGhpcy5kYi5pc09wZW4oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRiLm9wZW4oKVxuICAgICAgICAudGhlbiggYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlKHRhYmxlLCBzY2hlbWEpXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ09QRU5FRCcsIHRhYmxlKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdGQUlMRUQnLCB0YWJsZSlcbiAgICAgICAgfSlcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGUodGFibGUsIHNjaGVtYSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzVGFibGUgPSB0aGlzLmdldFRhYmxlKHRhYmxlKVxuXG4gICAgICBpZighaGFzVGFibGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVUYWJsZS5iaW5kKHRoaXMsIHRhYmxlLCBzY2hlbWEpXG4gICAgICAgICAgdGhpcy5jcmVhdGUodGFibGUsIHNjaGVtYSlcbiAgICAgICAgfSwgMzAwKVxuICAgICAgfVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygnREIgSEFTJywgdGFibGUsIGhhc1RhYmxlKVxuXG4gICAgfSlcblxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGUodGFibGU6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpIHtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdPUEVOJywgdGhpcy5kYi5uYW1lLCB0aGlzLnZyLCB0aGlzLmRiLnZlcm5vLCAnT1BFTicsdGhpcy5kYi5pc09wZW4oKSlcblxuICAgIGlmKCF0aGlzLnRhYmxlRXhpc3RzKHRhYmxlKSkge1xuXG4gICAgICBpZih0aGlzLmRiLmlzT3BlbigpKSBhd2FpdCB0aGlzLmRiLmNsb3NlKClcblxuICAgICAgY29uc3QgbmV3U2NoZW1hOiBhbnkgPSB7IFt0YWJsZV06IHNjaGVtYSB9XG4gICAgICBhd2FpdCB0aGlzLmRiLnZlcnNpb24odGhpcy5uZXh0VnIpLnN0b3JlcyhuZXdTY2hlbWEpXG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdDcmVhdGVkIE5ldyBUYWJsZTogJywgdGFibGUsIHNjaGVtYSlcblxuICAgICAgaWYoIXRoaXMuZGIuaXNPcGVuKCkpIGF3YWl0IHRoaXMuZGIub3BlbigpXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU9iamVjdEtleXMob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmoxKS5yZWR1Y2UoKHVwZGF0ZWRPYmo6IGFueSwga2V5OiBhbnkpID0+IHtcbiAgICAgIHVwZGF0ZWRPYmpba2V5XSA9IG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSA/IG9iajJba2V5XSA6IG9iajFba2V5XVxuICAgICAgcmV0dXJuIHVwZGF0ZWRPYmpcbiAgICB9LCB7fSlcblxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIERCT3BlbmVkKCkge1xuXG4gICAgaWYoIXRoaXMuZGIuaXNPcGVuKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGIub3BlbigpXG4gICAgICAudGhlbiggYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnT1BFTkVEJylcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnT1BFTkVEIEVSUicpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29uc29sZS5sb2coJ09QRU5FRCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcblxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVTdHJpbmcoaXRlbTogc3RyaW5nfHN0cmluZ1tdKSB7XG5cbiAgICBpZighaXRlbSkgcmV0dXJuXG5cbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/XG4gICAgICBpdGVtLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB0aGlzLmNsZWFuU3RyaW5nKGl0ZW0pKS5qb2luKClcbiAgICAgIDogaXRlbS5zcGxpdCgnLCcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB0aGlzLmNsZWFuU3RyaW5nKGl0ZW0pKS5qb2luKClcblxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBjbGVhblN0ciA9IHN0clxuICAgICAgLnJlcGxhY2UoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJylcblxuICAgICAgcmV0dXJuIGNsZWFuU3RyLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG5cbiAgfVxuXG59XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRhYmFzZS1tYW5hZ2VyLXNlcnZpY2VzL2RiLnN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBYyxNQUFNLE9BQU8sQ0FBQzs7QUFLbkMsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBTWxDLElBQUksRUFBRTtRQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1lBQ3hCLE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBVUQ7UUFFSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQWpDOUIs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O1FBQzFCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUViLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBcUI7UUFFM0MsSUFBRyxDQUFDLElBQUk7WUFBRSxPQUFNO1FBRWhCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFFMUUsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXO1FBRTdCLE1BQU0sUUFBUSxHQUFHLEdBQUc7YUFDakIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQzthQUM5QixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRXJCLE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBRXhDLENBQUM7K0dBdExVLFNBQVM7bUhBQVQsU0FBUyxjQUZSLE1BQU07OzRGQUVQLFNBQVM7a0JBSHJCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IERleGllLCB7VGFibGV9IGZyb20gJ2RleGllJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIERiU2VydmljZSBleHRlbmRzIERleGllIHtcblxuICBzdG9yYWdlREIgPSBcImdsb2JhbF9zdG9yYWdlX2RiXCJcblxuICBkYiA9IG5ldyBEZXhpZSh0aGlzLnN0b3JhZ2VEQilcblxuICBnZXQgdnIoKSB7XG4gICAgcmV0dXJuICh0aGlzLmRiLnZlcm5vID09PSAwKSA/IDEgOiB0aGlzLmRiLnZlcm5vICsgMVxuICB9XG5cbiAgZ2V0IG5leHRWcigpIHtcbiAgICByZXR1cm4gdGhpcy52ciArIDFcbiAgfVxuXG4gIGdldCBnZXRUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGIudGFibGVzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLm5hbWUpXG4gIH1cblxuICBhc3luYyBoYXNEYXRhYmFzZSgpIHtcbiAgICByZXR1cm4gYXdhaXQgRGV4aWUuZXhpc3RzKHRoaXMuc3RvcmFnZURCKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVOZXdEYXRhYmFzZSgpXG4gICAgICByZXR1cm4gcmVzXG4gICAgfSlcbiAgfVxuXG4gIGdldFRhYmxlID0gKHRhYmxlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYi50YWJsZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLm5hbWUgPT09IHRhYmxlKVxuICB9XG5cbiAgdGFibGVFeGlzdHMgPSAodGFibGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAodGhpcy5nZXRUYWJsZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtID09PSB0YWJsZSkpID8gdHJ1ZSA6IGZhbHNlXG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcblxuICAgICAgc3VwZXIoXCJnbG9iYWxfc3RvcmFnZV9kYlwiKVxuXG4gICAgICB0aGlzLmRiID0gdGhpc1xuICAgICAgdGhpcy5vcGVuKCkudGhlbigoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIHRoaXMuY3JlYXRlTmV3RGF0YWJhc2UoKVxuICAgICAgfSlcblxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHVwZGF0ZVRhYmxlKHRhYmxlOiBzdHJpbmcsIGZpbmQ6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd8bnVtYmVyIH0sIGRhdGE6IGFueSkge1xuXG4gICAgY29uc3QgdGFibGVTb3VyY2UgPSB0aGlzLmdldFRhYmxlKHRhYmxlKVxuXG4gICAgaWYoIXRhYmxlU291cmNlIHx8ICFmaW5kIHx8ICEoZmluZC5rZXkgfHwgZmluZC52YWx1ZSkpIHJldHVybiBmYWxzZVxuXG4gICAgYXdhaXQgdGFibGVTb3VyY2U/LndoZXJlKGZpbmQua2V5KS5lcXVhbHMoZmluZC52YWx1ZSkuZmlyc3QoKVxuICAgIC50aGVuKGFzeW5jIChyZWM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgbmV3UmVjID0gdGhpcy51cGRhdGVPYmplY3RLZXlzKHJlYywgZGF0YSlcbiAgICAgIGF3YWl0IHRhYmxlU291cmNlPy51cGRhdGUocmVjLmlkLCBuZXdSZWMpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG5cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVOZXdEYXRhYmFzZSgpIHtcblxuICAgIGNvbnN0IGRiID0gbmV3IERleGllKCdnbG9iYWxfc3RvcmFnZV9kYicpO1xuXG4gICAgaWYgKCFhd2FpdCBEZXhpZS5leGlzdHMoZGIubmFtZSkpIHtcbiAgICAgIGRiLnZlcnNpb24oMSkuc3RvcmVzKHt9KVxuICAgIH1cblxuICAgIGF3YWl0IGRiLm9wZW4oKVxuXG4gIH1cblxuICAvLyBhc3luYyBjcmVhdGVUYWJsZSh0YWJsZTogc3RyaW5nLCBzY2hlbWE6IHN0cmluZykge1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlVGFibGUodGFibGU6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpIHtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdjcmVhdGVUYWJsZTonLCB0YWJsZSwgc2NoZW1hKVxuXG4gICAgdGhpcy5oYXNEYXRhYmFzZSgpLnRoZW4oYXN5bmMocmVzKSA9PiB7XG5cbiAgICAgIGNvbnN0IHRhYmxlRGVmID0gdGhpcy5ub3JtYWxpemVTdHJpbmcodGFibGUpXG4gICAgICBjb25zdCBzY2hlbWFEZWYgPSB0aGlzLm5vcm1hbGl6ZVN0cmluZyhzY2hlbWEpXG5cbiAgICAgIHRhYmxlID0gdGFibGVEZWYgfHwgJydcbiAgICAgIHNjaGVtYSA9IHNjaGVtYURlZiB8fCAnJ1xuXG4gICAgICBpZih0YWJsZSA9PT0gJycgfHwgc2NoZW1hID09PSAnJykgcmV0dXJuXG5cbiAgICAgIGlmKCF0aGlzLmRiLmlzT3BlbigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGIub3BlbigpXG4gICAgICAgIC50aGVuKCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jcmVhdGUodGFibGUsIHNjaGVtYSlcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnT1BFTkVEJywgdGFibGUpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ZBSUxFRCcsIHRhYmxlKVxuICAgICAgICB9KVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZSh0YWJsZSwgc2NoZW1hKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNUYWJsZSA9IHRoaXMuZ2V0VGFibGUodGFibGUpXG5cbiAgICAgIGlmKCFoYXNUYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlLmJpbmQodGhpcywgdGFibGUsIHNjaGVtYSlcbiAgICAgICAgICB0aGlzLmNyZWF0ZSh0YWJsZSwgc2NoZW1hKVxuICAgICAgICB9LCAzMDApXG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdEQiBIQVMnLCB0YWJsZSwgaGFzVGFibGUpXG5cbiAgICB9KVxuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZSh0YWJsZTogc3RyaW5nLCBzY2hlbWE6IHN0cmluZykge1xuXG4gICAgLy8gY29uc29sZS5sb2coJ09QRU4nLCB0aGlzLmRiLm5hbWUsIHRoaXMudnIsIHRoaXMuZGIudmVybm8sICdPUEVOJyx0aGlzLmRiLmlzT3BlbigpKVxuXG4gICAgaWYoIXRoaXMudGFibGVFeGlzdHModGFibGUpKSB7XG5cbiAgICAgIGlmKHRoaXMuZGIuaXNPcGVuKCkpIGF3YWl0IHRoaXMuZGIuY2xvc2UoKVxuXG4gICAgICBjb25zdCBuZXdTY2hlbWE6IGFueSA9IHsgW3RhYmxlXTogc2NoZW1hIH1cbiAgICAgIGF3YWl0IHRoaXMuZGIudmVyc2lvbih0aGlzLm5leHRWcikuc3RvcmVzKG5ld1NjaGVtYSlcblxuICAgICAgLy8gY29uc29sZS5sb2coJ0NyZWF0ZWQgTmV3IFRhYmxlOiAnLCB0YWJsZSwgc2NoZW1hKVxuXG4gICAgICBpZighdGhpcy5kYi5pc09wZW4oKSkgYXdhaXQgdGhpcy5kYi5vcGVuKClcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2JqZWN0S2V5cyhvYmoxOiBhbnksIG9iajI6IGFueSkge1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iajEpLnJlZHVjZSgodXBkYXRlZE9iajogYW55LCBrZXk6IGFueSkgPT4ge1xuICAgICAgdXBkYXRlZE9ialtrZXldID0gb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpID8gb2JqMltrZXldIDogb2JqMVtrZXldXG4gICAgICByZXR1cm4gdXBkYXRlZE9ialxuICAgIH0sIHt9KVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgREJPcGVuZWQoKSB7XG5cbiAgICBpZighdGhpcy5kYi5pc09wZW4oKSkge1xuICAgICAgYXdhaXQgdGhpcy5kYi5vcGVuKClcbiAgICAgIC50aGVuKCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdPUEVORUQnKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdPUEVORUQgRVJSJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnT1BFTkVEJylcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuXG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVN0cmluZyhpdGVtOiBzdHJpbmd8c3RyaW5nW10pIHtcblxuICAgIGlmKCFpdGVtKSByZXR1cm5cblxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID9cbiAgICAgIGl0ZW0ubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuY2xlYW5TdHJpbmcoaXRlbSkpLmpvaW4oKVxuICAgICAgOiBpdGVtLnNwbGl0KCcsJykubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuY2xlYW5TdHJpbmcoaXRlbSkpLmpvaW4oKVxuXG4gIH1cblxuICBwcml2YXRlIGNsZWFuU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IGNsZWFuU3RyID0gc3RyXG4gICAgICAucmVwbGFjZSgvW15hLXpBLVowLTlcXHNdL2csICcnKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJ18nKVxuXG4gICAgICByZXR1cm4gY2xlYW5TdHIudHJpbSgpLnRvTG93ZXJDYXNlKClcblxuICB9XG5cbn1cbiJdfQ==
@@ -287,10 +287,10 @@ export class LocalStorageManagerService extends ComponentStore {
287
287
  ngOnDestroy() {
288
288
  this.persistence$.unsubscribe();
289
289
  }
290
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
291
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageManagerService, providedIn: 'root' }); }
290
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
291
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageManagerService, providedIn: 'root' }); }
292
292
  }
293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageManagerService, decorators: [{
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageManagerService, decorators: [{
294
294
  type: Injectable,
295
295
  args: [{ providedIn: 'root' }]
296
296
  }], ctorParameters: () => [{ type: i1.ConfigOptions, decorators: [{
@@ -262,10 +262,10 @@ export class LocalStorageSignalsManagerService {
262
262
  validStoreName(str) {
263
263
  return str.toLowerCase().replace(/\s+/g, '_').replace(/[^ -~]/g, '');
264
264
  }
265
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, providedIn: 'root' }); }
265
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageSignalsManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
266
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageSignalsManagerService, providedIn: 'root' }); }
267
267
  }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LocalStorageSignalsManagerService, decorators: [{
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LocalStorageSignalsManagerService, decorators: [{
269
269
  type: Injectable,
270
270
  args: [{ providedIn: 'root' }]
271
271
  }], ctorParameters: () => [{ type: i1.ConfigOptions, decorators: [{
@@ -182,10 +182,10 @@ export class HTTPManagerSignalsService extends RequestSignalsService {
182
182
  const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);
183
183
  return updatedOptions;
184
184
  }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
186
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, providedIn: 'root' }); }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerSignalsService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
186
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerSignalsService, providedIn: 'root' }); }
187
187
  }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerSignalsService, decorators: [{
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerSignalsService, decorators: [{
189
189
  type: Injectable,
190
190
  args: [{
191
191
  providedIn: 'root',
@@ -190,10 +190,10 @@ export class HTTPManagerService extends RequestService {
190
190
  const updatedOptions = this.objectMergerService.mergeOptions(optionsReq);
191
191
  return updatedOptions;
192
192
  }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerService, providedIn: 'root' }); }
193
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerService, deps: [{ token: CONFIG_SETTINGS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
194
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerService, providedIn: 'root' }); }
195
195
  }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HTTPManagerService, decorators: [{
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HTTPManagerService, decorators: [{
197
197
  type: Injectable,
198
198
  args: [{
199
199
  providedIn: 'root',
@@ -158,10 +158,10 @@ export class RequestSignalsService {
158
158
  }
159
159
  : headers;
160
160
  }
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestSignalsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestSignalsService, providedIn: 'root' }); }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, providedIn: 'root' }); }
163
163
  }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RequestSignalsService, decorators: [{
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, decorators: [{
165
165
  type: Injectable,
166
166
  args: [{
167
167
  providedIn: 'root'