@vendure/admin-ui 1.5.2 → 1.6.0

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 (116) hide show
  1. package/bundles/vendure-admin-ui-catalog.umd.js +206 -172
  2. package/bundles/vendure-admin-ui-catalog.umd.js.map +1 -1
  3. package/bundles/vendure-admin-ui-core.umd.js +2333 -1860
  4. package/bundles/vendure-admin-ui-core.umd.js.map +1 -1
  5. package/bundles/vendure-admin-ui-dashboard.umd.js +2 -2
  6. package/bundles/vendure-admin-ui-login.umd.js +2 -2
  7. package/bundles/vendure-admin-ui-login.umd.js.map +1 -1
  8. package/bundles/vendure-admin-ui-marketing.umd.js +1 -1
  9. package/bundles/vendure-admin-ui-marketing.umd.js.map +1 -1
  10. package/bundles/vendure-admin-ui-order.umd.js +1 -1
  11. package/bundles/vendure-admin-ui-order.umd.js.map +1 -1
  12. package/catalog/components/collection-contents/collection-contents.component.d.ts +7 -2
  13. package/catalog/components/collection-detail/collection-detail.component.d.ts +12 -4
  14. package/catalog/components/collection-list/collection-list.component.d.ts +2 -0
  15. package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
  16. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +5 -1
  17. package/catalog/components/collection-tree/collection-tree.component.d.ts +1 -0
  18. package/catalog/providers/product-detail/product-detail.service.d.ts +2 -2
  19. package/catalog/public_api.d.ts +0 -1
  20. package/catalog/vendure-admin-ui-catalog.metadata.json +1 -1
  21. package/core/common/generated-types.d.ts +32 -3
  22. package/core/common/utilities/selection-manager.d.ts +23 -0
  23. package/core/common/version.d.ts +1 -1
  24. package/core/components/app-shell/app-shell.component.d.ts +1 -0
  25. package/core/data/definitions/collection-definitions.d.ts +1 -0
  26. package/core/data/providers/collection-data.service.d.ts +6 -2
  27. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  28. package/core/public_api.d.ts +5 -0
  29. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +21 -6
  30. package/core/shared/components/configurable-input/configurable-input.component.d.ts +7 -2
  31. package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +35 -0
  32. package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
  33. package/core/shared/components/select-toggle/select-toggle.component.d.ts +1 -0
  34. package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +25 -0
  35. package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +20 -0
  36. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +3 -1
  37. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +5 -2
  38. package/core/vendure-admin-ui-core.metadata.json +1 -1
  39. package/dashboard/vendure-admin-ui-dashboard.metadata.json +1 -1
  40. package/esm2015/catalog/catalog.module.js +1 -3
  41. package/esm2015/catalog/components/assets/assets.component.js +1 -1
  42. package/esm2015/catalog/components/collection-contents/collection-contents.component.js +51 -14
  43. package/esm2015/catalog/components/collection-detail/collection-detail.component.js +67 -29
  44. package/esm2015/catalog/components/collection-list/collection-list.component.js +30 -4
  45. package/esm2015/catalog/components/collection-tree/array-to-tree.js +3 -3
  46. package/esm2015/catalog/components/collection-tree/collection-tree-node.component.js +27 -4
  47. package/esm2015/catalog/components/collection-tree/collection-tree.component.js +4 -2
  48. package/esm2015/catalog/components/product-detail/product-detail.component.js +1 -1
  49. package/esm2015/catalog/components/product-list/product-list.component.js +3 -3
  50. package/esm2015/catalog/components/product-variants-list/product-variants-list.component.js +1 -1
  51. package/esm2015/catalog/public_api.js +1 -2
  52. package/esm2015/core/app.component.module.js +1 -1
  53. package/esm2015/core/common/base-detail.component.js +1 -1
  54. package/esm2015/core/common/deactivate-aware.js +1 -1
  55. package/esm2015/core/common/generated-types.js +1 -1
  56. package/esm2015/core/common/introspection-result.js +255 -189
  57. package/esm2015/core/common/utilities/selection-manager.js +64 -0
  58. package/esm2015/core/common/version.js +2 -2
  59. package/esm2015/core/components/app-shell/app-shell.component.js +4 -3
  60. package/esm2015/core/core.module.js +1 -1
  61. package/esm2015/core/data/definitions/collection-definitions.js +18 -1
  62. package/esm2015/core/data/definitions/order-definitions.js +2 -1
  63. package/esm2015/core/data/definitions/shared-definitions.js +29 -28
  64. package/esm2015/core/data/providers/collection-data.service.js +5 -2
  65. package/esm2015/core/providers/local-storage/local-storage.service.js +1 -1
  66. package/esm2015/core/public_api.js +6 -1
  67. package/esm2015/core/shared/components/asset-gallery/asset-gallery.component.js +24 -42
  68. package/esm2015/core/shared/components/configurable-input/configurable-input.component.js +13 -3
  69. package/esm2015/core/shared/components/help-tooltip/help-tooltip.component.js +1 -1
  70. package/esm2015/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.js +129 -0
  71. package/esm2015/core/shared/components/product-search-input/product-search-input.component.js +104 -0
  72. package/esm2015/core/shared/components/rich-text-editor/rich-text-editor.component.js +1 -1
  73. package/esm2015/core/shared/components/select-toggle/select-toggle.component.js +5 -3
  74. package/esm2015/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.js +45 -0
  75. package/esm2015/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.js +53 -0
  76. package/esm2015/core/shared/dynamic-form-inputs/register-dynamic-input-components.js +5 -1
  77. package/esm2015/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.js +8 -7
  78. package/esm2015/core/shared/shared.module.js +9 -1
  79. package/esm2015/dashboard/components/dashboard/dashboard.component.js +1 -1
  80. package/esm2015/dashboard/widgets/order-summary-widget/order-summary-widget.component.js +1 -1
  81. package/esm2015/login/components/login/login.component.js +3 -3
  82. package/esm2015/marketing/components/promotion-detail/promotion-detail.component.js +2 -2
  83. package/esm2015/order/components/order-list/order-list.component.js +2 -2
  84. package/fesm2015/vendure-admin-ui-catalog.js +181 -157
  85. package/fesm2015/vendure-admin-ui-catalog.js.map +1 -1
  86. package/fesm2015/vendure-admin-ui-core.js +2156 -1691
  87. package/fesm2015/vendure-admin-ui-core.js.map +1 -1
  88. package/fesm2015/vendure-admin-ui-dashboard.js +2 -2
  89. package/fesm2015/vendure-admin-ui-login.js +2 -2
  90. package/fesm2015/vendure-admin-ui-login.js.map +1 -1
  91. package/fesm2015/vendure-admin-ui-marketing.js +1 -1
  92. package/fesm2015/vendure-admin-ui-marketing.js.map +1 -1
  93. package/fesm2015/vendure-admin-ui-order.js +1 -1
  94. package/fesm2015/vendure-admin-ui-order.js.map +1 -1
  95. package/login/vendure-admin-ui-login.metadata.json +1 -1
  96. package/marketing/vendure-admin-ui-marketing.metadata.json +1 -1
  97. package/order/vendure-admin-ui-order.metadata.json +1 -1
  98. package/package.json +2 -2
  99. package/static/i18n-messages/cs.json +9 -0
  100. package/static/i18n-messages/de.json +9 -0
  101. package/static/i18n-messages/en.json +10 -1
  102. package/static/i18n-messages/es.json +9 -0
  103. package/static/i18n-messages/fr.json +9 -0
  104. package/static/i18n-messages/it.json +9 -0
  105. package/static/i18n-messages/pl.json +9 -0
  106. package/static/i18n-messages/pt_BR.json +9 -0
  107. package/static/i18n-messages/pt_PT.json +9 -0
  108. package/static/i18n-messages/ru.json +9 -0
  109. package/static/i18n-messages/uk.json +9 -0
  110. package/static/i18n-messages/zh_Hans.json +9 -0
  111. package/static/i18n-messages/zh_Hant.json +9 -0
  112. package/static/styles/global/_forms.scss +4 -5
  113. package/static/styles/global/_overrides.scss +5 -1
  114. package/static/styles/theme/default.scss +13 -1
  115. package/static/theme.min.css +1 -1
  116. package/esm2015/catalog/components/product-search-input/product-search-input.component.js +0 -104
@@ -1,104 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { SELECTION_MODEL_FACTORY } from '@ng-select/ng-select';
3
- import { SingleSearchSelectionModelFactory } from '@vendure/admin-ui/core';
4
- import { notNullOrUndefined } from '@vendure/common/lib/shared-utils';
5
- const ɵ0 = SingleSearchSelectionModelFactory;
6
- export class ProductSearchInputComponent {
7
- constructor() {
8
- this.searchTermChange = new EventEmitter();
9
- this.facetValueChange = new EventEmitter();
10
- this.lastTerm = '';
11
- this.lastFacetValueIds = [];
12
- this.filterFacetResults = (term, item) => {
13
- if (!this.isFacetValueItem(item)) {
14
- return false;
15
- }
16
- const cix = term.indexOf(':');
17
- const facetName = cix > -1 ? term.toLowerCase().slice(0, cix) : null;
18
- const facetVal = cix > -1 ? term.toLowerCase().slice(cix + 1) : term.toLowerCase();
19
- if (facetName) {
20
- return (item.facetValue.facet.name.toLowerCase().includes(facetName) &&
21
- item.facetValue.name.toLocaleLowerCase().includes(facetVal));
22
- }
23
- return (item.facetValue.name.toLowerCase().includes(term.toLowerCase()) ||
24
- item.facetValue.facet.name.toLowerCase().includes(term.toLowerCase()));
25
- };
26
- this.isFacetValueItem = (input) => {
27
- return typeof input === 'object' && !!input && input.hasOwnProperty('facetValue');
28
- };
29
- }
30
- setSearchTerm(term) {
31
- if (term) {
32
- this.selectComponent.select({ label: term, value: { label: term } });
33
- }
34
- else {
35
- const currentTerm = this.selectComponent.selectedItems.find(i => !this.isFacetValueItem(i.value));
36
- if (currentTerm) {
37
- this.selectComponent.unselect(currentTerm);
38
- }
39
- }
40
- }
41
- setFacetValues(ids) {
42
- const items = this.selectComponent.items;
43
- this.selectComponent.selectedItems.forEach(item => {
44
- if (this.isFacetValueItem(item.value) && !ids.includes(item.value.facetValue.id)) {
45
- this.selectComponent.unselect(item);
46
- }
47
- });
48
- ids.map(id => {
49
- return items === null || items === void 0 ? void 0 : items.find(item => this.isFacetValueItem(item) && item.facetValue.id === id);
50
- })
51
- .filter(notNullOrUndefined)
52
- .forEach(item => {
53
- const isSelected = this.selectComponent.selectedItems.find(i => {
54
- const val = i.value;
55
- if (this.isFacetValueItem(val)) {
56
- return val.facetValue.id === item.facetValue.id;
57
- }
58
- return false;
59
- });
60
- if (!isSelected) {
61
- this.selectComponent.select({ label: '', value: item });
62
- }
63
- });
64
- }
65
- onSelectChange(selectedItems) {
66
- if (!Array.isArray(selectedItems)) {
67
- selectedItems = [selectedItems];
68
- }
69
- const searchTermItem = selectedItems.find(item => !this.isFacetValueItem(item));
70
- const searchTerm = searchTermItem ? searchTermItem.label : '';
71
- const facetValueIds = selectedItems.filter(this.isFacetValueItem).map(i => i.facetValue.id);
72
- if (searchTerm !== this.lastTerm) {
73
- this.searchTermChange.emit(searchTerm);
74
- this.lastTerm = searchTerm;
75
- }
76
- if (this.lastFacetValueIds.join(',') !== facetValueIds.join(',')) {
77
- this.facetValueChange.emit(facetValueIds);
78
- this.lastFacetValueIds = facetValueIds;
79
- }
80
- }
81
- addTagFn(item) {
82
- return { label: item };
83
- }
84
- isSearchHeaderSelected() {
85
- return this.selectComponent.itemsList.markedIndex === -1;
86
- }
87
- }
88
- ProductSearchInputComponent.decorators = [
89
- { type: Component, args: [{
90
- selector: 'vdr-product-search-input',
91
- template: "<ng-select\r\n [addTag]=\"addTagFn\"\r\n [placeholder]=\"'catalog.search-product-name-or-code' | translate\"\r\n [items]=\"facetValueResults\"\r\n [searchFn]=\"filterFacetResults\"\r\n [hideSelected]=\"true\"\r\n [multiple]=\"true\"\r\n [markFirst]=\"false\"\r\n (change)=\"onSelectChange($event)\"\r\n #selectComponent\r\n>\r\n <ng-template ng-header-tmp>\r\n <div\r\n class=\"search-header\"\r\n *ngIf=\"selectComponent.searchTerm\"\r\n [class.selected]=\"isSearchHeaderSelected()\"\r\n (click)=\"selectComponent.selectTag()\"\r\n >\r\n {{ 'catalog.search-for-term' | translate }}: {{ selectComponent.searchTerm }}\r\n </div>\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <ng-container *ngIf=\"item.facetValue\">\r\n <vdr-facet-value-chip\r\n [facetValue]=\"item.facetValue\"\r\n [removable]=\"true\"\r\n (remove)=\"clear(item)\"\r\n ></vdr-facet-value-chip>\r\n </ng-container>\r\n <ng-container *ngIf=\"!item.facetValue\">\r\n <vdr-chip [icon]=\"'times'\" (iconClick)=\"clear(item)\">\"{{ item.label }}\"</vdr-chip>\r\n </ng-container>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container *ngIf=\"item.facetValue\">\r\n <vdr-facet-value-chip [facetValue]=\"item.facetValue\" [removable]=\"false\"></vdr-facet-value-chip>\r\n </ng-container>\r\n </ng-template>\r\n</ng-select>\r\n",
92
- changeDetection: ChangeDetectionStrategy.OnPush,
93
- providers: [{ provide: SELECTION_MODEL_FACTORY, useValue: ɵ0 }],
94
- styles: [":host{margin-top:6px;display:block;width:100%}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background:none;margin:0}:host ::ng-deep .ng-dropdown-panel-items div.ng-option:last-child{display:none}:host ::ng-deep .ng-dropdown-panel .ng-dropdown-header{border:none;padding:0}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding:0}:host ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-left:8px}ng-select{width:100%;min-width:300px;margin-right:12px}.search-header{padding:8px 10px;border-bottom:1px solid var(--color-component-border-100);cursor:pointer}.search-header.selected,.search-header:hover{background-color:var(--color-component-bg-200)}\n"]
95
- },] }
96
- ];
97
- ProductSearchInputComponent.propDecorators = {
98
- facetValueResults: [{ type: Input }],
99
- searchTermChange: [{ type: Output }],
100
- facetValueChange: [{ type: Output }],
101
- selectComponent: [{ type: ViewChild, args: ['selectComponent', { static: true },] }]
102
- };
103
- export { ɵ0 };
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zZWFyY2gtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL3Byb2R1Y3Qtc2VhcmNoLWlucHV0L3Byb2R1Y3Qtc2VhcmNoLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQXFCLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEYsT0FBTyxFQUFrQixpQ0FBaUMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO1dBT1IsaUNBQWlDO0FBRS9GLE1BQU0sT0FBTywyQkFBMkI7SUFQeEM7UUFTYyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFFbEQsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLHNCQUFpQixHQUFhLEVBQUUsQ0FBQztRQXdDekMsdUJBQWtCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBb0QsRUFBRSxFQUFFO1lBQ3hGLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcs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LElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztTQUM5QjtRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUztRQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDOzs7WUF0R0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLHlvREFBb0Q7Z0JBRXBELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLElBQW1DLEVBQUUsQ0FBQzs7YUFDakc7OztnQ0FFSSxLQUFLOytCQUNMLE1BQU07K0JBQ04sTUFBTTs4QkFDTixTQUFTLFNBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdTZWxlY3RDb21wb25lbnQsIFNFTEVDVElPTl9NT0RFTF9GQUNUT1JZIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xyXG5pbXBvcnQgeyBTZWFyY2hQcm9kdWN0cywgU2luZ2xlU2VhcmNoU2VsZWN0aW9uTW9kZWxGYWN0b3J5IH0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1zZWFyY2gtaW5wdXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3Qtc2VhcmNoLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogU0VMRUNUSU9OX01PREVMX0ZBQ1RPUlksIHVzZVZhbHVlOiBTaW5nbGVTZWFyY2hTZWxlY3Rpb25Nb2RlbEZhY3RvcnkgfV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U2VhcmNoSW5wdXRDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgZmFjZXRWYWx1ZVJlc3VsdHM6IFNlYXJjaFByb2R1Y3RzLkZhY2V0VmFsdWVzW107XHJcbiAgICBAT3V0cHV0KCkgc2VhcmNoVGVybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gICAgQE91dHB1dCgpIGZhY2V0VmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xyXG4gICAgQFZpZXdDaGlsZCgnc2VsZWN0Q29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBzZWxlY3RDb21wb25lbnQ6IE5nU2VsZWN0Q29tcG9uZW50O1xyXG4gICAgcHJpdmF0ZSBsYXN0VGVybSA9ICcnO1xyXG4gICAgcHJpdmF0ZSBsYXN0RmFjZXRWYWx1ZUlkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBzZXRTZWFyY2hUZXJtKHRlcm06IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICBpZiAodGVybSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5zZWxlY3QoeyBsYWJlbDogdGVybSwgdmFsdWU6IHsgbGFiZWw6IHRlcm0gfSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGVybSA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXMuZmluZChpID0+ICF0aGlzLmlzRmFjZXRWYWx1ZUl0ZW0oaS52YWx1ZSkpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFRlcm0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LnVuc2VsZWN0KGN1cnJlbnRUZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRGYWNldFZhbHVlcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLnNlbGVjdENvbXBvbmVudC5pdGVtcztcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZhY2V0VmFsdWVJdGVtKGl0ZW0udmFsdWUpICYmICFpZHMuaW5jbHVkZXMoaXRlbS52YWx1ZS5mYWNldFZhbHVlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQudW5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWRzLm1hcChpZCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcz8uZmluZChpdGVtID0+IHRoaXMuaXNGYWNldFZhbHVlSXRlbShpdGVtKSAmJiBpdGVtLmZhY2V0VmFsdWUuaWQgPT09IGlkKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZClcclxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcy5maW5kKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGYWNldFZhbHVlSXRlbSh2YWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwuZmFjZXRWYWx1ZS5pZCA9PT0gaXRlbS5mYWNldFZhbHVlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LnNlbGVjdCh7IGxhYmVsOiAnJywgdmFsdWU6IGl0ZW0gfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckZhY2V0UmVzdWx0cyA9ICh0ZXJtOiBzdHJpbmcsIGl0ZW06IFNlYXJjaFByb2R1Y3RzLkZhY2V0VmFsdWVzIHwgeyBsYWJlbDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNGYWNldFZhbHVlSXRlbShpdGVtKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjaXggPSB0ZXJtLmluZGV4T2YoJzonKTtcclxuICAgICAgICBjb25zdCBmYWNldE5hbWUgPSBjaXggPiAtMSA/IHRlcm0udG9Mb3dlckNhc2UoKS5zbGljZSgwLCBjaXgpIDogbnVsbDtcclxuICAgICAgICBjb25zdCBmYWNldFZhbCA9IGNpeCA+IC0xID8gdGVybS50b0xvd2VyQ2FzZSgpLnNsaWNlKGNpeCArIDEpIDogdGVybS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICBpZiAoZmFjZXROYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBpdGVtLmZhY2V0VmFsdWUuZmFjZXQubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZhY2V0TmFtZSkgJiZcclxuICAgICAgICAgICAgICAgIGl0ZW0uZmFjZXRWYWx1ZS5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmFjZXRWYWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpdGVtLmZhY2V0VmFsdWUubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSkgfHxcclxuICAgICAgICAgICAgaXRlbS5mYWNldFZhbHVlLmZhY2V0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgb25TZWxlY3RDaGFuZ2Uoc2VsZWN0ZWRJdGVtczogQXJyYXk8U2VhcmNoUHJvZHVjdHMuRmFjZXRWYWx1ZXMgfCB7IGxhYmVsOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWRJdGVtcykpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IFtzZWxlY3RlZEl0ZW1zXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoVGVybUl0ZW0gPSBzZWxlY3RlZEl0ZW1zLmZpbmQoaXRlbSA9PiAhdGhpcy5pc0ZhY2V0VmFsdWVJdGVtKGl0ZW0pKSBhc1xyXG4gICAgICAgICAgICB8IHsgbGFiZWw6IHN0cmluZyB9XHJcbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtSXRlbSA/IHNlYXJjaFRlcm1JdGVtLmxhYmVsIDogJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IGZhY2V0VmFsdWVJZHMgPSBzZWxlY3RlZEl0ZW1zLmZpbHRlcih0aGlzLmlzRmFjZXRWYWx1ZUl0ZW0pLm1hcChpID0+IGkuZmFjZXRWYWx1ZS5pZCk7XHJcblxyXG4gICAgICAgIGlmIChzZWFyY2hUZXJtICE9PSB0aGlzLmxhc3RUZXJtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZS5lbWl0KHNlYXJjaFRlcm0pO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RUZXJtID0gc2VhcmNoVGVybTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdEZhY2V0VmFsdWVJZHMuam9pbignLCcpICE9PSBmYWNldFZhbHVlSWRzLmpvaW4oJywnKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZhY2V0VmFsdWVDaGFuZ2UuZW1pdChmYWNldFZhbHVlSWRzKTtcclxuICAgICAgICAgICAgdGhpcy5sYXN0RmFjZXRWYWx1ZUlkcyA9IGZhY2V0VmFsdWVJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZFRhZ0ZuKGl0ZW06IGFueSkge1xyXG4gICAgICAgIHJldHVybiB7IGxhYmVsOiBpdGVtIH07XHJcbiAgICB9XHJcblxyXG4gICAgaXNTZWFyY2hIZWFkZXJTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0Lm1hcmtlZEluZGV4ID09PSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzRmFjZXRWYWx1ZUl0ZW0gPSAoaW5wdXQ6IHVua25vd24pOiBpbnB1dCBpcyBTZWFyY2hQcm9kdWN0cy5GYWNldFZhbHVlcyA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgISFpbnB1dCAmJiBpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnZmFjZXRWYWx1ZScpO1xyXG4gICAgfTtcclxufVxyXG4iXX0=