From 9dedc25323a4526bdd68606471e0dc4194adc419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Dagenborg?= Date: Thu, 3 Oct 2024 16:22:49 +0200 Subject: [PATCH] Auto-generated commit --- .DS_Store | Bin 6148 -> 0 bytes ...dpartylicenses.txt => 3rdpartylicenses.txt | 0 apps/.DS_Store | Bin 6148 -> 0 bytes .../demo/browser => browser}/en-US/index.html | 0 .../en-US/main-P2QJCJVB.js | 0 .../en-US/polyfills-ZY7SMUNE.js | 0 .../en-US/styles-6NCYGVEZ.css | 0 libs/ngx-cron-editor/.npmignore | 2 - libs/ngx-cron-editor/README.md | 91 --- .../esm2022/ngx-cron-editor.mjs | 5 - libs/ngx-cron-editor/esm2022/public_api.mjs | 9 - .../esm2022/src/CronOptions.mjs | 18 - .../esm2022/src/cron-editor.component.mjs | 494 -------------- .../esm2022/src/cron-editor.module.mjs | 52 -- .../src/cron-time-picker.component.mjs | 48 -- libs/ngx-cron-editor/esm2022/src/enums.mjs | 32 - .../fesm2022/ngx-cron-editor.mjs | 640 ------------------ .../fesm2022/ngx-cron-editor.mjs.map | 1 - libs/ngx-cron-editor/index.d.ts | 5 - libs/ngx-cron-editor/package.json | 59 -- libs/ngx-cron-editor/public_api.d.ts | 5 - libs/ngx-cron-editor/src/CronOptions.d.ts | 35 - .../src/cron-editor-theme.scss | 9 - .../src/cron-editor.component.d.ts | 105 --- .../src/cron-editor.component.scss | 19 - .../src/cron-editor.module.d.ts | 16 - .../src/cron-time-picker.component.d.ts | 26 - libs/ngx-cron-editor/src/enums.d.ts | 31 - 28 files changed, 1702 deletions(-) delete mode 100644 .DS_Store rename apps/demo/3rdpartylicenses.txt => 3rdpartylicenses.txt (100%) delete mode 100644 apps/.DS_Store rename {apps/demo/browser => browser}/en-US/index.html (100%) rename {apps/demo/browser => browser}/en-US/main-P2QJCJVB.js (100%) rename {apps/demo/browser => browser}/en-US/polyfills-ZY7SMUNE.js (100%) rename {apps/demo/browser => browser}/en-US/styles-6NCYGVEZ.css (100%) delete mode 100644 libs/ngx-cron-editor/.npmignore delete mode 100644 libs/ngx-cron-editor/README.md delete mode 100644 libs/ngx-cron-editor/esm2022/ngx-cron-editor.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/public_api.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/src/CronOptions.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/src/cron-editor.component.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/src/cron-editor.module.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/src/cron-time-picker.component.mjs delete mode 100644 libs/ngx-cron-editor/esm2022/src/enums.mjs delete mode 100644 libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs delete mode 100644 libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs.map delete mode 100644 libs/ngx-cron-editor/index.d.ts delete mode 100644 libs/ngx-cron-editor/package.json delete mode 100644 libs/ngx-cron-editor/public_api.d.ts delete mode 100644 libs/ngx-cron-editor/src/CronOptions.d.ts delete mode 100644 libs/ngx-cron-editor/src/cron-editor-theme.scss delete mode 100644 libs/ngx-cron-editor/src/cron-editor.component.d.ts delete mode 100644 libs/ngx-cron-editor/src/cron-editor.component.scss delete mode 100644 libs/ngx-cron-editor/src/cron-editor.module.d.ts delete mode 100644 libs/ngx-cron-editor/src/cron-time-picker.component.d.ts delete mode 100644 libs/ngx-cron-editor/src/enums.d.ts diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 71d98e9527ff91d70f53e361bfd1b6cdaad7d5b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4I%_5-~#+~L;|T|&(V2yybzdCg`Sc9Vy71EH#D_~ z=b>!3`IW^4*{}x%&4UY=naG*IYBQFB<_~NLy=ua&nLyDZs)=XJ^}KHlnL8^ zuuK4Ud`$1a2w+Ed;?2XtjQM~GpZLN&ec$fadA@s*w&{SU^bw2w+!myO6p#W^Knh5K z6)BL%_-?NP&d{+n$ep{-5c8&HsxQrBXl& zyqE$uoIXxRzEqyAzh2Mlm#q4_(aE@+;m1z^6F-U%^f2xhUywD~I$5FVM<8TSkOKdz Fz!O6Z5~=_I diff --git a/apps/demo/browser/en-US/index.html b/browser/en-US/index.html similarity index 100% rename from apps/demo/browser/en-US/index.html rename to browser/en-US/index.html diff --git a/apps/demo/browser/en-US/main-P2QJCJVB.js b/browser/en-US/main-P2QJCJVB.js similarity index 100% rename from apps/demo/browser/en-US/main-P2QJCJVB.js rename to browser/en-US/main-P2QJCJVB.js diff --git a/apps/demo/browser/en-US/polyfills-ZY7SMUNE.js b/browser/en-US/polyfills-ZY7SMUNE.js similarity index 100% rename from apps/demo/browser/en-US/polyfills-ZY7SMUNE.js rename to browser/en-US/polyfills-ZY7SMUNE.js diff --git a/apps/demo/browser/en-US/styles-6NCYGVEZ.css b/browser/en-US/styles-6NCYGVEZ.css similarity index 100% rename from apps/demo/browser/en-US/styles-6NCYGVEZ.css rename to browser/en-US/styles-6NCYGVEZ.css diff --git a/libs/ngx-cron-editor/.npmignore b/libs/ngx-cron-editor/.npmignore deleted file mode 100644 index c97ccf2..0000000 --- a/libs/ngx-cron-editor/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -# Nested package.json's are only needed for development. -**/package.json \ No newline at end of file diff --git a/libs/ngx-cron-editor/README.md b/libs/ngx-cron-editor/README.md deleted file mode 100644 index fb0be0c..0000000 --- a/libs/ngx-cron-editor/README.md +++ /dev/null @@ -1,91 +0,0 @@ -ngx-cron-editor -=== - -An Angular 15+ component for building cron expressions graphically. It is meant -to be used in reactive forms and support Angular Material Design styling. - - -## Demo - -A demo can be found [here](https://haavardj.github.io/ngx-cron-editor/) - -## Usage - -1. Install the npm package: - ``` - $ npm i ngx-cron-editor -S - ``` - -2. Import the module in your own module: - - ```ts - import { CronEditorModule } from 'ngx-cron-editor'; - - @NgModule({ - imports: [..., CronEditorModule], - ... - }) - export class MyModule { - } - ``` - -3. Setup the FormControl in you component's typescript file: - - ```ts - ngOnInit(): void { - this.cronForm = new FormControl('0 0 1/1 * *'); - } - ``` - -4. Include the component in your html code: - - ```html - - ``` - - or use the `formControlName='...'` directive if your form controller - lives in a FormGroup. - -## Options - -```html - -``` - -```ts -import { CronOptions } from 'ngx-cron-editor'; - -@Component({ - ... -}) -export class MyComponent { - public cronOptions: CronOptions = { - defaultTime: "00:00:00", - - hideMinutesTab: false, - hideHourlyTab: false, - hideDailyTab: false, - hideWeeklyTab: false, - hideMonthlyTab: false, - hideYearlyTab: false, - hideAdvancedTab: true, - hideSpecificWeekDayTab: false, - hideSpecificMonthWeekTab : false, - - use24HourTime: true, - hideSeconds: false, - - cronFlavor: "quartz" //standard or quartz - }; -} -``` - -## History - -The ngx-cron-editor is a fork of the vincentjames501's [angular-cron-gen](https://github.com/vincentjames501/angular-cron-gen) for AngularJS 1.5+ and claudiuconstantin's [cron-editor(https://github.com/claudiuconstantin/cron-editor)]. - -**The main additions of this fork is support for Angular 8+ and material design.** - - -## License: -Licensed under the MIT license diff --git a/libs/ngx-cron-editor/esm2022/ngx-cron-editor.mjs b/libs/ngx-cron-editor/esm2022/ngx-cron-editor.mjs deleted file mode 100644 index 552358f..0000000 --- a/libs/ngx-cron-editor/esm2022/ngx-cron-editor.mjs +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -export * from './public_api'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNyb24tZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3gtY3Jvbi1lZGl0b3Ivbmd4LWNyb24tZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0= \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/public_api.mjs b/libs/ngx-cron-editor/esm2022/public_api.mjs deleted file mode 100644 index bf291e8..0000000 --- a/libs/ngx-cron-editor/esm2022/public_api.mjs +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Public API Surface - */ -export * from './src/cron-editor.module'; -export * from './src/CronOptions'; -export * from './src/enums'; -export * from './src/cron-editor.component'; -export * from './src/cron-time-picker.component'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LWNyb24tZWRpdG9yL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL2Nyb24tZWRpdG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9Dcm9uT3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9lbnVtcyc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9jcm9uLWVkaXRvci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvY3Jvbi10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuIl19 \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/src/CronOptions.mjs b/libs/ngx-cron-editor/esm2022/src/CronOptions.mjs deleted file mode 100644 index 3d04b37..0000000 --- a/libs/ngx-cron-editor/esm2022/src/CronOptions.mjs +++ /dev/null @@ -1,18 +0,0 @@ -export class DefaultOptions { - constructor() { - this.cronFlavor = 'standard'; - this.defaultTime = '00:00:00'; - this.hideAdvancedTab = false; - this.hideDailyTab = false; - this.hideHourlyTab = false; - this.hideMinutesTab = false; - this.hideMonthlyTab = false; - this.hideSeconds = false; - this.hideSpecificMonthWeekTab = false; - this.hideSpecificWeekDayTab = false; - this.hideWeeklyTab = false; - this.hideYearlyTab = false; - this.use24HourTime = true; - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3Jvbk9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC1jcm9uLWVkaXRvci9zcmMvQ3Jvbk9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sT0FBTyxjQUFjO0lBQTNCO1FBRUUsZUFBVSxHQUFlLFVBQVUsQ0FBQztRQUNwQyxnQkFBVyxHQUFHLFVBQVUsQ0FBQztRQUN6QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQiw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDakMsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIENyb25GbGF2b3IgPSAnc3RhbmRhcmQnIHwgJ3F1YXJ0eic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvbk9wdGlvbnMge1xuICAgIGZvcm1JbnB1dENsYXNzPzogc3RyaW5nO1xuICAgIGZvcm1TZWxlY3RDbGFzcz86IHN0cmluZztcbiAgICBmb3JtUmFkaW9DbGFzcz86IHN0cmluZztcbiAgICBmb3JtQ2hlY2tib3hDbGFzcz86IHN0cmluZztcblxuICAgIGRlZmF1bHRUaW1lOiBzdHJpbmcsXG5cbiAgICBoaWRlTWludXRlc1RhYjogYm9vbGVhbjtcbiAgICBoaWRlSG91cmx5VGFiOiBib29sZWFuO1xuICAgIGhpZGVEYWlseVRhYjogYm9vbGVhbjtcbiAgICBoaWRlV2Vla2x5VGFiOiBib29sZWFuO1xuICAgIGhpZGVNb250aGx5VGFiOiBib29sZWFuO1xuICAgIGhpZGVZZWFybHlUYWI6IGJvb2xlYW47XG4gICAgaGlkZUFkdmFuY2VkVGFiOiBib29sZWFuO1xuICAgIGhpZGVTcGVjaWZpY1dlZWtEYXlUYWI6IGJvb2xlYW47XG4gICAgaGlkZVNwZWNpZmljTW9udGhXZWVrVGFiOiBib29sZWFuO1xuXG4gICAgdXNlMjRIb3VyVGltZTogYm9vbGVhbjtcbiAgICBoaWRlU2Vjb25kczogYm9vbGVhbjtcblxuICAgIGNyb25GbGF2b3I6IENyb25GbGF2b3I7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0T3B0aW9ucyBpbXBsZW1lbnRzICBDcm9uT3B0aW9ucyB7XG5cbiAgY3JvbkZsYXZvcjogQ3JvbkZsYXZvciA9ICdzdGFuZGFyZCc7XG4gIGRlZmF1bHRUaW1lID0gJzAwOjAwOjAwJztcbiAgaGlkZUFkdmFuY2VkVGFiID0gZmFsc2U7XG4gIGhpZGVEYWlseVRhYiA9IGZhbHNlO1xuICBoaWRlSG91cmx5VGFiID0gZmFsc2U7XG4gIGhpZGVNaW51dGVzVGFiID0gZmFsc2U7XG4gIGhpZGVNb250aGx5VGFiID0gZmFsc2U7XG4gIGhpZGVTZWNvbmRzID0gZmFsc2U7XG4gIGhpZGVTcGVjaWZpY01vbnRoV2Vla1RhYiA9IGZhbHNlO1xuICBoaWRlU3BlY2lmaWNXZWVrRGF5VGFiID0gZmFsc2U7XG4gIGhpZGVXZWVrbHlUYWIgPSBmYWxzZTtcbiAgaGlkZVllYXJseVRhYiA9IGZhbHNlO1xuICB1c2UyNEhvdXJUaW1lID0gdHJ1ZTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/src/cron-editor.component.mjs b/libs/ngx-cron-editor/esm2022/src/cron-editor.component.mjs deleted file mode 100644 index bb32465..0000000 --- a/libs/ngx-cron-editor/esm2022/src/cron-editor.component.mjs +++ /dev/null @@ -1,494 +0,0 @@ -import { Component, Input, forwardRef, ViewChild } from '@angular/core'; -import { DefaultOptions } from './CronOptions'; -import { Days, MonthWeeks, Months } from './enums'; -import { NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; -import { debounceTime } from 'rxjs'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/forms"; -import * as i2 from "@angular/common"; -import * as i3 from "@angular/material/tabs"; -import * as i4 from "@angular/material/form-field"; -import * as i5 from "@angular/material/select"; -import * as i6 from "@angular/material/core"; -import * as i7 from "@angular/material/input"; -import * as i8 from "@angular/material/radio"; -import * as i9 from "@angular/material/checkbox"; -import * as i10 from "./cron-time-picker.component"; -const minutesExp = /\d+ 0\/\d+ \* 1\/1 \* [\?\*] \*/; -const hourlyExp = /\d+ \d+ 0\/\d+ 1\/1 \* [\?\*] \*/; -const dailyExp = /\d+ \d+ \d+ 1\/\d+ \* [\?\*] \*/; -const dailyWeekdayExp = /\d+ \d+ \d+ [\?\*] \* MON-FRI \*/; -const weeklyExp = /\d+ \d+ \d+ [\?\*] \* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \*/; -const monthlyExp = /\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ [\?\*] \*/; -const monthlyWeekdayExp = /\d+ \d+ \d+ [\?\*] 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/; -const yearlyExp = /\d+ \d+ \d+ (\d+|L|LW|1W) \d+ [\?\*] \*/; -const yearlyMonthWeekExp = /\d+ \d+ \d+ [\?\*] \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/; -export const CRON_VALUE_ACCESSOR = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => CronGenComponent), - multi: true, -}; -function parseCronNumberToken(val) { - const v = val.split('/'); - if (v.length === 1) { - return { val: v[0], inc: '0' }; - } - return { val: v[0], inc: v[1] }; -} -function* range(start, end) { - for (let i = start; i <= end; i++) { - yield i; - } -} -export class CronGenComponent { - get isCronFlavorQuartz() { - return this.options.cronFlavor === 'quartz'; - } - get isCronFlavorStandard() { - return this.options.cronFlavor === 'standard'; - } - get yearDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '*' : ''; - } - get weekDayDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '?' : '*'; - } - get monthDayDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '?' : '*'; - } - constructor(fb) { - this.fb = fb; - this.tabIndex = 0; - this.disabled = false; - this.options = new DefaultOptions(); - this.selectOptions = this.getSelectOptions(); - this.touched = false; - this.allForm = this.fb.group({ - cronType: ['unknown', Validators.required], - seconds: ['0'], - minutes: ['0'], - minutesPer: ['0'], - hours: [this.getAmPmHour('0')], - hoursPer: ['0'], - hoursType: [this.getHourType('0')], - days: ['0'], // Days of Month, 1, 2, 31.... - daysPer: ['0'], - months: ['0'], - monthsInc: ['0'], - day: ['MON'], // Day of week '1' or 'MON; - monthsWeek: ['#1'], - weekdaysOnly: [false], - specificWeekDay: [false], - specificMonthWeek: [false], - MON: [true], - TUE: [true], - WED: [true], - THU: [true], - FRI: [true], - SAT: [true], - SUN: [true], - expression: ['0 0 0 0 0'] - }); - } - /* Update the cron output to that of the selected tab. - * The cron output value is updated whenever a form is updated. To make it change in response to tab selection, we simply reset - * the value of the form that goes into focus. - * We cannot rely on the index of the tab, as the hide options could hide tabs and - * then the index dynamically changes based on the hidden tab.*/ - onTabChange(tabChangeEvent) { - const currentTab = tabChangeEvent.tab; - let x; - switch (currentTab) { - case this.minutesTab: - x = 'minutely'; - break; - case this.hourlyTab: - x = 'hourly'; - break; - case this.dailyTab: - x = 'daily'; - break; - case this.weeklyTab: - x = 'weekly'; - break; - case this.monthlyTab: - x = 'monthly'; - break; - case this.yearlyTab: - x = 'yearly'; - break; - case this.advancedTab: - x = 'unknown'; - break; - default: - throw (new Error('Invalid tab selected')); - } - this.allForm.controls.cronType.setValue(x); - } - async ngOnInit() { - this.formSub = this.allForm.valueChanges.pipe(debounceTime(50)).subscribe(value => { - this.markAsTouched(); - const cron = this.computeCron(); - // this.allForm.controls.expression.setValue(cron, {emitEvent: false}); - this.onChange(cron); - }); - } - ngOnDestroy() { - this.formSub.unsubscribe(); - } - computeCron() { - let cron; - switch (this.allForm.value.cronType) { - case 'minutely': - cron = this.computeMinutesCron(); - break; - case 'hourly': - cron = this.computeHourlyCron(); - this.tabIndex = 1; - break; - case 'daily': - cron = this.computeDailyCron(); - this.tabIndex = 2; - break; - case 'weekly': - cron = this.computeWeeklyCron(); - this.tabIndex = 3; - break; - case 'monthly': - cron = this.computeMonthlyCron(); - this.tabIndex = 4; - break; - case 'yearly': - cron = this.computeYearlyCron(); - this.tabIndex = 5; - break; - case 'unknown': - cron = this.computeAdvancedExpression(); - this.tabIndex = 6; - break; - default: - throw Error($localize `Unknown cron type ${this.allForm.value.cronType}`); - } - return cron; - } - computeMinutesCron() { - const state = this.allForm.value; - // tslint:disable-next-line:max-line-length - return `${this.isCronFlavorQuartz ? state.seconds : ''} 0/${state.minutesPer} * 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeHourlyCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} 0/${state.hoursPer} 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeDailyCron() { - if (this.allForm.value.weekdaysOnly) { - return this.computeEveryWeekdayCron(); - } - return this.computeEveryDaysCron(); - } - computeEveryDaysCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} 1/${state.daysPer} * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeEveryWeekdayCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * MON-FRI ${this.yearDefaultChar}`.trim(); - } - computeWeeklyCron() { - const state = this.allForm.value; - const days = this.selectOptions.days - .reduce((acc, day) => state[day] ? acc.concat([day]) : acc, []) - .join(',') || '*'; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * ${days} ${this.yearDefaultChar}`.trim(); - } - computeMonthlyCron() { - const state = this.allForm.value; - if (state.specificWeekDay) { - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} 1/${state.monthsInc} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim(); - } - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} 1/${state.monthsInc} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeYearlyCron() { - const state = this.allForm.value; - if (state.specificMonthWeek) { - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} ${state.months} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim(); - } - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} ${state.months} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeAdvancedExpression() { - const state = this.allForm.value; - return state.expression; - } - dayDisplay(day) { - return Days[day]; - } - monthWeekDisplay(monthWeekNumber) { - return MonthWeeks[monthWeekNumber]; - } - monthDisplay(month) { - return Months[parseInt(month, 10)]; - } - monthDayDisplay(month) { - if (typeof month === 'number') { - return `${month}${this.getOrdinalSuffix(month)}`; - } - if (month === 'L') { - return $localize `Last Day`; - } - else if (month === 'LW') { - return $localize `Last Weekday`; - } - else if (month === '1W') { - return $localize `First Weekday`; - } - else { - return `${month}${this.getOrdinalSuffix(month)}`; - } - } - getAmPmHour(hour) { - if (this.options.use24HourTime) { - return hour; - } - return ((parseInt(hour, 10) + 11) % 12 + 1).toString(); - } - // Return the AM or PM component of a clocktime, or null if 24-hour format is used. - getHourType(hour) { - if (this.options.use24HourTime) { - return null; - } - if (parseInt(hour, 10) >= 12) { - return 'PM'; - } - return 'AM'; - } - hourToCron(hour, hourType) { - if (this.options.use24HourTime) { - return hour; - } - else { - return hourType === 'AM' ? (hour === '12' ? '0' : hour) : (hour === '12' ? '12' : (parseInt(hour, 10) + 12).toString()); - } - } - handleModelChange(cron) { - if (!this.cronIsValid(cron)) { - if (this.isCronFlavorQuartz) { - throw new Error($localize `Invalid cron expression, there must be 6 or 7 segments`); - } - if (this.isCronFlavorStandard) { - throw new Error($localize `Invalid cron expression, there must be 5 segments`); - } - } - // Store original cron expression here. - this.allForm.controls.expression.setValue(cron); - // Normalize cron so that second segment is included. - if (cron.split(' ').length === 5 && this.isCronFlavorStandard) { - cron = `0 ${cron} *`; - } - // Parse cron tokens - const t = cron.split(' '); - // Seconds - this.allForm.controls.seconds.setValue(t[0], { emitEvent: false }); - // Minutes - let x = parseCronNumberToken(t[1]); - this.allForm.controls.minutesPer.setValue(x.inc, { emitEvent: false }); - this.allForm.controls.minutes.setValue(x.val); - // Hours - x = parseCronNumberToken(t[2]); - this.allForm.controls.hoursPer.setValue(x.inc); - this.allForm.controls.hours.setValue(x.val); - this.allForm.controls.hoursType.setValue(this.getHourType(this.allForm.value.hours), { emitEvent: false }); - // Day of Month - x = parseCronNumberToken(t[3]); - this.allForm.controls.days.setValue(x.val, { emitEvent: false }); - this.allForm.controls.daysPer.setValue(x.inc, { emitEvent: false }); - // Month - x = parseCronNumberToken(t[4]); - this.allForm.controls.months.setValue(x.val, { emitEvent: false }); - this.allForm.controls.monthsInc.setValue(x.inc, { emitEvent: false }); - // Day of Week - this.allForm.controls.SUN.setValue(t[5].match(/(? 1 && value.charAt(value.length - 2) === '1') { - return 'th'; - } - // Check last digit: 21st, 22nd, 23rd, 24th, 25t, etc. - switch (value.charAt(value.length - 1)) { - case '1': - return 'st'; - case '2': - return 'nd'; - case '3': - return 'rd'; - default: - return 'th'; - } - } - getSelectOptions() { - return { - months: this.getRange(1, 12).map(String), - monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'], - days: ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'], - minutes: this.getRange(0, 59).map(String), - fullMinutes: this.getRange(0, 59).map(String), - seconds: this.getRange(0, 59).map(String), - hours: this.getRange(1, 23).map(String), - monthDays: this.getRange(1, 31).map(String), - monthDaysWithLasts: ['1W', ...[...this.getRange(1, 31).map(String)], 'LW', 'L'], - monthDaysWithOutLasts: [...[...this.getRange(1, 31).map(String)]], - hourTypes: ['AM', 'PM'] - }; - } - getRange(start, end) { - const length = end - start + 1; - return Array.apply(null, Array(length)).map((_, i) => i + start); - } - writeValue(obj) { - if (obj === null) { - return; - } - this.handleModelChange(obj); - } - registerOnChange(fn) { - this.onChange = fn; - } - registerOnTouched(fn) { - this.onTouched = fn; - } - setDisabledState(isDisabled) { - this.disabled = isDisabled; - } - markAsTouched() { - if (!this.touched) { - this.onTouched(); - this.touched = true; - } - } - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronGenComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); } - static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: CronGenComponent, selector: "cron-editor", inputs: { backgroundColor: "backgroundColor", color: "color", disabled: "disabled", options: "options" }, providers: [CRON_VALUE_ACCESSOR], viewQueries: [{ propertyName: "minutesTab", first: true, predicate: ["minutesTab"], descendants: true }, { propertyName: "hourlyTab", first: true, predicate: ["hourlyTab"], descendants: true }, { propertyName: "dailyTab", first: true, predicate: ["dailyTab"], descendants: true }, { propertyName: "weeklyTab", first: true, predicate: ["weeklyTab"], descendants: true }, { propertyName: "monthlyTab", first: true, predicate: ["monthlyTab"], descendants: true }, { propertyName: "yearlyTab", first: true, predicate: ["yearlyTab"], descendants: true }, { propertyName: "advancedTab", first: true, predicate: ["advancedTab"], descendants: true }], ngImport: i0, template: " \n\n \n \n
\n\n
\n Every\n \n Minute(s)\n \n {{minute}}\n \n \n
\n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n
\n Every \n \n Hour(s)\n \n {{hour}}\n \n \n
\n
\n At time \n \n \n
\n
\n
\n\n \n \n
\n\n
\n Every \n \n \n \n Day(s)\n \n \n {{monthDay}}\n \n \n \n \n \n Week Day (MON-FRI) \n \n \n
\n\n
\n At time \n \n \n
\n
\n\n
\n\n \n \n
\n\n
\n Every:\n\n \n Monday\n Tuesday\n Wednesday\n Thursday\n Friday\n Saturday\n Sunday\n \n
\n\n
\n At \n \n \n
\n
\n
\n\n \n \n
\n\n \n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n\n \n\n \n\n \n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n \n \n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n\n \n\n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n \n\n
\n\n At time\n\n \n \n
\n\n
\n
\n\n \n \n
\n \n Expression\n \n \n
\n
\n
\n", styles: [".cron-editor-tab-content{margin-top:24px}.cron-editor-radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.cron-editor-radio-button{margin:5px}.cron-editor-pad-line *{padding-left:8px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i8.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i8.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i10.TimePickerComponent, selector: "cron-time-picker", inputs: ["disabled", "use24HourTime", "hideHours", "hideMinutes", "hideSeconds"] }] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronGenComponent, decorators: [{ - type: Component, - args: [{ selector: 'cron-editor', providers: [CRON_VALUE_ACCESSOR], template: " \n\n \n \n
\n\n
\n Every\n \n Minute(s)\n \n {{minute}}\n \n \n
\n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n
\n Every \n \n Hour(s)\n \n {{hour}}\n \n \n
\n
\n At time \n \n \n
\n
\n
\n\n \n \n
\n\n
\n Every \n \n \n \n Day(s)\n \n \n {{monthDay}}\n \n \n \n \n \n Week Day (MON-FRI) \n \n \n
\n\n
\n At time \n \n \n
\n
\n\n
\n\n \n \n
\n\n
\n Every:\n\n \n Monday\n Tuesday\n Wednesday\n Thursday\n Friday\n Saturday\n Sunday\n \n
\n\n
\n At \n \n \n
\n
\n
\n\n \n \n
\n\n \n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n\n \n\n \n\n \n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n \n \n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n\n \n\n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n \n\n
\n\n At time\n\n \n \n
\n\n
\n
\n\n \n \n
\n \n Expression\n \n \n
\n
\n
\n", styles: [".cron-editor-tab-content{margin-top:24px}.cron-editor-radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.cron-editor-radio-button{margin:5px}.cron-editor-pad-line *{padding-left:8px}\n"] }] - }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { backgroundColor: [{ - type: Input - }], color: [{ - type: Input - }], disabled: [{ - type: Input - }], options: [{ - type: Input - }], minutesTab: [{ - type: ViewChild, - args: ['minutesTab'] - }], hourlyTab: [{ - type: ViewChild, - args: ['hourlyTab'] - }], dailyTab: [{ - type: ViewChild, - args: ['dailyTab'] - }], weeklyTab: [{ - type: ViewChild, - args: ['weeklyTab'] - }], monthlyTab: [{ - type: ViewChild, - args: ['monthlyTab'] - }], yearlyTab: [{ - type: ViewChild, - args: ['yearlyTab'] - }], advancedTab: [{ - type: ViewChild, - args: ['advancedTab'] - }] } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtY3Jvbi1lZGl0b3Ivc3JjL2Nyb24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LWNyb24tZWRpdG9yL3NyYy9jcm9uLWVkaXRvci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLFVBQVUsRUFBRSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFjLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkQsT0FBTyxFQUFvQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUMsWUFBWSxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBSWpELE1BQU0sVUFBVSxHQUFHLGlDQUFpQyxDQUFDO0FBQ3JELE1BQU0sU0FBUyxHQUFHLGtDQUFrQyxDQUFDO0FBQ3JELE1BQU0sUUFBUSxHQUFHLGlDQUFpQyxDQUFDO0FBQ25ELE1BQU0sZUFBZSxHQUFHLGtDQUFrQyxDQUFDO0FBQzNELE1BQU0sU0FBUyxHQUFHLHlGQUF5RixDQUFDO0FBQzVHLE1BQU0sVUFBVSxHQUFHLDRDQUE0QyxDQUFDO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsd0VBQXdFLENBQUM7QUFDbkcsTUFBTSxTQUFTLEdBQUkseUNBQXlDLENBQUM7QUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxxRUFBcUUsQ0FBQztBQUVqRyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBUTtJQUN0QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFjO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFHL0YseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCx3Q0FBd0M7UUFDeEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTztRQUNQLGdCQUFnQjtRQUVoQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBRTFFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBRXhFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUV4RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFZO1FBQzlCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7bUJBQ25ELFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO21CQUN6QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUdPLGdCQUFnQixDQUFDLENBQWtCO1FBRXpDLCtGQUErRjtRQUMvRixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssR0FBRztnQkFDTixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssR0FBRztnQkFDTixPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU87WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUN4QyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUMvQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDdkQsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDekMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDN0MsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDdkMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDM0Msa0JBQWtCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUMvRSxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDekMsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUtELFVBQVUsQ0FBQyxHQUFrQjtRQUMzQixJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQzs4R0F4aEJVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLGdKQUZoQixDQUFDLG1CQUFtQixDQUFDLDhwQkNsRGxDLDIzV0E0UkE7OzJGRHhPYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsYUFBYSxhQUdaLENBQUMsbUJBQW1CLENBQUM7Z0ZBS2hCLGVBQWU7c0JBQTlCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFFVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBTU4sVUFBVTtzQkFEVCxTQUFTO3VCQUFDLFlBQVk7Z0JBSXZCLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXO2dCQUl0QixRQUFRO3NCQURQLFNBQVM7dUJBQUMsVUFBVTtnQkFJckIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFdBQVc7Z0JBSXRCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZO2dCQUl2QixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgZm9yd2FyZFJlZiwgVmlld0NoaWxkLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDcm9uT3B0aW9ucywgRGVmYXVsdE9wdGlvbnN9IGZyb20gJy4vQ3Jvbk9wdGlvbnMnO1xuaW1wb3J0IHsgRGF5cywgTW9udGhXZWVrcywgTW9udGhzIH0gZnJvbSAnLi9lbnVtcyc7XG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtNYXRUYWIsIE1hdFRhYkNoYW5nZUV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxudHlwZSBDcm9uVHlwZSA9ICdtaW51dGVseScgfCAnaG91cmx5JyB8ICdkYWlseScgfCAnd2Vla2x5JyB8ICdtb250aGx5JyB8ICd5ZWFybHknIHwgJ3Vua25vd24nO1xuXG5jb25zdCBtaW51dGVzRXhwID0gL1xcZCsgMFxcL1xcZCsgXFwqIDFcXC8xIFxcKiBbXFw/XFwqXSBcXCovO1xuY29uc3QgaG91cmx5RXhwID0gL1xcZCsgXFxkKyAwXFwvXFxkKyAxXFwvMSBcXCogW1xcP1xcKl0gXFwqLztcbmNvbnN0IGRhaWx5RXhwID0gL1xcZCsgXFxkKyBcXGQrIDFcXC9cXGQrIFxcKiBbXFw/XFwqXSBcXCovO1xuY29uc3QgZGFpbHlXZWVrZGF5RXhwID0gL1xcZCsgXFxkKyBcXGQrIFtcXD9cXCpdIFxcKiBNT04tRlJJIFxcKi87XG5jb25zdCB3ZWVrbHlFeHAgPSAvXFxkKyBcXGQrIFxcZCsgW1xcP1xcKl0gXFwqIChNT058VFVFfFdFRHxUSFV8RlJJfFNBVHxTVU4pKCwoTU9OfFRVRXxXRUR8VEhVfEZSSXxTQVR8U1VOKSkqIFxcKi87XG5jb25zdCBtb250aGx5RXhwID0gL1xcZCsgXFxkKyBcXGQrIChcXGQrfEx8TFd8MVcpIDFcXC9cXGQrIFtcXD9cXCpdIFxcKi87XG5jb25zdCBtb250aGx5V2Vla2RheUV4cCA9IC9cXGQrIFxcZCsgXFxkKyBbXFw/XFwqXSAxXFwvXFxkKyAoTU9OfFRVRXxXRUR8VEhVfEZSSXxTQVR8U1VOKSgoI1sxLTVdKXxMKSBcXCovO1xuY29uc3QgeWVhcmx5RXhwICA9IC9cXGQrIFxcZCsgXFxkKyAoXFxkK3xMfExXfDFXKSBcXGQrIFtcXD9cXCpdIFxcKi87XG5jb25zdCB5ZWFybHlNb250aFdlZWtFeHAgPSAvXFxkKyBcXGQrIFxcZCsgW1xcP1xcKl0gXFxkKyAoTU9OfFRVRXxXRUR8VEhVfEZSSXxTQVR8U1VOKSgoI1sxLTVdKXxMKSBcXCovO1xuXG5leHBvcnQgY29uc3QgQ1JPTl9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3JvbkdlbkNvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlLFxufTtcblxuaW50ZXJmYWNlIENyb25Ub2tlbiB7XG4gIHZhbDogc3RyaW5nO1xuICBpbmM6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gcGFyc2VDcm9uTnVtYmVyVG9rZW4odmFsOiBzdHJpbmcpOiBDcm9uVG9rZW4ge1xuICBjb25zdCB2ID0gdmFsLnNwbGl0KCcvJyk7XG4gIGlmICh2Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7dmFsOiB2WzBdLCBpbmM6ICcwJ307XG4gIH1cbiAgcmV0dXJuIHt2YWw6IHZbMF0sIGluYzogdlsxXX1cbn1cblxuZnVuY3Rpb24qIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgIHlpZWxkIGk7XG4gIH1cbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcm9uLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcm9uLWVkaXRvci50ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3Jvbi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ1JPTl9WQUxVRV9BQ0NFU1NPUl1cbn0pXG5leHBvcnQgY2xhc3MgQ3JvbkdlbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyB0YWJJbmRleCA9IDA7XG5cbiAgQElucHV0KCkgcHVibGljIGJhY2tncm91bmRDb2xvcjogVGhlbWVQYWxldHRlO1xuICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIG9wdGlvbnM6IENyb25PcHRpb25zID0gbmV3IERlZmF1bHRPcHRpb25zKCk7XG5cbiAgcHVibGljIGFjdGl2ZVRhYjogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0T3B0aW9ucyA9IHRoaXMuZ2V0U2VsZWN0T3B0aW9ucygpO1xuXG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZXNUYWInKVxuICBtaW51dGVzVGFiOiBNYXRUYWI7XG5cbiAgQFZpZXdDaGlsZCgnaG91cmx5VGFiJylcbiAgaG91cmx5VGFiOiBNYXRUYWI7XG5cbiAgQFZpZXdDaGlsZCgnZGFpbHlUYWInKVxuICBkYWlseVRhYjogTWF0VGFiO1xuXG4gIEBWaWV3Q2hpbGQoJ3dlZWtseVRhYicpXG4gIHdlZWtseVRhYjogTWF0VGFiO1xuXG4gIEBWaWV3Q2hpbGQoJ21vbnRobHlUYWInKVxuICBtb250aGx5VGFiOiBNYXRUYWI7XG5cbiAgQFZpZXdDaGlsZCgneWVhcmx5VGFiJylcbiAgeWVhcmx5VGFiOiBNYXRUYWI7XG5cbiAgQFZpZXdDaGlsZCgnYWR2YW5jZWRUYWInKVxuICBhZHZhbmNlZFRhYjogTWF0VGFiO1xuXG4gIGZvcm1TdWI6IFN1YnNjcmlwdGlvbjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGFsbEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICBjcm9uVHlwZTogWzxDcm9uVHlwZT4ndW5rbm93bicsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgIHNlY29uZHM6IFsnMCddLFxuXG4gICAgbWludXRlczogWycwJ10sXG4gICAgbWludXRlc1BlcjogWycwJ10sXG5cbiAgICBob3VyczogW3RoaXMuZ2V0QW1QbUhvdXIoJzAnKV0sXG4gICAgaG91cnNQZXI6IFsnMCddLFxuICAgIGhvdXJzVHlwZTogW3RoaXMuZ2V0SG91clR5cGUoJzAnKV0sXG5cbiAgICBkYXlzOiBbJzAnXSwgIC8vIERheXMgb2YgTW9udGgsIDEsIDIsIDMxLi4uLlxuICAgIGRheXNQZXI6IFsnMCddLFxuXG4gICAgbW9udGhzOiBbJzAnXSxcbiAgICBtb250aHNJbmM6IFsnMCddLFxuXG4gICAgZGF5OiBbJ01PTiddLCAvLyBEYXkgb2Ygd2VlayAnMScgb3IgJ01PTjtcbiAgICBtb250aHNXZWVrOiBbJyMxJ10sXG5cbiAgICB3ZWVrZGF5c09ubHk6IFtmYWxzZV0sXG4gICAgc3BlY2lmaWNXZWVrRGF5OiBbZmFsc2VdLFxuICAgIHNwZWNpZmljTW9udGhXZWVrOiBbZmFsc2VdLFxuICAgIE1PTjogW3RydWVdLFxuICAgIFRVRTogW3RydWVdLFxuICAgIFdFRDogW3RydWVdLFxuICAgIFRIVTogW3RydWVdLFxuICAgIEZSSTogW3RydWVdLFxuICAgIFNBVDogW3RydWVdLFxuICAgIFNVTjogW3RydWVdLFxuICAgIGV4cHJlc3Npb246IFsnMCAwIDAgMCAwJ11cbiAgfSk7XG5cbiAgLypcbiAqIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gKi9cbiAgcHVibGljIG9uQ2hhbmdlOiAodmFsdWUpID0+IHZvaWRcbiAgcHVibGljIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcblxuXG4gIGdldCBpc0Nyb25GbGF2b3JRdWFydHooKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jcm9uRmxhdm9yID09PSAncXVhcnR6JztcbiAgfVxuXG4gIGdldCBpc0Nyb25GbGF2b3JTdGFuZGFyZCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNyb25GbGF2b3IgPT09ICdzdGFuZGFyZCc7XG4gIH1cblxuICBnZXQgeWVhckRlZmF1bHRDaGFyKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY3JvbkZsYXZvciA9PT0gJ3F1YXJ0eicgPyAnKicgOiAnJztcbiAgfVxuXG4gIGdldCB3ZWVrRGF5RGVmYXVsdENoYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jcm9uRmxhdm9yID09PSAncXVhcnR6JyA/ICc/JyA6ICcqJztcbiAgfVxuXG4gIGdldCBtb250aERheURlZmF1bHRDaGFyKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY3JvbkZsYXZvciA9PT0gJ3F1YXJ0eicgPyAnPycgOiAnKic7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICB9XG5cbiAgLyogVXBkYXRlIHRoZSBjcm9uIG91dHB1dCB0byB0aGF0IG9mIHRoZSBzZWxlY3RlZCB0YWIuXG4gICAqIFRoZSBjcm9uIG91dHB1dCB2YWx1ZSBpcyB1cGRhdGVkIHdoZW5ldmVyIGEgZm9ybSBpcyB1cGRhdGVkLiBUbyBtYWtlIGl0IGNoYW5nZSBpbiByZXNwb25zZSB0byB0YWIgc2VsZWN0aW9uLCB3ZSBzaW1wbHkgcmVzZXRcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmb3JtIHRoYXQgZ29lcyBpbnRvIGZvY3VzLlxuICAgKiBXZSBjYW5ub3QgcmVseSBvbiB0aGUgaW5kZXggb2YgdGhlIHRhYiwgYXMgdGhlIGhpZGUgb3B0aW9ucyBjb3VsZCBoaWRlIHRhYnMgYW5kXG4gICAqIHRoZW4gdGhlIGluZGV4IGR5bmFtaWNhbGx5IGNoYW5nZXMgYmFzZWQgb24gdGhlIGhpZGRlbiB0YWIuKi9cbiAgb25UYWJDaGFuZ2UodGFiQ2hhbmdlRXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KSB7XG4gICAgY29uc3QgY3VycmVudFRhYiA9IHRhYkNoYW5nZUV2ZW50LnRhYjtcbiAgICBsZXQgeDogQ3JvblR5cGU7XG5cbiAgICBzd2l0Y2ggKGN1cnJlbnRUYWIpIHtcbiAgICAgIGNhc2UgdGhpcy5taW51dGVzVGFiOlxuICAgICAgICB4ID0gJ21pbnV0ZWx5JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMuaG91cmx5VGFiOlxuICAgICAgICB4ID0gJ2hvdXJseSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLmRhaWx5VGFiOlxuICAgICAgICB4ID0gJ2RhaWx5JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRoaXMud2Vla2x5VGFiOlxuICAgICAgICB4ID0gJ3dlZWtseSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLm1vbnRobHlUYWI6XG4gICAgICAgIHggPSAnbW9udGhseSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0aGlzLnllYXJseVRhYjpcbiAgICAgICAgeCA9ICd5ZWFybHknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdGhpcy5hZHZhbmNlZFRhYjpcbiAgICAgICAgeCA9ICd1bmtub3duJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyAobmV3IEVycm9yKCdJbnZhbGlkIHRhYiBzZWxlY3RlZCcpKTtcbiAgICB9XG5cbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuY3JvblR5cGUuc2V0VmFsdWUoeCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtU3ViID0gIHRoaXMuYWxsRm9ybS52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoNTApKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnN0IGNyb24gPSB0aGlzLmNvbXB1dGVDcm9uKCk7XG4gICAgICAvLyB0aGlzLmFsbEZvcm0uY29udHJvbHMuZXhwcmVzc2lvbi5zZXRWYWx1ZShjcm9uLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5vbkNoYW5nZShjcm9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZm9ybVN1Yi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ3JvbigpOiBzdHJpbmcge1xuXG4gICAgbGV0IGNyb246IHN0cmluZztcbiAgICBzd2l0Y2ggKHRoaXMuYWxsRm9ybS52YWx1ZS5jcm9uVHlwZSkge1xuICAgICAgY2FzZSAnbWludXRlbHknOlxuICAgICAgICBjcm9uID0gdGhpcy5jb21wdXRlTWludXRlc0Nyb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3VybHknOlxuICAgICAgICBjcm9uID0gdGhpcy5jb21wdXRlSG91cmx5Q3JvbigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYWlseSc6XG4gICAgICAgIGNyb24gPSB0aGlzLmNvbXB1dGVEYWlseUNyb24oKTtcbiAgICAgICAgdGhpcy50YWJJbmRleCA9IDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Vla2x5JzpcbiAgICAgICAgY3JvbiA9IHRoaXMuY29tcHV0ZVdlZWtseUNyb24oKTtcbiAgICAgICAgdGhpcy50YWJJbmRleCA9IDM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbW9udGhseSc6XG4gICAgICAgIGNyb24gPSB0aGlzLmNvbXB1dGVNb250aGx5Q3JvbigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFybHknOlxuICAgICAgICBjcm9uID0gdGhpcy5jb21wdXRlWWVhcmx5Q3JvbigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gNTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmtub3duJzpcbiAgICAgICAgY3JvbiA9IHRoaXMuY29tcHV0ZUFkdmFuY2VkRXhwcmVzc2lvbigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gNjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcigkbG9jYWxpemVgVW5rbm93biBjcm9uIHR5cGUgJHt0aGlzLmFsbEZvcm0udmFsdWUuY3JvblR5cGV9YCk7XG4gICAgfVxuICAgIHJldHVybiBjcm9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTWludXRlc0Nyb24oKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hbGxGb3JtLnZhbHVlO1xuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgIHJldHVybiBgJHt0aGlzLmlzQ3JvbkZsYXZvclF1YXJ0eiA/IHN0YXRlLnNlY29uZHMgOiAnJ30gMC8ke3N0YXRlLm1pbnV0ZXNQZXJ9ICogMS8xICogJHt0aGlzLndlZWtEYXlEZWZhdWx0Q2hhcn0gJHt0aGlzLnllYXJEZWZhdWx0Q2hhcn1gLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUhvdXJseUNyb24oKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hbGxGb3JtLnZhbHVlO1xuXG4gICAgcmV0dXJuIGAke3RoaXMuaXNDcm9uRmxhdm9yUXVhcnR6ID8gc3RhdGUuc2Vjb25kcyA6ICcnfSAke3N0YXRlLm1pbnV0ZXN9IDAvJHtzdGF0ZS5ob3Vyc1Blcn0gMS8xICogJHt0aGlzLndlZWtEYXlEZWZhdWx0Q2hhcn0gJHt0aGlzLnllYXJEZWZhdWx0Q2hhcn1gLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZURhaWx5Q3JvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmFsbEZvcm0udmFsdWUud2Vla2RheXNPbmx5KSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21wdXRlRXZlcnlXZWVrZGF5Q3JvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21wdXRlRXZlcnlEYXlzQ3JvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRXZlcnlEYXlzQ3JvbigpOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmFsbEZvcm0udmFsdWU7XG5cbiAgICByZXR1cm4gYCR7dGhpcy5pc0Nyb25GbGF2b3JRdWFydHogPyBzdGF0ZS5zZWNvbmRzIDogJyd9ICR7c3RhdGUubWludXRlc30gJHt0aGlzLmhvdXJUb0Nyb24oc3RhdGUuaG91cnMsIHN0YXRlLmhvdXJzVHlwZSl9IDEvJHtzdGF0ZS5kYXlzUGVyfSAqICR7dGhpcy53ZWVrRGF5RGVmYXVsdENoYXJ9ICR7dGhpcy55ZWFyRGVmYXVsdENoYXJ9YC50cmltKCk7XG5cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUV2ZXJ5V2Vla2RheUNyb24oKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hbGxGb3JtLnZhbHVlO1xuXG4gICAgcmV0dXJuIGAke3RoaXMuaXNDcm9uRmxhdm9yUXVhcnR6ID8gc3RhdGUuc2Vjb25kcyA6ICcnfSAke3N0YXRlLm1pbnV0ZXN9ICR7dGhpcy5ob3VyVG9Dcm9uKHN0YXRlLmhvdXJzLCBzdGF0ZS5ob3Vyc1R5cGUpfSAke3RoaXMubW9udGhEYXlEZWZhdWx0Q2hhcn0gKiBNT04tRlJJICR7dGhpcy55ZWFyRGVmYXVsdENoYXJ9YC50cmltKCk7XG4gIH1cblxuXG4gIHByaXZhdGUgY29tcHV0ZVdlZWtseUNyb24oKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hbGxGb3JtLnZhbHVlO1xuICAgIGNvbnN0IGRheXMgPSB0aGlzLnNlbGVjdE9wdGlvbnMuZGF5c1xuICAgICAgLnJlZHVjZSgoYWNjLCBkYXkpID0+IHN0YXRlW2RheV0gPyBhY2MuY29uY2F0KFtkYXldKSA6IGFjYywgW10pXG4gICAgICAuam9pbignLCcpIHx8ICcqJztcblxuICAgIHJldHVybiBgJHt0aGlzLmlzQ3JvbkZsYXZvclF1YXJ0eiA/IHN0YXRlLnNlY29uZHMgOiAnJ30gJHtzdGF0ZS5taW51dGVzfSAke3RoaXMuaG91clRvQ3JvbihzdGF0ZS5ob3Vycywgc3RhdGUuaG91cnNUeXBlKX0gJHt0aGlzLm1vbnRoRGF5RGVmYXVsdENoYXJ9ICogJHtkYXlzfSAke3RoaXMueWVhckRlZmF1bHRDaGFyfWAudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTW9udGhseUNyb24oKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hbGxGb3JtLnZhbHVlO1xuXG4gICAgaWYgKHN0YXRlLnNwZWNpZmljV2Vla0RheSkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuaXNDcm9uRmxhdm9yUXVhcnR6ID8gc3RhdGUuc2Vjb25kcyA6ICcnfSAke3N0YXRlLm1pbnV0ZXN9ICR7dGhpcy5ob3VyVG9Dcm9uKHN0YXRlLmhvdXJzLCBzdGF0ZS5ob3Vyc1R5cGUpfSAke3RoaXMubW9udGhEYXlEZWZhdWx0Q2hhcn0gMS8ke3N0YXRlLm1vbnRoc0luY30gJHtzdGF0ZS5kYXl9JHtzdGF0ZS5tb250aHNXZWVrfSAke3RoaXMueWVhckRlZmF1bHRDaGFyfWAudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5pc0Nyb25GbGF2b3JRdWFydHogPyBzdGF0ZS5zZWNvbmRzIDogJyd9ICR7c3RhdGUubWludXRlc30gJHt0aGlzLmhvdXJUb0Nyb24oc3RhdGUuaG91cnMsIHN0YXRlLmhvdXJzVHlwZSl9ICR7c3RhdGUuZGF5c30gMS8ke3N0YXRlLm1vbnRoc0luY30gJHt0aGlzLndlZWtEYXlEZWZhdWx0Q2hhcn0gJHt0aGlzLnllYXJEZWZhdWx0Q2hhcn1gLnRyaW0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZVllYXJseUNyb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYWxsRm9ybS52YWx1ZTtcblxuICAgIGlmIChzdGF0ZS5zcGVjaWZpY01vbnRoV2Vlaykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuaXNDcm9uRmxhdm9yUXVhcnR6ID8gc3RhdGUuc2Vjb25kcyA6ICcnfSAke3N0YXRlLm1pbnV0ZXN9ICR7dGhpcy5ob3VyVG9Dcm9uKHN0YXRlLmhvdXJzLCBzdGF0ZS5ob3Vyc1R5cGUpfSAke3RoaXMubW9udGhEYXlEZWZhdWx0Q2hhcn0gJHtzdGF0ZS5tb250aHN9ICR7c3RhdGUuZGF5fSR7c3RhdGUubW9udGhzV2Vla30gJHt0aGlzLnllYXJEZWZhdWx0Q2hhcn1gLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuaXNDcm9uRmxhdm9yUXVhcnR6ID8gc3RhdGUuc2Vjb25kcyA6ICcnfSAke3N0YXRlLm1pbnV0ZXN9ICR7dGhpcy5ob3VyVG9Dcm9uKHN0YXRlLmhvdXJzLCBzdGF0ZS5ob3Vyc1R5cGUpfSAke3N0YXRlLmRheXN9ICR7c3RhdGUubW9udGhzfSAke3RoaXMud2Vla0RheURlZmF1bHRDaGFyfSAke3RoaXMueWVhckRlZmF1bHRDaGFyfWAudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQWR2YW5jZWRFeHByZXNzaW9uKCk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYWxsRm9ybS52YWx1ZTtcbiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBkYXlEaXNwbGF5KGRheTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF5c1tkYXldO1xuICB9XG5cbiAgcHVibGljIG1vbnRoV2Vla0Rpc3BsYXkobW9udGhXZWVrTnVtYmVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBNb250aFdlZWtzW21vbnRoV2Vla051bWJlcl07XG4gIH1cblxuICBwdWJsaWMgbW9udGhEaXNwbGF5KG1vbnRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBNb250aHNbcGFyc2VJbnQobW9udGgsIDEwKV07XG4gIH1cblxuICBwdWJsaWMgbW9udGhEYXlEaXNwbGF5KG1vbnRoOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuXG4gICAgaWYgKHR5cGVvZiBtb250aCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBgJHttb250aH0ke3RoaXMuZ2V0T3JkaW5hbFN1ZmZpeChtb250aCl9YFxuICAgIH1cblxuICAgIGlmIChtb250aCA9PT0gJ0wnKSB7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYExhc3QgRGF5YDtcbiAgICB9IGVsc2UgaWYgKG1vbnRoID09PSAnTFcnKSB7XG4gICAgICByZXR1cm4gJGxvY2FsaXplYExhc3QgV2Vla2RheWA7XG4gICAgfSBlbHNlIGlmIChtb250aCA9PT0gJzFXJykge1xuICAgICAgcmV0dXJuICRsb2NhbGl6ZWBGaXJzdCBXZWVrZGF5YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke21vbnRofSR7dGhpcy5nZXRPcmRpbmFsU3VmZml4KG1vbnRoKX1gO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW1QbUhvdXIoaG91cjogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlMjRIb3VyVGltZSkge1xuICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfVxuICAgIHJldHVybiAoKHBhcnNlSW50KGhvdXIsIDEwKSArIDExKSAlIDEyICsgMSkudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSBBTSBvciBQTSBjb21wb25lbnQgb2YgYSBjbG9ja3RpbWUsIG9yIG51bGwgaWYgMjQtaG91ciBmb3JtYXQgaXMgdXNlZC5cbiAgcHJpdmF0ZSBnZXRIb3VyVHlwZShob3VyOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnVzZTI0SG91clRpbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUludChob3VyLCAxMCkgPj0gMTIpIHtcbiAgICAgIHJldHVybiAnUE0nO1xuICAgIH1cbiAgICByZXR1cm4gJ0FNJztcbiAgfVxuXG4gIHByaXZhdGUgaG91clRvQ3Jvbihob3VyOiBzdHJpbmcsIGhvdXJUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlMjRIb3VyVGltZSkge1xuICAgICAgcmV0dXJuIGhvdXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBob3VyVHlwZSA9PT0gJ0FNJyA/IChob3VyID09PSAnMTInID8gJzAnIDogaG91cikgOiAoaG91ciA9PT0gJzEyJyA/ICcxMicgOiAgKHBhcnNlSW50KGhvdXIsIDEwKSArIDEyKS50b1N0cmluZygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vZGVsQ2hhbmdlKGNyb246IHN0cmluZykge1xuXG4gICAgaWYgKCF0aGlzLmNyb25Jc1ZhbGlkKGNyb24pKSB7XG4gICAgICBpZiAodGhpcy5pc0Nyb25GbGF2b3JRdWFydHopIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCRsb2NhbGl6ZWBJbnZhbGlkIGNyb24gZXhwcmVzc2lvbiwgdGhlcmUgbXVzdCBiZSA2IG9yIDcgc2VnbWVudHNgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNDcm9uRmxhdm9yU3RhbmRhcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCRsb2NhbGl6ZWBJbnZhbGlkIGNyb24gZXhwcmVzc2lvbiwgdGhlcmUgbXVzdCBiZSA1IHNlZ21lbnRzYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RvcmUgb3JpZ2luYWwgY3JvbiBleHByZXNzaW9uIGhlcmUuXG4gICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmV4cHJlc3Npb24uc2V0VmFsdWUoY3Jvbik7XG5cbiAgICAvLyBOb3JtYWxpemUgY3JvbiBzbyB0aGF0IHNlY29uZCBzZWdtZW50IGlzIGluY2x1ZGVkLlxuICAgIGlmIChjcm9uLnNwbGl0KCcgJykubGVuZ3RoID09PSA1ICYmIHRoaXMuaXNDcm9uRmxhdm9yU3RhbmRhcmQpIHtcbiAgICAgIGNyb24gPSBgMCAke2Nyb259ICpgO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIGNyb24gdG9rZW5zXG4gICAgY29uc3QgdCA9IGNyb24uc3BsaXQoJyAnKTtcblxuICAgIC8vIFNlY29uZHNcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuc2Vjb25kcy5zZXRWYWx1ZSh0WzBdLCB7ZW1pdEV2ZW50OiBmYWxzZX0pXG5cbiAgICAvLyBNaW51dGVzXG4gICAgbGV0IHggPSBwYXJzZUNyb25OdW1iZXJUb2tlbih0WzFdKTtcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMubWludXRlc1Blci5zZXRWYWx1ZSh4LmluYywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMubWludXRlcy5zZXRWYWx1ZSh4LnZhbCk7XG5cbiAgICAvLyBIb3Vyc1xuICAgIHggPSBwYXJzZUNyb25OdW1iZXJUb2tlbih0WzJdKVxuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5ob3Vyc1Blci5zZXRWYWx1ZSh4LmluYyk7XG4gICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmhvdXJzLnNldFZhbHVlKHgudmFsKTtcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuaG91cnNUeXBlLnNldFZhbHVlKHRoaXMuZ2V0SG91clR5cGUodGhpcy5hbGxGb3JtLnZhbHVlLmhvdXJzKSwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIERheSBvZiBNb250aFxuICAgIHggPSBwYXJzZUNyb25OdW1iZXJUb2tlbih0WzNdKVxuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5kYXlzLnNldFZhbHVlKHgudmFsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5kYXlzUGVyLnNldFZhbHVlKHguaW5jLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgLy8gTW9udGhcbiAgICB4ID0gcGFyc2VDcm9uTnVtYmVyVG9rZW4odFs0XSlcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMubW9udGhzLnNldFZhbHVlKHgudmFsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5tb250aHNJbmMuc2V0VmFsdWUoeC5pbmMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIC8vIERheSBvZiBXZWVrXG4gICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLlNVTi5zZXRWYWx1ZSh0WzVdLm1hdGNoKC8oPzwhIykoKFNVTil8MCkvKSAhPT0gbnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuTU9OLnNldFZhbHVlKHRbNV0ubWF0Y2goLyg/PCEjKSgoTU9OKXwxKS8pICE9PSBudWxsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5UVUUuc2V0VmFsdWUodFs1XS5tYXRjaCgvKD88ISMpKChUVUUpfDIpLykgIT09IG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLldFRC5zZXRWYWx1ZSh0WzVdLm1hdGNoKC8oPzwhIykoKFdFRCl8MykvKSAhPT0gbnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuVEhVLnNldFZhbHVlKHRbNV0ubWF0Y2goLyg/PCEjKSgoVEhVKXw0KS8pICE9PSBudWxsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5GUkkuc2V0VmFsdWUodFs1XS5tYXRjaCgvKD88ISMpKChGUkkpfDUpLykgIT09IG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLlNBVC5zZXRWYWx1ZSh0WzVdLm1hdGNoKC8oPzwhIykoKFNBVCl8NikvKSAhPT0gbnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuXG4gICAgLy8gR2V0IHZhbHVlIGFmdGVyICMgc2lnblxuICAgIGNvbnN0IHkgPSB0WzVdLm1hdGNoKC8jWzAtOV0qJC8pXG4gICAgaWYgKHkpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5tb250aHNXZWVrLnNldFZhbHVlKHlbMF0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBkYXkgY29udHJvbCBmcm9tIHNlbGVjdGVkIHdlZWtkYXlzLlxuICAgIC8vIE5vdGUsIG9ubHkgb25lIGRheSBpcyBzdXBwb3J0ZWQgaGVyZS5cbiAgICBpZiAodGhpcy5hbGxGb3JtLmNvbnRyb2xzLlNVTi52YWx1ZSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmRheS5zZXRWYWx1ZSgnU1VOJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWxsRm9ybS5jb250cm9scy5NT04udmFsdWUpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5kYXkuc2V0VmFsdWUoJ01PTicsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbEZvcm0uY29udHJvbHMuVFVFLnZhbHVlKSB7XG4gICAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuZGF5LnNldFZhbHVlKCdUVUUnLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbGxGb3JtLmNvbnRyb2xzLldFRC52YWx1ZSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmRheS5zZXRWYWx1ZSgnV0VEJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWxsRm9ybS5jb250cm9scy5USFUudmFsdWUpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5kYXkuc2V0VmFsdWUoJ1RIVScsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFsbEZvcm0uY29udHJvbHMuRlJJLnZhbHVlKSB7XG4gICAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuZGF5LnNldFZhbHVlKCdGUkknLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbGxGb3JtLmNvbnRyb2xzLlNBVC52YWx1ZSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmRheS5zZXRWYWx1ZSgnU0FUJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG5cbiAgICAvLyBZZWFyXG4gICAgLy8gTm90IHN1cHBvcnRlZFxuXG4gICAgaWYgKGNyb24ubWF0Y2gobWludXRlc0V4cCkpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnbWludXRlbHknLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgfSBlbHNlIGlmIChjcm9uLm1hdGNoKGhvdXJseUV4cCkpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnaG91cmx5Jywge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIH0gZWxzZSBpZiAoY3Jvbi5tYXRjaChkYWlseUV4cCkpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnZGFpbHknLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLndlZWtkYXlzT25seS5zZXRWYWx1ZShmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKGNyb24ubWF0Y2goZGFpbHlXZWVrZGF5RXhwKSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCdkYWlseScsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMud2Vla2RheXNPbmx5LnNldFZhbHVlKHRydWUpO1xuXG4gICAgfSBlbHNlIGlmIChjcm9uLm1hdGNoKHdlZWtseUV4cCkpIHtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnd2Vla2x5Jywge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIH0gZWxzZSBpZiAoY3Jvbi5tYXRjaChtb250aGx5RXhwKSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCdtb250aGx5Jywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5zcGVjaWZpY1dlZWtEYXkuc2V0VmFsdWUoZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmIChjcm9uLm1hdGNoKG1vbnRobHlXZWVrZGF5RXhwKSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCdtb250aGx5Jywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuYWxsRm9ybS5jb250cm9scy5zcGVjaWZpY1dlZWtEYXkuc2V0VmFsdWUodHJ1ZSk7XG5cbiAgICB9IGVsc2UgaWYgKGNyb24ubWF0Y2goeWVhcmx5RXhwKSkge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCd5ZWFybHknLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLnNwZWNpZmljTW9udGhXZWVrLnNldFZhbHVlKGZhbHNlKTtcblxuICAgIH0gZWxzZSBpZiAoY3Jvbi5tYXRjaCh5ZWFybHlNb250aFdlZWtFeHApKSB7XG4gICAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuY3JvblR5cGUuc2V0VmFsdWUoJ3llYXJseScsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmFsbEZvcm0uY29udHJvbHMuc3BlY2lmaWNNb250aFdlZWsuc2V0VmFsdWUodHJ1ZSk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCd1bmtub3duJywge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgdGhpcy5hbGxGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoIHtvbmx5U2VsZjogdHJ1ZX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcm9uSXNWYWxpZChjcm9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoY3Jvbikge1xuICAgICAgY29uc3QgY3JvblBhcnRzID0gY3Jvbi5zcGxpdCgnICcpO1xuICAgICAgcmV0dXJuICh0aGlzLmlzQ3JvbkZsYXZvclF1YXJ0eiAmJiAoY3JvblBhcnRzLmxlbmd0aCA9PT0gNlxuICAgICAgICAgIHx8IGNyb25QYXJ0cy5sZW5ndGggPT09IDcpXG4gICAgICAgIHx8ICh0aGlzLmlzQ3JvbkZsYXZvclN0YW5kYXJkICYmIGNyb25QYXJ0cy5sZW5ndGggPT09IDUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIHByaXZhdGUgZ2V0T3JkaW5hbFN1ZmZpeCh2OiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuXG4gICAgLy8gQ29udmVydCB0byBzdHJpbmcuIFRoZXJlIGlzIGFsc28gYSBmYXN0ZXIgTE9HMTAgYWxnb3JpdGhtLCBidXQgaXQgcmVxdWlyZXMgdGhlIG1hdGggbGlicmFyeS5cbiAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IHYudG9TdHJpbmcoMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHY7XG4gICAgfVxuXG4gICAgLy8gdGggaWYgc2Vjb25kVG9MYXN0RGlnaXQgaXMgMTogLi4xMHRoLCAuLjExdGgsIC4uMTl0aCxcbiAgICBpZiAodmFsdWUubGVuZ3RoID4gMSAmJiB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMikgPT09ICcxJykge1xuICAgICAgICByZXR1cm4gJ3RoJztcbiAgICB9XG5cbiAgICAvLyBDaGVjayBsYXN0IGRpZ2l0OiAgMjFzdCwgMjJuZCwgMjNyZCwgMjR0aCwgMjV0LCBldGMuXG4gICAgc3dpdGNoICh2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkpIHtcbiAgICAgIGNhc2UgJzEnOlxuICAgICAgICByZXR1cm4gJ3N0JztcbiAgICAgIGNhc2UgJzInOlxuICAgICAgICByZXR1cm4gJ25kJztcbiAgICAgIGNhc2UgJzMnOlxuICAgICAgICByZXR1cm4gJ3JkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndGgnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0T3B0aW9ucygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9udGhzOiB0aGlzLmdldFJhbmdlKDEsIDEyKS5tYXAoU3RyaW5nKSxcbiAgICAgIG1vbnRoV2Vla3M6IFsnIzEnLCAnIzInLCAnIzMnLCAnIzQnLCAnIzUnLCAnTCddLFxuICAgICAgZGF5czogWydTVU4nLCAnTU9OJywgJ1RVRScsICdXRUQnLCAnVEhVJywgJ0ZSSScsICdTQVQnXSxcbiAgICAgIG1pbnV0ZXM6IHRoaXMuZ2V0UmFuZ2UoMCwgNTkpLm1hcChTdHJpbmcpLFxuICAgICAgZnVsbE1pbnV0ZXM6IHRoaXMuZ2V0UmFuZ2UoMCwgNTkpLm1hcChTdHJpbmcpLFxuICAgICAgc2Vjb25kczogdGhpcy5nZXRSYW5nZSgwLCA1OSkubWFwKFN0cmluZyksXG4gICAgICBob3VyczogdGhpcy5nZXRSYW5nZSgxLCAyMykubWFwKFN0cmluZyksXG4gICAgICBtb250aERheXM6IHRoaXMuZ2V0UmFuZ2UoMSwgMzEpLm1hcChTdHJpbmcpLFxuICAgICAgbW9udGhEYXlzV2l0aExhc3RzOiBbJzFXJywgLi4uWy4uLnRoaXMuZ2V0UmFuZ2UoMSwgMzEpLm1hcChTdHJpbmcpXSwgJ0xXJywgJ0wnXSxcbiAgICAgIG1vbnRoRGF5c1dpdGhPdXRMYXN0czogWy4uLlsuLi50aGlzLmdldFJhbmdlKDEsIDMxKS5tYXAoU3RyaW5nKV1dLFxuICAgICAgaG91clR5cGVzOiBbJ0FNJywgJ1BNJ11cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYW5nZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBjb25zdCBsZW5ndGggPSBlbmQgLSBzdGFydCArIDE7XG4gICAgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIEFycmF5KGxlbmd0aCkpLm1hcCgoXywgaSkgPT4gaSArIHN0YXJ0KTtcbiAgfVxuXG5cblxuXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5oYW5kbGVNb2RlbENoYW5nZShvYmopO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKSB7XG4gICAgaWYgKCF0aGlzLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwiICA8bWF0LXRhYi1ncm91cCAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiIFsoc2VsZWN0ZWRJbmRleCldPVwidGFiSW5kZXhcIj5cblxuICAgIDwhLS0gTWludXRlIC0tPlxuICAgIDxtYXQtdGFiIFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiICBpMThuLWxhYmVsIGxhYmVsPVwiTWludXRlbHlcIiAqbmdJZj1cIiFvcHRpb25zLmhpZGVNaW51dGVzVGFiXCIgI21pbnV0ZXNUYWI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3Jvbi1lZGl0b3ItdGFiLWNvbnRlbnRcIiAoY2xpY2spPVwiYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnbWludXRlbHknKVwiPlxuXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNwYW4gaTE4bj5FdmVyeTwvc3Bhbj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+TWludXRlKHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzUGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2Ygc2VsZWN0T3B0aW9ucy5taW51dGVzXCIgW3ZhbHVlXT1cIm1pbnV0ZVwiPnt7bWludXRlfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQ3JvbkZsYXZvclF1YXJ0elwiPlxuICAgICAgICAgIDxzcGFuIGkxOG4+QXQgdGltZTwvc3Bhbj5cbiAgICAgICAgICA8Y3Jvbi10aW1lLXBpY2tlclxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCJcbiAgICAgICAgICAgIFtoaWRlSG91cnNdID0gdHJ1ZVxuICAgICAgICAgICAgW2hpZGVNaW51dGVzXSA9IHRydWVcbiAgICAgICAgICAgIFt1c2UyNEhvdXJUaW1lXT1cIm9wdGlvbnMudXNlMjRIb3VyVGltZVwiXG4gICAgICAgICAgICBbaGlkZVNlY29uZHNdPVwib3B0aW9ucy5oaWRlU2Vjb25kcyB8fCAhaXNDcm9uRmxhdm9yUXVhcnR6XCI+XG4gICAgICAgICAgPC9jcm9uLXRpbWUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRhYj5cblxuICAgIDwhLS0gSG91cmx5IC0tPlxuICAgIDxtYXQtdGFiICBpMThuLWxhYmVsIGxhYmVsPVwiSG91cmx5XCIgKm5nSWY9XCIhb3B0aW9ucy5oaWRlSG91cmx5VGFiXCIgI2hvdXJseVRhYj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWVkaXRvci10YWItY29udGVudFwiIChjbGljayk9XCJhbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCdob3VybHknKVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzcGFuIGkxOG4gY2xhc3M9XCJjcm9uLWZvcm0tbGFiZWxcIj5FdmVyeSA8L3NwYW4+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCBpMThuPkhvdXIocyk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhvdXJzUGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIHNlbGVjdE9wdGlvbnMuaG91cnNcIiBbdmFsdWVdPVwiaG91clwiPnt7aG91cn19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzcGFuIGkxOG4+QXQgdGltZSA8L3NwYW4+XG4gICAgICAgICAgPGNyb24tdGltZS1waWNrZXJcbiAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCJcbiAgICAgICAgICAgICAgW2hpZGVIb3Vyc10gPSB0cnVlXG4gICAgICAgICAgICAgIFt1c2UyNEhvdXJUaW1lXT1cIm9wdGlvbnMudXNlMjRIb3VyVGltZVwiXG4gICAgICAgICAgICAgIFtoaWRlU2Vjb25kc109XCJvcHRpb25zLmhpZGVTZWNvbmRzIHx8ICFpc0Nyb25GbGF2b3JRdWFydHpcIj5cbiAgICAgICAgICA8L2Nyb24tdGltZS1waWNrZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBEYWlseS0tPlxuICAgIDxtYXQtdGFiIGkxOG4tbGFiZWwgbGFiZWw9XCJEYWlseVwiICpuZ0lmPVwiIW9wdGlvbnMuaGlkZURhaWx5VGFiXCIgI2RhaWx5VGFiPlxuICAgICAgPGRpdiBjbGFzcz1cImNyb24tZWRpdG9yLXRhYi1jb250ZW50XCIgKGNsaWNrKT1cImFsbEZvcm0uY29udHJvbHMuY3JvblR5cGUuc2V0VmFsdWUoJ2RhaWx5JylcIj5cblxuICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiPlxuICAgICAgICAgIDxzcGFuIGkxOG4+RXZlcnkgPC9zcGFuPlxuICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImNyb24tZWRpdG9yLXJhZGlvLWdyb3VwXCIgZm9ybUNvbnRyb2xOYW1lPVwid2Vla2RheXNPbmx5XCIgPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBuYW1lPVwic3ViVGFiXCIgY2xhc3M9XCJjcm9uLWVkaXRvci1yYWRpby1idXR0b25cIiBbdmFsdWVdPVwiZmFsc2VcIiAgW2NoZWNrZWRdPVwidHJ1ZVwiID5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+RGF5KHMpPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlzUGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aERheSBvZiBzZWxlY3RPcHRpb25zLm1vbnRoRGF5c1wiIFt2YWx1ZV09XCJtb250aERheVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7bW9udGhEYXl9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBuYW1lPVwic3ViVGFiXCIgY2xhc3M9XCJjcm9uLWVkaXRvci1yYWRpby1idXR0b25cIiBbdmFsdWVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGkxOG4+V2VlayBEYXkgKE1PTi1GUkkpIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNwYW4gaTE4bj5BdCB0aW1lIDwvc3Bhbj5cbiAgICAgICAgICA8Y3Jvbi10aW1lLXBpY2tlclxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCJcbiAgICAgICAgICAgIFt1c2UyNEhvdXJUaW1lXT1cIm9wdGlvbnMudXNlMjRIb3VyVGltZVwiXG4gICAgICAgICAgICBbaGlkZVNlY29uZHNdPVwib3B0aW9ucy5oaWRlU2Vjb25kcyB8fCAhaXNDcm9uRmxhdm9yUXVhcnR6XCI+XG4gICAgICAgICAgPC9jcm9uLXRpbWUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBXZWVrbHktLT5cbiAgICA8bWF0LXRhYiBpMThuLWxhYmVsIGxhYmVsPVwiV2Vla2x5XCIgKm5nSWY9XCIhb3B0aW9ucy5oaWRlV2Vla2x5VGFiXCIgI3dlZWtseVRhYiA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3Jvbi1lZGl0b3ItdGFiLWNvbnRlbnRcIiAoY2xpY2spPVwiYWxsRm9ybS5jb250cm9scy5jcm9uVHlwZS5zZXRWYWx1ZSgnd2Vla2x5JylcIj5cblxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxzcGFuIGkxOG4+RXZlcnk6PC9zcGFuPlxuXG4gICAgICAgICAgPHNwYW4gW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCI+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cIk1PTlwiIGkxOG4+TW9uZGF5PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cIlRVRVwiIGkxOG4+VHVlc2RheTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJXRURcIiBpMThuPldlZG5lc2RheTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJUSFVcIiBpMThuPlRodXJzZGF5PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cIkZSSVwiIGkxOG4+RnJpZGF5PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT1cIlNBVFwiIGkxOG4+U2F0dXJkYXk8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwiU1VOXCIgaTE4bj5TdW5kYXk8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHNwYW4gaTE4biBjbGFzcz1cImNyb24tZm9ybS1sYWJlbFwiPiBBdCA8L3NwYW4+XG4gICAgICAgICAgPGNyb24tdGltZS1waWNrZXIgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlMjRIb3VyVGltZV09XCJvcHRpb25zLnVzZTI0SG91clRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlU2Vjb25kc109XCJvcHRpb25zLmhpZGVTZWNvbmRzfHwgIWlzQ3JvbkZsYXZvclF1YXJ0elwiPlxuICAgICAgICAgIDwvY3Jvbi10aW1lLXBpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG5cbiAgICA8IS0tIE1vbnRobHktLT5cbiAgICA8bWF0LXRhYiBpMThuLWxhYmVsIGxhYmVsPVwiTW9udGhseVwiICpuZ0lmPVwiIW9wdGlvbnMuaGlkZU1vbnRobHlUYWJcIiAjbW9udGhseVRhYj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcm9uLWVkaXRvci10YWItY29udGVudFwiIFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiIChjbGljayk9XCJhbGxGb3JtLmNvbnRyb2xzLmNyb25UeXBlLnNldFZhbHVlKCdtb250aGx5JylcIj5cblxuICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGZvcm1Db250cm9sTmFtZT1cInNwZWNpZmljV2Vla0RheVwiPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIG5hbWU9XCJtb250aGx5LXJhZGlvXCIgY2xhc3M9XCJjcm9uLWVkaXRvci1wYWQtbGluZVwiIFt2YWx1ZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgPCEtLSBTcGVzaWZpYyBkYXkgLS0+XG5cbiAgICAgICAgICAgICAgPHNwYW4gaTE4bj5PbiB0aGU8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+RGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aERheSBvZiBzZWxlY3RPcHRpb25zLm1vbnRoRGF5c1wiIFt2YWx1ZV09XCJtb250aERheVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7bW9udGhEYXlEaXNwbGF5KG1vbnRoRGF5KX19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxzcGFuIGkxOG4+b2YgZXZlcnk8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+TW9udGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1vbnRoc0luY1wiIFtuZ0NsYXNzXT1cIm9wdGlvbnMuZm9ybVNlbGVjdENsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aCBvZiBzZWxlY3RPcHRpb25zLm1vbnRoc1wiIFt2YWx1ZV09XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7bW9udGh9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIG5hbWU9XCJtb250aGx5LXJhZGlvXCIgY2xhc3M9XCJjcm9uLWVkaXRvci1wYWQtbGluZVwiICBbdmFsdWVdPVwidHJ1ZVwiID5cblxuICAgICAgICAgICAgPCEtLSBTcGVzaWZpYyBXZWVrIGRheSAtLT5cbiAgICAgICAgICAgIDxzcGFuIGkxOG4+T24gdGhlPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+V2VlazwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGNsYXNzPVwiZGF5LW9yZGVyLWluLW1vbnRoXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9udGhzV2Vla1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoV2VlayBvZiBzZWxlY3RPcHRpb25zLm1vbnRoV2Vla3NcIiBbdmFsdWVdPVwibW9udGhXZWVrXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bW9udGhXZWVrRGlzcGxheShtb250aFdlZWspfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj5EYXk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIndlZWstZGF5c1wiIGZvcm1Db250cm9sTmFtZT1cImRheVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRheSBvZiBzZWxlY3RPcHRpb25zLmRheXNcIiBbdmFsdWVdPVwiZGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ZGF5RGlzcGxheShkYXkpfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPHNwYW4gaTE4bj5vZiBldmVyeTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBpMThuPk1vbnRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtb250aHMtc21hbGxcIiBmb3JtQ29udHJvbE5hbWU9XCJtb250aHNJbmNcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aCBvZiBzZWxlY3RPcHRpb25zLm1vbnRoc1wiIFt2YWx1ZV09XCJtb250aFwiPlxuICAgICAgICAgICAgICAgICAgICB7e21vbnRofX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3Jvbi1lZGl0b3ItcGFkLWxpbmVcIiA+XG4gICAgICAgICAgPHNwYW4gaTE4bj5BdCB0aW1lPC9zcGFuPlxuICAgICAgICAgIDxjcm9uLXRpbWUtcGlja2VyIFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZTI0SG91clRpbWVdPVwib3B0aW9ucy51c2UyNEhvdXJUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlY29uZHNdPVwib3B0aW9ucy5oaWRlU2Vjb25kcyB8fCAhaXNDcm9uRmxhdm9yUXVhcnR6XCI+XG4gICAgICAgICAgPC9jcm9uLXRpbWUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRhYj5cblxuICAgIDwhLS0gWWVhcmx5LS0+XG4gICAgPG1hdC10YWIgaTE4bi1sYWJlbCAgbGFiZWw9XCJZZWFybHlcIiAqbmdJZj1cIiFvcHRpb25zLmhpZGVZZWFybHlUYWJcIiAjeWVhcmx5VGFiPlxuICAgICAgPGRpdiBjbGFzcz1cImNyb24tZWRpdG9yLXRhYi1jb250ZW50XCIgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCI+XG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJjcm9uLWVkaXRvci1yYWRpby1ncm91cFwiIGZvcm1Db250cm9sTmFtZT1cInNwZWNpZmljTW9udGhXZWVrXCI+XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gbmFtZT1cInllYXJseS1yYWRpb1wiIGNsYXNzPVwiY3Jvbi1lZGl0b3ItcGFkLWxpbmVcIiBbdmFsdWVdPVwiZmFsc2VcIj5cblxuICAgICAgICAgICAgPHNwYW4gaTE4bj5PbiB0aGU8L3NwYW4+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCBpMThuPkRheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkYXlzXCIgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aERheSBvZiBzZWxlY3RPcHRpb25zLm1vbnRoRGF5c1wiIFt2YWx1ZV09XCJtb250aERheVwiPlxuICAgICAgICAgICAgICAgICAge3ttb250aERheURpc3BsYXkobW9udGhEYXkpfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgIDxzcGFuIGkxOG49XCJkYXkgb2YgbW9udGhcIj5vZjwvc3Bhbj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+TW9udGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibW9udGhzXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIHNlbGVjdE9wdGlvbnMubW9udGhzXCIgW3ZhbHVlXT1cIm1vbnRoXCI+XG4gICAgICAgICAgICAgICAgICB7e21vbnRoRGlzcGxheShtb250aCl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cblxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIG5hbWU9XCJ5ZWFybHktcmFkaW9cIiBjbGFzcz1cImNyb24tZWRpdG9yLXBhZC1saW5lXCIgW3ZhbHVlXT1cInRydWVcIj5cblxuICAgICAgICAgICAgPHNwYW4gaTE4bj5PbiB0aGU8L3NwYW4+XG5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCA+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj5XZWVrPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1vbnRoc1dlZWtcIiA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoV2VlayBvZiBzZWxlY3RPcHRpb25zLm1vbnRoV2Vla3NcIiBbdmFsdWVdPVwibW9udGhXZWVrXCI+XG4gICAgICAgICAgICAgICAgICB7e21vbnRoV2Vla0Rpc3BsYXkobW9udGhXZWVrKX19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgaTE4bj5EYXk8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZGF5XCIgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXkgb2Ygc2VsZWN0T3B0aW9ucy5kYXlzXCIgW3ZhbHVlXT1cImRheVwiPlxuICAgICAgICAgICAgICAgICAge3tkYXlEaXNwbGF5KGRheSl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgPHNwYW4gaTE4bj5vZjwvc3Bhbj5cblxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+TW9udGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibW9udGhzXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG1vbnRoIG9mIHNlbGVjdE9wdGlvbnMubW9udGhzXCIgW3ZhbHVlXT1cIm1vbnRoXCI+XG4gICAgICAgICAgICAgICAgICB7e21vbnRoRGlzcGxheShtb250aCl9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNyb24tZWRpdG9yLXBhZC1saW5lXCI+XG5cbiAgICAgICAgICA8c3BhbiBpMThuPkF0IHRpbWU8L3NwYW4+XG5cbiAgICAgICAgICA8Y3Jvbi10aW1lLXBpY2tlciBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiYWxsRm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZTI0SG91clRpbWVdPVwib3B0aW9ucy51c2UyNEhvdXJUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlY29uZHNdPVwib3B0aW9ucy5oaWRlU2Vjb25kcyB8fCAhaXNDcm9uRmxhdm9yUXVhcnR6XCI+XG4gICAgICAgICAgPC9jcm9uLXRpbWUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBBZHZhbmNlZC0tPlxuICAgIDxtYXQtdGFiIGkxOG4tbGFiZWwgbGFiZWw9XCJBZHZhbmNlZFwiICpuZ0lmPVwiIW9wdGlvbnMuaGlkZUFkdmFuY2VkVGFiXCIgI2FkdmFuY2VkVGFiPlxuICAgICAgPGRpdiBjbGFzcz1cImNyb24tZWRpdG9yLXRhYi1jb250ZW50XCIgW2Zvcm1Hcm91cF09XCJhbGxGb3JtXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsIGkxOG4+RXhwcmVzc2lvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYWR2YW5jZWQtY3Jvbi1lZGl0b3ItaW5wdXRcIiBmb3JtQ29udHJvbE5hbWU9XCJleHByZXNzaW9uXCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbiJdfQ== \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/src/cron-editor.module.mjs b/libs/ngx-cron-editor/esm2022/src/cron-editor.module.mjs deleted file mode 100644 index 1775950..0000000 --- a/libs/ngx-cron-editor/esm2022/src/cron-editor.module.mjs +++ /dev/null @@ -1,52 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatInputModule } from '@angular/material/input'; -import { MatListModule } from '@angular/material/list'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatTabsModule } from '@angular/material/tabs'; -import { TimePickerComponent } from './cron-time-picker.component'; -import { CronGenComponent } from './cron-editor.component'; -import * as i0 from "@angular/core"; -export class CronEditorModule { - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } - static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, declarations: [TimePickerComponent, CronGenComponent], imports: [CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule], exports: [TimePickerComponent, CronGenComponent] }); } - static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, imports: [CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, decorators: [{ - type: NgModule, - args: [{ - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule - ], - exports: [TimePickerComponent, CronGenComponent], - declarations: [TimePickerComponent, CronGenComponent] - }] - }] }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1lZGl0b3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtY3Jvbi1lZGl0b3Ivc3JjL2Nyb24tZWRpdG9yLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFpQjNELE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLGlCQUZaLG1CQUFtQixFQUFFLGdCQUFnQixhQVg5QyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsYUFBYTtZQUNiLGVBQWU7WUFDZixjQUFjO1lBQ2QsY0FBYztZQUNkLGlCQUFpQixhQUViLG1CQUFtQixFQUFFLGdCQUFnQjsrR0FHcEMsZ0JBQWdCLFlBYnJCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixhQUFhO1lBQ2IsZUFBZTtZQUNmLGNBQWM7WUFDZCxjQUFjO1lBQ2QsaUJBQWlCOzsyRkFLWixnQkFBZ0I7a0JBZjVCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxpQkFBaUI7cUJBQ3BCO29CQUNILE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDO29CQUNoRCxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDdEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2Nyb24tdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENyb25HZW5Db21wb25lbnQgfSBmcm9tICcuL2Nyb24tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGVcbiAgICBdLFxuICBleHBvcnRzOiBbVGltZVBpY2tlckNvbXBvbmVudCwgQ3JvbkdlbkNvbXBvbmVudF0sXG4gIGRlY2xhcmF0aW9uczogW1RpbWVQaWNrZXJDb21wb25lbnQsIENyb25HZW5Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIENyb25FZGl0b3JNb2R1bGUgeyB9XG4iXX0= \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/src/cron-time-picker.component.mjs b/libs/ngx-cron-editor/esm2022/src/cron-time-picker.component.mjs deleted file mode 100644 index fff5a94..0000000 --- a/libs/ngx-cron-editor/esm2022/src/cron-time-picker.component.mjs +++ /dev/null @@ -1,48 +0,0 @@ -import { Component, Input } from '@angular/core'; -import * as i0 from "@angular/core"; -import * as i1 from "@angular/forms"; -import * as i2 from "@angular/common"; -import * as i3 from "@angular/material/form-field"; -import * as i4 from "@angular/material/select"; -import * as i5 from "@angular/material/core"; -function* range(start, end) { - for (let i = start; i <= end; i++) { - yield i; - } -} -export class TimePickerComponent { - get hours() { - return this.use24HourTime ? [...range(0, 23)].map(String) : [...range(0, 12)].map(String); - } - constructor(parent) { - this.parent = parent; - this.disabled = false; - this.use24HourTime = true; - this.hideHours = false; - this.hideMinutes = false; - this.hideSeconds = true; - this.minutes = [...range(0, 59)].map(String); - this.seconds = [...range(0, 59)].map(String); - this.hourTypes = ['AM', 'PM']; - } - ngOnInit() { - this.allForm = this.parent.control; - } - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TimePickerComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); } - static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: TimePickerComponent, selector: "cron-time-picker", inputs: { disabled: "disabled", use24HourTime: "use24HourTime", hideHours: "hideHours", hideMinutes: "hideMinutes", hideSeconds: "hideSeconds" }, providers: [], ngImport: i0, template: "\n\n \n \n Hour(s)\n \n {{hour}}\n \n \n \n\n \n :\n \n Minute(s)\n \n {{minute}}\n \n \n \n\n \n :\n \n Second(s)\n \n {{second}}\n \n \n \n\n \n .\n \n \n {{hourType}}\n \n \n \n\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TimePickerComponent, decorators: [{ - type: Component, - args: [{ selector: 'cron-time-picker', providers: [], template: "\n\n \n \n Hour(s)\n \n {{hour}}\n \n \n \n\n \n :\n \n Minute(s)\n \n {{minute}}\n \n \n \n\n \n :\n \n Second(s)\n \n {{second}}\n \n \n \n\n \n .\n \n \n {{hourType}}\n \n \n \n\n" }] - }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { disabled: [{ - type: Input - }], use24HourTime: [{ - type: Input - }], hideHours: [{ - type: Input - }], hideMinutes: [{ - type: Input - }], hideSeconds: [{ - type: Input - }] } }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi10aW1lLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC1jcm9uLWVkaXRvci9zcmMvY3Jvbi10aW1lLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL25neC1jcm9uLWVkaXRvci9zcmMvY3Jvbi10aW1lLXBpY2tlci50ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBVXZELFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVztJQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQztBQU9ELE1BQU0sT0FBTyxtQkFBbUI7SUFhOUIsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFlBQW1CLE1BQXdCO1FBQXhCLFdBQU0sR0FBTixNQUFNLENBQWtCO1FBaEIzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFJNUIsWUFBTyxHQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLFlBQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxjQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFNYyxDQUFDO0lBRS9DLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBb0IsQ0FBQztJQUNsRCxDQUFDOzhHQXJCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw2TEFGbkIsRUFBRSwwQkNuQmYsMjJDQXdDQTs7MkZEbkJhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxrQkFBa0IsYUFFakIsRUFBRTtxRkFHRyxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVQaWNrZXJNb2RlbCB7XG4gIGRheXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uKiByYW5nZShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICB5aWVsZCBpO1xuICB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nyb24tdGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY3Jvbi10aW1lLXBpY2tlci50ZW1wbGF0ZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyB1c2UyNEhvdXJUaW1lID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGhpZGVIb3VycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaGlkZU1pbnV0ZXMgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGhpZGVTZWNvbmRzID0gdHJ1ZTtcblxuICBhbGxGb3JtOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIG1pbnV0ZXMgPSAgWy4uLnJhbmdlKDAsIDU5KSBdLm1hcChTdHJpbmcpO1xuICBwdWJsaWMgc2Vjb25kcyA9IFsuLi5yYW5nZSgwLCA1OSkgXS5tYXAoU3RyaW5nKTtcbiAgcHVibGljIGhvdXJUeXBlcyA9IFsnQU0nLCAnUE0nXTtcblxuICBnZXQgaG91cnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnVzZTI0SG91clRpbWUgPyBbLi4uIHJhbmdlKDAsIDIzKV0ubWFwKFN0cmluZykgOiBbLi4uIHJhbmdlKDAsIDEyKV0ubWFwKFN0cmluZyk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50OiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRm9ybSA9IHRoaXMucGFyZW50LmNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICB9XG59XG5cblxuIiwiPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImFsbEZvcm1cIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVIb3Vyc1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWwgaTE4bj5Ib3VyKHMpPC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJob3Vyc1wiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiIFt2YWx1ZV09XCJob3VyXCI+e3tob3VyfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoaWRlTWludXRlc1wiPlxuICAgIDxzcGFuICpuZ0lmPVwiIWhpZGVIb3Vyc1wiPjo8L3NwYW4+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbCBpMThuPk1pbnV0ZShzKTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibWludXRlc1wiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIiBbdmFsdWVdPVwibWludXRlXCI+e3ttaW51dGV9fTwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhpZGVTZWNvbmRzXCI+XG4gICAgPHNwYW4gKm5nSWY9XCIhaGlkZU1pbnV0ZXNcIj46PC9zcGFuPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWwgaTE4bj5TZWNvbmQocyk8L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNlY29uZHNcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlY29uZCBvZiBzZWNvbmRzXCIgW3ZhbHVlXT1cInNlY29uZFwiPnt7c2Vjb25kfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2UyNEhvdXJUaW1lXCI+XG4gICAgPHNwYW4+PC9zcGFuPi5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJob3VyVHlwZVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91clR5cGUgb2YgaG91clR5cGVzXCIgW3ZhbHVlXT1cImhvdXJUeXBlXCI+e3tob3VyVHlwZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0= \ No newline at end of file diff --git a/libs/ngx-cron-editor/esm2022/src/enums.mjs b/libs/ngx-cron-editor/esm2022/src/enums.mjs deleted file mode 100644 index 01eb325..0000000 --- a/libs/ngx-cron-editor/esm2022/src/enums.mjs +++ /dev/null @@ -1,32 +0,0 @@ -export const Days = { - 'SUN': $localize `Sunday`, - 'MON': $localize `Monday`, - 'TUE': $localize `Tuesday`, - 'WED': $localize `Wednesday`, - 'THU': $localize `Thursday`, - 'FRI': $localize `Friday`, - 'SAT': $localize `Saturday` -}; -export const MonthWeeks = { - '#1': $localize `First`, - '#2': $localize `Second`, - '#3': $localize `Third`, - '#4': $localize `Fourth`, - '#5': $localize `Fifth`, - 'L': $localize `Last` -}; -export const Months = { - 1: $localize `January`, - 2: $localize `February`, - 3: $localize `March`, - 4: $localize `April`, - 5: $localize `May`, - 6: $localize `June`, - 7: $localize `July`, - 8: $localize `August`, - 9: $localize `September`, - 10: $localize `October`, - 11: $localize `November`, - 12: $localize `December` -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC1jcm9uLWVkaXRvci9zcmMvZW51bXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHO0lBQ2xCLEtBQUssRUFBRSxTQUFTLENBQUEsUUFBUTtJQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFBLFFBQVE7SUFDeEIsS0FBSyxFQUFFLFNBQVMsQ0FBQSxTQUFTO0lBQ3pCLEtBQUssRUFBRSxTQUFTLENBQUEsV0FBVztJQUMzQixLQUFLLEVBQUUsU0FBUyxDQUFBLFVBQVU7SUFDMUIsS0FBSyxFQUFFLFNBQVMsQ0FBQSxRQUFRO0lBQ3hCLEtBQUssRUFBRSxTQUFTLENBQUEsVUFBVTtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxTQUFTLENBQUEsT0FBTztJQUN0QixJQUFJLEVBQUUsU0FBUyxDQUFBLFFBQVE7SUFDdkIsSUFBSSxFQUFFLFNBQVMsQ0FBQSxPQUFPO0lBQ3RCLElBQUksRUFBRSxTQUFTLENBQUEsUUFBUTtJQUN2QixJQUFJLEVBQUUsU0FBUyxDQUFBLE9BQU87SUFDdEIsR0FBRyxFQUFFLFNBQVMsQ0FBQSxNQUFNO0NBQ3JCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUc7SUFDcEIsQ0FBQyxFQUFFLFNBQVMsQ0FBQSxTQUFTO0lBQ3JCLENBQUMsRUFBRSxTQUFTLENBQUEsVUFBVTtJQUN0QixDQUFDLEVBQUUsU0FBUyxDQUFBLE9BQU87SUFDbkIsQ0FBQyxFQUFFLFNBQVMsQ0FBQSxPQUFPO0lBQ25CLENBQUMsRUFBRSxTQUFTLENBQUEsS0FBSztJQUNqQixDQUFDLEVBQUUsU0FBUyxDQUFBLE1BQU07SUFDbEIsQ0FBQyxFQUFFLFNBQVMsQ0FBQSxNQUFNO0lBQ2xCLENBQUMsRUFBRSxTQUFTLENBQUEsUUFBUTtJQUNwQixDQUFDLEVBQUUsU0FBUyxDQUFBLFdBQVc7SUFDdkIsRUFBRSxFQUFFLFNBQVMsQ0FBQSxTQUFTO0lBQ3RCLEVBQUUsRUFBRSxTQUFTLENBQUEsVUFBVTtJQUN2QixFQUFFLEVBQUUsU0FBUyxDQUFBLFVBQVU7Q0FDeEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGNvbnN0IERheXMgPSB7XG4gICdTVU4nOiAkbG9jYWxpemVgU3VuZGF5YCxcbiAgJ01PTic6ICRsb2NhbGl6ZWBNb25kYXlgLFxuICAnVFVFJzogJGxvY2FsaXplYFR1ZXNkYXlgLFxuICAnV0VEJzogJGxvY2FsaXplYFdlZG5lc2RheWAsXG4gICdUSFUnOiAkbG9jYWxpemVgVGh1cnNkYXlgLFxuICAnRlJJJzogJGxvY2FsaXplYEZyaWRheWAsXG4gICdTQVQnOiAkbG9jYWxpemVgU2F0dXJkYXlgXG59O1xuXG5leHBvcnQgY29uc3QgTW9udGhXZWVrcyA9IHtcbiAgJyMxJzogJGxvY2FsaXplYEZpcnN0YCxcbiAgJyMyJzogJGxvY2FsaXplYFNlY29uZGAsXG4gICcjMyc6ICRsb2NhbGl6ZWBUaGlyZGAsXG4gICcjNCc6ICRsb2NhbGl6ZWBGb3VydGhgLFxuICAnIzUnOiAkbG9jYWxpemVgRmlmdGhgLFxuICAnTCc6ICRsb2NhbGl6ZWBMYXN0YFxufTtcblxuZXhwb3J0IGNvbnN0IE1vbnRocyA9IHtcbiAgMTogJGxvY2FsaXplYEphbnVhcnlgLFxuICAyOiAkbG9jYWxpemVgRmVicnVhcnlgLFxuICAzOiAkbG9jYWxpemVgTWFyY2hgLFxuICA0OiAkbG9jYWxpemVgQXByaWxgLFxuICA1OiAkbG9jYWxpemVgTWF5YCxcbiAgNjogJGxvY2FsaXplYEp1bmVgLFxuICA3OiAkbG9jYWxpemVgSnVseWAsXG4gIDg6ICRsb2NhbGl6ZWBBdWd1c3RgLFxuICA5OiAkbG9jYWxpemVgU2VwdGVtYmVyYCxcbiAgMTA6ICRsb2NhbGl6ZWBPY3RvYmVyYCxcbiAgMTE6ICRsb2NhbGl6ZWBOb3ZlbWJlcmAsXG4gIDEyOiAkbG9jYWxpemVgRGVjZW1iZXJgXG59XG4iXX0= \ No newline at end of file diff --git a/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs b/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs deleted file mode 100644 index b131d8e..0000000 --- a/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs +++ /dev/null @@ -1,640 +0,0 @@ -import * as i0 from '@angular/core'; -import { Component, Input, forwardRef, ViewChild, NgModule } from '@angular/core'; -import * as i2 from '@angular/common'; -import { CommonModule } from '@angular/common'; -import * as i1 from '@angular/forms'; -import { NG_VALUE_ACCESSOR, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms'; -import * as i9 from '@angular/material/checkbox'; -import { MatCheckboxModule } from '@angular/material/checkbox'; -import * as i7 from '@angular/material/input'; -import { MatInputModule } from '@angular/material/input'; -import { MatListModule } from '@angular/material/list'; -import * as i8 from '@angular/material/radio'; -import { MatRadioModule } from '@angular/material/radio'; -import * as i4 from '@angular/material/select'; -import { MatSelectModule } from '@angular/material/select'; -import * as i3$1 from '@angular/material/tabs'; -import { MatTabsModule } from '@angular/material/tabs'; -import * as i3 from '@angular/material/form-field'; -import * as i5 from '@angular/material/core'; -import { debounceTime } from 'rxjs'; - -function* range$1(start, end) { - for (let i = start; i <= end; i++) { - yield i; - } -} -class TimePickerComponent { - get hours() { - return this.use24HourTime ? [...range$1(0, 23)].map(String) : [...range$1(0, 12)].map(String); - } - constructor(parent) { - this.parent = parent; - this.disabled = false; - this.use24HourTime = true; - this.hideHours = false; - this.hideMinutes = false; - this.hideSeconds = true; - this.minutes = [...range$1(0, 59)].map(String); - this.seconds = [...range$1(0, 59)].map(String); - this.hourTypes = ['AM', 'PM']; - } - ngOnInit() { - this.allForm = this.parent.control; - } - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TimePickerComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); } - static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: TimePickerComponent, selector: "cron-time-picker", inputs: { disabled: "disabled", use24HourTime: "use24HourTime", hideHours: "hideHours", hideMinutes: "hideMinutes", hideSeconds: "hideSeconds" }, providers: [], ngImport: i0, template: "\n\n \n \n Hour(s)\n \n {{hour}}\n \n \n \n\n \n :\n \n Minute(s)\n \n {{minute}}\n \n \n \n\n \n :\n \n Second(s)\n \n {{second}}\n \n \n \n\n \n .\n \n \n {{hourType}}\n \n \n \n\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TimePickerComponent, decorators: [{ - type: Component, - args: [{ selector: 'cron-time-picker', providers: [], template: "\n\n \n \n Hour(s)\n \n {{hour}}\n \n \n \n\n \n :\n \n Minute(s)\n \n {{minute}}\n \n \n \n\n \n :\n \n Second(s)\n \n {{second}}\n \n \n \n\n \n .\n \n \n {{hourType}}\n \n \n \n\n" }] - }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { disabled: [{ - type: Input - }], use24HourTime: [{ - type: Input - }], hideHours: [{ - type: Input - }], hideMinutes: [{ - type: Input - }], hideSeconds: [{ - type: Input - }] } }); - -class DefaultOptions { - constructor() { - this.cronFlavor = 'standard'; - this.defaultTime = '00:00:00'; - this.hideAdvancedTab = false; - this.hideDailyTab = false; - this.hideHourlyTab = false; - this.hideMinutesTab = false; - this.hideMonthlyTab = false; - this.hideSeconds = false; - this.hideSpecificMonthWeekTab = false; - this.hideSpecificWeekDayTab = false; - this.hideWeeklyTab = false; - this.hideYearlyTab = false; - this.use24HourTime = true; - } -} - -const Days = { - 'SUN': $localize `Sunday`, - 'MON': $localize `Monday`, - 'TUE': $localize `Tuesday`, - 'WED': $localize `Wednesday`, - 'THU': $localize `Thursday`, - 'FRI': $localize `Friday`, - 'SAT': $localize `Saturday` -}; -const MonthWeeks = { - '#1': $localize `First`, - '#2': $localize `Second`, - '#3': $localize `Third`, - '#4': $localize `Fourth`, - '#5': $localize `Fifth`, - 'L': $localize `Last` -}; -const Months = { - 1: $localize `January`, - 2: $localize `February`, - 3: $localize `March`, - 4: $localize `April`, - 5: $localize `May`, - 6: $localize `June`, - 7: $localize `July`, - 8: $localize `August`, - 9: $localize `September`, - 10: $localize `October`, - 11: $localize `November`, - 12: $localize `December` -}; - -const minutesExp = /\d+ 0\/\d+ \* 1\/1 \* [\?\*] \*/; -const hourlyExp = /\d+ \d+ 0\/\d+ 1\/1 \* [\?\*] \*/; -const dailyExp = /\d+ \d+ \d+ 1\/\d+ \* [\?\*] \*/; -const dailyWeekdayExp = /\d+ \d+ \d+ [\?\*] \* MON-FRI \*/; -const weeklyExp = /\d+ \d+ \d+ [\?\*] \* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \*/; -const monthlyExp = /\d+ \d+ \d+ (\d+|L|LW|1W) 1\/\d+ [\?\*] \*/; -const monthlyWeekdayExp = /\d+ \d+ \d+ [\?\*] 1\/\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/; -const yearlyExp = /\d+ \d+ \d+ (\d+|L|LW|1W) \d+ [\?\*] \*/; -const yearlyMonthWeekExp = /\d+ \d+ \d+ [\?\*] \d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \*/; -const CRON_VALUE_ACCESSOR = { - provide: NG_VALUE_ACCESSOR, - useExisting: forwardRef(() => CronGenComponent), - multi: true, -}; -function parseCronNumberToken(val) { - const v = val.split('/'); - if (v.length === 1) { - return { val: v[0], inc: '0' }; - } - return { val: v[0], inc: v[1] }; -} -function* range(start, end) { - for (let i = start; i <= end; i++) { - yield i; - } -} -class CronGenComponent { - get isCronFlavorQuartz() { - return this.options.cronFlavor === 'quartz'; - } - get isCronFlavorStandard() { - return this.options.cronFlavor === 'standard'; - } - get yearDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '*' : ''; - } - get weekDayDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '?' : '*'; - } - get monthDayDefaultChar() { - return this.options.cronFlavor === 'quartz' ? '?' : '*'; - } - constructor(fb) { - this.fb = fb; - this.tabIndex = 0; - this.disabled = false; - this.options = new DefaultOptions(); - this.selectOptions = this.getSelectOptions(); - this.touched = false; - this.allForm = this.fb.group({ - cronType: ['unknown', Validators.required], - seconds: ['0'], - minutes: ['0'], - minutesPer: ['0'], - hours: [this.getAmPmHour('0')], - hoursPer: ['0'], - hoursType: [this.getHourType('0')], - days: ['0'], // Days of Month, 1, 2, 31.... - daysPer: ['0'], - months: ['0'], - monthsInc: ['0'], - day: ['MON'], // Day of week '1' or 'MON; - monthsWeek: ['#1'], - weekdaysOnly: [false], - specificWeekDay: [false], - specificMonthWeek: [false], - MON: [true], - TUE: [true], - WED: [true], - THU: [true], - FRI: [true], - SAT: [true], - SUN: [true], - expression: ['0 0 0 0 0'] - }); - } - /* Update the cron output to that of the selected tab. - * The cron output value is updated whenever a form is updated. To make it change in response to tab selection, we simply reset - * the value of the form that goes into focus. - * We cannot rely on the index of the tab, as the hide options could hide tabs and - * then the index dynamically changes based on the hidden tab.*/ - onTabChange(tabChangeEvent) { - const currentTab = tabChangeEvent.tab; - let x; - switch (currentTab) { - case this.minutesTab: - x = 'minutely'; - break; - case this.hourlyTab: - x = 'hourly'; - break; - case this.dailyTab: - x = 'daily'; - break; - case this.weeklyTab: - x = 'weekly'; - break; - case this.monthlyTab: - x = 'monthly'; - break; - case this.yearlyTab: - x = 'yearly'; - break; - case this.advancedTab: - x = 'unknown'; - break; - default: - throw (new Error('Invalid tab selected')); - } - this.allForm.controls.cronType.setValue(x); - } - async ngOnInit() { - this.formSub = this.allForm.valueChanges.pipe(debounceTime(50)).subscribe(value => { - this.markAsTouched(); - const cron = this.computeCron(); - // this.allForm.controls.expression.setValue(cron, {emitEvent: false}); - this.onChange(cron); - }); - } - ngOnDestroy() { - this.formSub.unsubscribe(); - } - computeCron() { - let cron; - switch (this.allForm.value.cronType) { - case 'minutely': - cron = this.computeMinutesCron(); - break; - case 'hourly': - cron = this.computeHourlyCron(); - this.tabIndex = 1; - break; - case 'daily': - cron = this.computeDailyCron(); - this.tabIndex = 2; - break; - case 'weekly': - cron = this.computeWeeklyCron(); - this.tabIndex = 3; - break; - case 'monthly': - cron = this.computeMonthlyCron(); - this.tabIndex = 4; - break; - case 'yearly': - cron = this.computeYearlyCron(); - this.tabIndex = 5; - break; - case 'unknown': - cron = this.computeAdvancedExpression(); - this.tabIndex = 6; - break; - default: - throw Error($localize `Unknown cron type ${this.allForm.value.cronType}`); - } - return cron; - } - computeMinutesCron() { - const state = this.allForm.value; - // tslint:disable-next-line:max-line-length - return `${this.isCronFlavorQuartz ? state.seconds : ''} 0/${state.minutesPer} * 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeHourlyCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} 0/${state.hoursPer} 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeDailyCron() { - if (this.allForm.value.weekdaysOnly) { - return this.computeEveryWeekdayCron(); - } - return this.computeEveryDaysCron(); - } - computeEveryDaysCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} 1/${state.daysPer} * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeEveryWeekdayCron() { - const state = this.allForm.value; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * MON-FRI ${this.yearDefaultChar}`.trim(); - } - computeWeeklyCron() { - const state = this.allForm.value; - const days = this.selectOptions.days - .reduce((acc, day) => state[day] ? acc.concat([day]) : acc, []) - .join(',') || '*'; - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * ${days} ${this.yearDefaultChar}`.trim(); - } - computeMonthlyCron() { - const state = this.allForm.value; - if (state.specificWeekDay) { - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} 1/${state.monthsInc} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim(); - } - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} 1/${state.monthsInc} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeYearlyCron() { - const state = this.allForm.value; - if (state.specificMonthWeek) { - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} ${state.months} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim(); - } - return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} ${state.months} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim(); - } - computeAdvancedExpression() { - const state = this.allForm.value; - return state.expression; - } - dayDisplay(day) { - return Days[day]; - } - monthWeekDisplay(monthWeekNumber) { - return MonthWeeks[monthWeekNumber]; - } - monthDisplay(month) { - return Months[parseInt(month, 10)]; - } - monthDayDisplay(month) { - if (typeof month === 'number') { - return `${month}${this.getOrdinalSuffix(month)}`; - } - if (month === 'L') { - return $localize `Last Day`; - } - else if (month === 'LW') { - return $localize `Last Weekday`; - } - else if (month === '1W') { - return $localize `First Weekday`; - } - else { - return `${month}${this.getOrdinalSuffix(month)}`; - } - } - getAmPmHour(hour) { - if (this.options.use24HourTime) { - return hour; - } - return ((parseInt(hour, 10) + 11) % 12 + 1).toString(); - } - // Return the AM or PM component of a clocktime, or null if 24-hour format is used. - getHourType(hour) { - if (this.options.use24HourTime) { - return null; - } - if (parseInt(hour, 10) >= 12) { - return 'PM'; - } - return 'AM'; - } - hourToCron(hour, hourType) { - if (this.options.use24HourTime) { - return hour; - } - else { - return hourType === 'AM' ? (hour === '12' ? '0' : hour) : (hour === '12' ? '12' : (parseInt(hour, 10) + 12).toString()); - } - } - handleModelChange(cron) { - if (!this.cronIsValid(cron)) { - if (this.isCronFlavorQuartz) { - throw new Error($localize `Invalid cron expression, there must be 6 or 7 segments`); - } - if (this.isCronFlavorStandard) { - throw new Error($localize `Invalid cron expression, there must be 5 segments`); - } - } - // Store original cron expression here. - this.allForm.controls.expression.setValue(cron); - // Normalize cron so that second segment is included. - if (cron.split(' ').length === 5 && this.isCronFlavorStandard) { - cron = `0 ${cron} *`; - } - // Parse cron tokens - const t = cron.split(' '); - // Seconds - this.allForm.controls.seconds.setValue(t[0], { emitEvent: false }); - // Minutes - let x = parseCronNumberToken(t[1]); - this.allForm.controls.minutesPer.setValue(x.inc, { emitEvent: false }); - this.allForm.controls.minutes.setValue(x.val); - // Hours - x = parseCronNumberToken(t[2]); - this.allForm.controls.hoursPer.setValue(x.inc); - this.allForm.controls.hours.setValue(x.val); - this.allForm.controls.hoursType.setValue(this.getHourType(this.allForm.value.hours), { emitEvent: false }); - // Day of Month - x = parseCronNumberToken(t[3]); - this.allForm.controls.days.setValue(x.val, { emitEvent: false }); - this.allForm.controls.daysPer.setValue(x.inc, { emitEvent: false }); - // Month - x = parseCronNumberToken(t[4]); - this.allForm.controls.months.setValue(x.val, { emitEvent: false }); - this.allForm.controls.monthsInc.setValue(x.inc, { emitEvent: false }); - // Day of Week - this.allForm.controls.SUN.setValue(t[5].match(/(? 1 && value.charAt(value.length - 2) === '1') { - return 'th'; - } - // Check last digit: 21st, 22nd, 23rd, 24th, 25t, etc. - switch (value.charAt(value.length - 1)) { - case '1': - return 'st'; - case '2': - return 'nd'; - case '3': - return 'rd'; - default: - return 'th'; - } - } - getSelectOptions() { - return { - months: this.getRange(1, 12).map(String), - monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'], - days: ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'], - minutes: this.getRange(0, 59).map(String), - fullMinutes: this.getRange(0, 59).map(String), - seconds: this.getRange(0, 59).map(String), - hours: this.getRange(1, 23).map(String), - monthDays: this.getRange(1, 31).map(String), - monthDaysWithLasts: ['1W', ...[...this.getRange(1, 31).map(String)], 'LW', 'L'], - monthDaysWithOutLasts: [...[...this.getRange(1, 31).map(String)]], - hourTypes: ['AM', 'PM'] - }; - } - getRange(start, end) { - const length = end - start + 1; - return Array.apply(null, Array(length)).map((_, i) => i + start); - } - writeValue(obj) { - if (obj === null) { - return; - } - this.handleModelChange(obj); - } - registerOnChange(fn) { - this.onChange = fn; - } - registerOnTouched(fn) { - this.onTouched = fn; - } - setDisabledState(isDisabled) { - this.disabled = isDisabled; - } - markAsTouched() { - if (!this.touched) { - this.onTouched(); - this.touched = true; - } - } - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronGenComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); } - static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.6", type: CronGenComponent, selector: "cron-editor", inputs: { backgroundColor: "backgroundColor", color: "color", disabled: "disabled", options: "options" }, providers: [CRON_VALUE_ACCESSOR], viewQueries: [{ propertyName: "minutesTab", first: true, predicate: ["minutesTab"], descendants: true }, { propertyName: "hourlyTab", first: true, predicate: ["hourlyTab"], descendants: true }, { propertyName: "dailyTab", first: true, predicate: ["dailyTab"], descendants: true }, { propertyName: "weeklyTab", first: true, predicate: ["weeklyTab"], descendants: true }, { propertyName: "monthlyTab", first: true, predicate: ["monthlyTab"], descendants: true }, { propertyName: "yearlyTab", first: true, predicate: ["yearlyTab"], descendants: true }, { propertyName: "advancedTab", first: true, predicate: ["advancedTab"], descendants: true }], ngImport: i0, template: " \n\n \n \n
\n\n
\n Every\n \n Minute(s)\n \n {{minute}}\n \n \n
\n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n
\n Every \n \n Hour(s)\n \n {{hour}}\n \n \n
\n
\n At time \n \n \n
\n
\n
\n\n \n \n
\n\n
\n Every \n \n \n \n Day(s)\n \n \n {{monthDay}}\n \n \n \n \n \n Week Day (MON-FRI) \n \n \n
\n\n
\n At time \n \n \n
\n
\n\n
\n\n \n \n
\n\n
\n Every:\n\n \n Monday\n Tuesday\n Wednesday\n Thursday\n Friday\n Saturday\n Sunday\n \n
\n\n
\n At \n \n \n
\n
\n
\n\n \n \n
\n\n \n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n\n \n\n \n\n \n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n \n \n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n\n \n\n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n \n\n
\n\n At time\n\n \n \n
\n\n
\n
\n\n \n \n
\n \n Expression\n \n \n
\n
\n
\n", styles: [".cron-editor-tab-content{margin-top:24px}.cron-editor-radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.cron-editor-radio-button{margin:5px}.cron-editor-pad-line *{padding-left:8px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i8.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i8.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i9.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: TimePickerComponent, selector: "cron-time-picker", inputs: ["disabled", "use24HourTime", "hideHours", "hideMinutes", "hideSeconds"] }] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronGenComponent, decorators: [{ - type: Component, - args: [{ selector: 'cron-editor', providers: [CRON_VALUE_ACCESSOR], template: " \n\n \n \n
\n\n
\n Every\n \n Minute(s)\n \n {{minute}}\n \n \n
\n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n
\n Every \n \n Hour(s)\n \n {{hour}}\n \n \n
\n
\n At time \n \n \n
\n
\n
\n\n \n \n
\n\n
\n Every \n \n \n \n Day(s)\n \n \n {{monthDay}}\n \n \n \n \n \n Week Day (MON-FRI) \n \n \n
\n\n
\n At time \n \n \n
\n
\n\n
\n\n \n \n
\n\n
\n Every:\n\n \n Monday\n Tuesday\n Wednesday\n Thursday\n Friday\n Saturday\n Sunday\n \n
\n\n
\n At \n \n \n
\n
\n
\n\n \n \n
\n\n \n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n\n \n\n \n\n \n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n \n \n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n\n \n\n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n \n\n
\n\n At time\n\n \n \n
\n\n
\n
\n\n \n \n
\n \n Expression\n \n \n
\n
\n
\n", styles: [".cron-editor-tab-content{margin-top:24px}.cron-editor-radio-group{display:flex;flex-direction:column;margin:15px 0;align-items:flex-start}.cron-editor-radio-button{margin:5px}.cron-editor-pad-line *{padding-left:8px}\n"] }] - }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { backgroundColor: [{ - type: Input - }], color: [{ - type: Input - }], disabled: [{ - type: Input - }], options: [{ - type: Input - }], minutesTab: [{ - type: ViewChild, - args: ['minutesTab'] - }], hourlyTab: [{ - type: ViewChild, - args: ['hourlyTab'] - }], dailyTab: [{ - type: ViewChild, - args: ['dailyTab'] - }], weeklyTab: [{ - type: ViewChild, - args: ['weeklyTab'] - }], monthlyTab: [{ - type: ViewChild, - args: ['monthlyTab'] - }], yearlyTab: [{ - type: ViewChild, - args: ['yearlyTab'] - }], advancedTab: [{ - type: ViewChild, - args: ['advancedTab'] - }] } }); - -class CronEditorModule { - static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } - static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, declarations: [TimePickerComponent, CronGenComponent], imports: [CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule], exports: [TimePickerComponent, CronGenComponent] }); } - static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, imports: [CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule] }); } -} -i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: CronEditorModule, decorators: [{ - type: NgModule, - args: [{ - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - MatTabsModule, - MatListModule, - MatSelectModule, - MatInputModule, - MatRadioModule, - MatCheckboxModule - ], - exports: [TimePickerComponent, CronGenComponent], - declarations: [TimePickerComponent, CronGenComponent] - }] - }] }); - -/* - * Public API Surface - */ - -/** - * Generated bundle index. Do not edit. - */ - -export { CRON_VALUE_ACCESSOR, CronEditorModule, CronGenComponent, Days, DefaultOptions, MonthWeeks, Months, TimePickerComponent }; -//# sourceMappingURL=ngx-cron-editor.mjs.map diff --git a/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs.map b/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs.map deleted file mode 100644 index 073e36f..0000000 --- a/libs/ngx-cron-editor/fesm2022/ngx-cron-editor.mjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ngx-cron-editor.mjs","sources":["../../../../libs/ngx-cron-editor/src/cron-time-picker.component.ts","../../../../libs/ngx-cron-editor/src/cron-time-picker.template.html","../../../../libs/ngx-cron-editor/src/CronOptions.ts","../../../../libs/ngx-cron-editor/src/enums.ts","../../../../libs/ngx-cron-editor/src/cron-editor.component.ts","../../../../libs/ngx-cron-editor/src/cron-editor.template.html","../../../../libs/ngx-cron-editor/src/cron-editor.module.ts","../../../../libs/ngx-cron-editor/public_api.ts","../../../../libs/ngx-cron-editor/ngx-cron-editor.ts"],"sourcesContent":["import {Component, Input, OnInit} from '@angular/core';\nimport {ControlContainer, FormGroup} from '@angular/forms';\n\nexport interface TimePickerModel {\n days: number;\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nfunction* range(start: number, end: number) {\n for (let i = start; i <= end; i++) {\n yield i;\n }\n}\n\n@Component({\n selector: 'cron-time-picker',\n templateUrl: './cron-time-picker.template.html',\n providers: []\n})\nexport class TimePickerComponent implements OnInit {\n @Input() public disabled = false;\n @Input() public use24HourTime = true;\n @Input() public hideHours = false;\n @Input() public hideMinutes = false;\n @Input() public hideSeconds = true;\n\n allForm: FormGroup;\n\n public minutes = [...range(0, 59) ].map(String);\n public seconds = [...range(0, 59) ].map(String);\n public hourTypes = ['AM', 'PM'];\n\n get hours(): string[] {\n return this.use24HourTime ? [... range(0, 23)].map(String) : [... range(0, 12)].map(String);\n }\n\n constructor(public parent: ControlContainer) {}\n\n ngOnInit(): void {\n this.allForm = this.parent.control as FormGroup;\n }\n}\n\n\n","\n\n \n \n Hour(s)\n \n {{hour}}\n \n \n \n\n \n :\n \n Minute(s)\n \n {{minute}}\n \n \n \n\n \n :\n \n Second(s)\n \n {{second}}\n \n \n \n\n \n .\n \n \n {{hourType}}\n \n \n \n\n","export type CronFlavor = 'standard' | 'quartz';\n\nexport interface CronOptions {\n formInputClass?: string;\n formSelectClass?: string;\n formRadioClass?: string;\n formCheckboxClass?: string;\n\n defaultTime: string,\n\n hideMinutesTab: boolean;\n hideHourlyTab: boolean;\n hideDailyTab: boolean;\n hideWeeklyTab: boolean;\n hideMonthlyTab: boolean;\n hideYearlyTab: boolean;\n hideAdvancedTab: boolean;\n hideSpecificWeekDayTab: boolean;\n hideSpecificMonthWeekTab: boolean;\n\n use24HourTime: boolean;\n hideSeconds: boolean;\n\n cronFlavor: CronFlavor;\n}\n\nexport class DefaultOptions implements CronOptions {\n\n cronFlavor: CronFlavor = 'standard';\n defaultTime = '00:00:00';\n hideAdvancedTab = false;\n hideDailyTab = false;\n hideHourlyTab = false;\n hideMinutesTab = false;\n hideMonthlyTab = false;\n hideSeconds = false;\n hideSpecificMonthWeekTab = false;\n hideSpecificWeekDayTab = false;\n hideWeeklyTab = false;\n hideYearlyTab = false;\n use24HourTime = true;\n}\n","\nexport const Days = {\n 'SUN': $localize`Sunday`,\n 'MON': $localize`Monday`,\n 'TUE': $localize`Tuesday`,\n 'WED': $localize`Wednesday`,\n 'THU': $localize`Thursday`,\n 'FRI': $localize`Friday`,\n 'SAT': $localize`Saturday`\n};\n\nexport const MonthWeeks = {\n '#1': $localize`First`,\n '#2': $localize`Second`,\n '#3': $localize`Third`,\n '#4': $localize`Fourth`,\n '#5': $localize`Fifth`,\n 'L': $localize`Last`\n};\n\nexport const Months = {\n 1: $localize`January`,\n 2: $localize`February`,\n 3: $localize`March`,\n 4: $localize`April`,\n 5: $localize`May`,\n 6: $localize`June`,\n 7: $localize`July`,\n 8: $localize`August`,\n 9: $localize`September`,\n 10: $localize`October`,\n 11: $localize`November`,\n 12: $localize`December`\n}\n","import {Component, Input, OnInit, forwardRef, ViewChild, OnDestroy} from '@angular/core';\nimport {CronOptions, DefaultOptions} from './CronOptions';\nimport { Days, MonthWeeks, Months } from './enums';\nimport {ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR, Validators} from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport {MatTab, MatTabChangeEvent} from '@angular/material/tabs';\nimport {debounceTime, Subscription } from 'rxjs';\n\ntype CronType = 'minutely' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'unknown';\n\nconst minutesExp = /\\d+ 0\\/\\d+ \\* 1\\/1 \\* [\\?\\*] \\*/;\nconst hourlyExp = /\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* [\\?\\*] \\*/;\nconst dailyExp = /\\d+ \\d+ \\d+ 1\\/\\d+ \\* [\\?\\*] \\*/;\nconst dailyWeekdayExp = /\\d+ \\d+ \\d+ [\\?\\*] \\* MON-FRI \\*/;\nconst weeklyExp = /\\d+ \\d+ \\d+ [\\?\\*] \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/;\nconst monthlyExp = /\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ [\\?\\*] \\*/;\nconst monthlyWeekdayExp = /\\d+ \\d+ \\d+ [\\?\\*] 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/;\nconst yearlyExp = /\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ [\\?\\*] \\*/;\nconst yearlyMonthWeekExp = /\\d+ \\d+ \\d+ [\\?\\*] \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/;\n\nexport const CRON_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CronGenComponent),\n multi: true,\n};\n\ninterface CronToken {\n val: string;\n inc: string;\n}\n\nfunction parseCronNumberToken(val: string): CronToken {\n const v = val.split('/');\n if (v.length === 1) {\n return {val: v[0], inc: '0'};\n }\n return {val: v[0], inc: v[1]}\n}\n\nfunction* range(start: number, end: number) {\n for (let i = start; i <= end; i++) {\n yield i;\n }\n}\n\n\n@Component({\n selector: 'cron-editor',\n templateUrl: './cron-editor.template.html',\n styleUrls: ['./cron-editor.component.scss'],\n providers: [CRON_VALUE_ACCESSOR]\n})\nexport class CronGenComponent implements OnInit, OnDestroy, ControlValueAccessor {\n public tabIndex = 0;\n\n @Input() public backgroundColor: ThemePalette;\n @Input() public color: ThemePalette;\n\n @Input() public disabled = false;\n @Input() public options: CronOptions = new DefaultOptions();\n\n public activeTab: string;\n public selectOptions = this.getSelectOptions();\n\n @ViewChild('minutesTab')\n minutesTab: MatTab;\n\n @ViewChild('hourlyTab')\n hourlyTab: MatTab;\n\n @ViewChild('dailyTab')\n dailyTab: MatTab;\n\n @ViewChild('weeklyTab')\n weeklyTab: MatTab;\n\n @ViewChild('monthlyTab')\n monthlyTab: MatTab;\n\n @ViewChild('yearlyTab')\n yearlyTab: MatTab;\n\n @ViewChild('advancedTab')\n advancedTab: MatTab;\n\n formSub: Subscription;\n\n touched = false;\n allForm = this.fb.group({\n cronType: ['unknown', Validators.required],\n seconds: ['0'],\n\n minutes: ['0'],\n minutesPer: ['0'],\n\n hours: [this.getAmPmHour('0')],\n hoursPer: ['0'],\n hoursType: [this.getHourType('0')],\n\n days: ['0'], // Days of Month, 1, 2, 31....\n daysPer: ['0'],\n\n months: ['0'],\n monthsInc: ['0'],\n\n day: ['MON'], // Day of week '1' or 'MON;\n monthsWeek: ['#1'],\n\n weekdaysOnly: [false],\n specificWeekDay: [false],\n specificMonthWeek: [false],\n MON: [true],\n TUE: [true],\n WED: [true],\n THU: [true],\n FRI: [true],\n SAT: [true],\n SUN: [true],\n expression: ['0 0 0 0 0']\n });\n\n /*\n * ControlValueAccessor\n */\n public onChange: (value) => void\n public onTouched: () => void;\n\n\n get isCronFlavorQuartz() {\n return this.options.cronFlavor === 'quartz';\n }\n\n get isCronFlavorStandard() {\n return this.options.cronFlavor === 'standard';\n }\n\n get yearDefaultChar() {\n return this.options.cronFlavor === 'quartz' ? '*' : '';\n }\n\n get weekDayDefaultChar() {\n return this.options.cronFlavor === 'quartz' ? '?' : '*';\n }\n\n get monthDayDefaultChar() {\n return this.options.cronFlavor === 'quartz' ? '?' : '*';\n }\n\n constructor(private fb: FormBuilder) {\n }\n\n /* Update the cron output to that of the selected tab.\n * The cron output value is updated whenever a form is updated. To make it change in response to tab selection, we simply reset\n * the value of the form that goes into focus.\n * We cannot rely on the index of the tab, as the hide options could hide tabs and\n * then the index dynamically changes based on the hidden tab.*/\n onTabChange(tabChangeEvent: MatTabChangeEvent) {\n const currentTab = tabChangeEvent.tab;\n let x: CronType;\n\n switch (currentTab) {\n case this.minutesTab:\n x = 'minutely';\n break;\n case this.hourlyTab:\n x = 'hourly';\n break;\n case this.dailyTab:\n x = 'daily';\n break;\n case this.weeklyTab:\n x = 'weekly';\n break;\n case this.monthlyTab:\n x = 'monthly';\n break;\n case this.yearlyTab:\n x = 'yearly';\n break;\n case this.advancedTab:\n x = 'unknown';\n break;\n default:\n throw (new Error('Invalid tab selected'));\n }\n\n this.allForm.controls.cronType.setValue(x);\n }\n\n public async ngOnInit() {\n this.formSub = this.allForm.valueChanges.pipe(debounceTime(50)).subscribe(value => {\n\n this.markAsTouched();\n const cron = this.computeCron();\n // this.allForm.controls.expression.setValue(cron, {emitEvent: false});\n this.onChange(cron);\n });\n }\n\n ngOnDestroy() {\n this.formSub.unsubscribe();\n }\n\n private computeCron(): string {\n\n let cron: string;\n switch (this.allForm.value.cronType) {\n case 'minutely':\n cron = this.computeMinutesCron();\n break;\n case 'hourly':\n cron = this.computeHourlyCron();\n this.tabIndex = 1;\n break;\n case 'daily':\n cron = this.computeDailyCron();\n this.tabIndex = 2;\n break;\n case 'weekly':\n cron = this.computeWeeklyCron();\n this.tabIndex = 3;\n break;\n case 'monthly':\n cron = this.computeMonthlyCron();\n this.tabIndex = 4;\n break;\n case 'yearly':\n cron = this.computeYearlyCron();\n this.tabIndex = 5;\n break;\n case 'unknown':\n cron = this.computeAdvancedExpression();\n this.tabIndex = 6;\n break;\n default:\n throw Error($localize`Unknown cron type ${this.allForm.value.cronType}`);\n }\n return cron;\n }\n\n private computeMinutesCron(): string {\n\n const state = this.allForm.value;\n\n // tslint:disable-next-line:max-line-length\n return `${this.isCronFlavorQuartz ? state.seconds : ''} 0/${state.minutesPer} * 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n }\n\n private computeHourlyCron(): string {\n\n const state = this.allForm.value;\n\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} 0/${state.hoursPer} 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n }\n\n private computeDailyCron(): string {\n if (this.allForm.value.weekdaysOnly) {\n return this.computeEveryWeekdayCron();\n }\n return this.computeEveryDaysCron();\n }\n\n private computeEveryDaysCron(): string {\n\n const state = this.allForm.value;\n\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} 1/${state.daysPer} * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n\n }\n\n private computeEveryWeekdayCron(): string {\n\n const state = this.allForm.value;\n\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * MON-FRI ${this.yearDefaultChar}`.trim();\n }\n\n\n private computeWeeklyCron(): string {\n\n const state = this.allForm.value;\n const days = this.selectOptions.days\n .reduce((acc, day) => state[day] ? acc.concat([day]) : acc, [])\n .join(',') || '*';\n\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * ${days} ${this.yearDefaultChar}`.trim();\n }\n\n private computeMonthlyCron(): string {\n\n const state = this.allForm.value;\n\n if (state.specificWeekDay) {\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} 1/${state.monthsInc} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim();\n }\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} 1/${state.monthsInc} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n }\n\n private computeYearlyCron(): string {\n const state = this.allForm.value;\n\n if (state.specificMonthWeek) {\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} ${state.months} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim();\n }\n return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} ${state.months} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n }\n\n private computeAdvancedExpression(): string {\n\n const state = this.allForm.value;\n return state.expression;\n }\n\n public dayDisplay(day: string): string {\n return Days[day];\n }\n\n public monthWeekDisplay(monthWeekNumber: string): string {\n return MonthWeeks[monthWeekNumber];\n }\n\n public monthDisplay(month: string): string {\n return Months[parseInt(month, 10)];\n }\n\n public monthDayDisplay(month: string | number): string {\n\n if (typeof month === 'number') {\n return `${month}${this.getOrdinalSuffix(month)}`\n }\n\n if (month === 'L') {\n return $localize`Last Day`;\n } else if (month === 'LW') {\n return $localize`Last Weekday`;\n } else if (month === '1W') {\n return $localize`First Weekday`;\n } else {\n return `${month}${this.getOrdinalSuffix(month)}`;\n }\n }\n\n private getAmPmHour(hour: string): string {\n\n if (this.options.use24HourTime) {\n return hour;\n }\n return ((parseInt(hour, 10) + 11) % 12 + 1).toString()\n }\n\n // Return the AM or PM component of a clocktime, or null if 24-hour format is used.\n private getHourType(hour: string): string | null {\n if (this.options.use24HourTime) {\n return null;\n }\n\n if (parseInt(hour, 10) >= 12) {\n return 'PM';\n }\n return 'AM';\n }\n\n private hourToCron(hour: string, hourType: string): string {\n if (this.options.use24HourTime) {\n return hour;\n } else {\n return hourType === 'AM' ? (hour === '12' ? '0' : hour) : (hour === '12' ? '12' : (parseInt(hour, 10) + 12).toString());\n }\n }\n\n private handleModelChange(cron: string) {\n\n if (!this.cronIsValid(cron)) {\n if (this.isCronFlavorQuartz) {\n throw new Error($localize`Invalid cron expression, there must be 6 or 7 segments`);\n }\n\n if (this.isCronFlavorStandard) {\n throw new Error($localize`Invalid cron expression, there must be 5 segments`);\n }\n }\n\n // Store original cron expression here.\n this.allForm.controls.expression.setValue(cron);\n\n // Normalize cron so that second segment is included.\n if (cron.split(' ').length === 5 && this.isCronFlavorStandard) {\n cron = `0 ${cron} *`;\n }\n\n // Parse cron tokens\n const t = cron.split(' ');\n\n // Seconds\n this.allForm.controls.seconds.setValue(t[0], {emitEvent: false})\n\n // Minutes\n let x = parseCronNumberToken(t[1]);\n this.allForm.controls.minutesPer.setValue(x.inc, {emitEvent: false});\n this.allForm.controls.minutes.setValue(x.val);\n\n // Hours\n x = parseCronNumberToken(t[2])\n this.allForm.controls.hoursPer.setValue(x.inc);\n this.allForm.controls.hours.setValue(x.val);\n this.allForm.controls.hoursType.setValue(this.getHourType(this.allForm.value.hours), {emitEvent: false});\n\n // Day of Month\n x = parseCronNumberToken(t[3])\n this.allForm.controls.days.setValue(x.val, {emitEvent: false});\n this.allForm.controls.daysPer.setValue(x.inc, {emitEvent: false});\n\n // Month\n x = parseCronNumberToken(t[4])\n this.allForm.controls.months.setValue(x.val, {emitEvent: false});\n this.allForm.controls.monthsInc.setValue(x.inc, { emitEvent: false });\n\n // Day of Week\n this.allForm.controls.SUN.setValue(t[5].match(/(? 1 && value.charAt(value.length - 2) === '1') {\n return 'th';\n }\n\n // Check last digit: 21st, 22nd, 23rd, 24th, 25t, etc.\n switch (value.charAt(value.length - 1)) {\n case '1':\n return 'st';\n case '2':\n return 'nd';\n case '3':\n return 'rd';\n default:\n return 'th';\n }\n }\n\n private getSelectOptions() {\n return {\n months: this.getRange(1, 12).map(String),\n monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n days: ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'],\n minutes: this.getRange(0, 59).map(String),\n fullMinutes: this.getRange(0, 59).map(String),\n seconds: this.getRange(0, 59).map(String),\n hours: this.getRange(1, 23).map(String),\n monthDays: this.getRange(1, 31).map(String),\n monthDaysWithLasts: ['1W', ...[...this.getRange(1, 31).map(String)], 'LW', 'L'],\n monthDaysWithOutLasts: [...[...this.getRange(1, 31).map(String)]],\n hourTypes: ['AM', 'PM']\n };\n }\n\n private getRange(start: number, end: number): number[] {\n const length = end - start + 1;\n return Array.apply(null, Array(length)).map((_, i) => i + start);\n }\n\n\n\n\n writeValue(obj: string | null): void {\n if (obj === null) {\n return\n }\n\n this.handleModelChange(obj);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n}\n"," \n\n \n \n
\n\n
\n Every\n \n Minute(s)\n \n {{minute}}\n \n \n
\n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n
\n Every \n \n Hour(s)\n \n {{hour}}\n \n \n
\n
\n At time \n \n \n
\n
\n
\n\n \n \n
\n\n
\n Every \n \n \n \n Day(s)\n \n \n {{monthDay}}\n \n \n \n \n \n Week Day (MON-FRI) \n \n \n
\n\n
\n At time \n \n \n
\n
\n\n
\n\n \n \n
\n\n
\n Every:\n\n \n Monday\n Tuesday\n Wednesday\n Thursday\n Friday\n Saturday\n Sunday\n \n
\n\n
\n At \n \n \n
\n
\n
\n\n \n \n
\n\n \n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n\n \n\n \n\n \n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of every\n\n \n Month\n \n \n {{month}}\n \n \n \n \n \n\n
\n At time\n \n \n
\n
\n
\n\n \n \n
\n \n \n\n On the\n\n \n Day\n \n \n {{monthDayDisplay(monthDay)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n\n \n\n On the\n\n \n Week\n \n \n {{monthWeekDisplay(monthWeek)}}\n \n \n \n\n \n Day\n \n \n {{dayDisplay(day)}}\n \n \n \n\n of\n\n \n Month\n \n \n {{monthDisplay(month)}}\n \n \n \n\n \n \n\n
\n\n At time\n\n \n \n
\n\n
\n
\n\n \n \n
\n \n Expression\n \n \n
\n
\n
\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TimePickerComponent } from './cron-time-picker.component';\nimport { CronGenComponent } from './cron-editor.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatTabsModule,\n MatListModule,\n MatSelectModule,\n MatInputModule,\n MatRadioModule,\n MatCheckboxModule\n ],\n exports: [TimePickerComponent, CronGenComponent],\n declarations: [TimePickerComponent, CronGenComponent]\n})\nexport class CronEditorModule { }\n","/*\n * Public API Surface\n */\n\nexport * from './src/cron-editor.module';\nexport * from './src/CronOptions';\nexport * from './src/enums';\nexport * from './src/cron-editor.component';\nexport * from './src/cron-time-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["range","i3","i4","i5","i6","i10.TimePickerComponent"],"mappings":"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"} \ No newline at end of file diff --git a/libs/ngx-cron-editor/index.d.ts b/libs/ngx-cron-editor/index.d.ts deleted file mode 100644 index fb1db5e..0000000 --- a/libs/ngx-cron-editor/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Generated bundle index. Do not edit. - */ -/// -export * from './public_api'; diff --git a/libs/ngx-cron-editor/package.json b/libs/ngx-cron-editor/package.json deleted file mode 100644 index b61a6d4..0000000 --- a/libs/ngx-cron-editor/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "description": "A cron expression generator for Angular 15+", - "name": "ngx-cron-editor", - "version": "0.9.0", - "repository": { - "type": "git", - "url": "git://github.com/haavardj/ngx-cron-editor" - }, - "author": { - "name": "Håvard Dagenborg", - "email": "haavardj@dagenborg.net" - }, - "contributors": [ - "Claudiu Constantin", - "Eduardo Sarmiento", - "Aleksey Yermolenko", - "Ruslan Lekhman (https://github.com/lekhmanrus)", - "Hannes Oswald " - ], - "keywords": [ - "angular", - "cron", - "cron-expression", - "angular-cli", - "quartz" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/haavardj/ngx-cron-editor/issues" - }, - "homepage": "https://github.com/haavardj/ngx-cron-editor", - "peerDependencies": { - "@angular/common": ">=15.0.0 <19.0.0", - "@angular/core": ">=15.0.0 <19.0.0", - "@angular/forms": ">=15.0.0 <19.0.0", - "@angular/material": ">=15.0.0 <19.0.0", - "@angular/cdk": ">=15.0.0 <19.0.0" - }, - "dependencies": { - "tslib": "^2.3.0" - }, - "sideEffects": false, - "exports": { - "./theming": { - "sass": "./src/cron-editor-theme.scss" - }, - "./package.json": { - "default": "./package.json" - }, - ".": { - "types": "./index.d.ts", - "esm2022": "./esm2022/ngx-cron-editor.mjs", - "esm": "./esm2022/ngx-cron-editor.mjs", - "default": "./fesm2022/ngx-cron-editor.mjs" - } - }, - "module": "fesm2022/ngx-cron-editor.mjs", - "typings": "index.d.ts" -} \ No newline at end of file diff --git a/libs/ngx-cron-editor/public_api.d.ts b/libs/ngx-cron-editor/public_api.d.ts deleted file mode 100644 index 35029d1..0000000 --- a/libs/ngx-cron-editor/public_api.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './src/cron-editor.module'; -export * from './src/CronOptions'; -export * from './src/enums'; -export * from './src/cron-editor.component'; -export * from './src/cron-time-picker.component'; diff --git a/libs/ngx-cron-editor/src/CronOptions.d.ts b/libs/ngx-cron-editor/src/CronOptions.d.ts deleted file mode 100644 index 49a3230..0000000 --- a/libs/ngx-cron-editor/src/CronOptions.d.ts +++ /dev/null @@ -1,35 +0,0 @@ -export type CronFlavor = 'standard' | 'quartz'; -export interface CronOptions { - formInputClass?: string; - formSelectClass?: string; - formRadioClass?: string; - formCheckboxClass?: string; - defaultTime: string; - hideMinutesTab: boolean; - hideHourlyTab: boolean; - hideDailyTab: boolean; - hideWeeklyTab: boolean; - hideMonthlyTab: boolean; - hideYearlyTab: boolean; - hideAdvancedTab: boolean; - hideSpecificWeekDayTab: boolean; - hideSpecificMonthWeekTab: boolean; - use24HourTime: boolean; - hideSeconds: boolean; - cronFlavor: CronFlavor; -} -export declare class DefaultOptions implements CronOptions { - cronFlavor: CronFlavor; - defaultTime: string; - hideAdvancedTab: boolean; - hideDailyTab: boolean; - hideHourlyTab: boolean; - hideMinutesTab: boolean; - hideMonthlyTab: boolean; - hideSeconds: boolean; - hideSpecificMonthWeekTab: boolean; - hideSpecificWeekDayTab: boolean; - hideWeeklyTab: boolean; - hideYearlyTab: boolean; - use24HourTime: boolean; -} diff --git a/libs/ngx-cron-editor/src/cron-editor-theme.scss b/libs/ngx-cron-editor/src/cron-editor-theme.scss deleted file mode 100644 index 74c4105..0000000 --- a/libs/ngx-cron-editor/src/cron-editor-theme.scss +++ /dev/null @@ -1,9 +0,0 @@ -@use '@angular/material' as mat; - -@mixin cron-editor-theme($theme) { - // your custom component's selector - .cron-editor { - background-color: mat.get-theme-color($theme, primary); - border-color: mat.get-theme-color($theme, secondary, 40); - } -} diff --git a/libs/ngx-cron-editor/src/cron-editor.component.d.ts b/libs/ngx-cron-editor/src/cron-editor.component.d.ts deleted file mode 100644 index dc3e4b3..0000000 --- a/libs/ngx-cron-editor/src/cron-editor.component.d.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { OnInit, OnDestroy } from '@angular/core'; -import { CronOptions } from './CronOptions'; -import { ControlValueAccessor, FormBuilder } from '@angular/forms'; -import { ThemePalette } from '@angular/material/core'; -import { MatTab, MatTabChangeEvent } from '@angular/material/tabs'; -import { Subscription } from 'rxjs'; -import * as i0 from "@angular/core"; -export declare const CRON_VALUE_ACCESSOR: any; -export declare class CronGenComponent implements OnInit, OnDestroy, ControlValueAccessor { - private fb; - tabIndex: number; - backgroundColor: ThemePalette; - color: ThemePalette; - disabled: boolean; - options: CronOptions; - activeTab: string; - selectOptions: { - months: string[]; - monthWeeks: string[]; - days: string[]; - minutes: string[]; - fullMinutes: string[]; - seconds: string[]; - hours: string[]; - monthDays: string[]; - monthDaysWithLasts: string[]; - monthDaysWithOutLasts: string[]; - hourTypes: string[]; - }; - minutesTab: MatTab; - hourlyTab: MatTab; - dailyTab: MatTab; - weeklyTab: MatTab; - monthlyTab: MatTab; - yearlyTab: MatTab; - advancedTab: MatTab; - formSub: Subscription; - touched: boolean; - allForm: import("@angular/forms").FormGroup<{ - cronType: import("@angular/forms").FormControl<"unknown" | "minutely" | "hourly" | "daily" | "weekly" | "monthly" | "yearly">; - seconds: import("@angular/forms").FormControl; - minutes: import("@angular/forms").FormControl; - minutesPer: import("@angular/forms").FormControl; - hours: import("@angular/forms").FormControl; - hoursPer: import("@angular/forms").FormControl; - hoursType: import("@angular/forms").FormControl; - days: import("@angular/forms").FormControl; - daysPer: import("@angular/forms").FormControl; - months: import("@angular/forms").FormControl; - monthsInc: import("@angular/forms").FormControl; - day: import("@angular/forms").FormControl; - monthsWeek: import("@angular/forms").FormControl; - weekdaysOnly: import("@angular/forms").FormControl; - specificWeekDay: import("@angular/forms").FormControl; - specificMonthWeek: import("@angular/forms").FormControl; - MON: import("@angular/forms").FormControl; - TUE: import("@angular/forms").FormControl; - WED: import("@angular/forms").FormControl; - THU: import("@angular/forms").FormControl; - FRI: import("@angular/forms").FormControl; - SAT: import("@angular/forms").FormControl; - SUN: import("@angular/forms").FormControl; - expression: import("@angular/forms").FormControl; - }>; - onChange: (value: any) => void; - onTouched: () => void; - get isCronFlavorQuartz(): boolean; - get isCronFlavorStandard(): boolean; - get yearDefaultChar(): "*" | ""; - get weekDayDefaultChar(): "*" | "?"; - get monthDayDefaultChar(): "*" | "?"; - constructor(fb: FormBuilder); - onTabChange(tabChangeEvent: MatTabChangeEvent): void; - ngOnInit(): Promise; - ngOnDestroy(): void; - private computeCron; - private computeMinutesCron; - private computeHourlyCron; - private computeDailyCron; - private computeEveryDaysCron; - private computeEveryWeekdayCron; - private computeWeeklyCron; - private computeMonthlyCron; - private computeYearlyCron; - private computeAdvancedExpression; - dayDisplay(day: string): string; - monthWeekDisplay(monthWeekNumber: string): string; - monthDisplay(month: string): string; - monthDayDisplay(month: string | number): string; - private getAmPmHour; - private getHourType; - private hourToCron; - private handleModelChange; - private cronIsValid; - private getOrdinalSuffix; - private getSelectOptions; - private getRange; - writeValue(obj: string | null): void; - registerOnChange(fn: any): void; - registerOnTouched(fn: any): void; - setDisabledState(isDisabled: boolean): void; - markAsTouched(): void; - static ɵfac: i0.ɵɵFactoryDeclaration; - static ɵcmp: i0.ɵɵComponentDeclaration; -} diff --git a/libs/ngx-cron-editor/src/cron-editor.component.scss b/libs/ngx-cron-editor/src/cron-editor.component.scss deleted file mode 100644 index f6aeebf..0000000 --- a/libs/ngx-cron-editor/src/cron-editor.component.scss +++ /dev/null @@ -1,19 +0,0 @@ -.cron-editor-tab-content { - margin-top: 24px; -} - -.cron-editor-radio-group { - display: flex; - flex-direction: column; - margin: 15px 0; - align-items: flex-start; -} - -.cron-editor-radio-button { - margin: 5px; -} - -.cron-editor-pad-line * { - padding-left: 8px; - -} diff --git a/libs/ngx-cron-editor/src/cron-editor.module.d.ts b/libs/ngx-cron-editor/src/cron-editor.module.d.ts deleted file mode 100644 index f7626a8..0000000 --- a/libs/ngx-cron-editor/src/cron-editor.module.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as i0 from "@angular/core"; -import * as i1 from "./cron-time-picker.component"; -import * as i2 from "./cron-editor.component"; -import * as i3 from "@angular/common"; -import * as i4 from "@angular/forms"; -import * as i5 from "@angular/material/tabs"; -import * as i6 from "@angular/material/list"; -import * as i7 from "@angular/material/select"; -import * as i8 from "@angular/material/input"; -import * as i9 from "@angular/material/radio"; -import * as i10 from "@angular/material/checkbox"; -export declare class CronEditorModule { - static ɵfac: i0.ɵɵFactoryDeclaration; - static ɵmod: i0.ɵɵNgModuleDeclaration; - static ɵinj: i0.ɵɵInjectorDeclaration; -} diff --git a/libs/ngx-cron-editor/src/cron-time-picker.component.d.ts b/libs/ngx-cron-editor/src/cron-time-picker.component.d.ts deleted file mode 100644 index 00075aa..0000000 --- a/libs/ngx-cron-editor/src/cron-time-picker.component.d.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { OnInit } from '@angular/core'; -import { ControlContainer, FormGroup } from '@angular/forms'; -import * as i0 from "@angular/core"; -export interface TimePickerModel { - days: number; - hours: number; - minutes: number; - seconds: number; -} -export declare class TimePickerComponent implements OnInit { - parent: ControlContainer; - disabled: boolean; - use24HourTime: boolean; - hideHours: boolean; - hideMinutes: boolean; - hideSeconds: boolean; - allForm: FormGroup; - minutes: string[]; - seconds: string[]; - hourTypes: string[]; - get hours(): string[]; - constructor(parent: ControlContainer); - ngOnInit(): void; - static ɵfac: i0.ɵɵFactoryDeclaration; - static ɵcmp: i0.ɵɵComponentDeclaration; -} diff --git a/libs/ngx-cron-editor/src/enums.d.ts b/libs/ngx-cron-editor/src/enums.d.ts deleted file mode 100644 index 02ff8a7..0000000 --- a/libs/ngx-cron-editor/src/enums.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -export declare const Days: { - SUN: string; - MON: string; - TUE: string; - WED: string; - THU: string; - FRI: string; - SAT: string; -}; -export declare const MonthWeeks: { - '#1': string; - '#2': string; - '#3': string; - '#4': string; - '#5': string; - L: string; -}; -export declare const Months: { - 1: string; - 2: string; - 3: string; - 4: string; - 5: string; - 6: string; - 7: string; - 8: string; - 9: string; - 10: string; - 11: string; - 12: string; -};