testcafe 1.13.0 → 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 +88 -10
- package/LICENSE +21 -21
- package/README.md +52 -48
- package/bin/testcafe-with-v8-flag-filter.js +0 -0
- package/lib/api/exportable-lib/index.js +50 -50
- package/lib/api/request-hooks/assert-type.js +7 -7
- package/lib/api/request-hooks/hook-method-names.js +11 -0
- package/lib/api/request-hooks/hook.js +33 -39
- package/lib/api/request-hooks/interfaces.js +3 -3
- package/lib/api/request-hooks/request-logger.js +113 -111
- package/lib/api/request-hooks/request-mock/create-request-mock.js +12 -0
- package/lib/api/request-hooks/request-mock/index.js +46 -0
- package/lib/api/request-hooks/request-mock.js +47 -48
- 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 +359 -319
- 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 -279
- 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 +144 -46
- 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/browser/service-worker.js +4 -6
- package/lib/client/core/index.js +19 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/driver/index.js +1807 -451
- 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 -12
- package/lib/client/ui/index.min.js +1 -1
- 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 +156 -135
- 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 +22 -0
- package/lib/client-functions/selectors/add-api.js +646 -588
- 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 +154 -150
- 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 +64 -62
- 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 +43 -43
- 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 +3 -3
- 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 +10 -0
- package/lib/configuration/run-option-names.js +26 -26
- package/lib/configuration/screenshot-option-names.js +10 -10
- package/lib/configuration/testcafe-configuration.js +164 -165
- 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 +3 -3
- package/lib/custom-client-scripts/client-script.js +107 -108
- 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 +46 -46
- package/lib/errors/process-test-fn-error.js +37 -37
- package/lib/errors/runtime/index.js +123 -123
- package/lib/errors/runtime/templates.js +116 -114
- 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 +302 -302
- package/lib/errors/test-run/render-error-template.js +31 -31
- package/lib/errors/test-run/templates.js +93 -95
- package/lib/errors/test-run/utils.js +90 -85
- package/lib/errors/types.js +157 -155
- package/lib/index.js +81 -81
- package/lib/live/bootstrapper.js +44 -44
- 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 +168 -168
- 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 +12 -12
- package/lib/notifications/warning-log.js +32 -31
- package/lib/notifications/warning-message.js +48 -48
- 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 +136 -137
- 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 +272 -272
- package/lib/runner/browser-job-result.js +9 -9
- package/lib/runner/browser-job.js +153 -123
- package/lib/runner/browser-set.js +114 -114
- package/lib/runner/fixture-hook-controller.js +85 -85
- package/lib/runner/index.js +450 -442
- package/lib/runner/interfaces.js +3 -3
- package/lib/runner/reporter-stream-controller.js +28 -28
- package/lib/runner/task/index.js +152 -133
- package/lib/runner/task/phase.js +9 -9
- package/lib/runner/test-run-controller.js +166 -185
- package/lib/runner/tested-app.js +73 -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 -106
- package/lib/services/compiler/io.js +9 -9
- package/lib/services/compiler/protocol.js +17 -16
- package/lib/services/compiler/service.js +225 -106
- package/lib/services/compiler/test-run-proxy.js +111 -73
- package/lib/services/interfaces.js +3 -0
- 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 +27 -0
- package/lib/services/serialization/replicator/custom-error-transform.js +28 -0
- package/lib/services/serialization/test-structure.js +93 -77
- 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 +76 -73
- package/lib/services/utils/ipc/packet.js +55 -55
- package/lib/services/utils/ipc/proxy.js +110 -118
- 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 -425
- 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 -60
- 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 -752
- 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 +119 -114
- 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 +53 -53
- package/lib/utils/diff/util.js +24 -22
- 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 +21 -19
- package/lib/utils/get-options/meta.js +22 -22
- package/lib/utils/get-options/quarantine.js +92 -0
- 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 +18 -18
- 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 +12 -0
- 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 +10 -10
- 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 +7 -7
- package/ts-defs/index.d.ts +109 -17
- package/ts-defs/selectors.d.ts +95 -7
- package/ts-defs/testcafe-scripts.d.ts +96 -8
|
@@ -1,113 +1,113 @@
|
|
|
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.assertType = exports.is = void 0;
|
|
7
|
-
const lodash_1 = require("lodash");
|
|
8
|
-
const _1 = require("./");
|
|
9
|
-
const types_1 = require("../types");
|
|
10
|
-
const hook_1 = __importDefault(require("../../api/request-hooks/hook"));
|
|
11
|
-
const test_timeout_1 = __importDefault(require("../../api/structure/test-timeout"));
|
|
12
|
-
const START_FROM_VOWEL_RE = /^[aeiou]/i;
|
|
13
|
-
function getIndefiniteArticle(text) {
|
|
14
|
-
return START_FROM_VOWEL_RE.test(text) ? 'an' : 'a';
|
|
15
|
-
}
|
|
16
|
-
function isNonNegativeValue(value) {
|
|
17
|
-
return lodash_1.isFinite(value) && value >= 0;
|
|
18
|
-
}
|
|
19
|
-
function getNumberTypeActualValueMsg(value, type) {
|
|
20
|
-
if (type !== 'number')
|
|
21
|
-
return type;
|
|
22
|
-
if (Number.isNaN(value))
|
|
23
|
-
return NaN;
|
|
24
|
-
if (!lodash_1.isFinite(value))
|
|
25
|
-
return Infinity;
|
|
26
|
-
return value;
|
|
27
|
-
}
|
|
28
|
-
function hasSomePropInObject(obj, props) {
|
|
29
|
-
return !!obj &&
|
|
30
|
-
typeof obj === 'object' &&
|
|
31
|
-
props.some(prop => prop in obj);
|
|
32
|
-
}
|
|
33
|
-
exports.is = {
|
|
34
|
-
number: {
|
|
35
|
-
name: 'number',
|
|
36
|
-
predicate: lodash_1.isFinite,
|
|
37
|
-
getActualValueMsg: getNumberTypeActualValueMsg
|
|
38
|
-
},
|
|
39
|
-
nonNegativeNumber: {
|
|
40
|
-
name: 'non-negative number',
|
|
41
|
-
predicate: isNonNegativeValue,
|
|
42
|
-
getActualValueMsg: getNumberTypeActualValueMsg
|
|
43
|
-
},
|
|
44
|
-
nonNegativeNumberString: {
|
|
45
|
-
name: 'non-negative number',
|
|
46
|
-
predicate: value => isNonNegativeValue(parseInt(value, 10)),
|
|
47
|
-
getActualValueMsg: value => {
|
|
48
|
-
const number = parseInt(value, 10);
|
|
49
|
-
return isNaN(number) ? JSON.stringify(value) : number;
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
boolean: {
|
|
53
|
-
name: 'boolean',
|
|
54
|
-
predicate: (value, type) => type === 'boolean'
|
|
55
|
-
},
|
|
56
|
-
string: {
|
|
57
|
-
name: 'string',
|
|
58
|
-
predicate: (value, type) => type === 'string'
|
|
59
|
-
},
|
|
60
|
-
function: {
|
|
61
|
-
name: 'function',
|
|
62
|
-
predicate: (value, type) => type === 'function'
|
|
63
|
-
},
|
|
64
|
-
regExp: {
|
|
65
|
-
name: 'regular expression',
|
|
66
|
-
predicate: lodash_1.isRegExp
|
|
67
|
-
},
|
|
68
|
-
array: {
|
|
69
|
-
name: 'array',
|
|
70
|
-
predicate: value => Array.isArray(value)
|
|
71
|
-
},
|
|
72
|
-
nonNullObject: {
|
|
73
|
-
name: 'non-null object',
|
|
74
|
-
predicate: (value, type) => type === 'object' && !lodash_1.isNil(value),
|
|
75
|
-
getActualValueMsg: (value, type) => lodash_1.isNil(value) ? String(value) : type
|
|
76
|
-
},
|
|
77
|
-
requestHookSubclass: {
|
|
78
|
-
name: 'RequestHook subclass',
|
|
79
|
-
predicate: value => value instanceof hook_1.default && value.constructor && value.constructor !== hook_1.default
|
|
80
|
-
},
|
|
81
|
-
clientScriptInitializer: {
|
|
82
|
-
name: 'client script initializer',
|
|
83
|
-
predicate: obj => hasSomePropInObject(obj, ['path', 'content', 'module'])
|
|
84
|
-
},
|
|
85
|
-
testTimeouts: {
|
|
86
|
-
name: 'test timeouts initializer',
|
|
87
|
-
predicate: obj => hasSomePropInObject(obj, Object.keys(test_timeout_1.default))
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
function assertType(types, callsiteName, what, value) {
|
|
91
|
-
types = lodash_1.castArray(types);
|
|
92
|
-
let pass = false;
|
|
93
|
-
const actualType = typeof value;
|
|
94
|
-
let actualMsg = actualType;
|
|
95
|
-
let expectedTypeMsg = '';
|
|
96
|
-
const last = types.length - 1;
|
|
97
|
-
types.forEach((type, i) => {
|
|
98
|
-
pass = pass || type.predicate(value, actualType);
|
|
99
|
-
if (type.getActualValueMsg)
|
|
100
|
-
actualMsg = type.getActualValueMsg(value, actualType);
|
|
101
|
-
if (i === 0)
|
|
102
|
-
expectedTypeMsg += type.name;
|
|
103
|
-
else
|
|
104
|
-
expectedTypeMsg += (i === last ? ' or ' + getIndefiniteArticle(type.name) + ' ' : ', ') + type.name;
|
|
105
|
-
});
|
|
106
|
-
if (!pass) {
|
|
107
|
-
throw callsiteName ?
|
|
108
|
-
new _1.APIError(callsiteName, types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg) :
|
|
109
|
-
new _1.GeneralError(types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
exports.assertType = assertType;
|
|
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.assertType = exports.is = void 0;
|
|
7
|
+
const lodash_1 = require("lodash");
|
|
8
|
+
const _1 = require("./");
|
|
9
|
+
const types_1 = require("../types");
|
|
10
|
+
const hook_1 = __importDefault(require("../../api/request-hooks/hook"));
|
|
11
|
+
const test_timeout_1 = __importDefault(require("../../api/structure/test-timeout"));
|
|
12
|
+
const START_FROM_VOWEL_RE = /^[aeiou]/i;
|
|
13
|
+
function getIndefiniteArticle(text) {
|
|
14
|
+
return START_FROM_VOWEL_RE.test(text) ? 'an' : 'a';
|
|
15
|
+
}
|
|
16
|
+
function isNonNegativeValue(value) {
|
|
17
|
+
return lodash_1.isFinite(value) && value >= 0;
|
|
18
|
+
}
|
|
19
|
+
function getNumberTypeActualValueMsg(value, type) {
|
|
20
|
+
if (type !== 'number')
|
|
21
|
+
return type;
|
|
22
|
+
if (Number.isNaN(value))
|
|
23
|
+
return NaN;
|
|
24
|
+
if (!lodash_1.isFinite(value))
|
|
25
|
+
return Infinity;
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function hasSomePropInObject(obj, props) {
|
|
29
|
+
return !!obj &&
|
|
30
|
+
typeof obj === 'object' &&
|
|
31
|
+
props.some(prop => prop in obj);
|
|
32
|
+
}
|
|
33
|
+
exports.is = {
|
|
34
|
+
number: {
|
|
35
|
+
name: 'number',
|
|
36
|
+
predicate: lodash_1.isFinite,
|
|
37
|
+
getActualValueMsg: getNumberTypeActualValueMsg
|
|
38
|
+
},
|
|
39
|
+
nonNegativeNumber: {
|
|
40
|
+
name: 'non-negative number',
|
|
41
|
+
predicate: isNonNegativeValue,
|
|
42
|
+
getActualValueMsg: getNumberTypeActualValueMsg
|
|
43
|
+
},
|
|
44
|
+
nonNegativeNumberString: {
|
|
45
|
+
name: 'non-negative number',
|
|
46
|
+
predicate: value => isNonNegativeValue(parseInt(value, 10)),
|
|
47
|
+
getActualValueMsg: value => {
|
|
48
|
+
const number = parseInt(value, 10);
|
|
49
|
+
return isNaN(number) ? JSON.stringify(value) : number;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
boolean: {
|
|
53
|
+
name: 'boolean',
|
|
54
|
+
predicate: (value, type) => type === 'boolean'
|
|
55
|
+
},
|
|
56
|
+
string: {
|
|
57
|
+
name: 'string',
|
|
58
|
+
predicate: (value, type) => type === 'string'
|
|
59
|
+
},
|
|
60
|
+
function: {
|
|
61
|
+
name: 'function',
|
|
62
|
+
predicate: (value, type) => type === 'function'
|
|
63
|
+
},
|
|
64
|
+
regExp: {
|
|
65
|
+
name: 'regular expression',
|
|
66
|
+
predicate: lodash_1.isRegExp
|
|
67
|
+
},
|
|
68
|
+
array: {
|
|
69
|
+
name: 'array',
|
|
70
|
+
predicate: value => Array.isArray(value)
|
|
71
|
+
},
|
|
72
|
+
nonNullObject: {
|
|
73
|
+
name: 'non-null object',
|
|
74
|
+
predicate: (value, type) => type === 'object' && !lodash_1.isNil(value),
|
|
75
|
+
getActualValueMsg: (value, type) => lodash_1.isNil(value) ? String(value) : type
|
|
76
|
+
},
|
|
77
|
+
requestHookSubclass: {
|
|
78
|
+
name: 'RequestHook subclass',
|
|
79
|
+
predicate: value => value instanceof hook_1.default && value.constructor && value.constructor !== hook_1.default
|
|
80
|
+
},
|
|
81
|
+
clientScriptInitializer: {
|
|
82
|
+
name: 'client script initializer',
|
|
83
|
+
predicate: obj => hasSomePropInObject(obj, ['path', 'content', 'module'])
|
|
84
|
+
},
|
|
85
|
+
testTimeouts: {
|
|
86
|
+
name: 'test timeouts initializer',
|
|
87
|
+
predicate: obj => hasSomePropInObject(obj, Object.keys(test_timeout_1.default))
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function assertType(types, callsiteName, what, value) {
|
|
91
|
+
types = lodash_1.castArray(types);
|
|
92
|
+
let pass = false;
|
|
93
|
+
const actualType = typeof value;
|
|
94
|
+
let actualMsg = actualType;
|
|
95
|
+
let expectedTypeMsg = '';
|
|
96
|
+
const last = types.length - 1;
|
|
97
|
+
types.forEach((type, i) => {
|
|
98
|
+
pass = pass || type.predicate(value, actualType);
|
|
99
|
+
if (type.getActualValueMsg)
|
|
100
|
+
actualMsg = type.getActualValueMsg(value, actualType);
|
|
101
|
+
if (i === 0)
|
|
102
|
+
expectedTypeMsg += type.name;
|
|
103
|
+
else
|
|
104
|
+
expectedTypeMsg += (i === last ? ' or ' + getIndefiniteArticle(type.name) + ' ' : ', ') + type.name;
|
|
105
|
+
});
|
|
106
|
+
if (!pass) {
|
|
107
|
+
throw callsiteName ?
|
|
108
|
+
new _1.APIError(callsiteName, types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg) :
|
|
109
|
+
new _1.GeneralError(types_1.RUNTIME_ERRORS.invalidValueType, what, expectedTypeMsg, actualMsg);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.assertType = assertType;
|
|
113
113
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1hc3NlcnRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtQ0FLZ0I7QUFFaEIseUJBQTRDO0FBQzVDLG9DQUEwQztBQUMxQyx3RUFBdUQ7QUFDdkQsb0ZBQTJEO0FBRTNELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBRXhDLFNBQVMsb0JBQW9CLENBQUUsSUFBSTtJQUMvQixPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUUsS0FBSztJQUM5QixPQUFPLGlCQUFjLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBRSxLQUFLLEVBQUUsSUFBSTtJQUM3QyxJQUFJLElBQUksS0FBSyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBRWhCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDbkIsT0FBTyxHQUFHLENBQUM7SUFFZixJQUFJLENBQUMsaUJBQWMsQ0FBQyxLQUFLLENBQUM7UUFDdEIsT0FBTyxRQUFRLENBQUM7SUFFcEIsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUUsR0FBRyxFQUFFLEtBQUs7SUFDcEMsT0FBTyxDQUFDLENBQUMsR0FBRztRQUNSLE9BQU8sR0FBRyxLQUFLLFFBQVE7UUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRVksUUFBQSxFQUFFLEdBQUc7SUFDZCxNQUFN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dCI6WyJpbXBvcnQge1xuICAgIGlzRmluaXRlIGFzIGlzRmluaXRlTnVtYmVyLFxuICAgIGlzUmVnRXhwLFxuICAgIGlzTmlsIGFzIGlzTnVsbE9yVW5kZWZpbmVkLFxuICAgIGNhc3RBcnJheVxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBBUElFcnJvciwgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVxdWVzdEhvb2sgZnJvbSAnLi4vLi4vYXBpL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgVGVzdFRpbWVvdXQgZnJvbSAnLi4vLi4vYXBpL3N0cnVjdHVyZS90ZXN0LXRpbWVvdXQnO1xuXG5jb25zdCBTVEFSVF9GUk9NX1ZPV0VMX1JFID0gL15bYWVpb3VdL2k7XG5cbmZ1bmN0aW9uIGdldEluZGVmaW5pdGVBcnRpY2xlICh0ZXh0KSB7XG4gICAgcmV0dXJuIFNUQVJUX0ZST01fVk9XRUxfUkUudGVzdCh0ZXh0KSA/ICdhbicgOiAnYSc7XG59XG5cbmZ1bmN0aW9uIGlzTm9uTmVnYXRpdmVWYWx1ZSAodmFsdWUpIHtcbiAgICByZXR1cm4gaXNGaW5pdGVOdW1iZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG5cbmZ1bmN0aW9uIGdldE51bWJlclR5cGVBY3R1YWxWYWx1ZU1zZyAodmFsdWUsIHR5cGUpIHtcbiAgICBpZiAodHlwZSAhPT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpXG4gICAgICAgIHJldHVybiBOYU47XG5cbiAgICBpZiAoIWlzRmluaXRlTnVtYmVyKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIEluZmluaXR5O1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBoYXNTb21lUHJvcEluT2JqZWN0IChvYmosIHByb3BzKSB7XG4gICAgcmV0dXJuICEhb2JqICYmXG4gICAgICAgIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmXG4gICAgICAgIHByb3BzLnNvbWUocHJvcCA9PiBwcm9wIGluIG9iaik7XG59XG5cbmV4cG9ydCBjb25zdCBpcyA9IHtcbiAgICBudW1iZXI6IHtcbiAgICAgICAgbmFtZTogICAgICAgICAgICAgICdudW1iZXInLFxuICAgICAgICBwcmVkaWNhdGU6ICAgICAgICAgaXNGaW5pdGVOdW1iZXIsXG4gICAgICAgIGdldEFjdHVhbFZhbHVlTXNnOiBnZXROdW1iZXJUeXBlQWN0dWFsVmFsdWVNc2dcbiAgICB9LFxuXG4gICAgbm9uTmVnYXRpdmVOdW1iZXI6IHtcbiAgICAgICAgbmFtZTogICAgICAgICAgICAgICdub24tbmVnYXRpdmUgbnVtYmVyJyxcbiAgICAgICAgcHJlZGljYXRlOiAgICAgICAgIGlzTm9uTmVnYXRpdmVWYWx1ZSxcbiAgICAgICAgZ2V0QWN0dWFsVmFsdWVNc2c6IGdldE51bWJlclR5cGVBY3R1YWxWYWx1ZU1zZ1xuICAgIH0sXG5cbiAgICBub25OZWdhdGl2ZU51bWJlclN0cmluZzoge1xuICAgICAgICBuYW1lOiAgICAgICdub24tbmVnYXRpdmUgbnVtYmVyJyxcbiAgICAgICAgcHJlZGljYXRlOiB2YWx1ZSA9PiBpc05vbk5lZ2F0aXZlVmFsdWUocGFyc2VJbnQodmFsdWUsIDEwKSksXG5cbiAgICAgICAgZ2V0QWN0dWFsVmFsdWVNc2c6IHZhbHVlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cbiAgICAgICAgICAgIHJldHVybiBpc05hTihudW1iZXIpID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGJvb2xlYW46IHtcbiAgICAgICAgbmFtZTogICAgICAnYm9vbGVhbicsXG4gICAgICAgIHByZWRpY2F0ZTogKHZhbHVlLCB0eXBlKSA9PiB0eXBlID09PSAnYm9vbGVhbidcbiAgICB9LFxuXG4gICAgc3RyaW5nOiB7XG4gICAgICAgIG5hbWU6ICAgICAgJ3N0cmluZycsXG4gICAgICAgIHByZWRpY2F0ZTogKHZhbHVlLCB0eXBlKSA9PiB0eXBlID09PSAnc3RyaW5nJ1xuICAgIH0sXG5cbiAgICBmdW5jdGlvbjoge1xuICAgICAgICBuYW1lOiAgICAgICdmdW5jdGlvbicsXG4gICAgICAgIHByZWRpY2F0ZTogKHZhbHVlLCB0eXBlKSA9PiB0eXBlID09PSAnZnVuY3Rpb24nXG4gICAgfSxcblxuICAgIHJlZ0V4cDoge1xuICAgICAgICBuYW1lOiAgICAgICdyZWd1bGFyIGV4cHJlc3Npb24nLFxuICAgICAgICBwcmVkaWNhdGU6IGlzUmVnRXhwXG4gICAgfSxcblxuICAgIGFycmF5OiB7XG4gICAgICAgIG5hbWU6ICAgICAgJ2FycmF5JyxcbiAgICAgICAgcHJlZGljYXRlOiB2YWx1ZSA9PiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgIH0sXG5cbiAgICBub25OdWxsT2JqZWN0OiB7XG4gICAgICAgIG5hbWU6ICAgICAgICAgICAgICAnbm9uLW51bGwgb2JqZWN0JyxcbiAgICAgICAgcHJlZGljYXRlOiAgICAgICAgICh2YWx1ZSwgdHlwZSkgPT4gdHlwZSA9PT0gJ29iamVjdCcgJiYgIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSxcbiAgICAgICAgZ2V0QWN0dWFsVmFsdWVNc2c6ICh2YWx1ZSwgdHlwZSkgPT4gaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6IHR5cGVcbiAgICB9LFxuXG4gICAgcmVxdWVzdEhvb2tTdWJjbGFzczoge1xuICAgICAgICBuYW1lOiAgICAgICdSZXF1ZXN0SG9vayBzdWJjbGFzcycsXG4gICAgICAgIHByZWRpY2F0ZTogdmFsdWUgPT4gdmFsdWUgaW5zdGFuY2VvZiBSZXF1ZXN0SG9vayAmJiB2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gUmVxdWVzdEhvb2tcbiAgICB9LFxuXG4gICAgY2xpZW50U2NyaXB0SW5pdGlhbGl6ZXI6IHtcbiAgICAgICAgbmFtZTogICAgICAnY2xpZW50IHNjcmlwdCBpbml0aWFsaXplcicsXG4gICAgICAgIHByZWRpY2F0ZTogb2JqID0+IGhhc1NvbWVQcm9wSW5PYmplY3Qob2JqLCBbJ3BhdGgnLCAnY29udGVudCcsICdtb2R1bGUnXSlcbiAgICB9LFxuXG4gICAgdGVzdFRpbWVvdXRzOiB7XG4gICAgICAgIG5hbWU6ICAgICAgJ3Rlc3QgdGltZW91dHMgaW5pdGlhbGl6ZXInLFxuICAgICAgICBwcmVkaWNhdGU6IG9iaiA9PiBoYXNTb21lUHJvcEluT2JqZWN0KG9iaiwgT2JqZWN0LmtleXMoVGVzdFRpbWVvdXQpKVxuICAgIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRUeXBlICh0eXBlcywgY2FsbHNpdGVOYW1lLCB3aGF0LCB2YWx1ZSkge1xuICAgIHR5cGVzID0gY2FzdEFycmF5KHR5cGVzKTtcblxuICAgIGxldCBwYXNzICAgICAgICAgICAgPSBmYWxzZTtcbiAgICBjb25zdCBhY3R1YWxUeXBlICAgID0gdHlwZW9mIHZhbHVlO1xuICAgIGxldCBhY3R1YWxNc2cgICAgICAgPSBhY3R1YWxUeXBlO1xuICAgIGxldCBleHBlY3RlZFR5cGVNc2cgPSAnJztcbiAgICBjb25zdCBsYXN0ICAgICAgICAgICAgPSB0eXBlcy5sZW5ndGggLSAxO1xuXG4gICAgdHlwZXMuZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICAgICAgICBwYXNzID0gcGFzcyB8fCB0eXBlLnByZWRpY2F0ZSh2YWx1ZSwgYWN0dWFsVHlwZSk7XG5cbiAgICAgICAgaWYgKHR5cGUuZ2V0QWN0dWFsVmFsdWVNc2cpXG4gICAgICAgICAgICBhY3R1YWxNc2cgPSB0eXBlLmdldEFjdHVhbFZhbHVlTXNnKHZhbHVlLCBhY3R1YWxUeXBlKTtcblxuICAgICAgICBpZiAoaSA9PT0gMClcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZU1zZyArPSB0eXBlLm5hbWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGV4cGVjdGVkVHlwZU1zZyArPSAoaSA9PT0gbGFzdCA/ICcgb3IgJyArIGdldEluZGVmaW5pdGVBcnRpY2xlKHR5cGUubmFtZSkgKyAnICcgOiAnLCAnKSArIHR5cGUubmFtZTtcbiAgICB9KTtcblxuICAgIGlmICghcGFzcykge1xuICAgICAgICB0aHJvdyBjYWxsc2l0ZU5hbWUgP1xuICAgICAgICAgICAgbmV3IEFQSUVycm9yKGNhbGxzaXRlTmFtZSwgUlVOVElNRV9FUlJPUlMuaW52YWxpZFZhbHVlVHlwZSwgd2hhdCwgZXhwZWN0ZWRUeXBlTXNnLCBhY3R1YWxNc2cpIDpcbiAgICAgICAgICAgIG5ldyBHZW5lcmFsRXJyb3IoUlVOVElNRV9FUlJPUlMuaW52YWxpZFZhbHVlVHlwZSwgd2hhdCwgZXhwZWN0ZWRUeXBlTXNnLCBhY3R1YWxNc2cpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,66 +1,66 @@
|
|
|
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 error_stack_parser_1 = __importDefault(require("error-stack-parser"));
|
|
7
|
-
const create_stack_filter_1 = __importDefault(require("./create-stack-filter"));
|
|
8
|
-
const ORIGINAL_STACK_TRACE_LIMIT = Error.stackTraceLimit;
|
|
9
|
-
const STACK_TRACE_LIMIT = 200;
|
|
10
|
-
const STACK_TRACE_LINE_RE = /^\s+at\s+.*$/;
|
|
11
|
-
exports.default = {
|
|
12
|
-
isEnabled: false,
|
|
13
|
-
_isStackTraceLine(stackLine) {
|
|
14
|
-
return STACK_TRACE_LINE_RE.test(stackLine);
|
|
15
|
-
},
|
|
16
|
-
_removeStackTraceLines(error) {
|
|
17
|
-
if (!error.stack) {
|
|
18
|
-
error.stack = '';
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
const stackLines = error.stack.split('\n');
|
|
22
|
-
let stackLinesCount = 0;
|
|
23
|
-
while (stackLinesCount < stackLines.length && this._isStackTraceLine(stackLines[stackLines.length - 1 - stackLinesCount]))
|
|
24
|
-
stackLinesCount++;
|
|
25
|
-
error.stack = stackLines.slice(0, stackLines.length - stackLinesCount).join('\n');
|
|
26
|
-
if (stackLinesCount > 0)
|
|
27
|
-
error.stack += '\n';
|
|
28
|
-
},
|
|
29
|
-
_getFrames(error) {
|
|
30
|
-
try {
|
|
31
|
-
return error_stack_parser_1.default.parse(error);
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
return [];
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
_renderFrameInfo(frames) {
|
|
38
|
-
return frames.map(frame => frame.getSource()).join('\n');
|
|
39
|
-
},
|
|
40
|
-
get enabled() {
|
|
41
|
-
return this.isEnabled;
|
|
42
|
-
},
|
|
43
|
-
set enabled(val) {
|
|
44
|
-
if (this.isEnabled === val)
|
|
45
|
-
return;
|
|
46
|
-
this.isEnabled = val;
|
|
47
|
-
// NOTE: Babel errors may have really deep stacks,
|
|
48
|
-
// so we increase stack trace capacity
|
|
49
|
-
if (this.isEnabled)
|
|
50
|
-
Error.stackTraceLimit = STACK_TRACE_LIMIT;
|
|
51
|
-
else
|
|
52
|
-
Error.stackTraceLimit = ORIGINAL_STACK_TRACE_LIMIT;
|
|
53
|
-
},
|
|
54
|
-
cleanError(error) {
|
|
55
|
-
let frames = this._getFrames(error);
|
|
56
|
-
if (!frames.length)
|
|
57
|
-
return error;
|
|
58
|
-
this._removeStackTraceLines(error);
|
|
59
|
-
const stackFilterFn = create_stack_filter_1.default(ORIGINAL_STACK_TRACE_LIMIT);
|
|
60
|
-
frames = frames.filter(stackFilterFn);
|
|
61
|
-
error.stack += this._renderFrameInfo(frames);
|
|
62
|
-
return error;
|
|
63
|
-
}
|
|
64
|
-
};
|
|
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 error_stack_parser_1 = __importDefault(require("error-stack-parser"));
|
|
7
|
+
const create_stack_filter_1 = __importDefault(require("./create-stack-filter"));
|
|
8
|
+
const ORIGINAL_STACK_TRACE_LIMIT = Error.stackTraceLimit;
|
|
9
|
+
const STACK_TRACE_LIMIT = 200;
|
|
10
|
+
const STACK_TRACE_LINE_RE = /^\s+at\s+.*$/;
|
|
11
|
+
exports.default = {
|
|
12
|
+
isEnabled: false,
|
|
13
|
+
_isStackTraceLine(stackLine) {
|
|
14
|
+
return STACK_TRACE_LINE_RE.test(stackLine);
|
|
15
|
+
},
|
|
16
|
+
_removeStackTraceLines(error) {
|
|
17
|
+
if (!error.stack) {
|
|
18
|
+
error.stack = '';
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const stackLines = error.stack.split('\n');
|
|
22
|
+
let stackLinesCount = 0;
|
|
23
|
+
while (stackLinesCount < stackLines.length && this._isStackTraceLine(stackLines[stackLines.length - 1 - stackLinesCount]))
|
|
24
|
+
stackLinesCount++;
|
|
25
|
+
error.stack = stackLines.slice(0, stackLines.length - stackLinesCount).join('\n');
|
|
26
|
+
if (stackLinesCount > 0)
|
|
27
|
+
error.stack += '\n';
|
|
28
|
+
},
|
|
29
|
+
_getFrames(error) {
|
|
30
|
+
try {
|
|
31
|
+
return error_stack_parser_1.default.parse(error);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
_renderFrameInfo(frames) {
|
|
38
|
+
return frames.map(frame => frame.getSource()).join('\n');
|
|
39
|
+
},
|
|
40
|
+
get enabled() {
|
|
41
|
+
return this.isEnabled;
|
|
42
|
+
},
|
|
43
|
+
set enabled(val) {
|
|
44
|
+
if (this.isEnabled === val)
|
|
45
|
+
return;
|
|
46
|
+
this.isEnabled = val;
|
|
47
|
+
// NOTE: Babel errors may have really deep stacks,
|
|
48
|
+
// so we increase stack trace capacity
|
|
49
|
+
if (this.isEnabled)
|
|
50
|
+
Error.stackTraceLimit = STACK_TRACE_LIMIT;
|
|
51
|
+
else
|
|
52
|
+
Error.stackTraceLimit = ORIGINAL_STACK_TRACE_LIMIT;
|
|
53
|
+
},
|
|
54
|
+
cleanError(error) {
|
|
55
|
+
let frames = this._getFrames(error);
|
|
56
|
+
if (!frames.length)
|
|
57
|
+
return error;
|
|
58
|
+
this._removeStackTraceLines(error);
|
|
59
|
+
const stackFilterFn = create_stack_filter_1.default(ORIGINAL_STACK_TRACE_LIMIT);
|
|
60
|
+
frames = frames.filter(stackFilterFn);
|
|
61
|
+
error.stack += this._renderFrameInfo(frames);
|
|
62
|
+
return error;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
65
|
module.exports = exports.default;
|
|
66
66
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2stY2xlYW5pbmctaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lcnJvcnMvc3RhY2stY2xlYW5pbmctaG9vay5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRFQUFrRDtBQUNsRCxnRkFBc0Q7QUFHdEQsTUFBTSwwQkFBMEIsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQ3pELE1BQU0saUJBQWlCLEdBQVksR0FBRyxDQUFDO0FBQ3ZDLE1BQU0sbUJBQW1CLEdBQVUsY0FBYyxDQUFDO0FBR2xELGtCQUFlO0lBQ1gsU0FBUyxFQUFFLEtBQUs7SUFFaEIsaUJBQWlCLENBQUUsU0FBUztRQUN4QixPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsc0JBQXNCLENBQUUsS0FBSztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNkLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUV4QixPQUFPLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7WUFDckgsZUFBZSxFQUFFLENBQUM7UUFFdEIsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRixJQUFJLGVBQWUsR0FBRyxDQUFDO1lBQ25CLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUUsS0FBSztRQUNiLElBQUk7WUFDQSxPQUFPLDRCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QztRQUNELE9BQU8sQ0FBQyxFQUFFO1lBQ04sT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxNQUFNO1FBQ3BCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBRSxHQUFHO1FBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUc7WUFDdEIsT0FBTztRQUVYLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBRXJCLGtEQUFrRDtRQUNsRCxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNkLEtBQUssQ0FBQyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7O1lBRTFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsMEJBQTBCLENBQUM7SUFDM0QsQ0FBQztJQUVELFVBQVUsQ0FBRSxLQUFLO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDZCxPQUFPLEtBQUssQ0FBQztRQUVqQixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbkMsTUFBTSxhQUFhLEdBQUcsNkJBQWlCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUVwRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcnJvclN0YWNrUGFyc2VyIGZyb20gJ2Vycm9yLXN0YWNrLXBhcnNlcic7XG5pbXBvcnQgY3JlYXRlU3RhY2tGaWx0ZXIgZnJvbSAnLi9jcmVhdGUtc3RhY2stZmlsdGVyJztcblxuXG5jb25zdCBPUklHSU5BTF9TVEFDS19UUkFDRV9MSU1JVCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDtcbmNvbnN0IFNUQUNLX1RSQUNFX0xJTUlUICAgICAgICAgID0gMjAwO1xuY29uc3QgU1RBQ0tfVFJBQ0VfTElORV9SRSAgICAgICAgPSAvXlxccythdFxccysuKiQvO1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBpc0VuYWJsZWQ6IGZhbHNlLFxuXG4gICAgX2lzU3RhY2tUcmFjZUxpbmUgKHN0YWNrTGluZSkge1xuICAgICAgICByZXR1cm4gU1RBQ0tfVFJBQ0VfTElORV9SRS50ZXN0KHN0YWNrTGluZSk7XG4gICAgfSxcblxuICAgIF9yZW1vdmVTdGFja1RyYWNlTGluZXMgKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgIGVycm9yLnN0YWNrID0gJyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFja0xpbmVzID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIGxldCBzdGFja0xpbmVzQ291bnQgPSAwO1xuXG4gICAgICAgIHdoaWxlIChzdGFja0xpbmVzQ291bnQgPCBzdGFja0xpbmVzLmxlbmd0aCAmJiB0aGlzLl9pc1N0YWNrVHJhY2VMaW5lKHN0YWNrTGluZXNbc3RhY2tMaW5lcy5sZW5ndGggLSAxIC0gc3RhY2tMaW5lc0NvdW50XSkpXG4gICAgICAgICAgICBzdGFja0xpbmVzQ291bnQrKztcblxuICAgICAgICBlcnJvci5zdGFjayA9IHN0YWNrTGluZXMuc2xpY2UoMCwgc3RhY2tMaW5lcy5sZW5ndGggLSBzdGFja0xpbmVzQ291bnQpLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIGlmIChzdGFja0xpbmVzQ291bnQgPiAwKVxuICAgICAgICAgICAgZXJyb3Iuc3RhY2sgKz0gJ1xcbic7XG4gICAgfSxcblxuICAgIF9nZXRGcmFtZXMgKGVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBfcmVuZGVyRnJhbWVJbmZvIChmcmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyYW1lcy5tYXAoZnJhbWUgPT4gZnJhbWUuZ2V0U291cmNlKCkpLmpvaW4oJ1xcbicpO1xuICAgIH0sXG5cbiAgICBnZXQgZW5hYmxlZCAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRW5hYmxlZDtcbiAgICB9LFxuXG4gICAgc2V0IGVuYWJsZWQgKHZhbCkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQgPT09IHZhbClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLmlzRW5hYmxlZCA9IHZhbDtcblxuICAgICAgICAvLyBOT1RFOiBCYWJlbCBlcnJvcnMgbWF5IGhhdmUgcmVhbGx5IGRlZXAgc3RhY2tzLFxuICAgICAgICAvLyBzbyB3ZSBpbmNyZWFzZSBzdGFjayB0cmFjZSBjYXBhY2l0eVxuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQpXG4gICAgICAgICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBTVEFDS19UUkFDRV9MSU1JVDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gT1JJR0lOQUxfU1RBQ0tfVFJBQ0VfTElNSVQ7XG4gICAgfSxcblxuICAgIGNsZWFuRXJyb3IgKGVycm9yKSB7XG4gICAgICAgIGxldCBmcmFtZXMgPSB0aGlzLl9nZXRGcmFtZXMoZXJyb3IpO1xuXG4gICAgICAgIGlmICghZnJhbWVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcblxuICAgICAgICB0aGlzLl9yZW1vdmVTdGFja1RyYWNlTGluZXMoZXJyb3IpO1xuXG4gICAgICAgIGNvbnN0IHN0YWNrRmlsdGVyRm4gPSBjcmVhdGVTdGFja0ZpbHRlcihPUklHSU5BTF9TVEFDS19UUkFDRV9MSU1JVCk7XG5cbiAgICAgICAgZnJhbWVzID0gZnJhbWVzLmZpbHRlcihzdGFja0ZpbHRlckZuKTtcblxuICAgICAgICBlcnJvci5zdGFjayArPSB0aGlzLl9yZW5kZXJGcmFtZUluZm8oZnJhbWVzKTtcblxuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -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
|
-
const lodash_1 = require("lodash");
|
|
7
|
-
const parse5_1 = require("parse5");
|
|
8
|
-
const callsite_record_1 = require("callsite-record");
|
|
9
|
-
const render_error_template_1 = __importDefault(require("./render-error-template"));
|
|
10
|
-
const create_stack_filter_1 = __importDefault(require("../create-stack-filter"));
|
|
11
|
-
const render_callsite_sync_1 = __importDefault(require("../../utils/render-callsite-sync"));
|
|
12
|
-
const parser = new parse5_1.Parser();
|
|
13
|
-
class TestRunErrorFormattableAdapter {
|
|
14
|
-
constructor(err, metaInfo) {
|
|
15
|
-
this.userAgent = metaInfo.userAgent;
|
|
16
|
-
this.screenshotPath = metaInfo.screenshotPath;
|
|
17
|
-
this.testRunId = metaInfo.testRunId;
|
|
18
|
-
this.testRunPhase = metaInfo.testRunPhase;
|
|
19
|
-
lodash_1.assignIn(this, err);
|
|
20
|
-
this.callsite = this.callsite || metaInfo.callsite;
|
|
21
|
-
}
|
|
22
|
-
static _getSelector(node) {
|
|
23
|
-
const classAttr = lodash_1.find(node.attrs, { name: 'class' });
|
|
24
|
-
const cls = classAttr && classAttr.value;
|
|
25
|
-
return cls ? `${node.tagName} ${cls}` : node.tagName;
|
|
26
|
-
}
|
|
27
|
-
static _decorateHtml(node, decorator) {
|
|
28
|
-
let msg = '';
|
|
29
|
-
if (node.nodeName === '#text')
|
|
30
|
-
msg = node.value;
|
|
31
|
-
else {
|
|
32
|
-
if (node.childNodes.length) {
|
|
33
|
-
msg += node.childNodes
|
|
34
|
-
.map(childNode => TestRunErrorFormattableAdapter._decorateHtml(childNode, decorator))
|
|
35
|
-
.join('');
|
|
36
|
-
}
|
|
37
|
-
if (node.nodeName !== '#document-fragment') {
|
|
38
|
-
const selector = TestRunErrorFormattableAdapter._getSelector(node);
|
|
39
|
-
msg = decorator[selector] ? decorator[selector](msg, node.attrs) : msg;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return msg;
|
|
43
|
-
}
|
|
44
|
-
getErrorMarkup(viewportWidth) {
|
|
45
|
-
return render_error_template_1.default(this, viewportWidth);
|
|
46
|
-
}
|
|
47
|
-
getCallsiteMarkup() {
|
|
48
|
-
return render_callsite_sync_1.default(this.callsite, {
|
|
49
|
-
renderer: callsite_record_1.renderers.html,
|
|
50
|
-
stackFilter: create_stack_filter_1.default(Error.stackTraceLimit)
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
formatMessage(decorator, viewportWidth) {
|
|
54
|
-
const msgHtml = this.getErrorMarkup(viewportWidth);
|
|
55
|
-
const fragment = parser.parseFragment(msgHtml);
|
|
56
|
-
return TestRunErrorFormattableAdapter._decorateHtml(fragment, decorator);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.default = TestRunErrorFormattableAdapter;
|
|
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 lodash_1 = require("lodash");
|
|
7
|
+
const parse5_1 = require("parse5");
|
|
8
|
+
const callsite_record_1 = require("callsite-record");
|
|
9
|
+
const render_error_template_1 = __importDefault(require("./render-error-template"));
|
|
10
|
+
const create_stack_filter_1 = __importDefault(require("../create-stack-filter"));
|
|
11
|
+
const render_callsite_sync_1 = __importDefault(require("../../utils/render-callsite-sync"));
|
|
12
|
+
const parser = new parse5_1.Parser();
|
|
13
|
+
class TestRunErrorFormattableAdapter {
|
|
14
|
+
constructor(err, metaInfo) {
|
|
15
|
+
this.userAgent = metaInfo.userAgent;
|
|
16
|
+
this.screenshotPath = metaInfo.screenshotPath;
|
|
17
|
+
this.testRunId = metaInfo.testRunId;
|
|
18
|
+
this.testRunPhase = metaInfo.testRunPhase;
|
|
19
|
+
lodash_1.assignIn(this, err);
|
|
20
|
+
this.callsite = this.callsite || metaInfo.callsite;
|
|
21
|
+
}
|
|
22
|
+
static _getSelector(node) {
|
|
23
|
+
const classAttr = lodash_1.find(node.attrs, { name: 'class' });
|
|
24
|
+
const cls = classAttr && classAttr.value;
|
|
25
|
+
return cls ? `${node.tagName} ${cls}` : node.tagName;
|
|
26
|
+
}
|
|
27
|
+
static _decorateHtml(node, decorator) {
|
|
28
|
+
let msg = '';
|
|
29
|
+
if (node.nodeName === '#text')
|
|
30
|
+
msg = node.value;
|
|
31
|
+
else {
|
|
32
|
+
if (node.childNodes.length) {
|
|
33
|
+
msg += node.childNodes
|
|
34
|
+
.map(childNode => TestRunErrorFormattableAdapter._decorateHtml(childNode, decorator))
|
|
35
|
+
.join('');
|
|
36
|
+
}
|
|
37
|
+
if (node.nodeName !== '#document-fragment') {
|
|
38
|
+
const selector = TestRunErrorFormattableAdapter._getSelector(node);
|
|
39
|
+
msg = decorator[selector] ? decorator[selector](msg, node.attrs) : msg;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return msg;
|
|
43
|
+
}
|
|
44
|
+
getErrorMarkup(viewportWidth) {
|
|
45
|
+
return render_error_template_1.default(this, viewportWidth);
|
|
46
|
+
}
|
|
47
|
+
getCallsiteMarkup() {
|
|
48
|
+
return render_callsite_sync_1.default(this.callsite, {
|
|
49
|
+
renderer: callsite_record_1.renderers.html,
|
|
50
|
+
stackFilter: create_stack_filter_1.default(Error.stackTraceLimit)
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
formatMessage(decorator, viewportWidth) {
|
|
54
|
+
const msgHtml = this.getErrorMarkup(viewportWidth);
|
|
55
|
+
const fragment = parser.parseFragment(msgHtml);
|
|
56
|
+
return TestRunErrorFormattableAdapter._decorateHtml(fragment, decorator);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.default = TestRunErrorFormattableAdapter;
|
|
60
60
|
module.exports = exports.default;
|
|
61
61
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGFibGUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lcnJvcnMvdGVzdC1ydW4vZm9ybWF0dGFibGUtYWRhcHRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUF3QztBQUN4QyxtQ0FBZ0M7QUFDaEMscURBQTRDO0FBQzVDLG9GQUEwRDtBQUMxRCxpRkFBdUQ7QUFDdkQsNEZBQWtFO0FBRWxFLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxFQUFFLENBQUM7QUFFNUIsTUFBcUIsOEJBQThCO0lBQy9DLFlBQWEsR0FBRyxFQUFFLFFBQVE7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBUSxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFRLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBSyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRTVDLGlCQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFFLElBQUk7UUFDckIsTUFBTSxTQUFTLEdBQUcsYUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBUyxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQztRQUUvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFFLElBQUksRUFBRSxTQUFTO1FBQ2pDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPO1lBQ3pCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDeEIsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVO3FCQUNqQixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3FCQUNwRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDakI7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssb0JBQW9CLEVBQUU7Z0JBQ3hDLE1BQU0sUUFBUSxHQUFHLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFFbkUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUMxRTtTQUNKO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsY0FBYyxDQUFFLGFBQWE7UUFDekIsT0FBTywrQkFBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE9BQU8sOEJBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQyxRQUFRLEVBQUssMkJBQVMsQ0FBQyxJQUFJO1lBQzNCLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1NBQ3hELENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhLENBQUUsU0FBUyxFQUFFLGFBQWE7UUFDbkMsTUFBTSxPQUFPLEdBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE9BQU8sOEJBQThCLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM3RSxDQUFDO0NBQ0o7QUExREQsaURBMERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmluZCwgYXNzaWduSW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAncGFyc2U1JztcbmltcG9ydCB7IHJlbmRlcmVycyB9IGZyb20gJ2NhbGxzaXRlLXJlY29yZCc7XG5pbXBvcnQgcmVuZGVyRXJyb3JUZW1wbGF0ZSBmcm9tICcuL3JlbmRlci1lcnJvci10ZW1wbGF0ZSc7XG5pbXBvcnQgY3JlYXRlU3RhY2tGaWx0ZXIgZnJvbSAnLi4vY3JlYXRlLXN0YWNrLWZpbHRlcic7XG5pbXBvcnQgcmVuZGVyQ2FsbHNpdGVTeW5jIGZyb20gJy4uLy4uL3V0aWxzL3JlbmRlci1jYWxsc2l0ZS1zeW5jJztcblxuY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0UnVuRXJyb3JGb3JtYXR0YWJsZUFkYXB0ZXIge1xuICAgIGNvbnN0cnVjdG9yIChlcnIsIG1ldGFJbmZvKSB7XG4gICAgICAgIHRoaXMudXNlckFnZW50ICAgICAgPSBtZXRhSW5mby51c2VyQWdlbnQ7XG4gICAgICAgIHRoaXMuc2NyZWVuc2hvdFBhdGggPSBtZXRhSW5mby5zY3JlZW5zaG90UGF0aDtcbiAgICAgICAgdGhpcy50ZXN0UnVuSWQgICAgICA9IG1ldGFJbmZvLnRlc3RSdW5JZDtcbiAgICAgICAgdGhpcy50ZXN0UnVuUGhhc2UgICA9IG1ldGFJbmZvLnRlc3RSdW5QaGFzZTtcblxuICAgICAgICBhc3NpZ25Jbih0aGlzLCBlcnIpO1xuXG4gICAgICAgIHRoaXMuY2FsbHNpdGUgPSB0aGlzLmNhbGxzaXRlIHx8IG1ldGFJbmZvLmNhbGxzaXRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBfZ2V0U2VsZWN0b3IgKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY2xhc3NBdHRyID0gZmluZChub2RlLmF0dHJzLCB7IG5hbWU6ICdjbGFzcycgfSk7XG4gICAgICAgIGNvbnN0IGNscyAgICAgICA9IGNsYXNzQXR0ciAmJiBjbGFzc0F0dHIudmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIGNscyA/IGAke25vZGUudGFnTmFtZX0gJHtjbHN9YCA6IG5vZGUudGFnTmFtZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2RlY29yYXRlSHRtbCAobm9kZSwgZGVjb3JhdG9yKSB7XG4gICAgICAgIGxldCBtc2cgPSAnJztcblxuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJyN0ZXh0JylcbiAgICAgICAgICAgIG1zZyA9IG5vZGUudmFsdWU7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtc2cgKz0gbm9kZS5jaGlsZE5vZGVzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoY2hpbGROb2RlID0+IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlci5fZGVjb3JhdGVIdG1sKGNoaWxkTm9kZSwgZGVjb3JhdG9yKSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSAhPT0gJyNkb2N1bWVudC1mcmFnbWVudCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IFRlc3RSdW5FcnJvckZvcm1hdHRhYmxlQWRhcHRlci5fZ2V0U2VsZWN0b3Iobm9kZSk7XG5cbiAgICAgICAgICAgICAgICBtc2cgPSBkZWNvcmF0b3Jbc2VsZWN0b3JdID8gZGVjb3JhdG9yW3NlbGVjdG9yXShtc2csIG5vZGUuYXR0cnMpIDogbXNnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1zZztcbiAgICB9XG5cbiAgICBnZXRFcnJvck1hcmt1cCAodmlld3BvcnRXaWR0aCkge1xuICAgICAgICByZXR1cm4gcmVuZGVyRXJyb3JUZW1wbGF0ZSh0aGlzLCB2aWV3cG9ydFdpZHRoKTtcbiAgICB9XG5cbiAgICBnZXRDYWxsc2l0ZU1hcmt1cCAoKSB7XG4gICAgICAgIHJldHVybiByZW5kZXJDYWxsc2l0ZVN5bmModGhpcy5jYWxsc2l0ZSwge1xuICAgICAgICAgICAgcmVuZGVyZXI6ICAgIHJlbmRlcmVycy5odG1sLFxuICAgICAgICAgICAgc3RhY2tGaWx0ZXI6IGNyZWF0ZVN0YWNrRmlsdGVyKEVycm9yLnN0YWNrVHJhY2VMaW1pdClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9ybWF0TWVzc2FnZSAoZGVjb3JhdG9yLCB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIGNvbnN0IG1zZ0h0bWwgID0gdGhpcy5nZXRFcnJvck1hcmt1cCh2aWV3cG9ydFdpZHRoKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBwYXJzZXIucGFyc2VGcmFnbWVudChtc2dIdG1sKTtcblxuICAgICAgICByZXR1cm4gVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyLl9kZWNvcmF0ZUh0bWwoZnJhZ21lbnQsIGRlY29yYXRvcik7XG4gICAgfVxufVxuIl19
|