@firestitch/system 12.4.1 → 12.5.1

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 (155) hide show
  1. package/app/modules/query-logs/components/explain/explain.component.d.ts +8 -0
  2. package/app/modules/query-logs/components/explain/index.d.ts +1 -0
  3. package/app/modules/query-logs/components/index.d.ts +3 -0
  4. package/app/modules/query-logs/components/query-log/index.d.ts +1 -0
  5. package/app/modules/query-logs/components/query-log/query-log.component.d.ts +27 -0
  6. package/app/modules/query-logs/components/query-logs/index.d.ts +1 -0
  7. package/app/modules/query-logs/components/query-logs/query-logs.component.d.ts +20 -0
  8. package/app/modules/query-logs/query-logs.module.d.ts +23 -0
  9. package/app/{components → modules/system/components}/api-logs/api-logs.component.d.ts +1 -1
  10. package/app/{components → modules/system/components}/crons/crons.component.d.ts +3 -3
  11. package/bundles/firestitch-system.umd.js +300 -63
  12. package/bundles/firestitch-system.umd.js.map +1 -1
  13. package/esm2015/app/modules/query-logs/components/explain/explain.component.js +27 -0
  14. package/esm2015/app/modules/query-logs/components/explain/index.js +2 -0
  15. package/esm2015/app/modules/query-logs/components/index.js +4 -0
  16. package/esm2015/app/modules/query-logs/components/query-log/index.js +2 -0
  17. package/esm2015/app/modules/query-logs/components/query-log/query-log.component.js +63 -0
  18. package/esm2015/app/modules/query-logs/components/query-logs/index.js +2 -0
  19. package/esm2015/app/modules/query-logs/components/query-logs/query-logs.component.js +89 -0
  20. package/esm2015/app/modules/query-logs/query-logs.module.js +82 -0
  21. package/esm2015/app/{components → modules/system/components}/api-log/api-log.component.js +1 -1
  22. package/esm2015/app/modules/system/components/api-log/index.js +2 -0
  23. package/esm2015/app/modules/system/components/api-logs/api-logs.component.js +73 -0
  24. package/esm2015/app/modules/system/components/api-logs/index.js +2 -0
  25. package/esm2015/app/modules/system/components/cron/cron.component.js +102 -0
  26. package/esm2015/app/modules/system/components/cron/index.js +2 -0
  27. package/esm2015/app/{components → modules/system/components}/cron-log/cron-log.component.js +1 -1
  28. package/esm2015/app/modules/system/components/cron-log/index.js +2 -0
  29. package/esm2015/app/modules/system/components/crons/crons.component.js +229 -0
  30. package/esm2015/app/modules/system/components/crons/index.js +2 -0
  31. package/esm2015/app/modules/system/components/dashboard/dashboard.component.js +89 -0
  32. package/esm2015/app/modules/system/components/dashboard/index.js +2 -0
  33. package/esm2015/app/modules/system/components/info/index.js +2 -0
  34. package/esm2015/app/modules/system/components/info/info.component.js +36 -0
  35. package/esm2015/app/modules/system/components/process/index.js +2 -0
  36. package/esm2015/app/modules/system/components/process/process.component.js +66 -0
  37. package/esm2015/app/modules/system/components/processes/index.js +2 -0
  38. package/esm2015/app/modules/system/components/processes/processes.component.js +179 -0
  39. package/esm2015/app/modules/system/components/server-log/index.js +2 -0
  40. package/esm2015/app/{components → modules/system/components}/server-log/server-log.component.js +1 -1
  41. package/esm2015/app/modules/system/components/server-logs/index.js +2 -0
  42. package/esm2015/app/modules/system/components/server-logs/server-logs.component.js +57 -0
  43. package/esm2015/app/modules/system/components/settings/index.js +2 -0
  44. package/esm2015/app/modules/system/components/settings/settings.component.js +137 -0
  45. package/esm2015/app/modules/system/components/upgrade-logs/index.js +2 -0
  46. package/esm2015/app/modules/system/components/upgrade-logs/upgrade-logs.component.js +48 -0
  47. package/esm2015/app/modules/system/consts/api-log-states.const.js +7 -0
  48. package/esm2015/app/modules/system/consts/cron-log-states.const.js +16 -0
  49. package/esm2015/app/modules/system/consts/cron-states.const.js +11 -0
  50. package/esm2015/app/modules/system/consts/index.js +4 -0
  51. package/esm2015/app/modules/system/consts/process-states.const.js +10 -0
  52. package/esm2015/app/modules/system/enums/api-log-state.enum.js +7 -0
  53. package/esm2015/app/modules/system/enums/cron-log-state.enum.js +16 -0
  54. package/esm2015/app/modules/system/enums/cron-state.enum.js +11 -0
  55. package/esm2015/app/modules/system/enums/index.js +6 -0
  56. package/esm2015/app/modules/system/enums/process-state.enum.js +10 -0
  57. package/esm2015/app/modules/system/enums/setting-interface-type.enum.js +16 -0
  58. package/esm2015/app/modules/system/fs-system.module.js +172 -0
  59. package/esm2015/app/modules/system/helpers/index-name-value.js +8 -0
  60. package/esm2015/app/modules/system/injectors/system-config.injector.js +3 -0
  61. package/esm2015/app/modules/system/interfaces/dashboard-action.js +2 -0
  62. package/esm2015/app/modules/system/interfaces/index.js +4 -0
  63. package/esm2015/app/modules/system/interfaces/process-action.js +2 -0
  64. package/esm2015/app/modules/system/interfaces/system-config.js +2 -0
  65. package/esm2015/app/modules/system/pipes/key-name-value.pipe.js +21 -0
  66. package/esm2015/public_api.js +20 -19
  67. package/fesm2015/firestitch-system.js +273 -56
  68. package/fesm2015/firestitch-system.js.map +1 -1
  69. package/package.json +1 -1
  70. package/public_api.d.ts +20 -19
  71. package/esm2015/app/components/api-log/index.js +0 -2
  72. package/esm2015/app/components/api-logs/api-logs.component.js +0 -73
  73. package/esm2015/app/components/api-logs/index.js +0 -2
  74. package/esm2015/app/components/cron/cron.component.js +0 -102
  75. package/esm2015/app/components/cron/index.js +0 -2
  76. package/esm2015/app/components/cron-log/index.js +0 -2
  77. package/esm2015/app/components/crons/crons.component.js +0 -229
  78. package/esm2015/app/components/crons/index.js +0 -2
  79. package/esm2015/app/components/dashboard/dashboard.component.js +0 -89
  80. package/esm2015/app/components/dashboard/index.js +0 -2
  81. package/esm2015/app/components/info/index.js +0 -2
  82. package/esm2015/app/components/info/info.component.js +0 -36
  83. package/esm2015/app/components/process/index.js +0 -2
  84. package/esm2015/app/components/process/process.component.js +0 -66
  85. package/esm2015/app/components/processes/index.js +0 -2
  86. package/esm2015/app/components/processes/processes.component.js +0 -179
  87. package/esm2015/app/components/server-log/index.js +0 -2
  88. package/esm2015/app/components/server-logs/index.js +0 -2
  89. package/esm2015/app/components/server-logs/server-logs.component.js +0 -57
  90. package/esm2015/app/components/settings/index.js +0 -2
  91. package/esm2015/app/components/settings/settings.component.js +0 -137
  92. package/esm2015/app/components/upgrade-logs/index.js +0 -2
  93. package/esm2015/app/components/upgrade-logs/upgrade-logs.component.js +0 -48
  94. package/esm2015/app/consts/api-log-states.const.js +0 -7
  95. package/esm2015/app/consts/cron-log-states.const.js +0 -16
  96. package/esm2015/app/consts/cron-states.const.js +0 -11
  97. package/esm2015/app/consts/index.js +0 -4
  98. package/esm2015/app/consts/process-states.const.js +0 -10
  99. package/esm2015/app/enums/api-log-state.enum.js +0 -7
  100. package/esm2015/app/enums/cron-log-state.enum.js +0 -16
  101. package/esm2015/app/enums/cron-state.enum.js +0 -11
  102. package/esm2015/app/enums/index.js +0 -6
  103. package/esm2015/app/enums/process-state.enum.js +0 -10
  104. package/esm2015/app/enums/setting-interface-type.enum.js +0 -16
  105. package/esm2015/app/fs-system.module.js +0 -172
  106. package/esm2015/app/helpers/index-name-value.js +0 -8
  107. package/esm2015/app/injectors/system-config.injector.js +0 -3
  108. package/esm2015/app/interfaces/dashboard-action.js +0 -2
  109. package/esm2015/app/interfaces/index.js +0 -4
  110. package/esm2015/app/interfaces/process-action.js +0 -2
  111. package/esm2015/app/interfaces/system-config.js +0 -2
  112. package/esm2015/app/pipes/key-name-value.pipe.js +0 -21
  113. /package/app/{components → modules/system/components}/api-log/api-log.component.d.ts +0 -0
  114. /package/app/{components → modules/system/components}/api-log/index.d.ts +0 -0
  115. /package/app/{components → modules/system/components}/api-logs/index.d.ts +0 -0
  116. /package/app/{components → modules/system/components}/cron/cron.component.d.ts +0 -0
  117. /package/app/{components → modules/system/components}/cron/index.d.ts +0 -0
  118. /package/app/{components → modules/system/components}/cron-log/cron-log.component.d.ts +0 -0
  119. /package/app/{components → modules/system/components}/cron-log/index.d.ts +0 -0
  120. /package/app/{components → modules/system/components}/crons/index.d.ts +0 -0
  121. /package/app/{components → modules/system/components}/dashboard/dashboard.component.d.ts +0 -0
  122. /package/app/{components → modules/system/components}/dashboard/index.d.ts +0 -0
  123. /package/app/{components → modules/system/components}/info/index.d.ts +0 -0
  124. /package/app/{components → modules/system/components}/info/info.component.d.ts +0 -0
  125. /package/app/{components → modules/system/components}/process/index.d.ts +0 -0
  126. /package/app/{components → modules/system/components}/process/process.component.d.ts +0 -0
  127. /package/app/{components → modules/system/components}/processes/index.d.ts +0 -0
  128. /package/app/{components → modules/system/components}/processes/processes.component.d.ts +0 -0
  129. /package/app/{components → modules/system/components}/server-log/index.d.ts +0 -0
  130. /package/app/{components → modules/system/components}/server-log/server-log.component.d.ts +0 -0
  131. /package/app/{components → modules/system/components}/server-logs/index.d.ts +0 -0
  132. /package/app/{components → modules/system/components}/server-logs/server-logs.component.d.ts +0 -0
  133. /package/app/{components → modules/system/components}/settings/index.d.ts +0 -0
  134. /package/app/{components → modules/system/components}/settings/settings.component.d.ts +0 -0
  135. /package/app/{components → modules/system/components}/upgrade-logs/index.d.ts +0 -0
  136. /package/app/{components → modules/system/components}/upgrade-logs/upgrade-logs.component.d.ts +0 -0
  137. /package/app/{consts → modules/system/consts}/api-log-states.const.d.ts +0 -0
  138. /package/app/{consts → modules/system/consts}/cron-log-states.const.d.ts +0 -0
  139. /package/app/{consts → modules/system/consts}/cron-states.const.d.ts +0 -0
  140. /package/app/{consts → modules/system/consts}/index.d.ts +0 -0
  141. /package/app/{consts → modules/system/consts}/process-states.const.d.ts +0 -0
  142. /package/app/{enums → modules/system/enums}/api-log-state.enum.d.ts +0 -0
  143. /package/app/{enums → modules/system/enums}/cron-log-state.enum.d.ts +0 -0
  144. /package/app/{enums → modules/system/enums}/cron-state.enum.d.ts +0 -0
  145. /package/app/{enums → modules/system/enums}/index.d.ts +0 -0
  146. /package/app/{enums → modules/system/enums}/process-state.enum.d.ts +0 -0
  147. /package/app/{enums → modules/system/enums}/setting-interface-type.enum.d.ts +0 -0
  148. /package/app/{fs-system.module.d.ts → modules/system/fs-system.module.d.ts} +0 -0
  149. /package/app/{helpers → modules/system/helpers}/index-name-value.d.ts +0 -0
  150. /package/app/{injectors → modules/system/injectors}/system-config.injector.d.ts +0 -0
  151. /package/app/{interfaces → modules/system/interfaces}/dashboard-action.d.ts +0 -0
  152. /package/app/{interfaces → modules/system/interfaces}/index.d.ts +0 -0
  153. /package/app/{interfaces → modules/system/interfaces}/process-action.d.ts +0 -0
  154. /package/app/{interfaces → modules/system/interfaces}/system-config.d.ts +0 -0
  155. /package/app/{pipes → modules/system/pipes}/key-name-value.pipe.d.ts +0 -0
@@ -0,0 +1,102 @@
1
+ import { Component, Inject, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
2
+ import { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import { CronLogStates } from '../../consts/cron-log-states.const';
4
+ import { CronStates } from '../../consts';
5
+ import { indexNameValue } from '../../helpers/index-name-value';
6
+ import { CronLogComponent } from '../cron-log';
7
+ import { ItemType } from '@firestitch/filter';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/material/dialog";
10
+ import * as i2 from "@firestitch/dialog";
11
+ import * as i3 from "@angular/material/tabs";
12
+ import * as i4 from "@firestitch/label";
13
+ import * as i5 from "@firestitch/date";
14
+ import * as i6 from "@firestitch/list";
15
+ import * as i7 from "@angular/material/button";
16
+ import * as i8 from "@firestitch/skeleton";
17
+ import * as i9 from "@angular/common";
18
+ export class CronComponent {
19
+ constructor(_data, _dialog, _cdRef) {
20
+ this._data = _data;
21
+ this._dialog = _dialog;
22
+ this._cdRef = _cdRef;
23
+ this.tabIndex = 0;
24
+ this.CronStates = indexNameValue(CronStates);
25
+ this.CronLogStates = indexNameValue(CronLogStates);
26
+ this.CronLogStateColors = {};
27
+ }
28
+ ngOnInit() {
29
+ this.load();
30
+ this.CronLogStateColors = CronLogStates
31
+ .reduce((accum, cronLogState) => {
32
+ accum[cronLogState.value] = cronLogState.color;
33
+ return accum;
34
+ }, {});
35
+ }
36
+ cronLogOpen(cronLog) {
37
+ this._dialog.open(CronLogComponent, {
38
+ data: {
39
+ cronLog,
40
+ },
41
+ width: '85%'
42
+ });
43
+ }
44
+ cronActionClick(cronAction) {
45
+ cronAction.action(this.cron)
46
+ .subscribe(() => {
47
+ this.load();
48
+ });
49
+ }
50
+ selectedIndexChange(index) {
51
+ this.tabIndex = index;
52
+ }
53
+ load() {
54
+ this._data.loadCron(this._data.cron)
55
+ .subscribe((cron) => {
56
+ this.cron = Object.assign(Object.assign({}, this._data.cron), cron);
57
+ if (this._data.loadCronLogs) {
58
+ this.config = {
59
+ filters: [
60
+ {
61
+ type: ItemType.Select,
62
+ name: 'state',
63
+ label: 'Status',
64
+ values: [
65
+ { name: 'All', value: null },
66
+ ...CronLogStates,
67
+ ],
68
+ },
69
+ {
70
+ type: ItemType.DateRange,
71
+ name: 'date',
72
+ label: ['From Date', 'To Date'],
73
+ },
74
+ ],
75
+ fetch: (query) => {
76
+ query = Object.assign(Object.assign({}, query), { cronId: this.cron.id });
77
+ return this._data.loadCronLogs(query);
78
+ },
79
+ };
80
+ }
81
+ this.cronActions = this._data.cronActions
82
+ .filter((cronLogAction) => {
83
+ return cronLogAction.show(this.cron);
84
+ });
85
+ this._cdRef.markForCheck();
86
+ });
87
+ }
88
+ }
89
+ CronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
90
+ CronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"cron\">\r\n <h1 mat-dialog-title>\r\n Cron\r\n <div class=\"small\">{{cron.name}}</div>\r\n </h1>\r\n <mat-dialog-content>\r\n <mat-tab-group (selectedIndexChange)=\"selectedIndexChange($event)\">\r\n <mat-tab label=\"Overview\">\r\n <div class=\"row\">\r\n <fs-label-field>\r\n <fs-label>\r\n Status\r\n </fs-label>\r\n {{CronStates[cron.state]}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"cron.cronSetting\">\r\n <fs-label>\r\n Run Frequency\r\n </fs-label>\r\n {{cron.cronSetting.summary}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Last Ran\r\n </fs-label>\r\n <ng-container *ngIf=\"cron.duration===null; else lastRan\">\r\n Never\r\n </ng-container>\r\n <ng-template #lastRan>\r\n <fs-date-ago [date]=\"cron.createDate\"></fs-date-ago>\r\n <div><small *ngIf=\"cron.duration\">Duration: {{ cron.duration | fsDateDuration }}</small></div>\r\n </ng-template>\r\n </fs-label-field>\r\n </div>\r\n\r\n <fs-label-field *ngIf=\"cron.message\">\r\n <fs-label>\r\n Last Message\r\n </fs-label>\r\n <div class=\"message\">{{cron.message}}</div>\r\n </fs-label-field>\r\n </mat-tab>\r\n <mat-tab label=\"Logs\" *ngIf=\"config\">\r\n <ng-template matTabContent>\r\n <fs-list [config]=\"config\">\r\n <fs-list-column name=\"state\" title=\"Status\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a \r\n (click)=\"cronLogOpen(row)\"\r\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\r\n {{CronLogStates[row.state] || row.state}}\r\n </a>\r\n </ng-template>\r\n </fs-list-column>\r\n \r\n <fs-list-column title=\"Message\" class=\"col-message\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <div class=\"message\">{{row.message}}</div>\r\n </ng-template>\r\n </fs-list-column>\r\n \r\n <fs-list-column title=\"Duration\" class=\"col-message\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.duration\">\r\n {{row.duration | fsDateDuration: 'hour-minute-second'}}\r\n </ng-container>\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column name=\"create_date\" title=\"Date\" class=\"col-date\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n </fs-list> \r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n </mat-dialog-content>\r\n <mat-dialog-actions> \r\n <button \r\n mat-button \r\n [mat-dialog-close]=\"true\" \r\n color=\"primary\">\r\n Done\r\n </button>\r\n <ng-container *ngIf=\"tabIndex === 0\">\r\n <button \r\n *ngFor=\"let cronAction of cronActions\"\r\n mat-button \r\n (click)=\"cronActionClick(cronAction)\">\r\n {{cronAction.label}}\r\n </button> \r\n </ng-container>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [":host ::ng-deep .col-message .message{white-space:break-spaces;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}:host ::ng-deep .col-date{white-space:nowrap}h1 .small{line-height:normal}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}.message{white-space:pre-line}\n"], components: [{ type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i4.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i4.FsLabelComponent, selector: "fs-label" }, { type: i5.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i6.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i7.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"] }], directives: [{ type: i8.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatTabContent, selector: "[matTabContent]" }, { type: i6.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i6.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fsDateDuration": i5.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, decorators: [{
92
+ type: Component,
93
+ args: [{
94
+ templateUrl: './cron.component.html',
95
+ styleUrls: ['./cron.component.scss'],
96
+ changeDetection: ChangeDetectionStrategy.OnPush,
97
+ }]
98
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
99
+ type: Inject,
100
+ args: [MAT_DIALOG_DATA]
101
+ }] }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }]; } });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbi9jcm9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uL2Nyb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUl0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFROUMsTUFBTSxPQUFPLGFBQWE7SUFXeEIsWUFDbUMsS0FBSyxFQUM5QixPQUFrQixFQUNsQixNQUF5QjtRQUZBLFVBQUssR0FBTCxLQUFLLENBQUE7UUFDOUIsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQVg1QixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsZUFBVSxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxrQkFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5Qyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7SUFTNUIsQ0FBQztJQUVHLFFBQVE7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OlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbmltcG9ydCB7IEZzTGlzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xyXG5cclxuaW1wb3J0IHsgQ3JvbkxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9jcm9uLWxvZy1zdGF0ZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBDcm9uU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgaW5kZXhOYW1lVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2luZGV4LW5hbWUtdmFsdWUnO1xyXG5pbXBvcnQgeyBDcm9uTG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY3Jvbi1sb2cnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Nyb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Nyb24uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENyb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBwdWJsaWMgY3JvbjtcclxuICBwdWJsaWMgdGFiSW5kZXggPSAwO1xyXG4gIHB1YmxpYyBDcm9uU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoQ3JvblN0YXRlcyk7XHJcbiAgcHVibGljIENyb25Mb2dTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShDcm9uTG9nU3RhdGVzKTtcclxuICBwdWJsaWMgQ3JvbkxvZ1N0YXRlQ29sb3JzID0ge307XHJcblxyXG4gIHB1YmxpYyBjb25maWc6IEZzTGlzdENvbmZpZztcclxuICBwdWJsaWMgY3JvbkFjdGlvbnM7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge31cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkKCk7XHJcbiAgICB0aGlzLkNyb25Mb2dTdGF0ZUNvbG9ycyA9IENyb25Mb2dTdGF0ZXNcclxuICAgIC5yZWR1Y2UoKGFjY3VtLCBjcm9uTG9nU3RhdGUpID0+IHtcclxuICAgICAgYWNjdW1bY3JvbkxvZ1N0YXRlLnZhbHVlXSA9IGNyb25Mb2dTdGF0ZS5jb2xvcjtcclxuICAgICAgcmV0dXJuIGFjY3VtO1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyb25Mb2dPcGVuKGNyb25Mb2cpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKENyb25Mb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YTogeyBcclxuICAgICAgICBjcm9uTG9nLFxyXG4gICAgICB9LFxyXG4gICAgICB3aWR0aDogJzg1JSdcclxuICAgIH0pOyAgICBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjcm9uQWN0aW9uQ2xpY2soY3JvbkFjdGlvbikge1xyXG4gICAgY3JvbkFjdGlvbi5hY3Rpb24odGhpcy5jcm9uKVxyXG4gICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJbmRleENoYW5nZShpbmRleCkge1xyXG4gICAgdGhpcy50YWJJbmRleCA9IGluZGV4O1xyXG4gIH1cclxuICAgIFxyXG4gIHB1YmxpYyBsb2FkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGF0YS5sb2FkQ3Jvbih0aGlzLl9kYXRhLmNyb24pXHJcbiAgICAuc3Vic2NyaWJlKChjcm9uKSA9PiB7XHJcbiAgICAgIHRoaXMuY3JvbiA9IHtcclxuICAgICAgICAuLi50aGlzLl9kYXRhLmNyb24sXHJcbiAgICAgICAgLi4uY3JvbixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmKHRoaXMuX2RhdGEubG9hZENyb25Mb2dzKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSB7XHJcbiAgICAgICAgICBmaWx0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXHJcbiAgICAgICAgICAgICAgbmFtZTogJ3N0YXRlJyxcclxuICAgICAgICAgICAgICBsYWJlbDogJ1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgdmFsdWVzOiBbXHJcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdBbGwnLCB2YWx1ZTogbnVsbCB9LFxyXG4gICAgICAgICAgICAgICAgLi4uQ3JvbkxvZ1N0YXRlcyxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogSXRlbVR5cGUuRGF0ZVJhbmdlLFxyXG4gICAgICAgICAgICAgIG5hbWU6ICdkYXRlJyxcclxuICAgICAgICAgICAgICBsYWJlbDogWydGcm9tIERhdGUnLCAnVG8gRGF0ZSddLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSwgICAgICAgICAgXHJcbiAgICAgICAgICBmZXRjaDogKHF1ZXJ5KSA9PiB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ID0ge1xyXG4gICAgICAgICAgICAgIC4uLnF1ZXJ5LFxyXG4gICAgICAgICAgICAgIGNyb25JZDogdGhpcy5jcm9uLmlkLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubG9hZENyb25Mb2dzKHF1ZXJ5KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jcm9uQWN0aW9ucyA9IHRoaXMuX2RhdGEuY3JvbkFjdGlvbnNcclxuICAgICAgLmZpbHRlcigoY3JvbkxvZ0FjdGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiBjcm9uTG9nQWN0aW9uLnNob3codGhpcy5jcm9uKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZnMtZGlhbG9nICpmc1NrZWxldG9uPVwiY3JvblwiPlxyXG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxyXG4gICAgQ3JvblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYWxsXCI+e3tjcm9uLm5hbWV9fTwvZGl2PlxyXG4gIDwvaDE+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxtYXQtdGFiLWdyb3VwIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInNlbGVjdGVkSW5kZXhDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIk92ZXJ2aWV3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgICA8ZnMtbGFiZWw+XHJcbiAgICAgICAgICAgICAgU3RhdHVzXHJcbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XHJcbiAgICAgICAgICAgIHt7Q3JvblN0YXRlc1tjcm9uLnN0YXRlXX19XHJcbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG5cclxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImNyb24uY3JvblNldHRpbmdcIj5cclxuICAgICAgICAgICAgPGZzLWxhYmVsPlxyXG4gICAgICAgICAgICAgIFJ1biBGcmVxdWVuY3lcclxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cclxuICAgICAgICAgICAge3tjcm9uLmNyb25TZXR0aW5nLnN1bW1hcnl9fVxyXG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuXHJcbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgICAgIDxmcy1sYWJlbD5cclxuICAgICAgICAgICAgICBMYXN0IFJhblxyXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3Jvbi5kdXJhdGlvbj09PW51bGw7IGVsc2UgbGFzdFJhblwiPlxyXG4gICAgICAgICAgICAgIE5ldmVyXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhc3RSYW4+XHJcbiAgICAgICAgICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cImNyb24uY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICAgICAgICAgICAgPGRpdj48c21hbGwgKm5nSWY9XCJjcm9uLmR1cmF0aW9uXCI+RHVyYXRpb246IHt7IGNyb24uZHVyYXRpb24gfCBmc0RhdGVEdXJhdGlvbiB9fTwvc21hbGw+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQgKm5nSWY9XCJjcm9uLm1lc3NhZ2VcIj5cclxuICAgICAgICAgIDxmcy1sYWJlbD5cclxuICAgICAgICAgICAgTGFzdCBNZXNzYWdlXHJcbiAgICAgICAgICA8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj57e2Nyb24ubWVzc2FnZX19PC9kaXY+XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIkxvZ3NcIiAqbmdJZj1cImNvbmZpZ1wiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgPGZzLWxpc3QgW2NvbmZpZ109XCJjb25maWdcIj5cclxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIG5hbWU9XCJzdGF0ZVwiIHRpdGxlPVwiU3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JvbkxvZ09wZW4ocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogQ3JvbkxvZ1N0YXRlQ29sb3JzW3Jvdy5zdGF0ZV0gfVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e0Nyb25Mb2dTdGF0ZXNbcm93LnN0YXRlXSB8fCByb3cuc3RhdGV9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJNZXNzYWdlXCIgY2xhc3M9XCJjb2wtbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj57e3Jvdy5tZXNzYWdlfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRHVyYXRpb25cIiBjbGFzcz1cImNvbC1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmR1cmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7cm93LmR1cmF0aW9uIHwgZnNEYXRlRHVyYXRpb246ICdob3VyLW1pbnV0ZS1zZWNvbmQnfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XHJcblxyXG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gbmFtZT1cImNyZWF0ZV9kYXRlXCIgdGl0bGU9XCJEYXRlXCIgY2xhc3M9XCJjb2wtZGF0ZVwiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cInJvdy5jcmVhdGVEYXRlXCI+PC9mcy1kYXRlLWFnbz5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxyXG4gICAgICAgICAgPC9mcy1saXN0PiBcclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L21hdC10YWI+XHJcbiAgICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+ICAgXHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAgIG1hdC1idXR0b24gXHJcbiAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIFxyXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxyXG4gICAgICBEb25lXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJJbmRleCA9PT0gMFwiPlxyXG4gICAgICA8YnV0dG9uICAgXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY3JvbkFjdGlvbiBvZiBjcm9uQWN0aW9uc1wiXHJcbiAgICAgICAgICBtYXQtYnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImNyb25BY3Rpb25DbGljayhjcm9uQWN0aW9uKVwiPlxyXG4gICAgICAgIHt7Y3JvbkFjdGlvbi5sYWJlbH19XHJcbiAgICAgIDwvYnV0dG9uPiAgXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9mcy1kaWFsb2c+XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './cron.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jcm9uLmNvbXBvbmVudCc7XHJcbiJdfQ==
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
37
37
  type: Inject,
38
38
  args: [MAT_DIALOG_DATA]
39
39
  }] }]; } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1sb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb21wb25lbnRzL2Nyb24tbG9nL2Nyb24tbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9jcm9uLWxvZy9jcm9uLWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxnQkFBZ0I7SUFNM0IsWUFDbUMsS0FBSztRQUFMLFVBQUssR0FBTCxLQUFLLENBQUE7UUFKakMsa0JBQWEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO0lBSTVCLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYTthQUN0QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUU7WUFDOUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQy9DLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQzs7OEdBakJVLGdCQUFnQixrQkFPakIsZUFBZTtrR0FQZCxnQkFBZ0Isb0RDVjdCLHcvQkFrQ0E7NEZEeEJhLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDekM7OzBCQVFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ3JvbkxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9jcm9uLWxvZy1zdGF0ZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Nyb24tbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcm9uLWxvZy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcm9uTG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGNyb25Mb2c7XHJcbiAgcHVibGljIENyb25Mb2dTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShDcm9uTG9nU3RhdGVzKTtcclxuICBwdWJsaWMgQ3JvbkxvZ1N0YXRlQ29sb3JzID0ge307XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JvbkxvZyA9IHRoaXMuX2RhdGEuY3JvbkxvZztcclxuICAgIHRoaXMuQ3JvbkxvZ1N0YXRlQ29sb3JzID0gQ3JvbkxvZ1N0YXRlc1xyXG4gICAgLnJlZHVjZSgoYWNjdW0sIGNyb25Mb2dTdGF0ZSkgPT4ge1xyXG4gICAgICBhY2N1bVtjcm9uTG9nU3RhdGUudmFsdWVdID0gY3JvbkxvZ1N0YXRlLmNvbG9yO1xyXG4gICAgICByZXR1cm4gYWNjdW07XHJcbiAgICB9LCB7fSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJjcm9uTG9nXCI+XHJcbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPkNyb24gTG9nPC9kaXY+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgIDxmcy1sYWJlbD5cclxuICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgIDwvZnMtbGFiZWw+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBDcm9uTG9nU3RhdGVDb2xvcnNbY3JvbkxvZy5zdGF0ZV19XCI+XHJcbiAgICAgICAgICB7e0Nyb25Mb2dTdGF0ZXNbY3JvbkxvZy5zdGF0ZV0gfHwgY3JvbkxvZy5zdGF0ZX19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XHJcblxyXG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgPGZzLWxhYmVsPlxyXG4gICAgICAgICAgRGF0ZVxyXG4gICAgICAgIDwvZnMtbGFiZWw+XHJcbiAgICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cImNyb25Mb2cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImNyb25Mb2cubWVzc2FnZVwiPlxyXG4gICAgICA8ZnMtbGFiZWw+XHJcbiAgICAgICAgTWVzc2FnZVxyXG4gICAgICA8L2ZzLWxhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPlxyXG4gICAgICAgIHt7Y3JvbkxvZy5tZXNzYWdlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPkRvbmU8L2J1dHRvbj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9mcy1kaWFsb2c+XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1sb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2Nyb24tbG9nL2Nyb24tbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uLWxvZy9jcm9uLWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxnQkFBZ0I7SUFNM0IsWUFDbUMsS0FBSztRQUFMLFVBQUssR0FBTCxLQUFLLENBQUE7UUFKakMsa0JBQWEsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUMsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO0lBSTVCLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsYUFBYTthQUN0QyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUU7WUFDOUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQy9DLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQzs7OEdBakJVLGdCQUFnQixrQkFPakIsZUFBZTtrR0FQZCxnQkFBZ0Isb0RDVjdCLHcvQkFrQ0E7NEZEeEJhLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDekM7OzBCQVFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ3JvbkxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9jcm9uLWxvZy1zdGF0ZXMuY29uc3QnO1xyXG5pbXBvcnQgeyBpbmRleE5hbWVWYWx1ZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvaW5kZXgtbmFtZS12YWx1ZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Nyb24tbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcm9uLWxvZy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcm9uTG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGNyb25Mb2c7XHJcbiAgcHVibGljIENyb25Mb2dTdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShDcm9uTG9nU3RhdGVzKTtcclxuICBwdWJsaWMgQ3JvbkxvZ1N0YXRlQ29sb3JzID0ge307XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JvbkxvZyA9IHRoaXMuX2RhdGEuY3JvbkxvZztcclxuICAgIHRoaXMuQ3JvbkxvZ1N0YXRlQ29sb3JzID0gQ3JvbkxvZ1N0YXRlc1xyXG4gICAgLnJlZHVjZSgoYWNjdW0sIGNyb25Mb2dTdGF0ZSkgPT4ge1xyXG4gICAgICBhY2N1bVtjcm9uTG9nU3RhdGUudmFsdWVdID0gY3JvbkxvZ1N0YXRlLmNvbG9yO1xyXG4gICAgICByZXR1cm4gYWNjdW07XHJcbiAgICB9LCB7fSk7XHJcbiAgfVxyXG59XHJcbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJjcm9uTG9nXCI+XHJcbiAgPGRpdiBtYXQtZGlhbG9nLXRpdGxlPkNyb24gTG9nPC9kaXY+XHJcbiAgPG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgIDxmcy1sYWJlbD5cclxuICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgIDwvZnMtbGFiZWw+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IGNvbG9yOiBDcm9uTG9nU3RhdGVDb2xvcnNbY3JvbkxvZy5zdGF0ZV19XCI+XHJcbiAgICAgICAgICB7e0Nyb25Mb2dTdGF0ZXNbY3JvbkxvZy5zdGF0ZV0gfHwgY3JvbkxvZy5zdGF0ZX19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XHJcblxyXG4gICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgPGZzLWxhYmVsPlxyXG4gICAgICAgICAgRGF0ZVxyXG4gICAgICAgIDwvZnMtbGFiZWw+XHJcbiAgICAgICAgPGZzLWRhdGUtYWdvIFtkYXRlXT1cImNyb25Mb2cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImNyb25Mb2cubWVzc2FnZVwiPlxyXG4gICAgICA8ZnMtbGFiZWw+XHJcbiAgICAgICAgTWVzc2FnZVxyXG4gICAgICA8L2ZzLWxhYmVsPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPlxyXG4gICAgICAgIHt7Y3JvbkxvZy5tZXNzYWdlfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPkRvbmU8L2J1dHRvbj5cclxuICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuPC9mcy1kaWFsb2c+XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './cron-log.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbi1sb2cvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3Jvbi1sb2cuY29tcG9uZW50JztcclxuIl19
@@ -0,0 +1,229 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { parse } from '@firestitch/date';
4
+ import { ItemType } from '@firestitch/filter';
5
+ import { FsListComponent } from '@firestitch/list';
6
+ import { FsMessage } from '@firestitch/message';
7
+ import { FsPrompt } from '@firestitch/prompt';
8
+ import { SelectionActionType } from '@firestitch/selection';
9
+ import { Subject } from 'rxjs';
10
+ import { map, switchMap, takeUntil, tap } from 'rxjs/operators';
11
+ import { differenceInSeconds } from 'date-fns';
12
+ import { CronStates } from '../../consts';
13
+ import { CronState } from '../../enums';
14
+ import { indexNameValue } from '../../helpers/index-name-value';
15
+ import { CronComponent } from '../cron/cron.component';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@firestitch/message";
18
+ import * as i2 from "@angular/material/dialog";
19
+ import * as i3 from "@firestitch/prompt";
20
+ import * as i4 from "@firestitch/list";
21
+ import * as i5 from "@firestitch/popover";
22
+ import * as i6 from "@firestitch/date";
23
+ import * as i7 from "@angular/common";
24
+ export class CronsComponent {
25
+ constructor(_message, _dialog, _prompt) {
26
+ this._message = _message;
27
+ this._dialog = _dialog;
28
+ this._prompt = _prompt;
29
+ this.config = null;
30
+ this.cronStates = indexNameValue(CronStates);
31
+ this.CronState = CronState;
32
+ this._destroy$ = new Subject();
33
+ }
34
+ ngOnInit() {
35
+ this._configList();
36
+ }
37
+ _configList() {
38
+ this.config = {
39
+ paging: false,
40
+ filters: [
41
+ {
42
+ type: ItemType.Keyword,
43
+ name: 'keyword',
44
+ label: 'Search',
45
+ },
46
+ ],
47
+ rowActions: this.getCronActions()
48
+ .map((rowAction) => {
49
+ return Object.assign(Object.assign({}, rowAction), { click: (cron) => {
50
+ rowAction.action(cron)
51
+ .subscribe();
52
+ } });
53
+ }),
54
+ fetch: (query) => {
55
+ query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
56
+ return this.loadCrons(query)
57
+ .pipe(map((crons) => ({
58
+ data: crons
59
+ .map((cron) => {
60
+ return Object.assign(Object.assign({}, cron), { runningDuration: differenceInSeconds(parse(cron.createDate), new Date()) });
61
+ }),
62
+ })));
63
+ },
64
+ };
65
+ if (this.bulk) {
66
+ this.config.selection = {
67
+ selectAll: false,
68
+ actions: [
69
+ {
70
+ type: SelectionActionType.Action,
71
+ name: 'disable',
72
+ label: 'Disable',
73
+ },
74
+ {
75
+ type: SelectionActionType.Action,
76
+ name: 'enable',
77
+ label: 'Enable',
78
+ },
79
+ ],
80
+ actionSelected: (action) => {
81
+ return this.bulk(action.action.name, action.selected)
82
+ .pipe(tap(() => {
83
+ this.list.reload();
84
+ this._message.success('Applied Changes');
85
+ }));
86
+ },
87
+ };
88
+ }
89
+ }
90
+ open(cron) {
91
+ this._dialog.open(CronComponent, {
92
+ data: {
93
+ cron,
94
+ loadCronLogs: this.loadCronLogs,
95
+ loadCron: this.loadCron,
96
+ cronActions: this.getCronActions(),
97
+ },
98
+ width: '85%',
99
+ });
100
+ }
101
+ getCronActions() {
102
+ return [
103
+ {
104
+ action: (data) => {
105
+ return this.queue(data)
106
+ .pipe(tap(() => {
107
+ this._message.success('Queued cron');
108
+ this.list.reload();
109
+ }));
110
+ },
111
+ label: 'Queue',
112
+ show: (cron) => {
113
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
114
+ },
115
+ },
116
+ {
117
+ action: (data) => {
118
+ return this.run(data)
119
+ .pipe(tap(() => {
120
+ this._message.success('Cron ran');
121
+ this.list.reload();
122
+ }));
123
+ },
124
+ label: 'Run',
125
+ show: (cron) => {
126
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
127
+ },
128
+ },
129
+ {
130
+ action: (data) => {
131
+ return this.enable(data)
132
+ .pipe(tap(() => {
133
+ this._message.success('Enabled cron');
134
+ this.list.reload();
135
+ }));
136
+ },
137
+ label: 'Enable',
138
+ show: (cron) => {
139
+ return cron.state === CronState.Disabled;
140
+ },
141
+ },
142
+ {
143
+ action: (data) => {
144
+ return this.disable(data)
145
+ .pipe(tap(() => {
146
+ this._message.success('Disabled cron');
147
+ this.list.reload();
148
+ }));
149
+ },
150
+ label: 'Disable',
151
+ show: (cron) => {
152
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
153
+ },
154
+ },
155
+ {
156
+ action: (data) => {
157
+ return this._prompt.confirm({
158
+ title: 'Confirm',
159
+ template: 'Are you sure you would like to kill the cron?',
160
+ })
161
+ .pipe(switchMap(() => {
162
+ return this.kill(data);
163
+ }), tap(() => {
164
+ this._message.success('Killed cron');
165
+ this.list.reload();
166
+ }), takeUntil(this._destroy$));
167
+ },
168
+ label: 'Kill',
169
+ show: (cron) => {
170
+ return cron.state === CronState.Running;
171
+ },
172
+ },
173
+ {
174
+ action: (data) => {
175
+ return this._prompt.confirm({
176
+ title: 'Confirm',
177
+ template: 'Are you sure you would like to reset the cron?',
178
+ })
179
+ .pipe(switchMap(() => {
180
+ return this.enable(data);
181
+ }), tap(() => {
182
+ this._message.success('Reset cron');
183
+ this.list.reload();
184
+ }), takeUntil(this._destroy$));
185
+ },
186
+ label: 'Reset',
187
+ show: (cron) => {
188
+ return cron.state === CronState.Killing || cron.state === CronState.Running || cron.state === CronState.Failed || cron.state === CronState.Queued;
189
+ },
190
+ },
191
+ ];
192
+ }
193
+ ngOnDestroy() {
194
+ this._destroy$.next();
195
+ this._destroy$.complete();
196
+ }
197
+ }
198
+ CronsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, deps: [{ token: i1.FsMessage }, { token: i2.MatDialog }, { token: i3.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
199
+ CronsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronsComponent, selector: "fs-system-crons", inputs: { enable: "enable", disable: "disable", kill: "kill", queue: "queue", run: "run", loadCrons: "loadCrons", loadCron: "loadCron", loadCronLogs: "loadCronLogs", bulk: "bulk" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a (click)=\"open(row)\">{{row.name}}</a>\r\n <div *ngIf=\"row.cronSetting\">\r\n <small>{{row.cronSetting.summary}}</small>\r\n </div>\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column align=\"center\">\r\n <ng-template fs-list-header>Status</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.host || row.processId; else status\">\r\n <fs-popover \r\n [maxWidth]=\"null\"\r\n [template]=\"statusPopover\" \r\n size=\"small\">\r\n <ng-container *ngTemplateOutlet=\"status\"></ng-container>\r\n </fs-popover>\r\n <ng-template #statusPopover>\r\n <div *ngIf=\"row.host\">Host: {{row.host}}</div>\r\n <div *ngIf=\"row.processId\">Process ID: {{row.processId}}</div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #status>\r\n {{cronStates[row.state]}}\r\n </ng-template>\r\n <ng-container *ngIf=\"row.state === CronState.Running\">\r\n <div class=\"small\">\r\n Duration: {{ row.runningDuration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\r\n </div>\r\n </ng-container> \r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Last Ran</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.duration===null; else lastRan\">\r\n Never\r\n </ng-container>\r\n <ng-template #lastRan>\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n <div class=\"small\" *ngIf=\"row.duration\">\r\n Duration: {{ row.duration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], components: [{ type: i4.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i5.FsPopoverComponent, selector: "fs-popover" }, { type: i6.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i4.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i4.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i4.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "fsDateDuration": i6.FsDateDurationPipe } });
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, decorators: [{
201
+ type: Component,
202
+ args: [{
203
+ selector: 'fs-system-crons',
204
+ templateUrl: './crons.component.html',
205
+ styleUrls: ['./crons.component.scss'],
206
+ }]
207
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i2.MatDialog }, { type: i3.FsPrompt }]; }, propDecorators: { list: [{
208
+ type: ViewChild,
209
+ args: [FsListComponent, { static: true }]
210
+ }], enable: [{
211
+ type: Input
212
+ }], disable: [{
213
+ type: Input
214
+ }], kill: [{
215
+ type: Input
216
+ }], queue: [{
217
+ type: Input
218
+ }], run: [{
219
+ type: Input
220
+ }], loadCrons: [{
221
+ type: Input
222
+ }], loadCron: [{
223
+ type: Input
224
+ }], loadCronLogs: [{
225
+ type: Input
226
+ }], bulk: [{
227
+ type: Input
228
+ }] } });
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2Nyb25zL2Nyb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9ucy9jcm9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBd0IsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdD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U0FBUztzQkFBeEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xyXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XHJcbmltcG9ydCB7IEZzTGlzdEFjdGlvblNlbGVjdGVkLCBGc0xpc3RDb21wb25lbnQsIEZzTGlzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xyXG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcclxuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25BY3Rpb25UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2VsZWN0aW9uJztcclxuXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgZGlmZmVyZW5jZUluU2Vjb25kcyB9IGZyb20gJ2RhdGUtZm5zJztcclxuXHJcbmltcG9ydCB7IENyb25TdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xyXG5pbXBvcnQgeyBDcm9uU3RhdGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcclxuaW1wb3J0IHsgQ3JvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nyb24vY3Jvbi5jb21wb25lbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZnMtc3lzdGVtLWNyb25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3JvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Nyb25zLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcm9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGxpc3Q6IEZzTGlzdENvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZTogKGRhdGE6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlOiAoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgQElucHV0KCkgcHVibGljIGtpbGw6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8YW55PjtcclxuICBASW5wdXQoKSBwdWJsaWMgcXVldWU6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8YW55PjtcclxuICBASW5wdXQoKSBwdWJsaWMgcnVuOiAoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgQElucHV0KCkgcHVibGljIGxvYWRDcm9uczogKGRhdGE6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgcHVibGljIGxvYWRDcm9uOiAoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgQElucHV0KCkgcHVibGljIGxvYWRDcm9uTG9nczogKGRhdGE6IGFueSkgPT4gT2JzZXJ2YWJsZTx7IGRhdGE6IGFueVtdOyBwYWdpbmc6IGFueSB9PjtcclxuICBASW5wdXQoKSBwdWJsaWMgYnVsazogKGFjdGlvbk5hbWU6IHN0cmluZywgZGF0YTogYW55W10pID0+IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcclxuICBwdWJsaWMgY3JvblN0YXRlcyA9IGluZGV4TmFtZVZhbHVlKENyb25TdGF0ZXMpO1xyXG4gIHB1YmxpYyBDcm9uU3RhdGUgPSBDcm9uU3RhdGU7XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX3Byb21wdDogRnNQcm9tcHQsXHJcbiAgKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlnTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29uZmlnTGlzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICBwYWdpbmc6IGZhbHNlLFxyXG4gICAgICBmaWx0ZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcclxuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcclxuICAgICAgICAgIGxhYmVsOiAnU2VhcmNoJyxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgICByb3dBY3Rpb25zOiB0aGlzLmdldENyb25BY3Rpb25zKClcclxuICAgICAgICAubWFwKChyb3dBY3Rpb24pID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnJvd0FjdGlvbixcclxuICAgICAgICAgICAgY2xpY2s6IChjcm9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcm93QWN0aW9uLmFjdGlvbihjcm9uKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KSxcclxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xyXG4gICAgICAgIHF1ZXJ5LnRpbWV6b25lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQ3JvbnMocXVlcnkpXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgbWFwKChjcm9ucykgPT4gKHtcclxuICAgICAgICAgICAgICBkYXRhOiBjcm9uc1xyXG4gICAgICAgICAgICAgICAgLm1hcCgoY3JvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmNyb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcnVubmluZ0R1cmF0aW9uOiBkaWZmZXJlbmNlSW5TZWNvbmRzKHBhcnNlKGNyb24uY3JlYXRlRGF0ZSksIG5ldyBEYXRlKCkpLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKHRoaXMuYnVsaykge1xyXG4gICAgICB0aGlzLmNvbmZpZy5zZWxlY3Rpb24gPSB7XHJcbiAgICAgICAgc2VsZWN0QWxsOiBmYWxzZSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdGlvbkFjdGlvblR5cGUuQWN0aW9uLFxyXG4gICAgICAgICAgICBuYW1lOiAnZGlzYWJsZScsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnRGlzYWJsZScsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiBTZWxlY3Rpb25BY3Rpb25UeXBlLkFjdGlvbixcclxuICAgICAgICAgICAgbmFtZTogJ2VuYWJsZScsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnRW5hYmxlJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBhY3Rpb25TZWxlY3RlZDogKGFjdGlvbjogRnNMaXN0QWN0aW9uU2VsZWN0ZWQpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmJ1bGsoYWN0aW9uLmFjdGlvbi5uYW1lLCBhY3Rpb24uc2VsZWN0ZWQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0FwcGxpZWQgQ2hhbmdlcycpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3Blbihjcm9uKSB7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihDcm9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBjcm9uLFxyXG4gICAgICAgIGxvYWRDcm9uTG9nczogdGhpcy5sb2FkQ3JvbkxvZ3MsXHJcbiAgICAgICAgbG9hZENyb246IHRoaXMubG9hZENyb24sXHJcbiAgICAgICAgY3JvbkFjdGlvbnM6IHRoaXMuZ2V0Q3JvbkFjdGlvbnMoKSxcclxuICAgICAgfSxcclxuICAgICAgd2lkdGg6ICc4NSUnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q3JvbkFjdGlvbnMoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucXVldWUoZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUXVldWVkIGNyb24nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdC5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxhYmVsOiAnUXVldWUnLFxyXG4gICAgICAgIHNob3c6IChjcm9uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gY3Jvbi5zdGF0ZSA9PT0gQ3JvblN0YXRlLklkbGUgfHwgY3Jvbi5zdGF0ZSA9PT0gQ3JvblN0YXRlLkZhaWxlZDtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucnVuKGRhdGEpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0Nyb24gcmFuJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsYWJlbDogJ1J1bicsXHJcbiAgICAgICAgc2hvdzogKGNyb24pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjcm9uLnN0YXRlID09PSBDcm9uU3RhdGUuSWRsZSB8fCBjcm9uLnN0YXRlID09PSBDcm9uU3RhdGUuRmFpbGVkO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBhY3Rpb246IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbmFibGUoZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnRW5hYmxlZCBjcm9uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsYWJlbDogJ0VuYWJsZScsXHJcbiAgICAgICAgc2hvdzogKGNyb24pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjcm9uLnN0YXRlID09PSBDcm9uU3RhdGUuRGlzYWJsZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGUoZGF0YSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnRGlzYWJsZWQgY3JvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbGFiZWw6ICdEaXNhYmxlJyxcclxuICAgICAgICBzaG93OiAoY3JvbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNyb24uc3RhdGUgPT09IENyb25TdGF0ZS5JZGxlIHx8IGNyb24uc3RhdGUgPT09IENyb25TdGF0ZS5GYWlsZWQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQuY29uZmlybSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ29uZmlybScsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiAnQXJlIHlvdSBzdXJlIHlvdSB3b3VsZCBsaWtlIHRvIGtpbGwgdGhlIGNyb24/JyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5raWxsKGRhdGEpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0tpbGxlZCBjcm9uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3QucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxhYmVsOiAnS2lsbCcsXHJcbiAgICAgICAgc2hvdzogKGNyb24pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjcm9uLnN0YXRlID09PSBDcm9uU3RhdGUuUnVubmluZztcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdC5jb25maXJtKHtcclxuICAgICAgICAgICAgdGl0bGU6ICdDb25maXJtJyxcclxuICAgICAgICAgICAgdGVtcGxhdGU6ICdBcmUgeW91IHN1cmUgeW91IHdvdWxkIGxpa2UgdG8gcmVzZXQgdGhlIGNyb24/JyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmFibGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnUmVzZXQgY3JvbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0LnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsYWJlbDogJ1Jlc2V0JyxcclxuICAgICAgICBzaG93OiAoY3JvbikgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNyb24uc3RhdGUgPT09IENyb25TdGF0ZS5LaWxsaW5nIHx8IGNyb24uc3RhdGUgPT09IENyb25TdGF0ZS5SdW5uaW5nIHx8IGNyb24uc3RhdGUgPT09IENyb25TdGF0ZS5GYWlsZWQgfHwgY3Jvbi5zdGF0ZSA9PT0gQ3JvblN0YXRlLlF1ZXVlZDtcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmcy1saXN0IFtjb25maWddPVwiY29uZmlnXCI+XHJcbiAgPGZzLWxpc3QtY29sdW1uPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPk5hbWU8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgIDxhIChjbGljayk9XCJvcGVuKHJvdylcIj57e3Jvdy5uYW1lfX08L2E+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJyb3cuY3JvblNldHRpbmdcIj5cclxuICAgICAgICA8c21hbGw+e3tyb3cuY3JvblNldHRpbmcuc3VtbWFyeX19PC9zbWFsbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZnMtbGlzdC1jb2x1bW4+XHJcbiAgPGZzLWxpc3QtY29sdW1uIGFsaWduPVwiY2VudGVyXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+U3RhdHVzPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93Lmhvc3QgfHwgcm93LnByb2Nlc3NJZDsgZWxzZSBzdGF0dXNcIj5cclxuICAgICAgICA8ZnMtcG9wb3ZlciBcclxuICAgICAgICAgICAgW21heFdpZHRoXT1cIm51bGxcIlxyXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwic3RhdHVzUG9wb3ZlclwiIFxyXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2ZzLXBvcG92ZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNzdGF0dXNQb3BvdmVyPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInJvdy5ob3N0XCI+SG9zdDoge3tyb3cuaG9zdH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnByb2Nlc3NJZFwiPlByb2Nlc3MgSUQ6IHt7cm93LnByb2Nlc3NJZH19PC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhdHVzPlxyXG4gICAgICAgIHt7Y3JvblN0YXRlc1tyb3cuc3RhdGVdfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5zdGF0ZSA9PT0gQ3JvblN0YXRlLlJ1bm5pbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj5cclxuICAgICAgICAgIER1cmF0aW9uOiB7eyByb3cucnVubmluZ0R1cmF0aW9uIHwgZnNEYXRlRHVyYXRpb246IHsgaG91cnM6IHRydWUsIG1pbnV0ZXM6IHRydWUsIHNlY29uZHM6IHRydWUgfSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj4gICAgICBcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9mcy1saXN0LWNvbHVtbj5cclxuICA8ZnMtbGlzdC1jb2x1bW4+XHJcbiAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1oZWFkZXI+TGFzdCBSYW48L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZHVyYXRpb249PT1udWxsOyBlbHNlIGxhc3RSYW5cIj5cclxuICAgICAgICBOZXZlclxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNsYXN0UmFuPlxyXG4gICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgKm5nSWY9XCJyb3cuZHVyYXRpb25cIj5cclxuICAgICAgICAgIER1cmF0aW9uOiB7eyByb3cuZHVyYXRpb24gfCBmc0RhdGVEdXJhdGlvbjogeyBob3VyczogdHJ1ZSwgbWludXRlczogdHJ1ZSwgc2Vjb25kczogdHJ1ZSB9IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZnMtbGlzdC1jb2x1bW4+XHJcbjwvZnMtbGlzdD5cclxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './crons.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3JvbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3JvbnMuY29tcG9uZW50JztcclxuIl19
@@ -0,0 +1,89 @@
1
+ import { Component, ChangeDetectionStrategy, Input, ChangeDetectorRef } from '@angular/core';
2
+ import { FsMessage } from '@firestitch/message';
3
+ import { FsBuildService } from '@firestitch/build';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { Subject } from 'rxjs';
6
+ import { differenceInMinutes } from 'date-fns';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@firestitch/message";
9
+ import * as i2 from "@firestitch/build";
10
+ import * as i3 from "@angular/material/button";
11
+ import * as i4 from "@firestitch/menu";
12
+ import * as i5 from "@firestitch/label";
13
+ import * as i6 from "@angular/material/icon";
14
+ import * as i7 from "@firestitch/skeleton";
15
+ import * as i8 from "@angular/common";
16
+ import * as i9 from "@angular/material/tooltip";
17
+ import * as i10 from "@firestitch/date";
18
+ export class DashboardComponent {
19
+ constructor(_message, _cdRef, _buildService) {
20
+ this._message = _message;
21
+ this._cdRef = _cdRef;
22
+ this._buildService = _buildService;
23
+ this.buttonActions = [];
24
+ this.menuActions = [];
25
+ this._destroy$ = new Subject();
26
+ this.actions = [];
27
+ }
28
+ ngOnInit() {
29
+ this._load();
30
+ this.buttonActions = this.actions.filter(item => { return !item.menu; });
31
+ this.menuActions = this.actions.filter(item => { return item.menu; });
32
+ this.build = this._buildService.build;
33
+ this._buildService.build$
34
+ .pipe(takeUntil(this._destroy$))
35
+ .subscribe((build) => {
36
+ this.build = build;
37
+ this._cdRef.markForCheck();
38
+ });
39
+ }
40
+ _load() {
41
+ this.load()
42
+ .subscribe((dashboard) => {
43
+ this.dashboard = dashboard;
44
+ this.dashboard.cronRanAttention = !dashboard.cronRan ||
45
+ differenceInMinutes(new Date(), new Date(dashboard.cronRan)) > 15;
46
+ this._cdRef.markForCheck();
47
+ });
48
+ }
49
+ ngOnDestroy() {
50
+ this._destroy$.next();
51
+ this._destroy$.complete();
52
+ }
53
+ actionClick(action) {
54
+ action.click();
55
+ }
56
+ initClick() {
57
+ this.init()
58
+ .subscribe(() => {
59
+ this._message.success('Successfully initialized the system');
60
+ });
61
+ }
62
+ upgradeClick() {
63
+ this.upgrade()
64
+ .subscribe(() => {
65
+ this._load();
66
+ this._message.success('Successfully upgraded the system');
67
+ });
68
+ }
69
+ }
70
+ DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i2.FsBuildService }], target: i0.ɵɵFactoryTarget.Component });
71
+ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DashboardComponent, selector: "fs-system-dashboard", inputs: { init: "init", upgrade: "upgrade", load: "load", actions: "actions" }, ngImport: i0, template: "<div *fsSkeleton=\"dashboard\">\r\n\r\n <div class=\"h2-container\">\r\n\r\n <div class=\"actions\">\r\n <h2>Actions</h2>\r\n <div class=\"fs-row.gap-tiny.wrap\">\r\n <button mat-raised-button (click)=\"upgradeClick()\">Run Upgrades</button>\r\n <button mat-raised-button (click)=\"initClick()\">Init System</button>\r\n\r\n <button\r\n *ngFor=\"let action of buttonActions\"\r\n mat-raised-button\r\n (click)=\"actionClick(action)\">\r\n {{action.label}}\r\n </button>\r\n\r\n <ng-container *ngIf=\"menuActions.length\">\r\n <fs-menu buttonClass=\"mat-raised-button menu-button\">\r\n <ng-template\r\n *ngFor=\"let action of menuActions\"\r\n fs-menu-item\r\n (click)=\"actionClick(action)\">\r\n {{action.label}}\r\n </ng-template>\r\n </fs-menu>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fs-row.gap-large.wrap\">\r\n <div>\r\n <h2>Server</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Date/Time</fs-label>\r\n {{dashboard.serverTime | fsDateFormat: 'date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Timezone</fs-label>\r\n {{dashboard.serverTimezone}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Hostname</fs-label>\r\n {{dashboard.serverHostname}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Directory</fs-label>\r\n {{dashboard.appDirectory}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>System</h2>\r\n <fs-label-field>\r\n <fs-label>Mode</fs-label>\r\n {{dashboard.appMode}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Notification Recipients</fs-label>\r\n {{dashboard.notifyRecipients.join(', ')}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>Database</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Name</fs-label>\r\n {{dashboard.databaseName}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Date/Time</fs-label>\r\n {{dashboard.databaseTime | fsDateFormat: 'date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Timezone</fs-label>\r\n {{dashboard.databaseTimezone}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div *ngIf=\"build || dashboard.upgrades.length\">\r\n <h2>Build</h2>\r\n\r\n <ng-container *ngIf=\"build\">\r\n <fs-label-field>\r\n <fs-label>Version</fs-label>\r\n {{build.version}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Date</fs-label>\r\n {{ build.date | fsDateFormat: 'date-time' }}\r\n </fs-label-field>\r\n </ng-container>\r\n\r\n <fs-label-field *ngIf=\"dashboard.upgrades.length\">\r\n <fs-label>Pending Upgrades</fs-label>\r\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': !!dashboard.upgrades.length }\">\r\n {{dashboard.upgrades.length}}\r\n <mat-icon\r\n [matTooltip]=\"dashboard.upgrades.join('\\n')\"\r\n matTooltipClass=\"tooltip-pending-upgrades\"\r\n >\r\n warning\r\n </mat-icon>\r\n </span>\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>Cron</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Last Ran</fs-label>\r\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': dashboard.cronRanAttention }\">\r\n <span *ngIf=\"!dashboard.cronRan\">Never</span>\r\n <span *ngIf=\"dashboard.cronRan\">{{dashboard.cronRan | fsDateFormat: 'date-time'}}</span>\r\n <mat-icon>warning</mat-icon>\r\n </span>\r\n </fs-label-field>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".actions{margin-bottom:1.25em}table td{padding:3px}.attention{display:flex;align-items:center}.attention mat-icon{display:none;margin-left:2px}.attention.needs-attention{color:#c00}.attention.needs-attention mat-icon{display:inline}::ng-deep .tooltip-pending-upgrades{white-space:pre-line}@media (max-width: 600px){:host ::ng-deep .menu-button{width:100%;border-radius:4px}}@media (min-width: 600px){:host ::ng-deep .menu-button{box-shadow:none}}\n"], components: [{ 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"] }, { type: i4.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { type: i5.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i5.FsLabelComponent, selector: "fs-label" }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i7.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "fsDateFormat": i10.FsDateFormatPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, decorators: [{
73
+ type: Component,
74
+ args: [{
75
+ selector: 'fs-system-dashboard',
76
+ templateUrl: 'dashboard.component.html',
77
+ styleUrls: ['dashboard.component.scss'],
78
+ changeDetection: ChangeDetectionStrategy.OnPush,
79
+ }]
80
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i0.ChangeDetectorRef }, { type: i2.FsBuildService }]; }, propDecorators: { init: [{
81
+ type: Input
82
+ }], upgrade: [{
83
+ type: Input
84
+ }], load: [{
85
+ type: Input
86
+ }], actions: [{
87
+ type: Input
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQWEsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7QUFXL0MsTUFBTSxPQUFPLGtCQUFrQjtJQWU3QixZQUNVLFFBQW1CLEVBQ25CLE1BQXlCLEVBQ3pCLGFBQTZCO1FBRjdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBZmhDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztRQUV0QyxnQkFBVyxHQUFzQixFQUFFLENBQUM7UUFFbkMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFNekIsWUFBTyxHQUFzQixFQUFFLENBQUM7SUFNckMsQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07YUFDeEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSztRQUNYLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDVixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU87Z0JBQ2pELG1CQUFtQixDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxNQUFNO1FBQ3ZCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDVixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUU7YUFDYixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dIQXJFVSxrQkFBa0I7b0dBQWxCLGtCQUFrQiwySUNuQi9CLHNuSUFtSUE7NEZEaEhhLGtCQUFrQjtrQkFOOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxTQUFTLEVBQUUsQ0FBRSwwQkFBMEIsQ0FBRTtvQkFDekMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzZKQVVVLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZzTWVzc2FnZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgQnVpbGREYXRhLCBGc0J1aWxkU2VydmljZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2J1aWxkJztcblxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBkaWZmZXJlbmNlSW5NaW51dGVzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5pbXBvcnQgeyBEYXNoYm9hcmRBY3Rpb24gfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvZGFzaGJvYXJkLWFjdGlvbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtc3lzdGVtLWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbICdkYXNoYm9hcmQuY29tcG9uZW50LnNjc3MnIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBkYXNoYm9hcmQ7XG4gIHB1YmxpYyBidXR0b25BY3Rpb25zOiBEYXNoYm9hcmRBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYnVpbGQ6IEJ1aWxkRGF0YTtcbiAgcHVibGljIG1lbnVBY3Rpb25zOiBEYXNoYm9hcmRBY3Rpb25bXSA9IFtdO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBASW5wdXQoKSBpbml0OiBGdW5jdGlvbjtcbiAgQElucHV0KCkgdXBncmFkZTogRnVuY3Rpb247XG4gIEBJbnB1dCgpIGxvYWQ6IEZ1bmN0aW9uO1xuXG4gIEBJbnB1dCgpIGFjdGlvbnM6IERhc2hib2FyZEFjdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfbWVzc2FnZTogRnNNZXNzYWdlLFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9idWlsZFNlcnZpY2U6IEZzQnVpbGRTZXJ2aWNlLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2xvYWQoKTtcbiAgICB0aGlzLmJ1dHRvbkFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKGl0ZW0gPT4geyByZXR1cm4gIWl0ZW0ubWVudTsgfSk7XG4gICAgdGhpcy5tZW51QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoaXRlbSA9PiB7IHJldHVybiBpdGVtLm1lbnU7IH0pO1xuXG4gICAgdGhpcy5idWlsZCA9IHRoaXMuX2J1aWxkU2VydmljZS5idWlsZDtcbiAgICB0aGlzLl9idWlsZFNlcnZpY2UuYnVpbGQkXG4gICAgLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKGJ1aWxkOiBCdWlsZERhdGEpID0+IHtcbiAgICAgIHRoaXMuYnVpbGQgPSBidWlsZDtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZCgpIHtcbiAgICB0aGlzLmxvYWQoKVxuICAgIC5zdWJzY3JpYmUoKGRhc2hib2FyZCkgPT4ge1xuICAgICAgdGhpcy5kYXNoYm9hcmQgPSBkYXNoYm9hcmQ7XG4gICAgICB0aGlzLmRhc2hib2FyZC5jcm9uUmFuQXR0ZW50aW9uID0gIWRhc2hib2FyZC5jcm9uUmFuIHx8XG4gICAgICAgICBkaWZmZXJlbmNlSW5NaW51dGVzKG5ldyBEYXRlKCksIG5ldyBEYXRlKGRhc2hib2FyZC5jcm9uUmFuKSkgPiAxNTtcbiAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGFjdGlvbkNsaWNrKGFjdGlvbikge1xuICAgIGFjdGlvbi5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGluaXRDbGljaygpIHtcbiAgICB0aGlzLmluaXQoKVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgdGhlIHN5c3RlbScpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHVwZ3JhZGVDbGljaygpIHtcbiAgICB0aGlzLnVwZ3JhZGUoKVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fbG9hZCgpO1xuICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdTdWNjZXNzZnVsbHkgdXBncmFkZWQgdGhlIHN5c3RlbScpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2ICpmc1NrZWxldG9uPVwiZGFzaGJvYXJkXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJoMi1jb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgIDxoMj5BY3Rpb25zPC9oMj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtcm93LmdhcC10aW55LndyYXBcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cInVwZ3JhZGVDbGljaygpXCI+UnVuIFVwZ3JhZGVzPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJpbml0Q2xpY2soKVwiPkluaXQgU3lzdGVtPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGJ1dHRvbkFjdGlvbnNcIlxyXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ2xpY2soYWN0aW9uKVwiPlxyXG4gICAgICAgICAgICB7e2FjdGlvbi5sYWJlbH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUFjdGlvbnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxmcy1tZW51IGJ1dHRvbkNsYXNzPVwibWF0LXJhaXNlZC1idXR0b24gbWVudS1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBtZW51QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIGZzLW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQ2xpY2soYWN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAge3thY3Rpb24ubGFiZWx9fVxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZnMtbWVudT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxhcmdlLndyYXBcIj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aDI+U2VydmVyPC9oMj5cclxuXHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPkRhdGUvVGltZTwvZnMtbGFiZWw+XHJcbiAgICAgICAgICB7e2Rhc2hib2FyZC5zZXJ2ZXJUaW1lIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJ319XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuXHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPlRpbWV6b25lPC9mcy1sYWJlbD5cclxuICAgICAgICAgIHt7ZGFzaGJvYXJkLnNlcnZlclRpbWV6b25lfX1cclxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG5cclxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgICA8ZnMtbGFiZWw+SG9zdG5hbWU8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAge3tkYXNoYm9hcmQuc2VydmVySG9zdG5hbWV9fVxyXG4gICAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XHJcblxyXG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cclxuICAgICAgICAgIDxmcy1sYWJlbD5EaXJlY3Rvcnk8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAge3tkYXNoYm9hcmQuYXBwRGlyZWN0b3J5fX1cclxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGgyPlN5c3RlbTwvaDI+XHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPk1vZGU8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAge3tkYXNoYm9hcmQuYXBwTW9kZX19XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuXHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPk5vdGlmaWNhdGlvbiBSZWNpcGllbnRzPC9mcy1sYWJlbD5cclxuICAgICAgICAgIHt7ZGFzaGJvYXJkLm5vdGlmeVJlY2lwaWVudHMuam9pbignLCAnKX19XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxoMj5EYXRhYmFzZTwvaDI+XHJcblxyXG4gICAgICAgIDxmcy1sYWJlbC1maWVsZD5cclxuICAgICAgICAgIDxmcy1sYWJlbD5OYW1lPC9mcy1sYWJlbD5cclxuICAgICAgICAgIHt7ZGFzaGJvYXJkLmRhdGFiYXNlTmFtZX19XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuXHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPkRhdGUvVGltZTwvZnMtbGFiZWw+XHJcbiAgICAgICAgICB7e2Rhc2hib2FyZC5kYXRhYmFzZVRpbWUgfCBmc0RhdGVGb3JtYXQ6ICdkYXRlLXRpbWUnfX1cclxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG5cclxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgICA8ZnMtbGFiZWw+VGltZXpvbmU8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAge3tkYXNoYm9hcmQuZGF0YWJhc2VUaW1lem9uZX19XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiYnVpbGQgfHwgZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aFwiPlxyXG4gICAgICAgIDxoMj5CdWlsZDwvaDI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidWlsZFwiPlxyXG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICAgICAgICA8ZnMtbGFiZWw+VmVyc2lvbjwvZnMtbGFiZWw+XHJcbiAgICAgICAgICAgIHt7YnVpbGQudmVyc2lvbn19XHJcbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG5cclxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cclxuICAgICAgICAgICAgPGZzLWxhYmVsPkRhdGU8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAgICB7eyBidWlsZC5kYXRlIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJyB9fVxyXG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiZGFzaGJvYXJkLnVwZ3JhZGVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGZzLWxhYmVsPlBlbmRpbmcgVXBncmFkZXM8L2ZzLWxhYmVsPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRlbnRpb25cIiBbbmdDbGFzc109XCJ7ICduZWVkcy1hdHRlbnRpb24nOiAhIWRhc2hib2FyZC51cGdyYWRlcy5sZW5ndGggfVwiPlxyXG4gICAgICAgICAgICB7e2Rhc2hib2FyZC51cGdyYWRlcy5sZW5ndGh9fVxyXG4gICAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImRhc2hib2FyZC51cGdyYWRlcy5qb2luKCdcXG4nKVwiXHJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwLXBlbmRpbmctdXBncmFkZXNcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHdhcm5pbmdcclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGgyPkNyb248L2gyPlxyXG5cclxuICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XHJcbiAgICAgICAgICA8ZnMtbGFiZWw+TGFzdCBSYW48L2ZzLWxhYmVsPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRlbnRpb25cIiBbbmdDbGFzc109XCJ7ICduZWVkcy1hdHRlbnRpb24nOiBkYXNoYm9hcmQuY3JvblJhbkF0dGVudGlvbiB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWRhc2hib2FyZC5jcm9uUmFuXCI+TmV2ZXI8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGFzaGJvYXJkLmNyb25SYW5cIj57e2Rhc2hib2FyZC5jcm9uUmFuIHwgZnNEYXRlRm9ybWF0OiAnZGF0ZS10aW1lJ319PC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+d2FybmluZzwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cclxuICAgICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './dashboard.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvZGFzaGJvYXJkL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './info.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvaW5mby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbmZvLmNvbXBvbmVudCc7XHJcbiJdfQ==