@acorex/core 7.3.2 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/config/lib/configs.d.ts +0 -9
  2. package/dateTime/index.d.ts +2 -0
  3. package/dateTime/lib/calendar.service.d.ts +13 -0
  4. package/dateTime/lib/dateTime.config.d.ts +12 -0
  5. package/dateTime/lib/datetime.class.d.ts +61 -26
  6. package/dateTime/lib/datetime.module.d.ts +0 -1
  7. package/dateTime/lib/datetime.pipe.d.ts +3 -2
  8. package/dateTime/lib/georgian.calendar.d.ts +6 -6
  9. package/dateTime/lib/jalali.calendar.d.ts +7 -7
  10. package/esm2022/config/lib/configs.mjs +1 -24
  11. package/esm2022/config/lib/configs.service.mjs +3 -3
  12. package/esm2022/dateTime/index.mjs +3 -1
  13. package/esm2022/dateTime/lib/calendar.service.mjs +41 -0
  14. package/esm2022/dateTime/lib/dateTime.config.mjs +65 -0
  15. package/esm2022/dateTime/lib/datetime.class.mjs +43 -64
  16. package/esm2022/dateTime/lib/datetime.module.mjs +8 -28
  17. package/esm2022/dateTime/lib/datetime.pipe.mjs +18 -12
  18. package/esm2022/dateTime/lib/georgian.calendar.mjs +69 -72
  19. package/esm2022/dateTime/lib/jalali.calendar.mjs +50 -49
  20. package/esm2022/events/lib/event.service.mjs +3 -3
  21. package/esm2022/file/lib/file.service.mjs +3 -3
  22. package/esm2022/http/lib/http.module.mjs +4 -4
  23. package/esm2022/http/lib/http.service.mjs +3 -3
  24. package/esm2022/image/lib/image.service.mjs +3 -3
  25. package/esm2022/pipes/lib/pipes.module.mjs +4 -4
  26. package/esm2022/pipes/lib/safe.pipe.mjs +3 -3
  27. package/esm2022/platform/lib/platform.service.mjs +24 -13
  28. package/esm2022/translation/lib/translation.module.mjs +4 -4
  29. package/esm2022/translation/lib/translator.pipe.mjs +3 -3
  30. package/esm2022/types/acorex-core-types.mjs +5 -0
  31. package/esm2022/types/index.mjs +2 -0
  32. package/esm2022/utils/index.mjs +1 -2
  33. package/esm2022/utils/lib/auto-unsubscribe.mjs +3 -3
  34. package/esm2022/utils/lib/string-util.mjs +1 -1
  35. package/fesm2022/acorex-core-config.mjs +5 -27
  36. package/fesm2022/acorex-core-config.mjs.map +1 -1
  37. package/fesm2022/acorex-core-dateTime.mjs +408 -345
  38. package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
  39. package/fesm2022/acorex-core-events.mjs +3 -3
  40. package/fesm2022/acorex-core-file.mjs +3 -3
  41. package/fesm2022/acorex-core-http.mjs +7 -7
  42. package/fesm2022/acorex-core-image.mjs +3 -3
  43. package/fesm2022/acorex-core-pipes.mjs +7 -7
  44. package/fesm2022/acorex-core-platform.mjs +23 -12
  45. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  46. package/fesm2022/acorex-core-translation.mjs +7 -7
  47. package/fesm2022/acorex-core-types.mjs +6 -0
  48. package/fesm2022/acorex-core-types.mjs.map +1 -0
  49. package/fesm2022/acorex-core-utils.mjs +4 -43
  50. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  51. package/package.json +13 -7
  52. package/platform/lib/platform.service.d.ts +2 -1
  53. package/types/README.md +3 -0
  54. package/types/index.d.ts +2 -0
  55. package/utils/index.d.ts +0 -1
  56. package/esm2022/utils/lib/object-util.mjs +0 -39
  57. package/utils/lib/object-util.d.ts +0 -4
@@ -1,15 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
2
  export type AXGlobalConfig = {
4
3
  [key: string]: unknown;
5
4
  };
6
5
  export declare const AXGlobalDefaultConfig: AXGlobalConfig;
7
6
  export declare const AX_GLOBAL_CONFIG: InjectionToken<AXGlobalConfig>;
8
- export declare class AXConfig {
9
- private static dataModel;
10
- private static dataChangeSubject;
11
- static get onChange(): Observable<any>;
12
- static set(config: any): void;
13
- static set(path: string, value?: any): void;
14
- static get(path: string, defaultValue?: any): any;
15
- }
@@ -1,3 +1,5 @@
1
+ export * from './lib/calendar.service';
2
+ export * from './lib/dateTime.config';
1
3
  export * from './lib/datetime.class';
2
4
  export * from './lib/datetime.module';
3
5
  export * from './lib/datetime.pipe';
@@ -0,0 +1,13 @@
1
+ import { AXCalendar, AXDateTime, AXDateValue } from './datetime.class';
2
+ import * as i0 from "@angular/core";
3
+ export declare class AXCalendarService {
4
+ private _config;
5
+ get calendar(): AXCalendar;
6
+ create(value: AXDateValue, calendarName?: string): AXDateTime;
7
+ create(value: Date, calendarName?: string): AXDateTime;
8
+ now(calendarName?: string): AXDateTime;
9
+ resolveCalendar(name: string): AXCalendar;
10
+ convert(value: Date | AXDateTime, calendarName?: string): AXDateTime;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXCalendarService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXCalendarService>;
13
+ }
@@ -0,0 +1,12 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { AXCalendar } from './datetime.class';
3
+ export interface AXDateTimeConfig {
4
+ calendar: string;
5
+ calendars: {
6
+ [key: string]: AXCalendar;
7
+ };
8
+ }
9
+ export declare const AX_DATETIME_CONFIG: InjectionToken<AXDateTimeConfig>;
10
+ export declare const AXDateTimeDefaultConfig: AXDateTimeConfig;
11
+ export type PartialDateTimeConfig = Partial<AXDateTimeConfig>;
12
+ export declare function dateTimeConfig(config?: PartialDateTimeConfig): AXDateTimeConfig;
@@ -7,35 +7,72 @@ export interface AXDateValue {
7
7
  minutes?: number;
8
8
  seconds?: number;
9
9
  ms?: number;
10
- calendar: string;
11
10
  }
12
- export interface AXCalendar {
13
- monthNames: string[];
14
- monthShortNames: string[];
15
- dayNames: string[];
16
- dayShortNames: string[];
17
- name(): string;
18
- dayOfMonth(date: Date): number;
19
- dayOfYear(date: Date): number;
20
- dayOfWeek(date: Date): number;
21
- monthOfYear(date: Date): number;
22
- weekOfYear(date: Date): number;
23
- year(date: Date): number;
24
- add(date: Date, unit: TimeUnit, amount: number): AXDateTime;
25
- set(date: Date, unit: TimeUnit, value: number): AXDateTime;
26
- startOf(date: Date, unit: TimeUnit): AXDateTime;
27
- endOf(date: Date, unit: TimeUnit): AXDateTime;
28
- create(value: AXDateValue): AXDateTime;
11
+ export interface AXDateTimeDisplayFormats {
12
+ dateInput: string;
13
+ timeInput: string;
14
+ dateTimeInput: string;
15
+ dateDisplay: string;
16
+ timeDisplay: string;
17
+ dateTimeDisplay: string;
18
+ }
19
+ export type AXDateTimeUnitNames = {
20
+ long: string;
21
+ short: string;
22
+ letter: string;
23
+ }[];
24
+ export type AXDateTimePart = {
25
+ key: string;
26
+ placeholder: string;
27
+ placeholders: string[];
28
+ typedValue?: string | null;
29
+ default: number;
30
+ enabled: boolean;
31
+ realValue: () => string;
32
+ };
33
+ export type AXDateTimeParts = {
34
+ year: AXDateTimePart;
35
+ month: AXDateTimePart;
36
+ day: AXDateTimePart;
37
+ hour: AXDateTimePart;
38
+ minute: AXDateTimePart;
39
+ second: AXDateTimePart;
40
+ };
41
+ export interface AXCalendarConfig {
42
+ weekend: number[];
43
+ formats: AXDateTimeDisplayFormats;
44
+ dayNames: AXDateTimeUnitNames;
45
+ monthNames: AXDateTimeUnitNames;
46
+ }
47
+ export declare abstract class AXCalendar {
48
+ private _config;
49
+ /**
50
+ * @ignore
51
+ */
52
+ constructor(config: AXCalendarConfig);
53
+ get weekend(): number[];
54
+ get formats(): AXDateTimeDisplayFormats;
55
+ get dayNames(): AXDateTimeUnitNames;
56
+ get monthNames(): AXDateTimeUnitNames;
57
+ abstract name(): string;
58
+ abstract dayOfMonth(date: Date): number;
59
+ abstract dayOfYear(date: Date): number;
60
+ abstract dayOfWeek(date: Date): number;
61
+ abstract monthOfYear(date: Date): number;
62
+ abstract weekOfYear(date: Date): number;
63
+ abstract year(date: Date): number;
64
+ abstract add(date: Date, unit: TimeUnit, amount: number): AXDateTime;
65
+ abstract set(date: Date, unit: TimeUnit, value: number): AXDateTime;
66
+ abstract startOf(date: Date, unit: TimeUnit): AXDateTime;
67
+ abstract endOf(date: Date, unit: TimeUnit): AXDateTime;
68
+ abstract create(value: AXDateValue): AXDateTime;
29
69
  }
30
70
  export declare class AXDateTime {
31
- static convert(value: Date | AXDateTime | string, calendar?: string): AXDateTime;
32
- static from(value?: AXDateValue): AXDateTime;
33
- static resolveCalendar(calendar: string | AXCalendar): AXCalendar;
34
71
  private _date;
35
72
  get date(): Date;
36
73
  private _calendar;
37
74
  get calendar(): AXCalendar;
38
- constructor(value?: Date | string, calendar?: string | AXCalendar);
75
+ constructor(value: Date, calendar: AXCalendar);
39
76
  clone(): AXDateTime;
40
77
  get dayOfMonth(): number;
41
78
  get dayOfYear(): number;
@@ -49,21 +86,20 @@ export declare class AXDateTime {
49
86
  get month(): AXCalendarMonth;
50
87
  add(unit: TimeUnit, amount: number): AXDateTime;
51
88
  set(unit: TimeUnit, value: number): AXDateTime;
52
- duration(end: Date | AXDateTime, unit?: TimeUnit): AXTimeSpan;
89
+ duration(end: Date | AXDateTime): AXTimeSpan;
53
90
  startOf(unit?: TimeUnit): AXDateTime;
54
91
  endOf(unit?: TimeUnit): AXDateTime;
55
92
  private _formatKeys;
56
93
  format(format?: string): string;
57
94
  private pad;
58
- toString(format?: string): string;
59
95
  equal(value: Date | AXDateTime, unit?: TimeUnit): boolean;
60
96
  compare(value: Date | AXDateTime, unit?: TimeUnit): number;
61
- convert(calendar: string): AXDateTime;
62
97
  }
63
98
  export declare class AXCalendarMonth {
64
99
  private _range;
65
100
  get range(): AXDateTimeRange;
66
101
  set range(v: AXDateTimeRange);
102
+ get totalDays(): number;
67
103
  constructor(date: AXDateTime);
68
104
  private readonly index;
69
105
  private readonly name;
@@ -96,5 +132,4 @@ export declare class AXDateTimeRange {
96
132
  constructor(startTime: AXDateTime, endTime: AXDateTime);
97
133
  duration(): AXTimeSpan;
98
134
  enumurate(unit?: TimeUnit, amount?: number): AXDateTime[];
99
- includes(value: AXDateTime, unit?: TimeUnit): boolean;
100
135
  }
@@ -1,7 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./datetime.pipe";
3
3
  export declare class AXDateTimeModule {
4
- constructor();
5
4
  static ɵfac: i0.ɵɵFactoryDeclaration<AXDateTimeModule, never>;
6
5
  static ɵmod: i0.ɵɵNgModuleDeclaration<AXDateTimeModule, [typeof i1.AXDateTimePipe], never, [typeof i1.AXDateTimePipe]>;
7
6
  static ɵinj: i0.ɵɵInjectorDeclaration<AXDateTimeModule>;
@@ -1,8 +1,9 @@
1
1
  import { PipeTransform } from '@angular/core';
2
+ import { AXDateTime } from './datetime.class';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class AXDateTimePipe implements PipeTransform {
4
- constructor();
5
- transform(value: any, format?: string, calendar?: string): string;
5
+ private _calendarService;
6
+ transform(value: Date | AXDateTime, format?: string, calendarName?: string): string;
6
7
  static ɵfac: i0.ɵɵFactoryDeclaration<AXDateTimePipe, never>;
7
8
  static ɵpipe: i0.ɵɵPipeDeclaration<AXDateTimePipe, "axDate", false>;
8
9
  }
@@ -1,9 +1,9 @@
1
- import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from "./datetime.class";
2
- export declare class GeorgianCalendar implements AXCalendar {
3
- monthNames: string[];
4
- monthShortNames: string[];
5
- dayNames: string[];
6
- dayShortNames: string[];
1
+ import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';
2
+ export declare class GeorgianCalendar extends AXCalendar {
3
+ /**
4
+ * @ignore
5
+ */
6
+ constructor(config: AXCalendarConfig);
7
7
  create(value: AXDateValue): AXDateTime;
8
8
  name(): string;
9
9
  dayOfMonth(date: Date): number;
@@ -1,10 +1,10 @@
1
- import { AXCalendar, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';
2
- export declare class JalaliCalendar implements AXCalendar {
3
- monthNames: string[];
4
- monthShortNames: string[];
5
- dayNames: string[];
6
- dayShortNames: string[];
7
- breaks: number[];
1
+ import { AXCalendar, AXCalendarConfig, AXDateTime, AXDateValue, TimeUnit } from './datetime.class';
2
+ export declare class JalaliCalendar extends AXCalendar {
3
+ /**
4
+ * @ignore
5
+ */
6
+ constructor(config: AXCalendarConfig);
7
+ private breaks;
8
8
  create(value: AXDateValue): AXDateTime;
9
9
  name(): string;
10
10
  dayOfMonth(date: Date): number;
@@ -1,30 +1,7 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- import { get, set, merge } from 'lodash-es';
3
- import { Subject } from 'rxjs';
4
2
  export const AXGlobalDefaultConfig = {};
5
3
  export const AX_GLOBAL_CONFIG = new InjectionToken('AX_GLOBAL_CONFIG', {
6
4
  providedIn: 'root',
7
5
  factory: () => AXGlobalDefaultConfig
8
6
  });
9
- // @dynamic
10
- export class AXConfig {
11
- static { this.dataModel = {}; }
12
- static { this.dataChangeSubject = new Subject(); }
13
- static get onChange() {
14
- return AXConfig.dataChangeSubject.asObservable();
15
- }
16
- static set(arg1, arg2) {
17
- if (arg1 && typeof arg1 == 'string') {
18
- set(AXConfig.dataModel, arg1, arg2);
19
- AXConfig.dataChangeSubject.next(AXConfig.dataModel);
20
- }
21
- if (arg1 && typeof arg1 == 'object') {
22
- merge(AXConfig.dataModel, arg1);
23
- AXConfig.dataChangeSubject.next(AXConfig.dataModel);
24
- }
25
- }
26
- static get(path, defaultValue) {
27
- return get(AXConfig.dataModel, path, defaultValue);
28
- }
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb25maWcvc3JjL2xpYi9jb25maWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFNM0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQW1CLEVBRXBELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsa0JBQWtCLEVBQUU7SUFDckYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFCQUFxQjtDQUNyQyxDQUFDLENBQUM7QUFHSCxXQUFXO0FBQ1gsTUFBTSxPQUFPLFFBQVE7YUFDSixjQUFTLEdBQVEsRUFBRSxDQUFDO2FBQ3BCLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7SUFFdEQsTUFBTSxLQUFLLFFBQVE7UUFDakIsT0FBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUlELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBVSxFQUFFLElBQVU7UUFDL0IsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRDtJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQVksRUFBRSxZQUFrQjtRQUN6QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldCwgc2V0LCBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEFYR2xvYmFsQ29uZmlnID0ge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgY29uc3QgQVhHbG9iYWxEZWZhdWx0Q29uZmlnOiBBWEdsb2JhbENvbmZpZyA9IHtcblxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0dMT0JBTF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhHbG9iYWxDb25maWc+KCdBWF9HTE9CQUxfQ09ORklHJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IEFYR2xvYmFsRGVmYXVsdENvbmZpZ1xufSk7XG5cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBBWENvbmZpZyB7XG4gIHByaXZhdGUgc3RhdGljIGRhdGFNb2RlbDogYW55ID0ge307XG4gIHByaXZhdGUgc3RhdGljIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHN0YXRpYyBnZXQgb25DaGFuZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gQVhDb25maWcuZGF0YUNoYW5nZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzdGF0aWMgc2V0KGNvbmZpZzogYW55KTogdm9pZDtcbiAgc3RhdGljIHNldChwYXRoOiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZDtcbiAgc3RhdGljIHNldChhcmcxPzogYW55LCBhcmcyPzogYW55KTogdm9pZCB7XG4gICAgaWYgKGFyZzEgJiYgdHlwZW9mIGFyZzEgPT0gJ3N0cmluZycpIHtcbiAgICAgIHNldChBWENvbmZpZy5kYXRhTW9kZWwsIGFyZzEsIGFyZzIpO1xuICAgICAgQVhDb25maWcuZGF0YUNoYW5nZVN1YmplY3QubmV4dChBWENvbmZpZy5kYXRhTW9kZWwpO1xuICAgIH1cbiAgICBpZiAoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PSAnb2JqZWN0Jykge1xuICAgICAgbWVyZ2UoQVhDb25maWcuZGF0YU1vZGVsLCBhcmcxKTtcbiAgICAgIEFYQ29uZmlnLmRhdGFDaGFuZ2VTdWJqZWN0Lm5leHQoQVhDb25maWcuZGF0YU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0KHBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgICByZXR1cm4gZ2V0KEFYQ29uZmlnLmRhdGFNb2RlbCwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb25maWcvc3JjL2xpYi9jb25maWdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQW1CLEVBRXBELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBaUIsa0JBQWtCLEVBQUU7SUFDckYsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHFCQUFxQjtDQUNyQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBBWEdsb2JhbENvbmZpZyA9IHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGNvbnN0IEFYR2xvYmFsRGVmYXVsdENvbmZpZzogQVhHbG9iYWxDb25maWcgPSB7XG5cbn07XG5cbmV4cG9ydCBjb25zdCBBWF9HTE9CQUxfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFYR2xvYmFsQ29uZmlnPignQVhfR0xPQkFMX0NPTkZJRycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBBWEdsb2JhbERlZmF1bHRDb25maWdcbn0pO1xuIl19
@@ -17,10 +17,10 @@ export class AXConfigService {
17
17
  const v2 = this.injector.get(providerToken);
18
18
  return get(v2, parts[parts.length - 1], defaultValue);
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: AXConfigService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
21
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: AXConfigService, providedIn: 'root' }); }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXConfigService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
21
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXConfigService, providedIn: 'root' }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: AXConfigService, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXConfigService, decorators: [{
24
24
  type: Injectable,
25
25
  args: [{ providedIn: 'root' }]
26
26
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
@@ -1,6 +1,8 @@
1
+ export * from './lib/calendar.service';
2
+ export * from './lib/dateTime.config';
1
3
  export * from './lib/datetime.class';
2
4
  export * from './lib/datetime.module';
3
5
  export * from './lib/datetime.pipe';
4
6
  export * from './lib/georgian.calendar';
5
7
  export * from './lib/jalali.calendar';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGV0aW1lLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGV0aW1lLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dlb3JnaWFuLmNhbGVuZGFyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2phbGFsaS5jYWxlbmRhcic7XG4iXX0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jYWxlbmRhci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVUaW1lLmNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZXRpbWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nZW9yZ2lhbi5jYWxlbmRhcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9qYWxhbGkuY2FsZW5kYXInO1xuIl19
@@ -0,0 +1,41 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { AXDateTime } from './datetime.class';
3
+ import { AX_DATETIME_CONFIG } from './dateTime.config';
4
+ import * as i0 from "@angular/core";
5
+ export class AXCalendarService {
6
+ constructor() {
7
+ this._config = inject(AX_DATETIME_CONFIG);
8
+ }
9
+ get calendar() {
10
+ return this._config.calendars[this._config.calendar];
11
+ }
12
+ create(value, calendarName) {
13
+ const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;
14
+ if (value instanceof Date) {
15
+ return new AXDateTime(value, calendar);
16
+ }
17
+ else if (value?.year && value?.month) {
18
+ return calendar.create(value);
19
+ }
20
+ return this.now();
21
+ }
22
+ now(calendarName) {
23
+ const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;
24
+ return new AXDateTime(new Date(), calendar);
25
+ }
26
+ resolveCalendar(name) {
27
+ return this._config.calendars[name];
28
+ }
29
+ convert(value, calendarName) {
30
+ const calendar = calendarName ? this.resolveCalendar(calendarName) : this.calendar;
31
+ const date = value instanceof AXDateTime ? value.date : value;
32
+ return new AXDateTime(date, calendar);
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXCalendarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXCalendarService, providedIn: 'root' }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXCalendarService, decorators: [{
38
+ type: Injectable,
39
+ args: [{ providedIn: 'root' }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlVGltZS9zcmMvbGliL2NhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZFLE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHekUsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUdZLFlBQU8sR0FBcUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FrQ2xFO0lBaENHLElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBSU0sTUFBTSxDQUFDLEtBQXlCLEVBQUUsWUFBcUI7UUFDMUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25GLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMxQzthQUNJLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFvQixDQUFDLENBQUE7U0FDL0M7UUFDRCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRU0sR0FBRyxDQUFDLFlBQXFCO1FBQzVCLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuRixPQUFPLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZO1FBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUF3QixFQUFFLFlBQXFCO1FBQzFELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFhLENBQUM7UUFDdEUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs4R0FsQ1EsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhDYWxlbmRhciwgQVhEYXRlVGltZSwgQVhEYXRlVmFsdWUgfSBmcm9tICcuL2RhdGV0aW1lLmNsYXNzJztcbmltcG9ydCB7IEFYRGF0ZVRpbWVDb25maWcsIEFYX0RBVEVUSU1FX0NPTkZJRyB9IGZyb20gJy4vZGF0ZVRpbWUuY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWENhbGVuZGFyU2VydmljZSB7XG5cbiAgICBwcml2YXRlIF9jb25maWc6IEFYRGF0ZVRpbWVDb25maWcgPSBpbmplY3QoQVhfREFURVRJTUVfQ09ORklHKTtcblxuICAgIHB1YmxpYyBnZXQgY2FsZW5kYXIoKTogQVhDYWxlbmRhciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY2FsZW5kYXJzW3RoaXMuX2NvbmZpZy5jYWxlbmRhcl07XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG4gICAgcHVibGljIGNyZWF0ZSh2YWx1ZTogRGF0ZSwgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZTtcbiAgICBwdWJsaWMgY3JlYXRlKHZhbHVlOiBBWERhdGVWYWx1ZSB8IERhdGUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWUge1xuICAgICAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUodmFsdWUsIGNhbGVuZGFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZT8ueWVhciAmJiB2YWx1ZT8ubW9udGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxlbmRhci5jcmVhdGUodmFsdWUgYXMgQVhEYXRlVmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm93KClcbiAgICB9XG5cbiAgICBwdWJsaWMgbm93KGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWUge1xuICAgICAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUoKSwgY2FsZW5kYXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlQ2FsZW5kYXIobmFtZTogc3RyaW5nKTogQVhDYWxlbmRhciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY2FsZW5kYXJzW25hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0KHZhbHVlOiBEYXRlIHwgQVhEYXRlVGltZSwgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyID0gY2FsZW5kYXJOYW1lID8gdGhpcy5yZXNvbHZlQ2FsZW5kYXIoY2FsZW5kYXJOYW1lKSA6IHRoaXMuY2FsZW5kYXI7XG4gICAgICAgIGNvbnN0IGRhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUgPyB2YWx1ZS5kYXRlIDogdmFsdWUgYXMgRGF0ZTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGRhdGUsIGNhbGVuZGFyKTtcbiAgICB9XG5cbn0iXX0=
@@ -0,0 +1,65 @@
1
+ import { InjectionToken, inject } from '@angular/core';
2
+ import { set } from 'lodash-es';
3
+ import { AX_GLOBAL_CONFIG } from '@acorex/core/config';
4
+ import { JalaliCalendar } from './jalali.calendar';
5
+ import { GeorgianCalendar } from './georgian.calendar';
6
+ export const AX_DATETIME_CONFIG = new InjectionToken('AX_DATETIME_CONFIG', {
7
+ providedIn: 'root',
8
+ factory: () => {
9
+ const global = inject(AX_GLOBAL_CONFIG);
10
+ set(global, "dateTime", AX_DATETIME_CONFIG);
11
+ return AXDateTimeDefaultConfig;
12
+ },
13
+ });
14
+ export const AXDateTimeDefaultConfig = {
15
+ calendar: 'georgian',
16
+ calendars: {
17
+ "georgian": new GeorgianCalendar({
18
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].map(d => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
19
+ monthNames: [
20
+ 'January',
21
+ 'February',
22
+ 'March',
23
+ 'April',
24
+ 'May',
25
+ 'June',
26
+ 'July',
27
+ 'August',
28
+ 'September',
29
+ 'October',
30
+ 'November',
31
+ 'December',
32
+ ].map(d => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
33
+ weekend: [6, 7],
34
+ formats: {
35
+ dateInput: "yyyy/MM/dd",
36
+ timeInput: "HH:mm",
37
+ dateTimeInput: "yyyy/MM/dd HH:mm",
38
+ dateDisplay: "DDDD, d MMM yyyy",
39
+ timeDisplay: "HH:mm",
40
+ dateTimeDisplay: "DDDD, d MMM yyyy HH:mm"
41
+ }
42
+ }),
43
+ "jalali": new JalaliCalendar({
44
+ monthNames: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_').map(d => ({ long: d, short: d, letter: d[0] })),
45
+ dayNames: 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_').map(d => ({ long: d, short: d[0], letter: d[0] })),
46
+ weekend: [7, 1],
47
+ formats: {
48
+ dateInput: "yyyy/MM/dd",
49
+ timeInput: "HH:mm",
50
+ dateTimeInput: "yyyy/MM/dd HH:mm",
51
+ dateDisplay: "DDDD, d MMM yyyy",
52
+ timeDisplay: "HH:mm",
53
+ dateTimeDisplay: "DDDD, d MMM yyyy HH:mm"
54
+ }
55
+ })
56
+ }
57
+ };
58
+ export function dateTimeConfig(config = {}) {
59
+ const result = {
60
+ ...AXDateTimeDefaultConfig,
61
+ ...config,
62
+ };
63
+ return result;
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZVRpbWUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvZGF0ZVRpbWUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUNoRCxvQkFBb0IsRUFDcEI7SUFDSSxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxPQUFPLHVCQUF1QixDQUFDO0lBQ25DLENBQUM7Q0FDSixDQUNKLENBQUM7QUFHRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBcUI7SUFDckQsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFO1FBQ1AsVUFBVSxFQUFFLElBQUksZ0JBQWdCLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hKLFVBQVUsRUFBRTtnQkFDUixTQUFTO2dCQUNULFVBQVU7Z0JBQ1YsT0FBTztnQkFDUCxPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsTUFBTTtnQkFDTixNQUFNO2dCQUNOLFFBQVE7Z0JBQ1IsV0FBVztnQkFDWCxTQUFTO2dCQUNULFVBQVU7Z0JBQ1YsVUFBVTthQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDZixPQUFPLEVBQUU7Z0JBQ0wsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixhQUFhLEVBQUUsa0JBQWtCO2dCQUNqQyxXQUFXLEVBQUUsa0JBQWtCO2dCQUMvQixXQUFXLEVBQUUsT0FBTztnQkFDcEIsZUFBZSxFQUFFLHdCQUF3QjthQUM1QztTQUNKLENBQUM7UUFDRixRQUFRLEVBQUUsSUFBSSxjQUFjLENBQ3hCO1lBQ0ksVUFBVSxFQUFFLG9FQUFvRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNJLFFBQVEsRUFBRSxtREFBbUQsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzSCxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxFQUFFO2dCQUNMLFNBQVMsRUFBRSxZQUFZO2dCQUN2QixTQUFTLEVBQUUsT0FBTztnQkFDbEIsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLGVBQWUsRUFBRSx3QkFBd0I7YUFDNUM7U0FDSixDQUNKO0tBQ0o7Q0FDSixDQUFDO0FBS0YsTUFBTSxVQUFVLGNBQWMsQ0FBQyxTQUFnQyxFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFHO1FBQ1gsR0FBRyx1QkFBdUI7UUFDMUIsR0FBRyxNQUFNO0tBQ1osQ0FBQztJQUNGLE9BQU8sTUFBTSxDQUFBO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhfR0xPQkFMX0NPTkZJRyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgQVhDYWxlbmRhciB9IGZyb20gJy4vZGF0ZXRpbWUuY2xhc3MnO1xuaW1wb3J0IHsgSmFsYWxpQ2FsZW5kYXIgfSBmcm9tICcuL2phbGFsaS5jYWxlbmRhcic7XG5pbXBvcnQgeyBHZW9yZ2lhbkNhbGVuZGFyIH0gZnJvbSAnLi9nZW9yZ2lhbi5jYWxlbmRhcic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVUaW1lQ29uZmlnIHtcbiAgICBjYWxlbmRhcjogc3RyaW5nLFxuICAgIGNhbGVuZGFyczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBWENhbGVuZGFyXG4gICAgfSxcbn1cblxuZXhwb3J0IGNvbnN0IEFYX0RBVEVUSU1FX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWERhdGVUaW1lQ29uZmlnPihcbiAgICAnQVhfREFURVRJTUVfQ09ORklHJyxcbiAgICB7XG4gICAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgICAgZmFjdG9yeTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsID0gaW5qZWN0KEFYX0dMT0JBTF9DT05GSUcpO1xuICAgICAgICAgICAgc2V0KGdsb2JhbCwgXCJkYXRlVGltZVwiLCBBWF9EQVRFVElNRV9DT05GSUcpO1xuICAgICAgICAgICAgcmV0dXJuIEFYRGF0ZVRpbWVEZWZhdWx0Q29uZmlnO1xuICAgICAgICB9LFxuICAgIH1cbik7XG5cblxuZXhwb3J0IGNvbnN0IEFYRGF0ZVRpbWVEZWZhdWx0Q29uZmlnOiBBWERhdGVUaW1lQ29uZmlnID0ge1xuICAgIGNhbGVuZGFyOiAnZ2VvcmdpYW4nLFxuICAgIGNhbGVuZGFyczoge1xuICAgICAgICBcImdlb3JnaWFuXCI6IG5ldyBHZW9yZ2lhbkNhbGVuZGFyKHtcbiAgICAgICAgICAgIGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10ubWFwKGQgPT4gKHsgbG9uZzogZCwgc2hvcnQ6IGQuc3Vic3RyaW5nKDAsIDMpLCBsZXR0ZXI6IGRbMF0gfSkpLFxuICAgICAgICAgICAgbW9udGhOYW1lczogW1xuICAgICAgICAgICAgICAgICdKYW51YXJ5JyxcbiAgICAgICAgICAgICAgICAnRmVicnVhcnknLFxuICAgICAgICAgICAgICAgICdNYXJjaCcsXG4gICAgICAgICAgICAgICAgJ0FwcmlsJyxcbiAgICAgICAgICAgICAgICAnTWF5JyxcbiAgICAgICAgICAgICAgICAnSnVuZScsXG4gICAgICAgICAgICAgICAgJ0p1bHknLFxuICAgICAgICAgICAgICAgICdBdWd1c3QnLFxuICAgICAgICAgICAgICAgICdTZXB0ZW1iZXInLFxuICAgICAgICAgICAgICAgICdPY3RvYmVyJyxcbiAgICAgICAgICAgICAgICAnTm92ZW1iZXInLFxuICAgICAgICAgICAgICAgICdEZWNlbWJlcicsXG4gICAgICAgICAgICBdLm1hcChkID0+ICh7IGxvbmc6IGQsIHNob3J0OiBkLnN1YnN0cmluZygwLCAzKSwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgICAgICAgIHdlZWtlbmQ6IFs2LCA3XSxcbiAgICAgICAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgICAgICAgICBkYXRlSW5wdXQ6IFwieXl5eS9NTS9kZFwiLFxuICAgICAgICAgICAgICAgIHRpbWVJbnB1dDogXCJISDptbVwiLFxuICAgICAgICAgICAgICAgIGRhdGVUaW1lSW5wdXQ6IFwieXl5eS9NTS9kZCBISDptbVwiLFxuICAgICAgICAgICAgICAgIGRhdGVEaXNwbGF5OiBcIkREREQsIGQgTU1NIHl5eXlcIixcbiAgICAgICAgICAgICAgICB0aW1lRGlzcGxheTogXCJISDptbVwiLFxuICAgICAgICAgICAgICAgIGRhdGVUaW1lRGlzcGxheTogXCJERERELCBkIE1NTSB5eXl5IEhIOm1tXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwiamFsYWxpXCI6IG5ldyBKYWxhbGlDYWxlbmRhcihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtb250aE5hbWVzOiAn2YHYsdmI2LHYr9uM2YZf2KfYsdiv24zYqNmH2LTYql/Yrtix2K/Yp9ivX9iq24zYsV/Zhdix2K/Yp9ivX9i02YfYsduM2YjYsV/ZhdmH2LFf2KLYqNin2YZf2KLYsNixX9iv24xf2KjZh9mF2YZf2KfYs9mB2YbYrycuc3BsaXQoJ18nKS5tYXAoZCA9PiAoeyBsb25nOiBkLCBzaG9ydDogZCwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgICAgICAgICAgICBkYXlOYW1lczogJ9i02YbYqNmHX9uM2qnYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZhyDYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrCDYtNmG2KjZh1/YrNmF2LnZhycuc3BsaXQoJ18nKS5tYXAoZCA9PiAoeyBsb25nOiBkLCBzaG9ydDogZFswXSwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgICAgICAgICAgICB3ZWVrZW5kOiBbNywgMV0sXG4gICAgICAgICAgICAgICAgZm9ybWF0czoge1xuICAgICAgICAgICAgICAgICAgICBkYXRlSW5wdXQ6IFwieXl5eS9NTS9kZFwiLFxuICAgICAgICAgICAgICAgICAgICB0aW1lSW5wdXQ6IFwiSEg6bW1cIixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWVJbnB1dDogXCJ5eXl5L01NL2RkIEhIOm1tXCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGVEaXNwbGF5OiBcIkREREQsIGQgTU1NIHl5eXlcIixcbiAgICAgICAgICAgICAgICAgICAgdGltZURpc3BsYXk6IFwiSEg6bW1cIixcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVRpbWVEaXNwbGF5OiBcIkREREQsIGQgTU1NIHl5eXkgSEg6bW1cIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH1cbn07XG5cblxuZXhwb3J0IHR5cGUgUGFydGlhbERhdGVUaW1lQ29uZmlnID0gUGFydGlhbDxBWERhdGVUaW1lQ29uZmlnPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUaW1lQ29uZmlnKGNvbmZpZzogUGFydGlhbERhdGVUaW1lQ29uZmlnID0ge30pOiBBWERhdGVUaW1lQ29uZmlnIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIC4uLkFYRGF0ZVRpbWVEZWZhdWx0Q29uZmlnLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0XG59Il19