@firestitch/system 14.0.0 → 16.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 (100) hide show
  1. package/app/modules/query-logs/components/explain/explain.component.d.ts +1 -1
  2. package/app/modules/query-logs/components/query-log/query-log.component.d.ts +1 -1
  3. package/app/modules/query-logs/components/query-logs/query-logs.component.d.ts +1 -1
  4. package/app/modules/system/components/api-log/api-log.component.d.ts +1 -1
  5. package/app/modules/system/components/api-logs/api-logs.component.d.ts +1 -1
  6. package/app/modules/system/components/cron/cron.component.d.ts +1 -1
  7. package/app/modules/system/components/cron-log/cron-log.component.d.ts +1 -1
  8. package/app/modules/system/components/cron-next-run/cron-next-run.component.d.ts +1 -1
  9. package/app/modules/system/components/crons/crons.component.d.ts +1 -1
  10. package/app/modules/system/components/dashboard/dashboard.component.d.ts +1 -1
  11. package/app/modules/system/components/info/info.component.d.ts +1 -1
  12. package/app/modules/system/components/process/process.component.d.ts +1 -1
  13. package/app/modules/system/components/processes/processes.component.d.ts +1 -1
  14. package/app/modules/system/components/server-log/server-log.component.d.ts +1 -1
  15. package/app/modules/system/components/server-logs/server-logs.component.d.ts +1 -1
  16. package/app/modules/system/components/settings/settings.component.d.ts +1 -1
  17. package/app/modules/system/components/upgrade-logs/upgrade-logs.component.d.ts +1 -1
  18. package/esm2022/app/modules/query-logs/components/explain/explain.component.mjs +26 -0
  19. package/esm2022/app/modules/query-logs/components/query-log/query-log.component.mjs +61 -0
  20. package/esm2022/app/modules/query-logs/components/query-logs/query-logs.component.mjs +89 -0
  21. package/{esm2020 → esm2022}/app/modules/query-logs/query-logs.module.mjs +35 -35
  22. package/esm2022/app/modules/system/components/api-log/api-log.component.mjs +38 -0
  23. package/esm2022/app/modules/system/components/api-logs/api-logs.component.mjs +72 -0
  24. package/esm2022/app/modules/system/components/cron/cron.component.mjs +111 -0
  25. package/esm2022/app/modules/system/components/cron-log/cron-log.component.mjs +39 -0
  26. package/esm2022/app/modules/system/components/cron-next-run/cron-next-run.component.mjs +102 -0
  27. package/esm2022/app/modules/system/components/crons/crons.component.mjs +249 -0
  28. package/esm2022/app/modules/system/components/dashboard/dashboard.component.mjs +92 -0
  29. package/esm2022/app/modules/system/components/info/info.component.mjs +33 -0
  30. package/esm2022/app/modules/system/components/process/process.component.mjs +103 -0
  31. package/esm2022/app/modules/system/components/processes/processes.component.mjs +188 -0
  32. package/esm2022/app/modules/system/components/server-log/server-log.component.mjs +40 -0
  33. package/esm2022/app/modules/system/components/server-logs/server-logs.component.mjs +56 -0
  34. package/esm2022/app/modules/system/components/settings/settings.component.mjs +144 -0
  35. package/esm2022/app/modules/system/components/upgrade-logs/upgrade-logs.component.mjs +44 -0
  36. package/{esm2020 → esm2022}/app/modules/system/fs-system.module.mjs +70 -70
  37. package/{esm2020 → esm2022}/app/modules/system/pipes/key-name-value.pipe.mjs +5 -5
  38. package/{fesm2020 → fesm2022}/firestitch-system.mjs +287 -210
  39. package/{fesm2020 → fesm2022}/firestitch-system.mjs.map +1 -1
  40. package/package.json +5 -11
  41. package/esm2020/app/modules/query-logs/components/explain/explain.component.mjs +0 -24
  42. package/esm2020/app/modules/query-logs/components/query-log/query-log.component.mjs +0 -58
  43. package/esm2020/app/modules/query-logs/components/query-logs/query-logs.component.mjs +0 -84
  44. package/esm2020/app/modules/system/components/api-log/api-log.component.mjs +0 -34
  45. package/esm2020/app/modules/system/components/api-logs/api-logs.component.mjs +0 -69
  46. package/esm2020/app/modules/system/components/cron/cron.component.mjs +0 -105
  47. package/esm2020/app/modules/system/components/cron-log/cron-log.component.mjs +0 -37
  48. package/esm2020/app/modules/system/components/cron-next-run/cron-next-run.component.mjs +0 -99
  49. package/esm2020/app/modules/system/components/crons/crons.component.mjs +0 -236
  50. package/esm2020/app/modules/system/components/dashboard/dashboard.component.mjs +0 -84
  51. package/esm2020/app/modules/system/components/info/info.component.mjs +0 -31
  52. package/esm2020/app/modules/system/components/process/process.component.mjs +0 -98
  53. package/esm2020/app/modules/system/components/processes/processes.component.mjs +0 -178
  54. package/esm2020/app/modules/system/components/server-log/server-log.component.mjs +0 -38
  55. package/esm2020/app/modules/system/components/server-logs/server-logs.component.mjs +0 -53
  56. package/esm2020/app/modules/system/components/settings/settings.component.mjs +0 -138
  57. package/esm2020/app/modules/system/components/upgrade-logs/upgrade-logs.component.mjs +0 -44
  58. package/fesm2015/firestitch-system.mjs +0 -1600
  59. package/fesm2015/firestitch-system.mjs.map +0 -1
  60. /package/{esm2020 → esm2022}/app/modules/query-logs/components/explain/index.mjs +0 -0
  61. /package/{esm2020 → esm2022}/app/modules/query-logs/components/index.mjs +0 -0
  62. /package/{esm2020 → esm2022}/app/modules/query-logs/components/query-log/index.mjs +0 -0
  63. /package/{esm2020 → esm2022}/app/modules/query-logs/components/query-logs/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/app/modules/system/components/api-log/index.mjs +0 -0
  65. /package/{esm2020 → esm2022}/app/modules/system/components/api-logs/index.mjs +0 -0
  66. /package/{esm2020 → esm2022}/app/modules/system/components/cron/index.mjs +0 -0
  67. /package/{esm2020 → esm2022}/app/modules/system/components/cron-log/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/app/modules/system/components/cron-next-run/index.mjs +0 -0
  69. /package/{esm2020 → esm2022}/app/modules/system/components/crons/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/app/modules/system/components/dashboard/index.mjs +0 -0
  71. /package/{esm2020 → esm2022}/app/modules/system/components/info/index.mjs +0 -0
  72. /package/{esm2020 → esm2022}/app/modules/system/components/process/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/app/modules/system/components/processes/index.mjs +0 -0
  74. /package/{esm2020 → esm2022}/app/modules/system/components/server-log/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/app/modules/system/components/server-logs/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/app/modules/system/components/settings/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/app/modules/system/components/upgrade-logs/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/app/modules/system/consts/api-log-states.const.mjs +0 -0
  79. /package/{esm2020 → esm2022}/app/modules/system/consts/cron-log-states.const.mjs +0 -0
  80. /package/{esm2020 → esm2022}/app/modules/system/consts/cron-process-states.const.mjs +0 -0
  81. /package/{esm2020 → esm2022}/app/modules/system/consts/cron-states.const.mjs +0 -0
  82. /package/{esm2020 → esm2022}/app/modules/system/consts/index.mjs +0 -0
  83. /package/{esm2020 → esm2022}/app/modules/system/consts/process-process-states.const.mjs +0 -0
  84. /package/{esm2020 → esm2022}/app/modules/system/consts/process-states.const.mjs +0 -0
  85. /package/{esm2020 → esm2022}/app/modules/system/consts/setting-interface-types.const.mjs +0 -0
  86. /package/{esm2020 → esm2022}/app/modules/system/enums/api-log-state.enum.mjs +0 -0
  87. /package/{esm2020 → esm2022}/app/modules/system/enums/cron-log-state.enum.mjs +0 -0
  88. /package/{esm2020 → esm2022}/app/modules/system/enums/cron-state.enum.mjs +0 -0
  89. /package/{esm2020 → esm2022}/app/modules/system/enums/index.mjs +0 -0
  90. /package/{esm2020 → esm2022}/app/modules/system/enums/process-state.enum.mjs +0 -0
  91. /package/{esm2020 → esm2022}/app/modules/system/enums/setting-interface-type.enum.mjs +0 -0
  92. /package/{esm2020 → esm2022}/app/modules/system/helpers/index-name-value.mjs +0 -0
  93. /package/{esm2020 → esm2022}/app/modules/system/injectors/system-config.injector.mjs +0 -0
  94. /package/{esm2020 → esm2022}/app/modules/system/interfaces/dashboard-action.mjs +0 -0
  95. /package/{esm2020 → esm2022}/app/modules/system/interfaces/index.mjs +0 -0
  96. /package/{esm2020 → esm2022}/app/modules/system/interfaces/process-action.mjs +0 -0
  97. /package/{esm2020 → esm2022}/app/modules/system/interfaces/process.mjs +0 -0
  98. /package/{esm2020 → esm2022}/app/modules/system/interfaces/system-config.mjs +0 -0
  99. /package/{esm2020 → esm2022}/firestitch-system.mjs +0 -0
  100. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@firestitch/system",
3
- "version": "14.0.0",
3
+ "version": "16.0.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/Firestitch/ngx-system"
@@ -17,11 +17,7 @@
17
17
  "tslib": "^2.0.0"
18
18
  },
19
19
  "sideEffects": false,
20
- "module": "fesm2015/firestitch-system.mjs",
21
- "es2020": "fesm2020/firestitch-system.mjs",
22
- "esm2020": "esm2020/firestitch-system.mjs",
23
- "fesm2020": "fesm2020/firestitch-system.mjs",
24
- "fesm2015": "fesm2015/firestitch-system.mjs",
20
+ "module": "fesm2022/firestitch-system.mjs",
25
21
  "typings": "index.d.ts",
26
22
  "exports": {
27
23
  "./package.json": {
@@ -29,11 +25,9 @@
29
25
  },
30
26
  ".": {
31
27
  "types": "./index.d.ts",
32
- "esm2020": "./esm2020/firestitch-system.mjs",
33
- "es2020": "./fesm2020/firestitch-system.mjs",
34
- "es2015": "./fesm2015/firestitch-system.mjs",
35
- "node": "./fesm2015/firestitch-system.mjs",
36
- "default": "./fesm2020/firestitch-system.mjs"
28
+ "esm2022": "./esm2022/firestitch-system.mjs",
29
+ "esm": "./esm2022/firestitch-system.mjs",
30
+ "default": "./fesm2022/firestitch-system.mjs"
37
31
  }
38
32
  }
39
33
  }
@@ -1,24 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/button";
5
- import * as i2 from "@angular/material/dialog";
6
- import * as i3 from "@firestitch/form";
7
- import * as i4 from "@firestitch/dialog";
8
- import * as i5 from "@angular/common";
9
- export class ExplainComponent {
10
- constructor(_data) {
11
- this._data = _data;
12
- this.explain = _data.explain;
13
- }
14
- }
15
- ExplainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExplainComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
16
- ExplainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ExplainComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>Explain</h1>\n <mat-dialog-content>\n <div class=\"explain-popover\">{{explain | json}}</div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".explain-popover{white-space:pre}\n"], dependencies: [{ kind: "component", type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i4.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "pipe", type: i5.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExplainComponent, decorators: [{
18
- type: Component,
19
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>Explain</h1>\n <mat-dialog-content>\n <div class=\"explain-popover\">{{explain | json}}</div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".explain-popover{white-space:pre}\n"] }]
20
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
21
- type: Inject,
22
- args: [MAT_DIALOG_DATA]
23
- }] }]; } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcXVlcnktbG9ncy9jb21wb25lbnRzL2V4cGxhaW4vZXhwbGFpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcXVlcnktbG9ncy9jb21wb25lbnRzL2V4cGxhaW4vZXhwbGFpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUFRM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUkzQixZQUNtQyxLQUFVO1FBQVYsVUFBSyxHQUFMLEtBQUssQ0FBSztRQUUzQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQzs7NkdBUlUsZ0JBQWdCLGtCQUtqQixlQUFlO2lHQUxkLGdCQUFnQixvRENWN0IsNFhBZUE7MkZETGEsZ0JBQWdCO2tCQUw1QixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQU81QyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2V4cGxhaW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHBsYWluLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBsYWluQ29tcG9uZW50IHtcblxuICBwdWJsaWMgZXhwbGFpbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YTogYW55LFxuICApIHtcbiAgICB0aGlzLmV4cGxhaW4gPSBfZGF0YS5leHBsYWluO1xuICB9XG59XG4iLCI8ZnMtZGlhbG9nPlxuICA8aDEgbWF0LWRpYWxvZy10aXRsZT5FeHBsYWluPC9oMT5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZXhwbGFpbi1wb3BvdmVyXCI+e3tleHBsYWluIHwganNvbn19PC9kaXY+XG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidW5kZWZpbmVkXCI+XG4gICAgICBEb25lXG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
@@ -1,58 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
3
- import { ExplainComponent } from '../explain';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/material/dialog";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@angular/material/tabs";
8
- import * as i4 from "@angular/material/button";
9
- import * as i5 from "@firestitch/form";
10
- import * as i6 from "@firestitch/label";
11
- import * as i7 from "@firestitch/popover";
12
- import * as i8 from "@firestitch/dialog";
13
- import * as i9 from "@firestitch/clipboard";
14
- import * as i10 from "@firestitch/common";
15
- export class QueryLogComponent {
16
- constructor(_data, _dialog) {
17
- this._data = _data;
18
- this._dialog = _dialog;
19
- this.accessTypes = {
20
- NULL: 'This access method means MySQL can resolve the query during the optimization phase and will not even access the table or index during the execution stage.',
21
- system: 'The table is empty or has one row.',
22
- const: 'The value of the column can be treated as a constant (there is one row matching the query). Note: Primary Key Lookup, Unique Index Lookup',
23
- eq_ref: 'The index is clustered and is being used by the operation (either the index is a PRIMARY KEY or UNIQUE INDEX with all key columns defined as NOT NULL)',
24
- ref: 'The indexed column was accessed using an equality operator Note: The ref_or_null access type is a variation on ref. It means MySQL must do a second lookup to find NULL entries after doing the initial lookup.',
25
- fulltext: 'Operation (JOIN) is using the table’s fulltext index',
26
- index: 'The entire index is scanned to find a match for the query. Note: The main advantage is that this avoids sorting. The biggest disadvantage is the cost of reading an entire table in index order. This usually means accessing the rows in random order, which is very expensive.',
27
- index_merge: 'This join type indicates that the Index Merge optimization is used. In this case, the key column in the output row contains a list of indexes used. It indicates a query can make limited use of multiple indexes on a single table.',
28
- range: 'This type replaces eq_ref for some IN subqueries of the following form: value IN (SELECT primary_key FROM single_table WHERE some_expr)',
29
- unique_subquery: '',
30
- ALL: 'MySQL scans the entire table to satisfy the query',
31
- };
32
- this.queryLog = _data.queryLog;
33
- }
34
- openExplain() {
35
- this._dialog.open(ExplainComponent, {
36
- data: { explain: this.explain },
37
- });
38
- }
39
- get explain() {
40
- return this.queryLog.explain;
41
- }
42
- get queryBlock() {
43
- return this.explain?.queryBlock;
44
- }
45
- get orderingOperation() {
46
- return this.queryBlock?.orderingOperation;
47
- }
48
- }
49
- QueryLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QueryLogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
50
- QueryLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: QueryLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <h1 mat-dialog-title>Query Log</h1>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>Duration</fs-label>\n {{queryLog.duration}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Optimized</fs-label>\n {{queryLog.optimized ? 'Yes' : 'No'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{queryLog.queryCost}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Raw Explain</fs-label>\n <a (click)=\"openExplain()\">View</a>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>URL</fs-label>\n {{queryLog.path | fsFormatTruncate: 50}}\n </fs-label-field>\n </div>\n\n <mat-tab-group>\n <mat-tab label=\"Query\">\n <fs-clipboard-button\n [content]=\"queryLog.prettyQuery\">\n </fs-clipboard-button>\n <div [innerHTML]=\"queryLog.prettyQuery\" class=\"query\"></div>\n </mat-tab>\n \n <mat-tab label=\"Explain\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock, selectId: queryBlock.selectId, costInfo: queryBlock.costInfo }\"></ng-container>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n\n<ng-template #nestedLoop let-queryBlock=\"queryBlock\" let-selectId=\"selectId\" let-costInfo=\"costInfo\">\n <ng-container *ngIf=\"selectId\">\n <h1>Select {{selectId}}</h1>\n </ng-container>\n \n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <ng-container *ngIf=\"costInfo?.queryCost\">\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{costInfo.queryCost}}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"queryBlock.orderingOperation\">\n <fs-label-field>\n <fs-label>Ordering Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.groupingOperation\">\n <fs-label-field>\n <fs-label>Grouping Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.duplicatesRemoval\">\n <fs-label-field>\n <fs-label>Duplicates Removal</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </fs-label-field>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"queryBlock.orderingOperation\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.groupingOperation\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.duplicatesRemoval\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.table\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: { nestedLoop: [ queryBlock ]} }\"></ng-container>\n \n <ng-container *ngIf=\"queryBlock.table.attachedSubqueries\"> \n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.table.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container> \n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n </ng-container>\n </ng-container> \n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.nestedLoop\">\n <table class=\"fs-list-table style-line\">\n <thead>\n <tr>\n <th>Table</th>\n <th>Type</th>\n <th>Keys</th>\n <th>Ref</th>\n <th>Rows</th>\n <th>Filtered</th>\n <th>Extra</th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of queryBlock.nestedLoop; let index = index\">\n <tr>\n <td>\n {{item.table.tableName}}\n </td>\n <td>\n <fs-popover [template]=\"accessTypePopover\" [data]=\"item.table.accessType\">\n <span class=\"access-type\" [ngClass]=\"item.table.accessType\">{{item.table.accessType}}</span>\n </fs-popover> \n </td>\n <td>\n <fs-popover \n [template]=\"keysPopover\"\n [maxWidth]=\"null\"\n [data]=\"{ possibleKeys: item.table.possibleKeys, key: item.table.key }\">\n {{item.table.key}}\n </fs-popover>\n </td>\n <td>\n <div class=\"fs-delimit\">\n <ng-container *ngFor=\"let ref of item.table.ref\">\n <span>{{ref}}</span>\n </ng-container>\n </div>\n </td>\n <td>\n {{item.table.rowsExaminedPerScan}}\n </td>\n <td>\n {{item.table.filtered}}\n </td>\n <td>\n <div class=\"fs-delimit\">\n <ng-container *ngIf=\"item.table.indexCondition\">\n <span>\n <fs-popover \n [template]=\"usingIndexCondition\" \n [maxWidth]=\"null\"\n [data]=\"item.table.indexCondition\">\n Using Index Condition\n </fs-popover>\n </span>\n </ng-container>\n <ng-container *ngIf=\"item.table.attachedCondition\">\n <span>\n <fs-popover \n [template]=\"usingWhere\" \n [maxWidth]=\"null\"\n [data]=\"item.table.attachedCondition\">\n Using Where\n </fs-popover>\n </span>\n </ng-container>\n <ng-container *ngIf=\"item.usingIndex\">\n <span>Using Index</span>\n </ng-container> \n <ng-container *ngIf=\"item.usingFilesort\">\n <span class=\"critical\">Using File Sort</span>\n </ng-container>\n \n <ng-container *ngIf=\"item.usingTemporaryTable\">\n <span class=\"critical\">Temporary Table</span>\n </ng-container>\n </div>\n </td>\n <td> \n <fs-popover [template]=\"tableCostPopover\" [data]=\"item.table?.costInfo\">\n {{item.table?.costInfo.prefixCost}}\n </fs-popover>\n <ng-template #tableCostPopover let-data=\"data\">\n <div>Eval Cost: {{data.evalCost}}</div>\n <div>Read Cost: {{data.readCost}}</div>\n <div>Prefix Cost: {{data.prefixCost}}</div>\n <div>Data Read Per Join: {{data.dataReadPerJoin}}</div>\n </ng-template>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <br>\n </ng-container> \n \n <ng-container *ngIf=\"queryBlock.selectListSubqueries\">\n <br>\n <fs-label>Select List Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.selectListSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container> \n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n </ng-container>\n </ng-container>\n<!-- \n <ng-container *ngIf=\"queryBlock.queryBlockattachedSubqueries\">\n <br>\n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n </ng-container>\n </ng-container> -->\n</ng-template>\n\n<ng-template #keysPopover let-data=\"data\">\n <div class=\"fs-delimit\">\n <ng-container *ngFor=\"let possibleKey of data.possibleKeys\">\n <span [ngClass]=\"{ 'query-log-used-key': possibleKey === data.key }\">{{possibleKey}}</span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #usingWhere let-data=\"data\">\n {{data}}\n</ng-template>\n\n<ng-template #usingIndexCondition let-data=\"data\">\n {{data}}\n</ng-template>\n\n<ng-template #accessTypePopover let-data=\"data\">\n {{accessTypes[data]}}\n</ng-template>\n\n\n<ng-template #queryBlockCritical let-queryBlock=\"queryBlock\">\n <div class=\"fs-delimit\">\n <ng-container *ngIf=\"queryBlock.usingFilesort\">\n <span class=\"critical\">Using File Sort</span>\n </ng-container>\n \n <ng-container *ngIf=\"queryBlock.usingTemporaryTable\">\n <span class=\"critical\">Temporary Table</span>\n </ng-container>\n </div>\n</ng-template>", styles: ["::ng-deep .query-log-used-key{font-weight:700}::ng-deep .explain-popover{white-space:pre}.critical{color:red}fs-clipboard-button{float:right}.query{white-space:break-spaces}.access-type{color:green}.access-type.fulltext,.access-type.index,.access-type.range{color:orange}.access-type.ALL{color:red}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i5.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { kind: "component", type: i6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i7.FsPopoverComponent, selector: "fs-popover" }, { kind: "component", type: i8.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i9.FsClipboardButtonComponent, selector: "fs-clipboard-button", inputs: ["content", "tooltip"] }, { kind: "pipe", type: i10.FsFormatTruncatePipe, name: "fsFormatTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QueryLogComponent, decorators: [{
52
- type: Component,
53
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog>\n <h1 mat-dialog-title>Query Log</h1>\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>Duration</fs-label>\n {{queryLog.duration}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Optimized</fs-label>\n {{queryLog.optimized ? 'Yes' : 'No'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{queryLog.queryCost}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Raw Explain</fs-label>\n <a (click)=\"openExplain()\">View</a>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>URL</fs-label>\n {{queryLog.path | fsFormatTruncate: 50}}\n </fs-label-field>\n </div>\n\n <mat-tab-group>\n <mat-tab label=\"Query\">\n <fs-clipboard-button\n [content]=\"queryLog.prettyQuery\">\n </fs-clipboard-button>\n <div [innerHTML]=\"queryLog.prettyQuery\" class=\"query\"></div>\n </mat-tab>\n \n <mat-tab label=\"Explain\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock, selectId: queryBlock.selectId, costInfo: queryBlock.costInfo }\"></ng-container>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n\n<ng-template #nestedLoop let-queryBlock=\"queryBlock\" let-selectId=\"selectId\" let-costInfo=\"costInfo\">\n <ng-container *ngIf=\"selectId\">\n <h1>Select {{selectId}}</h1>\n </ng-container>\n \n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <ng-container *ngIf=\"costInfo?.queryCost\">\n <fs-label-field>\n <fs-label>Query Cost</fs-label>\n {{costInfo.queryCost}}\n </fs-label-field>\n </ng-container>\n <ng-container *ngIf=\"queryBlock.orderingOperation\">\n <fs-label-field>\n <fs-label>Ordering Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.groupingOperation\">\n <fs-label-field>\n <fs-label>Grouping Operation</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </fs-label-field>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.duplicatesRemoval\">\n <fs-label-field>\n <fs-label>Duplicates Removal</fs-label>\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </fs-label-field>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"queryBlock.orderingOperation\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.orderingOperation }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.groupingOperation\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.groupingOperation }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.duplicatesRemoval\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: queryBlock.duplicatesRemoval }\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.table\">\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: { nestedLoop: [ queryBlock ]} }\"></ng-container>\n \n <ng-container *ngIf=\"queryBlock.table.attachedSubqueries\"> \n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.table.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container> \n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n </ng-container>\n </ng-container> \n </ng-container>\n\n <ng-container *ngIf=\"queryBlock.nestedLoop\">\n <table class=\"fs-list-table style-line\">\n <thead>\n <tr>\n <th>Table</th>\n <th>Type</th>\n <th>Keys</th>\n <th>Ref</th>\n <th>Rows</th>\n <th>Filtered</th>\n <th>Extra</th>\n <th>Cost</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let item of queryBlock.nestedLoop; let index = index\">\n <tr>\n <td>\n {{item.table.tableName}}\n </td>\n <td>\n <fs-popover [template]=\"accessTypePopover\" [data]=\"item.table.accessType\">\n <span class=\"access-type\" [ngClass]=\"item.table.accessType\">{{item.table.accessType}}</span>\n </fs-popover> \n </td>\n <td>\n <fs-popover \n [template]=\"keysPopover\"\n [maxWidth]=\"null\"\n [data]=\"{ possibleKeys: item.table.possibleKeys, key: item.table.key }\">\n {{item.table.key}}\n </fs-popover>\n </td>\n <td>\n <div class=\"fs-delimit\">\n <ng-container *ngFor=\"let ref of item.table.ref\">\n <span>{{ref}}</span>\n </ng-container>\n </div>\n </td>\n <td>\n {{item.table.rowsExaminedPerScan}}\n </td>\n <td>\n {{item.table.filtered}}\n </td>\n <td>\n <div class=\"fs-delimit\">\n <ng-container *ngIf=\"item.table.indexCondition\">\n <span>\n <fs-popover \n [template]=\"usingIndexCondition\" \n [maxWidth]=\"null\"\n [data]=\"item.table.indexCondition\">\n Using Index Condition\n </fs-popover>\n </span>\n </ng-container>\n <ng-container *ngIf=\"item.table.attachedCondition\">\n <span>\n <fs-popover \n [template]=\"usingWhere\" \n [maxWidth]=\"null\"\n [data]=\"item.table.attachedCondition\">\n Using Where\n </fs-popover>\n </span>\n </ng-container>\n <ng-container *ngIf=\"item.usingIndex\">\n <span>Using Index</span>\n </ng-container> \n <ng-container *ngIf=\"item.usingFilesort\">\n <span class=\"critical\">Using File Sort</span>\n </ng-container>\n \n <ng-container *ngIf=\"item.usingTemporaryTable\">\n <span class=\"critical\">Temporary Table</span>\n </ng-container>\n </div>\n </td>\n <td> \n <fs-popover [template]=\"tableCostPopover\" [data]=\"item.table?.costInfo\">\n {{item.table?.costInfo.prefixCost}}\n </fs-popover>\n <ng-template #tableCostPopover let-data=\"data\">\n <div>Eval Cost: {{data.evalCost}}</div>\n <div>Read Cost: {{data.readCost}}</div>\n <div>Prefix Cost: {{data.prefixCost}}</div>\n <div>Data Read Per Join: {{data.dataReadPerJoin}}</div>\n </ng-template>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <br>\n </ng-container> \n \n <ng-container *ngIf=\"queryBlock.selectListSubqueries\">\n <br>\n <fs-label>Select List Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.selectListSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container> \n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock, selectId: subquery.queryBlock.selectId, costInfo: subquery.queryBlock.costInfo }\"></ng-container>\n </ng-container>\n </ng-container>\n<!-- \n <ng-container *ngIf=\"queryBlock.queryBlockattachedSubqueries\">\n <br>\n <fs-label>Attached Subqueries</fs-label>\n <ng-container *ngFor=\"let subquery of queryBlock.attachedSubqueries\">\n <ng-container [ngTemplateOutlet]=\"queryBlockCritical\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"nestedLoop\" [ngTemplateOutletContext]=\"{ queryBlock: subquery.queryBlock }\"></ng-container>\n </ng-container>\n </ng-container> -->\n</ng-template>\n\n<ng-template #keysPopover let-data=\"data\">\n <div class=\"fs-delimit\">\n <ng-container *ngFor=\"let possibleKey of data.possibleKeys\">\n <span [ngClass]=\"{ 'query-log-used-key': possibleKey === data.key }\">{{possibleKey}}</span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #usingWhere let-data=\"data\">\n {{data}}\n</ng-template>\n\n<ng-template #usingIndexCondition let-data=\"data\">\n {{data}}\n</ng-template>\n\n<ng-template #accessTypePopover let-data=\"data\">\n {{accessTypes[data]}}\n</ng-template>\n\n\n<ng-template #queryBlockCritical let-queryBlock=\"queryBlock\">\n <div class=\"fs-delimit\">\n <ng-container *ngIf=\"queryBlock.usingFilesort\">\n <span class=\"critical\">Using File Sort</span>\n </ng-container>\n \n <ng-container *ngIf=\"queryBlock.usingTemporaryTable\">\n <span class=\"critical\">Temporary Table</span>\n </ng-container>\n </div>\n</ng-template>", styles: ["::ng-deep .query-log-used-key{font-weight:700}::ng-deep .explain-popover{white-space:pre}.critical{color:red}fs-clipboard-button{float:right}.query{white-space:break-spaces}.access-type{color:green}.access-type.fulltext,.access-type.index,.access-type.range{color:orange}.access-type.ALL{color:red}\n"] }]
54
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
55
- type: Inject,
56
- args: [MAT_DIALOG_DATA]
57
- }] }, { type: i1.MatDialog }]; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9xdWVyeS1sb2dzL2NvbXBvbmVudHMvcXVlcnktbG9nL3F1ZXJ5LWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcXVlcnktbG9ncy9jb21wb25lbnRzL3F1ZXJ5LWxvZy9xdWVyeS1sb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7OztBQVE5QyxNQUFNLE9BQU8saUJBQWlCO0lBaUI1QixZQUNtQyxLQUFVLEVBQ25DLE9BQWtCO1FBRE8sVUFBSyxHQUFMLEtBQUssQ0FBSztRQUNuQyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBaEJyQixnQkFBVyxHQUFHO1lBQ25CLElBQUksRUFBRSw0SkFBNEo7WUFDbEssTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxLQUFLLEVBQUUsMklBQTJJO1lBQ2xKLE1BQU0sRUFBRSx3SkFBd0o7WUFDaEssR0FBRyxFQUFFLGlOQUFpTjtZQUN0TixRQUFRLEVBQUUsc0RBQXNEO1lBQ2hFLEtBQUssRUFBRSxrUkFBa1I7WUFDelIsV0FBVyxFQUFFLHNPQUFzTztZQUNuUCxLQUFLLEVBQUUseUlBQXlJO1lBQ2hKLGVBQWUsRUFBRSxFQUFFO1lBQ25CLEdBQUcsRUFBRSxtREFBbUQ7U0FDekQsQ0FBQztRQU1BLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNsQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUM7SUFDNUMsQ0FBQzs7OEdBeENVLGlCQUFpQixrQkFrQmxCLGVBQWU7a0dBbEJkLGlCQUFpQixvRENiOUIsMnBVQXFRYzsyRkR4UEQsaUJBQWlCO2tCQUw3QixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQW9CNUMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuXG5pbXBvcnQgeyBFeHBsYWluQ29tcG9uZW50IH0gZnJvbSAnLi4vZXhwbGFpbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1sb2cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1sb2cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5TG9nQ29tcG9uZW50IHtcblxuICBwdWJsaWMgcXVlcnlMb2c7XG4gIHB1YmxpYyBhY2Nlc3NUeXBlcyA9IHtcbiAgICBOVUxMOiAnVGhpcyBhY2Nlc3MgbWV0aG9kIG1lYW5zIE15U1FMIGNhbiByZXNvbHZlIHRoZSBxdWVyeSBkdXJpbmcgdGhlIG9wdGltaXphdGlvbiBwaGFzZSBhbmQgd2lsbCBub3QgZXZlbiBhY2Nlc3MgdGhlIHRhYmxlIG9yIGluZGV4IGR1cmluZyB0aGUgZXhlY3V0aW9uIHN0YWdlLicsXG4gICAgc3lzdGVtOiAnVGhlIHRhYmxlIGlzIGVtcHR5IG9yIGhhcyBvbmUgcm93LicsXG4gICAgY29uc3Q6ICdUaGUgdmFsdWUgb2YgdGhlIGNvbHVtbiBjYW4gYmUgdHJlYXRlZCBhcyBhIGNvbnN0YW50ICh0aGVyZSBpcyBvbmUgcm93IG1hdGNoaW5nIHRoZSBxdWVyeSkuIE5vdGU6IFByaW1hcnkgS2V5IExvb2t1cCwgVW5pcXVlIEluZGV4IExvb2t1cCcsXG4gICAgZXFfcmVmOiAnVGhlIGluZGV4IGlzIGNsdXN0ZXJlZCBhbmQgaXMgYmVpbmcgdXNlZCBieSB0aGUgb3BlcmF0aW9uIChlaXRoZXIgdGhlIGluZGV4IGlzIGEgUFJJTUFSWSBLRVkgb3IgVU5JUVVFIElOREVYIHdpdGggYWxsIGtleSBjb2x1bW5zIGRlZmluZWQgYXMgTk9UIE5VTEwpJyxcbiAgICByZWY6ICdUaGUgaW5kZXhlZCBjb2x1bW4gd2FzIGFjY2Vzc2VkIHVzaW5nIGFuIGVxdWFsaXR5IG9wZXJhdG9yIE5vdGU6IFRoZSByZWZfb3JfbnVsbCBhY2Nlc3MgdHlwZSBpcyBhIHZhcmlhdGlvbiBvbiByZWYuIEl0IG1lYW5zIE15U1FMIG11c3QgZG8gYSBzZWNvbmQgbG9va3VwIHRvIGZpbmQgTlVMTCBlbnRyaWVzIGFmdGVyIGRvaW5nIHRoZSBpbml0aWFsIGxvb2t1cC4nLFxuICAgIGZ1bGx0ZXh0OiAnT3BlcmF0aW9uIChKT0lOKSBpcyB1c2luZyB0aGUgdGFibGXigJlzIGZ1bGx0ZXh0IGluZGV4JyxcbiAgICBpbmRleDogJ1RoZSBlbnRpcmUgaW5kZXggaXMgc2Nhbm5lZCB0byBmaW5kIGEgbWF0Y2ggZm9yIHRoZSBxdWVyeS4gTm90ZTogVGhlIG1haW4gYWR2YW50YWdlIGlzIHRoYXQgdGhpcyBhdm9pZHMgc29ydGluZy4gVGhlIGJpZ2dlc3QgZGlzYWR2YW50YWdlIGlzIHRoZSBjb3N0IG9mIHJlYWRpbmcgYW4gZW50aXJlIHRhYmxlIGluIGluZGV4IG9yZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYWNjZXNzaW5nIHRoZSByb3dzIGluIHJhbmRvbSBvcmRlciwgd2hpY2ggaXMgdmVyeSBleHBlbnNpdmUuJyxcbiAgICBpbmRleF9tZXJnZTogJ1RoaXMgam9pbiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBJbmRleCBNZXJnZSBvcHRpbWl6YXRpb24gaXMgdXNlZC4gSW4gdGhpcyBjYXNlLCB0aGUga2V5IGNvbHVtbiBpbiB0aGUgb3V0cHV0IHJvdyBjb250YWlucyBhIGxpc3Qgb2YgaW5kZXhlcyB1c2VkLiBJdCBpbmRpY2F0ZXMgYSBxdWVyeSBjYW4gbWFrZSBsaW1pdGVkIHVzZSBvZiBtdWx0aXBsZSBpbmRleGVzIG9uIGEgc2luZ2xlIHRhYmxlLicsXG4gICAgcmFuZ2U6ICdUaGlzIHR5cGUgcmVwbGFjZXMgZXFfcmVmIGZvciBzb21lIElOIHN1YnF1ZXJpZXMgb2YgdGhlIGZvbGxvd2luZyBmb3JtOiB2YWx1ZSBJTiAoU0VMRUNUIHByaW1hcnlfa2V5IEZST00gc2luZ2xlX3RhYmxlIFdIRVJFIHNvbWVfZXhwciknLFxuICAgIHVuaXF1ZV9zdWJxdWVyeTogJycsXG4gICAgQUxMOiAnTXlTUUwgc2NhbnMgdGhlIGVudGlyZSB0YWJsZSB0byBzYXRpc2Z5IHRoZSBxdWVyeScsXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgX2RhdGE6IGFueSxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7XG4gICAgdGhpcy5xdWVyeUxvZyA9IF9kYXRhLnF1ZXJ5TG9nO1xuICB9XG5cbiAgcHVibGljIG9wZW5FeHBsYWluKCkge1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEV4cGxhaW5Db21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgZXhwbGFpbjogdGhpcy5leHBsYWluIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGV4cGxhaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlMb2cuZXhwbGFpbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnlCbG9jaygpIHtcbiAgICByZXR1cm4gdGhpcy5leHBsYWluPy5xdWVyeUJsb2NrO1xuICB9XG5cbiAgcHVibGljIGdldCBvcmRlcmluZ09wZXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeUJsb2NrPy5vcmRlcmluZ09wZXJhdGlvbjtcbiAgfVxufVxuIiwiPGZzLWRpYWxvZz5cbiAgPGgxIG1hdC1kaWFsb2ctdGl0bGU+UXVlcnkgTG9nPC9oMT5cbiAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC1sZy53cmFwLmFsaWduLXN0YXJ0XCI+XG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgIDxmcy1sYWJlbD5EdXJhdGlvbjwvZnMtbGFiZWw+XG4gICAgICAgIHt7cXVlcnlMb2cuZHVyYXRpb259fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+T3B0aW1pemVkPC9mcy1sYWJlbD5cbiAgICAgICAge3txdWVyeUxvZy5vcHRpbWl6ZWQgPyAnWWVzJyA6ICdObyd9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+UXVlcnkgQ29zdDwvZnMtbGFiZWw+XG4gICAgICAgIHt7cXVlcnlMb2cucXVlcnlDb3N0fX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlJhdyBFeHBsYWluPC9mcy1sYWJlbD5cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5FeHBsYWluKClcIj5WaWV3PC9hPlxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+VVJMPC9mcy1sYWJlbD5cbiAgICAgICAge3txdWVyeUxvZy5wYXRoIHwgZnNGb3JtYXRUcnVuY2F0ZTogNTB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgPG1hdC10YWIgbGFiZWw9XCJRdWVyeVwiPlxuICAgICAgICA8ZnMtY2xpcGJvYXJkLWJ1dHRvblxuICAgICAgICAgIFtjb250ZW50XT1cInF1ZXJ5TG9nLnByZXR0eVF1ZXJ5XCI+XG4gICAgICAgIDwvZnMtY2xpcGJvYXJkLWJ1dHRvbj5cbiAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cInF1ZXJ5TG9nLnByZXR0eVF1ZXJ5XCIgY2xhc3M9XCJxdWVyeVwiPjwvZGl2PlxuICAgICAgPC9tYXQtdGFiPlxuICAgICAgXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkV4cGxhaW5cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJuZXN0ZWRMb29wXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogcXVlcnlCbG9jaywgc2VsZWN0SWQ6IHF1ZXJ5QmxvY2suc2VsZWN0SWQsIGNvc3RJbmZvOiBxdWVyeUJsb2NrLmNvc3RJbmZvIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ1bmRlZmluZWRcIj5cbiAgICAgIERvbmVcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cblxuPG5nLXRlbXBsYXRlICNuZXN0ZWRMb29wIGxldC1xdWVyeUJsb2NrPVwicXVlcnlCbG9ja1wiIGxldC1zZWxlY3RJZD1cInNlbGVjdElkXCIgbGV0LWNvc3RJbmZvPVwiY29zdEluZm9cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdElkXCI+XG4gICAgPGgxPlNlbGVjdCB7e3NlbGVjdElkfX08L2gxPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgXG4gIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXAuYWxpZ24tc3RhcnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29zdEluZm8/LnF1ZXJ5Q29zdFwiPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+UXVlcnkgQ29zdDwvZnMtbGFiZWw+XG4gICAgICAgIHt7Y29zdEluZm8ucXVlcnlDb3N0fX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2sub3JkZXJpbmdPcGVyYXRpb25cIj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPk9yZGVyaW5nIE9wZXJhdGlvbjwvZnMtbGFiZWw+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVlcnlCbG9ja0NyaXRpY2FsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogcXVlcnlCbG9jay5vcmRlcmluZ09wZXJhdGlvbiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2suZ3JvdXBpbmdPcGVyYXRpb25cIj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPkdyb3VwaW5nIE9wZXJhdGlvbjwvZnMtbGFiZWw+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVlcnlCbG9ja0NyaXRpY2FsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogcXVlcnlCbG9jay5ncm91cGluZ09wZXJhdGlvbiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2suZHVwbGljYXRlc1JlbW92YWxcIj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPkR1cGxpY2F0ZXMgUmVtb3ZhbDwvZnMtbGFiZWw+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVlcnlCbG9ja0NyaXRpY2FsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogcXVlcnlCbG9jay5kdXBsaWNhdGVzUmVtb3ZhbCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlCbG9jay5vcmRlcmluZ09wZXJhdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTG9vcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHF1ZXJ5QmxvY2sub3JkZXJpbmdPcGVyYXRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlCbG9jay5ncm91cGluZ09wZXJhdGlvblwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTG9vcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHF1ZXJ5QmxvY2suZ3JvdXBpbmdPcGVyYXRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlCbG9jay5kdXBsaWNhdGVzUmVtb3ZhbFwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTG9vcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHF1ZXJ5QmxvY2suZHVwbGljYXRlc1JlbW92YWwgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlCbG9jay50YWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTG9vcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHsgbmVzdGVkTG9vcDogWyBxdWVyeUJsb2NrIF19IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2sudGFibGUuYXR0YWNoZWRTdWJxdWVyaWVzXCI+ICBcbiAgICAgIDxmcy1sYWJlbD5BdHRhY2hlZCBTdWJxdWVyaWVzPC9mcy1sYWJlbD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1YnF1ZXJ5IG9mIHF1ZXJ5QmxvY2sudGFibGUuYXR0YWNoZWRTdWJxdWVyaWVzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVlcnlCbG9ja0NyaXRpY2FsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogc3VicXVlcnkucXVlcnlCbG9jayB9XCI+PC9uZy1jb250YWluZXI+IFxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5lc3RlZExvb3BcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBxdWVyeUJsb2NrOiBzdWJxdWVyeS5xdWVyeUJsb2NrLCBzZWxlY3RJZDogc3VicXVlcnkucXVlcnlCbG9jay5zZWxlY3RJZCwgY29zdEluZm86IHN1YnF1ZXJ5LnF1ZXJ5QmxvY2suY29zdEluZm8gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+ICAgIFxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVlcnlCbG9jay5uZXN0ZWRMb29wXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwiZnMtbGlzdC10YWJsZSBzdHlsZS1saW5lXCI+XG4gICAgICAgPHRoZWFkPlxuICAgICAgICAgPHRyPlxuICAgICAgICAgICA8dGg+VGFibGU8L3RoPlxuICAgICAgICAgICA8dGg+VHlwZTwvdGg+XG4gICAgICAgICAgIDx0aD5LZXlzPC90aD5cbiAgICAgICAgICAgPHRoPlJlZjwvdGg+XG4gICAgICAgICAgIDx0aD5Sb3dzPC90aD5cbiAgICAgICAgICAgPHRoPkZpbHRlcmVkPC90aD5cbiAgICAgICAgICAgPHRoPkV4dHJhPC90aD5cbiAgICAgICAgICAgPHRoPkNvc3Q8L3RoPlxuICAgICAgICAgPC90cj5cbiAgICAgICA8L3RoZWFkPlxuICAgICAgIDx0Ym9keT5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlcnlCbG9jay5uZXN0ZWRMb29wOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAge3tpdGVtLnRhYmxlLnRhYmxlTmFtZX19XG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICA8ZnMtcG9wb3ZlciBbdGVtcGxhdGVdPVwiYWNjZXNzVHlwZVBvcG92ZXJcIiBbZGF0YV09XCJpdGVtLnRhYmxlLmFjY2Vzc1R5cGVcIj5cbiAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2Nlc3MtdHlwZVwiIFtuZ0NsYXNzXT1cIml0ZW0udGFibGUuYWNjZXNzVHlwZVwiPnt7aXRlbS50YWJsZS5hY2Nlc3NUeXBlfX08L3NwYW4+XG4gICAgICAgICAgICAgICA8L2ZzLXBvcG92ZXI+ICAgICAgICAgICAgXG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICA8ZnMtcG9wb3ZlciAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwia2V5c1BvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgIFttYXhXaWR0aF09XCJudWxsXCJcbiAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ7IHBvc3NpYmxlS2V5czogaXRlbS50YWJsZS5wb3NzaWJsZUtleXMsIGtleTogaXRlbS50YWJsZS5rZXkgfVwiPlxuICAgICAgICAgICAgICAgICB7e2l0ZW0udGFibGUua2V5fX1cbiAgICAgICAgICAgICAgIDwvZnMtcG9wb3Zlcj5cbiAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy1kZWxpbWl0XCI+XG4gICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlZiBvZiBpdGVtLnRhYmxlLnJlZlwiPlxuICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7cmVmfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICB7e2l0ZW0udGFibGUucm93c0V4YW1pbmVkUGVyU2Nhbn19XG4gICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICB7e2l0ZW0udGFibGUuZmlsdGVyZWR9fVxuICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLWRlbGltaXRcIj5cbiAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udGFibGUuaW5kZXhDb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDxmcy1wb3BvdmVyIFxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJ1c2luZ0luZGV4Q29uZGl0aW9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgW21heFdpZHRoXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIml0ZW0udGFibGUuaW5kZXhDb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgSW5kZXggQ29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgICA8L2ZzLXBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udGFibGUuYXR0YWNoZWRDb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDxmcy1wb3BvdmVyIFxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJ1c2luZ1doZXJlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgW21heFdpZHRoXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cIml0ZW0udGFibGUuYXR0YWNoZWRDb25kaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgVXNpbmcgV2hlcmVcbiAgICAgICAgICAgICAgICAgICAgIDwvZnMtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS51c2luZ0luZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgPHNwYW4+VXNpbmcgSW5kZXg8L3NwYW4+XG4gICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgICBcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS51c2luZ0ZpbGVzb3J0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNyaXRpY2FsXCI+VXNpbmcgRmlsZSBTb3J0PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnVzaW5nVGVtcG9yYXJ5VGFibGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3JpdGljYWxcIj5UZW1wb3JhcnkgVGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgIDx0ZD4gICAgIFxuICAgICAgICAgICAgICA8ZnMtcG9wb3ZlciBbdGVtcGxhdGVdPVwidGFibGVDb3N0UG9wb3ZlclwiIFtkYXRhXT1cIml0ZW0udGFibGU/LmNvc3RJbmZvXCI+XG4gICAgICAgICAgICAgICAge3tpdGVtLnRhYmxlPy5jb3N0SW5mby5wcmVmaXhDb3N0fX1cbiAgICAgICAgICAgICAgPC9mcy1wb3BvdmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhYmxlQ29zdFBvcG92ZXIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5FdmFsIENvc3Q6IHt7ZGF0YS5ldmFsQ29zdH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5SZWFkIENvc3Q6IHt7ZGF0YS5yZWFkQ29zdH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5QcmVmaXggQ29zdDoge3tkYXRhLnByZWZpeENvc3R9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+RGF0YSBSZWFkIFBlciBKb2luOiB7e2RhdGEuZGF0YVJlYWRQZXJKb2lufX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgPC90Ym9keT5cbiAgICAgPC90YWJsZT5cbiAgICAgPGJyPlxuICAgPC9uZy1jb250YWluZXI+ICBcbiAgXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUJsb2NrLnNlbGVjdExpc3RTdWJxdWVyaWVzXCI+XG4gICAgPGJyPlxuICAgIDxmcy1sYWJlbD5TZWxlY3QgTGlzdCBTdWJxdWVyaWVzPC9mcy1sYWJlbD5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJxdWVyeSBvZiBxdWVyeUJsb2NrLnNlbGVjdExpc3RTdWJxdWVyaWVzXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInF1ZXJ5QmxvY2tDcml0aWNhbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHN1YnF1ZXJ5LnF1ZXJ5QmxvY2sgfVwiPjwvbmctY29udGFpbmVyPiBcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibmVzdGVkTG9vcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHF1ZXJ5QmxvY2s6IHN1YnF1ZXJ5LnF1ZXJ5QmxvY2ssIHNlbGVjdElkOiBzdWJxdWVyeS5xdWVyeUJsb2NrLnNlbGVjdElkLCBjb3N0SW5mbzogc3VicXVlcnkucXVlcnlCbG9jay5jb3N0SW5mbyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPCEtLSBcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2sucXVlcnlCbG9ja2F0dGFjaGVkU3VicXVlcmllc1wiPlxuICAgIDxicj5cbiAgICA8ZnMtbGFiZWw+QXR0YWNoZWQgU3VicXVlcmllczwvZnMtbGFiZWw+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3VicXVlcnkgb2YgcXVlcnlCbG9jay5hdHRhY2hlZFN1YnF1ZXJpZXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicXVlcnlCbG9ja0NyaXRpY2FsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcXVlcnlCbG9jazogc3VicXVlcnkucXVlcnlCbG9jayB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5lc3RlZExvb3BcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBxdWVyeUJsb2NrOiBzdWJxdWVyeS5xdWVyeUJsb2NrIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNrZXlzUG9wb3ZlciBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cImZzLWRlbGltaXRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwb3NzaWJsZUtleSBvZiBkYXRhLnBvc3NpYmxlS2V5c1wiPlxuICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyAncXVlcnktbG9nLXVzZWQta2V5JzogcG9zc2libGVLZXkgPT09IGRhdGEua2V5IH1cIj57e3Bvc3NpYmxlS2V5fX08L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2luZ1doZXJlIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7e2RhdGF9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2luZ0luZGV4Q29uZGl0aW9uIGxldC1kYXRhPVwiZGF0YVwiPlxuICB7e2RhdGF9fVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY2Nlc3NUeXBlUG9wb3ZlciBsZXQtZGF0YT1cImRhdGFcIj5cbiAge3thY2Nlc3NUeXBlc1tkYXRhXX19XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjcXVlcnlCbG9ja0NyaXRpY2FsIGxldC1xdWVyeUJsb2NrPVwicXVlcnlCbG9ja1wiPlxuICA8ZGl2IGNsYXNzPVwiZnMtZGVsaW1pdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVyeUJsb2NrLnVzaW5nRmlsZXNvcnRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3JpdGljYWxcIj5Vc2luZyBGaWxlIFNvcnQ8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXJ5QmxvY2sudXNpbmdUZW1wb3JhcnlUYWJsZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcml0aWNhbFwiPlRlbXBvcmFyeSBUYWJsZTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,84 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
2
- import { MatDialog } from '@angular/material/dialog';
3
- import { ItemType } from '@firestitch/filter';
4
- import { FsListComponent } from '@firestitch/list';
5
- import { map } from 'rxjs/operators';
6
- import { QueryLogComponent } from '..';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/material/dialog";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@firestitch/date";
11
- import * as i4 from "@firestitch/list";
12
- import * as i5 from "@firestitch/common";
13
- export class QueryLogsComponent {
14
- constructor(_dialog) {
15
- this._dialog = _dialog;
16
- }
17
- openQueryLog(queryLog) {
18
- this._dialog.open(QueryLogComponent, {
19
- data: { queryLog },
20
- width: '100%',
21
- });
22
- }
23
- ngOnInit() {
24
- this.listConfig = {
25
- filters: [
26
- {
27
- name: 'keyword',
28
- type: ItemType.Keyword,
29
- label: 'Search',
30
- },
31
- {
32
- name: 'optimized',
33
- type: ItemType.Select,
34
- label: 'Optimization',
35
- values: [
36
- { name: 'Any', value: undefined },
37
- { name: 'Yes', value: 'true' },
38
- { name: 'No', value: 'false' },
39
- ],
40
- },
41
- {
42
- name: 'createDate',
43
- type: ItemType.DateTimeRange,
44
- label: ['From Date', 'To Date'],
45
- },
46
- {
47
- name: 'duration',
48
- type: ItemType.Range,
49
- label: ['Min Duration', 'Max Duration'],
50
- },
51
- ],
52
- actions: [
53
- {
54
- label: 'Purge',
55
- primary: false,
56
- click: () => {
57
- this.purgeQueryLogs()
58
- .subscribe(() => {
59
- this.list.reload();
60
- });
61
- },
62
- },
63
- ],
64
- fetch: (query) => {
65
- return this.loadQueryLogs(query)
66
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
67
- },
68
- };
69
- }
70
- }
71
- QueryLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QueryLogsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
72
- QueryLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: QueryLogsComponent, selector: "fs-system-query-logs", inputs: { loadQueryLogs: "loadQueryLogs", purgeQueryLogs: "purgeQueryLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Optimized\" name=\"optimized\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <span [ngClass]=\"{ optimized: row.optimized, 'not-optimized': !row.optimized }\">\n {{row.optimized ? 'Yes' : 'No'}}\n </span>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Duration\" name=\"duration\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.duration}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Cost\" name=\"query_cost\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.queryCost}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Query\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"openQueryLog(row)\">{{ row.query | fsFormatTruncate: 500 }}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Created\" name=\"query_log_id\" [sortable]=\"true\" [direction]=\"'desc'\" [sortableDefault]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .optimized{color:green}:host ::ng-deep .not-optimized{color:red}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "component", type: i4.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i4.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { kind: "directive", type: i4.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i5.FsFormatTruncatePipe, name: "fsFormatTruncate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QueryLogsComponent, decorators: [{
74
- type: Component,
75
- args: [{ selector: 'fs-system-query-logs', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-list [config]=\"listConfig\">\n <fs-list-column title=\"Optimized\" name=\"optimized\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <span [ngClass]=\"{ optimized: row.optimized, 'not-optimized': !row.optimized }\">\n {{row.optimized ? 'Yes' : 'No'}}\n </span>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Duration\" name=\"duration\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.duration}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Cost\" name=\"query_cost\" [sortable]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n {{row.queryCost}}\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Query\">\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"openQueryLog(row)\">{{ row.query | fsFormatTruncate: 500 }}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column title=\"Created\" name=\"query_log_id\" [sortable]=\"true\" [direction]=\"'desc'\" [sortableDefault]=\"true\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>", styles: [":host ::ng-deep .optimized{color:green}:host ::ng-deep .not-optimized{color:red}\n"] }]
76
- }], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { list: [{
77
- type: ViewChild,
78
- args: [FsListComponent]
79
- }], loadQueryLogs: [{
80
- type: Input
81
- }], purgeQueryLogs: [{
82
- type: Input
83
- }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktbG9ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcXVlcnktbG9ncy9jb21wb25lbnRzL3F1ZXJ5LWxvZ3MvcXVlcnktbG9ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvcXVlcnktbG9ncy9jb21wb25lbnRzL3F1ZXJ5LWxvZ3MvcXVlcnktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxJQUFJLENBQUM7Ozs7Ozs7QUFTdkMsTUFBTSxPQUFPLGtCQUFrQjtJQVU3QixZQUNVLE9BQWtCO1FBQWxCLFlBQU8sR0FBUCxPQUFPLENBQVc7SUFDeEIsQ0FBQztJQUVFLFlBQVksQ0FBQyxRQUFRO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ25DLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRTtZQUNsQixLQUFLLEVBQUUsTUFBTTtTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO29CQUN0QixLQUFLLEVBQUUsUUFBUTtpQkFDaEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTTtvQkFDckIsS0FBSyxFQUFFLGNBQWM7b0JBQ3JCLE1BQU0sRUFBRTt3QkFDTixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTt3QkFDakMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQzlCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO3FCQUMvQjtpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxhQUFhO29CQUM1QixLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO2lCQUNoQztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNwQixLQUFLLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO2lCQUN4QzthQUNGO1lBQ0QsT0FBTyxFQUFFO2dCQUNQO29CQUNFLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSxLQUFLO29CQUNkLEtBQUssRUFBRSxHQUFHLEVBQUU7d0JBQ1YsSUFBSSxDQUFDLGNBQWMsRUFBRTs2QkFDbEIsU0FBUyxDQUFDLEdBQUcsRUFBRTs0QkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNyQixDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2lCQUNGO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO3FCQUM3QixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQ3RFLENBQUM7WUFDTixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7OytHQXJFVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixnTEFFbEIsZUFBZSxnRENyQjVCLDhzQ0E0QlU7MkZEVEcsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLHNCQUFzQixtQkFHZix1QkFBdUIsQ0FBQyxNQUFNO2dHQUt4QyxJQUFJO3NCQURWLFNBQVM7dUJBQUMsZUFBZTtnQkFHVixhQUFhO3NCQUE1QixLQUFLO2dCQUNVLGNBQWM7c0JBQTdCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBRdWVyeUxvZ0NvbXBvbmVudCB9IGZyb20gJy4uJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1zeXN0ZW0tcXVlcnktbG9ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1sb2dzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktbG9ncy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlMb2dzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAVmlld0NoaWxkKEZzTGlzdENvbXBvbmVudClcbiAgcHVibGljIGxpc3Q6IEZzTGlzdENvbXBvbmVudDtcblxuICBASW5wdXQoKSBwdWJsaWMgbG9hZFF1ZXJ5TG9nczogKHF1ZXJ5OiBhbnkpID0+IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IHBhZ2luZzogYW55IH0+O1xuICBASW5wdXQoKSBwdWJsaWMgcHVyZ2VRdWVyeUxvZ3M6ICgpID0+IE9ic2VydmFibGU8YW55PjtcblxuICBwdWJsaWMgbGlzdENvbmZpZzogRnNMaXN0Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICApIHsgfVxuXG4gIHB1YmxpYyBvcGVuUXVlcnlMb2cocXVlcnlMb2cpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihRdWVyeUxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyBxdWVyeUxvZyB9LFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RDb25maWcgPSB7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnb3B0aW1pemVkJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgICAgbGFiZWw6ICdPcHRpbWl6YXRpb24nLFxuICAgICAgICAgIHZhbHVlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQW55JywgdmFsdWU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnWWVzJywgdmFsdWU6ICd0cnVlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3JlYXRlRGF0ZScsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuRGF0ZVRpbWVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogWydGcm9tIERhdGUnLCAnVG8gRGF0ZSddLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2R1cmF0aW9uJyxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5SYW5nZSxcbiAgICAgICAgICBsYWJlbDogWydNaW4gRHVyYXRpb24nLCAnTWF4IER1cmF0aW9uJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdQdXJnZScsXG4gICAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHVyZ2VRdWVyeUxvZ3MoKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUXVlcnlMb2dzKHF1ZXJ5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4gKHsgZGF0YTogcmVzcG9uc2UuZGF0YSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmcgfSkpLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJsaXN0Q29uZmlnXCI+XG4gIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIk9wdGltaXplZFwiIG5hbWU9XCJvcHRpbWl6ZWRcIiBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieyBvcHRpbWl6ZWQ6IHJvdy5vcHRpbWl6ZWQsICdub3Qtb3B0aW1pemVkJzogIXJvdy5vcHRpbWl6ZWQgfVwiPlxuICAgICAgICB7e3Jvdy5vcHRpbWl6ZWQgPyAnWWVzJyA6ICdObyd9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkR1cmF0aW9uXCIgbmFtZT1cImR1cmF0aW9uXCIgW3NvcnRhYmxlXT1cInRydWVcIj5cbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgIHt7cm93LmR1cmF0aW9ufX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJDb3N0XCIgbmFtZT1cInF1ZXJ5X2Nvc3RcIiBbc29ydGFibGVdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAge3tyb3cucXVlcnlDb3N0fX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJRdWVyeVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGEgKGNsaWNrKT1cIm9wZW5RdWVyeUxvZyhyb3cpXCI+e3sgcm93LnF1ZXJ5IHwgZnNGb3JtYXRUcnVuY2F0ZTogNTAwIH19PC9hPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDxmcy1saXN0LWNvbHVtbiB0aXRsZT1cIkNyZWF0ZWRcIiBuYW1lPVwicXVlcnlfbG9nX2lkXCIgW3NvcnRhYmxlXT1cInRydWVcIiBbZGlyZWN0aW9uXT1cIidkZXNjJ1wiIFtzb3J0YWJsZURlZmF1bHRdPVwidHJ1ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cInJvdy5jcmVhdGVEYXRlXCI+PC9mcy1kYXRlLWFnbz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2ZzLWxpc3QtY29sdW1uPlxuPC9mcy1saXN0PiJdfQ==
@@ -1,34 +0,0 @@
1
- import { Component, Inject } from '@angular/core';
2
- import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
3
- import { ApiLogStates } from '../../consts';
4
- import { indexNameValue } from '../../helpers/index-name-value';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/dialog";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/material/button";
9
- import * as i4 from "@firestitch/skeleton";
10
- import * as i5 from "@firestitch/label";
11
- import * as i6 from "@firestitch/dialog";
12
- import * as i7 from "@firestitch/date";
13
- export class ApiLogComponent {
14
- constructor(_dialogRef, data) {
15
- this._dialogRef = _dialogRef;
16
- this.data = data;
17
- }
18
- ngOnInit() {
19
- this.apiLogStates = indexNameValue(ApiLogStates);
20
- if (this.data.apiLog) {
21
- this.apiLog = this.data.apiLog;
22
- }
23
- }
24
- }
25
- ApiLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApiLogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
26
- ApiLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApiLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.code\">\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.direction\">\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.length\">\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n\n <ng-container *ngIf=\"apiLog.method\">\n <fs-label-field *ngIf=\"apiLog.method\">\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n </ng-container>\n \n <fs-label-field *ngIf=\"apiLog.url\">\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"apiLog.message\">\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n\n <div>\n <fs-label-field *ngIf=\"apiLog.request\">\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.response\">\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i4.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i5.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i5.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i6.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }, { kind: "pipe", type: i7.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i7.FsDateFormatPipe, name: "fsDateFormat" }] });
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApiLogComponent, decorators: [{
28
- type: Component,
29
- args: [{ template: "<fs-dialog *fsSkeleton=\"apiLog\">\n\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.code\">\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.direction\">\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.length\">\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n\n <ng-container *ngIf=\"apiLog.method\">\n <fs-label-field *ngIf=\"apiLog.method\">\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n </ng-container>\n \n <fs-label-field *ngIf=\"apiLog.url\">\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"apiLog.message\">\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n\n <div>\n <fs-label-field *ngIf=\"apiLog.request\">\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.response\">\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Done\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n" }]
30
- }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
31
- type: Inject,
32
- args: [MAT_DIALOG_DATA]
33
- }] }]; } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvYXBpLWxvZy9hcGktbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9hcGktbG9nL2FwaS1sb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxlQUFlO0lBSzFCLFlBQW9CLFVBQXlDLEVBQ2pCLElBQUk7UUFENUIsZUFBVSxHQUFWLFVBQVUsQ0FBK0I7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBQTtJQUFHLENBQUM7SUFFN0MsUUFBUTtRQUViLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNoQztJQUNILENBQUM7OzRHQWZVLGVBQWUsOENBTU4sZUFBZTtnR0FOeEIsZUFBZSxvRENWNUIsdXVFQWlHQTsyRkR2RmEsZUFBZTtrQkFKM0IsU0FBUzs7OzBCQVVLLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEFwaUxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cyc7XG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9hcGktbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBpLWxvZy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFwaUxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGFwaUxvZztcbiAgcHVibGljIGFwaUxvZ1N0YXRlcztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxBcGlMb2dDb21wb25lbnQ+LFxuICAgICAgICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEpIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5hcGlMb2dTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShBcGlMb2dTdGF0ZXMpO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5hcGlMb2cpIHtcbiAgICAgIHRoaXMuYXBpTG9nID0gdGhpcy5kYXRhLmFwaUxvZztcbiAgICB9XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJhcGlMb2dcIj5cblxuICA8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+QVBJIExvZzwvZGl2PlxuXG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImZzLXJvdy5nYXAtbGcud3JhcC5hbGlnbi1zdGFydFwiPlxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgVHlwZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7e2FwaUxvZy50eXBlfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIFN0YXR1c1xuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7e2FwaUxvZ1N0YXRlc1thcGlMb2cuc3RhdGVdfX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImFwaUxvZy5jb2RlXCI+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBDb2RlXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7YXBpTG9nLmNvZGV9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgRGF0ZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICB7e2FwaUxvZy5jcmVhdGVEYXRlfGZzRGF0ZUZvcm1hdDogJ2Z1bGwtZGF0ZS10aW1lJ319XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJhcGlMb2cuZGlyZWN0aW9uXCI+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBEaXJlY3Rpb25cbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAge3thcGlMb2cuZGlyZWN0aW9ufX1cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImFwaUxvZy5sZW5ndGhcIj5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIER1cmF0aW9uXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7IGFwaUxvZy5sZW5ndGggfCBmc0RhdGVEdXJhdGlvbiB9fVxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwaUxvZy5tZXRob2RcIj5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYXBpTG9nLm1ldGhvZFwiPlxuICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgIE1ldGhvZFxuICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAge3thcGlMb2cubWV0aG9kfX1cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYXBpTG9nLnVybFwiPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgVVJMXG4gICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgIHt7YXBpTG9nLnVybH19XG4gICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuICAgIDwvZGl2PlxuXG4gICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYXBpTG9nLm1lc3NhZ2VcIj5cbiAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgTWVzc2FnZVxuICAgICAgPC9mcy1sYWJlbD5cbiAgICAgIHt7YXBpTG9nLm1lc3NhZ2V9fVxuICAgIDwvZnMtbGFiZWwtZmllbGQ+XG5cbiAgICA8ZGl2PlxuICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYXBpTG9nLnJlcXVlc3RcIj5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIFJlcXVlc3RcbiAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgPHByZT57e2FwaUxvZy5yZXF1ZXN0fGpzb259fTwvcHJlPlxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiYXBpTG9nLnJlc3BvbnNlXCI+XG4gICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICBSZXNwb25zZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICA8cHJlPnt7YXBpTG9nLnJlc3BvbnNlfGpzb259fTwvcHJlPlxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvbiBcbiAgICAgICAgbWF0LWJ1dHRvbiBcbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIFxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgIERvbmVcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cbiJdfQ==
@@ -1,69 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { MatDialog } from '@angular/material/dialog';
3
- import { ItemType } from '@firestitch/filter';
4
- import { FsListComponent } from '@firestitch/list';
5
- import { map } from 'rxjs/operators';
6
- import { ApiLogStates } from '../../consts';
7
- import { indexNameValue } from '../../helpers/index-name-value';
8
- import { ApiLogComponent } from '../api-log/api-log.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/material/dialog";
11
- import * as i2 from "@angular/common";
12
- import * as i3 from "@angular/material/icon";
13
- import * as i4 from "@firestitch/date";
14
- import * as i5 from "@firestitch/list";
15
- export class ApiLogsComponent {
16
- constructor(_dialog) {
17
- this._dialog = _dialog;
18
- this.config = null;
19
- this.apiLogStates = indexNameValue(ApiLogStates);
20
- }
21
- ngOnInit() {
22
- this._configList();
23
- }
24
- _configList() {
25
- this.config = {
26
- filters: [
27
- {
28
- type: ItemType.Keyword,
29
- name: 'keyword',
30
- label: 'Search',
31
- },
32
- {
33
- type: ItemType.Select,
34
- name: 'state',
35
- label: 'Status',
36
- values: ApiLogStates,
37
- },
38
- {
39
- name: 'createDate',
40
- type: ItemType.DateRange,
41
- label: ['From Date', 'To Date'],
42
- },
43
- ],
44
- fetch: (query) => {
45
- Object.assign(query, {});
46
- return this.loadApiLogs(query)
47
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
48
- },
49
- };
50
- }
51
- open(apiLog) {
52
- this._dialog.open(ApiLogComponent, {
53
- data: { apiLog },
54
- width: '85%',
55
- });
56
- }
57
- }
58
- ApiLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApiLogsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
59
- ApiLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApiLogsComponent, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='outgoing'\">arrow_upward</mat-icon>\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='incoming'\">arrow_downward</mat-icon>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n <span *ngIf=\"row.code\" class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "component", type: i5.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i5.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { kind: "directive", type: i5.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i5.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i4.FsDateDurationPipe, name: "fsDateDuration" }] });
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApiLogsComponent, decorators: [{
61
- type: Component,
62
- args: [{ selector: 'fs-system-api-logs', template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='outgoing'\">arrow_upward</mat-icon>\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='incoming'\">arrow_downward</mat-icon>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n <span *ngIf=\"row.code\" class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"] }]
63
- }], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { list: [{
64
- type: ViewChild,
65
- args: [FsListComponent, { static: true }]
66
- }], loadApiLogs: [{
67
- type: Input
68
- }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxvZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2FwaS1sb2dzL2FwaS1sb2dzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9hcGktbG9ncy9hcGktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUNVLE9BQWtCO1FBQWxCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFKckIsV0FBTSxHQUFpQixJQUFJLENBQUM7UUFDNUIsaUJBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFJL0MsQ0FBQztJQUVFLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFdBQVc7UUFFakIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU87b0JBQ3RCLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxRQUFRO2lCQUNoQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07b0JBQ3JCLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxRQUFRO29CQUNmLE1BQU0sRUFBRSxZQUFZO2lCQUNyQjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTO29CQUN4QixLQUFLLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO2lCQUNoQzthQUNGO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRyxDQUFDLENBQUM7Z0JBRTFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7cUJBQzNCLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FDM0UsQ0FBQztZQUNOLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLElBQUksQ0FBQyxNQUFNO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNqQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUU7WUFDaEIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDOzs2R0F2RFUsZ0JBQWdCO2lHQUFoQixnQkFBZ0Isd0lBRWhCLGVBQWUsOERDdEI1QiwyNENBZ0NBOzJGRFphLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxvQkFBb0I7Z0dBT3ZCLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUc1QixXQUFXO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBcGlMb2dTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgaW5kZXhOYW1lVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2luZGV4LW5hbWUtdmFsdWUnO1xuaW1wb3J0IHsgQXBpTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBpLWxvZy9hcGktbG9nLmNvbXBvbmVudCc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtc3lzdGVtLWFwaS1sb2dzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwaS1sb2dzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBpLWxvZ3MuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBpTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBsaXN0OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgcHVibGljIGxvYWRBcGlMb2dzOiAoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPHsgZGF0YTogYW55W107IHBhZ2luZzogYW55IH0+O1xuXG4gIHB1YmxpYyBjb25maWc6IEZzTGlzdENvbmZpZyA9IG51bGw7XG4gIHB1YmxpYyBhcGlMb2dTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShBcGlMb2dTdGF0ZXMpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9jb25maWdMaXN0KCk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWdMaXN0KCkge1xuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgICAgbmFtZTogJ3N0YXRlJyxcbiAgICAgICAgICBsYWJlbDogJ1N0YXR1cycsXG4gICAgICAgICAgdmFsdWVzOiBBcGlMb2dTdGF0ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3JlYXRlRGF0ZScsXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuRGF0ZVJhbmdlLFxuICAgICAgICAgIGxhYmVsOiBbJ0Zyb20gRGF0ZScsICdUbyBEYXRlJ10sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCB7IH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBcGlMb2dzKHF1ZXJ5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiAoeyBkYXRhOiByZXNwb25zZS5kYXRhLCBwYWdpbmc6IHJlc3BvbnNlLnBhZ2luZyB9KSksXG4gICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuKGFwaUxvZykge1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEFwaUxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyBhcGlMb2cgfSxcbiAgICAgIHdpZHRoOiAnODUlJyxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGZzLWxpc3QgW2NvbmZpZ109XCJjb25maWdcIj5cbiAgICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+TmFtZTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJvcGVuKHJvdylcIj5cbiAgICAgICAgICB7e3Jvdy50eXBlIHx8ICdVbmtub3duJ319XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZGlyZWN0aW9uXCIgKm5nSWY9XCJyb3cuZGlyZWN0aW9uPT0nb3V0Z29pbmcnXCI+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJkaXJlY3Rpb25cIiAqbmdJZj1cInJvdy5kaXJlY3Rpb249PSdpbmNvbWluZydcIj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+U3RhdHVzPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICB7e2FwaUxvZ1N0YXRlc1tyb3cuc3RhdGVdfX1cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cuY29kZVwiIGNsYXNzPVwiY29kZVwiIFtuZ0NsYXNzXT1cInsnc3VjY2Vzcyc6IHJvdy5jb2RlPT0yMDAsJ2Vycm9yJzogcm93LmNvZGUhPTIwMCB9XCI+W3t7cm93LmNvZGV9fV08L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgPGZzLWxpc3QtY29sdW1uPlxuICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+TWVzc2FnZTwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgIHt7cm93Lm1lc3NhZ2V9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICA8ZnMtbGlzdC1jb2x1bW4+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+RGF0ZTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cInJvdy5jcmVhdGVEYXRlXCI+PC9mcy1kYXRlLWFnbz5cbiAgICAgICAgPGRpdj48c21hbGwgKm5nSWY9XCJyb3cubGVuZ3RoXCI+RHVyYXRpb246IHt7IHJvdy5sZW5ndGggfCBmc0RhdGVEdXJhdGlvbiB9fTwvc21hbGw+PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gIDwvZnMtbGlzdD5cbiJdfQ==