@glowgreen/gg-questionnaire-v2 0.0.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 (79) hide show
  1. package/bundles/glowgreen-gg-questionnaire-v2.umd.js +2102 -0
  2. package/bundles/glowgreen-gg-questionnaire-v2.umd.js.map +1 -0
  3. package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js +2 -0
  4. package/bundles/glowgreen-gg-questionnaire-v2.umd.min.js.map +1 -0
  5. package/esm2015/glowgreen-gg-questionnaire-v2.js +11 -0
  6. package/esm2015/lib/enums/condition-relationship.enum.js +11 -0
  7. package/esm2015/lib/enums/condition-type.enum.js +15 -0
  8. package/esm2015/lib/enums/input-type.enum.js +20 -0
  9. package/esm2015/lib/enums/question-type.enum.js +17 -0
  10. package/esm2015/lib/enums/repeater-question-type.enum.js +11 -0
  11. package/esm2015/lib/enums/validation-type.enum.js +15 -0
  12. package/esm2015/lib/gg-questionnaire-v2.module.js +41 -0
  13. package/esm2015/lib/interfaces/attachment.js +15 -0
  14. package/esm2015/lib/interfaces/checklist-item.js +15 -0
  15. package/esm2015/lib/interfaces/condition-group.js +15 -0
  16. package/esm2015/lib/interfaces/condition.js +17 -0
  17. package/esm2015/lib/interfaces/question.js +41 -0
  18. package/esm2015/lib/interfaces/questionnaire-options.js +21 -0
  19. package/esm2015/lib/interfaces/questionnaire.js +15 -0
  20. package/esm2015/lib/interfaces/repeater-question.js +27 -0
  21. package/esm2015/lib/interfaces/section.js +19 -0
  22. package/esm2015/lib/interfaces/select-option.js +15 -0
  23. package/esm2015/lib/interfaces/validator.js +15 -0
  24. package/esm2015/lib/services/filter.service.js +258 -0
  25. package/esm2015/lib/services/form-constructor.service.js +245 -0
  26. package/esm2015/lib/services/questionnaire.service.js +644 -0
  27. package/esm2015/public_api.js +16 -0
  28. package/esm5/glowgreen-gg-questionnaire-v2.js +11 -0
  29. package/esm5/lib/enums/condition-relationship.enum.js +11 -0
  30. package/esm5/lib/enums/condition-type.enum.js +15 -0
  31. package/esm5/lib/enums/input-type.enum.js +20 -0
  32. package/esm5/lib/enums/question-type.enum.js +17 -0
  33. package/esm5/lib/enums/repeater-question-type.enum.js +11 -0
  34. package/esm5/lib/enums/validation-type.enum.js +15 -0
  35. package/esm5/lib/gg-questionnaire-v2.module.js +49 -0
  36. package/esm5/lib/interfaces/attachment.js +15 -0
  37. package/esm5/lib/interfaces/checklist-item.js +15 -0
  38. package/esm5/lib/interfaces/condition-group.js +15 -0
  39. package/esm5/lib/interfaces/condition.js +17 -0
  40. package/esm5/lib/interfaces/question.js +41 -0
  41. package/esm5/lib/interfaces/questionnaire-options.js +21 -0
  42. package/esm5/lib/interfaces/questionnaire.js +15 -0
  43. package/esm5/lib/interfaces/repeater-question.js +27 -0
  44. package/esm5/lib/interfaces/section.js +19 -0
  45. package/esm5/lib/interfaces/select-option.js +15 -0
  46. package/esm5/lib/interfaces/validator.js +15 -0
  47. package/esm5/lib/services/filter.service.js +445 -0
  48. package/esm5/lib/services/form-constructor.service.js +460 -0
  49. package/esm5/lib/services/questionnaire.service.js +943 -0
  50. package/esm5/public_api.js +16 -0
  51. package/fesm2015/glowgreen-gg-questionnaire-v2.js +1194 -0
  52. package/fesm2015/glowgreen-gg-questionnaire-v2.js.map +1 -0
  53. package/fesm5/glowgreen-gg-questionnaire-v2.js +1897 -0
  54. package/fesm5/glowgreen-gg-questionnaire-v2.js.map +1 -0
  55. package/glowgreen-gg-questionnaire-v2.d.ts +6 -0
  56. package/glowgreen-gg-questionnaire-v2.metadata.json +1 -0
  57. package/lib/enums/condition-relationship.enum.d.ts +4 -0
  58. package/lib/enums/condition-type.enum.d.ts +8 -0
  59. package/lib/enums/input-type.enum.d.ts +13 -0
  60. package/lib/enums/question-type.enum.d.ts +10 -0
  61. package/lib/enums/repeater-question-type.enum.d.ts +4 -0
  62. package/lib/enums/validation-type.enum.d.ts +8 -0
  63. package/lib/gg-questionnaire-v2.module.d.ts +5 -0
  64. package/lib/interfaces/attachment.d.ts +4 -0
  65. package/lib/interfaces/checklist-item.d.ts +4 -0
  66. package/lib/interfaces/condition-group.d.ts +6 -0
  67. package/lib/interfaces/condition.d.ts +6 -0
  68. package/lib/interfaces/question.d.ts +24 -0
  69. package/lib/interfaces/questionnaire-options.d.ts +7 -0
  70. package/lib/interfaces/questionnaire.d.ts +5 -0
  71. package/lib/interfaces/repeater-question.d.ts +15 -0
  72. package/lib/interfaces/section.d.ts +8 -0
  73. package/lib/interfaces/select-option.d.ts +4 -0
  74. package/lib/interfaces/validator.d.ts +5 -0
  75. package/lib/services/filter.service.d.ts +62 -0
  76. package/lib/services/form-constructor.service.d.ts +78 -0
  77. package/lib/services/questionnaire.service.d.ts +163 -0
  78. package/package.json +21 -0
  79. package/public_api.d.ts +17 -0
@@ -0,0 +1,460 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { Injectable } from '@angular/core';
7
+ import { FormBuilder, Validators } from '@angular/forms';
8
+ import { QuestionType } from '../enums/question-type.enum';
9
+ import { FilterService } from './filter.service';
10
+ import { ValidationType } from '../enums/validation-type.enum';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "./filter.service";
14
+ var FormConstructorService = /** @class */ (function () {
15
+ function FormConstructorService(fb, filterService) {
16
+ this.fb = fb;
17
+ this.filterService = filterService;
18
+ }
19
+ /**
20
+ * Constructs a form group based on the questionnaire data.
21
+ * This form group has been filtered down based on the conditions of the sections and questions.
22
+ * @param questionnaire The questionnaire data to build the form group on.
23
+ * @returns A filted form group.
24
+ * @author Will Poulson
25
+ */
26
+ /**
27
+ * Constructs a form group based on the questionnaire data.
28
+ * This form group has been filtered down based on the conditions of the sections and questions.
29
+ * @author Will Poulson
30
+ * @param {?} questionnaire The questionnaire data to build the form group on.
31
+ * @param {?} currentQuestionnaireForm
32
+ * @param {?=} skipFilter
33
+ * @return {?} A filted form group.
34
+ */
35
+ FormConstructorService.prototype.generateFormsForQuestionnaire = /**
36
+ * Constructs a form group based on the questionnaire data.
37
+ * This form group has been filtered down based on the conditions of the sections and questions.
38
+ * @author Will Poulson
39
+ * @param {?} questionnaire The questionnaire data to build the form group on.
40
+ * @param {?} currentQuestionnaireForm
41
+ * @param {?=} skipFilter
42
+ * @return {?} A filted form group.
43
+ */
44
+ function (questionnaire, currentQuestionnaireForm, skipFilter) {
45
+ /** @type {?} */
46
+ var sections = skipFilter ?
47
+ questionnaire.sections :
48
+ this.filterService.filterSections(questionnaire.sections, currentQuestionnaireForm);
49
+ /** @type {?} */
50
+ var questionnaireForms = this.generateFormsForSections(sections, currentQuestionnaireForm);
51
+ return { sections: sections, forms: questionnaireForms };
52
+ };
53
+ /**
54
+ * @private
55
+ * @param {?} sections
56
+ * @param {?} currentQuestionnaireForm
57
+ * @return {?}
58
+ */
59
+ FormConstructorService.prototype.generateFormsForSections = /**
60
+ * @private
61
+ * @param {?} sections
62
+ * @param {?} currentQuestionnaireForm
63
+ * @return {?}
64
+ */
65
+ function (sections, currentQuestionnaireForm) {
66
+ var e_1, _a;
67
+ /** @type {?} */
68
+ var questionnaireForms = this.fb.group({});
69
+ try {
70
+ for (var sections_1 = tslib_1.__values(sections), sections_1_1 = sections_1.next(); !sections_1_1.done; sections_1_1 = sections_1.next()) {
71
+ var section = sections_1_1.value;
72
+ /** @type {?} */
73
+ var sectionForms = this.generateFormsForSection(section, currentQuestionnaireForm);
74
+ questionnaireForms.addControl(section.name, sectionForms);
75
+ }
76
+ }
77
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
78
+ finally {
79
+ try {
80
+ if (sections_1_1 && !sections_1_1.done && (_a = sections_1.return)) _a.call(sections_1);
81
+ }
82
+ finally { if (e_1) throw e_1.error; }
83
+ }
84
+ return questionnaireForms;
85
+ };
86
+ /**
87
+ * Constructs a form group based on the section data.
88
+ * This form group has been filtered down based on the conditions of the questions.
89
+ * @param section The section data to build the form group on.
90
+ * @returns A filtered form group.
91
+ * @author Will Poulson
92
+ */
93
+ /**
94
+ * Constructs a form group based on the section data.
95
+ * This form group has been filtered down based on the conditions of the questions.
96
+ * @author Will Poulson
97
+ * @private
98
+ * @param {?} section The section data to build the form group on.
99
+ * @param {?} currentQuestionnaireForm
100
+ * @return {?} A filtered form group.
101
+ */
102
+ FormConstructorService.prototype.generateFormsForSection = /**
103
+ * Constructs a form group based on the section data.
104
+ * This form group has been filtered down based on the conditions of the questions.
105
+ * @author Will Poulson
106
+ * @private
107
+ * @param {?} section The section data to build the form group on.
108
+ * @param {?} currentQuestionnaireForm
109
+ * @return {?} A filtered form group.
110
+ */
111
+ function (section, currentQuestionnaireForm) {
112
+ var e_2, _a;
113
+ /** @type {?} */
114
+ var sectionForms = this.fb.group({});
115
+ try {
116
+ for (var _b = tslib_1.__values(section.questions), _c = _b.next(); !_c.done; _c = _b.next()) {
117
+ var question = _c.value;
118
+ /** @type {?} */
119
+ var questionControl = this.generateControlForQuestion(question, section, currentQuestionnaireForm);
120
+ sectionForms.addControl(question.name, questionControl);
121
+ }
122
+ }
123
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
124
+ finally {
125
+ try {
126
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
127
+ }
128
+ finally { if (e_2) throw e_2.error; }
129
+ }
130
+ return sectionForms;
131
+ };
132
+ /**
133
+ * Constructs an astract form control based on the question data.
134
+ * @param question The question data to build the abstract control on.
135
+ * @returns An abstract control.
136
+ * @author Will Poulson
137
+ */
138
+ /**
139
+ * Constructs an astract form control based on the question data.
140
+ * @author Will Poulson
141
+ * @private
142
+ * @param {?} question The question data to build the abstract control on.
143
+ * @param {?} section
144
+ * @param {?} currentQuestionnaireForm
145
+ * @return {?} An abstract control.
146
+ */
147
+ FormConstructorService.prototype.generateControlForQuestion = /**
148
+ * Constructs an astract form control based on the question data.
149
+ * @author Will Poulson
150
+ * @private
151
+ * @param {?} question The question data to build the abstract control on.
152
+ * @param {?} section
153
+ * @param {?} currentQuestionnaireForm
154
+ * @return {?} An abstract control.
155
+ */
156
+ function (question, section, currentQuestionnaireForm) {
157
+ /** @type {?} */
158
+ var convertedValidators = this.convertValidators(question.validators);
159
+ switch (question.type) {
160
+ case QuestionType.Repeater:
161
+ /** @type {?} */
162
+ var currentArray = currentQuestionnaireForm ? ((/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])))) : false;
163
+ /** @type {?} */
164
+ var newArray = currentArray ? currentArray.controls : [];
165
+ return this.fb.array(newArray, convertedValidators);
166
+ case QuestionType.Checklist:
167
+ return this.generateGroupForChecklist(question, convertedValidators);
168
+ default:
169
+ return this.fb.control(null, { validators: convertedValidators, updateOn: 'blur' });
170
+ }
171
+ };
172
+ /**
173
+ * Generates the form group for a checklist question.
174
+ * @param question The question. Must be of type checklist or else null is returned.
175
+ * @returns A form group.
176
+ * @author Will Poulson
177
+ */
178
+ /**
179
+ * Generates the form group for a checklist question.
180
+ * @author Will Poulson
181
+ * @private
182
+ * @param {?} question The question. Must be of type checklist or else null is returned.
183
+ * @param {?} convertedValidators
184
+ * @return {?} A form group.
185
+ */
186
+ FormConstructorService.prototype.generateGroupForChecklist = /**
187
+ * Generates the form group for a checklist question.
188
+ * @author Will Poulson
189
+ * @private
190
+ * @param {?} question The question. Must be of type checklist or else null is returned.
191
+ * @param {?} convertedValidators
192
+ * @return {?} A form group.
193
+ */
194
+ function (question, convertedValidators) {
195
+ var e_3, _a;
196
+ if (question.type !== QuestionType.Checklist || question.checklistItems.length === 0) {
197
+ return null;
198
+ }
199
+ /** @type {?} */
200
+ var checklistForms = this.fb.group({}, convertedValidators);
201
+ try {
202
+ for (var _b = tslib_1.__values(question.checklistItems), _c = _b.next(); !_c.done; _c = _b.next()) {
203
+ var checklistItem = _c.value;
204
+ /** @type {?} */
205
+ var checklistItemControl = this.fb.control(false, { updateOn: 'blur' });
206
+ checklistForms.addControl(checklistItem.name, checklistItemControl);
207
+ }
208
+ }
209
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
210
+ finally {
211
+ try {
212
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
213
+ }
214
+ finally { if (e_3) throw e_3.error; }
215
+ }
216
+ return checklistForms;
217
+ };
218
+ /**
219
+ * Generates the form template for a repeater question.
220
+ * @param question The question. Must be of type repeater or else null is returned.
221
+ * @returns A form group.
222
+ * @author Will Poulson
223
+ */
224
+ /**
225
+ * Generates the form template for a repeater question.
226
+ * @author Will Poulson
227
+ * @param {?} question The question. Must be of type repeater or else null is returned.
228
+ * @return {?} A form group.
229
+ */
230
+ FormConstructorService.prototype.generateFormsForRepeater = /**
231
+ * Generates the form template for a repeater question.
232
+ * @author Will Poulson
233
+ * @param {?} question The question. Must be of type repeater or else null is returned.
234
+ * @return {?} A form group.
235
+ */
236
+ function (question) {
237
+ var e_4, _a;
238
+ if (question.type !== QuestionType.Repeater || question.repeaterQuestions.length === 0) {
239
+ console.log('Question isnt a repeater or has no questions, returning null');
240
+ return null;
241
+ }
242
+ /** @type {?} */
243
+ var repeaterForms = this.fb.group({});
244
+ try {
245
+ for (var _b = tslib_1.__values(question.repeaterQuestions), _c = _b.next(); !_c.done; _c = _b.next()) {
246
+ var repeaterQuestion = _c.value;
247
+ /** @type {?} */
248
+ var repeaterQuestionControl = this.generateControlForRepeaterQuestion(repeaterQuestion);
249
+ repeaterForms.addControl(repeaterQuestion.name, repeaterQuestionControl);
250
+ }
251
+ }
252
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
253
+ finally {
254
+ try {
255
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
256
+ }
257
+ finally { if (e_4) throw e_4.error; }
258
+ }
259
+ return repeaterForms;
260
+ };
261
+ /**
262
+ * Generates a control for a repeaters question.
263
+ * @param repeaterQuestion A repeater question.
264
+ * @returns An abstract control.
265
+ * @author Will Poulson
266
+ */
267
+ /**
268
+ * Generates a control for a repeaters question.
269
+ * @author Will Poulson
270
+ * @private
271
+ * @param {?} repeaterQuestion A repeater question.
272
+ * @return {?} An abstract control.
273
+ */
274
+ FormConstructorService.prototype.generateControlForRepeaterQuestion = /**
275
+ * Generates a control for a repeaters question.
276
+ * @author Will Poulson
277
+ * @private
278
+ * @param {?} repeaterQuestion A repeater question.
279
+ * @return {?} An abstract control.
280
+ */
281
+ function (repeaterQuestion) {
282
+ /** @type {?} */
283
+ var convertedValidators = this.convertValidators(repeaterQuestion.validators);
284
+ return this.fb.control(null, { validators: convertedValidators, updateOn: 'blur' });
285
+ };
286
+ /**
287
+ * Converts an array of validators into form validators.
288
+ * @param validators The uncoverted array of validators.
289
+ * @returns A convered array of form validators.
290
+ * @author Will Poulson
291
+ */
292
+ /**
293
+ * Converts an array of validators into form validators.
294
+ * @author Will Poulson
295
+ * @private
296
+ * @param {?} validators The uncoverted array of validators.
297
+ * @return {?} A convered array of form validators.
298
+ */
299
+ FormConstructorService.prototype.convertValidators = /**
300
+ * Converts an array of validators into form validators.
301
+ * @author Will Poulson
302
+ * @private
303
+ * @param {?} validators The uncoverted array of validators.
304
+ * @return {?} A convered array of form validators.
305
+ */
306
+ function (validators) {
307
+ var e_5, _a;
308
+ if (!validators || validators.length === 0) {
309
+ return [];
310
+ }
311
+ /** @type {?} */
312
+ var convertedValidators = [];
313
+ try {
314
+ for (var validators_1 = tslib_1.__values(validators), validators_1_1 = validators_1.next(); !validators_1_1.done; validators_1_1 = validators_1.next()) {
315
+ var validator = validators_1_1.value;
316
+ /** @type {?} */
317
+ var convertedValidator = this.convertValidator(validator);
318
+ if (convertedValidator) {
319
+ convertedValidators.push(convertedValidator);
320
+ }
321
+ }
322
+ }
323
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
324
+ finally {
325
+ try {
326
+ if (validators_1_1 && !validators_1_1.done && (_a = validators_1.return)) _a.call(validators_1);
327
+ }
328
+ finally { if (e_5) throw e_5.error; }
329
+ }
330
+ return convertedValidators;
331
+ };
332
+ /**
333
+ * Converts a single validator into a form validator.
334
+ * @param validator The unconverted validator.
335
+ * @returns A converted form validator.
336
+ * @author Will Poulson
337
+ */
338
+ /**
339
+ * Converts a single validator into a form validator.
340
+ * @author Will Poulson
341
+ * @private
342
+ * @param {?} validator The unconverted validator.
343
+ * @return {?} A converted form validator.
344
+ */
345
+ FormConstructorService.prototype.convertValidator = /**
346
+ * Converts a single validator into a form validator.
347
+ * @author Will Poulson
348
+ * @private
349
+ * @param {?} validator The unconverted validator.
350
+ * @return {?} A converted form validator.
351
+ */
352
+ function (validator) {
353
+ switch (validator.type) {
354
+ case ValidationType.Required:
355
+ return Validators.required;
356
+ default:
357
+ return null;
358
+ }
359
+ };
360
+ /**
361
+ * Constructs the forms for repeaters from saved state.
362
+ * @param savedState The saved state to load.
363
+ * @param sections The sections already generated by the form constructor.
364
+ */
365
+ /**
366
+ * Constructs the forms for repeaters from saved state.
367
+ * @param {?} savedState The saved state to load.
368
+ * @param {?} sections The sections already generated by the form constructor.
369
+ * @param {?} currentQuestionnaireForm
370
+ * @return {?}
371
+ */
372
+ FormConstructorService.prototype.constructRepeaterFromsFromState = /**
373
+ * Constructs the forms for repeaters from saved state.
374
+ * @param {?} savedState The saved state to load.
375
+ * @param {?} sections The sections already generated by the form constructor.
376
+ * @param {?} currentQuestionnaireForm
377
+ * @return {?}
378
+ */
379
+ function (savedState, sections, currentQuestionnaireForm) {
380
+ var e_6, _a, e_7, _b, e_8, _c;
381
+ try {
382
+ for (var sections_2 = tslib_1.__values(sections), sections_2_1 = sections_2.next(); !sections_2_1.done; sections_2_1 = sections_2.next()) {
383
+ var section = sections_2_1.value;
384
+ try {
385
+ for (var _d = tslib_1.__values(section.questions), _e = _d.next(); !_e.done; _e = _d.next()) {
386
+ var question = _e.value;
387
+ if (question.type !== QuestionType.Repeater) {
388
+ continue;
389
+ }
390
+ /** @type {?} */
391
+ var repeaterArray = savedState[section.name][question.name];
392
+ if (!repeaterArray || repeaterArray.length === 0) {
393
+ continue;
394
+ }
395
+ /** @type {?} */
396
+ var repeaterFormArray = (/** @type {?} */ (currentQuestionnaireForm.get([section.name, question.name])));
397
+ if (repeaterFormArray.controls.length === repeaterArray.length) {
398
+ continue;
399
+ }
400
+ try {
401
+ for (var repeaterArray_1 = tslib_1.__values(repeaterArray), repeaterArray_1_1 = repeaterArray_1.next(); !repeaterArray_1_1.done; repeaterArray_1_1 = repeaterArray_1.next()) {
402
+ var repeaterItem = repeaterArray_1_1.value;
403
+ /** @type {?} */
404
+ var repeaterItemTemplate = this.generateFormsForRepeater(question);
405
+ repeaterFormArray.push(repeaterItemTemplate);
406
+ }
407
+ }
408
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
409
+ finally {
410
+ try {
411
+ if (repeaterArray_1_1 && !repeaterArray_1_1.done && (_c = repeaterArray_1.return)) _c.call(repeaterArray_1);
412
+ }
413
+ finally { if (e_8) throw e_8.error; }
414
+ }
415
+ }
416
+ }
417
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
418
+ finally {
419
+ try {
420
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
421
+ }
422
+ finally { if (e_7) throw e_7.error; }
423
+ }
424
+ }
425
+ }
426
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
427
+ finally {
428
+ try {
429
+ if (sections_2_1 && !sections_2_1.done && (_a = sections_2.return)) _a.call(sections_2);
430
+ }
431
+ finally { if (e_6) throw e_6.error; }
432
+ }
433
+ };
434
+ FormConstructorService.decorators = [
435
+ { type: Injectable, args: [{
436
+ providedIn: 'root'
437
+ },] }
438
+ ];
439
+ /** @nocollapse */
440
+ FormConstructorService.ctorParameters = function () { return [
441
+ { type: FormBuilder },
442
+ { type: FilterService }
443
+ ]; };
444
+ /** @nocollapse */ FormConstructorService.ngInjectableDef = i0.defineInjectable({ factory: function FormConstructorService_Factory() { return new FormConstructorService(i0.inject(i1.FormBuilder), i0.inject(i2.FilterService)); }, token: FormConstructorService, providedIn: "root" });
445
+ return FormConstructorService;
446
+ }());
447
+ export { FormConstructorService };
448
+ if (false) {
449
+ /**
450
+ * @type {?}
451
+ * @private
452
+ */
453
+ FormConstructorService.prototype.fb;
454
+ /**
455
+ * @type {?}
456
+ * @private
457
+ */
458
+ FormConstructorService.prototype.filterService;
459
+ }
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb25zdHJ1Y3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdsb3dncmVlbi9nZy1xdWVzdGlvbm5haXJlLXYyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2Zvcm0tY29uc3RydWN0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBd0QsVUFBVSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFJMUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFLL0Q7SUFLRSxnQ0FDVSxFQUFlLEVBQ2YsYUFBNEI7UUFENUIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ2xDLENBQUM7SUFFTDs7Ozs7O09BTUc7Ozs7Ozs7Ozs7SUFDSSw4REFBNkI7Ozs7Ozs7OztJQUFwQyxVQUNFLGFBQTRCLEVBQzVCLHdCQUFtQyxFQUNuQyxVQUFvQjs7WUFFZCxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDM0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLENBQUM7O1lBQy9FLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLENBQUM7UUFDNUYsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFDLENBQUM7SUFDekQsQ0FBQzs7Ozs7OztJQUVPLHlEQUF3Qjs7Ozs7O0lBQWhDLFVBQWlDLFFBQXdC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WUFBWSxDQUFDLFFBQVEsRUFBRTs0QkFDM0MsU0FBUzt5QkFDVjs7NEJBRUssYUFBYSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTs0QkFDaEQsU0FBUzt5QkFDVjs7NEJBRUssaUJBQWlCLEdBQUcsbUJBQUEsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBYTt3QkFFbEcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUU7NEJBQzlELFNBQVM7eUJBQ1Y7OzRCQUVELEtBQTJCLElBQUEsa0JBQUEsaUJBQUEsYUFBYSxDQUFBLDRDQUFBLHVFQUFFO2dDQUFyQyxJQUFNLFlBQVksMEJBQUE7O29DQUNmLG9CQUFvQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUM7Z0NBQ3BFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOzZCQUM5Qzs7Ozs7Ozs7O3FCQUNGOzs7Ozs7Ozs7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQzs7Z0JBN0xGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBZFEsV0FBVztnQkFLWCxhQUFhOzs7aUNBTnRCO0NBMk1DLEFBOUxELElBOExDO1NBM0xZLHNCQUFzQjs7Ozs7O0lBRy9CLG9DQUF1Qjs7Ozs7SUFDdkIsK0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlY3Rpb24nO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9uJztcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3F1ZXN0aW9ubmFpcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvcXVlc3Rpb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmFsaWRhdG9yJztcbmltcG9ydCB7IFZhbGlkYXRpb25UeXBlIH0gZnJvbSAnLi4vZW51bXMvdmFsaWRhdGlvbi10eXBlLmVudW0nO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUmVwZWF0ZXJRdWVzdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVwZWF0ZXItcXVlc3Rpb24nO1xuaW1wb3J0IHsgQ2hlY2tsaXN0SXRlbSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tsaXN0LWl0ZW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29uc3RydWN0b3JTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2VcbiAgKSB7IH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHF1ZXN0aW9ubmFpcmUgZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHNlY3Rpb25zIGFuZCBxdWVzdGlvbnMuXG4gICAqIEBwYXJhbSBxdWVzdGlvbm5haXJlIFRoZSBxdWVzdGlvbm5haXJlIGRhdGEgdG8gYnVpbGQgdGhlIGZvcm0gZ3JvdXAgb24uXG4gICAqIEByZXR1cm5zIEEgZmlsdGVkIGZvcm0gZ3JvdXAuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVGb3Jtc0ZvclF1ZXN0aW9ubmFpcmUoXG4gICAgcXVlc3Rpb25uYWlyZTogUXVlc3Rpb25uYWlyZSxcbiAgICBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCxcbiAgICBza2lwRmlsdGVyPzogYm9vbGVhblxuICApOiB7c2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+OyBmb3JtczogRm9ybUdyb3VwfSB7XG4gICAgY29uc3Qgc2VjdGlvbnMgPSBza2lwRmlsdGVyID9cbiAgICAgIHF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMgOlxuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlclNlY3Rpb25zKHF1ZXN0aW9ubmFpcmUuc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgY29uc3QgcXVlc3Rpb25uYWlyZUZvcm1zID0gdGhpcy5nZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnMsIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgcmV0dXJuIHtzZWN0aW9uczogc2VjdGlvbnMsIGZvcm1zOiBxdWVzdGlvbm5haXJlRm9ybXN9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbnMoc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGNvbnN0IHF1ZXN0aW9ubmFpcmVGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBzZWN0aW9uRm9ybXMgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JTZWN0aW9uKHNlY3Rpb24sIGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSk7XG4gICAgICBxdWVzdGlvbm5haXJlRm9ybXMuYWRkQ29udHJvbChzZWN0aW9uLm5hbWUsIHNlY3Rpb25Gb3Jtcyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvbm5haXJlRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHNlY3Rpb24gZGF0YS5cbiAgICogVGhpcyBmb3JtIGdyb3VwIGhhcyBiZWVuIGZpbHRlcmVkIGRvd24gYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgb2YgdGhlIHF1ZXN0aW9ucy5cbiAgICogQHBhcmFtIHNlY3Rpb24gVGhlIHNlY3Rpb24gZGF0YSB0byBidWlsZCB0aGUgZm9ybSBncm91cCBvbi5cbiAgICogQHJldHVybnMgQSBmaWx0ZXJlZCBmb3JtIGdyb3VwLlxuICAgKiBAYXV0aG9yIFdpbGwgUG91bHNvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1zRm9yU2VjdGlvbihzZWN0aW9uOiBTZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3Qgc2VjdGlvbkZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcbiAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHNlY3Rpb24ucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBxdWVzdGlvbkNvbnRyb2wgPSB0aGlzLmdlbmVyYXRlQ29udHJvbEZvclF1ZXN0aW9uKHF1ZXN0aW9uLCBzZWN0aW9uLCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0pO1xuICAgICAgc2VjdGlvbkZvcm1zLmFkZENvbnRyb2wocXVlc3Rpb24ubmFtZSwgcXVlc3Rpb25Db250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlY3Rpb25Gb3JtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGFuIGFzdHJhY3QgZm9ybSBjb250cm9sIGJhc2VkIG9uIHRoZSBxdWVzdGlvbiBkYXRhLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gVGhlIHF1ZXN0aW9uIGRhdGEgdG8gYnVpbGQgdGhlIGFic3RyYWN0IGNvbnRyb2wgb24uXG4gICAqIEByZXR1cm5zIEFuIGFic3RyYWN0IGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udHJvbEZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbiwgc2VjdGlvbjogU2VjdGlvbiwgY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtOiBGb3JtR3JvdXApOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnMgPSB0aGlzLmNvbnZlcnRWYWxpZGF0b3JzKHF1ZXN0aW9uLnZhbGlkYXRvcnMpO1xuICAgIHN3aXRjaCAocXVlc3Rpb24udHlwZSkge1xuICAgICAgY2FzZSBRdWVzdGlvblR5cGUuUmVwZWF0ZXI6XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcnJheSA9IGN1cnJlbnRRdWVzdGlvbm5haXJlRm9ybSA/IChjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm0uZ2V0KFtzZWN0aW9uLm5hbWUsIHF1ZXN0aW9uLm5hbWVdKSBhcyBGb3JtQXJyYXkpIDogZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0FycmF5ID0gY3VycmVudEFycmF5ID8gY3VycmVudEFycmF5LmNvbnRyb2xzIDogW107XG4gICAgICAgIHJldHVybiB0aGlzLmZiLmFycmF5KG5ld0FycmF5LCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICAgIGNhc2UgUXVlc3Rpb25UeXBlLkNoZWNrbGlzdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbiwgY29udmVydGVkVmFsaWRhdG9ycyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKG51bGwsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246ICdibHVyJyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBmb3JtIGdyb3VwIGZvciBhIGNoZWNrbGlzdCBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIFRoZSBxdWVzdGlvbi4gTXVzdCBiZSBvZiB0eXBlIGNoZWNrbGlzdCBvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIEEgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVHcm91cEZvckNoZWNrbGlzdChxdWVzdGlvbjogUXVlc3Rpb24sIGNvbnZlcnRlZFZhbGlkYXRvcnMpIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLkNoZWNrbGlzdCB8fCBxdWVzdGlvbi5jaGVja2xpc3RJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNoZWNrbGlzdEZvcm1zOiBGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9LCBjb252ZXJ0ZWRWYWxpZGF0b3JzKTtcbiAgICBmb3IgKGNvbnN0IGNoZWNrbGlzdEl0ZW0gb2YgcXVlc3Rpb24uY2hlY2tsaXN0SXRlbXMpIHtcbiAgICAgIGNvbnN0IGNoZWNrbGlzdEl0ZW1Db250cm9sID0gdGhpcy5mYi5jb250cm9sKGZhbHNlLCB7IHVwZGF0ZU9uOiAnYmx1cicgfSk7XG4gICAgICBjaGVja2xpc3RGb3Jtcy5hZGRDb250cm9sKGNoZWNrbGlzdEl0ZW0ubmFtZSwgY2hlY2tsaXN0SXRlbUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gY2hlY2tsaXN0Rm9ybXM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGZvcm0gdGVtcGxhdGUgZm9yIGEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBUaGUgcXVlc3Rpb24uIE11c3QgYmUgb2YgdHlwZSByZXBlYXRlciBvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIEEgZm9ybSBncm91cC5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1zRm9yUmVwZWF0ZXIocXVlc3Rpb246IFF1ZXN0aW9uKTogRm9ybUdyb3VwIHtcbiAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyIHx8IHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1F1ZXN0aW9uIGlzbnQgYSByZXBlYXRlciBvciBoYXMgbm8gcXVlc3Rpb25zLCByZXR1cm5pbmcgbnVsbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwZWF0ZXJGb3JtczogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZm9yIChjb25zdCByZXBlYXRlclF1ZXN0aW9uIG9mIHF1ZXN0aW9uLnJlcGVhdGVyUXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCByZXBlYXRlclF1ZXN0aW9uQ29udHJvbCA9IHRoaXMuZ2VuZXJhdGVDb250cm9sRm9yUmVwZWF0ZXJRdWVzdGlvbihyZXBlYXRlclF1ZXN0aW9uKTtcbiAgICAgIHJlcGVhdGVyRm9ybXMuYWRkQ29udHJvbChyZXBlYXRlclF1ZXN0aW9uLm5hbWUsIHJlcGVhdGVyUXVlc3Rpb25Db250cm9sKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcGVhdGVyRm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgY29udHJvbCBmb3IgYSByZXBlYXRlcnMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSByZXBlYXRlclF1ZXN0aW9uIEEgcmVwZWF0ZXIgcXVlc3Rpb24uXG4gICAqIEByZXR1cm5zIEFuIGFic3RyYWN0IGNvbnRyb2wuXG4gICAqIEBhdXRob3IgV2lsbCBQb3Vsc29uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udHJvbEZvclJlcGVhdGVyUXVlc3Rpb24ocmVwZWF0ZXJRdWVzdGlvbjogUmVwZWF0ZXJRdWVzdGlvbik6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgY29udmVydGVkVmFsaWRhdG9ycyA9IHRoaXMuY29udmVydFZhbGlkYXRvcnMocmVwZWF0ZXJRdWVzdGlvbi52YWxpZGF0b3JzKTtcbiAgICByZXR1cm4gdGhpcy5mYi5jb250cm9sKG51bGwsIHsgdmFsaWRhdG9yczogY29udmVydGVkVmFsaWRhdG9ycywgdXBkYXRlT246ICdibHVyJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB2YWxpZGF0b3JzIGludG8gZm9ybSB2YWxpZGF0b3JzLlxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyBUaGUgdW5jb3ZlcnRlZCBhcnJheSBvZiB2YWxpZGF0b3JzLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcmVkIGFycmF5IG9mIGZvcm0gdmFsaWRhdG9ycy5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcnModmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yPik6IEFycmF5PFZhbGlkYXRvckZuPiB7XG4gICAgaWYgKCF2YWxpZGF0b3JzIHx8IHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZFZhbGlkYXRvciA9IHRoaXMuY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3IpO1xuICAgICAgaWYgKGNvbnZlcnRlZFZhbGlkYXRvcikge1xuICAgICAgICBjb252ZXJ0ZWRWYWxpZGF0b3JzLnB1c2goY29udmVydGVkVmFsaWRhdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZFZhbGlkYXRvcnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzaW5nbGUgdmFsaWRhdG9yIGludG8gYSBmb3JtIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIHZhbGlkYXRvciBUaGUgdW5jb252ZXJ0ZWQgdmFsaWRhdG9yLlxuICAgKiBAcmV0dXJucyBBIGNvbnZlcnRlZCBmb3JtIHZhbGlkYXRvci5cbiAgICogQGF1dGhvciBXaWxsIFBvdWxzb25cbiAgICovXG4gIHByaXZhdGUgY29udmVydFZhbGlkYXRvcih2YWxpZGF0b3I6IFZhbGlkYXRvcik6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgc3dpdGNoICh2YWxpZGF0b3IudHlwZSkge1xuICAgICAgY2FzZSBWYWxpZGF0aW9uVHlwZS5SZXF1aXJlZDpcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucmVxdWlyZWQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZm9ybXMgZm9yIHJlcGVhdGVycyBmcm9tIHNhdmVkIHN0YXRlLlxuICAgKiBAcGFyYW0gc2F2ZWRTdGF0ZSBUaGUgc2F2ZWQgc3RhdGUgdG8gbG9hZC5cbiAgICogQHBhcmFtIHNlY3Rpb25zIFRoZSBzZWN0aW9ucyBhbHJlYWR5IGdlbmVyYXRlZCBieSB0aGUgZm9ybSBjb25zdHJ1Y3Rvci5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RSZXBlYXRlckZyb21zRnJvbVN0YXRlKHNhdmVkU3RhdGU6IGFueSwgc2VjdGlvbnM6IEFycmF5PFNlY3Rpb24+LCBjdXJyZW50UXVlc3Rpb25uYWlyZUZvcm06IEZvcm1Hcm91cCkge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBzZWN0aW9uLnF1ZXN0aW9ucykge1xuICAgICAgICBpZiAocXVlc3Rpb24udHlwZSAhPT0gUXVlc3Rpb25UeXBlLlJlcGVhdGVyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBlYXRlckFycmF5ID0gc2F2ZWRTdGF0ZVtzZWN0aW9uLm5hbWVdW3F1ZXN0aW9uLm5hbWVdO1xuICAgICAgICBpZiAoIXJlcGVhdGVyQXJyYXkgfHwgcmVwZWF0ZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcGVhdGVyRm9ybUFycmF5ID0gY3VycmVudFF1ZXN0aW9ubmFpcmVGb3JtLmdldChbc2VjdGlvbi5uYW1lLCBxdWVzdGlvbi5uYW1lXSkgYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChyZXBlYXRlckZvcm1BcnJheS5jb250cm9scy5sZW5ndGggPT09IHJlcGVhdGVyQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJlcGVhdGVySXRlbSBvZiByZXBlYXRlckFycmF5KSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZXJJdGVtVGVtcGxhdGUgPSB0aGlzLmdlbmVyYXRlRm9ybXNGb3JSZXBlYXRlcihxdWVzdGlvbik7XG4gICAgICAgICAgcmVwZWF0ZXJGb3JtQXJyYXkucHVzaChyZXBlYXRlckl0ZW1UZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==