@mediusinc/mng-commons 1.3.0-1c14fa2b → 2.0.0-rc.0-08f92864

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 (230) hide show
  1. package/assets/i18n/en.json +9 -0
  2. package/assets/i18n/sl.json +9 -0
  3. package/esm2020/lib/api/utils/medius-rest.util.mjs +1 -1
  4. package/esm2020/lib/components/action/action.component.mjs +76 -20
  5. package/esm2020/lib/components/action/editor/action-editor.component.mjs +12 -12
  6. package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +6 -6
  7. package/esm2020/lib/components/action/models/action-component.model.mjs +1 -1
  8. package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
  9. package/esm2020/lib/components/action/models/action-execution.model.mjs +1 -1
  10. package/esm2020/lib/components/action/route/action-route.component.mjs +6 -5
  11. package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +11 -10
  12. package/esm2020/lib/components/form/date-range/date-range.component.mjs +9 -8
  13. package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +13 -11
  14. package/esm2020/lib/components/form/editor/form-editor.component.mjs +14 -11
  15. package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +13 -9
  16. package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +8 -7
  17. package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +8 -7
  18. package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +11 -9
  19. package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +50 -20
  20. package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +5 -5
  21. package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +27 -17
  22. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +32 -12
  23. package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +21 -12
  24. package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +13 -11
  25. package/esm2020/lib/components/form/formly/models/formly-field.model.mjs +1 -1
  26. package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +10 -9
  27. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +11 -10
  28. package/esm2020/lib/components/form/models/field-action-context.model.mjs +1 -1
  29. package/esm2020/lib/components/layout/breadcrumb.component.mjs +7 -6
  30. package/esm2020/lib/components/layout/footer.component.mjs +6 -5
  31. package/esm2020/lib/components/layout/main-layout.component.mjs +8 -8
  32. package/esm2020/lib/components/layout/menu-item.component.mjs +43 -23
  33. package/esm2020/lib/components/layout/menu.component.mjs +24 -13
  34. package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +3 -3
  35. package/esm2020/lib/components/layout/topbar.component.mjs +14 -12
  36. package/esm2020/lib/components/layout/version.component.mjs +6 -6
  37. package/esm2020/lib/components/tableview/models/table.event.mjs +1 -1
  38. package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +38 -10
  39. package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +5 -6
  40. package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +14 -13
  41. package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +29 -12
  42. package/esm2020/lib/components/tableview/table/table.component.mjs +33 -17
  43. package/esm2020/lib/components/tableview/tableview.component.mjs +13 -11
  44. package/esm2020/lib/descriptors/action/action-button.descriptor.mjs +60 -0
  45. package/esm2020/lib/descriptors/action/action-confirmation.descriptor.mjs +2 -2
  46. package/esm2020/lib/descriptors/action/action.descriptor.mjs +579 -0
  47. package/esm2020/lib/descriptors/action/index.mjs +4 -0
  48. package/esm2020/lib/descriptors/editor/editor.descriptor.mjs +291 -0
  49. package/esm2020/lib/descriptors/editor/field-validation.descriptor.mjs +25 -0
  50. package/esm2020/lib/descriptors/editor/field.descriptor.mjs +990 -0
  51. package/esm2020/lib/descriptors/editor/index.mjs +4 -0
  52. package/esm2020/lib/descriptors/filter/filter.descriptor.mjs +370 -0
  53. package/esm2020/lib/descriptors/filter/index.mjs +2 -0
  54. package/esm2020/lib/descriptors/index.mjs +1 -11
  55. package/esm2020/lib/descriptors/table/column.descriptor.mjs +406 -0
  56. package/esm2020/lib/descriptors/table/index.mjs +3 -0
  57. package/esm2020/lib/descriptors/table/table.descriptor.mjs +497 -0
  58. package/esm2020/lib/descriptors/tableview/index.mjs +2 -0
  59. package/esm2020/lib/descriptors/tableview/tableview.descriptor.mjs +346 -0
  60. package/esm2020/lib/directives/component.directive.mjs +5 -4
  61. package/esm2020/lib/directives/template.directive.mjs +5 -4
  62. package/esm2020/lib/mng-commons.module.mjs +108 -138
  63. package/esm2020/lib/models/column-value.model.mjs +1 -1
  64. package/esm2020/lib/models/config.model.mjs +1 -1
  65. package/esm2020/lib/models/menu.model.mjs +1 -1
  66. package/esm2020/lib/models/view-container.model.mjs +1 -1
  67. package/esm2020/lib/pipes/boolean.pipe.mjs +5 -4
  68. package/esm2020/lib/pipes/class-map.pipe.mjs +5 -4
  69. package/esm2020/lib/pipes/enum.pipe.mjs +5 -4
  70. package/esm2020/lib/pipes/enumerate-async.pipe.mjs +5 -4
  71. package/esm2020/lib/pipes/enumerate.pipe.mjs +5 -4
  72. package/esm2020/lib/pipes/getter.pipe.mjs +5 -4
  73. package/esm2020/lib/pipes/i18n-property.pipe.mjs +5 -4
  74. package/esm2020/lib/pipes/json-path.pipe.mjs +5 -4
  75. package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +5 -4
  76. package/esm2020/lib/pipes/parametrize.pipe.mjs +5 -4
  77. package/esm2020/lib/pipes/template.pipe.mjs +5 -4
  78. package/esm2020/lib/provide-commons.mjs +73 -0
  79. package/esm2020/lib/router/index.mjs +2 -1
  80. package/esm2020/lib/router/models/router.model.mjs +1 -1
  81. package/esm2020/lib/router/route-builder.mjs +31 -144
  82. package/esm2020/lib/router/routes-builder.mjs +67 -0
  83. package/esm2020/lib/router/tableview-route-builder.mjs +2 -2
  84. package/esm2020/lib/security/authorization.guard.mjs +8 -5
  85. package/esm2020/lib/security/authorization.service.mjs +8 -5
  86. package/esm2020/lib/services/action-executor.service.mjs +13 -7
  87. package/esm2020/lib/services/commons.service.mjs +15 -10
  88. package/esm2020/lib/services/configuration.service.mjs +27 -20
  89. package/esm2020/lib/services/internal/commons-init.service.mjs +13 -7
  90. package/esm2020/lib/services/navigation.service.mjs +8 -5
  91. package/esm2020/lib/services/providers/config-service.provider.mjs +5 -4
  92. package/esm2020/lib/services/router.service.mjs +97 -0
  93. package/esm2020/lib/services/version.service.mjs +8 -5
  94. package/esm2020/lib/services/view-container.component.service.mjs +4 -4
  95. package/esm2020/lib/styles/styles.util.mjs +1 -1
  96. package/esm2020/lib/utils/action-data-provider.util.mjs +1 -1
  97. package/esm2020/lib/utils/editor-formly.util.mjs +2 -2
  98. package/esm2020/lib/utils/export.util.mjs +20 -0
  99. package/esm2020/lib/utils/i18n.util.mjs +1 -1
  100. package/esm2020/lib/utils/index.mjs +2 -1
  101. package/esm2020/lib/utils/notification.util.mjs +1 -1
  102. package/esm2020/lib/utils/route.util.mjs +13 -1
  103. package/esm2020/lib/utils/tableview.util.mjs +1 -1
  104. package/esm2020/public-api.mjs +7 -1
  105. package/fesm2015/mediusinc-mng-commons.mjs +6767 -6381
  106. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  107. package/fesm2020/mediusinc-mng-commons.mjs +6707 -6325
  108. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  109. package/lib/api/utils/medius-rest.util.d.ts +1 -1
  110. package/lib/components/action/action.component.d.ts +10 -5
  111. package/lib/components/action/editor/action-editor.component.d.ts +2 -2
  112. package/lib/components/action/localization/data-language-dropdown.component.d.ts +2 -2
  113. package/lib/components/action/models/action-component.model.d.ts +1 -1
  114. package/lib/components/action/models/action-confirmation-service.model.d.ts +1 -1
  115. package/lib/components/action/models/action-execution.model.d.ts +2 -2
  116. package/lib/components/action/route/action-route.component.d.ts +2 -2
  117. package/lib/components/form/autocomplete/autocomplete.component.d.ts +1 -1
  118. package/lib/components/form/date-range/date-range.component.d.ts +1 -1
  119. package/lib/components/form/dropdown/dropdown.component.d.ts +1 -1
  120. package/lib/components/form/editor/form-editor.component.d.ts +2 -2
  121. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +2 -2
  122. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +2 -2
  123. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +2 -2
  124. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +2 -2
  125. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +2 -2
  126. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +1 -1
  127. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +2 -2
  128. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -2
  129. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +2 -2
  130. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +1 -1
  131. package/lib/components/form/formly/models/formly-field.model.d.ts +2 -2
  132. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +1 -1
  133. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +2 -2
  134. package/lib/components/form/models/field-action-context.model.d.ts +1 -1
  135. package/lib/components/layout/breadcrumb.component.d.ts +1 -1
  136. package/lib/components/layout/footer.component.d.ts +1 -1
  137. package/lib/components/layout/main-layout.component.d.ts +1 -1
  138. package/lib/components/layout/menu-item.component.d.ts +6 -2
  139. package/lib/components/layout/menu.component.d.ts +9 -3
  140. package/lib/components/layout/topbar.component.d.ts +1 -1
  141. package/lib/components/layout/version.component.d.ts +1 -1
  142. package/lib/components/tableview/models/table.event.d.ts +1 -1
  143. package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +9 -2
  144. package/lib/components/tableview/route/tableview-route.component.d.ts +3 -2
  145. package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +2 -2
  146. package/lib/components/tableview/table/column-value/column-value.component.d.ts +2 -2
  147. package/lib/components/tableview/table/table.component.d.ts +4 -2
  148. package/lib/components/tableview/tableview.component.d.ts +3 -2
  149. package/lib/descriptors/{action-button.descriptor.d.ts → action/action-button.descriptor.d.ts} +1 -1
  150. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +2 -2
  151. package/lib/descriptors/{action.descriptor.d.ts → action/action.descriptor.d.ts} +16 -8
  152. package/lib/descriptors/action/index.d.ts +3 -0
  153. package/lib/descriptors/{editor.descriptor.d.ts → editor/editor.descriptor.d.ts} +9 -6
  154. package/lib/descriptors/{field-validation.descriptor.d.ts → editor/field-validation.descriptor.d.ts} +1 -1
  155. package/lib/descriptors/{field.descriptor.d.ts → editor/field.descriptor.d.ts} +14 -10
  156. package/lib/descriptors/editor/index.d.ts +3 -0
  157. package/lib/descriptors/{filter.descriptor.d.ts → filter/filter.descriptor.d.ts} +11 -9
  158. package/lib/descriptors/filter/index.d.ts +1 -0
  159. package/lib/descriptors/index.d.ts +0 -10
  160. package/lib/descriptors/{column.descriptor.d.ts → table/column.descriptor.d.ts} +4 -4
  161. package/lib/descriptors/table/index.d.ts +2 -0
  162. package/lib/descriptors/{table.descriptor.d.ts → table/table.descriptor.d.ts} +12 -7
  163. package/lib/descriptors/tableview/index.d.ts +1 -0
  164. package/lib/descriptors/{tableview.descriptor.d.ts → tableview/tableview.descriptor.d.ts} +9 -7
  165. package/lib/directives/component.directive.d.ts +1 -1
  166. package/lib/directives/template.directive.d.ts +1 -1
  167. package/lib/mng-commons.module.d.ts +90 -88
  168. package/lib/models/column-value.model.d.ts +1 -1
  169. package/lib/models/config.model.d.ts +1 -0
  170. package/lib/models/menu.model.d.ts +1 -1
  171. package/lib/models/version.model.d.ts +1 -1
  172. package/lib/models/view-container.model.d.ts +1 -1
  173. package/lib/pipes/boolean.pipe.d.ts +1 -1
  174. package/lib/pipes/class-map.pipe.d.ts +1 -1
  175. package/lib/pipes/enum.pipe.d.ts +1 -1
  176. package/lib/pipes/enumerate-async.pipe.d.ts +1 -1
  177. package/lib/pipes/enumerate.pipe.d.ts +1 -1
  178. package/lib/pipes/getter.pipe.d.ts +1 -1
  179. package/lib/pipes/i18n-property.pipe.d.ts +1 -1
  180. package/lib/pipes/json-path.pipe.d.ts +1 -1
  181. package/lib/pipes/locale-default-row-class.pipe.d.ts +2 -2
  182. package/lib/pipes/parametrize.pipe.d.ts +1 -1
  183. package/lib/pipes/template.pipe.d.ts +1 -1
  184. package/lib/provide-commons.d.ts +3 -0
  185. package/lib/router/index.d.ts +1 -0
  186. package/lib/router/models/router.model.d.ts +5 -2
  187. package/lib/router/route-builder.d.ts +12 -48
  188. package/lib/router/routes-builder.d.ts +29 -0
  189. package/lib/router/tableview-route-builder.d.ts +2 -1
  190. package/lib/services/action-executor.service.d.ts +2 -1
  191. package/lib/services/commons.service.d.ts +3 -3
  192. package/lib/services/configuration.service.d.ts +4 -1
  193. package/lib/services/internal/commons-init.service.d.ts +4 -2
  194. package/lib/services/router.service.d.ts +22 -0
  195. package/lib/services/view-container.component.service.d.ts +1 -1
  196. package/lib/styles/styles.util.d.ts +2 -1
  197. package/lib/types/type.model.d.ts +8 -8
  198. package/lib/utils/editor-formly.util.d.ts +1 -1
  199. package/lib/utils/export.util.d.ts +5 -0
  200. package/lib/utils/i18n.util.d.ts +2 -1
  201. package/lib/utils/index.d.ts +1 -0
  202. package/lib/utils/notification.util.d.ts +2 -1
  203. package/lib/utils/route.util.d.ts +55 -0
  204. package/lib/utils/tableview.util.d.ts +1 -1
  205. package/package.json +6 -6
  206. package/public-api.d.ts +6 -0
  207. package/scss/common/layout/_breadcrumb.scss +12 -2
  208. package/scss/common/layout/_exception.scss +1 -1
  209. package/scss/common/layout/_inlinemenu.scss +13 -0
  210. package/scss/common/layout/_login.scss +1 -0
  211. package/scss/common/layout/_rightmenu.scss +5 -0
  212. package/scss/common/layout/menu/_menu_common.scss +1 -1
  213. package/scss/common/theme/designer/_components.scss +4 -4
  214. package/scss/common/theme/designer/_mixins.scss +29 -0
  215. package/scss/common/theme/extensions/_datatable.scss +2 -2
  216. package/scss/common/variables/layout/_layout_dark.scss +0 -1
  217. package/scss/common/variables/layout/_layout_light.scss +0 -1
  218. package/scss/common/variables/theme/_theme_dark.scss +72 -46
  219. package/scss/common/variables/theme/_theme_light.scss +70 -33
  220. package/scss/mng-overrides/_layout_menu.scss +4 -0
  221. package/version-info.json +6 -6
  222. package/esm2020/lib/descriptors/action-button.descriptor.mjs +0 -60
  223. package/esm2020/lib/descriptors/action.descriptor.mjs +0 -560
  224. package/esm2020/lib/descriptors/column.descriptor.mjs +0 -405
  225. package/esm2020/lib/descriptors/editor.descriptor.mjs +0 -290
  226. package/esm2020/lib/descriptors/field-validation.descriptor.mjs +0 -25
  227. package/esm2020/lib/descriptors/field.descriptor.mjs +0 -987
  228. package/esm2020/lib/descriptors/filter.descriptor.mjs +0 -368
  229. package/esm2020/lib/descriptors/table.descriptor.mjs +0 -482
  230. package/esm2020/lib/descriptors/tableview.descriptor.mjs +0 -344
@@ -0,0 +1,4 @@
1
+ export * from './action.descriptor';
2
+ export * from './action-button.descriptor';
3
+ export * from './action-confirmation.descriptor';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxrQ0FBa0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tYnV0dG9uLmRlc2NyaXB0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb24tY29uZmlybWF0aW9uLmRlc2NyaXB0b3InO1xuIl19
@@ -0,0 +1,291 @@
1
+ import { ObjectSerializer } from '../../api/utils';
2
+ import { I18nUtils } from '../../utils';
3
+ import { TableviewUtil } from '../../utils/tableview.util';
4
+ import { ModelDescriptor } from '../model.descriptor';
5
+ import { FieldInputTypeEnum, TableviewEditorTypeEnum } from '../types';
6
+ import { AFieldDescriptor, FieldActionDescriptor, FieldGroupDescriptor, FieldInputDescriptor, FieldLookupDescriptor, FieldLookupEnumDescriptor, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, FieldTabGroupDescriptor } from './field.descriptor';
7
+ export class EditorDescriptor {
8
+ constructor(modelType, idProperty, titleProperty, tableviewEditorType = TableviewEditorTypeEnum.None, i18nBaseKey) {
9
+ this._tabs = [];
10
+ this._groups = [];
11
+ this._fields = [];
12
+ this._disabled = false;
13
+ this._isLocalized = false;
14
+ this._modelType = modelType;
15
+ this._model = new ModelDescriptor(modelType, idProperty, titleProperty, i18nBaseKey);
16
+ this._tableviewEditorType = tableviewEditorType;
17
+ }
18
+ /**
19
+ * auto generated editor descriptor based on openapi definition
20
+ * generates all fields from definition
21
+ * @param modelType class type
22
+ * @param idProperty
23
+ * @param titleProperty
24
+ * @param tableEditorType
25
+ */
26
+ static from(modelType, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
27
+ return EditorDescriptor.fromModelWithAttributes(modelType, TableviewUtil.getAttributeDefMap(modelType), titleProperty, idProperty, tableEditorType);
28
+ }
29
+ /**
30
+ * auto generated editor descriptor based on openapi definition
31
+ * generates only selected fields
32
+ * @param modelType class type
33
+ * @param attributes list of selected properties to generate fields based on
34
+ * @param idProperty
35
+ * @param titleProperty
36
+ * @param tableEditorType
37
+ */
38
+ static fromModelWithAttributes(modelType, attributes, idProperty, titleProperty, tableEditorType = TableviewEditorTypeEnum.None) {
39
+ const descriptor = new EditorDescriptor(modelType, idProperty, titleProperty, tableEditorType);
40
+ attributes
41
+ .filter(attr => !attr.type.includes('Set') && !attr.type.includes('Array'))
42
+ .forEach(attr => descriptor.upsertFieldFromAttributeDef(attr, descriptor.fields.find(col => col.property === attr.name)));
43
+ return descriptor;
44
+ }
45
+ get model() {
46
+ return this._model;
47
+ }
48
+ get tabs() {
49
+ return this._tabs;
50
+ }
51
+ get fields() {
52
+ return this._fields;
53
+ }
54
+ get tableviewEditorType() {
55
+ return this._tableviewEditorType;
56
+ }
57
+ get disabled() {
58
+ return this._disabled;
59
+ }
60
+ get isLocalized() {
61
+ return this._isLocalized;
62
+ }
63
+ get localizationLocaleProperty() {
64
+ return this._localizationLocaleProperty;
65
+ }
66
+ get localizationLocalizationProperty() {
67
+ return this._localizationLocalizationProperty;
68
+ }
69
+ get localizationBeanType() {
70
+ return this._localizationModelType;
71
+ }
72
+ get localeLookup() {
73
+ return this._localeLookup;
74
+ }
75
+ createTabGroup(name, title) {
76
+ const tabGroup = new FieldTabGroupDescriptor(this, name);
77
+ if (!title) {
78
+ title = I18nUtils.Type.getTabKey(this.model.i18nBaseKey, name);
79
+ }
80
+ tabGroup.withTitle(title);
81
+ this.createTabGroupDescriptor(tabGroup);
82
+ return tabGroup;
83
+ }
84
+ createFieldGroup(name, title) {
85
+ const fieldGroup = new FieldGroupDescriptor(this, name);
86
+ if (title !== null) {
87
+ if (!title) {
88
+ title = I18nUtils.Type.getGroupKey(this.model.i18nBaseKey, name);
89
+ }
90
+ fieldGroup.withTitle(title);
91
+ }
92
+ this.createFieldGroupDescriptor(fieldGroup);
93
+ return fieldGroup;
94
+ }
95
+ addFieldDescriptor(field) {
96
+ this.createDefaultGroup();
97
+ this._fields.push(field);
98
+ this._currentGroup?.addField(field);
99
+ return this;
100
+ }
101
+ addField(property) {
102
+ const field = new FieldInputDescriptor(this, property);
103
+ this.addFieldDescriptor(field);
104
+ return field;
105
+ }
106
+ /**
107
+ * removes filed if exists in descriptor
108
+ * @param property field name
109
+ */
110
+ removeField(property) {
111
+ const fieldIdx = this._fields.findIndex(f => f.property === property);
112
+ if (fieldIdx < 0) {
113
+ throw new Error(`Field ${property} does not exist.`);
114
+ }
115
+ for (const group of this._groups) {
116
+ const groupFieldIdx = group.fields.findIndex(f => f instanceof AFieldDescriptor && f.property === property);
117
+ if (groupFieldIdx >= 0) {
118
+ group.fields.splice(groupFieldIdx, 1);
119
+ break;
120
+ }
121
+ }
122
+ this._fields.splice(fieldIdx, 1);
123
+ }
124
+ getField(property) {
125
+ return this._fields.find(f => f.property === property) ?? null;
126
+ }
127
+ addFieldAction(actionName) {
128
+ const field = new FieldActionDescriptor(this, actionName);
129
+ this.addFieldDescriptor(field);
130
+ return field;
131
+ }
132
+ addFieldLookup(property, modelType) {
133
+ const field = new FieldLookupDescriptor(this, property, modelType);
134
+ this.addFieldDescriptor(field);
135
+ return field;
136
+ }
137
+ addFieldLookupEnum(property, enumType, options, nameAsValue = false, optionsTitlePath) {
138
+ const field = new FieldLookupEnumDescriptor(this, property, enumType, options, nameAsValue, optionsTitlePath);
139
+ this.addFieldDescriptor(field);
140
+ return field;
141
+ }
142
+ addFieldManyEditor(property, tableviewDescriptor) {
143
+ const field = new FieldManyEditorDescriptor(this, property, tableviewDescriptor);
144
+ this.addFieldDescriptor(field);
145
+ return field;
146
+ }
147
+ addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor) {
148
+ const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor);
149
+ this.addFieldDescriptor(field);
150
+ return field;
151
+ }
152
+ withDisabled(disabled = true) {
153
+ this._disabled = disabled;
154
+ return this;
155
+ }
156
+ addValidation(name, validator, message) {
157
+ if (this._currentGroup) {
158
+ this._currentGroup.withValidation(name, validator, message);
159
+ }
160
+ }
161
+ copy() {
162
+ const editor = new EditorDescriptor(this.model.type, this.model.idPropertyName, this.model.titlePropertyName, this.tableviewEditorType);
163
+ for (const tabGroup of this._tabs) {
164
+ editor.createTabGroupDescriptor(tabGroup.copy());
165
+ }
166
+ for (const tabGroup of editor._tabs) {
167
+ for (const fieldGroup of tabGroup.fields) {
168
+ editor._fields.push(...fieldGroup.fields);
169
+ }
170
+ editor._groups.push(...tabGroup.fields);
171
+ }
172
+ editor._currentTabGroup = editor._tabs[editor._tabs.length - 1];
173
+ editor._currentGroup = editor._currentTabGroup.fields[editor._currentTabGroup.fields.length - 1];
174
+ editor._disabled = this._disabled;
175
+ return editor;
176
+ }
177
+ createFieldGroupDescriptor(fieldGroup) {
178
+ this.createDefaultTabGroup();
179
+ this._currentGroup = fieldGroup;
180
+ this._groups.push(fieldGroup);
181
+ this._currentTabGroup?.addField(fieldGroup);
182
+ return this;
183
+ }
184
+ createTabGroupDescriptor(tabGroup) {
185
+ this._currentTabGroup = tabGroup;
186
+ this._tabs.push(tabGroup);
187
+ return this;
188
+ }
189
+ createDefaultGroup() {
190
+ this.createDefaultTabGroup();
191
+ if (this._currentTabGroup?.fields.length === 0) {
192
+ this.createFieldGroup(EditorDescriptor.defaultGroupName, null);
193
+ }
194
+ }
195
+ createDefaultTabGroup() {
196
+ if (this._tabs.length === 0) {
197
+ this.createTabGroup(EditorDescriptor.defaultGroupName, 'general.general');
198
+ }
199
+ }
200
+ /**
201
+ * modifies selected field
202
+ * do not use it for enums! (use withFieldModifiedEnum instead)
203
+ * @param property field name
204
+ * @param fieldType new field type for selected field
205
+ * @param args additional parameters for field
206
+ */
207
+ withFieldModifiedType(property, fieldType, ...args) {
208
+ const attribute = TableviewUtil.getAttributeDefMap(this._modelType).find(attribute => attribute.name === property);
209
+ if (attribute) {
210
+ attribute.fieldType = fieldType;
211
+ this.upsertFieldFromAttributeDef(attribute, this.fields.find(fi => fi.property === property), ...args);
212
+ }
213
+ return this;
214
+ }
215
+ /**
216
+ * modifies selected field with enum type
217
+ * @param property field property name
218
+ * @param enumType type of enum for new field
219
+ * @param optionsTitlePath
220
+ * @param values
221
+ * @param nameAsValue
222
+ */
223
+ withFieldModifiedEnum(property, enumType, optionsTitlePath, values, nameAsValue = false) {
224
+ const attribute = TableviewUtil.getAttributeDefMap(this._modelType).find(a => a.name === property);
225
+ if (attribute) {
226
+ attribute.fieldType = FieldInputTypeEnum.Radio;
227
+ const field = this.fields.find(f => f.property === property);
228
+ if (field && field instanceof FieldInputDescriptor) {
229
+ field.asRadioFromEnum(enumType ?? ObjectSerializer.get().findEnum(attribute.type), optionsTitlePath, values, nameAsValue);
230
+ }
231
+ }
232
+ return this;
233
+ }
234
+ /**
235
+ * adds lookup to given field
236
+ * @param property field property name
237
+ * @param modelType model type of field
238
+ * @param lookupProvider provider to be added to field
239
+ * @param titleProperty
240
+ */
241
+ withFieldModifiedLookup(property, modelType, lookupProvider, titleProperty) {
242
+ this.removeField(property);
243
+ const field = this.addFieldLookup(property, modelType).asAutocomplete().withLookupDataProvider(lookupProvider);
244
+ if (titleProperty) {
245
+ field.withItemsLabelProperty(titleProperty);
246
+ }
247
+ return this;
248
+ }
249
+ /**
250
+ * generates field based on attribute definition, used for auto model
251
+ * @param attribute definition
252
+ * @param field optional, if defined will be replaced, otherwise new will be generated
253
+ * @param args additional arguments
254
+ */
255
+ upsertFieldFromAttributeDef(attribute, field, ...args) {
256
+ if (field == null) {
257
+ field = this.addField(attribute.name);
258
+ }
259
+ if (field instanceof FieldInputDescriptor) {
260
+ if (attribute.enumType) {
261
+ return field.asRadioFromEnum(attribute.enumType);
262
+ }
263
+ else {
264
+ return field.asType(attribute.fieldType ?? TableviewUtil.toFieldInputTypeFromColumnType(attribute.columnType, attribute.columnDisplayType), ...args);
265
+ }
266
+ }
267
+ return field;
268
+ }
269
+ /**
270
+ * This method takes care of displaying correct/localized data in the editor
271
+ * @param localizationsProperty property that tells us where on the model are localizations accessible
272
+ * @param localeProperty property by which we find the locale
273
+ * @param localizationModelType model type for localizations if it is different from the whole model
274
+ * @param localeLookup lookup provider for locales supported by the application.
275
+ */
276
+ localized(localizationsProperty = 'localizations', localeProperty = 'locale', localizationModelType, localeLookup) {
277
+ this._localizationLocalizationProperty = localizationsProperty;
278
+ this._localizationLocaleProperty = localeProperty;
279
+ this._isLocalized = true;
280
+ this._localeLookup = localeLookup;
281
+ if (localizationModelType) {
282
+ this._localizationModelType = localizationModelType;
283
+ }
284
+ else {
285
+ this._localizationModelType = this._modelType;
286
+ }
287
+ return this;
288
+ }
289
+ }
290
+ EditorDescriptor.defaultGroupName = '_default';
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2VkaXRvci9lZGl0b3IuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFHcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLHVCQUF1QixFQUMxQixNQUFNLG9CQUFvQixDQUFDO0FBRTVCLE1BQU0sT0FBTyxnQkFBZ0I7SUFvQnpCLFlBQ0ksU0FBdUIsRUFDdkIsVUFBbUIsRUFDbkIsYUFBc0IsRUFDdEIsbUJBQW1CLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxFQUNsRCxXQUF5QztRQW5CMUIsVUFBSyxHQUFzQyxFQUFFLENBQUM7UUFDOUMsWUFBTyxHQUFtQyxFQUFFLENBQUM7UUFDdEQsWUFBTyxHQUFvQyxFQUFFLENBQUM7UUFJOUMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQWEzQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFJLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxD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cUJBQXFCLENBQUM7U0FDdkQ7YUFBTTtZQUNILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7QUFsWHNCLGlDQUFnQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge09iamVjdFNlcmlhbGl6ZXJ9IGZyb20gJy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lMb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7VGFibGV2aWV3QXR0cmlidXRlRGVmfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGV2aWV3LWF0dHIubW9kZWwnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIEVudW1Db25zdGFudFR5cGUsIEVudW1UeXBlLCBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlLCBNbmdGaWVsZFZhbGlkYXRvcn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtJMThuVXRpbHN9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7VGFibGV2aWV3VXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGV2aWV3LnV0aWwnO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4uL21vZGVsLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uL3RhYmxlJztcbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vdGFibGV2aWV3JztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEZpZWxkQWN0aW9uRGVzY3JpcHRvcixcbiAgICBGaWVsZEdyb3VwRGVzY3JpcHRvcixcbiAgICBGaWVsZElucHV0RGVzY3JpcHRvcixcbiAgICBGaWVsZExvb2t1cERlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsXG4gICAgRmllbGRUYWJHcm91cERlc2NyaXB0b3Jcbn0gZnJvbSAnLi9maWVsZC5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdEdyb3VwTmFtZSA9ICdfZGVmYXVsdCc7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbFR5cGU6IENsYXNzVHlwZTxUPjtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxldmlld0VkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfdGFiczogQXJyYXk8RmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4+ID0gW107XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9ncm91cHM6IEFycmF5PEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+PiA9IFtdO1xuICAgIHByb3RlY3RlZCBfZmllbGRzOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgVD4+ID0gW107XG4gICAgcHJvdGVjdGVkIF9jdXJyZW50VGFiR3JvdXA/OiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPjtcbiAgICBwcm90ZWN0ZWQgX2N1cnJlbnRHcm91cD86IEZpZWxkR3JvdXBEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbk1vZGVsVHlwZT86IENsYXNzVHlwZTxhbnk+O1xuICAgIHByb3RlY3RlZCBfbG9jYWxlTG9va3VwPzogKHF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtLCBzZXJ2aWNlPzogYW55LCBzZWFyY2g/OiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgbW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsXG4gICAgICAgIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lLFxuICAgICAgICBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPlxuICAgICkge1xuICAgICAgICB0aGlzLl9tb2RlbFR5cGUgPSBtb2RlbFR5cGU7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KTtcbiAgICAgICAgdGhpcy5fdGFibGV2aWV3RWRpdG9yVHlwZSA9IHRhYmxldmlld0VkaXRvclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYXV0byBnZW5lcmF0ZWQgZWRpdG9yIGRlc2NyaXB0b3IgYmFzZWQgb24gb3BlbmFwaSBkZWZpbml0aW9uXG4gICAgICogZ2VuZXJhdGVzIGFsbCBmaWVsZHMgZnJvbSBkZWZpbml0aW9uXG4gICAgICogQHBhcmFtIG1vZGVsVHlwZSBjbGFzcyB0eXBlXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGVcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb208VD4obW9kZWxUeXBlOiBDbGFzc1R5cGU8VD4sIGlkUHJvcGVydHk/OiBzdHJpbmcsIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcsIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmUpOiBFZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgcmV0dXJuIEVkaXRvckRlc2NyaXB0b3IuZnJvbU1vZGVsV2l0aEF0dHJpYnV0ZXMobW9kZWxUeXBlLCBUYWJsZXZpZXdVdGlsLmdldEF0dHJpYnV0ZURlZk1hcChtb2RlbFR5cGUpLCB0aXRsZVByb3BlcnR5LCBpZFByb3BlcnR5LCB0YWJsZUVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGF1dG8gZ2VuZXJhdGVkIGVkaXRvciBkZXNjcmlwdG9yIGJhc2VkIG9uIG9wZW5hcGkgZGVmaW5pdGlvblxuICAgICAqIGdlbmVyYXRlcyBvbmx5IHNlbGVjdGVkIGZpZWxkc1xuICAgICAqIEBwYXJhbSBtb2RlbFR5cGUgY2xhc3MgdHlwZVxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIGxpc3Qgb2Ygc2VsZWN0ZWQgcHJvcGVydGllcyB0byBnZW5lcmF0ZSBmaWVsZHMgYmFzZWQgb25cbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICogQHBhcmFtIHRhYmxlRWRpdG9yVHlwZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU1vZGVsV2l0aEF0dHJpYnV0ZXM8VD4oXG4gICAgICAgIG1vZGVsVHlwZTogQ2xhc3NUeXBlPFQ+LFxuICAgICAgICBhdHRyaWJ1dGVzOiBUYWJsZXZpZXdBdHRyaWJ1dGVEZWZbXSxcbiAgICAgICAgaWRQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZyxcbiAgICAgICAgdGFibGVFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3IobW9kZWxUeXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCB0YWJsZUVkaXRvclR5cGUpO1xuXG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhYXR0ci50eXBlLmluY2x1ZGVzKCdTZXQnKSAmJiAhYXR0ci50eXBlLmluY2x1ZGVzKCdBcnJheScpKVxuICAgICAgICAgICAgLmZvckVhY2goYXR0ciA9PlxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmZpZWxkcy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGF0dHIubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YWJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0VkaXRvclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkJlYW5UeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTW9kZWxUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxlTG9va3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlTG9va3VwO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVUYWJHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxUPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBJMThuVXRpbHMuVHlwZS5nZXRUYWJLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGFiR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyB8IG51bGwpOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8VD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgICAgIHRpdGxlID0gSTE4blV0aWxzLlR5cGUuZ2V0R3JvdXBLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZEdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkRGVzY3JpcHRvcjxGVD4oZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RlQsIFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdEdyb3VwKCk7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwPy5hZGRGaWVsZChmaWVsZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogRmllbGRJbnB1dERlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZElucHV0RGVzY3JpcHRvcjxUPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgZmlsZWQgaWYgZXhpc3RzIGluIGRlc2NyaXB0b3JcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgbmFtZVxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWVsZChwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5fZmllbGRzLmZpbmRJbmRleChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWVsZCAke3Byb3BlcnR5fSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2dyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBGaWVsZElkeCA9IGdyb3VwLmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmIGluc3RhbmNlb2YgQUZpZWxkRGVzY3JpcHRvciAmJiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBGaWVsZElkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZmllbGRzLnNwbGljZShncm91cEZpZWxkSWR4LCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKGZpZWxkSWR4LCAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmllbGQocHJvcGVydHk6IHN0cmluZyk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nKTogRmllbGRBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRBY3Rpb25EZXNjcmlwdG9yPFQ+KHRoaXMsIGFjdGlvbk5hbWUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8RlQ+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsVHlwZTogQ2xhc3NUeXBlPEZUPik6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8RlQsIFQ+KHRoaXMsIHByb3BlcnR5LCBtb2RlbFR5cGUpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtKFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBlbnVtVHlwZTogRW51bVR5cGUsXG4gICAgICAgIG9wdGlvbnM/OiBBcnJheTxFbnVtQ29uc3RhbnRUeXBlPixcbiAgICAgICAgbmFtZUFzVmFsdWUgPSBmYWxzZSxcbiAgICAgICAgb3B0aW9uc1RpdGxlUGF0aD86IHN0cmluZyB8IG51bGxcbiAgICApOiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPFQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBFbnVtRGVzY3JpcHRvcih0aGlzLCBwcm9wZXJ0eSwgZW51bVR5cGUsIG9wdGlvbnMsIG5hbWVBc1ZhbHVlLCBvcHRpb25zVGl0bGVQYXRoKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueUVkaXRvcjxGVD4ocHJvcGVydHk6IHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxGVD4pOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPEZULCBUPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IodGhpcywgcHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPEZUPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9yPEZUPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3I8RlQ+XG4gICAgKTogRmllbGRNYW55VG9NYW55RWRpdG9yRGVzY3JpcHRvcjxGVCwgVD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yKHRoaXMsIHByb3BlcnR5LCBtYWluVGFibGVEZXNjcmlwdG9yLCBsb29rdXBUYWJsZURlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVmFsaWRhdGlvbihuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcj86IE1uZ0ZpZWxkVmFsaWRhdG9yLCBtZXNzYWdlPzogTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZSkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50R3JvdXAud2l0aFZhbGlkYXRpb24obmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBuZXcgRWRpdG9yRGVzY3JpcHRvcjxUPih0aGlzLm1vZGVsLnR5cGUsIHRoaXMubW9kZWwuaWRQcm9wZXJ0eU5hbWUsIHRoaXMubW9kZWwudGl0bGVQcm9wZXJ0eU5hbWUsIHRoaXMudGFibGV2aWV3RWRpdG9yVHlwZSk7XG4gICAgICAgIGZvciAoY29uc3QgdGFiR3JvdXAgb2YgdGhpcy5fdGFicykge1xuICAgICAgICAgICAgZWRpdG9yLmNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cC5jb3B5KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdGFiR3JvdXAgb2YgZWRpdG9yLl90YWJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkR3JvdXAgb2YgdGFiR3JvdXAuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLl9maWVsZHMucHVzaCguLi5maWVsZEdyb3VwLmZpZWxkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3IuX2dyb3Vwcy5wdXNoKC4uLnRhYkdyb3VwLmZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAgPSBlZGl0b3IuX3RhYnNbZWRpdG9yLl90YWJzLmxlbmd0aCAtIDFdO1xuICAgICAgICBlZGl0b3IuX2N1cnJlbnRHcm91cCA9IGVkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkc1tlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cERlc2NyaXB0b3IoZmllbGRHcm91cDogRmllbGRHcm91cERlc2NyaXB0b3I8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwID0gZmllbGRHcm91cDtcbiAgICAgICAgdGhpcy5fZ3JvdXBzLnB1c2goZmllbGRHcm91cCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uYWRkRmllbGQoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXA6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUYWJHcm91cCA9IHRhYkdyb3VwO1xuICAgICAgICB0aGlzLl90YWJzLnB1c2godGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRHcm91cCgpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURlZmF1bHRUYWJHcm91cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhYnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwKEVkaXRvckRlc2NyaXB0b3IuZGVmYXVsdEdyb3VwTmFtZSwgJ2dlbmVyYWwuZ2VuZXJhbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbW9kaWZpZXMgc2VsZWN0ZWQgZmllbGRcbiAgICAgKiBkbyBub3QgdXNlIGl0IGZvciBlbnVtcyEgKHVzZSB3aXRoRmllbGRNb2RpZmllZEVudW0gaW5zdGVhZClcbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgZmllbGQgbmFtZVxuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgbmV3IGZpZWxkIHR5cGUgZm9yIHNlbGVjdGVkIGZpZWxkXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBmaWVsZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZFR5cGUocHJvcGVydHk6IHN0cmluZywgZmllbGRUeXBlOiBGaWVsZElucHV0VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IFRhYmxldmlld1V0aWwuZ2V0QXR0cmlidXRlRGVmTWFwKHRoaXMuX21vZGVsVHlwZSkuZmluZChhdHRyaWJ1dGUgPT4gYXR0cmlidXRlLm5hbWUgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgYXR0cmlidXRlLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcbiAgICAgICAgICAgIHRoaXMudXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5maW5kKGZpID0+IGZpLnByb3BlcnR5ID09PSBwcm9wZXJ0eSksXG4gICAgICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtb2RpZmllcyBzZWxlY3RlZCBmaWVsZCB3aXRoIGVudW0gdHlwZVxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBmaWVsZCBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIGVudW1UeXBlIHR5cGUgb2YgZW51bSBmb3IgbmV3IGZpZWxkXG4gICAgICogQHBhcmFtIG9wdGlvbnNUaXRsZVBhdGhcbiAgICAgKiBAcGFyYW0gdmFsdWVzXG4gICAgICogQHBhcmFtIG5hbWVBc1ZhbHVlXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkRW51bShwcm9wZXJ0eTogc3RyaW5nLCBlbnVtVHlwZT86IEVudW1UeXBlLCBvcHRpb25zVGl0bGVQYXRoPzogc3RyaW5nIHwgbnVsbCwgdmFsdWVzPzogQXJyYXk8RW51bUNvbnN0YW50VHlwZT4sIG5hbWVBc1ZhbHVlID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gVGFibGV2aWV3VXRpbC5nZXRBdHRyaWJ1dGVEZWZNYXAodGhpcy5fbW9kZWxUeXBlKS5maW5kKGEgPT4gYS5uYW1lID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZS5maWVsZFR5cGUgPSBGaWVsZElucHV0VHlwZUVudW0uUmFkaW87XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGZpZWxkLmFzUmFkaW9Gcm9tRW51bShlbnVtVHlwZSA/PyAoT2JqZWN0U2VyaWFsaXplci5nZXQoKS5maW5kRW51bShhdHRyaWJ1dGUudHlwZSkgYXMgRW51bVR5cGUpLCBvcHRpb25zVGl0bGVQYXRoLCB2YWx1ZXMsIG5hbWVBc1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGFkZHMgbG9va3VwIHRvIGdpdmVuIGZpZWxkXG4gICAgICogQHBhcmFtIHByb3BlcnR5IGZpZWxkIHByb3BlcnR5IG5hbWVcbiAgICAgKiBAcGFyYW0gbW9kZWxUeXBlIG1vZGVsIHR5cGUgb2YgZmllbGRcbiAgICAgKiBAcGFyYW0gbG9va3VwUHJvdmlkZXIgcHJvdmlkZXIgdG8gYmUgYWRkZWQgdG8gZmllbGRcbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZExvb2t1cDxNVD4ocHJvcGVydHk6IHN0cmluZywgbW9kZWxUeXBlOiBDbGFzc1R5cGU8TVQ+LCBsb29rdXBQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxhbnksIGFueT4sIHRpdGxlUHJvcGVydHk/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWVsZChwcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hZGRGaWVsZExvb2t1cChwcm9wZXJ0eSwgbW9kZWxUeXBlKS5hc0F1dG9jb21wbGV0ZSgpLndpdGhMb29rdXBEYXRhUHJvdmlkZXIobG9va3VwUHJvdmlkZXIpO1xuXG4gICAgICAgIGlmICh0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICAoZmllbGQgYXMgRmllbGRMb29rdXBEZXNjcmlwdG9yPGFueSwgYW55Pikud2l0aEl0ZW1zTGFiZWxQcm9wZXJ0eSh0aXRsZVByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlcyBmaWVsZCBiYXNlZCBvbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbiwgdXNlZCBmb3IgYXV0byBtb2RlbFxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGUgZGVmaW5pdGlvblxuICAgICAqIEBwYXJhbSBmaWVsZCBvcHRpb25hbCwgaWYgZGVmaW5lZCB3aWxsIGJlIHJlcGxhY2VkLCBvdGhlcndpc2UgbmV3IHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihhdHRyaWJ1dGU6IFRhYmxldmlld0F0dHJpYnV0ZURlZiwgZmllbGQ/OiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4sIC4uLmFyZ3M6IGFueVtdKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+IHtcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIGZpZWxkID0gdGhpcy5hZGRGaWVsZChhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5lbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5hc1JhZGlvRnJvbUVudW0oYXR0cmlidXRlLmVudW1UeXBlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmFzVHlwZShhdHRyaWJ1dGUuZmllbGRUeXBlID8/IFRhYmxldmlld1V0aWwudG9GaWVsZElucHV0VHlwZUZyb21Db2x1bW5UeXBlKGF0dHJpYnV0ZS5jb2x1bW5UeXBlLCBhdHRyaWJ1dGUuY29sdW1uRGlzcGxheVR5cGUpLCAuLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBjYXJlIG9mIGRpc3BsYXlpbmcgY29ycmVjdC9sb2NhbGl6ZWQgZGF0YSBpbiB0aGUgZWRpdG9yXG4gICAgICogQHBhcmFtIGxvY2FsaXphdGlvbnNQcm9wZXJ0eSBwcm9wZXJ0eSB0aGF0IHRlbGxzIHVzIHdoZXJlIG9uIHRoZSBtb2RlbCBhcmUgbG9jYWxpemF0aW9ucyBhY2Nlc3NpYmxlXG4gICAgICogQHBhcmFtIGxvY2FsZVByb3BlcnR5IHByb3BlcnR5IGJ5IHdoaWNoIHdlIGZpbmQgdGhlIGxvY2FsZVxuICAgICAqIEBwYXJhbSBsb2NhbGl6YXRpb25Nb2RlbFR5cGUgbW9kZWwgdHlwZSBmb3IgbG9jYWxpemF0aW9ucyBpZiBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgd2hvbGUgbW9kZWxcbiAgICAgKiBAcGFyYW0gbG9jYWxlTG9va3VwIGxvb2t1cCBwcm92aWRlciBmb3IgbG9jYWxlcyBzdXBwb3J0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8Uz4oXG4gICAgICAgIGxvY2FsaXphdGlvbnNQcm9wZXJ0eSA9ICdsb2NhbGl6YXRpb25zJyxcbiAgICAgICAgbG9jYWxlUHJvcGVydHkgPSAnbG9jYWxlJyxcbiAgICAgICAgbG9jYWxpemF0aW9uTW9kZWxUeXBlPzogQ2xhc3NUeXBlPGFueT4sXG4gICAgICAgIGxvY2FsZUxvb2t1cD86IChxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbSwgc2VydmljZT86IFMsIHNlYXJjaD86IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+PlxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSA9IGxvY2FsaXphdGlvbnNQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkgPSBsb2NhbGVQcm9wZXJ0eTtcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2NhbGVMb29rdXAgPSBsb2NhbGVMb29rdXA7XG5cbiAgICAgICAgaWYgKGxvY2FsaXphdGlvbk1vZGVsVHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTW9kZWxUeXBlID0gbG9jYWxpemF0aW9uTW9kZWxUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTW9kZWxUeXBlID0gdGhpcy5fbW9kZWxUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,25 @@
1
+ export class FieldValidationDescriptor {
2
+ constructor(name, validator, message, options) {
3
+ this._name = name;
4
+ this._validator = validator;
5
+ this._message = message;
6
+ this._options = options;
7
+ }
8
+ get name() {
9
+ return this._name;
10
+ }
11
+ get validator() {
12
+ return this._validator;
13
+ }
14
+ get message() {
15
+ return this._message;
16
+ }
17
+ get options() {
18
+ return this._options;
19
+ }
20
+ copy() {
21
+ const opt = this._options ? { ...this._options } : undefined;
22
+ return new FieldValidationDescriptor(this._name, this._validator, this._message, opt);
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9kZXNjcmlwdG9ycy9lZGl0b3IvZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyx5QkFBeUI7SUFNbEMsWUFDSSxJQUFZLEVBQ1osU0FBc0QsRUFDdEQsT0FBMEYsRUFDMUYsT0FBNkI7UUFFN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVNLElBQUk7UUFDUCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDM0QsT0FBTyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Rm9ybWx5RmllbGRDb25maWd9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtNbmdGaWVsZEFzeW5jVmFsaWRhdG9yLCBNbmdGaWVsZFZhbGlkYXRpb25NZXNzYWdlLCBNbmdGaWVsZFZhbGlkYXRvcn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZhbGlkYXRvcj86IE1uZ0ZpZWxkVmFsaWRhdG9yIHwgTW5nRmllbGRBc3luY1ZhbGlkYXRvcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlPzogTW5nRmllbGRWYWxpZGF0aW9uTWVzc2FnZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zPzoge2Vycm9yUGF0aDogc3RyaW5nfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbGlkYXRvcj86IE1uZ0ZpZWxkVmFsaWRhdG9yIHwgTW5nRmllbGRBc3luY1ZhbGlkYXRvcixcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZyB8ICgoZXJyb3I6IGFueSwgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pLFxuICAgICAgICBvcHRpb25zPzoge2Vycm9yUGF0aDogc3RyaW5nfVxuICAgICkge1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gdmFsaWRhdG9yO1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weSgpOiBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yIHtcbiAgICAgICAgY29uc3Qgb3B0ID0gdGhpcy5fb3B0aW9ucyA/IHsuLi50aGlzLl9vcHRpb25zfSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yKHRoaXMuX25hbWUsIHRoaXMuX3ZhbGlkYXRvciwgdGhpcy5fbWVzc2FnZSwgb3B0KTtcbiAgICB9XG59XG4iXX0=