@acorex/core 7.1.52 → 7.2.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 (178) hide show
  1. package/README.md +3 -20
  2. package/config/README.md +3 -0
  3. package/config/index.d.ts +2 -5
  4. package/config/lib/configs.service.d.ts +5 -0
  5. package/dateTime/README.md +3 -0
  6. package/dateTime/index.d.ts +5 -5
  7. package/dateTime/{src → lib}/jalali.calendar.d.ts +1 -1
  8. package/esm2022/acorex-core.mjs +2 -2
  9. package/esm2022/config/acorex-core-config.mjs +2 -2
  10. package/esm2022/config/index.mjs +3 -0
  11. package/esm2022/config/lib/configs.mjs +24 -0
  12. package/esm2022/config/lib/configs.service.mjs +11 -0
  13. package/esm2022/dateTime/acorex-core-dateTime.mjs +2 -2
  14. package/esm2022/dateTime/index.mjs +6 -0
  15. package/esm2022/dateTime/lib/datetime.class.mjs +288 -0
  16. package/esm2022/dateTime/lib/datetime.module.mjs +39 -0
  17. package/esm2022/dateTime/lib/datetime.pipe.mjs +26 -0
  18. package/esm2022/dateTime/lib/georgian.calendar.mjs +189 -0
  19. package/esm2022/dateTime/lib/jalali.calendar.mjs +355 -0
  20. package/esm2022/events/acorex-core-events.mjs +2 -2
  21. package/esm2022/events/index.mjs +2 -0
  22. package/esm2022/events/lib/event.service.mjs +36 -0
  23. package/esm2022/file/acorex-core-file.mjs +2 -2
  24. package/esm2022/file/index.mjs +5 -0
  25. package/esm2022/file/lib/file-download-ref.class.mjs +12 -0
  26. package/esm2022/file/lib/file-download-result.class.mjs +46 -0
  27. package/esm2022/file/lib/file-upload-ref.class.mjs +12 -0
  28. package/esm2022/file/lib/file.service.mjs +102 -0
  29. package/esm2022/http/acorex-core-http.mjs +2 -2
  30. package/esm2022/http/index.mjs +7 -0
  31. package/esm2022/http/lib/http-error.class.mjs +2 -0
  32. package/esm2022/http/lib/http-events.interceptor.mjs +3 -0
  33. package/esm2022/http/lib/http-request.class.mjs +2 -0
  34. package/esm2022/http/lib/http-result.class.mjs +21 -0
  35. package/esm2022/http/lib/http.module.mjs +29 -0
  36. package/esm2022/http/lib/http.service.mjs +148 -0
  37. package/esm2022/image/acorex-core-image.mjs +2 -2
  38. package/esm2022/image/index.mjs +2 -0
  39. package/esm2022/image/lib/image.service.mjs +43 -0
  40. package/esm2022/index.mjs +2 -0
  41. package/esm2022/pipes/acorex-core-pipes.mjs +2 -2
  42. package/esm2022/pipes/index.mjs +3 -0
  43. package/esm2022/pipes/lib/pipes.module.mjs +19 -0
  44. package/esm2022/pipes/lib/safe.pipe.mjs +31 -0
  45. package/esm2022/platform/acorex-core-platform.mjs +2 -2
  46. package/esm2022/platform/index.mjs +2 -0
  47. package/esm2022/platform/lib/platform.service.mjs +155 -0
  48. package/esm2022/translation/acorex-core-translation.mjs +2 -2
  49. package/esm2022/translation/index.mjs +4 -0
  50. package/esm2022/translation/lib/translation.module.mjs +18 -0
  51. package/esm2022/translation/lib/translator.mjs +43 -0
  52. package/esm2022/translation/lib/translator.pipe.mjs +15 -0
  53. package/esm2022/utils/acorex-core-utils.mjs +2 -2
  54. package/esm2022/utils/index.mjs +6 -0
  55. package/esm2022/utils/lib/color-util.mjs +115 -0
  56. package/esm2022/utils/lib/drawing-util.mjs +29 -0
  57. package/esm2022/utils/lib/html-util.mjs +16 -0
  58. package/esm2022/utils/lib/object-util.mjs +39 -0
  59. package/esm2022/utils/lib/string-util.mjs +19 -0
  60. package/events/README.md +3 -0
  61. package/events/index.d.ts +1 -5
  62. package/fesm2022/acorex-core-config.mjs +14 -3
  63. package/fesm2022/acorex-core-config.mjs.map +1 -1
  64. package/fesm2022/acorex-core-dateTime.mjs +171 -178
  65. package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
  66. package/fesm2022/acorex-core-events.mjs +6 -4
  67. package/fesm2022/acorex-core-events.mjs.map +1 -1
  68. package/fesm2022/acorex-core-file.mjs +19 -23
  69. package/fesm2022/acorex-core-file.mjs.map +1 -1
  70. package/fesm2022/acorex-core-http.mjs +10 -17
  71. package/fesm2022/acorex-core-http.mjs.map +1 -1
  72. package/fesm2022/acorex-core-image.mjs +3 -3
  73. package/fesm2022/acorex-core-image.mjs.map +1 -1
  74. package/fesm2022/acorex-core-pipes.mjs +8 -9
  75. package/fesm2022/acorex-core-pipes.mjs.map +1 -1
  76. package/fesm2022/acorex-core-platform.mjs +6 -8
  77. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  78. package/fesm2022/acorex-core-translation.mjs +13 -13
  79. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  80. package/fesm2022/acorex-core-utils.mjs +87 -87
  81. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  82. package/fesm2022/acorex-core.mjs +1 -6
  83. package/fesm2022/acorex-core.mjs.map +1 -1
  84. package/file/README.md +3 -0
  85. package/file/index.d.ts +4 -5
  86. package/http/README.md +3 -0
  87. package/http/index.d.ts +6 -5
  88. package/image/README.md +3 -0
  89. package/image/index.d.ts +1 -5
  90. package/index.d.ts +2 -5
  91. package/package.json +13 -11
  92. package/pipes/README.md +3 -0
  93. package/pipes/index.d.ts +2 -5
  94. package/platform/README.md +3 -0
  95. package/platform/index.d.ts +1 -5
  96. package/translation/README.md +3 -0
  97. package/translation/index.d.ts +3 -5
  98. package/utils/README.md +3 -0
  99. package/utils/index.d.ts +5 -5
  100. package/config/public-api.d.ts +0 -1
  101. package/dateTime/public-api.d.ts +0 -5
  102. package/esm2022/config/public-api.mjs +0 -2
  103. package/esm2022/config/src/configs.mjs +0 -25
  104. package/esm2022/dateTime/public-api.mjs +0 -6
  105. package/esm2022/dateTime/src/datetime.class.mjs +0 -295
  106. package/esm2022/dateTime/src/datetime.module.mjs +0 -40
  107. package/esm2022/dateTime/src/datetime.pipe.mjs +0 -27
  108. package/esm2022/dateTime/src/georgian.calendar.mjs +0 -187
  109. package/esm2022/dateTime/src/jalali.calendar.mjs +0 -357
  110. package/esm2022/events/public-api.mjs +0 -2
  111. package/esm2022/events/src/event.service.mjs +0 -35
  112. package/esm2022/file/public-api.mjs +0 -5
  113. package/esm2022/file/src/file-download-ref.class.mjs +0 -13
  114. package/esm2022/file/src/file-download-result.class.mjs +0 -47
  115. package/esm2022/file/src/file-upload-ref.class.mjs +0 -13
  116. package/esm2022/file/src/file.service.mjs +0 -103
  117. package/esm2022/http/public-api.mjs +0 -6
  118. package/esm2022/http/src/http-error.class.mjs +0 -2
  119. package/esm2022/http/src/http-events.interceptor.mjs +0 -3
  120. package/esm2022/http/src/http-request.class.mjs +0 -2
  121. package/esm2022/http/src/http-result.class.mjs +0 -25
  122. package/esm2022/http/src/http.module.mjs +0 -30
  123. package/esm2022/http/src/http.service.mjs +0 -152
  124. package/esm2022/image/public-api.mjs +0 -2
  125. package/esm2022/image/src/image.service.mjs +0 -44
  126. package/esm2022/pipes/public-api.mjs +0 -3
  127. package/esm2022/pipes/src/pipes.module.mjs +0 -20
  128. package/esm2022/pipes/src/safe.pipe.mjs +0 -32
  129. package/esm2022/platform/public-api.mjs +0 -2
  130. package/esm2022/platform/src/platform.service.mjs +0 -158
  131. package/esm2022/public-api.mjs +0 -5
  132. package/esm2022/translation/public-api.mjs +0 -4
  133. package/esm2022/translation/src/translation.module.mjs +0 -19
  134. package/esm2022/translation/src/translator.mjs +0 -44
  135. package/esm2022/translation/src/translator.pipe.mjs +0 -16
  136. package/esm2022/utils/public-api.mjs +0 -6
  137. package/esm2022/utils/src/color-util.mjs +0 -115
  138. package/esm2022/utils/src/drawing-util.mjs +0 -29
  139. package/esm2022/utils/src/html-util.mjs +0 -16
  140. package/esm2022/utils/src/object-util.mjs +0 -39
  141. package/esm2022/utils/src/string-util.mjs +0 -19
  142. package/events/public-api.d.ts +0 -1
  143. package/file/public-api.d.ts +0 -4
  144. package/http/public-api.d.ts +0 -5
  145. package/image/public-api.d.ts +0 -1
  146. package/pipes/public-api.d.ts +0 -2
  147. package/platform/public-api.d.ts +0 -1
  148. package/public-api.d.ts +0 -1
  149. package/translation/public-api.d.ts +0 -3
  150. package/utils/public-api.d.ts +0 -5
  151. /package/config/{src → lib}/configs.d.ts +0 -0
  152. /package/dateTime/{src → lib}/datetime.class.d.ts +0 -0
  153. /package/dateTime/{src → lib}/datetime.module.d.ts +0 -0
  154. /package/dateTime/{src → lib}/datetime.pipe.d.ts +0 -0
  155. /package/dateTime/{src → lib}/georgian.calendar.d.ts +0 -0
  156. /package/events/{src → lib}/event.service.d.ts +0 -0
  157. /package/file/{src → lib}/file-download-ref.class.d.ts +0 -0
  158. /package/file/{src → lib}/file-download-result.class.d.ts +0 -0
  159. /package/file/{src → lib}/file-upload-ref.class.d.ts +0 -0
  160. /package/file/{src → lib}/file.service.d.ts +0 -0
  161. /package/http/{src → lib}/http-error.class.d.ts +0 -0
  162. /package/http/{src → lib}/http-events.interceptor.d.ts +0 -0
  163. /package/http/{src → lib}/http-request.class.d.ts +0 -0
  164. /package/http/{src → lib}/http-result.class.d.ts +0 -0
  165. /package/http/{src → lib}/http.module.d.ts +0 -0
  166. /package/http/{src → lib}/http.service.d.ts +0 -0
  167. /package/image/{src → lib}/image.service.d.ts +0 -0
  168. /package/pipes/{src → lib}/pipes.module.d.ts +0 -0
  169. /package/pipes/{src → lib}/safe.pipe.d.ts +0 -0
  170. /package/platform/{src → lib}/platform.service.d.ts +0 -0
  171. /package/translation/{src → lib}/translation.module.d.ts +0 -0
  172. /package/translation/{src → lib}/translator.d.ts +0 -0
  173. /package/translation/{src → lib}/translator.pipe.d.ts +0 -0
  174. /package/utils/{src → lib}/color-util.d.ts +0 -0
  175. /package/utils/{src → lib}/drawing-util.d.ts +0 -0
  176. /package/utils/{src → lib}/html-util.d.ts +0 -0
  177. /package/utils/{src → lib}/object-util.d.ts +0 -0
  178. /package/utils/{src → lib}/string-util.d.ts +0 -0
@@ -0,0 +1,189 @@
1
+ import { AXDateTime } from "./datetime.class";
2
+ export class GeorgianCalendar {
3
+ constructor() {
4
+ this.monthNames = [
5
+ "January", "February", "March",
6
+ "April", "May", "June", "July",
7
+ "August", "September", "October",
8
+ "November", "December"
9
+ ];
10
+ this.monthShortNames = [
11
+ "Jan", "Feb", "Mar",
12
+ "Apr", "May", "Jun", "Jul",
13
+ "Aug", "Sep", "Oct",
14
+ "Nov", "Dec"
15
+ ];
16
+ this.dayNames = [
17
+ "Sunday", "Monday", "Tuesday", "Wednesday",
18
+ "Thursday", "Friday", "Saturday"
19
+ ];
20
+ this.dayShortNames = [
21
+ "Sun", "Mon", "Tue", "Wed",
22
+ "Thu", "Fri", "Sat"
23
+ ];
24
+ }
25
+ create(value) {
26
+ return new AXDateTime(new Date(value.year, value.month - 1, value.date, value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());
27
+ }
28
+ name() {
29
+ return 'gregorian';
30
+ }
31
+ dayOfMonth(date) {
32
+ return date.getDate();
33
+ }
34
+ dayOfYear(date) {
35
+ let result = 0;
36
+ let m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
37
+ if (this.isLeap(date)) {
38
+ m[1] = 29;
39
+ }
40
+ for (let i = 0; i < date.getMonth(); i++) {
41
+ result = result + m[i];
42
+ }
43
+ result += date.getDate();
44
+ return result;
45
+ }
46
+ dayOfWeek(date) {
47
+ return date.getDay() + 1;
48
+ }
49
+ weekOfYear(date) {
50
+ const firstDay = new AXDateTime(date).startOf('year');
51
+ return Math.ceil((((date.getTime() - firstDay.date.getTime()) / 86400000) + firstDay.date.getDay() + 1) / 7);
52
+ }
53
+ year(date) {
54
+ return date.getFullYear();
55
+ }
56
+ monthOfYear(date) {
57
+ return date.getMonth() + 1;
58
+ }
59
+ add(date, unit, amount) {
60
+ let value = date.valueOf();
61
+ switch (unit) {
62
+ case 'second':
63
+ value += 1000 * amount;
64
+ break;
65
+ case 'minute':
66
+ value += 60000 * amount;
67
+ break;
68
+ case 'hour':
69
+ value += 3600000 * amount;
70
+ break;
71
+ case 'month':
72
+ const v = new Date(value);
73
+ var mo = date.getMonth();
74
+ var yr = date.getFullYear();
75
+ mo = (mo + amount) % 12;
76
+ if (0 > mo) {
77
+ yr += (date.getMonth() + amount - mo - 12) / 12;
78
+ mo += 12;
79
+ }
80
+ else
81
+ yr += ((date.getMonth() + amount - mo) / 12);
82
+ v.setMonth(mo);
83
+ v.setFullYear(yr);
84
+ value = v.valueOf();
85
+ break;
86
+ case 'week':
87
+ value += 7 * 86400000 * amount;
88
+ break;
89
+ case 'year':
90
+ const yv = new Date(value);
91
+ yv.setFullYear(yv.getFullYear() + amount);
92
+ value = yv.valueOf();
93
+ break;
94
+ case 'day':
95
+ default:
96
+ value += 86400000 * amount;
97
+ }
98
+ return new AXDateTime(new Date(value), this.name());
99
+ }
100
+ set(date, unit, value) {
101
+ const clone = new Date(date.valueOf());
102
+ switch (unit) {
103
+ case 'second':
104
+ clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
105
+ break;
106
+ case 'minute':
107
+ clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
108
+ break;
109
+ case 'hour':
110
+ clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
111
+ break;
112
+ default:
113
+ case 'day':
114
+ clone.setDate(value);
115
+ break;
116
+ case "week":
117
+ break;
118
+ case "month":
119
+ clone.setMonth(Math.max(0, value - 1));
120
+ break;
121
+ case "year":
122
+ clone.setFullYear(value);
123
+ break;
124
+ }
125
+ return new AXDateTime(clone, this.name());
126
+ }
127
+ startOf(date, unit) {
128
+ const clone = new Date(date.valueOf());
129
+ switch (unit) {
130
+ case 'second':
131
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
132
+ return new AXDateTime(clone, this.name());
133
+ case 'minute':
134
+ clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
135
+ return new AXDateTime(clone, this.name());
136
+ case 'hour':
137
+ clone.setHours(clone.getHours(), 0, 0, 0);
138
+ return new AXDateTime(clone, this.name());
139
+ default:
140
+ case 'day':
141
+ clone.setHours(0, 0, 0, 0);
142
+ return new AXDateTime(clone, this.name());
143
+ case "week":
144
+ const index = 0;
145
+ const start = index >= 0 ? index : 0;
146
+ const day = clone.getDay();
147
+ const diff = clone.getDate() - day + (start > day ? start - 7 : start);
148
+ clone.setDate(diff);
149
+ return new AXDateTime(clone, this.name()).startOf('day');
150
+ case "month":
151
+ clone.setDate(1);
152
+ return new AXDateTime(clone, this.name()).startOf('day');
153
+ case "year":
154
+ clone.setMonth(0);
155
+ clone.setDate(1);
156
+ return new AXDateTime(clone, this.name()).startOf('day');
157
+ }
158
+ }
159
+ endOf(date, unit) {
160
+ const clone = new Date(date.valueOf());
161
+ switch (unit) {
162
+ case 'second':
163
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
164
+ return new AXDateTime(clone, this.name());
165
+ case 'minute':
166
+ clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
167
+ return new AXDateTime(clone, this.name());
168
+ case 'hour':
169
+ clone.setHours(clone.getHours(), 59, 59, 999);
170
+ return new AXDateTime(clone, this.name());
171
+ default:
172
+ case 'day':
173
+ clone.setHours(23, 59, 59, 999);
174
+ return new AXDateTime(clone, this.name());
175
+ case 'week':
176
+ return this.startOf(date, 'week').add('day', 6).endOf('day');
177
+ case 'month':
178
+ return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');
179
+ case "year":
180
+ clone.setMonth(11);
181
+ return new AXDateTime(clone, this.name()).endOf('month');
182
+ }
183
+ }
184
+ isLeap(date) {
185
+ let leapYear = new Date(date.getFullYear(), 1, 29);
186
+ return leapYear.getDate() == 29;
187
+ }
188
+ }
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvcmdpYW4uY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2xpYi9nZW9yZ2lhbi5jYWxlbmRhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFBN0I7UUFFSSxlQUFVLEdBQUc7WUFDVCxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU87WUFDOUIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTTtZQUM5QixRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVM7WUFDaEMsVUFBVSxFQUFFLFVBQVU7U0FDekIsQ0FBQztRQUVGLG9CQUFlLEdBQUc7WUFDZCxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztZQUMxQixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDO1FBRUYsYUFBUSxHQUFHO1lBQ1AsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVztZQUMxQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVU7U0FDbkMsQ0FBQztRQUVGLGtCQUFhLEdBQUc7WUFDWixLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO1lBQzFCLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztTQUN0QixDQUFDO0lBa0xOLENBQUM7SUEvS0csTUFBTSxDQUFDLEtBQWtCO1FBQ3JCLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFF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QUMxRyxLQUFLLE1BQU07Z0JBQ1AsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVO1FBQ2IsSUFBSSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDYWxlbmRhciwgQVhEYXRlVGltZSwgQVhEYXRlVmFsdWUsIFRpbWVVbml0IH0gZnJvbSBcIi4vZGF0ZXRpbWUuY2xhc3NcIjtcblxuZXhwb3J0IGNsYXNzIEdlb3JnaWFuQ2FsZW5kYXIgaW1wbGVtZW50cyBBWENhbGVuZGFyIHtcblxuICAgIG1vbnRoTmFtZXMgPSBbXG4gICAgICAgIFwiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIixcbiAgICAgICAgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsXG4gICAgICAgIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLFxuICAgICAgICBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIlxuICAgIF07XG5cbiAgICBtb250aFNob3J0TmFtZXMgPSBbXG4gICAgICAgIFwiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsXG4gICAgICAgIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsXG4gICAgICAgIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsXG4gICAgICAgIFwiTm92XCIsIFwiRGVjXCJcbiAgICBdO1xuXG4gICAgZGF5TmFtZXMgPSBbXG4gICAgICAgIFwiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLFxuICAgICAgICBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIlxuICAgIF07XG5cbiAgICBkYXlTaG9ydE5hbWVzID0gW1xuICAgICAgICBcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLFxuICAgICAgICBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXG4gICAgXTtcblxuXG4gICAgY3JlYXRlKHZhbHVlOiBBWERhdGVWYWx1ZSk6IEFYRGF0ZVRpbWUge1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUueWVhciwgdmFsdWUubW9udGggLSAxLCB2YWx1ZS5kYXRlLCB2YWx1ZS5ob3VycyB8fCAwLCB2YWx1ZS5taW51dGVzIHx8IDAsIHZhbHVlLnNlY29uZHMgfHwgMCwgdmFsdWUubXMgfHwgMCksIHRoaXMubmFtZSgpKTtcbiAgICB9XG5cbiAgICBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnZ3JlZ29yaWFuJ1xuICAgIH1cblxuICAgIGRheU9mTW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBkYXlPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgICAgIGxldCByZXN1bHQgPSAwO1xuICAgICAgICBsZXQgbSA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbiAgICAgICAgaWYgKHRoaXMuaXNMZWFwKGRhdGUpKSB7XG4gICAgICAgICAgICBtWzFdID0gMjk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlLmdldE1vbnRoKCk7IGkrKykge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgbVtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXkoKSArIDE7XG4gICAgfVxuXG4gICAgd2Vla09mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgQVhEYXRlVGltZShkYXRlKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoKCgoZGF0ZS5nZXRUaW1lKCkgLSBmaXJzdERheS5kYXRlLmdldFRpbWUoKSkgLyA4NjQwMDAwMCkgKyBmaXJzdERheS5kYXRlLmdldERheSgpICsgMSkgLyA3KTtcbiAgICB9XG5cbiAgICB5ZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICB9XG5cbiAgICBhZGQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMTAwMCAqIGFtb3VudDtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA2MDAwMCAqIGFtb3VudDtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gMzYwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdmFyIG1vID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgICAgIHZhciB5ciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICBtbyA9IChtbyArIGFtb3VudCkgJSAxMjtcbiAgICAgICAgICAgICAgICBpZiAoMCA+IG1vKSB7XG4gICAgICAgICAgICAgICAgICAgIHlyICs9IChkYXRlLmdldE1vbnRoKCkgKyBhbW91bnQgLSBtbyAtIDEyKSAvIDEyO1xuICAgICAgICAgICAgICAgICAgICBtbyArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB5ciArPSAoKGRhdGUuZ2V0TW9udGgoKSArIGFtb3VudCAtIG1vKSAvIDEyKTtcbiAgICAgICAgICAgICAgICB2LnNldE1vbnRoKG1vKTtcbiAgICAgICAgICAgICAgICB2LnNldEZ1bGxZZWFyKHlyKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHYudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA3ICogODY0MDAwMDAgKiBhbW91bnQ7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIGNvbnN0IHl2ID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHl2LnNldEZ1bGxZZWFyKHl2LmdldEZ1bGxZZWFyKCkgKyBhbW91bnQpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0geXYudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUpLCB0aGlzLm5hbWUoKSk7XG4gICAgfVxuXG4gICAgc2V0KGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCB2YWx1ZSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCB2YWx1ZSwgY2xvbmUuZ2V0U2Vjb25kcygpLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3Vycyh2YWx1ZSwgY2xvbmUuZ2V0TWludXRlcygpLCBjbG9uZS5nZXRTZWNvbmRzKCksIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIndlZWtcIjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldE1vbnRoKE1hdGgubWF4KDAsIHZhbHVlIC0gMSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRGdWxsWWVhcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgfVxuXG4gICAgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWUge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICAgICAgICBjYXNlIFwid2Vla1wiOlxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4ID49IDAgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gY2xvbmUuZ2V0RGF5KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGNsb25lLmdldERhdGUoKSAtIGRheSArIChzdGFydCA+IGRheSA/IHN0YXJ0IC0gNyA6IHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXREYXRlKGRpZmYpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgY2FzZSBcIm1vbnRoXCI6XG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0RGF0ZSgxKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgOTk5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCA1OSwgOTk5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCksIHRoaXMubmFtZSgpKS5lbmRPZignZGF5Jyk7XG4gICAgICAgICAgICBjYXNlIFwieWVhclwiOlxuICAgICAgICAgICAgICAgIGNsb25lLnNldE1vbnRoKDExKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKS5lbmRPZignbW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTGVhcChkYXRlOiBEYXRlKSB7XG4gICAgICAgIGxldCBsZWFwWWVhciA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMSwgMjkpO1xuICAgICAgICByZXR1cm4gbGVhcFllYXIuZ2V0RGF0ZSgpID09IDI5O1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,355 @@
1
+ import { AXDateTime } from './datetime.class';
2
+ export class JalaliCalendar {
3
+ constructor() {
4
+ this.monthNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');
5
+ this.monthShortNames = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_');
6
+ this.dayNames = 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'.split('_');
7
+ this.dayShortNames = 'ش_ی_د_س_چ_پ_ج'.split('_');
8
+ }
9
+ create(value) {
10
+ const a = this.toGregorian(value.year, value.month, value.date);
11
+ return new AXDateTime(new Date(a.getFullYear(), a.getMonth(), a.getDate(), value.hours || 0, value.minutes || 0, value.seconds || 0, value.ms || 0), this.name());
12
+ }
13
+ name() {
14
+ return 'jalali';
15
+ }
16
+ dayOfMonth(date) {
17
+ return this.toJalali(date).day;
18
+ }
19
+ dayOfYear(date) {
20
+ const j = this.toJalali(date);
21
+ return (j.month <= 6 ? (j.month - 1) * 31 : 6 * 31 + (j.month - 7) * 30) + j.day;
22
+ }
23
+ dayOfWeek(date) {
24
+ return date.getDay() == 6 ? 1 : date.getDay() + 2;
25
+ }
26
+ weekOfYear(date) {
27
+ //TODO : apply jalali
28
+ const firstDay = new AXDateTime(date).startOf('year');
29
+ return Math.ceil(((date.getTime() - firstDay.date.getTime()) / 86400000 + firstDay.date.getDay() + 1) / 7);
30
+ }
31
+ year(date) {
32
+ return this.toJalali(date).year;
33
+ }
34
+ monthOfYear(date) {
35
+ return this.toJalali(date).month;
36
+ }
37
+ add(date, unit, amount) {
38
+ let value = date.valueOf();
39
+ switch (unit) {
40
+ case 'second':
41
+ value += 1000 * amount;
42
+ break;
43
+ case 'minute':
44
+ value += 60000 * amount;
45
+ break;
46
+ case 'hour':
47
+ value += 3600000 * amount;
48
+ break;
49
+ case 'month': {
50
+ const v = new Date(value);
51
+ let jd = this.dayOfMonth(date);
52
+ let jm = this.monthOfYear(date);
53
+ let jy = this.year(date);
54
+ const nm = jm + amount;
55
+ const ny = nm % 12 ? Math.floor(nm / 12) : 0;
56
+ jy += ny;
57
+ jm = nm - ny * 12;
58
+ const vv = this.toGregorian(jy, jm, jd);
59
+ v.setFullYear(vv.getFullYear());
60
+ v.setMonth(vv.getMonth());
61
+ v.setDate(vv.getDate());
62
+ value = v.valueOf();
63
+ break;
64
+ }
65
+ case 'week':
66
+ value += 7 * 86400000 * amount;
67
+ break;
68
+ case 'year': {
69
+ // const v = new Date(value);
70
+ // v.setFullYear(v.getFullYear() + amount);
71
+ // value = v.valueOf();
72
+ // break
73
+ const v = new Date(value);
74
+ let jd = this.dayOfMonth(date);
75
+ let jm = this.monthOfYear(date);
76
+ let jy = this.year(date);
77
+ const vv = this.toGregorian(jy + amount, jm, jd);
78
+ v.setFullYear(vv.getFullYear());
79
+ v.setMonth(vv.getMonth());
80
+ v.setDate(vv.getDate());
81
+ value = v.valueOf();
82
+ break;
83
+ }
84
+ case 'day':
85
+ default:
86
+ value += 86400000 * amount;
87
+ }
88
+ return new AXDateTime(new Date(value), this.name());
89
+ }
90
+ set(date, unit, value) {
91
+ const clone = new Date(date.valueOf());
92
+ const jDate = this.toJalali(clone);
93
+ switch (unit) {
94
+ case 'second':
95
+ clone.setHours(clone.getHours(), clone.getMinutes(), value, clone.getMilliseconds());
96
+ break;
97
+ case 'minute':
98
+ clone.setHours(clone.getHours(), value, clone.getSeconds(), clone.getMilliseconds());
99
+ break;
100
+ case 'hour':
101
+ clone.setHours(value, clone.getMinutes(), clone.getSeconds(), clone.getMilliseconds());
102
+ break;
103
+ default:
104
+ case 'day':
105
+ const gDate = this.toGregorian(jDate.year, jDate.month, value);
106
+ clone.setDate(gDate.getDate());
107
+ break;
108
+ case 'week':
109
+ break;
110
+ case 'month':
111
+ const gDate2 = this.toGregorian(jDate.year, value, jDate.day);
112
+ clone.setMonth(gDate2.getMonth());
113
+ break;
114
+ case 'year':
115
+ const gDate3 = this.toGregorian(value, jDate.month, jDate.day);
116
+ clone.setFullYear(gDate3.getFullYear());
117
+ break;
118
+ }
119
+ return new AXDateTime(clone, this.name());
120
+ }
121
+ startOf(date, unit) {
122
+ const clone = new Date(date.valueOf());
123
+ switch (unit) {
124
+ case 'second':
125
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
126
+ return new AXDateTime(clone, this.name());
127
+ case 'minute':
128
+ clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
129
+ return new AXDateTime(clone, this.name());
130
+ case 'hour':
131
+ clone.setHours(clone.getHours(), 0, 0, 0);
132
+ return new AXDateTime(clone, this.name());
133
+ default:
134
+ case 'day':
135
+ clone.setHours(0, 0, 0, 0);
136
+ return new AXDateTime(clone, this.name());
137
+ case 'week':
138
+ return new AXDateTime(clone, this.name())
139
+ .add('day', -this.dayOfWeek(clone) + 1)
140
+ .startOf('day');
141
+ case 'month': {
142
+ const jy = this.year(date);
143
+ const jm = this.monthOfYear(date);
144
+ const gDate = this.toGregorian(jy, jm, 1);
145
+ return new AXDateTime(gDate, this.name()).startOf('day');
146
+ }
147
+ case 'year': {
148
+ const jy = this.year(date);
149
+ const gDate = this.toGregorian(jy, 1, 1);
150
+ return new AXDateTime(gDate, this.name()).startOf('day');
151
+ }
152
+ }
153
+ }
154
+ endOf(date, unit) {
155
+ const clone = new Date(date.valueOf());
156
+ switch (unit) {
157
+ case 'second':
158
+ clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
159
+ return new AXDateTime(clone, this.name());
160
+ case 'minute':
161
+ clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
162
+ return new AXDateTime(clone, this.name());
163
+ case 'hour':
164
+ clone.setHours(clone.getHours(), 59, 59, 999);
165
+ return new AXDateTime(clone, this.name());
166
+ default:
167
+ case 'day':
168
+ clone.setHours(23, 59, 59, 999);
169
+ return new AXDateTime(clone, this.name());
170
+ case 'week': {
171
+ return this.startOf(date, 'week').add('day', 6).endOf('day');
172
+ }
173
+ case 'month': {
174
+ const jy = this.year(date);
175
+ const jm = this.monthOfYear(date);
176
+ const jd = this.monthLength(jy, jm);
177
+ const gDate = this.toGregorian(jy, jm, jd);
178
+ return new AXDateTime(gDate, this.name()).endOf('day');
179
+ }
180
+ case 'year':
181
+ let jy = this.year(date);
182
+ const gDate = this.toGregorian(jy, 12, this.monthLength(jy, 12));
183
+ return new AXDateTime(gDate, this.name()).endOf('day');
184
+ }
185
+ }
186
+ toJalali(date) {
187
+ const gy = date.getFullYear();
188
+ const gm = date.getMonth() + 1;
189
+ const gd = date.getDate();
190
+ const r = this.d2j(this.g2d(gy, gm, gd));
191
+ return {
192
+ year: r.jy,
193
+ month: r.jm,
194
+ day: r.jd,
195
+ };
196
+ }
197
+ /*
198
+ Converts a Jalaali date to Gregorian.
199
+ */
200
+ toGregorian(jy, jm, jd) {
201
+ const g = this.d2g(this.j2d(jy, jm, jd));
202
+ return new Date(g.gy, g.gm - 1, g.gd);
203
+ }
204
+ /*
205
+ Checks whether a Jalaali date is valid or not.
206
+ */
207
+ isValid(jy, jm, jd) {
208
+ return (jy >= -61 && jy <= 3177 && jm >= 1 && jm <= 12 && jd >= 1 && jd <= this.monthLength(jy, jm));
209
+ }
210
+ /*
211
+ Is this a leap year or not?
212
+ */
213
+ isLeapYear(jy) {
214
+ return this.jalCal(jy).leap === 0;
215
+ }
216
+ /*
217
+ Number of days in a given month in a Jalaali year.
218
+ */
219
+ monthLength(jy, jm) {
220
+ if (jm <= 6)
221
+ return 31;
222
+ if (jm <= 11)
223
+ return 30;
224
+ if (this.isLeapYear(jy))
225
+ return 30;
226
+ return 29;
227
+ }
228
+ jalCal(jy) {
229
+ // Jalaali years starting the 33-year rule.
230
+ let breaks = [
231
+ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324,
232
+ 2394, 2456, 3178,
233
+ ], bl = breaks.length, gy = jy + 621, leapJ = -14, jp = breaks[0], jm, jump, leap, leapG, march, n, i;
234
+ if (jy < jp || jy >= breaks[bl - 1])
235
+ throw new Error('Invalid Jalaali year ' + jy);
236
+ // Find the limiting years for the Jalaali year jy.
237
+ for (i = 1; i < bl; i += 1) {
238
+ jm = breaks[i];
239
+ jump = jm - jp;
240
+ if (jy < jm)
241
+ break;
242
+ leapJ = leapJ + this.div(jump, 33) * 8 + this.div(this.mod(jump, 33), 4);
243
+ jp = jm;
244
+ }
245
+ n = jy - jp;
246
+ // Find the number of leap years from AD 621 to the beginning
247
+ // of the current Jalaali year in the Persian calendar.
248
+ leapJ = leapJ + this.div(n, 33) * 8 + this.div(this.mod(n, 33) + 3, 4);
249
+ if (this.mod(jump, 33) === 4 && jump - n === 4)
250
+ leapJ += 1;
251
+ // And the same in the Gregorian calendar (until the year gy).
252
+ leapG = this.div(gy, 4) - this.div((this.div(gy, 100) + 1) * 3, 4) - 150;
253
+ // Determine the Gregorian date of Farvardin the 1st.
254
+ march = 20 + leapJ - leapG;
255
+ // Find how many years have passed since the last leap year.
256
+ if (jump - n < 6)
257
+ n = n - jump + this.div(jump + 4, 33) * 33;
258
+ leap = this.mod(this.mod(n + 1, 33) - 1, 4);
259
+ if (leap === -1) {
260
+ leap = 4;
261
+ }
262
+ return {
263
+ leap: leap,
264
+ gy: gy,
265
+ march: march,
266
+ };
267
+ }
268
+ /*
269
+ Converts a date of the Jalaali calendar to the Julian Day number.
270
+ @param jy Jalaali year (1 to 3100)
271
+ @param jm Jalaali month (1 to 12)
272
+ @param jd Jalaali day (1 to 29/31)
273
+ @return Julian Day number
274
+ */
275
+ j2d(jy, jm, jd) {
276
+ let r = this.jalCal(jy);
277
+ return this.g2d(r.gy, 3, r.march) + (jm - 1) * 31 - this.div(jm, 7) * (jm - 7) + jd - 1;
278
+ }
279
+ /*
280
+ Converts the Julian Day number to a date in the Jalaali calendar.
281
+ @param jdn Julian Day number
282
+ @return
283
+ jy: Jalaali year (1 to 3100)
284
+ jm: Jalaali month (1 to 12)
285
+ jd: Jalaali day (1 to 29/31)
286
+ */
287
+ d2j(jdn) {
288
+ let gy = this.d2g(jdn).gy, // Calculate Gregorian year (gy).
289
+ jy = gy - 621, r = this.jalCal(jy), jdn1f = this.g2d(gy, 3, r.march), jd, jm, k;
290
+ // Find number of days that passed since 1 Farvardin.
291
+ k = jdn - jdn1f;
292
+ if (k >= 0) {
293
+ if (k <= 185) {
294
+ // The first 6 months.
295
+ jm = 1 + this.div(k, 31);
296
+ jd = this.mod(k, 31) + 1;
297
+ return {
298
+ jy: jy,
299
+ jm: jm,
300
+ jd: jd,
301
+ };
302
+ }
303
+ else {
304
+ // The remaining months.
305
+ k -= 186;
306
+ }
307
+ }
308
+ else {
309
+ // Previous Jalaali year.
310
+ jy -= 1;
311
+ k += 179;
312
+ if (r.leap === 1)
313
+ k += 1;
314
+ }
315
+ jm = 7 + this.div(k, 30);
316
+ jd = this.mod(k, 30) + 1;
317
+ return {
318
+ jy: jy,
319
+ jm: jm,
320
+ jd: jd,
321
+ };
322
+ }
323
+ g2d(gy, gm, gd) {
324
+ let d = this.div((gy + this.div(gm - 8, 6) + 100100) * 1461, 4) +
325
+ this.div(153 * this.mod(gm + 9, 12) + 2, 5) +
326
+ gd -
327
+ 34840408;
328
+ d = d - this.div(this.div(gy + 100100 + this.div(gm - 8, 6), 100) * 3, 4) + 752;
329
+ return d;
330
+ }
331
+ d2g(jdn) {
332
+ let j, i, gd, gm, gy;
333
+ j = 4 * jdn + 139361631;
334
+ j = j + this.div(this.div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;
335
+ i = this.div(this.mod(j, 1461), 4) * 5 + 308;
336
+ gd = this.div(this.mod(i, 153), 5) + 1;
337
+ gm = this.mod(this.div(i, 153), 12) + 1;
338
+ gy = this.div(j, 1461) - 100100 + this.div(8 - gm, 6);
339
+ return {
340
+ gy: gy,
341
+ gm: gm,
342
+ gd: gd,
343
+ };
344
+ }
345
+ /*
346
+ Utility helper functions.
347
+ */
348
+ div(a, b) {
349
+ return a / b;
350
+ }
351
+ mod(a, b) {
352
+ return a - (a / b) * b;
353
+ }
354
+ }
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamFsYWxpLmNhbGVuZGFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvamFsYWxpLmNhbGVuZGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFakYsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDRSxlQUFVLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdGLG9CQUFlLEdBQUcsb0VBQW9FLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxHLGFBQVEsR0FBRyxtREFBbUQsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUUsa0JBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBZ1o3QyxDQUFDO0lBOVlDLE1BQU0sQ0FBQyxLQUFrQjtRQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsSUFBSSxJQUFJLENBQ04sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUNmLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDWixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ1gsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQ2hCLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUNsQixLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsRUFDbEIsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ2QsRUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIs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LENBQUMsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENhbGVuZGFyLCBBWERhdGVUaW1lLCBBWERhdGVWYWx1ZSwgVGltZVVuaXQgfSBmcm9tICcuL2RhdGV0aW1lLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEphbGFsaUNhbGVuZGFyIGltcGxlbWVudHMgQVhDYWxlbmRhciB7XG4gIG1vbnRoTmFtZXMgPSAn2YHYsdmI2LHYr9uM2YZf2KfYsdiv24zYqNmH2LTYql/Yrtix2K/Yp9ivX9iq24zYsV/Zhdix2K/Yp9ivX9i02YfYsduM2YjYsV/ZhdmH2LFf2KLYqNin2YZf2KLYsNixX9iv24xf2KjZh9mF2YZf2KfYs9mB2YbYrycuc3BsaXQoJ18nKTtcblxuICBtb250aFNob3J0TmFtZXMgPSAn2YHYsdmI2LHYr9uM2YZf2KfYsdiv24zYqNmH2LTYql/Yrtix2K/Yp9ivX9iq24zYsV/Zhdix2K/Yp9ivX9i02YfYsduM2YjYsV/ZhdmH2LFf2KLYqNin2YZf2KLYsNixX9iv24xf2KjZh9mF2YZf2KfYs9mB2YbYrycuc3BsaXQoJ18nKTtcblxuICBkYXlOYW1lcyA9ICfYtNmG2KjZh1/bjNqp2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2Ycg2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2Kwg2LTZhtio2Ydf2KzZhdi52YcnLnNwbGl0KCdfJyk7XG5cbiAgZGF5U2hvcnROYW1lcyA9ICfYtF/bjF/Yr1/Ys1/ahl/Zvl/YrCcuc3BsaXQoJ18nKTtcblxuICBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgYSA9IHRoaXMudG9HcmVnb3JpYW4odmFsdWUueWVhciwgdmFsdWUubW9udGgsIHZhbHVlLmRhdGUpO1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICBhLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGEuZ2V0TW9udGgoKSxcbiAgICAgICAgYS5nZXREYXRlKCksXG4gICAgICAgIHZhbHVlLmhvdXJzIHx8IDAsXG4gICAgICAgIHZhbHVlLm1pbnV0ZXMgfHwgMCxcbiAgICAgICAgdmFsdWUuc2Vjb25kcyB8fCAwLFxuICAgICAgICB2YWx1ZS5tcyB8fCAwXG4gICAgICApLFxuICAgICAgdGhpcy5uYW1lKClcbiAgICApO1xuICB9XG5cbiAgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnamFsYWxpJztcbiAgfVxuXG4gIGRheU9mTW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhbGkoZGF0ZSkuZGF5O1xuICB9XG5cbiAgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIGNvbnN0IGogPSB0aGlzLnRvSmFsYWxpKGRhdGUpO1xuICAgIHJldHVybiAoai5tb250aCA8PSA2ID8gKGoubW9udGggLSAxKSAqIDMxIDogNiAqIDMxICsgKGoubW9udGggLSA3KSAqIDMwKSArIGouZGF5O1xuICB9XG5cbiAgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldERheSgpID09IDYgPyAxIDogZGF0ZS5nZXREYXkoKSArIDI7XG4gIH1cblxuICB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIC8vVE9ETyA6IGFwcGx5IGphbGFsaVxuICAgIGNvbnN0IGZpcnN0RGF5ID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSkuc3RhcnRPZigneWVhcicpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoXG4gICAgICAoKGRhdGUuZ2V0VGltZSgpIC0gZmlyc3REYXkuZGF0ZS5nZXRUaW1lKCkpIC8gODY0MDAwMDAgKyBmaXJzdERheS5kYXRlLmdldERheSgpICsgMSkgLyA3XG4gICAgKTtcbiAgfVxuXG4gIHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9KYWxhbGkoZGF0ZSkueWVhcjtcbiAgfVxuXG4gIG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRvSmFsYWxpKGRhdGUpLm1vbnRoO1xuICB9XG5cbiAgYWRkKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCBhbW91bnQ6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xuICAgIGxldCB2YWx1ZSA9IGRhdGUudmFsdWVPZigpO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgdmFsdWUgKz0gMTAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICB2YWx1ZSArPSA2MDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgdmFsdWUgKz0gMzYwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgdiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgbGV0IGpkID0gdGhpcy5kYXlPZk1vbnRoKGRhdGUpO1xuICAgICAgICBsZXQgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBsZXQgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IG5tID0gam0gKyBhbW91bnQ7XG4gICAgICAgIGNvbnN0IG55ID0gbm0gJSAxMiA/IE1hdGguZmxvb3Iobm0gLyAxMikgOiAwO1xuICAgICAgICBqeSArPSBueTtcbiAgICAgICAgam0gPSBubSAtIG55ICogMTI7XG4gICAgICAgIGNvbnN0IHZ2ID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcbiAgICAgICAgdi5zZXRGdWxsWWVhcih2di5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgdi5zZXRNb250aCh2di5nZXRNb250aCgpKTtcbiAgICAgICAgdi5zZXREYXRlKHZ2LmdldERhdGUoKSk7XG4gICAgICAgIHZhbHVlID0gdi52YWx1ZU9mKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHZhbHVlICs9IDcgKiA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICAvLyBjb25zdCB2ID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAvLyB2LnNldEZ1bGxZZWFyKHYuZ2V0RnVsbFllYXIoKSArIGFtb3VudCk7XG4gICAgICAgIC8vIHZhbHVlID0gdi52YWx1ZU9mKCk7XG4gICAgICAgIC8vIGJyZWFrXG4gICAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGxldCBqZCA9IHRoaXMuZGF5T2ZNb250aChkYXRlKTtcbiAgICAgICAgbGV0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgbGV0IGp5ID0gdGhpcy55ZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCB2diA9IHRoaXMudG9HcmVnb3JpYW4oankgKyBhbW91bnQsIGptLCBqZCk7XG4gICAgICAgIHYuc2V0RnVsbFllYXIodnYuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHYuc2V0TW9udGgodnYuZ2V0TW9udGgoKSk7XG4gICAgICAgIHYuc2V0RGF0ZSh2di5nZXREYXRlKCkpO1xuICAgICAgICB2YWx1ZSA9IHYudmFsdWVPZigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWx1ZSArPSA4NjQwMDAwMCAqIGFtb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKHZhbHVlKSwgdGhpcy5uYW1lKCkpO1xuICB9XG5cbiAgc2V0KGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0LCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgY29uc3QgakRhdGUgPSB0aGlzLnRvSmFsYWxpKGNsb25lKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgdmFsdWUsIGNsb25lLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCB2YWx1ZSwgY2xvbmUuZ2V0U2Vjb25kcygpLCBjbG9uZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKHZhbHVlLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgY2xvbmUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oakRhdGUueWVhciwgakRhdGUubW9udGgsIHZhbHVlKTtcbiAgICAgICAgY2xvbmUuc2V0RGF0ZShnRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgY29uc3QgZ0RhdGUyID0gdGhpcy50b0dyZWdvcmlhbihqRGF0ZS55ZWFyLCB2YWx1ZSwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0TW9udGgoZ0RhdGUyLmdldE1vbnRoKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBjb25zdCBnRGF0ZTMgPSB0aGlzLnRvR3JlZ29yaWFuKHZhbHVlLCBqRGF0ZS5tb250aCwgakRhdGUuZGF5KTtcbiAgICAgICAgY2xvbmUuc2V0RnVsbFllYXIoZ0RhdGUzLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gIH1cblxuICBzdGFydE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0ZShkYXRlLnZhbHVlT2YoKSk7XG4gICAgc3dpdGNoICh1bml0KSB7XG4gICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICBjbG9uZS5zZXRIb3VycyhjbG9uZS5nZXRIb3VycygpLCBjbG9uZS5nZXRNaW51dGVzKCksIGNsb25lLmdldFNlY29uZHMoKSwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgY2xvbmUuZ2V0TWludXRlcygpLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoY2xvbmUuZ2V0SG91cnMoKSwgMCwgMCwgMCk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKVxuICAgICAgICAgIC5hZGQoJ2RheScsIC10aGlzLmRheU9mV2VlayhjbG9uZSkgKyAxKVxuICAgICAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgICAgIGNhc2UgJ21vbnRoJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3Qgam0gPSB0aGlzLm1vbnRoT2ZZZWFyKGRhdGUpO1xuICAgICAgICBjb25zdCBnRGF0ZSA9IHRoaXMudG9HcmVnb3JpYW4oanksIGptLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgZ0RhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCAxLCAxKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgY2xvbmUuZ2V0U2Vjb25kcygpLCA5OTkpO1xuICAgICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUoY2xvbmUsIHRoaXMubmFtZSgpKTtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIGNsb25lLmdldE1pbnV0ZXMoKSwgNTksIDk5OSk7XG4gICAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShjbG9uZSwgdGhpcy5uYW1lKCkpO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIGNsb25lLnNldEhvdXJzKGNsb25lLmdldEhvdXJzKCksIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2xvbmUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGNsb25lLCB0aGlzLm5hbWUoKSk7XG4gICAgICBjYXNlICd3ZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKGRhdGUsICd3ZWVrJykuYWRkKCdkYXknLCA2KS5lbmRPZignZGF5Jyk7XG4gICAgICB9XG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgY29uc3QgankgPSB0aGlzLnllYXIoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGptID0gdGhpcy5tb250aE9mWWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgamQgPSB0aGlzLm1vbnRoTGVuZ3RoKGp5LCBqbSk7XG4gICAgICAgIGNvbnN0IGdEYXRlID0gdGhpcy50b0dyZWdvcmlhbihqeSwgam0sIGpkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuZW5kT2YoJ2RheScpO1xuICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIGxldCBqeSA9IHRoaXMueWVhcihkYXRlKTtcbiAgICAgICAgY29uc3QgZ0RhdGUgPSB0aGlzLnRvR3JlZ29yaWFuKGp5LCAxMiwgdGhpcy5tb250aExlbmd0aChqeSwgMTIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGdEYXRlLCB0aGlzLm5hbWUoKSkuZW5kT2YoJ2RheScpO1xuICAgIH1cbiAgfVxuXG4gIHRvSmFsYWxpKGRhdGU6IERhdGUpOiB7IHllYXI6IG51bWJlcjsgbW9udGg6IG51bWJlcjsgZGF5OiBudW1iZXIgfSB7XG4gICAgY29uc3QgZ3kgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgZ20gPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgIGNvbnN0IGdkID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgY29uc3QgciA9IHRoaXMuZDJqKHRoaXMuZzJkKGd5LCBnbSwgZ2QpKTtcbiAgICByZXR1cm4ge1xuICAgICAgeWVhcjogci5qeSxcbiAgICAgIG1vbnRoOiByLmptLFxuICAgICAgZGF5OiByLmpkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgYSBKYWxhYWxpIGRhdGUgdG8gR3JlZ29yaWFuLlxuICAgICovXG4gIHRvR3JlZ29yaWFuKGp5LCBqbSwgamQpIHtcbiAgICBjb25zdCBnID0gdGhpcy5kMmcodGhpcy5qMmQoanksIGptLCBqZCkpO1xuICAgIHJldHVybiBuZXcgRGF0ZShnLmd5LCBnLmdtIC0gMSwgZy5nZCk7XG4gIH1cblxuICAvKlxuICAgICAgQ2hlY2tzIHdoZXRoZXIgYSBKYWxhYWxpIGRhdGUgaXMgdmFsaWQgb3Igbm90LlxuICAgICovXG4gIGlzVmFsaWQoanksIGptLCBqZCkge1xuICAgIHJldHVybiAoXG4gICAgICBqeSA+PSAtNjEgJiYgankgPD0gMzE3NyAmJiBqbSA+PSAxICYmIGptIDw9IDEyICYmIGpkID49IDEgJiYgamQgPD0gdGhpcy5tb250aExlbmd0aChqeSwgam0pXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgICBJcyB0aGlzIGEgbGVhcCB5ZWFyIG9yIG5vdD9cbiAgICAqL1xuICBpc0xlYXBZZWFyKGp5KSB7XG4gICAgcmV0dXJuIHRoaXMuamFsQ2FsKGp5KS5sZWFwID09PSAwO1xuICB9XG5cbiAgLypcbiAgICAgIE51bWJlciBvZiBkYXlzIGluIGEgZ2l2ZW4gbW9udGggaW4gYSBKYWxhYWxpIHllYXIuXG4gICAgKi9cbiAgbW9udGhMZW5ndGgoanksIGptKSB7XG4gICAgaWYgKGptIDw9IDYpIHJldHVybiAzMTtcbiAgICBpZiAoam0gPD0gMTEpIHJldHVybiAzMDtcbiAgICBpZiAodGhpcy5pc0xlYXBZZWFyKGp5KSkgcmV0dXJuIDMwO1xuICAgIHJldHVybiAyOTtcbiAgfVxuXG4gIHByaXZhdGUgamFsQ2FsKGp5KSB7XG4gICAgLy8gSmFsYWFsaSB5ZWFycyBzdGFydGluZyB0aGUgMzMteWVhciBydWxlLlxuICAgIGxldCBicmVha3MgPSBbXG4gICAgICAgIC02MSwgOSwgMzgsIDE5OSwgNDI2LCA2ODYsIDc1NiwgODE4LCAxMTExLCAxMTgxLCAxMjEwLCAxNjM1LCAyMDYwLCAyMDk3LCAyMTkyLCAyMjYyLCAyMzI0LFxuICAgICAgICAyMzk0LCAyNDU2LCAzMTc4LFxuICAgICAgXSxcbiAgICAgIGJsID0gYnJlYWtzLmxlbmd0aCxcbiAgICAgIGd5ID0gankgKyA2MjEsXG4gICAgICBsZWFwSiA9IC0xNCxcbiAgICAgIGpwID0gYnJlYWtzWzBdLFxuICAgICAgam0sXG4gICAgICBqdW1wLFxuICAgICAgbGVhcCxcbiAgICAgIGxlYXBHLFxuICAgICAgbWFyY2gsXG4gICAgICBuLFxuICAgICAgaTtcblxuICAgIGlmIChqeSA8IGpwIHx8IGp5ID49IGJyZWFrc1tibCAtIDFdKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgSmFsYWFsaSB5ZWFyICcgKyBqeSk7XG5cbiAgICAvLyBGaW5kIHRoZSBsaW1pdGluZyB5ZWFycyBmb3IgdGhlIEphbGFhbGkgeWVhciBqeS5cbiAgICBmb3IgKGkgPSAxOyBpIDwgYmw7IGkgKz0gMSkge1xuICAgICAgam0gPSBicmVha3NbaV07XG4gICAgICBqdW1wID0gam0gLSBqcDtcbiAgICAgIGlmIChqeSA8IGptKSBicmVhaztcbiAgICAgIGxlYXBKID0gbGVhcEogKyB0aGlzLmRpdihqdW1wLCAzMykgKiA4ICsgdGhpcy5kaXYodGhpcy5tb2QoanVtcCwgMzMpLCA0KTtcbiAgICAgIGpwID0gam07XG4gICAgfVxuICAgIG4gPSBqeSAtIGpwO1xuXG4gICAgLy8gRmluZCB0aGUgbnVtYmVyIG9mIGxlYXAgeWVhcnMgZnJvbSBBRCA2MjEgdG8gdGhlIGJlZ2lubmluZ1xuICAgIC8vIG9mIHRoZSBjdXJyZW50IEphbGFhbGkgeWVhciBpbiB0aGUgUGVyc2lhbiBjYWxlbmRhci5cbiAgICBsZWFwSiA9IGxlYXBKICsgdGhpcy5kaXYobiwgMzMpICogOCArIHRoaXMuZGl2KHRoaXMubW9kKG4sIDMzKSArIDMsIDQpO1xuICAgIGlmICh0aGlzLm1vZChqdW1wLCAzMykgPT09IDQgJiYganVtcCAtIG4gPT09IDQpIGxlYXBKICs9IDE7XG5cbiAgICAvLyBBbmQgdGhlIHNhbWUgaW4gdGhlIEdyZWdvcmlhbiBjYWxlbmRhciAodW50aWwgdGhlIHllYXIgZ3kpLlxuICAgIGxlYXBHID0gdGhpcy5kaXYoZ3ksIDQpIC0gdGhpcy5kaXYoKHRoaXMuZGl2KGd5LCAxMDApICsgMSkgKiAzLCA0KSAtIDE1MDtcblxuICAgIC8vIERldGVybWluZSB0aGUgR3JlZ29yaWFuIGRhdGUgb2YgRmFydmFyZGluIHRoZSAxc3QuXG4gICAgbWFyY2ggPSAyMCArIGxlYXBKIC0gbGVhcEc7XG5cbiAgICAvLyBGaW5kIGhvdyBtYW55IHllYXJzIGhhdmUgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IGxlYXAgeWVhci5cbiAgICBpZiAoanVtcCAtIG4gPCA2KSBuID0gbiAtIGp1bXAgKyB0aGlzLmRpdihqdW1wICsgNCwgMzMpICogMzM7XG4gICAgbGVhcCA9IHRoaXMubW9kKHRoaXMubW9kKG4gKyAxLCAzMykgLSAxLCA0KTtcbiAgICBpZiAobGVhcCA9PT0gLTEpIHtcbiAgICAgIGxlYXAgPSA0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsZWFwOiBsZWFwLFxuICAgICAgZ3k6IGd5LFxuICAgICAgbWFyY2g6IG1hcmNoLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgYSBkYXRlIG9mIHRoZSBKYWxhYWxpIGNhbGVuZGFyIHRvIHRoZSBKdWxpYW4gRGF5IG51bWJlci5cbiAgICAgIEBwYXJhbSBqeSBKYWxhYWxpIHllYXIgKDEgdG8gMzEwMClcbiAgICAgIEBwYXJhbSBqbSBKYWxhYWxpIG1vbnRoICgxIHRvIDEyKVxuICAgICAgQHBhcmFtIGpkIEphbGFhbGkgZGF5ICgxIHRvIDI5LzMxKVxuICAgICAgQHJldHVybiBKdWxpYW4gRGF5IG51bWJlclxuICAgICovXG4gIHByaXZhdGUgajJkKGp5LCBqbSwgamQpIHtcbiAgICBsZXQgciA9IHRoaXMuamFsQ2FsKGp5KTtcbiAgICByZXR1cm4gdGhpcy5nMmQoci5neSwgMywgci5tYXJjaCkgKyAoam0gLSAxKSAqIDMxIC0gdGhpcy5kaXYoam0sIDcpICogKGptIC0gNykgKyBqZCAtIDE7XG4gIH1cblxuICAvKlxuICAgICAgQ29udmVydHMgdGhlIEp1bGlhbiBEYXkgbnVtYmVyIHRvIGEgZGF0ZSBpbiB0aGUgSmFsYWFsaSBjYWxlbmRhci5cbiAgICAgIEBwYXJhbSBqZG4gSnVsaWFuIERheSBudW1iZXJcbiAgICAgIEByZXR1cm5cbiAgICAgICAgank6IEphbGFhbGkgeWVhciAoMSB0byAzMTAwKVxuICAgICAgICBqbTogSmFsYWFsaSBtb250aCAoMSB0byAxMilcbiAgICAgICAgamQ6IEphbGFhbGkgZGF5ICgxIHRvIDI5LzMxKVxuICAgICovXG4gIHByaXZhdGUgZDJqKGpkbikge1xuICAgIGxldCBneSA9IHRoaXMuZDJnKGpkbikuZ3ksIC8vIENhbGN1bGF0ZSBHcmVnb3JpYW4geWVhciAoZ3kpLlxuICAgICAgankgPSBneSAtIDYyMSxcbiAgICAgIHIgPSB0aGlzLmphbENhbChqeSksXG4gICAgICBqZG4xZiA9IHRoaXMuZzJkKGd5LCAzLCByLm1hcmNoKSxcbiAgICAgIGpkLFxuICAgICAgam0sXG4gICAgICBrO1xuXG4gICAgLy8gRmluZCBudW1iZXIgb2YgZGF5cyB0aGF0IHBhc3NlZCBzaW5jZSAxIEZhcnZhcmRpbi5cbiAgICBrID0gamRuIC0gamRuMWY7XG4gICAgaWYgKGsgPj0gMCkge1xuICAgICAgaWYgKGsgPD0gMTg1KSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCA2IG1vbnRocy5cbiAgICAgICAgam0gPSAxICsgdGhpcy5kaXYoaywgMzEpO1xuICAgICAgICBqZCA9IHRoaXMubW9kKGssIDMxKSArIDE7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgank6IGp5LFxuICAgICAgICAgIGptOiBqbSxcbiAgICAgICAgICBqZDogamQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgcmVtYWluaW5nIG1vbnRocy5cbiAgICAgICAgayAtPSAxODY7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFByZXZpb3VzIEphbGFhbGkgeWVhci5cbiAgICAgIGp5IC09IDE7XG4gICAgICBrICs9IDE3OTtcbiAgICAgIGlmIChyLmxlYXAgPT09IDEpIGsgKz0gMTtcbiAgICB9XG4gICAgam0gPSA3ICsgdGhpcy5kaXYoaywgMzApO1xuICAgIGpkID0gdGhpcy5tb2QoaywgMzApICsgMTtcbiAgICByZXR1cm4ge1xuICAgICAgank6IGp5LFxuICAgICAgam06IGptLFxuICAgICAgamQ6IGpkLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGcyZChneSwgZ20sIGdkKSB7XG4gICAgbGV0IGQgPVxuICAgICAgdGhpcy5kaXYoKGd5ICsgdGhpcy5kaXYoZ20gLSA4LCA2KSArIDEwMDEwMCkgKiAxNDYxLCA0KSArXG4gICAgICB0aGlzLmRpdigxNTMgKiB0aGlzLm1vZChnbSArIDksIDEyKSArIDIsIDUpICtcbiAgICAgIGdkIC1cbiAgICAgIDM0ODQwNDA4O1xuICAgIGQgPSBkIC0gdGhpcy5kaXYodGhpcy5kaXYoZ3kgKyAxMDAxMDAgKyB0aGlzLmRpdihnbSAtIDgsIDYpLCAxMDApICogMywgNCkgKyA3NTI7XG4gICAgcmV0dXJuIGQ7XG4gIH1cblxuICBwcml2YXRlIGQyZyhqZG4pIHtcbiAgICBsZXQgaiwgaSwgZ2QsIGdtLCBneTtcbiAgICBqID0gNCAqIGpkbiArIDEzOTM2MTYzMTtcbiAgICBqID0gaiArIHRoaXMuZGl2KHRoaXMuZGl2KDQgKiBqZG4gKyAxODMxODc3MjAsIDE0NjA5NykgKiAzLCA0KSAqIDQgLSAzOTA4O1xuICAgIGkgPSB0aGlzLmRpdih0aGlzLm1vZChqLCAxNDYxKSwgNCkgKiA1ICsgMzA4O1xuICAgIGdkID0gdGhpcy5kaXYodGhpcy5tb2QoaSwgMTUzKSwgNSkgKyAxO1xuICAgIGdtID0gdGhpcy5tb2QodGhpcy5kaXYoaSwgMTUzKSwgMTIpICsgMTtcbiAgICBneSA9IHRoaXMuZGl2KGosIDE0NjEpIC0gMTAwMTAwICsgdGhpcy5kaXYoOCAtIGdtLCA2KTtcbiAgICByZXR1cm4ge1xuICAgICAgZ3k6IGd5LFxuICAgICAgZ206IGdtLFxuICAgICAgZ2Q6IGdkLFxuICAgIH07XG4gIH1cblxuICAvKlxuICAgICAgVXRpbGl0eSBoZWxwZXIgZnVuY3Rpb25zLlxuICAgICovXG4gIHByaXZhdGUgZGl2KGEsIGIpIHtcbiAgICByZXR1cm4gYSAvIGI7XG4gIH1cblxuICBwcml2YXRlIG1vZChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSAoYSAvIGIpICogYjtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNvcmV4L2NvcmUvZXZlbnRzL2Fjb3JleC1jb3JlLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvcmUtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2V2ZW50cy9zcmMvYWNvcmV4LWNvcmUtZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19