@colijnit/sharedcomponents 1.0.64 → 1.0.65

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 (481) hide show
  1. package/README.md +24 -24
  2. package/bundles/colijnit-sharedcomponents.umd.js +10078 -9926
  3. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  4. package/colijnit-sharedcomponents.d.ts +92 -91
  5. package/colijnit-sharedcomponents.metadata.json +1 -1
  6. package/esm2015/colijnit-sharedcomponents.js +93 -92
  7. package/esm2015/lib/assets/dictionary/text.properties.js +11 -11
  8. package/esm2015/lib/businessobject/build-images-and-documentation-result.js +2 -2
  9. package/esm2015/lib/businessobject/co-document-right.bo.js +3 -3
  10. package/esm2015/lib/businessobject/drag-drop-container-element.js +2 -2
  11. package/esm2015/lib/businessobject/drag-drop-container.js +7 -7
  12. package/esm2015/lib/components/activity-list/activity-list.component.js +130 -130
  13. package/esm2015/lib/components/activity-list/activity-list.module.js +24 -24
  14. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.component.js +47 -47
  15. package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.module.js +20 -20
  16. package/esm2015/lib/components/date-planning/component/agenda/agenda-base-view.component.js +61 -61
  17. package/esm2015/lib/components/date-planning/component/agenda/agenda-day-view.component.js +36 -36
  18. package/esm2015/lib/components/date-planning/component/agenda/agenda-event.component.js +56 -56
  19. package/esm2015/lib/components/date-planning/component/agenda/agenda-events.component.js +47 -47
  20. package/esm2015/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.js +68 -68
  21. package/esm2015/lib/components/date-planning/component/agenda/agenda-header.component.js +243 -243
  22. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-cell.component.js +36 -36
  23. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.js +50 -50
  24. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view.component.js +46 -46
  25. package/esm2015/lib/components/date-planning/component/agenda/agenda-month-view.component.js +61 -61
  26. package/esm2015/lib/components/date-planning/component/agenda/agenda-select-event.component.js +39 -39
  27. package/esm2015/lib/components/date-planning/component/agenda/agenda-view.component.js +35 -35
  28. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-select-view.component.js +64 -64
  29. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-view.component.js +48 -48
  30. package/esm2015/lib/components/date-planning/component/agenda/view-select.component.js +42 -42
  31. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-months.component.js +34 -34
  32. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-years.component.js +48 -48
  33. package/esm2015/lib/components/date-planning/component/calendar/calendar-header.component.js +107 -107
  34. package/esm2015/lib/components/date-planning/component/calendar/calendar-view.component.js +178 -178
  35. package/esm2015/lib/components/date-planning/component/calendar/calendar.component.js +34 -34
  36. package/esm2015/lib/components/date-planning/date-planning.component.js +113 -113
  37. package/esm2015/lib/components/date-planning/date-planning.module.js +63 -63
  38. package/esm2015/lib/components/docsign/component/signature/signature.component.js +75 -75
  39. package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +44 -44
  40. package/esm2015/lib/components/docsign/docsign.component.js +242 -242
  41. package/esm2015/lib/components/docsign/docsign.module.js +23 -23
  42. package/esm2015/lib/components/file-upload/file-upload.component.js +189 -189
  43. package/esm2015/lib/components/file-upload/file-upload.module.js +25 -25
  44. package/esm2015/lib/components/file-upload-popup/file-upload-popup.component.js +397 -397
  45. package/esm2015/lib/components/file-upload-popup/file-upload-popup.module.js +30 -30
  46. package/esm2015/lib/components/files-upload/components/base-file-upload.component.js +469 -469
  47. package/esm2015/lib/components/files-upload/components/drag-drop-container.component.js +115 -115
  48. package/esm2015/lib/components/files-upload/files-upload.component.js +131 -131
  49. package/esm2015/lib/components/files-upload/files-upload.module.js +47 -47
  50. package/esm2015/lib/components/image-display/image-display.component.js +36 -36
  51. package/esm2015/lib/components/image-display/image-display.module.js +23 -23
  52. package/esm2015/lib/components/key-pad/key-pad.component.js +200 -200
  53. package/esm2015/lib/components/key-pad/key-pad.module.js +22 -22
  54. package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +74 -74
  55. package/esm2015/lib/components/layout-switcher/layout-switcher.module.js +21 -21
  56. package/esm2015/lib/components/linear-gauge/co-linear-gauge.component.js +59 -59
  57. package/esm2015/lib/components/linear-gauge/co-linear-gauge.module.js +19 -19
  58. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.component.js +89 -89
  59. package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.module.js +21 -21
  60. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.js +79 -79
  61. package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.js +21 -21
  62. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.js +85 -85
  63. package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.js +21 -21
  64. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.js +64 -64
  65. package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.js +26 -26
  66. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.js +40 -40
  67. package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.js +23 -23
  68. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.js +61 -61
  69. package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.js +28 -28
  70. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.component.js +38 -38
  71. package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.module.js +21 -21
  72. package/esm2015/lib/components/send-method-dialog/model/email-address-viewmodel.js +7 -7
  73. package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +258 -258
  74. package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +35 -35
  75. package/esm2015/lib/components/send-method-dialog/send-method-params.interface.js +2 -2
  76. package/esm2015/lib/components/send-method-dialog/service/send-method.service.js +59 -59
  77. package/esm2015/lib/components/simple-tags/simple-tags.component.js +229 -229
  78. package/esm2015/lib/components/simple-tags/simple-tags.module.js +26 -26
  79. package/esm2015/lib/components/statusbar/statusbar-popup.component.js +97 -97
  80. package/esm2015/lib/components/statusbar/statusbar.component.js +81 -81
  81. package/esm2015/lib/components/statusbar/statusbar.module.js +27 -27
  82. package/esm2015/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.js +47 -47
  83. package/esm2015/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.js +47 -47
  84. package/esm2015/lib/components/stock/components/order-stock-history/order-stock-history.component.js +47 -47
  85. package/esm2015/lib/components/stock/components/order-stock-tab/order-stock-tab.component.js +47 -47
  86. package/esm2015/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.js +47 -47
  87. package/esm2015/lib/components/stock/components/order-tab/order-tab.component.js +67 -67
  88. package/esm2015/lib/components/stock/components/stock-history/stock-history.component.js +53 -53
  89. package/esm2015/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.js +210 -0
  90. package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +248 -251
  91. package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +52 -52
  92. package/esm2015/lib/components/stock/components/stock-tab/stock-tab.component.js +39 -39
  93. package/esm2015/lib/components/stock/localization/translation.js +74 -72
  94. package/esm2015/lib/components/stock/stock-history-tabs/stock-history-tabs.component.js +33 -33
  95. package/esm2015/lib/components/stock/stock-information/stock-information.component.js +48 -48
  96. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +457 -457
  97. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +251 -243
  98. package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -2
  99. package/esm2015/lib/components/stock/stock-transfer/stock-change-amount.component.js +72 -72
  100. package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +160 -160
  101. package/esm2015/lib/components/stock/stock.component.js +237 -237
  102. package/esm2015/lib/components/stock/stock.module.js +82 -80
  103. package/esm2015/lib/components/stock-statusbar/stock-statusbar.component.js +23 -23
  104. package/esm2015/lib/components/stock-statusbar/stock-statusbar.module.js +19 -19
  105. package/esm2015/lib/components/tab-bar/tab-bar.component.js +90 -90
  106. package/esm2015/lib/components/tab-bar/tab-bar.module.js +21 -21
  107. package/esm2015/lib/components/tab-bar/tab.interface.js +2 -2
  108. package/esm2015/lib/components/tile-renderer/tile-render.component.js +80 -80
  109. package/esm2015/lib/components/tile-renderer/tile-render.module.js +26 -26
  110. package/esm2015/lib/decorator/input-boolean.decorator.js +34 -34
  111. package/esm2015/lib/enum/calendar-view.enum.js +9 -9
  112. package/esm2015/lib/enum/document-email-report.enum.js +18 -18
  113. package/esm2015/lib/enum/domain-multiple-name.enum.js +13 -13
  114. package/esm2015/lib/enum/file-type.js +14 -14
  115. package/esm2015/lib/enum/files-upload-config-objects.js +3 -3
  116. package/esm2015/lib/enum/gauge-color.enum.js +10 -10
  117. package/esm2015/lib/enum/icon.enum.js +49 -48
  118. package/esm2015/lib/enum/internal-param.enum.js +38 -38
  119. package/esm2015/lib/enum/keyboard-code.enum.js +32 -32
  120. package/esm2015/lib/enum/language-code.enum.js +8 -8
  121. package/esm2015/lib/enum/month.enum.js +17 -17
  122. package/esm2015/lib/enum/read-write-access-config-names.enum.js +2 -2
  123. package/esm2015/lib/enum/table-name.enum.js +86 -86
  124. package/esm2015/lib/enum/tag-category.enum.js +22 -22
  125. package/esm2015/lib/enum/tags-component-config-names.js +2 -2
  126. package/esm2015/lib/enum/thumb-three-way-state.js +19 -19
  127. package/esm2015/lib/enum/tile-size-type.js +7 -7
  128. package/esm2015/lib/enum/time-period.enum.js +11 -11
  129. package/esm2015/lib/event/co-drag-event.js +2 -2
  130. package/esm2015/lib/event/co-drop-event.js +2 -2
  131. package/esm2015/lib/interface/key-value-pair.js +2 -2
  132. package/esm2015/lib/interface/operation-callback-simple-function.js +4 -4
  133. package/esm2015/lib/localization/localization.module.js +19 -19
  134. package/esm2015/lib/localization/localize.pipe.js +26 -26
  135. package/esm2015/lib/localization/localize.service.js +30 -30
  136. package/esm2015/lib/localization/translation.js +3 -3
  137. package/esm2015/lib/model/agenda-event-per-day.model.js +6 -6
  138. package/esm2015/lib/model/agenda-event.model.js +8 -8
  139. package/esm2015/lib/model/agenda-null-objects.js +11 -11
  140. package/esm2015/lib/model/constant/all-months.js +17 -17
  141. package/esm2015/lib/model/date-range.js +5 -5
  142. package/esm2015/lib/model/day.model.js +7 -7
  143. package/esm2015/lib/model/icon-svg.js +48 -47
  144. package/esm2015/lib/model/month.model.js +11 -11
  145. package/esm2015/lib/model/send-method.js +8 -8
  146. package/esm2015/lib/model/settings.js +4 -4
  147. package/esm2015/lib/model/tag-tree-item.bo.js +16 -16
  148. package/esm2015/lib/model/time-window.bo.js +26 -26
  149. package/esm2015/lib/model/tree-object.js +15 -15
  150. package/esm2015/lib/model/week.model.js +6 -6
  151. package/esm2015/lib/model/weekday.model.js +10 -10
  152. package/esm2015/lib/pipe/array-number.pipe.js +15 -15
  153. package/esm2015/lib/pipe/file-type-image.pipe.js +51 -51
  154. package/esm2015/lib/pipe/master-pipes.js +9 -9
  155. package/esm2015/lib/pipe/ucfirst.pipe.js +16 -16
  156. package/esm2015/lib/service/dictionary.service.js +76 -76
  157. package/esm2015/lib/service/drag-drop.service.js +365 -365
  158. package/esm2015/lib/service/icon-cache.service.js +51 -51
  159. package/esm2015/lib/service/options.service.js +48 -48
  160. package/esm2015/lib/service/shared-connector.service.js +433 -433
  161. package/esm2015/lib/service/shared.service.js +60 -60
  162. package/esm2015/lib/service/stock.service.js +110 -110
  163. package/esm2015/lib/utils/array-utils.js +202 -202
  164. package/esm2015/lib/utils/calendar.utils.js +68 -68
  165. package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -2
  166. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -2
  167. package/esm2015/lib/utils/co-document-shared-field-logic.js +50 -50
  168. package/esm2015/lib/utils/date-utils.js +264 -264
  169. package/esm2015/lib/utils/enum-utils.js +128 -128
  170. package/esm2015/lib/utils/function/not-nill.function.js +5 -5
  171. package/esm2015/lib/utils/is-nill.function.js +5 -5
  172. package/esm2015/lib/utils/map-utils.js +41 -41
  173. package/esm2015/lib/utils/number-utils.js +390 -390
  174. package/esm2015/lib/utils/object-utils.js +278 -278
  175. package/esm2015/lib/utils/ref-code-utils.js +49 -49
  176. package/esm2015/lib/utils/string-utils.js +93 -93
  177. package/esm2015/public-api.js +31 -31
  178. package/fesm2015/colijnit-sharedcomponents.js +10622 -10408
  179. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  180. package/lib/assets/dictionary/text.properties.d.ts +3 -3
  181. package/lib/businessobject/build-images-and-documentation-result.d.ts +5 -5
  182. package/lib/businessobject/co-document-right.bo.d.ts +6 -6
  183. package/lib/businessobject/drag-drop-container-element.d.ts +6 -6
  184. package/lib/businessobject/drag-drop-container.d.ts +6 -6
  185. package/lib/components/access/read-write-access.scss +25 -25
  186. package/lib/components/access/style/_layout.scss +23 -23
  187. package/lib/components/access/style/_material-definition.scss +12 -12
  188. package/lib/components/access/style/_theme.scss +4 -4
  189. package/lib/components/access/style/material.scss +4 -4
  190. package/lib/components/activity-list/activity-list.component.d.ts +33 -33
  191. package/lib/components/activity-list/activity-list.module.d.ts +2 -2
  192. package/lib/components/activity-list/style/_layout.scss +68 -68
  193. package/lib/components/activity-list/style/_theme.scss +4 -4
  194. package/lib/components/activity-list/style/material.scss +4 -4
  195. package/lib/components/app-file-dropzone/app-file-dropzone.component.d.ts +14 -14
  196. package/lib/components/app-file-dropzone/app-file-dropzone.module.d.ts +2 -2
  197. package/lib/components/app-file-dropzone/style/_layout.scss +61 -61
  198. package/lib/components/app-file-dropzone/style/_theme.scss +4 -4
  199. package/lib/components/app-file-dropzone/style/material.scss +4 -4
  200. package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -21
  201. package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +7 -7
  202. package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +18 -18
  203. package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +13 -13
  204. package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -18
  205. package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +48 -48
  206. package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -9
  207. package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -8
  208. package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -7
  209. package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -10
  210. package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -12
  211. package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +12 -12
  212. package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -10
  213. package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +9 -9
  214. package/lib/components/date-planning/component/agenda/style/_layout.scss +443 -443
  215. package/lib/components/date-planning/component/agenda/style/_material-definition.scss +12 -12
  216. package/lib/components/date-planning/component/agenda/style/_theme.scss +7 -7
  217. package/lib/components/date-planning/component/agenda/style/material.scss +5 -5
  218. package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -11
  219. package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -9
  220. package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -9
  221. package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -23
  222. package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -31
  223. package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -10
  224. package/lib/components/date-planning/component/calendar/style/_layout.scss +167 -167
  225. package/lib/components/date-planning/component/calendar/style/_material-definition.scss +7 -7
  226. package/lib/components/date-planning/component/calendar/style/_theme.scss +7 -7
  227. package/lib/components/date-planning/component/calendar/style/material.scss +5 -5
  228. package/lib/components/date-planning/date-planning.component.d.ts +28 -28
  229. package/lib/components/date-planning/date-planning.module.d.ts +2 -2
  230. package/lib/components/date-planning/style/_layout.scss +45 -45
  231. package/lib/components/date-planning/style/_theme.scss +5 -5
  232. package/lib/components/date-planning/style/material.scss +7 -7
  233. package/lib/components/docsign/component/signature/signature.component.d.ts +16 -16
  234. package/lib/components/docsign/component/signature/style/_layout.scss +40 -40
  235. package/lib/components/docsign/component/signature/style/_material-definition.scss +11 -11
  236. package/lib/components/docsign/component/signature/style/_theme.scss +13 -13
  237. package/lib/components/docsign/component/signature/style/material.scss +4 -4
  238. package/lib/components/docsign/component/signatures/signatures.component.d.ts +12 -12
  239. package/lib/components/docsign/component/signatures/style/_layout.scss +13 -13
  240. package/lib/components/docsign/component/signatures/style/_material-definition.scss +1 -1
  241. package/lib/components/docsign/component/signatures/style/_theme.scss +4 -4
  242. package/lib/components/docsign/component/signatures/style/material.scss +5 -5
  243. package/lib/components/docsign/docsign.component.d.ts +94 -94
  244. package/lib/components/docsign/docsign.module.d.ts +2 -2
  245. package/lib/components/docsign/style/_layout.scss +40 -40
  246. package/lib/components/docsign/style/_material-definition.scss +12 -12
  247. package/lib/components/docsign/style/_theme.scss +12 -12
  248. package/lib/components/docsign/style/material.scss +15 -15
  249. package/lib/components/file-upload/file-upload.component.d.ts +42 -42
  250. package/lib/components/file-upload/file-upload.module.d.ts +2 -2
  251. package/lib/components/file-upload/style/_layout.scss +59 -59
  252. package/lib/components/file-upload/style/_material-definition.scss +2 -2
  253. package/lib/components/file-upload/style/_theme.scss +4 -4
  254. package/lib/components/file-upload/style/material.scss +4 -4
  255. package/lib/components/file-upload-popup/file-upload-popup.component.d.ts +75 -75
  256. package/lib/components/file-upload-popup/file-upload-popup.module.d.ts +2 -2
  257. package/lib/components/file-upload-popup/style/_layout.scss +48 -48
  258. package/lib/components/file-upload-popup/style/_material-definition.scss +2 -2
  259. package/lib/components/file-upload-popup/style/_theme.scss +5 -5
  260. package/lib/components/file-upload-popup/style/material.scss +4 -4
  261. package/lib/components/files-upload/components/base-file-upload.component.d.ts +98 -98
  262. package/lib/components/files-upload/components/drag-drop-container.component.d.ts +34 -34
  263. package/lib/components/files-upload/files-upload.component.d.ts +32 -32
  264. package/lib/components/files-upload/files-upload.module.d.ts +2 -2
  265. package/lib/components/files-upload/style/_layout.scss +49 -49
  266. package/lib/components/files-upload/style/_theme.scss +5 -5
  267. package/lib/components/files-upload/style/material.scss +4 -4
  268. package/lib/components/image-display/image-display.component.d.ts +14 -14
  269. package/lib/components/image-display/image-display.module.d.ts +2 -2
  270. package/lib/components/image-display/style/_layout.scss +56 -56
  271. package/lib/components/image-display/style/_material-definition.scss +4 -4
  272. package/lib/components/image-display/style/_theme.scss +6 -6
  273. package/lib/components/image-display/style/material.scss +3 -3
  274. package/lib/components/key-pad/key-pad.component.d.ts +38 -38
  275. package/lib/components/key-pad/key-pad.module.d.ts +2 -2
  276. package/lib/components/key-pad/style/_layout.scss +160 -160
  277. package/lib/components/key-pad/style/_material-definition.scss +19 -19
  278. package/lib/components/key-pad/style/_theme.scss +35 -35
  279. package/lib/components/key-pad/style/material.scss +4 -4
  280. package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -16
  281. package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -2
  282. package/lib/components/layout-switcher/style/_layout.scss +94 -94
  283. package/lib/components/layout-switcher/style/_material-definition.scss +16 -16
  284. package/lib/components/layout-switcher/style/_theme.scss +4 -4
  285. package/lib/components/layout-switcher/style/material.scss +6 -6
  286. package/lib/components/linear-gauge/co-linear-gauge.component.d.ts +11 -11
  287. package/lib/components/linear-gauge/co-linear-gauge.module.d.ts +2 -2
  288. package/lib/components/linear-gauge/style/_layout.scss +20 -20
  289. package/lib/components/linear-gauge/style/_material-definition.scss +8 -8
  290. package/lib/components/linear-gauge/style/_theme.scss +4 -4
  291. package/lib/components/linear-gauge/style/material.scss +6 -6
  292. package/lib/components/login/style/_layout.scss +57 -57
  293. package/lib/components/login/style/_material-definition.scss +23 -23
  294. package/lib/components/login/style/_theme.scss +7 -7
  295. package/lib/components/login/style/material.scss +4 -4
  296. package/lib/components/multi-property-toggler/multiple-property-toggler.component.d.ts +27 -27
  297. package/lib/components/multi-property-toggler/multiple-property-toggler.module.d.ts +2 -2
  298. package/lib/components/multi-property-toggler/style/_layout.scss +24 -24
  299. package/lib/components/multi-property-toggler/style/_theme.scss +4 -4
  300. package/lib/components/multi-property-toggler/style/material.scss +4 -4
  301. package/lib/components/screen-config-generator/style/_layout.scss +95 -95
  302. package/lib/components/screen-config-generator/style/_theme.scss +4 -4
  303. package/lib/components/screen-config-generator/style/material.scss +4 -4
  304. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +19 -19
  305. package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -2
  306. package/lib/components/send-method-dialog/components/layout-selection/style/_layout.scss +44 -44
  307. package/lib/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +19 -19
  308. package/lib/components/send-method-dialog/components/layout-selection/style/_theme.scss +17 -17
  309. package/lib/components/send-method-dialog/components/layout-selection/style/material.scss +4 -4
  310. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +19 -19
  311. package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -2
  312. package/lib/components/send-method-dialog/components/printer-selection/style/_layout.scss +69 -69
  313. package/lib/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +37 -37
  314. package/lib/components/send-method-dialog/components/printer-selection/style/_theme.scss +23 -23
  315. package/lib/components/send-method-dialog/components/printer-selection/style/material.scss +4 -4
  316. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -14
  317. package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -2
  318. package/lib/components/send-method-dialog/components/send-method-email/style/_layout.scss +29 -29
  319. package/lib/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +8 -8
  320. package/lib/components/send-method-dialog/components/send-method-email/style/_theme.scss +5 -5
  321. package/lib/components/send-method-dialog/components/send-method-email/style/material.scss +4 -4
  322. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.d.ts +8 -8
  323. package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.d.ts +2 -2
  324. package/lib/components/send-method-dialog/components/send-method-pdf/style/_layout.scss +25 -25
  325. package/lib/components/send-method-dialog/components/send-method-pdf/style/_material-definition.scss +5 -5
  326. package/lib/components/send-method-dialog/components/send-method-pdf/style/_theme.scss +5 -5
  327. package/lib/components/send-method-dialog/components/send-method-pdf/style/material.scss +4 -4
  328. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +13 -13
  329. package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -2
  330. package/lib/components/send-method-dialog/components/send-method-printer/style/_layout.scss +30 -30
  331. package/lib/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +5 -5
  332. package/lib/components/send-method-dialog/components/send-method-printer/style/_theme.scss +5 -5
  333. package/lib/components/send-method-dialog/components/send-method-printer/style/material.scss +4 -4
  334. package/lib/components/send-method-dialog/components/signature-button/signature-button.component.d.ts +12 -12
  335. package/lib/components/send-method-dialog/components/signature-button/signature-button.module.d.ts +2 -2
  336. package/lib/components/send-method-dialog/components/signature-button/style/_layout.scss +28 -28
  337. package/lib/components/send-method-dialog/components/signature-button/style/_material-definition.scss +8 -8
  338. package/lib/components/send-method-dialog/components/signature-button/style/_theme.scss +4 -4
  339. package/lib/components/send-method-dialog/components/signature-button/style/material.scss +4 -4
  340. package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -5
  341. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +71 -71
  342. package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -2
  343. package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -13
  344. package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -23
  345. package/lib/components/send-method-dialog/style/_layout.scss +165 -165
  346. package/lib/components/send-method-dialog/style/_material-definition.scss +48 -48
  347. package/lib/components/send-method-dialog/style/_theme.scss +33 -33
  348. package/lib/components/send-method-dialog/style/material.scss +10 -10
  349. package/lib/components/simple-tags/simple-tags.component.d.ts +31 -31
  350. package/lib/components/simple-tags/simple-tags.module.d.ts +2 -2
  351. package/lib/components/simple-tags/style/_layout.scss +272 -272
  352. package/lib/components/simple-tags/style/_material-definition.scss +39 -39
  353. package/lib/components/simple-tags/style/_theme.scss +4 -4
  354. package/lib/components/simple-tags/style/material.scss +4 -4
  355. package/lib/components/statusbar/statusbar-popup.component.d.ts +21 -21
  356. package/lib/components/statusbar/statusbar.component.d.ts +26 -26
  357. package/lib/components/statusbar/statusbar.module.d.ts +2 -2
  358. package/lib/components/statusbar/style/_layout.scss +70 -70
  359. package/lib/components/statusbar/style/_material-definition.scss +23 -23
  360. package/lib/components/statusbar/style/_theme.scss +13 -13
  361. package/lib/components/statusbar/style/material.scss +5 -5
  362. package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -9
  363. package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -9
  364. package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -9
  365. package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +11 -11
  366. package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -9
  367. package/lib/components/stock/components/order-tab/order-tab.component.d.ts +20 -20
  368. package/lib/components/stock/components/stock-history/stock-history.component.d.ts +13 -13
  369. package/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.d.ts +41 -0
  370. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +54 -52
  371. package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +11 -11
  372. package/lib/components/stock/components/stock-tab/stock-tab.component.d.ts +7 -7
  373. package/lib/components/stock/localization/translation.d.ts +71 -69
  374. package/lib/components/stock/stock-history-tabs/stock-history-tabs.component.d.ts +7 -7
  375. package/lib/components/stock/stock-information/stock-information.component.d.ts +9 -9
  376. package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +75 -75
  377. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +59 -56
  378. package/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts +4 -4
  379. package/lib/components/stock/stock-transfer/stock-change-amount.component.d.ts +18 -18
  380. package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +38 -38
  381. package/lib/components/stock/stock.component.d.ts +64 -64
  382. package/lib/components/stock/stock.module.d.ts +2 -2
  383. package/lib/components/stock/style/_layout.scss +519 -473
  384. package/lib/components/stock/style/_material-definition.scss +28 -28
  385. package/lib/components/stock/style/_theme.scss +5 -5
  386. package/lib/components/stock/style/material.scss +4 -4
  387. package/lib/components/stock-statusbar/stock-statusbar.component.d.ts +4 -4
  388. package/lib/components/stock-statusbar/stock-statusbar.module.d.ts +2 -2
  389. package/lib/components/stock-statusbar/style/_layout.scss +24 -24
  390. package/lib/components/stock-statusbar/style/material.scss +4 -4
  391. package/lib/components/tab-bar/style/_layout.scss +83 -83
  392. package/lib/components/tab-bar/style/_material-definition.scss +6 -6
  393. package/lib/components/tab-bar/style/material.scss +4 -4
  394. package/lib/components/tab-bar/tab-bar.component.d.ts +21 -21
  395. package/lib/components/tab-bar/tab-bar.module.d.ts +2 -2
  396. package/lib/components/tab-bar/tab.interface.d.ts +5 -5
  397. package/lib/components/tags/component/style/_layout.scss +67 -67
  398. package/lib/components/tags/component/style/_material-definition.scss +1 -1
  399. package/lib/components/tags/component/style/_theme.scss +8 -8
  400. package/lib/components/tags/component/style/material.scss +3 -3
  401. package/lib/components/tags/component/tag-join-label/style/_layout.scss +97 -97
  402. package/lib/components/tags/component/tag-join-label/style/_material-definition.scss +4 -4
  403. package/lib/components/tags/component/tag-join-label/style/_theme.scss +8 -8
  404. package/lib/components/tags/component/tag-join-label/style/material.scss +3 -3
  405. package/lib/components/tile-renderer/style/_layout.scss +90 -90
  406. package/lib/components/tile-renderer/style/_theme.scss +4 -4
  407. package/lib/components/tile-renderer/style/material.scss +4 -4
  408. package/lib/components/tile-renderer/tile-render.component.d.ts +31 -31
  409. package/lib/components/tile-renderer/tile-render.module.d.ts +2 -2
  410. package/lib/decorator/input-boolean.decorator.d.ts +8 -8
  411. package/lib/enum/calendar-view.enum.d.ts +7 -7
  412. package/lib/enum/document-email-report.enum.d.ts +15 -15
  413. package/lib/enum/domain-multiple-name.enum.d.ts +10 -10
  414. package/lib/enum/file-type.d.ts +7 -7
  415. package/lib/enum/files-upload-config-objects.d.ts +22 -22
  416. package/lib/enum/gauge-color.enum.d.ts +8 -8
  417. package/lib/enum/icon.enum.d.ts +47 -46
  418. package/lib/enum/internal-param.enum.d.ts +34 -34
  419. package/lib/enum/keyboard-code.enum.d.ts +30 -30
  420. package/lib/enum/language-code.enum.d.ts +6 -6
  421. package/lib/enum/month.enum.d.ts +14 -14
  422. package/lib/enum/read-write-access-config-names.enum.d.ts +4 -4
  423. package/lib/enum/table-name.enum.d.ts +84 -84
  424. package/lib/enum/tag-category.enum.d.ts +19 -19
  425. package/lib/enum/tags-component-config-names.d.ts +4 -4
  426. package/lib/enum/thumb-three-way-state.d.ts +6 -6
  427. package/lib/enum/tile-size-type.d.ts +4 -4
  428. package/lib/enum/time-period.enum.d.ts +8 -8
  429. package/lib/event/co-drag-event.d.ts +5 -5
  430. package/lib/event/co-drop-event.d.ts +8 -8
  431. package/lib/interface/key-value-pair.d.ts +4 -4
  432. package/lib/interface/operation-callback-simple-function.d.ts +4 -4
  433. package/lib/localization/localization.module.d.ts +2 -2
  434. package/lib/localization/localize.pipe.d.ts +7 -7
  435. package/lib/localization/localize.service.d.ts +7 -7
  436. package/lib/localization/translation.d.ts +2 -2
  437. package/lib/model/agenda-event-per-day.model.d.ts +5 -5
  438. package/lib/model/agenda-event.model.d.ts +17 -17
  439. package/lib/model/agenda-null-objects.d.ts +10 -10
  440. package/lib/model/constant/all-months.d.ts +2 -2
  441. package/lib/model/date-range.d.ts +7 -7
  442. package/lib/model/day.model.d.ts +8 -8
  443. package/lib/model/icon-svg.d.ts +4 -4
  444. package/lib/model/month.model.d.ts +5 -5
  445. package/lib/model/send-method.d.ts +7 -7
  446. package/lib/model/settings.d.ts +3 -3
  447. package/lib/model/tag-tree-item.bo.d.ts +18 -18
  448. package/lib/model/time-window.bo.d.ts +13 -13
  449. package/lib/model/tree-object.d.ts +8 -8
  450. package/lib/model/week.model.d.ts +4 -4
  451. package/lib/model/weekday.model.d.ts +16 -16
  452. package/lib/pipe/array-number.pipe.d.ts +4 -4
  453. package/lib/pipe/file-type-image.pipe.d.ts +12 -12
  454. package/lib/pipe/master-pipes.d.ts +1 -1
  455. package/lib/pipe/ucfirst.pipe.d.ts +4 -4
  456. package/lib/service/dictionary.service.d.ts +21 -21
  457. package/lib/service/drag-drop.service.d.ts +86 -86
  458. package/lib/service/icon-cache.service.d.ts +18 -18
  459. package/lib/service/options.service.d.ts +13 -13
  460. package/lib/service/shared-connector.service.d.ts +55 -55
  461. package/lib/service/shared.service.d.ts +18 -18
  462. package/lib/service/stock.service.d.ts +41 -41
  463. package/lib/style/_mixin.scss +14 -14
  464. package/lib/style/_variables.scss +21 -21
  465. package/lib/style/sharedcomponents-globals.scss +10 -10
  466. package/lib/utils/array-utils.d.ts +63 -63
  467. package/lib/utils/calendar.utils.d.ts +10 -10
  468. package/lib/utils/check-precision-and-scale-result.d.ts +4 -4
  469. package/lib/utils/check-within-stepped-bounds-result.d.ts +8 -8
  470. package/lib/utils/co-document-shared-field-logic.d.ts +7 -7
  471. package/lib/utils/date-utils.d.ts +44 -44
  472. package/lib/utils/enum-utils.d.ts +31 -31
  473. package/lib/utils/function/not-nill.function.d.ts +1 -1
  474. package/lib/utils/is-nill.function.d.ts +1 -1
  475. package/lib/utils/map-utils.d.ts +16 -16
  476. package/lib/utils/number-utils.d.ts +125 -125
  477. package/lib/utils/object-utils.d.ts +40 -40
  478. package/lib/utils/ref-code-utils.d.ts +10 -10
  479. package/lib/utils/string-utils.d.ts +38 -38
  480. package/package.json +1 -1
  481. package/public-api.d.ts +27 -27
@@ -1,278 +1,278 @@
1
- import { isNill } from "./is-nill.function";
2
- import { notNill } from "./function/not-nill.function";
3
- // Static utility function holder related to objects.
4
- export class ObjectUtils {
5
- /**
6
- * Returns whether all given values exist: for all values it holds that they are not null nor undefined. Short-circuit check.
7
- * @param {any} values Rest parameters with all objects to check existence for.
8
- * @returns {boolean} True if ALL given values are not null nor undefined, otherwise false (if at least one value was null or undefined)
9
- */
10
- static AllExist(...values) {
11
- let allExist = true;
12
- for (let i = 0, len = values.length; i < len; i++) {
13
- if (isNill(values[i])) {
14
- allExist = false;
15
- break;
16
- }
17
- }
18
- return allExist;
19
- }
20
- /**
21
- * Copies all properties from object 'from' to object 'to'. Overwrites properties on object 'to' if property already exists.
22
- * Does not copy functions, only properties.
23
- * @param {Object} from The source object from which to copy all properties of to the 'to' object.
24
- * @param {Object} to The object to which the properties of the 'from' object will be copied.
25
- * @param {boolean} [allowUndefined = true] wether the 'to' object may be assigned null or undefined values to any of its properties.
26
- */
27
- static CopyPropertiesFrom(from, to, allowUndefined = true) {
28
- if (!to) {
29
- to = {};
30
- }
31
- if (!from) {
32
- return to;
33
- }
34
- ObjectUtils.ForOwnProperty(from, (value, key) => {
35
- if (allowUndefined || notNill(value)) {
36
- to[key] = value;
37
- }
38
- });
39
- return to;
40
- }
41
- static DeepEquals(actual, expected) {
42
- if (actual === expected) {
43
- return true;
44
- }
45
- else if (actual instanceof Date && expected instanceof Date) {
46
- return actual.getTime() === expected.getTime();
47
- }
48
- else if (!actual || !expected || typeof actual !== "object" && typeof expected !== "object") {
49
- return actual === expected;
50
- }
51
- else {
52
- return this._objEquiv(actual, expected);
53
- }
54
- }
55
- // Performs given callback function for each own property of given plain object. Also works on string enums.
56
- static ForOwnProperty(plainObject, callback) {
57
- if (ObjectUtils.IsPlainObject(plainObject)) {
58
- for (const key in plainObject) {
59
- if (plainObject.hasOwnProperty(key) && typeof plainObject[key] !== "function") {
60
- const response = callback(plainObject[key], key);
61
- if (response === false) {
62
- break;
63
- }
64
- }
65
- }
66
- }
67
- }
68
- // Returns the class name of given argument. The argument can be an object or a class.
69
- static GetClassName(objectOrClass) {
70
- if (!objectOrClass) {
71
- return undefined;
72
- // arg was a class (or a function..)
73
- }
74
- else if (objectOrClass.constructor === Function) {
75
- return objectOrClass.name; // .. which has its readable name stores like this
76
- // else arg was an object
77
- }
78
- else {
79
- const constructorString = objectOrClass.constructor.toString();
80
- return constructorString.match(/\w+/g)[1];
81
- }
82
- }
83
- // Returns a shallow clone of the given original object. The clone is a SIMPLE OBJECT with the same properties as the original.
84
- static GetShallowClone(originalObject, objectClass) {
85
- let clonedObject = undefined;
86
- if (objectClass) {
87
- clonedObject = new objectClass();
88
- }
89
- else {
90
- clonedObject = {};
91
- }
92
- ObjectUtils.ForOwnProperty(originalObject, (value, key) => {
93
- clonedObject[key] = value;
94
- });
95
- return clonedObject;
96
- }
97
- static GetDeepClone(originalObject, circular = true) {
98
- // First create an empty object with
99
- // same prototype of our original source
100
- let propertyIndex;
101
- let descriptor;
102
- let keys;
103
- let current;
104
- let nextSource;
105
- let indexOf;
106
- const copies = [{
107
- source: originalObject,
108
- target: Object.create(Object.getPrototypeOf(originalObject))
109
- }];
110
- const cloneObject = copies[0].target;
111
- const sourceReferences = [originalObject];
112
- const targetReferences = [cloneObject];
113
- // First in, first out
114
- while (current = copies.shift()) { //NOSONAR
115
- keys = Object.getOwnPropertyNames(current.source);
116
- for (propertyIndex = 0; propertyIndex < keys.length; propertyIndex++) {
117
- // Save the source's descriptor
118
- descriptor = Object.getOwnPropertyDescriptor(current.source, keys[propertyIndex]);
119
- if (!descriptor.value || typeof descriptor.value !== "object") {
120
- Object.defineProperty(current.target, keys[propertyIndex], descriptor);
121
- continue;
122
- }
123
- nextSource = descriptor.value;
124
- descriptor.value = Array.isArray(nextSource) ?
125
- [] :
126
- Object.create(Object.getPrototypeOf(nextSource));
127
- if (circular) {
128
- indexOf = sourceReferences.indexOf(nextSource);
129
- if (indexOf !== -1) {
130
- // The source is already referenced, just assign reference
131
- descriptor.value = targetReferences[indexOf];
132
- Object.defineProperty(current.target, keys[propertyIndex], descriptor);
133
- continue;
134
- }
135
- sourceReferences.push(nextSource);
136
- targetReferences.push(descriptor.value);
137
- }
138
- Object.defineProperty(current.target, keys[propertyIndex], descriptor);
139
- copies.push({ source: nextSource, target: descriptor.value });
140
- }
141
- }
142
- return cloneObject;
143
- }
144
- static IsEmpty(obj) {
145
- return isNill(obj) || Object.getOwnPropertyNames(obj).length === 0;
146
- }
147
- // Returns whether given object is an existing, plain object. That is, it defined, its type if 'object' and it is NOT an array or func.
148
- static IsPlainObject(object) {
149
- return object !== null && !Array.isArray(object) && typeof object !== "function" && typeof object === "object";
150
- }
151
- /**
152
- * Returns an instance of given class with data of given dataObject. Only works if that class has a default constructor without args.
153
- * Does not actually create a new object if it alread is an instance of that class.
154
- * @param {any} clazz A class that has a default constructor
155
- * @param {any} [dataObject] The object with data to copy to the new instance of the class
156
- * @returns {any} An object that is an instance of given class, with given data applied to it.
157
- */
158
- static MakeInstanceOf(clazz, dataObject) {
159
- // dont make a clone if given dataObject already instance of clazz
160
- if (dataObject instanceof clazz) {
161
- return dataObject;
162
- }
163
- else {
164
- const asClazz = new clazz();
165
- ObjectUtils.CopyPropertiesFrom(dataObject, asClazz);
166
- return asClazz;
167
- }
168
- }
169
- // Returns the value of a random own property of given object.
170
- static PickRandomPropertyValue(object) {
171
- if (!object) {
172
- return;
173
- }
174
- let result;
175
- let count = 0;
176
- for (const prop in object) {
177
- if (object.hasOwnProperty(prop)) {
178
- count++;
179
- if (Math.random() < 1 / count) {
180
- result = object[prop];
181
- }
182
- }
183
- }
184
- return result;
185
- }
186
- // Returns a default if given value doesn't exist, otherwise just value.
187
- static ValueOrDefault(value, defaultReturnVal = "") {
188
- return notNill(value) ? value : defaultReturnVal;
189
- }
190
- static _isArguments(x) {
191
- const supportsArgsClass = this._supportsArgumentsClass();
192
- return supportsArgsClass ? this._isArgumentsWhenArgsClassSupported(x) : this._isArgumentsWhenArgsClassNotSupported(x);
193
- }
194
- static _isArgumentsWhenArgsClassNotSupported(object) {
195
- return object &&
196
- typeof object === "object" &&
197
- typeof object.length === "number" &&
198
- Object.prototype.hasOwnProperty.call(object, "callee") &&
199
- !Object.prototype.propertyIsEnumerable.call(object, "callee") ||
200
- false;
201
- }
202
- static _isArgumentsWhenArgsClassSupported(object) {
203
- return Object.prototype.toString.call(object) === "[object Arguments]";
204
- }
205
- static _isBuffer(x) {
206
- if (!x || typeof x !== "object" || typeof x.length !== "number") {
207
- return false;
208
- }
209
- if (typeof x.copy !== "function" || typeof x.slice !== "function") {
210
- return false;
211
- }
212
- return !(x.length > 0 && typeof x[0] !== "number");
213
- }
214
- static _isUndefinedOrNull(value) {
215
- return value === null || value === undefined;
216
- }
217
- static _objEquiv(a, b) {
218
- let i, key;
219
- if (this._isUndefinedOrNull(a) || this._isUndefinedOrNull(b)) {
220
- return false;
221
- }
222
- if (a.prototype !== b.prototype) {
223
- return false;
224
- }
225
- if (this._isArguments(a)) {
226
- if (!this._isArguments(b)) {
227
- return false;
228
- }
229
- a = Array.prototype.slice.call(a);
230
- b = Array.prototype.slice.call(b);
231
- return this.DeepEquals(a, b);
232
- }
233
- if (this._isBuffer(a)) {
234
- if (!this._isBuffer(b)) {
235
- return false;
236
- }
237
- if (a.length !== b.length) {
238
- return false;
239
- }
240
- for (i = 0; i < a.length; i++) {
241
- if (a[i] !== b[i]) {
242
- return false;
243
- }
244
- }
245
- return true;
246
- }
247
- let ka;
248
- let kb;
249
- try {
250
- ka = Object.keys(a);
251
- kb = Object.keys(b);
252
- }
253
- catch (e) {
254
- return false;
255
- }
256
- if (ka.length !== kb.length) {
257
- return false;
258
- }
259
- ka.sort();
260
- kb.sort();
261
- for (i = ka.length - 1; i >= 0; i--) {
262
- if (ka[i] !== kb[i]) {
263
- return false;
264
- }
265
- }
266
- for (i = ka.length - 1; i >= 0; i--) {
267
- key = ka[i];
268
- if (!this.DeepEquals(a[key], b[key])) {
269
- return false;
270
- }
271
- }
272
- return typeof a === typeof b;
273
- }
274
- static _supportsArgumentsClass() {
275
- return Object.prototype.toString.call(arguments) === "[object Arguments]";
276
- }
277
- }
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL3V0aWxzL29iamVjdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJELHFEQUFxRDtBQUNyRCxNQUFNLE9BQU8sV0FBVztJQUVwQjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQWE7UUFDbkMsSUFBSSxRQUFRLEdBQVksSUFBSSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0QsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBSSxJQUFZLEVBQUUsRUFBSyxFQUFFLGlCQUEwQixJQUFJO1FBQ25GLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxFQUFFLEdBQUcsRUFBTyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQVUsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUN6RCxJQUFJLGNBQWMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FB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QUFDLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLE1BQU0sQ0FBQyx1QkFBdUI7UUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssb0JBQW9CLENBQUM7SUFDOUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc05pbGx9IGZyb20gXCIuL2lzLW5pbGwuZnVuY3Rpb25cIjtcbmltcG9ydCB7bm90TmlsbH0gZnJvbSBcIi4vZnVuY3Rpb24vbm90LW5pbGwuZnVuY3Rpb25cIjtcblxuLy8gU3RhdGljIHV0aWxpdHkgZnVuY3Rpb24gaG9sZGVyIHJlbGF0ZWQgdG8gb2JqZWN0cy5cbmV4cG9ydCBjbGFzcyBPYmplY3RVdGlscyB7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYWxsIGdpdmVuIHZhbHVlcyBleGlzdDogZm9yIGFsbCB2YWx1ZXMgaXQgaG9sZHMgdGhhdCB0aGV5IGFyZSBub3QgbnVsbCBub3IgdW5kZWZpbmVkLiBTaG9ydC1jaXJjdWl0IGNoZWNrLlxuICAgICAqIEBwYXJhbSB7YW55fSB2YWx1ZXMgUmVzdCBwYXJhbWV0ZXJzIHdpdGggYWxsIG9iamVjdHMgdG8gY2hlY2sgZXhpc3RlbmNlIGZvci5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBBTEwgZ2l2ZW4gdmFsdWVzIGFyZSBub3QgbnVsbCBub3IgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UgKGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSB3YXMgbnVsbCBvciB1bmRlZmluZWQpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBBbGxFeGlzdCguLi52YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBhbGxFeGlzdDogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNOaWxsKHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICBhbGxFeGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxFeGlzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgYWxsIHByb3BlcnRpZXMgZnJvbSBvYmplY3QgJ2Zyb20nIHRvIG9iamVjdCAndG8nLiBPdmVyd3JpdGVzIHByb3BlcnRpZXMgb24gb2JqZWN0ICd0bycgaWYgcHJvcGVydHkgYWxyZWFkeSBleGlzdHMuXG4gICAgICogRG9lcyBub3QgY29weSBmdW5jdGlvbnMsIG9ubHkgcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZnJvbSBUaGUgc291cmNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIGNvcHkgYWxsIHByb3BlcnRpZXMgb2YgdG8gdGhlICd0bycgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0byBUaGUgb2JqZWN0IHRvIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnZnJvbScgb2JqZWN0IHdpbGwgYmUgY29waWVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VW5kZWZpbmVkID0gdHJ1ZV0gd2V0aGVyIHRoZSAndG8nIG9iamVjdCBtYXkgYmUgYXNzaWduZWQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIHRvIGFueSBvZiBpdHMgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIENvcHlQcm9wZXJ0aWVzRnJvbTxUPihmcm9tOiBPYmplY3QsIHRvOiBULCBhbGxvd1VuZGVmaW5lZDogYm9vbGVhbiA9IHRydWUpOiBUIHtcbiAgICAgICAgaWYgKCF0bykge1xuICAgICAgICAgICAgdG8gPSB7fSBhcyBUO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZnJvbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRvO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdFV0aWxzLkZvck93blByb3BlcnR5KGZyb20sICh2YWx1ZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKGFsbG93VW5kZWZpbmVkIHx8IG5vdE5pbGwodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdG9ba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgRGVlcEVxdWFscyhhY3R1YWw6IGFueSwgZXhwZWN0ZWQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQgfHwgdHlwZW9mIGFjdHVhbCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZXhwZWN0ZWQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWwgPT09IGV4cGVjdGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybXMgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb3duIHByb3BlcnR5IG9mIGdpdmVuIHBsYWluIG9iamVjdC4gQWxzbyB3b3JrcyBvbiBzdHJpbmcgZW51bXMuXG4gICAgcHVibGljIHN0YXRpYyBGb3JPd25Qcm9wZXJ0eShwbGFpbk9iamVjdDogYW55LCBjYWxsYmFjazogKHByb3BWYWw6IGFueSwga2V5OiBzdHJpbmcpID0+IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuSXNQbGFpbk9iamVjdChwbGFpbk9iamVjdCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHBsYWluT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBsYWluT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBsYWluT2JqZWN0W2tleV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZTogYm9vbGVhbiA9IGNhbGxiYWNrKHBsYWluT2JqZWN0W2tleV0sIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgY2xhc3MgbmFtZSBvZiBnaXZlbiBhcmd1bWVudC4gVGhlIGFyZ3VtZW50IGNhbiBiZSBhbiBvYmplY3Qgb3IgYSBjbGFzcy5cbiAgICBwdWJsaWMgc3RhdGljIEdldENsYXNzTmFtZShvYmplY3RPckNsYXNzOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW9iamVjdE9yQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAvLyBhcmcgd2FzIGEgY2xhc3MgKG9yIGEgZnVuY3Rpb24uLilcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3RPckNsYXNzLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdE9yQ2xhc3MubmFtZTsgLy8gLi4gd2hpY2ggaGFzIGl0cyByZWFkYWJsZSBuYW1lIHN0b3JlcyBsaWtlIHRoaXNcbiAgICAgICAgICAgIC8vIGVsc2UgYXJnIHdhcyBhbiBvYmplY3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yU3RyaW5nOiBzdHJpbmcgPSBvYmplY3RPckNsYXNzLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gY29uc3RydWN0b3JTdHJpbmcubWF0Y2goL1xcdysvZylbMV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgZ2l2ZW4gb3JpZ2luYWwgb2JqZWN0LiBUaGUgY2xvbmUgaXMgYSBTSU1QTEUgT0JKRUNUIHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgb3JpZ2luYWwuXG4gICAgcHVibGljIHN0YXRpYyBHZXRTaGFsbG93Q2xvbmUob3JpZ2luYWxPYmplY3Q6IGFueSwgb2JqZWN0Q2xhc3M/OiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgY2xvbmVkT2JqZWN0OiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9iamVjdENsYXNzKSB7XG4gICAgICAgICAgICBjbG9uZWRPYmplY3QgPSBuZXcgb2JqZWN0Q2xhc3MoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lZE9iamVjdCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0VXRpbHMuRm9yT3duUHJvcGVydHkob3JpZ2luYWxPYmplY3QsICh2YWx1ZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY2xvbmVkT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNsb25lZE9iamVjdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIEdldERlZXBDbG9uZShvcmlnaW5hbE9iamVjdDogYW55LCBjaXJjdWxhcjogYm9vbGVhbiA9IHRydWUpOiBhbnkge1xuICAgICAgICAvLyBGaXJzdCBjcmVhdGUgYW4gZW1wdHkgb2JqZWN0IHdpdGhcbiAgICAgICAgLy8gc2FtZSBwcm90b3R5cGUgb2Ygb3VyIG9yaWdpbmFsIHNvdXJjZVxuXG4gICAgICAgIGxldCBwcm9wZXJ0eUluZGV4OiBudW1iZXI7XG4gICAgICAgIGxldCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgIGxldCBrZXlzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGN1cnJlbnQ6IGFueTtcbiAgICAgICAgbGV0IG5leHRTb3VyY2U6IGFueTtcbiAgICAgICAgbGV0IGluZGV4T2Y6IG51bWJlcjtcbiAgICAgICAgY29uc3QgY29waWVzOiBhbnlbXSA9IFt7XG4gICAgICAgICAgICBzb3VyY2U6IG9yaWdpbmFsT2JqZWN0LFxuICAgICAgICAgICAgdGFyZ2V0OiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbE9iamVjdCkpXG4gICAgICAgIH1dO1xuICAgICAgICBjb25zdCBjbG9uZU9iamVjdDogYW55ID0gY29waWVzWzBdLnRhcmdldDtcbiAgICAgICAgY29uc3Qgc291cmNlUmVmZXJlbmNlczogYW55W10gPSBbb3JpZ2luYWxPYmplY3RdO1xuICAgICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VzOiBhbnlbXSA9IFtjbG9uZU9iamVjdF07XG5cbiAgICAgICAgLy8gRmlyc3QgaW4sIGZpcnN0IG91dFxuICAgICAgICB3aGlsZSAoY3VycmVudCA9IGNvcGllcy5zaGlmdCgpKSB7IC8vTk9TT05BUlxuICAgICAgICAgICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQuc291cmNlKTtcblxuICAgICAgICAgICAgZm9yIChwcm9wZXJ0eUluZGV4ID0gMDsgcHJvcGVydHlJbmRleCA8IGtleXMubGVuZ3RoOyBwcm9wZXJ0eUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBzb3VyY2UncyBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY3VycmVudC5zb3VyY2UsIGtleXNbcHJvcGVydHlJbmRleF0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlIHx8IHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJyZW50LnRhcmdldCwga2V5c1twcm9wZXJ0eUluZGV4XSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5leHRTb3VyY2UgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBBcnJheS5pc0FycmF5KG5leHRTb3VyY2UpID9cbiAgICAgICAgICAgICAgICAgICAgW10gOlxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXh0U291cmNlKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2lyY3VsYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZiA9IHNvdXJjZVJlZmVyZW5jZXMuaW5kZXhPZihuZXh0U291cmNlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZiAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzb3VyY2UgaXMgYWxyZWFkeSByZWZlcmVuY2VkLCBqdXN0IGFzc2lnbiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSB0YXJnZXRSZWZlcmVuY2VzW2luZGV4T2ZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnJlbnQudGFyZ2V0LCBrZXlzW3Byb3BlcnR5SW5kZXhdLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc291cmNlUmVmZXJlbmNlcy5wdXNoKG5leHRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWZlcmVuY2VzLnB1c2goZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN1cnJlbnQudGFyZ2V0LCBrZXlzW3Byb3BlcnR5SW5kZXhdLCBkZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgIGNvcGllcy5wdXNoKHtzb3VyY2U6IG5leHRTb3VyY2UsIHRhcmdldDogZGVzY3JpcHRvci52YWx1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb25lT2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgSXNFbXB0eShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaXNOaWxsKG9iaikgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB3aGV0aGVyIGdpdmVuIG9iamVjdCBpcyBhbiBleGlzdGluZywgcGxhaW4gb2JqZWN0LiBUaGF0IGlzLCBpdCBkZWZpbmVkLCBpdHMgdHlwZSBpZiAnb2JqZWN0JyBhbmQgaXQgaXMgTk9UIGFuIGFycmF5IG9yIGZ1bmMuXG4gICAgcHVibGljIHN0YXRpYyBJc1BsYWluT2JqZWN0KG9iamVjdDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBvYmplY3QgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkob2JqZWN0KSAmJiB0eXBlb2Ygb2JqZWN0ICE9PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIGdpdmVuIGNsYXNzIHdpdGggZGF0YSBvZiBnaXZlbiBkYXRhT2JqZWN0LiBPbmx5IHdvcmtzIGlmIHRoYXQgY2xhc3MgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciB3aXRob3V0IGFyZ3MuXG4gICAgICogRG9lcyBub3QgYWN0dWFsbHkgY3JlYXRlIGEgbmV3IG9iamVjdCBpZiBpdCBhbHJlYWQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy5cbiAgICAgKiBAcGFyYW0ge2FueX0gY2xhenogQSBjbGFzcyB0aGF0IGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge2FueX0gW2RhdGFPYmplY3RdIFRoZSBvYmplY3Qgd2l0aCBkYXRhIHRvIGNvcHkgdG8gdGhlIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbiAgICAgKiBAcmV0dXJucyB7YW55fSBBbiBvYmplY3QgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcywgd2l0aCBnaXZlbiBkYXRhIGFwcGxpZWQgdG8gaXQuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBNYWtlSW5zdGFuY2VPZihjbGF6ejogYW55LCBkYXRhT2JqZWN0PzogYW55KTogYW55IHtcbiAgICAgICAgLy8gZG9udCBtYWtlIGEgY2xvbmUgaWYgZ2l2ZW4gZGF0YU9iamVjdCBhbHJlYWR5IGluc3RhbmNlIG9mIGNsYXp6XG4gICAgICAgIGlmIChkYXRhT2JqZWN0IGluc3RhbmNlb2YgY2xhenopIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhT2JqZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXNDbGF6ejogYW55ID0gbmV3IGNsYXp6KCk7XG4gICAgICAgICAgICBPYmplY3RVdGlscy5Db3B5UHJvcGVydGllc0Zyb20oZGF0YU9iamVjdCwgYXNDbGF6eik7XG4gICAgICAgICAgICByZXR1cm4gYXNDbGF6ejtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcmFuZG9tIG93biBwcm9wZXJ0eSBvZiBnaXZlbiBvYmplY3QuXG4gICAgcHVibGljIHN0YXRpYyBQaWNrUmFuZG9tUHJvcGVydHlWYWx1ZShvYmplY3Q6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgICAgIGxldCBjb3VudDogbnVtYmVyID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAxIC8gY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYSBkZWZhdWx0IGlmIGdpdmVuIHZhbHVlIGRvZXNuJ3QgZXhpc3QsIG90aGVyd2lzZSBqdXN0IHZhbHVlLlxuICAgIHB1YmxpYyBzdGF0aWMgVmFsdWVPckRlZmF1bHQodmFsdWU6IGFueSwgZGVmYXVsdFJldHVyblZhbDogYW55ID0gXCJcIik6IGFueSB7XG4gICAgICAgIHJldHVybiBub3ROaWxsKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFJldHVyblZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNBcmd1bWVudHMoeDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRzQXJnc0NsYXNzOiBib29sZWFuID0gdGhpcy5fc3VwcG9ydHNBcmd1bWVudHNDbGFzcygpO1xuICAgICAgICByZXR1cm4gc3VwcG9ydHNBcmdzQ2xhc3MgPyB0aGlzLl9pc0FyZ3VtZW50c1doZW5BcmdzQ2xhc3NTdXBwb3J0ZWQoeCkgOiB0aGlzLl9pc0FyZ3VtZW50c1doZW5BcmdzQ2xhc3NOb3RTdXBwb3J0ZWQoeCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzQXJndW1lbnRzV2hlbkFyZ3NDbGFzc05vdFN1cHBvcnRlZChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gb2JqZWN0ICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgXCJjYWxsZWVcIikgJiZcbiAgICAgICAgICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBcImNhbGxlZVwiKSB8fFxuICAgICAgICAgICAgZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzQXJndW1lbnRzV2hlbkFyZ3NDbGFzc1N1cHBvcnRlZChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzQnVmZmVyKHg6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB4LmNvcHkgIT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlb2YgeC5zbGljZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSBcIm51bWJlclwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfaXNVbmRlZmluZWRPck51bGwodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBfb2JqRXF1aXYoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGk6IG51bWJlciwga2V5OiBzdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLl9pc1VuZGVmaW5lZE9yTnVsbChhKSB8fCB0aGlzLl9pc1VuZGVmaW5lZE9yTnVsbChiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQXJndW1lbnRzKGEpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzQXJndW1lbnRzKGIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEpO1xuICAgICAgICAgICAgYiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRGVlcEVxdWFscyhhLCBiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faXNCdWZmZXIoYSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faXNCdWZmZXIoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGthOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGtiOiBzdHJpbmdbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGthID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgICAgICBrYiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2EubGVuZ3RoICE9PSBrYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGthLnNvcnQoKTtcbiAgICAgICAga2Iuc29ydCgpO1xuXG4gICAgICAgIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoa2FbaV0gIT09IGtiW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGtleSA9IGthW2ldO1xuICAgICAgICAgICAgaWYgKCF0aGlzLkRlZXBFcXVhbHMoYVtrZXldLCBiW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3N1cHBvcnRzQXJndW1lbnRzQ2xhc3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIjtcbiAgICB9XG59XG4iXX0=
1
+ import { isNill } from "./is-nill.function";
2
+ import { notNill } from "./function/not-nill.function";
3
+ // Static utility function holder related to objects.
4
+ export class ObjectUtils {
5
+ /**
6
+ * Returns whether all given values exist: for all values it holds that they are not null nor undefined. Short-circuit check.
7
+ * @param {any} values Rest parameters with all objects to check existence for.
8
+ * @returns {boolean} True if ALL given values are not null nor undefined, otherwise false (if at least one value was null or undefined)
9
+ */
10
+ static AllExist(...values) {
11
+ let allExist = true;
12
+ for (let i = 0, len = values.length; i < len; i++) {
13
+ if (isNill(values[i])) {
14
+ allExist = false;
15
+ break;
16
+ }
17
+ }
18
+ return allExist;
19
+ }
20
+ /**
21
+ * Copies all properties from object 'from' to object 'to'. Overwrites properties on object 'to' if property already exists.
22
+ * Does not copy functions, only properties.
23
+ * @param {Object} from The source object from which to copy all properties of to the 'to' object.
24
+ * @param {Object} to The object to which the properties of the 'from' object will be copied.
25
+ * @param {boolean} [allowUndefined = true] wether the 'to' object may be assigned null or undefined values to any of its properties.
26
+ */
27
+ static CopyPropertiesFrom(from, to, allowUndefined = true) {
28
+ if (!to) {
29
+ to = {};
30
+ }
31
+ if (!from) {
32
+ return to;
33
+ }
34
+ ObjectUtils.ForOwnProperty(from, (value, key) => {
35
+ if (allowUndefined || notNill(value)) {
36
+ to[key] = value;
37
+ }
38
+ });
39
+ return to;
40
+ }
41
+ static DeepEquals(actual, expected) {
42
+ if (actual === expected) {
43
+ return true;
44
+ }
45
+ else if (actual instanceof Date && expected instanceof Date) {
46
+ return actual.getTime() === expected.getTime();
47
+ }
48
+ else if (!actual || !expected || typeof actual !== "object" && typeof expected !== "object") {
49
+ return actual === expected;
50
+ }
51
+ else {
52
+ return this._objEquiv(actual, expected);
53
+ }
54
+ }
55
+ // Performs given callback function for each own property of given plain object. Also works on string enums.
56
+ static ForOwnProperty(plainObject, callback) {
57
+ if (ObjectUtils.IsPlainObject(plainObject)) {
58
+ for (const key in plainObject) {
59
+ if (plainObject.hasOwnProperty(key) && typeof plainObject[key] !== "function") {
60
+ const response = callback(plainObject[key], key);
61
+ if (response === false) {
62
+ break;
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ // Returns the class name of given argument. The argument can be an object or a class.
69
+ static GetClassName(objectOrClass) {
70
+ if (!objectOrClass) {
71
+ return undefined;
72
+ // arg was a class (or a function..)
73
+ }
74
+ else if (objectOrClass.constructor === Function) {
75
+ return objectOrClass.name; // .. which has its readable name stores like this
76
+ // else arg was an object
77
+ }
78
+ else {
79
+ const constructorString = objectOrClass.constructor.toString();
80
+ return constructorString.match(/\w+/g)[1];
81
+ }
82
+ }
83
+ // Returns a shallow clone of the given original object. The clone is a SIMPLE OBJECT with the same properties as the original.
84
+ static GetShallowClone(originalObject, objectClass) {
85
+ let clonedObject = undefined;
86
+ if (objectClass) {
87
+ clonedObject = new objectClass();
88
+ }
89
+ else {
90
+ clonedObject = {};
91
+ }
92
+ ObjectUtils.ForOwnProperty(originalObject, (value, key) => {
93
+ clonedObject[key] = value;
94
+ });
95
+ return clonedObject;
96
+ }
97
+ static GetDeepClone(originalObject, circular = true) {
98
+ // First create an empty object with
99
+ // same prototype of our original source
100
+ let propertyIndex;
101
+ let descriptor;
102
+ let keys;
103
+ let current;
104
+ let nextSource;
105
+ let indexOf;
106
+ const copies = [{
107
+ source: originalObject,
108
+ target: Object.create(Object.getPrototypeOf(originalObject))
109
+ }];
110
+ const cloneObject = copies[0].target;
111
+ const sourceReferences = [originalObject];
112
+ const targetReferences = [cloneObject];
113
+ // First in, first out
114
+ while (current = copies.shift()) { //NOSONAR
115
+ keys = Object.getOwnPropertyNames(current.source);
116
+ for (propertyIndex = 0; propertyIndex < keys.length; propertyIndex++) {
117
+ // Save the source's descriptor
118
+ descriptor = Object.getOwnPropertyDescriptor(current.source, keys[propertyIndex]);
119
+ if (!descriptor.value || typeof descriptor.value !== "object") {
120
+ Object.defineProperty(current.target, keys[propertyIndex], descriptor);
121
+ continue;
122
+ }
123
+ nextSource = descriptor.value;
124
+ descriptor.value = Array.isArray(nextSource) ?
125
+ [] :
126
+ Object.create(Object.getPrototypeOf(nextSource));
127
+ if (circular) {
128
+ indexOf = sourceReferences.indexOf(nextSource);
129
+ if (indexOf !== -1) {
130
+ // The source is already referenced, just assign reference
131
+ descriptor.value = targetReferences[indexOf];
132
+ Object.defineProperty(current.target, keys[propertyIndex], descriptor);
133
+ continue;
134
+ }
135
+ sourceReferences.push(nextSource);
136
+ targetReferences.push(descriptor.value);
137
+ }
138
+ Object.defineProperty(current.target, keys[propertyIndex], descriptor);
139
+ copies.push({ source: nextSource, target: descriptor.value });
140
+ }
141
+ }
142
+ return cloneObject;
143
+ }
144
+ static IsEmpty(obj) {
145
+ return isNill(obj) || Object.getOwnPropertyNames(obj).length === 0;
146
+ }
147
+ // Returns whether given object is an existing, plain object. That is, it defined, its type if 'object' and it is NOT an array or func.
148
+ static IsPlainObject(object) {
149
+ return object !== null && !Array.isArray(object) && typeof object !== "function" && typeof object === "object";
150
+ }
151
+ /**
152
+ * Returns an instance of given class with data of given dataObject. Only works if that class has a default constructor without args.
153
+ * Does not actually create a new object if it alread is an instance of that class.
154
+ * @param {any} clazz A class that has a default constructor
155
+ * @param {any} [dataObject] The object with data to copy to the new instance of the class
156
+ * @returns {any} An object that is an instance of given class, with given data applied to it.
157
+ */
158
+ static MakeInstanceOf(clazz, dataObject) {
159
+ // dont make a clone if given dataObject already instance of clazz
160
+ if (dataObject instanceof clazz) {
161
+ return dataObject;
162
+ }
163
+ else {
164
+ const asClazz = new clazz();
165
+ ObjectUtils.CopyPropertiesFrom(dataObject, asClazz);
166
+ return asClazz;
167
+ }
168
+ }
169
+ // Returns the value of a random own property of given object.
170
+ static PickRandomPropertyValue(object) {
171
+ if (!object) {
172
+ return;
173
+ }
174
+ let result;
175
+ let count = 0;
176
+ for (const prop in object) {
177
+ if (object.hasOwnProperty(prop)) {
178
+ count++;
179
+ if (Math.random() < 1 / count) {
180
+ result = object[prop];
181
+ }
182
+ }
183
+ }
184
+ return result;
185
+ }
186
+ // Returns a default if given value doesn't exist, otherwise just value.
187
+ static ValueOrDefault(value, defaultReturnVal = "") {
188
+ return notNill(value) ? value : defaultReturnVal;
189
+ }
190
+ static _isArguments(x) {
191
+ const supportsArgsClass = this._supportsArgumentsClass();
192
+ return supportsArgsClass ? this._isArgumentsWhenArgsClassSupported(x) : this._isArgumentsWhenArgsClassNotSupported(x);
193
+ }
194
+ static _isArgumentsWhenArgsClassNotSupported(object) {
195
+ return object &&
196
+ typeof object === "object" &&
197
+ typeof object.length === "number" &&
198
+ Object.prototype.hasOwnProperty.call(object, "callee") &&
199
+ !Object.prototype.propertyIsEnumerable.call(object, "callee") ||
200
+ false;
201
+ }
202
+ static _isArgumentsWhenArgsClassSupported(object) {
203
+ return Object.prototype.toString.call(object) === "[object Arguments]";
204
+ }
205
+ static _isBuffer(x) {
206
+ if (!x || typeof x !== "object" || typeof x.length !== "number") {
207
+ return false;
208
+ }
209
+ if (typeof x.copy !== "function" || typeof x.slice !== "function") {
210
+ return false;
211
+ }
212
+ return !(x.length > 0 && typeof x[0] !== "number");
213
+ }
214
+ static _isUndefinedOrNull(value) {
215
+ return value === null || value === undefined;
216
+ }
217
+ static _objEquiv(a, b) {
218
+ let i, key;
219
+ if (this._isUndefinedOrNull(a) || this._isUndefinedOrNull(b)) {
220
+ return false;
221
+ }
222
+ if (a.prototype !== b.prototype) {
223
+ return false;
224
+ }
225
+ if (this._isArguments(a)) {
226
+ if (!this._isArguments(b)) {
227
+ return false;
228
+ }
229
+ a = Array.prototype.slice.call(a);
230
+ b = Array.prototype.slice.call(b);
231
+ return this.DeepEquals(a, b);
232
+ }
233
+ if (this._isBuffer(a)) {
234
+ if (!this._isBuffer(b)) {
235
+ return false;
236
+ }
237
+ if (a.length !== b.length) {
238
+ return false;
239
+ }
240
+ for (i = 0; i < a.length; i++) {
241
+ if (a[i] !== b[i]) {
242
+ return false;
243
+ }
244
+ }
245
+ return true;
246
+ }
247
+ let ka;
248
+ let kb;
249
+ try {
250
+ ka = Object.keys(a);
251
+ kb = Object.keys(b);
252
+ }
253
+ catch (e) {
254
+ return false;
255
+ }
256
+ if (ka.length !== kb.length) {
257
+ return false;
258
+ }
259
+ ka.sort();
260
+ kb.sort();
261
+ for (i = ka.length - 1; i >= 0; i--) {
262
+ if (ka[i] !== kb[i]) {
263
+ return false;
264
+ }
265
+ }
266
+ for (i = ka.length - 1; i >= 0; i--) {
267
+ key = ka[i];
268
+ if (!this.DeepEquals(a[key], b[key])) {
269
+ return false;
270
+ }
271
+ }
272
+ return typeof a === typeof b;
273
+ }
274
+ static _supportsArgumentsClass() {
275
+ return Object.prototype.toString.call(arguments) === "[object Arguments]";
276
+ }
277
+ }
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL3V0aWxzL29iamVjdC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJELHFEQUFxRDtBQUNyRCxNQUFNLE9BQU8sV0FBVztJQUVwQjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQWE7UUFDbkMsSUFBSSxRQUFRLEdBQVksSUFBSSxDQUFDO1FBQzdCLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0QsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ2pCLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBSSxJQUFZLEVBQUUsRUFBSyxFQUFFLGlCQUEwQixJQUFJO1FBQ25GLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDTCxFQUFFLEdBQUcsRUFBTyxDQUFDO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQVUsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUN6RCxJQUFJLGNBQWMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FB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QUFDLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLE1BQU0sQ0FBQyx1QkFBdUI7UUFDbEMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssb0JBQW9CLENBQUM7SUFDOUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpc05pbGx9IGZyb20gXCIuL2lzLW5pbGwuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHtub3ROaWxsfSBmcm9tIFwiLi9mdW5jdGlvbi9ub3QtbmlsbC5mdW5jdGlvblwiO1xyXG5cclxuLy8gU3RhdGljIHV0aWxpdHkgZnVuY3Rpb24gaG9sZGVyIHJlbGF0ZWQgdG8gb2JqZWN0cy5cclxuZXhwb3J0IGNsYXNzIE9iamVjdFV0aWxzIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgd2hldGhlciBhbGwgZ2l2ZW4gdmFsdWVzIGV4aXN0OiBmb3IgYWxsIHZhbHVlcyBpdCBob2xkcyB0aGF0IHRoZXkgYXJlIG5vdCBudWxsIG5vciB1bmRlZmluZWQuIFNob3J0LWNpcmN1aXQgY2hlY2suXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWVzIFJlc3QgcGFyYW1ldGVycyB3aXRoIGFsbCBvYmplY3RzIHRvIGNoZWNrIGV4aXN0ZW5jZSBmb3IuXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBBTEwgZ2l2ZW4gdmFsdWVzIGFyZSBub3QgbnVsbCBub3IgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UgKGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSB3YXMgbnVsbCBvciB1bmRlZmluZWQpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQWxsRXhpc3QoLi4udmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBhbGxFeGlzdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbGVuOiBudW1iZXIgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGlzTmlsbCh2YWx1ZXNbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsbEV4aXN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIGFsbCBwcm9wZXJ0aWVzIGZyb20gb2JqZWN0ICdmcm9tJyB0byBvYmplY3QgJ3RvJy4gT3ZlcndyaXRlcyBwcm9wZXJ0aWVzIG9uIG9iamVjdCAndG8nIGlmIHByb3BlcnR5IGFscmVhZHkgZXhpc3RzLlxyXG4gICAgICogRG9lcyBub3QgY29weSBmdW5jdGlvbnMsIG9ubHkgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmcm9tIFRoZSBzb3VyY2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gY29weSBhbGwgcHJvcGVydGllcyBvZiB0byB0aGUgJ3RvJyBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gdG8gVGhlIG9iamVjdCB0byB3aGljaCB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ2Zyb20nIG9iamVjdCB3aWxsIGJlIGNvcGllZC5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VW5kZWZpbmVkID0gdHJ1ZV0gd2V0aGVyIHRoZSAndG8nIG9iamVjdCBtYXkgYmUgYXNzaWduZWQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIHRvIGFueSBvZiBpdHMgcHJvcGVydGllcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBDb3B5UHJvcGVydGllc0Zyb208VD4oZnJvbTogT2JqZWN0LCB0bzogVCwgYWxsb3dVbmRlZmluZWQ6IGJvb2xlYW4gPSB0cnVlKTogVCB7XHJcbiAgICAgICAgaWYgKCF0bykge1xyXG4gICAgICAgICAgICB0byA9IHt9IGFzIFQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZnJvbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdG87XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdFV0aWxzLkZvck93blByb3BlcnR5KGZyb20sICh2YWx1ZTogYW55LCBrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYWxsb3dVbmRlZmluZWQgfHwgbm90TmlsbCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRvW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0bztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIERlZXBFcXVhbHMoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIERhdGUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBleHBlY3RlZCAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsID09PSBleHBlY3RlZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFBlcmZvcm1zIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG93biBwcm9wZXJ0eSBvZiBnaXZlbiBwbGFpbiBvYmplY3QuIEFsc28gd29ya3Mgb24gc3RyaW5nIGVudW1zLlxyXG4gICAgcHVibGljIHN0YXRpYyBGb3JPd25Qcm9wZXJ0eShwbGFpbk9iamVjdDogYW55LCBjYWxsYmFjazogKHByb3BWYWw6IGFueSwga2V5OiBzdHJpbmcpID0+IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChPYmplY3RVdGlscy5Jc1BsYWluT2JqZWN0KHBsYWluT2JqZWN0KSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwbGFpbk9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsYWluT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHBsYWluT2JqZWN0W2tleV0gIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBib29sZWFuID0gY2FsbGJhY2socGxhaW5PYmplY3Rba2V5XSwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIHRoZSBjbGFzcyBuYW1lIG9mIGdpdmVuIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQgY2FuIGJlIGFuIG9iamVjdCBvciBhIGNsYXNzLlxyXG4gICAgcHVibGljIHN0YXRpYyBHZXRDbGFzc05hbWUob2JqZWN0T3JDbGFzczogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIW9iamVjdE9yQ2xhc3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgLy8gYXJnIHdhcyBhIGNsYXNzIChvciBhIGZ1bmN0aW9uLi4pXHJcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3RPckNsYXNzLmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbikge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0T3JDbGFzcy5uYW1lOyAvLyAuLiB3aGljaCBoYXMgaXRzIHJlYWRhYmxlIG5hbWUgc3RvcmVzIGxpa2UgdGhpc1xyXG4gICAgICAgICAgICAvLyBlbHNlIGFyZyB3YXMgYW4gb2JqZWN0XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY29uc3RydWN0b3JTdHJpbmc6IHN0cmluZyA9IG9iamVjdE9yQ2xhc3MuY29uc3RydWN0b3IudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yU3RyaW5nLm1hdGNoKC9cXHcrL2cpWzFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgZ2l2ZW4gb3JpZ2luYWwgb2JqZWN0LiBUaGUgY2xvbmUgaXMgYSBTSU1QTEUgT0JKRUNUIHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgb3JpZ2luYWwuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldFNoYWxsb3dDbG9uZShvcmlnaW5hbE9iamVjdDogYW55LCBvYmplY3RDbGFzcz86IGFueSk6IGFueSB7XHJcbiAgICAgICAgbGV0IGNsb25lZE9iamVjdDogYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAob2JqZWN0Q2xhc3MpIHtcclxuICAgICAgICAgICAgY2xvbmVkT2JqZWN0ID0gbmV3IG9iamVjdENsYXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2xvbmVkT2JqZWN0ID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3RVdGlscy5Gb3JPd25Qcm9wZXJ0eShvcmlnaW5hbE9iamVjdCwgKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNsb25lZE9iamVjdFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjbG9uZWRPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHZXREZWVwQ2xvbmUob3JpZ2luYWxPYmplY3Q6IGFueSwgY2lyY3VsYXI6IGJvb2xlYW4gPSB0cnVlKTogYW55IHtcclxuICAgICAgICAvLyBGaXJzdCBjcmVhdGUgYW4gZW1wdHkgb2JqZWN0IHdpdGhcclxuICAgICAgICAvLyBzYW1lIHByb3RvdHlwZSBvZiBvdXIgb3JpZ2luYWwgc291cmNlXHJcblxyXG4gICAgICAgIGxldCBwcm9wZXJ0eUluZGV4OiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcjtcclxuICAgICAgICBsZXQga2V5czogc3RyaW5nW107XHJcbiAgICAgICAgbGV0IGN1cnJlbnQ6IGFueTtcclxuICAgICAgICBsZXQgbmV4dFNvdXJjZTogYW55O1xyXG4gICAgICAgIGxldCBpbmRleE9mOiBudW1iZXI7XHJcbiAgICAgICAgY29uc3QgY29waWVzOiBhbnlbXSA9IFt7XHJcbiAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWxPYmplY3QsXHJcbiAgICAgICAgICAgIHRhcmdldDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob3JpZ2luYWxPYmplY3QpKVxyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIGNvbnN0IGNsb25lT2JqZWN0OiBhbnkgPSBjb3BpZXNbMF0udGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZVJlZmVyZW5jZXM6IGFueVtdID0gW29yaWdpbmFsT2JqZWN0XTtcclxuICAgICAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VzOiBhbnlbXSA9IFtjbG9uZU9iamVjdF07XHJcblxyXG4gICAgICAgIC8vIEZpcnN0IGluLCBmaXJzdCBvdXRcclxuICAgICAgICB3aGlsZSAoY3VycmVudCA9IGNvcGllcy5zaGlmdCgpKSB7IC8vTk9TT05BUlxyXG4gICAgICAgICAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudC5zb3VyY2UpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChwcm9wZXJ0eUluZGV4ID0gMDsgcHJvcGVydHlJbmRleCA8IGtleXMubGVuZ3RoOyBwcm9wZXJ0eUluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNvdXJjZSdzIGRlc2NyaXB0b3JcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGN1cnJlbnQuc291cmNlLCBrZXlzW3Byb3BlcnR5SW5kZXhdKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUgfHwgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgIT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VycmVudC50YXJnZXQsIGtleXNbcHJvcGVydHlJbmRleF0sIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIG5leHRTb3VyY2UgPSBkZXNjcmlwdG9yLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IEFycmF5LmlzQXJyYXkobmV4dFNvdXJjZSkgP1xyXG4gICAgICAgICAgICAgICAgICAgIFtdIDpcclxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXh0U291cmNlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNpcmN1bGFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZiA9IHNvdXJjZVJlZmVyZW5jZXMuaW5kZXhPZihuZXh0U291cmNlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4T2YgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzb3VyY2UgaXMgYWxyZWFkeSByZWZlcmVuY2VkLCBqdXN0IGFzc2lnbiByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IHRhcmdldFJlZmVyZW5jZXNbaW5kZXhPZl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdXJyZW50LnRhcmdldCwga2V5c1twcm9wZXJ0eUluZGV4XSwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUmVmZXJlbmNlcy5wdXNoKG5leHRTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFJlZmVyZW5jZXMucHVzaChkZXNjcmlwdG9yLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3VycmVudC50YXJnZXQsIGtleXNbcHJvcGVydHlJbmRleF0sIGRlc2NyaXB0b3IpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvcGllcy5wdXNoKHtzb3VyY2U6IG5leHRTb3VyY2UsIHRhcmdldDogZGVzY3JpcHRvci52YWx1ZX0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY2xvbmVPYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBJc0VtcHR5KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGlzTmlsbChvYmopIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYW4gZXhpc3RpbmcsIHBsYWluIG9iamVjdC4gVGhhdCBpcywgaXQgZGVmaW5lZCwgaXRzIHR5cGUgaWYgJ29iamVjdCcgYW5kIGl0IGlzIE5PVCBhbiBhcnJheSBvciBmdW5jLlxyXG4gICAgcHVibGljIHN0YXRpYyBJc1BsYWluT2JqZWN0KG9iamVjdDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdCAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShvYmplY3QpICYmIHR5cGVvZiBvYmplY3QgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcyB3aXRoIGRhdGEgb2YgZ2l2ZW4gZGF0YU9iamVjdC4gT25seSB3b3JrcyBpZiB0aGF0IGNsYXNzIGhhcyBhIGRlZmF1bHQgY29uc3RydWN0b3Igd2l0aG91dCBhcmdzLlxyXG4gICAgICogRG9lcyBub3QgYWN0dWFsbHkgY3JlYXRlIGEgbmV3IG9iamVjdCBpZiBpdCBhbHJlYWQgaXMgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcy5cclxuICAgICAqIEBwYXJhbSB7YW55fSBjbGF6eiBBIGNsYXNzIHRoYXQgaGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIHthbnl9IFtkYXRhT2JqZWN0XSBUaGUgb2JqZWN0IHdpdGggZGF0YSB0byBjb3B5IHRvIHRoZSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXHJcbiAgICAgKiBAcmV0dXJucyB7YW55fSBBbiBvYmplY3QgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBnaXZlbiBjbGFzcywgd2l0aCBnaXZlbiBkYXRhIGFwcGxpZWQgdG8gaXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgTWFrZUluc3RhbmNlT2YoY2xheno6IGFueSwgZGF0YU9iamVjdD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgLy8gZG9udCBtYWtlIGEgY2xvbmUgaWYgZ2l2ZW4gZGF0YU9iamVjdCBhbHJlYWR5IGluc3RhbmNlIG9mIGNsYXp6XHJcbiAgICAgICAgaWYgKGRhdGFPYmplY3QgaW5zdGFuY2VvZiBjbGF6eikge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YU9iamVjdDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhc0NsYXp6OiBhbnkgPSBuZXcgY2xhenooKTtcclxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuQ29weVByb3BlcnRpZXNGcm9tKGRhdGFPYmplY3QsIGFzQ2xhenopO1xyXG4gICAgICAgICAgICByZXR1cm4gYXNDbGF6ejtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgYSByYW5kb20gb3duIHByb3BlcnR5IG9mIGdpdmVuIG9iamVjdC5cclxuICAgIHB1YmxpYyBzdGF0aWMgUGlja1JhbmRvbVByb3BlcnR5VmFsdWUob2JqZWN0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICghb2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQ6IGFueTtcclxuICAgICAgICBsZXQgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIG9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAob2JqZWN0Lmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCAxIC8gY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmplY3RbcHJvcF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm5zIGEgZGVmYXVsdCBpZiBnaXZlbiB2YWx1ZSBkb2Vzbid0IGV4aXN0LCBvdGhlcndpc2UganVzdCB2YWx1ZS5cclxuICAgIHB1YmxpYyBzdGF0aWMgVmFsdWVPckRlZmF1bHQodmFsdWU6IGFueSwgZGVmYXVsdFJldHVyblZhbDogYW55ID0gXCJcIik6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIG5vdE5pbGwodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0UmV0dXJuVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIF9pc0FyZ3VtZW50cyh4OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBzdXBwb3J0c0FyZ3NDbGFzczogYm9vbGVhbiA9IHRoaXMuX3N1cHBvcnRzQXJndW1lbnRzQ2xhc3MoKTtcclxuICAgICAgICByZXR1cm4gc3VwcG9ydHNBcmdzQ2xhc3MgPyB0aGlzLl9pc0FyZ3VtZW50c1doZW5BcmdzQ2xhc3NTdXBwb3J0ZWQoeCkgOiB0aGlzLl9pc0FyZ3VtZW50c1doZW5BcmdzQ2xhc3NOb3RTdXBwb3J0ZWQoeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzQXJndW1lbnRzV2hlbkFyZ3NDbGFzc05vdFN1cHBvcnRlZChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBvYmplY3QgJiZcclxuICAgICAgICAgICAgdHlwZW9mIG9iamVjdCA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxyXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBcImNhbGxlZVwiKSAmJlxyXG4gICAgICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgXCJjYWxsZWVcIikgfHxcclxuICAgICAgICAgICAgZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzQXJndW1lbnRzV2hlbkFyZ3NDbGFzc1N1cHBvcnRlZChvYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfaXNCdWZmZXIoeDogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgeC5jb3B5ICE9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHguc2xpY2UgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gXCJudW1iZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2lzVW5kZWZpbmVkT3JOdWxsKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBfb2JqRXF1aXYoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgaTogbnVtYmVyLCBrZXk6IHN0cmluZztcclxuICAgICAgICBpZiAodGhpcy5faXNVbmRlZmluZWRPck51bGwoYSkgfHwgdGhpcy5faXNVbmRlZmluZWRPck51bGwoYikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNBcmd1bWVudHMoYSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0FyZ3VtZW50cyhiKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGEgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKTtcclxuICAgICAgICAgICAgYiA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5EZWVwRXF1YWxzKGEsIGIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faXNCdWZmZXIoYSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc0J1ZmZlcihiKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBrYTogc3RyaW5nW107XHJcbiAgICAgICAgbGV0IGtiOiBzdHJpbmdbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBrYSA9IE9iamVjdC5rZXlzKGEpO1xyXG4gICAgICAgICAgICBrYiA9IE9iamVjdC5rZXlzKGIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGthLnNvcnQoKTtcclxuICAgICAgICBrYi5zb3J0KCk7XHJcblxyXG4gICAgICAgIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChrYVtpXSAhPT0ga2JbaV0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAga2V5ID0ga2FbaV07XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5EZWVwRXF1YWxzKGFba2V5XSwgYltrZXldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX3N1cHBvcnRzQXJndW1lbnRzQ2xhc3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==