testcafe 1.19.0-alpha.1 → 1.19.0-alpha.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 (441) hide show
  1. package/CHANGELOG.md +4360 -0
  2. package/bin/testcafe-with-v8-flag-filter.js +0 -0
  3. package/lib/api/exportable-lib/index.js +64 -64
  4. package/lib/api/request-hooks/assert-type.js +7 -7
  5. package/lib/api/request-hooks/hook-method-names.js +9 -9
  6. package/lib/api/request-hooks/hook.js +32 -32
  7. package/lib/api/request-hooks/interfaces.js +2 -2
  8. package/lib/api/request-hooks/request-logger.js +112 -112
  9. package/lib/api/request-hooks/request-mock/create-request-mock.js +10 -10
  10. package/lib/api/request-hooks/request-mock/index.js +43 -43
  11. package/lib/api/request-hooks/request-mock.js +46 -46
  12. package/lib/api/structure/base-unit.js +11 -11
  13. package/lib/api/structure/fixture.js +77 -77
  14. package/lib/api/structure/interfaces.js +2 -2
  15. package/lib/api/structure/test-file.js +32 -32
  16. package/lib/api/structure/test-timeout.js +9 -9
  17. package/lib/api/structure/test.js +98 -98
  18. package/lib/api/structure/testing-unit.js +89 -89
  19. package/lib/api/structure/unit-type.js +9 -9
  20. package/lib/api/test-controller/assertion.js +105 -105
  21. package/lib/api/test-controller/execution-context.js +88 -88
  22. package/lib/api/test-controller/index.js +413 -413
  23. package/lib/api/test-controller/proxy.js +28 -28
  24. package/lib/api/test-page-url.js +60 -60
  25. package/lib/api/test-run-tracker.js +86 -86
  26. package/lib/api/user-variables/index.js +11 -11
  27. package/lib/api/wrap-test-function.js +49 -49
  28. package/lib/assertions/executor.js +87 -87
  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 +168 -168
  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 +335 -335
  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 +105 -105
  44. package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
  45. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/automations/click/create-mouse-click-strategy.js +57 -57
  46. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/barriers/emitters/client-request.js +44 -44
  47. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/barriers/emitters/script-execution.js +37 -37
  48. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/barriers/page-unload-barrier.js +37 -37
  49. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/client-function-executor.js +123 -123
  50. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/clients-manager.js +13 -13
  51. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/execution-context.js +83 -83
  52. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +312 -312
  53. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.js +98 -98
  54. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/create-event-sequence.js +38 -38
  55. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/cursor.js +102 -102
  56. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/dom-utils.js +194 -194
  57. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/event-utils.js +8 -8
  58. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/index.js +9 -9
  59. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/position-utils.js +128 -128
  60. package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/utils/style-utils.js +147 -147
  61. package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
  62. package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
  63. package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
  64. package/lib/browser/provider/built-in/dedicated/chrome/index.js +110 -110
  65. package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
  66. package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +54 -54
  67. package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +28 -28
  68. package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
  69. package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
  70. package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
  71. package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +123 -123
  72. package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
  73. package/lib/browser/provider/built-in/dedicated/firefox/interfaces.js +2 -2
  74. package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
  75. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
  76. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
  77. package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +15 -15
  78. package/lib/browser/provider/built-in/index.js +21 -21
  79. package/lib/browser/provider/built-in/locally-installed.js +30 -30
  80. package/lib/browser/provider/built-in/path.js +47 -47
  81. package/lib/browser/provider/built-in/remote.js +58 -58
  82. package/lib/browser/provider/index.js +318 -318
  83. package/lib/browser/provider/parse-provider-name.js +16 -16
  84. package/lib/browser/provider/plugin-host.js +127 -127
  85. package/lib/browser/provider/pool.js +123 -123
  86. package/lib/browser/provider/utils/argument-parsing.js +74 -74
  87. package/lib/browser/provider/utils/browser-starter.js +34 -34
  88. package/lib/browser/provider/utils/client-functions.js +24 -24
  89. package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
  90. package/lib/cli/argument-parser/command-names.js +10 -0
  91. package/lib/cli/argument-parser/index.js +391 -0
  92. package/lib/cli/argument-parser/parse-utils.js +14 -0
  93. package/lib/cli/authentication-helper.js +35 -35
  94. package/lib/cli/cli.js +150 -143
  95. package/lib/cli/correct-browsers-and-sources.js +40 -40
  96. package/lib/cli/index.js +19 -19
  97. package/lib/cli/log.js +43 -43
  98. package/lib/cli/node-arguments-filter.js +48 -48
  99. package/lib/cli/remotes-wizard.js +36 -36
  100. package/lib/cli/termination-handler.js +38 -38
  101. package/lib/client/core/scroll/adapter/index.js +14 -14
  102. package/lib/client/core/scroll/index.js +234 -234
  103. package/lib/client/core/utils/shared/adapter/index.js +17 -17
  104. package/lib/client/core/utils/shared/position.js +85 -85
  105. package/lib/client/core/utils/shared/scroll.js +84 -84
  106. package/lib/client/core/utils/shared/style.js +26 -26
  107. package/lib/client/driver/command-executors/client-functions/adapter/index.js +17 -17
  108. package/lib/client/driver/command-executors/client-functions/selector-executor/check-element-delay.js +4 -4
  109. package/lib/client/driver/command-executors/client-functions/selector-executor/filter.js +85 -85
  110. package/lib/client/driver/command-executors/client-functions/selector-executor/utils.js +37 -37
  111. package/lib/client/driver/deps/hammerhead.js +15 -15
  112. package/lib/client/driver/generate-id.js +7 -7
  113. package/lib/client/driver/internal-properties.js +8 -8
  114. package/lib/client/driver/status.js +37 -37
  115. package/lib/client-functions/builder-symbol.js +4 -4
  116. package/lib/client-functions/client-function-builder.js +174 -174
  117. package/lib/client-functions/replicator.js +61 -61
  118. package/lib/client-functions/return-single-prop-mode.js +8 -8
  119. package/lib/client-functions/selector-api-execution-mode.js +20 -20
  120. package/lib/client-functions/selectors/add-api.js +651 -651
  121. package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
  122. package/lib/client-functions/selectors/prepare-api-args.js +20 -20
  123. package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
  124. package/lib/client-functions/selectors/selector-builder.js +154 -154
  125. package/lib/client-functions/selectors/selector-text-filter.js +43 -43
  126. package/lib/client-functions/selectors/snapshot-properties.js +48 -48
  127. package/lib/client-functions/types.js +18 -18
  128. package/lib/compiler/babel/format-babel-produced-code.js +10 -10
  129. package/lib/compiler/babel/get-base-babel-options.js +11 -11
  130. package/lib/compiler/babel/load-libs.js +66 -66
  131. package/lib/compiler/babel/preset-stage-2.js +19 -19
  132. package/lib/compiler/compile-client-function.js +82 -82
  133. package/lib/compiler/compilers.js +33 -33
  134. package/lib/compiler/index.js +92 -92
  135. package/lib/compiler/interfaces.js +2 -2
  136. package/lib/compiler/test-file/add-export-api.js +24 -24
  137. package/lib/compiler/test-file/api-based.js +202 -202
  138. package/lib/compiler/test-file/base.js +36 -36
  139. package/lib/compiler/test-file/cache-proxy.js +44 -44
  140. package/lib/compiler/test-file/disable-v8-optimization-note.js +4 -4
  141. package/lib/compiler/test-file/exportble-lib-path.js +5 -5
  142. package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
  143. package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
  144. package/lib/compiler/test-file/formats/es-next/compiler.js +49 -49
  145. package/lib/compiler/test-file/formats/es-next/get-test-list.js +167 -167
  146. package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
  147. package/lib/compiler/test-file/formats/raw.js +86 -86
  148. package/lib/compiler/test-file/formats/typescript/compiler.js +169 -169
  149. package/lib/compiler/test-file/formats/typescript/get-test-list.js +186 -186
  150. package/lib/compiler/test-file/test-file-parser-base.js +231 -231
  151. package/lib/compiler/test-file/test-file-temp-variable-name.js +4 -4
  152. package/lib/configuration/configuration-base.js +230 -230
  153. package/lib/configuration/constants.js +9 -9
  154. package/lib/configuration/customizable-compilers.js +7 -7
  155. package/lib/configuration/default-values.js +55 -55
  156. package/lib/configuration/formats.js +6 -6
  157. package/lib/configuration/interfaces.js +2 -2
  158. package/lib/configuration/option-names.js +61 -61
  159. package/lib/configuration/option-source.js +10 -10
  160. package/lib/configuration/option.js +14 -14
  161. package/lib/configuration/quarantine-option-names.js +8 -8
  162. package/lib/configuration/run-option-names.js +29 -29
  163. package/lib/configuration/screenshot-option-names.js +11 -11
  164. package/lib/configuration/testcafe-configuration.js +206 -206
  165. package/lib/configuration/types.js +2 -2
  166. package/lib/configuration/typescript-configuration.js +65 -65
  167. package/lib/custom-client-scripts/assert-type.js +7 -7
  168. package/lib/custom-client-scripts/client-script-init.js +2 -2
  169. package/lib/custom-client-scripts/client-script.js +106 -106
  170. package/lib/custom-client-scripts/get-code.js +11 -11
  171. package/lib/custom-client-scripts/get-url.js +6 -6
  172. package/lib/custom-client-scripts/load.js +15 -15
  173. package/lib/custom-client-scripts/problematic-scripts.js +2 -2
  174. package/lib/custom-client-scripts/routing.js +36 -36
  175. package/lib/custom-client-scripts/utils.js +60 -60
  176. package/lib/dashboard/config-storage.js +22 -0
  177. package/lib/dashboard/connector.js +84 -0
  178. package/lib/dashboard/get-dashboard-url.js +10 -0
  179. package/lib/dashboard/get-default-project-link.js +23 -0
  180. package/lib/dashboard/index.js +124 -0
  181. package/lib/dashboard/interfaces.js +3 -0
  182. package/lib/dashboard/messages.js +19 -0
  183. package/lib/embedding-utils.js +83 -83
  184. package/lib/errors/create-stack-filter.js +18 -18
  185. package/lib/errors/error-list.js +27 -27
  186. package/lib/errors/get-callsite.js +31 -31
  187. package/lib/errors/internal-modules-prefix.js +8 -8
  188. package/lib/errors/is-internal-stack-frame.js +45 -45
  189. package/lib/errors/process-test-fn-error.js +37 -37
  190. package/lib/errors/runtime/index.js +124 -124
  191. package/lib/errors/runtime/templates.js +119 -119
  192. package/lib/errors/runtime/type-assertions.js +112 -112
  193. package/lib/errors/stack-cleaning-hook.js +64 -64
  194. package/lib/errors/test-run/formattable-adapter.js +60 -60
  195. package/lib/errors/test-run/index.js +362 -360
  196. package/lib/errors/test-run/render-error-template/index.js +28 -28
  197. package/lib/errors/test-run/render-error-template/utils.js +20 -20
  198. package/lib/errors/test-run/templates.js +111 -111
  199. package/lib/errors/test-run/utils.js +91 -91
  200. package/lib/errors/types.js +170 -170
  201. package/lib/index.js +89 -89
  202. package/lib/live/bootstrapper.js +45 -45
  203. package/lib/live/controller.js +107 -107
  204. package/lib/live/file-watcher/index.js +67 -67
  205. package/lib/live/file-watcher/modules-graph.js +58 -58
  206. package/lib/live/keyboard-observer.js +76 -76
  207. package/lib/live/logger/index.js +64 -64
  208. package/lib/live/test-run-controller.js +96 -96
  209. package/lib/live/test-run-state.js +6 -6
  210. package/lib/live/test-run.js +56 -56
  211. package/lib/live/test-runner.js +172 -172
  212. package/lib/load-assets.js +29 -29
  213. package/lib/notifications/add-rendered-warning.js +21 -21
  214. package/lib/notifications/debug-logger.js +78 -78
  215. package/lib/notifications/deprecated.js +24 -24
  216. package/lib/notifications/information-message.js +9 -9
  217. package/lib/notifications/warning-log.js +61 -61
  218. package/lib/notifications/warning-message.js +49 -49
  219. package/lib/reporter/command/command-formatter.js +127 -127
  220. package/lib/reporter/command/format-command.js +8 -8
  221. package/lib/reporter/command/interfaces.js +2 -2
  222. package/lib/reporter/index.js +419 -419
  223. package/lib/reporter/interfaces.js +2 -2
  224. package/lib/reporter/plugin-host.js +141 -141
  225. package/lib/reporter/plugin-methods.js +14 -14
  226. package/lib/role/index.js +26 -26
  227. package/lib/role/marker-symbol.js +7 -7
  228. package/lib/role/phase.js +9 -9
  229. package/lib/role/role.js +120 -120
  230. package/lib/runner/bootstrapper.js +237 -237
  231. package/lib/runner/browser-job-result.js +9 -9
  232. package/lib/runner/browser-job.js +155 -155
  233. package/lib/runner/browser-set.js +114 -114
  234. package/lib/runner/fixture-hook-controller.js +105 -105
  235. package/lib/runner/index.js +605 -602
  236. package/lib/runner/interfaces.js +2 -2
  237. package/lib/runner/reporter-stream-controller.js +27 -27
  238. package/lib/runner/task/index.js +140 -140
  239. package/lib/runner/task/phase.js +9 -9
  240. package/lib/runner/test-run-controller.js +169 -169
  241. package/lib/runner/test-run-hook-controller.js +64 -64
  242. package/lib/runner/tested-app.js +73 -73
  243. package/lib/screenshots/capturer.js +145 -145
  244. package/lib/screenshots/constants.js +11 -11
  245. package/lib/screenshots/crop.js +111 -111
  246. package/lib/screenshots/default-extension.js +4 -4
  247. package/lib/screenshots/index.js +68 -68
  248. package/lib/screenshots/utils.js +36 -36
  249. package/lib/services/compiler/esm-runtime-holder-name.js +4 -4
  250. package/lib/services/compiler/host.js +368 -368
  251. package/lib/services/compiler/interfaces.js +2 -2
  252. package/lib/services/compiler/io.js +9 -9
  253. package/lib/services/compiler/protocol.js +16 -16
  254. package/lib/services/compiler/service-loader.js +17 -17
  255. package/lib/services/compiler/service.js +359 -359
  256. package/lib/services/compiler/test-run-proxy.js +154 -154
  257. package/lib/services/interfaces.js +2 -2
  258. package/lib/services/process-title.js +8 -8
  259. package/lib/services/serialization/prepare-options.js +21 -21
  260. package/lib/services/serialization/replicator/create-replicator.js +56 -56
  261. package/lib/services/serialization/replicator/interfaces.js +2 -2
  262. package/lib/services/serialization/replicator/transforms/base-transform.js +14 -14
  263. package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +21 -21
  264. package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +22 -22
  265. package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +26 -26
  266. package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +60 -60
  267. package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +47 -47
  268. package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +2 -2
  269. package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +19 -19
  270. package/lib/services/serialization/replicator/transforms/custom-error-transform.js +27 -27
  271. package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +19 -19
  272. package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +8 -8
  273. package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +19 -19
  274. package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +8 -8
  275. package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +20 -20
  276. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +20 -20
  277. package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +5 -5
  278. package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +21 -21
  279. package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +39 -39
  280. package/lib/services/serialization/replicator/transforms/response-mock-transform.js +21 -21
  281. package/lib/services/serialization/replicator/transforms/role-transform.js +19 -19
  282. package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +21 -21
  283. package/lib/services/serialization/replicator/transforms/url-transform.js +21 -21
  284. package/lib/services/serialization/test-structure.js +90 -90
  285. package/lib/services/utils/ipc/interfaces.js +30 -30
  286. package/lib/services/utils/ipc/io.js +108 -108
  287. package/lib/services/utils/ipc/message.js +83 -83
  288. package/lib/services/utils/ipc/packet.js +55 -55
  289. package/lib/services/utils/ipc/proxy.js +96 -96
  290. package/lib/services/utils/ipc/transport.js +64 -64
  291. package/lib/services/utils/method-should-not-be-called-error.js +8 -8
  292. package/lib/shared/actions/action-executor.js +157 -157
  293. package/lib/shared/actions/automations/click/index.js +51 -51
  294. package/lib/shared/actions/automations/click/mouse-click-strategy-base.js +20 -20
  295. package/lib/shared/actions/automations/last-hovered-element-holder.js +11 -11
  296. package/lib/shared/actions/automations/move.js +218 -218
  297. package/lib/shared/actions/automations/settings.js +29 -29
  298. package/lib/shared/actions/automations/visible-element-automation.js +160 -160
  299. package/lib/shared/actions/cursor.js +61 -61
  300. package/lib/shared/actions/get-element.js +66 -66
  301. package/lib/shared/actions/utils/get-automation-point.js +19 -19
  302. package/lib/shared/actions/utils/get-device-point.js +20 -20
  303. package/lib/shared/actions/utils/is-window-iframe.js +6 -6
  304. package/lib/shared/actions/utils/offsets.js +32 -32
  305. package/lib/shared/actions/utils/screen-point-to-client.js +13 -13
  306. package/lib/shared/adapter/index.js +13 -13
  307. package/lib/shared/barriers/complex-barrier.js +27 -27
  308. package/lib/shared/barriers/request.js +77 -77
  309. package/lib/shared/barriers/script-execution.js +71 -71
  310. package/lib/shared/errors/automation-errors.js +6 -6
  311. package/lib/shared/errors/index.js +400 -400
  312. package/lib/shared/errors/selector-error-ctor-callback.js +29 -29
  313. package/lib/shared/node-modules-folder-name.js +4 -4
  314. package/lib/shared/utils/delay.js +8 -8
  315. package/lib/shared/utils/elements-retriever.js +47 -47
  316. package/lib/shared/utils/event-emitter.js +50 -50
  317. package/lib/shared/utils/get-line-rect-intersection.js +40 -40
  318. package/lib/shared/utils/next-tick.js +10 -10
  319. package/lib/shared/utils/node-type-descriptions.js +17 -17
  320. package/lib/shared/utils/position.js +19 -19
  321. package/lib/shared/utils/promise.js +13 -13
  322. package/lib/shared/utils/values/axis-values.js +42 -42
  323. package/lib/shared/utils/values/boundary-values.js +40 -40
  324. package/lib/shared/utils/values/dimensions.js +16 -16
  325. package/lib/test-run/bookmark.js +131 -131
  326. package/lib/test-run/browser-console-messages.js +73 -73
  327. package/lib/test-run/browser-manipulation-queue.js +105 -105
  328. package/lib/test-run/client-messages.js +9 -9
  329. package/lib/test-run/commands/actions.js +582 -582
  330. package/lib/test-run/commands/assertion.js +118 -118
  331. package/lib/test-run/commands/base.js +27 -27
  332. package/lib/test-run/commands/browser-manipulation.js +105 -105
  333. package/lib/test-run/commands/from-object.js +88 -88
  334. package/lib/test-run/commands/observation.js +75 -75
  335. package/lib/test-run/commands/options.js +254 -254
  336. package/lib/test-run/commands/service.js +61 -61
  337. package/lib/test-run/commands/type.js +70 -70
  338. package/lib/test-run/commands/utils.js +92 -92
  339. package/lib/test-run/commands/validations/argument.js +132 -132
  340. package/lib/test-run/commands/validations/factories.js +69 -69
  341. package/lib/test-run/commands/validations/initializers.js +44 -44
  342. package/lib/test-run/debug-log.js +23 -23
  343. package/lib/test-run/execute-js-expression/constants.js +11 -11
  344. package/lib/test-run/execute-js-expression/index.js +85 -85
  345. package/lib/test-run/index.js +1071 -1071
  346. package/lib/test-run/marker-symbol.js +7 -7
  347. package/lib/test-run/observed-callsites-storage.js +17 -17
  348. package/lib/test-run/phase.js +19 -19
  349. package/lib/test-run/proxyless-commands-support.js +12 -12
  350. package/lib/test-run/session-controller.js +107 -107
  351. package/lib/testcafe.js +115 -115
  352. package/lib/utils/assignable.js +39 -39
  353. package/lib/utils/async-event-emitter.js +28 -28
  354. package/lib/utils/async-filter.js +7 -7
  355. package/lib/utils/async-queue.js +14 -14
  356. package/lib/utils/browser-connection-timeouts.js +19 -19
  357. package/lib/utils/callsite.js +17 -17
  358. package/lib/utils/check-file-path.js +31 -31
  359. package/lib/utils/check-url.js +51 -51
  360. package/lib/utils/convert-to-best-fit-type.js +16 -16
  361. package/lib/utils/correct-file-path.js +21 -21
  362. package/lib/utils/debug-action.js +6 -6
  363. package/lib/utils/define-lazy-property.js +13 -13
  364. package/lib/utils/delay.js +6 -6
  365. package/lib/utils/delegated-api.js +71 -71
  366. package/lib/utils/detect-display.js +6 -6
  367. package/lib/utils/detect-ffmpeg.js +44 -44
  368. package/lib/utils/diff/colors.js +29 -29
  369. package/lib/utils/diff/index.js +52 -52
  370. package/lib/utils/diff/util.js +23 -23
  371. package/lib/utils/diff.js +29 -29
  372. package/lib/utils/escape-user-agent.js +10 -10
  373. package/lib/utils/execute-fn-with-timeout.js +16 -16
  374. package/lib/utils/flag-list.js +17 -17
  375. package/lib/utils/get-any-key.js +8 -8
  376. package/lib/utils/get-browser.js +8 -8
  377. package/lib/utils/get-common-path.js +34 -34
  378. package/lib/utils/get-filter-fn.js +42 -42
  379. package/lib/utils/get-options/base.js +36 -36
  380. package/lib/utils/get-options/compiler.js +33 -33
  381. package/lib/utils/get-options/dashboard.js +17 -17
  382. package/lib/utils/get-options/get-assertion-timeout.js +10 -10
  383. package/lib/utils/get-options/grep.js +15 -15
  384. package/lib/utils/get-options/index.js +22 -22
  385. package/lib/utils/get-options/meta.js +22 -22
  386. package/lib/utils/get-options/quarantine.js +98 -98
  387. package/lib/utils/get-options/screenshot.js +17 -17
  388. package/lib/utils/get-options/ssl.js +45 -45
  389. package/lib/utils/get-options/video.js +10 -10
  390. package/lib/utils/get-renderes.js +9 -9
  391. package/lib/utils/get-testcafe-version.js +8 -0
  392. package/lib/utils/get-viewport-width.js +17 -17
  393. package/lib/utils/guard-time-execution.js +10 -10
  394. package/lib/utils/handle-errors.js +77 -77
  395. package/lib/utils/handle-tag-args.js +8 -8
  396. package/lib/utils/http.js +30 -30
  397. package/lib/utils/is-localhost.js +11 -11
  398. package/lib/utils/is-password-input.js +9 -9
  399. package/lib/utils/is-repl.js +10 -10
  400. package/lib/utils/is-window-in-iframe.js +6 -6
  401. package/lib/utils/limit-number.js +10 -10
  402. package/lib/utils/log-entry.js +24 -24
  403. package/lib/utils/make-reg-exp.js +7 -7
  404. package/lib/utils/message-bus.js +12 -12
  405. package/lib/utils/moment-loader.js +20 -20
  406. package/lib/utils/parse-file-list.js +84 -84
  407. package/lib/utils/parse-user-agent.js +55 -55
  408. package/lib/utils/path-pattern.js +114 -114
  409. package/lib/utils/prepare-reporters.js +30 -30
  410. package/lib/utils/prerender-callsite.js +19 -19
  411. package/lib/utils/process.js +131 -131
  412. package/lib/utils/promisified-functions.js +46 -46
  413. package/lib/utils/raw-command-callsite-record.js +69 -69
  414. package/lib/utils/re-executable-promise.js +39 -39
  415. package/lib/utils/render-callsite-sync.js +30 -30
  416. package/lib/utils/render-template.js +9 -9
  417. package/lib/utils/reporter.js +30 -30
  418. package/lib/utils/resolve-path-relatively-cwd.js +7 -7
  419. package/lib/utils/setup-sourcemap-support.js +14 -14
  420. package/lib/utils/string.js +105 -105
  421. package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
  422. package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
  423. package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
  424. package/lib/utils/temp-directory/index.js +87 -87
  425. package/lib/utils/temp-directory/lockfile.js +56 -56
  426. package/lib/utils/thennable.js +7 -7
  427. package/lib/utils/timer.js +15 -15
  428. package/lib/utils/to-posix-path.js +8 -8
  429. package/lib/utils/types.js +2 -2
  430. package/lib/video-recorder/interfaces.js +2 -2
  431. package/lib/video-recorder/process.js +138 -138
  432. package/lib/video-recorder/recorder.js +153 -153
  433. package/lib/video-recorder/test-run-video-recorder.js +83 -83
  434. package/lib/video-recorder/videos.js +40 -40
  435. package/package.json +7 -3
  436. package/ts-defs/index.d.ts +109 -31
  437. package/ts-defs/selectors.d.ts +109 -31
  438. package/ts-defs/testcafe-scripts.d.ts +109 -31
  439. package/lib/cli/argument-parser.js +0 -334
  440. package/lib/runner/dashboard-config-storage/base.js +0 -13
  441. package/lib/runner/dashboard-config-storage/index.js +0 -13
@@ -1,168 +1,168 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getTestListFromCode = exports.getTestList = exports.EsNextTestFileParser = void 0;
7
- const lodash_1 = require("lodash");
8
- const core_1 = require("@babel/core");
9
- const compiler_1 = __importDefault(require("./compiler"));
10
- const test_file_parser_base_1 = require("../../test-file-parser-base");
11
- const TOKEN_TYPE = {
12
- Identifier: 'Identifier',
13
- PropertyAccessExpression: 'MemberExpression',
14
- CallExpression: 'CallExpression',
15
- TaggedTemplateExpression: 'TaggedTemplateExpression',
16
- TemplateLiteral: 'TemplateLiteral',
17
- StringLiteral: 'StringLiteral',
18
- ArrowFunctionExpression: 'ArrowFunctionExpression',
19
- FunctionExpression: 'FunctionExpression',
20
- ExpressionStatement: 'ExpressionStatement',
21
- ReturnStatement: 'ReturnStatement',
22
- FunctionDeclaration: 'FunctionDeclaration',
23
- VariableStatement: 'VariableStatement',
24
- VariableDeclaration: 'VariableDeclaration',
25
- ObjectLiteralExpression: 'ObjectExpression',
26
- };
27
- class EsNextTestFileParser extends test_file_parser_base_1.TestFileParserBase {
28
- constructor() {
29
- super(TOKEN_TYPE);
30
- }
31
- static getTagStrValue(exp) {
32
- //NOTE: we set <computed name> if template literal has at least one computed substring ${...}
33
- return exp.expressions.length ? EsNextTestFileParser.formatComputedName(exp.loc.start.line) : exp.quasis[0].value.raw;
34
- }
35
- isAsyncFn(token) {
36
- return token.async || token.generator;
37
- }
38
- getTokenType(token) {
39
- return token.type;
40
- }
41
- getRValue(token) {
42
- return token.declarations[0].init;
43
- }
44
- getStringValue(token) {
45
- const stringTypes = [this.tokenType.StringLiteral, this.tokenType.TemplateLiteral, this.tokenType.Identifier];
46
- if (stringTypes.indexOf(token.type) > -1)
47
- return this.formatFnArg(token);
48
- return null;
49
- }
50
- getFunctionBody(token) {
51
- return token.body && token.body.body ? token.body.body : [];
52
- }
53
- getCalleeToken(token) {
54
- return token.callee;
55
- }
56
- getMemberFnName(token) {
57
- return token.callee.property.name;
58
- }
59
- formatFnData(name, value, token, meta = [{}]) {
60
- return {
61
- fnName: name,
62
- value: value,
63
- loc: token.loc,
64
- start: token.start,
65
- end: token.end,
66
- meta: lodash_1.merge({}, ...meta),
67
- isSkipped: test_file_parser_base_1.TestFileParserBase.isSkipped(token),
68
- };
69
- }
70
- getKeyValue(prop) {
71
- const { key, value } = prop;
72
- return {
73
- key: key.name || this.formatFnArg(key),
74
- value: this.getStringValue(value),
75
- };
76
- }
77
- analyzeMemberExp(token) {
78
- let exp = token;
79
- const tokenType = this.tokenType;
80
- const callStack = [exp];
81
- while (exp.type !== tokenType.Identifier) {
82
- if (exp.type === tokenType.CallExpression)
83
- exp = exp.callee;
84
- else if (exp.type === tokenType.PropertyAccessExpression)
85
- exp = exp.object;
86
- else if (exp.type === tokenType.TaggedTemplateExpression)
87
- exp = exp.tag;
88
- else
89
- return null;
90
- if (exp.type !== tokenType.Identifier)
91
- callStack.push(exp);
92
- }
93
- if (!this.isApiFn(exp.name))
94
- return null;
95
- const meta = this.getMetaInfo(callStack.slice());
96
- let parentExp = callStack.pop();
97
- if (parentExp.type === tokenType.CallExpression)
98
- return this.formatFnData(exp.name, this.formatFnArg(parentExp.arguments[0]), token, meta);
99
- if (parentExp.type === tokenType.TaggedTemplateExpression)
100
- return this.formatFnData(exp.name, EsNextTestFileParser.getTagStrValue(parentExp.quasi), token, meta);
101
- if (parentExp.type === tokenType.PropertyAccessExpression) {
102
- while (parentExp) {
103
- if (parentExp.type === tokenType.CallExpression && parentExp.callee) {
104
- const calleeType = parentExp.callee.type;
105
- const calleeMemberFn = parentExp.callee.property && parentExp.callee.property.name;
106
- if (this.checkExpDefineTargetName(calleeType, calleeMemberFn))
107
- return this.formatFnData(exp.name, this.formatFnArg(parentExp.arguments[0]), token, meta);
108
- }
109
- if (parentExp.type === tokenType.TaggedTemplateExpression && parentExp.tag) {
110
- const tagType = parentExp.tag.type;
111
- const tagMemberFn = parentExp.tag.property && parentExp.tag.property.name;
112
- if (this.checkExpDefineTargetName(tagType, tagMemberFn))
113
- return this.formatFnData(exp.name, EsNextTestFileParser.getTagStrValue(parentExp.quasi), token, meta);
114
- }
115
- parentExp = callStack.pop();
116
- }
117
- }
118
- return null;
119
- }
120
- formatFnArg(arg) {
121
- if (arg.type === this.tokenType.Identifier)
122
- return EsNextTestFileParser.formatComputedName(arg.loc.start.line);
123
- if (arg.type === this.tokenType.TemplateLiteral)
124
- return EsNextTestFileParser.getTagStrValue(arg);
125
- if (arg.type === this.tokenType.StringLiteral)
126
- return arg.value;
127
- return null;
128
- }
129
- getFnCall(token) {
130
- if (!this.isApiFn(token.callee.name))
131
- return null;
132
- return this.formatFnData(token.callee.name, this.formatFnArg(token.arguments[0]), token);
133
- }
134
- getTaggedTemplateExp(token) {
135
- return this.formatFnData(token.tag.name, EsNextTestFileParser.getTagStrValue(token.quasi), token);
136
- }
137
- analyzeFnCall(token) {
138
- const tokenType = this.tokenType;
139
- if (token.type === tokenType.PropertyAccessExpression)
140
- return this.analyzeMemberExp(token);
141
- if (token.type === tokenType.CallExpression) {
142
- const calleeType = token.callee.type;
143
- if (calleeType === tokenType.PropertyAccessExpression || calleeType === tokenType.CallExpression)
144
- return this.analyzeMemberExp(token);
145
- if (calleeType === tokenType.FunctionExpression || calleeType === tokenType.ArrowFunctionExpression)
146
- return this.collectTestCafeCalls(token.callee.body.body);
147
- return this.getFnCall(token);
148
- }
149
- if (token.type === tokenType.TaggedTemplateExpression) {
150
- if (token.tag.type === tokenType.PropertyAccessExpression)
151
- return this.analyzeMemberExp(token);
152
- return this.getTaggedTemplateExp(token);
153
- }
154
- return null;
155
- }
156
- parse(code) {
157
- const compilerOptions = compiler_1.default.getBabelOptions(null, code);
158
- delete compilerOptions.filename;
159
- const opts = lodash_1.assign(compilerOptions, { ast: true });
160
- const ast = core_1.transform(code, opts).ast;
161
- return this.analyze(ast.program.body);
162
- }
163
- }
164
- exports.EsNextTestFileParser = EsNextTestFileParser;
165
- const parser = new EsNextTestFileParser();
166
- exports.getTestList = parser.getTestList.bind(parser);
167
- exports.getTestListFromCode = parser.getTestListFromCode.bind(parser);
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getTestListFromCode = exports.getTestList = exports.EsNextTestFileParser = void 0;
7
+ const lodash_1 = require("lodash");
8
+ const core_1 = require("@babel/core");
9
+ const compiler_1 = __importDefault(require("./compiler"));
10
+ const test_file_parser_base_1 = require("../../test-file-parser-base");
11
+ const TOKEN_TYPE = {
12
+ Identifier: 'Identifier',
13
+ PropertyAccessExpression: 'MemberExpression',
14
+ CallExpression: 'CallExpression',
15
+ TaggedTemplateExpression: 'TaggedTemplateExpression',
16
+ TemplateLiteral: 'TemplateLiteral',
17
+ StringLiteral: 'StringLiteral',
18
+ ArrowFunctionExpression: 'ArrowFunctionExpression',
19
+ FunctionExpression: 'FunctionExpression',
20
+ ExpressionStatement: 'ExpressionStatement',
21
+ ReturnStatement: 'ReturnStatement',
22
+ FunctionDeclaration: 'FunctionDeclaration',
23
+ VariableStatement: 'VariableStatement',
24
+ VariableDeclaration: 'VariableDeclaration',
25
+ ObjectLiteralExpression: 'ObjectExpression',
26
+ };
27
+ class EsNextTestFileParser extends test_file_parser_base_1.TestFileParserBase {
28
+ constructor() {
29
+ super(TOKEN_TYPE);
30
+ }
31
+ static getTagStrValue(exp) {
32
+ //NOTE: we set <computed name> if template literal has at least one computed substring ${...}
33
+ return exp.expressions.length ? EsNextTestFileParser.formatComputedName(exp.loc.start.line) : exp.quasis[0].value.raw;
34
+ }
35
+ isAsyncFn(token) {
36
+ return token.async || token.generator;
37
+ }
38
+ getTokenType(token) {
39
+ return token.type;
40
+ }
41
+ getRValue(token) {
42
+ return token.declarations[0].init;
43
+ }
44
+ getStringValue(token) {
45
+ const stringTypes = [this.tokenType.StringLiteral, this.tokenType.TemplateLiteral, this.tokenType.Identifier];
46
+ if (stringTypes.indexOf(token.type) > -1)
47
+ return this.formatFnArg(token);
48
+ return null;
49
+ }
50
+ getFunctionBody(token) {
51
+ return token.body && token.body.body ? token.body.body : [];
52
+ }
53
+ getCalleeToken(token) {
54
+ return token.callee;
55
+ }
56
+ getMemberFnName(token) {
57
+ return token.callee.property.name;
58
+ }
59
+ formatFnData(name, value, token, meta = [{}]) {
60
+ return {
61
+ fnName: name,
62
+ value: value,
63
+ loc: token.loc,
64
+ start: token.start,
65
+ end: token.end,
66
+ meta: lodash_1.merge({}, ...meta),
67
+ isSkipped: test_file_parser_base_1.TestFileParserBase.isSkipped(token),
68
+ };
69
+ }
70
+ getKeyValue(prop) {
71
+ const { key, value } = prop;
72
+ return {
73
+ key: key.name || this.formatFnArg(key),
74
+ value: this.getStringValue(value),
75
+ };
76
+ }
77
+ analyzeMemberExp(token) {
78
+ let exp = token;
79
+ const tokenType = this.tokenType;
80
+ const callStack = [exp];
81
+ while (exp.type !== tokenType.Identifier) {
82
+ if (exp.type === tokenType.CallExpression)
83
+ exp = exp.callee;
84
+ else if (exp.type === tokenType.PropertyAccessExpression)
85
+ exp = exp.object;
86
+ else if (exp.type === tokenType.TaggedTemplateExpression)
87
+ exp = exp.tag;
88
+ else
89
+ return null;
90
+ if (exp.type !== tokenType.Identifier)
91
+ callStack.push(exp);
92
+ }
93
+ if (!this.isApiFn(exp.name))
94
+ return null;
95
+ const meta = this.getMetaInfo(callStack.slice());
96
+ let parentExp = callStack.pop();
97
+ if (parentExp.type === tokenType.CallExpression)
98
+ return this.formatFnData(exp.name, this.formatFnArg(parentExp.arguments[0]), token, meta);
99
+ if (parentExp.type === tokenType.TaggedTemplateExpression)
100
+ return this.formatFnData(exp.name, EsNextTestFileParser.getTagStrValue(parentExp.quasi), token, meta);
101
+ if (parentExp.type === tokenType.PropertyAccessExpression) {
102
+ while (parentExp) {
103
+ if (parentExp.type === tokenType.CallExpression && parentExp.callee) {
104
+ const calleeType = parentExp.callee.type;
105
+ const calleeMemberFn = parentExp.callee.property && parentExp.callee.property.name;
106
+ if (this.checkExpDefineTargetName(calleeType, calleeMemberFn))
107
+ return this.formatFnData(exp.name, this.formatFnArg(parentExp.arguments[0]), token, meta);
108
+ }
109
+ if (parentExp.type === tokenType.TaggedTemplateExpression && parentExp.tag) {
110
+ const tagType = parentExp.tag.type;
111
+ const tagMemberFn = parentExp.tag.property && parentExp.tag.property.name;
112
+ if (this.checkExpDefineTargetName(tagType, tagMemberFn))
113
+ return this.formatFnData(exp.name, EsNextTestFileParser.getTagStrValue(parentExp.quasi), token, meta);
114
+ }
115
+ parentExp = callStack.pop();
116
+ }
117
+ }
118
+ return null;
119
+ }
120
+ formatFnArg(arg) {
121
+ if (arg.type === this.tokenType.Identifier)
122
+ return EsNextTestFileParser.formatComputedName(arg.loc.start.line);
123
+ if (arg.type === this.tokenType.TemplateLiteral)
124
+ return EsNextTestFileParser.getTagStrValue(arg);
125
+ if (arg.type === this.tokenType.StringLiteral)
126
+ return arg.value;
127
+ return null;
128
+ }
129
+ getFnCall(token) {
130
+ if (!this.isApiFn(token.callee.name))
131
+ return null;
132
+ return this.formatFnData(token.callee.name, this.formatFnArg(token.arguments[0]), token);
133
+ }
134
+ getTaggedTemplateExp(token) {
135
+ return this.formatFnData(token.tag.name, EsNextTestFileParser.getTagStrValue(token.quasi), token);
136
+ }
137
+ analyzeFnCall(token) {
138
+ const tokenType = this.tokenType;
139
+ if (token.type === tokenType.PropertyAccessExpression)
140
+ return this.analyzeMemberExp(token);
141
+ if (token.type === tokenType.CallExpression) {
142
+ const calleeType = token.callee.type;
143
+ if (calleeType === tokenType.PropertyAccessExpression || calleeType === tokenType.CallExpression)
144
+ return this.analyzeMemberExp(token);
145
+ if (calleeType === tokenType.FunctionExpression || calleeType === tokenType.ArrowFunctionExpression)
146
+ return this.collectTestCafeCalls(token.callee.body.body);
147
+ return this.getFnCall(token);
148
+ }
149
+ if (token.type === tokenType.TaggedTemplateExpression) {
150
+ if (token.tag.type === tokenType.PropertyAccessExpression)
151
+ return this.analyzeMemberExp(token);
152
+ return this.getTaggedTemplateExp(token);
153
+ }
154
+ return null;
155
+ }
156
+ parse(code) {
157
+ const compilerOptions = compiler_1.default.getBabelOptions(null, code);
158
+ delete compilerOptions.filename;
159
+ const opts = lodash_1.assign(compilerOptions, { ast: true });
160
+ const ast = core_1.transform(code, opts).ast;
161
+ return this.analyze(ast.program.body);
162
+ }
163
+ }
164
+ exports.EsNextTestFileParser = EsNextTestFileParser;
165
+ const parser = new EsNextTestFileParser();
166
+ exports.getTestList = parser.getTestList.bind(parser);
167
+ exports.getTestListFromCode = parser.getTestListFromCode.bind(parser);
168
168
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRlc3QtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21waWxlci90ZXN0LWZpbGUvZm9ybWF0cy9lcy1uZXh0L2dldC10ZXN0LWxpc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbUNBQXVDO0FBQ3ZDLHNDQUF3QztBQUN4QywwREFBZ0Q7QUFDaEQsdUVBQWlFO0FBRWpFLE1BQU0sVUFBVSxHQUFHO0lBQ2YsVUFBVSxFQUFnQixZQUFZO0lBQ3RDLHdCQUF3QixFQUFFLGtCQUFrQjtJQUM1QyxjQUFjLEVBQVksZ0JBQWdCO0lBQzFDLHdCQUF3QixFQUFFLDBCQUEwQjtJQUNwRCxlQUFlLEVBQVcsaUJBQWlCO0lBQzNDLGFBQWEsRUFBYSxlQUFlO0lBQ3pDLHVCQUF1QixFQUFHLHlCQUF5QjtJQUNuRCxrQkFBa0IsRUFBUSxvQkFBb0I7SUFDOUMsbUJBQW1CLEVBQU8scUJBQXFCO0lBQy9DLGVBQWUsRUFBVyxpQkFBaUI7SUFDM0MsbUJBQW1CLEVBQU8scUJBQXFCO0lBQy9DLGlCQUFpQixFQUFTLG1CQUFtQjtJQUM3QyxtQkFBbUIsRUFBTyxxQkFBcUI7SUFDL0MsdUJBQXVCLEVBQUcsa0JBQWtCO0NBQy9DLENBQUM7QUFFRixNQUFhLG9CQUFxQixTQUFRLDBDQUFrQjtJQUN4RDtRQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBRSxHQUFHO1FBQ3RCLDZGQUE2RjtRQUM3RixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQzFILENB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LE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztBQUU3QixRQUFBLFdBQVcsR0FBVyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RCxRQUFBLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NpZ24sIG1lcmdlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJ0BiYWJlbC9jb3JlJztcbmltcG9ydCBFU05leHRUZXN0RmlsZUNvbXBpbGVyIGZyb20gJy4vY29tcGlsZXInO1xuaW1wb3J0IHsgVGVzdEZpbGVQYXJzZXJCYXNlIH0gZnJvbSAnLi4vLi4vdGVzdC1maWxlLXBhcnNlci1iYXNlJztcblxuY29uc3QgVE9LRU5fVFlQRSA9IHtcbiAgICBJZGVudGlmaWVyOiAgICAgICAgICAgICAgICdJZGVudGlmaWVyJyxcbiAgICBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJyxcbiAgICBDYWxsRXhwcmVzc2lvbjogICAgICAgICAgICdDYWxsRXhwcmVzc2lvbicsXG4gICAgVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uOiAnVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uJyxcbiAgICBUZW1wbGF0ZUxpdGVyYWw6ICAgICAgICAgICdUZW1wbGF0ZUxpdGVyYWwnLFxuICAgIFN0cmluZ0xpdGVyYWw6ICAgICAgICAgICAgJ1N0cmluZ0xpdGVyYWwnLFxuICAgIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiAgJ0Fycm93RnVuY3Rpb25FeHByZXNzaW9uJyxcbiAgICBGdW5jdGlvbkV4cHJlc3Npb246ICAgICAgICdGdW5jdGlvbkV4cHJlc3Npb24nLFxuICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICAgICAgJ0V4cHJlc3Npb25TdGF0ZW1lbnQnLFxuICAgIFJldHVyblN0YXRlbWVudDogICAgICAgICAgJ1JldHVyblN0YXRlbWVudCcsXG4gICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogICAgICAnRnVuY3Rpb25EZWNsYXJhdGlvbicsXG4gICAgVmFyaWFibGVTdGF0ZW1lbnQ6ICAgICAgICAnVmFyaWFibGVTdGF0ZW1lbnQnLFxuICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgIE9iamVjdExpdGVyYWxFeHByZXNzaW9uOiAgJ09iamVjdEV4cHJlc3Npb24nLFxufTtcblxuZXhwb3J0IGNsYXNzIEVzTmV4dFRlc3RGaWxlUGFyc2VyIGV4dGVuZHMgVGVzdEZpbGVQYXJzZXJCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRPS0VOX1RZUEUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUYWdTdHJWYWx1ZSAoZXhwKSB7XG4gICAgICAgIC8vTk9URTogd2Ugc2V0IDxjb21wdXRlZCBuYW1lPiBpZiB0ZW1wbGF0ZSBsaXRlcmFsIGhhcyBhdCBsZWFzdCBvbmUgY29tcHV0ZWQgc3Vic3RyaW5nICR7Li4ufVxuICAgICAgICByZXR1cm4gZXhwLmV4cHJlc3Npb25zLmxlbmd0aCA/IEVzTmV4dFRlc3RGaWxlUGFyc2VyLmZvcm1hdENvbXB1dGVkTmFtZShleHAubG9jLnN0YXJ0LmxpbmUpIDogZXhwLnF1YXNpc1swXS52YWx1ZS5yYXc7XG4gICAgfVxuXG4gICAgaXNBc3luY0ZuICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4uYXN5bmMgfHwgdG9rZW4uZ2VuZXJhdG9yO1xuICAgIH1cblxuICAgIGdldFRva2VuVHlwZSAodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLnR5cGU7XG4gICAgfVxuXG4gICAgZ2V0UlZhbHVlICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4uZGVjbGFyYXRpb25zWzBdLmluaXQ7XG4gICAgfVxuXG4gICAgZ2V0U3RyaW5nVmFsdWUgKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1R5cGVzID0gW3RoaXMudG9rZW5UeXBlLlN0cmluZ0xpdGVyYWwsIHRoaXMudG9rZW5UeXBlLlRlbXBsYXRlTGl0ZXJhbCwgdGhpcy50b2tlblR5cGUuSWRlbnRpZmllcl07XG5cbiAgICAgICAgaWYgKHN0cmluZ1R5cGVzLmluZGV4T2YodG9rZW4udHlwZSkgPiAtMSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuQXJnKHRva2VuKTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRGdW5jdGlvbkJvZHkgKHRva2VuKSB7XG4gICAgICAgIHJldHVybiB0b2tlbi5ib2R5ICYmIHRva2VuLmJvZHkuYm9keSA/IHRva2VuLmJvZHkuYm9keSA6IFtdO1xuICAgIH1cblxuICAgIGdldENhbGxlZVRva2VuICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4uY2FsbGVlO1xuICAgIH1cblxuICAgIGdldE1lbWJlckZuTmFtZSAodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLmNhbGxlZS5wcm9wZXJ0eS5uYW1lO1xuICAgIH1cblxuICAgIGZvcm1hdEZuRGF0YSAobmFtZSwgdmFsdWUsIHRva2VuLCBtZXRhID0gW3t9XSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm5OYW1lOiAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6ICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGxvYzogICAgICAgdG9rZW4ubG9jLFxuICAgICAgICAgICAgc3RhcnQ6ICAgICB0b2tlbi5zdGFydCxcbiAgICAgICAgICAgIGVuZDogICAgICAgdG9rZW4uZW5kLFxuICAgICAgICAgICAgbWV0YTogICAgICBtZXJnZSh7fSwgLi4ubWV0YSksXG4gICAgICAgICAgICBpc1NraXBwZWQ6IFRlc3RGaWxlUGFyc2VyQmFzZS5pc1NraXBwZWQodG9rZW4pLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldEtleVZhbHVlIChwcm9wKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCB2YWx1ZSB9ID0gcHJvcDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiAgIGtleS5uYW1lIHx8IHRoaXMuZm9ybWF0Rm5Bcmcoa2V5KSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFN0cmluZ1ZhbHVlKHZhbHVlKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhbmFseXplTWVtYmVyRXhwICh0b2tlbikge1xuICAgICAgICBsZXQgZXhwICAgICAgICAgPSB0b2tlbjtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0gdGhpcy50b2tlblR5cGU7XG4gICAgICAgIGNvbnN0IGNhbGxTdGFjayA9IFtleHBdO1xuXG4gICAgICAgIHdoaWxlIChleHAudHlwZSAhPT0gdG9rZW5UeXBlLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGlmIChleHAudHlwZSA9PT0gdG9rZW5UeXBlLkNhbGxFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIGV4cCA9IGV4cC5jYWxsZWU7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4cC50eXBlID09PSB0b2tlblR5cGUuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIGV4cCA9IGV4cC5vYmplY3Q7XG5cbiAgICAgICAgICAgIGVsc2UgaWYgKGV4cC50eXBlID09PSB0b2tlblR5cGUuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIGV4cCA9IGV4cC50YWc7XG5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgaWYgKGV4cC50eXBlICE9PSB0b2tlblR5cGUuSWRlbnRpZmllcilcbiAgICAgICAgICAgICAgICBjYWxsU3RhY2sucHVzaChleHApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQXBpRm4oZXhwLm5hbWUpKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5nZXRNZXRhSW5mbyhjYWxsU3RhY2suc2xpY2UoKSk7XG5cbiAgICAgICAgbGV0IHBhcmVudEV4cCA9IGNhbGxTdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocGFyZW50RXhwLnR5cGUgPT09IHRva2VuVHlwZS5DYWxsRXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuRGF0YShleHAubmFtZSwgdGhpcy5mb3JtYXRGbkFyZyhwYXJlbnRFeHAuYXJndW1lbnRzWzBdKSwgdG9rZW4sIG1ldGEpO1xuXG4gICAgICAgIGlmIChwYXJlbnRFeHAudHlwZSA9PT0gdG9rZW5UeXBlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuRGF0YShleHAubmFtZSwgRXNOZXh0VGVzdEZpbGVQYXJzZXIuZ2V0VGFnU3RyVmFsdWUocGFyZW50RXhwLnF1YXNpKSwgdG9rZW4sIG1ldGEpO1xuXG4gICAgICAgIGlmIChwYXJlbnRFeHAudHlwZSA9PT0gdG9rZW5UeXBlLlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudEV4cCkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFeHAudHlwZSA9PT0gdG9rZW5UeXBlLkNhbGxFeHByZXNzaW9uICYmIHBhcmVudEV4cC5jYWxsZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGVlVHlwZSAgICAgPSBwYXJlbnRFeHAuY2FsbGVlLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxlZU1lbWJlckZuID0gcGFyZW50RXhwLmNhbGxlZS5wcm9wZXJ0eSAmJiBwYXJlbnRFeHAuY2FsbGVlLnByb3BlcnR5Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tFeHBEZWZpbmVUYXJnZXROYW1lKGNhbGxlZVR5cGUsIGNhbGxlZU1lbWJlckZuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuRGF0YShleHAubmFtZSwgdGhpcy5mb3JtYXRGbkFyZyhwYXJlbnRFeHAuYXJndW1lbnRzWzBdKSwgdG9rZW4sIG1ldGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRFeHAudHlwZSA9PT0gdG9rZW5UeXBlLlRhZ2dlZFRlbXBsYXRlRXhwcmVzc2lvbiAmJiBwYXJlbnRFeHAudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ1R5cGUgICAgID0gcGFyZW50RXhwLnRhZy50eXBlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWdNZW1iZXJGbiA9IHBhcmVudEV4cC50YWcucHJvcGVydHkgJiYgcGFyZW50RXhwLnRhZy5wcm9wZXJ0eS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrRXhwRGVmaW5lVGFyZ2V0TmFtZSh0YWdUeXBlLCB0YWdNZW1iZXJGbikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRGbkRhdGEoZXhwLm5hbWUsIEVzTmV4dFRlc3RGaWxlUGFyc2VyLmdldFRhZ1N0clZhbHVlKHBhcmVudEV4cC5xdWFzaSksIHRva2VuLCBtZXRhKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJlbnRFeHAgPSBjYWxsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3JtYXRGbkFyZyAoYXJnKSB7XG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gdGhpcy50b2tlblR5cGUuSWRlbnRpZmllcilcbiAgICAgICAgICAgIHJldHVybiBFc05leHRUZXN0RmlsZVBhcnNlci5mb3JtYXRDb21wdXRlZE5hbWUoYXJnLmxvYy5zdGFydC5saW5lKTtcblxuICAgICAgICBpZiAoYXJnLnR5cGUgPT09IHRoaXMudG9rZW5UeXBlLlRlbXBsYXRlTGl0ZXJhbClcbiAgICAgICAgICAgIHJldHVybiBFc05leHRUZXN0RmlsZVBhcnNlci5nZXRUYWdTdHJWYWx1ZShhcmcpO1xuXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gdGhpcy50b2tlblR5cGUuU3RyaW5nTGl0ZXJhbClcbiAgICAgICAgICAgIHJldHVybiBhcmcudmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Rm5DYWxsICh0b2tlbikge1xuICAgICAgICBpZiAoIXRoaXMuaXNBcGlGbih0b2tlbi5jYWxsZWUubmFtZSkpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuRGF0YSh0b2tlbi5jYWxsZWUubmFtZSwgdGhpcy5mb3JtYXRGbkFyZyh0b2tlbi5hcmd1bWVudHNbMF0pLCB0b2tlbik7XG4gICAgfVxuXG4gICAgZ2V0VGFnZ2VkVGVtcGxhdGVFeHAgKHRva2VuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEZuRGF0YSh0b2tlbi50YWcubmFtZSwgRXNOZXh0VGVzdEZpbGVQYXJzZXIuZ2V0VGFnU3RyVmFsdWUodG9rZW4ucXVhc2kpLCB0b2tlbik7XG4gICAgfVxuXG4gICAgYW5hbHl6ZUZuQ2FsbCAodG9rZW4pIHtcbiAgICAgICAgY29uc3QgdG9rZW5UeXBlID0gdGhpcy50b2tlblR5cGU7XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuVHlwZS5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbmFseXplTWVtYmVyRXhwKHRva2VuKTtcblxuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gdG9rZW5UeXBlLkNhbGxFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsZWVUeXBlID0gdG9rZW4uY2FsbGVlLnR5cGU7XG5cbiAgICAgICAgICAgIGlmIChjYWxsZWVUeXBlID09PSB0b2tlblR5cGUuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uIHx8IGNhbGxlZVR5cGUgPT09IHRva2VuVHlwZS5DYWxsRXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmFseXplTWVtYmVyRXhwKHRva2VuKTtcblxuICAgICAgICAgICAgaWYgKGNhbGxlZVR5cGUgPT09IHRva2VuVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24gfHwgY2FsbGVlVHlwZSA9PT0gdG9rZW5UeXBlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3RUZXN0Q2FmZUNhbGxzKHRva2VuLmNhbGxlZS5ib2R5LmJvZHkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGbkNhbGwodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IHRva2VuVHlwZS5UYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgIGlmICh0b2tlbi50YWcudHlwZSA9PT0gdG9rZW5UeXBlLlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbmFseXplTWVtYmVyRXhwKHRva2VuKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnZ2VkVGVtcGxhdGVFeHAodG9rZW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcGFyc2UgKGNvZGUpIHtcbiAgICAgICAgY29uc3QgY29tcGlsZXJPcHRpb25zID0gRVNOZXh0VGVzdEZpbGVDb21waWxlci5nZXRCYWJlbE9wdGlvbnMobnVsbCwgY29kZSk7XG5cbiAgICAgICAgZGVsZXRlIGNvbXBpbGVyT3B0aW9ucy5maWxlbmFtZTtcblxuICAgICAgICBjb25zdCBvcHRzID0gYXNzaWduKGNvbXBpbGVyT3B0aW9ucywgeyBhc3Q6IHRydWUgfSk7XG4gICAgICAgIGNvbnN0IGFzdCAgPSB0cmFuc2Zvcm0oY29kZSwgb3B0cykuYXN0O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFuYWx5emUoYXN0LnByb2dyYW0uYm9keSk7XG4gICAgfVxufVxuXG5jb25zdCBwYXJzZXIgPSBuZXcgRXNOZXh0VGVzdEZpbGVQYXJzZXIoKTtcblxuZXhwb3J0IGNvbnN0IGdldFRlc3RMaXN0ICAgICAgICAgPSBwYXJzZXIuZ2V0VGVzdExpc3QuYmluZChwYXJzZXIpO1xuZXhwb3J0IGNvbnN0IGdldFRlc3RMaXN0RnJvbUNvZGUgPSBwYXJzZXIuZ2V0VGVzdExpc3RGcm9tQ29kZS5iaW5kKHBhcnNlcik7XG4iXX0=
@@ -1,9 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const FLOW_MARKER_RE = /^\s*\/\/\s*@flow\s*\n|^\s*\/\*\s*@flow\s*\*\//;
4
- function default_1(code) {
5
- return FLOW_MARKER_RE.test(code);
6
- }
7
- exports.default = default_1;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const FLOW_MARKER_RE = /^\s*\/\/\s*@flow\s*\n|^\s*\/\*\s*@flow\s*\*\//;
4
+ function default_1(code) {
5
+ return FLOW_MARKER_RE.test(code);
6
+ }
7
+ exports.default = default_1;
8
8
  module.exports = exports.default;
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZmxvdy1jb2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBpbGVyL3Rlc3QtZmlsZS9mb3JtYXRzL2VzLW5leHQvaXMtZmxvdy1jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxjQUFjLEdBQUcsK0NBQStDLENBQUM7QUFFdkUsbUJBQXlCLElBQVk7SUFDakMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFGRCw0QkFFQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEZMT1dfTUFSS0VSX1JFID0gL15cXHMqXFwvXFwvXFxzKkBmbG93XFxzKlxcbnxeXFxzKlxcL1xcKlxccypAZmxvd1xccypcXCpcXC8vO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEZMT1dfTUFSS0VSX1JFLnRlc3QoY29kZSk7XG59XG4iXX0=
@@ -1,88 +1,88 @@
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 base_1 = __importDefault(require("../base"));
7
- const runtime_1 = require("../../../errors/runtime");
8
- const types_1 = require("../../../errors/types");
9
- const test_file_1 = __importDefault(require("../../../api/structure/test-file"));
10
- const fixture_1 = __importDefault(require("../../../api/structure/fixture"));
11
- const test_1 = __importDefault(require("../../../api/structure/test"));
12
- const from_object_1 = __importDefault(require("../../../test-run/commands/from-object"));
13
- const raw_command_callsite_record_1 = require("../../../utils/raw-command-callsite-record");
14
- class RawTestFileCompiler extends base_1.default {
15
- static _createTestFn(commands) {
16
- return async (t) => {
17
- var _a, _b;
18
- for (let i = 0; i < commands.length; i++) {
19
- const callsite = ((_a = commands[i]) === null || _a === void 0 ? void 0 : _a.id) ? new raw_command_callsite_record_1.RawCommandCallsiteRecord(commands[i].id, commands) : (_b = commands[i]) === null || _b === void 0 ? void 0 : _b.callsite;
20
- try {
21
- const command = from_object_1.default(commands[i], t.testRun);
22
- await t.testRun.executeCommand(command, callsite);
23
- }
24
- catch (err) {
25
- err.callsite = callsite;
26
- throw err;
27
- }
28
- }
29
- };
30
- }
31
- static _assignCommonTestingUnitProperties(src, dest) {
32
- if (src.pageUrl)
33
- dest.page(src.pageUrl);
34
- if (src.authCredentials)
35
- dest.httpAuth(src.authCredentials);
36
- /* eslint-disable no-unused-expressions */
37
- if (src.only)
38
- dest.only;
39
- if (src.skip)
40
- dest.skip;
41
- if (src.disablePageReloads)
42
- dest.disablePageReloads;
43
- if (src.enablePageReloads)
44
- dest.enablePageReloads;
45
- /* eslint-enable no-unused-expressions */
46
- }
47
- static _addTest(testFile, src) {
48
- const test = new test_1.default(testFile);
49
- test(src.name, RawTestFileCompiler._createTestFn(src.commands));
50
- RawTestFileCompiler._assignCommonTestingUnitProperties(src, test);
51
- if (src.beforeCommands)
52
- test.before(RawTestFileCompiler._createTestFn(src.beforeCommands));
53
- if (src.afterCommands)
54
- test.after(RawTestFileCompiler._createTestFn(src.afterCommands));
55
- return test;
56
- }
57
- static _addFixture(testFile, src) {
58
- const fixture = new fixture_1.default(testFile);
59
- fixture(src.name);
60
- RawTestFileCompiler._assignCommonTestingUnitProperties(src, fixture);
61
- if (src.beforeEachCommands)
62
- fixture.beforeEach(RawTestFileCompiler._createTestFn(src.beforeEachCommands));
63
- if (src.afterEachCommands)
64
- fixture.afterEach(RawTestFileCompiler._createTestFn(src.afterEachCommands));
65
- src.tests.forEach(testSrc => RawTestFileCompiler._addTest(testFile, testSrc));
66
- }
67
- _hasTests() {
68
- return true;
69
- }
70
- getSupportedExtension() {
71
- return '.testcafe';
72
- }
73
- compile(code, filename) {
74
- const testFile = new test_file_1.default(filename);
75
- let data = null;
76
- try {
77
- data = JSON.parse(code);
78
- data.fixtures.forEach(fixtureSrc => RawTestFileCompiler._addFixture(testFile, fixtureSrc));
79
- return testFile.getTests();
80
- }
81
- catch (err) {
82
- throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotParseRawFile, filename, err.toString());
83
- }
84
- }
85
- }
86
- exports.default = RawTestFileCompiler;
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 base_1 = __importDefault(require("../base"));
7
+ const runtime_1 = require("../../../errors/runtime");
8
+ const types_1 = require("../../../errors/types");
9
+ const test_file_1 = __importDefault(require("../../../api/structure/test-file"));
10
+ const fixture_1 = __importDefault(require("../../../api/structure/fixture"));
11
+ const test_1 = __importDefault(require("../../../api/structure/test"));
12
+ const from_object_1 = __importDefault(require("../../../test-run/commands/from-object"));
13
+ const raw_command_callsite_record_1 = require("../../../utils/raw-command-callsite-record");
14
+ class RawTestFileCompiler extends base_1.default {
15
+ static _createTestFn(commands) {
16
+ return async (t) => {
17
+ var _a, _b;
18
+ for (let i = 0; i < commands.length; i++) {
19
+ const callsite = ((_a = commands[i]) === null || _a === void 0 ? void 0 : _a.id) ? new raw_command_callsite_record_1.RawCommandCallsiteRecord(commands[i].id, commands) : (_b = commands[i]) === null || _b === void 0 ? void 0 : _b.callsite;
20
+ try {
21
+ const command = from_object_1.default(commands[i], t.testRun);
22
+ await t.testRun.executeCommand(command, callsite);
23
+ }
24
+ catch (err) {
25
+ err.callsite = callsite;
26
+ throw err;
27
+ }
28
+ }
29
+ };
30
+ }
31
+ static _assignCommonTestingUnitProperties(src, dest) {
32
+ if (src.pageUrl)
33
+ dest.page(src.pageUrl);
34
+ if (src.authCredentials)
35
+ dest.httpAuth(src.authCredentials);
36
+ /* eslint-disable no-unused-expressions */
37
+ if (src.only)
38
+ dest.only;
39
+ if (src.skip)
40
+ dest.skip;
41
+ if (src.disablePageReloads)
42
+ dest.disablePageReloads;
43
+ if (src.enablePageReloads)
44
+ dest.enablePageReloads;
45
+ /* eslint-enable no-unused-expressions */
46
+ }
47
+ static _addTest(testFile, src) {
48
+ const test = new test_1.default(testFile);
49
+ test(src.name, RawTestFileCompiler._createTestFn(src.commands));
50
+ RawTestFileCompiler._assignCommonTestingUnitProperties(src, test);
51
+ if (src.beforeCommands)
52
+ test.before(RawTestFileCompiler._createTestFn(src.beforeCommands));
53
+ if (src.afterCommands)
54
+ test.after(RawTestFileCompiler._createTestFn(src.afterCommands));
55
+ return test;
56
+ }
57
+ static _addFixture(testFile, src) {
58
+ const fixture = new fixture_1.default(testFile);
59
+ fixture(src.name);
60
+ RawTestFileCompiler._assignCommonTestingUnitProperties(src, fixture);
61
+ if (src.beforeEachCommands)
62
+ fixture.beforeEach(RawTestFileCompiler._createTestFn(src.beforeEachCommands));
63
+ if (src.afterEachCommands)
64
+ fixture.afterEach(RawTestFileCompiler._createTestFn(src.afterEachCommands));
65
+ src.tests.forEach(testSrc => RawTestFileCompiler._addTest(testFile, testSrc));
66
+ }
67
+ _hasTests() {
68
+ return true;
69
+ }
70
+ getSupportedExtension() {
71
+ return '.testcafe';
72
+ }
73
+ compile(code, filename) {
74
+ const testFile = new test_file_1.default(filename);
75
+ let data = null;
76
+ try {
77
+ data = JSON.parse(code);
78
+ data.fixtures.forEach(fixtureSrc => RawTestFileCompiler._addFixture(testFile, fixtureSrc));
79
+ return testFile.getTests();
80
+ }
81
+ catch (err) {
82
+ throw new runtime_1.GeneralError(types_1.RUNTIME_ERRORS.cannotParseRawFile, filename, err.toString());
83
+ }
84
+ }
85
+ }
86
+ exports.default = RawTestFileCompiler;
87
87
  module.exports = exports.default;
88
88
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBpbGVyL3Rlc3QtZmlsZS9mb3JtYXRzL3Jhdy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1EQUEyQztBQUMzQyxxREFBdUQ7QUFDdkQsaURBQXVEO0FBQ3ZELGlGQUF3RDtBQUN4RCw2RUFBcUQ7QUFDckQsdUVBQStDO0FBQy9DLHlGQUE2RTtBQUM3RSw0RkFBc0Y7QUFFdEYsTUFBcUIsbUJBQW9CLFNBQVEsY0FBb0I7SUFDakUsTUFBTSxDQUFDLGFBQWEsQ0FBRSxRQUFRO1FBQzFCLE9BQU8sS0FBSyxFQUFDLENBQUMsRUFBQyxFQUFFOztZQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QyxNQUFNLFFBQVEsR0FBRyxPQUFBLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLHNEQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSxDQUFDO2dCQUVsSCxJQUFJO29CQUNBLE1BQU0sT0FBTyxHQUFHLHFCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRWhFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxPQUFPLEdBQUcsRUFBRTtvQkFDUixHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztvQkFDeEIsTUFBTSxHQUFHLENBQUM7aUJBQ2I7YUFDSjtRQUNMLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENB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RixPQUFPLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLHNCQUFZLENBQUMsc0JBQWMsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDdkY7SUFDTCxDQUFDO0NBQ0o7QUFqR0Qsc0NBaUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlc3RGaWxlQ29tcGlsZXJCYXNlIGZyb20gJy4uL2Jhc2UnO1xuaW1wb3J0IHsgR2VuZXJhbEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vZXJyb3JzL3J1bnRpbWUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi8uLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IFRlc3RGaWxlIGZyb20gJy4uLy4uLy4uL2FwaS9zdHJ1Y3R1cmUvdGVzdC1maWxlJztcbmltcG9ydCBGaXh0dXJlIGZyb20gJy4uLy4uLy4uL2FwaS9zdHJ1Y3R1cmUvZml4dHVyZSc7XG5pbXBvcnQgVGVzdCBmcm9tICcuLi8uLi8uLi9hcGkvc3RydWN0dXJlL3Rlc3QnO1xuaW1wb3J0IGNyZWF0ZUNvbW1hbmRGcm9tT2JqZWN0IGZyb20gJy4uLy4uLy4uL3Rlc3QtcnVuL2NvbW1hbmRzL2Zyb20tb2JqZWN0JztcbmltcG9ydCB7IFJhd0NvbW1hbmRDYWxsc2l0ZVJlY29yZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3Jhdy1jb21tYW5kLWNhbGxzaXRlLXJlY29yZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhd1Rlc3RGaWxlQ29tcGlsZXIgZXh0ZW5kcyBUZXN0RmlsZUNvbXBpbGVyQmFzZSB7XG4gICAgc3RhdGljIF9jcmVhdGVUZXN0Rm4gKGNvbW1hbmRzKSB7XG4gICAgICAgIHJldHVybiBhc3luYyB0ID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsc2l0ZSA9IGNvbW1hbmRzW2ldPy5pZCA/IG5ldyBSYXdDb21tYW5kQ2FsbHNpdGVSZWNvcmQoY29tbWFuZHNbaV0uaWQsIGNvbW1hbmRzKSA6IGNvbW1hbmRzW2ldPy5jYWxsc2l0ZTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBjcmVhdGVDb21tYW5kRnJvbU9iamVjdChjb21tYW5kc1tpXSwgdC50ZXN0UnVuKTtcblxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0LnRlc3RSdW4uZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCwgY2FsbHNpdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyci5jYWxsc2l0ZSA9IGNhbGxzaXRlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBfYXNzaWduQ29tbW9uVGVzdGluZ1VuaXRQcm9wZXJ0aWVzIChzcmMsIGRlc3QpIHtcbiAgICAgICAgaWYgKHNyYy5wYWdlVXJsKVxuICAgICAgICAgICAgZGVzdC5wYWdlKHNyYy5wYWdlVXJsKTtcblxuICAgICAgICBpZiAoc3JjLmF1dGhDcmVkZW50aWFscylcbiAgICAgICAgICAgIGRlc3QuaHR0cEF1dGgoc3JjLmF1dGhDcmVkZW50aWFscyk7XG5cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgICAgIGlmIChzcmMub25seSlcbiAgICAgICAgICAgIGRlc3Qub25seTtcblxuICAgICAgICBpZiAoc3JjLnNraXApXG4gICAgICAgICAgICBkZXN0LnNraXA7XG5cbiAgICAgICAgaWYgKHNyYy5kaXNhYmxlUGFnZVJlbG9hZHMpXG4gICAgICAgICAgICBkZXN0LmRpc2FibGVQYWdlUmVsb2FkcztcblxuICAgICAgICBpZiAoc3JjLmVuYWJsZVBhZ2VSZWxvYWRzKVxuICAgICAgICAgICAgZGVzdC5lbmFibGVQYWdlUmVsb2FkcztcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgICB9XG5cbiAgICBzdGF0aWMgX2FkZFRlc3QgKHRlc3RGaWxlLCBzcmMpIHtcbiAgICAgICAgY29uc3QgdGVzdCA9IG5ldyBUZXN0KHRlc3RGaWxlKTtcblxuICAgICAgICB0ZXN0KHNyYy5uYW1lLCBSYXdUZXN0RmlsZUNvbXBpbGVyLl9jcmVhdGVUZXN0Rm4oc3JjLmNvbW1hbmRzKSk7XG5cbiAgICAgICAgUmF3VGVzdEZpbGVDb21waWxlci5fYXNzaWduQ29tbW9uVGVzdGluZ1VuaXRQcm9wZXJ0aWVzKHNyYywgdGVzdCk7XG5cbiAgICAgICAgaWYgKHNyYy5iZWZvcmVDb21tYW5kcylcbiAgICAgICAgICAgIHRlc3QuYmVmb3JlKFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2NyZWF0ZVRlc3RGbihzcmMuYmVmb3JlQ29tbWFuZHMpKTtcblxuICAgICAgICBpZiAoc3JjLmFmdGVyQ29tbWFuZHMpXG4gICAgICAgICAgICB0ZXN0LmFmdGVyKFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2NyZWF0ZVRlc3RGbihzcmMuYWZ0ZXJDb21tYW5kcykpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBfYWRkRml4dHVyZSAodGVzdEZpbGUsIHNyYykge1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gbmV3IEZpeHR1cmUodGVzdEZpbGUpO1xuXG4gICAgICAgIGZpeHR1cmUoc3JjLm5hbWUpO1xuXG4gICAgICAgIFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2Fzc2lnbkNvbW1vblRlc3RpbmdVbml0UHJvcGVydGllcyhzcmMsIGZpeHR1cmUpO1xuXG4gICAgICAgIGlmIChzcmMuYmVmb3JlRWFjaENvbW1hbmRzKVxuICAgICAgICAgICAgZml4dHVyZS5iZWZvcmVFYWNoKFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2NyZWF0ZVRlc3RGbihzcmMuYmVmb3JlRWFjaENvbW1hbmRzKSk7XG5cbiAgICAgICAgaWYgKHNyYy5hZnRlckVhY2hDb21tYW5kcylcbiAgICAgICAgICAgIGZpeHR1cmUuYWZ0ZXJFYWNoKFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2NyZWF0ZVRlc3RGbihzcmMuYWZ0ZXJFYWNoQ29tbWFuZHMpKTtcblxuICAgICAgICBzcmMudGVzdHMuZm9yRWFjaCh0ZXN0U3JjID0+IFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2FkZFRlc3QodGVzdEZpbGUsIHRlc3RTcmMpKTtcbiAgICB9XG5cbiAgICBfaGFzVGVzdHMgKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRFeHRlbnNpb24gKCkge1xuICAgICAgICByZXR1cm4gJy50ZXN0Y2FmZSc7XG4gICAgfVxuXG4gICAgY29tcGlsZSAoY29kZSwgZmlsZW5hbWUpIHtcbiAgICAgICAgY29uc3QgdGVzdEZpbGUgPSBuZXcgVGVzdEZpbGUoZmlsZW5hbWUpO1xuXG4gICAgICAgIGxldCBkYXRhID0gbnVsbDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoY29kZSk7XG5cbiAgICAgICAgICAgIGRhdGEuZml4dHVyZXMuZm9yRWFjaChmaXh0dXJlU3JjID0+IFJhd1Rlc3RGaWxlQ29tcGlsZXIuX2FkZEZpeHR1cmUodGVzdEZpbGUsIGZpeHR1cmVTcmMpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRlc3RGaWxlLmdldFRlc3RzKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdlbmVyYWxFcnJvcihSVU5USU1FX0VSUk9SUy5jYW5ub3RQYXJzZVJhd0ZpbGUsIGZpbGVuYW1lLCBlcnIudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=