@mediusinc/mng-commons 5.0.0-rc.0 → 5.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/core/data-list/data-list-params-helpers.d.ts +82 -0
  2. package/core/descriptors/action.descriptor.d.ts +3 -3
  3. package/core/descriptors/column.descriptor.d.ts +1 -1
  4. package/core/descriptors/editor.descriptor.d.ts +6 -6
  5. package/core/descriptors/enum.descriptor.d.ts +6 -0
  6. package/core/descriptors/filter.descriptor.d.ts +1 -1
  7. package/core/descriptors/model.descriptor.d.ts +1 -1
  8. package/core/descriptors/table.descriptor.d.ts +6 -6
  9. package/core/descriptors/tableview.descriptor.d.ts +10 -10
  10. package/core/enum/enum-helpers.d.ts +49 -0
  11. package/core/error/error-helpers.d.ts +114 -0
  12. package/core/helpers/date.d.ts +14 -0
  13. package/core/helpers/object.d.ts +27 -0
  14. package/core/helpers/route.d.ts +35 -0
  15. package/core/helpers/string.d.ts +7 -0
  16. package/core/helpers/templates.d.ts +3 -0
  17. package/core/i18n/i18n-common.d.ts +6 -0
  18. package/core/i18n/i18n-error.d.ts +4 -0
  19. package/core/i18n/i18n-type.d.ts +20 -0
  20. package/core/index.d.ts +15 -9
  21. package/{model → core}/pipes/enum.pipe.d.ts +2 -2
  22. package/core/pipes/enumerate.pipe.d.ts +3 -3
  23. package/{model → core}/pipes/i18n-property.pipe.d.ts +2 -2
  24. package/core/pipes/template.pipe.d.ts +0 -2
  25. package/core/router/route-builder.d.ts +2 -4
  26. package/core/router/routes-builder.d.ts +5 -6
  27. package/core/security/permission-helpers.d.ts +3 -0
  28. package/core/security/permissions.model.d.ts +2 -2
  29. package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
  30. package/esm2022/core/components/pages/error/error.page.component.mjs +3 -3
  31. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +3 -3
  32. package/esm2022/core/data-list/data-list-params-helpers.mjs +415 -0
  33. package/esm2022/core/data-list/filter-match.model.mjs +1 -1
  34. package/esm2022/core/data-providers/base.data-provider.mjs +1 -1
  35. package/esm2022/core/descriptors/action.descriptor.mjs +1 -1
  36. package/esm2022/core/descriptors/column.descriptor.mjs +1 -1
  37. package/esm2022/core/descriptors/editor.descriptor.mjs +1 -1
  38. package/esm2022/core/descriptors/enum.descriptor.mjs +2 -0
  39. package/esm2022/core/descriptors/filter.descriptor.mjs +1 -1
  40. package/esm2022/core/descriptors/model.descriptor.mjs +1 -1
  41. package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
  42. package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
  43. package/esm2022/core/directives/component.directive.mjs +4 -4
  44. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +4 -4
  45. package/esm2022/core/directives/template.directive.mjs +3 -3
  46. package/esm2022/core/enum/enum-helpers.mjs +81 -0
  47. package/esm2022/core/error/error-handler.mjs +3 -3
  48. package/esm2022/core/error/error-helpers.mjs +247 -0
  49. package/esm2022/core/helpers/coercion.mjs +1 -1
  50. package/esm2022/core/helpers/date.mjs +119 -0
  51. package/esm2022/core/helpers/object.mjs +145 -0
  52. package/esm2022/core/helpers/route.mjs +58 -0
  53. package/esm2022/core/helpers/string.mjs +57 -0
  54. package/esm2022/core/helpers/templates.mjs +4 -0
  55. package/esm2022/core/i18n/i18n-common.mjs +24 -0
  56. package/esm2022/core/i18n/i18n-error.mjs +27 -0
  57. package/esm2022/core/i18n/i18n-type.mjs +79 -0
  58. package/esm2022/core/index.mjs +17 -11
  59. package/esm2022/core/log/log-publisher-console.service.mjs +3 -3
  60. package/esm2022/core/log/logger.service.mjs +3 -3
  61. package/esm2022/core/pipes/boolean.pipe.mjs +4 -4
  62. package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
  63. package/esm2022/core/pipes/enum.pipe.mjs +27 -0
  64. package/esm2022/core/pipes/enumerate-async.pipe.mjs +8 -8
  65. package/esm2022/core/pipes/enumerate.pipe.mjs +10 -10
  66. package/esm2022/core/pipes/getter.pipe.mjs +4 -4
  67. package/esm2022/core/pipes/i18n-property.pipe.mjs +19 -0
  68. package/esm2022/core/pipes/json-path.pipe.mjs +6 -6
  69. package/esm2022/core/pipes/parametrize.pipe.mjs +6 -6
  70. package/esm2022/core/pipes/template.pipe.mjs +7 -8
  71. package/esm2022/core/provide.mjs +1 -21
  72. package/esm2022/core/reflect/type-enum-metadata.mjs +1 -1
  73. package/esm2022/core/registry/type-registry.mjs +1 -1
  74. package/esm2022/core/router/route-builder.mjs +8 -24
  75. package/esm2022/core/router/routes-builder.mjs +17 -16
  76. package/esm2022/core/security/permission-helpers.mjs +14 -0
  77. package/esm2022/core/security/permission.guard.mjs +1 -1
  78. package/esm2022/core/security/permission.service.mjs +6 -6
  79. package/esm2022/core/security/permissions.model.mjs +1 -1
  80. package/esm2022/core/services/commons-configuration.service.mjs +6 -6
  81. package/esm2022/core/services/commons-init.service.mjs +4 -4
  82. package/esm2022/core/services/commons-router.service.mjs +4 -4
  83. package/esm2022/core/services/commons.service.mjs +4 -4
  84. package/esm2022/core/services/local-storage-config.service.mjs +4 -4
  85. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +9 -10
  86. package/esm2022/filter/descriptors/filter.descriptor.mjs +1 -1
  87. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -1
  88. package/esm2022/form/api/descriptors/button-style.builder.mjs +1 -1
  89. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +7 -7
  90. package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
  91. package/esm2022/form/components/dropdown/dropdown.component.mjs +7 -7
  92. package/esm2022/form/directives/input-trim.directive.mjs +4 -4
  93. package/esm2022/model/descriptors/enum.descriptor.mjs +1 -1
  94. package/esm2022/model/descriptors/model.descriptor.mjs +4 -4
  95. package/esm2022/model/helpers/i18n.mjs +45 -0
  96. package/esm2022/model/helpers/model.mjs +71 -0
  97. package/esm2022/model/index.mjs +4 -7
  98. package/esm2022/table/api/data-providers/table.data-provider.mjs +1 -1
  99. package/esm2022/table/api/descriptors/column.descriptor.mjs +1 -1
  100. package/esm2022/table/api/descriptors/table.descriptor.mjs +36 -8
  101. package/esm2022/table/api/helpers/class-attribute-converter.mjs +1 -1
  102. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +9 -9
  103. package/esm2022/table/components/column-value/column-value.component.mjs +12 -14
  104. package/esm2022/table/components/table/table.component.mjs +20 -37
  105. package/esm2022/table/helpers/notification.mjs +4 -4
  106. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
  107. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
  108. package/esm2022/table/services/data-list.service.mjs +3 -3
  109. package/esm2022/tableview/action/components/action/action.component.mjs +9 -9
  110. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
  111. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +6 -6
  112. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
  113. package/esm2022/tableview/action/components/route/action-route.component.mjs +4 -4
  114. package/esm2022/tableview/action/components/table/action-table.component.mjs +12 -24
  115. package/esm2022/tableview/action/helpers/i18n.mjs +82 -0
  116. package/esm2022/tableview/action/helpers/notification.mjs +8 -8
  117. package/esm2022/tableview/action/helpers/styles.mjs +1 -1
  118. package/esm2022/tableview/action/models/execution/action-context.model.mjs +1 -1
  119. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  120. package/esm2022/tableview/action/services/action-error-mapper.service.mjs +1 -1
  121. package/esm2022/tableview/action/services/action-executor.service.mjs +9 -8
  122. package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
  123. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
  124. package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
  125. package/esm2022/tableview/action/services/providers/provide-view-container.mjs +1 -1
  126. package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
  127. package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
  128. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +1 -1
  129. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +1 -1
  130. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +1 -1
  131. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +1 -1
  132. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +1 -1
  133. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +4 -4
  134. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +1 -1
  135. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +3 -3
  136. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +1 -1
  137. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +8 -8
  138. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +1 -1
  139. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +4 -4
  140. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +1 -1
  141. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +1 -1
  142. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  143. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
  144. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +1 -1
  145. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +4 -4
  146. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +1 -1
  147. package/esm2022/tableview/api/tableview/helpers/files-export.mjs +1 -1
  148. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +4 -4
  149. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +1 -1
  150. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +9 -9
  151. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
  152. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +4 -4
  153. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
  154. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +4 -4
  155. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
  156. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +4 -4
  157. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  158. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +7 -7
  159. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +4 -4
  160. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +9 -9
  161. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  162. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
  163. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
  164. package/esm2022/tableview/editor/helpers/editor-formly.mjs +335 -0
  165. package/esm2022/tableview/editor/helpers/formly-config.mjs +1 -1
  166. package/esm2022/tableview/editor/services/formly-config.provider.mjs +1 -1
  167. package/esm2022/tableview/index.mjs +3 -5
  168. package/esm2022/tableview/provide.mjs +2 -1
  169. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +3 -3
  170. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +10 -19
  171. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +1 -1
  172. package/fesm2022/mediusinc-mng-commons-core.mjs +1367 -1389
  173. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  174. package/fesm2022/mediusinc-mng-commons-filter.mjs +8 -9
  175. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
  176. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
  177. package/fesm2022/mediusinc-mng-commons-form.mjs +17 -17
  178. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  179. package/fesm2022/mediusinc-mng-commons-model.mjs +99 -148
  180. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
  181. package/fesm2022/mediusinc-mng-commons-table-api.mjs +35 -7
  182. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
  183. package/fesm2022/mediusinc-mng-commons-table.mjs +48 -65
  184. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
  185. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +19 -19
  186. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  187. package/fesm2022/mediusinc-mng-commons-tableview.mjs +507 -572
  188. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  189. package/filter/descriptors/filter.descriptor.d.ts +2 -2
  190. package/model/descriptors/model.descriptor.d.ts +2 -2
  191. package/model/helpers/i18n.d.ts +10 -0
  192. package/model/helpers/model.d.ts +5 -0
  193. package/model/index.d.ts +2 -4
  194. package/package.json +7 -7
  195. package/table/api/descriptors/table.descriptor.d.ts +10 -0
  196. package/table/components/column-value/column-value.component.d.ts +3 -4
  197. package/table/components/table/table.component.d.ts +13 -13
  198. package/tableview/action/components/table/action-table.component.d.ts +6 -6
  199. package/tableview/action/helpers/i18n.d.ts +22 -0
  200. package/tableview/action/models/execution/action-instance-state.model.d.ts +21 -21
  201. package/tableview/action/services/action-executor.service.d.ts +1 -1
  202. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +1 -1
  203. package/tableview/api/action/descriptors/action.descriptor.d.ts +3 -3
  204. package/tableview/api/action/models/action.type.d.ts +2 -2
  205. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +21 -21
  206. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +2 -2
  207. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +2 -2
  208. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +5 -5
  209. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +4 -4
  210. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +4 -4
  211. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +4 -4
  212. package/tableview/api/editor/descriptors/field.descriptor.d.ts +2 -2
  213. package/tableview/api/editor/models/editor-fields.model.d.ts +3 -3
  214. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +2 -2
  215. package/tableview/editor/helpers/editor-formly.d.ts +10 -0
  216. package/tableview/index.d.ts +2 -2
  217. package/tableview/tableview/components/tableview/tableview.component.d.ts +5 -5
  218. package/core/data-list/data-list-params.util.d.ts +0 -84
  219. package/core/enum/enum.util.d.ts +0 -51
  220. package/core/error/error.util.d.ts +0 -116
  221. package/core/security/permission.util.d.ts +0 -5
  222. package/core/utils/date.util.d.ts +0 -20
  223. package/core/utils/i18n.util.d.ts +0 -36
  224. package/core/utils/object.util.d.ts +0 -31
  225. package/core/utils/route.util.d.ts +0 -37
  226. package/core/utils/string.util.d.ts +0 -9
  227. package/esm2022/core/data-list/data-list-params.util.mjs +0 -417
  228. package/esm2022/core/enum/enum.util.mjs +0 -83
  229. package/esm2022/core/error/error.util.mjs +0 -249
  230. package/esm2022/core/security/permission.util.mjs +0 -16
  231. package/esm2022/core/utils/date.util.mjs +0 -136
  232. package/esm2022/core/utils/i18n.util.mjs +0 -137
  233. package/esm2022/core/utils/object.util.mjs +0 -147
  234. package/esm2022/core/utils/route.util.mjs +0 -60
  235. package/esm2022/core/utils/string.util.mjs +0 -59
  236. package/esm2022/model/pipes/enum.pipe.mjs +0 -26
  237. package/esm2022/model/pipes/i18n-property.pipe.mjs +0 -19
  238. package/esm2022/model/utils/i18n.util.mjs +0 -51
  239. package/esm2022/model/utils/model.util.mjs +0 -73
  240. package/esm2022/tableview/action/utils/i18n.util.mjs +0 -126
  241. package/esm2022/tableview/editor/utils/editor-formly.util.mjs +0 -337
  242. package/model/utils/i18n.util.d.ts +0 -15
  243. package/model/utils/model.util.d.ts +0 -8
  244. package/tableview/action/utils/i18n.util.d.ts +0 -48
  245. package/tableview/editor/utils/editor-formly.util.d.ts +0 -12
@@ -1,249 +0,0 @@
1
- import { HttpErrorResponse } from '@angular/common/http';
2
- import { LogLevelEnum } from '../log/log.model';
3
- import { StringUtil } from '../utils/string.util';
4
- import { ACommonsErrorBase, CommonsHttpError, CommonsInternalError } from './error.model';
5
- export class ErrorUtil {
6
- /**
7
- * Converts RxJS subscription error to CommonsError.
8
- * @param error Error.
9
- * @param name Optional name to write in commons error.
10
- * @param details Optional details of error.
11
- */
12
- static fromSubscribeError(error, name, details) {
13
- const opts = {
14
- name,
15
- details,
16
- location: window?.location?.href
17
- };
18
- if (error instanceof HttpErrorResponse) {
19
- return new CommonsHttpError(error.message ?? 'Http Error occurred', error, opts);
20
- }
21
- else {
22
- opts.cause = error;
23
- return new CommonsInternalError(error.message ?? 'Internal Error occurred', opts);
24
- }
25
- }
26
- /**
27
- * Checks if error is Http error (Angular or Commons).
28
- * @param error
29
- */
30
- static isHttpErrorResponse(error) {
31
- return error instanceof HttpErrorResponse || error instanceof CommonsHttpError || error?.httpError instanceof HttpErrorResponse;
32
- }
33
- /**
34
- * Gets HttpErrorResponse from error (Angular or Commons).
35
- * @param error Error.
36
- */
37
- static getHttpErrorResponse(error) {
38
- if (error instanceof HttpErrorResponse) {
39
- return error;
40
- }
41
- else if (error instanceof CommonsHttpError) {
42
- return error.httpError;
43
- }
44
- else if (error?.httpError instanceof HttpErrorResponse) {
45
- return error.httpError;
46
- }
47
- else {
48
- return null;
49
- }
50
- }
51
- /**
52
- * Gets HttpErrorResponse status from error (Angular or Commons).
53
- * @param error Error.
54
- */
55
- static getHttpErrorResponseStatus(error) {
56
- return ErrorUtil.getHttpErrorResponse(error)?.status ?? null;
57
- }
58
- /**
59
- * Get error log level. All is error, except if error is http error with status >=400 and <500.
60
- * @param error Error.
61
- */
62
- static getErrorLogLevel(error) {
63
- if (ErrorUtil.isHttpErrorResponse(error)) {
64
- const status = ErrorUtil.getHttpErrorResponseStatus(error);
65
- if (status && status >= 400 && status < 500) {
66
- return LogLevelEnum.Warning;
67
- }
68
- }
69
- return LogLevelEnum.Error;
70
- }
71
- /**
72
- * Get error name (prototype name or type from commons error if name is not provided).
73
- * @param error Error.
74
- */
75
- static getErrorName(error) {
76
- if (error instanceof ACommonsErrorBase) {
77
- return error.name ?? error.type;
78
- }
79
- else {
80
- return error.name;
81
- }
82
- }
83
- /**
84
- * Writes http error to string with all headers and body.
85
- * @param error Http response error.
86
- * @param opts Options for hiding parts of error:
87
- * - hideMessage Hides message of error (message include url, status and status text!).
88
- * - hideHeaders Hides headers.
89
- * - hideBody Hides JSON representation of body.
90
- */
91
- static httpErrorResponseToString(error, opts) {
92
- let str = opts?.hideMessage ? '' : `${error.message}\n`; // message should already include url, status, etc.
93
- if (!opts?.hideHeaders) {
94
- str += `Http Response Headers: ${error.headers.keys().reduce((acc, key) => `${acc}[${key}: ${error.headers.get(key)}]`, '')}`;
95
- }
96
- if (!opts?.hideBody) {
97
- str += `\nHttp Response Body: ${StringUtil.stringify(error.error)}`;
98
- }
99
- return str;
100
- }
101
- /**
102
- * Error to string.
103
- * @param error Error.
104
- * @param opts Options for hiding parts of error:
105
- * - hideMessage Hides message of error.
106
- * - hideName Hides error name.
107
- * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).
108
- * - hideStack Hides stack of an error (if present).
109
- * - hideDetails Hides JSON detail's representation of error (if present).
110
- * - hideLocation Hides location (URL) where error was thrown.
111
- * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).
112
- */
113
- static errorToString(error, opts) {
114
- if (error instanceof ACommonsErrorBase) {
115
- return ErrorUtil.commonsErrorToString(error, opts);
116
- }
117
- else if (error instanceof HttpErrorResponse) {
118
- return ErrorUtil.httpErrorResponseToString(error, opts);
119
- }
120
- const strBlocks = [];
121
- if (!opts?.hideMessage) {
122
- strBlocks.push(error.message);
123
- }
124
- if (error.name) {
125
- strBlocks.push(`Error name: ${error.name}`);
126
- }
127
- if (!opts?.hideCause) {
128
- strBlocks.push(ErrorUtil.errorCauseToString(error, opts));
129
- }
130
- if (!opts?.hideStack && error.stack) {
131
- strBlocks.push(`Stack trace:\n${error.stack}`);
132
- }
133
- return strBlocks.filter(s => s.trim().length > 0).join('\n');
134
- }
135
- /**
136
- * Commons error to string.
137
- * @param error Commons error.
138
- * @param opts Options for hiding parts of error:
139
- * - hideMessage Hides message of error.
140
- * - hideName Hides error name.
141
- * - hideCause Hides cause of an error (if present, see @link(errorCauseToString) for other options).
142
- * - hideStack Hides stack of an error (if present).
143
- * - hideDetails Hides JSON detail's representation of error (if present).
144
- * - hideLocation Hides location (URL) where error was thrown.
145
- * - hideHttp Hides http error portion of error if http error response (see @link(httpErrorResponseToString) for other options).
146
- * - hideItems Hides all item information (http body, action context data).
147
- * - hideActionData See @link(commonsActionErrorContextToString) for additional info.
148
- * - hideQueryParams See @link(commonsActionErrorContextToString) for additional info.
149
- */
150
- static commonsErrorToString(error, opts) {
151
- const strBlocks = [];
152
- if (!opts?.hideMessage) {
153
- strBlocks.push(`${error.message}${error.messageCode ? ` (code: ${error.messageCode})` : ''}`);
154
- }
155
- if (!opts?.hideName) {
156
- strBlocks.push(`Error name: ${error.name ?? error.type} ${error.name ? `(${error.type})` : ''}`);
157
- }
158
- if (!opts?.hideLocation && error.location) {
159
- strBlocks.push(`Location: ${error.location}`);
160
- }
161
- let isHttp = false;
162
- if (!opts?.hideHttp && error instanceof CommonsHttpError) {
163
- strBlocks.push(ErrorUtil.httpErrorResponseToString(error.httpError, {
164
- hideBody: opts?.hideItems || opts?.hideBody,
165
- hideHeaders: opts?.hideHeaders,
166
- hideMessage: error.message.indexOf(error.httpError.message) >= 0
167
- }));
168
- isHttp = true;
169
- }
170
- if (error.type === 'CommonsActionError') {
171
- const actionError = error;
172
- if (actionError.actionContext) {
173
- strBlocks.push(ErrorUtil.commonsActionErrorContextToString(actionError, opts));
174
- }
175
- if (!opts?.hideHttp && actionError.httpError instanceof HttpErrorResponse) {
176
- strBlocks.push(ErrorUtil.httpErrorResponseToString(actionError.httpError, {
177
- hideBody: opts?.hideItems || opts?.hideBody,
178
- hideHeaders: opts?.hideHeaders,
179
- hideMessage: error.message.indexOf(actionError.httpError.message) >= 0
180
- }));
181
- isHttp = true;
182
- }
183
- }
184
- if (!opts?.hideDetails && error.details) {
185
- strBlocks.push(`Details: ${StringUtil.stringify(error.details)}`);
186
- }
187
- if (!opts?.hideCause && (!isHttp || !(error.cause instanceof HttpErrorResponse))) {
188
- strBlocks.push(ErrorUtil.errorCauseToString(error, opts));
189
- }
190
- if (!opts?.hideStack && error.stack) {
191
- strBlocks.push(`Stack trace:\n${error.stack}`);
192
- }
193
- return strBlocks.filter(s => s.trim().length > 0).join('\n');
194
- }
195
- /**
196
- * Writes commons action error info from context as string.
197
- * @param error Commons action error.
198
- * @param opts Options for hiding parts of error:
199
- * - hideItems Hides all item related information (item, form item, submit item, ...).
200
- * - hideActionData Hides action data.
201
- * - hideQueryParams Hides query params.
202
- */
203
- static commonsActionErrorContextToString(error, opts) {
204
- let paramsMessage = '';
205
- if (error.actionContext?.parameters) {
206
- if (error.actionContext?.parameters.itemId) {
207
- paramsMessage += `[itemId: ${error.actionContext.parameters.itemId}]`;
208
- }
209
- if (!opts?.hideItems && error.actionContext?.parameters.item) {
210
- paramsMessage += `[item: ${StringUtil.stringify(error.actionContext.parameters.item)}]`;
211
- }
212
- if (!opts?.hideActionData && error.actionContext?.parameters.actionData) {
213
- paramsMessage += Object.entries(error.actionContext?.parameters.actionData).reduce((acc, [key, value]) => `${acc}[actionData ${key}: ${StringUtil.stringify(value)}]`, '');
214
- }
215
- if (!opts?.hideQueryParams && error.actionContext?.parameters.dataListParams) {
216
- paramsMessage += `[dataListParams: ${StringUtil.stringify(error.actionContext.parameters.dataListParams)}]`;
217
- }
218
- if (!opts?.hideItems && error.actionContext?.parameters.formItem) {
219
- paramsMessage += `[formItem: ${StringUtil.stringify(error.actionContext.parameters.formItem)}]`;
220
- }
221
- if (!opts?.hideItems && error.actionContext?.parameters.submitResult) {
222
- paramsMessage += `[formItem: ${StringUtil.stringify(error.actionContext.parameters.submitResult)}]`;
223
- }
224
- if (error.actionContext?.parameters.locale) {
225
- paramsMessage += `[locale: ${StringUtil.stringify(error.actionContext.parameters.locale)}]`;
226
- }
227
- }
228
- return paramsMessage;
229
- }
230
- /**
231
- * Writes cause of an error as string.
232
- * @param error Error.
233
- * @param opts Options for hiding parts of error:
234
- * - causeOnErrorOnly Prints only if cause is instance of error.
235
- * - causeAsJson Print error cause as a JSON (by default, if error only message and name will be printed).
236
- */
237
- static errorCauseToString(error, opts) {
238
- // if already logged as http error, check that cause is not also http error (cause it is usually duplicated)
239
- if (error.cause && (!opts?.causeOnErrorOnly || error.cause instanceof Error)) {
240
- const stringify = opts?.causeAsJson || !(error.cause instanceof Error);
241
- if (!opts?.causeOnErrorOnly || error.cause instanceof Error) {
242
- return ('Caused by: ' +
243
- (stringify ? StringUtil.stringify(error.cause) : `${error.cause.message}${error.cause.name ? ` (${error.cause.name})` : ''}`));
244
- }
245
- }
246
- return '';
247
- }
248
- }
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL2Vycm9yL2Vycm9yLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsaUJBQWlCLEVBQTJCLGdCQUFnQixFQUFFLG9CQUFvQixFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUV0SSxNQUFNLE9BQU8sU0FBUztJQUNsQjs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsSUFBYSxFQUFFLE9BQWE7UUFDckUsTUFBTSxJQUFJLEdBQTRCO1lBQ2xDLElBQUk7WUFDSixPQUFPO1lBQ1AsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSTtTQUNuQyxDQUFDO1FBRUYsSUFBSSxLQUFLLFlBQVksaUJBQWlCLEVBQUU7WUFDcEMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUkscUJBQXFCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3BGO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNyRjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBVTtRQUN4QyxPQUFPLEtBQUssWUFBWSxpQkFBaUIsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLElBQUssS0FBeUMsRUFBRSxTQUFTLFlBQVksaUJBQWlCLENBQUM7SUFDekssQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFVO1FBQ3pDLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUU7WUFDMUMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQzFCO2FBQU0sSUFBSyxLQUF5QyxFQUFFLFNBQVMsWUFBWSxpQkFBaUIsRUFBRTtZQUMzRixPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7U0FDMUI7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLDBCQUEwQixDQUFDLEtBQVU7UUFDL0MsT0FBTyxTQUFTLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQVU7UUFDckMsSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDekMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBVTtRQUNqQyxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUNwQyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztTQUNuQzthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMseUJBQXlCLENBQUMsS0FBd0IsRUFBRSxJQUEyQztRQUN6RyxJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsbURBQW1EO1FBQzVHLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3BCLEdBQUcsSUFBSSwwQkFBMEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2pJO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDakIsR0FBRyxJQUFJLHlCQUF5QixVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ3ZFO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVksRUFBRSxJQUErQjtRQUNyRSxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUNwQyxPQUFPLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEQ7YUFBTSxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUMzQyxPQUFPLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDWixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsS0FBd0IsRUFBRSxJQUErQjtRQUN4RixNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7WUFDcEIsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDakc7UUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3BHO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFFRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLElBQUksS0FBSyxZQUFZLGdCQUFnQixFQUFFO1lBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pELFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRO2dCQUMzQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVc7Z0JBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDbkUsQ0FBQyxDQUNMLENBQUM7WUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFO1lBQ3JDLE1BQU0sV0FBVyxHQUFHLEtBQXVDLENBQUM7WUFDNUQsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFO2dCQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsRjtZQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLFdBQVcsQ0FBQyxTQUFTLFlBQVksaUJBQWlCLEVBQUU7Z0JBQ3ZFLFNBQVMsQ0FBQyxJQUFJLENBQ1YsU0FBUyxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7b0JBQ3ZELFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRO29CQUMzQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVc7b0JBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7aUJBQ3pFLENBQUMsQ0FDTCxDQUFDO2dCQUNGLE1BQU0sR0FBRyxJQUFJLENBQUM7YUFDakI7U0FDSjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRTtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksaUJBQWlCLENBQUMsQ0FBQyxFQUFFO1lBQzlFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLGlDQUFpQyxDQUFDLEtBQTBCLEVBQUUsSUFBNEM7UUFDcEgsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUU7WUFDakMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hDLGFBQWEsSUFBSSxZQUFZLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO2FBQ3pFO1lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUMxRCxhQUFhLElBQUksVUFBVSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDM0Y7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JFLGFBQWEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FDOUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxlQUFlLEdBQUcsS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQ2xGLEVBQUUsQ0FDTCxDQUFDO2FBQ0w7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQzFFLGFBQWEsSUFBSSxvQkFBb0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2FBQy9HO1lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsUUFBUSxFQUFFO2dCQUM5RCxhQUFhLElBQUksY0FBYyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7YUFDbkc7WUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxZQUFZLEVBQUU7Z0JBQ2xFLGFBQWEsSUFBSSxjQUFjLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQzthQUN2RztZQUNELElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUN4QyxhQUFhLElBQUksWUFBWSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7YUFDL0Y7U0FDSjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBWSxFQUFFLElBQW9DO1FBQy9FLDRHQUE0RztRQUM1RyxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFO1lBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssRUFBRTtnQkFDekQsT0FBTyxDQUNILGFBQWE7b0JBQ2IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLEtBQUssQ0FBQyxLQUFlLENBQUMsT0FBTyxHQUFJLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFNLEtBQUssQ0FBQyxLQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ2pLLENBQUM7YUFDTDtTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7TG9nTGV2ZWxFbnVtfSBmcm9tICcuLi9sb2cvbG9nLm1vZGVsJztcbmltcG9ydCB7U3RyaW5nVXRpbH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nLnV0aWwnO1xuaW1wb3J0IHtBQ29tbW9uc0Vycm9yQmFzZSwgQ29tbW9uc0Vycm9yQmFzZU9wdGlvbnMsIENvbW1vbnNIdHRwRXJyb3IsIENvbW1vbnNJbnRlcm5hbEVycm9yLCBJQ29tbW9uc0FjdGlvbkVycm9yfSBmcm9tICcuL2Vycm9yLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEVycm9yVXRpbCB7XG4gICAgLyoqXG4gICAgICogQ29udmVydHMgUnhKUyBzdWJzY3JpcHRpb24gZXJyb3IgdG8gQ29tbW9uc0Vycm9yLlxuICAgICAqIEBwYXJhbSBlcnJvciBFcnJvci5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIHRvIHdyaXRlIGluIGNvbW1vbnMgZXJyb3IuXG4gICAgICogQHBhcmFtIGRldGFpbHMgT3B0aW9uYWwgZGV0YWlscyBvZiBlcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21TdWJzY3JpYmVFcnJvcihlcnJvcjogYW55LCBuYW1lPzogc3RyaW5nLCBkZXRhaWxzPzogYW55KTogQUNvbW1vbnNFcnJvckJhc2Uge1xuICAgICAgICBjb25zdCBvcHRzOiBDb21tb25zRXJyb3JCYXNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXRhaWxzLFxuICAgICAgICAgICAgbG9jYXRpb246IHdpbmRvdz8ubG9jYXRpb24/LmhyZWZcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21tb25zSHR0cEVycm9yKGVycm9yLm1lc3NhZ2UgPz8gJ0h0dHAgRXJyb3Igb2NjdXJyZWQnLCBlcnJvciwgb3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRzLmNhdXNlID0gZXJyb3I7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGVycm9yLm1lc3NhZ2UgPz8gJ0ludGVybmFsIEVycm9yIG9jY3VycmVkJywgb3B0cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgZXJyb3IgaXMgSHR0cCBlcnJvciAoQW5ndWxhciBvciBDb21tb25zKS5cbiAgICAgKiBAcGFyYW0gZXJyb3JcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3I6IGFueSkge1xuICAgICAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSB8fCBlcnJvciBpbnN0YW5jZW9mIENvbW1vbnNIdHRwRXJyb3IgfHwgKGVycm9yIGFzIElDb21tb25zQWN0aW9uRXJyb3IgfCB1bmRlZmluZWQpPy5odHRwRXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIEh0dHBFcnJvclJlc3BvbnNlIGZyb20gZXJyb3IgKEFuZ3VsYXIgb3IgQ29tbW9ucykuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SHR0cEVycm9yUmVzcG9uc2UoZXJyb3I6IGFueSk6IEh0dHBFcnJvclJlc3BvbnNlIHwgbnVsbCB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDb21tb25zSHR0cEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3IuaHR0cEVycm9yO1xuICAgICAgICB9IGVsc2UgaWYgKChlcnJvciBhcyBJQ29tbW9uc0FjdGlvbkVycm9yIHwgdW5kZWZpbmVkKT8uaHR0cEVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5odHRwRXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgSHR0cEVycm9yUmVzcG9uc2Ugc3RhdHVzIGZyb20gZXJyb3IgKEFuZ3VsYXIgb3IgQ29tbW9ucykuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SHR0cEVycm9yUmVzcG9uc2VTdGF0dXMoZXJyb3I6IGFueSk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gRXJyb3JVdGlsLmdldEh0dHBFcnJvclJlc3BvbnNlKGVycm9yKT8uc3RhdHVzID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGVycm9yIGxvZyBsZXZlbC4gQWxsIGlzIGVycm9yLCBleGNlcHQgaWYgZXJyb3IgaXMgaHR0cCBlcnJvciB3aXRoIHN0YXR1cyA+PTQwMCBhbmQgPDUwMC5cbiAgICAgKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRFcnJvckxvZ0xldmVsKGVycm9yOiBhbnkpOiBMb2dMZXZlbEVudW0ge1xuICAgICAgICBpZiAoRXJyb3JVdGlsLmlzSHR0cEVycm9yUmVzcG9uc2UoZXJyb3IpKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBFcnJvclV0aWwuZ2V0SHR0cEVycm9yUmVzcG9uc2VTdGF0dXMoZXJyb3IpO1xuICAgICAgICAgICAgaWYgKHN0YXR1cyAmJiBzdGF0dXMgPj0gNDAwICYmIHN0YXR1cyA8IDUwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBMb2dMZXZlbEVudW0uV2FybmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTG9nTGV2ZWxFbnVtLkVycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBlcnJvciBuYW1lIChwcm90b3R5cGUgbmFtZSBvciB0eXBlIGZyb20gY29tbW9ucyBlcnJvciBpZiBuYW1lIGlzIG5vdCBwcm92aWRlZCkuXG4gICAgICogQHBhcmFtIGVycm9yIEVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RXJyb3JOYW1lKGVycm9yOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBQ29tbW9uc0Vycm9yQmFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLm5hbWUgPz8gZXJyb3IudHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci5uYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGVzIGh0dHAgZXJyb3IgdG8gc3RyaW5nIHdpdGggYWxsIGhlYWRlcnMgYW5kIGJvZHkuXG4gICAgICogQHBhcmFtIGVycm9yIEh0dHAgcmVzcG9uc2UgZXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqICAtIGhpZGVNZXNzYWdlIEhpZGVzIG1lc3NhZ2Ugb2YgZXJyb3IgKG1lc3NhZ2UgaW5jbHVkZSB1cmwsIHN0YXR1cyBhbmQgc3RhdHVzIHRleHQhKS5cbiAgICAgKiAgLSBoaWRlSGVhZGVycyBIaWRlcyBoZWFkZXJzLlxuICAgICAqICAtIGhpZGVCb2R5IEhpZGVzIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYm9keS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlLCBvcHRzPzogSHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHN0ciA9IG9wdHM/LmhpZGVNZXNzYWdlID8gJycgOiBgJHtlcnJvci5tZXNzYWdlfVxcbmA7IC8vIG1lc3NhZ2Ugc2hvdWxkIGFscmVhZHkgaW5jbHVkZSB1cmwsIHN0YXR1cywgZXRjLlxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVIZWFkZXJzKSB7XG4gICAgICAgICAgICBzdHIgKz0gYEh0dHAgUmVzcG9uc2UgSGVhZGVyczogJHtlcnJvci5oZWFkZXJzLmtleXMoKS5yZWR1Y2UoKGFjYywga2V5KSA9PiBgJHthY2N9WyR7a2V5fTogJHtlcnJvci5oZWFkZXJzLmdldChrZXkpfV1gLCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVCb2R5KSB7XG4gICAgICAgICAgICBzdHIgKz0gYFxcbkh0dHAgUmVzcG9uc2UgQm9keTogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5lcnJvcil9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVycm9yIHRvIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqIC0gaGlkZU1lc3NhZ2UgSGlkZXMgbWVzc2FnZSBvZiBlcnJvci5cbiAgICAgKiAtIGhpZGVOYW1lIEhpZGVzIGVycm9yIG5hbWUuXG4gICAgICogLSBoaWRlQ2F1c2UgSGlkZXMgY2F1c2Ugb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQsIHNlZSBAbGluayhlcnJvckNhdXNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAgICAgKiAtIGhpZGVTdGFjayBIaWRlcyBzdGFjayBvZiBhbiBlcnJvciAoaWYgcHJlc2VudCkuXG4gICAgICogLSBoaWRlRGV0YWlscyBIaWRlcyBKU09OIGRldGFpbCdzIHJlcHJlc2VudGF0aW9uIG9mIGVycm9yIChpZiBwcmVzZW50KS5cbiAgICAgKiAtIGhpZGVMb2NhdGlvbiBIaWRlcyBsb2NhdGlvbiAoVVJMKSB3aGVyZSBlcnJvciB3YXMgdGhyb3duLlxuICAgICAqIC0gaGlkZUh0dHAgSGlkZXMgaHR0cCBlcnJvciBwb3J0aW9uIG9mIGVycm9yIGlmIGh0dHAgZXJyb3IgcmVzcG9uc2UgKHNlZSBAbGluayhodHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKSBmb3Igb3RoZXIgb3B0aW9ucykuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlcnJvclRvU3RyaW5nKGVycm9yOiBFcnJvciwgb3B0cz86IEVycm9yVG9TdHJpbmdPcHRpb25zVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEFDb21tb25zRXJyb3JCYXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gRXJyb3JVdGlsLmNvbW1vbnNFcnJvclRvU3RyaW5nKGVycm9yLCBvcHRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gRXJyb3JVdGlsLmh0dHBFcnJvclJlc3BvbnNlVG9TdHJpbmcoZXJyb3IsIG9wdHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RyQmxvY2tzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoIW9wdHM/LmhpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IubmFtZSkge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goYEVycm9yIG5hbWU6ICR7ZXJyb3IubmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVDYXVzZSkge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goRXJyb3JVdGlsLmVycm9yQ2F1c2VUb1N0cmluZyhlcnJvciwgb3B0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZVN0YWNrICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChgU3RhY2sgdHJhY2U6XFxuJHtlcnJvci5zdGFja31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHJCbG9ja3MuZmlsdGVyKHMgPT4gcy50cmltKCkubGVuZ3RoID4gMCkuam9pbignXFxuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbW9ucyBlcnJvciB0byBzdHJpbmcuXG4gICAgICogQHBhcmFtIGVycm9yIENvbW1vbnMgZXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqIC0gaGlkZU1lc3NhZ2UgSGlkZXMgbWVzc2FnZSBvZiBlcnJvci5cbiAgICAgKiAtIGhpZGVOYW1lIEhpZGVzIGVycm9yIG5hbWUuXG4gICAgICogLSBoaWRlQ2F1c2UgSGlkZXMgY2F1c2Ugb2YgYW4gZXJyb3IgKGlmIHByZXNlbnQsIHNlZSBAbGluayhlcnJvckNhdXNlVG9TdHJpbmcpIGZvciBvdGhlciBvcHRpb25zKS5cbiAgICAgKiAtIGhpZGVTdGFjayBIaWRlcyBzdGFjayBvZiBhbiBlcnJvciAoaWYgcHJlc2VudCkuXG4gICAgICogLSBoaWRlRGV0YWlscyBIaWRlcyBKU09OIGRldGFpbCdzIHJlcHJlc2VudGF0aW9uIG9mIGVycm9yIChpZiBwcmVzZW50KS5cbiAgICAgKiAtIGhpZGVMb2NhdGlvbiBIaWRlcyBsb2NhdGlvbiAoVVJMKSB3aGVyZSBlcnJvciB3YXMgdGhyb3duLlxuICAgICAqIC0gaGlkZUh0dHAgSGlkZXMgaHR0cCBlcnJvciBwb3J0aW9uIG9mIGVycm9yIGlmIGh0dHAgZXJyb3IgcmVzcG9uc2UgKHNlZSBAbGluayhodHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKSBmb3Igb3RoZXIgb3B0aW9ucykuXG4gICAgICogLSBoaWRlSXRlbXMgSGlkZXMgYWxsIGl0ZW0gaW5mb3JtYXRpb24gKGh0dHAgYm9keSwgYWN0aW9uIGNvbnRleHQgZGF0YSkuXG4gICAgICogLSBoaWRlQWN0aW9uRGF0YSBTZWUgQGxpbmsoY29tbW9uc0FjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nKSBmb3IgYWRkaXRpb25hbCBpbmZvLlxuICAgICAqIC0gaGlkZVF1ZXJ5UGFyYW1zIFNlZSBAbGluayhjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcpIGZvciBhZGRpdGlvbmFsIGluZm8uXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb21tb25zRXJyb3JUb1N0cmluZyhlcnJvcjogQUNvbW1vbnNFcnJvckJhc2UsIG9wdHM/OiBFcnJvclRvU3RyaW5nT3B0aW9uc1R5cGUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdHJCbG9ja3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmICghb3B0cz8uaGlkZU1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGAke2Vycm9yLm1lc3NhZ2V9JHtlcnJvci5tZXNzYWdlQ29kZSA/IGAgKGNvZGU6ICR7ZXJyb3IubWVzc2FnZUNvZGV9KWAgOiAnJ31gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVOYW1lKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChgRXJyb3IgbmFtZTogJHtlcnJvci5uYW1lID8/IGVycm9yLnR5cGV9ICR7ZXJyb3IubmFtZSA/IGAoJHtlcnJvci50eXBlfSlgIDogJyd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlTG9jYXRpb24gJiYgZXJyb3IubG9jYXRpb24pIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKGBMb2NhdGlvbjogJHtlcnJvci5sb2NhdGlvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpc0h0dHAgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlSHR0cCAmJiBlcnJvciBpbnN0YW5jZW9mIENvbW1vbnNIdHRwRXJyb3IpIHtcbiAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKFxuICAgICAgICAgICAgICAgIEVycm9yVXRpbC5odHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nKGVycm9yLmh0dHBFcnJvciwge1xuICAgICAgICAgICAgICAgICAgICBoaWRlQm9keTogb3B0cz8uaGlkZUl0ZW1zIHx8IG9wdHM/LmhpZGVCb2R5LFxuICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyczogb3B0cz8uaGlkZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVNZXNzYWdlOiBlcnJvci5tZXNzYWdlLmluZGV4T2YoZXJyb3IuaHR0cEVycm9yLm1lc3NhZ2UpID49IDBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlzSHR0cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yLnR5cGUgPT09ICdDb21tb25zQWN0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IGVycm9yIGFzIHVua25vd24gYXMgSUNvbW1vbnNBY3Rpb25FcnJvcjtcbiAgICAgICAgICAgIGlmIChhY3Rpb25FcnJvci5hY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goRXJyb3JVdGlsLmNvbW1vbnNBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZyhhY3Rpb25FcnJvciwgb3B0cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlSHR0cCAmJiBhY3Rpb25FcnJvci5odHRwRXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHN0ckJsb2Nrcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBFcnJvclV0aWwuaHR0cEVycm9yUmVzcG9uc2VUb1N0cmluZyhhY3Rpb25FcnJvci5odHRwRXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb2R5OiBvcHRzPy5oaWRlSXRlbXMgfHwgb3B0cz8uaGlkZUJvZHksXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlSGVhZGVyczogb3B0cz8uaGlkZUhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlTWVzc2FnZTogZXJyb3IubWVzc2FnZS5pbmRleE9mKGFjdGlvbkVycm9yLmh0dHBFcnJvci5tZXNzYWdlKSA+PSAwXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpc0h0dHAgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRzPy5oaWRlRGV0YWlscyAmJiBlcnJvci5kZXRhaWxzKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChgRGV0YWlsczogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5kZXRhaWxzKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHM/LmhpZGVDYXVzZSAmJiAoIWlzSHR0cCB8fCAhKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSkge1xuICAgICAgICAgICAgc3RyQmxvY2tzLnB1c2goRXJyb3JVdGlsLmVycm9yQ2F1c2VUb1N0cmluZyhlcnJvciwgb3B0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cz8uaGlkZVN0YWNrICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICBzdHJCbG9ja3MucHVzaChgU3RhY2sgdHJhY2U6XFxuJHtlcnJvci5zdGFja31gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHJCbG9ja3MuZmlsdGVyKHMgPT4gcy50cmltKCkubGVuZ3RoID4gMCkuam9pbignXFxuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGVzIGNvbW1vbnMgYWN0aW9uIGVycm9yIGluZm8gZnJvbSBjb250ZXh0IGFzIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZXJyb3IgQ29tbW9ucyBhY3Rpb24gZXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqIC0gaGlkZUl0ZW1zIEhpZGVzIGFsbCBpdGVtIHJlbGF0ZWQgaW5mb3JtYXRpb24gKGl0ZW0sIGZvcm0gaXRlbSwgc3VibWl0IGl0ZW0sIC4uLikuXG4gICAgICogLSBoaWRlQWN0aW9uRGF0YSBIaWRlcyBhY3Rpb24gZGF0YS5cbiAgICAgKiAtIGhpZGVRdWVyeVBhcmFtcyBIaWRlcyBxdWVyeSBwYXJhbXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBjb21tb25zQWN0aW9uRXJyb3JDb250ZXh0VG9TdHJpbmcoZXJyb3I6IElDb21tb25zQWN0aW9uRXJyb3IsIG9wdHM/OiBBY3Rpb25FcnJvckNvbnRleHRUb1N0cmluZ09wdGlvbnNUeXBlKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHBhcmFtc01lc3NhZ2UgPSAnJztcbiAgICAgICAgaWYgKGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtpdGVtSWQ6ICR7ZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLml0ZW1JZH1dYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0cz8uaGlkZUl0ZW1zICYmIGVycm9yLmFjdGlvbkNvbnRleHQ/LnBhcmFtZXRlcnMuaXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtpdGVtOiAke1N0cmluZ1V0aWwuc3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5pdGVtKX1dYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0cz8uaGlkZUFjdGlvbkRhdGEgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5hY3Rpb25EYXRhKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zTWVzc2FnZSArPSBPYmplY3QuZW50cmllcyhlcnJvci5hY3Rpb25Db250ZXh0Py5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBgJHthY2N9W2FjdGlvbkRhdGEgJHtrZXl9OiAke1N0cmluZ1V0aWwuc3RyaW5naWZ5KHZhbHVlKX1dYCxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlUXVlcnlQYXJhbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5kYXRhTGlzdFBhcmFtcykge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtkYXRhTGlzdFBhcmFtczogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuZGF0YUxpc3RQYXJhbXMpfV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlSXRlbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5mb3JtSXRlbSkge1xuICAgICAgICAgICAgICAgIHBhcmFtc01lc3NhZ2UgKz0gYFtmb3JtSXRlbTogJHtTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5hY3Rpb25Db250ZXh0LnBhcmFtZXRlcnMuZm9ybUl0ZW0pfV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRzPy5oaWRlSXRlbXMgJiYgZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5zdWJtaXRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbZm9ybUl0ZW06ICR7U3RyaW5nVXRpbC5zdHJpbmdpZnkoZXJyb3IuYWN0aW9uQ29udGV4dC5wYXJhbWV0ZXJzLnN1Ym1pdFJlc3VsdCl9XWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IuYWN0aW9uQ29udGV4dD8ucGFyYW1ldGVycy5sb2NhbGUpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNNZXNzYWdlICs9IGBbbG9jYWxlOiAke1N0cmluZ1V0aWwuc3RyaW5naWZ5KGVycm9yLmFjdGlvbkNvbnRleHQucGFyYW1ldGVycy5sb2NhbGUpfV1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV3JpdGVzIGNhdXNlIG9mIGFuIGVycm9yIGFzIHN0cmluZy5cbiAgICAgKiBAcGFyYW0gZXJyb3IgRXJyb3IuXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBmb3IgaGlkaW5nIHBhcnRzIG9mIGVycm9yOlxuICAgICAqIC0gY2F1c2VPbkVycm9yT25seSBQcmludHMgb25seSBpZiBjYXVzZSBpcyBpbnN0YW5jZSBvZiBlcnJvci5cbiAgICAgKiAtIGNhdXNlQXNKc29uIFByaW50IGVycm9yIGNhdXNlIGFzIGEgSlNPTiAoYnkgZGVmYXVsdCwgaWYgZXJyb3Igb25seSBtZXNzYWdlIGFuZCBuYW1lIHdpbGwgYmUgcHJpbnRlZCkuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBlcnJvckNhdXNlVG9TdHJpbmcoZXJyb3I6IEVycm9yLCBvcHRzPzogRXJyb3JDYXVzZVRvU3RyaW5nT3B0aW9uc1R5cGUpOiBzdHJpbmcge1xuICAgICAgICAvLyBpZiBhbHJlYWR5IGxvZ2dlZCBhcyBodHRwIGVycm9yLCBjaGVjayB0aGF0IGNhdXNlIGlzIG5vdCBhbHNvIGh0dHAgZXJyb3IgKGNhdXNlIGl0IGlzIHVzdWFsbHkgZHVwbGljYXRlZClcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlICYmICghb3B0cz8uY2F1c2VPbkVycm9yT25seSB8fCBlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZ5ID0gb3B0cz8uY2F1c2VBc0pzb24gfHwgIShlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKTtcbiAgICAgICAgICAgIGlmICghb3B0cz8uY2F1c2VPbkVycm9yT25seSB8fCBlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ0NhdXNlZCBieTogJyArXG4gICAgICAgICAgICAgICAgICAgIChzdHJpbmdpZnkgPyBTdHJpbmdVdGlsLnN0cmluZ2lmeShlcnJvci5jYXVzZSkgOiBgJHsoZXJyb3IuY2F1c2UgYXMgRXJyb3IpLm1lc3NhZ2V9JHsoZXJyb3IuY2F1c2UgYXMgRXJyb3IpLm5hbWUgPyBgICgkeyhlcnJvci5jYXVzZSBhcyBFcnJvcikubmFtZX0pYCA6ICcnfWApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBFcnJvclRvU3RyaW5nT3B0aW9uc1R5cGUgPSBFcnJvclRvU3RyaW5nT3B0aW9uc0Jhc2VUeXBlICZcbiAgICBIdHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nT3B0aW9uc1R5cGUgJlxuICAgIEFjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nT3B0aW9uc1R5cGUgJlxuICAgIEVycm9yQ2F1c2VUb1N0cmluZ09wdGlvbnNUeXBlICYge1xuICAgICAgICBoaWRlRGV0YWlscz86IGJvb2xlYW47XG4gICAgICAgIGhpZGVMb2NhdGlvbj86IGJvb2xlYW47XG4gICAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvclRvU3RyaW5nT3B0aW9uc0Jhc2VUeXBlIHtcbiAgICBoaWRlTmFtZT86IGJvb2xlYW47XG4gICAgaGlkZVN0YWNrPzogYm9vbGVhbjtcbiAgICBoaWRlQ2F1c2U/OiBib29sZWFuO1xuICAgIGhpZGVIdHRwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwRXJyb3JSZXNwb25zZVRvU3RyaW5nT3B0aW9uc1R5cGUge1xuICAgIGhpZGVNZXNzYWdlPzogYm9vbGVhbjtcbiAgICBoaWRlSGVhZGVycz86IGJvb2xlYW47XG4gICAgaGlkZUJvZHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkVycm9yQ29udGV4dFRvU3RyaW5nT3B0aW9uc1R5cGUge1xuICAgIGhpZGVJdGVtcz86IGJvb2xlYW47XG4gICAgaGlkZUFjdGlvbkRhdGE/OiBib29sZWFuO1xuICAgIGhpZGVRdWVyeVBhcmFtcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JDYXVzZVRvU3RyaW5nT3B0aW9uc1R5cGUge1xuICAgIGNhdXNlT25FcnJvck9ubHk/OiBib29sZWFuO1xuICAgIGNhdXNlQXNKc29uPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { CommonsInternalError } from '../error/error.model';
2
- import { PermissionTypeEnum } from './permissions.model';
3
- export class PermissionUtil {
4
- static isPermitted(permissions, userRoles) {
5
- switch (permissions.authorizationType) {
6
- case PermissionTypeEnum.Rbac:
7
- return PermissionUtil.isRbacPermitted(permissions, userRoles);
8
- default:
9
- throw new CommonsInternalError(`Permission type "${permissions.authorizationType}" not implemented`);
10
- }
11
- }
12
- static isRbacPermitted(permissions, userRoles) {
13
- return permissions.roles.some(prg => prg.every(pr => userRoles.indexOf(pr) > -1));
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvc2VjdXJpdHkvcGVybWlzc2lvbi51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBZSxrQkFBa0IsRUFBYyxNQUFNLHFCQUFxQixDQUFDO0FBRWxGLE1BQU0sT0FBTyxjQUFjO0lBQ2hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBeUIsRUFBRSxTQUF3QjtRQUN6RSxRQUFRLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTtZQUNuQyxLQUFLLGtCQUFrQixDQUFDLElBQUk7Z0JBQ3hCLE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQyxXQUFnQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZGO2dCQUNJLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvQkFBb0IsV0FBVyxDQUFDLGlCQUFpQixtQkFBbUIsQ0FBQyxDQUFDO1NBQzVHO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBOEIsRUFBRSxTQUF3QjtRQUNsRixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3J9IGZyb20gJy4uL2Vycm9yL2Vycm9yLm1vZGVsJztcbmltcG9ydCB7QVBlcm1pc3Npb25zLCBQZXJtaXNzaW9uVHlwZUVudW0sIFBlcm1pc3Npb25zfSBmcm9tICcuL3Blcm1pc3Npb25zLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25VdGlsIHtcbiAgICBwdWJsaWMgc3RhdGljIGlzUGVybWl0dGVkKHBlcm1pc3Npb25zOiBBUGVybWlzc2lvbnMsIHVzZXJSb2xlczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgICAgICBzd2l0Y2ggKHBlcm1pc3Npb25zLmF1dGhvcml6YXRpb25UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIFBlcm1pc3Npb25UeXBlRW51bS5SYmFjOlxuICAgICAgICAgICAgICAgIHJldHVybiBQZXJtaXNzaW9uVXRpbC5pc1JiYWNQZXJtaXR0ZWQocGVybWlzc2lvbnMgYXMgUGVybWlzc2lvbnMuUm9sZXMsIHVzZXJSb2xlcyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgUGVybWlzc2lvbiB0eXBlIFwiJHtwZXJtaXNzaW9ucy5hdXRob3JpemF0aW9uVHlwZX1cIiBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNSYmFjUGVybWl0dGVkKHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucy5Sb2xlcywgdXNlclJvbGVzOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwZXJtaXNzaW9ucy5yb2xlcy5zb21lKHByZyA9PiBwcmcuZXZlcnkocHIgPT4gdXNlclJvbGVzLmluZGV4T2YocHIpID4gLTEpKTtcbiAgICB9XG59XG4iXX0=
@@ -1,136 +0,0 @@
1
- export class DateUtil {
2
- static { this.NG_PRIME_FORMAT_SUPPORTED = [/d{1,2}/g, /E{1,5}/g, /c{1,5}/g, /M{1,5}/g, /L{1,5}/g, /y{1,4}/g, /Y{1,4}/g]; }
3
- static { this.NG_PRIME_FORMAT_OTHER = [
4
- /G{1,5}/g,
5
- /w{1,2}/g,
6
- /W/g,
7
- /a{1,5}/g,
8
- /B{1,5}/g,
9
- /b{1,5}/g,
10
- /h{1,2}/g,
11
- /H{1,2}/g,
12
- /m{1,2}/g,
13
- /s{1,2}/g,
14
- /S{1,3}/g,
15
- /z{1,4}/g,
16
- /Z{1,5}/g,
17
- /O{1,4}/g
18
- ]; }
19
- static { this.NG_PRIME_FORMAT_MAP = {
20
- // days
21
- d: 'd',
22
- dd: 'dd',
23
- E: 'D',
24
- EE: 'D',
25
- EEE: 'D',
26
- EEEE: 'DD',
27
- EEEEE: 'D',
28
- EEEEEE: 'D',
29
- c: 'd',
30
- cc: 'dd',
31
- ccc: 'D',
32
- cccc: 'DD',
33
- ccccc: 'D',
34
- cccccc: 'D',
35
- // months
36
- M: 'm',
37
- MM: 'mm',
38
- MMM: 'M',
39
- MMMM: 'MM',
40
- MMMMM: 'M',
41
- L: 'm',
42
- LL: 'mm',
43
- LLL: 'M',
44
- LLLL: 'MM',
45
- LLLLL: 'M',
46
- // year
47
- y: 'y',
48
- yy: 'y',
49
- yyy: 'yy',
50
- yyyy: 'yy',
51
- Y: 'y',
52
- YY: 'y',
53
- YYY: 'yy',
54
- YYYY: 'yy'
55
- }; }
56
- static padNumber(num, size = 2) {
57
- let str = String(num);
58
- while (str.length < size) {
59
- str = '0' + str;
60
- }
61
- return str;
62
- }
63
- static toIsoString(value, type = 'date-time', dateTimeOpts = {}) {
64
- if (typeof value === 'string') {
65
- value = new Date(value);
66
- }
67
- if (typeof value === 'number') {
68
- value = new Date(value);
69
- }
70
- if (!(value instanceof Date)) {
71
- return null;
72
- }
73
- if (type === 'date') {
74
- // date only, no time part (and timezone, millis, utc does not matter ...)
75
- return value.getFullYear() + '-' + DateUtil.padNumber(value.getMonth() + 1) + '-' + DateUtil.padNumber(value.getDate());
76
- }
77
- if (dateTimeOpts.utc) {
78
- let str = value.toISOString();
79
- if (dateTimeOpts.noMillis) {
80
- const dotIdx = str.lastIndexOf('.');
81
- str = str.substring(0, dotIdx) + str.substring(dotIdx + 4, str.length);
82
- }
83
- if (dateTimeOpts.noTimezone) {
84
- str = str.substring(0, str.length - 1);
85
- }
86
- return str;
87
- }
88
- else {
89
- let base = value.getFullYear() +
90
- '-' +
91
- DateUtil.padNumber(value.getMonth() + 1) +
92
- '-' +
93
- DateUtil.padNumber(value.getDate()) +
94
- 'T' +
95
- DateUtil.padNumber(value.getHours()) +
96
- ':' +
97
- DateUtil.padNumber(value.getMinutes()) +
98
- ':' +
99
- DateUtil.padNumber(value.getSeconds());
100
- if (!dateTimeOpts.noMillis) {
101
- base += '.' + DateUtil.padNumber(value.getMilliseconds());
102
- }
103
- if (!dateTimeOpts.noTimezone) {
104
- const tzo = -value.getTimezoneOffset(), dif = tzo >= 0 ? '+' : '-';
105
- base = base + (dif + DateUtil.padNumber(Math.floor(Math.abs(tzo) / 60)) + ':' + DateUtil.padNumber(Math.abs(tzo) % 60));
106
- }
107
- return base;
108
- }
109
- }
110
- static fromAngularToPrimeDateFormat(ngDateFormat) {
111
- let primeDateFormat = ngDateFormat;
112
- for (const regex of DateUtil.NG_PRIME_FORMAT_OTHER) {
113
- primeDateFormat = primeDateFormat.replace(regex, ' ');
114
- }
115
- for (const regex of DateUtil.NG_PRIME_FORMAT_SUPPORTED) {
116
- const matches = [...primeDateFormat.matchAll(regex)].reverse();
117
- for (const match of matches) {
118
- if (match.index) {
119
- const matchStr = match[0];
120
- const replacement = DateUtil.NG_PRIME_FORMAT_MAP[matchStr] ?? match[0];
121
- primeDateFormat = primeDateFormat.substring(0, match.index) + replacement + primeDateFormat.substring(match.index + matchStr.length);
122
- }
123
- }
124
- }
125
- primeDateFormat = primeDateFormat.replace(/\s+\W\s+/g, ' ');
126
- primeDateFormat = primeDateFormat.replace(/\s\s+/g, ' ');
127
- return primeDateFormat.trim();
128
- }
129
- static fromAngularDateFormatHasTime(ngDateFormat) {
130
- return /[hHmsS]/.test(ngDateFormat);
131
- }
132
- static fromAngularDateFormatHasSeconds(ngDateFormat) {
133
- return /[sS]/.test(ngDateFormat);
134
- }
135
- }
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9zcmMvdXRpbHMvZGF0ZS51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxRQUFRO2FBQ08sOEJBQXlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUMxRywwQkFBcUIsR0FBRztRQUM1QyxTQUFTO1FBQ1QsU0FBUztRQUNULElBQUk7UUFDSixTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztRQUNULFNBQVM7UUFDVCxTQUFTO1FBQ1QsU0FBUztLQUNaLENBQUM7YUFDc0Isd0JBQW1CLEdBQUc7UUFDMUMsT0FBTztRQUNQLENBQUMsRUFBRSxHQUFHO1FBQ04sRUFBRSxFQUFFLElBQUk7UUFDUixDQUFDLEVBQUUsR0FBRztRQUNOLEVBQUUsRUFBRSxHQUFHO1FBQ1AsR0FBRyxFQUFFLEdBQUc7UUFDUixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7UUFDWCxDQUFDLEVBQUUsR0FBRztRQUNOLEVBQUUsRUFBRSxJQUFJO1FBQ1IsR0FBRyxFQUFFLEdBQUc7UUFDUixJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7UUFDWCxTQUFTO1FBQ1QsQ0FBQyxFQUFFLEdBQUc7UUFDTixFQUFFLEVBQUUsSUFBSTtRQUNSLEdBQUcsRUFBRSxHQUFHO1FBQ1IsSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsR0FBRztRQUNWLENBQUMsRUFBRSxHQUFHO1FBQ04sRUFBRSxFQUFFLElBQUk7UUFDUixHQUFHLEVBQUUsR0FBRztRQUNSLElB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QUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBd0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkYsZUFBZSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDeEk7YUFDSjtTQUNKO1FBQ0QsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVELGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV6RCxPQUFPLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUFDLFlBQW9CO1FBQzNELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLCtCQUErQixDQUFDLFlBQW9CO1FBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgdG9Jc29TdHJpbmdUeXBlT3B0VHlwZSA9ICdkYXRlJyB8ICdkYXRlLXRpbWUnIHwgJ2RhdGVUaW1lJztcbmV4cG9ydCB0eXBlIHRvSXNvU3RyaW5nRGF0ZVRpbWVPcHRzVHlwZSA9IHt1dGM/OiBib29sZWFuOyBub1RpbWV6b25lPzogYm9vbGVhbjsgbm9NaWxsaXM/OiBib29sZWFufTtcblxuZXhwb3J0IGNsYXNzIERhdGVVdGlsIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOR19QUklNRV9GT1JNQVRfU1VQUE9SVEVEID0gWy9kezEsMn0vZywgL0V7MSw1fS9nLCAvY3sxLDV9L2csIC9NezEsNX0vZywgL0x7MSw1fS9nLCAveXsxLDR9L2csIC9ZezEsNH0vZ107XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTkdfUFJJTUVfRk9STUFUX09USEVSID0gW1xuICAgICAgICAvR3sxLDV9L2csXG4gICAgICAgIC93ezEsMn0vZyxcbiAgICAgICAgL1cvZyxcbiAgICAgICAgL2F7MSw1fS9nLFxuICAgICAgICAvQnsxLDV9L2csXG4gICAgICAgIC9iezEsNX0vZyxcbiAgICAgICAgL2h7MSwyfS9nLFxuICAgICAgICAvSHsxLDJ9L2csXG4gICAgICAgIC9tezEsMn0vZyxcbiAgICAgICAgL3N7MSwyfS9nLFxuICAgICAgICAvU3sxLDN9L2csXG4gICAgICAgIC96ezEsNH0vZyxcbiAgICAgICAgL1p7MSw1fS9nLFxuICAgICAgICAvT3sxLDR9L2dcbiAgICBdO1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5HX1BSSU1FX0ZPUk1BVF9NQVAgPSB7XG4gICAgICAgIC8vIGRheXNcbiAgICAgICAgZDogJ2QnLFxuICAgICAgICBkZDogJ2RkJyxcbiAgICAgICAgRTogJ0QnLFxuICAgICAgICBFRTogJ0QnLFxuICAgICAgICBFRUU6ICdEJyxcbiAgICAgICAgRUVFRTogJ0REJyxcbiAgICAgICAgRUVFRUU6ICdEJyxcbiAgICAgICAgRUVFRUVFOiAnRCcsXG4gICAgICAgIGM6ICdkJyxcbiAgICAgICAgY2M6ICdkZCcsXG4gICAgICAgIGNjYzogJ0QnLFxuICAgICAgICBjY2NjOiAnREQnLFxuICAgICAgICBjY2NjYzogJ0QnLFxuICAgICAgICBjY2NjY2M6ICdEJyxcbiAgICAgICAgLy8gbW9udGhzXG4gICAgICAgIE06ICdtJyxcbiAgICAgICAgTU06ICdtbScsXG4gICAgICAgIE1NTTogJ00nLFxuICAgICAgICBNTU1NOiAnTU0nLFxuICAgICAgICBNTU1NTTogJ00nLFxuICAgICAgICBMOiAnbScsXG4gICAgICAgIExMOiAnbW0nLFxuICAgICAgICBMTEw6ICdNJyxcbiAgICAgICAgTExMTDogJ01NJyxcbiAgICAgICAgTExMTEw6ICdNJyxcbiAgICAgICAgLy8geWVhclxuICAgICAgICB5OiAneScsXG4gICAgICAgIHl5OiAneScsXG4gICAgICAgIHl5eTogJ3l5JyxcbiAgICAgICAgeXl5eTogJ3l5JyxcbiAgICAgICAgWTogJ3knLFxuICAgICAgICBZWTogJ3knLFxuICAgICAgICBZWVk6ICd5eScsXG4gICAgICAgIFlZWVk6ICd5eSdcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcGFkTnVtYmVyKG51bTogbnVtYmVyLCBzaXplID0gMikge1xuICAgICAgICBsZXQgc3RyID0gU3RyaW5nKG51bSk7XG4gICAgICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgc3RyID0gJzAnICsgc3RyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB0b0lzb1N0cmluZyh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSwgdHlwZT86ICdkYXRlJyk6IHN0cmluZztcbiAgICBwdWJsaWMgc3RhdGljIHRvSXNvU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLCB0eXBlOiAnZGF0ZS10aW1lJyB8ICdkYXRlVGltZScsIGRhdGVUaW1lT3B0cz86IHRvSXNvU3RyaW5nRGF0ZVRpbWVPcHRzVHlwZSk6IHN0cmluZztcbiAgICBwdWJsaWMgc3RhdGljIHRvSXNvU3RyaW5nKHZhbHVlOiB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93biwgdHlwZT86ICdkYXRlJyk6IG51bGw7XG4gICAgcHVibGljIHN0YXRpYyB0b0lzb1N0cmluZyh2YWx1ZTogdW5kZWZpbmVkIHwgbnVsbCB8IHVua25vd24sIHR5cGU6ICdkYXRlLXRpbWUnIHwgJ2RhdGVUaW1lJywgZGF0ZVRpbWVPcHRzPzogdG9Jc29TdHJpbmdEYXRlVGltZU9wdHNUeXBlKTogbnVsbDtcbiAgICBwdWJsaWMgc3RhdGljIHRvSXNvU3RyaW5nKHZhbHVlOiB1bmtub3duLCB0eXBlPzogdG9Jc29TdHJpbmdUeXBlT3B0VHlwZSwgZGF0ZVRpbWVPcHRzPzogdG9Jc29TdHJpbmdEYXRlVGltZU9wdHNUeXBlKTogc3RyaW5nIHwgbnVsbDtcbiAgICBwdWJsaWMgc3RhdGljIHRvSXNvU3RyaW5nKHZhbHVlOiB1bmtub3duLCB0eXBlOiB0b0lzb1N0cmluZ1R5cGVPcHRUeXBlID0gJ2RhdGUtdGltZScsIGRhdGVUaW1lT3B0czogdG9Jc29TdHJpbmdEYXRlVGltZU9wdHNUeXBlID0ge30pOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgICAvLyBkYXRlIG9ubHksIG5vIHRpbWUgcGFydCAoYW5kIHRpbWV6b25lLCBtaWxsaXMsIHV0YyBkb2VzIG5vdCBtYXR0ZXIgLi4uKVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgKyAnLScgKyBEYXRlVXRpbC5wYWROdW1iZXIodmFsdWUuZ2V0TW9udGgoKSArIDEpICsgJy0nICsgRGF0ZVV0aWwucGFkTnVtYmVyKHZhbHVlLmdldERhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVUaW1lT3B0cy51dGMpIHtcbiAgICAgICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKGRhdGVUaW1lT3B0cy5ub01pbGxpcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvdElkeCA9IHN0ci5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgZG90SWR4KSArIHN0ci5zdWJzdHJpbmcoZG90SWR4ICsgNCwgc3RyLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZVRpbWVPcHRzLm5vVGltZXpvbmUpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgYmFzZSA9XG4gICAgICAgICAgICAgICAgdmFsdWUuZ2V0RnVsbFllYXIoKSArXG4gICAgICAgICAgICAgICAgJy0nICtcbiAgICAgICAgICAgICAgICBEYXRlVXRpbC5wYWROdW1iZXIodmFsdWUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgICAgICAgICAgICAnLScgK1xuICAgICAgICAgICAgICAgIERhdGVVdGlsLnBhZE51bWJlcih2YWx1ZS5nZXREYXRlKCkpICtcbiAgICAgICAgICAgICAgICAnVCcgK1xuICAgICAgICAgICAgICAgIERhdGVVdGlsLnBhZE51bWJlcih2YWx1ZS5nZXRIb3VycygpKSArXG4gICAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgICBEYXRlVXRpbC5wYWROdW1iZXIodmFsdWUuZ2V0TWludXRlcygpKSArXG4gICAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgICBEYXRlVXRpbC5wYWROdW1iZXIodmFsdWUuZ2V0U2Vjb25kcygpKTtcblxuICAgICAgICAgICAgaWYgKCFkYXRlVGltZU9wdHMubm9NaWxsaXMpIHtcbiAgICAgICAgICAgICAgICBiYXNlICs9ICcuJyArIERhdGVVdGlsLnBhZE51bWJlcih2YWx1ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRhdGVUaW1lT3B0cy5ub1RpbWV6b25lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHpvID0gLXZhbHVlLmdldFRpbWV6b25lT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgICAgIGRpZiA9IHR6byA+PSAwID8gJysnIDogJy0nO1xuXG4gICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UgKyAoZGlmICsgRGF0ZVV0aWwucGFkTnVtYmVyKE1hdGguZmxvb3IoTWF0aC5hYnModHpvKSAvIDYwKSkgKyAnOicgKyBEYXRlVXRpbC5wYWROdW1iZXIoTWF0aC5hYnModHpvKSAlIDYwKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW5ndWxhclRvUHJpbWVEYXRlRm9ybWF0KG5nRGF0ZUZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHByaW1lRGF0ZUZvcm1hdCA9IG5nRGF0ZUZvcm1hdDtcbiAgICAgICAgZm9yIChjb25zdCByZWdleCBvZiBEYXRlVXRpbC5OR19QUklNRV9GT1JNQVRfT1RIRVIpIHtcbiAgICAgICAgICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKHJlZ2V4LCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVnZXggb2YgRGF0ZVV0aWwuTkdfUFJJTUVfRk9STUFUX1NVUFBPUlRFRCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5wcmltZURhdGVGb3JtYXQubWF0Y2hBbGwocmVnZXgpXS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2guaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hTdHIgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBEYXRlVXRpbC5OR19QUklNRV9GT1JNQVRfTUFQW21hdGNoU3RyIGFzIGtleW9mIG9iamVjdF0gPz8gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXgpICsgcmVwbGFjZW1lbnQgKyBwcmltZURhdGVGb3JtYXQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgbWF0Y2hTdHIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJpbWVEYXRlRm9ybWF0ID0gcHJpbWVEYXRlRm9ybWF0LnJlcGxhY2UoL1xccytcXFdcXHMrL2csICcgJyk7XG4gICAgICAgIHByaW1lRGF0ZUZvcm1hdCA9IHByaW1lRGF0ZUZvcm1hdC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJyk7XG5cbiAgICAgICAgcmV0dXJuIHByaW1lRGF0ZUZvcm1hdC50cmltKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQW5ndWxhckRhdGVGb3JtYXRIYXNUaW1lKG5nRGF0ZUZvcm1hdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAvW2hIbXNTXS8udGVzdChuZ0RhdGVGb3JtYXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUFuZ3VsYXJEYXRlRm9ybWF0SGFzU2Vjb25kcyhuZ0RhdGVGb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL1tzU10vLnRlc3QobmdEYXRlRm9ybWF0KTtcbiAgICB9XG59XG4iXX0=