@acorex/core 5.7.0 → 6.0.0
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/README.md +24 -24
- package/config/index.d.ts +5 -0
- package/config/public-api.d.ts +1 -0
- package/{lib/config → config/src}/configs.d.ts +0 -0
- package/dateTime/index.d.ts +5 -0
- package/dateTime/public-api.d.ts +5 -0
- package/{lib/dateTime → dateTime/src}/datetime.class.d.ts +0 -0
- package/{lib/dateTime → dateTime/src}/datetime.module.d.ts +0 -0
- package/{lib/dateTime → dateTime/src}/datetime.pipe.d.ts +0 -0
- package/{lib/dateTime → dateTime/src}/georgian.calendar.d.ts +0 -0
- package/{lib/dateTime → dateTime/src}/jalali.calendar.d.ts +0 -0
- package/esm2020/acorex-core.mjs +1 -1
- package/esm2020/config/acorex-core-config.mjs +5 -0
- package/esm2020/config/public-api.mjs +2 -0
- package/esm2020/config/src/configs.mjs +32 -0
- package/esm2020/dateTime/acorex-core-dateTime.mjs +5 -0
- package/esm2020/dateTime/public-api.mjs +6 -0
- package/esm2020/dateTime/src/datetime.class.mjs +295 -0
- package/esm2020/dateTime/src/datetime.module.mjs +33 -0
- package/esm2020/dateTime/src/datetime.pipe.mjs +26 -0
- package/esm2020/dateTime/src/georgian.calendar.mjs +189 -0
- package/esm2020/dateTime/src/jalali.calendar.mjs +359 -0
- package/esm2020/events/acorex-core-events.mjs +5 -0
- package/esm2020/events/public-api.mjs +2 -0
- package/esm2020/events/src/event.service.mjs +36 -0
- package/esm2020/http/acorex-core-http.mjs +5 -0
- package/esm2020/http/public-api.mjs +6 -0
- package/esm2020/http/src/http-error.class.mjs +2 -0
- package/esm2020/http/src/http-events.interceptor.mjs +3 -0
- package/esm2020/http/src/http-request.class.mjs +2 -0
- package/esm2020/http/src/http-result.class.mjs +21 -0
- package/esm2020/http/src/http.module.mjs +29 -0
- package/esm2020/http/src/http.service.mjs +147 -0
- package/esm2020/pipes/acorex-core-pipes.mjs +5 -0
- package/esm2020/pipes/public-api.mjs +3 -0
- package/esm2020/pipes/src/pipes.module.mjs +19 -0
- package/esm2020/pipes/src/safe.pipe.mjs +30 -0
- package/esm2020/platform/acorex-core-platform.mjs +5 -0
- package/esm2020/platform/public-api.mjs +2 -0
- package/esm2020/platform/src/platform.service.mjs +141 -0
- package/esm2020/public-api.mjs +4 -12
- package/esm2020/translation/acorex-core-translation.mjs +5 -0
- package/esm2020/translation/public-api.mjs +4 -0
- package/esm2020/translation/src/translation.module.mjs +18 -0
- package/esm2020/translation/src/translator.mjs +43 -0
- package/esm2020/translation/src/translator.pipe.mjs +15 -0
- package/esm2020/utils/acorex-core-utils.mjs +5 -0
- package/esm2020/utils/public-api.mjs +5 -0
- package/esm2020/utils/src/color-util.mjs +71 -0
- package/esm2020/utils/src/drawing-util.mjs +27 -0
- package/esm2020/utils/src/object-util.mjs +39 -0
- package/esm2020/utils/src/string-util.mjs +19 -0
- package/events/index.d.ts +5 -0
- package/events/public-api.d.ts +1 -0
- package/{lib/events → events/src}/event.service.d.ts +0 -0
- package/fesm2015/acorex-core-config.mjs +39 -0
- package/fesm2015/acorex-core-config.mjs.map +1 -0
- package/fesm2015/acorex-core-dateTime.mjs +899 -0
- package/fesm2015/acorex-core-dateTime.mjs.map +1 -0
- package/fesm2015/acorex-core-events.mjs +43 -0
- package/fesm2015/acorex-core-events.mjs.map +1 -0
- package/fesm2015/acorex-core-http.mjs +201 -0
- package/fesm2015/acorex-core-http.mjs.map +1 -0
- package/fesm2015/acorex-core-pipes.mjs +53 -0
- package/fesm2015/acorex-core-pipes.mjs.map +1 -0
- package/fesm2015/acorex-core-platform.mjs +148 -0
- package/fesm2015/acorex-core-platform.mjs.map +1 -0
- package/fesm2015/acorex-core-translation.mjs +80 -0
- package/fesm2015/acorex-core-translation.mjs.map +1 -0
- package/fesm2015/acorex-core-utils.mjs +163 -0
- package/fesm2015/acorex-core-utils.mjs.map +1 -0
- package/fesm2015/acorex-core.mjs +5 -1399
- package/fesm2015/acorex-core.mjs.map +1 -1
- package/fesm2020/acorex-core-config.mjs +39 -0
- package/fesm2020/acorex-core-config.mjs.map +1 -0
- package/fesm2020/acorex-core-dateTime.mjs +899 -0
- package/fesm2020/acorex-core-dateTime.mjs.map +1 -0
- package/fesm2020/acorex-core-events.mjs +43 -0
- package/fesm2020/acorex-core-events.mjs.map +1 -0
- package/fesm2020/acorex-core-http.mjs +200 -0
- package/fesm2020/acorex-core-http.mjs.map +1 -0
- package/fesm2020/acorex-core-pipes.mjs +53 -0
- package/fesm2020/acorex-core-pipes.mjs.map +1 -0
- package/fesm2020/acorex-core-platform.mjs +148 -0
- package/fesm2020/acorex-core-platform.mjs.map +1 -0
- package/fesm2020/acorex-core-translation.mjs +79 -0
- package/fesm2020/acorex-core-translation.mjs.map +1 -0
- package/fesm2020/acorex-core-utils.mjs +163 -0
- package/fesm2020/acorex-core-utils.mjs.map +1 -0
- package/fesm2020/acorex-core.mjs +5 -1396
- package/fesm2020/acorex-core.mjs.map +1 -1
- package/http/index.d.ts +5 -0
- package/http/public-api.d.ts +5 -0
- package/http/src/http-error.class.d.ts +7 -0
- package/http/src/http-events.interceptor.d.ts +10 -0
- package/http/src/http-request.class.d.ts +14 -0
- package/http/src/http-result.class.d.ts +11 -0
- package/http/src/http.module.d.ts +8 -0
- package/http/src/http.service.d.ts +23 -0
- package/package.json +80 -13
- package/pipes/index.d.ts +5 -0
- package/pipes/public-api.d.ts +2 -0
- package/pipes/src/pipes.module.d.ts +8 -0
- package/{lib/utils → pipes/src}/safe.pipe.d.ts +0 -0
- package/platform/index.d.ts +5 -0
- package/platform/public-api.d.ts +1 -0
- package/{lib/platform → platform/src}/platform.service.d.ts +1 -1
- package/public-api.d.ts +1 -12
- package/translation/index.d.ts +5 -0
- package/translation/public-api.d.ts +3 -0
- package/{lib/translation → translation/src}/translation.module.d.ts +0 -0
- package/{lib/translation → translation/src}/translator.d.ts +0 -0
- package/{lib/translation → translation/src}/translator.pipe.d.ts +0 -0
- package/utils/index.d.ts +5 -0
- package/utils/public-api.d.ts +4 -0
- package/{lib/utils → utils/src}/color-util.d.ts +0 -0
- package/{lib/utils → utils/src}/drawing-util.d.ts +1 -1
- package/{lib/utils → utils/src}/object-util.d.ts +0 -0
- package/{lib/utils → utils/src}/string-util.d.ts +0 -0
- package/config/ax-preset.js +0 -204
- package/esm2020/lib/config/configs.mjs +0 -29
- package/esm2020/lib/core.module.mjs +0 -18
- package/esm2020/lib/dateTime/datetime.class.mjs +0 -295
- package/esm2020/lib/dateTime/datetime.module.mjs +0 -33
- package/esm2020/lib/dateTime/datetime.pipe.mjs +0 -26
- package/esm2020/lib/dateTime/georgian.calendar.mjs +0 -189
- package/esm2020/lib/dateTime/index.mjs +0 -6
- package/esm2020/lib/dateTime/jalali.calendar.mjs +0 -359
- package/esm2020/lib/events/event.service.mjs +0 -36
- package/esm2020/lib/events/index.mjs +0 -2
- package/esm2020/lib/hotkeys/hotkeys.service.mjs +0 -38
- package/esm2020/lib/hotkeys/index.mjs +0 -2
- package/esm2020/lib/platform/index.mjs +0 -2
- package/esm2020/lib/platform/platform.service.mjs +0 -138
- package/esm2020/lib/translation/index.mjs +0 -4
- package/esm2020/lib/translation/translation.module.mjs +0 -18
- package/esm2020/lib/translation/translator.mjs +0 -43
- package/esm2020/lib/translation/translator.pipe.mjs +0 -15
- package/esm2020/lib/utils/color-util.mjs +0 -71
- package/esm2020/lib/utils/drawing-util.mjs +0 -27
- package/esm2020/lib/utils/index.mjs +0 -6
- package/esm2020/lib/utils/object-util.mjs +0 -39
- package/esm2020/lib/utils/safe.pipe.mjs +0 -30
- package/esm2020/lib/utils/string-util.mjs +0 -19
- package/lib/core.module.d.ts +0 -7
- package/lib/dateTime/index.d.ts +0 -5
- package/lib/events/index.d.ts +0 -1
- package/lib/hotkeys/hotkeys.service.d.ts +0 -17
- package/lib/hotkeys/index.d.ts +0 -1
- package/lib/platform/index.d.ts +0 -1
- package/lib/translation/index.d.ts +0 -3
- package/lib/utils/index.d.ts +0 -5
package/config/ax-preset.js
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
const plugin = require('tailwindcss/plugin');
|
|
2
|
-
const withAnimations = require('animated-tailwindcss');
|
|
3
|
-
function withOpacityValue(variable) {
|
|
4
|
-
return ({ opacityValue }) => {
|
|
5
|
-
if (opacityValue === undefined) {
|
|
6
|
-
return `rgb(var(${variable}))`
|
|
7
|
-
}
|
|
8
|
-
return `rgb(var(${variable}) / ${opacityValue})`
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
module.exports = withAnimations({
|
|
13
|
-
prefix: 'ax-',
|
|
14
|
-
darkMode: 'class',
|
|
15
|
-
mode: "jit",
|
|
16
|
-
content: [
|
|
17
|
-
"./src/**/*.{html,ts,scss}",
|
|
18
|
-
"./projects/**/*.{html,ts,scss}",
|
|
19
|
-
"./dist/acorex/**/*.{html,ts,scss}",
|
|
20
|
-
"./node_modules/@acorex/**/*.{html,ts,js,mjs,scss}",
|
|
21
|
-
],
|
|
22
|
-
darkMode: "class", // or 'media' or 'class'
|
|
23
|
-
theme: {
|
|
24
|
-
extend: {
|
|
25
|
-
colors: {
|
|
26
|
-
black: withOpacityValue('--ax-color-black'),
|
|
27
|
-
white: withOpacityValue('--ax-color-white'),
|
|
28
|
-
"default-background": withOpacityValue('--ax-color-default-background'),
|
|
29
|
-
"default-color": withOpacityValue('--ax-color-default-color'),
|
|
30
|
-
"primary": {
|
|
31
|
-
"fore": withOpacityValue('--ax-color-primary-fore'),
|
|
32
|
-
"50": withOpacityValue('--ax-color-primary-50'),
|
|
33
|
-
"100": withOpacityValue('--ax-color-primary-100'),
|
|
34
|
-
"200": withOpacityValue('--ax-color-primary-200'),
|
|
35
|
-
"300": withOpacityValue('--ax-color-primary-300'),
|
|
36
|
-
"400": withOpacityValue('--ax-color-primary-400'),
|
|
37
|
-
"500": withOpacityValue('--ax-color-primary-500'),
|
|
38
|
-
"600": withOpacityValue('--ax-color-primary-600'),
|
|
39
|
-
"700": withOpacityValue('--ax-color-primary-700'),
|
|
40
|
-
"800": withOpacityValue('--ax-color-primary-800'),
|
|
41
|
-
"900": withOpacityValue('--ax-color-primary-900'),
|
|
42
|
-
},
|
|
43
|
-
"secondary": {
|
|
44
|
-
"fore": withOpacityValue('--ax-color-secondary-fore'),
|
|
45
|
-
"50": withOpacityValue('--ax-color-secondary-50'),
|
|
46
|
-
"100": withOpacityValue('--ax-color-secondary-100'),
|
|
47
|
-
"200": withOpacityValue('--ax-color-secondary-200'),
|
|
48
|
-
"300": withOpacityValue('--ax-color-secondary-300'),
|
|
49
|
-
"400": withOpacityValue('--ax-color-secondary-400'),
|
|
50
|
-
"500": withOpacityValue('--ax-color-secondary-500'),
|
|
51
|
-
"600": withOpacityValue('--ax-color-secondary-600'),
|
|
52
|
-
"700": withOpacityValue('--ax-color-secondary-700'),
|
|
53
|
-
"800": withOpacityValue('--ax-color-secondary-800'),
|
|
54
|
-
"900": withOpacityValue('--ax-color-secondary-900'),
|
|
55
|
-
},
|
|
56
|
-
"success": {
|
|
57
|
-
"fore": withOpacityValue('--ax-color-success-fore'),
|
|
58
|
-
"50": withOpacityValue('--ax-color-success-50'),
|
|
59
|
-
"100": withOpacityValue('--ax-color-success-100'),
|
|
60
|
-
"200": withOpacityValue('--ax-color-success-200'),
|
|
61
|
-
"300": withOpacityValue('--ax-color-success-300'),
|
|
62
|
-
"400": withOpacityValue('--ax-color-success-400'),
|
|
63
|
-
"500": withOpacityValue('--ax-color-success-500'),
|
|
64
|
-
"600": withOpacityValue('--ax-color-success-600'),
|
|
65
|
-
"700": withOpacityValue('--ax-color-success-700'),
|
|
66
|
-
"800": withOpacityValue('--ax-color-success-800'),
|
|
67
|
-
"900": withOpacityValue('--ax-color-success-900'),
|
|
68
|
-
},
|
|
69
|
-
"danger": {
|
|
70
|
-
"fore": withOpacityValue('--ax-color-danger-fore'),
|
|
71
|
-
"50": withOpacityValue('--ax-color-danger-50'),
|
|
72
|
-
"100": withOpacityValue('--ax-color-danger-100'),
|
|
73
|
-
"200": withOpacityValue('--ax-color-danger-200'),
|
|
74
|
-
"300": withOpacityValue('--ax-color-danger-300'),
|
|
75
|
-
"400": withOpacityValue('--ax-color-danger-400'),
|
|
76
|
-
"500": withOpacityValue('--ax-color-danger-500'),
|
|
77
|
-
"600": withOpacityValue('--ax-color-danger-600'),
|
|
78
|
-
"700": withOpacityValue('--ax-color-danger-700'),
|
|
79
|
-
"800": withOpacityValue('--ax-color-danger-800'),
|
|
80
|
-
"900": withOpacityValue('--ax-color-danger-900'),
|
|
81
|
-
},
|
|
82
|
-
"warning": {
|
|
83
|
-
"fore": withOpacityValue('--ax-color-warning-fore'),
|
|
84
|
-
"50": withOpacityValue('--ax-color-warning-50'),
|
|
85
|
-
"100": withOpacityValue('--ax-color-warning-100'),
|
|
86
|
-
"200": withOpacityValue('--ax-color-warning-200'),
|
|
87
|
-
"300": withOpacityValue('--ax-color-warning-300'),
|
|
88
|
-
"400": withOpacityValue('--ax-color-warning-400'),
|
|
89
|
-
"500": withOpacityValue('--ax-color-warning-500'),
|
|
90
|
-
"600": withOpacityValue('--ax-color-warning-600'),
|
|
91
|
-
"700": withOpacityValue('--ax-color-warning-700'),
|
|
92
|
-
"800": withOpacityValue('--ax-color-warning-800'),
|
|
93
|
-
"900": withOpacityValue('--ax-color-warning-900'),
|
|
94
|
-
},
|
|
95
|
-
"info": {
|
|
96
|
-
"fore": withOpacityValue('--ax-color-info-fore'),
|
|
97
|
-
"50": withOpacityValue('--ax-color-info-50'),
|
|
98
|
-
"100": withOpacityValue('--ax-color-info-100'),
|
|
99
|
-
"200": withOpacityValue('--ax-color-info-200'),
|
|
100
|
-
"300": withOpacityValue('--ax-color-info-300'),
|
|
101
|
-
"400": withOpacityValue('--ax-color-info-400'),
|
|
102
|
-
"500": withOpacityValue('--ax-color-info-500'),
|
|
103
|
-
"600": withOpacityValue('--ax-color-info-600'),
|
|
104
|
-
"700": withOpacityValue('--ax-color-info-700'),
|
|
105
|
-
"800": withOpacityValue('--ax-color-info-800'),
|
|
106
|
-
"900": withOpacityValue('--ax-color-info-900'),
|
|
107
|
-
},
|
|
108
|
-
"light": {
|
|
109
|
-
"fore": withOpacityValue('--ax-color-light-fore'),
|
|
110
|
-
"50": withOpacityValue('--ax-color-light-50'),
|
|
111
|
-
"100": withOpacityValue('--ax-color-light-100'),
|
|
112
|
-
"200": withOpacityValue('--ax-color-light-200'),
|
|
113
|
-
"300": withOpacityValue('--ax-color-light-300'),
|
|
114
|
-
"400": withOpacityValue('--ax-color-light-400'),
|
|
115
|
-
"500": withOpacityValue('--ax-color-light-500'),
|
|
116
|
-
"600": withOpacityValue('--ax-color-light-600'),
|
|
117
|
-
"700": withOpacityValue('--ax-color-light-700'),
|
|
118
|
-
"800": withOpacityValue('--ax-color-light-800'),
|
|
119
|
-
"900": withOpacityValue('--ax-color-light-900'),
|
|
120
|
-
},
|
|
121
|
-
"dark": {
|
|
122
|
-
"fore": withOpacityValue('--ax-color-dark-fore'),
|
|
123
|
-
"50": withOpacityValue('--ax-color-dark-50'),
|
|
124
|
-
"100": withOpacityValue('--ax-color-dark-100'),
|
|
125
|
-
"200": withOpacityValue('--ax-color-dark-200'),
|
|
126
|
-
"300": withOpacityValue('--ax-color-dark-300'),
|
|
127
|
-
"400": withOpacityValue('--ax-color-dark-400'),
|
|
128
|
-
"500": withOpacityValue('--ax-color-dark-500'),
|
|
129
|
-
"600": withOpacityValue('--ax-color-dark-600'),
|
|
130
|
-
"700": withOpacityValue('--ax-color-dark-700'),
|
|
131
|
-
"800": withOpacityValue('--ax-color-dark-800'),
|
|
132
|
-
"900": withOpacityValue('--ax-color-dark-900'),
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
},
|
|
136
|
-
width: {
|
|
137
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
138
|
-
},
|
|
139
|
-
minWidth: {
|
|
140
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
141
|
-
},
|
|
142
|
-
maxWidth: {
|
|
143
|
-
'8xl': '90rem',
|
|
144
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
145
|
-
},
|
|
146
|
-
height: {
|
|
147
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
148
|
-
},
|
|
149
|
-
minHeight: {
|
|
150
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
151
|
-
},
|
|
152
|
-
maxHeight: {
|
|
153
|
-
'base': 'calc((var(--ax-base-size) * var(--ax-base-ratio)))'
|
|
154
|
-
},
|
|
155
|
-
keyframes: {
|
|
156
|
-
fadeIn: {
|
|
157
|
-
"0%": { opacity: 0 },
|
|
158
|
-
"100%": { opacity: 1 }
|
|
159
|
-
},
|
|
160
|
-
fadeOut: {
|
|
161
|
-
"0%": { opacity: 1 },
|
|
162
|
-
"100%": { opacity: 0 }
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
animation: {
|
|
166
|
-
"fadeIn": "fadeIn ease-in-out 1s",
|
|
167
|
-
"fadeOut": "fadeOut ease-in-out 1s",
|
|
168
|
-
}
|
|
169
|
-
},
|
|
170
|
-
},
|
|
171
|
-
variants: {
|
|
172
|
-
extend: {},
|
|
173
|
-
},
|
|
174
|
-
plugins: [
|
|
175
|
-
plugin(function ({ addUtilities }) {
|
|
176
|
-
const acorexClasses = {
|
|
177
|
-
'.animate-fast': {
|
|
178
|
-
animationDuration: '800ms'
|
|
179
|
-
},
|
|
180
|
-
'.animate-faster': {
|
|
181
|
-
animationDuration: '500ms'
|
|
182
|
-
},
|
|
183
|
-
'.bg-default': {
|
|
184
|
-
backgroundColor: 'rgb(var(--ax-color-default-background) / var(--tw-bg-opacity))'
|
|
185
|
-
},
|
|
186
|
-
'.text-default': {
|
|
187
|
-
backgroundColor: 'rgb(var(--ax-color-default-color) / var(--tw-text-opacity))'
|
|
188
|
-
},
|
|
189
|
-
'.rtl': {
|
|
190
|
-
direction: 'rtl'
|
|
191
|
-
},
|
|
192
|
-
'.ltr': {
|
|
193
|
-
direction: 'ltr'
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
addUtilities(acorexClasses, ['responsive', 'hover', 'focus'])
|
|
197
|
-
}),
|
|
198
|
-
require('postcss-import'),
|
|
199
|
-
require('tailwindcss/nesting')(require('postcss-nesting')),
|
|
200
|
-
require('tailwindcss'),
|
|
201
|
-
require('autoprefixer'),
|
|
202
|
-
require('tailwind-rtl-utilities')
|
|
203
|
-
],
|
|
204
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import * as _ from 'lodash';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
3
|
-
// @dynamic
|
|
4
|
-
export class AXConfig {
|
|
5
|
-
static get onChange() {
|
|
6
|
-
return AXConfig.dataChangeSubject.asObservable();
|
|
7
|
-
}
|
|
8
|
-
static set(arg1, arg2) {
|
|
9
|
-
if (arg1 && typeof arg1 == 'string') {
|
|
10
|
-
_.set(AXConfig.dataModel, arg1, arg2);
|
|
11
|
-
AXConfig.dataChangeSubject.next(AXConfig.dataModel);
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
if (arg1 && typeof arg1 == 'object') {
|
|
15
|
-
_.merge(AXConfig.dataModel, arg1);
|
|
16
|
-
AXConfig.dataChangeSubject.next(AXConfig.dataModel);
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
if (!arg1 && !arg2) {
|
|
20
|
-
return AXConfig.dataChangeSubject.asObservable();
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
static get(path, defaultValue) {
|
|
24
|
-
return _.get(AXConfig.dataModel, path, defaultValue);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
AXConfig.dataModel = {};
|
|
28
|
-
AXConfig.dataChangeSubject = new Subject();
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fjb3JleC9jb3JlL3NyYy9saWIvY29uZmlnL2NvbmZpZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUUzQyxXQUFXO0FBQ1gsTUFBTSxPQUFPLFFBQVE7SUFLakIsTUFBTSxLQUFLLFFBQVE7UUFDZixPQUFPLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBSUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFVLEVBQUUsSUFBVTtRQUM3QixJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUU7WUFFakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDakMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2xDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxRQUFRLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFZLEVBQUUsWUFBa0I7UUFDeEMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELENBQUM7O0FBN0JjLGtCQUFTLEdBQVEsRUFBRSxDQUFDO0FBQ3BCLDBCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbi8vIEBkeW5hbWljXHJcbmV4cG9ydCBjbGFzcyBBWENvbmZpZyB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBkYXRhTW9kZWw6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGF0YUNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG5cclxuICAgIHN0YXRpYyBnZXQgb25DaGFuZ2UoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gQVhDb25maWcuZGF0YUNoYW5nZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHNldChjb25maWc6IGFueSk6IGFueTtcclxuICAgIHN0YXRpYyBzZXQocGF0aDogc3RyaW5nLCB2YWx1ZT86IGFueSk6IHZvaWQ7XHJcbiAgICBzdGF0aWMgc2V0KGFyZzE/OiBhbnksIGFyZzI/OiBhbnkpIHtcclxuICAgICAgICBpZiAoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgXy5zZXQoQVhDb25maWcuZGF0YU1vZGVsLCBhcmcxLGFyZzIpO1xyXG4gICAgICAgICAgICBBWENvbmZpZy5kYXRhQ2hhbmdlU3ViamVjdC5uZXh0KEFYQ29uZmlnLmRhdGFNb2RlbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFyZzEgJiYgdHlwZW9mIGFyZzEgPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgXy5tZXJnZShBWENvbmZpZy5kYXRhTW9kZWwsIGFyZzEpO1xyXG4gICAgICAgICAgICBBWENvbmZpZy5kYXRhQ2hhbmdlU3ViamVjdC5uZXh0KEFYQ29uZmlnLmRhdGFNb2RlbCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmcxICYmICFhcmcyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBBWENvbmZpZy5kYXRhQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldChwYXRoOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XHJcbiAgICAgICByZXR1cm4gXy5nZXQoQVhDb25maWcuZGF0YU1vZGVsLHBhdGgsZGVmYXVsdFZhbHVlKTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NgModule } from "@angular/core";
|
|
2
|
-
import { AXSafePipe } from "./utils";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class AXCoreModule {
|
|
5
|
-
}
|
|
6
|
-
AXCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AXCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
7
|
-
AXCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0", ngImport: i0, type: AXCoreModule, declarations: [AXSafePipe], exports: [AXSafePipe] });
|
|
8
|
-
AXCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AXCoreModule, providers: [] });
|
|
9
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AXCoreModule, decorators: [{
|
|
10
|
-
type: NgModule,
|
|
11
|
-
args: [{
|
|
12
|
-
imports: [],
|
|
13
|
-
exports: [AXSafePipe],
|
|
14
|
-
declarations: [AXSafePipe],
|
|
15
|
-
providers: [],
|
|
16
|
-
}]
|
|
17
|
-
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29yZS9zcmMvbGliL2NvcmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFRckMsTUFBTSxPQUFPLFlBQVk7O3lHQUFaLFlBQVk7MEdBQVosWUFBWSxpQkFITixVQUFVLGFBRGYsVUFBVTswR0FJWCxZQUFZLGFBRlYsRUFBRTsyRkFFSixZQUFZO2tCQU54QixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztvQkFDckIsWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDO29CQUMxQixTQUFTLEVBQUUsRUFBRTtpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFYU2FmZVBpcGUgfSBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtdLFxyXG4gICAgZXhwb3J0czogW0FYU2FmZVBpcGVdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbQVhTYWZlUGlwZV0sXHJcbiAgICBwcm92aWRlcnM6IFtdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhDb3JlTW9kdWxlIHsgfVxyXG4iXX0=
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
import * as _ from 'lodash';
|
|
2
|
-
import { AXConfig } from '../config/configs';
|
|
3
|
-
// @dynamic
|
|
4
|
-
export class AXDateTime {
|
|
5
|
-
constructor(value = new Date(), calendar = AXConfig.get(`dateTime.calendar`)) {
|
|
6
|
-
this._formatKeys = {
|
|
7
|
-
ss: () => this.pad(this.date.getSeconds(), 2),
|
|
8
|
-
s: () => this.date.getSeconds().toString(),
|
|
9
|
-
//
|
|
10
|
-
dd: () => this.pad(this.calendar.dayOfMonth(this.date), 2),
|
|
11
|
-
d: () => this.calendar.dayOfMonth(this.date).toString(),
|
|
12
|
-
//
|
|
13
|
-
mm: () => this.pad(this.date.getMinutes(), 2),
|
|
14
|
-
m: () => this.date.getMinutes().toString(),
|
|
15
|
-
//
|
|
16
|
-
MMMM: () => this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1],
|
|
17
|
-
MMM: () => this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1],
|
|
18
|
-
MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),
|
|
19
|
-
//
|
|
20
|
-
DDDD: () => this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1],
|
|
21
|
-
DDD: () => this.calendar.dayShortNames[this.calendar.dayOfWeek(this.date) - 1],
|
|
22
|
-
//
|
|
23
|
-
yyyy: () => this.calendar.year(this.date).toString(),
|
|
24
|
-
YYYY: () => this.calendar.year(this.date).toString(),
|
|
25
|
-
yy: () => this.calendar.year(this.date).toString().substring(2),
|
|
26
|
-
YY: () => this.calendar.year(this.date).toString().substring(2),
|
|
27
|
-
//
|
|
28
|
-
HH: () => this.pad(this.date.getHours(), 2),
|
|
29
|
-
H: () => this.date.getHours().toString(),
|
|
30
|
-
//
|
|
31
|
-
hh: () => this.pad((this.date.getHours() % 12 || 12), 2),
|
|
32
|
-
h: () => (this.date.getHours() % 12 || 12).toString(),
|
|
33
|
-
//
|
|
34
|
-
A: () => (this.date.getHours() < 12) ? 'am' : 'pm',
|
|
35
|
-
a: () => (this.date.getHours() < 12) ? 'am' : 'pm',
|
|
36
|
-
};
|
|
37
|
-
this._calendar = AXDateTime.resolveCalendar(calendar);
|
|
38
|
-
if (value instanceof Date) {
|
|
39
|
-
this._date = value;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
//TODO: parse jalali
|
|
43
|
-
this._date = new Date(value);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
static convert(value, calendar = AXConfig.get('dateTime.calendar')) {
|
|
47
|
-
let date;
|
|
48
|
-
if (typeof value === 'string' || value instanceof String) {
|
|
49
|
-
date = new AXDateTime(value, calendar);
|
|
50
|
-
}
|
|
51
|
-
else if (value instanceof Date) {
|
|
52
|
-
date = new AXDateTime(value, calendar);
|
|
53
|
-
}
|
|
54
|
-
else if (value instanceof AXDateTime) {
|
|
55
|
-
date = new AXDateTime(value.date, calendar);
|
|
56
|
-
}
|
|
57
|
-
return date;
|
|
58
|
-
}
|
|
59
|
-
static from(value = {
|
|
60
|
-
calendar: AXConfig.get('dateTime.calendar'),
|
|
61
|
-
year: 1,
|
|
62
|
-
month: 1,
|
|
63
|
-
date: 1,
|
|
64
|
-
hours: 0,
|
|
65
|
-
minutes: 0,
|
|
66
|
-
seconds: 0,
|
|
67
|
-
ms: 0
|
|
68
|
-
}) {
|
|
69
|
-
// let date: AXDateTime = new AXDateTime(new Date(), value.calendar);
|
|
70
|
-
// date.set('year', value.year);
|
|
71
|
-
// date.set('month', value.month);
|
|
72
|
-
// date.set('day', value.date);
|
|
73
|
-
// date.set('hour', value.hours);
|
|
74
|
-
// date.set('minute', value.minutes);
|
|
75
|
-
// date.set('second', value.seconds);
|
|
76
|
-
// date.set('ms', value.ms);
|
|
77
|
-
return AXDateTime.resolveCalendar(value.calendar).create(value);
|
|
78
|
-
}
|
|
79
|
-
static resolveCalendar(calendar) {
|
|
80
|
-
return typeof calendar == 'string'
|
|
81
|
-
? AXConfig.get(`dateTime.calendars.${calendar}`)
|
|
82
|
-
: calendar;
|
|
83
|
-
}
|
|
84
|
-
get date() {
|
|
85
|
-
return this._date;
|
|
86
|
-
}
|
|
87
|
-
get calendar() {
|
|
88
|
-
return this._calendar;
|
|
89
|
-
}
|
|
90
|
-
clone() {
|
|
91
|
-
return new AXDateTime(this.date, this.calendar);
|
|
92
|
-
}
|
|
93
|
-
get dayOfMonth() {
|
|
94
|
-
return this._calendar.dayOfMonth(this.date);
|
|
95
|
-
}
|
|
96
|
-
get dayOfYear() {
|
|
97
|
-
return this._calendar.dayOfYear(this.date);
|
|
98
|
-
}
|
|
99
|
-
get dayOfWeek() {
|
|
100
|
-
return this._calendar.dayOfWeek(this.date);
|
|
101
|
-
}
|
|
102
|
-
get hour() {
|
|
103
|
-
return this._date.getHours();
|
|
104
|
-
}
|
|
105
|
-
get minute() {
|
|
106
|
-
return this._date.getMinutes();
|
|
107
|
-
}
|
|
108
|
-
get second() {
|
|
109
|
-
return this._date.getSeconds();
|
|
110
|
-
}
|
|
111
|
-
get year() {
|
|
112
|
-
return this._calendar.year(this.date);
|
|
113
|
-
}
|
|
114
|
-
get monthOfYear() {
|
|
115
|
-
return this._calendar.monthOfYear(this.date);
|
|
116
|
-
}
|
|
117
|
-
get weekOfYear() {
|
|
118
|
-
return this._calendar.weekOfYear(this.date);
|
|
119
|
-
}
|
|
120
|
-
get month() {
|
|
121
|
-
return new AXCalendarMonth(this);
|
|
122
|
-
}
|
|
123
|
-
add(unit, amount) {
|
|
124
|
-
return this._calendar.add(this.date, unit, amount);
|
|
125
|
-
}
|
|
126
|
-
set(unit = 'day', value) {
|
|
127
|
-
return this._calendar.set(this.date, unit, value);
|
|
128
|
-
}
|
|
129
|
-
duration(end, unit = 'day') {
|
|
130
|
-
const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));
|
|
131
|
-
return range.duration();
|
|
132
|
-
}
|
|
133
|
-
startOf(unit = 'day') {
|
|
134
|
-
return this._calendar.startOf(this.date, unit);
|
|
135
|
-
}
|
|
136
|
-
endOf(unit = 'day') {
|
|
137
|
-
return this._calendar.endOf(this.date, unit);
|
|
138
|
-
}
|
|
139
|
-
format(format = AXConfig.get('dateTime.shortDateFormat')) {
|
|
140
|
-
const re = new RegExp(_.orderBy(Object.keys(this._formatKeys), c => c.length, ['desc']).join("|"), "gi");
|
|
141
|
-
return format.replace(re, (matched) => {
|
|
142
|
-
return this._formatKeys[matched]();
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
pad(n, width, z = '0') {
|
|
146
|
-
n = n + '';
|
|
147
|
-
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
|
148
|
-
}
|
|
149
|
-
toString(format = AXConfig.get('dateTime.shortDateFormat')) {
|
|
150
|
-
return this.format(format);
|
|
151
|
-
}
|
|
152
|
-
equal(value, unit = 'day') {
|
|
153
|
-
return this.compare(value, unit) == 0;
|
|
154
|
-
}
|
|
155
|
-
compare(value, unit = 'day') {
|
|
156
|
-
const val = AXDateTime.convert(value, this.calendar.name());
|
|
157
|
-
const func = (v1, v2) => {
|
|
158
|
-
if (v1 == v2) {
|
|
159
|
-
return 0;
|
|
160
|
-
}
|
|
161
|
-
else if (v1 > v2) {
|
|
162
|
-
return 1;
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
return -1;
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
let p = 0;
|
|
169
|
-
switch (unit) {
|
|
170
|
-
case 'year':
|
|
171
|
-
return func(this.year, val.year);
|
|
172
|
-
case 'week':
|
|
173
|
-
p = this.compare(val, 'year');
|
|
174
|
-
return p == 0 ? func(this.weekOfYear, val.weekOfYear) : p;
|
|
175
|
-
case 'month':
|
|
176
|
-
p = this.compare(val, 'year');
|
|
177
|
-
return p == 0 ? func(this.monthOfYear, val.monthOfYear) : p;
|
|
178
|
-
case 'day':
|
|
179
|
-
p = this.compare(val, 'year');
|
|
180
|
-
return p == 0 ? func(this.dayOfYear, val.dayOfYear) : p;
|
|
181
|
-
case 'hour':
|
|
182
|
-
p = this.compare(val, 'day');
|
|
183
|
-
return p == 0 ? func(this.hour, val.hour) : p;
|
|
184
|
-
case 'minute':
|
|
185
|
-
p = this.compare(val, 'hour');
|
|
186
|
-
return p == 0 ? func(this.minute, val.minute) : p;
|
|
187
|
-
case 'second':
|
|
188
|
-
p = this.compare(val, 'minute');
|
|
189
|
-
return p == 0 ? func(this.second, val.second) : p;
|
|
190
|
-
default:
|
|
191
|
-
return func(this.date.getTime(), val.date.getTime());
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
convert(calendar) {
|
|
195
|
-
return AXDateTime.convert(this, calendar);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
export class AXCalendarMonth {
|
|
199
|
-
constructor(date) {
|
|
200
|
-
this.index = date.date.getMonth();
|
|
201
|
-
this.name = date.format('MMMM');
|
|
202
|
-
this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));
|
|
203
|
-
}
|
|
204
|
-
get range() {
|
|
205
|
-
return this._range;
|
|
206
|
-
}
|
|
207
|
-
set range(v) {
|
|
208
|
-
this._range = v;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
export class AXDateTimeRange {
|
|
212
|
-
constructor(startTime, endTime) {
|
|
213
|
-
this._startTime = startTime;
|
|
214
|
-
this._endTime = endTime;
|
|
215
|
-
}
|
|
216
|
-
get startTime() {
|
|
217
|
-
return this._startTime;
|
|
218
|
-
}
|
|
219
|
-
get endTime() {
|
|
220
|
-
return this._endTime;
|
|
221
|
-
}
|
|
222
|
-
duration() {
|
|
223
|
-
const result = {
|
|
224
|
-
miliseconds: 0,
|
|
225
|
-
seconds: 0,
|
|
226
|
-
minutes: 0,
|
|
227
|
-
hours: 0,
|
|
228
|
-
days: 0,
|
|
229
|
-
months: 0,
|
|
230
|
-
years: 0,
|
|
231
|
-
total: {
|
|
232
|
-
miliseconds: 0,
|
|
233
|
-
seconds: 0,
|
|
234
|
-
minutes: 0,
|
|
235
|
-
hours: 0,
|
|
236
|
-
days: 0,
|
|
237
|
-
weeks: 0,
|
|
238
|
-
months: 0,
|
|
239
|
-
years: 0,
|
|
240
|
-
},
|
|
241
|
-
};
|
|
242
|
-
const one_second = 1000;
|
|
243
|
-
const one_min = one_second * 60;
|
|
244
|
-
const one_hour = one_min * 60;
|
|
245
|
-
const one_day = one_hour * 24;
|
|
246
|
-
const one_week = one_day * 7;
|
|
247
|
-
const one_year = 365.25 * one_day;
|
|
248
|
-
const one_month = one_year / 12;
|
|
249
|
-
const startTime = this._startTime.date.getTime();
|
|
250
|
-
const endTime = this._endTime.date.getTime();
|
|
251
|
-
const diff = Math.abs(endTime - startTime);
|
|
252
|
-
//
|
|
253
|
-
result.total.miliseconds = diff;
|
|
254
|
-
result.total.seconds = Number((diff / one_second).toFixed(2));
|
|
255
|
-
result.total.minutes = Number((diff / one_min).toFixed(2));
|
|
256
|
-
result.total.hours = Number((diff / one_hour).toFixed(2));
|
|
257
|
-
result.total.days = Number((diff / one_day).toFixed(2));
|
|
258
|
-
result.total.weeks = Number((diff / one_week).toFixed(2));
|
|
259
|
-
//
|
|
260
|
-
// let months = (this.endTime.year - this.startTime.year) * 12;
|
|
261
|
-
// months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;
|
|
262
|
-
// if (this.endTime.dayOfYear < this.startTime.dayOfYear) {
|
|
263
|
-
// months--;
|
|
264
|
-
// }
|
|
265
|
-
// result.total.months = Math.abs(months);
|
|
266
|
-
// TODO: review
|
|
267
|
-
result.total.months = Number((diff / one_month).toFixed(2));
|
|
268
|
-
result.total.years = Number((diff / one_year).toFixed(2));
|
|
269
|
-
//
|
|
270
|
-
result.miliseconds = result.total.miliseconds % 1000;
|
|
271
|
-
result.seconds = Number((result.total.seconds % 60).toFixed(0));
|
|
272
|
-
result.minutes = Number((result.total.minutes % 60).toFixed(0));
|
|
273
|
-
result.hours = Number((result.total.hours % 24).toFixed(0));
|
|
274
|
-
// TODO: review
|
|
275
|
-
result.days = Number((result.total.days % 30.4).toFixed(0));
|
|
276
|
-
result.months = Number((result.total.months % 12).toFixed(0));
|
|
277
|
-
result.years = Number(result.total.years.toFixed(0));
|
|
278
|
-
return result;
|
|
279
|
-
}
|
|
280
|
-
enumurate(unit = 'day', amount = 1) {
|
|
281
|
-
// TODO: setptemper savingtime issue
|
|
282
|
-
const result = [];
|
|
283
|
-
let item = this._startTime.clone();
|
|
284
|
-
while (item.compare(this._endTime, unit) < 1) {
|
|
285
|
-
result.push(item);
|
|
286
|
-
item = item.add(unit, amount);
|
|
287
|
-
}
|
|
288
|
-
return result;
|
|
289
|
-
}
|
|
290
|
-
includes(value, unit = 'day') {
|
|
291
|
-
// TODO: ??
|
|
292
|
-
return true;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY29yZXgvY29yZS9zcmMvbGliL2RhdGVUaW1lL2RhdGV0aW1lLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQTZEN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxVQUFVO0lBMkRyQixZQUNFLFFBQXVCLElBQUksSUFBSSxFQUFFLEVBQ2pDLFdBQWdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFrRjNELGdCQUFXLEdBQUc7WUFDcEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQzFDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3ZELEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDMUMsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0QsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlFLEVBQUU7WUFDRixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNwRCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNwRCxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQy9ELEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsRUFBRTtZQUNGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyRCxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ2xELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENB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QUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxFQUFFO1FBQ0YsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckQsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsZUFBZTtRQUNmLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQWlCLEtBQUssRUFBRSxTQUFpQixDQUFDO1FBQ2xELG9DQUFvQztRQUNwQyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQzlCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFpQixFQUFFLE9BQWlCLEtBQUs7UUFDaEQsV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQVlGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWdzJztcclxuXHJcbmV4cG9ydCB0eXBlIFRpbWVVbml0ID1cclxuICB8ICdtcydcclxuICB8ICdzZWNvbmQnXHJcbiAgfCAnbWludXRlJ1xyXG4gIHwgJ2hvdXInXHJcbiAgfCAnZGF5J1xyXG4gIHwgJ21vbnRoJ1xyXG4gIHwgJ3llYXInXHJcbiAgfCAnd2Vlayc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0ZVZhbHVlIHtcclxuICB5ZWFyOiBudW1iZXIsXHJcbiAgbW9udGg6IG51bWJlcixcclxuICBkYXRlOiBudW1iZXIsXHJcbiAgaG91cnM/OiBudW1iZXIsXHJcbiAgbWludXRlcz86IG51bWJlcixcclxuICBzZWNvbmRzPzogbnVtYmVyLFxyXG4gIG1zPzogbnVtYmVyXHJcbiAgY2FsZW5kYXI6IHN0cmluZztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQVhDYWxlbmRhciB7XHJcbiAgbW9udGhOYW1lczogc3RyaW5nW107XHJcblxyXG4gIG1vbnRoU2hvcnROYW1lczogc3RyaW5nW107XHJcblxyXG4gIGRheU5hbWVzOiBzdHJpbmdbXTtcclxuXHJcbiAgZGF5U2hvcnROYW1lczogc3RyaW5nW107XHJcblxyXG4gIG5hbWUoKTogc3RyaW5nO1xyXG5cclxuICBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gIGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuICBkYXlPZldlZWsoZGF0ZTogRGF0ZSk6IG51bWJlcjtcclxuXHJcbiAgbW9udGhPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcclxuXHJcbiAgd2Vla09mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xyXG5cclxuICB5ZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XHJcblxyXG4gIGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xyXG5cclxuICBzZXQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lO1xyXG5cclxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZTtcclxuXHJcbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xyXG5cclxuICBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWUge1xyXG4gIHN0YXRpYyBjb252ZXJ0KFxyXG4gICAgdmFsdWU6IERhdGUgfCBBWERhdGVUaW1lIHwgc3RyaW5nLFxyXG4gICAgY2FsZW5kYXI6IHN0cmluZyA9IEFYQ29uZmlnLmdldCgnZGF0ZVRpbWUuY2FsZW5kYXInKVxyXG4gICk6IEFYRGF0ZVRpbWUge1xyXG4gICAgbGV0IGRhdGU6IEFYRGF0ZVRpbWU7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xyXG4gICAgICBkYXRlID0gbmV3IEFYRGF0ZVRpbWUodmFsdWUgYXMgc3RyaW5nLCBjYWxlbmRhcik7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBkYXRlID0gbmV3IEFYRGF0ZVRpbWUodmFsdWUgYXMgRGF0ZSwgY2FsZW5kYXIpO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUpIHtcclxuICAgICAgZGF0ZSA9IG5ldyBBWERhdGVUaW1lKHZhbHVlLmRhdGUsIGNhbGVuZGFyKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb20odmFsdWU6IEFYRGF0ZVZhbHVlID0ge1xyXG4gICAgY2FsZW5kYXI6IEFYQ29uZmlnLmdldCgnZGF0ZVRpbWUuY2FsZW5kYXInKSxcclxuICAgIHllYXI6IDEsXHJcbiAgICBtb250aDogMSxcclxuICAgIGRhdGU6IDEsXHJcbiAgICBob3VyczogMCxcclxuICAgIG1pbnV0ZXM6IDAsXHJcbiAgICBzZWNvbmRzOiAwLFxyXG4gICAgbXM6IDBcclxuICB9KTogQVhEYXRlVGltZSB7XHJcbiAgICAvLyBsZXQgZGF0ZTogQVhEYXRlVGltZSA9IG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKCksIHZhbHVlLmNhbGVuZGFyKTtcclxuICAgIC8vIGRhdGUuc2V0KCd5ZWFyJywgdmFsdWUueWVhcik7XHJcbiAgICAvLyBkYXRlLnNldCgnbW9udGgnLCB2YWx1ZS5tb250aCk7XHJcbiAgICAvLyBkYXRlLnNldCgnZGF5JywgdmFsdWUuZGF0ZSk7XHJcbiAgICAvLyBkYXRlLnNldCgnaG91cicsIHZhbHVlLmhvdXJzKTtcclxuICAgIC8vIGRhdGUuc2V0KCdtaW51dGUnLCB2YWx1ZS5taW51dGVzKTtcclxuICAgIC8vIGRhdGUuc2V0KCdzZWNvbmQnLCB2YWx1ZS5zZWNvbmRzKTtcclxuICAgIC8vIGRhdGUuc2V0KCdtcycsIHZhbHVlLm1zKTtcclxuXHJcbiAgICByZXR1cm4gQVhEYXRlVGltZS5yZXNvbHZlQ2FsZW5kYXIodmFsdWUuY2FsZW5kYXIpLmNyZWF0ZSh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhdGljIHJlc29sdmVDYWxlbmRhcihjYWxlbmRhcjogc3RyaW5nIHwgQVhDYWxlbmRhcik6IEFYQ2FsZW5kYXIge1xyXG4gICAgcmV0dXJuIHR5cGVvZiBjYWxlbmRhciA9PSAnc3RyaW5nJ1xyXG4gICAgICA/IEFYQ29uZmlnLmdldChgZGF0ZVRpbWUuY2FsZW5kYXJzLiR7Y2FsZW5kYXJ9YClcclxuICAgICAgOiBjYWxlbmRhcjtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIF9kYXRlOiBEYXRlO1xyXG5cclxuICBnZXQgZGF0ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsZW5kYXI6IEFYQ2FsZW5kYXI7XHJcbiAgZ2V0IGNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nID0gbmV3IERhdGUoKSxcclxuICAgIGNhbGVuZGFyOiBzdHJpbmcgfCBBWENhbGVuZGFyID0gQVhDb25maWcuZ2V0KGBkYXRlVGltZS5jYWxlbmRhcmApXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9jYWxlbmRhciA9IEFYRGF0ZVRpbWUucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyKTtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgdGhpcy5fZGF0ZSA9IHZhbHVlIGFzIERhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvL1RPRE86IHBhcnNlIGphbGFsaVxyXG4gICAgICB0aGlzLl9kYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvbmUoKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUodGhpcy5kYXRlLCB0aGlzLmNhbGVuZGFyKTtcclxuICB9XHJcblxyXG4gIGdldCBkYXlPZk1vbnRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRheU9mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRheU9mV2VlaygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhvdXIoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldEhvdXJzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgeWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnllYXIodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aE9mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgd2Vla09mWWVhcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcy5kYXRlKTtcclxuICB9XHJcblxyXG4gIGdldCBtb250aCgpOiBBWENhbGVuZGFyTW9udGgge1xyXG4gICAgcmV0dXJuIG5ldyBBWENhbGVuZGFyTW9udGgodGhpcyk7XHJcbiAgfVxyXG5cclxuICBhZGQodW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMuZGF0ZSwgdW5pdCwgYW1vdW50KTtcclxuICB9XHJcblxyXG4gIHNldCh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuc2V0KHRoaXMuZGF0ZSwgdW5pdCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZHVyYXRpb24oXHJcbiAgICBlbmQ6IERhdGUgfCBBWERhdGVUaW1lLFxyXG4gICAgdW5pdDogVGltZVVuaXQgPSAnZGF5J1xyXG4gICk6IEFYVGltZVNwYW4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBBWERhdGVUaW1lLmNvbnZlcnQoZW5kLCB0aGlzLmNhbGVuZGFyLm5hbWUoKSlcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmFuZ2UuZHVyYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0T2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnN0YXJ0T2YodGhpcy5kYXRlLCB1bml0KTtcclxuICB9XHJcblxyXG4gIGVuZE9mKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lIHtcclxuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5lbmRPZih0aGlzLmRhdGUsIHVuaXQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZm9ybWF0S2V5cyA9IHtcclxuICAgIHNzOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLCAyKSxcclxuICAgIHM6ICgpID0+IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSxcclxuICAgIC8vXHJcbiAgICBkZDogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSksIDIpLFxyXG4gICAgZDogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcclxuICAgIC8vXHJcbiAgICBtbTogKCkgPT4gdGhpcy5wYWQodGhpcy5kYXRlLmdldE1pbnV0ZXMoKSwgMiksXHJcbiAgICBtOiAoKSA9PiB0aGlzLmRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCksXHJcbiAgICAvL1xyXG4gICAgTU1NTTogKCkgPT4gdGhpcy5jYWxlbmRhci5tb250aE5hbWVzW3RoaXMuY2FsZW5kYXIubW9udGhPZlllYXIodGhpcy5kYXRlKSAtIDFdLFxyXG4gICAgTU1NOiAoKSA9PiB0aGlzLmNhbGVuZGFyLm1vbnRoU2hvcnROYW1lc1t0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxXSxcclxuICAgIE1NOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksIDIpLFxyXG4gICAgLy9cclxuICAgIEREREQ6ICgpID0+IHRoaXMuY2FsZW5kYXIuZGF5TmFtZXNbdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKSAtIDFdLFxyXG4gICAgREREOiAoKSA9PiB0aGlzLmNhbGVuZGFyLmRheVNob3J0TmFtZXNbdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKSAtIDFdLFxyXG4gICAgLy9cclxuICAgIHl5eXk6ICgpID0+IHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCksXHJcbiAgICBZWVlZOiAoKSA9PiB0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKS50b1N0cmluZygpLFxyXG4gICAgeXk6ICgpID0+IHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFxyXG4gICAgWVk6ICgpID0+IHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIpLFxyXG4gICAgLy9cclxuICAgIEhIOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSwgMiksXHJcbiAgICBIOiAoKSA9PiB0aGlzLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLFxyXG4gICAgLy9cclxuICAgIGhoOiAoKSA9PiB0aGlzLnBhZCgodGhpcy5kYXRlLmdldEhvdXJzKCkgJSAxMiB8fCAxMiksIDIpLFxyXG4gICAgaDogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIpLnRvU3RyaW5nKCksXHJcbiAgICAvL1xyXG4gICAgQTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIpID8gJ2FtJyA6ICdwbScsXHJcbiAgICBhOiAoKSA9PiAodGhpcy5kYXRlLmdldEhvdXJzKCkgPCAxMikgPyAnYW0nIDogJ3BtJyxcclxuICB9O1xyXG5cclxuICBmb3JtYXQoXHJcbiAgICBmb3JtYXQ6IHN0cmluZyA9IEFYQ29uZmlnLmdldCgnZGF0ZVRpbWUuc2hvcnREYXRlRm9ybWF0JylcclxuICApOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKF8ub3JkZXJCeShPYmplY3Qua2V5cyh0aGlzLl9mb3JtYXRLZXlzKSwgYyA9PiBjLmxlbmd0aCwgWydkZXNjJ10pLmpvaW4oXCJ8XCIpLCBcImdpXCIpO1xyXG4gICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKHJlLCAobWF0Y2hlZCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fZm9ybWF0S2V5c1ttYXRjaGVkXSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xyXG4gICAgbiA9IG4gKyAnJztcclxuICAgIHJldHVybiBuLmxlbmd0aCA+PSB3aWR0aCA/IG4gOiBuZXcgQXJyYXkod2lkdGggLSBuLmxlbmd0aCArIDEpLmpvaW4oeikgKyBuO1xyXG4gIH1cclxuXHJcbiAgdG9TdHJpbmcoZm9ybWF0OiBzdHJpbmcgPSBBWENvbmZpZy5nZXQoJ2RhdGVUaW1lLnNob3J0RGF0ZUZvcm1hdCcpKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1hdChmb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgZXF1YWwodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlKHZhbHVlLCB1bml0KSA9PSAwO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZSh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcclxuICAgIGNvbnN0IHZhbCA9IEFYRGF0ZVRpbWUuY29udmVydCh2YWx1ZSwgdGhpcy5jYWxlbmRhci5uYW1lKCkpO1xyXG4gICAgY29uc3QgZnVuYyA9ICh2MTogbnVtYmVyLCB2MjogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmICh2MSA9PSB2Mikge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHYxID4gdjIpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBwID0gMDtcclxuICAgIHN3aXRjaCAodW5pdCkge1xyXG4gICAgICBjYXNlICd5ZWFyJzpcclxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLnllYXIsIHZhbC55ZWFyKTtcclxuICAgICAgY2FzZSAnd2Vlayc6XHJcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XHJcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy53ZWVrT2ZZZWFyLCB2YWwud2Vla09mWWVhcikgOiBwO1xyXG4gICAgICBjYXNlICdtb250aCc6XHJcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XHJcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5tb250aE9mWWVhciwgdmFsLm1vbnRoT2ZZZWFyKSA6IHA7XHJcbiAgICAgIGNhc2UgJ2RheSc6XHJcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICd5ZWFyJyk7XHJcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5kYXlPZlllYXIsIHZhbC5kYXlPZlllYXIpIDogcDtcclxuICAgICAgY2FzZSAnaG91cic6XHJcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICdkYXknKTtcclxuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmhvdXIsIHZhbC5ob3VyKSA6IHA7XHJcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XHJcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICdob3VyJyk7XHJcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5taW51dGUsIHZhbC5taW51dGUpIDogcDtcclxuICAgICAgY2FzZSAnc2Vjb25kJzpcclxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ21pbnV0ZScpO1xyXG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuc2Vjb25kLCB2YWwuc2Vjb25kKSA6IHA7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcy5kYXRlLmdldFRpbWUoKSwgdmFsLmRhdGUuZ2V0VGltZSgpKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBjb252ZXJ0KGNhbGVuZGFyOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBBWERhdGVUaW1lLmNvbnZlcnQodGhpcywgY2FsZW5kYXIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJNb250aCB7XHJcbiAgcHJpdmF0ZSBfcmFuZ2U6IEFYRGF0ZVRpbWVSYW5nZTtcclxuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IEFYRGF0ZVRpbWVSYW5nZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmFuZ2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmFuZ2UodjogQVhEYXRlVGltZVJhbmdlKSB7XHJcbiAgICB0aGlzLl9yYW5nZSA9IHY7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihkYXRlOiBBWERhdGVUaW1lKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gZGF0ZS5kYXRlLmdldE1vbnRoKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBkYXRlLmZvcm1hdCgnTU1NTScpO1xyXG4gICAgdGhpcy5yYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UoXHJcbiAgICAgIG5ldyBBWERhdGVUaW1lKGRhdGUuc3RhcnRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKSxcclxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5lbmRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuVG90YWwge1xyXG4gIG1pbGlzZWNvbmRzOiBudW1iZXI7XHJcbiAgc2Vjb25kczogbnVtYmVyO1xyXG4gIG1pbnV0ZXM6IG51bWJlcjtcclxuICBob3VyczogbnVtYmVyO1xyXG4gIGRheXM6IG51bWJlcjtcclxuICB3ZWVrczogbnVtYmVyO1xyXG4gIG1vbnRoczogbnVtYmVyO1xyXG4gIHllYXJzOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQVhUaW1lU3BhbiB7XHJcbiAgbWlsaXNlY29uZHM6IG51bWJlcjtcclxuICBzZWNvbmRzOiBudW1iZXI7XHJcbiAgbWludXRlczogbnVtYmVyO1xyXG4gIGhvdXJzOiBudW1iZXI7XHJcbiAgZGF5czogbnVtYmVyO1xyXG4gIG1vbnRoczogbnVtYmVyO1xyXG4gIHllYXJzOiBudW1iZXI7XHJcbiAgdG90YWw6IEFYVGltZVNwYW5Ub3RhbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVSYW5nZSB7XHJcbiAgcHJpdmF0ZSBfc3RhcnRUaW1lOiBBWERhdGVUaW1lO1xyXG4gIHByaXZhdGUgX2VuZFRpbWU6IEFYRGF0ZVRpbWU7XHJcblxyXG4gIHB1YmxpYyBnZXQgc3RhcnRUaW1lKCk6IEFYRGF0ZVRpbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZW5kVGltZSgpOiBBWERhdGVUaW1lIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Ioc3RhcnRUaW1lOiBBWERhdGVUaW1lLCBlbmRUaW1lOiBBWERhdGVUaW1lKSB7XHJcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBzdGFydFRpbWU7XHJcbiAgICB0aGlzLl9lbmRUaW1lID0gZW5kVGltZTtcclxuICB9XHJcblxyXG4gIGR1cmF0aW9uKCk6IEFYVGltZVNwYW4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBBWFRpbWVTcGFuID0ge1xyXG4gICAgICBtaWxpc2Vjb25kczogMCxcclxuICAgICAgc2Vjb25kczogMCxcclxuICAgICAgbWludXRlczogMCxcclxuICAgICAgaG91cnM6IDAsXHJcbiAgICAgIGRheXM6IDAsXHJcbiAgICAgIG1vbnRoczogMCxcclxuICAgICAgeWVhcnM6IDAsXHJcbiAgICAgIHRvdGFsOiB7XHJcbiAgICAgICAgbWlsaXNlY29uZHM6IDAsXHJcbiAgICAgICAgc2Vjb25kczogMCxcclxuICAgICAgICBtaW51dGVzOiAwLFxyXG4gICAgICAgIGhvdXJzOiAwLFxyXG4gICAgICAgIGRheXM6IDAsXHJcbiAgICAgICAgd2Vla3M6IDAsXHJcbiAgICAgICAgbW9udGhzOiAwLFxyXG4gICAgICAgIHllYXJzOiAwLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbmVfc2Vjb25kID0gMTAwMDtcclxuICAgIGNvbnN0IG9uZV9taW4gPSBvbmVfc2Vjb25kICogNjA7XHJcbiAgICBjb25zdCBvbmVfaG91ciA9IG9uZV9taW4gKiA2MDtcclxuICAgIGNvbnN0IG9uZV9kYXkgPSBvbmVfaG91ciAqIDI0O1xyXG4gICAgY29uc3Qgb25lX3dlZWsgPSBvbmVfZGF5ICogNztcclxuICAgIGNvbnN0IG9uZV95ZWFyID0gMzY1LjI1ICogb25lX2RheTtcclxuICAgIGNvbnN0IG9uZV9tb250aCA9IG9uZV95ZWFyIC8gMTI7XHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSB0aGlzLl9zdGFydFRpbWUuZGF0ZS5nZXRUaW1lKCk7XHJcbiAgICBjb25zdCBlbmRUaW1lID0gdGhpcy5fZW5kVGltZS5kYXRlLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhlbmRUaW1lIC0gc3RhcnRUaW1lKTtcclxuICAgIC8vXHJcbiAgICByZXN1bHQudG90YWwubWlsaXNlY29uZHMgPSBkaWZmO1xyXG4gICAgcmVzdWx0LnRvdGFsLnNlY29uZHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfc2Vjb25kKS50b0ZpeGVkKDIpKTtcclxuICAgIHJlc3VsdC50b3RhbC5taW51dGVzID0gTnVtYmVyKChkaWZmIC8gb25lX21pbikudG9GaXhlZCgyKSk7XHJcbiAgICByZXN1bHQudG90YWwuaG91cnMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfaG91cikudG9GaXhlZCgyKSk7XHJcbiAgICByZXN1bHQudG90YWwuZGF5cyA9IE51bWJlcigoZGlmZiAvIG9uZV9kYXkpLnRvRml4ZWQoMikpO1xyXG4gICAgcmVzdWx0LnRvdGFsLndlZWtzID0gTnVtYmVyKChkaWZmIC8gb25lX3dlZWspLnRvRml4ZWQoMikpO1xyXG4gICAgLy9cclxuICAgIC8vIGxldCBtb250aHMgPSAodGhpcy5lbmRUaW1lLnllYXIgLSB0aGlzLnN0YXJ0VGltZS55ZWFyKSAqIDEyO1xyXG4gICAgLy8gbW9udGhzICs9IHRoaXMuZW5kVGltZS5tb250aE9mWWVhciAtIHRoaXMuc3RhcnRUaW1lLm1vbnRoT2ZZZWFyICsgMTtcclxuICAgIC8vIGlmICh0aGlzLmVuZFRpbWUuZGF5T2ZZZWFyIDwgdGhpcy5zdGFydFRpbWUuZGF5T2ZZZWFyKSB7XHJcbiAgICAvLyAgICAgbW9udGhzLS07XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXN1bHQudG90YWwubW9udGhzID0gTWF0aC5hYnMobW9udGhzKTtcclxuICAgIC8vIFRPRE86IHJldmlld1xyXG4gICAgcmVzdWx0LnRvdGFsLm1vbnRocyA9IE51bWJlcigoZGlmZiAvIG9uZV9tb250aCkudG9GaXhlZCgyKSk7XHJcbiAgICByZXN1bHQudG90YWwueWVhcnMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfeWVhcikudG9GaXhlZCgyKSk7XHJcbiAgICAvL1xyXG4gICAgcmVzdWx0Lm1pbGlzZWNvbmRzID0gcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzICUgMTAwMDtcclxuICAgIHJlc3VsdC5zZWNvbmRzID0gTnVtYmVyKChyZXN1bHQudG90YWwuc2Vjb25kcyAlIDYwKS50b0ZpeGVkKDApKTtcclxuICAgIHJlc3VsdC5taW51dGVzID0gTnVtYmVyKChyZXN1bHQudG90YWwubWludXRlcyAlIDYwKS50b0ZpeGVkKDApKTtcclxuICAgIHJlc3VsdC5ob3VycyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmhvdXJzICUgMjQpLnRvRml4ZWQoMCkpO1xyXG4gICAgLy8gVE9ETzogcmV2aWV3XHJcbiAgICByZXN1bHQuZGF5cyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmRheXMgJSAzMC40KS50b0ZpeGVkKDApKTtcclxuICAgIHJlc3VsdC5tb250aHMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5tb250aHMgJSAxMikudG9GaXhlZCgwKSk7XHJcbiAgICByZXN1bHQueWVhcnMgPSBOdW1iZXIocmVzdWx0LnRvdGFsLnllYXJzLnRvRml4ZWQoMCkpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGVudW11cmF0ZSh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCBhbW91bnQ6IG51bWJlciA9IDEpOiBBWERhdGVUaW1lW10ge1xyXG4gICAgLy8gVE9ETzogc2V0cHRlbXBlciBzYXZpbmd0aW1lIGlzc3VlXHJcbiAgICBjb25zdCByZXN1bHQ6IEFYRGF0ZVRpbWVbXSA9IFtdO1xyXG4gICAgbGV0IGl0ZW0gPSB0aGlzLl9zdGFydFRpbWUuY2xvbmUoKTtcclxuICAgIHdoaWxlIChpdGVtLmNvbXBhcmUodGhpcy5fZW5kVGltZSwgdW5pdCkgPCAxKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICBpdGVtID0gaXRlbS5hZGQodW5pdCwgYW1vdW50KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGluY2x1ZGVzKHZhbHVlOiBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogYm9vbGVhbiB7XHJcbiAgICAvLyBUT0RPOiA/P1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRWaWV3Q29tcGFpcmUodmlldykge1xyXG4gIC8vICAgICBzd2l0Y2ggKHZpZXcpIHtcclxuICAvLyAgICAgICAgIGNhc2UgJ2RheSc6XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZTUQnO1xyXG4gIC8vICAgICAgICAgY2FzZSAnbW9udGgnOlxyXG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWU0nO1xyXG4gIC8vICAgICAgICAgY2FzZSAneWVhcic6XHJcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZJztcclxuICAvLyAgICAgfVxyXG4gIC8vIH1cclxufVxyXG4iXX0=
|