testcafe 1.17.2-alpha.2 → 1.17.2-rc.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.
- package/README.md +34 -30
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/client-function-executor.js +12 -32
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/clients-manager.js +14 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/execution-context.js +85 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +9 -4
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.js +53 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/cursor.js +103 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/dom-utils.js +113 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/index.js +10 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/position-utils.js +81 -0
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/style-utils.js +158 -0
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +6 -2
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +32 -2
- package/lib/client/automation/index.js +450 -372
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/core/index.js +31 -33
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/scroll/adapter/index.js +15 -0
- package/lib/client/core/scroll/index.js +235 -0
- package/lib/client/core/utils/shared/adapter/index.js +18 -0
- package/lib/client/core/utils/shared/position.js +86 -0
- package/lib/client/core/utils/shared/scroll.js +85 -0
- package/lib/client/core/utils/shared/style.js +27 -0
- package/lib/client/driver/index.js +75 -77
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/proxyless/index.js +3250 -2447
- package/lib/client/ui/index.js +23 -21
- package/lib/client/ui/index.min.js +1 -1
- package/lib/shared/actions/automations/settings.js +31 -0
- package/lib/shared/actions/cursor.js +63 -0
- package/lib/shared/adapter/index.js +3 -6
- package/lib/shared/utils/get-line-rect-intersection.js +42 -0
- package/lib/shared/utils/position.js +20 -0
- package/lib/shared/utils/values/axis-values.js +44 -0
- package/lib/shared/utils/values/boundary-values.js +39 -0
- package/lib/shared/utils/values/dimensions.js +18 -0
- package/package.json +3 -2
- package/ts-defs/index.d.ts +25 -14
- package/ts-defs/selectors.d.ts +3 -3
- package/ts-defs/testcafe-scripts.d.ts +3 -3
|
@@ -23,6 +23,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
25
|
exports.BrowserClient = void 0;
|
|
26
|
+
// NOTE: Initializer should be the first
|
|
27
|
+
require("./shared-adapter-initializer");
|
|
26
28
|
const read_file_relative_1 = require("read-file-relative");
|
|
27
29
|
const path_1 = __importDefault(require("path"));
|
|
28
30
|
const os_1 = __importDefault(require("os"));
|
|
@@ -35,6 +37,8 @@ const pretty_hrtime_1 = __importDefault(require("pretty-hrtime"));
|
|
|
35
37
|
const elapsed_upperbounds_1 = require("../elapsed-upperbounds");
|
|
36
38
|
const guard_time_execution_1 = __importDefault(require("../../../../../../utils/guard-time-execution"));
|
|
37
39
|
const client_function_executor_1 = __importDefault(require("./client-function-executor"));
|
|
40
|
+
const execution_context_1 = __importDefault(require("./execution-context"));
|
|
41
|
+
const clientsManager = __importStar(require("./clients-manager"));
|
|
38
42
|
const DEBUG_SCOPE = (id) => `testcafe:browser:provider:built-in:chrome:browser-client:${id}`;
|
|
39
43
|
const DOWNLOADS_DIR = path_1.default.join(os_1.default.homedir(), 'Downloads');
|
|
40
44
|
const debugLog = debug_1.default('testcafe:browser:provider:built-in:dedicated:chrome');
|
|
@@ -189,7 +193,8 @@ class BrowserClient {
|
|
|
189
193
|
await this._setupClient(client);
|
|
190
194
|
if (this._proxyless) {
|
|
191
195
|
await this._injectProxylessStuff(client);
|
|
192
|
-
|
|
196
|
+
execution_context_1.default.initialize(client);
|
|
197
|
+
clientsManager.setClient(client);
|
|
193
198
|
}
|
|
194
199
|
}
|
|
195
200
|
}
|
|
@@ -272,11 +277,11 @@ class BrowserClient {
|
|
|
272
277
|
});
|
|
273
278
|
if (!node.frameId)
|
|
274
279
|
throw new SharedErrors.ActionElementNotIframeError(callsite);
|
|
275
|
-
|
|
280
|
+
execution_context_1.default.switchToIframe(node.frameId);
|
|
276
281
|
}
|
|
277
282
|
switchToMainWindow() {
|
|
278
|
-
|
|
283
|
+
execution_context_1.default.switchToMainWindow();
|
|
279
284
|
}
|
|
280
285
|
}
|
|
281
286
|
exports.BrowserClient = BrowserClient;
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2NkcC1jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUFzRDtBQUd0RCxnREFBd0I7QUFDeEIsNENBQW9CO0FBQ3BCLHNGQUFtRDtBQUNuRCxrREFBMEI7QUFDMUIseUVBQXVGO0FBQ3ZGLHNHQUE4RTtBQUM5RSw4RUFBZ0U7QUFRaEUsa0VBQXVDO0FBQ3ZDLGdFQUFvRjtBQUNwRix3R0FBOEU7QUFHOUUsMEZBQWdFO0FBR2hFLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBVSxFQUFVLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxFQUFFLENBQUM7QUFDN0csTUFBTSxhQUFhLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxZQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFM0QsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7QUFFOUUsTUFBYSxhQUFhO0lBUXRCLFlBQW9CLFdBQXdCLEVBQUUsU0FBa0I7UUFQeEQsYUFBUSxHQUF5QyxFQUFFLENBQUM7UUFReEQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBSSxlQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUssU0FBUyxDQUFDO1FBRTlCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLGtDQUFzQixFQUFFLENBQUM7UUFFNUQsV0FBVyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELElBQVksVUFBVTtRQUNsQixPQUFPLElBQUksQ0FB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YWQtZmlsZS1yZWxhdGl2ZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vY29uZmlndXJhdGlvbi9pbnRlcmZhY2VzJztcbmltcG9ydCBQcm90b2NvbCBmcm9tICdkZXZ0b29scy1wcm90b2NvbCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcmVtb3RlQ2hyb21lIGZyb20gJ2Nocm9tZS1yZW1vdGUtaW50ZXJmYWNlJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFQgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9jbGllbnQtZnVuY3Rpb25zJztcbmltcG9ydCBXQVJOSU5HX01FU1NBR0UgZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbm90aWZpY2F0aW9ucy93YXJuaW5nLW1lc3NhZ2UnO1xuaW1wb3J0ICogYXMgU2hhcmVkRXJyb3JzIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9lcnJvcnMnO1xuXG5pbXBvcnQge1xuICAgIENvbmZpZyxcbiAgICBSdW50aW1lSW5mbyxcbiAgICBUb3VjaENvbmZpZ09wdGlvbnMsXG4gICAgU2l6ZSxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgcHJldHR5VGltZSBmcm9tICdwcmV0dHktaHJ0aW1lJztcbmltcG9ydCB7IENoZWNrZWRDRFBNZXRob2QsIEVMQVBTRURfVElNRV9VUFBFUkJPVU5EUyB9IGZyb20gJy4uL2VsYXBzZWQtdXBwZXJib3VuZHMnO1xuaW1wb3J0IGd1YXJkVGltZUV4ZWN1dGlvbiBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi91dGlscy9ndWFyZC10aW1lLWV4ZWN1dGlvbic7XG5pbXBvcnQgeyBDYWxsc2l0ZVJlY29yZCB9IGZyb20gJ2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgeyBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kLCBFeGVjdXRlU2VsZWN0b3JDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IENsaWVudEZ1bmN0aW9uRXhlY3V0b3IgZnJvbSAnLi9jbGllbnQtZnVuY3Rpb24tZXhlY3V0b3InO1xuaW1wb3J0IHsgU3dpdGNoVG9JZnJhbWVDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvYWN0aW9ucyc7XG5cbmNvbnN0IERFQlVHX1NDT1BFID0gKGlkOiBzdHJpbmcpOiBzdHJpbmcgPT4gYHRlc3RjYWZlOmJyb3dzZXI6cHJvdmlkZXI6YnVpbHQtaW46Y2hyb21lOmJyb3dzZXItY2xpZW50OiR7aWR9YDtcbmNvbnN0IERPV05MT0FEU19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnRG93bmxvYWRzJyk7XG5cbmNvbnN0IGRlYnVnTG9nID0gZGVidWcoJ3Rlc3RjYWZlOmJyb3dzZXI6cHJvdmlkZXI6YnVpbHQtaW46ZGVkaWNhdGVkOmNocm9tZScpO1xuXG5leHBvcnQgY2xhc3MgQnJvd3NlckNsaWVudCB7XG4gICAgcHJpdmF0ZSBfY2xpZW50czogRGljdGlvbmFyeTxyZW1vdGVDaHJvbWUuUHJvdG9jb2xBcGk+ID0ge307XG4gICAgcHJpdmF0ZSBfcnVudGltZUluZm86IFJ1bnRpbWVJbmZvO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb3h5bGVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9wYXJlbnRUYXJnZXQ/OiByZW1vdGVDaHJvbWUuVGFyZ2V0SW5mbztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yOiBDbGllbnRGdW5jdGlvbkV4ZWN1dG9yO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChydW50aW1lSW5mbzogUnVudGltZUluZm8sIHByb3h5bGVzczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9ydW50aW1lSW5mbyA9IHJ1bnRpbWVJbmZvO1xuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyICA9IGRlYnVnKERFQlVHX1NDT1BFKHJ1bnRpbWVJbmZvLmJyb3dzZXJJZCkpO1xuICAgICAgICB0aGlzLl9wcm94eWxlc3MgICA9IHByb3h5bGVzcztcblxuICAgICAgICB0aGlzLl9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yID0gbmV3IENsaWVudEZ1bmN0aW9uRXhlY3V0b3IoKTtcblxuICAgICAgICBydW50aW1lSW5mby5icm93c2VyQ2xpZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY2xpZW50S2V5ICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUluZm8uYWN0aXZlV2luZG93SWQgfHwgdGhpcy5fcnVudGltZUluZm8uYnJvd3NlcklkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IF9jb25maWcgKCk6IENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5jb25maWc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VGFicyAoKTogUHJvbWlzZTxyZW1vdGVDaHJvbWUuVGFyZ2V0SW5mb1tdPiB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBhd2FpdCByZW1vdGVDaHJvbWUuTGlzdCh7IHBvcnQ6IHRoaXMuX3J1bnRpbWVJbmZvLmNkcFBvcnQgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhYnMuZmlsdGVyKHQgPT4gdC50eXBlID09PSAncGFnZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldEFjdGl2ZVRhYiAoKTogUHJvbWlzZTxyZW1vdGVDaHJvbWUuVGFyZ2V0SW5mbz4ge1xuICAgICAgICBsZXQgdGFicyA9IGF3YWl0IHRoaXMuX2dldFRhYnMoKTtcblxuICAgICAgICBpZiAodGhpcy5fcnVudGltZUluZm8uYWN0aXZlV2luZG93SWQpXG4gICAgICAgICAgICB0YWJzID0gdGFicy5maWx0ZXIodCA9PiB0LnRpdGxlLmluY2x1ZGVzKHRoaXMuX3J1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkKSk7XG5cbiAgICAgICAgcmV0dXJuIHRhYnNbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tEcm9wT2ZQZXJmb3JtYW5jZSAobWV0aG9kOiBDaGVja2VkQ0RQTWV0aG9kLCBlbGFwc2VkVGltZTogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGBDRFAgbWV0aG9kICcke21ldGhvZH0nIHRvb2sgJHtwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKX1gKTtcblxuICAgICAgICBjb25zdCBbIGVsYXBzZWRTZWNvbmRzIF0gPSBlbGFwc2VkVGltZTtcblxuICAgICAgICBpZiAoZWxhcHNlZFNlY29uZHMgPiBFTEFQU0VEX1RJTUVfVVBQRVJCT1VORFNbbWV0aG9kXSkge1xuICAgICAgICAgICAgdGhpcy5fcnVudGltZUluZm8ucHJvdmlkZXJNZXRob2RzLnJlcG9ydFdhcm5pbmcoXG4gICAgICAgICAgICAgICAgV0FSTklOR19NRVNTQUdFLmJyb3dzZXJQcm92aWRlckRyb3BPZlBlcmZvcm1hbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVJbmZvLmJyb3dzZXJOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlQ2xpZW50ICgpOiBQcm9taXNlPHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IHRoaXMuX2dldEFjdGl2ZVRhYigpO1xuICAgICAgICBjb25zdCBjbGllbnQgICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IHJlbW90ZUNocm9tZSh7IHRhcmdldCwgcG9ydDogdGhpcy5fcnVudGltZUluZm8uY2RwUG9ydCB9KTtcbiAgICAgICAgY29uc3QgeyBQYWdlLCBOZXR3b3JrLCBSdW50aW1lIH0gPSBjbGllbnQ7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50c1t0aGlzLl9jbGllbnRLZXldID0gY2xpZW50O1xuXG4gICAgICAgIGF3YWl0IGd1YXJkVGltZUV4ZWN1dGlvbihcbiAgICAgICAgICAgIGFzeW5jICgpID0+IGF3YWl0IFBhZ2UuZW5hYmxlKCksXG4gICAgICAgICAgICBlbGFwc2VkVGltZSA9PiB0aGlzLl9jaGVja0Ryb3BPZlBlcmZvcm1hbmNlKENoZWNrZWRDRFBNZXRob2QuUGFnZUVuYWJsZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgTmV0d29yay5lbmFibGUoe30pO1xuICAgICAgICBhd2FpdCBSdW50aW1lLmVuYWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0dXBDbGllbnQgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZW11bGF0aW9uKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0RW11bGF0aW9uKGNsaWVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5oZWFkbGVzcylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldHVwRG93bmxvYWRzKGNsaWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRldmljZVNjYWxlRmFjdG9yOiBudW1iZXIsIG1vYmlsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBndWFyZFRpbWVFeGVjdXRpb24oXG4gICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VTY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgbW9iaWxlLFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGZpdFdpbmRvdzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWxhcHNlZFRpbWUgPT4gdGhpcy5fY2hlY2tEcm9wT2ZQZXJmb3JtYW5jZShDaGVja2VkQ0RQTWV0aG9kLlNldERldmljZU1ldHJpY3NPdmVycmlkZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXNlckFnZW50RW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnVzZXJBZ2VudCA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IGNsaWVudC5OZXR3b3JrLnNldFVzZXJBZ2VudE92ZXJyaWRlKHsgdXNlckFnZW50OiB0aGlzLl9jb25maWcudXNlckFnZW50IH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3NldFRvdWNoRW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoID09PSB2b2lkIDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdG91Y2hDb25maWc6IFRvdWNoQ29uZmlnT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6ICAgICAgICB0aGlzLl9jb25maWcudG91Y2gsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiAgdGhpcy5fY29uZmlnLm1vYmlsZSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnLFxuICAgICAgICAgICAgbWF4VG91Y2hQb2ludHM6IDEsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNsaWVudC5FbXVsYXRpb24uc2V0RW1pdFRvdWNoRXZlbnRzRm9yTW91c2UpXG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuRW11bGF0aW9uLnNldEVtaXRUb3VjaEV2ZW50c0Zvck1vdXNlKHRvdWNoQ29uZmlnKTtcblxuICAgICAgICBpZiAoY2xpZW50LkVtdWxhdGlvbi5zZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQpXG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuRW11bGF0aW9uLnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCh0b3VjaENvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0RW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRVc2VyQWdlbnRFbXVsYXRpb24oY2xpZW50KTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0VG91Y2hFbXVsYXRpb24oY2xpZW50KTtcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc2l6ZVdpbmRvdyh7XG4gICAgICAgICAgICB3aWR0aDogIHRoaXMuX2NvbmZpZy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5fY29uZmlnLmhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0dXBEb3dubG9hZHMgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5QYWdlLnNldERvd25sb2FkQmVoYXZpb3Ioe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICAgICAnYWxsb3cnLFxuICAgICAgICAgICAgZG93bmxvYWRQYXRoOiBET1dOTE9BRFNfRElSLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ldmFsdWF0ZVJ1bnRpbWUgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpLCBleHByZXNzaW9uOiBzdHJpbmcsIHJldHVybkJ5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8UHJvdG9jb2wuUnVudGltZS5FdmFsdWF0ZVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBjbGllbnQuUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb24sIHJldHVybkJ5VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2FsY3VsYXRlRW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvUXVlcnlSZXN1bHQgPSBhd2FpdCBjbGllbnQuUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICd3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbycgfSk7XG5cbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8ub3JpZ2luYWxEZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpb1F1ZXJ5UmVzdWx0LnJlc3VsdC52YWx1ZTtcbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8uZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvID0gdGhpcy5fY29uZmlnLnNjYWxlRmFjdG9yIHx8IHRoaXMuX3J1bnRpbWVJbmZvLm9yaWdpbmFsRGV2aWNlUGl4ZWxSYXRpbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pbmplY3RQcm94eWxlc3NTdHVmZiAoY2xpZW50OiByZW1vdGVDaHJvbWUuUHJvdG9jb2xBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LlBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnQoe1xuICAgICAgICAgICAgc291cmNlOiByZWFkKCcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY2xpZW50L3Byb3h5bGVzcy9pbmRleC5qcycpIGFzIHN0cmluZyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc2l6ZVdpbmRvdyAobmV3RGltZW5zaW9uczogU2l6ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGJyb3dzZXJJZCwgY29uZmlnLCB2aWV3cG9ydFNpemUsIHByb3ZpZGVyTWV0aG9kcywgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvIH0gPSB0aGlzLl9ydW50aW1lSW5mbztcblxuICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSB2aWV3cG9ydFNpemUud2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB2aWV3cG9ydFNpemUuaGVpZ2h0O1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IG5ld0RpbWVuc2lvbnMud2lkdGggfHwgY3VycmVudFdpZHRoO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBuZXdEaW1lbnNpb25zLmhlaWdodCB8fCBjdXJyZW50SGVpZ2h0O1xuXG4gICAgICAgIGlmICghY29uZmlnLmhlYWRsZXNzKVxuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXJNZXRob2RzLnJlc2l6ZUxvY2FsQnJvd3NlcldpbmRvdyhicm93c2VySWQsIG5ld1dpZHRoLCBuZXdIZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG5cbiAgICAgICAgdmlld3BvcnRTaXplLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIHZpZXdwb3J0U2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoY2xpZW50ICYmIGNvbmZpZy5lbXVsYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldERldmljZU1ldHJpY3NPdmVycmlkZShjbGllbnQsIHZpZXdwb3J0U2l6ZS53aWR0aCwgdmlld3BvcnRTaXplLmhlaWdodCwgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvLCBjb25maWcubW9iaWxlKTtcblxuICAgICAgICAgICAgYXdhaXQgZ3VhcmRUaW1lRXhlY3V0aW9uKFxuICAgICAgICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LkVtdWxhdGlvbi5zZXRWaXNpYmxlU2l6ZSh7IHdpZHRoOiB2aWV3cG9ydFNpemUud2lkdGgsIGhlaWdodDogdmlld3BvcnRTaXplLmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lID0+IHRoaXMuX2NoZWNrRHJvcE9mUGVyZm9ybWFuY2UoQ2hlY2tlZENEUE1ldGhvZC5TZXRWaXNpYmxlU2l6ZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzSGVhZGxlc3NUYWIgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9wYXJlbnRUYXJnZXQgJiYgdGhpcy5fY29uZmlnLmhlYWRsZXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBY3RpdmVDbGllbnQgKCk6IFByb21pc2U8cmVtb3RlQ2hyb21lLlByb3RvY29sQXBpIHwgdm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jbGllbnRzW3RoaXMuX2NsaWVudEtleV0pXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50c1t0aGlzLl9jbGllbnRLZXldID0gYXdhaXQgdGhpcy5fY3JlYXRlQ2xpZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVidWdMb2coZXJyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRzW3RoaXMuX2NsaWVudEtleV07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFicyA9IGF3YWl0IHRoaXMuX2dldFRhYnMoKTtcblxuICAgICAgICAgICAgdGhpcy5fcGFyZW50VGFyZ2V0ID0gdGFicy5maW5kKHQgPT4gdC51cmwuaW5jbHVkZXModGhpcy5fcnVudGltZUluZm8uYnJvd3NlcklkKSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGFyZW50VGFyZ2V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGN1bGF0ZUVtdWxhdGVkRGV2aWNlUGl4ZWxSYXRpbyhjbGllbnQpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldHVwQ2xpZW50KGNsaWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJveHlsZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luamVjdFByb3h5bGVzc1N0dWZmKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsaWVudEZ1bmN0aW9uRXhlY3V0b3Iuc2V0dXBGcmFtZXNXYXRjaGluZyhjbGllbnQuUnVudGltZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U2NyZWVuc2hvdERhdGEgKGZ1bGxQYWdlPzogYm9vbGVhbik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIGxldCB2aWV3cG9ydFdpZHRoICA9IDA7XG4gICAgICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IDA7XG5cbiAgICAgICAgY29uc3QgeyBjb25maWcsIGVtdWxhdGVkRGV2aWNlUGl4ZWxSYXRpbyB9ID0gdGhpcy5fcnVudGltZUluZm87XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMCk7XG5cbiAgICAgICAgaWYgKGZ1bGxQYWdlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRlbnRTaXplLCB2aXN1YWxWaWV3cG9ydCB9ID0gYXdhaXQgY2xpZW50LlBhZ2UuZ2V0TGF5b3V0TWV0cmljcygpO1xuXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUoXG4gICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgIE1hdGguY2VpbChjb250ZW50U2l6ZS53aWR0aCksXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKGNvbnRlbnRTaXplLmhlaWdodCksXG4gICAgICAgICAgICAgICAgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5tb2JpbGUpO1xuXG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gdmlzdWFsVmlld3BvcnQuY2xpZW50V2lkdGg7XG4gICAgICAgICAgICB2aWV3cG9ydEhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3REYXRhID0gYXdhaXQgY2xpZW50LlBhZ2UuY2FwdHVyZVNjcmVlbnNob3Qoe30pO1xuXG4gICAgICAgIGlmIChmdWxsUGFnZSkge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5lbXVsYXRpb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUoXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLndpZHRoIHx8IHZpZXdwb3J0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5oZWlnaHQgfHwgdmlld3BvcnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGVtdWxhdGVkRGV2aWNlUGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLm1vYmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LkVtdWxhdGlvbi5jbGVhckRldmljZU1ldHJpY3NPdmVycmlkZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNjcmVlbnNob3REYXRhLmRhdGEsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xvc2VUYWIgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fcGFyZW50VGFyZ2V0KVxuICAgICAgICAgICAgYXdhaXQgcmVtb3RlQ2hyb21lLkNsb3NlKHsgaWQ6IHRoaXMuX3BhcmVudFRhcmdldC5pZCwgcG9ydDogdGhpcy5fcnVudGltZUluZm8uY2RwUG9ydCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlTW9iaWxlVmlld3BvcnRTaXplICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCB3aW5kb3dEaW1lbnNpb25zUXVlcnlSZXN1bHQgPSBhd2FpdCB0aGlzLl9ldmFsdWF0ZVJ1bnRpbWUoY2xpZW50LCBgKCR7R0VUX1dJTkRPV19ESU1FTlNJT05TX0lORk9fU0NSSVBUfSkoKWAsIHRydWUpO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd0RpbWVuc2lvbnMgPSB3aW5kb3dEaW1lbnNpb25zUXVlcnlSZXN1bHQucmVzdWx0LnZhbHVlO1xuXG4gICAgICAgIHRoaXMuX3J1bnRpbWVJbmZvLnZpZXdwb3J0U2l6ZS53aWR0aCA9IHdpbmRvd0RpbWVuc2lvbnMub3V0ZXJXaWR0aDtcbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8udmlld3BvcnRTaXplLmhlaWdodCA9IHdpbmRvd0RpbWVuc2lvbnMub3V0ZXJIZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVDbGllbnRGdW5jdGlvbiAoY29tbWFuZDogRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCB0aGUgYWN0aXZlIGJyb3dzZXIgY2xpZW50Jyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudEZ1bmN0aW9uRXhlY3V0b3IuZXhlY3V0ZUNsaWVudEZ1bmN0aW9uKGNsaWVudC5SdW50aW1lLCBjb21tYW5kLCBjYWxsc2l0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4ZWN1dGVTZWxlY3RvciAoY29tbWFuZDogRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCwgY2FsbHNpdGU6IENhbGxzaXRlUmVjb3JkLCBzZWxlY3RvclRpbWVvdXQ6IG51bWJlcik6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlQ2xpZW50KCk7XG5cbiAgICAgICAgaWYgKCFjbGllbnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgdGhlIGFjdGl2ZSBicm93c2VyIGNsaWVudCcpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yLmV4ZWN1dGVTZWxlY3Rvcih7XG4gICAgICAgICAgICBSdW50aW1lOiAgY2xpZW50LlJ1bnRpbWUsXG4gICAgICAgICAgICBlcnJDdG9yczoge1xuICAgICAgICAgICAgICAgIG5vdEZvdW5kOiAgU2hhcmVkRXJyb3JzLkNhbm5vdE9idGFpbkluZm9Gb3JFbGVtZW50U3BlY2lmaWVkQnlTZWxlY3RvckVycm9yLm5hbWUsXG4gICAgICAgICAgICAgICAgaW52aXNpYmxlOiBTaGFyZWRFcnJvcnMuQ2Fubm90T2J0YWluSW5mb0ZvckVsZW1lbnRTcGVjaWZpZWRCeVNlbGVjdG9yRXJyb3IubmFtZSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGNvbW1hbmQsIGNhbGxzaXRlLCBzZWxlY3RvclRpbWVvdXQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzd2l0Y2hUb0lmcmFtZSAoY29tbWFuZDogU3dpdGNoVG9JZnJhbWVDb21tYW5kLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQsIHNlbGVjdG9yVGltZW91dDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlQ2xpZW50KCk7XG5cbiAgICAgICAgaWYgKCFjbGllbnQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBjb21tYW5kLnNlbGVjdG9yO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IudGltZW91dCA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICBzZWxlY3RvclRpbWVvdXQgPSBzZWxlY3Rvci50aW1lb3V0O1xuXG4gICAgICAgIHNlbGVjdG9yLm5lZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IHRoaXMuX2NsaWVudEZ1bmN0aW9uRXhlY3V0b3IuZ2V0Tm9kZSh7XG4gICAgICAgICAgICBET006ICAgICAgY2xpZW50LkRPTSxcbiAgICAgICAgICAgIFJ1bnRpbWU6ICBjbGllbnQuUnVudGltZSxcbiAgICAgICAgICAgIGNvbW1hbmQ6ICBzZWxlY3RvcixcbiAgICAgICAgICAgIGVyckN0b3JzOiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmQ6ICBTaGFyZWRFcnJvcnMuQWN0aW9uRWxlbWVudE5vdEZvdW5kRXJyb3IubmFtZSxcbiAgICAgICAgICAgICAgICBpbnZpc2libGU6IFNoYXJlZEVycm9ycy5BY3Rpb25FbGVtZW50SXNJbnZpc2libGVFcnJvci5uYW1lLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY2FsbHNpdGUsIHNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFub2RlLmZyYW1lSWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgU2hhcmVkRXJyb3JzLkFjdGlvbkVsZW1lbnROb3RJZnJhbWVFcnJvcihjYWxsc2l0ZSk7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50RnVuY3Rpb25FeGVjdXRvci5zZXRDdXJyZW50RnJhbWVJZChub2RlLmZyYW1lSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzd2l0Y2hUb01haW5XaW5kb3cgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yLnNldEN1cnJlbnRGcmFtZUlkKCcnKTtcbiAgICB9XG59XG4iXX0=
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2NkcC1jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUF3QztBQUN4Qyx3Q0FBc0M7QUFFdEMsMkRBQXNEO0FBR3RELGdEQUF3QjtBQUN4Qiw0Q0FBb0I7QUFDcEIsc0ZBQW1EO0FBQ25ELGtEQUEwQjtBQUMxQix5RUFBdUY7QUFDdkYsc0dBQThFO0FBQzlFLDhFQUFnRTtBQVFoRSxrRUFBdUM7QUFDdkMsZ0VBQW9GO0FBQ3BGLHdHQUE4RTtBQUc5RSwwRkFBZ0U7QUFFaEUsNEVBQW1EO0FBQ25ELGtFQUFvRDtBQUVwRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQVUsRUFBVSxFQUFFLENBQUMsNERBQTRELEVBQUUsRUFBRSxDQUFDO0FBQzdHLE1BQU0sYUFBYSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsWUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRTNELE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0FBRTlFLE1BQWEsYUFBYTtJQVF0QixZQUFvQixXQUF3QixFQUFFLFNBQWtCO1FBUHhELGFBQVEsR0FBeUMsRUFBRSxDQUFDO1FBUXhELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUksZUFBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFLLFNBQVMsQ0FBQztRQUU5QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxrQ0FBc0IsRUFBRSxDQUFDO1FBRTVELFdBQVcsQ0FBQyxhQUFhLEdBQUcsSUFB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IjpbIi8vIE5PVEU6IEluaXRpYWxpemVyIHNob3VsZCBiZSB0aGUgZmlyc3RcbmltcG9ydCAnLi9zaGFyZWQtYWRhcHRlci1pbml0aWFsaXplcic7XG5cbmltcG9ydCB7IHJlYWRTeW5jIGFzIHJlYWQgfSBmcm9tICdyZWFkLWZpbGUtcmVsYXRpdmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRpb24vaW50ZXJmYWNlcyc7XG5pbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHJlbW90ZUNocm9tZSBmcm9tICdjaHJvbWUtcmVtb3RlLWludGVyZmFjZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgR0VUX1dJTkRPV19ESU1FTlNJT05TX0lORk9fU0NSSVBUIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY2xpZW50LWZ1bmN0aW9ucyc7XG5pbXBvcnQgV0FSTklOR19NRVNTQUdFIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL25vdGlmaWNhdGlvbnMvd2FybmluZy1tZXNzYWdlJztcbmltcG9ydCAqIGFzIFNoYXJlZEVycm9ycyBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvZXJyb3JzJztcblxuaW1wb3J0IHtcbiAgICBDb25maWcsXG4gICAgUnVudGltZUluZm8sXG4gICAgVG91Y2hDb25maWdPcHRpb25zLFxuICAgIFNpemUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHByZXR0eVRpbWUgZnJvbSAncHJldHR5LWhydGltZSc7XG5pbXBvcnQgeyBDaGVja2VkQ0RQTWV0aG9kLCBFTEFQU0VEX1RJTUVfVVBQRVJCT1VORFMgfSBmcm9tICcuLi9lbGFwc2VkLXVwcGVyYm91bmRzJztcbmltcG9ydCBndWFyZFRpbWVFeGVjdXRpb24gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdXRpbHMvZ3VhcmQtdGltZS1leGVjdXRpb24nO1xuaW1wb3J0IHsgQ2FsbHNpdGVSZWNvcmQgfSBmcm9tICdjYWxsc2l0ZS1yZWNvcmQnO1xuaW1wb3J0IHsgRXhlY3V0ZUNsaWVudEZ1bmN0aW9uQ29tbWFuZCwgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL29ic2VydmF0aW9uJztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkV4ZWN1dG9yIGZyb20gJy4vY2xpZW50LWZ1bmN0aW9uLWV4ZWN1dG9yJztcbmltcG9ydCB7IFN3aXRjaFRvSWZyYW1lQ29tbWFuZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2FjdGlvbnMnO1xuaW1wb3J0IEV4ZWN1dGlvbkNvbnRleHQgZnJvbSAnLi9leGVjdXRpb24tY29udGV4dCc7XG5pbXBvcnQgKiBhcyBjbGllbnRzTWFuYWdlciBmcm9tICcuL2NsaWVudHMtbWFuYWdlcic7XG5cbmNvbnN0IERFQlVHX1NDT1BFID0gKGlkOiBzdHJpbmcpOiBzdHJpbmcgPT4gYHRlc3RjYWZlOmJyb3dzZXI6cHJvdmlkZXI6YnVpbHQtaW46Y2hyb21lOmJyb3dzZXItY2xpZW50OiR7aWR9YDtcbmNvbnN0IERPV05MT0FEU19ESVIgPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnRG93bmxvYWRzJyk7XG5cbmNvbnN0IGRlYnVnTG9nID0gZGVidWcoJ3Rlc3RjYWZlOmJyb3dzZXI6cHJvdmlkZXI6YnVpbHQtaW46ZGVkaWNhdGVkOmNocm9tZScpO1xuXG5leHBvcnQgY2xhc3MgQnJvd3NlckNsaWVudCB7XG4gICAgcHJpdmF0ZSBfY2xpZW50czogRGljdGlvbmFyeTxyZW1vdGVDaHJvbWUuUHJvdG9jb2xBcGk+ID0ge307XG4gICAgcHJpdmF0ZSBfcnVudGltZUluZm86IFJ1bnRpbWVJbmZvO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Byb3h5bGVzczogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9wYXJlbnRUYXJnZXQ/OiByZW1vdGVDaHJvbWUuVGFyZ2V0SW5mbztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlYnVnTG9nZ2VyOiBkZWJ1Zy5EZWJ1Z2dlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yOiBDbGllbnRGdW5jdGlvbkV4ZWN1dG9yO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChydW50aW1lSW5mbzogUnVudGltZUluZm8sIHByb3h5bGVzczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9ydW50aW1lSW5mbyA9IHJ1bnRpbWVJbmZvO1xuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyICA9IGRlYnVnKERFQlVHX1NDT1BFKHJ1bnRpbWVJbmZvLmJyb3dzZXJJZCkpO1xuICAgICAgICB0aGlzLl9wcm94eWxlc3MgICA9IHByb3h5bGVzcztcblxuICAgICAgICB0aGlzLl9jbGllbnRGdW5jdGlvbkV4ZWN1dG9yID0gbmV3IENsaWVudEZ1bmN0aW9uRXhlY3V0b3IoKTtcblxuICAgICAgICBydW50aW1lSW5mby5icm93c2VyQ2xpZW50ID0gdGhpcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBfY2xpZW50S2V5ICgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUluZm8uYWN0aXZlV2luZG93SWQgfHwgdGhpcy5fcnVudGltZUluZm8uYnJvd3NlcklkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IF9jb25maWcgKCk6IENvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5jb25maWc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0VGFicyAoKTogUHJvbWlzZTxyZW1vdGVDaHJvbWUuVGFyZ2V0SW5mb1tdPiB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBhd2FpdCByZW1vdGVDaHJvbWUuTGlzdCh7IHBvcnQ6IHRoaXMuX3J1bnRpbWVJbmZvLmNkcFBvcnQgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhYnMuZmlsdGVyKHQgPT4gdC50eXBlID09PSAncGFnZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldEFjdGl2ZVRhYiAoKTogUHJvbWlzZTxyZW1vdGVDaHJvbWUuVGFyZ2V0SW5mbz4ge1xuICAgICAgICBsZXQgdGFicyA9IGF3YWl0IHRoaXMuX2dldFRhYnMoKTtcblxuICAgICAgICBpZiAodGhpcy5fcnVudGltZUluZm8uYWN0aXZlV2luZG93SWQpXG4gICAgICAgICAgICB0YWJzID0gdGFicy5maWx0ZXIodCA9PiB0LnRpdGxlLmluY2x1ZGVzKHRoaXMuX3J1bnRpbWVJbmZvLmFjdGl2ZVdpbmRvd0lkKSk7XG5cbiAgICAgICAgcmV0dXJuIHRhYnNbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tEcm9wT2ZQZXJmb3JtYW5jZSAobWV0aG9kOiBDaGVja2VkQ0RQTWV0aG9kLCBlbGFwc2VkVGltZTogW251bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlYnVnTG9nZ2VyKGBDRFAgbWV0aG9kICcke21ldGhvZH0nIHRvb2sgJHtwcmV0dHlUaW1lKGVsYXBzZWRUaW1lKX1gKTtcblxuICAgICAgICBjb25zdCBbIGVsYXBzZWRTZWNvbmRzIF0gPSBlbGFwc2VkVGltZTtcblxuICAgICAgICBpZiAoZWxhcHNlZFNlY29uZHMgPiBFTEFQU0VEX1RJTUVfVVBQRVJCT1VORFNbbWV0aG9kXSkge1xuICAgICAgICAgICAgdGhpcy5fcnVudGltZUluZm8ucHJvdmlkZXJNZXRob2RzLnJlcG9ydFdhcm5pbmcoXG4gICAgICAgICAgICAgICAgV0FSTklOR19NRVNTQUdFLmJyb3dzZXJQcm92aWRlckRyb3BPZlBlcmZvcm1hbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX3J1bnRpbWVJbmZvLmJyb3dzZXJOYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlQ2xpZW50ICgpOiBQcm9taXNlPHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IHRoaXMuX2dldEFjdGl2ZVRhYigpO1xuICAgICAgICBjb25zdCBjbGllbnQgICAgICAgICAgICAgICAgICAgICA9IGF3YWl0IHJlbW90ZUNocm9tZSh7IHRhcmdldCwgcG9ydDogdGhpcy5fcnVudGltZUluZm8uY2RwUG9ydCB9KTtcbiAgICAgICAgY29uc3QgeyBQYWdlLCBOZXR3b3JrLCBSdW50aW1lIH0gPSBjbGllbnQ7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50c1t0aGlzLl9jbGllbnRLZXldID0gY2xpZW50O1xuXG4gICAgICAgIGF3YWl0IGd1YXJkVGltZUV4ZWN1dGlvbihcbiAgICAgICAgICAgIGFzeW5jICgpID0+IGF3YWl0IFBhZ2UuZW5hYmxlKCksXG4gICAgICAgICAgICBlbGFwc2VkVGltZSA9PiB0aGlzLl9jaGVja0Ryb3BPZlBlcmZvcm1hbmNlKENoZWNrZWRDRFBNZXRob2QuUGFnZUVuYWJsZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgYXdhaXQgTmV0d29yay5lbmFibGUoe30pO1xuICAgICAgICBhd2FpdCBSdW50aW1lLmVuYWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0dXBDbGllbnQgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuZW11bGF0aW9uKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0RW11bGF0aW9uKGNsaWVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5oZWFkbGVzcylcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldHVwRG93bmxvYWRzKGNsaWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0RGV2aWNlTWV0cmljc092ZXJyaWRlIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRldmljZVNjYWxlRmFjdG9yOiBudW1iZXIsIG1vYmlsZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCBndWFyZFRpbWVFeGVjdXRpb24oXG4gICAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LkVtdWxhdGlvbi5zZXREZXZpY2VNZXRyaWNzT3ZlcnJpZGUoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VTY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgbW9iaWxlLFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGZpdFdpbmRvdzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWxhcHNlZFRpbWUgPT4gdGhpcy5fY2hlY2tEcm9wT2ZQZXJmb3JtYW5jZShDaGVja2VkQ0RQTWV0aG9kLlNldERldmljZU1ldHJpY3NPdmVycmlkZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0VXNlckFnZW50RW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnVzZXJBZ2VudCA9PT0gdm9pZCAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGF3YWl0IGNsaWVudC5OZXR3b3JrLnNldFVzZXJBZ2VudE92ZXJyaWRlKHsgdXNlckFnZW50OiB0aGlzLl9jb25maWcudXNlckFnZW50IH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX3NldFRvdWNoRW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoID09PSB2b2lkIDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdG91Y2hDb25maWc6IFRvdWNoQ29uZmlnT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6ICAgICAgICB0aGlzLl9jb25maWcudG91Y2gsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiAgdGhpcy5fY29uZmlnLm1vYmlsZSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnLFxuICAgICAgICAgICAgbWF4VG91Y2hQb2ludHM6IDEsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNsaWVudC5FbXVsYXRpb24uc2V0RW1pdFRvdWNoRXZlbnRzRm9yTW91c2UpXG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuRW11bGF0aW9uLnNldEVtaXRUb3VjaEV2ZW50c0Zvck1vdXNlKHRvdWNoQ29uZmlnKTtcblxuICAgICAgICBpZiAoY2xpZW50LkVtdWxhdGlvbi5zZXRUb3VjaEVtdWxhdGlvbkVuYWJsZWQpXG4gICAgICAgICAgICBhd2FpdCBjbGllbnQuRW11bGF0aW9uLnNldFRvdWNoRW11bGF0aW9uRW5hYmxlZCh0b3VjaENvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0RW11bGF0aW9uIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRVc2VyQWdlbnRFbXVsYXRpb24oY2xpZW50KTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc2V0VG91Y2hFbXVsYXRpb24oY2xpZW50KTtcblxuICAgICAgICBhd2FpdCB0aGlzLnJlc2l6ZVdpbmRvdyh7XG4gICAgICAgICAgICB3aWR0aDogIHRoaXMuX2NvbmZpZy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5fY29uZmlnLmhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0dXBEb3dubG9hZHMgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGNsaWVudC5QYWdlLnNldERvd25sb2FkQmVoYXZpb3Ioe1xuICAgICAgICAgICAgYmVoYXZpb3I6ICAgICAnYWxsb3cnLFxuICAgICAgICAgICAgZG93bmxvYWRQYXRoOiBET1dOTE9BRFNfRElSLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9ldmFsdWF0ZVJ1bnRpbWUgKGNsaWVudDogcmVtb3RlQ2hyb21lLlByb3RvY29sQXBpLCBleHByZXNzaW9uOiBzdHJpbmcsIHJldHVybkJ5VmFsdWU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8UHJvdG9jb2wuUnVudGltZS5FdmFsdWF0ZVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBjbGllbnQuUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb24sIHJldHVybkJ5VmFsdWUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfY2FsY3VsYXRlRW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvIChjbGllbnQ6IHJlbW90ZUNocm9tZS5Qcm90b2NvbEFwaSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvUXVlcnlSZXN1bHQgPSBhd2FpdCBjbGllbnQuUnVudGltZS5ldmFsdWF0ZSh7IGV4cHJlc3Npb246ICd3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbycgfSk7XG5cbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8ub3JpZ2luYWxEZXZpY2VQaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpb1F1ZXJ5UmVzdWx0LnJlc3VsdC52YWx1ZTtcbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8uZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvID0gdGhpcy5fY29uZmlnLnNjYWxlRmFjdG9yIHx8IHRoaXMuX3J1bnRpbWVJbmZvLm9yaWdpbmFsRGV2aWNlUGl4ZWxSYXRpbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9pbmplY3RQcm94eWxlc3NTdHVmZiAoY2xpZW50OiByZW1vdGVDaHJvbWUuUHJvdG9jb2xBcGkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LlBhZ2UuYWRkU2NyaXB0VG9FdmFsdWF0ZU9uTmV3RG9jdW1lbnQoe1xuICAgICAgICAgICAgc291cmNlOiByZWFkKCcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY2xpZW50L3Byb3h5bGVzcy9pbmRleC5qcycpIGFzIHN0cmluZyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc2l6ZVdpbmRvdyAobmV3RGltZW5zaW9uczogU2l6ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB7IGJyb3dzZXJJZCwgY29uZmlnLCB2aWV3cG9ydFNpemUsIHByb3ZpZGVyTWV0aG9kcywgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvIH0gPSB0aGlzLl9ydW50aW1lSW5mbztcblxuICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSB2aWV3cG9ydFNpemUud2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSB2aWV3cG9ydFNpemUuaGVpZ2h0O1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IG5ld0RpbWVuc2lvbnMud2lkdGggfHwgY3VycmVudFdpZHRoO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBuZXdEaW1lbnNpb25zLmhlaWdodCB8fCBjdXJyZW50SGVpZ2h0O1xuXG4gICAgICAgIGlmICghY29uZmlnLmhlYWRsZXNzKVxuICAgICAgICAgICAgYXdhaXQgcHJvdmlkZXJNZXRob2RzLnJlc2l6ZUxvY2FsQnJvd3NlcldpbmRvdyhicm93c2VySWQsIG5ld1dpZHRoLCBuZXdIZWlnaHQsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG5cbiAgICAgICAgdmlld3BvcnRTaXplLndpZHRoID0gbmV3V2lkdGg7XG4gICAgICAgIHZpZXdwb3J0U2l6ZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoY2xpZW50ICYmIGNvbmZpZy5lbXVsYXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldERldmljZU1ldHJpY3NPdmVycmlkZShjbGllbnQsIHZpZXdwb3J0U2l6ZS53aWR0aCwgdmlld3BvcnRTaXplLmhlaWdodCwgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvLCBjb25maWcubW9iaWxlKTtcblxuICAgICAgICAgICAgYXdhaXQgZ3VhcmRUaW1lRXhlY3V0aW9uKFxuICAgICAgICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2xpZW50LkVtdWxhdGlvbi5zZXRWaXNpYmxlU2l6ZSh7IHdpZHRoOiB2aWV3cG9ydFNpemUud2lkdGgsIGhlaWdodDogdmlld3BvcnRTaXplLmhlaWdodCB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lID0+IHRoaXMuX2NoZWNrRHJvcE9mUGVyZm9ybWFuY2UoQ2hlY2tlZENEUE1ldGhvZC5TZXRWaXNpYmxlU2l6ZSwgZWxhcHNlZFRpbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzSGVhZGxlc3NUYWIgKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9wYXJlbnRUYXJnZXQgJiYgdGhpcy5fY29uZmlnLmhlYWRsZXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBY3RpdmVDbGllbnQgKCk6IFByb21pc2U8cmVtb3RlQ2hyb21lLlByb3RvY29sQXBpIHwgdm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jbGllbnRzW3RoaXMuX2NsaWVudEtleV0pXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpZW50c1t0aGlzLl9jbGllbnRLZXldID0gYXdhaXQgdGhpcy5fY3JlYXRlQ2xpZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVidWdMb2coZXJyKTtcblxuICAgICAgICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRzW3RoaXMuX2NsaWVudEtleV07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGluaXQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdGFicyA9IGF3YWl0IHRoaXMuX2dldFRhYnMoKTtcblxuICAgICAgICAgICAgdGhpcy5fcGFyZW50VGFyZ2V0ID0gdGFicy5maW5kKHQgPT4gdC51cmwuaW5jbHVkZXModGhpcy5fcnVudGltZUluZm8uYnJvd3NlcklkKSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGFyZW50VGFyZ2V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NhbGN1bGF0ZUVtdWxhdGVkRGV2aWNlUGl4ZWxSYXRpbyhjbGllbnQpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldHVwQ2xpZW50KGNsaWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJveHlsZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luamVjdFByb3h5bGVzc1N0dWZmKGNsaWVudCk7XG4gICAgICAgICAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHQuaW5pdGlhbGl6ZShjbGllbnQpO1xuICAgICAgICAgICAgICAgICAgICBjbGllbnRzTWFuYWdlci5zZXRDbGllbnQoY2xpZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRTY3JlZW5zaG90RGF0YSAoZnVsbFBhZ2U/OiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgbGV0IHZpZXdwb3J0V2lkdGggID0gMDtcbiAgICAgICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gMDtcblxuICAgICAgICBjb25zdCB7IGNvbmZpZywgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvIH0gPSB0aGlzLl9ydW50aW1lSW5mbztcblxuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldEFjdGl2ZUNsaWVudCgpO1xuXG4gICAgICAgIGlmICghY2xpZW50KVxuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKTtcblxuICAgICAgICBpZiAoZnVsbFBhZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGVudFNpemUsIHZpc3VhbFZpZXdwb3J0IH0gPSBhd2FpdCBjbGllbnQuUGFnZS5nZXRMYXlvdXRNZXRyaWNzKCk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldERldmljZU1ldHJpY3NPdmVycmlkZShcbiAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKGNvbnRlbnRTaXplLndpZHRoKSxcbiAgICAgICAgICAgICAgICBNYXRoLmNlaWwoY29udGVudFNpemUuaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICBlbXVsYXRlZERldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgY29uZmlnLm1vYmlsZSk7XG5cbiAgICAgICAgICAgIHZpZXdwb3J0V2lkdGggPSB2aXN1YWxWaWV3cG9ydC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdERhdGEgPSBhd2FpdCBjbGllbnQuUGFnZS5jYXB0dXJlU2NyZWVuc2hvdCh7fSk7XG5cbiAgICAgICAgaWYgKGZ1bGxQYWdlKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmVtdWxhdGlvbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldERldmljZU1ldHJpY3NPdmVycmlkZShcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50LFxuICAgICAgICAgICAgICAgICAgICBjb25maWcud2lkdGggfHwgdmlld3BvcnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmhlaWdodCB8fCB2aWV3cG9ydEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgZW11bGF0ZWREZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBjb25maWcubW9iaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhd2FpdCBjbGllbnQuRW11bGF0aW9uLmNsZWFyRGV2aWNlTWV0cmljc092ZXJyaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oc2NyZWVuc2hvdERhdGEuZGF0YSwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbG9zZVRhYiAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRUYXJnZXQpXG4gICAgICAgICAgICBhd2FpdCByZW1vdGVDaHJvbWUuQ2xvc2UoeyBpZDogdGhpcy5fcGFyZW50VGFyZ2V0LmlkLCBwb3J0OiB0aGlzLl9ydW50aW1lSW5mby5jZHBQb3J0IH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGRhdGVNb2JpbGVWaWV3cG9ydFNpemUgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldEFjdGl2ZUNsaWVudCgpO1xuXG4gICAgICAgIGlmICghY2xpZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd0RpbWVuc2lvbnNRdWVyeVJlc3VsdCA9IGF3YWl0IHRoaXMuX2V2YWx1YXRlUnVudGltZShjbGllbnQsIGAoJHtHRVRfV0lORE9XX0RJTUVOU0lPTlNfSU5GT19TQ1JJUFR9KSgpYCwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3Qgd2luZG93RGltZW5zaW9ucyA9IHdpbmRvd0RpbWVuc2lvbnNRdWVyeVJlc3VsdC5yZXN1bHQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5fcnVudGltZUluZm8udmlld3BvcnRTaXplLndpZHRoID0gd2luZG93RGltZW5zaW9ucy5vdXRlcldpZHRoO1xuICAgICAgICB0aGlzLl9ydW50aW1lSW5mby52aWV3cG9ydFNpemUuaGVpZ2h0ID0gd2luZG93RGltZW5zaW9ucy5vdXRlckhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZUNsaWVudEZ1bmN0aW9uIChjb21tYW5kOiBFeGVjdXRlQ2xpZW50RnVuY3Rpb25Db21tYW5kLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldEFjdGl2ZUNsaWVudCgpO1xuXG4gICAgICAgIGlmICghY2xpZW50KVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IHRoZSBhY3RpdmUgYnJvd3NlciBjbGllbnQnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50RnVuY3Rpb25FeGVjdXRvci5leGVjdXRlQ2xpZW50RnVuY3Rpb24oY2xpZW50LlJ1bnRpbWUsIGNvbW1hbmQsIGNhbGxzaXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhlY3V0ZVNlbGVjdG9yIChjb21tYW5kOiBFeGVjdXRlU2VsZWN0b3JDb21tYW5kLCBjYWxsc2l0ZTogQ2FsbHNpdGVSZWNvcmQsIHNlbGVjdG9yVGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCB0aGUgYWN0aXZlIGJyb3dzZXIgY2xpZW50Jyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudEZ1bmN0aW9uRXhlY3V0b3IuZXhlY3V0ZVNlbGVjdG9yKHtcbiAgICAgICAgICAgIFJ1bnRpbWU6ICBjbGllbnQuUnVudGltZSxcbiAgICAgICAgICAgIGVyckN0b3JzOiB7XG4gICAgICAgICAgICAgICAgbm90Rm91bmQ6ICBTaGFyZWRFcnJvcnMuQ2Fubm90T2J0YWluSW5mb0ZvckVsZW1lbnRTcGVjaWZpZWRCeVNlbGVjdG9yRXJyb3IubmFtZSxcbiAgICAgICAgICAgICAgICBpbnZpc2libGU6IFNoYXJlZEVycm9ycy5DYW5ub3RPYnRhaW5JbmZvRm9yRWxlbWVudFNwZWNpZmllZEJ5U2VsZWN0b3JFcnJvci5uYW1lLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgY29tbWFuZCwgY2FsbHNpdGUsIHNlbGVjdG9yVGltZW91dCxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN3aXRjaFRvSWZyYW1lIChjb21tYW5kOiBTd2l0Y2hUb0lmcmFtZUNvbW1hbmQsIGNhbGxzaXRlOiBDYWxsc2l0ZVJlY29yZCwgc2VsZWN0b3JUaW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRBY3RpdmVDbGllbnQoKTtcblxuICAgICAgICBpZiAoIWNsaWVudClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGNvbW1hbmQuc2VsZWN0b3I7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3Rvci50aW1lb3V0ID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIHNlbGVjdG9yVGltZW91dCA9IHNlbGVjdG9yLnRpbWVvdXQ7XG5cbiAgICAgICAgc2VsZWN0b3IubmVlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBub2RlID0gYXdhaXQgdGhpcy5fY2xpZW50RnVuY3Rpb25FeGVjdXRvci5nZXROb2RlKHtcbiAgICAgICAgICAgIERPTTogICAgICBjbGllbnQuRE9NLFxuICAgICAgICAgICAgUnVudGltZTogIGNsaWVudC5SdW50aW1lLFxuICAgICAgICAgICAgY29tbWFuZDogIHNlbGVjdG9yLFxuICAgICAgICAgICAgZXJyQ3RvcnM6IHtcbiAgICAgICAgICAgICAgICBub3RGb3VuZDogIFNoYXJlZEVycm9ycy5BY3Rpb25FbGVtZW50Tm90Rm91bmRFcnJvci5uYW1lLFxuICAgICAgICAgICAgICAgIGludmlzaWJsZTogU2hhcmVkRXJyb3JzLkFjdGlvbkVsZW1lbnRJc0ludmlzaWJsZUVycm9yLm5hbWUsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjYWxsc2l0ZSwgc2VsZWN0b3JUaW1lb3V0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW5vZGUuZnJhbWVJZClcbiAgICAgICAgICAgIHRocm93IG5ldyBTaGFyZWRFcnJvcnMuQWN0aW9uRWxlbWVudE5vdElmcmFtZUVycm9yKGNhbGxzaXRlKTtcblxuICAgICAgICBFeGVjdXRpb25Db250ZXh0LnN3aXRjaFRvSWZyYW1lKG5vZGUuZnJhbWVJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN3aXRjaFRvTWFpbldpbmRvdyAoKTogdm9pZCB7XG4gICAgICAgIEV4ZWN1dGlvbkNvbnRleHQuc3dpdGNoVG9NYWluV2luZG93KCk7XG4gICAgfVxufVxuIl19
|
package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const execution_context_1 = __importDefault(require("./execution-context"));
|
|
7
|
+
const clients_manager_1 = require("./clients-manager");
|
|
8
|
+
const adapter_1 = require("../../../../../../shared/adapter");
|
|
9
|
+
adapter_1.initializeAdapter({
|
|
10
|
+
PromiseCtor: Promise,
|
|
11
|
+
nativeMethods: {
|
|
12
|
+
setTimeout,
|
|
13
|
+
clearTimeout,
|
|
14
|
+
arrayIndexOf: Array.prototype.indexOf,
|
|
15
|
+
arraySplice: Array.prototype.splice,
|
|
16
|
+
arraySlice: Array.prototype.slice,
|
|
17
|
+
arrayFilter: Array.prototype.filter,
|
|
18
|
+
objectAssign: Object.assign,
|
|
19
|
+
objectKeys: Object.keys,
|
|
20
|
+
dateNow: Date.now,
|
|
21
|
+
},
|
|
22
|
+
isDomElement: () => false,
|
|
23
|
+
scroll: async (el, opts) => {
|
|
24
|
+
let currCxt = execution_context_1.default.current;
|
|
25
|
+
let result = null;
|
|
26
|
+
let margin = void 0;
|
|
27
|
+
do {
|
|
28
|
+
const { exceptionDetails, result: resultObj } = await clients_manager_1.getClient().Runtime.callFunctionOn({
|
|
29
|
+
returnByValue: true,
|
|
30
|
+
awaitPromise: true,
|
|
31
|
+
executionContextId: execution_context_1.default.getCurrentContextId(),
|
|
32
|
+
arguments: [{ objectId: el.objectId }, { value: opts }, { value: margin }],
|
|
33
|
+
functionDeclaration: `function (el, opts) {
|
|
34
|
+
return window["%proxyless%"].scroll(el, opts);
|
|
35
|
+
}`,
|
|
36
|
+
});
|
|
37
|
+
if (exceptionDetails)
|
|
38
|
+
throw exceptionDetails;
|
|
39
|
+
const scrollResult = resultObj.value;
|
|
40
|
+
if (currCxt && currCxt !== currCxt.parent) {
|
|
41
|
+
// TODO:
|
|
42
|
+
//el = findIframeByWindow(currCxt);
|
|
43
|
+
currCxt = currCxt.parent;
|
|
44
|
+
result = result !== null && result !== void 0 ? result : scrollResult.scrollWasPerformed;
|
|
45
|
+
margin = scrollResult.maxScrollMargin;
|
|
46
|
+
opts.offsetX = scrollResult.offsetX;
|
|
47
|
+
opts.offsetY = scrollResult.offsetY;
|
|
48
|
+
}
|
|
49
|
+
} while (currCxt && currCxt !== currCxt.parent);
|
|
50
|
+
return result;
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWFkYXB0ZXItaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2NkcC1jbGllbnQvc2hhcmVkLWFkYXB0ZXItaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RUFBbUQ7QUFHbkQsdURBQThDO0FBQzlDLDhEQUFxRTtBQUtyRSwyQkFBaUIsQ0FBQztJQUNkLFdBQVcsRUFBRSxPQUFPO0lBRXBCLGFBQWEsRUFBRTtRQUNYLFVBQVU7UUFDVixZQUFZO1FBQ1osWUFBWSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTztRQUNyQyxXQUFXLEVBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNO1FBQ3BDLFVBQVUsRUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUs7UUFDbkMsV0FBVyxFQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTTtRQUNwQyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDM0IsVUFBVSxFQUFJLE1BQU0sQ0FBQyxJQUFJO1FBQ3pCLE9BQU8sRUFBTyxJQUFJLENBQUMsR0FBRztLQUN6QjtJQUVELFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLO0lBRXpCLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBYyxFQUFFLElBQW1CLEVBQUUsRUFBRTtRQUNsRCxJQUFJLE9BQU8sR0FBRywyQkFBZ0IsQ0FBQyxPQUFrQyxDQUFDO1FBQ2xFLElBQUksTUFBTSxHQUFJLElBQXNCLENBQUM7UUFDckMsSUFBSSxNQUFNLEdBQUksS0FBSyxDQUFzQyxDQUFDO1FBRTFELEdBQUc7WUFDQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sMkJBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7Z0JBQ3JGLGFBQWEsRUFBUSxJQUFJO2dCQUN6QixZQUFZLEVBQVMsSUFBSTtnQkFDekIsa0JBQWtCLEVBQUcsMkJBQWdCLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzNELFNBQVMsRUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDcEYsbUJBQW1CLEVBQUU7O2tCQUVuQjthQUNMLENBQUMsQ0FBQztZQUVILElBQUksZ0JBQWdCO2dCQUNoQixNQUFNLGdCQUFnQixDQUFDO1lBRTNCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUE4QixDQUFDO1lBRTlELElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUN2QyxRQUFRO2dCQUNSLDZDQUE2QztnQkFDN0MsT0FBTyxHQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQzlCLE1BQU0sR0FBUyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxZQUFZLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3pELE1BQU0sR0FBUyxZQUFZLENBQUMsZUFBZSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQzthQUN2QztTQUVKLFFBQ00sT0FBTyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBRTlDLE9BQU8sTUFBaUIsQ0FBQztJQUM3QixDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4ZWN1dGlvbkNvbnRleHQgZnJvbSAnLi9leGVjdXRpb24tY29udGV4dCc7XG5pbXBvcnQgeyBTZXJ2ZXJOb2RlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTY3JvbGxPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb3B0aW9ucyc7XG5pbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuL2NsaWVudHMtbWFuYWdlcic7XG5pbXBvcnQgeyBpbml0aWFsaXplQWRhcHRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9hZGFwdGVyJztcbmltcG9ydCB7IExlZnRUb3BWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsdWVzL2F4aXMtdmFsdWVzJztcbmltcG9ydCB7IFNjcm9sbFJlc3VsdFByb3h5bGVzcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2NsaWVudC9jb3JlL3Njcm9sbCc7XG5cblxuaW5pdGlhbGl6ZUFkYXB0ZXIoe1xuICAgIFByb21pc2VDdG9yOiBQcm9taXNlLFxuXG4gICAgbmF0aXZlTWV0aG9kczoge1xuICAgICAgICBzZXRUaW1lb3V0LFxuICAgICAgICBjbGVhclRpbWVvdXQsXG4gICAgICAgIGFycmF5SW5kZXhPZjogQXJyYXkucHJvdG90eXBlLmluZGV4T2YsXG4gICAgICAgIGFycmF5U3BsaWNlOiAgQXJyYXkucHJvdG90eXBlLnNwbGljZSxcbiAgICAgICAgYXJyYXlTbGljZTogICBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIGFycmF5RmlsdGVyOiAgQXJyYXkucHJvdG90eXBlLmZpbHRlcixcbiAgICAgICAgb2JqZWN0QXNzaWduOiBPYmplY3QuYXNzaWduLFxuICAgICAgICBvYmplY3RLZXlzOiAgIE9iamVjdC5rZXlzLFxuICAgICAgICBkYXRlTm93OiAgICAgIERhdGUubm93LFxuICAgIH0sXG5cbiAgICBpc0RvbUVsZW1lbnQ6ICgpID0+IGZhbHNlLFxuXG4gICAgc2Nyb2xsOiBhc3luYyAoZWw6IFNlcnZlck5vZGUsIG9wdHM6IFNjcm9sbE9wdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IGN1cnJDeHQgPSBFeGVjdXRpb25Db250ZXh0LmN1cnJlbnQgYXMgRXhlY3V0aW9uQ29udGV4dCB8IG51bGw7XG4gICAgICAgIGxldCByZXN1bHQgID0gbnVsbCBhcyBib29sZWFuIHwgbnVsbDtcbiAgICAgICAgbGV0IG1hcmdpbiAgPSB2b2lkIDAgYXMgdW5kZWZpbmVkIHwgTGVmdFRvcFZhbHVlczxudW1iZXI+O1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXhjZXB0aW9uRGV0YWlscywgcmVzdWx0OiByZXN1bHRPYmogfSA9IGF3YWl0IGdldENsaWVudCgpLlJ1bnRpbWUuY2FsbEZ1bmN0aW9uT24oe1xuICAgICAgICAgICAgICAgIHJldHVybkJ5VmFsdWU6ICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgYXdhaXRQcm9taXNlOiAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0SWQ6ICBFeGVjdXRpb25Db250ZXh0LmdldEN1cnJlbnRDb250ZXh0SWQoKSxcbiAgICAgICAgICAgICAgICBhcmd1bWVudHM6ICAgICAgICAgICBbeyBvYmplY3RJZDogZWwub2JqZWN0SWQgfSwgeyB2YWx1ZTogb3B0cyB9LCB7IHZhbHVlOiBtYXJnaW4gfV0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbjogYGZ1bmN0aW9uIChlbCwgb3B0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93W1wiJXByb3h5bGVzcyVcIl0uc2Nyb2xsKGVsLCBvcHRzKTtcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscylcbiAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxSZXN1bHQgPSByZXN1bHRPYmoudmFsdWUgYXMgU2Nyb2xsUmVzdWx0UHJveHlsZXNzO1xuXG4gICAgICAgICAgICBpZiAoY3VyckN4dCAmJiBjdXJyQ3h0ICE9PSBjdXJyQ3h0LnBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86XG4gICAgICAgICAgICAgICAgLy9lbCAgICAgICAgICAgPSBmaW5kSWZyYW1lQnlXaW5kb3coY3VyckN4dCk7XG4gICAgICAgICAgICAgICAgY3VyckN4dCAgICAgID0gY3VyckN4dC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICAgICAgID0gcmVzdWx0ID8/IHNjcm9sbFJlc3VsdC5zY3JvbGxXYXNQZXJmb3JtZWQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luICAgICAgID0gc2Nyb2xsUmVzdWx0Lm1heFNjcm9sbE1hcmdpbjtcbiAgICAgICAgICAgICAgICBvcHRzLm9mZnNldFggPSBzY3JvbGxSZXN1bHQub2Zmc2V0WDtcbiAgICAgICAgICAgICAgICBvcHRzLm9mZnNldFkgPSBzY3JvbGxSZXN1bHQub2Zmc2V0WTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjdXJyQ3h0ICYmIGN1cnJDeHQgIT09IGN1cnJDeHQucGFyZW50KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0IGFzIGJvb2xlYW47XG4gICAgfSxcbn0pO1xuIl19
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.CursorUICdp = exports.CursorState = void 0;
|
|
26
|
+
const clientsManager = __importStar(require("../clients-manager"));
|
|
27
|
+
const axis_values_1 = __importDefault(require("../../../../../../../shared/utils/values/axis-values"));
|
|
28
|
+
const DEFAULT_COLOR = { r: 50, g: 50, b: 50, a: 0.5 };
|
|
29
|
+
const LEFT_BUTTON_DOWN_COLOR = { r: 200, g: 50, b: 50, a: 0.5 };
|
|
30
|
+
const RIGHT_BUTTON_DOWN_COLOR = { r: 50, g: 200, b: 50, a: 0.5 };
|
|
31
|
+
const CURSOR_RECT = {
|
|
32
|
+
width: 20,
|
|
33
|
+
height: 20,
|
|
34
|
+
};
|
|
35
|
+
const HIGHTLIGHT_CONFIG = {
|
|
36
|
+
showInfo: true,
|
|
37
|
+
showStyles: true,
|
|
38
|
+
showRulers: true,
|
|
39
|
+
showExtensionLines: true,
|
|
40
|
+
eventTargetColor: DEFAULT_COLOR,
|
|
41
|
+
};
|
|
42
|
+
var CursorState;
|
|
43
|
+
(function (CursorState) {
|
|
44
|
+
CursorState[CursorState["default"] = 0] = "default";
|
|
45
|
+
CursorState[CursorState["leftButtonDown"] = 1] = "leftButtonDown";
|
|
46
|
+
CursorState[CursorState["rightButtonDown"] = 2] = "rightButtonDown";
|
|
47
|
+
})(CursorState = exports.CursorState || (exports.CursorState = {}));
|
|
48
|
+
class CursorUICdp {
|
|
49
|
+
constructor() {
|
|
50
|
+
this._position = new axis_values_1.default(0, 0);
|
|
51
|
+
this._visible = false;
|
|
52
|
+
this._state = CursorState.default;
|
|
53
|
+
}
|
|
54
|
+
get currentColor() {
|
|
55
|
+
if (this._state === CursorState.leftButtonDown)
|
|
56
|
+
return LEFT_BUTTON_DOWN_COLOR;
|
|
57
|
+
if (this._state === CursorState.rightButtonDown)
|
|
58
|
+
return RIGHT_BUTTON_DOWN_COLOR;
|
|
59
|
+
return DEFAULT_COLOR;
|
|
60
|
+
}
|
|
61
|
+
get overlay() {
|
|
62
|
+
return clientsManager.getClient().Overlay;
|
|
63
|
+
}
|
|
64
|
+
get DOM() {
|
|
65
|
+
return clientsManager.getClient().DOM;
|
|
66
|
+
}
|
|
67
|
+
isVisible() {
|
|
68
|
+
return this._visible;
|
|
69
|
+
}
|
|
70
|
+
async move(position) {
|
|
71
|
+
this._position = position;
|
|
72
|
+
if (this.isVisible())
|
|
73
|
+
await this.show();
|
|
74
|
+
}
|
|
75
|
+
async hide() {
|
|
76
|
+
this._visible = false;
|
|
77
|
+
await this.overlay.hideHighlight();
|
|
78
|
+
}
|
|
79
|
+
async show() {
|
|
80
|
+
this._visible = true;
|
|
81
|
+
if (this._state === CursorState.default)
|
|
82
|
+
await this.overlay.highlightRect(Object.assign({}, CURSOR_RECT, { color: this.currentColor }, this._position));
|
|
83
|
+
else {
|
|
84
|
+
const nodeForLocation = await this.DOM.getNodeForLocation(this._position);
|
|
85
|
+
const config = { highlightConfig: Object.assign({ contentColor: this.currentColor }, HIGHTLIGHT_CONFIG) };
|
|
86
|
+
await this.overlay.highlightNode(Object.assign(nodeForLocation, config));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async leftButtonDown() {
|
|
90
|
+
this._state = CursorState.leftButtonDown;
|
|
91
|
+
await this.show();
|
|
92
|
+
}
|
|
93
|
+
async rightButtonDown() {
|
|
94
|
+
this._state = CursorState.rightButtonDown;
|
|
95
|
+
await this.show();
|
|
96
|
+
}
|
|
97
|
+
async buttonUp() {
|
|
98
|
+
this._state = CursorState.default;
|
|
99
|
+
await this.show();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.CursorUICdp = CursorUICdp;
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2Nocm9tZS9jZHAtY2xpZW50L3V0aWxzL2N1cnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsbUVBQXFEO0FBQ3JELHVHQUFrRztBQUdsRyxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRSxNQUFNLHNCQUFzQixHQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pFLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFakUsTUFBTSxXQUFXLEdBQUc7SUFDaEIsS0FBSyxFQUFHLEVBQUU7SUFDVixNQUFNLEVBQUUsRUFBRTtDQUNiLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFxQztJQUN4RCxRQUFRLEVBQVksSUFBSTtJQUN4QixVQUFVLEVBQVUsSUFBSTtJQUN4QixVQUFVLEVBQVUsSUFBSTtJQUN4QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLGdCQUFnQixFQUFJLGFBQWE7Q0FDcEMsQ0FBQztBQUVGLElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNuQixtREFBTyxDQUFBO0lBQ1AsaUVBQWMsQ0FBQTtJQUNkLG1FQUFlLENBQUE7QUFDbkIsQ0FBQyxFQUpXLFdBQVcsR0FBWCxtQkFBVyxLQUFY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LXByb3RvY29sL3R5cGVzL3Byb3RvY29sJztcbmltcG9ydCBQcm90b2NvbFByb3h5QXBpIGZyb20gJ2RldnRvb2xzLXByb3RvY29sL3R5cGVzL3Byb3RvY29sLXByb3h5LWFwaSc7XG5pbXBvcnQgKiBhcyBjbGllbnRzTWFuYWdlciBmcm9tICcuLi9jbGllbnRzLW1hbmFnZXInO1xuaW1wb3J0IEF4aXNWYWx1ZXMsIHsgQXhpc1ZhbHVlc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsdWVzL2F4aXMtdmFsdWVzJztcbmltcG9ydCB7IEN1cnNvclVJIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2FjdGlvbnMvdHlwZXMnO1xuXG5jb25zdCBERUZBVUxUX0NPTE9SICAgICAgICAgICA9IHsgcjogNTAsIGc6IDUwLCBiOiA1MCwgYTogMC41IH07XG5jb25zdCBMRUZUX0JVVFRPTl9ET1dOX0NPTE9SICA9IHsgcjogMjAwLCBnOiA1MCwgYjogNTAsIGE6IDAuNSB9O1xuY29uc3QgUklHSFRfQlVUVE9OX0RPV05fQ09MT1IgPSB7IHI6IDUwLCBnOiAyMDAsIGI6IDUwLCBhOiAwLjUgfTtcblxuY29uc3QgQ1VSU09SX1JFQ1QgPSB7XG4gICAgd2lkdGg6ICAyMCxcbiAgICBoZWlnaHQ6IDIwLFxufTtcblxuY29uc3QgSElHSFRMSUdIVF9DT05GSUc6IFByb3RvY29sLk92ZXJsYXkuSGlnaGxpZ2h0Q29uZmlnID0ge1xuICAgIHNob3dJbmZvOiAgICAgICAgICAgdHJ1ZSxcbiAgICBzaG93U3R5bGVzOiAgICAgICAgIHRydWUsXG4gICAgc2hvd1J1bGVyczogICAgICAgICB0cnVlLFxuICAgIHNob3dFeHRlbnNpb25MaW5lczogdHJ1ZSxcbiAgICBldmVudFRhcmdldENvbG9yOiAgIERFRkFVTFRfQ09MT1IsXG59O1xuXG5leHBvcnQgZW51bSBDdXJzb3JTdGF0ZSB7XG4gICAgZGVmYXVsdCxcbiAgICBsZWZ0QnV0dG9uRG93bixcbiAgICByaWdodEJ1dHRvbkRvd24sXG59XG5cbmV4cG9ydCBjbGFzcyBDdXJzb3JVSUNkcCBpbXBsZW1lbnRzIEN1cnNvclVJIHtcbiAgICBwcml2YXRlIF9wb3NpdGlvbjogQXhpc1ZhbHVlc0RhdGE8bnVtYmVyPjtcbiAgICBwcml2YXRlIF92aXNpYmxlOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3N0YXRlOiBDdXJzb3JTdGF0ZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gbmV3IEF4aXNWYWx1ZXM8bnVtYmVyPigwLCAwKTtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGUgICAgPSBDdXJzb3JTdGF0ZS5kZWZhdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGN1cnJlbnRDb2xvciAoKTogUHJvdG9jb2wuRE9NLlJHQkEge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09IEN1cnNvclN0YXRlLmxlZnRCdXR0b25Eb3duKVxuICAgICAgICAgICAgcmV0dXJuIExFRlRfQlVUVE9OX0RPV05fQ09MT1I7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gQ3Vyc29yU3RhdGUucmlnaHRCdXR0b25Eb3duKVxuICAgICAgICAgICAgcmV0dXJuIFJJR0hUX0JVVFRPTl9ET1dOX0NPTE9SO1xuICAgICAgICByZXR1cm4gREVGQVVMVF9DT0xPUjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBvdmVybGF5ICgpOiBQcm90b2NvbFByb3h5QXBpLk92ZXJsYXlBcGkge1xuICAgICAgICByZXR1cm4gY2xpZW50c01hbmFnZXIuZ2V0Q2xpZW50KCkuT3ZlcmxheTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBET00gKCk6IFByb3RvY29sUHJveHlBcGkuRE9NQXBpIHtcbiAgICAgICAgcmV0dXJuIGNsaWVudHNNYW5hZ2VyLmdldENsaWVudCgpLkRPTTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNWaXNpYmxlICgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG1vdmUgKHBvc2l0aW9uOiBBeGlzVmFsdWVzRGF0YTxudW1iZXI+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gcG9zaXRpb247XG5cbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKCkpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGlkZSAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX3Zpc2libGUgPSBmYWxzZTtcblxuICAgICAgICBhd2FpdCB0aGlzLm92ZXJsYXkuaGlkZUhpZ2hsaWdodCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzaG93ICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBDdXJzb3JTdGF0ZS5kZWZhdWx0KVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5vdmVybGF5LmhpZ2hsaWdodFJlY3QoT2JqZWN0LmFzc2lnbih7IH0sIENVUlNPUl9SRUNULCB7IGNvbG9yOiB0aGlzLmN1cnJlbnRDb2xvciB9LCB0aGlzLl9wb3NpdGlvbikpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVGb3JMb2NhdGlvbiA9IGF3YWl0IHRoaXMuRE9NLmdldE5vZGVGb3JMb2NhdGlvbih0aGlzLl9wb3NpdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgICAgICAgICAgPSB7IGhpZ2hsaWdodENvbmZpZzogT2JqZWN0LmFzc2lnbih7IGNvbnRlbnRDb2xvcjogdGhpcy5jdXJyZW50Q29sb3IgfSwgSElHSFRMSUdIVF9DT05GSUcpIH07XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMub3ZlcmxheS5oaWdobGlnaHROb2RlKE9iamVjdC5hc3NpZ24obm9kZUZvckxvY2F0aW9uLCBjb25maWcgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbGVmdEJ1dHRvbkRvd24gKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IEN1cnNvclN0YXRlLmxlZnRCdXR0b25Eb3duO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuc2hvdygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByaWdodEJ1dHRvbkRvd24gKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IEN1cnNvclN0YXRlLnJpZ2h0QnV0dG9uRG93bjtcblxuICAgICAgICBhd2FpdCB0aGlzLnNob3coKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYnV0dG9uVXAgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9zdGF0ZSA9IEN1cnNvclN0YXRlLmRlZmF1bHQ7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5zaG93KCk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.getScrollingElement = exports.isBodyElement = exports.isHtmlElement = exports.findIframeByWindow = exports.getIFrameByIndex = exports.getIframeByElement = void 0;
|
|
26
|
+
const execution_context_1 = __importDefault(require("../execution-context"));
|
|
27
|
+
const index_1 = require("./index");
|
|
28
|
+
const clientsManager = __importStar(require("../clients-manager"));
|
|
29
|
+
async function getIframeByElement({ objectId }) {
|
|
30
|
+
const { Runtime, DOM } = clientsManager.getClient();
|
|
31
|
+
const frame = await Runtime.callFunctionOn({
|
|
32
|
+
functionDeclaration: `function () {
|
|
33
|
+
return this.ownerDocument.defaultView.frameElement
|
|
34
|
+
}`,
|
|
35
|
+
objectId,
|
|
36
|
+
});
|
|
37
|
+
if (frame.result.value !== null)
|
|
38
|
+
return index_1.describeNode(DOM, frame.result.objectId || '');
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
exports.getIframeByElement = getIframeByElement;
|
|
42
|
+
async function getIFrameByIndex(objectId, index) {
|
|
43
|
+
const { Runtime, DOM } = clientsManager.getClient();
|
|
44
|
+
const frame = await Runtime.callFunctionOn({
|
|
45
|
+
functionDeclaration: `function (index) {
|
|
46
|
+
return this[index];
|
|
47
|
+
}`,
|
|
48
|
+
objectId: objectId,
|
|
49
|
+
arguments: [{ value: index }],
|
|
50
|
+
});
|
|
51
|
+
const frameObjectId = frame.result.objectId;
|
|
52
|
+
if (frameObjectId)
|
|
53
|
+
return index_1.describeNode(DOM, frameObjectId);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
exports.getIFrameByIndex = getIFrameByIndex;
|
|
57
|
+
async function findIframeByWindow(context) {
|
|
58
|
+
const { Runtime } = clientsManager.getClient();
|
|
59
|
+
const expression = `
|
|
60
|
+
(function findIframes(parentDocument, result = []) {
|
|
61
|
+
if (!parentDocument)
|
|
62
|
+
return [];
|
|
63
|
+
|
|
64
|
+
const children = parentDocument.querySelectorAll('iframe');
|
|
65
|
+
|
|
66
|
+
for (const child of children) {
|
|
67
|
+
result.push(child, ...findIframes(child.contentDocument));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return result;
|
|
71
|
+
})(document);
|
|
72
|
+
`;
|
|
73
|
+
const frames = await Runtime.evaluate({ expression });
|
|
74
|
+
let index = 0;
|
|
75
|
+
let frame = await getIFrameByIndex(frames.result.objectId, index);
|
|
76
|
+
while (frame) {
|
|
77
|
+
if (context.frameId === frame.frameId)
|
|
78
|
+
return frame;
|
|
79
|
+
index++;
|
|
80
|
+
frame = await getIFrameByIndex(frames.result.objectId, index);
|
|
81
|
+
}
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
exports.findIframeByWindow = findIframeByWindow;
|
|
85
|
+
function hasTagName(node, tagName) {
|
|
86
|
+
return node.nodeName.toLowerCase() === tagName.toLowerCase();
|
|
87
|
+
}
|
|
88
|
+
function isHtmlElement(node) {
|
|
89
|
+
return hasTagName(node, 'html');
|
|
90
|
+
}
|
|
91
|
+
exports.isHtmlElement = isHtmlElement;
|
|
92
|
+
function isBodyElement(node) {
|
|
93
|
+
return hasTagName(node, 'body');
|
|
94
|
+
}
|
|
95
|
+
exports.isBodyElement = isBodyElement;
|
|
96
|
+
async function getScrollingElement(node) {
|
|
97
|
+
const client = clientsManager.getClient();
|
|
98
|
+
const args = {
|
|
99
|
+
functionDeclaration: `function () {
|
|
100
|
+
const doc = this !== window ? this.ownerDocument : document;
|
|
101
|
+
|
|
102
|
+
return doc.scrollingElement;
|
|
103
|
+
}`,
|
|
104
|
+
};
|
|
105
|
+
if (node)
|
|
106
|
+
args.objectId = node.objectId;
|
|
107
|
+
else
|
|
108
|
+
args.executionContextId = execution_context_1.default.top.ctxId;
|
|
109
|
+
const { result } = await client.Runtime.callFunctionOn(args);
|
|
110
|
+
return index_1.describeNode(client.DOM, result.objectId || '');
|
|
111
|
+
}
|
|
112
|
+
exports.getScrollingElement = getScrollingElement;
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Jyb3dzZXIvcHJvdmlkZXIvYnVpbHQtaW4vZGVkaWNhdGVkL2Nocm9tZS9jZHAtY2xpZW50L3V0aWxzL2RvbS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsNkVBQW9EO0FBQ3BELG1DQUF1QztBQUN2QyxtRUFBcUQ7QUFHOUMsS0FBSyxVQUFVLGtCQUFrQixDQUFFLEVBQUUsUUFBUSxFQUFjO0lBQzlELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRXBELE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUN2QyxtQkFBbUIsRUFBRTs7VUFFbkI7UUFDRixRQUFRO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJO1FBQzNCLE9BQU8sb0JBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQWRELGdEQWNDO0FBRU0sS0FBSyxVQUFVLGdCQUFnQixDQUFFLFFBQTRCLEVBQUUsS0FBYTtJQUMvRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUVwRCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDdkMsbUJBQW1CLEVBQUU7O2NBRWY7UUFDTixRQUFRLEVBQUcsUUFBUTtRQUNuQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUNoQyxDQUFDLENBQUM7SUFFSCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztJQUU1QyxJQUFJLGFBQWE7UUFDYixPQUFPLG9CQUFZLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFqQkQsNENBaUJDO0FBRU0sS0FBSyxVQUFVLGtCQUFrQixDQUFFLE9BQXlCO0lBQy9ELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7SUFFL0MsTUFBTSxVQUFVLEdBQUc7Ozs7Ozs7Ozs7Ozs7SUFhbkIsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEQsSUFBSSxLQUFLLEdBQU0sQ0FBQyxDQUFDO0lBQ2pCLElBQUksS0FBSyxHQUFNLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFckUsT0FBTyxLQUFLLEVBQUU7UUFDVixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87WUFDakMsT0FBTyxLQUFLLENBQUM7UUFFakIsS0FBSyxFQUFFLENBQUM7UUFFUixLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNqRTtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFoQ0QsZ0RBZ0NDO0FBRUQsU0FBUyxVQUFVLENBQUUsSUFBZ0IsRUFBRSxPQUFlO0lBQ2xELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQWdCLGFBQWEsQ0FBRSxJQUFnQjtJQUMzQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUZELHNDQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFFLElBQWdCO0lBQzNDLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQUUsSUFBaUI7SUFDeEQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRTFDLE1BQU0sSUFBSSxHQUEyQztRQUNqRCxtQkFBbUIsRUFBRTs7OztVQUluQjtLQUNMLENBQUM7SUFFRixJQUFJLElBQUk7UUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7O1FBRTlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRywyQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0lBRXpELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdELE9BQU8sb0JBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQW5CRCxrREFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUHJvdG9jb2wgZnJvbSAnZGV2dG9vbHMtcHJvdG9jb2wvdHlwZXMvcHJvdG9jb2wnO1xuaW1wb3J0IEV4ZWN1dGlvbkNvbnRleHQgZnJvbSAnLi4vZXhlY3V0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgZGVzY3JpYmVOb2RlIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgKiBhcyBjbGllbnRzTWFuYWdlciBmcm9tICcuLi9jbGllbnRzLW1hbmFnZXInO1xuaW1wb3J0IHsgU2VydmVyTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElmcmFtZUJ5RWxlbWVudCAoeyBvYmplY3RJZCB9OiBTZXJ2ZXJOb2RlKTogUHJvbWlzZTxTZXJ2ZXJOb2RlIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgUnVudGltZSwgRE9NIH0gPSBjbGllbnRzTWFuYWdlci5nZXRDbGllbnQoKTtcblxuICAgIGNvbnN0IGZyYW1lID0gYXdhaXQgUnVudGltZS5jYWxsRnVuY3Rpb25Pbih7XG4gICAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb246IGBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmZyYW1lRWxlbWVudFxuICAgICAgICB9YCxcbiAgICAgICAgb2JqZWN0SWQsXG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWUucmVzdWx0LnZhbHVlICE9PSBudWxsKVxuICAgICAgICByZXR1cm4gZGVzY3JpYmVOb2RlKERPTSwgZnJhbWUucmVzdWx0Lm9iamVjdElkIHx8ICcnKTtcblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SUZyYW1lQnlJbmRleCAob2JqZWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8U2VydmVyTm9kZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IFJ1bnRpbWUsIERPTSB9ID0gY2xpZW50c01hbmFnZXIuZ2V0Q2xpZW50KCk7XG5cbiAgICBjb25zdCBmcmFtZSA9IGF3YWl0IFJ1bnRpbWUuY2FsbEZ1bmN0aW9uT24oe1xuICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uOiBgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbaW5kZXhdO1xuICAgICAgICAgICAgfWAsXG4gICAgICAgIG9iamVjdElkOiAgb2JqZWN0SWQsXG4gICAgICAgIGFyZ3VtZW50czogW3sgdmFsdWU6IGluZGV4IH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZnJhbWVPYmplY3RJZCA9IGZyYW1lLnJlc3VsdC5vYmplY3RJZDtcblxuICAgIGlmIChmcmFtZU9iamVjdElkKVxuICAgICAgICByZXR1cm4gZGVzY3JpYmVOb2RlKERPTSwgZnJhbWVPYmplY3RJZCk7XG5cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRJZnJhbWVCeVdpbmRvdyAoY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCk6IFByb21pc2U8U2VydmVyTm9kZSB8IG51bGw+IHtcbiAgICBjb25zdCB7IFJ1bnRpbWUgfSA9IGNsaWVudHNNYW5hZ2VyLmdldENsaWVudCgpO1xuXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGBcbiAgICAgICAgKGZ1bmN0aW9uIGZpbmRJZnJhbWVzKHBhcmVudERvY3VtZW50LCByZXN1bHQgPSBbXSkge1xuICAgICAgICAgICAgaWYgKCFwYXJlbnREb2N1bWVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIFxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnREb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTtcbiAgICAgICAgXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQsIC4uLmZpbmRJZnJhbWVzKGNoaWxkLmNvbnRlbnREb2N1bWVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pKGRvY3VtZW50KTtcbiAgIGA7XG5cbiAgICBjb25zdCBmcmFtZXMgPSBhd2FpdCBSdW50aW1lLmV2YWx1YXRlKHsgZXhwcmVzc2lvbiB9KTtcbiAgICBsZXQgaW5kZXggICAgPSAwO1xuICAgIGxldCBmcmFtZSAgICA9IGF3YWl0IGdldElGcmFtZUJ5SW5kZXgoZnJhbWVzLnJlc3VsdC5vYmplY3RJZCwgaW5kZXgpO1xuXG4gICAgd2hpbGUgKGZyYW1lKSB7XG4gICAgICAgIGlmIChjb250ZXh0LmZyYW1lSWQgPT09IGZyYW1lLmZyYW1lSWQpXG4gICAgICAgICAgICByZXR1cm4gZnJhbWU7XG5cbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBmcmFtZSA9IGF3YWl0IGdldElGcmFtZUJ5SW5kZXgoZnJhbWVzLnJlc3VsdC5vYmplY3RJZCwgaW5kZXgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoYXNUYWdOYW1lIChub2RlOiBTZXJ2ZXJOb2RlLCB0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0h0bWxFbGVtZW50IChub2RlOiBTZXJ2ZXJOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGhhc1RhZ05hbWUobm9kZSwgJ2h0bWwnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9keUVsZW1lbnQgKG5vZGU6IFNlcnZlck5vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaGFzVGFnTmFtZShub2RlLCAnYm9keScpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2Nyb2xsaW5nRWxlbWVudCAobm9kZT86IFNlcnZlck5vZGUpOiBQcm9taXNlPFNlcnZlck5vZGU+IHtcbiAgICBjb25zdCBjbGllbnQgPSBjbGllbnRzTWFuYWdlci5nZXRDbGllbnQoKTtcblxuICAgIGNvbnN0IGFyZ3M6IFByb3RvY29sLlJ1bnRpbWUuQ2FsbEZ1bmN0aW9uT25SZXF1ZXN0ID0ge1xuICAgICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uOiBgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcyAhPT0gd2luZG93ID8gdGhpcy5vd25lckRvY3VtZW50IDogZG9jdW1lbnQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiBkb2Muc2Nyb2xsaW5nRWxlbWVudDtcbiAgICAgICAgfWAsXG4gICAgfTtcblxuICAgIGlmIChub2RlKVxuICAgICAgICBhcmdzLm9iamVjdElkID0gbm9kZS5vYmplY3RJZDtcbiAgICBlbHNlXG4gICAgICAgIGFyZ3MuZXhlY3V0aW9uQ29udGV4dElkID0gRXhlY3V0aW9uQ29udGV4dC50b3AuY3R4SWQ7XG5cbiAgICBjb25zdCB7IHJlc3VsdCB9ID0gYXdhaXQgY2xpZW50LlJ1bnRpbWUuY2FsbEZ1bmN0aW9uT24oYXJncyk7XG5cbiAgICByZXR1cm4gZGVzY3JpYmVOb2RlKGNsaWVudC5ET00sIHJlc3VsdC5vYmplY3RJZCB8fCAnJyk7XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.describeNode = void 0;
|
|
4
|
+
async function describeNode(DOM, objectId) {
|
|
5
|
+
const object = { objectId };
|
|
6
|
+
const { node } = await DOM.describeNode(object);
|
|
7
|
+
return Object.assign(node, object);
|
|
8
|
+
}
|
|
9
|
+
exports.describeNode = describeNode;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2NkcC1jbGllbnQvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR08sS0FBSyxVQUFVLFlBQVksQ0FBRSxHQUE0QixFQUFFLFFBQWdCO0lBQzlFLE1BQU0sTUFBTSxHQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFMRCxvQ0FLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQcm90b2NvbFByb3h5QXBpIGZyb20gJ2RldnRvb2xzLXByb3RvY29sL3R5cGVzL3Byb3RvY29sLXByb3h5LWFwaSc7XG5pbXBvcnQgeyBTZXJ2ZXJOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmVOb2RlIChET006IFByb3RvY29sUHJveHlBcGkuRE9NQXBpLCBvYmplY3RJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJOb2RlPiB7XG4gICAgY29uc3Qgb2JqZWN0ICAgPSB7IG9iamVjdElkIH07XG4gICAgY29uc3QgeyBub2RlIH0gPSBhd2FpdCBET00uZGVzY3JpYmVOb2RlKG9iamVjdCk7XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihub2RlLCBvYmplY3QpO1xufVxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.getElementFromPoint = exports.getIframePointRelativeToParentFrame = exports.getIframeClientCoordinates = exports.containsOffset = exports.getOffsetPosition = exports.getClientPosition = void 0;
|
|
26
|
+
const axis_values_1 = __importDefault(require("../../../../../../../shared/utils/values/axis-values"));
|
|
27
|
+
const boundary_values_1 = __importDefault(require("../../../../../../../shared/utils/values/boundary-values"));
|
|
28
|
+
const dom_utils_1 = require("./dom-utils");
|
|
29
|
+
const clientsManager = __importStar(require("../clients-manager"));
|
|
30
|
+
const style_utils_1 = require("./style-utils");
|
|
31
|
+
async function getClientPosition(node) {
|
|
32
|
+
const boxModel = await style_utils_1.getBoxModel(node);
|
|
33
|
+
return new axis_values_1.default(boxModel.border[0], boxModel.border[1]);
|
|
34
|
+
}
|
|
35
|
+
exports.getClientPosition = getClientPosition;
|
|
36
|
+
async function getOffsetPosition(node) {
|
|
37
|
+
const dimensions = await style_utils_1.getClientDimensions(node);
|
|
38
|
+
const { left, top } = await style_utils_1.getDocumentScroll(node);
|
|
39
|
+
return { left: dimensions.left + left, top: dimensions.top + top };
|
|
40
|
+
}
|
|
41
|
+
exports.getOffsetPosition = getOffsetPosition;
|
|
42
|
+
async function containsOffset(node, offsetX, offsetY) {
|
|
43
|
+
const dimensions = await style_utils_1.getClientDimensions(node);
|
|
44
|
+
const properties = await style_utils_1.getProperties(node, 'scrollWidth', 'scrollHeight');
|
|
45
|
+
const width = Math.max(Number(properties.scrollWidth), dimensions.width);
|
|
46
|
+
const height = Math.max(Number(properties.scrollHeight), dimensions.height);
|
|
47
|
+
const maxX = dimensions.scrollbar.right + dimensions.border.left + dimensions.border.right + width;
|
|
48
|
+
const maxY = dimensions.scrollbar.bottom + dimensions.border.top + dimensions.border.bottom + height;
|
|
49
|
+
return (typeof offsetX === 'undefined' || offsetX >= 0 && maxX >= offsetX) &&
|
|
50
|
+
(typeof offsetY === 'undefined' || offsetY >= 0 && maxY >= offsetY);
|
|
51
|
+
}
|
|
52
|
+
exports.containsOffset = containsOffset;
|
|
53
|
+
async function getIframeClientCoordinates(node) {
|
|
54
|
+
const dimensions = await style_utils_1.getClientDimensions(node);
|
|
55
|
+
const [left, top, right, bottom] = [
|
|
56
|
+
dimensions.left + dimensions.border.left + dimensions.paddings.left,
|
|
57
|
+
dimensions.top + dimensions.border.top + dimensions.paddings.left,
|
|
58
|
+
dimensions.right - dimensions.border.right - dimensions.paddings.right,
|
|
59
|
+
dimensions.bottom - dimensions.border.bottom - dimensions.paddings.bottom,
|
|
60
|
+
];
|
|
61
|
+
return new boundary_values_1.default(top, right, bottom, left);
|
|
62
|
+
}
|
|
63
|
+
exports.getIframeClientCoordinates = getIframeClientCoordinates;
|
|
64
|
+
async function getIframePointRelativeToParentFrame(iframePoint, context) {
|
|
65
|
+
const iframe = await dom_utils_1.findIframeByWindow(context);
|
|
66
|
+
if (!iframe)
|
|
67
|
+
return null;
|
|
68
|
+
const dimensions = await style_utils_1.getClientDimensions(iframe);
|
|
69
|
+
const paddings = await style_utils_1.getElementPadding(iframe);
|
|
70
|
+
const left = dimensions.left + dimensions.border.left + paddings.left + iframePoint.x;
|
|
71
|
+
const top = dimensions.top + dimensions.border.top + paddings.top + iframePoint.y;
|
|
72
|
+
return new axis_values_1.default(left, top);
|
|
73
|
+
}
|
|
74
|
+
exports.getIframePointRelativeToParentFrame = getIframePointRelativeToParentFrame;
|
|
75
|
+
async function getElementFromPoint(x, y) {
|
|
76
|
+
const { DOM } = clientsManager.getClient();
|
|
77
|
+
const { backendNodeId } = await DOM.getNodeForLocation({ x, y });
|
|
78
|
+
return DOM.resolveNode({ backendNodeId });
|
|
79
|
+
}
|
|
80
|
+
exports.getElementFromPoint = getElementFromPoint;
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYnJvd3Nlci9wcm92aWRlci9idWlsdC1pbi9kZWRpY2F0ZWQvY2hyb21lL2NkcC1jbGllbnQvdXRpbHMvcG9zaXRpb24tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLHVHQUFpRztBQUNqRywrR0FBOEc7QUFDOUcsMkNBQWlEO0FBQ2pELG1FQUFxRDtBQUdyRCwrQ0FNdUI7QUFFaEIsS0FBSyxVQUFVLGlCQUFpQixDQUFFLElBQWdCO0lBQ3JELE1BQU0sUUFBUSxHQUFHLE1BQU0seUJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6QyxPQUFPLElBQUkscUJBQVUsQ0FBUyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBSkQsOENBSUM7QUFFTSxLQUFLLFVBQVUsaUJBQWlCLENBQUUsSUFBZ0I7SUFDckQsTUFBTSxVQUFVLEdBQU0sTUFBTSxpQ0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sK0JBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEQsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN2RSxDQUFDO0FBTEQsOENBS0M7QUFFTSxLQUFLLFVBQVUsY0FBYyxDQUFFLElBQWdCLEVBQUUsT0FBZSxFQUFFLE9BQWU7SUFDcEYsTUFBTSxVQUFVLEdBQUcsTUFBTSxpQ0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxNQUFNLFVBQVUs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QUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FBRSxDQUFTLEVBQUUsQ0FBUztJQUMzRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQWEsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWpFLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUxELGtEQUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFByb3RvY29sIGZyb20gJ2RldnRvb2xzLXByb3RvY29sL3R5cGVzL3Byb3RvY29sJztcbmltcG9ydCBFeGVjdXRpb25Db250ZXh0IGZyb20gJy4uL2V4ZWN1dGlvbi1jb250ZXh0JztcbmltcG9ydCBBeGlzVmFsdWVzLCB7IExlZnRUb3BWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsdWVzL2F4aXMtdmFsdWVzJztcbmltcG9ydCBCb3VuZGFyeVZhbHVlcywgeyBCb3VuZGFyeVZhbHVlc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdmFsdWVzL2JvdW5kYXJ5LXZhbHVlcyc7XG5pbXBvcnQgeyBmaW5kSWZyYW1lQnlXaW5kb3cgfSBmcm9tICcuL2RvbS11dGlscyc7XG5pbXBvcnQgKiBhcyBjbGllbnRzTWFuYWdlciBmcm9tICcuLi9jbGllbnRzLW1hbmFnZXInO1xuaW1wb3J0IHsgU2VydmVyTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgICBnZXRCb3hNb2RlbCxcbiAgICBnZXRDbGllbnREaW1lbnNpb25zLFxuICAgIGdldERvY3VtZW50U2Nyb2xsLFxuICAgIGdldEVsZW1lbnRQYWRkaW5nLFxuICAgIGdldFByb3BlcnRpZXMsXG59IGZyb20gJy4vc3R5bGUtdXRpbHMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpZW50UG9zaXRpb24gKG5vZGU6IFNlcnZlck5vZGUpOiBQcm9taXNlPEF4aXNWYWx1ZXM8bnVtYmVyPj4ge1xuICAgIGNvbnN0IGJveE1vZGVsID0gYXdhaXQgZ2V0Qm94TW9kZWwobm9kZSk7XG5cbiAgICByZXR1cm4gbmV3IEF4aXNWYWx1ZXM8bnVtYmVyPihib3hNb2RlbC5ib3JkZXJbMF0sIGJveE1vZGVsLmJvcmRlclsxXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPZmZzZXRQb3NpdGlvbiAobm9kZTogU2VydmVyTm9kZSk6IFByb21pc2U8TGVmdFRvcFZhbHVlczxudW1iZXI+PiB7XG4gICAgY29uc3QgZGltZW5zaW9ucyAgICA9IGF3YWl0IGdldENsaWVudERpbWVuc2lvbnMobm9kZSk7XG4gICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IGF3YWl0IGdldERvY3VtZW50U2Nyb2xsKG5vZGUpO1xuXG4gICAgcmV0dXJuIHsgbGVmdDogZGltZW5zaW9ucy5sZWZ0ICsgbGVmdCwgdG9wOiBkaW1lbnNpb25zLnRvcCArIHRvcCB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udGFpbnNPZmZzZXQgKG5vZGU6IFNlcnZlck5vZGUsIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGltZW5zaW9ucyA9IGF3YWl0IGdldENsaWVudERpbWVuc2lvbnMobm9kZSk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IGF3YWl0IGdldFByb3BlcnRpZXMobm9kZSwgJ3Njcm9sbFdpZHRoJywgJ3Njcm9sbEhlaWdodCcpO1xuXG4gICAgY29uc3Qgd2lkdGggID0gTWF0aC5tYXgoTnVtYmVyKHByb3BlcnRpZXMuc2Nyb2xsV2lkdGgpLCBkaW1lbnNpb25zLndpZHRoKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heChOdW1iZXIocHJvcGVydGllcy5zY3JvbGxIZWlnaHQpLCBkaW1lbnNpb25zLmhlaWdodCk7XG4gICAgY29uc3QgbWF4WCAgID0gZGltZW5zaW9ucy5zY3JvbGxiYXIucmlnaHQgKyBkaW1lbnNpb25zLmJvcmRlci5sZWZ0ICsgZGltZW5zaW9ucy5ib3JkZXIucmlnaHQgKyB3aWR0aDtcbiAgICBjb25zdCBtYXhZICAgPSBkaW1lbnNpb25zLnNjcm9sbGJhci5ib3R0b20gKyBkaW1lbnNpb25zLmJvcmRlci50b3AgKyBkaW1lbnNpb25zLmJvcmRlci5ib3R0b20gKyBoZWlnaHQ7XG5cbiAgICByZXR1cm4gKHR5cGVvZiBvZmZzZXRYID09PSAndW5kZWZpbmVkJyB8fCBvZmZzZXRYID49IDAgJiYgbWF4WCA+PSBvZmZzZXRYKSAmJlxuICAgICAgICAodHlwZW9mIG9mZnNldFkgPT09ICd1bmRlZmluZWQnIHx8IG9mZnNldFkgPj0gMCAmJiBtYXhZID49IG9mZnNldFkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0SWZyYW1lQ2xpZW50Q29vcmRpbmF0ZXMgKG5vZGU6IFNlcnZlck5vZGUpOiBQcm9taXNlPEJvdW5kYXJ5VmFsdWVzRGF0YT4ge1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSBhd2FpdCBnZXRDbGllbnREaW1lbnNpb25zKG5vZGUpO1xuXG4gICAgY29uc3QgWyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gXSA9IFtcbiAgICAgICAgZGltZW5zaW9ucy5sZWZ0ICsgZGltZW5zaW9ucy5ib3JkZXIubGVmdCArIGRpbWVuc2lvbnMucGFkZGluZ3MubGVmdCxcbiAgICAgICAgZGltZW5zaW9ucy50b3AgKyBkaW1lbnNpb25zLmJvcmRlci50b3AgKyBkaW1lbnNpb25zLnBhZGRpbmdzLmxlZnQsXG4gICAgICAgIGRpbWVuc2lvbnMucmlnaHQgLSBkaW1lbnNpb25zLmJvcmRlci5yaWdodCAtIGRpbWVuc2lvbnMucGFkZGluZ3MucmlnaHQsXG4gICAgICAgIGRpbWVuc2lvbnMuYm90dG9tIC0gZGltZW5zaW9ucy5ib3JkZXIuYm90dG9tIC0gZGltZW5zaW9ucy5wYWRkaW5ncy5ib3R0b20sXG4gICAgXTtcblxuICAgIHJldHVybiBuZXcgQm91bmRhcnlWYWx1ZXModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElmcmFtZVBvaW50UmVsYXRpdmVUb1BhcmVudEZyYW1lIChpZnJhbWVQb2ludDogQXhpc1ZhbHVlczxudW1iZXI+LCBjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0KTogUHJvbWlzZTxBeGlzVmFsdWVzPG51bWJlcj4gfCBudWxsPiB7XG4gICAgY29uc3QgaWZyYW1lID0gYXdhaXQgZmluZElmcmFtZUJ5V2luZG93KGNvbnRleHQpO1xuXG4gICAgaWYgKCFpZnJhbWUpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZGltZW5zaW9ucyA9IGF3YWl0IGdldENsaWVudERpbWVuc2lvbnMoaWZyYW1lKTtcbiAgICBjb25zdCBwYWRkaW5ncyAgID0gYXdhaXQgZ2V0RWxlbWVudFBhZGRpbmcoaWZyYW1lKTtcblxuICAgIGNvbnN0IGxlZnQgPSBkaW1lbnNpb25zLmxlZnQgKyBkaW1lbnNpb25zLmJvcmRlci5sZWZ0ICsgcGFkZGluZ3MubGVmdCArIGlmcmFtZVBvaW50Lng7XG4gICAgY29uc3QgdG9wICA9IGRpbWVuc2lvbnMudG9wICsgZGltZW5zaW9ucy5ib3JkZXIudG9wICsgcGFkZGluZ3MudG9wICsgaWZyYW1lUG9pbnQueTtcblxuICAgIHJldHVybiBuZXcgQXhpc1ZhbHVlczxudW1iZXI+KGxlZnQsIHRvcCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRFbGVtZW50RnJvbVBvaW50ICh4OiBudW1iZXIsIHk6IG51bWJlcik6IFByb21pc2U8UHJvdG9jb2wuRE9NLlJlc29sdmVOb2RlUmVzcG9uc2U+IHtcbiAgICBjb25zdCB7IERPTSB9ICAgICAgICAgICA9IGNsaWVudHNNYW5hZ2VyLmdldENsaWVudCgpO1xuICAgIGNvbnN0IHsgYmFja2VuZE5vZGVJZCB9ID0gYXdhaXQgRE9NLmdldE5vZGVGb3JMb2NhdGlvbih7IHgsIHkgfSk7XG5cbiAgICByZXR1cm4gRE9NLnJlc29sdmVOb2RlKHsgYmFja2VuZE5vZGVJZCB9KTtcbn1cbiJdfQ==
|