@acorex/components 18.14.1-next.0 → 18.14.1-next.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. package/calendar/lib/calendar.component.d.ts +16 -5
  2. package/calendar/lib/calendar.module.d.ts +2 -1
  3. package/check-box/lib/check-box.component.d.ts +13 -5
  4. package/cron-job/README.md +3 -0
  5. package/cron-job/index.d.ts +8 -0
  6. package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +31 -0
  7. package/cron-job/lib/cron-job.module.d.ts +25 -0
  8. package/cron-job/lib/cron-job.service.d.ts +22 -0
  9. package/cron-job/lib/day/day.component.d.ts +22 -0
  10. package/cron-job/lib/day/day.model.d.ts +61 -0
  11. package/cron-job/lib/day/day.service.d.ts +17 -0
  12. package/cron-job/lib/hours/hours.component.d.ts +14 -0
  13. package/cron-job/lib/hours/hours.model.d.ts +5 -0
  14. package/cron-job/lib/hours/hours.service.d.ts +13 -0
  15. package/cron-job/lib/minutes/minutes.component.d.ts +14 -0
  16. package/cron-job/lib/minutes/minutes.model.d.ts +5 -0
  17. package/cron-job/lib/minutes/minutes.service.d.ts +13 -0
  18. package/cron-job/lib/month/month.component.d.ts +16 -0
  19. package/cron-job/lib/month/month.model.d.ts +5 -0
  20. package/cron-job/lib/month/month.service.d.ts +14 -0
  21. package/cron-job/lib/seconds/seconds.component.d.ts +14 -0
  22. package/cron-job/lib/seconds/seconds.model.d.ts +5 -0
  23. package/cron-job/lib/seconds/seconds.service.d.ts +13 -0
  24. package/cron-job/lib/types/iexpression.d.ts +3 -0
  25. package/cron-job/lib/types/shared.model.d.ts +37 -0
  26. package/cron-job/lib/year/year.component.d.ts +15 -0
  27. package/cron-job/lib/year/year.model.d.ts +16 -0
  28. package/cron-job/lib/year/year.service.d.ts +12 -0
  29. package/datetime-input/lib/datetime-input.component.d.ts +9 -0
  30. package/datetime-picker/lib/datetime-picker.component.d.ts +1 -0
  31. package/esm2022/calendar/lib/calendar.component.mjs +186 -158
  32. package/esm2022/calendar/lib/calendar.module.mjs +5 -4
  33. package/esm2022/check-box/lib/check-box.component.mjs +39 -22
  34. package/esm2022/cron-job/acorex-components-cron-job.mjs +5 -0
  35. package/esm2022/cron-job/index.mjs +9 -0
  36. package/esm2022/cron-job/lib/cron-job-container/cron-job-container.component.mjs +90 -0
  37. package/esm2022/cron-job/lib/cron-job.module.mjs +80 -0
  38. package/esm2022/cron-job/lib/cron-job.service.mjs +60 -0
  39. package/esm2022/cron-job/lib/day/day.component.mjs +61 -0
  40. package/esm2022/cron-job/lib/day/day.model.mjs +88 -0
  41. package/esm2022/cron-job/lib/day/day.service.mjs +196 -0
  42. package/esm2022/cron-job/lib/hours/hours.component.mjs +38 -0
  43. package/esm2022/cron-job/lib/hours/hours.model.mjs +8 -0
  44. package/esm2022/cron-job/lib/hours/hours.service.mjs +82 -0
  45. package/esm2022/cron-job/lib/minutes/minutes.component.mjs +38 -0
  46. package/esm2022/cron-job/lib/minutes/minutes.model.mjs +8 -0
  47. package/esm2022/cron-job/lib/minutes/minutes.service.mjs +82 -0
  48. package/esm2022/cron-job/lib/month/month.component.mjs +47 -0
  49. package/esm2022/cron-job/lib/month/month.model.mjs +8 -0
  50. package/esm2022/cron-job/lib/month/month.service.mjs +96 -0
  51. package/esm2022/cron-job/lib/seconds/seconds.component.mjs +38 -0
  52. package/esm2022/cron-job/lib/seconds/seconds.model.mjs +8 -0
  53. package/esm2022/cron-job/lib/seconds/seconds.service.mjs +82 -0
  54. package/esm2022/cron-job/lib/types/iexpression.mjs +2 -0
  55. package/esm2022/cron-job/lib/types/shared.model.mjs +49 -0
  56. package/esm2022/cron-job/lib/year/year.component.mjs +45 -0
  57. package/esm2022/cron-job/lib/year/year.model.mjs +28 -0
  58. package/esm2022/cron-job/lib/year/year.service.mjs +82 -0
  59. package/esm2022/datetime-input/lib/datetime-input.component.mjs +38 -10
  60. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +17 -4
  61. package/esm2022/list/lib/list.component.mjs +3 -3
  62. package/esm2022/loading/lib/loading.component.mjs +7 -3
  63. package/esm2022/loading/lib/loading.service.mjs +3 -3
  64. package/esm2022/radio/lib/radio.component.mjs +3 -3
  65. package/esm2022/selection-list/lib/selection-list.component.mjs +70 -28
  66. package/esm2022/text-box/lib/text-box.component.mjs +11 -8
  67. package/fesm2022/acorex-components-calendar.mjs +187 -159
  68. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  69. package/fesm2022/acorex-components-check-box.mjs +39 -22
  70. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  71. package/fesm2022/acorex-components-cron-job.mjs +1191 -0
  72. package/fesm2022/acorex-components-cron-job.mjs.map +1 -0
  73. package/fesm2022/acorex-components-datetime-input.mjs +36 -8
  74. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  75. package/fesm2022/acorex-components-datetime-picker.mjs +15 -2
  76. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  77. package/fesm2022/acorex-components-list.mjs +2 -2
  78. package/fesm2022/acorex-components-list.mjs.map +1 -1
  79. package/fesm2022/acorex-components-loading.mjs +8 -4
  80. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  81. package/fesm2022/acorex-components-radio.mjs +2 -2
  82. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  83. package/fesm2022/acorex-components-selection-list.mjs +69 -27
  84. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  85. package/fesm2022/acorex-components-text-box.mjs +10 -7
  86. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  87. package/package.json +7 -1
  88. package/selection-list/lib/selection-list.component.d.ts +26 -6
  89. package/text-box/lib/text-box.component.d.ts +2 -2
@@ -0,0 +1,61 @@
1
+ import { afterNextRender, Component, inject, ViewEncapsulation } from '@angular/core';
2
+ import { DropDownItem } from '../types/shared.model';
3
+ import { BaseOnMonthType, BaseOnWeekType, DayType } from './day.model';
4
+ import { DayService } from './day.service';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@acorex/components/decorators";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@acorex/components/select-box";
9
+ import * as i4 from "@acorex/components/form";
10
+ import * as i5 from "@acorex/components/check-box";
11
+ import * as i6 from "@angular/common";
12
+ import * as i7 from "@acorex/core/translation";
13
+ export class AXCronDayComponent {
14
+ constructor() {
15
+ this.dayService = inject(DayService);
16
+ this.boWeekDropDownList = [];
17
+ this.boMonthDropDownList = [];
18
+ this.daysIndexInMonth = [1, 2, 3, 4, 5];
19
+ this.zeroTo30 = [];
20
+ this.#init = afterNextRender(() => {
21
+ for (const [i, day] of this.daysList.entries())
22
+ this.boWeekDropDownList[i] = new DropDownItem(i + 1, day);
23
+ for (let i = 0; i < 31; i++) {
24
+ this.zeroTo30[i] = i;
25
+ this.boMonthDropDownList[i] = new DropDownItem(i + 1, (i + 1).toString());
26
+ }
27
+ });
28
+ }
29
+ #init;
30
+ changeHandler(e) {
31
+ this.dayService.dayModel.baseOnWeek.custom.specific.values = e.component.selectedItems;
32
+ }
33
+ changeHandler2(e) {
34
+ this.dayService.dayModel.baseOnMonth.custom.specific.values = e.component.selectedItems;
35
+ }
36
+ get daysList() {
37
+ return this.dayService.daysList;
38
+ }
39
+ get isBoWeek() {
40
+ return this.dayService.dayModel.type === DayType.BOWeek ? true : false;
41
+ }
42
+ get isBoMonth() {
43
+ return this.dayService.dayModel.type === DayType.BOMonth ? true : false;
44
+ }
45
+ get isBoWeekCustom() {
46
+ return this.dayService.dayModel.baseOnWeek.type === BaseOnWeekType.Custom ? true : false;
47
+ }
48
+ get isBoMonthCustom() {
49
+ return this.dayService.dayModel.baseOnMonth.type === BaseOnMonthType.Custom ? true : false;
50
+ }
51
+ get isBoMonthBefore() {
52
+ return this.dayService.dayModel.baseOnMonth.type === BaseOnMonthType.Before ? true : false;
53
+ }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCronDayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXCronDayComponent, selector: "ax-cron-day", ngImport: i0, template: "<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option1\"\n value=\"every\"\n [(ngModel)]=\"dayService.dayModel.type\"\n checked\n />\n <label for=\"option1\">{{ 'Every' | translate | async }} {{ 'time.day' | translate | async }}</label>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option2\"\n value=\"boweek\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on week' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"boweek\"\n id=\"boweekLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n\n <span>{{ 'On the last' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.last.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of the month' | translate | async }}</span>\n </div>\n\n <div>\n <div class=\"ax-radio-container\">\n <input\n type=\"radio\"\n class=\"ax-radio\"\n name=\"boweek\"\n id=\"boweekCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n <label for=\"boweekLast\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n <label>{{ 'Specific day(s) of week (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth\"\n >\n </ax-check-box>\n\n <span>{{ 'On the' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysIndexInMonth\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.xst\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of month' | translate | async }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option3\"\n value=\"bomonth\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on Month' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthLast\">{{ 'On the Last day of the month' | translate | async }}</label>\n </div>\n\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"before\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthBefore\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.before\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) before the end of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthCustom\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n\n <label>{{ 'Specific day(s) of month (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"boMonthDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler2($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["ax-cron-day .ax-radio-container,ax-cron-hours .ax-radio-container,ax-cron-minutes .ax-radio-container,ax-cron-month .ax-radio-container,ax-cron-seconds .ax-radio-container,ax-cron-year .ax-radio-container{margin-bottom:.5rem;display:flex;align-items:center}ax-cron-day .ax-radio-container input,ax-cron-hours .ax-radio-container input,ax-cron-minutes .ax-radio-container input,ax-cron-month .ax-radio-container input,ax-cron-seconds .ax-radio-container input,ax-cron-year .ax-radio-container input{margin-inline-end:.5rem}ax-cron-day .ax-block-container,ax-cron-hours .ax-block-container,ax-cron-minutes .ax-block-container,ax-cron-month .ax-block-container,ax-cron-seconds .ax-block-container,ax-cron-year .ax-block-container{padding-inline-start:1.5rem}ax-cron-day .ax-block-container .ax-every-container,ax-cron-hours .ax-block-container .ax-every-container,ax-cron-minutes .ax-block-container .ax-every-container,ax-cron-month .ax-block-container .ax-every-container,ax-cron-seconds .ax-block-container .ax-every-container,ax-cron-year .ax-block-container .ax-every-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-every-container ax-form,ax-cron-hours .ax-block-container .ax-every-container ax-form,ax-cron-minutes .ax-block-container .ax-every-container ax-form,ax-cron-month .ax-block-container .ax-every-container ax-form,ax-cron-seconds .ax-block-container .ax-every-container ax-form,ax-cron-year .ax-block-container .ax-every-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-specific-container,ax-cron-hours .ax-block-container .ax-specific-container,ax-cron-minutes .ax-block-container .ax-specific-container,ax-cron-month .ax-block-container .ax-specific-container,ax-cron-seconds .ax-block-container .ax-specific-container,ax-cron-year .ax-block-container .ax-specific-container{margin-block:.5rem}ax-cron-day .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-month .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-year .ax-block-container .ax-specific-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container,ax-cron-hours .ax-block-container .ax-between-container,ax-cron-minutes .ax-block-container .ax-between-container,ax-cron-month .ax-block-container .ax-between-container,ax-cron-seconds .ax-block-container .ax-between-container,ax-cron-year .ax-block-container .ax-between-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-between-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-between-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-between-container .ax-flex-container,ax-cron-month .ax-block-container .ax-between-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-between-container .ax-flex-container,ax-cron-year .ax-block-container .ax-between-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container ax-form,ax-cron-hours .ax-block-container .ax-between-container ax-form,ax-cron-minutes .ax-block-container .ax-between-container ax-form,ax-cron-month .ax-block-container .ax-between-container ax-form,ax-cron-seconds .ax-block-container .ax-between-container ax-form,ax-cron-year .ax-block-container .ax-between-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-week-container,ax-cron-hours .ax-block-container .ax-week-container,ax-cron-minutes .ax-block-container .ax-week-container,ax-cron-month .ax-block-container .ax-week-container,ax-cron-seconds .ax-block-container .ax-week-container,ax-cron-year .ax-block-container .ax-week-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-week-container ax-form,ax-cron-hours .ax-block-container .ax-week-container ax-form,ax-cron-minutes .ax-block-container .ax-week-container ax-form,ax-cron-month .ax-block-container .ax-week-container ax-form,ax-cron-seconds .ax-block-container .ax-week-container ax-form,ax-cron-year .ax-block-container .ax-week-container ax-form{width:fit-content;margin-inline:.5rem}\n"], dependencies: [{ kind: "component", type: i1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "textTemplate", "dataSource", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed"] }, { kind: "component", type: i4.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i4.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "component", type: i5.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "checked", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXCronDayComponent, decorators: [{
58
+ type: Component,
59
+ args: [{ selector: 'ax-cron-day', encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option1\"\n value=\"every\"\n [(ngModel)]=\"dayService.dayModel.type\"\n checked\n />\n <label for=\"option1\">{{ 'Every' | translate | async }} {{ 'time.day' | translate | async }}</label>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option2\"\n value=\"boweek\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on week' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"boweek\"\n id=\"boweekLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n\n <span>{{ 'On the last' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.last.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of the month' | translate | async }}</span>\n </div>\n\n <div>\n <div class=\"ax-radio-container\">\n <input\n type=\"radio\"\n class=\"ax-radio\"\n name=\"boweek\"\n id=\"boweekCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.type\"\n [disabled]=\"!isBoWeek\"\n />\n <label for=\"boweekLast\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n <label>{{ 'Specific day(s) of week (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth\"\n >\n </ax-check-box>\n\n <span>{{ 'On the' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"daysIndexInMonth\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.xst\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoWeek || !isBoWeekCustom\"\n [dataSource]=\"boWeekDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnWeek.custom.dayOfMonth.day\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'of month' | translate | async }}</span>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"option\"\n id=\"option3\"\n value=\"bomonth\"\n [(ngModel)]=\"dayService.dayModel.type\"\n />\n <label for=\"option2\">{{ 'Base on Month' | translate | async }}</label>\n</div>\n\n<div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"last\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthLast\">{{ 'On the Last day of the month' | translate | async }}</label>\n </div>\n\n <div class=\"ax-week-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthLast\"\n value=\"before\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthBefore\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.before\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) before the end of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-radio-container\">\n <input\n class=\"ax-radio\"\n type=\"radio\"\n name=\"bomonth\"\n id=\"bomonthCustom\"\n value=\"custom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.type\"\n [disabled]=\"!isBoMonth\"\n />\n <label for=\"bomonthCustom\">{{ 'Custom' | translate | async }}</label>\n </div>\n\n <div class=\"ax-block-container\">\n <div class=\"ax-week-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.isRepeat\"\n >\n </ax-check-box>\n\n <span>{{ 'Every' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.interval\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'day(s) starting on' | translate | async }}</span>\n\n <ax-form class=\"ax-sm\">\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"zeroTo30\"\n textField=\"text\"\n valueField=\"id\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.repeat.startAt\"\n >\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n\n <span>{{ 'st of the month' | translate | async }}</span>\n </div>\n\n <div class=\"ax-specific-container\">\n <div class=\"ax-flex-container\">\n <ax-check-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [(ngModel)]=\"dayService.dayModel.baseOnMonth.custom.specific.isSpecefic\"\n >\n </ax-check-box>\n\n <label>{{ 'Specific day(s) of month (choose one or many)' | translate | async }}</label>\n </div>\n\n <ax-form>\n <ax-form-field>\n <ax-select-box\n [disabled]=\"!isBoMonth || !isBoMonthCustom\"\n [dataSource]=\"boMonthDropDownList\"\n textField=\"text\"\n valueField=\"id\"\n [placeholder]=\"'select day(s)' | translate | async\"\n [multiple]=\"true\"\n (onValueChanged)=\"changeHandler2($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </ax-form-field>\n </ax-form>\n </div>\n </div>\n </div>\n</div>\n", styles: ["ax-cron-day .ax-radio-container,ax-cron-hours .ax-radio-container,ax-cron-minutes .ax-radio-container,ax-cron-month .ax-radio-container,ax-cron-seconds .ax-radio-container,ax-cron-year .ax-radio-container{margin-bottom:.5rem;display:flex;align-items:center}ax-cron-day .ax-radio-container input,ax-cron-hours .ax-radio-container input,ax-cron-minutes .ax-radio-container input,ax-cron-month .ax-radio-container input,ax-cron-seconds .ax-radio-container input,ax-cron-year .ax-radio-container input{margin-inline-end:.5rem}ax-cron-day .ax-block-container,ax-cron-hours .ax-block-container,ax-cron-minutes .ax-block-container,ax-cron-month .ax-block-container,ax-cron-seconds .ax-block-container,ax-cron-year .ax-block-container{padding-inline-start:1.5rem}ax-cron-day .ax-block-container .ax-every-container,ax-cron-hours .ax-block-container .ax-every-container,ax-cron-minutes .ax-block-container .ax-every-container,ax-cron-month .ax-block-container .ax-every-container,ax-cron-seconds .ax-block-container .ax-every-container,ax-cron-year .ax-block-container .ax-every-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-every-container ax-form,ax-cron-hours .ax-block-container .ax-every-container ax-form,ax-cron-minutes .ax-block-container .ax-every-container ax-form,ax-cron-month .ax-block-container .ax-every-container ax-form,ax-cron-seconds .ax-block-container .ax-every-container ax-form,ax-cron-year .ax-block-container .ax-every-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-specific-container,ax-cron-hours .ax-block-container .ax-specific-container,ax-cron-minutes .ax-block-container .ax-specific-container,ax-cron-month .ax-block-container .ax-specific-container,ax-cron-seconds .ax-block-container .ax-specific-container,ax-cron-year .ax-block-container .ax-specific-container{margin-block:.5rem}ax-cron-day .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-month .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-specific-container .ax-flex-container,ax-cron-year .ax-block-container .ax-specific-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container,ax-cron-hours .ax-block-container .ax-between-container,ax-cron-minutes .ax-block-container .ax-between-container,ax-cron-month .ax-block-container .ax-between-container,ax-cron-seconds .ax-block-container .ax-between-container,ax-cron-year .ax-block-container .ax-between-container{display:flex;align-items:center}ax-cron-day .ax-block-container .ax-between-container .ax-flex-container,ax-cron-hours .ax-block-container .ax-between-container .ax-flex-container,ax-cron-minutes .ax-block-container .ax-between-container .ax-flex-container,ax-cron-month .ax-block-container .ax-between-container .ax-flex-container,ax-cron-seconds .ax-block-container .ax-between-container .ax-flex-container,ax-cron-year .ax-block-container .ax-between-container .ax-flex-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-between-container ax-form,ax-cron-hours .ax-block-container .ax-between-container ax-form,ax-cron-minutes .ax-block-container .ax-between-container ax-form,ax-cron-month .ax-block-container .ax-between-container ax-form,ax-cron-seconds .ax-block-container .ax-between-container ax-form,ax-cron-year .ax-block-container .ax-between-container ax-form{width:fit-content;margin-inline:.5rem}ax-cron-day .ax-block-container .ax-week-container,ax-cron-hours .ax-block-container .ax-week-container,ax-cron-minutes .ax-block-container .ax-week-container,ax-cron-month .ax-block-container .ax-week-container,ax-cron-seconds .ax-block-container .ax-week-container,ax-cron-year .ax-block-container .ax-week-container{display:flex;align-items:center;margin-bottom:.5rem}ax-cron-day .ax-block-container .ax-week-container ax-form,ax-cron-hours .ax-block-container .ax-week-container ax-form,ax-cron-minutes .ax-block-container .ax-week-container ax-form,ax-cron-month .ax-block-container .ax-week-container ax-form,ax-cron-seconds .ax-block-container .ax-week-container ax-form,ax-cron-year .ax-block-container .ax-week-container ax-form{width:fit-content;margin-inline:.5rem}\n"] }]
60
+ }] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jcm9uLWpvYi9zcmMvbGliL2RheS9kYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Nyb24tam9iL3NyYy9saWIvZGF5L2RheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFRM0MsTUFBTSxPQUFPLGtCQUFrQjtJQU4vQjtRQU9FLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEIsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBbUIsRUFBRSxDQUFDO1FBRXpDLHFCQUFnQixHQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFbEMsVUFBSyxHQUFHLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRTFHLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0tBaUNKO0lBeENDLEtBQUssQ0FPRjtJQUVPLGFBQWEsQ0FBQyxDQUFzQjtRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDekYsQ0FBQztJQUVTLGNBQWMsQ0FBQyxDQUFzQjtRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQWMsUUFBUTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekUsQ0FBQztJQUVELElBQWMsU0FBUztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRSxDQUFDO0lBRUQsSUFBYyxjQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDOzhHQWhEVSxrQkFBa0I7a0dBQWxCLGtCQUFrQixtRENaL0Isc2dUQTRUQTs7MkZEaFRhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBhZnRlck5leHRSZW5kZXIsIENvbXBvbmVudCwgaW5qZWN0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJvcERvd25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcbmltcG9ydCB7IEJhc2VPbk1vbnRoVHlwZSwgQmFzZU9uV2Vla1R5cGUsIERheVR5cGUgfSBmcm9tICcuL2RheS5tb2RlbCc7XG5pbXBvcnQgeyBEYXlTZXJ2aWNlIH0gZnJvbSAnLi9kYXkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWNyb24tZGF5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RheS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jcm9uLWpvYi5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEFYQ3JvbkRheUNvbXBvbmVudCB7XG4gIGRheVNlcnZpY2UgPSBpbmplY3QoRGF5U2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJvV2Vla0Ryb3BEb3duTGlzdDogRHJvcERvd25JdGVtW10gPSBbXTtcbiAgcHJvdGVjdGVkIGJvTW9udGhEcm9wRG93bkxpc3Q6IERyb3BEb3duSXRlbVtdID0gW107XG5cbiAgcHJvdGVjdGVkIGRheXNJbmRleEluTW9udGg6IG51bWJlcltdID0gWzEsIDIsIDMsIDQsIDVdO1xuICBwcm90ZWN0ZWQgemVyb1RvMzA6IG51bWJlcltdID0gW107XG5cbiAgI2luaXQgPSBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgIGZvciAoY29uc3QgW2ksIGRheV0gb2YgdGhpcy5kYXlzTGlzdC5lbnRyaWVzKCkpIHRoaXMuYm9XZWVrRHJvcERvd25MaXN0W2ldID0gbmV3IERyb3BEb3duSXRlbShpICsgMSwgZGF5KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzE7IGkrKykge1xuICAgICAgdGhpcy56ZXJvVG8zMFtpXSA9IGk7XG4gICAgICB0aGlzLmJvTW9udGhEcm9wRG93bkxpc3RbaV0gPSBuZXcgRHJvcERvd25JdGVtKGkgKyAxLCAoaSArIDEpLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGNoYW5nZUhhbmRsZXIoZTogQVhWYWx1ZUNoYW5nZWRFdmVudCkge1xuICAgIHRoaXMuZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMgPSBlLmNvbXBvbmVudC5zZWxlY3RlZEl0ZW1zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoYW5nZUhhbmRsZXIyKGU6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnNwZWNpZmljLnZhbHVlcyA9IGUuY29tcG9uZW50LnNlbGVjdGVkSXRlbXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRheXNMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5c0xpc3Q7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQm9XZWVrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwudHlwZSA9PT0gRGF5VHlwZS5CT1dlZWsgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzQm9Nb250aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9Nb250aCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb1dlZWtDdXN0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPT09IEJhc2VPbldlZWtUeXBlLkN1c3RvbSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb01vbnRoQ3VzdG9tKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkN1c3RvbSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNCb01vbnRoQmVmb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkJlZm9yZSA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXJhZGlvLWNvbnRhaW5lclwiPlxuICA8aW5wdXRcbiAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICB0eXBlPVwicmFkaW9cIlxuICAgIG5hbWU9XCJvcHRpb25cIlxuICAgIGlkPVwib3B0aW9uMVwiXG4gICAgdmFsdWU9XCJldmVyeVwiXG4gICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGVcIlxuICAgIGNoZWNrZWRcbiAgLz5cbiAgPGxhYmVsIGZvcj1cIm9wdGlvbjFcIj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX0ge3sgJ3RpbWUuZGF5JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiYXgtcmFkaW9cIlxuICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgbmFtZT1cIm9wdGlvblwiXG4gICAgaWQ9XCJvcHRpb24yXCJcbiAgICB2YWx1ZT1cImJvd2Vla1wiXG4gICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLnR5cGVcIlxuICAvPlxuICA8bGFiZWwgZm9yPVwib3B0aW9uMlwiPnt7ICdCYXNlIG9uIHdlZWsnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJheC1ibG9jay1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImF4LXdlZWstY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBuYW1lPVwiYm93ZWVrXCJcbiAgICAgIGlkPVwiYm93ZWVrTGFzdFwiXG4gICAgICB2YWx1ZT1cImxhc3RcIlxuICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrXCJcbiAgICAvPlxuXG4gICAgPHNwYW4+e3sgJ09uIHRoZSBsYXN0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvV2Vla1wiXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmxhc3QuZGF5XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgPC9heC1mb3JtPlxuXG4gICAgPHNwYW4+e3sgJ29mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJheC1yYWRpb1wiXG4gICAgICAgIG5hbWU9XCJib3dlZWtcIlxuICAgICAgICBpZD1cImJvd2Vla0N1c3RvbVwiXG4gICAgICAgIHZhbHVlPVwiY3VzdG9tXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsudHlwZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWtcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJib3dlZWtMYXN0XCI+e3sgJ0N1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtYmxvY2stY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtd2Vlay1jb250YWluZXJcIj5cbiAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmlzUmVwZWF0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvV2VlayB8fCAhaXNCb1dlZWtDdXN0b21cIlxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXlzTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmludGVydmFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnZGF5KHMpIHN0YXJ0aW5nIG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuc3RhcnRBdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2F4LWZvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImF4LXNwZWNpZmljLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC1jb250YWluZXJcIj5cbiAgICAgICAgICA8YXgtY2hlY2stYm94XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpY1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXgtY2hlY2stYm94PlxuICAgICAgICAgIDxsYWJlbD57eyAnU3BlY2lmaWMgZGF5KHMpIG9mIHdlZWsgKGNob29zZSBvbmUgb3IgbWFueSknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YXgtZm9ybT5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9XZWVrRHJvcERvd25MaXN0XCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInc2VsZWN0IGRheShzKScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICAgICAgICA8L2F4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgPC9heC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2F4LWZvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImF4LXdlZWstY29udGFpbmVyXCI+XG4gICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXlTZXJ2aWNlLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLmRheU9mTW9udGguaXNEYXlPZk1vbnRoXCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnT24gdGhlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb1dlZWsgfHwgIWlzQm9XZWVrQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF5c0luZGV4SW5Nb250aFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC54c3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9heC1zZWxlY3QtYm94PlxuICAgICAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICAgICAgPC9heC1mb3JtPlxuXG4gICAgICAgIDxzcGFuPnt7ICdzdCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cblxuICAgICAgICA8YXgtZm9ybSBjbGFzcz1cImF4LXNtXCI+XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9XZWVrIHx8ICFpc0JvV2Vla0N1c3RvbVwiXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImJvV2Vla0Ryb3BEb3duTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9heC1zZWxlY3QtYm94PlxuICAgICAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICAgICAgPC9heC1mb3JtPlxuXG4gICAgICAgIDxzcGFuPnt7ICdvZiBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiYXgtcmFkaW9cIlxuICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgbmFtZT1cIm9wdGlvblwiXG4gICAgaWQ9XCJvcHRpb24zXCJcbiAgICB2YWx1ZT1cImJvbW9udGhcIlxuICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC50eXBlXCJcbiAgLz5cbiAgPGxhYmVsIGZvcj1cIm9wdGlvbjJcIj57eyAnQmFzZSBvbiBNb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImF4LWJsb2NrLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiYXgtcmFkaW8tY29udGFpbmVyXCI+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICBuYW1lPVwiYm9tb250aFwiXG4gICAgICBpZD1cImJvbW9udGhMYXN0XCJcbiAgICAgIHZhbHVlPVwibGFzdFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aFwiXG4gICAgLz5cbiAgICA8bGFiZWwgZm9yPVwiYm9tb250aExhc3RcIj57eyAnT24gdGhlIExhc3QgZGF5IG9mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJheC13ZWVrLWNvbnRhaW5lclwiPlxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJheC1yYWRpb1wiXG4gICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgbmFtZT1cImJvbW9udGhcIlxuICAgICAgaWQ9XCJib21vbnRoTGFzdFwiXG4gICAgICB2YWx1ZT1cImJlZm9yZVwiXG4gICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aFwiXG4gICAgLz5cblxuICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhCZWZvcmVcIlxuICAgICAgICAgIFtkYXRhU291cmNlXT1cInplcm9UbzMwXCJcbiAgICAgICAgICB0ZXh0RmllbGQ9XCJ0ZXh0XCJcbiAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5iZWZvcmVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgIDwvYXgtZm9ybS1maWVsZD5cbiAgICA8L2F4LWZvcm0+XG5cbiAgICA8c3Bhbj57eyAnZGF5KHMpIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBtb250aCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImF4LWJsb2NrLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1yYWRpby1jb250YWluZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImF4LXJhZGlvXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgbmFtZT1cImJvbW9udGhcIlxuICAgICAgICBpZD1cImJvbW9udGhDdXN0b21cIlxuICAgICAgICB2YWx1ZT1cImN1c3RvbVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC50eXBlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGhcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBmb3I9XCJib21vbnRoQ3VzdG9tXCI+e3sgJ0N1c3RvbScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtYmxvY2stY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtd2Vlay1jb250YWluZXJcIj5cbiAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhDdXN0b21cIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmlzUmVwZWF0XCJcbiAgICAgICAgPlxuICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICA8c3Bhbj57eyAnRXZlcnknIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgPGF4LWZvcm0gY2xhc3M9XCJheC1zbVwiPlxuICAgICAgICAgIDxheC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGF4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGggfHwgIWlzQm9Nb250aEN1c3RvbVwiXG4gICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInplcm9UbzMwXCJcbiAgICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJpZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZGF5U2VydmljZS5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnZGF5KHMpIHN0YXJ0aW5nIG9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuXG4gICAgICAgIDxheC1mb3JtIGNsYXNzPVwiYXgtc21cIj5cbiAgICAgICAgICA8YXgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxheC1zZWxlY3QtYm94XG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNCb01vbnRoIHx8ICFpc0JvTW9udGhDdXN0b21cIlxuICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJ6ZXJvVG8zMFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnJlcGVhdC5zdGFydEF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cblxuICAgICAgICA8c3Bhbj57eyAnc3Qgb2YgdGhlIG1vbnRoJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1zcGVjaWZpYy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXgtY29udGFpbmVyXCI+XG4gICAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0JvTW9udGggfHwgIWlzQm9Nb250aEN1c3RvbVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRheVNlcnZpY2UuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnNwZWNpZmljLmlzU3BlY2VmaWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L2F4LWNoZWNrLWJveD5cblxuICAgICAgICAgIDxsYWJlbD57eyAnU3BlY2lmaWMgZGF5KHMpIG9mIG1vbnRoIChjaG9vc2Ugb25lIG9yIG1hbnkpJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGF4LWZvcm0+XG4gICAgICAgICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8YXgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQm9Nb250aCB8fCAhaXNCb01vbnRoQ3VzdG9tXCJcbiAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiYm9Nb250aERyb3BEb3duTGlzdFwiXG4gICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICB2YWx1ZUZpZWxkPVwiaWRcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NlbGVjdCBkYXkocyknIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJjaGFuZ2VIYW5kbGVyMigkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LWNsZWFyLWJ1dHRvbj48L2F4LWNsZWFyLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvYXgtc2VsZWN0LWJveD5cbiAgICAgICAgICA8L2F4LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvYXgtZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,88 @@
1
+ export class Day {
2
+ constructor() {
3
+ this.type = DayType.Every;
4
+ this.baseOnWeek = new BaseOnWeek();
5
+ this.baseOnMonth = new BaseOnMonth();
6
+ }
7
+ }
8
+ export class BaseOnMonth {
9
+ constructor() {
10
+ this.type = BaseOnMonthType.Last;
11
+ this.custom = new BaseOnMonthCustom();
12
+ this.before = 1;
13
+ }
14
+ }
15
+ export class BaseOnWeek {
16
+ constructor() {
17
+ this.type = BaseOnWeekType.Last;
18
+ this.last = new Last();
19
+ this.custom = new BaseOnWeekCustom();
20
+ }
21
+ }
22
+ export class BaseOnWeekCustom {
23
+ constructor() {
24
+ this.repeat = new BaseOnWeekRepeat();
25
+ this.specific = new Specific();
26
+ this.dayOfMonth = new DayOfMonth();
27
+ }
28
+ }
29
+ export class BaseOnMonthCustom {
30
+ constructor() {
31
+ this.repeat = new BaseOnMonthRepeat();
32
+ this.specific = new Specific();
33
+ }
34
+ }
35
+ export class Last {
36
+ constructor() {
37
+ this.day = 1;
38
+ }
39
+ }
40
+ export class BaseRepeat {
41
+ constructor() {
42
+ this.isRepeat = false;
43
+ this.interval = 1;
44
+ }
45
+ }
46
+ export class BaseOnWeekRepeat extends BaseRepeat {
47
+ constructor() {
48
+ super(...arguments);
49
+ this.startAt = 1;
50
+ }
51
+ }
52
+ export class BaseOnMonthRepeat extends BaseRepeat {
53
+ constructor() {
54
+ super(...arguments);
55
+ this.startAt = 1;
56
+ }
57
+ }
58
+ export class Specific {
59
+ constructor() {
60
+ this.isSpecefic = false;
61
+ this.values = [];
62
+ }
63
+ }
64
+ export class DayOfMonth {
65
+ constructor() {
66
+ this.isDayOfMonth = false;
67
+ this.xst = 1;
68
+ this.day = 1;
69
+ }
70
+ }
71
+ export var DayType;
72
+ (function (DayType) {
73
+ DayType["Every"] = "every";
74
+ DayType["BOWeek"] = "boweek";
75
+ DayType["BOMonth"] = "bomonth";
76
+ })(DayType || (DayType = {}));
77
+ export var BaseOnWeekType;
78
+ (function (BaseOnWeekType) {
79
+ BaseOnWeekType["Last"] = "last";
80
+ BaseOnWeekType["Custom"] = "custom";
81
+ })(BaseOnWeekType || (BaseOnWeekType = {}));
82
+ export var BaseOnMonthType;
83
+ (function (BaseOnMonthType) {
84
+ BaseOnMonthType["Last"] = "last";
85
+ BaseOnMonthType["Before"] = "before";
86
+ BaseOnMonthType["Custom"] = "custom";
87
+ })(BaseOnMonthType || (BaseOnMonthType = {}));
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2Nyb24tam9iL3NyYy9saWIvZGF5L2RheS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sR0FBRztJQUFoQjtRQUNFLFNBQUksR0FBWSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlCLGVBQVUsR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzFDLGdCQUFXLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7SUFDL0MsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDRSxTQUFJLEdBQW9CLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDN0MsV0FBTSxHQUFzQixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsV0FBTSxHQUFHLENBQUMsQ0FBQztJQUNiLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxVQUFVO0lBQXZCO1FBQ0UsU0FBSSxHQUFtQixjQUFjLENBQUMsSUFBSSxDQUFDO1FBQzNDLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3hCLFdBQU0sR0FBcUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3BELENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFDRSxXQUFNLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRCxhQUFRLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxlQUFVLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ0UsV0FBTSxHQUFzQixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsYUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLElBQUk7SUFBakI7UUFDRSxRQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFVBQVU7SUFBdkI7UUFDRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsVUFBVTtJQUFoRDs7UUFDRSxZQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFVBQVU7SUFBakQ7O1FBQ0UsWUFBTyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxRQUFRO0lBQXJCO1FBQ0UsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixXQUFNLEdBQW1CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sVUFBVTtJQUF2QjtRQUNFLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixRQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztDQUFBO0FBRUQsTUFBTSxDQUFOLElBQVksT0FJWDtBQUpELFdBQVksT0FBTztJQUNqQiwwQkFBZSxDQUFBO0lBQ2YsNEJBQWlCLENBQUE7SUFDakIsOEJBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUpXLE9BQU8sS0FBUCxPQUFPLFFBSWxCO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4QiwrQkFBYSxDQUFBO0lBQ2IsbUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFJWDtBQUpELFdBQVksZUFBZTtJQUN6QixnQ0FBYSxDQUFBO0lBQ2Isb0NBQWlCLENBQUE7SUFDakIsb0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHJvcERvd25JdGVtIH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIERheSB7XG4gIHR5cGU6IERheVR5cGUgPSBEYXlUeXBlLkV2ZXJ5O1xuICBiYXNlT25XZWVrOiBCYXNlT25XZWVrID0gbmV3IEJhc2VPbldlZWsoKTtcbiAgYmFzZU9uTW9udGg6IEJhc2VPbk1vbnRoID0gbmV3IEJhc2VPbk1vbnRoKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25Nb250aCB7XG4gIHR5cGU6IEJhc2VPbk1vbnRoVHlwZSA9IEJhc2VPbk1vbnRoVHlwZS5MYXN0O1xuICBjdXN0b206IEJhc2VPbk1vbnRoQ3VzdG9tID0gbmV3IEJhc2VPbk1vbnRoQ3VzdG9tKCk7XG4gIGJlZm9yZSA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25XZWVrIHtcbiAgdHlwZTogQmFzZU9uV2Vla1R5cGUgPSBCYXNlT25XZWVrVHlwZS5MYXN0O1xuICBsYXN0OiBMYXN0ID0gbmV3IExhc3QoKTtcbiAgY3VzdG9tOiBCYXNlT25XZWVrQ3VzdG9tID0gbmV3IEJhc2VPbldlZWtDdXN0b20oKTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VPbldlZWtDdXN0b20ge1xuICByZXBlYXQ6IEJhc2VPbldlZWtSZXBlYXQgPSBuZXcgQmFzZU9uV2Vla1JlcGVhdCgpO1xuICBzcGVjaWZpYzogU3BlY2lmaWMgPSBuZXcgU3BlY2lmaWMoKTtcbiAgZGF5T2ZNb250aDogRGF5T2ZNb250aCA9IG5ldyBEYXlPZk1vbnRoKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25Nb250aEN1c3RvbSB7XG4gIHJlcGVhdDogQmFzZU9uTW9udGhSZXBlYXQgPSBuZXcgQmFzZU9uTW9udGhSZXBlYXQoKTtcbiAgc3BlY2lmaWM6IFNwZWNpZmljID0gbmV3IFNwZWNpZmljKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMYXN0IHtcbiAgZGF5ID0gMTtcbn1cblxuZXhwb3J0IGNsYXNzIEJhc2VSZXBlYXQge1xuICBpc1JlcGVhdCA9IGZhbHNlO1xuICBpbnRlcnZhbCA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBCYXNlT25XZWVrUmVwZWF0IGV4dGVuZHMgQmFzZVJlcGVhdCB7XG4gIHN0YXJ0QXQgPSAxO1xufVxuXG5leHBvcnQgY2xhc3MgQmFzZU9uTW9udGhSZXBlYXQgZXh0ZW5kcyBCYXNlUmVwZWF0IHtcbiAgc3RhcnRBdCA9IDE7XG59XG5cbmV4cG9ydCBjbGFzcyBTcGVjaWZpYyB7XG4gIGlzU3BlY2VmaWMgPSBmYWxzZTtcbiAgdmFsdWVzOiBEcm9wRG93bkl0ZW1bXSA9IFtdO1xufVxuXG5leHBvcnQgY2xhc3MgRGF5T2ZNb250aCB7XG4gIGlzRGF5T2ZNb250aCA9IGZhbHNlO1xuICB4c3QgPSAxO1xuICBkYXkgPSAxO1xufVxuXG5leHBvcnQgZW51bSBEYXlUeXBlIHtcbiAgRXZlcnkgPSAnZXZlcnknLFxuICBCT1dlZWsgPSAnYm93ZWVrJyxcbiAgQk9Nb250aCA9ICdib21vbnRoJyxcbn1cblxuZXhwb3J0IGVudW0gQmFzZU9uV2Vla1R5cGUge1xuICBMYXN0ID0gJ2xhc3QnLFxuICBDdXN0b20gPSAnY3VzdG9tJyxcbn1cblxuZXhwb3J0IGVudW0gQmFzZU9uTW9udGhUeXBlIHtcbiAgTGFzdCA9ICdsYXN0JyxcbiAgQmVmb3JlID0gJ2JlZm9yZScsXG4gIEN1c3RvbSA9ICdjdXN0b20nLFxufVxuIl19
@@ -0,0 +1,196 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { StringService } from '../cron-job.service';
3
+ import { RegexItemsIndex } from '../types/shared.model';
4
+ import { BaseOnMonthType, BaseOnWeekType, Day, DayType } from './day.model';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../cron-job.service";
7
+ export class DayService {
8
+ constructor(stringService) {
9
+ this.stringService = stringService;
10
+ this.daysList = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
11
+ this.dayModel = new Day();
12
+ }
13
+ getExpression() {
14
+ let boMonthExp = '';
15
+ let boWeekExp = '';
16
+ if (this.dayModel.type === DayType.Every) {
17
+ boMonthExp = '?';
18
+ boWeekExp = '*';
19
+ }
20
+ else if (this.dayModel.type === DayType.BOMonth) {
21
+ boWeekExp = '?';
22
+ if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Last) {
23
+ boMonthExp = 'L';
24
+ }
25
+ else if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Before) {
26
+ const before = this.dayModel.baseOnMonth.before;
27
+ boMonthExp = `L-${before}`;
28
+ }
29
+ else if (this.dayModel.baseOnMonth.type === BaseOnMonthType.Custom) {
30
+ if (this.dayModel.baseOnMonth.custom.repeat.isRepeat) {
31
+ const interval = this.dayModel.baseOnMonth.custom.repeat.interval;
32
+ const startAt = this.dayModel.baseOnMonth.custom.repeat.startAt;
33
+ boMonthExp = `${startAt}/${interval}`;
34
+ }
35
+ if (this.dayModel.baseOnMonth.custom.specific.isSpecefic) {
36
+ const specificValues = this.dayModel.baseOnMonth.custom.specific.values.map((v) => {
37
+ return v.id;
38
+ });
39
+ if (specificValues.length !== 0)
40
+ boMonthExp = this.stringService.addComma(boMonthExp);
41
+ boMonthExp = boMonthExp.concat(specificValues.join(','));
42
+ }
43
+ if (boMonthExp === '')
44
+ boMonthExp = '*';
45
+ }
46
+ }
47
+ else if (this.dayModel.type === DayType.BOWeek) {
48
+ boMonthExp = '?';
49
+ if (this.dayModel.baseOnWeek.type === BaseOnWeekType.Last) {
50
+ const lastDay = this.dayModel.baseOnWeek.last.day;
51
+ boWeekExp = `${lastDay}L`;
52
+ }
53
+ else if (this.dayModel.baseOnWeek.type === BaseOnWeekType.Custom) {
54
+ if (this.dayModel.baseOnWeek.custom.repeat.isRepeat) {
55
+ const interval = this.dayModel.baseOnWeek.custom.repeat.interval;
56
+ const startAt = this.dayModel.baseOnWeek.custom.repeat.startAt;
57
+ boWeekExp = `${startAt}/${interval}`;
58
+ }
59
+ if (this.dayModel.baseOnWeek.custom.specific.isSpecefic) {
60
+ const specificValues = this.dayModel.baseOnWeek.custom.specific.values.map((v) => {
61
+ return v.id;
62
+ });
63
+ if (specificValues.length !== 0)
64
+ boWeekExp = this.stringService.addComma(boWeekExp);
65
+ boWeekExp = boWeekExp.concat(specificValues.join(','));
66
+ }
67
+ if (this.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth) {
68
+ boWeekExp = this.stringService.addComma(boWeekExp);
69
+ const day = this.dayModel.baseOnWeek.custom.dayOfMonth.day;
70
+ const xst = this.dayModel.baseOnWeek.custom.dayOfMonth.xst;
71
+ boWeekExp = boWeekExp.concat(`${day}#${xst}`);
72
+ }
73
+ if (boWeekExp === '')
74
+ boWeekExp = '*';
75
+ }
76
+ }
77
+ return [boWeekExp, boMonthExp];
78
+ }
79
+ expressionValidation(preCronExpressionPattern, newCronExpressionPattern) {
80
+ const preCronExpressionPatternArray = preCronExpressionPattern.split(' ');
81
+ const newCronExpressionPatternArray = newCronExpressionPattern.split(' ');
82
+ const dayOfWeekRegex = this.stringService.getRegexItem(newCronExpressionPattern, RegexItemsIndex.DayOfWeek);
83
+ const dayOfMonthRegex = this.stringService.getRegexItem(newCronExpressionPattern, RegexItemsIndex.DayOfMonth);
84
+ const isDayOfWeekChanged = preCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] !==
85
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek];
86
+ const isDayOfMonthChanged = preCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] !==
87
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth];
88
+ const isBasedOnWeek = dayOfWeekRegex !== '*' && dayOfWeekRegex !== '?';
89
+ const isBasedOnMonth = dayOfMonthRegex !== '?';
90
+ if (isDayOfWeekChanged && isBasedOnMonth) {
91
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] = '?';
92
+ return newCronExpressionPatternArray.join(' ');
93
+ }
94
+ else if (isDayOfWeekChanged && !isBasedOnWeek) {
95
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfMonth] = '*';
96
+ return newCronExpressionPatternArray.join(' ');
97
+ }
98
+ if (isDayOfMonthChanged && isBasedOnWeek) {
99
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] = '?';
100
+ return newCronExpressionPatternArray.join(' ');
101
+ }
102
+ else if (isDayOfMonthChanged && !isBasedOnMonth) {
103
+ newCronExpressionPatternArray[RegexItemsIndex.DayOfWeek] = '*';
104
+ return newCronExpressionPatternArray.join(' ');
105
+ }
106
+ return newCronExpressionPattern;
107
+ }
108
+ reversExpression(cronExpressionPattern) {
109
+ this.dayModel = new Day();
110
+ const dayOfWeekRegex = this.stringService.getRegexItem(cronExpressionPattern, RegexItemsIndex.DayOfWeek);
111
+ const dayOfMonthRegex = this.stringService.getRegexItem(cronExpressionPattern, RegexItemsIndex.DayOfMonth);
112
+ const isBasedOnWeek = dayOfWeekRegex !== '*' && dayOfWeekRegex !== '?';
113
+ const isBasedOnMonth = dayOfMonthRegex !== '?';
114
+ const isEveryDay = !isBasedOnWeek && !isBasedOnMonth;
115
+ if (isEveryDay) {
116
+ this.dayModel.type = DayType.Every;
117
+ return;
118
+ }
119
+ if (isBasedOnWeek) {
120
+ this.dayModel.type = DayType.BOWeek;
121
+ this.reversExpressionBasedOnWeek(dayOfWeekRegex);
122
+ return;
123
+ }
124
+ if (isBasedOnMonth) {
125
+ this.dayModel.type = DayType.BOMonth;
126
+ this.reversExpressionBasedOnMonth(dayOfMonthRegex);
127
+ return;
128
+ }
129
+ }
130
+ reversExpressionBasedOnWeek(regex) {
131
+ // **Regex pattern to check id custom or not**
132
+ const regexPattern = new RegExp('^[0-9]L$');
133
+ const isCustom = !regexPattern.test(regex);
134
+ if (!isCustom) {
135
+ this.dayModel.baseOnWeek.type = BaseOnWeekType.Last;
136
+ this.dayModel.baseOnWeek.last.day = parseInt(regex[0]);
137
+ return;
138
+ }
139
+ this.dayModel.baseOnWeek.type = BaseOnWeekType.Custom;
140
+ const intervalData = this.stringService.getIntervalCronData(regex);
141
+ const hasIntervalItems = intervalData !== undefined;
142
+ if (hasIntervalItems) {
143
+ this.dayModel.baseOnWeek.custom.repeat.isRepeat = true;
144
+ this.dayModel.baseOnWeek.custom.repeat.interval = intervalData?.interval;
145
+ this.dayModel.baseOnWeek.custom.repeat.startAt = intervalData?.startAt;
146
+ }
147
+ const specificData = this.stringService.getSpecificCronData(regex, this.daysList);
148
+ const hasSpecificItems = specificData !== undefined;
149
+ if (hasSpecificItems) {
150
+ this.dayModel.baseOnWeek.custom.specific.isSpecefic = true;
151
+ this.dayModel.baseOnWeek.custom.specific.values = specificData;
152
+ }
153
+ const dayOfMonthData = this.stringService.getDayOfMonthCronData(regex);
154
+ const hasDayOfMonthDataItem = dayOfMonthData !== undefined;
155
+ if (hasDayOfMonthDataItem) {
156
+ this.dayModel.baseOnWeek.custom.dayOfMonth.isDayOfMonth = true;
157
+ this.dayModel.baseOnWeek.custom.dayOfMonth.day = dayOfMonthData?.day;
158
+ this.dayModel.baseOnWeek.custom.dayOfMonth.xst = dayOfMonthData?.xst;
159
+ }
160
+ }
161
+ reversExpressionBasedOnMonth(regex) {
162
+ const isLastDayOfMonth = regex == 'L';
163
+ if (isLastDayOfMonth) {
164
+ this.dayModel.baseOnMonth.type = BaseOnMonthType.Last;
165
+ return;
166
+ }
167
+ // **Regex pattern to check if id before or not**
168
+ const regexPattern = new RegExp('^L-[0-9]+$');
169
+ const isCustom = !regexPattern.test(regex);
170
+ if (!isCustom) {
171
+ this.dayModel.baseOnMonth.type = BaseOnMonthType.Before;
172
+ this.dayModel.baseOnMonth.before = parseInt(regex.substr(2));
173
+ return;
174
+ }
175
+ this.dayModel.baseOnMonth.type = BaseOnMonthType.Custom;
176
+ const intervalData = this.stringService.getIntervalCronData(regex);
177
+ const hasIntervalItems = intervalData !== undefined;
178
+ if (hasIntervalItems) {
179
+ this.dayModel.baseOnMonth.custom.repeat.isRepeat = true;
180
+ this.dayModel.baseOnMonth.custom.repeat.interval = intervalData?.interval;
181
+ this.dayModel.baseOnMonth.custom.repeat.startAt = intervalData?.startAt;
182
+ }
183
+ const specificData = this.stringService.getSpecificCronData(regex, this.daysList);
184
+ const hasSpecificItems = specificData !== undefined;
185
+ if (hasSpecificItems) {
186
+ this.dayModel.baseOnMonth.custom.specific.isSpecefic = true;
187
+ this.dayModel.baseOnMonth.custom.specific.values = specificData;
188
+ }
189
+ }
190
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService, deps: [{ token: i1.StringService }], target: i0.ɵɵFactoryTarget.Injectable }); }
191
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService }); }
192
+ }
193
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: DayService, decorators: [{
194
+ type: Injectable
195
+ }], ctorParameters: () => [{ type: i1.StringService }] });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY3Jvbi1qb2Ivc3JjL2xpYi9kYXkvZGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFHNUUsTUFBTSxPQUFPLFVBQVU7SUFHckIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFEaEQsYUFBUSxHQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNqQixTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsRCxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEs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QVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLFFBQWtCLENBQUM7WUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxFQUFFLE9BQWlCLENBQUM7UUFDcEYsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRixNQUFNLGdCQUFnQixHQUFHLFlBQVksS0FBSyxTQUFTLENBQUM7UUFDcEQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFtQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDOzhHQXhOVSxVQUFVO2tIQUFWLFVBQVU7OzJGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdHJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vY3Jvbi1qb2Iuc2VydmljZSc7XG5pbXBvcnQgeyBJRXhwcmVzc2lvbiB9IGZyb20gJy4uL3R5cGVzL2lleHByZXNzaW9uJztcbmltcG9ydCB7IERyb3BEb3duSXRlbSwgUmVnZXhJdGVtc0luZGV4IH0gZnJvbSAnLi4vdHlwZXMvc2hhcmVkLm1vZGVsJztcbmltcG9ydCB7IEJhc2VPbk1vbnRoVHlwZSwgQmFzZU9uV2Vla1R5cGUsIERheSwgRGF5VHlwZSB9IGZyb20gJy4vZGF5Lm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERheVNlcnZpY2UgaW1wbGVtZW50cyBJRXhwcmVzc2lvbiB7XG4gIGRheU1vZGVsOiBEYXk7XG4gIGRheXNMaXN0OiBBcnJheTxzdHJpbmc+ID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0cmluZ1NlcnZpY2U6IFN0cmluZ1NlcnZpY2UpIHtcbiAgICB0aGlzLmRheU1vZGVsID0gbmV3IERheSgpO1xuICB9XG5cbiAgZ2V0RXhwcmVzc2lvbigpOiBhbnkge1xuICAgIGxldCBib01vbnRoRXhwID0gJyc7XG4gICAgbGV0IGJvV2Vla0V4cCA9ICcnO1xuICAgIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuRXZlcnkpIHtcbiAgICAgIGJvTW9udGhFeHAgPSAnPyc7XG4gICAgICBib1dlZWtFeHAgPSAnKic7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9Nb250aCkge1xuICAgICAgYm9XZWVrRXhwID0gJz8nO1xuICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9PT0gQmFzZU9uTW9udGhUeXBlLkxhc3QpIHtcbiAgICAgICAgYm9Nb250aEV4cCA9ICdMJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC50eXBlID09PSBCYXNlT25Nb250aFR5cGUuQmVmb3JlKSB7XG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGguYmVmb3JlO1xuXG4gICAgICAgIGJvTW9udGhFeHAgPSBgTC0ke2JlZm9yZX1gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPT09IEJhc2VPbk1vbnRoVHlwZS5DdXN0b20pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGguY3VzdG9tLnJlcGVhdC5pc1JlcGVhdCkge1xuICAgICAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuc3RhcnRBdDtcbiAgICAgICAgICBib01vbnRoRXhwID0gYCR7c3RhcnRBdH0vJHtpbnRlcnZhbH1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy5pc1NwZWNlZmljKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNWYWx1ZXMgPSB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdi5pZDtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlcy5sZW5ndGggIT09IDApIGJvTW9udGhFeHAgPSB0aGlzLnN0cmluZ1NlcnZpY2UuYWRkQ29tbWEoYm9Nb250aEV4cCk7XG5cbiAgICAgICAgICBib01vbnRoRXhwID0gYm9Nb250aEV4cC5jb25jYXQoc3BlY2lmaWNWYWx1ZXMuam9pbignLCcpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9Nb250aEV4cCA9PT0gJycpIGJvTW9udGhFeHAgPSAnKic7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRheU1vZGVsLnR5cGUgPT09IERheVR5cGUuQk9XZWVrKSB7XG4gICAgICBib01vbnRoRXhwID0gJz8nO1xuICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay50eXBlID09PSBCYXNlT25XZWVrVHlwZS5MYXN0KSB7XG4gICAgICAgIGNvbnN0IGxhc3REYXkgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsubGFzdC5kYXk7XG5cbiAgICAgICAgYm9XZWVrRXhwID0gYCR7bGFzdERheX1MYDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPT09IEJhc2VPbldlZWtUeXBlLkN1c3RvbSkge1xuICAgICAgICBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LmludGVydmFsO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0QXQgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnJlcGVhdC5zdGFydEF0O1xuICAgICAgICAgIGJvV2Vla0V4cCA9IGAke3N0YXJ0QXR9LyR7aW50ZXJ2YWx9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5zcGVjaWZpYy5pc1NwZWNlZmljKSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWNWYWx1ZXMgPSB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnNwZWNpZmljLnZhbHVlcy5tYXAoKHYpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2LmlkO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVzLmxlbmd0aCAhPT0gMCkgYm9XZWVrRXhwID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmFkZENvbW1hKGJvV2Vla0V4cCk7XG5cbiAgICAgICAgICBib1dlZWtFeHAgPSBib1dlZWtFeHAuY29uY2F0KHNwZWNpZmljVmFsdWVzLmpvaW4oJywnKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5pc0RheU9mTW9udGgpIHtcbiAgICAgICAgICBib1dlZWtFeHAgPSB0aGlzLnN0cmluZ1NlcnZpY2UuYWRkQ29tbWEoYm9XZWVrRXhwKTtcblxuICAgICAgICAgIGNvbnN0IGRheSA9IHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXk7XG4gICAgICAgICAgY29uc3QgeHN0ID0gdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5kYXlPZk1vbnRoLnhzdDtcblxuICAgICAgICAgIGJvV2Vla0V4cCA9IGJvV2Vla0V4cC5jb25jYXQoYCR7ZGF5fSMke3hzdH1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYm9XZWVrRXhwID09PSAnJykgYm9XZWVrRXhwID0gJyonO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbYm9XZWVrRXhwLCBib01vbnRoRXhwXTtcbiAgfVxuXG4gIGV4cHJlc3Npb25WYWxpZGF0aW9uKHByZUNyb25FeHByZXNzaW9uUGF0dGVybjogc3RyaW5nLCBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlQ3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXkgPSBwcmVDcm9uRXhwcmVzc2lvblBhdHRlcm4uc3BsaXQoJyAnKTtcbiAgICBjb25zdCBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheSA9IG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybi5zcGxpdCgnICcpO1xuXG4gICAgY29uc3QgZGF5T2ZXZWVrUmVnZXg6IHN0cmluZyA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRSZWdleEl0ZW0oXG4gICAgICBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm4sXG4gICAgICBSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrLFxuICAgICk7XG4gICAgY29uc3QgZGF5T2ZNb250aFJlZ2V4OiBzdHJpbmcgPSB0aGlzLnN0cmluZ1NlcnZpY2UuZ2V0UmVnZXhJdGVtKFxuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuLFxuICAgICAgUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGgsXG4gICAgKTtcblxuICAgIGNvbnN0IGlzRGF5T2ZXZWVrQ2hhbmdlZCA9XG4gICAgICBwcmVDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheVtSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrXSAhPT1cbiAgICAgIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5W1JlZ2V4SXRlbXNJbmRleC5EYXlPZldlZWtdO1xuICAgIGNvbnN0IGlzRGF5T2ZNb250aENoYW5nZWQgPVxuICAgICAgcHJlQ3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdICE9PVxuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdO1xuXG4gICAgY29uc3QgaXNCYXNlZE9uV2VlayA9IGRheU9mV2Vla1JlZ2V4ICE9PSAnKicgJiYgZGF5T2ZXZWVrUmVnZXggIT09ICc/JztcbiAgICBjb25zdCBpc0Jhc2VkT25Nb250aCA9IGRheU9mTW9udGhSZWdleCAhPT0gJz8nO1xuXG4gICAgaWYgKGlzRGF5T2ZXZWVrQ2hhbmdlZCAmJiBpc0Jhc2VkT25Nb250aCkge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdID0gJz8nO1xuICAgICAgcmV0dXJuIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5LmpvaW4oJyAnKTtcbiAgICB9IGVsc2UgaWYgKGlzRGF5T2ZXZWVrQ2hhbmdlZCAmJiAhaXNCYXNlZE9uV2Vlaykge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mTW9udGhdID0gJyonO1xuICAgICAgcmV0dXJuIG5ld0Nyb25FeHByZXNzaW9uUGF0dGVybkFycmF5LmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBpZiAoaXNEYXlPZk1vbnRoQ2hhbmdlZCAmJiBpc0Jhc2VkT25XZWVrKSB7XG4gICAgICBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheVtSZWdleEl0ZW1zSW5kZXguRGF5T2ZXZWVrXSA9ICc/JztcbiAgICAgIHJldHVybiBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm5BcnJheS5qb2luKCcgJyk7XG4gICAgfSBlbHNlIGlmIChpc0RheU9mTW9udGhDaGFuZ2VkICYmICFpc0Jhc2VkT25Nb250aCkge1xuICAgICAgbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXlbUmVnZXhJdGVtc0luZGV4LkRheU9mV2Vla10gPSAnKic7XG4gICAgICByZXR1cm4gbmV3Q3JvbkV4cHJlc3Npb25QYXR0ZXJuQXJyYXkuam9pbignICcpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdDcm9uRXhwcmVzc2lvblBhdHRlcm47XG4gIH1cblxuICByZXZlcnNFeHByZXNzaW9uKGNyb25FeHByZXNzaW9uUGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kYXlNb2RlbCA9IG5ldyBEYXkoKTtcbiAgICBjb25zdCBkYXlPZldlZWtSZWdleDogc3RyaW5nID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldFJlZ2V4SXRlbShcbiAgICAgIGNyb25FeHByZXNzaW9uUGF0dGVybixcbiAgICAgIFJlZ2V4SXRlbXNJbmRleC5EYXlPZldlZWssXG4gICAgKTtcbiAgICBjb25zdCBkYXlPZk1vbnRoUmVnZXg6IHN0cmluZyA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRSZWdleEl0ZW0oXG4gICAgICBjcm9uRXhwcmVzc2lvblBhdHRlcm4sXG4gICAgICBSZWdleEl0ZW1zSW5kZXguRGF5T2ZNb250aCxcbiAgICApO1xuXG4gICAgY29uc3QgaXNCYXNlZE9uV2VlayA9IGRheU9mV2Vla1JlZ2V4ICE9PSAnKicgJiYgZGF5T2ZXZWVrUmVnZXggIT09ICc/JztcbiAgICBjb25zdCBpc0Jhc2VkT25Nb250aCA9IGRheU9mTW9udGhSZWdleCAhPT0gJz8nO1xuICAgIGNvbnN0IGlzRXZlcnlEYXk6IGJvb2xlYW4gPSAhaXNCYXNlZE9uV2VlayAmJiAhaXNCYXNlZE9uTW9udGg7XG4gICAgaWYgKGlzRXZlcnlEYXkpIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwudHlwZSA9IERheVR5cGUuRXZlcnk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzQmFzZWRPbldlZWspIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwudHlwZSA9IERheVR5cGUuQk9XZWVrO1xuICAgICAgdGhpcy5yZXZlcnNFeHByZXNzaW9uQmFzZWRPbldlZWsoZGF5T2ZXZWVrUmVnZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChpc0Jhc2VkT25Nb250aCkge1xuICAgICAgdGhpcy5kYXlNb2RlbC50eXBlID0gRGF5VHlwZS5CT01vbnRoO1xuICAgICAgdGhpcy5yZXZlcnNFeHByZXNzaW9uQmFzZWRPbk1vbnRoKGRheU9mTW9udGhSZWdleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcmV2ZXJzRXhwcmVzc2lvbkJhc2VkT25XZWVrKHJlZ2V4OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyAqKlJlZ2V4IHBhdHRlcm4gdG8gY2hlY2sgaWQgY3VzdG9tIG9yIG5vdCoqXG4gICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXlswLTldTCQnKTtcbiAgICBjb25zdCBpc0N1c3RvbSA9ICFyZWdleFBhdHRlcm4udGVzdChyZWdleCk7XG4gICAgaWYgKCFpc0N1c3RvbSkge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLnR5cGUgPSBCYXNlT25XZWVrVHlwZS5MYXN0O1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmxhc3QuZGF5ID0gcGFyc2VJbnQocmVnZXhbMF0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay50eXBlID0gQmFzZU9uV2Vla1R5cGUuQ3VzdG9tO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldEludGVydmFsQ3JvbkRhdGEocmVnZXgpO1xuICAgIGNvbnN0IGhhc0ludGVydmFsSXRlbXMgPSBpbnRlcnZhbERhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzSW50ZXJ2YWxJdGVtcykge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQgPSB0cnVlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25XZWVrLmN1c3RvbS5yZXBlYXQuaW50ZXJ2YWwgPSBpbnRlcnZhbERhdGE/LmludGVydmFsIGFzIG51bWJlcjtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20ucmVwZWF0LnN0YXJ0QXQgPSBpbnRlcnZhbERhdGE/LnN0YXJ0QXQgYXMgbnVtYmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpZmljRGF0YSA9IHRoaXMuc3RyaW5nU2VydmljZS5nZXRTcGVjaWZpY0Nyb25EYXRhKHJlZ2V4LCB0aGlzLmRheXNMaXN0KTtcbiAgICBjb25zdCBoYXNTcGVjaWZpY0l0ZW1zID0gc3BlY2lmaWNEYXRhICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc1NwZWNpZmljSXRlbXMpIHtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpYyA9IHRydWU7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLnNwZWNpZmljLnZhbHVlcyA9IHNwZWNpZmljRGF0YSBhcyBBcnJheTxEcm9wRG93bkl0ZW0+O1xuICAgIH1cblxuICAgIGNvbnN0IGRheU9mTW9udGhEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldERheU9mTW9udGhDcm9uRGF0YShyZWdleCk7XG4gICAgY29uc3QgaGFzRGF5T2ZNb250aERhdGFJdGVtID0gZGF5T2ZNb250aERhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRGF5T2ZNb250aERhdGFJdGVtKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbldlZWsuY3VzdG9tLmRheU9mTW9udGguaXNEYXlPZk1vbnRoID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC5kYXkgPSBkYXlPZk1vbnRoRGF0YT8uZGF5IGFzIG51bWJlcjtcbiAgICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uV2Vlay5jdXN0b20uZGF5T2ZNb250aC54c3QgPSBkYXlPZk1vbnRoRGF0YT8ueHN0IGFzIG51bWJlcjtcbiAgICB9XG4gIH1cblxuICByZXZlcnNFeHByZXNzaW9uQmFzZWRPbk1vbnRoKHJlZ2V4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0xhc3REYXlPZk1vbnRoID0gcmVnZXggPT0gJ0wnO1xuICAgIGlmIChpc0xhc3REYXlPZk1vbnRoKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPSBCYXNlT25Nb250aFR5cGUuTGFzdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyAqKlJlZ2V4IHBhdHRlcm4gdG8gY2hlY2sgaWYgaWQgYmVmb3JlIG9yIG5vdCoqXG4gICAgY29uc3QgcmVnZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXkwtWzAtOV0rJCcpO1xuICAgIGNvbnN0IGlzQ3VzdG9tID0gIXJlZ2V4UGF0dGVybi50ZXN0KHJlZ2V4KTtcbiAgICBpZiAoIWlzQ3VzdG9tKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLnR5cGUgPSBCYXNlT25Nb250aFR5cGUuQmVmb3JlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5iZWZvcmUgPSBwYXJzZUludChyZWdleC5zdWJzdHIoMikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF5TW9kZWwuYmFzZU9uTW9udGgudHlwZSA9IEJhc2VPbk1vbnRoVHlwZS5DdXN0b207XG5cbiAgICBjb25zdCBpbnRlcnZhbERhdGEgPSB0aGlzLnN0cmluZ1NlcnZpY2UuZ2V0SW50ZXJ2YWxDcm9uRGF0YShyZWdleCk7XG4gICAgY29uc3QgaGFzSW50ZXJ2YWxJdGVtcyA9IGludGVydmFsRGF0YSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChoYXNJbnRlcnZhbEl0ZW1zKSB7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuaXNSZXBlYXQgPSB0cnVlO1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20ucmVwZWF0LmludGVydmFsID0gaW50ZXJ2YWxEYXRhPy5pbnRlcnZhbCBhcyBudW1iZXI7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5yZXBlYXQuc3RhcnRBdCA9IGludGVydmFsRGF0YT8uc3RhcnRBdCBhcyBudW1iZXI7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lmaWNEYXRhID0gdGhpcy5zdHJpbmdTZXJ2aWNlLmdldFNwZWNpZmljQ3JvbkRhdGEocmVnZXgsIHRoaXMuZGF5c0xpc3QpO1xuICAgIGNvbnN0IGhhc1NwZWNpZmljSXRlbXMgPSBzcGVjaWZpY0RhdGEgIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzU3BlY2lmaWNJdGVtcykge1xuICAgICAgdGhpcy5kYXlNb2RlbC5iYXNlT25Nb250aC5jdXN0b20uc3BlY2lmaWMuaXNTcGVjZWZpYyA9IHRydWU7XG4gICAgICB0aGlzLmRheU1vZGVsLmJhc2VPbk1vbnRoLmN1c3RvbS5zcGVjaWZpYy52YWx1ZXMgPSBzcGVjaWZpY0RhdGEgYXMgQXJyYXk8RHJvcERvd25JdGVtPjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==