@eqproject/eqp-dynamic-module 0.0.6 → 0.0.7

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 (194) hide show
  1. package/karma.conf.js +32 -0
  2. package/ng-package.json +18 -0
  3. package/package.json +31 -41
  4. package/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.html +10 -0
  5. package/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.scss +3 -0
  6. package/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.ts +228 -0
  7. package/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.html +212 -0
  8. package/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.scss +30 -0
  9. package/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.ts +692 -0
  10. package/src/lib/components/private/add-form-field/add-form-field.component.html +417 -0
  11. package/src/lib/components/private/add-form-field/add-form-field.component.scss +38 -0
  12. package/src/lib/components/private/add-form-field/add-form-field.component.ts +599 -0
  13. package/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.html +42 -0
  14. package/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.scss +0 -0
  15. package/src/lib/components/private/dynamic-module-field/dynamic-module-field.component.ts +125 -0
  16. package/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.html +25 -0
  17. package/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.scss +0 -0
  18. package/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.ts +172 -0
  19. package/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.html +32 -0
  20. package/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.scss +0 -0
  21. package/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.ts +53 -0
  22. package/src/lib/components/private/field-templates/date-field-template/date-field-template.component.html +6 -0
  23. package/src/lib/components/private/field-templates/date-field-template/date-field-template.component.scss +0 -0
  24. package/src/lib/components/private/field-templates/date-field-template/date-field-template.component.ts +70 -0
  25. package/src/lib/components/private/field-templates/image-field-template/image-field-template.component.html +57 -0
  26. package/src/lib/components/private/field-templates/image-field-template/image-field-template.component.scss +4 -0
  27. package/src/lib/components/private/field-templates/image-field-template/image-field-template.component.ts +203 -0
  28. package/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.html +46 -0
  29. package/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.scss +13 -0
  30. package/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.ts +114 -0
  31. package/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.html +6 -0
  32. package/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.scss +0 -0
  33. package/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.ts +70 -0
  34. package/src/lib/components/private/field-templates/text-field-template/text-field-template.component.html +5 -0
  35. package/src/lib/components/private/field-templates/text-field-template/text-field-template.component.scss +0 -0
  36. package/src/lib/components/private/field-templates/text-field-template/text-field-template.component.ts +65 -0
  37. package/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.html +5 -0
  38. package/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.scss +0 -0
  39. package/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.ts +48 -0
  40. package/src/lib/components/private/form-records/add-form-record/add-form-record.component.html +74 -0
  41. package/src/lib/components/private/form-records/add-form-record/add-form-record.component.scss +0 -0
  42. package/src/lib/components/private/form-records/add-form-record/add-form-record.component.ts +117 -0
  43. package/src/lib/components/private/form-records/list-form-record/list-form-record.component.html +14 -0
  44. package/src/lib/components/private/form-records/list-form-record/list-form-record.component.scss +7 -0
  45. package/src/lib/components/private/form-records/list-form-record/list-form-record.component.ts +213 -0
  46. package/src/lib/components/private/spinner/spinner.component.html +3 -0
  47. package/src/lib/components/private/spinner/spinner.component.scss +100 -0
  48. package/src/lib/components/private/spinner/spinner.component.ts +19 -0
  49. package/src/lib/eqp-dynamic-module.module.ts +65 -0
  50. package/{lib/interfaces/iBaseFieldComponent.interface.d.ts → src/lib/interfaces/iBaseFieldComponent.interface.ts} +1 -1
  51. package/{lib/interfaces/iRootObject.interface.d.ts → src/lib/interfaces/iRootObject.interface.ts} +1 -1
  52. package/{lib/models/baseField.model.d.ts → src/lib/models/baseField.model.ts} +14 -5
  53. package/{lib/models/baseObj.model.d.ts → src/lib/models/baseObj.model.ts} +3 -3
  54. package/src/lib/models/context.model.ts +10 -0
  55. package/{lib/models/endPointConfiguration.model.d.ts → src/lib/models/endPointConfiguration.model.ts} +16 -12
  56. package/{lib/models/entity.model.d.ts → src/lib/models/entity.model.ts} +2 -1
  57. package/src/lib/models/fields/attachmentField.model.ts +32 -0
  58. package/{lib/models/fields/booleanField.model.d.ts → src/lib/models/fields/booleanField.model.ts} +8 -4
  59. package/{lib/models/fields/dateField.model.d.ts → src/lib/models/fields/dateField.model.ts} +5 -3
  60. package/{lib/models/fields/imageField.model.d.ts → src/lib/models/fields/imageField.model.ts} +8 -3
  61. package/{lib/models/fields/listValueField.model.d.ts → src/lib/models/fields/listValueField.model.ts} +13 -8
  62. package/{lib/models/fields/lookupField.model.d.ts → src/lib/models/fields/lookupField.model.ts} +5 -2
  63. package/{lib/models/fields/numericField.model.d.ts → src/lib/models/fields/numericField.model.ts} +3 -2
  64. package/{lib/models/fields/testareaField.model.d.ts → src/lib/models/fields/testareaField.model.ts} +3 -2
  65. package/src/lib/models/fields/textField.model.ts +18 -0
  66. package/{lib/models/form.model.d.ts → src/lib/models/form.model.ts} +25 -12
  67. package/{lib/models/record.model.d.ts → src/lib/models/record.model.ts} +4 -5
  68. package/src/lib/modules/material.module.ts +104 -0
  69. package/src/lib/services/custom-form-validators.service.ts +21 -0
  70. package/src/lib/services/eqp-dynamic-module-dialog.service.ts +114 -0
  71. package/src/lib/services/spinner.service.ts +40 -0
  72. package/src/lib/services/utilityHelper.services.ts +413 -0
  73. package/{public-api.d.ts → src/public-api.ts} +3 -0
  74. package/src/test.ts +26 -0
  75. package/tsconfig.lib.json +23 -0
  76. package/tsconfig.lib.prod.json +6 -0
  77. package/tsconfig.spec.json +17 -0
  78. package/tslint.json +17 -0
  79. package/bundles/eqproject-eqp-dynamic-module.umd.js +0 -3991
  80. package/bundles/eqproject-eqp-dynamic-module.umd.js.map +0 -1
  81. package/bundles/eqproject-eqp-dynamic-module.umd.min.js +0 -17
  82. package/bundles/eqproject-eqp-dynamic-module.umd.min.js.map +0 -1
  83. package/eqproject-eqp-dynamic-module.d.ts +0 -6
  84. package/eqproject-eqp-dynamic-module.metadata.json +0 -1
  85. package/esm2015/eqproject-eqp-dynamic-module.js +0 -7
  86. package/esm2015/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.js +0 -262
  87. package/esm2015/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.js +0 -649
  88. package/esm2015/lib/components/private/add-form-field/add-form-field.component.js +0 -577
  89. package/esm2015/lib/components/private/dynamic-module-field/dynamic-module-field.component.js +0 -127
  90. package/esm2015/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.js +0 -170
  91. package/esm2015/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.js +0 -56
  92. package/esm2015/lib/components/private/field-templates/date-field-template/date-field-template.component.js +0 -71
  93. package/esm2015/lib/components/private/field-templates/image-field-template/image-field-template.component.js +0 -196
  94. package/esm2015/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.js +0 -115
  95. package/esm2015/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.js +0 -71
  96. package/esm2015/lib/components/private/field-templates/text-field-template/text-field-template.component.js +0 -67
  97. package/esm2015/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.js +0 -51
  98. package/esm2015/lib/components/private/form-records/add-form-record/add-form-record.component.js +0 -130
  99. package/esm2015/lib/components/private/form-records/list-form-record/list-form-record.component.js +0 -216
  100. package/esm2015/lib/components/private/spinner/spinner.component.js +0 -23
  101. package/esm2015/lib/eqp-dynamic-module.module.js +0 -69
  102. package/esm2015/lib/interfaces/iBaseFieldComponent.interface.js +0 -1
  103. package/esm2015/lib/interfaces/iRootObject.interface.js +0 -1
  104. package/esm2015/lib/models/baseField.model.js +0 -36
  105. package/esm2015/lib/models/baseObj.model.js +0 -9
  106. package/esm2015/lib/models/context.model.js +0 -8
  107. package/esm2015/lib/models/endPointConfiguration.model.js +0 -23
  108. package/esm2015/lib/models/entity.model.js +0 -7
  109. package/esm2015/lib/models/fields/attachmentField.model.js +0 -22
  110. package/esm2015/lib/models/fields/booleanField.model.js +0 -12
  111. package/esm2015/lib/models/fields/dateField.model.js +0 -11
  112. package/esm2015/lib/models/fields/imageField.model.js +0 -8
  113. package/esm2015/lib/models/fields/listValueField.model.js +0 -14
  114. package/esm2015/lib/models/fields/lookupField.model.js +0 -5
  115. package/esm2015/lib/models/fields/numericField.model.js +0 -5
  116. package/esm2015/lib/models/fields/testareaField.model.js +0 -4
  117. package/esm2015/lib/models/fields/textField.model.js +0 -14
  118. package/esm2015/lib/models/form.model.js +0 -24
  119. package/esm2015/lib/models/record.model.js +0 -8
  120. package/esm2015/lib/modules/material.module.js +0 -108
  121. package/esm2015/lib/services/custom-form-validators.service.js +0 -19
  122. package/esm2015/lib/services/eqp-dynamic-module-dialog.service.js +0 -113
  123. package/esm2015/lib/services/spinner.service.js +0 -43
  124. package/esm2015/lib/services/utilityHelper.services.js +0 -387
  125. package/esm2015/public-api.js +0 -39
  126. package/esm5/eqproject-eqp-dynamic-module.js +0 -7
  127. package/esm5/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.js +0 -269
  128. package/esm5/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.js +0 -664
  129. package/esm5/lib/components/private/add-form-field/add-form-field.component.js +0 -588
  130. package/esm5/lib/components/private/dynamic-module-field/dynamic-module-field.component.js +0 -128
  131. package/esm5/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.js +0 -173
  132. package/esm5/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.js +0 -57
  133. package/esm5/lib/components/private/field-templates/date-field-template/date-field-template.component.js +0 -72
  134. package/esm5/lib/components/private/field-templates/image-field-template/image-field-template.component.js +0 -206
  135. package/esm5/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.js +0 -119
  136. package/esm5/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.js +0 -72
  137. package/esm5/lib/components/private/field-templates/text-field-template/text-field-template.component.js +0 -68
  138. package/esm5/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.js +0 -52
  139. package/esm5/lib/components/private/form-records/add-form-record/add-form-record.component.js +0 -133
  140. package/esm5/lib/components/private/form-records/list-form-record/list-form-record.component.js +0 -220
  141. package/esm5/lib/components/private/spinner/spinner.component.js +0 -24
  142. package/esm5/lib/eqp-dynamic-module.module.js +0 -72
  143. package/esm5/lib/interfaces/iBaseFieldComponent.interface.js +0 -1
  144. package/esm5/lib/interfaces/iRootObject.interface.js +0 -1
  145. package/esm5/lib/models/baseField.model.js +0 -43
  146. package/esm5/lib/models/baseObj.model.js +0 -13
  147. package/esm5/lib/models/context.model.js +0 -14
  148. package/esm5/lib/models/endPointConfiguration.model.js +0 -33
  149. package/esm5/lib/models/entity.model.js +0 -14
  150. package/esm5/lib/models/fields/attachmentField.model.js +0 -29
  151. package/esm5/lib/models/fields/booleanField.model.js +0 -19
  152. package/esm5/lib/models/fields/dateField.model.js +0 -18
  153. package/esm5/lib/models/fields/imageField.model.js +0 -19
  154. package/esm5/lib/models/fields/listValueField.model.js +0 -25
  155. package/esm5/lib/models/fields/lookupField.model.js +0 -12
  156. package/esm5/lib/models/fields/numericField.model.js +0 -12
  157. package/esm5/lib/models/fields/testareaField.model.js +0 -11
  158. package/esm5/lib/models/fields/textField.model.js +0 -21
  159. package/esm5/lib/models/form.model.js +0 -39
  160. package/esm5/lib/models/record.model.js +0 -14
  161. package/esm5/lib/modules/material.module.js +0 -111
  162. package/esm5/lib/services/custom-form-validators.service.js +0 -23
  163. package/esm5/lib/services/eqp-dynamic-module-dialog.service.js +0 -123
  164. package/esm5/lib/services/spinner.service.js +0 -46
  165. package/esm5/lib/services/utilityHelper.services.js +0 -396
  166. package/esm5/public-api.js +0 -39
  167. package/fesm2015/eqproject-eqp-dynamic-module.js +0 -3580
  168. package/fesm2015/eqproject-eqp-dynamic-module.js.map +0 -1
  169. package/fesm5/eqproject-eqp-dynamic-module.js +0 -3766
  170. package/fesm5/eqproject-eqp-dynamic-module.js.map +0 -1
  171. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +0 -101
  172. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +0 -235
  173. package/lib/components/private/add-form-field/add-form-field.component.d.ts +0 -199
  174. package/lib/components/private/dynamic-module-field/dynamic-module-field.component.d.ts +0 -55
  175. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +0 -68
  176. package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +0 -21
  177. package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +0 -27
  178. package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +0 -65
  179. package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +0 -51
  180. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +0 -26
  181. package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +0 -22
  182. package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +0 -20
  183. package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +0 -52
  184. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +0 -64
  185. package/lib/components/private/spinner/spinner.component.d.ts +0 -9
  186. package/lib/eqp-dynamic-module.module.d.ts +0 -2
  187. package/lib/models/context.model.d.ts +0 -9
  188. package/lib/models/fields/attachmentField.model.d.ts +0 -17
  189. package/lib/models/fields/textField.model.d.ts +0 -15
  190. package/lib/modules/material.module.d.ts +0 -2
  191. package/lib/services/custom-form-validators.service.d.ts +0 -5
  192. package/lib/services/eqp-dynamic-module-dialog.service.d.ts +0 -34
  193. package/lib/services/spinner.service.d.ts +0 -15
  194. package/lib/services/utilityHelper.services.d.ts +0 -77
@@ -1,387 +0,0 @@
1
- var UtilityHelperService_1;
2
- import { __decorate } from "tslib";
3
- import { HttpClient } from "@angular/common/http";
4
- import { Injectable } from "@angular/core";
5
- import { AbstractControl, FormBuilder, FormControl, FormGroup, ValidatorFn, Validators } from "@angular/forms";
6
- import { ColSpanSizesEnum, FieldTypeEnum } from "../models/baseField.model";
7
- import { Context } from "../models/context.model";
8
- import { EndPointConfiguration, ParamTypeEnum, RequestMethodEnum } from "../models/endPointConfiguration.model";
9
- import { TextMaskEnum, TextField, UrlRegex, TelRegex } from "../models/fields/textField.model";
10
- import { ArrayValidators } from "./custom-form-validators.service";
11
- import { EqpDynamicModuleDialogService } from "./eqp-dynamic-module-dialog.service";
12
- import { SpinnerService } from "./spinner.service";
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/forms";
15
- import * as i2 from "@angular/common/http";
16
- import * as i3 from "./spinner.service";
17
- let UtilityHelperService = UtilityHelperService_1 = class UtilityHelperService {
18
- constructor(formBuilder, http, spinnerService) {
19
- this.formBuilder = formBuilder;
20
- this.http = http;
21
- this.spinnerService = spinnerService;
22
- }
23
- static EvaluateFieldFormula(formula, rec, ctx) {
24
- const evaluatedValue = eval(formula);
25
- return (evaluatedValue ? evaluatedValue : null);
26
- }
27
- static SetContext(ctx) {
28
- this.context = ctx;
29
- }
30
- static GetFieldType(field) {
31
- switch (field.FieldType) {
32
- case FieldTypeEnum["Campo di testo"]: {
33
- const t = Object.assign(new TextField, field);
34
- return t;
35
- break;
36
- }
37
- default: {
38
- break;
39
- }
40
- }
41
- }
42
- /**
43
- * Metodo per impostare i valori da suggerire nell'autocomplete per i campi in cui l'utente deve scrivere comandi javascript.
44
- * In base all'ultimo carattere digitato viene impostato un elenco di oggetti o proprietà che l'utente ha a disposizione in quel momento.
45
- * @param fields Array di BaseField aggiunti alla Form
46
- * @param typedFormula Stringa digitata dall'utente
47
- * @summary Il metodo imposta i suggerimenti basandosi su 3 casi:
48
- * 1) l'utente non ha digitato nulla o la stringa digitata dall'utente finisce con uno spazio vuoto
49
- * 2) la stringa digitata dall'utente finisce con un "."
50
- * 3) la stringa digitata dall'utente non coincide con nessun altro caso sopra (finisce con un carattere qualunque)
51
- */
52
- static GetAutocompleteOptions(fields, typedFormula) {
53
- let autocompleteOptions = [];
54
- // Recupero i nomi di tutti i campi creati fino ad ora nella form.
55
- const availableRecProperties = fields.map(f => f.Label.split(' ').join('_'));
56
- // Nel casi in cui l'utente non ha inserito nulla oppure la stringa finisce con uno spazio vuoto o un simbolo diverso da "."
57
- // (un carattere non alfanumerico) imposto come suggerimenti solo "rec" e "ctx", ovvero gli unici due oggetti a cui l'utente ha accesso.
58
- if (!typedFormula ||
59
- (!typedFormula.endsWith(".")
60
- && new RegExp("[^0-9a-zA-Z_]").test(typedFormula.substring(typedFormula.length - 1, typedFormula.length)))) {
61
- autocompleteOptions = [
62
- { label: "rec", value: (typedFormula ? typedFormula : '') + "rec" },
63
- { label: "ctx", value: (typedFormula ? typedFormula : '') + "ctx" }
64
- ];
65
- }
66
- // Se la stringa finisce con un "." vuol dire che l'utente sta cercando di accedere ad una proprietà di un oggetto
67
- // a sua disposizione. Recupero il nome dell'ultimo oggetto digitato dall'utente e se l'oggetto scelto è "rec" o "ctx"
68
- // allora suggerisco le proprietà che esistono all'interno di questi oggetti altrimenti non mostro nulla.
69
- else if (typedFormula.endsWith(".")) {
70
- const formulaPieces = typedFormula.split(" ")[typedFormula.split(" ").length - 1].split('.');
71
- if (formulaPieces[formulaPieces.length - 2] === "rec") {
72
- autocompleteOptions = availableRecProperties.map(f => { return { label: f, value: typedFormula + f }; });
73
- }
74
- else if (formulaPieces[formulaPieces.length - 2] === "ctx") {
75
- autocompleteOptions = Object.keys(UtilityHelperService_1.context).map(f => { return { label: f, value: typedFormula + f }; });
76
- }
77
- else if (formulaPieces.length > 2 && formulaPieces[formulaPieces.length - 3] === "ctx" && formulaPieces[formulaPieces.length - 2] === "User") {
78
- autocompleteOptions = Object.keys(UtilityHelperService_1.context.User).map(f => { return { label: f, value: typedFormula + f }; });
79
- }
80
- else {
81
- autocompleteOptions = [];
82
- }
83
- }
84
- // In tutti gli altri casi, ovvero quando la stringa digitata finisce con un carattere diverso da quelli
85
- // controllati finora, vuol dire che l'utente sta digitanto il nome di un oggetto, una proprietà o una
86
- // funzione javascript. Controllo la parola che l'utente sta digitando e se fa parte di uno degli oggetti a disposizione
87
- // o una proprietà di essi allora suggerisco i possibili match.
88
- else {
89
- const availableOptions = [];
90
- // Prendo tutti i blocchi di caratteri digitati dall'utente
91
- const allFormulaWords = typedFormula.split(" ");
92
- // Prendo l'ultimo blocco di caratteri digitato dall'utente
93
- const lastTypedString = allFormulaWords[allFormulaWords.length - 1];
94
- // Se la l'ultima stringa digitata non contiene caratteri speciali allora splitto la stringa
95
- // sui "." e imposto i suggerimenti in base al path della prorpietà che si sta digitando.
96
- if (!new RegExp("[^0-9a-zA-Z_.]").test(lastTypedString)) {
97
- const propertyPath = lastTypedString.split(".");
98
- const lastTypedWork = propertyPath[propertyPath.length - 1];
99
- let propertiesToCheck = [];
100
- if (propertyPath.length == 1) {
101
- propertiesToCheck = ["rec", "ctx"];
102
- }
103
- else if (propertyPath.length > 1 && propertyPath[propertyPath.length - 2] === "ctx") {
104
- propertiesToCheck = Object.keys(UtilityHelperService_1.context);
105
- }
106
- else if (propertyPath.length > 2 && propertyPath[propertyPath.length - 3] === "ctx" && propertyPath[propertyPath.length - 2] === "User") {
107
- propertiesToCheck = Object.keys(UtilityHelperService_1.context.User);
108
- }
109
- else if (propertyPath.length > 1 && propertyPath[propertyPath.length - 2] === "rec") {
110
- propertiesToCheck = availableRecProperties;
111
- }
112
- // Eseguo il controllo sulle proprietà recuperate, aggiungo ai suggerimenti tutti i nomi che iniziano con
113
- // quello che sta digitando l'utente.
114
- propertiesToCheck.forEach(prop => {
115
- if (prop.startsWith(lastTypedWork)) {
116
- availableOptions.push({ label: prop, value: typedFormula + prop.substring(lastTypedWork.length, prop.length) });
117
- }
118
- });
119
- }
120
- autocompleteOptions = availableOptions;
121
- }
122
- return autocompleteOptions;
123
- }
124
- /**
125
- * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.
126
- * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate
127
- * delle classi di default.
128
- * @param field BaseField da visualizzare.
129
- * @returns Restituisce una stringa contenente le classi css da applicare.
130
- */
131
- getFieldSyleClass(field) {
132
- if (field.ColSpanSizes && field.ColSpanSizes.length > 0)
133
- return field.ColSpanSizes.map(size => ColSpanSizesEnum[size].toString()).join(" ");
134
- switch (field.FieldType) {
135
- case FieldTypeEnum["Campo di testo"]:
136
- return "col-sm-12 col-md-4 col-lg-4";
137
- case FieldTypeEnum["Area di testo"]:
138
- return "col-sm-12 col-md-12 col-lg-12";
139
- case FieldTypeEnum["Booleano"]:
140
- return "col-sm-12 col-md-4 col-lg-4 d-flex align-items-center";
141
- case FieldTypeEnum["Data e/o ora"]:
142
- return "col-sm-12 col-md-4 col-lg-4";
143
- case FieldTypeEnum["Campo numerico"]:
144
- return "col-sm-12 col-md-4 col-lg-4";
145
- case FieldTypeEnum["Allegato"]:
146
- if (field.IsMultiAttach ||
147
- (field.MetadataFields && field.MetadataFields.length > 0)) {
148
- return "col-sm-12 col-md-12 col-lg-12";
149
- }
150
- else {
151
- return "col-sm-12 col-md-4 col-lg-4";
152
- }
153
- case FieldTypeEnum["Immagine"]:
154
- if (field.AttachDefinition.IsMultiAttach ||
155
- (field.AttachDefinition.MetadataFields && field.AttachDefinition.MetadataFields.length > 0)) {
156
- return "col-sm-12 col-md-12 col-lg-12";
157
- }
158
- else {
159
- return "col-sm-12 col-md-4 col-lg-4";
160
- }
161
- case FieldTypeEnum["Elenco generico"]:
162
- return "col-sm-12 col-md-4 col-lg-4";
163
- case FieldTypeEnum["Lookup"]:
164
- return "col-sm-12 col-md-4 col-lg-4";
165
- case FieldTypeEnum['Form di dettaglio']:
166
- return "col-sm-12 col-md-12 col-lg-12";
167
- }
168
- }
169
- /**
170
- * Metodo per creare il FormGroup che rappresenta una Form a partire dai suoi BaseField.
171
- * @param formFields Lista dei BaseField che compongono la form.
172
- * @param record Oggetto di tipo Record che contiene i valori dei campi.
173
- * @param onlyView Se TRUE disabilita la form per renderla in sola lettura.
174
- * @param includeCurrentFormInField Se TRUE popola la proprietà FormFormGroup all'interno di ogni BaseField con il FormGroup corrente.
175
- * @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.
176
- */
177
- CreateFormFormGroup(formFields, record, onlyView = false, includeCurrentFormInField = true) {
178
- const formForm = this.formBuilder.group([]);
179
- formFields.forEach(field => {
180
- formForm.addControl(field.Name, this.createFieldFormControl(field, record));
181
- if (includeCurrentFormInField) {
182
- field.FormFormGroup = formForm;
183
- }
184
- });
185
- if (onlyView) {
186
- formForm.disable();
187
- }
188
- return formForm;
189
- }
190
- /**
191
- * Funzione per creare e aggiungere al FormGroup rappresentante la form un nuovo FormControl a partire da un Field.
192
- * In nuovo FormControl avrà il nome del campo passato e verranno impostati i Validators in base al tipo del campo stesso.
193
- * @param field BaseField per cui creare il FormControl da inserire nel FormGroup dela form.
194
- */
195
- createFieldFormControl(field, record) {
196
- const validators = [];
197
- if (field.Required)
198
- validators.push(Validators.required);
199
- switch (field.FieldType) {
200
- case FieldTypeEnum["Campo di testo"]:
201
- if (field.MaxLenght) {
202
- validators.push(Validators.maxLength(field.MaxLenght));
203
- }
204
- if (field.MinLenght) {
205
- validators.push(Validators.minLength(field.MinLenght));
206
- }
207
- switch (field.TextMask) {
208
- case TextMaskEnum.Url:
209
- validators.push(Validators.pattern(UrlRegex));
210
- break;
211
- case TextMaskEnum.Email:
212
- validators.push(Validators.email);
213
- break;
214
- case TextMaskEnum.Telefono:
215
- validators.push(Validators.pattern(TelRegex));
216
- break;
217
- }
218
- break;
219
- case FieldTypeEnum["Area di testo"]:
220
- if (field.MaxLenght) {
221
- validators.push(Validators.maxLength(field.MaxLenght));
222
- }
223
- if (field.MinLenght) {
224
- validators.push(Validators.minLength(field.MinLenght));
225
- }
226
- break;
227
- case FieldTypeEnum.Allegato:
228
- case FieldTypeEnum.Immagine:
229
- if (field.Required)
230
- validators.push(ArrayValidators.minLenght(1));
231
- break;
232
- case FieldTypeEnum['Elenco generico']:
233
- if (field.IsMultiChoiche)
234
- if (field.Required)
235
- validators.push(ArrayValidators.minLenght(1));
236
- break;
237
- }
238
- return new FormControl(record[field.Name], validators);
239
- }
240
- /**
241
- * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server
242
- * a cui si deve connettere e al token da passare per autenticarsi.
243
- * @param baseServerUrl Stringa dell'url base del server (es: "http://localhost:5000").
244
- * @param userToken Token dell'utente loggato da usare per autenticarsi se necessario.
245
- * @returns Resituisce la configurazione completa degli endPoint da usare di default.
246
- */
247
- ConfigureDefaultEndPoints(baseServerUrl, userToken) {
248
- let endPointConfiguration = new EndPointConfiguration();
249
- endPointConfiguration = new EndPointConfiguration();
250
- endPointConfiguration.Records = {
251
- GetByFormIDEndPoint: {
252
- Url: baseServerUrl + "/api/v1/getall",
253
- Token: userToken,
254
- RequestMethod: RequestMethodEnum.GET,
255
- },
256
- GetByIDEndPoint: {
257
- Url: baseServerUrl + "/api/v1/getByID",
258
- Token: userToken,
259
- RequestMethod: RequestMethodEnum.GET,
260
- },
261
- SaveEndPoint: {
262
- Url: baseServerUrl + "/api/v1/save",
263
- Token: userToken,
264
- RequestMethod: RequestMethodEnum.POST,
265
- },
266
- DuplicateEndPoint: {
267
- Url: baseServerUrl + "/api/v1/duplicate",
268
- Token: userToken,
269
- RequestMethod: RequestMethodEnum.POST,
270
- },
271
- DeleteEndPoint: {
272
- Url: baseServerUrl + "/api/v1/delete",
273
- Token: userToken,
274
- RequestMethod: RequestMethodEnum.DELETE,
275
- }
276
- };
277
- endPointConfiguration.Forms = {
278
- GetByIDEndPoint: {
279
- Url: baseServerUrl + "/api/conf/form",
280
- Token: userToken,
281
- RequestMethod: RequestMethodEnum.GET,
282
- },
283
- SaveEndPoint: {
284
- Url: baseServerUrl + "/api/conf/form",
285
- Token: userToken,
286
- RequestMethod: RequestMethodEnum.POST,
287
- }
288
- };
289
- return endPointConfiguration;
290
- }
291
- /**
292
- * Metodo che data la configurazione di un endpoint costruisce l'url da chiamare, gli eventuali parametri
293
- * da passare (nel body o nella rotta) ed effettua la chiamata. Al termine della chiamata esegue le eventuali
294
- * funzioni di callback (sia in caso di successo che in caso di errore) passate in input.
295
- * @param endPointData Cofigurazione dell'endpoint da chiamare.
296
- * @param dynamicModuleParams Array dei parametri aggiunti dal modulo dinamico a quelli già configurati
297
- * (ad esempio il record o la form da salvare oppure l'ID per recuperare una particolare entità).
298
- * @param callback Metodo da eseguire in caso di successo dopo la chiamata http.
299
- * NOTA: in input viene passata la risposta della chiamata stessa.
300
- * @param errorCallBack Metodo da eseguire in caso di errore dopo la chiamata http.
301
- * NOTA: in input viene passato l'errore generato della chiamata stessa.
302
- */
303
- RunEndPointCall(endPointData, dynamicModuleParams = null, callback = null, errorCallBack = null) {
304
- this.spinnerService.addRequestCounter();
305
- let url = `${endPointData.Url}`;
306
- let queryParams = null;
307
- const bodyParams = {
308
- AdditionalParams: {}
309
- };
310
- // Se nella configurazione sono stati definiti parametri da aggiungere alla chiamata questi vengono ciclati
311
- // e aggiunti nel punto in cui devono essere usati.
312
- if (endPointData.Params) {
313
- endPointData.Params.forEach(p => {
314
- switch (p.ParamType) {
315
- case ParamTypeEnum['Query param']: {
316
- const stringParam = p.ParamName + "=" + p.ParamValue;
317
- queryParams = (queryParams == null ? "" : queryParams + "&") + stringParam;
318
- break;
319
- }
320
- case ParamTypeEnum['In route']: {
321
- url = url + (url.endsWith("/") ? "" : "/") + p.ParamValue;
322
- break;
323
- }
324
- case ParamTypeEnum['In Body']: {
325
- bodyParams.AdditionalParams[p.ParamName] = p.ParamValue;
326
- break;
327
- }
328
- }
329
- });
330
- }
331
- // Se sono stati passati parametri da aggiungere alla chiamata definiti all'interno del modulo dinamico
332
- // vengono ciclati e aggiunti nel punto in cui devono essere usati dopo quelli definiti nella configurazione.
333
- if (dynamicModuleParams) {
334
- dynamicModuleParams.forEach(p => {
335
- switch (p.ParamType) {
336
- case ParamTypeEnum['Query param']: {
337
- const stringParam = p.ParamName + "=" + p.ParamValue;
338
- queryParams = (queryParams == null ? "" : queryParams + "&") + stringParam;
339
- break;
340
- }
341
- case ParamTypeEnum['In route']: {
342
- url = url + (url.endsWith("/") ? "" : "/") + p.ParamValue;
343
- break;
344
- }
345
- case ParamTypeEnum['In Body']: {
346
- bodyParams[p.ParamName] = p.ParamValue;
347
- break;
348
- }
349
- }
350
- });
351
- }
352
- if (queryParams != null) {
353
- url = (url.endsWith("/") ? url.substring(0, url.length - 1) : url) + "?" + queryParams;
354
- }
355
- this.http.request(endPointData.RequestMethod, url, {
356
- headers: endPointData.Token ? { Authorization: endPointData.Token } : null,
357
- body: ![RequestMethodEnum.DELETE, RequestMethodEnum.GET].includes(endPointData.RequestMethod) ? bodyParams : null
358
- })
359
- .subscribe((res) => {
360
- this.spinnerService.removeRequestCounter();
361
- if (callback) {
362
- callback(res);
363
- }
364
- }, (error) => {
365
- this.spinnerService.removeRequestCounter();
366
- if (errorCallBack) {
367
- errorCallBack(error);
368
- }
369
- EqpDynamicModuleDialogService.Error(error.message);
370
- throw new Error(error.message);
371
- });
372
- }
373
- };
374
- UtilityHelperService.context = new Context();
375
- UtilityHelperService.ctorParameters = () => [
376
- { type: FormBuilder },
377
- { type: HttpClient },
378
- { type: SpinnerService }
379
- ];
380
- UtilityHelperService.ɵprov = i0.ɵɵdefineInjectable({ factory: function UtilityHelperService_Factory() { return new UtilityHelperService(i0.ɵɵinject(i1.FormBuilder), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.SpinnerService)); }, token: UtilityHelperService, providedIn: "root" });
381
- UtilityHelperService = UtilityHelperService_1 = __decorate([
382
- Injectable({
383
- providedIn: 'root'
384
- })
385
- ], UtilityHelperService);
386
- export { UtilityHelperService };
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eUhlbHBlci5zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWR5bmFtaWMtbW9kdWxlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBb0MsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFLbEosT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBS25ELElBQWEsb0JBQW9CLDRCQUFqQyxNQUFhLG9CQUFvQjtJQUk3QixZQUNZLFdBQXdCLEVBQ3hCLElBQWdCLEVBQ2hCLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRTFDLENBQUM7SUFF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QW9CLENBd1loQztTQXhZWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBCYXNlRmllbGQsIENvbFNwYW5TaXplc0VudW0sIEZpZWxkVHlwZUVudW0gfSBmcm9tIFwiLi4vbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcIi4uL21vZGVscy9jb250ZXh0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0sIFJlcXVlc3RNZXRob2RFbnVtIH0gZnJvbSBcIi4uL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWxcIjtcclxuaW1wb3J0IHsgQXR0YWNobWVudEZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvYXR0YWNobWVudEZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEltYWdlRmllbGQgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsXCI7XHJcbmltcG9ydCB7IExpc3RWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uL21vZGVscy9maWVsZHMvbGlzdFZhbHVlRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dGFyZWFGaWVsZCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3Rlc3RhcmVhRmllbGQubW9kZWxcIjtcclxuaW1wb3J0IHsgVGV4dE1hc2tFbnVtLCBUZXh0RmllbGQsIFVybFJlZ2V4LCBUZWxSZWdleCB9IGZyb20gXCIuLi9tb2RlbHMvZmllbGRzL3RleHRGaWVsZC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSBcIi4uL21vZGVscy9mb3JtLm1vZGVsXCI7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gXCIuLi9tb2RlbHMvcmVjb3JkLm1vZGVsXCI7XHJcbmltcG9ydCB7IEFycmF5VmFsaWRhdG9ycyB9IGZyb20gXCIuL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFcXBEeW5hbWljTW9kdWxlRGlhbG9nU2VydmljZSB9IGZyb20gXCIuL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTcGlubmVyU2VydmljZSB9IGZyb20gXCIuL3NwaW5uZXIuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVdGlsaXR5SGVscGVyU2VydmljZSB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb250ZXh0OiBDb250ZXh0ID0gbmV3IENvbnRleHQoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGlubmVyU2VydmljZTogU3Bpbm5lclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRXZhbHVhdGVGaWVsZEZvcm11bGEoZm9ybXVsYTogc3RyaW5nLCByZWM6IFJlY29yZCwgY3R4OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZFZhbHVlID0gZXZhbChmb3JtdWxhKTtcclxuICAgICAgICByZXR1cm4gKGV2YWx1YXRlZFZhbHVlID8gZXZhbHVhdGVkVmFsdWUgOiBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFNldENvbnRleHQoY3R4OiBDb250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY3R4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0RmllbGRUeXBlKGZpZWxkOiBCYXNlRmllbGQpe1xyXG4gICAgICBzd2l0Y2ggKGZpZWxkLkZpZWxkVHlwZSkge1xyXG4gICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIGRpIHRlc3RvXCJdOiB7XHJcbiAgICAgICAgICBjb25zdCB0OiBUZXh0RmllbGQgPSBPYmplY3QuYXNzaWduKG5ldyBUZXh0RmllbGQsZmllbGQpO1xyXG4gICAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGltcG9zdGFyZSBpIHZhbG9yaSBkYSBzdWdnZXJpcmUgbmVsbCdhdXRvY29tcGxldGUgcGVyIGkgY2FtcGkgaW4gY3VpIGwndXRlbnRlIGRldmUgc2NyaXZlcmUgY29tYW5kaSBqYXZhc2NyaXB0LlxyXG4gICAgICogSW4gYmFzZSBhbGwndWx0aW1vIGNhcmF0dGVyZSBkaWdpdGF0byB2aWVuZSBpbXBvc3RhdG8gdW4gZWxlbmNvIGRpIG9nZ2V0dGkgbyBwcm9wcmlldMOgIGNoZSBsJ3V0ZW50ZSBoYSBhIGRpc3Bvc2l6aW9uZSBpbiBxdWVsIG1vbWVudG8uXHJcbiAgICAgKiBAcGFyYW0gZmllbGRzIEFycmF5IGRpIEJhc2VGaWVsZCBhZ2dpdW50aSBhbGxhIEZvcm1cclxuICAgICAqIEBwYXJhbSB0eXBlZEZvcm11bGEgU3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZVxyXG4gICAgICogQHN1bW1hcnkgSWwgbWV0b2RvIGltcG9zdGEgaSBzdWdnZXJpbWVudGkgYmFzYW5kb3NpIHN1IDMgY2FzaTpcclxuICAgICAqICAxKSBsJ3V0ZW50ZSBub24gaGEgZGlnaXRhdG8gbnVsbGEgbyBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIGZpbmlzY2UgY29uIHVubyBzcGF6aW8gdnVvdG9cclxuICAgICAqICAyKSBsYSBzdHJpbmdhIGRpZ2l0YXRhIGRhbGwndXRlbnRlIGZpbmlzY2UgY29uIHVuIFwiLlwiXHJcbiAgICAgKiAgMykgbGEgc3RyaW5nYSBkaWdpdGF0YSBkYWxsJ3V0ZW50ZSBub24gY29pbmNpZGUgY29uIG5lc3N1biBhbHRybyBjYXNvIHNvcHJhIChmaW5pc2NlIGNvbiB1biBjYXJhdHRlcmUgcXVhbHVucXVlKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldEF1dG9jb21wbGV0ZU9wdGlvbnMoZmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LCB0eXBlZEZvcm11bGE6IHN0cmluZyk6IEFycmF5PHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9PiB7XHJcblxyXG4gICAgICAgIGxldCBhdXRvY29tcGxldGVPcHRpb25zOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUmVjdXBlcm8gaSBub21pIGRpIHR1dHRpIGkgY2FtcGkgY3JlYXRpIGZpbm8gYWQgb3JhIG5lbGxhIGZvcm0uXHJcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUmVjUHJvcGVydGllczogQXJyYXk8c3RyaW5nPiA9IGZpZWxkcy5tYXAoZiA9PiBmLkxhYmVsLnNwbGl0KCcgJykuam9pbignXycpKTtcclxuXHJcbiAgICAgICAgLy8gTmVsIGNhc2kgaW4gY3VpIGwndXRlbnRlIG5vbiBoYSBpbnNlcml0byBudWxsYSBvcHB1cmUgbGEgc3RyaW5nYSBmaW5pc2NlIGNvbiB1bm8gc3BhemlvIHZ1b3RvIG8gdW4gc2ltYm9sbyBkaXZlcnNvIGRhIFwiLlwiXHJcbiAgICAgICAgLy8gKHVuIGNhcmF0dGVyZSBub24gYWxmYW51bWVyaWNvKSBpbXBvc3RvIGNvbWUgc3VnZ2VyaW1lbnRpIHNvbG8gXCJyZWNcIiBlIFwiY3R4XCIsIG92dmVybyBnbGkgdW5pY2kgZHVlIG9nZ2V0dGkgYSBjdWkgbCd1dGVudGUgaGEgYWNjZXNzby5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICF0eXBlZEZvcm11bGEgfHxcclxuICAgICAgICAgICAgKFxyXG4gICAgICAgICAgICAgICAgIXR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIilcclxuICAgICAgICAgICAgICAgICYmIG5ldyBSZWdFeHAoXCJbXjAtOWEtekEtWl9dXCIpLnRlc3QodHlwZWRGb3JtdWxhLnN1YnN0cmluZyh0eXBlZEZvcm11bGEubGVuZ3RoIC0gMSwgdHlwZWRGb3JtdWxhLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgICAgIHsgbGFiZWw6IFwicmVjXCIsIHZhbHVlOiAodHlwZWRGb3JtdWxhID8gdHlwZWRGb3JtdWxhIDogJycpICsgXCJyZWNcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogXCJjdHhcIiwgdmFsdWU6ICh0eXBlZEZvcm11bGEgPyB0eXBlZEZvcm11bGEgOiAnJykgKyBcImN0eFwiIH1cclxuICAgICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU2UgbGEgc3RyaW5nYSBmaW5pc2NlIGNvbiB1biBcIi5cIiB2dW9sIGRpcmUgY2hlIGwndXRlbnRlIHN0YSBjZXJjYW5kbyBkaSBhY2NlZGVyZSBhZCB1bmEgcHJvcHJpZXTDoCBkaSB1biBvZ2dldHRvXHJcbiAgICAgICAgLy8gYSBzdWEgZGlzcG9zaXppb25lLiBSZWN1cGVybyBpbCBub21lIGRlbGwndWx0aW1vIG9nZ2V0dG8gZGlnaXRhdG8gZGFsbCd1dGVudGUgZSBzZSBsJ29nZ2V0dG8gc2NlbHRvIMOoIFwicmVjXCIgbyBcImN0eFwiXHJcbiAgICAgICAgLy8gYWxsb3JhIHN1Z2dlcmlzY28gbGUgcHJvcHJpZXTDoCBjaGUgZXNpc3Rvbm8gYWxsJ2ludGVybm8gZGkgcXVlc3RpIG9nZ2V0dGkgYWx0cmltZW50aSBub24gbW9zdHJvIG51bGxhLlxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVkRm9ybXVsYS5lbmRzV2l0aChcIi5cIikpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybXVsYVBpZWNlczogQXJyYXk8c3RyaW5nPiA9IHR5cGVkRm9ybXVsYS5zcGxpdChcIiBcIilbdHlwZWRGb3JtdWxhLnNwbGl0KFwiIFwiKS5sZW5ndGggLSAxXS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBpZiAoZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDJdID09PSBcInJlY1wiKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVPcHRpb25zID0gYXZhaWxhYmxlUmVjUHJvcGVydGllcy5tYXAoZiA9PiB7IHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9OyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtdWxhUGllY2VzW2Zvcm11bGFQaWVjZXMubGVuZ3RoIC0gMl0gPT09IFwiY3R4XCIpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0KS5tYXAoZiA9PiB7IHJldHVybiB7IGxhYmVsOiBmLCB2YWx1ZTogdHlwZWRGb3JtdWxhICsgZiB9OyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtdWxhUGllY2VzLmxlbmd0aCA+IDIgJiYgZm9ybXVsYVBpZWNlc1tmb3JtdWxhUGllY2VzLmxlbmd0aCAtIDNdID09PSBcImN0eFwiICYmIGZvcm11bGFQaWVjZXNbZm9ybXVsYVBpZWNlcy5sZW5ndGggLSAyXSA9PT0gXCJVc2VyXCIpIHtcclxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZU9wdGlvbnMgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0LlVzZXIpLm1hcChmID0+IHsgcmV0dXJuIHsgbGFiZWw6IGYsIHZhbHVlOiB0eXBlZEZvcm11bGEgKyBmIH07IH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHR1dHRpIGdsaSBhbHRyaSBjYXNpLCBvdnZlcm8gcXVhbmRvIGxhIHN0cmluZ2EgZGlnaXRhdGEgZmluaXNjZSBjb24gdW4gY2FyYXR0ZXJlIGRpdmVyc28gZGEgcXVlbGxpXHJcbiAgICAgICAgLy8gY29udHJvbGxhdGkgZmlub3JhLCB2dW9sIGRpcmUgY2hlIGwndXRlbnRlIHN0YSBkaWdpdGFudG8gaWwgbm9tZSBkaSB1biBvZ2dldHRvLCB1bmEgcHJvcHJpZXTDoCBvIHVuYVxyXG4gICAgICAgIC8vIGZ1bnppb25lIGphdmFzY3JpcHQuIENvbnRyb2xsbyBsYSBwYXJvbGEgY2hlIGwndXRlbnRlIHN0YSBkaWdpdGFuZG8gZSBzZSBmYSBwYXJ0ZSBkaSB1bm8gZGVnbGkgb2dnZXR0aSBhIGRpc3Bvc2l6aW9uZVxyXG4gICAgICAgIC8vIG8gdW5hIHByb3ByaWV0w6AgZGkgZXNzaSBhbGxvcmEgc3VnZ2VyaXNjbyBpIHBvc3NpYmlsaSBtYXRjaC5cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlT3B0aW9uczogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH0+ID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBQcmVuZG8gdHV0dGkgaSBibG9jY2hpIGRpIGNhcmF0dGVyaSBkaWdpdGF0aSBkYWxsJ3V0ZW50ZVxyXG4gICAgICAgICAgICBjb25zdCBhbGxGb3JtdWxhV29yZHM6IEFycmF5PHN0cmluZz4gPSB0eXBlZEZvcm11bGEuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICAvLyBQcmVuZG8gbCd1bHRpbW8gYmxvY2NvIGRpIGNhcmF0dGVyaSBkaWdpdGF0byBkYWxsJ3V0ZW50ZVxyXG4gICAgICAgICAgICBjb25zdCBsYXN0VHlwZWRTdHJpbmc6IHN0cmluZyA9IGFsbEZvcm11bGFXb3Jkc1thbGxGb3JtdWxhV29yZHMubGVuZ3RoIC0gMV07XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsYSBsJ3VsdGltYSBzdHJpbmdhIGRpZ2l0YXRhIG5vbiBjb250aWVuZSBjYXJhdHRlcmkgc3BlY2lhbGkgYWxsb3JhIHNwbGl0dG8gbGEgc3RyaW5nYVxyXG4gICAgICAgICAgICAvLyBzdWkgXCIuXCIgZSBpbXBvc3RvIGkgc3VnZ2VyaW1lbnRpIGluIGJhc2UgYWwgcGF0aCBkZWxsYSBwcm9ycGlldMOgIGNoZSBzaSBzdGEgZGlnaXRhbmRvLlxyXG4gICAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoXCJbXjAtOWEtekEtWl8uXVwiKS50ZXN0KGxhc3RUeXBlZFN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UGF0aCA9IGxhc3RUeXBlZFN0cmluZy5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0VHlwZWRXb3JrID0gcHJvcGVydHlQYXRoW3Byb3BlcnR5UGF0aC5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydGllc1RvQ2hlY2s6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlQYXRoLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBbXCJyZWNcIiwgXCJjdHhcIl07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5UGF0aC5sZW5ndGggPiAxICYmIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwiY3R4XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IE9iamVjdC5rZXlzKFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMiAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDNdID09PSBcImN0eFwiICYmIHByb3BlcnR5UGF0aFtwcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMl0gPT09IFwiVXNlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBPYmplY3Qua2V5cyhVdGlsaXR5SGVscGVyU2VydmljZS5jb250ZXh0LlVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eVBhdGgubGVuZ3RoID4gMSAmJiBwcm9wZXJ0eVBhdGhbcHJvcGVydHlQYXRoLmxlbmd0aCAtIDJdID09PSBcInJlY1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSBhdmFpbGFibGVSZWNQcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEVzZWd1byBpbCBjb250cm9sbG8gc3VsbGUgcHJvcHJpZXTDoCByZWN1cGVyYXRlLCBhZ2dpdW5nbyBhaSBzdWdnZXJpbWVudGkgdHV0dGkgaSBub21pIGNoZSBpbml6aWFubyBjb25cclxuICAgICAgICAgICAgICAgIC8vIHF1ZWxsbyBjaGUgc3RhIGRpZ2l0YW5kbyBsJ3V0ZW50ZS5cclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aChsYXN0VHlwZWRXb3JrKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVPcHRpb25zLnB1c2goeyBsYWJlbDogcHJvcCwgdmFsdWU6IHR5cGVkRm9ybXVsYSArIHByb3Auc3Vic3RyaW5nKGxhc3RUeXBlZFdvcmsubGVuZ3RoLCBwcm9wLmxlbmd0aCkgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA9IGF2YWlsYWJsZU9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBpbnZvY2F0byBkYWxsJ2h0bWwgcGVyIGltcG9zdGFyZSBsZSBjbGFzc2kgY3NzIHBlciB2aXN1YWxpenphcmUgaWwgY2FtcG8gYWxsJ2ludGVybm8gZGVsbGEgZm9ybS5cclxuICAgICAqIFNlIHBlciBpbCBmaWVsZCBzb25vIHN0YXRlIHNwZWNpZmljYXRlIGRlbGxlIGNsYXNzaSBhbGxvcmEgdmVuZ29ubyBhcHBsY2F0ZSBxdWVsbGUsIGFsdHJpbWVudGkgdmVuZ29ubyB1c2F0ZVxyXG4gICAgICogZGVsbGUgY2xhc3NpIGRpIGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIGRhIHZpc3VhbGl6emFyZS5cclxuICAgICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuYSBzdHJpbmdhIGNvbnRlbmVudGUgbGUgY2xhc3NpIGNzcyBkYSBhcHBsaWNhcmUuXHJcbiAgICAgKi9cclxuICAgIGdldEZpZWxkU3lsZUNsYXNzKGZpZWxkOiBCYXNlRmllbGQpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChmaWVsZC5Db2xTcGFuU2l6ZXMgJiYgZmllbGQuQ29sU3BhblNpemVzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZC5Db2xTcGFuU2l6ZXMubWFwKHNpemUgPT4gQ29sU3BhblNpemVzRW51bVtzaXplXS50b1N0cmluZygpKS5qb2luKFwiIFwiKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkJvb2xlYW5vXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIjtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRGF0YSBlL28gb3JhXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkNhbXBvIG51bWVyaWNvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkFsbGVnYXRvXCJdOlxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCBhcyBBdHRhY2htZW50RmllbGQpLklzTXVsdGlBdHRhY2ggfHxcclxuICAgICAgICAgICAgICAgICAgICAoKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMgJiYgKGZpZWxkIGFzIEF0dGFjaG1lbnRGaWVsZCkuTWV0YWRhdGFGaWVsZHMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyXCI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bXCJJbW1hZ2luZVwiXTpcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAoZmllbGQgYXMgSW1hZ2VGaWVsZCkuQXR0YWNoRGVmaW5pdGlvbi5Jc011bHRpQXR0YWNoIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzICYmIChmaWVsZCBhcyBJbWFnZUZpZWxkKS5BdHRhY2hEZWZpbml0aW9uLk1ldGFkYXRhRmllbGRzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTQgY29sLWxnLTRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiRWxlbmNvIGdlbmVyaWNvXCJdOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29sLXNtLTEyIGNvbC1tZC00IGNvbC1sZy00XCI7XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bVtcIkxvb2t1cFwiXTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImNvbC1zbS0xMiBjb2wtbWQtNCBjb2wtbGctNFwiO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW1bJ0Zvcm0gZGkgZGV0dGFnbGlvJ106XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBwZXIgY3JlYXJlIGlsIEZvcm1Hcm91cCBjaGUgcmFwcHJlc2VudGEgdW5hIEZvcm0gYSBwYXJ0aXJlIGRhaSBzdW9pIEJhc2VGaWVsZC5cclxuICAgICAqIEBwYXJhbSBmb3JtRmllbGRzIExpc3RhIGRlaSBCYXNlRmllbGQgY2hlIGNvbXBvbmdvbm8gbGEgZm9ybS5cclxuICAgICAqIEBwYXJhbSByZWNvcmQgT2dnZXR0byBkaSB0aXBvIFJlY29yZCBjaGUgY29udGllbmUgaSB2YWxvcmkgZGVpIGNhbXBpLlxyXG4gICAgICogQHBhcmFtIG9ubHlWaWV3IFNlIFRSVUUgZGlzYWJpbGl0YSBsYSBmb3JtIHBlciByZW5kZXJsYSBpbiBzb2xhIGxldHR1cmEuXHJcbiAgICAgKiBAcGFyYW0gaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCBTZSBUUlVFIHBvcG9sYSBsYSBwcm9wcmlldMOgIEZvcm1Gb3JtR3JvdXAgYWxsJ2ludGVybm8gZGkgb2duaSBCYXNlRmllbGQgY29uIGlsIEZvcm1Hcm91cCBjb3JyZW50ZS5cclxuICAgICAqIEByZXR1cm5zIFJlc3RpdHVpc2NlIHVuIEZvcm1Hcm91cCByYXBwcmVzZW50YXRlIGxhIEZvcm0gYSBjdWkgYXBwYXJ0ZW5nb25vIGkgQmFzZUZpZWxkIHJpY2V2dXRpIGluIGlucHV0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQ3JlYXRlRm9ybUZvcm1Hcm91cChmb3JtRmllbGRzOiBBcnJheTxCYXNlRmllbGQ+LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkOiBSZWNvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5VmlldyA9IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUN1cnJlbnRGb3JtSW5GaWVsZCA9IHRydWUpOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIGNvbnN0IGZvcm1Gb3JtOiBGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFtdKTtcclxuICAgICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICBmb3JtRm9ybS5hZGRDb250cm9sKGZpZWxkLk5hbWUsIHRoaXMuY3JlYXRlRmllbGRGb3JtQ29udHJvbChmaWVsZCwgcmVjb3JkKSk7XHJcbiAgICAgICAgICAgIGlmIChpbmNsdWRlQ3VycmVudEZvcm1JbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZC5Gb3JtRm9ybUdyb3VwID0gZm9ybUZvcm07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAob25seVZpZXcpIHtcclxuICAgICAgICAgICAgZm9ybUZvcm0uZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcm1Gb3JtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgcGVyIGNyZWFyZSBlIGFnZ2l1bmdlcmUgYWwgRm9ybUdyb3VwIHJhcHByZXNlbnRhbnRlIGxhIGZvcm0gdW4gbnVvdm8gRm9ybUNvbnRyb2wgYSBwYXJ0aXJlIGRhIHVuIEZpZWxkLlxyXG4gICAgICogSW4gbnVvdm8gRm9ybUNvbnRyb2wgYXZyw6AgaWwgbm9tZSBkZWwgY2FtcG8gcGFzc2F0byBlIHZlcnJhbm5vIGltcG9zdGF0aSBpIFZhbGlkYXRvcnMgaW4gYmFzZSBhbCB0aXBvIGRlbCBjYW1wbyBzdGVzc28uXHJcbiAgICAgKiBAcGFyYW0gZmllbGQgQmFzZUZpZWxkIHBlciBjdWkgY3JlYXJlIGlsIEZvcm1Db250cm9sIGRhIGluc2VyaXJlIG5lbCBGb3JtR3JvdXAgZGVsYSBmb3JtLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNyZWF0ZUZpZWxkRm9ybUNvbnRyb2woZmllbGQ6IEJhc2VGaWVsZCwgcmVjb3JkOiBSZWNvcmQpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZmllbGQuUmVxdWlyZWQpXHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChmaWVsZC5GaWVsZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQ2FtcG8gZGkgdGVzdG9cIl06XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dEZpZWxkKS5NYXhMZW5naHQpKTsgfVxyXG4gICAgICAgICAgICAgICAgaWYgKChmaWVsZCBhcyBUZXh0RmllbGQpLk1pbkxlbmdodCkgeyB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoKGZpZWxkIGFzIFRleHRGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoKGZpZWxkIGFzIFRleHRGaWVsZCkuVGV4dE1hc2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHRNYXNrRW51bS5Vcmw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVXJsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uRW1haWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLmVtYWlsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0TWFza0VudW0uVGVsZWZvbm86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oVGVsUmVnZXgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtW1wiQXJlYSBkaSB0ZXN0b1wiXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWF4TGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSB7IHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCgoZmllbGQgYXMgVGV4dGFyZWFGaWVsZCkuTWluTGVuZ2h0KSk7IH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEZpZWxkVHlwZUVudW0uQWxsZWdhdG86XHJcbiAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlRW51bS5JbW1hZ2luZTpcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goQXJyYXlWYWxpZGF0b3JzLm1pbkxlbmdodCgxKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGVFbnVtWydFbGVuY28gZ2VuZXJpY28nXTpcclxuICAgICAgICAgICAgICAgIGlmICgoZmllbGQgYXMgTGlzdFZhbHVlRmllbGQpLklzTXVsdGlDaG9pY2hlKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5SZXF1aXJlZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEFycmF5VmFsaWRhdG9ycy5taW5MZW5naHQoMSkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEZvcm1Db250cm9sKHJlY29yZFtmaWVsZC5OYW1lXSwgdmFsaWRhdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNvbmZpZ3VyYXJlIGdsaSBlbmRwb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0IGEgcGFydGlyZSBkYWxsJ3VybCBiYXNlIGRlbCBzZXJ2ZXJcclxuICAgICAqIGEgY3VpIHNpIGRldmUgY29ubmV0dGVyZSBlIGFsIHRva2VuIGRhIHBhc3NhcmUgcGVyIGF1dGVudGljYXJzaS5cclxuICAgICAqIEBwYXJhbSBiYXNlU2VydmVyVXJsIFN0cmluZ2EgZGVsbCd1cmwgYmFzZSBkZWwgc2VydmVyIChlczogXCJodHRwOi8vbG9jYWxob3N0OjUwMDBcIikuXHJcbiAgICAgKiBAcGFyYW0gdXNlclRva2VuIFRva2VuIGRlbGwndXRlbnRlIGxvZ2dhdG8gZGEgdXNhcmUgcGVyIGF1dGVudGljYXJzaSBzZSBuZWNlc3NhcmlvLlxyXG4gICAgICogQHJldHVybnMgUmVzaXR1aXNjZSBsYSBjb25maWd1cmF6aW9uZSBjb21wbGV0YSBkZWdsaSBlbmRQb2ludCBkYSB1c2FyZSBkaSBkZWZhdWx0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQ29uZmlndXJlRGVmYXVsdEVuZFBvaW50cyhiYXNlU2VydmVyVXJsOiBzdHJpbmcsIHVzZXJUb2tlbjogc3RyaW5nKTogRW5kUG9pbnRDb25maWd1cmF0aW9uIHtcclxuICAgICAgICBsZXQgZW5kUG9pbnRDb25maWd1cmF0aW9uOiBFbmRQb2ludENvbmZpZ3VyYXRpb24gPSBuZXcgRW5kUG9pbnRDb25maWd1cmF0aW9uKCk7XHJcbiAgICAgICAgZW5kUG9pbnRDb25maWd1cmF0aW9uID0gbmV3IEVuZFBvaW50Q29uZmlndXJhdGlvbigpO1xyXG4gICAgICAgIGVuZFBvaW50Q29uZmlndXJhdGlvbi5SZWNvcmRzID0ge1xyXG4gICAgICAgICAgICBHZXRCeUZvcm1JREVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvdjEvZ2V0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBHZXRCeUlERW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9nZXRCeUlEXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uR0VULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBTYXZlRW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9zYXZlXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRHVwbGljYXRlRW5kUG9pbnQ6IHtcclxuICAgICAgICAgICAgICAgIFVybDogYmFzZVNlcnZlclVybCArIFwiL2FwaS92MS9kdXBsaWNhdGVcIixcclxuICAgICAgICAgICAgICAgIFRva2VuOiB1c2VyVG9rZW4sXHJcbiAgICAgICAgICAgICAgICBSZXF1ZXN0TWV0aG9kOiBSZXF1ZXN0TWV0aG9kRW51bS5QT1NULFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBEZWxldGVFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL3YxL2RlbGV0ZVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkRFTEVURSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbmRQb2ludENvbmZpZ3VyYXRpb24uRm9ybXMgPSB7XHJcbiAgICAgICAgICAgIEdldEJ5SURFbmRQb2ludDoge1xyXG4gICAgICAgICAgICAgICAgVXJsOiBiYXNlU2VydmVyVXJsICsgXCIvYXBpL2NvbmYvZm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgVG9rZW46IHVzZXJUb2tlbixcclxuICAgICAgICAgICAgICAgIFJlcXVlc3RNZXRob2Q6IFJlcXVlc3RNZXRob2RFbnVtLkdFVCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgU2F2ZUVuZFBvaW50OiB7XHJcbiAgICAgICAgICAgICAgICBVcmw6IGJhc2VTZXJ2ZXJVcmwgKyBcIi9hcGkvY29uZi9mb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBUb2tlbjogdXNlclRva2VuLFxyXG4gICAgICAgICAgICAgICAgUmVxdWVzdE1ldGhvZDogUmVxdWVzdE1ldGhvZEVudW0uUE9TVCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBkYXRhIGxhIGNvbmZpZ3VyYXppb25lIGRpIHVuIGVuZHBvaW50IGNvc3RydWlzY2UgbCd1cmwgZGEgY2hpYW1hcmUsIGdsaSBldmVudHVhbGkgcGFyYW1ldHJpXHJcbiAgICAgKiBkYSBwYXNzYXJlIChuZWwgYm9keSBvIG5lbGxhIHJvdHRhKSBlZCBlZmZldHR1YSBsYSBjaGlhbWF0YS4gQWwgdGVybWluZSBkZWxsYSBjaGlhbWF0YSBlc2VndWUgbGUgZXZlbnR1YWxpXHJcbiAgICAgKiBmdW56aW9uaSBkaSBjYWxsYmFjayAoc2lhIGluIGNhc28gZGkgc3VjY2Vzc28gY2hlIGluIGNhc28gZGkgZXJyb3JlKSBwYXNzYXRlIGluIGlucHV0LlxyXG4gICAgICogQHBhcmFtIGVuZFBvaW50RGF0YSBDb2ZpZ3VyYXppb25lIGRlbGwnZW5kcG9pbnQgZGEgY2hpYW1hcmUuXHJcbiAgICAgKiBAcGFyYW0gZHluYW1pY01vZHVsZVBhcmFtcyBBcnJheSBkZWkgcGFyYW1ldHJpIGFnZ2l1bnRpIGRhbCBtb2R1bG8gZGluYW1pY28gYSBxdWVsbGkgZ2nDoCBjb25maWd1cmF0aVxyXG4gICAgICogKGFkIGVzZW1waW8gaWwgcmVjb3JkIG8gbGEgZm9ybSBkYSBzYWx2YXJlIG9wcHVyZSBsJ0lEIHBlciByZWN1cGVyYXJlIHVuYSBwYXJ0aWNvbGFyZSBlbnRpdMOgKS5cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBNZXRvZG8gZGEgZXNlZ3VpcmUgaW4gY2FzbyBkaSBzdWNjZXNzbyBkb3BvIGxhIGNoaWFtYXRhIGh0dHAuXHJcbiAgICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRhIGxhIHJpc3Bvc3RhIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgICAqIEBwYXJhbSBlcnJvckNhbGxCYWNrIE1ldG9kbyBkYSBlc2VndWlyZSBpbiBjYXNvIGRpIGVycm9yZSBkb3BvIGxhIGNoaWFtYXRhIGh0dHAuXHJcbiAgICAgKiBOT1RBOiBpbiBpbnB1dCB2aWVuZSBwYXNzYXRvIGwnZXJyb3JlIGdlbmVyYXRvIGRlbGxhIGNoaWFtYXRhIHN0ZXNzYS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIFJ1bkVuZFBvaW50Q2FsbChcclxuICAgICAgICBlbmRQb2ludERhdGE6IEVuZFBvaW50RGF0YSxcclxuICAgICAgICBkeW5hbWljTW9kdWxlUGFyYW1zOiBBcnJheTxFbmRQb2ludERhdGFQYXJhbXM+ID0gbnVsbCxcclxuICAgICAgICBjYWxsYmFjazogKGU6IEZvcm0gfCBSZWNvcmQgfCBBcnJheTxSZWNvcmQ+ICkgPT4gdm9pZCAgPSBudWxsLFxyXG4gICAgICAgIGVycm9yQ2FsbEJhY2s6IChlcnI6IHVua25vd24pID0+IHZvaWQgPSBudWxsXHJcbiAgICAgICAgKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5hZGRSZXF1ZXN0Q291bnRlcigpO1xyXG5cclxuICAgICAgICBsZXQgdXJsID0gYCR7ZW5kUG9pbnREYXRhLlVybH1gO1xyXG4gICAgICAgIGxldCBxdWVyeVBhcmFtczogc3RyaW5nID0gbnVsbDtcclxuICAgICAgICBjb25zdCBib2R5UGFyYW1zID0ge1xyXG4gICAgICAgICAgICBBZGRpdGlvbmFsUGFyYW1zOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFNlIG5lbGxhIGNvbmZpZ3VyYXppb25lIHNvbm8gc3RhdGkgZGVmaW5pdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBxdWVzdGkgdmVuZ29ubyBjaWNsYXRpXHJcbiAgICAgICAgLy8gZSBhZ2dpdW50aSBuZWwgcHVudG8gaW4gY3VpIGRldm9ubyBlc3NlcmUgdXNhdGkuXHJcbiAgICAgICAgaWYgKGVuZFBvaW50RGF0YS5QYXJhbXMpIHtcclxuICAgICAgICAgICAgZW5kUG9pbnREYXRhLlBhcmFtcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwLlBhcmFtVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnUXVlcnkgcGFyYW0nXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdQYXJhbTogc3RyaW5nID0gcC5QYXJhbU5hbWUgKyBcIj1cIiArIHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgPT0gbnVsbCA/IFwiXCIgOiBxdWVyeVBhcmFtcyArIFwiJlwiKSArIHN0cmluZ1BhcmFtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQYXJhbVR5cGVFbnVtWydJbiByb3V0ZSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCArICh1cmwuZW5kc1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gQm9keSddOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlQYXJhbXMuQWRkaXRpb25hbFBhcmFtc1twLlBhcmFtTmFtZV0gPSBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBzb25vIHN0YXRpIHBhc3NhdGkgcGFyYW1ldHJpIGRhIGFnZ2l1bmdlcmUgYWxsYSBjaGlhbWF0YSBkZWZpbml0aSBhbGwnaW50ZXJubyBkZWwgbW9kdWxvIGRpbmFtaWNvXHJcbiAgICAgICAgLy8gdmVuZ29ubyBjaWNsYXRpIGUgYWdnaXVudGkgbmVsIHB1bnRvIGluIGN1aSBkZXZvbm8gZXNzZXJlIHVzYXRpIGRvcG8gcXVlbGxpIGRlZmluaXRpIG5lbGxhIGNvbmZpZ3VyYXppb25lLlxyXG4gICAgICAgIGlmIChkeW5hbWljTW9kdWxlUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGR5bmFtaWNNb2R1bGVQYXJhbXMuZm9yRWFjaChwID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAocC5QYXJhbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ1F1ZXJ5IHBhcmFtJ106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nUGFyYW06IHN0cmluZyA9IHAuUGFyYW1OYW1lICsgXCI9XCIgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zID09IG51bGwgPyBcIlwiIDogcXVlcnlQYXJhbXMgKyBcIiZcIikgKyBzdHJpbmdQYXJhbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyYW1UeXBlRW51bVsnSW4gcm91dGUnXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwgKyAodXJsLmVuZHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBwLlBhcmFtVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcmFtVHlwZUVudW1bJ0luIEJvZHknXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5UGFyYW1zW3AuUGFyYW1OYW1lXSA9IHAuUGFyYW1WYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdXJsID0gKHVybC5lbmRzV2l0aChcIi9cIikgPyB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSA6IHVybCkgKyBcIj9cIiArIHF1ZXJ5UGFyYW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3QoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QsIHVybCwge1xyXG4gICAgICAgICAgICBoZWFkZXJzOiBlbmRQb2ludERhdGEuVG9rZW4gPyB7IEF1dGhvcml6YXRpb246IGVuZFBvaW50RGF0YS5Ub2tlbiB9IDogbnVsbCxcclxuICAgICAgICAgICAgYm9keTogIVtSZXF1ZXN0TWV0aG9kRW51bS5ERUxFVEUsIFJlcXVlc3RNZXRob2RFbnVtLkdFVF0uaW5jbHVkZXMoZW5kUG9pbnREYXRhLlJlcXVlc3RNZXRob2QpID8gYm9keVBhcmFtcyA6IG51bGxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogRm9ybSB8IFJlY29yZCB8IEFycmF5PFJlY29yZD4gKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5yZW1vdmVSZXF1ZXN0Q291bnRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnJlbW92ZVJlcXVlc3RDb3VudGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbEJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsQmFjayhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIEVxcER5bmFtaWNNb2R1bGVEaWFsb2dTZXJ2aWNlLkVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,39 +0,0 @@
1
- /*
2
- * Public API Surface of eqp-dynamic-module
3
- */
4
- export * from './lib/eqp-dynamic-module.module';
5
- export * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';
6
- export * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';
7
- export * from './lib/components/private/add-form-field/add-form-field.component';
8
- export * from './lib/components/private/dynamic-module-field/dynamic-module-field.component';
9
- export * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';
10
- export * from './lib/components/private/field-templates/boolean-field-template/boolean-field-template.component';
11
- export * from './lib/components/private/field-templates/date-field-template/date-field-template.component';
12
- export * from './lib/components/private/field-templates/image-field-template/image-field-template.component';
13
- export * from './lib/components/private/field-templates/list-value-field-template/list-value-field-template.component';
14
- export * from './lib/components/private/field-templates/numeric-field-template/numeric-field-template.component';
15
- export * from './lib/components/private/field-templates/text-field-template/text-field-template.component';
16
- export * from './lib/components/private/field-templates/textarea-field-template/textarea-field-template.component';
17
- export * from './lib/components/private/form-records/add-form-record/add-form-record.component';
18
- export * from './lib/components/private/form-records/list-form-record/list-form-record.component';
19
- export * from './lib/models/baseField.model';
20
- export * from './lib/models/baseObj.model';
21
- export * from './lib/models/context.model';
22
- export * from './lib/models/endPointConfiguration.model';
23
- export * from './lib/models/entity.model';
24
- export * from './lib/models/form.model';
25
- export * from './lib/models/record.model';
26
- export * from './lib/models/fields/attachmentField.model';
27
- export * from './lib/models/fields/booleanField.model';
28
- export * from './lib/models/fields/dateField.model';
29
- export * from './lib/models/fields/imageField.model';
30
- export * from './lib/models/fields/listValueField.model';
31
- export * from './lib/models/fields/lookupField.model';
32
- export * from './lib/models/fields/numericField.model';
33
- export * from './lib/models/fields/testareaField.model';
34
- export * from './lib/models/fields/textField.model';
35
- export * from './lib/services/custom-form-validators.service';
36
- export * from './lib/services/eqp-dynamic-module-dialog.service';
37
- export * from './lib/services/spinner.service';
38
- export * from './lib/services/utilityHelper.services';
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWR5bmFtaWMtbW9kdWxlLyIsInNvdXJjZXMiOlsicHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyRUFBMkUsQ0FBQztBQUMxRixjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyw4RUFBOEUsQ0FBQztBQUM3RixjQUFjLHdHQUF3RyxDQUFDO0FBQ3ZILGNBQWMsa0dBQWtHLENBQUM7QUFDakgsY0FBYyw0RkFBNEYsQ0FBQztBQUMzRyxjQUFjLDhGQUE4RixDQUFDO0FBQzdHLGNBQWMsd0dBQXdHLENBQUM7QUFDdkgsY0FBYyxrR0FBa0csQ0FBQztBQUNqSCxjQUFjLDRGQUE0RixDQUFDO0FBQzNHLGNBQWMsb0dBQW9HLENBQUM7QUFDbkgsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLG1GQUFtRixDQUFDO0FBR2xHLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBlcXAtZHluYW1pYy1tb2R1bGVcclxuICovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VxcC1keW5hbWljLW1vZHVsZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnRlZC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC9keW5hbWljLW1vZHVsZS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2ltYWdlLWZpZWxkLXRlbXBsYXRlL2ltYWdlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS9udW1lcmljLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvdGV4dC1maWVsZC10ZW1wbGF0ZS90ZXh0LWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvdGV4dGFyZWEtZmllbGQtdGVtcGxhdGUvdGV4dGFyZWEtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9hZGQtZm9ybS1yZWNvcmQvYWRkLWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC1mb3JtLXJlY29yZC9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2lSb290T2JqZWN0LmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYmFzZU9iai5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jb250ZXh0Lm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9lbnRpdHkubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvYm9vbGVhbkZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9sb29rdXBGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXN0YXJlYUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zcGlubmVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuIl19
@@ -1,7 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { SpinnerComponent as ɵa } from './lib/components/private/spinner/spinner.component';
6
- export { MaterialModule as ɵb } from './lib/modules/material.module';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXFwcm9qZWN0LWVxcC1keW5hbWljLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlcXByb2plY3QvZXFwLWR5bmFtaWMtbW9kdWxlLyIsInNvdXJjZXMiOlsiZXFwcm9qZWN0LWVxcC1keW5hbWljLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge1NwaW5uZXJDb21wb25lbnQgYXMgybVhfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCc7XG5leHBvcnQge01hdGVyaWFsTW9kdWxlIGFzIMm1Yn0gZnJvbSAnLi9saWIvbW9kdWxlcy9tYXRlcmlhbC5tb2R1bGUnOyJdfQ==