testcafe 1.14.1 → 1.14.2
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/CHANGELOG.md +6 -0
- package/LICENSE +21 -21
- package/bin/testcafe-with-v8-flag-filter.js +0 -0
- package/lib/api/exportable-lib/index.js +49 -49
- package/lib/api/request-hooks/assert-type.js +7 -7
- package/lib/api/request-hooks/hook-method-names.js +9 -9
- package/lib/api/request-hooks/hook.js +32 -32
- package/lib/api/request-hooks/interfaces.js +2 -2
- package/lib/api/request-hooks/request-logger.js +112 -112
- package/lib/api/request-hooks/request-mock/create-request-mock.js +10 -10
- package/lib/api/request-hooks/request-mock/index.js +44 -44
- package/lib/api/request-hooks/request-mock.js +46 -46
- package/lib/api/structure/base-unit.js +11 -11
- package/lib/api/structure/fixture.js +75 -75
- package/lib/api/structure/interfaces.js +2 -2
- package/lib/api/structure/test-file.js +31 -31
- package/lib/api/structure/test-timeout.js +9 -9
- package/lib/api/structure/test.js +85 -85
- package/lib/api/structure/testing-unit.js +89 -89
- package/lib/api/structure/unit-type.js +9 -9
- package/lib/api/test-controller/assertion.js +88 -88
- package/lib/api/test-controller/execution-context.js +82 -82
- package/lib/api/test-controller/index.js +358 -358
- package/lib/api/test-controller/proxy.js +28 -28
- package/lib/api/test-page-url.js +60 -60
- package/lib/api/test-run-tracker.js +68 -68
- package/lib/api/wrap-test-function.js +49 -49
- package/lib/assertions/executor.js +74 -74
- package/lib/assertions/get-fn.js +46 -46
- package/lib/assertions/type.js +20 -20
- package/lib/assets/content-types.js +9 -9
- package/lib/assets/injectables.js +18 -18
- package/lib/browser/connection/command.js +10 -10
- package/lib/browser/connection/error-hints.js +9 -9
- package/lib/browser/connection/gateway.js +159 -159
- package/lib/browser/connection/get-hints.js +33 -33
- package/lib/browser/connection/heartbeat-status.js +8 -8
- package/lib/browser/connection/index.js +328 -328
- package/lib/browser/connection/remotes-queue.js +46 -46
- package/lib/browser/connection/service-routes.js +12 -12
- package/lib/browser/connection/status.js +12 -12
- package/lib/browser/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/base.js +80 -80
- package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
- package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
- package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
- package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
- package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
- package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
- package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
- package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
- package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
- package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
- package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
- package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
- package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
- package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
- package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
- package/lib/browser/provider/built-in/index.js +21 -21
- package/lib/browser/provider/built-in/locally-installed.js +30 -30
- package/lib/browser/provider/built-in/path.js +47 -47
- package/lib/browser/provider/built-in/remote.js +58 -58
- package/lib/browser/provider/index.js +303 -303
- package/lib/browser/provider/parse-provider-name.js +16 -16
- package/lib/browser/provider/plugin-host.js +121 -121
- package/lib/browser/provider/pool.js +115 -115
- package/lib/browser/provider/utils/argument-parsing.js +74 -74
- package/lib/browser/provider/utils/browser-starter.js +34 -34
- package/lib/browser/provider/utils/client-functions.js +24 -24
- package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
- package/lib/cli/argument-parser.js +284 -284
- package/lib/cli/authentication-helper.js +35 -35
- package/lib/cli/cli.js +134 -134
- package/lib/cli/correct-browsers-and-sources.js +40 -40
- package/lib/cli/index.js +19 -19
- package/lib/cli/log.js +43 -43
- package/lib/cli/remotes-wizard.js +36 -36
- package/lib/cli/termination-handler.js +38 -38
- package/lib/client/automation/index.js +34 -16
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/browser/idle-page/index.html.mustache +35 -35
- package/lib/client/browser/idle-page/logo.svg +86 -86
- package/lib/client/core/index.js +14 -14
- package/lib/client/driver/index.js +46 -16
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/driver/internal-properties.js +9 -9
- package/lib/client/test-run/iframe.js.mustache +17 -17
- package/lib/client/test-run/index.js.mustache +51 -51
- package/lib/client/ui/index.js +14 -14
- package/lib/client/ui/sprite.svg +42 -42
- package/lib/client-functions/builder-symbol.js +4 -4
- package/lib/client-functions/client-function-builder.js +155 -155
- package/lib/client-functions/replicator.js +61 -61
- package/lib/client-functions/return-single-prop-mode.js +8 -8
- package/lib/client-functions/selector-api-execution-mode.js +20 -20
- package/lib/client-functions/selectors/add-api.js +645 -645
- package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
- package/lib/client-functions/selectors/prepare-api-args.js +20 -20
- package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
- package/lib/client-functions/selectors/selector-builder.js +153 -153
- package/lib/client-functions/selectors/selector-text-filter.js +43 -43
- package/lib/client-functions/selectors/snapshot-properties.js +48 -48
- package/lib/client-functions/types.js +18 -18
- package/lib/compiler/babel/format-babel-produced-code.js +10 -10
- package/lib/compiler/babel/get-base-babel-options.js +11 -11
- package/lib/compiler/babel/load-libs.js +63 -63
- package/lib/compiler/babel/preset-stage-2.js +19 -19
- package/lib/compiler/compile-client-function.js +73 -73
- package/lib/compiler/compilers.js +33 -33
- package/lib/compiler/index.js +92 -92
- package/lib/compiler/interfaces.js +2 -2
- package/lib/compiler/test-file/api-based.js +146 -146
- package/lib/compiler/test-file/base.js +36 -36
- package/lib/compiler/test-file/exportble-lib-path.js +5 -5
- package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
- package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
- package/lib/compiler/test-file/formats/es-next/compiler.js +42 -42
- package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
- package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
- package/lib/compiler/test-file/formats/raw.js +85 -85
- package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
- package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
- package/lib/compiler/test-file/test-file-parser-base.js +214 -214
- package/lib/configuration/configuration-base.js +165 -165
- package/lib/configuration/constants.js +9 -9
- package/lib/configuration/customizable-compilers.js +7 -7
- package/lib/configuration/default-values.js +51 -51
- package/lib/configuration/interfaces.js +2 -2
- package/lib/configuration/option-names.js +53 -53
- package/lib/configuration/option-source.js +9 -9
- package/lib/configuration/option.js +14 -14
- package/lib/configuration/quarantine-option-names.js +8 -8
- package/lib/configuration/run-option-names.js +26 -26
- package/lib/configuration/screenshot-option-names.js +10 -10
- package/lib/configuration/testcafe-configuration.js +163 -163
- package/lib/configuration/types.js +2 -2
- package/lib/configuration/typescript-configuration.js +62 -62
- package/lib/custom-client-scripts/assert-type.js +7 -7
- package/lib/custom-client-scripts/client-script-init.js +2 -2
- package/lib/custom-client-scripts/client-script.js +106 -106
- package/lib/custom-client-scripts/get-code.js +11 -11
- package/lib/custom-client-scripts/get-url.js +6 -6
- package/lib/custom-client-scripts/load.js +15 -15
- package/lib/custom-client-scripts/problematic-scripts.js +2 -2
- package/lib/custom-client-scripts/routing.js +36 -36
- package/lib/custom-client-scripts/utils.js +60 -60
- package/lib/embedding-utils.js +83 -83
- package/lib/errors/create-stack-filter.js +18 -18
- package/lib/errors/error-list.js +26 -26
- package/lib/errors/get-callsite.js +31 -31
- package/lib/errors/internal-modules-prefix.js +8 -8
- package/lib/errors/is-internal-stack-frame.js +45 -45
- package/lib/errors/process-test-fn-error.js +37 -37
- package/lib/errors/runtime/index.js +123 -123
- package/lib/errors/runtime/templates.js +115 -115
- package/lib/errors/runtime/type-assertions.js +112 -112
- package/lib/errors/stack-cleaning-hook.js +64 -64
- package/lib/errors/test-run/formattable-adapter.js +59 -59
- package/lib/errors/test-run/index.js +301 -301
- package/lib/errors/test-run/render-error-template.js +31 -31
- package/lib/errors/test-run/templates.js +91 -91
- package/lib/errors/test-run/utils.js +89 -89
- package/lib/errors/types.js +156 -156
- package/lib/index.js +81 -81
- package/lib/live/bootstrapper.js +43 -43
- package/lib/live/controller.js +107 -107
- package/lib/live/file-watcher/index.js +67 -67
- package/lib/live/file-watcher/modules-graph.js +58 -58
- package/lib/live/keyboard-observer.js +76 -76
- package/lib/live/logger/index.js +64 -64
- package/lib/live/test-run-controller.js +96 -96
- package/lib/live/test-run-state.js +6 -6
- package/lib/live/test-run.js +56 -56
- package/lib/live/test-runner.js +167 -167
- package/lib/load-assets.js +29 -29
- package/lib/notifications/add-rendered-warning.js +16 -16
- package/lib/notifications/debug-logger.js +78 -78
- package/lib/notifications/deprecated.js +24 -24
- package/lib/notifications/information-message.js +9 -9
- package/lib/notifications/warning-log.js +31 -31
- package/lib/notifications/warning-message.js +47 -47
- package/lib/reporter/command/command-formatter.js +120 -109
- package/lib/reporter/command/format-command.js +8 -8
- package/lib/reporter/command/interfaces.js +2 -2
- package/lib/reporter/index.js +319 -314
- package/lib/reporter/interfaces.js +2 -2
- package/lib/reporter/plugin-host.js +135 -135
- package/lib/reporter/plugin-methods.js +12 -12
- package/lib/role/index.js +74 -74
- package/lib/role/marker-symbol.js +7 -7
- package/lib/role/phase.js +9 -9
- package/lib/runner/bootstrapper.js +271 -271
- package/lib/runner/browser-job-result.js +9 -9
- package/lib/runner/browser-job.js +152 -152
- package/lib/runner/browser-set.js +114 -114
- package/lib/runner/fixture-hook-controller.js +85 -85
- package/lib/runner/index.js +449 -449
- package/lib/runner/interfaces.js +2 -2
- package/lib/runner/reporter-stream-controller.js +27 -27
- package/lib/runner/task/index.js +151 -151
- package/lib/runner/task/phase.js +9 -9
- package/lib/runner/test-run-controller.js +165 -165
- package/lib/runner/tested-app.js +72 -72
- package/lib/screenshots/capturer.js +141 -141
- package/lib/screenshots/constants.js +11 -11
- package/lib/screenshots/crop.js +111 -111
- package/lib/screenshots/default-extension.js +4 -4
- package/lib/screenshots/index.js +67 -67
- package/lib/screenshots/utils.js +39 -39
- package/lib/services/compiler/host.js +190 -190
- package/lib/services/compiler/io.js +9 -9
- package/lib/services/compiler/protocol.js +17 -16
- package/lib/services/compiler/service.js +225 -212
- package/lib/services/compiler/test-run-proxy.js +111 -111
- package/lib/services/interfaces.js +2 -2
- package/lib/services/process-title.js +8 -8
- package/lib/services/serialization/prepare-options.js +17 -17
- package/lib/services/serialization/replicator/create-replicator.js +25 -25
- package/lib/services/serialization/replicator/custom-error-transform.js +26 -26
- package/lib/services/serialization/test-structure.js +92 -92
- package/lib/services/utils/ipc/interfaces.js +30 -30
- package/lib/services/utils/ipc/io.js +108 -108
- package/lib/services/utils/ipc/message.js +75 -75
- package/lib/services/utils/ipc/packet.js +55 -55
- package/lib/services/utils/ipc/proxy.js +109 -109
- package/lib/services/utils/ipc/transport.js +64 -64
- package/lib/shared/errors/index.js +382 -382
- package/lib/shared/node-modules-folder-name.js +4 -4
- package/lib/test-run/bookmark.js +90 -90
- package/lib/test-run/browser-console-messages.js +73 -73
- package/lib/test-run/browser-manipulation-queue.js +92 -92
- package/lib/test-run/client-messages.js +9 -9
- package/lib/test-run/commands/actions.js +486 -483
- package/lib/test-run/commands/assertion.js +45 -45
- package/lib/test-run/commands/base.js +14 -14
- package/lib/test-run/commands/browser-manipulation.js +95 -95
- package/lib/test-run/commands/from-object.js +82 -82
- package/lib/test-run/commands/observation.js +61 -61
- package/lib/test-run/commands/options.js +231 -215
- package/lib/test-run/commands/service.js +54 -48
- package/lib/test-run/commands/type.js +65 -64
- package/lib/test-run/commands/utils.js +87 -87
- package/lib/test-run/commands/validations/argument.js +90 -90
- package/lib/test-run/commands/validations/factories.js +47 -47
- package/lib/test-run/commands/validations/initializers.js +44 -44
- package/lib/test-run/debug-log.js +32 -32
- package/lib/test-run/execute-js-expression.js +74 -74
- package/lib/test-run/index.js +823 -799
- package/lib/test-run/marker-symbol.js +7 -7
- package/lib/test-run/observed-callsites-storage.js +17 -17
- package/lib/test-run/phase.js +16 -16
- package/lib/test-run/session-controller.js +104 -104
- package/lib/testcafe.js +118 -118
- package/lib/utils/assignable.js +39 -39
- package/lib/utils/async-event-emitter.js +28 -28
- package/lib/utils/async-queue.js +14 -14
- package/lib/utils/browser-connection-timeouts.js +19 -19
- package/lib/utils/callsite.js +17 -17
- package/lib/utils/check-file-path.js +31 -31
- package/lib/utils/check-url.js +51 -51
- package/lib/utils/convert-to-best-fit-type.js +16 -16
- package/lib/utils/correct-file-path.js +21 -21
- package/lib/utils/define-lazy-property.js +13 -13
- package/lib/utils/delay.js +6 -6
- package/lib/utils/delegated-api.js +44 -44
- package/lib/utils/detect-display.js +6 -6
- package/lib/utils/detect-ffmpeg.js +44 -44
- package/lib/utils/diff/colors.js +29 -29
- package/lib/utils/diff/index.js +52 -52
- package/lib/utils/diff/util.js +23 -23
- package/lib/utils/diff.js +29 -29
- package/lib/utils/escape-user-agent.js +10 -10
- package/lib/utils/flag-list.js +17 -17
- package/lib/utils/get-any-key.js +8 -8
- package/lib/utils/get-browser.js +8 -8
- package/lib/utils/get-common-path.js +34 -34
- package/lib/utils/get-filter-fn.js +40 -40
- package/lib/utils/get-options/base.js +36 -36
- package/lib/utils/get-options/compiler.js +33 -33
- package/lib/utils/get-options/grep.js +15 -15
- package/lib/utils/get-options/index.js +20 -20
- package/lib/utils/get-options/meta.js +22 -22
- package/lib/utils/get-options/quarantine.js +91 -91
- package/lib/utils/get-options/screenshot.js +17 -17
- package/lib/utils/get-options/ssl.js +45 -45
- package/lib/utils/get-options/video.js +10 -10
- package/lib/utils/get-viewport-width.js +17 -17
- package/lib/utils/guard-time-execution.js +10 -10
- package/lib/utils/handle-errors.js +74 -74
- package/lib/utils/handle-tag-args.js +8 -8
- package/lib/utils/http.js +30 -30
- package/lib/utils/is-localhost.js +11 -11
- package/lib/utils/is-password-input.js +11 -0
- package/lib/utils/is-repl.js +10 -10
- package/lib/utils/is-window-in-iframe.js +6 -6
- package/lib/utils/limit-number.js +10 -10
- package/lib/utils/make-reg-exp.js +7 -7
- package/lib/utils/moment-loader.js +20 -20
- package/lib/utils/parse-file-list.js +71 -71
- package/lib/utils/parse-user-agent.js +55 -55
- package/lib/utils/path-pattern.js +114 -114
- package/lib/utils/prepare-reporters.js +30 -30
- package/lib/utils/prerender-callsite.js +18 -18
- package/lib/utils/process.js +119 -119
- package/lib/utils/promisified-functions.js +46 -46
- package/lib/utils/re-executable-promise.js +39 -39
- package/lib/utils/render-callsite-sync.js +29 -29
- package/lib/utils/render-template.js +9 -9
- package/lib/utils/reporter.js +30 -30
- package/lib/utils/resolve-path-relatively-cwd.js +7 -7
- package/lib/utils/string.js +105 -105
- package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
- package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
- package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
- package/lib/utils/temp-directory/index.js +87 -87
- package/lib/utils/temp-directory/lockfile.js +56 -56
- package/lib/utils/thennable.js +7 -7
- package/lib/utils/timer.js +15 -15
- package/lib/utils/to-posix-path.js +8 -8
- package/lib/utils/types.js +2 -2
- package/lib/video-recorder/interfaces.js +2 -2
- package/lib/video-recorder/process.js +126 -126
- package/lib/video-recorder/recorder.js +136 -136
- package/lib/video-recorder/test-run-video-recorder.js +69 -69
- package/lib/video-recorder/videos.js +37 -37
- package/package.json +2 -2
- package/ts-defs/index.d.ts +25 -14
- package/ts-defs/selectors.d.ts +16 -5
- package/ts-defs/testcafe-scripts.d.ts +17 -6
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const promisified_functions_1 = require("../utils/promisified-functions");
|
|
4
|
-
const runtime_1 = require("../errors/runtime");
|
|
5
|
-
const types_1 = require("../errors/types");
|
|
6
|
-
const path_1 = require("path");
|
|
7
|
-
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
8
|
-
const crypto_1 = require("crypto");
|
|
9
|
-
const BEAUTIFY_REGEXP = /[/.:\s\\]/g;
|
|
10
|
-
const BEAUTIFY_CHAR = '_';
|
|
11
|
-
const EMPTY_CONTENT_STR = '{ content: <empty> }';
|
|
12
|
-
const CONTENT_STR_MAX_LENGTH = 30;
|
|
13
|
-
const CONTENT_ELLIPSIS_STR = '...';
|
|
14
|
-
const URL_UNIQUE_PART_LENGTH = 7;
|
|
15
|
-
class ClientScript {
|
|
16
|
-
constructor(init, basePath) {
|
|
17
|
-
this.init = init || null;
|
|
18
|
-
this.url = testcafe_hammerhead_1.generateUniqueId(URL_UNIQUE_PART_LENGTH);
|
|
19
|
-
this.content = '';
|
|
20
|
-
this.path = null;
|
|
21
|
-
this.module = null;
|
|
22
|
-
this.hash = null;
|
|
23
|
-
this.page = testcafe_hammerhead_1.RequestFilterRule.ANY;
|
|
24
|
-
this.basePath = basePath;
|
|
25
|
-
}
|
|
26
|
-
_resolvePath(path) {
|
|
27
|
-
let resolvedPath = null;
|
|
28
|
-
if (path_1.isAbsolute(path))
|
|
29
|
-
resolvedPath = path;
|
|
30
|
-
else {
|
|
31
|
-
if (!this.basePath)
|
|
32
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptBasePathIsNotSpecified);
|
|
33
|
-
resolvedPath = path_1.join(this.basePath, path);
|
|
34
|
-
}
|
|
35
|
-
return resolvedPath;
|
|
36
|
-
}
|
|
37
|
-
async _loadFromPath(path) {
|
|
38
|
-
const resolvedPath = this._resolvePath(path);
|
|
39
|
-
try {
|
|
40
|
-
this.path = resolvedPath;
|
|
41
|
-
this.content = await promisified_functions_1.readFile(this.path);
|
|
42
|
-
this.content = this.content.toString();
|
|
43
|
-
this.url = path || this.url;
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotLoadClientScriptFromPath, path);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async _loadFromModule(name) {
|
|
50
|
-
let resolvedPath = null;
|
|
51
|
-
try {
|
|
52
|
-
resolvedPath = require.resolve(name);
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptModuleEntryPointPathCalculationError, e.message);
|
|
56
|
-
}
|
|
57
|
-
await this._loadFromPath(resolvedPath);
|
|
58
|
-
this.module = name;
|
|
59
|
-
}
|
|
60
|
-
_prepareUrl() {
|
|
61
|
-
this.url = this.url.replace(BEAUTIFY_REGEXP, BEAUTIFY_CHAR).toLowerCase();
|
|
62
|
-
}
|
|
63
|
-
async load() {
|
|
64
|
-
if (this.init === null)
|
|
65
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptInitializerIsNotSpecified);
|
|
66
|
-
else if (typeof this.init === 'string')
|
|
67
|
-
await this._loadFromPath(this.init);
|
|
68
|
-
else {
|
|
69
|
-
const { path: initPath, content: initContent, module: initModule, page: initPage } = this.init;
|
|
70
|
-
if (initPath && initContent || initPath && initModule || initContent && initModule)
|
|
71
|
-
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptInitializerMultipleContentSources);
|
|
72
|
-
if (initPath)
|
|
73
|
-
await this._loadFromPath(initPath);
|
|
74
|
-
else if (initModule)
|
|
75
|
-
await this._loadFromModule(initModule);
|
|
76
|
-
else
|
|
77
|
-
this.content = initContent;
|
|
78
|
-
if (initPage)
|
|
79
|
-
this.page = new testcafe_hammerhead_1.RequestFilterRule(initPage);
|
|
80
|
-
}
|
|
81
|
-
this._calculateHash();
|
|
82
|
-
this._prepareUrl();
|
|
83
|
-
}
|
|
84
|
-
_calculateHash() {
|
|
85
|
-
this.hash = crypto_1.createHash('md5').update(this.content).digest();
|
|
86
|
-
}
|
|
87
|
-
_contentToString() {
|
|
88
|
-
let displayContent;
|
|
89
|
-
if (this.content.length <= CONTENT_STR_MAX_LENGTH - CONTENT_ELLIPSIS_STR.length)
|
|
90
|
-
displayContent = this.content;
|
|
91
|
-
else
|
|
92
|
-
displayContent = this.content.substring(0, CONTENT_STR_MAX_LENGTH - CONTENT_ELLIPSIS_STR.length) + CONTENT_ELLIPSIS_STR;
|
|
93
|
-
return `{ content: '${displayContent}' }`;
|
|
94
|
-
}
|
|
95
|
-
toString() {
|
|
96
|
-
if (!this.content)
|
|
97
|
-
return EMPTY_CONTENT_STR;
|
|
98
|
-
else if (this.content && !this.path)
|
|
99
|
-
return this._contentToString();
|
|
100
|
-
return `{ path: '${this.path}' }`;
|
|
101
|
-
}
|
|
102
|
-
static get URL_UNIQUE_PART_LENGTH() {
|
|
103
|
-
return URL_UNIQUE_PART_LENGTH;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
exports.default = ClientScript;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const promisified_functions_1 = require("../utils/promisified-functions");
|
|
4
|
+
const runtime_1 = require("../errors/runtime");
|
|
5
|
+
const types_1 = require("../errors/types");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const BEAUTIFY_REGEXP = /[/.:\s\\]/g;
|
|
10
|
+
const BEAUTIFY_CHAR = '_';
|
|
11
|
+
const EMPTY_CONTENT_STR = '{ content: <empty> }';
|
|
12
|
+
const CONTENT_STR_MAX_LENGTH = 30;
|
|
13
|
+
const CONTENT_ELLIPSIS_STR = '...';
|
|
14
|
+
const URL_UNIQUE_PART_LENGTH = 7;
|
|
15
|
+
class ClientScript {
|
|
16
|
+
constructor(init, basePath) {
|
|
17
|
+
this.init = init || null;
|
|
18
|
+
this.url = testcafe_hammerhead_1.generateUniqueId(URL_UNIQUE_PART_LENGTH);
|
|
19
|
+
this.content = '';
|
|
20
|
+
this.path = null;
|
|
21
|
+
this.module = null;
|
|
22
|
+
this.hash = null;
|
|
23
|
+
this.page = testcafe_hammerhead_1.RequestFilterRule.ANY;
|
|
24
|
+
this.basePath = basePath;
|
|
25
|
+
}
|
|
26
|
+
_resolvePath(path) {
|
|
27
|
+
let resolvedPath = null;
|
|
28
|
+
if (path_1.isAbsolute(path))
|
|
29
|
+
resolvedPath = path;
|
|
30
|
+
else {
|
|
31
|
+
if (!this.basePath)
|
|
32
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptBasePathIsNotSpecified);
|
|
33
|
+
resolvedPath = path_1.join(this.basePath, path);
|
|
34
|
+
}
|
|
35
|
+
return resolvedPath;
|
|
36
|
+
}
|
|
37
|
+
async _loadFromPath(path) {
|
|
38
|
+
const resolvedPath = this._resolvePath(path);
|
|
39
|
+
try {
|
|
40
|
+
this.path = resolvedPath;
|
|
41
|
+
this.content = await promisified_functions_1.readFile(this.path);
|
|
42
|
+
this.content = this.content.toString();
|
|
43
|
+
this.url = path || this.url;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotLoadClientScriptFromPath, path);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async _loadFromModule(name) {
|
|
50
|
+
let resolvedPath = null;
|
|
51
|
+
try {
|
|
52
|
+
resolvedPath = require.resolve(name);
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptModuleEntryPointPathCalculationError, e.message);
|
|
56
|
+
}
|
|
57
|
+
await this._loadFromPath(resolvedPath);
|
|
58
|
+
this.module = name;
|
|
59
|
+
}
|
|
60
|
+
_prepareUrl() {
|
|
61
|
+
this.url = this.url.replace(BEAUTIFY_REGEXP, BEAUTIFY_CHAR).toLowerCase();
|
|
62
|
+
}
|
|
63
|
+
async load() {
|
|
64
|
+
if (this.init === null)
|
|
65
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptInitializerIsNotSpecified);
|
|
66
|
+
else if (typeof this.init === 'string')
|
|
67
|
+
await this._loadFromPath(this.init);
|
|
68
|
+
else {
|
|
69
|
+
const { path: initPath, content: initContent, module: initModule, page: initPage } = this.init;
|
|
70
|
+
if (initPath && initContent || initPath && initModule || initContent && initModule)
|
|
71
|
+
throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.clientScriptInitializerMultipleContentSources);
|
|
72
|
+
if (initPath)
|
|
73
|
+
await this._loadFromPath(initPath);
|
|
74
|
+
else if (initModule)
|
|
75
|
+
await this._loadFromModule(initModule);
|
|
76
|
+
else
|
|
77
|
+
this.content = initContent;
|
|
78
|
+
if (initPage)
|
|
79
|
+
this.page = new testcafe_hammerhead_1.RequestFilterRule(initPage);
|
|
80
|
+
}
|
|
81
|
+
this._calculateHash();
|
|
82
|
+
this._prepareUrl();
|
|
83
|
+
}
|
|
84
|
+
_calculateHash() {
|
|
85
|
+
this.hash = crypto_1.createHash('md5').update(this.content).digest();
|
|
86
|
+
}
|
|
87
|
+
_contentToString() {
|
|
88
|
+
let displayContent;
|
|
89
|
+
if (this.content.length <= CONTENT_STR_MAX_LENGTH - CONTENT_ELLIPSIS_STR.length)
|
|
90
|
+
displayContent = this.content;
|
|
91
|
+
else
|
|
92
|
+
displayContent = this.content.substring(0, CONTENT_STR_MAX_LENGTH - CONTENT_ELLIPSIS_STR.length) + CONTENT_ELLIPSIS_STR;
|
|
93
|
+
return `{ content: '${displayContent}' }`;
|
|
94
|
+
}
|
|
95
|
+
toString() {
|
|
96
|
+
if (!this.content)
|
|
97
|
+
return EMPTY_CONTENT_STR;
|
|
98
|
+
else if (this.content && !this.path)
|
|
99
|
+
return this._contentToString();
|
|
100
|
+
return `{ path: '${this.path}' }`;
|
|
101
|
+
}
|
|
102
|
+
static get URL_UNIQUE_PART_LENGTH() {
|
|
103
|
+
return URL_UNIQUE_PART_LENGTH;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.default = ClientScript;
|
|
107
107
|
module.exports = exports.default;
|
|
108
108
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBFQUEwRDtBQUMxRCwrQ0FBaUQ7QUFDakQsMkNBQWlEO0FBQ2pELCtCQUF3QztBQUN4Qyw2REFBMEU7QUFDMUUsbUNBQW9DO0FBR3BDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQztBQUNyQyxNQUFNLGFBQWEsR0FBSyxHQUFHLENBQUM7QUFFNUIsTUFBTSxpQkFBaUIsR0FBUSxzQkFBc0IsQ0FBQztBQUN0RCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUNsQyxNQUFNLG9CQUFvQixHQUFLLEtBQUssQ0FBQztBQUVyQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUVqQyxNQUFxQixZQUFZO0lBVTdCLFlBQW9CLElBQStCLEVBQUUsUUFBZ0I7UUFDakUsSUFBSSxDQUFDLElBQUksR0FBTyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQVEsc0NBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFPLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFLLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFPLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFPLHVDQUFpQixDQUFDLEdBQUcsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0lBRU8sWUFBWSxDQUFFLElBQVk7UUFDOUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXhCLElBQUksaUJBQVUsQ0FBQyxJQUFJLENBQUM7WUFDaEIsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDZCxNQUFNLElBQUksc0JBQVksQ0FBQyxzQkFBYyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFFOUUsWUFBWSxHQUFHLFdBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUUsSUFBWTtRQUNyQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdDLElBQUk7WUFDQSxJQUFJLENBQUMsSUFBSSxHQUFNLFlBQVksQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sZ0NBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDbkM7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDL0U7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FBRSxJQUFZO1FBQ3ZDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztRQUV4QixJQUFJO1lBQ0EsWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDeEM7UUFDRCxPQUFPLENBQUMsRUFBRTtZQUNOLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsZ0RBQWdELEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RHO1FBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxJQUFJO1FBQ2IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUk7WUFDbEIsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2FBQzVFLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDbEMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQXdCLENBQUM7WUFFbkgsSUFBSSxRQUFRLElBQUksV0FBVyxJQUFJLFFBQVEsSUFBSSxVQUFVLElBQUksV0FBVyxJQUFJLFVBQVU7Z0JBQzlFLE1BQU0sSUFBSSxzQkFBWSxDQUFDLHNCQUFjLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUV6RixJQUFJLFFBQVE7Z0JBQ1IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNsQyxJQUFJLFVBQVU7Z0JBQ2YsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztnQkFFdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7WUFFL0IsSUFBSSxRQUFRO2dCQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixJQUFJLGNBQWMsQ0FBQztRQUVuQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLHNCQUFzQixHQUFHLG9CQUFvQixDQUFDLE1BQU07WUFDM0UsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7O1lBRTlCLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7UUFFNUgsT0FBTyxlQUFlLGNBQWMsS0FBSyxDQUFDO0lBQzlDLENBQUM7SUFFTSxRQUFRO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2IsT0FBTyxpQkFBaUIsQ0FBQzthQUV4QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUMvQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRW5DLE9BQU8sWUFBWSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVNLE1BQU0sS0FBSyxzQkFBc0I7UUFDcEMsT0FBTyxzQkFBc0IsQ0FBQztJQUNsQyxDQUFDO0NBQ0o7QUEzSEQsK0JBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICcuLi91dGlscy9wcm9taXNpZmllZC1mdW5jdGlvbnMnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUmVxdWVzdEZpbHRlclJ1bGUsIGdlbmVyYXRlVW5pcXVlSWQgfSBmcm9tICd0ZXN0Y2FmZS1oYW1tZXJoZWFkJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IENsaWVudFNjcmlwdEluaXQgZnJvbSAnLi9jbGllbnQtc2NyaXB0LWluaXQnO1xuXG5jb25zdCBCRUFVVElGWV9SRUdFWFAgPSAvWy8uOlxcc1xcXFxdL2c7XG5jb25zdCBCRUFVVElGWV9DSEFSICAgPSAnXyc7XG5cbmNvbnN0IEVNUFRZX0NPTlRFTlRfU1RSICAgICAgPSAneyBjb250ZW50OiA8ZW1wdHk+IH0nO1xuY29uc3QgQ09OVEVOVF9TVFJfTUFYX0xFTkdUSCA9IDMwO1xuY29uc3QgQ09OVEVOVF9FTExJUFNJU19TVFIgICA9ICcuLi4nO1xuXG5jb25zdCBVUkxfVU5JUVVFX1BBUlRfTEVOR1RIID0gNztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50U2NyaXB0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluaXQ6IG51bGwgfCBzdHJpbmcgfCBDbGllbnRTY3JpcHRJbml0O1xuICAgIHB1YmxpYyB1cmw6IHN0cmluZztcbiAgICBwdWJsaWMgY29udGVudDogc3RyaW5nO1xuICAgIHB1YmxpYyBwYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIHB1YmxpYyBtb2R1bGU6IHN0cmluZyB8IG51bGw7XG4gICAgcHVibGljIGhhc2g6IEJ1ZmZlciB8IG51bGw7XG4gICAgcHVibGljIHBhZ2U6IFJlcXVlc3RGaWx0ZXJSdWxlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFzZVBhdGg6IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAoaW5pdDogc3RyaW5nIHwgQ2xpZW50U2NyaXB0SW5pdCwgYmFzZVBhdGg6IHN0cmluZykge1xuICAgICAgICB0aGlzLmluaXQgICAgID0gaW5pdCB8fCBudWxsO1xuICAgICAgICB0aGlzLnVybCAgICAgID0gZ2VuZXJhdGVVbmlxdWVJZChVUkxfVU5JUVVFX1BBUlRfTEVOR1RIKTtcbiAgICAgICAgdGhpcy5jb250ZW50ICA9ICcnO1xuICAgICAgICB0aGlzLnBhdGggICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5tb2R1bGUgICA9IG51bGw7XG4gICAgICAgIHRoaXMuaGFzaCAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLnBhZ2UgICAgID0gUmVxdWVzdEZpbHRlclJ1bGUuQU5ZO1xuICAgICAgICB0aGlzLmJhc2VQYXRoID0gYmFzZVBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb2x2ZVBhdGggKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXNvbHZlZFBhdGggPSBudWxsO1xuXG4gICAgICAgIGlmIChpc0Fic29sdXRlKHBhdGgpKVxuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYmFzZVBhdGgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jbGllbnRTY3JpcHRCYXNlUGF0aElzTm90U3BlY2lmaWVkKTtcblxuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gam9pbih0aGlzLmJhc2VQYXRoLCBwYXRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfbG9hZEZyb21QYXRoIChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdGhpcy5fcmVzb2x2ZVBhdGgocGF0aCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucGF0aCAgICA9IHJlc29sdmVkUGF0aDtcbiAgICAgICAgICAgIHRoaXMuY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKHRoaXMucGF0aCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMudXJsICAgICA9IHBhdGggfHwgdGhpcy51cmw7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuY2Fubm90TG9hZENsaWVudFNjcmlwdEZyb21QYXRoLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2xvYWRGcm9tTW9kdWxlIChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aCA9IG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jbGllbnRTY3JpcHRNb2R1bGVFbnRyeVBvaW50UGF0aENhbGN1bGF0aW9uRXJyb3IsIGUubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkRnJvbVBhdGgocmVzb2x2ZWRQYXRoKTtcblxuICAgICAgICB0aGlzLm1vZHVsZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVVybCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShCRUFVVElGWV9SRUdFWFAsIEJFQVVUSUZZX0NIQVIpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGxvYWQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pbml0ID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jbGllbnRTY3JpcHRJbml0aWFsaXplcklzTm90U3BlY2lmaWVkKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuaW5pdCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9sb2FkRnJvbVBhdGgodGhpcy5pbml0KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IHBhdGg6IGluaXRQYXRoLCBjb250ZW50OiBpbml0Q29udGVudCwgbW9kdWxlOiBpbml0TW9kdWxlLCBwYWdlOiBpbml0UGFnZSB9ID0gdGhpcy5pbml0IGFzIENsaWVudFNjcmlwdEluaXQ7XG5cbiAgICAgICAgICAgIGlmIChpbml0UGF0aCAmJiBpbml0Q29udGVudCB8fCBpbml0UGF0aCAmJiBpbml0TW9kdWxlIHx8IGluaXRDb250ZW50ICYmIGluaXRNb2R1bGUpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jbGllbnRTY3JpcHRJbml0aWFsaXplck11bHRpcGxlQ29udGVudFNvdXJjZXMpO1xuXG4gICAgICAgICAgICBpZiAoaW5pdFBhdGgpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbG9hZEZyb21QYXRoKGluaXRQYXRoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGluaXRNb2R1bGUpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbG9hZEZyb21Nb2R1bGUoaW5pdE1vZHVsZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gaW5pdENvbnRlbnQ7XG5cbiAgICAgICAgICAgIGlmIChpbml0UGFnZSlcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSBuZXcgUmVxdWVzdEZpbHRlclJ1bGUoaW5pdFBhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlSGFzaCgpO1xuICAgICAgICB0aGlzLl9wcmVwYXJlVXJsKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlSGFzaCAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzaCA9IGNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZSh0aGlzLmNvbnRlbnQpLmRpZ2VzdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbnRlbnRUb1N0cmluZyAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGRpc3BsYXlDb250ZW50O1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQubGVuZ3RoIDw9IENPTlRFTlRfU1RSX01BWF9MRU5HVEggLSBDT05URU5UX0VMTElQU0lTX1NUUi5sZW5ndGgpXG4gICAgICAgICAgICBkaXNwbGF5Q29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQgPSB0aGlzLmNvbnRlbnQuc3Vic3RyaW5nKDAsIENPTlRFTlRfU1RSX01BWF9MRU5HVEggLSBDT05URU5UX0VMTElQU0lTX1NUUi5sZW5ndGgpICsgQ09OVEVOVF9FTExJUFNJU19TVFI7XG5cbiAgICAgICAgcmV0dXJuIGB7IGNvbnRlbnQ6ICcke2Rpc3BsYXlDb250ZW50fScgfWA7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nICgpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuY29udGVudClcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9DT05URU5UX1NUUjtcblxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRlbnQgJiYgIXRoaXMucGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50VG9TdHJpbmcoKTtcblxuICAgICAgICByZXR1cm4gYHsgcGF0aDogJyR7dGhpcy5wYXRofScgfWA7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgVVJMX1VOSVFVRV9QQVJUX0xFTkdUSCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIFVSTF9VTklRVUVfUEFSVF9MRU5HVEg7XG4gICAgfVxufVxuIl19
|
|
@@ -1,18 +1,18 @@
|
|
|
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 testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
7
|
-
const internal_properties_1 = __importDefault(require("../client/driver/internal-properties"));
|
|
8
|
-
function getCustomClientScriptCode(script) {
|
|
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 testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
7
|
+
const internal_properties_1 = __importDefault(require("../client/driver/internal-properties"));
|
|
8
|
+
function getCustomClientScriptCode(script) {
|
|
9
9
|
return `try {
|
|
10
10
|
${testcafe_hammerhead_1.processScript(script.content)}
|
|
11
11
|
}
|
|
12
12
|
catch (e) {
|
|
13
13
|
window['${internal_properties_1.default.testCafeDriverInstance}'].onCustomClientScriptError(e, '${script.module || ''}');
|
|
14
|
-
}`;
|
|
15
|
-
}
|
|
16
|
-
exports.default = getCustomClientScriptCode;
|
|
14
|
+
}`;
|
|
15
|
+
}
|
|
16
|
+
exports.default = getCustomClientScriptCode;
|
|
17
17
|
module.exports = exports.default;
|
|
18
18
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VzdG9tLWNsaWVudC1zY3JpcHRzL2dldC1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkRBQW9EO0FBQ3BELCtGQUF1RTtBQUd2RSxTQUF3Qix5QkFBeUIsQ0FBRSxNQUFvQjtJQUNuRSxPQUFPO1VBQ0QsbUNBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDOzs7aUJBR3RCLDZCQUFtQixDQUFDLHNCQUFzQixvQ0FBb0MsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFO01BQzVHLENBQUM7QUFDUCxDQUFDO0FBUEQsNENBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9jZXNzU2NyaXB0IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgSU5URVJOQUxfUFJPUEVSVElFUyBmcm9tICcuLi9jbGllbnQvZHJpdmVyL2ludGVybmFsLXByb3BlcnRpZXMnO1xuaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuL2NsaWVudC1zY3JpcHQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDdXN0b21DbGllbnRTY3JpcHRDb2RlIChzY3JpcHQ6IENsaWVudFNjcmlwdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB0cnkge1xuICAgICAgICAke3Byb2Nlc3NTY3JpcHQoc2NyaXB0LmNvbnRlbnQpfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgIHdpbmRvd1snJHtJTlRFUk5BTF9QUk9QRVJUSUVTLnRlc3RDYWZlRHJpdmVySW5zdGFuY2V9J10ub25DdXN0b21DbGllbnRTY3JpcHRFcnJvcihlLCAnJHtzY3JpcHQubW9kdWxlIHx8ICcnfScpO1xuICAgIH1gO1xufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function default_1(script) {
|
|
4
|
-
return `/custom-client-scripts/${script.url}`;
|
|
5
|
-
}
|
|
6
|
-
exports.default = default_1;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function default_1(script) {
|
|
4
|
+
return `/custom-client-scripts/${script.url}`;
|
|
5
|
+
}
|
|
6
|
+
exports.default = default_1;
|
|
7
7
|
module.exports = exports.default;
|
|
8
8
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXVybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b20tY2xpZW50LXNjcmlwdHMvZ2V0LXVybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLG1CQUF5QixNQUFvQjtJQUN6QyxPQUFPLDBCQUEwQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEQsQ0FBQztBQUZELDRCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuL2NsaWVudC1zY3JpcHQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc2NyaXB0OiBDbGllbnRTY3JpcHQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgL2N1c3RvbS1jbGllbnQtc2NyaXB0cy8ke3NjcmlwdC51cmx9YDtcbn1cbiJdfQ==
|
|
@@ -1,17 +1,17 @@
|
|
|
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 client_script_1 = __importDefault(require("./client-script"));
|
|
7
|
-
function createScripts(scriptInits, basePath) {
|
|
8
|
-
return scriptInits.map(scriptInit => new client_script_1.default(scriptInit, basePath));
|
|
9
|
-
}
|
|
10
|
-
async function default_1(scriptInits, basePath) {
|
|
11
|
-
const scripts = createScripts(scriptInits, basePath || process.cwd());
|
|
12
|
-
await Promise.all(scripts.map(script => script.load()));
|
|
13
|
-
return scripts;
|
|
14
|
-
}
|
|
15
|
-
exports.default = default_1;
|
|
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 client_script_1 = __importDefault(require("./client-script"));
|
|
7
|
+
function createScripts(scriptInits, basePath) {
|
|
8
|
+
return scriptInits.map(scriptInit => new client_script_1.default(scriptInit, basePath));
|
|
9
|
+
}
|
|
10
|
+
async function default_1(scriptInits, basePath) {
|
|
11
|
+
const scripts = createScripts(scriptInits, basePath || process.cwd());
|
|
12
|
+
await Promise.all(scripts.map(script => script.load()));
|
|
13
|
+
return scripts;
|
|
14
|
+
}
|
|
15
|
+
exports.default = default_1;
|
|
16
16
|
module.exports = exports.default;
|
|
17
17
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b20tY2xpZW50LXNjcmlwdHMvbG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9FQUEyQztBQUczQyxTQUFTLGFBQWEsQ0FBRSxXQUEwQyxFQUFFLFFBQWdCO0lBQ2hGLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksdUJBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRWMsS0FBSyxvQkFBVyxXQUEwQyxFQUFFLFFBQWlCO0lBQ3hGLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRXRFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV4RCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBTkQsNEJBTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2xpZW50U2NyaXB0IGZyb20gJy4vY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNjcmlwdHMgKHNjcmlwdEluaXRzOiAoc3RyaW5nIHwgQ2xpZW50U2NyaXB0SW5pdClbXSwgYmFzZVBhdGg6IHN0cmluZyk6IENsaWVudFNjcmlwdFtdIHtcbiAgICByZXR1cm4gc2NyaXB0SW5pdHMubWFwKHNjcmlwdEluaXQgPT4gbmV3IENsaWVudFNjcmlwdChzY3JpcHRJbml0LCBiYXNlUGF0aCkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiAoc2NyaXB0SW5pdHM6IChzdHJpbmcgfCBDbGllbnRTY3JpcHRJbml0KVtdLCBiYXNlUGF0aD86IHN0cmluZyk6IFByb21pc2U8Q2xpZW50U2NyaXB0W10+IHtcbiAgICBjb25zdCBzY3JpcHRzID0gY3JlYXRlU2NyaXB0cyhzY3JpcHRJbml0cywgYmFzZVBhdGggfHwgcHJvY2Vzcy5jd2QoKSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChzY3JpcHRzLm1hcChzY3JpcHQgPT4gc2NyaXB0LmxvYWQoKSkpO1xuXG4gICAgcmV0dXJuIHNjcmlwdHM7XG59XG4iXX0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvYmxlbWF0aWMtc2NyaXB0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b20tY2xpZW50LXNjcmlwdHMvcHJvYmxlbWF0aWMtc2NyaXB0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENsaWVudFNjcmlwdCBmcm9tICcuL2NsaWVudC1zY3JpcHQnO1xuXG5pbnRlcmZhY2UgUHJvYmxlbWF0aWNTY3JpcHRzIHtcbiAgICBkdXBsaWNhdGVkQ29udGVudDogQ2xpZW50U2NyaXB0W107XG4gICAgZW1wdHk6IENsaWVudFNjcmlwdFtdO1xufVxuXG4vL05PVEU6IGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzE5NFxuZXhwb3J0IGRlZmF1bHQgUHJvYmxlbWF0aWNTY3JpcHRzOyAvKmVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWYqL1xuIl19
|
|
@@ -1,37 +1,37 @@
|
|
|
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
|
-
exports.unRegister = exports.register = exports.isLegacyTest = void 0;
|
|
7
|
-
const get_url_1 = __importDefault(require("./get-url"));
|
|
8
|
-
const get_code_1 = __importDefault(require("./get-code"));
|
|
9
|
-
const content_types_1 = __importDefault(require("../assets/content-types"));
|
|
10
|
-
function isLegacyTest(test) {
|
|
11
|
-
return !!test.isLegacy;
|
|
12
|
-
}
|
|
13
|
-
exports.isLegacyTest = isLegacyTest;
|
|
14
|
-
function register(proxy, tests) {
|
|
15
|
-
const routes = [];
|
|
16
|
-
tests.forEach(test => {
|
|
17
|
-
if (isLegacyTest(test))
|
|
18
|
-
return;
|
|
19
|
-
test.clientScripts.forEach((script) => {
|
|
20
|
-
const route = get_url_1.default(script);
|
|
21
|
-
proxy.GET(route, {
|
|
22
|
-
content: get_code_1.default(script),
|
|
23
|
-
contentType: content_types_1.default.javascript
|
|
24
|
-
});
|
|
25
|
-
routes.push(route);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
return routes;
|
|
29
|
-
}
|
|
30
|
-
exports.register = register;
|
|
31
|
-
function unRegister(proxy, routes) {
|
|
32
|
-
routes.forEach(route => {
|
|
33
|
-
proxy.unRegisterRoute(route, 'GET');
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
exports.unRegister = unRegister;
|
|
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
|
+
exports.unRegister = exports.register = exports.isLegacyTest = void 0;
|
|
7
|
+
const get_url_1 = __importDefault(require("./get-url"));
|
|
8
|
+
const get_code_1 = __importDefault(require("./get-code"));
|
|
9
|
+
const content_types_1 = __importDefault(require("../assets/content-types"));
|
|
10
|
+
function isLegacyTest(test) {
|
|
11
|
+
return !!test.isLegacy;
|
|
12
|
+
}
|
|
13
|
+
exports.isLegacyTest = isLegacyTest;
|
|
14
|
+
function register(proxy, tests) {
|
|
15
|
+
const routes = [];
|
|
16
|
+
tests.forEach(test => {
|
|
17
|
+
if (isLegacyTest(test))
|
|
18
|
+
return;
|
|
19
|
+
test.clientScripts.forEach((script) => {
|
|
20
|
+
const route = get_url_1.default(script);
|
|
21
|
+
proxy.GET(route, {
|
|
22
|
+
content: get_code_1.default(script),
|
|
23
|
+
contentType: content_types_1.default.javascript
|
|
24
|
+
});
|
|
25
|
+
routes.push(route);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return routes;
|
|
29
|
+
}
|
|
30
|
+
exports.register = register;
|
|
31
|
+
function unRegister(proxy, routes) {
|
|
32
|
+
routes.forEach(route => {
|
|
33
|
+
proxy.unRegisterRoute(route, 'GET');
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.unRegister = unRegister;
|
|
37
37
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jdXN0b20tY2xpZW50LXNjcmlwdHMvcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBaUQ7QUFDakQsMERBQW1EO0FBQ25ELDRFQUFvRDtBQWVwRCxTQUFnQixZQUFZLENBQUUsSUFBYztJQUN4QyxPQUFPLENBQUMsQ0FBRSxJQUFtQixDQUFDLFFBQVEsQ0FBQztBQUMzQyxDQUFDO0FBRkQsb0NBRUM7QUFFRCxTQUFnQixRQUFRLENBQUUsS0FBWSxFQUFFLEtBQWE7SUFDakQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDakIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU87UUFFWCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQXdCLEVBQUUsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxpQkFBd0IsQ0FBQyxNQUFzQixDQUFDLENBQUM7WUFFL0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2IsT0FBTyxFQUFNLGtCQUF5QixDQUFDLE1BQXNCLENBQUM7Z0JBQzlELFdBQVcsRUFBRSx1QkFBYSxDQUFDLFVBQVU7YUFDeEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQXBCRCw0QkFvQkM7QUFFRCxTQUFnQixVQUFVLENBQUUsS0FBWSxFQUFFLE1BQWdCO0lBQ3RELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBSkQsZ0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Q3VzdG9tQ2xpZW50U2NyaXB0VXJsIGZyb20gJy4vZ2V0LXVybCc7XG5pbXBvcnQgZ2V0Q3VzdG9tQ2xpZW50U2NyaXB0Q29kZSBmcm9tICcuL2dldC1jb2RlJztcbmltcG9ydCBDT05URU5UX1RZUEVTIGZyb20gJy4uL2Fzc2V0cy9jb250ZW50LXR5cGVzJztcbmltcG9ydCBDbGllbnRTY3JpcHQgZnJvbSAnLi9jbGllbnQtc2NyaXB0JztcbmltcG9ydCB7IFByb3h5IH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuL2NsaWVudC1zY3JpcHQtaW5pdCc7XG5cbmludGVyZmFjZSBUZXN0IHtcbiAgICBjbGllbnRTY3JpcHRzOiBDbGllbnRTY3JpcHRJbml0W107XG59XG5cbmludGVyZmFjZSBMZWdhY3lUZXN0IHtcbiAgICBpc0xlZ2FjeTogYm9vbGVhbjtcbn1cblxudHlwZSBUZXN0SXRlbSA9IFRlc3QgfCBMZWdhY3lUZXN0O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWdhY3lUZXN0ICh0ZXN0OiBUZXN0SXRlbSk6IHRlc3QgaXMgTGVnYWN5VGVzdCB7XG4gICAgcmV0dXJuICEhKHRlc3QgYXMgTGVnYWN5VGVzdCkuaXNMZWdhY3k7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlciAocHJveHk6IFByb3h5LCB0ZXN0czogVGVzdFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJvdXRlczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRlc3RzLmZvckVhY2godGVzdCA9PiB7XG4gICAgICAgIGlmIChpc0xlZ2FjeVRlc3QodGVzdCkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGVzdC5jbGllbnRTY3JpcHRzLmZvckVhY2goKHNjcmlwdDogQ2xpZW50U2NyaXB0SW5pdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBnZXRDdXN0b21DbGllbnRTY3JpcHRVcmwoc2NyaXB0IGFzIENsaWVudFNjcmlwdCk7XG5cbiAgICAgICAgICAgIHByb3h5LkdFVChyb3V0ZSwge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICAgICBnZXRDdXN0b21DbGllbnRTY3JpcHRDb2RlKHNjcmlwdCBhcyBDbGllbnRTY3JpcHQpLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBDT05URU5UX1RZUEVTLmphdmFzY3JpcHRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByb3V0ZXMucHVzaChyb3V0ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdXRlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuUmVnaXN0ZXIgKHByb3h5OiBQcm94eSwgcm91dGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHJvdXRlcy5mb3JFYWNoKHJvdXRlID0+IHtcbiAgICAgICAgcHJveHkudW5SZWdpc3RlclJvdXRlKHJvdXRlLCAnR0VUJyk7XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -1,61 +1,61 @@
|
|
|
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
|
-
exports.findProblematicScripts = exports.setUniqueUrls = void 0;
|
|
7
|
-
const lodash_1 = require("lodash");
|
|
8
|
-
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
9
|
-
const client_script_1 = __importDefault(require("./client-script"));
|
|
10
|
-
function getScriptGroupValues(collection, groupByPredicate, pickByPredicate) {
|
|
11
|
-
return lodash_1.chain(collection)
|
|
12
|
-
.groupBy(groupByPredicate)
|
|
13
|
-
.pickBy(pickByPredicate)
|
|
14
|
-
.values()
|
|
15
|
-
.value();
|
|
16
|
-
}
|
|
17
|
-
function getDuplicatedScripts(collection) {
|
|
18
|
-
const contentGroups = getScriptGroupValues(collection, (s) => s.hash, (g) => g.length > 1);
|
|
19
|
-
const duplicatedScripts = [];
|
|
20
|
-
contentGroups.forEach(contentGroup => {
|
|
21
|
-
const pageGroups = getScriptGroupValues(contentGroup, (s) => s.page.toString());
|
|
22
|
-
if (pageGroups.length === 1 && testcafe_hammerhead_1.RequestFilterRule.isANY(pageGroups[0][0].page)) { /*eslint-disable-line no-extra-parens*/
|
|
23
|
-
duplicatedScripts.push(pageGroups[0][0]);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const forAllPagesGroup = pageGroups.find(pg => testcafe_hammerhead_1.RequestFilterRule.isANY(pg[0].page)); /*eslint-disable-line no-extra-parens*/
|
|
27
|
-
if (forAllPagesGroup) {
|
|
28
|
-
pageGroups
|
|
29
|
-
.filter(pg => !testcafe_hammerhead_1.RequestFilterRule.isANY(pg[0].page)) /*eslint-disable-line no-extra-parens*/
|
|
30
|
-
.forEach(pg => {
|
|
31
|
-
duplicatedScripts.push(pg[0]);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
pageGroups
|
|
36
|
-
.filter(pg => pg.length > 1)
|
|
37
|
-
.forEach(pg => {
|
|
38
|
-
duplicatedScripts.push(pg[0]);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
return duplicatedScripts;
|
|
43
|
-
}
|
|
44
|
-
function setUniqueUrls(collection) {
|
|
45
|
-
const scriptsWithDuplicatedUrls = getDuplicatedScripts(collection);
|
|
46
|
-
for (let i = 0; i < scriptsWithDuplicatedUrls.length; i++)
|
|
47
|
-
scriptsWithDuplicatedUrls[i].url = scriptsWithDuplicatedUrls[i].url + '-' + testcafe_hammerhead_1.generateUniqueId(client_script_1.default.URL_UNIQUE_PART_LENGTH);
|
|
48
|
-
return collection;
|
|
49
|
-
}
|
|
50
|
-
exports.setUniqueUrls = setUniqueUrls;
|
|
51
|
-
function findProblematicScripts(collection) {
|
|
52
|
-
const nonEmptyScripts = collection.filter(s => !!s.content);
|
|
53
|
-
const duplicatedContent = getDuplicatedScripts(nonEmptyScripts);
|
|
54
|
-
const empty = collection.filter(s => !s.content);
|
|
55
|
-
return {
|
|
56
|
-
duplicatedContent,
|
|
57
|
-
empty
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
exports.findProblematicScripts = findProblematicScripts;
|
|
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
|
+
exports.findProblematicScripts = exports.setUniqueUrls = void 0;
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
9
|
+
const client_script_1 = __importDefault(require("./client-script"));
|
|
10
|
+
function getScriptGroupValues(collection, groupByPredicate, pickByPredicate) {
|
|
11
|
+
return lodash_1.chain(collection)
|
|
12
|
+
.groupBy(groupByPredicate)
|
|
13
|
+
.pickBy(pickByPredicate)
|
|
14
|
+
.values()
|
|
15
|
+
.value();
|
|
16
|
+
}
|
|
17
|
+
function getDuplicatedScripts(collection) {
|
|
18
|
+
const contentGroups = getScriptGroupValues(collection, (s) => s.hash, (g) => g.length > 1);
|
|
19
|
+
const duplicatedScripts = [];
|
|
20
|
+
contentGroups.forEach(contentGroup => {
|
|
21
|
+
const pageGroups = getScriptGroupValues(contentGroup, (s) => s.page.toString());
|
|
22
|
+
if (pageGroups.length === 1 && testcafe_hammerhead_1.RequestFilterRule.isANY(pageGroups[0][0].page)) { /*eslint-disable-line no-extra-parens*/
|
|
23
|
+
duplicatedScripts.push(pageGroups[0][0]);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const forAllPagesGroup = pageGroups.find(pg => testcafe_hammerhead_1.RequestFilterRule.isANY(pg[0].page)); /*eslint-disable-line no-extra-parens*/
|
|
27
|
+
if (forAllPagesGroup) {
|
|
28
|
+
pageGroups
|
|
29
|
+
.filter(pg => !testcafe_hammerhead_1.RequestFilterRule.isANY(pg[0].page)) /*eslint-disable-line no-extra-parens*/
|
|
30
|
+
.forEach(pg => {
|
|
31
|
+
duplicatedScripts.push(pg[0]);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
pageGroups
|
|
36
|
+
.filter(pg => pg.length > 1)
|
|
37
|
+
.forEach(pg => {
|
|
38
|
+
duplicatedScripts.push(pg[0]);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
return duplicatedScripts;
|
|
43
|
+
}
|
|
44
|
+
function setUniqueUrls(collection) {
|
|
45
|
+
const scriptsWithDuplicatedUrls = getDuplicatedScripts(collection);
|
|
46
|
+
for (let i = 0; i < scriptsWithDuplicatedUrls.length; i++)
|
|
47
|
+
scriptsWithDuplicatedUrls[i].url = scriptsWithDuplicatedUrls[i].url + '-' + testcafe_hammerhead_1.generateUniqueId(client_script_1.default.URL_UNIQUE_PART_LENGTH);
|
|
48
|
+
return collection;
|
|
49
|
+
}
|
|
50
|
+
exports.setUniqueUrls = setUniqueUrls;
|
|
51
|
+
function findProblematicScripts(collection) {
|
|
52
|
+
const nonEmptyScripts = collection.filter(s => !!s.content);
|
|
53
|
+
const duplicatedContent = getDuplicatedScripts(nonEmptyScripts);
|
|
54
|
+
const empty = collection.filter(s => !s.content);
|
|
55
|
+
return {
|
|
56
|
+
duplicatedContent,
|
|
57
|
+
empty
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
exports.findProblematicScripts = findProblematicScripts;
|
|
61
61
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VzdG9tLWNsaWVudC1zY3JpcHRzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1DQUErQjtBQUMvQiw2REFBMEU7QUFDMUUsb0VBQTJDO0FBRzNDLFNBQVMsb0JBQW9CLENBQUUsVUFBMEIsRUFBRSxnQkFBMEIsRUFBRSxlQUFtRTtJQUN0SixPQUFPLGNBQUssQ0FBQyxVQUFVLENBQUM7U0FDbkIsT0FBTyxDQUFDLGdCQUFnQixDQUFDO1NBQ3pCLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDdkIsTUFBTSxFQUFFO1NBQ1IsS0FBSyxFQUFzQixDQUFDO0FBQ3JDLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFFLFVBQTBCO0lBQ3JELE1BQU0sYUFBYSxHQUF1QixvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdJLE1BQU0saUJBQWlCLEdBQW1CLEVBQUUsQ0FBQztJQUU3QyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLFlBQThCLEVBQUUsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUVoSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLHVDQUFpQixDQUFDLEtBQUssQ0FBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsdUNBQXVDO1lBQ3RJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFpQixDQUFDLENBQUM7WUFFekQsT0FBTztTQUNWO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsdUNBQWlCLENBQUMsS0FBSyxDQUFFLEVBQUUsQ0FBQyxDQUFDLENBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztRQUU5SSxJQUFJLGdCQUFnQixFQUFFO1lBQ2xCLFVBQVU7aUJBQ0wsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyx1Q0FBaUIsQ0FBQyxLQUFLLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztpQkFDNUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNWLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFpQixDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7U0FDVjthQUNJO1lBQ0QsVUFBVTtpQkFDTCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDM0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNWLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFpQixDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7U0FDVjtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxpQkFBaUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFFLFVBQTBCO0lBQ3JELE1BQU0seUJBQXlCLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7UUFDckQseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsc0NBQWdCLENBQUMsdUJBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRXRJLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFQRCxzQ0FPQztBQUVELFNBQWdCLHNCQUFzQixDQUFFLFVBQTBCO0lBQzlELE1BQU0sZUFBZSxHQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RSxNQUFNLGlCQUFpQixHQUFjLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sS0FBSyxHQUEwQixVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEUsT0FBTztRQUNILGlCQUFpQjtRQUNqQixLQUFLO0tBQ1IsQ0FBQztBQUNOLENBQUM7QUFURCx3REFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNoYWluIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSWQsIFJlcXVlc3RGaWx0ZXJSdWxlIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0IGZyb20gJy4vY2xpZW50LXNjcmlwdCc7XG5pbXBvcnQgUHJvYmxlbWF0aWNTY3JpcHRzIGZyb20gJy4vcHJvYmxlbWF0aWMtc2NyaXB0cyc7XG5cbmZ1bmN0aW9uIGdldFNjcmlwdEdyb3VwVmFsdWVzIChjb2xsZWN0aW9uOiBDbGllbnRTY3JpcHRbXSwgZ3JvdXBCeVByZWRpY2F0ZTogRnVuY3Rpb24sIHBpY2tCeVByZWRpY2F0ZT86ICgodmFsdWU6IENsaWVudFNjcmlwdFtdLCBrZXk6IHN0cmluZykgPT4gdW5rbm93bikpOiBDbGllbnRTY3JpcHRbXVtdIHtcbiAgICByZXR1cm4gY2hhaW4oY29sbGVjdGlvbilcbiAgICAgICAgLmdyb3VwQnkoZ3JvdXBCeVByZWRpY2F0ZSlcbiAgICAgICAgLnBpY2tCeShwaWNrQnlQcmVkaWNhdGUpXG4gICAgICAgIC52YWx1ZXMoKVxuICAgICAgICAudmFsdWUoKSBhcyBDbGllbnRTY3JpcHRbXVtdO1xufVxuXG5mdW5jdGlvbiBnZXREdXBsaWNhdGVkU2NyaXB0cyAoY29sbGVjdGlvbjogQ2xpZW50U2NyaXB0W10pOiBDbGllbnRTY3JpcHRbXSB7XG4gICAgY29uc3QgY29udGVudEdyb3VwcyAgICAgICAgICAgICAgICAgICAgID0gZ2V0U2NyaXB0R3JvdXBWYWx1ZXMoY29sbGVjdGlvbiwgKHM6IENsaWVudFNjcmlwdCkgPT4gcy5oYXNoLCAoZzogQ2xpZW50U2NyaXB0W10pID0+IGcubGVuZ3RoID4gMSk7XG4gICAgY29uc3QgZHVwbGljYXRlZFNjcmlwdHM6IENsaWVudFNjcmlwdFtdID0gW107XG5cbiAgICBjb250ZW50R3JvdXBzLmZvckVhY2goY29udGVudEdyb3VwID0+IHtcbiAgICAgICAgY29uc3QgcGFnZUdyb3VwcyA9IGdldFNjcmlwdEdyb3VwVmFsdWVzKGNvbnRlbnRHcm91cCBhcyBDbGllbnRTY3JpcHRbXSwgKHM6IENsaWVudFNjcmlwdCkgPT4gcy5wYWdlLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIGlmIChwYWdlR3JvdXBzLmxlbmd0aCA9PT0gMSAmJiBSZXF1ZXN0RmlsdGVyUnVsZS5pc0FOWSgocGFnZUdyb3Vwc1swXVswXSBhcyBDbGllbnRTY3JpcHQpLnBhZ2UpKSB7IC8qZXNsaW50LWRpc2FibGUtbGluZSBuby1leHRyYS1wYXJlbnMqL1xuICAgICAgICAgICAgZHVwbGljYXRlZFNjcmlwdHMucHVzaChwYWdlR3JvdXBzWzBdWzBdIGFzIENsaWVudFNjcmlwdCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvckFsbFBhZ2VzR3JvdXAgPSBwYWdlR3JvdXBzLmZpbmQocGcgPT4gUmVxdWVzdEZpbHRlclJ1bGUuaXNBTlkoKHBnWzBdIGFzIENsaWVudFNjcmlwdCkucGFnZSkpOyAvKmVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXh0cmEtcGFyZW5zKi9cblxuICAgICAgICBpZiAoZm9yQWxsUGFnZXNHcm91cCkge1xuICAgICAgICAgICAgcGFnZUdyb3Vwc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIocGcgPT4gIVJlcXVlc3RGaWx0ZXJSdWxlLmlzQU5ZKChwZ1swXSBhcyBDbGllbnRTY3JpcHQpLnBhZ2UpKSAvKmVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXh0cmEtcGFyZW5zKi9cbiAgICAgICAgICAgICAgICAuZm9yRWFjaChwZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZWRTY3JpcHRzLnB1c2gocGdbMF0gYXMgQ2xpZW50U2NyaXB0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhZ2VHcm91cHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHBnID0+IHBnLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgLmZvckVhY2gocGcgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVkU2NyaXB0cy5wdXNoKHBnWzBdIGFzIENsaWVudFNjcmlwdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkdXBsaWNhdGVkU2NyaXB0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFVuaXF1ZVVybHMgKGNvbGxlY3Rpb246IENsaWVudFNjcmlwdFtdKTogQ2xpZW50U2NyaXB0W10ge1xuICAgIGNvbnN0IHNjcmlwdHNXaXRoRHVwbGljYXRlZFVybHMgPSBnZXREdXBsaWNhdGVkU2NyaXB0cyhjb2xsZWN0aW9uKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2NyaXB0c1dpdGhEdXBsaWNhdGVkVXJscy5sZW5ndGg7IGkrKylcbiAgICAgICAgc2NyaXB0c1dpdGhEdXBsaWNhdGVkVXJsc1tpXS51cmwgPSBzY3JpcHRzV2l0aER1cGxpY2F0ZWRVcmxzW2ldLnVybCArICctJyArIGdlbmVyYXRlVW5pcXVlSWQoQ2xpZW50U2NyaXB0LlVSTF9VTklRVUVfUEFSVF9MRU5HVEgpO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUHJvYmxlbWF0aWNTY3JpcHRzIChjb2xsZWN0aW9uOiBDbGllbnRTY3JpcHRbXSk6IFByb2JsZW1hdGljU2NyaXB0cyB7XG4gICAgY29uc3Qgbm9uRW1wdHlTY3JpcHRzICAgICAgICAgICAgICA9IGNvbGxlY3Rpb24uZmlsdGVyKHMgPT4gISFzLmNvbnRlbnQpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZWRDb250ZW50ICAgICAgICAgICAgPSBnZXREdXBsaWNhdGVkU2NyaXB0cyhub25FbXB0eVNjcmlwdHMpO1xuICAgIGNvbnN0IGVtcHR5ICAgICAgICAgICAgICAgICAgICAgICAgPSBjb2xsZWN0aW9uLmZpbHRlcihzID0+ICFzLmNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZHVwbGljYXRlZENvbnRlbnQsXG4gICAgICAgIGVtcHR5XG4gICAgfTtcbn1cbiJdfQ==
|