@alauda-fe/common 1.4.28-beta.5 → 1.4.28-beta.6

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 (64) hide show
  1. package/array-form-table/form/component.d.ts +1 -1
  2. package/code/code-editor-configs.d.ts +0 -2
  3. package/code/public-api.d.ts +0 -4
  4. package/code/resource-yaml-display/component.d.ts +6 -64
  5. package/core/abstract/base-nested-form-control.d.ts +1 -1
  6. package/core/constants/constants.d.ts +0 -3
  7. package/core/services/intercept-deactivate.service.d.ts +2 -2
  8. package/core/services/public-api.d.ts +0 -1
  9. package/core/services/time.service.d.ts +2 -8
  10. package/core/types/public-api.d.ts +0 -1
  11. package/esm2022/code/code-editor-configs.mjs +2 -12
  12. package/esm2022/code/public-api.mjs +1 -5
  13. package/esm2022/code/resource-yaml-display/component.mjs +42 -256
  14. package/esm2022/core/constants/constants.mjs +1 -4
  15. package/esm2022/core/guards/intercept-deactivate.guard.mjs +2 -2
  16. package/esm2022/core/services/intercept-deactivate.service.mjs +1 -1
  17. package/esm2022/core/services/public-api.mjs +1 -2
  18. package/esm2022/core/services/time.service.mjs +36 -13
  19. package/esm2022/core/services/workspace-helper.service.mjs +3 -4
  20. package/esm2022/core/types/public-api.mjs +1 -2
  21. package/esm2022/exec/terminal-group/component.mjs +2 -2
  22. package/esm2022/page-scaffold/page/page.module.mjs +6 -5
  23. package/esm2022/page-scaffold/page-header/help-menu/module.mjs +9 -8
  24. package/esm2022/table/module.mjs +12 -11
  25. package/esm2022/translate/constants.mjs +1 -2
  26. package/esm2022/translate/intl-format.pipes.mjs +293 -0
  27. package/esm2022/translate/public-api.mjs +4 -3
  28. package/esm2022/translate/relative-time-manager.service.mjs +87 -0
  29. package/esm2022/translate/translate.directive.mjs +5 -4
  30. package/esm2022/translate/translate.module.mjs +22 -3
  31. package/esm2022/translate/translate.pipe.mjs +7 -8
  32. package/esm2022/translate/translate.service.mjs +721 -142
  33. package/esm2022/translate/types.mjs +1 -1
  34. package/package.json +2 -2
  35. package/page-scaffold/page/page.module.d.ts +4 -3
  36. package/page-scaffold/page-header/help-menu/module.d.ts +2 -1
  37. package/styles/global.scss +0 -4
  38. package/table/component.d.ts +1 -1
  39. package/table/module.d.ts +2 -1
  40. package/translate/intl-format.pipes.d.ts +122 -0
  41. package/translate/public-api.d.ts +3 -2
  42. package/translate/relative-time-manager.service.d.ts +32 -0
  43. package/translate/translate.module.d.ts +4 -2
  44. package/translate/translate.pipe.d.ts +4 -5
  45. package/translate/translate.service.d.ts +292 -20
  46. package/translate/types.d.ts +16 -0
  47. package/code/managed-fields-folder.util.d.ts +0 -35
  48. package/code/resource-yaml-display/schema/component.d.ts +0 -61
  49. package/code/resource-yaml-editor/component.d.ts +0 -95
  50. package/code/yaml-examples.d.ts +0 -8
  51. package/code/yaml-sidebar/component.d.ts +0 -57
  52. package/code/yaml-sidebar/types.d.ts +0 -21
  53. package/code/yaml-sidebar/yaml-examples.d.ts +0 -8
  54. package/core/services/kubernetes-schema.service.d.ts +0 -44
  55. package/core/types/openapi.d.ts +0 -37
  56. package/esm2022/code/managed-fields-folder.util.mjs +0 -147
  57. package/esm2022/code/resource-yaml-display/schema/component.mjs +0 -531
  58. package/esm2022/code/resource-yaml-editor/component.mjs +0 -392
  59. package/esm2022/code/yaml-examples.mjs +0 -337
  60. package/esm2022/code/yaml-sidebar/component.mjs +0 -482
  61. package/esm2022/code/yaml-sidebar/types.mjs +0 -2
  62. package/esm2022/code/yaml-sidebar/yaml-examples.mjs +0 -340
  63. package/esm2022/core/services/kubernetes-schema.service.mjs +0 -129
  64. package/esm2022/core/types/openapi.mjs +0 -2
@@ -0,0 +1,293 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * @module translate
4
+ */
5
+ import { ChangeDetectorRef, inject, Injectable, Pipe, } from '@angular/core';
6
+ import { Subject, takeUntil } from 'rxjs';
7
+ import { FIELD_NOT_AVAILABLE_PLACEHOLDER } from '../core/public-api';
8
+ import { RelativeTimeManagerService } from './relative-time-manager.service';
9
+ import { TranslateService } from './translate.service';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * 基础国际化格式化 Pipe 抽象类
13
+ * 提供响应式的 locale 变化监听功能
14
+ */
15
+ class BaseIntlPipe {
16
+ constructor() {
17
+ this.destroy$$ = new Subject();
18
+ this.cdr = inject(ChangeDetectorRef);
19
+ this.translate = inject(TranslateService);
20
+ // 监听 locale 变化
21
+ this.translate.locale$.pipe(takeUntil(this.destroy$$)).subscribe(() => {
22
+ this.cdr.markForCheck();
23
+ });
24
+ }
25
+ ngOnDestroy() {
26
+ this.destroy$$.next();
27
+ this.destroy$$.complete();
28
+ }
29
+ static { this.ɵfac = function BaseIntlPipe_Factory(t) { return new (t || BaseIntlPipe)(); }; }
30
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: BaseIntlPipe, factory: BaseIntlPipe.ɵfac }); }
31
+ }
32
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseIntlPipe, [{
33
+ type: Injectable
34
+ }], () => [], null); })();
35
+ /**
36
+ * 数字格式化 Pipe
37
+ * @example
38
+ * {{ 1234.56 | aclIntlNumber }} // "1,234.56"
39
+ * {{ 0.85 | aclIntlNumber:{ style: 'percent' } }} // "85%"
40
+ * {{ 1234.56 | aclIntlNumber:{ minimumFractionDigits: 2 } }} // "1,234.56"
41
+ */
42
+ export class IntlNumberPipe extends BaseIntlPipe {
43
+ transform(value, options) {
44
+ if (value == null || isNaN(value)) {
45
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
46
+ }
47
+ return this.translate.formatNumber(value, options || {});
48
+ }
49
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlNumberPipe_BaseFactory; return function IntlNumberPipe_Factory(t) { return (ɵIntlNumberPipe_BaseFactory || (ɵIntlNumberPipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlNumberPipe)))(t || IntlNumberPipe); }; })(); }
50
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlNumber", type: IntlNumberPipe, pure: false, standalone: true }); }
51
+ }
52
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlNumberPipe, [{
53
+ type: Pipe,
54
+ args: [{
55
+ name: 'aclIntlNumber',
56
+ pure: false,
57
+ standalone: true,
58
+ }]
59
+ }], null, null); })();
60
+ /**
61
+ * 货币格式化 Pipe
62
+ * @example
63
+ * {{ 1234.56 | aclIntlCurrency }} // "¥1,234.56"
64
+ * {{ 1234.56 | aclIntlCurrency:'USD' }} // "$1,234.56"
65
+ * {{ 1234.56 | aclIntlCurrency:'EUR':{ minimumFractionDigits: 2 } }} // "€1,234.56"
66
+ */
67
+ export class IntlCurrencyPipe extends BaseIntlPipe {
68
+ transform(value, currency, options) {
69
+ if (value == null || isNaN(value)) {
70
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
71
+ }
72
+ return this.translate.formatCurrency(value, currency, options);
73
+ }
74
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlCurrencyPipe_BaseFactory; return function IntlCurrencyPipe_Factory(t) { return (ɵIntlCurrencyPipe_BaseFactory || (ɵIntlCurrencyPipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlCurrencyPipe)))(t || IntlCurrencyPipe); }; })(); }
75
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlCurrency", type: IntlCurrencyPipe, pure: false, standalone: true }); }
76
+ }
77
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlCurrencyPipe, [{
78
+ type: Pipe,
79
+ args: [{
80
+ name: 'aclIntlCurrency',
81
+ pure: false,
82
+ standalone: true,
83
+ }]
84
+ }], null, null); })();
85
+ /**
86
+ * 百分比格式化 Pipe
87
+ * @example
88
+ * {{ 0.85 | aclIntlPercent }} // "85%"
89
+ * {{ 0.8567 | aclIntlPercent:{ minimumFractionDigits: 2 } }} // "85.67%"
90
+ */
91
+ export class IntlPercentPipe extends BaseIntlPipe {
92
+ transform(value, options) {
93
+ if (value == null || isNaN(value)) {
94
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
95
+ }
96
+ return this.translate.formatPercent(value, options || {});
97
+ }
98
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlPercentPipe_BaseFactory; return function IntlPercentPipe_Factory(t) { return (ɵIntlPercentPipe_BaseFactory || (ɵIntlPercentPipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlPercentPipe)))(t || IntlPercentPipe); }; })(); }
99
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlPercent", type: IntlPercentPipe, pure: false, standalone: true }); }
100
+ }
101
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlPercentPipe, [{
102
+ type: Pipe,
103
+ args: [{
104
+ name: 'aclIntlPercent',
105
+ pure: false,
106
+ standalone: true,
107
+ }]
108
+ }], null, null); })();
109
+ /**
110
+ * 日期格式化 Pipe
111
+ * @example
112
+ * {{ date | aclIntlDate }} // "2025/01/01"
113
+ * {{ date | aclIntlDate:{ dateStyle: 'long' } }} // "2025年1月1日"
114
+ * {{ date | aclIntlDate:{ year: 'numeric', month: 'long' } }} // "2025年1月"
115
+ */
116
+ export class IntlDatePipe extends BaseIntlPipe {
117
+ transform(value, options) {
118
+ if (value == null) {
119
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
120
+ }
121
+ // 检查日期是否有效
122
+ const date = value instanceof Date ? value : new Date(value);
123
+ if (isNaN(date.getTime())) {
124
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
125
+ }
126
+ return this.translate.formatDate(value, options);
127
+ }
128
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlDatePipe_BaseFactory; return function IntlDatePipe_Factory(t) { return (ɵIntlDatePipe_BaseFactory || (ɵIntlDatePipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlDatePipe)))(t || IntlDatePipe); }; })(); }
129
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlDate", type: IntlDatePipe, pure: false, standalone: true }); }
130
+ }
131
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlDatePipe, [{
132
+ type: Pipe,
133
+ args: [{
134
+ name: 'aclIntlDate',
135
+ pure: false,
136
+ standalone: true,
137
+ }]
138
+ }], null, null); })();
139
+ /**
140
+ * 日期时间格式化 Pipe
141
+ * @example
142
+ * {{ date | aclIntlDateTime }} // "2025/01/01 14:30:00"
143
+ * {{ date | aclIntlDateTime:{ dateStyle: 'medium', timeStyle: 'short' } }} // "2025年1月1日 14:30"
144
+ */
145
+ export class IntlDateTimePipe extends BaseIntlPipe {
146
+ transform(value, options) {
147
+ if (value == null) {
148
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
149
+ }
150
+ // 检查日期是否有效
151
+ const date = value instanceof Date ? value : new Date(value);
152
+ if (isNaN(date.getTime())) {
153
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
154
+ }
155
+ return this.translate.formatDateTime(value, options);
156
+ }
157
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlDateTimePipe_BaseFactory; return function IntlDateTimePipe_Factory(t) { return (ɵIntlDateTimePipe_BaseFactory || (ɵIntlDateTimePipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlDateTimePipe)))(t || IntlDateTimePipe); }; })(); }
158
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlDateTime", type: IntlDateTimePipe, pure: false, standalone: true }); }
159
+ }
160
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlDateTimePipe, [{
161
+ type: Pipe,
162
+ args: [{
163
+ name: 'aclIntlDateTime',
164
+ pure: false,
165
+ standalone: true,
166
+ }]
167
+ }], null, null); })();
168
+ // 时间间隔常量 (毫秒)
169
+ const MILLISECONDS_SECOND = 1000;
170
+ const MILLISECONDS_MINUTE = MILLISECONDS_SECOND * 60;
171
+ const MILLISECONDS_HOUR = MILLISECONDS_MINUTE * 60;
172
+ const MILLISECONDS_DAY = MILLISECONDS_HOUR * 24;
173
+ /**
174
+ * 相对时间格式化 Pipe
175
+ * 支持两种使用方式:
176
+ * 1. 传入 Date 对象,自动计算相对时间
177
+ * 2. 传入数值和单位,手动指定相对时间
178
+ *
179
+ * 特性:
180
+ * - 自动刷新UI:根据时间距离智能调整刷新频率
181
+ * - 性能优化:共享定时器,避免大量单独计时器
182
+ * - 响应式设计:监听语言变化自动更新
183
+ *
184
+ * @example
185
+ * // 自动计算
186
+ * {{ pastDate | aclIntlRelativeTime }} // "2 hours ago"
187
+ * {{ futureDate | aclIntlRelativeTime:{ numeric: 'always' } }} // "in 2 hours"
188
+ *
189
+ * // 手动指定
190
+ * {{ -1 | aclIntlRelativeTime:'day' }} // "yesterday"
191
+ * {{ 2 | aclIntlRelativeTime:'hour':{ numeric: 'always' } }} // "in 2 hours"
192
+ * {{ -30 | aclIntlRelativeTime:'minute':{ numeric: 'always' } }} // "30 minutes ago"
193
+ */
194
+ export class IntlRelativeTimePipe extends BaseIntlPipe {
195
+ constructor() {
196
+ super(...arguments);
197
+ this.relativeTimeManager = inject(RelativeTimeManagerService);
198
+ }
199
+ ngOnDestroy() {
200
+ super.ngOnDestroy();
201
+ this.cleanupRefresh();
202
+ }
203
+ transform(value, unitOrOptions, options) {
204
+ if (value == null) {
205
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
206
+ }
207
+ // 情况1: 传入 Date 对象,自动计算相对时间(支持自动刷新)
208
+ if (value instanceof Date) {
209
+ this.currentValue = value;
210
+ this.setupAutoRefresh(value);
211
+ const relativeOptions = unitOrOptions;
212
+ return this.translate.formatRelativeTime(value, relativeOptions);
213
+ }
214
+ // 情况2: 传入数字,需要手动指定单位(不需要自动刷新)
215
+ if (typeof value === 'number') {
216
+ this.cleanupRefresh(); // 清除可能存在的刷新订阅
217
+ if (isNaN(value)) {
218
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
219
+ }
220
+ const unit = unitOrOptions;
221
+ if (!unit) {
222
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
223
+ }
224
+ // 对于手动指定单位的情况,直接调用翻译服务
225
+ return this.translate.formatRelativeTime(value, unit, options);
226
+ }
227
+ return FIELD_NOT_AVAILABLE_PLACEHOLDER;
228
+ }
229
+ /**
230
+ * 设置自动刷新机制
231
+ * 使用共享的计时器管理器,提高多实例场景下的性能
232
+ * 时间间隔大于一天时不设置自动刷新
233
+ */
234
+ setupAutoRefresh(date) {
235
+ const distance = Math.abs(Date.now() - date.getTime());
236
+ // 时间间隔大于一天时,不需要自动刷新
237
+ if (distance >= MILLISECONDS_DAY) {
238
+ this.cleanupRefresh();
239
+ return;
240
+ }
241
+ let interval;
242
+ if (distance < MILLISECONDS_MINUTE) {
243
+ interval = MILLISECONDS_SECOND;
244
+ }
245
+ else if (distance < MILLISECONDS_HOUR) {
246
+ interval = MILLISECONDS_MINUTE;
247
+ }
248
+ else {
249
+ interval = MILLISECONDS_HOUR;
250
+ }
251
+ // 如果刷新间隔没有变化,无需重新订阅
252
+ if (this.currentInterval === interval && this.refreshSubscription) {
253
+ return;
254
+ }
255
+ this.cleanupRefresh();
256
+ this.currentInterval = interval;
257
+ // 订阅共享的刷新事件
258
+ this.refreshSubscription = this.relativeTimeManager
259
+ .getRefreshSubject(interval)
260
+ .pipe(takeUntil(this.destroy$$))
261
+ .subscribe(() => {
262
+ this.cdr.markForCheck();
263
+ // 重新计算刷新间隔,适应时间变化
264
+ if (this.currentValue) {
265
+ this.setupAutoRefresh(this.currentValue);
266
+ }
267
+ });
268
+ }
269
+ /**
270
+ * 清理刷新相关资源
271
+ */
272
+ cleanupRefresh() {
273
+ if (this.refreshSubscription) {
274
+ this.refreshSubscription.unsubscribe();
275
+ this.refreshSubscription = undefined;
276
+ }
277
+ if (this.currentInterval !== undefined) {
278
+ this.relativeTimeManager.releaseRefreshSubject(this.currentInterval);
279
+ this.currentInterval = undefined;
280
+ }
281
+ }
282
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵIntlRelativeTimePipe_BaseFactory; return function IntlRelativeTimePipe_Factory(t) { return (ɵIntlRelativeTimePipe_BaseFactory || (ɵIntlRelativeTimePipe_BaseFactory = i0.ɵɵgetInheritedFactory(IntlRelativeTimePipe)))(t || IntlRelativeTimePipe); }; })(); }
283
+ static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclIntlRelativeTime", type: IntlRelativeTimePipe, pure: false, standalone: true }); }
284
+ }
285
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IntlRelativeTimePipe, [{
286
+ type: Pipe,
287
+ args: [{
288
+ name: 'aclIntlRelativeTime',
289
+ pure: false,
290
+ standalone: true,
291
+ }]
292
+ }], null, null); })();
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50bC1mb3JtYXQucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvdHJhbnNsYXRlL2ludGwtZm9ybWF0LnBpcGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLFVBQVUsRUFFVixJQUFJLEdBRUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUV2RDs7O0dBR0c7QUFDSCxNQUNlLFlBQVk7SUFPekI7UUFObUIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEMsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhDLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUd0RCxlQUFlO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOzZFQWpCWSxZQUFZO3VFQUFaLFlBQVks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QUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7b1BBbkhVLG9CQUFvQixTQUFwQixvQkFBb0I7NkZBQXBCLG9CQUFvQjs7aUZBQXBCLG9CQUFvQjtjQUxoQyxJQUFJO2VBQUM7Z0JBQ0osSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsVUFBVSxFQUFFLElBQUk7YUFDakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSB0cmFuc2xhdGVcbiAqL1xuXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFBpcGUsXG4gIFBpcGVUcmFuc2Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5cbmltcG9ydCB7IFJlbGF0aXZlVGltZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZWxhdGl2ZS10aW1lLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGUuc2VydmljZSc7XG5cbi8qKlxuICog5Z+656GA5Zu96ZmF5YyW5qC85byP5YyWIFBpcGUg5oq96LGh57G7XG4gKiDmj5Dkvpvlk43lupTlvI/nmoQgbG9jYWxlIOWPmOWMluebkeWQrOWKn+iDvVxuICovXG5ASW5qZWN0YWJsZSgpXG5hYnN0cmFjdCBjbGFzcyBCYXNlSW50bFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIOebkeWQrCBsb2NhbGUg5Y+Y5YyWXG4gICAgdGhpcy50cmFuc2xhdGUubG9jYWxlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgdHJhbnNmb3JtKHZhbHVlOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIOaVsOWtl+agvOW8j+WMliBQaXBlXG4gKiBAZXhhbXBsZVxuICoge3sgMTIzNC41NiB8IGFjbEludGxOdW1iZXIgfX0gLy8gXCIxLDIzNC41NlwiXG4gKiB7eyAwLjg1IHwgYWNsSW50bE51bWJlcjp7IHN0eWxlOiAncGVyY2VudCcgfSB9fSAvLyBcIjg1JVwiXG4gKiB7eyAxMjM0LjU2IHwgYWNsSW50bE51bWJlcjp7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiB9IH19IC8vIFwiMSwyMzQuNTZcIlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdhY2xJbnRsTnVtYmVyJyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEludGxOdW1iZXJQaXBlIGV4dGVuZHMgQmFzZUludGxQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyLCBvcHRpb25zPzogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBGSUVMRF9OT1RfQVZBSUxBQkxFX1BMQUNFSE9MREVSO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5mb3JtYXROdW1iZXIodmFsdWUsIG9wdGlvbnMgfHwge30pO1xuICB9XG59XG5cbi8qKlxuICog6LSn5biB5qC85byP5YyWIFBpcGVcbiAqIEBleGFtcGxlXG4gKiB7eyAxMjM0LjU2IHwgYWNsSW50bEN1cnJlbmN5IH19IC8vIFwiwqUxLDIzNC41NlwiXG4gKiB7eyAxMjM0LjU2IHwgYWNsSW50bEN1cnJlbmN5OidVU0QnIH19IC8vIFwiJDEsMjM0LjU2XCJcbiAqIHt7IDEyMzQuNTYgfCBhY2xJbnRsQ3VycmVuY3k6J0VVUic6eyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSB9fSAvLyBcIuKCrDEsMjM0LjU2XCJcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnYWNsSW50bEN1cnJlbmN5JyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEludGxDdXJyZW5jeVBpcGUgZXh0ZW5kcyBCYXNlSW50bFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgY3VycmVuY3k/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBGSUVMRF9OT1RfQVZBSUxBQkxFX1BMQUNFSE9MREVSO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5mb3JtYXRDdXJyZW5jeSh2YWx1ZSwgY3VycmVuY3ksIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICog55m+5YiG5q+U5qC85byP5YyWIFBpcGVcbiAqIEBleGFtcGxlXG4gKiB7eyAwLjg1IHwgYWNsSW50bFBlcmNlbnQgfX0gLy8gXCI4NSVcIlxuICoge3sgMC44NTY3IHwgYWNsSW50bFBlcmNlbnQ6eyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIgfSB9fSAvLyBcIjg1LjY3JVwiXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ2FjbEludGxQZXJjZW50JyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEludGxQZXJjZW50UGlwZSBleHRlbmRzIEJhc2VJbnRsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBvcHRpb25zPzogT21pdDxJbnRsLk51bWJlckZvcm1hdE9wdGlvbnMsICdzdHlsZSc+LFxuICApOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmZvcm1hdFBlcmNlbnQodmFsdWUsIG9wdGlvbnMgfHwge30pO1xuICB9XG59XG5cbi8qKlxuICog5pel5pyf5qC85byP5YyWIFBpcGVcbiAqIEBleGFtcGxlXG4gKiB7eyBkYXRlIHwgYWNsSW50bERhdGUgfX0gLy8gXCIyMDI1LzAxLzAxXCJcbiAqIHt7IGRhdGUgfCBhY2xJbnRsRGF0ZTp7IGRhdGVTdHlsZTogJ2xvbmcnIH0gfX0gLy8gXCIyMDI15bm0MeaciDHml6VcIlxuICoge3sgZGF0ZSB8IGFjbEludGxEYXRlOnsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ2xvbmcnIH0gfX0gLy8gXCIyMDI15bm0MeaciFwiXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ2FjbEludGxEYXRlJyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEludGxEYXRlUGlwZSBleHRlbmRzIEJhc2VJbnRsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3B0aW9ucz86IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zLFxuICApOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUjtcbiAgICB9XG5cbiAgICAvLyDmo4Dmn6Xml6XmnJ/mmK/lkKbmnInmlYhcbiAgICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmZvcm1hdERhdGUodmFsdWUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICog5pel5pyf5pe26Ze05qC85byP5YyWIFBpcGVcbiAqIEBleGFtcGxlXG4gKiB7eyBkYXRlIHwgYWNsSW50bERhdGVUaW1lIH19IC8vIFwiMjAyNS8wMS8wMSAxNDozMDowMFwiXG4gKiB7eyBkYXRlIHwgYWNsSW50bERhdGVUaW1lOnsgZGF0ZVN0eWxlOiAnbWVkaXVtJywgdGltZVN0eWxlOiAnc2hvcnQnIH0gfX0gLy8gXCIyMDI15bm0MeaciDHml6UgMTQ6MzBcIlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdhY2xJbnRsRGF0ZVRpbWUnLFxuICBwdXJlOiBmYWxzZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSW50bERhdGVUaW1lUGlwZSBleHRlbmRzIEJhc2VJbnRsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3B0aW9ucz86IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zLFxuICApOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUjtcbiAgICB9XG5cbiAgICAvLyDmo4Dmn6Xml6XmnJ/mmK/lkKbmnInmlYhcbiAgICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmZvcm1hdERhdGVUaW1lKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxufVxuXG4vLyDml7bpl7Tpl7TpmpTluLjph48gKOavq+enkilcbmNvbnN0IE1JTExJU0VDT05EU19TRUNPTkQgPSAxMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX01JTlVURSA9IE1JTExJU0VDT05EU19TRUNPTkQgKiA2MDtcbmNvbnN0IE1JTExJU0VDT05EU19IT1VSID0gTUlMTElTRUNPTkRTX01JTlVURSAqIDYwO1xuY29uc3QgTUlMTElTRUNPTkRTX0RBWSA9IE1JTExJU0VDT05EU19IT1VSICogMjQ7XG5cbi8qKlxuICog55u45a+55pe26Ze05qC85byP5YyWIFBpcGVcbiAqIOaUr+aMgeS4pOenjeS9v+eUqOaWueW8j++8mlxuICogMS4g5Lyg5YWlIERhdGUg5a+56LGh77yM6Ieq5Yqo6K6h566X55u45a+55pe26Ze0XG4gKiAyLiDkvKDlhaXmlbDlgLzlkozljZXkvY3vvIzmiYvliqjmjIflrprnm7jlr7nml7bpl7RcbiAqXG4gKiDnibnmgKfvvJpcbiAqIC0g6Ieq5Yqo5Yi35pawVUnvvJrmoLnmja7ml7bpl7Tot53nprvmmbrog73osIPmlbTliLfmlrDpopHnjodcbiAqIC0g5oCn6IO95LyY5YyW77ya5YWx5Lqr5a6a5pe25Zmo77yM6YG/5YWN5aSn6YeP5Y2V54us6K6h5pe25ZmoXG4gKiAtIOWTjeW6lOW8j+iuvuiuoe+8muebkeWQrOivreiogOWPmOWMluiHquWKqOabtOaWsFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyDoh6rliqjorqHnrpdcbiAqIHt7IHBhc3REYXRlIHwgYWNsSW50bFJlbGF0aXZlVGltZSB9fSAvLyBcIjIgaG91cnMgYWdvXCJcbiAqIHt7IGZ1dHVyZURhdGUgfCBhY2xJbnRsUmVsYXRpdmVUaW1lOnsgbnVtZXJpYzogJ2Fsd2F5cycgfSB9fSAvLyBcImluIDIgaG91cnNcIlxuICpcbiAqIC8vIOaJi+WKqOaMh+WumlxuICoge3sgLTEgfCBhY2xJbnRsUmVsYXRpdmVUaW1lOidkYXknIH19IC8vIFwieWVzdGVyZGF5XCJcbiAqIHt7IDIgfCBhY2xJbnRsUmVsYXRpdmVUaW1lOidob3VyJzp7IG51bWVyaWM6ICdhbHdheXMnIH0gfX0gLy8gXCJpbiAyIGhvdXJzXCJcbiAqIHt7IC0zMCB8IGFjbEludGxSZWxhdGl2ZVRpbWU6J21pbnV0ZSc6eyBudW1lcmljOiAnYWx3YXlzJyB9IH19IC8vIFwiMzAgbWludXRlcyBhZ29cIlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdhY2xJbnRsUmVsYXRpdmVUaW1lJyxcbiAgcHVyZTogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEludGxSZWxhdGl2ZVRpbWVQaXBlXG4gIGV4dGVuZHMgQmFzZUludGxQaXBlXG4gIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVsYXRpdmVUaW1lTWFuYWdlciA9IGluamVjdChSZWxhdGl2ZVRpbWVNYW5hZ2VyU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBjdXJyZW50SW50ZXJ2YWw/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVmcmVzaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBjdXJyZW50VmFsdWU/OiBEYXRlO1xuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5jbGVhbnVwUmVmcmVzaCgpO1xuICB9XG5cbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlOiBEYXRlIHwgbnVtYmVyLFxuICAgIHVuaXRPck9wdGlvbnM/OlxuICAgICAgfCBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFVuaXRcbiAgICAgIHwgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRPcHRpb25zLFxuICAgIG9wdGlvbnM/OiBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdE9wdGlvbnMsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBGSUVMRF9OT1RfQVZBSUxBQkxFX1BMQUNFSE9MREVSO1xuICAgIH1cblxuICAgIC8vIOaDheWGtTE6IOS8oOWFpSBEYXRlIOWvueixoe+8jOiHquWKqOiuoeeul+ebuOWvueaXtumXtO+8iOaUr+aMgeiHquWKqOWIt+aWsO+8iVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2godmFsdWUpO1xuXG4gICAgICBjb25zdCByZWxhdGl2ZU9wdGlvbnMgPSB1bml0T3JPcHRpb25zIGFzXG4gICAgICAgIHwgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXRPcHRpb25zXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZm9ybWF0UmVsYXRpdmVUaW1lKHZhbHVlLCByZWxhdGl2ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIOaDheWGtTI6IOS8oOWFpeaVsOWtl++8jOmcgOimgeaJi+WKqOaMh+WumuWNleS9je+8iOS4jemcgOimgeiHquWKqOWIt+aWsO+8iVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmNsZWFudXBSZWZyZXNoKCk7IC8vIOa4hemZpOWPr+iDveWtmOWcqOeahOWIt+aWsOiuoumYhVxuXG4gICAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBGSUVMRF9OT1RfQVZBSUxBQkxFX1BMQUNFSE9MREVSO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1bml0ID0gdW5pdE9yT3B0aW9ucyBhcyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdFVuaXQ7XG4gICAgICBpZiAoIXVuaXQpIHtcbiAgICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgICB9XG5cbiAgICAgIC8vIOWvueS6juaJi+WKqOaMh+WumuWNleS9jeeahOaDheWGte+8jOebtOaOpeiwg+eUqOe/u+ivkeacjeWKoVxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmZvcm1hdFJlbGF0aXZlVGltZSh2YWx1ZSwgdW5pdCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gIH1cblxuICAvKipcbiAgICog6K6+572u6Ieq5Yqo5Yi35paw5py65Yi2XG4gICAqIOS9v+eUqOWFseS6q+eahOiuoeaXtuWZqOeuoeeQhuWZqO+8jOaPkOmrmOWkmuWunuS+i+WcuuaZr+S4i+eahOaAp+iDvVxuICAgKiDml7bpl7Tpl7TpmpTlpKfkuo7kuIDlpKnml7bkuI3orr7nva7oh6rliqjliLfmlrBcbiAgICovXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaChkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyhEYXRlLm5vdygpIC0gZGF0ZS5nZXRUaW1lKCkpO1xuXG4gICAgLy8g5pe26Ze06Ze06ZqU5aSn5LqO5LiA5aSp5pe277yM5LiN6ZyA6KaB6Ieq5Yqo5Yi35pawXG4gICAgaWYgKGRpc3RhbmNlID49IE1JTExJU0VDT05EU19EQVkpIHtcbiAgICAgIHRoaXMuY2xlYW51cFJlZnJlc2goKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaW50ZXJ2YWw6IG51bWJlcjtcbiAgICBpZiAoZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfTUlOVVRFKSB7XG4gICAgICBpbnRlcnZhbCA9IE1JTExJU0VDT05EU19TRUNPTkQ7XG4gICAgfSBlbHNlIGlmIChkaXN0YW5jZSA8IE1JTExJU0VDT05EU19IT1VSKSB7XG4gICAgICBpbnRlcnZhbCA9IE1JTExJU0VDT05EU19NSU5VVEU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVydmFsID0gTUlMTElTRUNPTkRTX0hPVVI7XG4gICAgfVxuXG4gICAgLy8g5aaC5p6c5Yi35paw6Ze06ZqU5rKh5pyJ5Y+Y5YyW77yM5peg6ZyA6YeN5paw6K6i6ZiFXG4gICAgaWYgKHRoaXMuY3VycmVudEludGVydmFsID09PSBpbnRlcnZhbCAmJiB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXBSZWZyZXNoKCk7XG4gICAgdGhpcy5jdXJyZW50SW50ZXJ2YWwgPSBpbnRlcnZhbDtcblxuICAgIC8vIOiuoumYheWFseS6q+eahOWIt+aWsOS6i+S7tlxuICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsYXRpdmVUaW1lTWFuYWdlclxuICAgICAgLmdldFJlZnJlc2hTdWJqZWN0KGludGVydmFsKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgLy8g6YeN5paw6K6h566X5Yi35paw6Ze06ZqU77yM6YCC5bqU5pe26Ze05Y+Y5YyWXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaCh0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOa4heeQhuWIt+aWsOebuOWFs+i1hOa6kFxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50SW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZWxhdGl2ZVRpbWVNYW5hZ2VyLnJlbGVhc2VSZWZyZXNoU3ViamVjdCh0aGlzLmN1cnJlbnRJbnRlcnZhbCk7XG4gICAgICB0aGlzLmN1cnJlbnRJbnRlcnZhbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -6,12 +6,13 @@
6
6
  /** imports */
7
7
  export * from './constants';
8
8
  export * from './helpers';
9
+ export * from './i18n-assets-loader';
10
+ export * from './i18n-config';
11
+ export * from './intl-format.pipes';
9
12
  export * from './tokens';
10
13
  export * from './translate.directive';
11
14
  export * from './translate.module';
12
15
  export * from './translate.pipe';
13
16
  export * from './translate.service';
14
17
  export * from './types';
15
- export * from './i18n-assets-loader';
16
- export * from './i18n-config';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsY0FBYztBQUNkLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogW1tpbmNsdWRlOnRyYW5zbGF0ZS9SRUFETUUubWRdXVxuICogQG1vZHVsZSB0cmFuc2xhdGVcbiAqIEBwcmVmZXJyZWRcbiAqL1xuXG4vKiogaW1wb3J0cyAqL1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNsYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zbGF0ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2xhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLWFzc2V0cy1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLWNvbmZpZyc7XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsY0FBYztBQUNkLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBbW2luY2x1ZGU6dHJhbnNsYXRlL1JFQURNRS5tZF1dXG4gKiBAbW9kdWxlIHRyYW5zbGF0ZVxuICogQHByZWZlcnJlZFxuICovXG5cbi8qKiBpbXBvcnRzICovXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLWFzc2V0cy1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGwtZm9ybWF0LnBpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNsYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zbGF0ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2xhdGUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -0,0 +1,87 @@
1
+ /**
2
+ * @packageDocumentation
3
+ * @module translate
4
+ */
5
+ import { Injectable } from '@angular/core';
6
+ import { Subject } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * 相对时间管理器服务
10
+ *
11
+ * 用于优化大量相对时间显示的性能,通过共享定时器避免创建过多独立计时器。
12
+ * 当页面存在大量相对时间显示时,使用统一的刷新频率来批量更新所有实例。
13
+ */
14
+ export class RelativeTimeManagerService {
15
+ constructor() {
16
+ this.refreshSubjects = new Map();
17
+ this.timers = new Map();
18
+ }
19
+ /**
20
+ * 获取指定刷新间隔的 Subject
21
+ * 多个 pipe 实例可以共享同一个刷新频率
22
+ */
23
+ getRefreshSubject(interval) {
24
+ let subject = this.refreshSubjects.get(interval);
25
+ if (!subject) {
26
+ subject = new Subject();
27
+ this.refreshSubjects.set(interval, subject);
28
+ this.startTimer(interval);
29
+ }
30
+ return subject;
31
+ }
32
+ /**
33
+ * 释放指定间隔的订阅
34
+ * 当没有 pipe 实例使用时,自动清理定时器
35
+ */
36
+ releaseRefreshSubject(interval) {
37
+ const subject = this.refreshSubjects.get(interval);
38
+ if (subject && !subject.observed) {
39
+ this.stopTimer(interval);
40
+ subject.complete();
41
+ this.refreshSubjects.delete(interval);
42
+ }
43
+ }
44
+ startTimer(interval) {
45
+ if (this.timers.has(interval)) {
46
+ return; // 定时器已存在
47
+ }
48
+ const timerId = window.setInterval(() => {
49
+ const subject = this.refreshSubjects.get(interval);
50
+ if (subject?.observed) {
51
+ subject.next();
52
+ }
53
+ else {
54
+ // 没有订阅者时自动清理
55
+ this.stopTimer(interval);
56
+ if (subject) {
57
+ subject.complete();
58
+ this.refreshSubjects.delete(interval);
59
+ }
60
+ }
61
+ }, interval);
62
+ this.timers.set(interval, timerId);
63
+ }
64
+ stopTimer(interval) {
65
+ const timerId = this.timers.get(interval);
66
+ if (timerId !== undefined) {
67
+ clearInterval(timerId);
68
+ this.timers.delete(interval);
69
+ }
70
+ }
71
+ ngOnDestroy() {
72
+ // 清理所有定时器和 subjects
73
+ this.timers.forEach(timerId => clearInterval(timerId));
74
+ this.timers.clear();
75
+ this.refreshSubjects.forEach(subject => subject.complete());
76
+ this.refreshSubjects.clear();
77
+ }
78
+ static { this.ɵfac = function RelativeTimeManagerService_Factory(t) { return new (t || RelativeTimeManagerService)(); }; }
79
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: RelativeTimeManagerService, factory: RelativeTimeManagerService.ɵfac, providedIn: 'root' }); }
80
+ }
81
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RelativeTimeManagerService, [{
82
+ type: Injectable,
83
+ args: [{
84
+ providedIn: 'root',
85
+ }]
86
+ }], null, null); })();
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmUtdGltZS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvdHJhbnNsYXRlL3JlbGF0aXZlLXRpbWUtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFL0I7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMEJBQTBCO0lBSHZDO1FBSW1CLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFDbkQsV0FBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0tBcUVyRDtJQW5FQzs7O09BR0c7SUFDSCxpQkFBaUIsQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztZQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLFFBQWdCO1FBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsU0FBUztRQUNuQixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYTtnQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxTQUFTLENBQUMsUUFBZ0I7UUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULG9CQUFvQjtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQy9CLENBQUM7MkZBdEVVLDBCQUEwQjt1RUFBMUIsMEJBQTBCLFdBQTFCLDBCQUEwQixtQkFGekIsTUFBTTs7aUZBRVAsMEJBQTBCO2NBSHRDLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIHRyYW5zbGF0ZVxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIOebuOWvueaXtumXtOeuoeeQhuWZqOacjeWKoVxuICpcbiAqIOeUqOS6juS8mOWMluWkp+mHj+ebuOWvueaXtumXtOaYvuekuueahOaAp+iDve+8jOmAmui/h+WFseS6q+WumuaXtuWZqOmBv+WFjeWIm+W7uui/h+WkmueLrOeri+iuoeaXtuWZqOOAglxuICog5b2T6aG16Z2i5a2Y5Zyo5aSn6YeP55u45a+55pe26Ze05pi+56S65pe277yM5L2/55So57uf5LiA55qE5Yi35paw6aKR546H5p2l5om56YeP5pu05paw5omA5pyJ5a6e5L6L44CCXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZVRpbWVNYW5hZ2VyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFN1YmplY3RzID0gbmV3IE1hcDxudW1iZXIsIFN1YmplY3Q8dm9pZD4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZXJzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcblxuICAvKipcbiAgICog6I635Y+W5oyH5a6a5Yi35paw6Ze06ZqU55qEIFN1YmplY3RcbiAgICog5aSa5LiqIHBpcGUg5a6e5L6L5Y+v5Lul5YWx5Lqr5ZCM5LiA5Liq5Yi35paw6aKR546HXG4gICAqL1xuICBnZXRSZWZyZXNoU3ViamVjdChpbnRlcnZhbDogbnVtYmVyKTogU3ViamVjdDx2b2lkPiB7XG4gICAgbGV0IHN1YmplY3QgPSB0aGlzLnJlZnJlc2hTdWJqZWN0cy5nZXQoaW50ZXJ2YWwpO1xuXG4gICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAgIHRoaXMucmVmcmVzaFN1YmplY3RzLnNldChpbnRlcnZhbCwgc3ViamVjdCk7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIoaW50ZXJ2YWwpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIOmHiuaUvuaMh+WumumXtOmalOeahOiuoumYhVxuICAgKiDlvZPmsqHmnIkgcGlwZSDlrp7kvovkvb/nlKjml7bvvIzoh6rliqjmuIXnkIblrprml7blmahcbiAgICovXG4gIHJlbGVhc2VSZWZyZXNoU3ViamVjdChpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMucmVmcmVzaFN1YmplY3RzLmdldChpbnRlcnZhbCk7XG4gICAgaWYgKHN1YmplY3QgJiYgIXN1YmplY3Qub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuc3RvcFRpbWVyKGludGVydmFsKTtcbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIHRoaXMucmVmcmVzaFN1YmplY3RzLmRlbGV0ZShpbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKGludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lcnMuaGFzKGludGVydmFsKSkge1xuICAgICAgcmV0dXJuOyAvLyDlrprml7blmajlt7LlrZjlnKhcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnJlZnJlc2hTdWJqZWN0cy5nZXQoaW50ZXJ2YWwpO1xuICAgICAgaWYgKHN1YmplY3Q/Lm9ic2VydmVkKSB7XG4gICAgICAgIHN1YmplY3QubmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5rKh5pyJ6K6i6ZiF6ICF5pe26Ieq5Yqo5riF55CGXG4gICAgICAgIHRoaXMuc3RvcFRpbWVyKGludGVydmFsKTtcbiAgICAgICAgaWYgKHN1YmplY3QpIHtcbiAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoU3ViamVjdHMuZGVsZXRlKGludGVydmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIGludGVydmFsKTtcblxuICAgIHRoaXMudGltZXJzLnNldChpbnRlcnZhbCwgdGltZXJJZCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcihpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXJJZCA9IHRoaXMudGltZXJzLmdldChpbnRlcnZhbCk7XG4gICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpbnRlcnZhbCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8g5riF55CG5omA5pyJ5a6a5pe25Zmo5ZKMIHN1YmplY3RzXG4gICAgdGhpcy50aW1lcnMuZm9yRWFjaCh0aW1lcklkID0+IGNsZWFySW50ZXJ2YWwodGltZXJJZCkpO1xuICAgIHRoaXMudGltZXJzLmNsZWFyKCk7XG5cbiAgICB0aGlzLnJlZnJlc2hTdWJqZWN0cy5mb3JFYWNoKHN1YmplY3QgPT4gc3ViamVjdC5jb21wbGV0ZSgpKTtcbiAgICB0aGlzLnJlZnJlc2hTdWJqZWN0cy5jbGVhcigpO1xuICB9XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import { Directive, Host, Input, IterableDiffers, TemplateRef, ViewContainerRef, } from '@angular/core';
2
- import { TEMPLATE_OPTIONS } from '../core/public-api';
3
2
  import { TranslateService } from './translate.service';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "./translate.service";
5
+ const TEMPLATE_INTERPOLATE = /(\{\{([^}]+)\}\}|\{([^}]+)\})/g;
6
6
  const placeholder = (val) => ({
7
7
  type: 'placeholder',
8
8
  val: val.trim(),
@@ -53,14 +53,15 @@ export class TranslateDirective {
53
53
  if (content.length === 0) {
54
54
  return [];
55
55
  }
56
- const matches = content.matchAll(TEMPLATE_OPTIONS.interpolate);
56
+ const matches = content.matchAll(TEMPLATE_INTERPOLATE);
57
57
  const result = [];
58
58
  let prevIndex = 0;
59
59
  for (const match of matches) {
60
60
  if (match.index > prevIndex) {
61
61
  result.push(text(content.slice(prevIndex, match.index)));
62
62
  }
63
- result.push(placeholder(match[1]));
63
+ const placeholderContent = match[2] || match[3];
64
+ result.push(placeholder(placeholderContent));
64
65
  prevIndex = match.index + match[0].length;
65
66
  }
66
67
  if (prevIndex < content.length) {
@@ -161,4 +162,4 @@ export class TranslateTextDirective {
161
162
  }], () => [{ type: i0.TemplateRef }, { type: TranslateDirective, decorators: [{
162
163
  type: Host
163
164
  }] }], null); })();
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvdHJhbnNsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULElBQUksRUFDSixLQUFLLEVBR0wsZUFBZSxFQUNmLFdBQVcsRUFDWCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU92RCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1QyxJQUFJLEVBQUUsYUFBYTtJQUNuQixHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtDQUNoQixDQUFDLENBQUM7QUFDSCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUU5RCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUNrQixXQUE2QixFQUM3QixRQUFRLEVBQUU7UUFEVixnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0IsVUFBSyxHQUFMLEtBQUssQ0FBSztJQUN6QixDQUFDO0lBRUosTUFBTTtRQUNKLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQUdELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDbUIsYUFBK0IsRUFDL0IsU0FBMkIsRUFDM0IsT0FBd0I7UUFGeEIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBWW5DLFVB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LFNBQVM7ZUFBQyxFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOztzQkFJMUQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRG9DaGVjayxcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlQ2hhbmdlcyxcbiAgSXRlcmFibGVEaWZmZXIsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJ3RzLWVzc2VudGlhbHMnO1xuXG5pbXBvcnQgeyBURU1QTEFURV9PUFRJT05TIH0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSW5saW5lIHtcbiAgdHlwZTogJ3BsYWNlaG9sZGVyJyB8ICd0ZXh0JztcbiAgdmFsOiBzdHJpbmc7XG59XG5cbmNvbnN0IHBsYWNlaG9sZGVyID0gKHZhbDogc3RyaW5nKTogSW5saW5lID0+ICh7XG4gIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gIHZhbDogdmFsLnRyaW0oKSxcbn0pO1xuY29uc3QgdGV4dCA9ICh2YWw6IHN0cmluZyk6IElubGluZSA9PiAoeyB0eXBlOiAndGV4dCcsIHZhbCB9KTtcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVZpZXcge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgcHVibGljIHJlYWRvbmx5IG1hdGNoID0gJycsXG4gICkge31cblxuICBpc1RleHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLm1hdGNoO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1thY2xUcmFuc2xhdGVdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICkge31cblxuICBASW5wdXQoKSBzZXQgYWNsVHJhbnNsYXRlKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy50cmFuc2xhdGVLZXkgPSBrZXk7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gIH1cblxuICB0cmFuc2xhdGVLZXk6IHN0cmluZyB8IERpY3Rpb25hcnk8c3RyaW5nPjtcblxuICBwcml2YXRlIGxvY2FsZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgZGlydHkgPSBmYWxzZTtcblxuICBwcml2YXRlIHRleHRWaWV3OiBUcmFuc2xhdGVWaWV3O1xuXG4gIHByaXZhdGUgdmlld3M6IERpY3Rpb25hcnk8VHJhbnNsYXRlVmlldz4gPSB7fTtcblxuICBwcml2YXRlIGRpZmZlcjogSXRlcmFibGVEaWZmZXI8SW5saW5lPiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgdmlld0luZGV4ZXM6IERpY3Rpb25hcnk8bnVtYmVyW10+ID0ge307XG5cbiAgcHJpdmF0ZSBpbmxpbmVzOiBJbmxpbmVbXTtcblxuICBpbmxpbmVUcmFja2VyID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IElubGluZSkgPT5cbiAgICBpdGVtLnR5cGUgPT09ICd0ZXh0J1xuICAgICAgPyBgJHtpdGVtLnZhbH1fJHtpbmRleH1gXG4gICAgICA6IGAke2l0ZW0udmFsfV8ke2luZGV4fV8ke3RoaXMudmlld3NbaXRlbS52YWxdID8gJ2hhc192aWV3JyA6ICdub192aWV3J31gO1xuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXJ0eSB8fCB0aGlzLmxvY2FsZSAhPT0gdGhpcy50cmFuc2xhdGUubG9jYWxlKSB7XG4gICAgICB0aGlzLmxvY2FsZSA9IHRoaXMudHJhbnNsYXRlLmxvY2FsZTtcbiAgICAgIHRoaXMuaW5saW5lcyA9IHRoaXMuc2VwYXJhdGVDb250ZW50KFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRSYXcodGhpcy50cmFuc2xhdGVLZXkpLFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLmRpZmZlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuZGlmZmVyID0gdGhpcy5kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZSh0aGlzLmlubGluZVRyYWNrZXIpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGRpZmZlciBmb3IgdHJhbnNsYXRlIGRpcmVjdGl2ZSBpbmxpbmVzYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGUodGhpcy5pbmxpbmVzKTtcbiAgICB9XG4gIH1cblxuICBzZXBhcmF0ZUNvbnRlbnQoY29udGVudDogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2hBbGwoVEVNUExBVEVfT1BUSU9OUy5pbnRlcnBvbGF0ZSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IElubGluZVtdID0gW107XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCA+IHByZXZJbmRleCkge1xuICAgICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBtYXRjaC5pbmRleCkpKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2gocGxhY2Vob2xkZXIobWF0Y2hbMV0pKTtcblxuICAgICAgcHJldkluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHByZXZJbmRleCA8IGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBjb250ZW50Lmxlbmd0aCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoaW5saW5lczogSW5saW5lW10pIHtcbiAgICBpZiAoIXRoaXMudGV4dFZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RyYW5zbGF0ZSBkaXJlY3RpdmUgbmVlZCBhY2xUcmFuc2xhdGVUZXh0IHRvIHJlbmRlciB0ZXh0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpZmZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKGlubGluZXMpO1xuXG4gICAgaWYgKCFjaGFuZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8SW5saW5lPikge1xuICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigoY2hhbmdlLCBhZGp1c3RlZFByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5wcmV2aW91c0luZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjaGFuZ2UuaXRlbTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50SW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBjdXJyZW50SW5kZXg7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgeyAkaW1wbGljaXQ6IGl0ZW0udmFsIH0sXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzW2l0ZW0udmFsXTtcbiAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgdmlldy50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICB7ICRpbXBsaWNpdDogaXRlbS52YWwgfSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmlld0luZGV4ZXNbaXRlbS52YWxdID0gdGhpcy52aWV3SW5kZXhlc1tpdGVtLnZhbF0gfHwgW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJlbW92ZShcbiAgICAgICAgICBhZGp1c3RlZFByZXZpb3VzSW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBhZGp1c3RlZFByZXZpb3VzSW5kZXgsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGFkanVzdGVkUHJldmlvdXNJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3Q29udGFpbmVyLmdldChhZGp1c3RlZFByZXZpb3VzSW5kZXgpITtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLm1vdmUodmlldywgY3VycmVudEluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFZpZXcodmlldzogVHJhbnNsYXRlVmlldykge1xuICAgIGlmICh2aWV3LmlzVGV4dCgpKSB7XG4gICAgICB0aGlzLnRleHRWaWV3ID0gdmlldztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3c1t2aWV3Lm1hdGNoXSA9IHZpZXc7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLmlubGluZXMpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYWNsVHJhbnNsYXRlTWF0Y2hdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZU1hdGNoRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBASG9zdCgpIHByaXZhdGUgcmVhZG9ubHkgYWNsVHJhbnNsYXRlOiBUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICkge31cblxuICBASW5wdXQoKSBzZXQgYWNsVHJhbnNsYXRlTWF0Y2godmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHZhbCkpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1thY2xUcmFuc2xhdGVUZXh0XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVUZXh0RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgQEhvc3QoKSBwcml2YXRlIHJlYWRvbmx5IGFjbFRyYW5zbGF0ZTogVHJhbnNsYXRlRGlyZWN0aXZlLFxuICApIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRlbXBsYXRlUmVmKSk7XG4gIH1cbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvdHJhbnNsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULElBQUksRUFDSixLQUFLLEVBR0wsZUFBZSxFQUNmLFdBQVcsRUFDWCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU92RCxNQUFNLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0FBRTlELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksRUFBRSxhQUFhO0lBQ25CLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ2tCLFdBQTZCLEVBQzdCLFFBQVEsRUFBRTtRQURWLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixVQUFLLEdBQUwsS0FBSyxDQUFLO0lBQ3pCLENBQUM7SUFFSixNQUFNO1FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBR0QsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNtQixhQUErQixFQUMvQixTQUEyQixFQUMzQixPQUF3QjtRQUZ4QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFZbkMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUlkLFVBQUssR0FBOEIsRUFBRSxDQUFDO1FBRXRDLFdBQU0sR0FBa0MsSUFBSSxDQUFDO1FBRTdDLGdCQUFXLEdBQXlCLEVBQUUsQ0FBQztRQUkvQyxrQkFBYSxHQUFHLENBQUMsS0FBYSxFQUFFLElBQVksRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUNsQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRTtZQUN4QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQTFCM0UsQ0FBQztJQUVKLElBQWEsWUFBWSxDQUFDLEdBQVc7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQXVCRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUN6QyxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDO29CQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakUsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2dCQUN4RSxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWU7UUFDN0IsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV2RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFFRCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1lBRTdDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUMsQ0FBQztRQUVELElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sTUFBTSxDQUFDLE9BQWlCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FDYiwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBZ0M7UUFDbkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxFQUFFO1lBQ3ZFLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDekIsTUFBTSxLQUFLLEdBQUcsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQy9ELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQ3pCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFDdkIsS0FBSyxDQUNOLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ25DLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksRUFDSixLQUFLLENBQ04sQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQ3pCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFDdkIsS0FBSyxDQUNOLENBQUM7b0JBQ0osQ0FBQztvQkFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ3ZCLHFCQUFxQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FDbkUsQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxxQkFBcUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQzttRkFySlUsa0JBQWtCO29FQUFsQixrQkFBa0I7O2lGQUFsQixrQkFBa0I7Y0FEOUIsU0FBUztlQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEdBUTVDLFlBQVk7a0JBQXhCLEtBQUs7O0FBa0pSLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFDbUIsV0FBNkIsRUFDckIsWUFBZ0M7UUFEeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtJQUN4RCxDQUFDO0lBRUosSUFBYSxpQkFBaUIsQ0FBQyxHQUFXO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO3dGQVJVLHVCQUF1QjtvRUFBdkIsdUJBQXVCOztpRkFBdkIsdUJBQXVCO2NBRG5DLFNBQVM7ZUFBQyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOztzQkFJM0QsSUFBSTtxQkFHTSxpQkFBaUI7a0JBQTdCLEtBQUs7O0FBTVIsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNFLFdBQTZCLEVBQ0osWUFBZ0M7UUFBaEMsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBRXpELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt1RkFOVSxzQkFBc0I7b0VBQXRCLHNCQUFzQjs7aUZBQXRCLHNCQUFzQjtjQURsQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7c0JBSTFELElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEhvc3QsXG4gIElucHV0LFxuICBJdGVyYWJsZUNoYW5nZXMsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICd0cy1lc3NlbnRpYWxzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSW5saW5lIHtcbiAgdHlwZTogJ3BsYWNlaG9sZGVyJyB8ICd0ZXh0JztcbiAgdmFsOiBzdHJpbmc7XG59XG5cbmNvbnN0IFRFTVBMQVRFX0lOVEVSUE9MQVRFID0gLyhcXHtcXHsoW159XSspXFx9XFx9fFxceyhbXn1dKylcXH0pL2c7XG5cbmNvbnN0IHBsYWNlaG9sZGVyID0gKHZhbDogc3RyaW5nKTogSW5saW5lID0+ICh7XG4gIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gIHZhbDogdmFsLnRyaW0oKSxcbn0pO1xuXG5jb25zdCB0ZXh0ID0gKHZhbDogc3RyaW5nKTogSW5saW5lID0+ICh7IHR5cGU6ICd0ZXh0JywgdmFsIH0pO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlVmlldyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWF0Y2ggPSAnJyxcbiAgKSB7fVxuXG4gIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gIXRoaXMubWF0Y2g7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2FjbFRyYW5zbGF0ZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgKSB7fVxuXG4gIEBJbnB1dCgpIHNldCBhY2xUcmFuc2xhdGUoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZUtleSA9IGtleTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUtleTogc3RyaW5nIHwgRGljdGlvbmFyeTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgbG9jYWxlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkaXJ0eSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdGV4dFZpZXc6IFRyYW5zbGF0ZVZpZXc7XG5cbiAgcHJpdmF0ZSB2aWV3czogRGljdGlvbmFyeTxUcmFuc2xhdGVWaWV3PiA9IHt9O1xuXG4gIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxJbmxpbmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSB2aWV3SW5kZXhlczogRGljdGlvbmFyeTxudW1iZXJbXT4gPSB7fTtcblxuICBwcml2YXRlIGlubGluZXM6IElubGluZVtdO1xuXG4gIGlubGluZVRyYWNrZXIgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogSW5saW5lKSA9PlxuICAgIGl0ZW0udHlwZSA9PT0gJ3RleHQnXG4gICAgICA/IGAke2l0ZW0udmFsfV8ke2luZGV4fWBcbiAgICAgIDogYCR7aXRlbS52YWx9XyR7aW5kZXh9XyR7dGhpcy52aWV3c1tpdGVtLnZhbF0gPyAnaGFzX3ZpZXcnIDogJ25vX3ZpZXcnfWA7XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5sb2NhbGUpIHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy50cmFuc2xhdGUubG9jYWxlO1xuICAgICAgdGhpcy5pbmxpbmVzID0gdGhpcy5zZXBhcmF0ZUNvbnRlbnQoXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldFJhdyh0aGlzLnRyYW5zbGF0ZUtleSksXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMuZGlmZmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlKHRoaXMuaW5saW5lVHJhY2tlcik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZGlmZmVyIGZvciB0cmFuc2xhdGUgZGlyZWN0aXZlIGlubGluZXNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLmlubGluZXMpO1xuICAgIH1cbiAgfVxuXG4gIHNlcGFyYXRlQ29udGVudChjb250ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoY29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaEFsbChURU1QTEFURV9JTlRFUlBPTEFURSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IElubGluZVtdID0gW107XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCA+IHByZXZJbmRleCkge1xuICAgICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBtYXRjaC5pbmRleCkpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJDb250ZW50ID0gbWF0Y2hbMl0gfHwgbWF0Y2hbM107XG4gICAgICByZXN1bHQucHVzaChwbGFjZWhvbGRlcihwbGFjZWhvbGRlckNvbnRlbnQpKTtcblxuICAgICAgcHJldkluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHByZXZJbmRleCA8IGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBjb250ZW50Lmxlbmd0aCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoaW5saW5lczogSW5saW5lW10pIHtcbiAgICBpZiAoIXRoaXMudGV4dFZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RyYW5zbGF0ZSBkaXJlY3RpdmUgbmVlZCBhY2xUcmFuc2xhdGVUZXh0IHRvIHJlbmRlciB0ZXh0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpZmZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKGlubGluZXMpO1xuXG4gICAgaWYgKCFjaGFuZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8SW5saW5lPikge1xuICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigoY2hhbmdlLCBhZGp1c3RlZFByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5wcmV2aW91c0luZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjaGFuZ2UuaXRlbTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50SW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBjdXJyZW50SW5kZXg7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgeyAkaW1wbGljaXQ6IGl0ZW0udmFsIH0sXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzW2l0ZW0udmFsXTtcbiAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgdmlldy50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICB7ICRpbXBsaWNpdDogaXRlbS52YWwgfSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmlld0luZGV4ZXNbaXRlbS52YWxdID0gdGhpcy52aWV3SW5kZXhlc1tpdGVtLnZhbF0gfHwgW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJlbW92ZShcbiAgICAgICAgICBhZGp1c3RlZFByZXZpb3VzSW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBhZGp1c3RlZFByZXZpb3VzSW5kZXgsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGFkanVzdGVkUHJldmlvdXNJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3Q29udGFpbmVyLmdldChhZGp1c3RlZFByZXZpb3VzSW5kZXgpITtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLm1vdmUodmlldywgY3VycmVudEluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFZpZXcodmlldzogVHJhbnNsYXRlVmlldykge1xuICAgIGlmICh2aWV3LmlzVGV4dCgpKSB7XG4gICAgICB0aGlzLnRleHRWaWV3ID0gdmlldztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3c1t2aWV3Lm1hdGNoXSA9IHZpZXc7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLmlubGluZXMpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYWNsVHJhbnNsYXRlTWF0Y2hdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZU1hdGNoRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBASG9zdCgpIHByaXZhdGUgcmVhZG9ubHkgYWNsVHJhbnNsYXRlOiBUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICkge31cblxuICBASW5wdXQoKSBzZXQgYWNsVHJhbnNsYXRlTWF0Y2godmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHZhbCkpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1thY2xUcmFuc2xhdGVUZXh0XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVUZXh0RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgQEhvc3QoKSBwcml2YXRlIHJlYWRvbmx5IGFjbFRyYW5zbGF0ZTogVHJhbnNsYXRlRGlyZWN0aXZlLFxuICApIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRlbXBsYXRlUmVmKSk7XG4gIH1cbn1cbiJdfQ==
@@ -3,6 +3,7 @@
3
3
  * @module translate
4
4
  */
5
5
  import { NgModule } from '@angular/core';
6
+ import { IntlNumberPipe, IntlCurrencyPipe, IntlPercentPipe, IntlDatePipe, IntlDateTimePipe, IntlRelativeTimePipe, } from './intl-format.pipes';
6
7
  import { TranslateDirective, TranslateMatchDirective, TranslateTextDirective, } from './translate.directive';
7
8
  import { TranslatePipe } from './translate.pipe';
8
9
  import * as i0 from "@angular/core";
@@ -11,6 +12,12 @@ export const TRANSLATE_MODULE = [
11
12
  TranslateDirective,
12
13
  TranslateMatchDirective,
13
14
  TranslateTextDirective,
15
+ IntlNumberPipe,
16
+ IntlCurrencyPipe,
17
+ IntlPercentPipe,
18
+ IntlDatePipe,
19
+ IntlDateTimePipe,
20
+ IntlRelativeTimePipe,
14
21
  ];
15
22
  /**
16
23
  * @deprecated use `TranslatePipe` or `TRANSLATE_MODULE` except `.forRoot`
@@ -30,8 +37,20 @@ export class TranslateModule {
30
37
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(TranslateModule, { imports: [TranslatePipe,
31
38
  TranslateDirective,
32
39
  TranslateMatchDirective,
33
- TranslateTextDirective], exports: [TranslatePipe,
40
+ TranslateTextDirective,
41
+ IntlNumberPipe,
42
+ IntlCurrencyPipe,
43
+ IntlPercentPipe,
44
+ IntlDatePipe,
45
+ IntlDateTimePipe,
46
+ IntlRelativeTimePipe], exports: [TranslatePipe,
34
47
  TranslateDirective,
35
48
  TranslateMatchDirective,
36
- TranslateTextDirective] }); })();
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvdHJhbnNsYXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsc0JBQXNCO0NBQ2QsQ0FBQztBQUVYOztHQUVHO0FBS0gsTUFBTSxPQUFPLGVBQWU7Z0ZBQWYsZUFBZTttRUFBZixlQUFlOzs7aUZBQWYsZUFBZTtjQUozQixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzthQUMvQjs7d0ZBQ1ksZUFBZSxjQWIxQixhQUFhO1FBQ2Isa0JBQWtCO1FBQ2xCLHVCQUF1QjtRQUN2QixzQkFBc0IsYUFIdEIsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQix1QkFBdUI7UUFDdkIsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgdHJhbnNsYXRlXG4gKi9cblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICBUcmFuc2xhdGVNYXRjaERpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlVGV4dERpcmVjdGl2ZSxcbn0gZnJvbSAnLi90cmFuc2xhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL3RyYW5zbGF0ZS5waXBlJztcblxuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9NT0RVTEUgPSBbXG4gIFRyYW5zbGF0ZVBpcGUsXG4gIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlTWF0Y2hEaXJlY3RpdmUsXG4gIFRyYW5zbGF0ZVRleHREaXJlY3RpdmUsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgVHJhbnNsYXRlUGlwZWAgb3IgYFRSQU5TTEFURV9NT0RVTEVgIGV4Y2VwdCBgLmZvclJvb3RgXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5UUkFOU0xBVEVfTU9EVUxFXSxcbiAgZXhwb3J0czogWy4uLlRSQU5TTEFURV9NT0RVTEVdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVNb2R1bGUge31cbiJdfQ==
49
+ TranslateTextDirective,
50
+ IntlNumberPipe,
51
+ IntlCurrencyPipe,
52
+ IntlPercentPipe,
53
+ IntlDatePipe,
54
+ IntlDateTimePipe,
55
+ IntlRelativeTimePipe] }); })();
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvdHJhbnNsYXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixHQUN2QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsb0JBQW9CO0NBQ1osQ0FBQztBQUVYOztHQUVHO0FBS0gsTUFBTSxPQUFPLGVBQWU7Z0ZBQWYsZUFBZTttRUFBZixlQUFlOzs7aUZBQWYsZUFBZTtjQUozQixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzthQUMvQjs7d0ZBQ1ksZUFBZSxjQW5CMUIsYUFBYTtRQUNiLGtCQUFrQjtRQUNsQix1QkFBdUI7UUFDdkIsc0JBQXNCO1FBQ3RCLGNBQWM7UUFDZCxnQkFBZ0I7UUFDaEIsZUFBZTtRQUNmLFlBQVk7UUFDWixnQkFBZ0I7UUFDaEIsb0JBQW9CLGFBVHBCLGFBQWE7UUFDYixrQkFBa0I7UUFDbEIsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixjQUFjO1FBQ2QsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIHRyYW5zbGF0ZVxuICovXG5cbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEludGxOdW1iZXJQaXBlLFxuICBJbnRsQ3VycmVuY3lQaXBlLFxuICBJbnRsUGVyY2VudFBpcGUsXG4gIEludGxEYXRlUGlwZSxcbiAgSW50bERhdGVUaW1lUGlwZSxcbiAgSW50bFJlbGF0aXZlVGltZVBpcGUsXG59IGZyb20gJy4vaW50bC1mb3JtYXQucGlwZXMnO1xuaW1wb3J0IHtcbiAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICBUcmFuc2xhdGVNYXRjaERpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlVGV4dERpcmVjdGl2ZSxcbn0gZnJvbSAnLi90cmFuc2xhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL3RyYW5zbGF0ZS5waXBlJztcblxuZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9NT0RVTEUgPSBbXG4gIFRyYW5zbGF0ZVBpcGUsXG4gIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgVHJhbnNsYXRlTWF0Y2hEaXJlY3RpdmUsXG4gIFRyYW5zbGF0ZVRleHREaXJlY3RpdmUsXG4gIEludGxOdW1iZXJQaXBlLFxuICBJbnRsQ3VycmVuY3lQaXBlLFxuICBJbnRsUGVyY2VudFBpcGUsXG4gIEludGxEYXRlUGlwZSxcbiAgSW50bERhdGVUaW1lUGlwZSxcbiAgSW50bFJlbGF0aXZlVGltZVBpcGUsXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgVHJhbnNsYXRlUGlwZWAgb3IgYFRSQU5TTEFURV9NT0RVTEVgIGV4Y2VwdCBgLmZvclJvb3RgXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFsuLi5UUkFOU0xBVEVfTU9EVUxFXSxcbiAgZXhwb3J0czogWy4uLlRSQU5TTEFURV9NT0RVTEVdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVNb2R1bGUge31cbiJdfQ==