@mediusinc/mng-commons 5.0.0-rc.1 → 5.0.0-rc.3
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.
- package/core/data-providers/base-data-provider.factory.d.ts +13 -0
- package/core/data-providers/base.data-provider.d.ts +2 -14
- package/core/descriptors/editor.descriptor.d.ts +1 -1
- package/core/descriptors/tableview.descriptor.d.ts +5 -5
- package/core/directives/component.directive.d.ts +2 -2
- package/core/index.d.ts +1 -0
- package/core/router/route-builder.d.ts +149 -26
- package/core/router/routes-builder.d.ts +28 -13
- package/core/security/permission.service.d.ts +1 -0
- package/core/services/commons-router.service.d.ts +3 -3
- package/core/services/commons.service.d.ts +31 -42
- package/core/services/tokens/module-config.token.d.ts +2 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +5 -5
- package/esm2022/core/components/pages/error/error.page.component.mjs +5 -5
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +5 -5
- package/esm2022/core/data-providers/base-data-provider.factory.mjs +28 -0
- package/esm2022/core/data-providers/base.data-provider.mjs +1 -31
- package/esm2022/core/descriptors/editor.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +12 -9
- package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +3 -3
- package/esm2022/core/directives/template.directive.mjs +3 -3
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/pipes/boolean.pipe.mjs +3 -3
- package/esm2022/core/pipes/class-map.pipe.mjs +3 -3
- package/esm2022/core/pipes/enum.pipe.mjs +3 -3
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +3 -3
- package/esm2022/core/pipes/enumerate.pipe.mjs +3 -3
- package/esm2022/core/pipes/getter.pipe.mjs +3 -3
- package/esm2022/core/pipes/i18n-property.pipe.mjs +3 -3
- package/esm2022/core/pipes/json-path.pipe.mjs +3 -3
- package/esm2022/core/pipes/parametrize.pipe.mjs +3 -3
- package/esm2022/core/pipes/template.pipe.mjs +3 -3
- package/esm2022/core/router/route-builder.mjs +211 -84
- package/esm2022/core/router/routes-builder.mjs +41 -43
- package/esm2022/core/security/permission.service.mjs +7 -5
- package/esm2022/core/services/commons-init.service.mjs +5 -5
- package/esm2022/core/services/commons-router.service.mjs +18 -17
- package/esm2022/core/services/commons.service.mjs +112 -169
- package/esm2022/core/services/local-storage-config.service.mjs +3 -3
- package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +4 -4
- package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +31 -0
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -31
- package/esm2022/form/api/index.mjs +2 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +105 -102
- package/esm2022/form/components/date-range/date-range.component.mjs +3 -3
- package/esm2022/form/components/dropdown/dropdown.component.mjs +148 -90
- package/esm2022/form/directives/input-trim.directive.mjs +3 -3
- package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +8 -0
- package/esm2022/model/descriptors/enum.descriptor.mjs +3 -6
- package/esm2022/model/descriptors/model.descriptor.mjs +22 -9
- package/esm2022/model/descriptors/type.descriptor.mjs +3 -9
- package/esm2022/model/index.mjs +3 -1
- package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +33 -0
- package/esm2022/table/api/data-providers/table.data-provider.mjs +1 -31
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
- package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +89 -0
- package/esm2022/table/api/descriptors/table.descriptor.mjs +4 -139
- package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +97 -0
- package/esm2022/table/api/index.mjs +4 -1
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +8 -9
- package/esm2022/table/components/column-value/column-value.component.mjs +4 -4
- package/esm2022/table/components/table/table.component.mjs +7 -7
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +5 -5
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +3 -3
- package/esm2022/table/services/data-list.service.mjs +4 -4
- package/esm2022/tableview/action/components/action/action.component.mjs +142 -190
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +58 -68
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +133 -154
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +22 -40
- package/esm2022/tableview/action/components/route/action-route.component.mjs +21 -26
- package/esm2022/tableview/action/components/table/action-table.component.mjs +4 -4
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
- package/esm2022/tableview/action/services/action-executor.service.mjs +10 -10
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/navigation.service.mjs +6 -5
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/view-container.service.mjs +8 -24
- package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +119 -0
- package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +77 -0
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +28 -80
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +45 -0
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -32
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +3 -69
- package/esm2022/tableview/api/action/models/action-component.model.mjs +1 -1
- package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
- package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +1 -1
- package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +33 -0
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +1 -31
- package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +81 -0
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +24 -161
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +13 -5
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +4 -4
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +36 -7
- package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +95 -0
- package/esm2022/tableview/api/editor/helpers/field-validators.mjs +17 -27
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/field-validation.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/field.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
- package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
- package/esm2022/tableview/api/index.mjs +11 -1
- package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +47 -0
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +5 -46
- package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +111 -0
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +26 -186
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +2 -2
- package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +5 -5
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +53 -18
- package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +110 -0
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +2 -2
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +163 -138
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +9 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +13 -16
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +103 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +12 -16
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +36 -53
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +20 -24
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +24 -28
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +30 -31
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
- package/esm2022/tableview/editor/helpers/editor-formly.mjs +85 -56
- package/esm2022/tableview/editor/helpers/formly-config.mjs +5 -3
- package/esm2022/tableview/editor/models/formly-config.model.mjs +1 -1
- package/esm2022/tableview/editor/services/form-editor.service.mjs +96 -0
- package/esm2022/tableview/index.mjs +2 -1
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +10 -10
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +26 -43
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +17 -43
- package/fesm2022/mediusinc-mng-commons-core.mjs +460 -390
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +3 -3
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs +18 -18
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +257 -195
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs +43 -33
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +192 -146
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +26 -27
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +906 -665
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +1015 -960
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/form/api/data-providers/lookup-data-provider.factory.d.ts +18 -0
- package/form/api/data-providers/lookup.data-provider.d.ts +2 -14
- package/form/api/index.d.ts +1 -0
- package/form/components/autocomplete/autocomplete.component.d.ts +33 -24
- package/form/components/dropdown/dropdown.component.d.ts +38 -25
- package/model/data-providers/base-from-type-data-provider.factory.d.ts +8 -0
- package/model/descriptors/enum.descriptor.d.ts +1 -2
- package/model/descriptors/model.descriptor.d.ts +11 -4
- package/model/descriptors/type.descriptor.d.ts +2 -4
- package/model/index.d.ts +1 -0
- package/package.json +1 -1
- package/table/api/data-providers/table-data-provider.factory.d.ts +18 -0
- package/table/api/data-providers/table.data-provider.d.ts +2 -14
- package/table/api/descriptors/table-descriptor.factory.d.ts +44 -0
- package/table/api/descriptors/table.descriptor.d.ts +4 -65
- package/table/api/helpers/table-descriptor-helpers.d.ts +44 -0
- package/table/api/index.d.ts +3 -0
- package/table/components/column-filter-full/column-filter-full.component.d.ts +5 -4
- package/table/components/table/table.component.d.ts +11 -11
- package/table/services/data-list.service.d.ts +9 -10
- package/tableview/action/components/action/action.component.d.ts +37 -44
- package/tableview/action/components/editor/action-editor.component.d.ts +20 -18
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +24 -26
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +11 -14
- package/tableview/action/components/route/action-route.component.d.ts +7 -12
- package/tableview/action/components/table/action-table.component.d.ts +3 -3
- package/tableview/action/models/execution/action-instance.model.d.ts +2 -1
- package/tableview/action/services/view-container.service.d.ts +3 -9
- package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +36 -0
- package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +31 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +25 -37
- package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +15 -0
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -9
- package/tableview/api/action/descriptors/action.descriptor.d.ts +4 -27
- package/tableview/api/action/models/action-component.model.d.ts +8 -8
- package/tableview/api/action/models/execution/action-instance.model.d.ts +2 -1
- package/tableview/api/action/models/execution/view-container.model.d.ts +4 -3
- package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +18 -0
- package/tableview/api/editor/data-providers/editor.data-provider.d.ts +2 -14
- package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +44 -0
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +44 -105
- package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +3 -3
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +35 -33
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +8 -7
- package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -2
- package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +8 -8
- package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +10 -13
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +16 -1
- package/tableview/api/editor/helpers/editor-descriptor-helpers.d.ts +43 -0
- package/tableview/api/editor/helpers/field-validators.d.ts +7 -3
- package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
- package/tableview/api/editor/models/field-action-context.model.d.ts +10 -8
- package/tableview/api/editor/models/field-validation.model.d.ts +26 -0
- package/tableview/api/editor/models/field.model.d.ts +0 -10
- package/tableview/api/editor/models/form-editor.event.d.ts +26 -16
- package/tableview/api/editor/models/form-editor.interface.d.ts +38 -8
- package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
- package/tableview/api/editor/models/formly-field.model.d.ts +9 -7
- package/tableview/api/index.d.ts +10 -0
- package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +25 -0
- package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +3 -20
- package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +49 -0
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +41 -102
- package/tableview/api/tableview/helpers/tableview-create.d.ts +2 -2
- package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +4 -2
- package/tableview/api/tableview/helpers/tableview-descriptor-helpers.d.ts +42 -0
- package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +1 -1
- package/tableview/editor/components/editor/form-editor.component.d.ts +54 -36
- package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +5 -3
- package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +1 -0
- package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +22 -0
- package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +5 -7
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -4
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +3 -5
- package/tableview/editor/helpers/editor-formly.d.ts +11 -10
- package/tableview/editor/models/formly-config.model.d.ts +1 -1
- package/tableview/editor/services/form-editor.service.d.ts +39 -0
- package/tableview/index.d.ts +1 -0
- package/tableview/tableview/components/route/tableview-route.component.d.ts +2 -2
- package/tableview/tableview/components/tableview/tableview.component.d.ts +11 -10
- package/tableview/tableview/router/tableview-route-builder.d.ts +7 -13
- package/version-info.json +11 -0
|
@@ -12,89 +12,95 @@ export class RouteBuilder {
|
|
|
12
12
|
this.routePath = [this.route.path];
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
static createRedirect(path, redirectTo, pathMatch = 'prefix') {
|
|
22
|
-
return new RouteBuilder({
|
|
23
|
-
path: path,
|
|
24
|
-
redirectTo: redirectTo,
|
|
25
|
-
pathMatch: pathMatch
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
static createLazyRouteModule(path, loadChildren, canMatch) {
|
|
29
|
-
const route = { path: path, loadChildren: loadChildren };
|
|
30
|
-
if (canMatch?.length) {
|
|
31
|
-
route.canMatch = canMatch;
|
|
32
|
-
}
|
|
33
|
-
return new RouteBuilder(route);
|
|
34
|
-
}
|
|
35
|
-
static createLazyRouteComponent(path, loadComponent, canMatch) {
|
|
36
|
-
const route = { path: path, loadComponent: loadComponent };
|
|
37
|
-
if (canMatch?.length) {
|
|
38
|
-
route.canMatch = canMatch;
|
|
39
|
-
}
|
|
40
|
-
return new RouteBuilder(route);
|
|
41
|
-
}
|
|
42
|
-
static createFromRoute(route) {
|
|
43
|
-
return new RouteBuilder(route);
|
|
44
|
-
}
|
|
15
|
+
/**
|
|
16
|
+
* Sets the link to root Routes builder.
|
|
17
|
+
*
|
|
18
|
+
* @param {RoutesBuilder} routesBuilder - The routes builder to set as the root.
|
|
19
|
+
*/
|
|
45
20
|
withRoot(routesBuilder) {
|
|
46
21
|
this.root = routesBuilder;
|
|
47
22
|
return this;
|
|
48
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Sets the link to parent Route builder.
|
|
26
|
+
*
|
|
27
|
+
* @param {RouteBuilder} parent - The parent route builder.
|
|
28
|
+
*/
|
|
49
29
|
withParent(parent) {
|
|
50
30
|
this.parent = parent;
|
|
51
31
|
this.routePath = removeRouteEmptyPathSegments([...this.parent.routePath, this.route.path ?? '']);
|
|
52
32
|
return this;
|
|
53
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Sets the breadcrumb.
|
|
36
|
+
*
|
|
37
|
+
* @param {BreadcrumbType} breadcrumb - Breadcrumb configuration.
|
|
38
|
+
*/
|
|
54
39
|
withBreadcrumb(breadcrumb) {
|
|
55
|
-
this.breadcrumb = breadcrumb;
|
|
56
40
|
this.routeData.breadcrumb = breadcrumb;
|
|
57
41
|
return this;
|
|
58
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Sets the page title for the current route.
|
|
45
|
+
*
|
|
46
|
+
* @param {string} pageTitle - The title of the page.
|
|
47
|
+
*/
|
|
59
48
|
withPageTitle(pageTitle) {
|
|
60
|
-
this.pageTitle = pageTitle;
|
|
61
49
|
this.routeData.pageTitle = pageTitle;
|
|
62
50
|
return this;
|
|
63
51
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.route.pathMatch = pathMatch;
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets the page title and the breadcrumb.
|
|
54
|
+
*
|
|
55
|
+
* @param {string} title - The title of the page and breadcrumb.
|
|
56
|
+
*/
|
|
72
57
|
withTitle(title) {
|
|
73
58
|
this.withPageTitle(title);
|
|
74
59
|
this.withBreadcrumb(title);
|
|
75
60
|
return this;
|
|
76
61
|
}
|
|
77
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Adds a can activate guard to route.
|
|
64
|
+
*
|
|
65
|
+
* @param {CanActivateFn} fn - The CanActivate function to be added.
|
|
66
|
+
*/
|
|
67
|
+
withCanActivate(fn) {
|
|
78
68
|
if (!this.route.canActivate) {
|
|
79
69
|
this.route.canActivate = [];
|
|
80
70
|
}
|
|
81
|
-
this.route.canActivate.push(
|
|
71
|
+
this.route.canActivate.push(fn);
|
|
82
72
|
return this;
|
|
83
73
|
}
|
|
84
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Adds a can deactivate guard to route.
|
|
76
|
+
*
|
|
77
|
+
* @param {CanDeactivateFn} fn - The CanActivate function to be added.
|
|
78
|
+
*/
|
|
79
|
+
withCanDeactivate(fn) {
|
|
85
80
|
if (!this.route.canDeactivate) {
|
|
86
81
|
this.route.canDeactivate = [];
|
|
87
82
|
}
|
|
88
|
-
this.route.canDeactivate.push(
|
|
83
|
+
this.route.canDeactivate.push(fn);
|
|
89
84
|
return this;
|
|
90
85
|
}
|
|
91
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Adds a resolver to route.
|
|
88
|
+
*
|
|
89
|
+
* @param {string} name - Name of the resolver.
|
|
90
|
+
* @param {CanDeactivateFn} fn - The CanActivate function to be added.
|
|
91
|
+
*/
|
|
92
|
+
withResolver(name, fn) {
|
|
92
93
|
if (!this.route.resolve) {
|
|
93
94
|
this.route.resolve = {};
|
|
94
95
|
}
|
|
95
|
-
this.route.resolve[name] =
|
|
96
|
+
this.route.resolve[name] = fn;
|
|
96
97
|
return this;
|
|
97
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Adds a provider to the route.
|
|
101
|
+
*
|
|
102
|
+
* @param {Provider | EnvironmentProviders} provider - The provider to add.
|
|
103
|
+
*/
|
|
98
104
|
withProvider(provider) {
|
|
99
105
|
if (!this.route.providers) {
|
|
100
106
|
this.route.providers = [];
|
|
@@ -102,19 +108,49 @@ export class RouteBuilder {
|
|
|
102
108
|
this.route.providers.push(provider);
|
|
103
109
|
return this;
|
|
104
110
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Sets the data for the route.
|
|
113
|
+
*
|
|
114
|
+
* @param {CommonsRouteData} data - The data to set for the route.
|
|
115
|
+
* @param {boolean} [merge=true] - If the data should be merged with current data setup (true by default) - page title and breadcrumb config are carried over.
|
|
116
|
+
*/
|
|
117
|
+
withData(data, merge = true) {
|
|
118
|
+
this.routeData = merge
|
|
119
|
+
? {
|
|
120
|
+
...this.routeData,
|
|
121
|
+
...data
|
|
122
|
+
}
|
|
123
|
+
: {
|
|
124
|
+
breadcrumb: null,
|
|
125
|
+
...data
|
|
126
|
+
};
|
|
110
127
|
return this;
|
|
111
128
|
}
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Updates the menu item of route. Merging with current configuration (set with {withMenuItem}) takes place.
|
|
131
|
+
*
|
|
132
|
+
* @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.
|
|
133
|
+
*/
|
|
134
|
+
withMenuItemOpts(opts) {
|
|
135
|
+
if (!this.menuItem) {
|
|
136
|
+
this.menuItem = {};
|
|
137
|
+
}
|
|
138
|
+
this.menuItem = {
|
|
139
|
+
...this.menuItem,
|
|
140
|
+
...opts
|
|
141
|
+
};
|
|
114
142
|
return this;
|
|
115
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Sets the menu item (basic). For more options, see the {withMenuItemFromOpts}.
|
|
146
|
+
*
|
|
147
|
+
* @param {string} [icon] - The icon for the menu item.
|
|
148
|
+
* @param {string} [label] - The label for the menu item.
|
|
149
|
+
* @param {Array<string>} [routerLink] - The router link for the menu item.
|
|
150
|
+
* @param {boolean} [breadcrumb=false] - Indicates whether to display breadcrumb for the menu item.
|
|
151
|
+
*/
|
|
116
152
|
withMenuItem(icon, label, routerLink, breadcrumb = false) {
|
|
117
|
-
this.menuItem =
|
|
153
|
+
this.menuItem = createMenuItem(icon, label, routerLink);
|
|
118
154
|
if (breadcrumb && label) {
|
|
119
155
|
this.withBreadcrumb({
|
|
120
156
|
label: label
|
|
@@ -123,35 +159,40 @@ export class RouteBuilder {
|
|
|
123
159
|
return this;
|
|
124
160
|
}
|
|
125
161
|
/**
|
|
126
|
-
* Adds menu item child to
|
|
127
|
-
*
|
|
128
|
-
* @param icon
|
|
129
|
-
* @param
|
|
130
|
-
* @param
|
|
162
|
+
* Adds menu item child to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.
|
|
163
|
+
*
|
|
164
|
+
* @param {string} [icon] - The icon for the menu item.
|
|
165
|
+
* @param {string} [label] - The label for the menu item.
|
|
166
|
+
* @param {Array<string>} [routerLink] - The router link for the menu item.
|
|
167
|
+
* @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.
|
|
131
168
|
*/
|
|
132
|
-
withMenuItemChild(
|
|
169
|
+
withMenuItemChild(icon, label, routerLink, afterRouteChildren = false) {
|
|
133
170
|
if (afterRouteChildren) {
|
|
134
|
-
this.menuItemChildrenAfter.push(
|
|
171
|
+
this.menuItemChildrenAfter.push(createMenuItem(icon, label, routerLink));
|
|
135
172
|
}
|
|
136
173
|
else {
|
|
137
|
-
this.menuItemChildren.push(
|
|
174
|
+
this.menuItemChildren.push(createMenuItem(icon, label, routerLink));
|
|
138
175
|
}
|
|
139
176
|
return this;
|
|
140
177
|
}
|
|
141
178
|
/**
|
|
142
|
-
* Adds menu item child to
|
|
143
|
-
*
|
|
144
|
-
* @param
|
|
179
|
+
* Adds menu item child from opts to route's menu item. If no menu item is present, children will be appended directly to parent/root menu item.
|
|
180
|
+
*
|
|
181
|
+
* @param {CommonsMenuItem} opts - The opts properties to be merged on existing menu item for route.
|
|
182
|
+
* @param {boolean} [afterRouteChildren=false] If false, menu item child will be appended before route's children menu items, at the end otherwise.
|
|
145
183
|
*/
|
|
146
|
-
|
|
184
|
+
withMenuItemChildFromOpts(opts, afterRouteChildren = false) {
|
|
147
185
|
if (afterRouteChildren) {
|
|
148
|
-
this.menuItemChildrenAfter.push(
|
|
186
|
+
this.menuItemChildrenAfter.push(opts);
|
|
149
187
|
}
|
|
150
188
|
else {
|
|
151
|
-
this.menuItemChildren.push(
|
|
189
|
+
this.menuItemChildren.push(opts);
|
|
152
190
|
}
|
|
153
191
|
return this;
|
|
154
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* Sets the menu item's children to be generated lazily from route's lazy loaded routes after the chunk is loaded to runtime.
|
|
195
|
+
*/
|
|
155
196
|
withMenuItemLazyChildren() {
|
|
156
197
|
if (!this.menuItem) {
|
|
157
198
|
this.menuItem = {};
|
|
@@ -159,16 +200,34 @@ export class RouteBuilder {
|
|
|
159
200
|
this.menuItem.lazyChildren = true;
|
|
160
201
|
return this;
|
|
161
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Sets the permissions on the route.
|
|
205
|
+
*
|
|
206
|
+
* @param {APermissions} permissions - The permissions to be set on the route.
|
|
207
|
+
*/
|
|
162
208
|
withPermissions(permissions) {
|
|
163
209
|
this.permissions = permissions;
|
|
164
210
|
this.withCanActivate(permissionGuard);
|
|
165
211
|
return this;
|
|
166
212
|
}
|
|
213
|
+
/**
|
|
214
|
+
* Adds a child route to the current route.
|
|
215
|
+
*
|
|
216
|
+
* @param {string} path - The path of the child route.
|
|
217
|
+
* @param {Type<any>} component - The component associated with the child route.
|
|
218
|
+
* @param {RouteBuilderAdjustFnType} [adjustFn] - An optional function to adjust the child route builder.
|
|
219
|
+
*/
|
|
167
220
|
addChild(path, component, adjustFn) {
|
|
168
|
-
const childRouteBuilder =
|
|
221
|
+
const childRouteBuilder = createRoute(path, component);
|
|
169
222
|
adjustFn?.(childRouteBuilder);
|
|
170
223
|
return this.addChildBuilder(childRouteBuilder);
|
|
171
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Adds a child builder to the current route.
|
|
227
|
+
*
|
|
228
|
+
* @param {RouteBuilder} builder - The child builder to be added.
|
|
229
|
+
* @return {this} - The current builder with the added child builder.
|
|
230
|
+
*/
|
|
172
231
|
addChildBuilder(builder) {
|
|
173
232
|
builder.withParent(this);
|
|
174
233
|
if (this.root) {
|
|
@@ -177,6 +236,11 @@ export class RouteBuilder {
|
|
|
177
236
|
this.children.push(builder);
|
|
178
237
|
return this;
|
|
179
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* Builds an Angular route based on configurations.
|
|
241
|
+
*
|
|
242
|
+
* @returns {Route} The built Angular route.
|
|
243
|
+
*/
|
|
180
244
|
build() {
|
|
181
245
|
const angularRoute = {
|
|
182
246
|
...this.route
|
|
@@ -227,6 +291,11 @@ export class RouteBuilder {
|
|
|
227
291
|
}
|
|
228
292
|
return angularRoute;
|
|
229
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Builds the menu items.
|
|
296
|
+
*
|
|
297
|
+
* @returns {Array<CommonsMenuItem>} - The built menu items.
|
|
298
|
+
*/
|
|
230
299
|
buildMenu() {
|
|
231
300
|
const menuItemBuild = this.menuItem ? { ...this.menuItem } : null;
|
|
232
301
|
const routeChildrenMenuItems = this.children.flatMap(child => child.buildMenu());
|
|
@@ -254,7 +323,7 @@ export class RouteBuilder {
|
|
|
254
323
|
if (!menuItemBuild) {
|
|
255
324
|
return menuItemChildrenBuild;
|
|
256
325
|
}
|
|
257
|
-
menuItemBuild.label = menuItemBuild.label ?? this.pageTitle;
|
|
326
|
+
menuItemBuild.label = menuItemBuild.label ?? this.routeData.pageTitle;
|
|
258
327
|
if (typeof menuItemBuild.routerLink === 'string') {
|
|
259
328
|
menuItemBuild.routerLink = [menuItemBuild.routerLink];
|
|
260
329
|
}
|
|
@@ -273,19 +342,6 @@ export class RouteBuilder {
|
|
|
273
342
|
}
|
|
274
343
|
return [menuItemBuild];
|
|
275
344
|
}
|
|
276
|
-
createMenuItem(icon, label, routerLink) {
|
|
277
|
-
const menuItem = {};
|
|
278
|
-
if (icon) {
|
|
279
|
-
menuItem.icon = icon;
|
|
280
|
-
}
|
|
281
|
-
if (label) {
|
|
282
|
-
menuItem.label = label;
|
|
283
|
-
}
|
|
284
|
-
if (routerLink) {
|
|
285
|
-
menuItem.routerLink = routerLink;
|
|
286
|
-
}
|
|
287
|
-
return menuItem;
|
|
288
|
-
}
|
|
289
345
|
findMenuItemGuards() {
|
|
290
346
|
const guards = [];
|
|
291
347
|
if (this.route.canActivate?.length) {
|
|
@@ -317,4 +373,75 @@ export class RouteBuilder {
|
|
|
317
373
|
return undefined;
|
|
318
374
|
}
|
|
319
375
|
}
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JvdXRlci9yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU83RCxNQUFNLE9BQU8sWUFBWTtJQWlCckIsWUFBc0IsS0FBWTtRQWYxQixjQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQXFCLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDO1FBR25ELGFBQVEsR0FBd0IsRUFBRSxDQUFDO1FBR25DLHFCQUFnQixHQUEyQixFQUFFLENBQUM7UUFDOUMsMEJBQXFCLEdBQTJCLEVBQUUsQ0FBQyxDQUFDLDhCQUE4QjtRQVF0RixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWSxFQUFFLFNBQW9CO1FBQ25ELE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixTQUFTLEVBQUUsU0FBUztTQUN2QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFZLEVBQUUsVUFBa0IsRUFBRSxZQUErQixRQUFRO1FBQ2xHLE9BQU8sSUFBSSxZQUFZLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFV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QUNyQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdCLHdCQUF3QjtZQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuQWN0aXZhdGVGbiwgQ2FuRGVhY3RpdmF0ZUZuLCBEZWZhdWx0RXhwb3J0LCBMb2FkQ2hpbGRyZW4sIFJlc29sdmVGbiwgUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7cmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50c30gZnJvbSAnLi4vaGVscGVycy9yb3V0ZSc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzL21lbnUubW9kZWwnO1xuaW1wb3J0IHtwZXJtaXNzaW9uR3VhcmR9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcbmltcG9ydCB7QnJlYWRjcnVtYlR5cGUsIENvbW1vbnNSb3V0ZURhdGF9IGZyb20gJy4vcm91dGVyLm1vZGVsJztcbmltcG9ydCB7Um91dGVzQnVpbGRlcn0gZnJvbSAnLi9yb3V0ZXMtYnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSA9IChidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZUJ1aWxkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgcm91dGVEYXRhOiBDb21tb25zUm91dGVEYXRhID0ge2JyZWFkY3J1bWI6IG51bGx9O1xuICAgIHByaXZhdGUgcm9vdD86IFJvdXRlc0J1aWxkZXI7XG4gICAgcHJpdmF0ZSBwYXJlbnQ/OiBSb3V0ZUJ1aWxkZXI7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBtZW51SXRlbT86IENvbW1vbnNNZW51SXRlbTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW5BZnRlcjogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IFtdOyAvLyBhcHBlbmQgYWZ0ZXIgcm91dGUgY2hpbGRyZW5cblxuICAgIHByaXZhdGUgYnJlYWRjcnVtYj86IEJyZWFkY3J1bWJUeXBlO1xuICAgIHByaXZhdGUgcGFnZVRpdGxlPzogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucztcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihyb3V0ZTogUm91dGUpIHtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IHJvdXRlO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5wYXRoICYmIHRoaXMucm91dGUucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IFt0aGlzLnJvdXRlLnBhdGhdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55Pik6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcih7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHBhdGhNYXRjaDogcGF0aE1hdGNoXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlTGF6eVJvdXRlTW9kdWxlKHBhdGg6IHN0cmluZywgbG9hZENoaWxkcmVuOiBMb2FkQ2hpbGRyZW4sIGNhbk1hdGNoPzogQXJyYXk8YW55Pik6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ2hpbGRyZW46IGxvYWRDaGlsZHJlbn07XG4gICAgICAgIGlmIChjYW5NYXRjaD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByb3V0ZS5jYW5NYXRjaCA9IGNhbk1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHJvdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUxhenlSb3V0ZUNvbXBvbmVudChcbiAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBUeXBlPHVua25vd24+IHwgT2JzZXJ2YWJsZTxUeXBlPHVua25vd24+IHwgRGVmYXVsdEV4cG9ydDxUeXBlPHVua25vd24+Pj4gfCBQcm9taXNlPFR5cGU8dW5rbm93bj4gfCBEZWZhdWx0RXhwb3J0PFR5cGU8dW5rbm93bj4+PixcbiAgICAgICAgY2FuTWF0Y2g/OiBBcnJheTxhbnk+XG4gICAgKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgY29uc3Qgcm91dGU6IFJvdXRlID0ge3BhdGg6IHBhdGgsIGxvYWRDb21wb25lbnQ6IGxvYWRDb21wb25lbnR9O1xuICAgICAgICBpZiAoY2FuTWF0Y2g/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcm91dGUuY2FuTWF0Y2ggPSBjYW5NYXRjaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tUm91dGUocm91dGU6IFJvdXRlKTogUm91dGVCdWlsZGVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm9vdChyb3V0ZXNCdWlsZGVyOiBSb3V0ZXNCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvdXRlc0J1aWxkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGFyZW50KHBhcmVudDogUm91dGVCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnJvdXRlUGF0aCA9IHJlbW92ZVJvdXRlRW1wdHlQYXRoU2VnbWVudHMoWy4uLnRoaXMucGFyZW50LnJvdXRlUGF0aCwgdGhpcy5yb3V0ZS5wYXRoID8/ICcnXSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQnJlYWRjcnVtYihicmVhZGNydW1iOiBCcmVhZGNydW1iVHlwZSk6IHRoaXMge1xuICAgICAgICB0aGlzLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xuICAgICAgICB0aGlzLnJvdXRlRGF0YS5icmVhZGNydW1iID0gYnJlYWRjcnVtYjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQYWdlVGl0bGUocGFnZVRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSBwYWdlVGl0bGU7XG4gICAgICAgIHRoaXMucm91dGVEYXRhLnBhZ2VUaXRsZSA9IHBhZ2VUaXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZWRpcmVjdFRvKHJlZGlyZWN0VG86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBhdGhNYXRjaChwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGUucGF0aE1hdGNoID0gcGF0aE1hdGNoO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy53aXRoUGFnZVRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy53aXRoQnJlYWRjcnVtYih0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2FuQWN0aXZhdGUoZGlUb2tlbjogQ2FuQWN0aXZhdGVGbik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUuY2FuQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2FuQWN0aXZhdGUgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlLmNhbkFjdGl2YXRlLnB1c2goZGlUb2tlbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2FuRGVhY3RpdmF0ZShkaVRva2VuOiBDYW5EZWFjdGl2YXRlRm48YW55Pik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5jYW5EZWFjdGl2YXRlLnB1c2goZGlUb2tlbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVzb2x2ZXIoZGlUb2tlbjogUmVzb2x2ZUZuPGFueT4sIG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlW25hbWVdID0gZGlUb2tlbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQcm92aWRlcihwcm92aWRlcjogUHJvdmlkZXIgfCBFbnZpcm9ubWVudFByb3ZpZGVycyk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUucHJvdmlkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLnByb3ZpZGVycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUucHJvdmlkZXJzLnB1c2gocHJvdmlkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGEoZGF0YTogQ29tbW9uc1JvdXRlRGF0YSk6IHRoaXMge1xuICAgICAgICBpZiAoIWRhdGEuYnJlYWRjcnVtYikge1xuICAgICAgICAgICAgZGF0YS5icmVhZGNydW1iID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IGRhdGE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ29tbW9uc01lbnVJdGVtKG1lbnVJdGVtOiBDb21tb25zTWVudUl0ZW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5tZW51SXRlbSA9IG1lbnVJdGVtO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYnJlYWRjcnVtYiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSB0aGlzLmNyZWF0ZU1lbnVJdGVtKGljb24sIGxhYmVsLCByb3V0ZXJMaW5rKTtcbiAgICAgICAgaWYgKGJyZWFkY3J1bWIgJiYgbGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aEJyZWFkY3J1bWIoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBtZW51IGl0ZW0gY2hpbGQgdG8gdGhpcyBpbnN0YW5jZSBvZiBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIGxhYmVsIExhYmVsLlxuICAgICAqIEBwYXJhbSBpY29uIEljb24uXG4gICAgICogQHBhcmFtIHJvdXRlckxpbmsgUm91dGVyIGxpbmsuXG4gICAgICogQHBhcmFtIGFmdGVyUm91dGVDaGlsZHJlbiBJZiBmYWxzZSwgbWVudSBpdGVtIGNoaWxkIHdpbGwgYmUgYXBwZW5kZWQgYmVmb3JlIHJvdXRlIGNoaWxkcmVuIG1lbnUgaXRlbXMsIGF0IHRoZSBlbmQgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1DaGlsZChsYWJlbDogc3RyaW5nLCBpY29uPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYWZ0ZXJSb3V0ZUNoaWxkcmVuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKGFmdGVyUm91dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIucHVzaCh0aGlzLmNyZWF0ZU1lbnVJdGVtKGljb24sIGxhYmVsLCByb3V0ZXJMaW5rKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaCh0aGlzLmNyZWF0ZU1lbnVJdGVtKGljb24sIGxhYmVsLCByb3V0ZXJMaW5rKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBtZW51IGl0ZW0gY2hpbGQgdG8gdGhpcyBpbnN0YW5jZSBvZiBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIG1lbnVJdGVtIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIGFmdGVyUm91dGVDaGlsZHJlbiBJZiBmYWxzZSwgbWVudSBpdGVtIGNoaWxkIHdpbGwgYmUgYXBwZW5kZWQgYmVmb3JlIHJvdXRlIGNoaWxkcmVuIG1lbnUgaXRlbXMsIGF0IHRoZSBlbmQgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ29tbW9uc01lbnVJdGVtQ2hpbGQobWVudUl0ZW06IENvbW1vbnNNZW51SXRlbSwgYWZ0ZXJSb3V0ZUNoaWxkcmVuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKGFmdGVyUm91dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIucHVzaChtZW51SXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaChtZW51SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhNZW51SXRlbUxhenlDaGlsZHJlbigpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLm1lbnVJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW51SXRlbS5sYXp5Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHBlcm1pc3Npb25zO1xuICAgICAgICB0aGlzLndpdGhDYW5BY3RpdmF0ZShwZXJtaXNzaW9uR3VhcmQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgYWRqdXN0Rm4/OiBSb3V0ZUJ1aWxkZXJBZGp1c3RGblR5cGUpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY2hpbGRSb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKHBhdGgsIGNvbXBvbmVudCk7XG4gICAgICAgIGFkanVzdEZuPy4oY2hpbGRSb3V0ZUJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRDaGlsZEJ1aWxkZXIoY2hpbGRSb3V0ZUJ1aWxkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRDaGlsZEJ1aWxkZXIoYnVpbGRlcjogUm91dGVCdWlsZGVyKTogdGhpcyB7XG4gICAgICAgIGJ1aWxkZXIud2l0aFBhcmVudCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgYnVpbGRlci53aXRoUm9vdCh0aGlzLnJvb3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChidWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhclJvdXRlOiBSb3V0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYW5ndWxhclJvdXRlLmRhdGEpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5kYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLmFuZ3VsYXJSb3V0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmRhdGEgPSB7Li4udGhpcy5yb3V0ZURhdGF9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwZW5kIHBlcm1pc3Npb25zIGlmIG5vdCBhbHJlYWR5IGluIHJvdXRlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgIShhbmd1bGFyUm91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhKS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgKGFuZ3VsYXJSb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGEpLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLmJ1aWxkTWVudSgpO1xuICAgICAgICBpZiAobWVudS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAoYW5ndWxhclJvdXRlLmRhdGEgYXMgQ29tbW9uc1JvdXRlRGF0YSkubWVudUl0ZW1zID0gbWVudTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGVDaGlsZCkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5Mb2FkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuTG9hZCA9IFsuLi50aGlzLnJvdXRlLmNhbkxvYWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5EZWFjdGl2YXRlID0gWy4uLnRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLnJlc29sdmUgPSB7Li4udGhpcy5yb3V0ZS5yZXNvbHZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1lbnUoKTogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IENvbW1vbnNNZW51SXRlbSB8IG51bGwgPSB0aGlzLm1lbnVJdGVtID8gey4uLnRoaXMubWVudUl0ZW19IDogbnVsbDtcbiAgICAgICAgY29uc3Qgcm91dGVDaGlsZHJlbk1lbnVJdGVtczogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IHRoaXMuY2hpbGRyZW4uZmxhdE1hcChjaGlsZCA9PiBjaGlsZC5idWlsZE1lbnUoKSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gW107XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtQnVpbGQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuQnVpbGQucHVzaCguLi5tZW51SXRlbUJ1aWxkLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NNZW51SXRlbUNoaWxkID0gKGNoaWxkOiBDb21tb25zTWVudUl0ZW0pOiBDb21tb25zTWVudUl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxDaGlsZDogQ29tbW9uc01lbnVJdGVtID0gey4uLmNoaWxkfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbENoaWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gW2ZpbmFsQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmluYWxDaGlsZC5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbENoaWxkLnJvdXRlckxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsQ2hpbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gbWVudUl0ZW1DaGlsZHJlbi5wdXNoKHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSkpO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW5BZnRlckJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIubWFwKGNoaWxkID0+IHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSk7XG5cbiAgICAgICAgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkLnB1c2goLi4ubWVudUl0ZW1DaGlsZHJlbiwgLi4ucm91dGVDaGlsZHJlbk1lbnVJdGVtcywgLi4ubWVudUl0ZW1DaGlsZHJlbkFmdGVyQnVpbGQpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucGFnZVRpdGxlO1xuICAgICAgICBpZiAodHlwZW9mIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IFttZW51SXRlbUJ1aWxkLnJvdXRlckxpbmtdO1xuICAgICAgICB9XG4gICAgICAgIG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA9IHJlbW92ZVJvdXRlRW1wdHlQYXRoU2VnbWVudHMobWVudUl0ZW1CdWlsZC5yb3V0ZXJMaW5rID8/IHRoaXMucm91dGVQYXRoKTtcbiAgICAgICAgaWYgKG1lbnVJdGVtQ2hpbGRyZW5CdWlsZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBtZW51SXRlbUJ1aWxkLml0ZW1zID0gbWVudUl0ZW1DaGlsZHJlbkJ1aWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtZW51SXRlbUJ1aWxkLmd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgZ3VhcmRzID0gdGhpcy5maW5kTWVudUl0ZW1HdWFyZHMoKTtcbiAgICAgICAgICAgIGlmIChndWFyZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG1lbnVJdGVtQnVpbGQuZ3VhcmRzID0gZ3VhcmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtZW51SXRlbUJ1aWxkLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICBtZW51SXRlbUJ1aWxkLnBlcm1pc3Npb25zID0gdGhpcy5maW5kTWVudUl0ZW1QZXJtaXNzaW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFttZW51SXRlbUJ1aWxkXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtID0ge307XG4gICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICBtZW51SXRlbS5pY29uID0gaWNvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFiZWwpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtLmxhYmVsID0gbGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlckxpbmspIHtcbiAgICAgICAgICAgIG1lbnVJdGVtLnJvdXRlckxpbmsgPSByb3V0ZXJMaW5rO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW51SXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRNZW51SXRlbUd1YXJkcygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgY29uc3QgZ3VhcmRzOiBBcnJheTxhbnk+ID0gW107XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkFjdGl2YXRlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGd1YXJkcy5wdXNoKC4uLnRoaXMucm91dGUuY2FuQWN0aXZhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhcmVudCBndWFyZHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZGVjaXNpb24gdG8gaGlkZSBtZW51IGl0ZW0hXG4gICAgICAgICAgICAvLyBTb21lIHBhcmVudCByb3V0ZXMgbWlnaHQgaGF2ZSBndWFyZHMsIGJ1dCBubyBtZW51IGl0ZW1zLCBzbyB0aGlzIGd1YXJkcyBtdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCBoZXJlLFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyBwYXJlbnQgbWVudSBpdGVtIHRvIGhpZGUuXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5maW5kTWVudUl0ZW1HdWFyZHMoKS5mb3JFYWNoKGcgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChndWFyZHMuaW5kZXhPZihnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ3VhcmRzLnB1c2goZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGd1YXJkcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZE1lbnVJdGVtUGVybWlzc2lvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLm1lbnVJdGVtPy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVudUl0ZW0ucGVybWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGVEYXRhLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIGFscmVhZHkgYnVpbHRcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlRGF0YS5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
|
|
376
|
+
function createMenuItem(icon, label, routerLink) {
|
|
377
|
+
const menuItem = {};
|
|
378
|
+
if (icon) {
|
|
379
|
+
menuItem.icon = icon;
|
|
380
|
+
}
|
|
381
|
+
if (label) {
|
|
382
|
+
menuItem.label = label;
|
|
383
|
+
}
|
|
384
|
+
if (routerLink) {
|
|
385
|
+
menuItem.routerLink = routerLink;
|
|
386
|
+
}
|
|
387
|
+
return menuItem;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Creates a new instance of RouteBuilder with the given path and component.
|
|
391
|
+
*
|
|
392
|
+
* @param {string} path - The path for the route.
|
|
393
|
+
* @param {Type<any>} component - The component for the route.
|
|
394
|
+
* @return {RouteBuilder} - A new instance of RouteBuilder.
|
|
395
|
+
*/
|
|
396
|
+
export function createRoute(path, component) {
|
|
397
|
+
return new RouteBuilder({
|
|
398
|
+
path: path,
|
|
399
|
+
component: component
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Creates a redirect route for the given path.
|
|
404
|
+
*
|
|
405
|
+
* @param {string} path - The path to match against.
|
|
406
|
+
* @param {string} redirectTo - The URL path to redirect to.
|
|
407
|
+
* @param {'full' | 'prefix'} [pathMatch='prefix'] - The path matching strategy ('full' or 'prefix').
|
|
408
|
+
* @return {RouteBuilder} - A new instance of the RouteBuilder class with the redirect route configuration.
|
|
409
|
+
*/
|
|
410
|
+
export function createRouteRedirect(path, redirectTo, pathMatch = 'prefix') {
|
|
411
|
+
return new RouteBuilder({
|
|
412
|
+
path: path,
|
|
413
|
+
redirectTo: redirectTo,
|
|
414
|
+
pathMatch: pathMatch
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Creates a lazy route module (or routes).
|
|
419
|
+
*
|
|
420
|
+
* @param {string} path - The path for the route.
|
|
421
|
+
* @param {LoadChildren} loadChildren - The function that loads the lazy module (or routes).
|
|
422
|
+
* @param {Array<any>} [canMatch] - An optional array of objects that can match the route.
|
|
423
|
+
* @returns {RouteBuilder} - A new instance of RouteBuilder class.
|
|
424
|
+
*/
|
|
425
|
+
export function createLazyChildrenRoute(path, loadChildren, canMatch) {
|
|
426
|
+
const route = { path: path, loadChildren: loadChildren };
|
|
427
|
+
if (canMatch?.length) {
|
|
428
|
+
route.canMatch = canMatch;
|
|
429
|
+
}
|
|
430
|
+
return new RouteBuilder(route);
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Creates a lazy route component.
|
|
434
|
+
*
|
|
435
|
+
* @param {string} path - The path for the route.
|
|
436
|
+
* @param {() => Type<unknown> | Observable<Type<unknown> | DefaultExport<Type<unknown>>> | Promise<Type<unknown> | DefaultExport<Type<unknown>>>} loadComponent - The function that loads the component for the route.
|
|
437
|
+
* @param {Array<any>} [canMatch] - The array of values that determine if the route can match.
|
|
438
|
+
* @returns {RouteBuilder} - An instance of RouteBuilder with the created route.
|
|
439
|
+
*/
|
|
440
|
+
export function createLazyRoute(path, loadComponent, canMatch) {
|
|
441
|
+
const route = { path: path, loadComponent: loadComponent };
|
|
442
|
+
if (canMatch?.length) {
|
|
443
|
+
route.canMatch = canMatch;
|
|
444
|
+
}
|
|
445
|
+
return new RouteBuilder(route);
|
|
446
|
+
}
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvc3JjL3JvdXRlci9yb3V0ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTlELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU83RCxNQUFNLE9BQU8sWUFBWTtJQWNyQixZQUFtQixLQUFZO1FBWnZCLGNBQVMsR0FBa0IsRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBcUIsRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFHbkQsYUFBUSxHQUF3QixFQUFFLENBQUM7UUFHbkMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QywwQkFBcUIsR0FBMkIsRUFBRSxDQUFDLENBQUMsOEJBQThCO1FBS3RGLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxhQUE0QjtRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFVBQVUsQ0FBQyxNQUFvQjtRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLDRCQUE0QixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFB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QUFDO0lBQzlCLENBQUM7SUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsSUFBWSxFQUNaLGFBQXFKLEVBQ3JKLFFBQXFCO0lBRXJCLE1BQU0sS0FBSyxHQUFVLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDLENBQUM7SUFDaEUsSUFBSSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW52aXJvbm1lbnRQcm92aWRlcnMsIFByb3ZpZGVyLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2FuQWN0aXZhdGVGbiwgQ2FuRGVhY3RpdmF0ZUZuLCBEZWZhdWx0RXhwb3J0LCBMb2FkQ2hpbGRyZW4sIFJlc29sdmVGbiwgUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7cmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50c30gZnJvbSAnLi4vaGVscGVycy9yb3V0ZSc7XG5pbXBvcnQge0NvbW1vbnNNZW51SXRlbX0gZnJvbSAnLi4vbW9kZWxzL21lbnUubW9kZWwnO1xuaW1wb3J0IHtwZXJtaXNzaW9uR3VhcmR9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb24uZ3VhcmQnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L3Blcm1pc3Npb25zLm1vZGVsJztcbmltcG9ydCB7QnJlYWRjcnVtYlR5cGUsIENvbW1vbnNSb3V0ZURhdGF9IGZyb20gJy4vcm91dGVyLm1vZGVsJztcbmltcG9ydCB7Um91dGVzQnVpbGRlcn0gZnJvbSAnLi9yb3V0ZXMtYnVpbGRlcic7XG5cbmV4cG9ydCB0eXBlIFJvdXRlQnVpbGRlckFkanVzdEZuVHlwZSA9IChidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSb3V0ZUJ1aWxkZXIge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZTogUm91dGU7XG4gICAgcHJpdmF0ZSByb3V0ZVBhdGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBwcm90ZWN0ZWQgcm91dGVEYXRhOiBDb21tb25zUm91dGVEYXRhID0ge2JyZWFkY3J1bWI6IG51bGx9O1xuICAgIHByaXZhdGUgcm9vdD86IFJvdXRlc0J1aWxkZXI7XG4gICAgcHJpdmF0ZSBwYXJlbnQ/OiBSb3V0ZUJ1aWxkZXI7XG4gICAgcHJpdmF0ZSBjaGlsZHJlbjogQXJyYXk8Um91dGVCdWlsZGVyPiA9IFtdO1xuXG4gICAgcHJpdmF0ZSBtZW51SXRlbT86IENvbW1vbnNNZW51SXRlbTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICBwcml2YXRlIG1lbnVJdGVtQ2hpbGRyZW5BZnRlcjogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IFtdOyAvLyBhcHBlbmQgYWZ0ZXIgcm91dGUgY2hpbGRyZW5cblxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnM7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3Iocm91dGU6IFJvdXRlKSB7XG4gICAgICAgIHRoaXMucm91dGUgPSByb3V0ZTtcbiAgICAgICAgaWYgKHRoaXMucm91dGUucGF0aCAmJiB0aGlzLnJvdXRlLnBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZVBhdGggPSBbdGhpcy5yb3V0ZS5wYXRoXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpbmsgdG8gcm9vdCBSb3V0ZXMgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVzQnVpbGRlcn0gcm91dGVzQnVpbGRlciAtIFRoZSByb3V0ZXMgYnVpbGRlciB0byBzZXQgYXMgdGhlIHJvb3QuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSb290KHJvdXRlc0J1aWxkZXI6IFJvdXRlc0J1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb290ID0gcm91dGVzQnVpbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbGluayB0byBwYXJlbnQgUm91dGUgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBwYXJlbnQgLSBUaGUgcGFyZW50IHJvdXRlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYXJlbnQocGFyZW50OiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMucm91dGVQYXRoID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhbLi4udGhpcy5wYXJlbnQucm91dGVQYXRoLCB0aGlzLnJvdXRlLnBhdGggPz8gJyddKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QnJlYWRjcnVtYlR5cGV9IGJyZWFkY3J1bWIgLSBCcmVhZGNydW1iIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIHdpdGhCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWJUeXBlKTogdGhpcyB7XG4gICAgICAgIHRoaXMucm91dGVEYXRhLmJyZWFkY3J1bWIgPSBicmVhZGNydW1iO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGZvciB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYWdlVGl0bGUgLSBUaGUgdGl0bGUgb2YgdGhlIHBhZ2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQYWdlVGl0bGUocGFnZVRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEucGFnZVRpdGxlID0gcGFnZVRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWdlIHRpdGxlIGFuZCB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgcGFnZSBhbmQgYnJlYWRjcnVtYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy53aXRoUGFnZVRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy53aXRoQnJlYWRjcnVtYih0aXRsZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjYW4gYWN0aXZhdGUgZ3VhcmQgdG8gcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NhbkFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuQWN0aXZhdGUoZm46IENhbkFjdGl2YXRlRm4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLmNhbkFjdGl2YXRlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNhbiBkZWFjdGl2YXRlIGd1YXJkIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDYW5EZWFjdGl2YXRlRm59IGZuIC0gVGhlIENhbkFjdGl2YXRlIGZ1bmN0aW9uIHRvIGJlIGFkZGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQ2FuRGVhY3RpdmF0ZShmbjogQ2FuRGVhY3RpdmF0ZUZuPGFueT4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZS5wdXNoKGZuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHJlc29sdmVyIHRvIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIG9mIHRoZSByZXNvbHZlci5cbiAgICAgKiBAcGFyYW0ge0NhbkRlYWN0aXZhdGVGbn0gZm4gLSBUaGUgQ2FuQWN0aXZhdGUgZnVuY3Rpb24gdG8gYmUgYWRkZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSZXNvbHZlcihuYW1lOiBzdHJpbmcsIGZuOiBSZXNvbHZlRm48YW55Pik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5yZXNvbHZlW25hbWVdID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcm92aWRlciB0byB0aGUgcm91dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnN9IHByb3ZpZGVyIC0gVGhlIHByb3ZpZGVyIHRvIGFkZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFByb3ZpZGVyKHByb3ZpZGVyOiBQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5wcm92aWRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGUucHJvdmlkZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5wcm92aWRlcnMucHVzaChwcm92aWRlcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGRhdGEgZm9yIHRoZSByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc1JvdXRlRGF0YX0gZGF0YSAtIFRoZSBkYXRhIHRvIHNldCBmb3IgdGhlIHJvdXRlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21lcmdlPXRydWVdIC0gSWYgdGhlIGRhdGEgc2hvdWxkIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgZGF0YSBzZXR1cCAodHJ1ZSBieSBkZWZhdWx0KSAtIHBhZ2UgdGl0bGUgYW5kIGJyZWFkY3J1bWIgY29uZmlnIGFyZSBjYXJyaWVkIG92ZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEYXRhKGRhdGE6IENvbW1vbnNSb3V0ZURhdGEsIG1lcmdlID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IG1lcmdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhLFxuICAgICAgICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGJyZWFkY3J1bWI6IG51bGwsXG4gICAgICAgICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIG1lbnUgaXRlbSBvZiByb3V0ZS4gTWVyZ2luZyB3aXRoIGN1cnJlbnQgY29uZmlndXJhdGlvbiAoc2V0IHdpdGgge3dpdGhNZW51SXRlbX0pIHRha2VzIHBsYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb21tb25zTWVudUl0ZW19IG9wdHMgLSBUaGUgb3B0cyBwcm9wZXJ0aWVzIHRvIGJlIG1lcmdlZCBvbiBleGlzdGluZyBtZW51IGl0ZW0gZm9yIHJvdXRlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1PcHRzKG9wdHM6IENvbW1vbnNNZW51SXRlbSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubWVudUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lbnVJdGVtID0ge1xuICAgICAgICAgICAgLi4udGhpcy5tZW51SXRlbSxcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWVudSBpdGVtIChiYXNpYykuIEZvciBtb3JlIG9wdGlvbnMsIHNlZSB0aGUge3dpdGhNZW51SXRlbUZyb21PcHRzfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbaWNvbl0gLSBUaGUgaWNvbiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xhYmVsXSAtIFRoZSBsYWJlbCBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtyb3V0ZXJMaW5rXSAtIFRoZSByb3V0ZXIgbGluayBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFticmVhZGNydW1iPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRvIGRpc3BsYXkgYnJlYWRjcnVtYiBmb3IgdGhlIG1lbnUgaXRlbS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYnJlYWRjcnVtYiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMubWVudUl0ZW0gPSBjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluayk7XG4gICAgICAgIGlmIChicmVhZGNydW1iICYmIGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbWVudSBpdGVtIGNoaWxkIHRvIHJvdXRlJ3MgbWVudSBpdGVtLiBJZiBubyBtZW51IGl0ZW0gaXMgcHJlc2VudCwgY2hpbGRyZW4gd2lsbCBiZSBhcHBlbmRlZCBkaXJlY3RseSB0byBwYXJlbnQvcm9vdCBtZW51IGl0ZW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ljb25dIC0gVGhlIGljb24gZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsYWJlbF0gLSBUaGUgbGFiZWwgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBbcm91dGVyTGlua10gLSBUaGUgcm91dGVyIGxpbmsgZm9yIHRoZSBtZW51IGl0ZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYWZ0ZXJSb3V0ZUNoaWxkcmVuPWZhbHNlXSBJZiBmYWxzZSwgbWVudSBpdGVtIGNoaWxkIHdpbGwgYmUgYXBwZW5kZWQgYmVmb3JlIHJvdXRlJ3MgY2hpbGRyZW4gbWVudSBpdGVtcywgYXQgdGhlIGVuZCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNZW51SXRlbUNoaWxkKGljb24/OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nLCByb3V0ZXJMaW5rPzogQXJyYXk8c3RyaW5nPiwgYWZ0ZXJSb3V0ZUNoaWxkcmVuID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgaWYgKGFmdGVyUm91dGVDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIucHVzaChjcmVhdGVNZW51SXRlbShpY29uLCBsYWJlbCwgcm91dGVyTGluaykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLnB1c2goY3JlYXRlTWVudUl0ZW0oaWNvbiwgbGFiZWwsIHJvdXRlckxpbmspKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIG1lbnUgaXRlbSBjaGlsZCBmcm9tIG9wdHMgdG8gcm91dGUncyBtZW51IGl0ZW0uIElmIG5vIG1lbnUgaXRlbSBpcyBwcmVzZW50LCBjaGlsZHJlbiB3aWxsIGJlIGFwcGVuZGVkIGRpcmVjdGx5IHRvIHBhcmVudC9yb290IG1lbnUgaXRlbS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29tbW9uc01lbnVJdGVtfSBvcHRzIC0gVGhlIG9wdHMgcHJvcGVydGllcyB0byBiZSBtZXJnZWQgb24gZXhpc3RpbmcgbWVudSBpdGVtIGZvciByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthZnRlclJvdXRlQ2hpbGRyZW49ZmFsc2VdIElmIGZhbHNlLCBtZW51IGl0ZW0gY2hpbGQgd2lsbCBiZSBhcHBlbmRlZCBiZWZvcmUgcm91dGUncyBjaGlsZHJlbiBtZW51IGl0ZW1zLCBhdCB0aGUgZW5kIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1lbnVJdGVtQ2hpbGRGcm9tT3B0cyhvcHRzOiBDb21tb25zTWVudUl0ZW0sIGFmdGVyUm91dGVDaGlsZHJlbiA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIGlmIChhZnRlclJvdXRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1DaGlsZHJlbkFmdGVyLnB1c2gob3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtQ2hpbGRyZW4ucHVzaChvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtZW51IGl0ZW0ncyBjaGlsZHJlbiB0byBiZSBnZW5lcmF0ZWQgbGF6aWx5IGZyb20gcm91dGUncyBsYXp5IGxvYWRlZCByb3V0ZXMgYWZ0ZXIgdGhlIGNodW5rIGlzIGxvYWRlZCB0byBydW50aW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoTWVudUl0ZW1MYXp5Q2hpbGRyZW4oKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tZW51SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudUl0ZW0ubGF6eUNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcGVybWlzc2lvbnMgb24gdGhlIHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBUGVybWlzc2lvbnN9IHBlcm1pc3Npb25zIC0gVGhlIHBlcm1pc3Npb25zIHRvIGJlIHNldCBvbiB0aGUgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy53aXRoQ2FuQWN0aXZhdGUocGVybWlzc2lvbkd1YXJkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNoaWxkIHJvdXRlIHRvIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgY2hpbGQgcm91dGUuXG4gICAgICogQHBhcmFtIHtUeXBlPGFueT59IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjaGlsZCByb3V0ZS5cbiAgICAgKiBAcGFyYW0ge1JvdXRlQnVpbGRlckFkanVzdEZuVHlwZX0gW2FkanVzdEZuXSAtIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGFkanVzdCB0aGUgY2hpbGQgcm91dGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkQ2hpbGQocGF0aDogc3RyaW5nLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgYWRqdXN0Rm4/OiBSb3V0ZUJ1aWxkZXJBZGp1c3RGblR5cGUpOiB0aGlzIHtcbiAgICAgICAgY29uc3QgY2hpbGRSb3V0ZUJ1aWxkZXIgPSBjcmVhdGVSb3V0ZShwYXRoLCBjb21wb25lbnQpO1xuICAgICAgICBhZGp1c3RGbj8uKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ2hpbGRCdWlsZGVyKGNoaWxkUm91dGVCdWlsZGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hpbGQgYnVpbGRlciB0byB0aGUgY3VycmVudCByb3V0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Um91dGVCdWlsZGVyfSBidWlsZGVyIC0gVGhlIGNoaWxkIGJ1aWxkZXIgdG8gYmUgYWRkZWQuXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBidWlsZGVyIHdpdGggdGhlIGFkZGVkIGNoaWxkIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIGFkZENoaWxkQnVpbGRlcihidWlsZGVyOiBSb3V0ZUJ1aWxkZXIpOiB0aGlzIHtcbiAgICAgICAgYnVpbGRlci53aXRoUGFyZW50KHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgICAgICBidWlsZGVyLndpdGhSb290KHRoaXMucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGJ1aWxkZXIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gQW5ndWxhciByb3V0ZSBiYXNlZCBvbiBjb25maWd1cmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtSb3V0ZX0gVGhlIGJ1aWx0IEFuZ3VsYXIgcm91dGUuXG4gICAgICovXG4gICAgcHVibGljIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgY29uc3QgYW5ndWxhclJvdXRlOiBSb3V0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucm91dGVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoYW5ndWxhclJvdXRlLmRhdGEpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5kYXRhID0ge1xuICAgICAgICAgICAgICAgIC4uLmFuZ3VsYXJSb3V0ZS5kYXRhLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucm91dGVEYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmRhdGEgPSB7Li4udGhpcy5yb3V0ZURhdGF9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwZW5kIHBlcm1pc3Npb25zIGlmIG5vdCBhbHJlYWR5IGluIHJvdXRlIGRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMgJiYgIShhbmd1bGFyUm91dGUuZGF0YSBhcyBDb21tb25zUm91dGVEYXRhKS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgKGFuZ3VsYXJSb3V0ZS5kYXRhIGFzIENvbW1vbnNSb3V0ZURhdGEpLnBlcm1pc3Npb25zID0gdGhpcy5wZXJtaXNzaW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lbnUgPSB0aGlzLmJ1aWxkTWVudSgpO1xuICAgICAgICBpZiAobWVudS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAoYW5ndWxhclJvdXRlLmRhdGEgYXMgQ29tbW9uc1JvdXRlRGF0YSkubWVudUl0ZW1zID0gbWVudTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIHJvdXRlIGhhcyBjaGlsZHJlblxuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICBpZiAodGhpcy5yb3V0ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNoaWxkcmVuLnB1c2goLi4udGhpcy5yb3V0ZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyUm91dGUuY2hpbGRyZW4ucHVzaChjaGlsZFJvdXRlLmJ1aWxkKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuQWN0aXZhdGUgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUuY2FuQWN0aXZhdGVDaGlsZCkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLmNhbkFjdGl2YXRlQ2hpbGQgPSBbLi4udGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZUNoaWxkXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5Mb2FkKSB7XG4gICAgICAgICAgICBhbmd1bGFyUm91dGUuY2FuTG9hZCA9IFsuLi50aGlzLnJvdXRlLmNhbkxvYWRdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlLmNhbkRlYWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGFuZ3VsYXJSb3V0ZS5jYW5EZWFjdGl2YXRlID0gWy4uLnRoaXMucm91dGUuY2FuRGVhY3RpdmF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm91dGUucmVzb2x2ZSkge1xuICAgICAgICAgICAgYW5ndWxhclJvdXRlLnJlc29sdmUgPSB7Li4udGhpcy5yb3V0ZS5yZXNvbHZlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbmd1bGFyUm91dGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBtZW51IGl0ZW1zLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PENvbW1vbnNNZW51SXRlbT59IC0gVGhlIGJ1aWx0IG1lbnUgaXRlbXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZE1lbnUoKTogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQnVpbGQ6IENvbW1vbnNNZW51SXRlbSB8IG51bGwgPSB0aGlzLm1lbnVJdGVtID8gey4uLnRoaXMubWVudUl0ZW19IDogbnVsbDtcbiAgICAgICAgY29uc3Qgcm91dGVDaGlsZHJlbk1lbnVJdGVtczogQXJyYXk8Q29tbW9uc01lbnVJdGVtPiA9IHRoaXMuY2hpbGRyZW4uZmxhdE1hcChjaGlsZCA9PiBjaGlsZC5idWlsZE1lbnUoKSk7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW46IEFycmF5PENvbW1vbnNNZW51SXRlbT4gPSBbXTtcbiAgICAgICAgY29uc3QgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gW107XG5cbiAgICAgICAgaWYgKG1lbnVJdGVtQnVpbGQ/Lml0ZW1zKSB7XG4gICAgICAgICAgICBtZW51SXRlbUNoaWxkcmVuQnVpbGQucHVzaCguLi5tZW51SXRlbUJ1aWxkLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2Nlc3NNZW51SXRlbUNoaWxkID0gKGNoaWxkOiBDb21tb25zTWVudUl0ZW0pOiBDb21tb25zTWVudUl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZmluYWxDaGlsZDogQ29tbW9uc01lbnVJdGVtID0gey4uLmNoaWxkfTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZpbmFsQ2hpbGQucm91dGVyTGluayA9IHRoaXMucm91dGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBmaW5hbENoaWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gW2ZpbmFsQ2hpbGQucm91dGVyTGlua107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmluYWxDaGlsZC5yb3V0ZXJMaW5rKSB7XG4gICAgICAgICAgICAgICAgZmluYWxDaGlsZC5yb3V0ZXJMaW5rID0gcmVtb3ZlUm91dGVFbXB0eVBhdGhTZWdtZW50cyhmaW5hbENoaWxkLnJvdXRlckxpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsQ2hpbGQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5tZW51SXRlbUNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gbWVudUl0ZW1DaGlsZHJlbi5wdXNoKHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSkpO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtQ2hpbGRyZW5BZnRlckJ1aWxkOiBBcnJheTxDb21tb25zTWVudUl0ZW0+ID0gdGhpcy5tZW51SXRlbUNoaWxkcmVuQWZ0ZXIubWFwKGNoaWxkID0+IHByb2Nlc3NNZW51SXRlbUNoaWxkKGNoaWxkKSk7XG5cbiAgICAgICAgbWVudUl0ZW1DaGlsZHJlbkJ1aWxkLnB1c2goLi4ubWVudUl0ZW1DaGlsZHJlbiwgLi4ucm91dGVDaGlsZHJlbk1lbnVJdGVtcywgLi4ubWVudUl0ZW1DaGlsZHJlbkFmdGVyQnVpbGQpO1xuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1lbnVJdGVtQnVpbGQubGFiZWwgPSBtZW51SXRlbUJ1aWxkLmxhYmVsID8/IHRoaXMucm91dGVEYXRhLnBhZ2VUaXRsZTtcbiAgICAgICAgaWYgKHR5cGVvZiBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSBbbWVudUl0ZW1CdWlsZC5yb3V0ZXJMaW5rXTtcbiAgICAgICAgfVxuICAgICAgICBtZW51SXRlbUJ1aWxkLnJvdXRlckxpbmsgPSByZW1vdmVSb3V0ZUVtcHR5UGF0aFNlZ21lbnRzKG1lbnVJdGVtQnVpbGQucm91dGVyTGluayA/PyB0aGlzLnJvdXRlUGF0aCk7XG4gICAgICAgIGlmIChtZW51SXRlbUNoaWxkcmVuQnVpbGQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5pdGVtcyA9IG1lbnVJdGVtQ2hpbGRyZW5CdWlsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZC5ndWFyZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IHRoaXMuZmluZE1lbnVJdGVtR3VhcmRzKCk7XG4gICAgICAgICAgICBpZiAoZ3VhcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBtZW51SXRlbUJ1aWxkLmd1YXJkcyA9IGd1YXJkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgbWVudUl0ZW1CdWlsZC5wZXJtaXNzaW9ucyA9IHRoaXMuZmluZE1lbnVJdGVtUGVybWlzc2lvbnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbWVudUl0ZW1CdWlsZF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kTWVudUl0ZW1HdWFyZHMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGNvbnN0IGd1YXJkczogQXJyYXk8YW55PiA9IFtdO1xuICAgICAgICBpZiAodGhpcy5yb3V0ZS5jYW5BY3RpdmF0ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBndWFyZHMucHVzaCguLi50aGlzLnJvdXRlLmNhbkFjdGl2YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBwYXJlbnQgZ3VhcmRzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIGRlY2lzaW9uIHRvIGhpZGUgbWVudSBpdGVtIVxuICAgICAgICAgICAgLy8gU29tZSBwYXJlbnQgcm91dGVzIG1pZ2h0IGhhdmUgZ3VhcmRzLCBidXQgbm8gbWVudSBpdGVtcywgc28gdGhpcyBndWFyZHMgbXVzdCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaGVyZSxcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gcGFyZW50IG1lbnUgaXRlbSB0byBoaWRlLlxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZmluZE1lbnVJdGVtR3VhcmRzKCkuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3VhcmRzLmluZGV4T2YoZykgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGd1YXJkcy5wdXNoKGcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBndWFyZHM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRNZW51SXRlbVBlcm1pc3Npb25zKCkge1xuICAgICAgICBpZiAodGhpcy5tZW51SXRlbT8ucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lbnVJdGVtLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvdXRlRGF0YS5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBhbHJlYWR5IGJ1aWx0XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZURhdGEucGVybWlzc2lvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW51SXRlbShpY29uPzogc3RyaW5nLCBsYWJlbD86IHN0cmluZywgcm91dGVyTGluaz86IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBtZW51SXRlbTogQ29tbW9uc01lbnVJdGVtID0ge307XG4gICAgaWYgKGljb24pIHtcbiAgICAgICAgbWVudUl0ZW0uaWNvbiA9IGljb247XG4gICAgfVxuICAgIGlmIChsYWJlbCkge1xuICAgICAgICBtZW51SXRlbS5sYWJlbCA9IGxhYmVsO1xuICAgIH1cbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgICBtZW51SXRlbS5yb3V0ZXJMaW5rID0gcm91dGVyTGluaztcbiAgICB9XG4gICAgcmV0dXJuIG1lbnVJdGVtO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUm91dGVCdWlsZGVyIHdpdGggdGhlIGdpdmVuIHBhdGggYW5kIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0ge1R5cGU8YW55Pn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHJldHVybiB7Um91dGVCdWlsZGVyfSAtIEEgbmV3IGluc3RhbmNlIG9mIFJvdXRlQnVpbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlKHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgY29tcG9uZW50OiBjb21wb25lbnRcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVkaXJlY3Qgcm91dGUgZm9yIHRoZSBnaXZlbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdFRvIC0gVGhlIFVSTCBwYXRoIHRvIHJlZGlyZWN0IHRvLlxuICogQHBhcmFtIHsnZnVsbCcgfCAncHJlZml4J30gW3BhdGhNYXRjaD0ncHJlZml4J10gLSBUaGUgcGF0aCBtYXRjaGluZyBzdHJhdGVneSAoJ2Z1bGwnIG9yICdwcmVmaXgnKS5cbiAqIEByZXR1cm4ge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUm91dGVCdWlsZGVyIGNsYXNzIHdpdGggdGhlIHJlZGlyZWN0IHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZVJlZGlyZWN0KHBhdGg6IHN0cmluZywgcmVkaXJlY3RUbzogc3RyaW5nLCBwYXRoTWF0Y2g6ICdmdWxsJyB8ICdwcmVmaXgnID0gJ3ByZWZpeCcpOiBSb3V0ZUJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgUm91dGVCdWlsZGVyKHtcbiAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgcmVkaXJlY3RUbzogcmVkaXJlY3RUbyxcbiAgICAgICAgcGF0aE1hdGNoOiBwYXRoTWF0Y2hcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSByb3V0ZSBtb2R1bGUgKG9yIHJvdXRlcykuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtMb2FkQ2hpbGRyZW59IGxvYWRDaGlsZHJlbiAtIFRoZSBmdW5jdGlvbiB0aGF0IGxvYWRzIHRoZSBsYXp5IG1vZHVsZSAob3Igcm91dGVzKS5cbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gW2Nhbk1hdGNoXSAtIEFuIG9wdGlvbmFsIGFycmF5IG9mIG9iamVjdHMgdGhhdCBjYW4gbWF0Y2ggdGhlIHJvdXRlLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBIG5ldyBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXp5Q2hpbGRyZW5Sb3V0ZShwYXRoOiBzdHJpbmcsIGxvYWRDaGlsZHJlbjogTG9hZENoaWxkcmVuLCBjYW5NYXRjaD86IEFycmF5PGFueT4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ2hpbGRyZW46IGxvYWRDaGlsZHJlbn07XG4gICAgaWYgKGNhbk1hdGNoPy5sZW5ndGgpIHtcbiAgICAgICAgcm91dGUuY2FuTWF0Y2ggPSBjYW5NYXRjaDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSb3V0ZUJ1aWxkZXIocm91dGUpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHJvdXRlIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIGZvciB0aGUgcm91dGUuXG4gKiBAcGFyYW0geygpID0+IFR5cGU8dW5rbm93bj4gfCBPYnNlcnZhYmxlPFR5cGU8dW5rbm93bj4gfCBEZWZhdWx0RXhwb3J0PFR5cGU8dW5rbm93bj4+PiB8IFByb21pc2U8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+fSBsb2FkQ29tcG9uZW50IC0gVGhlIGZ1bmN0aW9uIHRoYXQgbG9hZHMgdGhlIGNvbXBvbmVudCBmb3IgdGhlIHJvdXRlLlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBbY2FuTWF0Y2hdIC0gVGhlIGFycmF5IG9mIHZhbHVlcyB0aGF0IGRldGVybWluZSBpZiB0aGUgcm91dGUgY2FuIG1hdGNoLlxuICogQHJldHVybnMge1JvdXRlQnVpbGRlcn0gLSBBbiBpbnN0YW5jZSBvZiBSb3V0ZUJ1aWxkZXIgd2l0aCB0aGUgY3JlYXRlZCByb3V0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxhenlSb3V0ZShcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT4gVHlwZTx1bmtub3duPiB8IE9ic2VydmFibGU8VHlwZTx1bmtub3duPiB8IERlZmF1bHRFeHBvcnQ8VHlwZTx1bmtub3duPj4+IHwgUHJvbWlzZTxUeXBlPHVua25vd24+IHwgRGVmYXVsdEV4cG9ydDxUeXBlPHVua25vd24+Pj4sXG4gICAgY2FuTWF0Y2g/OiBBcnJheTxhbnk+XG4pOiBSb3V0ZUJ1aWxkZXIge1xuICAgIGNvbnN0IHJvdXRlOiBSb3V0ZSA9IHtwYXRoOiBwYXRoLCBsb2FkQ29tcG9uZW50OiBsb2FkQ29tcG9uZW50fTtcbiAgICBpZiAoY2FuTWF0Y2g/Lmxlbmd0aCkge1xuICAgICAgICByb3V0ZS5jYW5NYXRjaCA9IGNhbk1hdGNoO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJvdXRlQnVpbGRlcihyb3V0ZSk7XG59XG4iXX0=
|