@angular/cdk 13.2.0-rc.0 → 14.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/a11y/aria-describer/aria-describer.d.ts +33 -6
  2. package/esm2020/a11y/a11y-module.mjs +5 -5
  3. package/esm2020/a11y/aria-describer/aria-describer.mjs +75 -52
  4. package/esm2020/a11y/focus-monitor/focus-monitor.mjs +7 -7
  5. package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
  6. package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +4 -4
  7. package/esm2020/a11y/focus-trap/focus-trap.mjs +7 -7
  8. package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +4 -4
  9. package/esm2020/a11y/input-modality/input-modality-detector.mjs +4 -4
  10. package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
  11. package/esm2020/a11y/live-announcer/live-announcer.mjs +7 -7
  12. package/esm2020/accordion/accordion-item.mjs +4 -4
  13. package/esm2020/accordion/accordion-module.mjs +5 -5
  14. package/esm2020/accordion/accordion.mjs +4 -4
  15. package/esm2020/bidi/bidi-module.mjs +5 -5
  16. package/esm2020/bidi/dir.mjs +4 -4
  17. package/esm2020/bidi/directionality.mjs +4 -4
  18. package/esm2020/clipboard/clipboard-module.mjs +5 -5
  19. package/esm2020/clipboard/clipboard.mjs +4 -4
  20. package/esm2020/clipboard/copy-to-clipboard.mjs +4 -4
  21. package/esm2020/collections/unique-selection-dispatcher.mjs +4 -4
  22. package/esm2020/drag-drop/directives/drag-handle.mjs +4 -4
  23. package/esm2020/drag-drop/directives/drag-placeholder.mjs +4 -4
  24. package/esm2020/drag-drop/directives/drag-preview.mjs +4 -4
  25. package/esm2020/drag-drop/directives/drag.mjs +4 -4
  26. package/esm2020/drag-drop/directives/drop-list-group.mjs +4 -4
  27. package/esm2020/drag-drop/directives/drop-list.mjs +4 -4
  28. package/esm2020/drag-drop/drag-drop-module.mjs +5 -5
  29. package/esm2020/drag-drop/drag-drop-registry.mjs +4 -4
  30. package/esm2020/drag-drop/drag-drop.mjs +4 -4
  31. package/esm2020/layout/breakpoints-observer.mjs +4 -4
  32. package/esm2020/layout/layout-module.mjs +5 -5
  33. package/esm2020/layout/media-matcher.mjs +4 -4
  34. package/esm2020/observers/observe-content.mjs +14 -14
  35. package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
  36. package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
  37. package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
  38. package/esm2020/overlay/fullscreen-overlay-container.mjs +4 -4
  39. package/esm2020/overlay/overlay-container.mjs +4 -4
  40. package/esm2020/overlay/overlay-directives.mjs +7 -7
  41. package/esm2020/overlay/overlay-module.mjs +5 -5
  42. package/esm2020/overlay/overlay.mjs +4 -4
  43. package/esm2020/overlay/position/flexible-connected-position-strategy.mjs +9 -3
  44. package/esm2020/overlay/position/overlay-position-builder.mjs +4 -4
  45. package/esm2020/overlay/scroll/scroll-strategy-options.mjs +4 -4
  46. package/esm2020/platform/platform-module.mjs +5 -5
  47. package/esm2020/platform/platform.mjs +4 -4
  48. package/esm2020/portal/portal-directives.mjs +17 -17
  49. package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +4 -4
  50. package/esm2020/scrolling/scroll-dispatcher.mjs +4 -4
  51. package/esm2020/scrolling/scrollable.mjs +4 -4
  52. package/esm2020/scrolling/scrolling-module.mjs +9 -9
  53. package/esm2020/scrolling/viewport-ruler.mjs +4 -4
  54. package/esm2020/scrolling/virtual-for-of.mjs +4 -4
  55. package/esm2020/scrolling/virtual-scroll-viewport.mjs +4 -4
  56. package/esm2020/stepper/step-header.mjs +4 -4
  57. package/esm2020/stepper/step-label.mjs +4 -4
  58. package/esm2020/stepper/stepper-button.mjs +7 -7
  59. package/esm2020/stepper/stepper-module.mjs +5 -5
  60. package/esm2020/stepper/stepper.mjs +7 -7
  61. package/esm2020/table/cell.mjs +22 -22
  62. package/esm2020/table/coalesced-style-scheduler.mjs +4 -4
  63. package/esm2020/table/row.mjs +28 -28
  64. package/esm2020/table/table-module.mjs +5 -5
  65. package/esm2020/table/table.mjs +19 -19
  66. package/esm2020/table/text-column.mjs +4 -4
  67. package/esm2020/text-field/autofill.mjs +7 -7
  68. package/esm2020/text-field/autosize.mjs +4 -4
  69. package/esm2020/text-field/text-field-module.mjs +5 -5
  70. package/esm2020/tree/nested-node.mjs +4 -4
  71. package/esm2020/tree/node.mjs +4 -4
  72. package/esm2020/tree/outlet.mjs +4 -4
  73. package/esm2020/tree/padding.mjs +4 -4
  74. package/esm2020/tree/toggle.mjs +4 -4
  75. package/esm2020/tree/tree-module.mjs +5 -5
  76. package/esm2020/tree/tree.mjs +7 -7
  77. package/esm2020/version.mjs +1 -1
  78. package/fesm2015/a11y.mjs +116 -93
  79. package/fesm2015/a11y.mjs.map +1 -1
  80. package/fesm2015/accordion.mjs +10 -10
  81. package/fesm2015/accordion.mjs.map +1 -1
  82. package/fesm2015/bidi.mjs +10 -10
  83. package/fesm2015/bidi.mjs.map +1 -1
  84. package/fesm2015/cdk.mjs +1 -1
  85. package/fesm2015/cdk.mjs.map +1 -1
  86. package/fesm2015/clipboard.mjs +10 -10
  87. package/fesm2015/clipboard.mjs.map +1 -1
  88. package/fesm2015/collections.mjs +3 -3
  89. package/fesm2015/collections.mjs.map +1 -1
  90. package/fesm2015/drag-drop.mjs +28 -28
  91. package/fesm2015/drag-drop.mjs.map +1 -1
  92. package/fesm2015/layout.mjs +10 -10
  93. package/fesm2015/layout.mjs.map +1 -1
  94. package/fesm2015/observers.mjs +13 -13
  95. package/fesm2015/observers.mjs.map +1 -1
  96. package/fesm2015/overlay.mjs +42 -36
  97. package/fesm2015/overlay.mjs.map +1 -1
  98. package/fesm2015/platform.mjs +7 -7
  99. package/fesm2015/platform.mjs.map +1 -1
  100. package/fesm2015/portal.mjs +16 -16
  101. package/fesm2015/portal.mjs.map +1 -1
  102. package/fesm2015/scrolling.mjs +26 -26
  103. package/fesm2015/scrolling.mjs.map +1 -1
  104. package/fesm2015/stepper.mjs +22 -22
  105. package/fesm2015/stepper.mjs.map +1 -1
  106. package/fesm2015/table.mjs +76 -76
  107. package/fesm2015/table.mjs.map +1 -1
  108. package/fesm2015/text-field.mjs +13 -13
  109. package/fesm2015/text-field.mjs.map +1 -1
  110. package/fesm2015/tree.mjs +25 -25
  111. package/fesm2015/tree.mjs.map +1 -1
  112. package/fesm2020/a11y.mjs +113 -92
  113. package/fesm2020/a11y.mjs.map +1 -1
  114. package/fesm2020/accordion.mjs +10 -10
  115. package/fesm2020/accordion.mjs.map +1 -1
  116. package/fesm2020/bidi.mjs +10 -10
  117. package/fesm2020/bidi.mjs.map +1 -1
  118. package/fesm2020/cdk.mjs +1 -1
  119. package/fesm2020/cdk.mjs.map +1 -1
  120. package/fesm2020/clipboard.mjs +10 -10
  121. package/fesm2020/clipboard.mjs.map +1 -1
  122. package/fesm2020/collections.mjs +3 -3
  123. package/fesm2020/collections.mjs.map +1 -1
  124. package/fesm2020/drag-drop.mjs +28 -28
  125. package/fesm2020/drag-drop.mjs.map +1 -1
  126. package/fesm2020/layout.mjs +10 -10
  127. package/fesm2020/layout.mjs.map +1 -1
  128. package/fesm2020/observers.mjs +13 -13
  129. package/fesm2020/observers.mjs.map +1 -1
  130. package/fesm2020/overlay.mjs +42 -36
  131. package/fesm2020/overlay.mjs.map +1 -1
  132. package/fesm2020/platform.mjs +7 -7
  133. package/fesm2020/platform.mjs.map +1 -1
  134. package/fesm2020/portal.mjs +16 -16
  135. package/fesm2020/portal.mjs.map +1 -1
  136. package/fesm2020/scrolling.mjs +26 -26
  137. package/fesm2020/scrolling.mjs.map +1 -1
  138. package/fesm2020/stepper.mjs +22 -22
  139. package/fesm2020/stepper.mjs.map +1 -1
  140. package/fesm2020/table.mjs +76 -76
  141. package/fesm2020/table.mjs.map +1 -1
  142. package/fesm2020/text-field.mjs +13 -13
  143. package/fesm2020/text-field.mjs.map +1 -1
  144. package/fesm2020/tree.mjs +25 -25
  145. package/fesm2020/tree.mjs.map +1 -1
  146. package/package.json +1 -9
  147. package/schematics/ng-add/index.js +1 -1
  148. package/schematics/ng-add/index.mjs +1 -1
  149. package/schematics/utils/html-manipulation.js +3 -1
  150. package/schematics/utils/html-manipulation.mjs +3 -1
  151. package/esm2020/testing/protractor/index.mjs +0 -9
  152. package/esm2020/testing/protractor/protractor-element.mjs +0 -234
  153. package/esm2020/testing/protractor/protractor-harness-environment.mjs +0 -72
  154. package/esm2020/testing/protractor/public-api.mjs +0 -10
  155. package/fesm2015/testing/protractor.mjs +0 -355
  156. package/fesm2015/testing/protractor.mjs.map +0 -1
  157. package/fesm2020/testing/protractor.mjs +0 -322
  158. package/fesm2020/testing/protractor.mjs.map +0 -1
  159. package/testing/protractor/index.d.ts +0 -8
  160. package/testing/protractor/package.json +0 -9
  161. package/testing/protractor/protractor-element.d.ts +0 -90
  162. package/testing/protractor/protractor-harness-environment.d.ts +0 -50
  163. package/testing/protractor/public-api.d.ts +0 -9
@@ -1,234 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { _getTextWithExcludedElements, TestKey, } from '@angular/cdk/testing';
9
- import { browser, Button, by, Key } from 'protractor';
10
- /** Maps the `TestKey` constants to Protractor's `Key` constants. */
11
- const keyMap = {
12
- [TestKey.BACKSPACE]: Key.BACK_SPACE,
13
- [TestKey.TAB]: Key.TAB,
14
- [TestKey.ENTER]: Key.ENTER,
15
- [TestKey.SHIFT]: Key.SHIFT,
16
- [TestKey.CONTROL]: Key.CONTROL,
17
- [TestKey.ALT]: Key.ALT,
18
- [TestKey.ESCAPE]: Key.ESCAPE,
19
- [TestKey.PAGE_UP]: Key.PAGE_UP,
20
- [TestKey.PAGE_DOWN]: Key.PAGE_DOWN,
21
- [TestKey.END]: Key.END,
22
- [TestKey.HOME]: Key.HOME,
23
- [TestKey.LEFT_ARROW]: Key.ARROW_LEFT,
24
- [TestKey.UP_ARROW]: Key.ARROW_UP,
25
- [TestKey.RIGHT_ARROW]: Key.ARROW_RIGHT,
26
- [TestKey.DOWN_ARROW]: Key.ARROW_DOWN,
27
- [TestKey.INSERT]: Key.INSERT,
28
- [TestKey.DELETE]: Key.DELETE,
29
- [TestKey.F1]: Key.F1,
30
- [TestKey.F2]: Key.F2,
31
- [TestKey.F3]: Key.F3,
32
- [TestKey.F4]: Key.F4,
33
- [TestKey.F5]: Key.F5,
34
- [TestKey.F6]: Key.F6,
35
- [TestKey.F7]: Key.F7,
36
- [TestKey.F8]: Key.F8,
37
- [TestKey.F9]: Key.F9,
38
- [TestKey.F10]: Key.F10,
39
- [TestKey.F11]: Key.F11,
40
- [TestKey.F12]: Key.F12,
41
- [TestKey.META]: Key.META,
42
- };
43
- /** Converts a `ModifierKeys` object to a list of Protractor `Key`s. */
44
- function toProtractorModifierKeys(modifiers) {
45
- const result = [];
46
- if (modifiers.control) {
47
- result.push(Key.CONTROL);
48
- }
49
- if (modifiers.alt) {
50
- result.push(Key.ALT);
51
- }
52
- if (modifiers.shift) {
53
- result.push(Key.SHIFT);
54
- }
55
- if (modifiers.meta) {
56
- result.push(Key.META);
57
- }
58
- return result;
59
- }
60
- /**
61
- * A `TestElement` implementation for Protractor.
62
- * @deprecated
63
- * @breaking-change 13.0.0
64
- */
65
- export class ProtractorElement {
66
- constructor(element) {
67
- this.element = element;
68
- }
69
- /** Blur the element. */
70
- async blur() {
71
- return browser.executeScript('arguments[0].blur()', this.element);
72
- }
73
- /** Clear the element's input (for input and textarea elements only). */
74
- async clear() {
75
- return this.element.clear();
76
- }
77
- async click(...args) {
78
- await this._dispatchClickEventSequence(args, Button.LEFT);
79
- }
80
- async rightClick(...args) {
81
- await this._dispatchClickEventSequence(args, Button.RIGHT);
82
- }
83
- /** Focus the element. */
84
- async focus() {
85
- return browser.executeScript('arguments[0].focus()', this.element);
86
- }
87
- /** Get the computed value of the given CSS property for the element. */
88
- async getCssValue(property) {
89
- return this.element.getCssValue(property);
90
- }
91
- /** Hovers the mouse over the element. */
92
- async hover() {
93
- return browser
94
- .actions()
95
- .mouseMove(await this.element.getWebElement())
96
- .perform();
97
- }
98
- /** Moves the mouse away from the element. */
99
- async mouseAway() {
100
- return browser
101
- .actions()
102
- .mouseMove(await this.element.getWebElement(), { x: -1, y: -1 })
103
- .perform();
104
- }
105
- async sendKeys(...modifiersAndKeys) {
106
- const first = modifiersAndKeys[0];
107
- let modifiers;
108
- let rest;
109
- if (typeof first !== 'string' && typeof first !== 'number') {
110
- modifiers = first;
111
- rest = modifiersAndKeys.slice(1);
112
- }
113
- else {
114
- modifiers = {};
115
- rest = modifiersAndKeys;
116
- }
117
- const modifierKeys = toProtractorModifierKeys(modifiers);
118
- const keys = rest
119
- .map(k => (typeof k === 'string' ? k.split('') : [keyMap[k]]))
120
- .reduce((arr, k) => arr.concat(k), [])
121
- // Key.chord doesn't work well with geckodriver (mozilla/geckodriver#1502),
122
- // so avoid it if no modifier keys are required.
123
- .map(k => (modifierKeys.length > 0 ? Key.chord(...modifierKeys, k) : k));
124
- return this.element.sendKeys(...keys);
125
- }
126
- /**
127
- * Gets the text from the element.
128
- * @param options Options that affect what text is included.
129
- */
130
- async text(options) {
131
- if (options?.exclude) {
132
- return browser.executeScript(_getTextWithExcludedElements, this.element, options.exclude);
133
- }
134
- // We don't go through Protractor's `getText`, because it excludes text from hidden elements.
135
- return browser.executeScript(`return (arguments[0].textContent || '').trim()`, this.element);
136
- }
137
- /** Gets the value for the given attribute from the element. */
138
- async getAttribute(name) {
139
- return browser.executeScript(`return arguments[0].getAttribute(arguments[1])`, this.element, name);
140
- }
141
- /** Checks whether the element has the given class. */
142
- async hasClass(name) {
143
- const classes = (await this.getAttribute('class')) || '';
144
- return new Set(classes.split(/\s+/).filter(c => c)).has(name);
145
- }
146
- /** Gets the dimensions of the element. */
147
- async getDimensions() {
148
- const { width, height } = await this.element.getSize();
149
- const { x: left, y: top } = await this.element.getLocation();
150
- return { width, height, left, top };
151
- }
152
- /** Gets the value of a property of an element. */
153
- async getProperty(name) {
154
- return browser.executeScript(`return arguments[0][arguments[1]]`, this.element, name);
155
- }
156
- /** Sets the value of a property of an input. */
157
- async setInputValue(value) {
158
- return browser.executeScript(`arguments[0].value = arguments[1]`, this.element, value);
159
- }
160
- /** Selects the options at the specified indexes inside of a native `select` element. */
161
- async selectOptions(...optionIndexes) {
162
- const options = await this.element.all(by.css('option'));
163
- const indexes = new Set(optionIndexes); // Convert to a set to remove duplicates.
164
- if (options.length && indexes.size) {
165
- // Reset the value so all the selected states are cleared. We can
166
- // reuse the input-specific method since the logic is the same.
167
- await this.setInputValue('');
168
- for (let i = 0; i < options.length; i++) {
169
- if (indexes.has(i)) {
170
- // We have to hold the control key while clicking on options so that multiple can be
171
- // selected in multi-selection mode. The key doesn't do anything for single selection.
172
- await browser.actions().keyDown(Key.CONTROL).perform();
173
- await options[i].click();
174
- await browser.actions().keyUp(Key.CONTROL).perform();
175
- }
176
- }
177
- }
178
- }
179
- /** Checks whether this element matches the given selector. */
180
- async matchesSelector(selector) {
181
- return browser.executeScript(`
182
- return (Element.prototype.matches ||
183
- Element.prototype.msMatchesSelector).call(arguments[0], arguments[1])
184
- `, this.element, selector);
185
- }
186
- /** Checks whether the element is focused. */
187
- async isFocused() {
188
- return this.element.equals(browser.driver.switchTo().activeElement());
189
- }
190
- /**
191
- * Dispatches an event with a particular name.
192
- * @param name Name of the event to be dispatched.
193
- */
194
- async dispatchEvent(name, data) {
195
- return browser.executeScript(_dispatchEvent, name, this.element, data);
196
- }
197
- /** Dispatches all the events that are part of a click event sequence. */
198
- async _dispatchClickEventSequence(args, button) {
199
- let modifiers = {};
200
- if (args.length && typeof args[args.length - 1] === 'object') {
201
- modifiers = args.pop();
202
- }
203
- const modifierKeys = toProtractorModifierKeys(modifiers);
204
- // Omitting the offset argument to mouseMove results in clicking the center.
205
- // This is the default behavior we want, so we use an empty array of offsetArgs if
206
- // no args remain after popping the modifiers from the args passed to this function.
207
- const offsetArgs = (args.length === 2 ? [{ x: args[0], y: args[1] }] : []);
208
- let actions = browser.actions().mouseMove(await this.element.getWebElement(), ...offsetArgs);
209
- for (const modifierKey of modifierKeys) {
210
- actions = actions.keyDown(modifierKey);
211
- }
212
- actions = actions.click(button);
213
- for (const modifierKey of modifierKeys) {
214
- actions = actions.keyUp(modifierKey);
215
- }
216
- await actions.perform();
217
- }
218
- }
219
- /**
220
- * Dispatches an event with a particular name and data to an element.
221
- * Note that this needs to be a pure function, because it gets stringified by
222
- * Protractor and is executed inside the browser.
223
- */
224
- function _dispatchEvent(name, element, data) {
225
- const event = document.createEvent('Event');
226
- event.initEvent(name);
227
- if (data) {
228
- // tslint:disable-next-line:ban Have to use `Object.assign` to preserve the original object.
229
- Object.assign(event, data);
230
- }
231
- // This type has a string index signature, so we cannot access it using a dotted property access.
232
- element['dispatchEvent'](event);
233
- }
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdHJhY3Rvci1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Byb3RyYWN0b3IvcHJvdHJhY3Rvci1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFDTCw0QkFBNEIsRUFJNUIsT0FBTyxHQUdSLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFpQixHQUFHLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbkUsb0VBQW9FO0FBQ3BFLE1BQU0sTUFBTSxHQUFHO0lBQ2IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVU7SUFDbkMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7SUFDdEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUs7SUFDMUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUs7SUFDMUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU87SUFDOUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7SUFDdEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU07SUFDNUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU87SUFDOUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVM7SUFDbEMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7SUFDdEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUk7SUFDeEIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVU7SUFDcEMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVE7SUFDaEMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLFdBQVc7SUFDdEMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVU7SUFDcEMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU07SUFDNUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU07SUFDNUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDcEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7SUFDdEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7SUFDdEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFD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QUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUV0RSxDQUFDO1FBRUYsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUU3RixLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRTtZQUN0QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxPQUFzQixFQUFFLElBQWdDO0lBQzVGLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0QixJQUFJLElBQUksRUFBRTtRQUNSLDRGQUE0RjtRQUM1RixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QjtJQUVELGlHQUFpRztJQUNqRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBfZ2V0VGV4dFdpdGhFeGNsdWRlZEVsZW1lbnRzLFxuICBFbGVtZW50RGltZW5zaW9ucyxcbiAgTW9kaWZpZXJLZXlzLFxuICBUZXN0RWxlbWVudCxcbiAgVGVzdEtleSxcbiAgVGV4dE9wdGlvbnMsXG4gIEV2ZW50RGF0YSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHticm93c2VyLCBCdXR0b24sIGJ5LCBFbGVtZW50RmluZGVyLCBLZXl9IGZyb20gJ3Byb3RyYWN0b3InO1xuXG4vKiogTWFwcyB0aGUgYFRlc3RLZXlgIGNvbnN0YW50cyB0byBQcm90cmFjdG9yJ3MgYEtleWAgY29uc3RhbnRzLiAqL1xuY29uc3Qga2V5TWFwID0ge1xuICBbVGVzdEtleS5CQUNLU1BBQ0VdOiBLZXkuQkFDS19TUEFDRSxcbiAgW1Rlc3RLZXkuVEFCXTogS2V5LlRBQixcbiAgW1Rlc3RLZXkuRU5URVJdOiBLZXkuRU5URVIsXG4gIFtUZXN0S2V5LlNISUZUXTogS2V5LlNISUZULFxuICBbVGVzdEtleS5DT05UUk9MXTogS2V5LkNPTlRST0wsXG4gIFtUZXN0S2V5LkFMVF06IEtleS5BTFQsXG4gIFtUZXN0S2V5LkVTQ0FQRV06IEtleS5FU0NBUEUsXG4gIFtUZXN0S2V5LlBBR0VfVVBdOiBLZXkuUEFHRV9VUCxcbiAgW1Rlc3RLZXkuUEFHRV9ET1dOXTogS2V5LlBBR0VfRE9XTixcbiAgW1Rlc3RLZXkuRU5EXTogS2V5LkVORCxcbiAgW1Rlc3RLZXkuSE9NRV06IEtleS5IT01FLFxuICBbVGVzdEtleS5MRUZUX0FSUk9XXTogS2V5LkFSUk9XX0xFRlQsXG4gIFtUZXN0S2V5LlVQX0FSUk9XXTogS2V5LkFSUk9XX1VQLFxuICBbVGVzdEtleS5SSUdIVF9BUlJPV106IEtleS5BUlJPV19SSUdIVCxcbiAgW1Rlc3RLZXkuRE9XTl9BUlJPV106IEtleS5BUlJPV19ET1dOLFxuICBbVGVzdEtleS5JTlNFUlRdOiBLZXkuSU5TRVJULFxuICBbVGVzdEtleS5ERUxFVEVdOiBLZXkuREVMRVRFLFxuICBbVGVzdEtleS5GMV06IEtleS5GMSxcbiAgW1Rlc3RLZXkuRjJdOiBLZXkuRjIsXG4gIFtUZXN0S2V5LkYzXTogS2V5LkYzLFxuICBbVGVzdEtleS5GNF06IEtleS5GNCxcbiAgW1Rlc3RLZXkuRjVdOiBLZXkuRjUsXG4gIFtUZXN0S2V5LkY2XTogS2V5LkY2LFxuICBbVGVzdEtleS5GN106IEtleS5GNyxcbiAgW1Rlc3RLZXkuRjhdOiBLZXkuRjgsXG4gIFtUZXN0S2V5LkY5XTogS2V5LkY5LFxuICBbVGVzdEtleS5GMTBdOiBLZXkuRjEwLFxuICBbVGVzdEtleS5GMTFdOiBLZXkuRjExLFxuICBbVGVzdEtleS5GMTJdOiBLZXkuRjEyLFxuICBbVGVzdEtleS5NRVRBXTogS2V5Lk1FVEEsXG59O1xuXG4vKiogQ29udmVydHMgYSBgTW9kaWZpZXJLZXlzYCBvYmplY3QgdG8gYSBsaXN0IG9mIFByb3RyYWN0b3IgYEtleWBzLiAqL1xuZnVuY3Rpb24gdG9Qcm90cmFjdG9yTW9kaWZpZXJLZXlzKG1vZGlmaWVyczogTW9kaWZpZXJLZXlzKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGlmIChtb2RpZmllcnMuY29udHJvbCkge1xuICAgIHJlc3VsdC5wdXNoKEtleS5DT05UUk9MKTtcbiAgfVxuICBpZiAobW9kaWZpZXJzLmFsdCkge1xuICAgIHJlc3VsdC5wdXNoKEtleS5BTFQpO1xuICB9XG4gIGlmIChtb2RpZmllcnMuc2hpZnQpIHtcbiAgICByZXN1bHQucHVzaChLZXkuU0hJRlQpO1xuICB9XG4gIGlmIChtb2RpZmllcnMubWV0YSkge1xuICAgIHJlc3VsdC5wdXNoKEtleS5NRVRBKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgYFRlc3RFbGVtZW50YCBpbXBsZW1lbnRhdGlvbiBmb3IgUHJvdHJhY3Rvci5cbiAqIEBkZXByZWNhdGVkXG4gKiBAYnJlYWtpbmctY2hhbmdlIDEzLjAuMFxuICovXG5leHBvcnQgY2xhc3MgUHJvdHJhY3RvckVsZW1lbnQgaW1wbGVtZW50cyBUZXN0RWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGVsZW1lbnQ6IEVsZW1lbnRGaW5kZXIpIHt9XG5cbiAgLyoqIEJsdXIgdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIGJsdXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdCgnYXJndW1lbnRzWzBdLmJsdXIoKScsIHRoaXMuZWxlbWVudCk7XG4gIH1cblxuICAvKiogQ2xlYXIgdGhlIGVsZW1lbnQncyBpbnB1dCAoZm9yIGlucHV0IGFuZCB0ZXh0YXJlYSBlbGVtZW50cyBvbmx5KS4gKi9cbiAgYXN5bmMgY2xlYXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudC5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIHRoZSBlbGVtZW50IGF0IHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4gSWYgeW91IG5lZWQgdG8gZ3VhcmFudGVlXG4gICAqIHRoZSBlbGVtZW50IGlzIGNsaWNrZWQgYXQgYSBzcGVjaWZpYyBsb2NhdGlvbiwgY29uc2lkZXIgdXNpbmcgYGNsaWNrKCdjZW50ZXInKWAgb3JcbiAgICogYGNsaWNrKHgsIHkpYCBpbnN0ZWFkLlxuICAgKi9cbiAgY2xpY2sobW9kaWZpZXJzPzogTW9kaWZpZXJLZXlzKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIENsaWNrIHRoZSBlbGVtZW50IGF0IHRoZSBlbGVtZW50J3MgY2VudGVyLiAqL1xuICBjbGljayhsb2NhdGlvbjogJ2NlbnRlcicsIG1vZGlmaWVycz86IE1vZGlmaWVyS2V5cyk6IFByb21pc2U8dm9pZD47XG4gIC8qKlxuICAgKiBDbGljayB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHJlbGF0aXZlWCBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFgtYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIHJlbGF0aXZlWSBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFktYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIG1vZGlmaWVycyBNb2RpZmllciBrZXlzIGhlbGQgd2hpbGUgY2xpY2tpbmdcbiAgICovXG4gIGNsaWNrKHJlbGF0aXZlWDogbnVtYmVyLCByZWxhdGl2ZVk6IG51bWJlciwgbW9kaWZpZXJzPzogTW9kaWZpZXJLZXlzKTogUHJvbWlzZTx2b2lkPjtcbiAgYXN5bmMgY2xpY2soXG4gICAgLi4uYXJnczogW01vZGlmaWVyS2V5cz9dIHwgWydjZW50ZXInLCBNb2RpZmllcktleXM/XSB8IFtudW1iZXIsIG51bWJlciwgTW9kaWZpZXJLZXlzP11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5fZGlzcGF0Y2hDbGlja0V2ZW50U2VxdWVuY2UoYXJncywgQnV0dG9uLkxFRlQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJpZ2h0IGNsaWNrcyBvbiB0aGUgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiBpdC5cbiAgICogQHBhcmFtIHJlbGF0aXZlWCBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFgtYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIHJlbGF0aXZlWSBDb29yZGluYXRlIHdpdGhpbiB0aGUgZWxlbWVudCwgYWxvbmcgdGhlIFktYXhpcyBhdCB3aGljaCB0byBjbGljay5cbiAgICogQHBhcmFtIG1vZGlmaWVycyBNb2RpZmllciBrZXlzIGhlbGQgd2hpbGUgY2xpY2tpbmdcbiAgICovXG4gIHJpZ2h0Q2xpY2socmVsYXRpdmVYOiBudW1iZXIsIHJlbGF0aXZlWTogbnVtYmVyLCBtb2RpZmllcnM/OiBNb2RpZmllcktleXMpOiBQcm9taXNlPHZvaWQ+O1xuICBhc3luYyByaWdodENsaWNrKFxuICAgIC4uLmFyZ3M6IFtNb2RpZmllcktleXM/XSB8IFsnY2VudGVyJywgTW9kaWZpZXJLZXlzP10gfCBbbnVtYmVyLCBudW1iZXIsIE1vZGlmaWVyS2V5cz9dXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuX2Rpc3BhdGNoQ2xpY2tFdmVudFNlcXVlbmNlKGFyZ3MsIEJ1dHRvbi5SSUdIVCk7XG4gIH1cblxuICAvKiogRm9jdXMgdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIGZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBicm93c2VyLmV4ZWN1dGVTY3JpcHQoJ2FyZ3VtZW50c1swXS5mb2N1cygpJywgdGhpcy5lbGVtZW50KTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbXB1dGVkIHZhbHVlIG9mIHRoZSBnaXZlbiBDU1MgcHJvcGVydHkgZm9yIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXRDc3NWYWx1ZShwcm9wZXJ0eTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmdldENzc1ZhbHVlKHByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKiBIb3ZlcnMgdGhlIG1vdXNlIG92ZXIgdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIGhvdmVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBicm93c2VyXG4gICAgICAuYWN0aW9ucygpXG4gICAgICAubW91c2VNb3ZlKGF3YWl0IHRoaXMuZWxlbWVudC5nZXRXZWJFbGVtZW50KCkpXG4gICAgICAucGVyZm9ybSgpO1xuICB9XG5cbiAgLyoqIE1vdmVzIHRoZSBtb3VzZSBhd2F5IGZyb20gdGhlIGVsZW1lbnQuICovXG4gIGFzeW5jIG1vdXNlQXdheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYnJvd3NlclxuICAgICAgLmFjdGlvbnMoKVxuICAgICAgLm1vdXNlTW92ZShhd2FpdCB0aGlzLmVsZW1lbnQuZ2V0V2ViRWxlbWVudCgpLCB7eDogLTEsIHk6IC0xfSlcbiAgICAgIC5wZXJmb3JtKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgaW5wdXQgYXMgYSBzZXJpZXMgb2Yga2V5IHByZXNzZXMuIEFsc28gZmlyZXMgaW5wdXQgZXZlbnRzXG4gICAqIGFuZCBhdHRlbXB0cyB0byBhZGQgdGhlIHN0cmluZyB0byB0aGUgRWxlbWVudCdzIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEtleXMoLi4ua2V5czogKHN0cmluZyB8IFRlc3RLZXkpW10pOiBQcm9taXNlPHZvaWQ+O1xuICAvKipcbiAgICogU2VuZHMgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgaW5wdXQgYXMgYSBzZXJpZXMgb2Yga2V5IHByZXNzZXMuIEFsc28gZmlyZXMgaW5wdXQgZXZlbnRzXG4gICAqIGFuZCBhdHRlbXB0cyB0byBhZGQgdGhlIHN0cmluZyB0byB0aGUgRWxlbWVudCdzIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEtleXMobW9kaWZpZXJzOiBNb2RpZmllcktleXMsIC4uLmtleXM6IChzdHJpbmcgfCBUZXN0S2V5KVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgYXN5bmMgc2VuZEtleXMoLi4ubW9kaWZpZXJzQW5kS2V5czogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaXJzdCA9IG1vZGlmaWVyc0FuZEtleXNbMF07XG4gICAgbGV0IG1vZGlmaWVyczogTW9kaWZpZXJLZXlzO1xuICAgIGxldCByZXN0OiAoc3RyaW5nIHwgVGVzdEtleSlbXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgZmlyc3QgIT09ICdudW1iZXInKSB7XG4gICAgICBtb2RpZmllcnMgPSBmaXJzdDtcbiAgICAgIHJlc3QgPSBtb2RpZmllcnNBbmRLZXlzLnNsaWNlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtb2RpZmllcnMgPSB7fTtcbiAgICAgIHJlc3QgPSBtb2RpZmllcnNBbmRLZXlzO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGlmaWVyS2V5cyA9IHRvUHJvdHJhY3Rvck1vZGlmaWVyS2V5cyhtb2RpZmllcnMpO1xuICAgIGNvbnN0IGtleXMgPSByZXN0XG4gICAgICAubWFwKGsgPT4gKHR5cGVvZiBrID09PSAnc3RyaW5nJyA/IGsuc3BsaXQoJycpIDogW2tleU1hcFtrXV0pKVxuICAgICAgLnJlZHVjZSgoYXJyLCBrKSA9PiBhcnIuY29uY2F0KGspLCBbXSlcbiAgICAgIC8vIEtleS5jaG9yZCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIGdlY2tvZHJpdmVyIChtb3ppbGxhL2dlY2tvZHJpdmVyIzE1MDIpLFxuICAgICAgLy8gc28gYXZvaWQgaXQgaWYgbm8gbW9kaWZpZXIga2V5cyBhcmUgcmVxdWlyZWQuXG4gICAgICAubWFwKGsgPT4gKG1vZGlmaWVyS2V5cy5sZW5ndGggPiAwID8gS2V5LmNob3JkKC4uLm1vZGlmaWVyS2V5cywgaykgOiBrKSk7XG5cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LnNlbmRLZXlzKC4uLmtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRleHQgZnJvbSB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0aGF0IGFmZmVjdCB3aGF0IHRleHQgaXMgaW5jbHVkZWQuXG4gICAqL1xuICBhc3luYyB0ZXh0KG9wdGlvbnM/OiBUZXh0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKG9wdGlvbnM/LmV4Y2x1ZGUpIHtcbiAgICAgIHJldHVybiBicm93c2VyLmV4ZWN1dGVTY3JpcHQoX2dldFRleHRXaXRoRXhjbHVkZWRFbGVtZW50cywgdGhpcy5lbGVtZW50LCBvcHRpb25zLmV4Y2x1ZGUpO1xuICAgIH1cbiAgICAvLyBXZSBkb24ndCBnbyB0aHJvdWdoIFByb3RyYWN0b3IncyBgZ2V0VGV4dGAsIGJlY2F1c2UgaXQgZXhjbHVkZXMgdGV4dCBmcm9tIGhpZGRlbiBlbGVtZW50cy5cbiAgICByZXR1cm4gYnJvd3Nlci5leGVjdXRlU2NyaXB0KGByZXR1cm4gKGFyZ3VtZW50c1swXS50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpYCwgdGhpcy5lbGVtZW50KTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIGdpdmVuIGF0dHJpYnV0ZSBmcm9tIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChcbiAgICAgIGByZXR1cm4gYXJndW1lbnRzWzBdLmdldEF0dHJpYnV0ZShhcmd1bWVudHNbMV0pYCxcbiAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgIG5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgZWxlbWVudCBoYXMgdGhlIGdpdmVuIGNsYXNzLiAqL1xuICBhc3luYyBoYXNDbGFzcyhuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjbGFzc2VzID0gKGF3YWl0IHRoaXMuZ2V0QXR0cmlidXRlKCdjbGFzcycpKSB8fCAnJztcbiAgICByZXR1cm4gbmV3IFNldChjbGFzc2VzLnNwbGl0KC9cXHMrLykuZmlsdGVyKGMgPT4gYykpLmhhcyhuYW1lKTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50LiAqL1xuICBhc3luYyBnZXREaW1lbnNpb25zKCk6IFByb21pc2U8RWxlbWVudERpbWVuc2lvbnM+IHtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCB0aGlzLmVsZW1lbnQuZ2V0U2l6ZSgpO1xuICAgIGNvbnN0IHt4OiBsZWZ0LCB5OiB0b3B9ID0gYXdhaXQgdGhpcy5lbGVtZW50LmdldExvY2F0aW9uKCk7XG4gICAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3B9O1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgYW4gZWxlbWVudC4gKi9cbiAgYXN5bmMgZ2V0UHJvcGVydHk8VCA9IGFueT4obmFtZTogc3RyaW5nKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGJyb3dzZXIuZXhlY3V0ZVNjcmlwdChgcmV0dXJuIGFyZ3VtZW50c1swXVthcmd1bWVudHNbMV1dYCwgdGhpcy5lbGVtZW50LCBuYW1lKTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIGFuIGlucHV0LiAqL1xuICBhc3luYyBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYnJvd3Nlci5leGVjdXRlU2NyaXB0KGBhcmd1bWVudHNbMF0udmFsdWUgPSBhcmd1bWVudHNbMV1gLCB0aGlzLmVsZW1lbnQsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBTZWxlY3RzIHRoZSBvcHRpb25zIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlcyBpbnNpZGUgb2YgYSBuYXRpdmUgYHNlbGVjdGAgZWxlbWVudC4gKi9cbiAgYXN5bmMgc2VsZWN0T3B0aW9ucyguLi5vcHRpb25JbmRleGVzOiBudW1iZXJbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCB0aGlzLmVsZW1lbnQuYWxsKGJ5LmNzcygnb3B0aW9uJykpO1xuICAgIGNvbnN0IGluZGV4ZXMgPSBuZXcgU2V0KG9wdGlvbkluZGV4ZXMpOyAvLyBDb252ZXJ0IHRvIGEgc2V0IHRvIHJlbW92ZSBkdXBsaWNhdGVzLlxuXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoICYmIGluZGV4ZXMuc2l6ZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIHZhbHVlIHNvIGFsbCB0aGUgc2VsZWN0ZWQgc3RhdGVzIGFyZSBjbGVhcmVkLiBXZSBjYW5cbiAgICAgIC8vIHJldXNlIHRoZSBpbnB1dC1zcGVjaWZpYyBtZXRob2Qgc2luY2UgdGhlIGxvZ2ljIGlzIHRoZSBzYW1lLlxuICAgICAgYXdhaXQgdGhpcy5zZXRJbnB1dFZhbHVlKCcnKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleGVzLmhhcyhpKSkge1xuICAgICAgICAgIC8vIFdlIGhhdmUgdG8gaG9sZCB0aGUgY29udHJvbCBrZXkgd2hpbGUgY2xpY2tpbmcgb24gb3B0aW9ucyBzbyB0aGF0IG11bHRpcGxlIGNhbiBiZVxuICAgICAgICAgIC8vIHNlbGVjdGVkIGluIG11bHRpLXNlbGVjdGlvbiBtb2RlLiBUaGUga2V5IGRvZXNuJ3QgZG8gYW55dGhpbmcgZm9yIHNpbmdsZSBzZWxlY3Rpb24uXG4gICAgICAgICAgYXdhaXQgYnJvd3Nlci5hY3Rpb25zKCkua2V5RG93bihLZXkuQ09OVFJPTCkucGVyZm9ybSgpO1xuICAgICAgICAgIGF3YWl0IG9wdGlvbnNbaV0uY2xpY2soKTtcbiAgICAgICAgICBhd2FpdCBicm93c2VyLmFjdGlvbnMoKS5rZXlVcChLZXkuQ09OVFJPTCkucGVyZm9ybSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoaXMgZWxlbWVudCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci4gKi9cbiAgYXN5bmMgbWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYnJvd3Nlci5leGVjdXRlU2NyaXB0KFxuICAgICAgYFxuICAgICAgICAgIHJldHVybiAoRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyB8fFxuICAgICAgICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IpLmNhbGwoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0pXG4gICAgICAgICAgYCxcbiAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgIHNlbGVjdG9yLFxuICAgICk7XG4gIH1cblxuICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgZm9jdXNlZC4gKi9cbiAgYXN5bmMgaXNGb2N1c2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZXF1YWxzKGJyb3dzZXIuZHJpdmVyLnN3aXRjaFRvKCkuYWN0aXZlRWxlbWVudCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGV2ZW50IHdpdGggYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqL1xuICBhc3luYyBkaXNwYXRjaEV2ZW50KG5hbWU6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIEV2ZW50RGF0YT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYnJvd3Nlci5leGVjdXRlU2NyaXB0KF9kaXNwYXRjaEV2ZW50LCBuYW1lLCB0aGlzLmVsZW1lbnQsIGRhdGEpO1xuICB9XG5cbiAgLyoqIERpc3BhdGNoZXMgYWxsIHRoZSBldmVudHMgdGhhdCBhcmUgcGFydCBvZiBhIGNsaWNrIGV2ZW50IHNlcXVlbmNlLiAqL1xuICBwcml2YXRlIGFzeW5jIF9kaXNwYXRjaENsaWNrRXZlbnRTZXF1ZW5jZShcbiAgICBhcmdzOiBbTW9kaWZpZXJLZXlzP10gfCBbJ2NlbnRlcicsIE1vZGlmaWVyS2V5cz9dIHwgW251bWJlciwgbnVtYmVyLCBNb2RpZmllcktleXM/XSxcbiAgICBidXR0b246IHN0cmluZyxcbiAgKSB7XG4gICAgbGV0IG1vZGlmaWVyczogTW9kaWZpZXJLZXlzID0ge307XG4gICAgaWYgKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBtb2RpZmllcnMgPSBhcmdzLnBvcCgpIGFzIE1vZGlmaWVyS2V5cztcbiAgICB9XG4gICAgY29uc3QgbW9kaWZpZXJLZXlzID0gdG9Qcm90cmFjdG9yTW9kaWZpZXJLZXlzKG1vZGlmaWVycyk7XG5cbiAgICAvLyBPbWl0dGluZyB0aGUgb2Zmc2V0IGFyZ3VtZW50IHRvIG1vdXNlTW92ZSByZXN1bHRzIGluIGNsaWNraW5nIHRoZSBjZW50ZXIuXG4gICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3ZSB3YW50LCBzbyB3ZSB1c2UgYW4gZW1wdHkgYXJyYXkgb2Ygb2Zmc2V0QXJncyBpZlxuICAgIC8vIG5vIGFyZ3MgcmVtYWluIGFmdGVyIHBvcHBpbmcgdGhlIG1vZGlmaWVycyBmcm9tIHRoZSBhcmdzIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uLlxuICAgIGNvbnN0IG9mZnNldEFyZ3MgPSAoYXJncy5sZW5ndGggPT09IDIgPyBbe3g6IGFyZ3NbMF0sIHk6IGFyZ3NbMV19XSA6IFtdKSBhcyBbXG4gICAgICB7eDogbnVtYmVyOyB5OiBudW1iZXJ9LFxuICAgIF07XG5cbiAgICBsZXQgYWN0aW9ucyA9IGJyb3dzZXIuYWN0aW9ucygpLm1vdXNlTW92ZShhd2FpdCB0aGlzLmVsZW1lbnQuZ2V0V2ViRWxlbWVudCgpLCAuLi5vZmZzZXRBcmdzKTtcblxuICAgIGZvciAoY29uc3QgbW9kaWZpZXJLZXkgb2YgbW9kaWZpZXJLZXlzKSB7XG4gICAgICBhY3Rpb25zID0gYWN0aW9ucy5rZXlEb3duKG1vZGlmaWVyS2V5KTtcbiAgICB9XG4gICAgYWN0aW9ucyA9IGFjdGlvbnMuY2xpY2soYnV0dG9uKTtcbiAgICBmb3IgKGNvbnN0IG1vZGlmaWVyS2V5IG9mIG1vZGlmaWVyS2V5cykge1xuICAgICAgYWN0aW9ucyA9IGFjdGlvbnMua2V5VXAobW9kaWZpZXJLZXkpO1xuICAgIH1cblxuICAgIGF3YWl0IGFjdGlvbnMucGVyZm9ybSgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCB3aXRoIGEgcGFydGljdWxhciBuYW1lIGFuZCBkYXRhIHRvIGFuIGVsZW1lbnQuXG4gKiBOb3RlIHRoYXQgdGhpcyBuZWVkcyB0byBiZSBhIHB1cmUgZnVuY3Rpb24sIGJlY2F1c2UgaXQgZ2V0cyBzdHJpbmdpZmllZCBieVxuICogUHJvdHJhY3RvciBhbmQgaXMgZXhlY3V0ZWQgaW5zaWRlIHRoZSBicm93c2VyLlxuICovXG5mdW5jdGlvbiBfZGlzcGF0Y2hFdmVudChuYW1lOiBzdHJpbmcsIGVsZW1lbnQ6IEVsZW1lbnRGaW5kZXIsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBFdmVudERhdGE+KSB7XG4gIGNvbnN0IGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gIGV2ZW50LmluaXRFdmVudChuYW1lKTtcblxuICBpZiAoZGF0YSkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4gSGF2ZSB0byB1c2UgYE9iamVjdC5hc3NpZ25gIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAgT2JqZWN0LmFzc2lnbihldmVudCwgZGF0YSk7XG4gIH1cblxuICAvLyBUaGlzIHR5cGUgaGFzIGEgc3RyaW5nIGluZGV4IHNpZ25hdHVyZSwgc28gd2UgY2Fubm90IGFjY2VzcyBpdCB1c2luZyBhIGRvdHRlZCBwcm9wZXJ0eSBhY2Nlc3MuXG4gIGVsZW1lbnRbJ2Rpc3BhdGNoRXZlbnQnXShldmVudCk7XG59XG4iXX0=
@@ -1,72 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { HarnessEnvironment } from '@angular/cdk/testing';
9
- import { by, element as protractorElement } from 'protractor';
10
- import { ProtractorElement } from './protractor-element';
11
- /** The default environment options. */
12
- const defaultEnvironmentOptions = {
13
- queryFn: (selector, root) => root.all(by.css(selector)),
14
- };
15
- /**
16
- * A `HarnessEnvironment` implementation for Protractor.
17
- * @deprecated
18
- * @breaking-change 13.0.0
19
- */
20
- export class ProtractorHarnessEnvironment extends HarnessEnvironment {
21
- constructor(rawRootElement, options) {
22
- super(rawRootElement);
23
- this._options = { ...defaultEnvironmentOptions, ...options };
24
- }
25
- /** Creates a `HarnessLoader` rooted at the document root. */
26
- static loader(options) {
27
- return new ProtractorHarnessEnvironment(protractorElement(by.css('body')), options);
28
- }
29
- /** Gets the ElementFinder corresponding to the given TestElement. */
30
- static getNativeElement(el) {
31
- if (el instanceof ProtractorElement) {
32
- return el.element;
33
- }
34
- throw Error('This TestElement was not created by the ProtractorHarnessEnvironment');
35
- }
36
- /**
37
- * Flushes change detection and async tasks captured in the Angular zone.
38
- * In most cases it should not be necessary to call this manually. However, there may be some edge
39
- * cases where it is needed to fully flush animation events.
40
- */
41
- async forceStabilize() { }
42
- /** @docs-private */
43
- async waitForTasksOutsideAngular() {
44
- // TODO: figure out how we can do this for the protractor environment.
45
- // https://github.com/angular/components/issues/17412
46
- }
47
- /** Gets the root element for the document. */
48
- getDocumentRoot() {
49
- return protractorElement(by.css('body'));
50
- }
51
- /** Creates a `TestElement` from a raw element. */
52
- createTestElement(element) {
53
- return new ProtractorElement(element);
54
- }
55
- /** Creates a `HarnessLoader` rooted at the given raw element. */
56
- createEnvironment(element) {
57
- return new ProtractorHarnessEnvironment(element, this._options);
58
- }
59
- /**
60
- * Gets a list of all elements matching the given selector under this environment's root element.
61
- */
62
- async getAllRawElements(selector) {
63
- const elementArrayFinder = this._options.queryFn(selector, this.rawRootElement);
64
- const length = await elementArrayFinder.count();
65
- const elements = [];
66
- for (let i = 0; i < length; i++) {
67
- elements.push(elementArrayFinder.get(i));
68
- }
69
- return elements;
70
- }
71
- }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdHJhY3Rvci1oYXJuZXNzLWVudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay90ZXN0aW5nL3Byb3RyYWN0b3IvcHJvdHJhY3Rvci1oYXJuZXNzLWVudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxrQkFBa0IsRUFBNkIsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxpQkFBaUIsRUFBb0MsTUFBTSxZQUFZLENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFZdkQsdUNBQXVDO0FBQ3ZDLE1BQU0seUJBQXlCLEdBQXdDO0lBQ3JFLE9BQU8sRUFBRSxDQUFDLFFBQWdCLEVBQUUsSUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0NBQy9FLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLDRCQUE2QixTQUFRLGtCQUFpQztJQUlqRixZQUNFLGNBQTZCLEVBQzdCLE9BQTZDO1FBRTdDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUMsR0FBRyx5QkFBeUIsRUFBRSxHQUFHLE9BQU8sRUFBQyxDQUFDO0lBQzdELENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUE2QztRQUN6RCxPQUFPLElBQUksNEJBQTRCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxxRUFBcUU7SUFDckUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQWU7UUFDckMsSUFBSSxFQUFFLFlBQVksaUJBQWlCLEVBQUU7WUFDbkMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxLQUFLLENBQUMsc0VBQXNFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLEtBQW1CLENBQUM7SUFFeEMsb0JBQW9CO0lBQ3BCLEtBQUssQ0FBQywwQkFBMEI7UUFDOUIsc0VBQXNFO1FBQ3RFLHFEQUFxRDtJQUN2RCxDQUFDO0lBRUQsOENBQThDO0lBQ3BDLGVBQWU7UUFDdkIsT0FBTyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGtEQUFrRDtJQUN4QyxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNoRCxPQUFPLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlFQUFpRTtJQUN2RCxpQkFBaUIsQ0FBQyxPQUFzQjtRQUNoRCxPQUFPLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7O09BRUc7SUFDTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBZ0I7UUFDaEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEQsTUFBTSxRQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDMUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtIYXJuZXNzRW52aXJvbm1lbnQsIEhhcm5lc3NMb2FkZXIsIFRlc3RFbGVtZW50fSBmcm9tICdAYW5ndWxhci9jZGsvdGVzdGluZyc7XG5pbXBvcnQge2J5LCBlbGVtZW50IGFzIHByb3RyYWN0b3JFbGVtZW50LCBFbGVtZW50QXJyYXlGaW5kZXIsIEVsZW1lbnRGaW5kZXJ9IGZyb20gJ3Byb3RyYWN0b3InO1xuaW1wb3J0IHtQcm90cmFjdG9yRWxlbWVudH0gZnJvbSAnLi9wcm90cmFjdG9yLWVsZW1lbnQnO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBlbnZpcm9ubWVudC5cbiAqIEBkZXByZWNhdGVkXG4gKiBAYnJlYWtpbmctY2hhbmdlIDEzLjAuMFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3RyYWN0b3JIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zIHtcbiAgLyoqIFRoZSBxdWVyeSBmdW5jdGlvbiB1c2VkIHRvIGZpbmQgRE9NIGVsZW1lbnRzLiAqL1xuICBxdWVyeUZuOiAoc2VsZWN0b3I6IHN0cmluZywgcm9vdDogRWxlbWVudEZpbmRlcikgPT4gRWxlbWVudEFycmF5RmluZGVyO1xufVxuXG4vKiogVGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgb3B0aW9ucy4gKi9cbmNvbnN0IGRlZmF1bHRFbnZpcm9ubWVudE9wdGlvbnM6IFByb3RyYWN0b3JIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zID0ge1xuICBxdWVyeUZuOiAoc2VsZWN0b3I6IHN0cmluZywgcm9vdDogRWxlbWVudEZpbmRlcikgPT4gcm9vdC5hbGwoYnkuY3NzKHNlbGVjdG9yKSksXG59O1xuXG4vKipcbiAqIEEgYEhhcm5lc3NFbnZpcm9ubWVudGAgaW1wbGVtZW50YXRpb24gZm9yIFByb3RyYWN0b3IuXG4gKiBAZGVwcmVjYXRlZFxuICogQGJyZWFraW5nLWNoYW5nZSAxMy4wLjBcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3RyYWN0b3JIYXJuZXNzRW52aXJvbm1lbnQgZXh0ZW5kcyBIYXJuZXNzRW52aXJvbm1lbnQ8RWxlbWVudEZpbmRlcj4ge1xuICAvKiogVGhlIG9wdGlvbnMgZm9yIHRoaXMgZW52aXJvbm1lbnQuICovXG4gIHByaXZhdGUgX29wdGlvbnM6IFByb3RyYWN0b3JIYXJuZXNzRW52aXJvbm1lbnRPcHRpb25zO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICByYXdSb290RWxlbWVudDogRWxlbWVudEZpbmRlcixcbiAgICBvcHRpb25zPzogUHJvdHJhY3Rvckhhcm5lc3NFbnZpcm9ubWVudE9wdGlvbnMsXG4gICkge1xuICAgIHN1cGVyKHJhd1Jvb3RFbGVtZW50KTtcbiAgICB0aGlzLl9vcHRpb25zID0gey4uLmRlZmF1bHRFbnZpcm9ubWVudE9wdGlvbnMsIC4uLm9wdGlvbnN9O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBgSGFybmVzc0xvYWRlcmAgcm9vdGVkIGF0IHRoZSBkb2N1bWVudCByb290LiAqL1xuICBzdGF0aWMgbG9hZGVyKG9wdGlvbnM/OiBQcm90cmFjdG9ySGFybmVzc0Vudmlyb25tZW50T3B0aW9ucyk6IEhhcm5lc3NMb2FkZXIge1xuICAgIHJldHVybiBuZXcgUHJvdHJhY3Rvckhhcm5lc3NFbnZpcm9ubWVudChwcm90cmFjdG9yRWxlbWVudChieS5jc3MoJ2JvZHknKSksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIEVsZW1lbnRGaW5kZXIgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gVGVzdEVsZW1lbnQuICovXG4gIHN0YXRpYyBnZXROYXRpdmVFbGVtZW50KGVsOiBUZXN0RWxlbWVudCk6IEVsZW1lbnRGaW5kZXIge1xuICAgIGlmIChlbCBpbnN0YW5jZW9mIFByb3RyYWN0b3JFbGVtZW50KSB7XG4gICAgICByZXR1cm4gZWwuZWxlbWVudDtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3IoJ1RoaXMgVGVzdEVsZW1lbnQgd2FzIG5vdCBjcmVhdGVkIGJ5IHRoZSBQcm90cmFjdG9ySGFybmVzc0Vudmlyb25tZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2hlcyBjaGFuZ2UgZGV0ZWN0aW9uIGFuZCBhc3luYyB0YXNrcyBjYXB0dXJlZCBpbiB0aGUgQW5ndWxhciB6b25lLlxuICAgKiBJbiBtb3N0IGNhc2VzIGl0IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5IHRvIGNhbGwgdGhpcyBtYW51YWxseS4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIHNvbWUgZWRnZVxuICAgKiBjYXNlcyB3aGVyZSBpdCBpcyBuZWVkZWQgdG8gZnVsbHkgZmx1c2ggYW5pbWF0aW9uIGV2ZW50cy5cbiAgICovXG4gIGFzeW5jIGZvcmNlU3RhYmlsaXplKCk6IFByb21pc2U8dm9pZD4ge31cblxuICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICBhc3luYyB3YWl0Rm9yVGFza3NPdXRzaWRlQW5ndWxhcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyB3ZSBjYW4gZG8gdGhpcyBmb3IgdGhlIHByb3RyYWN0b3IgZW52aXJvbm1lbnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTc0MTJcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoZSBkb2N1bWVudC4gKi9cbiAgcHJvdGVjdGVkIGdldERvY3VtZW50Um9vdCgpOiBFbGVtZW50RmluZGVyIHtcbiAgICByZXR1cm4gcHJvdHJhY3RvckVsZW1lbnQoYnkuY3NzKCdib2R5JykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBgVGVzdEVsZW1lbnRgIGZyb20gYSByYXcgZWxlbWVudC4gKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVRlc3RFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRGaW5kZXIpOiBUZXN0RWxlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQcm90cmFjdG9yRWxlbWVudChlbGVtZW50KTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIGEgYEhhcm5lc3NMb2FkZXJgIHJvb3RlZCBhdCB0aGUgZ2l2ZW4gcmF3IGVsZW1lbnQuICovXG4gIHByb3RlY3RlZCBjcmVhdGVFbnZpcm9ubWVudChlbGVtZW50OiBFbGVtZW50RmluZGVyKTogSGFybmVzc0Vudmlyb25tZW50PEVsZW1lbnRGaW5kZXI+IHtcbiAgICByZXR1cm4gbmV3IFByb3RyYWN0b3JIYXJuZXNzRW52aXJvbm1lbnQoZWxlbWVudCwgdGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2YgYWxsIGVsZW1lbnRzIG1hdGNoaW5nIHRoZSBnaXZlbiBzZWxlY3RvciB1bmRlciB0aGlzIGVudmlyb25tZW50J3Mgcm9vdCBlbGVtZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFsbFJhd0VsZW1lbnRzKHNlbGVjdG9yOiBzdHJpbmcpOiBQcm9taXNlPEVsZW1lbnRGaW5kZXJbXT4ge1xuICAgIGNvbnN0IGVsZW1lbnRBcnJheUZpbmRlciA9IHRoaXMuX29wdGlvbnMucXVlcnlGbihzZWxlY3RvciwgdGhpcy5yYXdSb290RWxlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gYXdhaXQgZWxlbWVudEFycmF5RmluZGVyLmNvdW50KCk7XG4gICAgY29uc3QgZWxlbWVudHM6IEVsZW1lbnRGaW5kZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudEFycmF5RmluZGVyLmdldChpKSk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50cztcbiAgfVxufVxuIl19
@@ -1,10 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- export * from './protractor-element';
9
- export * from './protractor-harness-environment';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvdGVzdGluZy9wcm90cmFjdG9yL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHJvdHJhY3Rvci1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdHJhY3Rvci1oYXJuZXNzLWVudmlyb25tZW50JztcbiJdfQ==