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.
Files changed (332) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -21
  3. package/bin/testcafe-with-v8-flag-filter.js +0 -0
  4. package/lib/api/exportable-lib/index.js +49 -49
  5. package/lib/api/request-hooks/assert-type.js +7 -7
  6. package/lib/api/request-hooks/hook-method-names.js +9 -9
  7. package/lib/api/request-hooks/hook.js +32 -32
  8. package/lib/api/request-hooks/interfaces.js +2 -2
  9. package/lib/api/request-hooks/request-logger.js +112 -112
  10. package/lib/api/request-hooks/request-mock/create-request-mock.js +10 -10
  11. package/lib/api/request-hooks/request-mock/index.js +44 -44
  12. package/lib/api/request-hooks/request-mock.js +46 -46
  13. package/lib/api/structure/base-unit.js +11 -11
  14. package/lib/api/structure/fixture.js +75 -75
  15. package/lib/api/structure/interfaces.js +2 -2
  16. package/lib/api/structure/test-file.js +31 -31
  17. package/lib/api/structure/test-timeout.js +9 -9
  18. package/lib/api/structure/test.js +85 -85
  19. package/lib/api/structure/testing-unit.js +89 -89
  20. package/lib/api/structure/unit-type.js +9 -9
  21. package/lib/api/test-controller/assertion.js +88 -88
  22. package/lib/api/test-controller/execution-context.js +82 -82
  23. package/lib/api/test-controller/index.js +358 -358
  24. package/lib/api/test-controller/proxy.js +28 -28
  25. package/lib/api/test-page-url.js +60 -60
  26. package/lib/api/test-run-tracker.js +68 -68
  27. package/lib/api/wrap-test-function.js +49 -49
  28. package/lib/assertions/executor.js +74 -74
  29. package/lib/assertions/get-fn.js +46 -46
  30. package/lib/assertions/type.js +20 -20
  31. package/lib/assets/content-types.js +9 -9
  32. package/lib/assets/injectables.js +18 -18
  33. package/lib/browser/connection/command.js +10 -10
  34. package/lib/browser/connection/error-hints.js +9 -9
  35. package/lib/browser/connection/gateway.js +159 -159
  36. package/lib/browser/connection/get-hints.js +33 -33
  37. package/lib/browser/connection/heartbeat-status.js +8 -8
  38. package/lib/browser/connection/index.js +328 -328
  39. package/lib/browser/connection/remotes-queue.js +46 -46
  40. package/lib/browser/connection/service-routes.js +12 -12
  41. package/lib/browser/connection/status.js +12 -12
  42. package/lib/browser/interfaces.js +2 -2
  43. package/lib/browser/provider/built-in/dedicated/base.js +80 -80
  44. package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
  45. package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
  46. package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
  47. package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
  48. package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
  49. package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
  50. package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
  51. package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
  52. package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
  53. package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
  54. package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
  55. package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
  56. package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
  57. package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
  58. package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
  59. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
  60. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
  61. package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
  62. package/lib/browser/provider/built-in/index.js +21 -21
  63. package/lib/browser/provider/built-in/locally-installed.js +30 -30
  64. package/lib/browser/provider/built-in/path.js +47 -47
  65. package/lib/browser/provider/built-in/remote.js +58 -58
  66. package/lib/browser/provider/index.js +303 -303
  67. package/lib/browser/provider/parse-provider-name.js +16 -16
  68. package/lib/browser/provider/plugin-host.js +121 -121
  69. package/lib/browser/provider/pool.js +115 -115
  70. package/lib/browser/provider/utils/argument-parsing.js +74 -74
  71. package/lib/browser/provider/utils/browser-starter.js +34 -34
  72. package/lib/browser/provider/utils/client-functions.js +24 -24
  73. package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
  74. package/lib/cli/argument-parser.js +284 -284
  75. package/lib/cli/authentication-helper.js +35 -35
  76. package/lib/cli/cli.js +134 -134
  77. package/lib/cli/correct-browsers-and-sources.js +40 -40
  78. package/lib/cli/index.js +19 -19
  79. package/lib/cli/log.js +43 -43
  80. package/lib/cli/remotes-wizard.js +36 -36
  81. package/lib/cli/termination-handler.js +38 -38
  82. package/lib/client/automation/index.js +34 -16
  83. package/lib/client/automation/index.min.js +1 -1
  84. package/lib/client/browser/idle-page/index.html.mustache +35 -35
  85. package/lib/client/browser/idle-page/logo.svg +86 -86
  86. package/lib/client/core/index.js +14 -14
  87. package/lib/client/driver/index.js +46 -16
  88. package/lib/client/driver/index.min.js +1 -1
  89. package/lib/client/driver/internal-properties.js +9 -9
  90. package/lib/client/test-run/iframe.js.mustache +17 -17
  91. package/lib/client/test-run/index.js.mustache +51 -51
  92. package/lib/client/ui/index.js +14 -14
  93. package/lib/client/ui/sprite.svg +42 -42
  94. package/lib/client-functions/builder-symbol.js +4 -4
  95. package/lib/client-functions/client-function-builder.js +155 -155
  96. package/lib/client-functions/replicator.js +61 -61
  97. package/lib/client-functions/return-single-prop-mode.js +8 -8
  98. package/lib/client-functions/selector-api-execution-mode.js +20 -20
  99. package/lib/client-functions/selectors/add-api.js +645 -645
  100. package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
  101. package/lib/client-functions/selectors/prepare-api-args.js +20 -20
  102. package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
  103. package/lib/client-functions/selectors/selector-builder.js +153 -153
  104. package/lib/client-functions/selectors/selector-text-filter.js +43 -43
  105. package/lib/client-functions/selectors/snapshot-properties.js +48 -48
  106. package/lib/client-functions/types.js +18 -18
  107. package/lib/compiler/babel/format-babel-produced-code.js +10 -10
  108. package/lib/compiler/babel/get-base-babel-options.js +11 -11
  109. package/lib/compiler/babel/load-libs.js +63 -63
  110. package/lib/compiler/babel/preset-stage-2.js +19 -19
  111. package/lib/compiler/compile-client-function.js +73 -73
  112. package/lib/compiler/compilers.js +33 -33
  113. package/lib/compiler/index.js +92 -92
  114. package/lib/compiler/interfaces.js +2 -2
  115. package/lib/compiler/test-file/api-based.js +146 -146
  116. package/lib/compiler/test-file/base.js +36 -36
  117. package/lib/compiler/test-file/exportble-lib-path.js +5 -5
  118. package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
  119. package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
  120. package/lib/compiler/test-file/formats/es-next/compiler.js +42 -42
  121. package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
  122. package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
  123. package/lib/compiler/test-file/formats/raw.js +85 -85
  124. package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
  125. package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
  126. package/lib/compiler/test-file/test-file-parser-base.js +214 -214
  127. package/lib/configuration/configuration-base.js +165 -165
  128. package/lib/configuration/constants.js +9 -9
  129. package/lib/configuration/customizable-compilers.js +7 -7
  130. package/lib/configuration/default-values.js +51 -51
  131. package/lib/configuration/interfaces.js +2 -2
  132. package/lib/configuration/option-names.js +53 -53
  133. package/lib/configuration/option-source.js +9 -9
  134. package/lib/configuration/option.js +14 -14
  135. package/lib/configuration/quarantine-option-names.js +8 -8
  136. package/lib/configuration/run-option-names.js +26 -26
  137. package/lib/configuration/screenshot-option-names.js +10 -10
  138. package/lib/configuration/testcafe-configuration.js +163 -163
  139. package/lib/configuration/types.js +2 -2
  140. package/lib/configuration/typescript-configuration.js +62 -62
  141. package/lib/custom-client-scripts/assert-type.js +7 -7
  142. package/lib/custom-client-scripts/client-script-init.js +2 -2
  143. package/lib/custom-client-scripts/client-script.js +106 -106
  144. package/lib/custom-client-scripts/get-code.js +11 -11
  145. package/lib/custom-client-scripts/get-url.js +6 -6
  146. package/lib/custom-client-scripts/load.js +15 -15
  147. package/lib/custom-client-scripts/problematic-scripts.js +2 -2
  148. package/lib/custom-client-scripts/routing.js +36 -36
  149. package/lib/custom-client-scripts/utils.js +60 -60
  150. package/lib/embedding-utils.js +83 -83
  151. package/lib/errors/create-stack-filter.js +18 -18
  152. package/lib/errors/error-list.js +26 -26
  153. package/lib/errors/get-callsite.js +31 -31
  154. package/lib/errors/internal-modules-prefix.js +8 -8
  155. package/lib/errors/is-internal-stack-frame.js +45 -45
  156. package/lib/errors/process-test-fn-error.js +37 -37
  157. package/lib/errors/runtime/index.js +123 -123
  158. package/lib/errors/runtime/templates.js +115 -115
  159. package/lib/errors/runtime/type-assertions.js +112 -112
  160. package/lib/errors/stack-cleaning-hook.js +64 -64
  161. package/lib/errors/test-run/formattable-adapter.js +59 -59
  162. package/lib/errors/test-run/index.js +301 -301
  163. package/lib/errors/test-run/render-error-template.js +31 -31
  164. package/lib/errors/test-run/templates.js +91 -91
  165. package/lib/errors/test-run/utils.js +89 -89
  166. package/lib/errors/types.js +156 -156
  167. package/lib/index.js +81 -81
  168. package/lib/live/bootstrapper.js +43 -43
  169. package/lib/live/controller.js +107 -107
  170. package/lib/live/file-watcher/index.js +67 -67
  171. package/lib/live/file-watcher/modules-graph.js +58 -58
  172. package/lib/live/keyboard-observer.js +76 -76
  173. package/lib/live/logger/index.js +64 -64
  174. package/lib/live/test-run-controller.js +96 -96
  175. package/lib/live/test-run-state.js +6 -6
  176. package/lib/live/test-run.js +56 -56
  177. package/lib/live/test-runner.js +167 -167
  178. package/lib/load-assets.js +29 -29
  179. package/lib/notifications/add-rendered-warning.js +16 -16
  180. package/lib/notifications/debug-logger.js +78 -78
  181. package/lib/notifications/deprecated.js +24 -24
  182. package/lib/notifications/information-message.js +9 -9
  183. package/lib/notifications/warning-log.js +31 -31
  184. package/lib/notifications/warning-message.js +47 -47
  185. package/lib/reporter/command/command-formatter.js +120 -109
  186. package/lib/reporter/command/format-command.js +8 -8
  187. package/lib/reporter/command/interfaces.js +2 -2
  188. package/lib/reporter/index.js +319 -314
  189. package/lib/reporter/interfaces.js +2 -2
  190. package/lib/reporter/plugin-host.js +135 -135
  191. package/lib/reporter/plugin-methods.js +12 -12
  192. package/lib/role/index.js +74 -74
  193. package/lib/role/marker-symbol.js +7 -7
  194. package/lib/role/phase.js +9 -9
  195. package/lib/runner/bootstrapper.js +271 -271
  196. package/lib/runner/browser-job-result.js +9 -9
  197. package/lib/runner/browser-job.js +152 -152
  198. package/lib/runner/browser-set.js +114 -114
  199. package/lib/runner/fixture-hook-controller.js +85 -85
  200. package/lib/runner/index.js +449 -449
  201. package/lib/runner/interfaces.js +2 -2
  202. package/lib/runner/reporter-stream-controller.js +27 -27
  203. package/lib/runner/task/index.js +151 -151
  204. package/lib/runner/task/phase.js +9 -9
  205. package/lib/runner/test-run-controller.js +165 -165
  206. package/lib/runner/tested-app.js +72 -72
  207. package/lib/screenshots/capturer.js +141 -141
  208. package/lib/screenshots/constants.js +11 -11
  209. package/lib/screenshots/crop.js +111 -111
  210. package/lib/screenshots/default-extension.js +4 -4
  211. package/lib/screenshots/index.js +67 -67
  212. package/lib/screenshots/utils.js +39 -39
  213. package/lib/services/compiler/host.js +190 -190
  214. package/lib/services/compiler/io.js +9 -9
  215. package/lib/services/compiler/protocol.js +17 -16
  216. package/lib/services/compiler/service.js +225 -212
  217. package/lib/services/compiler/test-run-proxy.js +111 -111
  218. package/lib/services/interfaces.js +2 -2
  219. package/lib/services/process-title.js +8 -8
  220. package/lib/services/serialization/prepare-options.js +17 -17
  221. package/lib/services/serialization/replicator/create-replicator.js +25 -25
  222. package/lib/services/serialization/replicator/custom-error-transform.js +26 -26
  223. package/lib/services/serialization/test-structure.js +92 -92
  224. package/lib/services/utils/ipc/interfaces.js +30 -30
  225. package/lib/services/utils/ipc/io.js +108 -108
  226. package/lib/services/utils/ipc/message.js +75 -75
  227. package/lib/services/utils/ipc/packet.js +55 -55
  228. package/lib/services/utils/ipc/proxy.js +109 -109
  229. package/lib/services/utils/ipc/transport.js +64 -64
  230. package/lib/shared/errors/index.js +382 -382
  231. package/lib/shared/node-modules-folder-name.js +4 -4
  232. package/lib/test-run/bookmark.js +90 -90
  233. package/lib/test-run/browser-console-messages.js +73 -73
  234. package/lib/test-run/browser-manipulation-queue.js +92 -92
  235. package/lib/test-run/client-messages.js +9 -9
  236. package/lib/test-run/commands/actions.js +486 -483
  237. package/lib/test-run/commands/assertion.js +45 -45
  238. package/lib/test-run/commands/base.js +14 -14
  239. package/lib/test-run/commands/browser-manipulation.js +95 -95
  240. package/lib/test-run/commands/from-object.js +82 -82
  241. package/lib/test-run/commands/observation.js +61 -61
  242. package/lib/test-run/commands/options.js +231 -215
  243. package/lib/test-run/commands/service.js +54 -48
  244. package/lib/test-run/commands/type.js +65 -64
  245. package/lib/test-run/commands/utils.js +87 -87
  246. package/lib/test-run/commands/validations/argument.js +90 -90
  247. package/lib/test-run/commands/validations/factories.js +47 -47
  248. package/lib/test-run/commands/validations/initializers.js +44 -44
  249. package/lib/test-run/debug-log.js +32 -32
  250. package/lib/test-run/execute-js-expression.js +74 -74
  251. package/lib/test-run/index.js +823 -799
  252. package/lib/test-run/marker-symbol.js +7 -7
  253. package/lib/test-run/observed-callsites-storage.js +17 -17
  254. package/lib/test-run/phase.js +16 -16
  255. package/lib/test-run/session-controller.js +104 -104
  256. package/lib/testcafe.js +118 -118
  257. package/lib/utils/assignable.js +39 -39
  258. package/lib/utils/async-event-emitter.js +28 -28
  259. package/lib/utils/async-queue.js +14 -14
  260. package/lib/utils/browser-connection-timeouts.js +19 -19
  261. package/lib/utils/callsite.js +17 -17
  262. package/lib/utils/check-file-path.js +31 -31
  263. package/lib/utils/check-url.js +51 -51
  264. package/lib/utils/convert-to-best-fit-type.js +16 -16
  265. package/lib/utils/correct-file-path.js +21 -21
  266. package/lib/utils/define-lazy-property.js +13 -13
  267. package/lib/utils/delay.js +6 -6
  268. package/lib/utils/delegated-api.js +44 -44
  269. package/lib/utils/detect-display.js +6 -6
  270. package/lib/utils/detect-ffmpeg.js +44 -44
  271. package/lib/utils/diff/colors.js +29 -29
  272. package/lib/utils/diff/index.js +52 -52
  273. package/lib/utils/diff/util.js +23 -23
  274. package/lib/utils/diff.js +29 -29
  275. package/lib/utils/escape-user-agent.js +10 -10
  276. package/lib/utils/flag-list.js +17 -17
  277. package/lib/utils/get-any-key.js +8 -8
  278. package/lib/utils/get-browser.js +8 -8
  279. package/lib/utils/get-common-path.js +34 -34
  280. package/lib/utils/get-filter-fn.js +40 -40
  281. package/lib/utils/get-options/base.js +36 -36
  282. package/lib/utils/get-options/compiler.js +33 -33
  283. package/lib/utils/get-options/grep.js +15 -15
  284. package/lib/utils/get-options/index.js +20 -20
  285. package/lib/utils/get-options/meta.js +22 -22
  286. package/lib/utils/get-options/quarantine.js +91 -91
  287. package/lib/utils/get-options/screenshot.js +17 -17
  288. package/lib/utils/get-options/ssl.js +45 -45
  289. package/lib/utils/get-options/video.js +10 -10
  290. package/lib/utils/get-viewport-width.js +17 -17
  291. package/lib/utils/guard-time-execution.js +10 -10
  292. package/lib/utils/handle-errors.js +74 -74
  293. package/lib/utils/handle-tag-args.js +8 -8
  294. package/lib/utils/http.js +30 -30
  295. package/lib/utils/is-localhost.js +11 -11
  296. package/lib/utils/is-password-input.js +11 -0
  297. package/lib/utils/is-repl.js +10 -10
  298. package/lib/utils/is-window-in-iframe.js +6 -6
  299. package/lib/utils/limit-number.js +10 -10
  300. package/lib/utils/make-reg-exp.js +7 -7
  301. package/lib/utils/moment-loader.js +20 -20
  302. package/lib/utils/parse-file-list.js +71 -71
  303. package/lib/utils/parse-user-agent.js +55 -55
  304. package/lib/utils/path-pattern.js +114 -114
  305. package/lib/utils/prepare-reporters.js +30 -30
  306. package/lib/utils/prerender-callsite.js +18 -18
  307. package/lib/utils/process.js +119 -119
  308. package/lib/utils/promisified-functions.js +46 -46
  309. package/lib/utils/re-executable-promise.js +39 -39
  310. package/lib/utils/render-callsite-sync.js +29 -29
  311. package/lib/utils/render-template.js +9 -9
  312. package/lib/utils/reporter.js +30 -30
  313. package/lib/utils/resolve-path-relatively-cwd.js +7 -7
  314. package/lib/utils/string.js +105 -105
  315. package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
  316. package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
  317. package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
  318. package/lib/utils/temp-directory/index.js +87 -87
  319. package/lib/utils/temp-directory/lockfile.js +56 -56
  320. package/lib/utils/thennable.js +7 -7
  321. package/lib/utils/timer.js +15 -15
  322. package/lib/utils/to-posix-path.js +8 -8
  323. package/lib/utils/types.js +2 -2
  324. package/lib/video-recorder/interfaces.js +2 -2
  325. package/lib/video-recorder/process.js +126 -126
  326. package/lib/video-recorder/recorder.js +136 -136
  327. package/lib/video-recorder/test-run-video-recorder.js +69 -69
  328. package/lib/video-recorder/videos.js +37 -37
  329. package/package.json +2 -2
  330. package/ts-defs/index.d.ts +25 -14
  331. package/ts-defs/selectors.d.ts +16 -5
  332. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0b3ItYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQtZnVuY3Rpb25zL3NlbGVjdG9ycy9zZWxlY3Rvci1idWlsZGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQTJEO0FBQzNELG9EQUE0QjtBQUM1Qix5RkFBK0Q7QUFDL0QsOENBQXNEO0FBQ3RELGtEQUE4RDtBQUM5RCx1RUFBc0Q7QUFDdEQsOENBQW9EO0FBQ3BELDBFQUFzRTtBQUN0RSxxRUFBNkU7QUFDN0UsNEZBQWtFO0FBQ2xFLHVDQUFxRDtBQUNyRCx3RkFBOEQ7QUFDOUQsMEVBQWtEO0FBQ2xELHlGQUE4RDtBQUM5RCxpR0FBc0U7QUFFdEUsTUFBcUIsZUFBZ0IsU0FBUSxpQ0FBcUI7SUFDOUQsWUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWE7UUFDbkMsTUFBTSxLQUFLLEdBQTBCLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUF3QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNoRSxNQUFNLG1CQUFtQixHQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsd0JBQXFCLENBQUMsQ0FBQztRQUNyRSxNQUFNLDRCQUE0QixHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsd0JBQXFCLENBQUMsQ0FBQztRQUM3RixJQUFJLE9BQU8sR0FBMEIsbUJBQW1CLElBQUksNEJBQTRCLENBQUM7UUFFekYsT0FBTyxHQUFHLE9BQU8sWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRTlELElBQUksT0FBTyxFQUFFO1lBQ1QsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFFaEIsSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtnQkFDakQsT0FBTyxHQUFHLGNBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzFCLE1BQU0sTUFBTSxHQUFHLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksR0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQztZQUVwRSxJQUFJLEdBQXNCLFlBQVksSUFBSSxHQUFHLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQVEsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLEtBQUs7WUFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELGtCQUFrQjtRQUNkLG1FQUFtRTtRQUNuRSwyREFBMkQ7UUFDM0QsNkRBQTZEO1FBQzdELE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFFdEUsSUFBSSxtQ0FBbUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztRQUU3RCxNQUFNLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDdEMsZ0RBQWdELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRixLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksRUFBRTtZQUNOLE9BQU8sZ0JBQU0sQ0FDVDsrQkFDZSxJQUFJOzs7Ozs7Ozs7Ozs7O3VCQWFaLENBQ1YsQ0FBQztTQUNMO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELHlCQUF5QjtRQUNyQixPQUFPLElBQUksZ0NBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsc0JBQWMsQ0FBQyxnQ0FBZ0MsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzSyxDQUFDO0lBRUQsZUFBZSxDQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUTtRQUNwQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFckUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0RCwyRkFBMkY7UUFDM0YsZ0JBQU0sQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5JLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxnQ0FBZ0M7UUFDNUIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFNUIsT0FBTyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMscUJBQXFCO1lBQ2pELGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztRQUV0RSxPQUFPLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVELHVCQUF1QjtRQUNuQixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUVyRCxNQUFNLEVBQ0YsYUFBYSxFQUNiLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixLQUFLLEVBQ0wsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixVQUFVLEVBQ1YsU0FBUyxFQUNaLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVqQixPQUFPLGNBQUssQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFO1lBQzNCLGFBQWEsRUFBRTtnQkFDWCxhQUFhO2dCQUNiLFlBQVk7Z0JBQ1osV0FBVztnQkFDWCxjQUFjO2dCQUNkLEtBQUssRUFBRSxjQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQzlDLG1CQUFtQjthQUN0QjtZQUNELE9BQU8sRUFBRTtnQkFDTCxVQUFVO2dCQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7YUFDbkQ7WUFDRCxTQUFTO1lBQ1QsbUJBQW1CO1lBQ25CLGFBQWE7U0FDaEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFFLFdBQVcsRUFBRSxtQkFBbUI7UUFDbkQsT0FBTyxJQUFJLG9DQUFzQixDQUFDO1lBQzlCLHlCQUF5QixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYTtZQUMzRCxNQUFNLEVBQXFCLElBQUksQ0FBQyxjQUFjO1lBQzlDLElBQUksRUFBdUIsV0FBVztZQUN0QyxZQUFZLEVBQWUsbUJBQW1CO1lBQzlDLFNBQVMsRUFBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQ2pELFVBQVUsRUFBaUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ2xELGVBQWUsRUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1lBQ3pELE9BQU8sRUFBb0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1NBQ2xELENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxPQUFPO1FBQ3JCLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsY0FBaUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzNDLDRCQUFVLENBQUMsb0JBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRWxILElBQUksQ0FBQyxjQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDbkMsNEJBQVUsQ0FBQyxvQkFBRSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRXBELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFFN0MsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELDJCQUEyQixDQUFFLEdBQUcsRUFBRSxZQUFZO1FBQzFDLDhCQUFrQixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBRXJGLE9BQU8sT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGlCQUFpQixDQUFFLFVBQVU7UUFDekIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBDLGdCQUFNLENBQ0YsVUFBVSxFQUNWLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFDaEIsZUFBZSxFQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FDL0IsQ0FBQztJQUNOLENBQUM7SUFFRCxpQ0FBaUMsQ0FBRSxPQUFPO1FBQ3RDLE1BQU0sS0FBSyxHQUFnQiwwQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTlELE9BQU8sS0FBSyxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRUQsY0FBYyxDQUFFLE1BQU0sRUFBRSxZQUFZO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTVELElBQUksUUFBUSxJQUFJLENBQUMsaUNBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekQsaUNBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQzFCLDBCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXJHLElBQUkscUNBQXdCLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxnQkFBTSxDQUNGLFFBQVEsRUFDUixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN2QixlQUFlLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUM1QixJQUFJLENBQ1AsQ0FBQzthQUNMO1NBQ0o7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUF2TkQsa0NBdU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOaWwgYXMgaXNOdWxsT3JVbmRlZmluZWQsIG1lcmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBkZWRlbnQgZnJvbSAnZGVkZW50JztcbmltcG9ydCBDbGllbnRGdW5jdGlvbkJ1aWxkZXIgZnJvbSAnLi4vY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuaW1wb3J0IHsgU2VsZWN0b3JOb2RlVHJhbnNmb3JtIH0gZnJvbSAnLi4vcmVwbGljYXRvcic7XG5pbXBvcnQgeyBDbGllbnRGdW5jdGlvbkFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IGZ1bmN0aW9uQnVpbGRlclN5bWJvbCBmcm9tICcuLi9idWlsZGVyLXN5bWJvbCc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBFeGVjdXRlU2VsZWN0b3JDb21tYW5kIH0gZnJvbSAnLi4vLi4vdGVzdC1ydW4vY29tbWFuZHMvb2JzZXJ2YXRpb24nO1xuaW1wb3J0IGRlZmluZUxhenlQcm9wZXJ0eSBmcm9tICcuLi8uLi91dGlscy9kZWZpbmUtbGF6eS1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBhZGRBUEksIGFkZEN1c3RvbU1ldGhvZHMgfSBmcm9tICcuL2FkZC1hcGknO1xuaW1wb3J0IGNyZWF0ZVNuYXBzaG90TWV0aG9kcyBmcm9tICcuL2NyZWF0ZS1zbmFwc2hvdC1tZXRob2RzJztcbmltcG9ydCBwcmVwYXJlQXBpRm5BcmdzIGZyb20gJy4vcHJlcGFyZS1hcGktYXJncyc7XG5pbXBvcnQgcmV0dXJuU2luZ2xlUHJvcE1vZGUgZnJvbSAnLi4vcmV0dXJuLXNpbmdsZS1wcm9wLW1vZGUnO1xuaW1wb3J0IHNlbGVjdG9yQXBpRXhlY3V0aW9uTW9kZSBmcm9tICcuLi9zZWxlY3Rvci1hcGktZXhlY3V0aW9uLW1vZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWxlY3RvckJ1aWxkZXIgZXh0ZW5kcyBDbGllbnRGdW5jdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0cnVjdG9yIChmbiwgb3B0aW9ucywgY2FsbHNpdGVOYW1lcykge1xuICAgICAgICBjb25zdCBhcGlGbiAgICAgICAgICAgICAgICAgICAgICAgID0gb3B0aW9ucyAmJiBvcHRpb25zLmFwaUZuO1xuICAgICAgICBjb25zdCBhcGlGbklEICAgICAgICAgICAgICAgICAgICAgID0gb3B0aW9ucyAmJiBvcHRpb25zLmFwaUZuSUQ7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXJGcm9tU2VsZWN0b3IgICAgICAgICAgPSBmbiAmJiBmbltmdW5jdGlvbkJ1aWxkZXJTeW1ib2xdO1xuICAgICAgICBjb25zdCBidWlsZGVyRnJvbVByb21pc2VPclNuYXBzaG90ID0gZm4gJiYgZm4uc2VsZWN0b3IgJiYgZm4uc2VsZWN0b3JbZnVuY3Rpb25CdWlsZGVyU3ltYm9sXTtcbiAgICAgICAgbGV0IGJ1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICA9IGJ1aWxkZXJGcm9tU2VsZWN0b3IgfHwgYnVpbGRlckZyb21Qcm9taXNlT3JTbmFwc2hvdDtcblxuICAgICAgICBidWlsZGVyID0gYnVpbGRlciBpbnN0YW5jZW9mIFNlbGVjdG9yQnVpbGRlciA/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==