@gravitee/ui-policy-studio-angular 9.6.0-angular-16-c8d84dc → 9.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 (100) hide show
  1. package/{esm2022 → esm2020}/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.mjs +4 -4
  2. package/{esm2022 → esm2020}/lib/components/flow-details/gio-ps-flow-details.component.mjs +4 -4
  3. package/{esm2022 → esm2020}/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.mjs +4 -4
  4. package/{esm2022 → esm2020}/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +4 -4
  5. package/{esm2022 → esm2020}/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +4 -4
  6. package/{esm2022 → esm2020}/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.mjs +4 -4
  7. package/{esm2022 → esm2020}/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.mjs +4 -4
  8. package/{esm2022 → esm2020}/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.mjs +4 -4
  9. package/{esm2022 → esm2020}/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +4 -4
  10. package/{esm2022 → esm2020}/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +4 -4
  11. package/{esm2022 → esm2020}/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.mjs +4 -4
  12. package/{esm2022 → esm2020}/lib/components/step-form/gio-ps-step-form.component.mjs +4 -4
  13. package/{esm2022 → esm2020}/lib/gio-policy-studio.component.mjs +4 -4
  14. package/{esm2022 → esm2020}/lib/gio-policy-studio.module.mjs +53 -53
  15. package/{esm2022 → esm2020}/lib/gio-policy-studio.service.mjs +4 -4
  16. package/esm2020/testing/lib/components/flow-details/gio-ps-flow-details.harness.mjs +41 -0
  17. package/esm2020/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.mjs +35 -0
  18. package/esm2020/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +126 -0
  19. package/esm2020/testing/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.mjs +50 -0
  20. package/esm2020/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.mjs +60 -0
  21. package/esm2020/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.mjs +128 -0
  22. package/esm2020/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.mjs +98 -0
  23. package/esm2020/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +71 -0
  24. package/esm2020/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.mjs +87 -0
  25. package/{esm2022 → esm2020}/testing/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.mjs +2 -2
  26. package/esm2020/testing/lib/components/step-form/gio-ps-step-form.harness.mjs +49 -0
  27. package/esm2020/testing/lib/gio-policy-studio.harness.mjs +161 -0
  28. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs +1443 -0
  29. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -0
  30. package/fesm2015/gravitee-ui-policy-studio-angular.mjs +1645 -0
  31. package/fesm2015/gravitee-ui-policy-studio-angular.mjs.map +1 -0
  32. package/{fesm2022 → fesm2020}/gravitee-ui-policy-studio-angular-testing.mjs +12 -12
  33. package/{fesm2022 → fesm2020}/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
  34. package/{fesm2022 → fesm2020}/gravitee-ui-policy-studio-angular.mjs +94 -94
  35. package/{fesm2022 → fesm2020}/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  36. package/lib/components/flow-details/gio-ps-flow-details.component.d.ts +1 -1
  37. package/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.d.ts +1 -1
  38. package/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.d.ts +1 -1
  39. package/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.d.ts +1 -1
  40. package/lib/components/flows-menu/gio-ps-flows-menu.component.d.ts +1 -1
  41. package/lib/components/step-form/gio-ps-step-form.component.d.ts +1 -1
  42. package/lib/gio-policy-studio.component.d.ts +1 -1
  43. package/package.json +22 -14
  44. package/esm2022/testing/lib/components/flow-details/gio-ps-flow-details.harness.mjs +0 -41
  45. package/esm2022/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.mjs +0 -35
  46. package/esm2022/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +0 -126
  47. package/esm2022/testing/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.mjs +0 -50
  48. package/esm2022/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.mjs +0 -60
  49. package/esm2022/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.mjs +0 -128
  50. package/esm2022/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.mjs +0 -98
  51. package/esm2022/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +0 -71
  52. package/esm2022/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.mjs +0 -87
  53. package/esm2022/testing/lib/components/step-form/gio-ps-step-form.harness.mjs +0 -49
  54. package/esm2022/testing/lib/gio-policy-studio.harness.mjs +0 -161
  55. /package/{esm2022 → esm2020}/gravitee-ui-policy-studio-angular.mjs +0 -0
  56. /package/{esm2022 → esm2020}/lib/components/flow-form-dialog/gio-ps-flow-form-dialog-result.model.mjs +0 -0
  57. /package/{esm2022 → esm2020}/lib/gio-policy-studio.model.mjs +0 -0
  58. /package/{esm2022 → esm2020}/lib/models/ConnectorsInfo.mjs +0 -0
  59. /package/{esm2022 → esm2020}/lib/models/PolicySchemaFetcher.mjs +0 -0
  60. /package/{esm2022 → esm2020}/lib/models/SaveOutput.mjs +0 -0
  61. /package/{esm2022 → esm2020}/lib/models/flow/ApiType.mjs +0 -0
  62. /package/{esm2022 → esm2020}/lib/models/flow/Flow.mjs +0 -0
  63. /package/{esm2022 → esm2020}/lib/models/flow/FlowExecution.mjs +0 -0
  64. /package/{esm2022 → esm2020}/lib/models/flow/HttpMethod.mjs +0 -0
  65. /package/{esm2022 → esm2020}/lib/models/flow/Selector.mjs +0 -0
  66. /package/{esm2022 → esm2020}/lib/models/flow/Step.mjs +0 -0
  67. /package/{esm2022 → esm2020}/lib/models/flow/index.mjs +0 -0
  68. /package/{esm2022 → esm2020}/lib/models/index.mjs +0 -0
  69. /package/{esm2022 → esm2020}/lib/models/plan/Plan.mjs +0 -0
  70. /package/{esm2022 → esm2020}/lib/models/plan/index.mjs +0 -0
  71. /package/{esm2022 → esm2020}/lib/models/policy/Policy.mjs +0 -0
  72. /package/{esm2022 → esm2020}/lib/models/policy/index.mjs +0 -0
  73. /package/{esm2022 → esm2020}/public-api.mjs +0 -0
  74. /package/{esm2022 → esm2020}/testing/gravitee-ui-policy-studio-angular-testing.mjs +0 -0
  75. /package/{esm2022 → esm2020}/testing/lib/models/ConnectorsInfo.fixture.mjs +0 -0
  76. /package/{esm2022 → esm2020}/testing/lib/models/ConnectorsInfo.mjs +0 -0
  77. /package/{esm2022 → esm2020}/testing/lib/models/PolicySchemaFetcher.mjs +0 -0
  78. /package/{esm2022 → esm2020}/testing/lib/models/SaveOutput.mjs +0 -0
  79. /package/{esm2022 → esm2020}/testing/lib/models/flow/ApiType.mjs +0 -0
  80. /package/{esm2022 → esm2020}/testing/lib/models/flow/Flow.fixture.mjs +0 -0
  81. /package/{esm2022 → esm2020}/testing/lib/models/flow/Flow.mjs +0 -0
  82. /package/{esm2022 → esm2020}/testing/lib/models/flow/FlowExecution.fixture.mjs +0 -0
  83. /package/{esm2022 → esm2020}/testing/lib/models/flow/FlowExecution.mjs +0 -0
  84. /package/{esm2022 → esm2020}/testing/lib/models/flow/HttpMethod.mjs +0 -0
  85. /package/{esm2022 → esm2020}/testing/lib/models/flow/Selector.mjs +0 -0
  86. /package/{esm2022 → esm2020}/testing/lib/models/flow/Step.fixture.mjs +0 -0
  87. /package/{esm2022 → esm2020}/testing/lib/models/flow/Step.mjs +0 -0
  88. /package/{esm2022 → esm2020}/testing/lib/models/flow/index-testing.mjs +0 -0
  89. /package/{esm2022 → esm2020}/testing/lib/models/flow/index.mjs +0 -0
  90. /package/{esm2022 → esm2020}/testing/lib/models/index-testing.mjs +0 -0
  91. /package/{esm2022 → esm2020}/testing/lib/models/index.mjs +0 -0
  92. /package/{esm2022 → esm2020}/testing/lib/models/plan/Plan.fixture.mjs +0 -0
  93. /package/{esm2022 → esm2020}/testing/lib/models/plan/Plan.mjs +0 -0
  94. /package/{esm2022 → esm2020}/testing/lib/models/plan/index-testing.mjs +0 -0
  95. /package/{esm2022 → esm2020}/testing/lib/models/plan/index.mjs +0 -0
  96. /package/{esm2022 → esm2020}/testing/lib/models/policy/Policy.fixture.mjs +0 -0
  97. /package/{esm2022 → esm2020}/testing/lib/models/policy/Policy.mjs +0 -0
  98. /package/{esm2022 → esm2020}/testing/lib/models/policy/index-testing.mjs +0 -0
  99. /package/{esm2022 → esm2020}/testing/lib/models/policy/index.mjs +0 -0
  100. /package/{esm2022 → esm2020}/testing/public-testing-api.mjs +0 -0
@@ -1,161 +0,0 @@
1
- /*
2
- * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { ComponentHarness } from '@angular/cdk/testing';
17
- import { MatButtonHarness } from '@angular/material/button/testing';
18
- import { MatTabGroupHarness } from '@angular/material/tabs/testing';
19
- import { GioPolicyStudioFlowsMenuHarness } from './components/flows-menu/gio-ps-flows-menu.harness';
20
- import { GioPolicyStudioDetailsHarness } from './components/flow-details/gio-ps-flow-details.harness';
21
- import { GioPolicyStudioFlowProxyFormDialogHarness } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness';
22
- import { GioPolicyStudioFlowMessageFormDialogHarness } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness';
23
- import { GioPolicyStudioFlowExecutionFormDialogHarness } from './components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness';
24
- import { GioPolicyStudioDetailsPhaseHarness } from './components/flow-details-phase/gio-ps-flow-details-phase.harness';
25
- export class GioPolicyStudioHarness extends ComponentHarness {
26
- constructor() {
27
- super(...arguments);
28
- this.menuHarness = this.locatorFor(GioPolicyStudioFlowsMenuHarness);
29
- this.detailsHarness = this.locatorFor(GioPolicyStudioDetailsHarness);
30
- this.phaseHarness = (phaseType) => this.locatorFor(GioPolicyStudioDetailsPhaseHarness.with({ type: phaseType }))();
31
- }
32
- static { this.hostSelector = 'gio-policy-studio'; }
33
- /**
34
- * Add a flow to a plan or to "Common flows"
35
- *
36
- * @param groupName Plan name where to add the flow. You also can define "Common flows" to add a flow to this group.
37
- * @param flow Flow to add
38
- */
39
- async addFlow(groupName, flow) {
40
- await (await this.menuHarness()).addFlow(new RegExp(groupName, 'i'));
41
- await this.setFlowFormDialog(flow);
42
- }
43
- /**
44
- * Edit a flow configuration
45
- *
46
- * @param flowName Flow name to edit
47
- * @param flow
48
- */
49
- async editFlowConfig(flowName, flow) {
50
- (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
51
- await (await this.detailsHarness()).clickEditFlowBtn();
52
- await this.setFlowFormDialog(flow);
53
- }
54
- /**
55
- * Delete a flow
56
- *
57
- * @param flowName Flow name to delete
58
- */
59
- async deleteFlow(flowName) {
60
- (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
61
- await (await this.detailsHarness()).clickDeleteFlowBtn();
62
- }
63
- /**
64
- * Select a flow in the menu
65
- *
66
- * @param flowName Flow name to select
67
- */
68
- async selectFlowInMenu(flowName) {
69
- await (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
70
- }
71
- /**
72
- * Get the list of flows in the menu
73
- */
74
- async getFlowsMenu() {
75
- return (await this.menuHarness()).getAllFlowsGroups();
76
- }
77
- /**
78
- * Get selected flow infos
79
- */
80
- async getSelectedFlowInfos() {
81
- return await (await this.detailsHarness()).getFlowInfos();
82
- }
83
- /**
84
- * Get selected flow phase harness
85
- * @param phaseType Phase type to get
86
- */
87
- async getSelectedFlowPhase(phaseType) {
88
- if (phaseType === 'PUBLISH' || phaseType === 'SUBSCRIBE') {
89
- const matTabsHarness = await this.locatorFor(MatTabGroupHarness.with({ selector: '.content__tabs' }))();
90
- await matTabsHarness.selectTab({ label: 'Event messages' });
91
- }
92
- const steps = await this.phaseHarness(phaseType);
93
- return steps ? steps : undefined;
94
- }
95
- /**
96
- * Get Save button state
97
- */
98
- async getSaveButtonState() {
99
- const saveButton = await this.locatorFor(MatButtonHarness.with({ ancestor: '.header__btn' }))();
100
- const disabled = await saveButton.isDisabled();
101
- const text = await saveButton.getText();
102
- if (text === 'Saving...') {
103
- return 'SAVING';
104
- }
105
- if (disabled) {
106
- return 'DISABLED';
107
- }
108
- return 'VISIBLE';
109
- }
110
- /**
111
- * Click on the "Save" button
112
- */
113
- async save() {
114
- await (await this.locatorFor(MatButtonHarness.with({ text: /Save/ }))()).click();
115
- }
116
- async setFlowFormDialog(flow) {
117
- const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL');
118
- const httpSelector = flow.selectors?.find(s => s.type === 'HTTP');
119
- const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION');
120
- if (!!channelSelector && !!httpSelector) {
121
- throw new Error('Channel and HTTP selectors are not be used together.');
122
- }
123
- if (channelSelector) {
124
- const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMessageFormDialogHarness)();
125
- const toChannelOperator = {
126
- STARTS_WITH: 'Starts with',
127
- EQUALS: 'Equals',
128
- };
129
- await flowFormNewDialog.setFlowFormValues({
130
- name: flow.name,
131
- channel: channelSelector?.channel,
132
- channelOperator: toChannelOperator[channelSelector.channelOperator],
133
- entrypoints: channelSelector?.entrypoints,
134
- operations: channelSelector?.operations,
135
- condition: conditionSelector?.condition,
136
- });
137
- await flowFormNewDialog.save();
138
- return;
139
- }
140
- if (httpSelector) {
141
- const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowProxyFormDialogHarness)();
142
- await flowFormNewDialog.setFlowFormValues({
143
- name: flow.name,
144
- path: httpSelector?.path,
145
- pathOperator: httpSelector?.pathOperator,
146
- methods: httpSelector?.methods,
147
- condition: conditionSelector?.condition,
148
- });
149
- await flowFormNewDialog.save();
150
- return;
151
- }
152
- throw new Error('No selector found for this flow. Needed to select Message or Proxy flow form dialog.');
153
- }
154
- async setFlowExecutionConfig(flowExecution) {
155
- await (await this.menuHarness()).openFlowExecutionConfig();
156
- const flowExecutionDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowExecutionFormDialogHarness)();
157
- await flowExecutionDialog.setFlowFormValues(flowExecution);
158
- await flowExecutionDialog.save();
159
- }
160
- }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1zdHVkaW8uaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXBvbGljeS1zdHVkaW8tYW5ndWxhci9zcmMvbGliL2dpby1wb2xpY3ktc3R1ZGlvLmhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN0RyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw0RkFBNEYsQ0FBQztBQUN2SixPQUFPLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxnR0FBZ0csQ0FBQztBQUM3SixPQUFPLEVBQUUsNkNBQTZDLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0NBQWtDLEVBQWEsTUFBTSxtRUFBbUUsQ0FBQztBQUVsSSxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZ0JBQWdCO0lBQTVEOztRQUdVLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRS9ELG1CQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRWhFLGlCQUFZLEdBQUcsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQXFL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QUM7UUFFM0QsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFLENBQUM7UUFDaEksTUFBTSxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxNQUFNLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIyIFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QnV0dG9uSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi90ZXN0aW5nJztcbmltcG9ydCB7IE1hdFRhYkdyb3VwSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMvdGVzdGluZyc7XG5cbmltcG9ydCB7IENoYW5uZWxTZWxlY3RvciwgQ29uZGl0aW9uU2VsZWN0b3IsIEZsb3csIEZsb3dFeGVjdXRpb24sIEh0dHBTZWxlY3RvciB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0Zsb3dzTWVudUhhcm5lc3MgfSBmcm9tICcuL2NvbXBvbmVudHMvZmxvd3MtbWVudS9naW8tcHMtZmxvd3MtbWVudS5oYXJuZXNzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0RldGFpbHNIYXJuZXNzIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zsb3ctZGV0YWlscy9naW8tcHMtZmxvdy1kZXRhaWxzLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd1Byb3h5Rm9ybURpYWxvZ0hhcm5lc3MgfSBmcm9tICcuL2NvbXBvbmVudHMvZmxvdy1mb3JtLWRpYWxvZy9mbG93LXByb3h5LWZvcm0tZGlhbG9nL2dpby1wcy1mbG93LXByb3h5LWZvcm0tZGlhbG9nLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd01lc3NhZ2VGb3JtRGlhbG9nSGFybmVzcyB9IGZyb20gJy4vY29tcG9uZW50cy9mbG93LWZvcm0tZGlhbG9nL2Zsb3ctbWVzc2FnZS1mb3JtLWRpYWxvZy9naW8tcHMtZmxvdy1tZXNzYWdlLWZvcm0tZGlhbG9nLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd0V4ZWN1dGlvbkZvcm1EaWFsb2dIYXJuZXNzIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zsb3ctZXhlY3V0aW9uLWZvcm0tZGlhbG9nL2dpby1wcy1mbG93LWV4ZWN1dGlvbi1mb3JtLWRpYWxvZy5oYXJuZXNzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0RldGFpbHNQaGFzZUhhcm5lc3MsIFBoYXNlVHlwZSB9IGZyb20gJy4vY29tcG9uZW50cy9mbG93LWRldGFpbHMtcGhhc2UvZ2lvLXBzLWZsb3ctZGV0YWlscy1waGFzZS5oYXJuZXNzJztcblxuZXhwb3J0IGNsYXNzIEdpb1BvbGljeVN0dWRpb0hhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnZ2lvLXBvbGljeS1zdHVkaW8nO1xuXG4gIHByaXZhdGUgbWVudUhhcm5lc3MgPSB0aGlzLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd3NNZW51SGFybmVzcyk7XG5cbiAgcHJpdmF0ZSBkZXRhaWxzSGFybmVzcyA9IHRoaXMubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzSGFybmVzcyk7XG5cbiAgcHJpdmF0ZSBwaGFzZUhhcm5lc3MgPSAocGhhc2VUeXBlOiBQaGFzZVR5cGUpID0+IHRoaXMubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzUGhhc2VIYXJuZXNzLndpdGgoeyB0eXBlOiBwaGFzZVR5cGUgfSkpKCk7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZsb3cgdG8gYSBwbGFuIG9yIHRvIFwiQ29tbW9uIGZsb3dzXCJcbiAgICpcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBQbGFuIG5hbWUgd2hlcmUgdG8gYWRkIHRoZSBmbG93LiBZb3UgYWxzbyBjYW4gZGVmaW5lIFwiQ29tbW9uIGZsb3dzXCIgdG8gYWRkIGEgZmxvdyB0byB0aGlzIGdyb3VwLlxuICAgKiBAcGFyYW0gZmxvdyBGbG93IHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZEZsb3coZ3JvdXBOYW1lOiBzdHJpbmcsIGZsb3c6IEZsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5hZGRGbG93KG5ldyBSZWdFeHAoZ3JvdXBOYW1lLCAnaScpKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0Rmxvd0Zvcm1EaWFsb2coZmxvdyk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBhIGZsb3cgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZmxvd05hbWUgRmxvdyBuYW1lIHRvIGVkaXRcbiAgICogQHBhcmFtIGZsb3dcbiAgICovXG4gIHB1YmxpYyBhc3luYyBlZGl0Rmxvd0NvbmZpZyhmbG93TmFtZTogc3RyaW5nLCBmbG93OiBQYXJ0aWFsPEZsb3c+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgKGF3YWl0IHRoaXMubWVudUhhcm5lc3MoKSkuc2VsZWN0RmxvdyhuZXcgUmVnRXhwKGZsb3dOYW1lLCAnaScpKTtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5kZXRhaWxzSGFybmVzcygpKS5jbGlja0VkaXRGbG93QnRuKCk7XG5cbiAgICBhd2FpdCB0aGlzLnNldEZsb3dGb3JtRGlhbG9nKGZsb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIGZsb3dcbiAgICpcbiAgICogQHBhcmFtIGZsb3dOYW1lIEZsb3cgbmFtZSB0byBkZWxldGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVGbG93KGZsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5zZWxlY3RGbG93KG5ldyBSZWdFeHAoZmxvd05hbWUsICdpJykpO1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLmRldGFpbHNIYXJuZXNzKCkpLmNsaWNrRGVsZXRlRmxvd0J0bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIGZsb3cgaW4gdGhlIG1lbnVcbiAgICpcbiAgICogQHBhcmFtIGZsb3dOYW1lIEZsb3cgbmFtZSB0byBzZWxlY3RcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RGbG93SW5NZW51KGZsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5zZWxlY3RGbG93KG5ldyBSZWdFeHAoZmxvd05hbWUsICdpJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBmbG93cyBpbiB0aGUgbWVudVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZsb3dzTWVudSgpOiBQcm9taXNlPFxuICAgIHtcbiAgICAgIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICBmbG93czoge1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBpbmZvczogc3RyaW5nIHwgbnVsbDtcbiAgICAgIH1bXTtcbiAgICB9W11cbiAgPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm1lbnVIYXJuZXNzKCkpLmdldEFsbEZsb3dzR3JvdXBzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGVkIGZsb3cgaW5mb3NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3RlZEZsb3dJbmZvcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPj4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5kZXRhaWxzSGFybmVzcygpKS5nZXRGbG93SW5mb3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgZmxvdyBwaGFzZSBoYXJuZXNzXG4gICAqIEBwYXJhbSBwaGFzZVR5cGUgUGhhc2UgdHlwZSB0byBnZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3RlZEZsb3dQaGFzZShwaGFzZVR5cGU6IFBoYXNlVHlwZSk6IFByb21pc2U8R2lvUG9saWN5U3R1ZGlvRGV0YWlsc1BoYXNlSGFybmVzcyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChwaGFzZVR5cGUgPT09ICdQVUJMSVNIJyB8fCBwaGFzZVR5cGUgPT09ICdTVUJTQ1JJQkUnKSB7XG4gICAgICBjb25zdCBtYXRUYWJzSGFybmVzcyA9IGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRUYWJHcm91cEhhcm5lc3Mud2l0aCh7IHNlbGVjdG9yOiAnLmNvbnRlbnRfX3RhYnMnIH0pKSgpO1xuICAgICAgYXdhaXQgbWF0VGFic0hhcm5lc3Muc2VsZWN0VGFiKHsgbGFiZWw6ICdFdmVudCBtZXNzYWdlcycgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcHMgPSBhd2FpdCB0aGlzLnBoYXNlSGFybmVzcyhwaGFzZVR5cGUpO1xuXG4gICAgcmV0dXJuIHN0ZXBzID8gc3RlcHMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFNhdmUgYnV0dG9uIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2F2ZUJ1dHRvblN0YXRlKCk6IFByb21pc2U8J1ZJU0lCTEUnIHwgJ0RJU0FCTEVEJyB8ICdTQVZJTkcnPiB7XG4gICAgY29uc3Qgc2F2ZUJ1dHRvbiA9IGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRCdXR0b25IYXJuZXNzLndpdGgoeyBhbmNlc3RvcjogJy5oZWFkZXJfX2J0bicgfSkpKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBhd2FpdCBzYXZlQnV0dG9uLmlzRGlzYWJsZWQoKTtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgc2F2ZUJ1dHRvbi5nZXRUZXh0KCk7XG5cbiAgICBpZiAodGV4dCA9PT0gJ1NhdmluZy4uLicpIHtcbiAgICAgIHJldHVybiAnU0FWSU5HJztcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiAnRElTQUJMRUQnO1xuICAgIH1cblxuICAgIHJldHVybiAnVklTSUJMRSc7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgb24gdGhlIFwiU2F2ZVwiIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRCdXR0b25IYXJuZXNzLndpdGgoeyB0ZXh0OiAvU2F2ZS8gfSkpKCkpLmNsaWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldEZsb3dGb3JtRGlhbG9nKGZsb3c6IFBhcnRpYWw8Rmxvdz4pIHtcbiAgICBjb25zdCBjaGFubmVsU2VsZWN0b3IgPSBmbG93LnNlbGVjdG9ycz8uZmluZChzID0+IHMudHlwZSA9PT0gJ0NIQU5ORUwnKSBhcyBDaGFubmVsU2VsZWN0b3IgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgaHR0cFNlbGVjdG9yID0gZmxvdy5zZWxlY3RvcnM/LmZpbmQocyA9PiBzLnR5cGUgPT09ICdIVFRQJykgYXMgSHR0cFNlbGVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbmRpdGlvblNlbGVjdG9yID0gZmxvdy5zZWxlY3RvcnM/LmZpbmQocyA9PiBzLnR5cGUgPT09ICdDT05ESVRJT04nKSBhcyBDb25kaXRpb25TZWxlY3RvciB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghIWNoYW5uZWxTZWxlY3RvciAmJiAhIWh0dHBTZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIGFuZCBIVFRQIHNlbGVjdG9ycyBhcmUgbm90IGJlIHVzZWQgdG9nZXRoZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWxTZWxlY3Rvcikge1xuICAgICAgY29uc3QgZmxvd0Zvcm1OZXdEaWFsb2cgPSBhd2FpdCB0aGlzLmRvY3VtZW50Um9vdExvY2F0b3JGYWN0b3J5KCkubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9GbG93TWVzc2FnZUZvcm1EaWFsb2dIYXJuZXNzKSgpO1xuXG4gICAgICBjb25zdCB0b0NoYW5uZWxPcGVyYXRvciA9IHtcbiAgICAgICAgU1RBUlRTX1dJVEg6ICdTdGFydHMgd2l0aCcsXG4gICAgICAgIEVRVUFMUzogJ0VxdWFscycsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmbG93Rm9ybU5ld0RpYWxvZy5zZXRGbG93Rm9ybVZhbHVlcyh7XG4gICAgICAgIG5hbWU6IGZsb3cubmFtZSxcbiAgICAgICAgY2hhbm5lbDogY2hhbm5lbFNlbGVjdG9yPy5jaGFubmVsLFxuICAgICAgICBjaGFubmVsT3BlcmF0b3I6IHRvQ2hhbm5lbE9wZXJhdG9yW2NoYW5uZWxTZWxlY3Rvci5jaGFubmVsT3BlcmF0b3JdLFxuICAgICAgICBlbnRyeXBvaW50czogY2hhbm5lbFNlbGVjdG9yPy5lbnRyeXBvaW50cyxcbiAgICAgICAgb3BlcmF0aW9uczogY2hhbm5lbFNlbGVjdG9yPy5vcGVyYXRpb25zLFxuICAgICAgICBjb25kaXRpb246IGNvbmRpdGlvblNlbGVjdG9yPy5jb25kaXRpb24sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZmxvd0Zvcm1OZXdEaWFsb2cuc2F2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChodHRwU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IGZsb3dGb3JtTmV3RGlhbG9nID0gYXdhaXQgdGhpcy5kb2N1bWVudFJvb3RMb2NhdG9yRmFjdG9yeSgpLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd1Byb3h5Rm9ybURpYWxvZ0hhcm5lc3MpKCk7XG5cbiAgICAgIGF3YWl0IGZsb3dGb3JtTmV3RGlhbG9nLnNldEZsb3dGb3JtVmFsdWVzKHtcbiAgICAgICAgbmFtZTogZmxvdy5uYW1lLFxuICAgICAgICBwYXRoOiBodHRwU2VsZWN0b3I/LnBhdGgsXG4gICAgICAgIHBhdGhPcGVyYXRvcjogaHR0cFNlbGVjdG9yPy5wYXRoT3BlcmF0b3IsXG4gICAgICAgIG1ldGhvZHM6IGh0dHBTZWxlY3Rvcj8ubWV0aG9kcyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25kaXRpb25TZWxlY3Rvcj8uY29uZGl0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGZsb3dGb3JtTmV3RGlhbG9nLnNhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlbGVjdG9yIGZvdW5kIGZvciB0aGlzIGZsb3cuIE5lZWRlZCB0byBzZWxlY3QgTWVzc2FnZSBvciBQcm94eSBmbG93IGZvcm0gZGlhbG9nLicpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldEZsb3dFeGVjdXRpb25Db25maWcoZmxvd0V4ZWN1dGlvbjogRmxvd0V4ZWN1dGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLm1lbnVIYXJuZXNzKCkpLm9wZW5GbG93RXhlY3V0aW9uQ29uZmlnKCk7XG5cbiAgICBjb25zdCBmbG93RXhlY3V0aW9uRGlhbG9nID0gYXdhaXQgdGhpcy5kb2N1bWVudFJvb3RMb2NhdG9yRmFjdG9yeSgpLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd0V4ZWN1dGlvbkZvcm1EaWFsb2dIYXJuZXNzKSgpO1xuICAgIGF3YWl0IGZsb3dFeGVjdXRpb25EaWFsb2cuc2V0Rmxvd0Zvcm1WYWx1ZXMoZmxvd0V4ZWN1dGlvbik7XG4gICAgYXdhaXQgZmxvd0V4ZWN1dGlvbkRpYWxvZy5zYXZlKCk7XG4gIH1cbn1cbiJdfQ==
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes