@acorex/core 7.1.0 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/index.d.ts +5 -5
- package/config/public-api.d.ts +1 -1
- package/config/src/configs.d.ts +9 -9
- package/dateTime/index.d.ts +5 -5
- package/dateTime/public-api.d.ts +5 -5
- package/dateTime/src/datetime.class.d.ts +100 -100
- package/dateTime/src/datetime.module.d.ts +8 -8
- package/dateTime/src/datetime.pipe.d.ts +8 -8
- package/dateTime/src/georgian.calendar.d.ts +20 -20
- package/dateTime/src/jalali.calendar.d.ts +35 -35
- package/esm2022/acorex-core.mjs +4 -4
- package/esm2022/config/acorex-core-config.mjs +4 -4
- package/esm2022/config/public-api.mjs +1 -1
- package/esm2022/config/src/configs.mjs +25 -24
- package/esm2022/dateTime/acorex-core-dateTime.mjs +4 -4
- package/esm2022/dateTime/public-api.mjs +5 -5
- package/esm2022/dateTime/src/datetime.class.mjs +294 -294
- package/esm2022/dateTime/src/datetime.module.mjs +40 -39
- package/esm2022/dateTime/src/datetime.pipe.mjs +27 -26
- package/esm2022/dateTime/src/georgian.calendar.mjs +186 -186
- package/esm2022/dateTime/src/jalali.calendar.mjs +356 -356
- package/esm2022/events/acorex-core-events.mjs +4 -4
- package/esm2022/events/public-api.mjs +1 -1
- package/esm2022/events/src/event.service.mjs +35 -34
- package/esm2022/file/acorex-core-file.mjs +4 -4
- package/esm2022/file/public-api.mjs +4 -4
- package/esm2022/file/src/file-download-ref.class.mjs +12 -12
- package/esm2022/file/src/file-download-result.class.mjs +46 -46
- package/esm2022/file/src/file-upload-ref.class.mjs +12 -12
- package/esm2022/file/src/file.service.mjs +103 -102
- package/esm2022/http/acorex-core-http.mjs +4 -4
- package/esm2022/http/public-api.mjs +5 -5
- package/esm2022/http/src/http-error.class.mjs +1 -1
- package/esm2022/http/src/http-events.interceptor.mjs +2 -2
- package/esm2022/http/src/http-request.class.mjs +1 -1
- package/esm2022/http/src/http-result.class.mjs +24 -24
- package/esm2022/http/src/http.module.mjs +30 -29
- package/esm2022/http/src/http.service.mjs +152 -151
- package/esm2022/image/acorex-core-image.mjs +4 -4
- package/esm2022/image/public-api.mjs +1 -1
- package/esm2022/image/src/image.service.mjs +44 -43
- package/esm2022/pipes/acorex-core-pipes.mjs +4 -4
- package/esm2022/pipes/public-api.mjs +2 -2
- package/esm2022/pipes/src/pipes.module.mjs +20 -19
- package/esm2022/pipes/src/safe.pipe.mjs +32 -31
- package/esm2022/platform/acorex-core-platform.mjs +4 -4
- package/esm2022/platform/public-api.mjs +1 -1
- package/esm2022/platform/src/platform.service.mjs +152 -159
- package/esm2022/public-api.mjs +4 -4
- package/esm2022/translation/acorex-core-translation.mjs +4 -4
- package/esm2022/translation/public-api.mjs +3 -3
- package/esm2022/translation/src/translation.module.mjs +19 -18
- package/esm2022/translation/src/translator.mjs +44 -43
- package/esm2022/translation/src/translator.pipe.mjs +16 -15
- package/esm2022/utils/acorex-core-utils.mjs +4 -4
- package/esm2022/utils/public-api.mjs +5 -5
- package/esm2022/utils/src/color-util.mjs +114 -114
- package/esm2022/utils/src/drawing-util.mjs +29 -29
- package/esm2022/utils/src/html-util.mjs +15 -15
- package/esm2022/utils/src/object-util.mjs +38 -38
- package/esm2022/utils/src/string-util.mjs +18 -18
- package/events/index.d.ts +5 -5
- package/events/public-api.d.ts +1 -1
- package/events/src/event.service.d.ts +9 -9
- package/fesm2022/acorex-core-config.mjs +22 -22
- package/fesm2022/acorex-core-config.mjs.map +1 -1
- package/fesm2022/acorex-core-dateTime.mjs +882 -882
- package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
- package/fesm2022/acorex-core-events.mjs +32 -32
- package/fesm2022/acorex-core-events.mjs.map +1 -1
- package/fesm2022/acorex-core-file.mjs +162 -162
- package/fesm2022/acorex-core-file.mjs.map +1 -1
- package/fesm2022/acorex-core-http.mjs +190 -190
- package/fesm2022/acorex-core-http.mjs.map +1 -1
- package/fesm2022/acorex-core-image.mjs +41 -41
- package/fesm2022/acorex-core-image.mjs.map +1 -1
- package/fesm2022/acorex-core-pipes.mjs +41 -41
- package/fesm2022/acorex-core-pipes.mjs.map +1 -1
- package/fesm2022/acorex-core-platform.mjs +147 -155
- package/fesm2022/acorex-core-platform.mjs.map +1 -1
- package/fesm2022/acorex-core-translation.mjs +63 -63
- package/fesm2022/acorex-core-translation.mjs.map +1 -1
- package/fesm2022/acorex-core-utils.mjs +209 -209
- package/fesm2022/acorex-core.mjs +5 -5
- package/file/index.d.ts +5 -5
- package/file/public-api.d.ts +4 -4
- package/file/src/file-download-ref.class.d.ts +6 -6
- package/file/src/file-download-result.class.d.ts +8 -8
- package/file/src/file-upload-ref.class.d.ts +5 -5
- package/file/src/file.service.d.ts +18 -18
- package/http/index.d.ts +5 -5
- package/http/public-api.d.ts +5 -5
- package/http/src/http-error.class.d.ts +7 -7
- package/http/src/http-events.interceptor.d.ts +10 -10
- package/http/src/http-request.class.d.ts +14 -14
- package/http/src/http-result.class.d.ts +11 -11
- package/http/src/http.module.d.ts +8 -8
- package/http/src/http.service.d.ts +23 -23
- package/image/index.d.ts +5 -5
- package/image/public-api.d.ts +1 -1
- package/image/src/image.service.d.ts +12 -12
- package/index.d.ts +5 -5
- package/package.json +7 -7
- package/pipes/index.d.ts +5 -5
- package/pipes/public-api.d.ts +2 -2
- package/pipes/src/pipes.module.d.ts +8 -8
- package/pipes/src/safe.pipe.d.ts +10 -10
- package/platform/index.d.ts +5 -5
- package/platform/public-api.d.ts +1 -1
- package/platform/src/platform.service.d.ts +26 -26
- package/public-api.d.ts +1 -1
- package/translation/index.d.ts +5 -5
- package/translation/public-api.d.ts +3 -3
- package/translation/src/translation.module.d.ts +7 -7
- package/translation/src/translator.d.ts +11 -11
- package/translation/src/translator.pipe.d.ts +7 -7
- package/utils/index.d.ts +5 -5
- package/utils/public-api.d.ts +5 -5
- package/utils/src/color-util.d.ts +23 -23
- package/utils/src/drawing-util.d.ts +18 -18
- package/utils/src/html-util.d.ts +4 -4
- package/utils/src/object-util.d.ts +4 -4
- package/utils/src/string-util.d.ts +6 -6
@@ -1,39 +1,40 @@
|
|
1
|
-
import { NgModule } from '@angular/core';
|
2
|
-
import { AXConfig } from '@acorex/core/config';
|
3
|
-
import { AXDateTimePipe } from './datetime.pipe';
|
4
|
-
import { GeorgianCalendar } from './georgian.calendar';
|
5
|
-
import { JalaliCalendar } from './jalali.calendar';
|
6
|
-
import * as i0 from "@angular/core";
|
7
|
-
|
8
|
-
constructor() {
|
9
|
-
AXConfig.set({
|
10
|
-
dateTime: {
|
11
|
-
calendars: {
|
12
|
-
jalali: {
|
13
|
-
"class": new JalaliCalendar(),
|
14
|
-
weekend: [6, 7]
|
15
|
-
},
|
16
|
-
gregorian: {
|
17
|
-
"class": new GeorgianCalendar(),
|
18
|
-
weekend: [7, 1]
|
19
|
-
}
|
20
|
-
},
|
21
|
-
calendar: 'gregorian',
|
22
|
-
shortDateFormat: 'DDDD, d MMM yyyy'
|
23
|
-
}
|
24
|
-
});
|
25
|
-
}
|
26
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
27
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule, declarations: [AXDateTimePipe], exports: [AXDateTimePipe] });
|
28
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule });
|
29
|
-
}
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { AXConfig } from '@acorex/core/config';
|
3
|
+
import { AXDateTimePipe } from './datetime.pipe';
|
4
|
+
import { GeorgianCalendar } from './georgian.calendar';
|
5
|
+
import { JalaliCalendar } from './jalali.calendar';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
class AXDateTimeModule {
|
8
|
+
constructor() {
|
9
|
+
AXConfig.set({
|
10
|
+
dateTime: {
|
11
|
+
calendars: {
|
12
|
+
jalali: {
|
13
|
+
"class": new JalaliCalendar(),
|
14
|
+
weekend: [6, 7]
|
15
|
+
},
|
16
|
+
gregorian: {
|
17
|
+
"class": new GeorgianCalendar(),
|
18
|
+
weekend: [7, 1]
|
19
|
+
}
|
20
|
+
},
|
21
|
+
calendar: 'gregorian',
|
22
|
+
shortDateFormat: 'DDDD, d MMM yyyy'
|
23
|
+
}
|
24
|
+
});
|
25
|
+
}
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
27
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule, declarations: [AXDateTimePipe], exports: [AXDateTimePipe] });
|
28
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule });
|
29
|
+
}
|
30
|
+
export { AXDateTimeModule };
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimeModule, decorators: [{
|
32
|
+
type: NgModule,
|
33
|
+
args: [{
|
34
|
+
imports: [],
|
35
|
+
exports: [AXDateTimePipe],
|
36
|
+
declarations: [AXDateTimePipe],
|
37
|
+
providers: [],
|
38
|
+
}]
|
39
|
+
}], ctorParameters: function () { return []; } });
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvcmUvZGF0ZVRpbWUvc3JjL2RhdGV0aW1lLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUduRCxNQU1hLGdCQUFnQjtJQUV6QjtRQUNJLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDVCxRQUFRLEVBQUU7Z0JBQ04sU0FBUyxFQUFFO29CQUNQLE1BQU0sRUFBRTt3QkFDSixPQUFPLEVBQUUsSUFBSSxjQUFjLEVBQUU7d0JBQzdCLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2xCO29CQUNELFNBQVMsRUFBRTt3QkFDUCxPQUFPLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRTt3QkFDL0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDbEI7aUJBQ0o7Z0JBQ0QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLGVBQWUsRUFBRSxrQkFBa0I7YUFDdEM7U0FDSixDQUFDLENBQUM7SUFFUCxDQUFDO3VHQXBCUSxnQkFBZ0I7d0dBQWhCLGdCQUFnQixpQkFIVixjQUFjLGFBRG5CLGNBQWM7d0dBSWYsZ0JBQWdCOztTQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFONUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsRUFBRTtvQkFDWCxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUM7b0JBQ3pCLFlBQVksRUFBRSxDQUFDLGNBQWMsQ0FBQztvQkFDOUIsU0FBUyxFQUFFLEVBQUU7aUJBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQVhDb25maWcgfSBmcm9tICdAYWNvcmV4L2NvcmUvY29uZmlnJztcclxuaW1wb3J0IHsgQVhEYXRlVGltZVBpcGUgfSBmcm9tICcuL2RhdGV0aW1lLnBpcGUnO1xyXG5pbXBvcnQgeyBHZW9yZ2lhbkNhbGVuZGFyIH0gZnJvbSAnLi9nZW9yZ2lhbi5jYWxlbmRhcic7XHJcbmltcG9ydCB7IEphbGFsaUNhbGVuZGFyIH0gZnJvbSAnLi9qYWxhbGkuY2FsZW5kYXInO1xyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXSxcclxuICAgIGV4cG9ydHM6IFtBWERhdGVUaW1lUGlwZV0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtBWERhdGVUaW1lUGlwZV0sXHJcbiAgICBwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZU1vZHVsZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgQVhDb25maWcuc2V0KHtcclxuICAgICAgICAgICAgZGF0ZVRpbWU6IHtcclxuICAgICAgICAgICAgICAgIGNhbGVuZGFyczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGphbGFsaToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IG5ldyBKYWxhbGlDYWxlbmRhcigpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWVrZW5kOiBbNiwgN11cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdyZWdvcmlhbjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzXCI6IG5ldyBHZW9yZ2lhbkNhbGVuZGFyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtlbmQ6IFs3LCAxXVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjYWxlbmRhcjogJ2dyZWdvcmlhbicsXHJcbiAgICAgICAgICAgICAgICBzaG9ydERhdGVGb3JtYXQ6ICdERERELCBkIE1NTSB5eXl5J1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
@@ -1,26 +1,27 @@
|
|
1
|
-
import { Pipe } from '@angular/core';
|
2
|
-
import { AXConfig } from '@acorex/core/config';
|
3
|
-
import { AXDateTime } from './datetime.class';
|
4
|
-
import * as i0 from "@angular/core";
|
5
|
-
|
6
|
-
constructor() { }
|
7
|
-
transform(value, format, calendar) {
|
8
|
-
if (value == null) {
|
9
|
-
return '';
|
10
|
-
}
|
11
|
-
const date = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);
|
12
|
-
if (!format) {
|
13
|
-
return date.format(AXConfig.get('dateTime.shortDateFormat'));
|
14
|
-
}
|
15
|
-
else {
|
16
|
-
return date.format(format);
|
17
|
-
}
|
18
|
-
}
|
19
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
20
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimePipe, name: "axDate" });
|
21
|
-
}
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
1
|
+
import { Pipe } from '@angular/core';
|
2
|
+
import { AXConfig } from '@acorex/core/config';
|
3
|
+
import { AXDateTime } from './datetime.class';
|
4
|
+
import * as i0 from "@angular/core";
|
5
|
+
class AXDateTimePipe {
|
6
|
+
constructor() { }
|
7
|
+
transform(value, format, calendar) {
|
8
|
+
if (value == null) {
|
9
|
+
return '';
|
10
|
+
}
|
11
|
+
const date = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);
|
12
|
+
if (!format) {
|
13
|
+
return date.format(AXConfig.get('dateTime.shortDateFormat'));
|
14
|
+
}
|
15
|
+
else {
|
16
|
+
return date.format(format);
|
17
|
+
}
|
18
|
+
}
|
19
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
20
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimePipe, name: "axDate" });
|
21
|
+
}
|
22
|
+
export { AXDateTimePipe };
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AXDateTimePipe, decorators: [{
|
24
|
+
type: Pipe,
|
25
|
+
args: [{ name: 'axDate' }]
|
26
|
+
}], ctorParameters: function () { return []; } });
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb3JlL2RhdGVUaW1lL3NyYy9kYXRldGltZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRTlDLE1BQ2EsY0FBYztJQUN2QixnQkFBZ0IsQ0FBQztJQUVqQixTQUFTLENBQUMsS0FBVSxFQUFFLE1BQWUsRUFBRSxRQUFpQjtRQUNwRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDZixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsTUFBTSxJQUFJLEdBQWUsS0FBSyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO2FBQ0k7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7SUFDTCxDQUFDO3VHQWRRLGNBQWM7cUdBQWQsY0FBYzs7U0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZVRyYW5zZm9ybSwgUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xyXG5pbXBvcnQgeyBBWERhdGVUaW1lIH0gZnJvbSAnLi9kYXRldGltZS5jbGFzcyc7XHJcblxyXG5AUGlwZSh7IG5hbWU6ICdheERhdGUnIH0pXHJcbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgZm9ybWF0Pzogc3RyaW5nLCBjYWxlbmRhcj86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRlOiBBWERhdGVUaW1lID0gdmFsdWUgaW5zdGFuY2VvZiBBWERhdGVUaW1lID8gdmFsdWUuY2xvbmUoKSA6IEFYRGF0ZVRpbWUuY29udmVydCh2YWx1ZSwgY2FsZW5kYXIpO1xyXG4gICAgICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmZvcm1hdChBWENvbmZpZy5nZXQoJ2RhdGVUaW1lLnNob3J0RGF0ZUZvcm1hdCcpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmZvcm1hdChmb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
@@ -1,187 +1,187 @@
|
|
1
|
-
import { AXDateTime } from "./datetime.class";
|
2
|
-
export class GeorgianCalendar {
|
3
|
-
monthNames = [
|
4
|
-
"January", "February", "March",
|
5
|
-
"April", "May", "June", "July",
|
6
|
-
"August", "September", "October",
|
7
|
-
"November", "December"
|
8
|
-
];
|
9
|
-
monthShortNames = [
|
10
|
-
"Jan", "Feb", "Mar",
|
11
|
-
"Apr", "May", "Jun", "Jul",
|
12
|
-
"Aug", "Sep", "Oct",
|
13
|
-
"Nov", "Dec"
|
14
|
-
];
|
15
|
-
dayNames = [
|
16
|
-
"Sunday", "Monday", "Tuesday", "Wednesday",
|
17
|
-
"Thursday", "Friday", "Saturday"
|
18
|
-
];
|
19
|
-
dayShortNames = [
|
20
|
-
"Sun", "Mon", "Tue", "Wed",
|
21
|
-
"Thu", "Fri", "Sat"
|
22
|
-
];
|
23
|
-
create(value) {
|
24
|
-
return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());
|
25
|
-
}
|
26
|
-
name() {
|
27
|
-
return 'gregorian';
|
28
|
-
}
|
29
|
-
dayOfMonth(date) {
|
30
|
-
return date.getDate();
|
31
|
-
}
|
32
|
-
dayOfYear(date) {
|
33
|
-
let result = 0;
|
34
|
-
let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
35
|
-
if (this.isLeap(date)) {
|
36
|
-
m[1] = 29;
|
37
|
-
}
|
38
|
-
for (let i = 0; i < date.getMonth(); i++) {
|
39
|
-
result = result + m[i];
|
40
|
-
}
|
41
|
-
result += date.getDate();
|
42
|
-
return result;
|
43
|
-
}
|
44
|
-
dayOfWeek(date) {
|
45
|
-
return date.getDay() + 1;
|
46
|
-
}
|
47
|
-
weekOfYear(date) {
|
48
|
-
const firstDay = new AXDateTime(date).startOf('year');
|
49
|
-
return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);
|
50
|
-
}
|
51
|
-
year(date) {
|
52
|
-
return date.getFullYear();
|
53
|
-
}
|
54
|
-
monthOfYear(date) {
|
55
|
-
return date.getMonth() + 1;
|
56
|
-
}
|
57
|
-
add(date, unit, amount) {
|
58
|
-
let value = date.valueOf();
|
59
|
-
switch (unit) {
|
60
|
-
case 'second':
|
61
|
-
value += 1000 * amount;
|
62
|
-
break;
|
63
|
-
case 'minute':
|
64
|
-
value += 60000 * amount;
|
65
|
-
break;
|
66
|
-
case 'hour':
|
67
|
-
value += 3600000 * amount;
|
68
|
-
break;
|
69
|
-
case 'month':
|
70
|
-
const v = new Date(value);
|
71
|
-
var mo = date.getMonth();
|
72
|
-
var yr = date.getFullYear();
|
73
|
-
mo = (mo + amount) % 12;
|
74
|
-
if (0 > mo) {
|
75
|
-
yr += (date.getMonth() + amount - mo - 12) / 12;
|
76
|
-
mo += 12;
|
77
|
-
}
|
78
|
-
else
|
79
|
-
yr += ((date.getMonth() + amount - mo) / 12);
|
80
|
-
v.setMonth(mo);
|
81
|
-
v.setFullYear(yr);
|
82
|
-
value = v.valueOf();
|
83
|
-
break;
|
84
|
-
case 'week':
|
85
|
-
value += 7 * 86400000 * amount;
|
86
|
-
break;
|
87
|
-
case 'year':
|
88
|
-
const yv = new Date(value);
|
89
|
-
yv.setFullYear(yv.getFullYear() + amount);
|
90
|
-
value = yv.valueOf();
|
91
|
-
break;
|
92
|
-
case 'day':
|
93
|
-
default:
|
94
|
-
value += 86400000 * amount;
|
95
|
-
}
|
96
|
-
return new AXDateTime(new Date(value), this.name());
|
97
|
-
}
|
98
|
-
set(date, unit, value) {
|
99
|
-
const clone = new Date(date.valueOf());
|
100
|
-
switch (unit) {
|
101
|
-
case 'second':
|
102
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
|
103
|
-
break;
|
104
|
-
case 'minute':
|
105
|
-
clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
|
106
|
-
break;
|
107
|
-
case 'hour':
|
108
|
-
clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
|
109
|
-
break;
|
110
|
-
default:
|
111
|
-
case 'day':
|
112
|
-
clone.setDate(value);
|
113
|
-
break;
|
114
|
-
case "week":
|
115
|
-
break;
|
116
|
-
case "month":
|
117
|
-
clone.setMonth(Math.max(0, value - 1));
|
118
|
-
break;
|
119
|
-
case "year":
|
120
|
-
clone.setFullYear(value);
|
121
|
-
break;
|
122
|
-
}
|
123
|
-
return new AXDateTime(clone, this.name());
|
124
|
-
}
|
125
|
-
startOf(date, unit) {
|
126
|
-
const clone = new Date(date.valueOf());
|
127
|
-
switch (unit) {
|
128
|
-
case 'second':
|
129
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
|
130
|
-
return new AXDateTime(clone, this.name());
|
131
|
-
case 'minute':
|
132
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
|
133
|
-
return new AXDateTime(clone, this.name());
|
134
|
-
case 'hour':
|
135
|
-
clone.setHours(clone.getHours(), 0, 0, 0);
|
136
|
-
return new AXDateTime(clone, this.name());
|
137
|
-
default:
|
138
|
-
case 'day':
|
139
|
-
clone.setHours(0, 0, 0, 0);
|
140
|
-
return new AXDateTime(clone, this.name());
|
141
|
-
case "week":
|
142
|
-
const index = 0;
|
143
|
-
const start = index >= 0 ? index : 0;
|
144
|
-
const day = clone.getDay();
|
145
|
-
const diff = clone.getDate() - day + (start > day ? start - 7 : start);
|
146
|
-
clone.setDate(diff);
|
147
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
148
|
-
case "month":
|
149
|
-
clone.setDate(1);
|
150
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
151
|
-
case "year":
|
152
|
-
clone.setMonth(0);
|
153
|
-
clone.setDate(1);
|
154
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
155
|
-
}
|
156
|
-
}
|
157
|
-
endOf(date, unit) {
|
158
|
-
const clone = new Date(date.valueOf());
|
159
|
-
switch (unit) {
|
160
|
-
case 'second':
|
161
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
|
162
|
-
return new AXDateTime(clone, this.name());
|
163
|
-
case 'minute':
|
164
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
|
165
|
-
return new AXDateTime(clone, this.name());
|
166
|
-
case 'hour':
|
167
|
-
clone.setHours(clone.getHours(), 59, 59, 999);
|
168
|
-
return new AXDateTime(clone, this.name());
|
169
|
-
default:
|
170
|
-
case 'day':
|
171
|
-
clone.setHours(23, 59, 59, 999);
|
172
|
-
return new AXDateTime(clone, this.name());
|
173
|
-
case 'week':
|
174
|
-
return this.startOf(date, 'week').add('day', 6).endOf('day');
|
175
|
-
case 'month':
|
176
|
-
return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');
|
177
|
-
case "year":
|
178
|
-
clone.setMonth(11);
|
179
|
-
return new AXDateTime(clone, this.name()).endOf('month');
|
180
|
-
}
|
181
|
-
}
|
182
|
-
isLeap(date) {
|
183
|
-
let leapYear = new Date(date.getFullYear(), 1, 29);
|
184
|
-
return leapYear.getDate() == 29;
|
185
|
-
}
|
186
|
-
}
|
1
|
+
import { AXDateTime } from "./datetime.class";
|
2
|
+
export class GeorgianCalendar {
|
3
|
+
monthNames = [
|
4
|
+
"January", "February", "March",
|
5
|
+
"April", "May", "June", "July",
|
6
|
+
"August", "September", "October",
|
7
|
+
"November", "December"
|
8
|
+
];
|
9
|
+
monthShortNames = [
|
10
|
+
"Jan", "Feb", "Mar",
|
11
|
+
"Apr", "May", "Jun", "Jul",
|
12
|
+
"Aug", "Sep", "Oct",
|
13
|
+
"Nov", "Dec"
|
14
|
+
];
|
15
|
+
dayNames = [
|
16
|
+
"Sunday", "Monday", "Tuesday", "Wednesday",
|
17
|
+
"Thursday", "Friday", "Saturday"
|
18
|
+
];
|
19
|
+
dayShortNames = [
|
20
|
+
"Sun", "Mon", "Tue", "Wed",
|
21
|
+
"Thu", "Fri", "Sat"
|
22
|
+
];
|
23
|
+
create(value) {
|
24
|
+
return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());
|
25
|
+
}
|
26
|
+
name() {
|
27
|
+
return 'gregorian';
|
28
|
+
}
|
29
|
+
dayOfMonth(date) {
|
30
|
+
return date.getDate();
|
31
|
+
}
|
32
|
+
dayOfYear(date) {
|
33
|
+
let result = 0;
|
34
|
+
let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
35
|
+
if (this.isLeap(date)) {
|
36
|
+
m[1] = 29;
|
37
|
+
}
|
38
|
+
for (let i = 0; i < date.getMonth(); i++) {
|
39
|
+
result = result + m[i];
|
40
|
+
}
|
41
|
+
result += date.getDate();
|
42
|
+
return result;
|
43
|
+
}
|
44
|
+
dayOfWeek(date) {
|
45
|
+
return date.getDay() + 1;
|
46
|
+
}
|
47
|
+
weekOfYear(date) {
|
48
|
+
const firstDay = new AXDateTime(date).startOf('year');
|
49
|
+
return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);
|
50
|
+
}
|
51
|
+
year(date) {
|
52
|
+
return date.getFullYear();
|
53
|
+
}
|
54
|
+
monthOfYear(date) {
|
55
|
+
return date.getMonth() + 1;
|
56
|
+
}
|
57
|
+
add(date, unit, amount) {
|
58
|
+
let value = date.valueOf();
|
59
|
+
switch (unit) {
|
60
|
+
case 'second':
|
61
|
+
value += 1000 * amount;
|
62
|
+
break;
|
63
|
+
case 'minute':
|
64
|
+
value += 60000 * amount;
|
65
|
+
break;
|
66
|
+
case 'hour':
|
67
|
+
value += 3600000 * amount;
|
68
|
+
break;
|
69
|
+
case 'month':
|
70
|
+
const v = new Date(value);
|
71
|
+
var mo = date.getMonth();
|
72
|
+
var yr = date.getFullYear();
|
73
|
+
mo = (mo + amount) % 12;
|
74
|
+
if (0 > mo) {
|
75
|
+
yr += (date.getMonth() + amount - mo - 12) / 12;
|
76
|
+
mo += 12;
|
77
|
+
}
|
78
|
+
else
|
79
|
+
yr += ((date.getMonth() + amount - mo) / 12);
|
80
|
+
v.setMonth(mo);
|
81
|
+
v.setFullYear(yr);
|
82
|
+
value = v.valueOf();
|
83
|
+
break;
|
84
|
+
case 'week':
|
85
|
+
value += 7 * 86400000 * amount;
|
86
|
+
break;
|
87
|
+
case 'year':
|
88
|
+
const yv = new Date(value);
|
89
|
+
yv.setFullYear(yv.getFullYear() + amount);
|
90
|
+
value = yv.valueOf();
|
91
|
+
break;
|
92
|
+
case 'day':
|
93
|
+
default:
|
94
|
+
value += 86400000 * amount;
|
95
|
+
}
|
96
|
+
return new AXDateTime(new Date(value), this.name());
|
97
|
+
}
|
98
|
+
set(date, unit, value) {
|
99
|
+
const clone = new Date(date.valueOf());
|
100
|
+
switch (unit) {
|
101
|
+
case 'second':
|
102
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
|
103
|
+
break;
|
104
|
+
case 'minute':
|
105
|
+
clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
|
106
|
+
break;
|
107
|
+
case 'hour':
|
108
|
+
clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
|
109
|
+
break;
|
110
|
+
default:
|
111
|
+
case 'day':
|
112
|
+
clone.setDate(value);
|
113
|
+
break;
|
114
|
+
case "week":
|
115
|
+
break;
|
116
|
+
case "month":
|
117
|
+
clone.setMonth(Math.max(0, value - 1));
|
118
|
+
break;
|
119
|
+
case "year":
|
120
|
+
clone.setFullYear(value);
|
121
|
+
break;
|
122
|
+
}
|
123
|
+
return new AXDateTime(clone, this.name());
|
124
|
+
}
|
125
|
+
startOf(date, unit) {
|
126
|
+
const clone = new Date(date.valueOf());
|
127
|
+
switch (unit) {
|
128
|
+
case 'second':
|
129
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
|
130
|
+
return new AXDateTime(clone, this.name());
|
131
|
+
case 'minute':
|
132
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
|
133
|
+
return new AXDateTime(clone, this.name());
|
134
|
+
case 'hour':
|
135
|
+
clone.setHours(clone.getHours(), 0, 0, 0);
|
136
|
+
return new AXDateTime(clone, this.name());
|
137
|
+
default:
|
138
|
+
case 'day':
|
139
|
+
clone.setHours(0, 0, 0, 0);
|
140
|
+
return new AXDateTime(clone, this.name());
|
141
|
+
case "week":
|
142
|
+
const index = 0;
|
143
|
+
const start = index >= 0 ? index : 0;
|
144
|
+
const day = clone.getDay();
|
145
|
+
const diff = clone.getDate() - day + (start > day ? start - 7 : start);
|
146
|
+
clone.setDate(diff);
|
147
|
+
return new AXDateTime(clone, this.name()).startOf('day');
|
148
|
+
case "month":
|
149
|
+
clone.setDate(1);
|
150
|
+
return new AXDateTime(clone, this.name()).startOf('day');
|
151
|
+
case "year":
|
152
|
+
clone.setMonth(0);
|
153
|
+
clone.setDate(1);
|
154
|
+
return new AXDateTime(clone, this.name()).startOf('day');
|
155
|
+
}
|
156
|
+
}
|
157
|
+
endOf(date, unit) {
|
158
|
+
const clone = new Date(date.valueOf());
|
159
|
+
switch (unit) {
|
160
|
+
case 'second':
|
161
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
|
162
|
+
return new AXDateTime(clone, this.name());
|
163
|
+
case 'minute':
|
164
|
+
clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
|
165
|
+
return new AXDateTime(clone, this.name());
|
166
|
+
case 'hour':
|
167
|
+
clone.setHours(clone.getHours(), 59, 59, 999);
|
168
|
+
return new AXDateTime(clone, this.name());
|
169
|
+
default:
|
170
|
+
case 'day':
|
171
|
+
clone.setHours(23, 59, 59, 999);
|
172
|
+
return new AXDateTime(clone, this.name());
|
173
|
+
case 'week':
|
174
|
+
return this.startOf(date, 'week').add('day', 6).endOf('day');
|
175
|
+
case 'month':
|
176
|
+
return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');
|
177
|
+
case "year":
|
178
|
+
clone.setMonth(11);
|
179
|
+
return new AXDateTime(clone, this.name()).endOf('month');
|
180
|
+
}
|
181
|
+
}
|
182
|
+
isLeap(date) {
|
183
|
+
let leapYear = new Date(date.getFullYear(), 1, 29);
|
184
|
+
return leapYear.getDate() == 29;
|
185
|
+
}
|
186
|
+
}
|
187
187
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvcmdpYW4uY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29yZS9kYXRlVGltZS9zcmMvZ2VvcmdpYW4uY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRixNQUFNLE9BQU8sZ0JBQWdCO0lBRXpCLFVBQVUsR0FBRztRQUNULFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTztRQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO1FBQzlCLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUztRQUNoQyxVQUFVLEVBQUUsVUFBVTtLQUN6QixDQUFDO0lBRUYsZUFBZSxHQUFHO1FBQ2QsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7UUFDMUIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxLQUFLO0tBQ2YsQ0FBQztJQUVGLFFBQVEsR0FBRztRQUNQLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVc7UUFDMUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVO0tBQ25DLENBQUM7SUFFRixhQUFhLEdBQUc7UUFDWixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1FBQzFCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztLQUN0QixDQUFDO0lBR0YsTUFBTSxDQUFDLEtBQWtCO1FBQ3JCLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxP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QU07Z0JBQ1AsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVO1FBQ2IsSUFBSSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDYWxlbmRhciwgQVhEYXRlVGltZSwgQVhEYXRlVmFsdWUsIFRpbWVVbml0IH0gZnJvbSBcIi4vZGF0ZXRpbWUuY2xhc3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW9yZ2lhbkNhbGVuZGFyIGltcGxlbWVudHMgQVhDYWxlbmRhciB7XHJcblxyXG4gICAgbW9udGhOYW1lcyA9IFtcclxuICAgICAgICBcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsXHJcbiAgICAgICAgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsXHJcbiAgICAgICAgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsXHJcbiAgICAgICAgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJcclxuICAgIF07XHJcblxyXG4gICAgbW9udGhTaG9ydE5hbWVzID0gW1xyXG4gICAgICAgIFwiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsXHJcbiAgICAgICAgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIixcclxuICAgICAgICBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLFxyXG4gICAgICAgIFwiTm92XCIsIFwiRGVjXCJcclxuICAgIF07XHJcblxyXG4gICAgZGF5TmFtZXMgPSBbXHJcbiAgICAgICAgXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsXHJcbiAgICAgICAgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJcclxuICAgIF07XHJcblxyXG4gICAgZGF5U2hvcnROYW1lcyA9IFtcclxuICAgICAgICBcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLFxyXG4gICAgICAgIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJcclxuICAgIF07XHJcblxyXG5cclxuICAgIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUpOiBBWERhdGVUaW1lIHtcclxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUueWVhciwgdmFsdWUubW9udGggLSAxLCB2YWx1ZS5kYXRlLCB2YWx1ZS5ob3VycyB8fCAwLCB2YWx1ZS5taW51dGVzIHx8IDAsIHZhbHVlLnNlY29uZHMgfHwgMCwgdmFsdWUubXMgfHwgMCksIHRoaXMubmFtZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBuYW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdncmVnb3JpYW4nXHJcbiAgICB9XHJcblxyXG4gICAgZGF5T2ZNb250aChkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgICAgIGxldCBtID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzTGVhcChkYXRlKSkge1xyXG4gICAgICAgICAgICBtWzFdID0gMjk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0ZS5nZXRNb250aCgpOyBpKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgbVtpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ICs9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBkYXRlLmdldERheSgpICsgMTtcclxuICAgIH1cclxuXHJcbiAgICB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSkuc3RhcnRPZigneWVhcicpO1xyXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoKCgoZGF0ZS5nZXRUaW1lKCkgLSBmaXJzdERheS5kYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCkgKyBmaXJzdERheS5kYXRlLmdldERheSgpICsgMSkgLyA3KTtcclxuICAgIH1cclxuXHJcbiAgICB5ZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9udGhPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCBhbW91bnQ6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGUudmFsdWVPZigpO1xyXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMTAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA2MDAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMzYwMDAwMCAqIGFtb3VudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW8gPSBkYXRlLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgICAgICAgICBtbyA9IChtbyArIGFtb3VudCkgJSAxMjtcclxuICAgICAgICAgICAgICAgIGlmICgwID4gbW8pIHtcclxuICAgICAgICAgICAgICAgICAgICB5ciArPSAoZGF0ZS5nZXRNb250aCgpICsgYW1vdW50IC0gbW8gLSAxMikgLyAxMjtcclxuICAgICAgICAgICAgICAgICAgICBtbyArPSAxMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB5ciArPSAoKGRhdGUuZ2V0TW9udGgoKSArIGFtb3VudCAtIG1vKSAvIDEyKTtcclxuICAgICAgICAgICAgICAgIHYuc2V0TW9udGgobW8pO1xyXG4gICAgICAgICAgICAgICAgdi5zZXRGdWxsWWVhcih5cik7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHYudmFsdWVPZigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA3ICogODY0MDAwMDAgKiBhbW91bnQ7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHl2ID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgeXYuc2V0RnVsbFllYXIoeXYuZ2V0RnVsbFllYXIoKSArIGFtb3VudCk7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHl2LnZhbHVlT2YoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA4NjQwMDAwMCAqIGFtb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKHZhbHVlKSwgdGhpcy5uYW1lKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xyXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCB2YWx1ZSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCB2YWx1ZSwgY2xvbmUuZ2V0U2Vjb25kcygpLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaG91cic6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3Vycyh2YWx1ZSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICBjYXNlICdkYXknOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0RGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIndlZWtcIjpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibW9udGhcIjpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldE1vbnRoKE1hdGgubWF4KDAsIHZhbHVlIC0gMSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRGdWxsWWVhcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWUge1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xyXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3ZWVrXCI6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4ID49IDAgPyBpbmRleCA6IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBjbG9uZS5nZXREYXkoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBjbG9uZS5nZXREYXRlKCkgLSBkYXkgKyAoc3RhcnQgPiBkYXkgPyBzdGFydCAtIDcgOiBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXREYXRlKGRpZmYpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0RGF0ZSgxKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ5ZWFyXCI6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRNb250aCgwKTtcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldERhdGUoMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKS5zdGFydE9mKCdkYXknKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcclxuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcclxuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcclxuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCA5OTkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIDU5LCA5OTkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxyXG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgNTksIDU5LCA5OTkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XHJcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihkYXRlLCAnd2VlaycpLmFkZCgnZGF5JywgNikuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAwKSwgdGhpcy5uYW1lKCkpLmVuZE9mKCdkYXknKTtcclxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcclxuICAgICAgICAgICAgICAgIGNsb25lLnNldE1vbnRoKDExKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpLmVuZE9mKCdtb250aCcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc0xlYXAoZGF0ZTogRGF0ZSkge1xyXG4gICAgICAgIGxldCBsZWFwWWVhciA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMSwgMjkpO1xyXG4gICAgICAgIHJldHVybiBsZWFwWWVhci5nZXREYXRlKCkgPT0gMjk7XHJcbiAgICB9XHJcbn0iXX0=
|