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,15 +1,15 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function createSnapshotMethods(snapshot) {
|
|
4
|
-
const isElementSnapshot = !!snapshot.tagName;
|
|
5
|
-
if (isElementSnapshot) {
|
|
6
|
-
snapshot.hasClass = name => snapshot.classNames.indexOf(name) > -1;
|
|
7
|
-
snapshot.getStyleProperty = prop => snapshot.style[prop];
|
|
8
|
-
snapshot.getAttribute = attrName => snapshot.attributes[attrName];
|
|
9
|
-
snapshot.hasAttribute = attrName => snapshot.attributes.hasOwnProperty(attrName);
|
|
10
|
-
snapshot.getBoundingClientRectProperty = prop => snapshot.boundingClientRect[prop];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.default = createSnapshotMethods;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function createSnapshotMethods(snapshot) {
|
|
4
|
+
const isElementSnapshot = !!snapshot.tagName;
|
|
5
|
+
if (isElementSnapshot) {
|
|
6
|
+
snapshot.hasClass = name => snapshot.classNames.indexOf(name) > -1;
|
|
7
|
+
snapshot.getStyleProperty = prop => snapshot.style[prop];
|
|
8
|
+
snapshot.getAttribute = attrName => snapshot.attributes[attrName];
|
|
9
|
+
snapshot.hasAttribute = attrName => snapshot.attributes.hasOwnProperty(attrName);
|
|
10
|
+
snapshot.getBoundingClientRectProperty = prop => snapshot.boundingClientRect[prop];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.default = createSnapshotMethods;
|
|
14
14
|
module.exports = exports.default;
|
|
15
15
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNuYXBzaG90LW1ldGhvZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvY3JlYXRlLXNuYXBzaG90LW1ldGhvZHMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUF3QixxQkFBcUIsQ0FBRSxRQUFRO0lBQ25ELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFFN0MsSUFBSSxpQkFBaUIsRUFBRTtRQUNuQixRQUFRLENBQUMsUUFBUSxHQUF3QixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBZ0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLFFBQVEsQ0FBQyxZQUFZLEdBQW9CLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRixRQUFRLENBQUMsWUFBWSxHQUFvQixRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xHLFFBQVEsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0RjtBQUNMLENBQUM7QUFWRCx3Q0FVQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNuYXBzaG90TWV0aG9kcyAoc25hcHNob3QpIHtcbiAgICBjb25zdCBpc0VsZW1lbnRTbmFwc2hvdCA9ICEhc25hcHNob3QudGFnTmFtZTtcblxuICAgIGlmIChpc0VsZW1lbnRTbmFwc2hvdCkge1xuICAgICAgICBzbmFwc2hvdC5oYXNDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IG5hbWUgPT4gc25hcHNob3QuY2xhc3NOYW1lcy5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgICAgIHNuYXBzaG90LmdldFN0eWxlUHJvcGVydHkgICAgICAgICAgICAgID0gcHJvcCA9PiBzbmFwc2hvdC5zdHlsZVtwcm9wXTtcbiAgICAgICAgc25hcHNob3QuZ2V0QXR0cmlidXRlICAgICAgICAgICAgICAgICAgPSBhdHRyTmFtZSA9PiBzbmFwc2hvdC5hdHRyaWJ1dGVzW2F0dHJOYW1lXTtcbiAgICAgICAgc25hcHNob3QuaGFzQXR0cmlidXRlICAgICAgICAgICAgICAgICAgPSBhdHRyTmFtZSA9PiBzbmFwc2hvdC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHJOYW1lKTtcbiAgICAgICAgc25hcHNob3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0UHJvcGVydHkgPSBwcm9wID0+IHNuYXBzaG90LmJvdW5kaW5nQ2xpZW50UmVjdFtwcm9wXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,22 +1,22 @@
|
|
|
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 util_1 = __importDefault(require("util"));
|
|
7
|
-
function prepareApiFnArgs(fnName, ...args) {
|
|
8
|
-
args = args.map(arg => {
|
|
9
|
-
if (typeof arg === 'string')
|
|
10
|
-
return `'${arg}'`;
|
|
11
|
-
if (typeof arg === 'function')
|
|
12
|
-
return '[function]';
|
|
13
|
-
if (typeof arg === 'object')
|
|
14
|
-
return util_1.default.inspect(arg, { compact: true, breakLength: Infinity });
|
|
15
|
-
return arg;
|
|
16
|
-
});
|
|
17
|
-
args = args.join(', ');
|
|
18
|
-
return `.${fnName}(${args})`;
|
|
19
|
-
}
|
|
20
|
-
exports.default = prepareApiFnArgs;
|
|
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 util_1 = __importDefault(require("util"));
|
|
7
|
+
function prepareApiFnArgs(fnName, ...args) {
|
|
8
|
+
args = args.map(arg => {
|
|
9
|
+
if (typeof arg === 'string')
|
|
10
|
+
return `'${arg}'`;
|
|
11
|
+
if (typeof arg === 'function')
|
|
12
|
+
return '[function]';
|
|
13
|
+
if (typeof arg === 'object')
|
|
14
|
+
return util_1.default.inspect(arg, { compact: true, breakLength: Infinity });
|
|
15
|
+
return arg;
|
|
16
|
+
});
|
|
17
|
+
args = args.join(', ');
|
|
18
|
+
return `.${fnName}(${args})`;
|
|
19
|
+
}
|
|
20
|
+
exports.default = prepareApiFnArgs;
|
|
21
21
|
module.exports = exports.default;
|
|
22
22
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1hcGktYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQtZnVuY3Rpb25zL3NlbGVjdG9ycy9wcmVwYXJlLWFwaS1hcmdzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBRXhCLFNBQXdCLGdCQUFnQixDQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7SUFDckQsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQ3ZCLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVU7WUFDekIsT0FBTyxZQUFZLENBQUM7UUFDeEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQ3ZCLE9BQU8sY0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV2QixPQUFPLElBQUksTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDO0FBQ2pDLENBQUM7QUFiRCxtQ0FhQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlsIGZyb20gJ3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVwYXJlQXBpRm5BcmdzIChmbk5hbWUsIC4uLmFyZ3MpIHtcbiAgICBhcmdzID0gYXJncy5tYXAoYXJnID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGAnJHthcmd9J2A7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgcmV0dXJuICdbZnVuY3Rpb25dJztcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgcmV0dXJuIHV0aWwuaW5zcGVjdChhcmcsIHsgY29tcGFjdDogdHJ1ZSwgYnJlYWtMZW5ndGg6IEluZmluaXR5IH0pO1xuICAgICAgICByZXR1cm4gYXJnO1xuICAgIH0pO1xuICAgIGFyZ3MgPSBhcmdzLmpvaW4oJywgJyk7XG5cbiAgICByZXR1cm4gYC4ke2ZuTmFtZX0oJHthcmdzfSlgO1xufVxuIl19
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// -------------------------------------------------------------
|
|
3
|
-
// WARNING: this file is used by both the client and the server.
|
|
4
|
-
// Do not use any browser or node-specific API!
|
|
5
|
-
// -------------------------------------------------------------
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
/* eslint-disable no-undef */
|
|
8
|
-
function selectorAttributeFilter(node, index, originNode, attrName, attrValue) {
|
|
9
|
-
if (node.nodeType !== 1)
|
|
10
|
-
return false;
|
|
11
|
-
const attributes = node.attributes;
|
|
12
|
-
let attr = null;
|
|
13
|
-
const check = (actual, expect) => typeof expect === 'string' ? expect === actual : expect.test(actual);
|
|
14
|
-
for (let i = 0; i < attributes.length; i++) {
|
|
15
|
-
attr = attributes[i];
|
|
16
|
-
if (check(attr.nodeName, attrName) && (!attrValue || check(attr.nodeValue, attrValue)))
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
exports.default = selectorAttributeFilter;
|
|
22
|
-
/* eslint-enable no-undef */
|
|
1
|
+
"use strict";
|
|
2
|
+
// -------------------------------------------------------------
|
|
3
|
+
// WARNING: this file is used by both the client and the server.
|
|
4
|
+
// Do not use any browser or node-specific API!
|
|
5
|
+
// -------------------------------------------------------------
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
/* eslint-disable no-undef */
|
|
8
|
+
function selectorAttributeFilter(node, index, originNode, attrName, attrValue) {
|
|
9
|
+
if (node.nodeType !== 1)
|
|
10
|
+
return false;
|
|
11
|
+
const attributes = node.attributes;
|
|
12
|
+
let attr = null;
|
|
13
|
+
const check = (actual, expect) => typeof expect === 'string' ? expect === actual : expect.test(actual);
|
|
14
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
15
|
+
attr = attributes[i];
|
|
16
|
+
if (check(attr.nodeName, attrName) && (!attrValue || check(attr.nodeValue, attrValue)))
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
exports.default = selectorAttributeFilter;
|
|
22
|
+
/* eslint-enable no-undef */
|
|
23
23
|
module.exports = exports.default;
|
|
24
24
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItYXR0cmlidXRlLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQtZnVuY3Rpb25zL3NlbGVjdG9ycy9zZWxlY3Rvci1hdHRyaWJ1dGUtZmlsdGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxnRUFBZ0U7QUFDaEUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxnRUFBZ0U7O0FBRWhFLDZCQUE2QjtBQUM3QixTQUF3Qix1QkFBdUIsQ0FBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUztJQUN6RixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQztRQUNuQixPQUFPLEtBQUssQ0FBQztJQUVqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ25DLElBQUksSUFBSSxHQUFTLElBQUksQ0FBQztJQUV0QixNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV2RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN4QyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNsRixPQUFPLElBQUksQ0FBQztLQUNuQjtJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFqQkQsMENBaUJDO0FBQ0QsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV0FSTklORzogdGhpcyBmaWxlIGlzIHVzZWQgYnkgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuLy8gRG8gbm90IHVzZSBhbnkgYnJvd3NlciBvciBub2RlLXNwZWNpZmljIEFQSSFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlbGVjdG9yQXR0cmlidXRlRmlsdGVyIChub2RlLCBpbmRleCwgb3JpZ2luTm9kZSwgYXR0ck5hbWUsIGF0dHJWYWx1ZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSAxKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgIGxldCBhdHRyICAgICAgID0gbnVsbDtcblxuICAgIGNvbnN0IGNoZWNrID0gKGFjdHVhbCwgZXhwZWN0KSA9PiB0eXBlb2YgZXhwZWN0ID09PSAnc3RyaW5nJyA/IGV4cGVjdCA9PT0gYWN0dWFsIDogZXhwZWN0LnRlc3QoYWN0dWFsKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tpXTtcblxuICAgICAgICBpZiAoY2hlY2soYXR0ci5ub2RlTmFtZSwgYXR0ck5hbWUpICYmICghYXR0clZhbHVlIHx8IGNoZWNrKGF0dHIubm9kZVZhbHVlLCBhdHRyVmFsdWUpKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiJdfQ==
|
|
@@ -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 dedent_1 = __importDefault(require("dedent"));
|
|
8
|
-
const client_function_builder_1 = __importDefault(require("../client-function-builder"));
|
|
9
|
-
const replicator_1 = require("../replicator");
|
|
10
|
-
const runtime_1 = require("../../errors/runtime");
|
|
11
|
-
const builder_symbol_1 = __importDefault(require("../builder-symbol"));
|
|
12
|
-
const types_1 = require("../../errors/types");
|
|
13
|
-
const type_assertions_1 = require("../../errors/runtime/type-assertions");
|
|
14
|
-
const observation_1 = require("../../test-run/commands/observation");
|
|
15
|
-
const define_lazy_property_1 = __importDefault(require("../../utils/define-lazy-property"));
|
|
16
|
-
const add_api_1 = require("./add-api");
|
|
17
|
-
const create_snapshot_methods_1 = __importDefault(require("./create-snapshot-methods"));
|
|
18
|
-
const prepare_api_args_1 = __importDefault(require("./prepare-api-args"));
|
|
19
|
-
const return_single_prop_mode_1 = __importDefault(require("../return-single-prop-mode"));
|
|
20
|
-
const selector_api_execution_mode_1 = __importDefault(require("../selector-api-execution-mode"));
|
|
21
|
-
class SelectorBuilder extends client_function_builder_1.default {
|
|
22
|
-
constructor(fn, options, callsiteNames) {
|
|
23
|
-
const apiFn = options && options.apiFn;
|
|
24
|
-
const apiFnID = options && options.apiFnID;
|
|
25
|
-
const builderFromSelector = fn && fn[builder_symbol_1.default];
|
|
26
|
-
const builderFromPromiseOrSnapshot = fn && fn.selector && fn.selector[builder_symbol_1.default];
|
|
27
|
-
let builder = builderFromSelector || builderFromPromiseOrSnapshot;
|
|
28
|
-
builder = builder instanceof SelectorBuilder ? builder : null;
|
|
29
|
-
if (builder) {
|
|
30
|
-
fn = builder.fn;
|
|
31
|
-
if (options === void 0 || typeof options === 'object')
|
|
32
|
-
options = lodash_1.merge({}, builder.options, options, { sourceSelectorBuilder: builder });
|
|
33
|
-
}
|
|
34
|
-
super(fn, options, callsiteNames);
|
|
35
|
-
if (!this.options.apiFnChain) {
|
|
36
|
-
const fnType = typeof this.fn;
|
|
37
|
-
let item = fnType === 'string' ? `'${this.fn}'` : `[${fnType}]`;
|
|
38
|
-
item = `Selector(${item})`;
|
|
39
|
-
this.options.apiFn = item;
|
|
40
|
-
this.options.apiFnChain = [item];
|
|
41
|
-
}
|
|
42
|
-
if (apiFn)
|
|
43
|
-
this.options.apiFnChain.push(apiFn);
|
|
44
|
-
this.options.apiFnID = typeof apiFnID === 'number' ? apiFnID : this.options.apiFnChain.length - 1;
|
|
45
|
-
}
|
|
46
|
-
_getCompiledFnCode() {
|
|
47
|
-
// OPTIMIZATION: if selector was produced from another selector and
|
|
48
|
-
// it has same dependencies as source selector, then we can
|
|
49
|
-
// avoid recompilation and just re-use already compiled code.
|
|
50
|
-
const hasSameDependenciesAsSourceSelector = this.options.sourceSelectorBuilder &&
|
|
51
|
-
this.options.sourceSelectorBuilder.options.dependencies ===
|
|
52
|
-
this.options.dependencies;
|
|
53
|
-
if (hasSameDependenciesAsSourceSelector)
|
|
54
|
-
return this.options.sourceSelectorBuilder.compiledFnCode;
|
|
55
|
-
const code = typeof this.fn === 'string' ?
|
|
56
|
-
`(function(){return document.querySelectorAll(${JSON.stringify(this.fn)});});` :
|
|
57
|
-
super._getCompiledFnCode();
|
|
58
|
-
if (code) {
|
|
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 dedent_1 = __importDefault(require("dedent"));
|
|
8
|
+
const client_function_builder_1 = __importDefault(require("../client-function-builder"));
|
|
9
|
+
const replicator_1 = require("../replicator");
|
|
10
|
+
const runtime_1 = require("../../errors/runtime");
|
|
11
|
+
const builder_symbol_1 = __importDefault(require("../builder-symbol"));
|
|
12
|
+
const types_1 = require("../../errors/types");
|
|
13
|
+
const type_assertions_1 = require("../../errors/runtime/type-assertions");
|
|
14
|
+
const observation_1 = require("../../test-run/commands/observation");
|
|
15
|
+
const define_lazy_property_1 = __importDefault(require("../../utils/define-lazy-property"));
|
|
16
|
+
const add_api_1 = require("./add-api");
|
|
17
|
+
const create_snapshot_methods_1 = __importDefault(require("./create-snapshot-methods"));
|
|
18
|
+
const prepare_api_args_1 = __importDefault(require("./prepare-api-args"));
|
|
19
|
+
const return_single_prop_mode_1 = __importDefault(require("../return-single-prop-mode"));
|
|
20
|
+
const selector_api_execution_mode_1 = __importDefault(require("../selector-api-execution-mode"));
|
|
21
|
+
class SelectorBuilder extends client_function_builder_1.default {
|
|
22
|
+
constructor(fn, options, callsiteNames) {
|
|
23
|
+
const apiFn = options && options.apiFn;
|
|
24
|
+
const apiFnID = options && options.apiFnID;
|
|
25
|
+
const builderFromSelector = fn && fn[builder_symbol_1.default];
|
|
26
|
+
const builderFromPromiseOrSnapshot = fn && fn.selector && fn.selector[builder_symbol_1.default];
|
|
27
|
+
let builder = builderFromSelector || builderFromPromiseOrSnapshot;
|
|
28
|
+
builder = builder instanceof SelectorBuilder ? builder : null;
|
|
29
|
+
if (builder) {
|
|
30
|
+
fn = builder.fn;
|
|
31
|
+
if (options === void 0 || typeof options === 'object')
|
|
32
|
+
options = lodash_1.merge({}, builder.options, options, { sourceSelectorBuilder: builder });
|
|
33
|
+
}
|
|
34
|
+
super(fn, options, callsiteNames);
|
|
35
|
+
if (!this.options.apiFnChain) {
|
|
36
|
+
const fnType = typeof this.fn;
|
|
37
|
+
let item = fnType === 'string' ? `'${this.fn}'` : `[${fnType}]`;
|
|
38
|
+
item = `Selector(${item})`;
|
|
39
|
+
this.options.apiFn = item;
|
|
40
|
+
this.options.apiFnChain = [item];
|
|
41
|
+
}
|
|
42
|
+
if (apiFn)
|
|
43
|
+
this.options.apiFnChain.push(apiFn);
|
|
44
|
+
this.options.apiFnID = typeof apiFnID === 'number' ? apiFnID : this.options.apiFnChain.length - 1;
|
|
45
|
+
}
|
|
46
|
+
_getCompiledFnCode() {
|
|
47
|
+
// OPTIMIZATION: if selector was produced from another selector and
|
|
48
|
+
// it has same dependencies as source selector, then we can
|
|
49
|
+
// avoid recompilation and just re-use already compiled code.
|
|
50
|
+
const hasSameDependenciesAsSourceSelector = this.options.sourceSelectorBuilder &&
|
|
51
|
+
this.options.sourceSelectorBuilder.options.dependencies ===
|
|
52
|
+
this.options.dependencies;
|
|
53
|
+
if (hasSameDependenciesAsSourceSelector)
|
|
54
|
+
return this.options.sourceSelectorBuilder.compiledFnCode;
|
|
55
|
+
const code = typeof this.fn === 'string' ?
|
|
56
|
+
`(function(){return document.querySelectorAll(${JSON.stringify(this.fn)});});` :
|
|
57
|
+
super._getCompiledFnCode();
|
|
58
|
+
if (code) {
|
|
59
59
|
return dedent_1.default(`(function(){
|
|
60
60
|
var __f$=${code};
|
|
61
61
|
return function(){
|
|
@@ -70,100 +70,100 @@ class SelectorBuilder extends client_function_builder_1.default {
|
|
|
70
70
|
|
|
71
71
|
return selectorFilter.filter(nodes, __dependencies$.filterOptions, __dependencies$.apiInfo);
|
|
72
72
|
};
|
|
73
|
-
})();`);
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
_createInvalidFnTypeError() {
|
|
78
|
-
return new runtime_1.ClientFunctionAPIError(this.callsiteNames.instantiation, this.callsiteNames.instantiation, types_1.RUNTIME_ERRORS.selectorInitializedWithWrongType, typeof this.fn);
|
|
79
|
-
}
|
|
80
|
-
_executeCommand(args, testRun, callsite) {
|
|
81
|
-
const resultPromise = super._executeCommand(args, testRun, callsite);
|
|
82
|
-
this._addBoundArgsSelectorGetter(resultPromise, args);
|
|
83
|
-
// OPTIMIZATION: use buffer function as selector not to trigger lazy property ahead of time
|
|
84
|
-
add_api_1.addAPI(resultPromise, () => resultPromise.selector, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods);
|
|
85
|
-
return resultPromise;
|
|
86
|
-
}
|
|
87
|
-
_getSourceSelectorBuilderApiFnID() {
|
|
88
|
-
let selectorAncestor = this;
|
|
89
|
-
while (selectorAncestor.options.sourceSelectorBuilder)
|
|
90
|
-
selectorAncestor = selectorAncestor.options.sourceSelectorBuilder;
|
|
91
|
-
return selectorAncestor.options.apiFnID;
|
|
92
|
-
}
|
|
93
|
-
getFunctionDependencies() {
|
|
94
|
-
const dependencies = super.getFunctionDependencies();
|
|
95
|
-
const { filterVisible, filterHidden, counterMode, collectionMode, getVisibleValueMode, index, customDOMProperties, customMethods, apiFnChain, boundArgs } = this.options;
|
|
96
|
-
return lodash_1.merge({}, dependencies, {
|
|
97
|
-
filterOptions: {
|
|
98
|
-
filterVisible,
|
|
99
|
-
filterHidden,
|
|
100
|
-
counterMode,
|
|
101
|
-
collectionMode,
|
|
102
|
-
index: lodash_1.isNil(index) ? null : index,
|
|
103
|
-
getVisibleValueMode
|
|
104
|
-
},
|
|
105
|
-
apiInfo: {
|
|
106
|
-
apiFnChain,
|
|
107
|
-
apiFnID: this._getSourceSelectorBuilderApiFnID()
|
|
108
|
-
},
|
|
109
|
-
boundArgs,
|
|
110
|
-
customDOMProperties,
|
|
111
|
-
customMethods
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
_createTestRunCommand(encodedArgs, encodedDependencies) {
|
|
115
|
-
return new observation_1.ExecuteSelectorCommand({
|
|
116
|
-
instantiationCallsiteName: this.callsiteNames.instantiation,
|
|
117
|
-
fnCode: this.compiledFnCode,
|
|
118
|
-
args: encodedArgs,
|
|
119
|
-
dependencies: encodedDependencies,
|
|
120
|
-
needError: this.options.needError,
|
|
121
|
-
apiFnChain: this.options.apiFnChain,
|
|
122
|
-
visibilityCheck: !!this.options.visibilityCheck,
|
|
123
|
-
timeout: this.options.timeout
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
_validateOptions(options) {
|
|
127
|
-
super._validateOptions(options);
|
|
128
|
-
if (!lodash_1.isNil(options.visibilityCheck))
|
|
129
|
-
type_assertions_1.assertType(type_assertions_1.is.boolean, this.callsiteNames.instantiation, '"visibilityCheck" option', options.visibilityCheck);
|
|
130
|
-
if (!lodash_1.isNil(options.timeout))
|
|
131
|
-
type_assertions_1.assertType(type_assertions_1.is.nonNegativeNumber, this.callsiteNames.instantiation, '"timeout" option', options.timeout);
|
|
132
|
-
}
|
|
133
|
-
_getReplicatorTransforms() {
|
|
134
|
-
const transforms = super._getReplicatorTransforms();
|
|
135
|
-
transforms.push(new replicator_1.SelectorNodeTransform());
|
|
136
|
-
return transforms;
|
|
137
|
-
}
|
|
138
|
-
_addBoundArgsSelectorGetter(obj, selectorArgs) {
|
|
139
|
-
define_lazy_property_1.default(obj, 'selector', () => {
|
|
140
|
-
const builder = new SelectorBuilder(this.getFunction(), { boundArgs: selectorArgs });
|
|
141
|
-
return builder.getFunction();
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
_decorateFunction(selectorFn) {
|
|
145
|
-
super._decorateFunction(selectorFn);
|
|
146
|
-
add_api_1.addAPI(selectorFn, () => selectorFn, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods, this._getObservedCallsites());
|
|
147
|
-
}
|
|
148
|
-
_getClientFnWithOverriddenOptions(options) {
|
|
149
|
-
const apiFn = prepare_api_args_1.default('with', options);
|
|
150
|
-
const previousSelectorID = this.options.apiFnChain.length - 1;
|
|
151
|
-
return super._getClientFnWithOverriddenOptions(Object.assign(options, { apiFn, apiFnID: previousSelectorID }));
|
|
152
|
-
}
|
|
153
|
-
_processResult(result, selectorArgs) {
|
|
154
|
-
const snapshot = super._processResult(result, selectorArgs);
|
|
155
|
-
if (snapshot && !return_single_prop_mode_1.default(this.options)) {
|
|
156
|
-
this._addBoundArgsSelectorGetter(snapshot, selectorArgs);
|
|
157
|
-
create_snapshot_methods_1.default(snapshot);
|
|
158
|
-
if (this.options.customMethods)
|
|
159
|
-
add_api_1.addCustomMethods(snapshot, () => snapshot.selector, SelectorBuilder, this.options.customMethods);
|
|
160
|
-
if (selector_api_execution_mode_1.default.isSync) {
|
|
161
|
-
add_api_1.addAPI(snapshot, () => snapshot.selector, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods, this._getObservedCallsites(), true);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return snapshot;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
exports.default = SelectorBuilder;
|
|
73
|
+
})();`);
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
_createInvalidFnTypeError() {
|
|
78
|
+
return new runtime_1.ClientFunctionAPIError(this.callsiteNames.instantiation, this.callsiteNames.instantiation, types_1.RUNTIME_ERRORS.selectorInitializedWithWrongType, typeof this.fn);
|
|
79
|
+
}
|
|
80
|
+
_executeCommand(args, testRun, callsite) {
|
|
81
|
+
const resultPromise = super._executeCommand(args, testRun, callsite);
|
|
82
|
+
this._addBoundArgsSelectorGetter(resultPromise, args);
|
|
83
|
+
// OPTIMIZATION: use buffer function as selector not to trigger lazy property ahead of time
|
|
84
|
+
add_api_1.addAPI(resultPromise, () => resultPromise.selector, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods);
|
|
85
|
+
return resultPromise;
|
|
86
|
+
}
|
|
87
|
+
_getSourceSelectorBuilderApiFnID() {
|
|
88
|
+
let selectorAncestor = this;
|
|
89
|
+
while (selectorAncestor.options.sourceSelectorBuilder)
|
|
90
|
+
selectorAncestor = selectorAncestor.options.sourceSelectorBuilder;
|
|
91
|
+
return selectorAncestor.options.apiFnID;
|
|
92
|
+
}
|
|
93
|
+
getFunctionDependencies() {
|
|
94
|
+
const dependencies = super.getFunctionDependencies();
|
|
95
|
+
const { filterVisible, filterHidden, counterMode, collectionMode, getVisibleValueMode, index, customDOMProperties, customMethods, apiFnChain, boundArgs } = this.options;
|
|
96
|
+
return lodash_1.merge({}, dependencies, {
|
|
97
|
+
filterOptions: {
|
|
98
|
+
filterVisible,
|
|
99
|
+
filterHidden,
|
|
100
|
+
counterMode,
|
|
101
|
+
collectionMode,
|
|
102
|
+
index: lodash_1.isNil(index) ? null : index,
|
|
103
|
+
getVisibleValueMode
|
|
104
|
+
},
|
|
105
|
+
apiInfo: {
|
|
106
|
+
apiFnChain,
|
|
107
|
+
apiFnID: this._getSourceSelectorBuilderApiFnID()
|
|
108
|
+
},
|
|
109
|
+
boundArgs,
|
|
110
|
+
customDOMProperties,
|
|
111
|
+
customMethods
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
_createTestRunCommand(encodedArgs, encodedDependencies) {
|
|
115
|
+
return new observation_1.ExecuteSelectorCommand({
|
|
116
|
+
instantiationCallsiteName: this.callsiteNames.instantiation,
|
|
117
|
+
fnCode: this.compiledFnCode,
|
|
118
|
+
args: encodedArgs,
|
|
119
|
+
dependencies: encodedDependencies,
|
|
120
|
+
needError: this.options.needError,
|
|
121
|
+
apiFnChain: this.options.apiFnChain,
|
|
122
|
+
visibilityCheck: !!this.options.visibilityCheck,
|
|
123
|
+
timeout: this.options.timeout
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
_validateOptions(options) {
|
|
127
|
+
super._validateOptions(options);
|
|
128
|
+
if (!lodash_1.isNil(options.visibilityCheck))
|
|
129
|
+
type_assertions_1.assertType(type_assertions_1.is.boolean, this.callsiteNames.instantiation, '"visibilityCheck" option', options.visibilityCheck);
|
|
130
|
+
if (!lodash_1.isNil(options.timeout))
|
|
131
|
+
type_assertions_1.assertType(type_assertions_1.is.nonNegativeNumber, this.callsiteNames.instantiation, '"timeout" option', options.timeout);
|
|
132
|
+
}
|
|
133
|
+
_getReplicatorTransforms() {
|
|
134
|
+
const transforms = super._getReplicatorTransforms();
|
|
135
|
+
transforms.push(new replicator_1.SelectorNodeTransform());
|
|
136
|
+
return transforms;
|
|
137
|
+
}
|
|
138
|
+
_addBoundArgsSelectorGetter(obj, selectorArgs) {
|
|
139
|
+
define_lazy_property_1.default(obj, 'selector', () => {
|
|
140
|
+
const builder = new SelectorBuilder(this.getFunction(), { boundArgs: selectorArgs });
|
|
141
|
+
return builder.getFunction();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
_decorateFunction(selectorFn) {
|
|
145
|
+
super._decorateFunction(selectorFn);
|
|
146
|
+
add_api_1.addAPI(selectorFn, () => selectorFn, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods, this._getObservedCallsites());
|
|
147
|
+
}
|
|
148
|
+
_getClientFnWithOverriddenOptions(options) {
|
|
149
|
+
const apiFn = prepare_api_args_1.default('with', options);
|
|
150
|
+
const previousSelectorID = this.options.apiFnChain.length - 1;
|
|
151
|
+
return super._getClientFnWithOverriddenOptions(Object.assign(options, { apiFn, apiFnID: previousSelectorID }));
|
|
152
|
+
}
|
|
153
|
+
_processResult(result, selectorArgs) {
|
|
154
|
+
const snapshot = super._processResult(result, selectorArgs);
|
|
155
|
+
if (snapshot && !return_single_prop_mode_1.default(this.options)) {
|
|
156
|
+
this._addBoundArgsSelectorGetter(snapshot, selectorArgs);
|
|
157
|
+
create_snapshot_methods_1.default(snapshot);
|
|
158
|
+
if (this.options.customMethods)
|
|
159
|
+
add_api_1.addCustomMethods(snapshot, () => snapshot.selector, SelectorBuilder, this.options.customMethods);
|
|
160
|
+
if (selector_api_execution_mode_1.default.isSync) {
|
|
161
|
+
add_api_1.addAPI(snapshot, () => snapshot.selector, SelectorBuilder, this.options.customDOMProperties, this.options.customMethods, this._getObservedCallsites(), true);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return snapshot;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.default = SelectorBuilder;
|
|
168
168
|
module.exports = exports.default;
|
|
169
169
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQtZnVuY3Rpb25zL3NlbGVjdG9ycy9zZWxlY3Rvci1idWlsZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQTJEO0FBQzNELG9EQUE0QjtBQUM1Qix5RkFBK0Q7QUFDL0QsOENBQXNEO0FBQ3RELGtEQUE4RDtBQUM5RCx1RUFBc0Q7QUFDdEQsOENBQW9EO0FBQ3BELDBFQUFzRTtBQUN0RSxxRUFBNkU7QUFDN0UsNEZBQWtFO0FBQ2xFLHVDQUFxRDtBQUNyRCx3RkFBOEQ7QUFDOUQsMEVBQWtEO0FBQ2xELHlGQUE4RDtBQUM5RCxpR0FBc0U7QUFFdEUsTUFBcUIsZUFBZ0IsU0FBUSxpQ0FBcUI7SUFDOUQsWUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWE7UUFDbkMsTUFBTSxLQUFLLEdBQTBCLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLG1CQUFtQixHQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsd0JBQXFCLENBQUMsQ0FBQztRQUNyRSxNQUFNLDRCQUE0QixHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsd0JBQXFCLENBQUMsQ0FBQztRQUM3RixJQUFJLE9BQU8sR0FBMEIsbUJBQW1CLElBQUksNEJBQTRCLENBQUM7UUFFekYsT0FBTyxHQUFHLE9BQU8sWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlELElBQUksT0FBTyxFQUFFO1lBQ1QsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFFaEIsSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksT0FBTyxPQUFPLEtB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RUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXJHLElBQUkscUNBQXdCLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxnQkFBTSxDQUNGLFFBQVEsRUFDUixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN2QixlQUFlLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUM1QixJQUFJLENBQ1AsQ0FBQzthQUNMO1NBQ0o7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUF2TkQsa0NBdU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQsIG1lcmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBkZWRlbnQgZnJvbSAnZGVkZW50JztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgZnJvbSAnLi4vY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IHsgU2VsZWN0b3JOb2RlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcmVwbGljYXRvcic7XG5pbXBvcnQgeyBDbGllbnRGdW5jdGlvbkFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IGZ1bmN0aW9uQnVpbGRlclN5bWJvbCBmcm9tICcuLi9idWlsZGVyLXN5bWJvbCc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBFeGVjdXRlU2VsZWN0b3JDb21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IGRlZmluZUxhenlQcm9wZXJ0eSBmcm9tICcuLi8uLi91dGlscy9kZWZpbmUtbGF6eS1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBhZGRBUEksIGFkZEN1c3RvbU1ldGhvZHMgfSBmcm9tICcuL2FkZC1hcGknO1xuaW1wb3J0IGNyZWF0ZVNuYXBzaG90TWV0aG9kcyBmcm9tICcuL2NyZWF0ZS1zbmFwc2hvdC1tZXRob2RzJztcbmltcG9ydCBwcmVwYXJlQXBpRm5BcmdzIGZyb20gJy4vcHJlcGFyZS1hcGktYXJncyc7XG5pbXBvcnQgcmV0dXJuU2luZ2xlUHJvcE1vZGUgZnJvbSAnLi4vcmV0dXJuLXNpbmdsZS1wcm9wLW1vZGUnO1xuaW1wb3J0IHNlbGVjdG9yQXBpRXhlY3V0aW9uTW9kZSBmcm9tICcuLi9zZWxlY3Rvci1hcGktZXhlY3V0aW9uLW1vZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RvckJ1aWxkZXIgZXh0ZW5kcyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yIChmbiwgb3B0aW9ucywgY2FsbHNpdGVOYW1lcykge1xuICAgICAgICBjb25zdCBhcGlGbiAgICAgICAgICAgICAgICAgICAgICAgID0gb3B0aW9ucyAmJiBvcHRpb25zLmFwaUZuO1xuICAgICAgICBjb25zdCBhcGlGbklEICAgICAgICAgICAgICAgICAgICAgID0gb3B0aW9ucyAmJiBvcHRpb25zLmFwaUZuSUQ7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXJGcm9tU2VsZWN0b3IgICAgICAgICAgPSBmbiAmJiBmbltmdW5jdGlvbkJ1aWxkZXJTeW1ib2xdO1xuICAgICAgICBjb25zdCBidWlsZGVyRnJvbVByb21pc2VPclNuYXBzaG90ID0gZm4gJiYgZm4uc2VsZWN0b3IgJiYgZm4uc2VsZWN0b3JbZnVuY3Rpb25CdWlsZGVyU3ltYm9sXTtcbiAgICAgICAgbGV0IGJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkZXJGcm9tU2VsZWN0b3IgfHwgYnVpbGRlckZyb21Qcm9taXNlT3JTbmFwc2hvdDtcblxuICAgICAgICBidWlsZGVyID0gYnVpbGRlciBpbnN0YW5jZW9mIFNlbGVjdG9yQnVpbGRlciA/IGJ1aWxkZXIgOiBudWxsO1xuXG4gICAgICAgIGlmIChidWlsZGVyKSB7XG4gICAgICAgICAgICBmbiA9IGJ1aWxkZXIuZm47XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDAgfHwgdHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBtZXJnZSh7fSwgYnVpbGRlci5vcHRpb25zLCBvcHRpb25zLCB7IHNvdXJjZVNlbGVjdG9yQnVpbGRlcjogYnVpbGRlciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyKGZuLCBvcHRpb25zLCBjYWxsc2l0ZU5hbWVzKTtcblxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5hcGlGbkNoYWluKSB7XG4gICAgICAgICAgICBjb25zdCBmblR5cGUgPSB0eXBlb2YgdGhpcy5mbjtcbiAgICAgICAgICAgIGxldCBpdGVtICAgICA9IGZuVHlwZSA9PT0gJ3N0cmluZycgPyBgJyR7dGhpcy5mbn0nYCA6IGBbJHtmblR5cGV9XWA7XG5cbiAgICAgICAgICAgIGl0ZW0gICAgICAgICAgICAgICAgICAgID0gYFNlbGVjdG9yKCR7aXRlbX0pYDtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hcGlGbiAgICAgID0gaXRlbTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hcGlGbkNoYWluID0gW2l0ZW1dO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFwaUZuKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFwaUZuQ2hhaW4ucHVzaChhcGlGbik7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zLmFwaUZuSUQgPSB0eXBlb2YgYXBpRm5JRCA9PT0gJ251bWJlcicgPyBhcGlGbklEIDogdGhpcy5vcHRpb25zLmFwaUZuQ2hhaW4ubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBfZ2V0Q29tcGlsZWRGbkNvZGUgKCkge1xuICAgICAgICAvLyBPUFRJTUlaQVRJT046IGlmIHNlbGVjdG9yIHdhcyBwcm9kdWNlZCBmcm9tIGFub3RoZXIgc2VsZWN0b3IgYW5kXG4gICAgICAgIC8vIGl0IGhhcyBzYW1lIGRlcGVuZGVuY2llcyBhcyBzb3VyY2Ugc2VsZWN0b3IsIHRoZW4gd2UgY2FuXG4gICAgICAgIC8vIGF2b2lkIHJlY29tcGlsYXRpb24gYW5kIGp1c3QgcmUtdXNlIGFscmVhZHkgY29tcGlsZWQgY29kZS5cbiAgICAgICAgY29uc3QgaGFzU2FtZURlcGVuZGVuY2llc0FzU291cmNlU2VsZWN0b3IgPSB0aGlzLm9wdGlvbnMuc291cmNlU2VsZWN0b3JCdWlsZGVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvdXJjZVNlbGVjdG9yQnVpbGRlci5vcHRpb25zLmRlcGVuZGVuY2llcyA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuZGVwZW5kZW5jaWVzO1xuXG4gICAgICAgIGlmIChoYXNTYW1lRGVwZW5kZW5jaWVzQXNTb3VyY2VTZWxlY3RvcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc291cmNlU2VsZWN0b3JCdWlsZGVyLmNvbXBpbGVkRm5Db2RlO1xuXG4gICAgICAgIGNvbnN0IGNvZGUgPSB0eXBlb2YgdGhpcy5mbiA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgYChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCR7SlNPTi5zdHJpbmdpZnkodGhpcy5mbil9KTt9KTtgIDpcbiAgICAgICAgICAgIHN1cGVyLl9nZXRDb21waWxlZEZuQ29kZSgpO1xuXG4gICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVkZW50KFxuICAgICAgICAgICAgICAgIGAoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9fZiQ9JHtjb2RlfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyAgICAgICAgICAgPSBfX2RlcGVuZGVuY2llcyQuYm91bmRBcmdzIHx8IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvckZpbHRlciA9IHdpbmRvd1snJXRlc3RDYWZlU2VsZWN0b3JGaWx0ZXIlJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IF9fZiQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlcyAgICAgPSBzZWxlY3RvckZpbHRlci5jYXN0KG5vZGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rlcy5sZW5ndGggJiYgIXNlbGVjdG9yRmlsdGVyLmVycm9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yRmlsdGVyLmVycm9yID0gX19kZXBlbmRlbmNpZXMkLmFwaUluZm8uYXBpRm5JRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yRmlsdGVyLmZpbHRlcihub2RlcywgX19kZXBlbmRlbmNpZXMkLmZpbHRlck9wdGlvbnMsIF9fZGVwZW5kZW5jaWVzJC5hcGlJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgfSkoKTtgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgX2NyZWF0ZUludmFsaWRGblR5cGVFcnJvciAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2xpZW50RnVuY3Rpb25BUElFcnJvcih0aGlzLmNhbGxzaXRlTmFtZXMuaW5zdGFudGlhdGlvbiwgdGhpcy5jYWxsc2l0ZU5hbWVzLmluc3RhbnRpYXRpb24sIFJVTlRJTUVfRVJST1JTLnNlbGVjdG9ySW5pdGlhbGl6ZWRXaXRoV3JvbmdUeXBlLCB0eXBlb2YgdGhpcy5mbik7XG4gICAgfVxuXG4gICAgX2V4ZWN1dGVDb21tYW5kIChhcmdzLCB0ZXN0UnVuLCBjYWxsc2l0ZSkge1xuICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlID0gc3VwZXIuX2V4ZWN1dGVDb21tYW5kKGFyZ3MsIHRlc3RSdW4sIGNhbGxzaXRlKTtcblxuICAgICAgICB0aGlzLl9hZGRCb3VuZEFyZ3NTZWxlY3RvckdldHRlcihyZXN1bHRQcm9taXNlLCBhcmdzKTtcblxuICAgICAgICAvLyBPUFRJTUlaQVRJT046IHVzZSBidWZmZXIgZnVuY3Rpb24gYXMgc2VsZWN0b3Igbm90IHRvIHRyaWdnZXIgbGF6eSBwcm9wZXJ0eSBhaGVhZCBvZiB0aW1lXG4gICAgICAgIGFkZEFQSShyZXN1bHRQcm9taXNlLCAoKSA9PiByZXN1bHRQcm9taXNlLnNlbGVjdG9yLCBTZWxlY3RvckJ1aWxkZXIsIHRoaXMub3B0aW9ucy5jdXN0b21ET01Qcm9wZXJ0aWVzLCB0aGlzLm9wdGlvbnMuY3VzdG9tTWV0aG9kcyk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFByb21pc2U7XG4gICAgfVxuXG4gICAgX2dldFNvdXJjZVNlbGVjdG9yQnVpbGRlckFwaUZuSUQgKCkge1xuICAgICAgICBsZXQgc2VsZWN0b3JBbmNlc3RvciA9IHRoaXM7XG5cbiAgICAgICAgd2hpbGUgKHNlbGVjdG9yQW5jZXN0b3Iub3B0aW9ucy5zb3VyY2VTZWxlY3RvckJ1aWxkZXIpXG4gICAgICAgICAgICBzZWxlY3RvckFuY2VzdG9yID0gc2VsZWN0b3JBbmNlc3Rvci5vcHRpb25zLnNvdXJjZVNlbGVjdG9yQnVpbGRlcjtcblxuICAgICAgICByZXR1cm4gc2VsZWN0b3JBbmNlc3Rvci5vcHRpb25zLmFwaUZuSUQ7XG4gICAgfVxuXG4gICAgZ2V0RnVuY3Rpb25EZXBlbmRlbmNpZXMgKCkge1xuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBzdXBlci5nZXRGdW5jdGlvbkRlcGVuZGVuY2llcygpO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGZpbHRlclZpc2libGUsXG4gICAgICAgICAgICBmaWx0ZXJIaWRkZW4sXG4gICAgICAgICAgICBjb3VudGVyTW9kZSxcbiAgICAgICAgICAgIGNvbGxlY3Rpb25Nb2RlLFxuICAgICAgICAgICAgZ2V0VmlzaWJsZVZhbHVlTW9kZSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY3VzdG9tRE9NUHJvcGVydGllcyxcbiAgICAgICAgICAgIGN1c3RvbU1ldGhvZHMsXG4gICAgICAgICAgICBhcGlGbkNoYWluLFxuICAgICAgICAgICAgYm91bmRBcmdzXG4gICAgICAgIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIG1lcmdlKHt9LCBkZXBlbmRlbmNpZXMsIHtcbiAgICAgICAgICAgIGZpbHRlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJWaXNpYmxlLFxuICAgICAgICAgICAgICAgIGZpbHRlckhpZGRlbixcbiAgICAgICAgICAgICAgICBjb3VudGVyTW9kZSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICBpbmRleDogaXNOdWxsT3JVbmRlZmluZWQoaW5kZXgpID8gbnVsbCA6IGluZGV4LFxuICAgICAgICAgICAgICAgIGdldFZpc2libGVWYWx1ZU1vZGVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcGlJbmZvOiB7XG4gICAgICAgICAgICAgICAgYXBpRm5DaGFpbixcbiAgICAgICAgICAgICAgICBhcGlGbklEOiB0aGlzLl9nZXRTb3VyY2VTZWxlY3RvckJ1aWxkZXJBcGlGbklEKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3VuZEFyZ3MsXG4gICAgICAgICAgICBjdXN0b21ET01Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgY3VzdG9tTWV0aG9kc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY3JlYXRlVGVzdFJ1bkNvbW1hbmQgKGVuY29kZWRBcmdzLCBlbmNvZGVkRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhlY3V0ZVNlbGVjdG9yQ29tbWFuZCh7XG4gICAgICAgICAgICBpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lOiB0aGlzLmNhbGxzaXRlTmFtZXMuaW5zdGFudGlhdGlvbixcbiAgICAgICAgICAgIGZuQ29kZTogICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRGbkNvZGUsXG4gICAgICAgICAgICBhcmdzOiAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQXJncyxcbiAgICAgICAgICAgIGRlcGVuZGVuY2llczogICAgICAgICAgICAgIGVuY29kZWREZXBlbmRlbmNpZXMsXG4gICAgICAgICAgICBuZWVkRXJyb3I6ICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubmVlZEVycm9yLFxuICAgICAgICAgICAgYXBpRm5DaGFpbjogICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFwaUZuQ2hhaW4sXG4gICAgICAgICAgICB2aXNpYmlsaXR5Q2hlY2s6ICAgICAgICAgICAhIXRoaXMub3B0aW9ucy52aXNpYmlsaXR5Q2hlY2ssXG4gICAgICAgICAgICB0aW1lb3V0OiAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMudGltZW91dFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVPcHRpb25zIChvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyLl92YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChvcHRpb25zLnZpc2liaWxpdHlDaGVjaykpXG4gICAgICAgICAgICBhc3NlcnRUeXBlKGlzLmJvb2xlYW4sIHRoaXMuY2FsbHNpdGVOYW1lcy5pbnN0YW50aWF0aW9uLCAnXCJ2aXNpYmlsaXR5Q2hlY2tcIiBvcHRpb24nLCBvcHRpb25zLnZpc2liaWxpdHlDaGVjayk7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChvcHRpb25zLnRpbWVvdXQpKVxuICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OZWdhdGl2ZU51bWJlciwgdGhpcy5jYWxsc2l0ZU5hbWVzLmluc3RhbnRpYXRpb24sICdcInRpbWVvdXRcIiBvcHRpb24nLCBvcHRpb25zLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIF9nZXRSZXBsaWNhdG9yVHJhbnNmb3JtcyAoKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybXMgPSBzdXBlci5fZ2V0UmVwbGljYXRvclRyYW5zZm9ybXMoKTtcblxuICAgICAgICB0cmFuc2Zvcm1zLnB1c2gobmV3IFNlbGVjdG9yTm9kZVRyYW5zZm9ybSgpKTtcblxuICAgICAgICByZXR1cm4gdHJhbnNmb3JtcztcbiAgICB9XG5cbiAgICBfYWRkQm91bmRBcmdzU2VsZWN0b3JHZXR0ZXIgKG9iaiwgc2VsZWN0b3JBcmdzKSB7XG4gICAgICAgIGRlZmluZUxhenlQcm9wZXJ0eShvYmosICdzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgU2VsZWN0b3JCdWlsZGVyKHRoaXMuZ2V0RnVuY3Rpb24oKSwgeyBib3VuZEFyZ3M6IHNlbGVjdG9yQXJncyB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2RlY29yYXRlRnVuY3Rpb24gKHNlbGVjdG9yRm4pIHtcbiAgICAgICAgc3VwZXIuX2RlY29yYXRlRnVuY3Rpb24oc2VsZWN0b3JGbik7XG5cbiAgICAgICAgYWRkQVBJKFxuICAgICAgICAgICAgc2VsZWN0b3JGbixcbiAgICAgICAgICAgICgpID0+IHNlbGVjdG9yRm4sXG4gICAgICAgICAgICBTZWxlY3RvckJ1aWxkZXIsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tRE9NUHJvcGVydGllcyxcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21NZXRob2RzLFxuICAgICAgICAgICAgdGhpcy5fZ2V0T2JzZXJ2ZWRDYWxsc2l0ZXMoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9nZXRDbGllbnRGbldpdGhPdmVycmlkZGVuT3B0aW9ucyAob3B0aW9ucykge1xuICAgICAgICBjb25zdCBhcGlGbiAgICAgICAgICAgICAgPSBwcmVwYXJlQXBpRm5BcmdzKCd3aXRoJywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2VsZWN0b3JJRCA9IHRoaXMub3B0aW9ucy5hcGlGbkNoYWluLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLl9nZXRDbGllbnRGbldpdGhPdmVycmlkZGVuT3B0aW9ucyhPYmplY3QuYXNzaWduKG9wdGlvbnMsIHsgYXBpRm4sIGFwaUZuSUQ6IHByZXZpb3VzU2VsZWN0b3JJRCB9KSk7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NSZXN1bHQgKHJlc3VsdCwgc2VsZWN0b3JBcmdzKSB7XG4gICAgICAgIGNvbnN0IHNuYXBzaG90ID0gc3VwZXIuX3Byb2Nlc3NSZXN1bHQocmVzdWx0LCBzZWxlY3RvckFyZ3MpO1xuXG4gICAgICAgIGlmIChzbmFwc2hvdCAmJiAhcmV0dXJuU2luZ2xlUHJvcE1vZGUodGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkQm91bmRBcmdzU2VsZWN0b3JHZXR0ZXIoc25hcHNob3QsIHNlbGVjdG9yQXJncyk7XG4gICAgICAgICAgICBjcmVhdGVTbmFwc2hvdE1ldGhvZHMoc25hcHNob3QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmN1c3RvbU1ldGhvZHMpXG4gICAgICAgICAgICAgICAgYWRkQ3VzdG9tTWV0aG9kcyhzbmFwc2hvdCwgKCkgPT4gc25hcHNob3Quc2VsZWN0b3IsIFNlbGVjdG9yQnVpbGRlciwgdGhpcy5vcHRpb25zLmN1c3RvbU1ldGhvZHMpO1xuXG4gICAgICAgICAgICBpZiAoc2VsZWN0b3JBcGlFeGVjdXRpb25Nb2RlLmlzU3luYykge1xuICAgICAgICAgICAgICAgIGFkZEFQSShcbiAgICAgICAgICAgICAgICAgICAgc25hcHNob3QsXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHNuYXBzaG90LnNlbGVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBTZWxlY3RvckJ1aWxkZXIsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21ET01Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tTWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0T2JzZXJ2ZWRDYWxsc2l0ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgfVxufVxuXG4iXX0=
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// -------------------------------------------------------------
|
|
3
|
-
// WARNING: this file is used by both the client and the server.
|
|
4
|
-
// Do not use any browser or node-specific API!
|
|
5
|
-
// -------------------------------------------------------------
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
/* eslint-disable no-undef */
|
|
8
|
-
function selectorTextFilter(node, index, originNode, textFilter) {
|
|
9
|
-
function hasChildrenWithText(parentNode) {
|
|
10
|
-
const cnCount = parentNode.childNodes.length;
|
|
11
|
-
for (let i = 0; i < cnCount; i++) {
|
|
12
|
-
if (selectorTextFilter(parentNode.childNodes[i], index, originNode, textFilter))
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
function checkNodeText(text) {
|
|
18
|
-
if (textFilter instanceof RegExp)
|
|
19
|
-
return textFilter.test(text);
|
|
20
|
-
return textFilter === text.trim();
|
|
21
|
-
}
|
|
22
|
-
// Element
|
|
23
|
-
if (node.nodeType === 1) {
|
|
24
|
-
// NOTE: In Firefox, <option> elements don't have `innerText`.
|
|
25
|
-
// So, we fallback to `textContent` in that case (see GH-861).
|
|
26
|
-
// SVG elements do not have `innerText` property as well
|
|
27
|
-
return checkNodeText(node.innerText || node.textContent);
|
|
28
|
-
}
|
|
29
|
-
// Document
|
|
30
|
-
if (node.nodeType === 9) {
|
|
31
|
-
// NOTE: latest version of Edge doesn't have `innerText` for `document`,
|
|
32
|
-
// `html` and `body`. So we check their children instead.
|
|
33
|
-
const head = node.querySelector('head');
|
|
34
|
-
const body = node.querySelector('body');
|
|
35
|
-
return hasChildrenWithText(head, textFilter) || hasChildrenWithText(body, textFilter);
|
|
36
|
-
}
|
|
37
|
-
// DocumentFragment
|
|
38
|
-
if (node.nodeType === 11)
|
|
39
|
-
return hasChildrenWithText(node, textFilter);
|
|
40
|
-
return checkNodeText(node.textContent);
|
|
41
|
-
}
|
|
42
|
-
exports.default = selectorTextFilter;
|
|
43
|
-
/* eslint-enable no-undef */
|
|
1
|
+
"use strict";
|
|
2
|
+
// -------------------------------------------------------------
|
|
3
|
+
// WARNING: this file is used by both the client and the server.
|
|
4
|
+
// Do not use any browser or node-specific API!
|
|
5
|
+
// -------------------------------------------------------------
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
/* eslint-disable no-undef */
|
|
8
|
+
function selectorTextFilter(node, index, originNode, textFilter) {
|
|
9
|
+
function hasChildrenWithText(parentNode) {
|
|
10
|
+
const cnCount = parentNode.childNodes.length;
|
|
11
|
+
for (let i = 0; i < cnCount; i++) {
|
|
12
|
+
if (selectorTextFilter(parentNode.childNodes[i], index, originNode, textFilter))
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
function checkNodeText(text) {
|
|
18
|
+
if (textFilter instanceof RegExp)
|
|
19
|
+
return textFilter.test(text);
|
|
20
|
+
return textFilter === text.trim();
|
|
21
|
+
}
|
|
22
|
+
// Element
|
|
23
|
+
if (node.nodeType === 1) {
|
|
24
|
+
// NOTE: In Firefox, <option> elements don't have `innerText`.
|
|
25
|
+
// So, we fallback to `textContent` in that case (see GH-861).
|
|
26
|
+
// SVG elements do not have `innerText` property as well
|
|
27
|
+
return checkNodeText(node.innerText || node.textContent);
|
|
28
|
+
}
|
|
29
|
+
// Document
|
|
30
|
+
if (node.nodeType === 9) {
|
|
31
|
+
// NOTE: latest version of Edge doesn't have `innerText` for `document`,
|
|
32
|
+
// `html` and `body`. So we check their children instead.
|
|
33
|
+
const head = node.querySelector('head');
|
|
34
|
+
const body = node.querySelector('body');
|
|
35
|
+
return hasChildrenWithText(head, textFilter) || hasChildrenWithText(body, textFilter);
|
|
36
|
+
}
|
|
37
|
+
// DocumentFragment
|
|
38
|
+
if (node.nodeType === 11)
|
|
39
|
+
return hasChildrenWithText(node, textFilter);
|
|
40
|
+
return checkNodeText(node.textContent);
|
|
41
|
+
}
|
|
42
|
+
exports.default = selectorTextFilter;
|
|
43
|
+
/* eslint-enable no-undef */
|
|
44
44
|
module.exports = exports.default;
|
|
45
45
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItdGV4dC1maWx0ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGdFQUFnRTtBQUNoRSxnRUFBZ0U7QUFDaEUsK0NBQStDO0FBQy9DLGdFQUFnRTs7QUFFaEUsNkJBQTZCO0FBQzdCLFNBQXdCLGtCQUFrQixDQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFFM0UsU0FBUyxtQkFBbUIsQ0FBRSxVQUFVO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRTdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUMzRSxPQUFPLElBQUksQ0FBQztTQUNuQjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTLGFBQWEsQ0FBRSxJQUFJO1FBQ3hCLElBQUksVUFBVSxZQUFZLE1BQU07WUFDNUIsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVTtJQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7UUFDckIsOERBQThEO1FBQzlELDhEQUE4RDtRQUM5RCx3REFBd0Q7UUFDeEQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDNUQ7SUFFRCxXQUFXO0lBQ1gsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRTtRQUNyQix3RUFBd0U7UUFDeEUseURBQXlEO1FBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QyxPQUFPLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDekY7SUFFRCxtQkFBbUI7SUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEVBQUU7UUFDcEIsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFakQsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUExQ0QscUNBMENDO0FBQ0QsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV0FSTklORzogdGhpcyBmaWxlIGlzIHVzZWQgYnkgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuLy8gRG8gbm90IHVzZSBhbnkgYnJvd3NlciBvciBub2RlLXNwZWNpZmljIEFQSSFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlbGVjdG9yVGV4dEZpbHRlciAobm9kZSwgaW5kZXgsIG9yaWdpbk5vZGUsIHRleHRGaWx0ZXIpIHtcblxuICAgIGZ1bmN0aW9uIGhhc0NoaWxkcmVuV2l0aFRleHQgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgY29uc3QgY25Db3VudCA9IHBhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbkNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RvclRleHRGaWx0ZXIocGFyZW50Tm9kZS5jaGlsZE5vZGVzW2ldLCBpbmRleCwgb3JpZ2luTm9kZSwgdGV4dEZpbHRlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tOb2RlVGV4dCAodGV4dCkge1xuICAgICAgICBpZiAodGV4dEZpbHRlciBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgICAgICAgICAgIHJldHVybiB0ZXh0RmlsdGVyLnRlc3QodGV4dCk7XG4gICAgICAgIHJldHVybiB0ZXh0RmlsdGVyID09PSB0ZXh0LnRyaW0oKTtcbiAgICB9XG5cbiAgICAvLyBFbGVtZW50XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgLy8gTk9URTogSW4gRmlyZWZveCwgPG9wdGlvbj4gZWxlbWVudHMgZG9uJ3QgaGF2ZSBgaW5uZXJUZXh0YC5cbiAgICAgICAgLy8gU28sIHdlIGZhbGxiYWNrIHRvIGB0ZXh0Q29udGVudGAgaW4gdGhhdCBjYXNlIChzZWUgR0gtODYxKS5cbiAgICAgICAgLy8gU1ZHIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGBpbm5lclRleHRgIHByb3BlcnR5IGFzIHdlbGxcbiAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVRleHQobm9kZS5pbm5lclRleHQgfHwgbm9kZS50ZXh0Q29udGVudCk7XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gOSkge1xuICAgICAgICAvLyBOT1RFOiBsYXRlc3QgdmVyc2lvbiBvZiBFZGdlIGRvZXNuJ3QgaGF2ZSBgaW5uZXJUZXh0YCBmb3IgYGRvY3VtZW50YCxcbiAgICAgICAgLy8gYGh0bWxgIGFuZCBgYm9keWAuIFNvIHdlIGNoZWNrIHRoZWlyIGNoaWxkcmVuIGluc3RlYWQuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKTtcbiAgICAgICAgY29uc3QgYm9keSA9IG5vZGUucXVlcnlTZWxlY3RvcignYm9keScpO1xuXG4gICAgICAgIHJldHVybiBoYXNDaGlsZHJlbldpdGhUZXh0KGhlYWQsIHRleHRGaWx0ZXIpIHx8IGhhc0NoaWxkcmVuV2l0aFRleHQoYm9keSwgdGV4dEZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gRG9jdW1lbnRGcmFnbWVudFxuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAxMSlcbiAgICAgICAgcmV0dXJuIGhhc0NoaWxkcmVuV2l0aFRleHQobm9kZSwgdGV4dEZpbHRlcik7XG5cbiAgICByZXR1cm4gY2hlY2tOb2RlVGV4dChub2RlLnRleHRDb250ZW50KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdW5kZWYgKi9cbiJdfQ==
|