@checkly/playwright-core 1.48.22 → 1.51.11-beta.1

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 (307) hide show
  1. package/ThirdPartyNotices.txt +60 -48
  2. package/bin/reinstall_chrome_beta_linux.sh +10 -8
  3. package/bin/reinstall_chrome_stable_linux.sh +10 -8
  4. package/bin/reinstall_msedge_beta_linux.sh +17 -9
  5. package/bin/reinstall_msedge_dev_linux.sh +17 -9
  6. package/bin/reinstall_msedge_stable_linux.sh +17 -9
  7. package/browsers.json +33 -12
  8. package/index.js +0 -1
  9. package/lib/androidServerImpl.js +5 -5
  10. package/lib/browserServerImpl.js +18 -9
  11. package/lib/checkly/secretsFilter.js +1 -1
  12. package/lib/cli/driver.js +6 -6
  13. package/lib/cli/program.js +38 -43
  14. package/lib/cli/programWithTestStub.js +2 -1
  15. package/lib/client/android.js +37 -58
  16. package/lib/client/artifact.js +4 -7
  17. package/lib/client/browser.js +10 -15
  18. package/lib/client/browserContext.js +69 -62
  19. package/lib/client/browserType.js +30 -64
  20. package/lib/client/channelOwner.js +53 -68
  21. package/lib/client/clientHelper.js +4 -6
  22. package/lib/client/clientInstrumentation.js +2 -0
  23. package/lib/client/clientStackTrace.js +65 -0
  24. package/lib/client/connection.js +48 -41
  25. package/lib/client/consoleMessage.js +4 -7
  26. package/lib/client/electron.js +10 -10
  27. package/lib/client/elementHandle.js +32 -33
  28. package/lib/client/errors.js +2 -2
  29. package/lib/client/eventEmitter.js +5 -8
  30. package/lib/client/fetch.js +61 -62
  31. package/lib/client/fileUtils.js +31 -0
  32. package/lib/client/frame.js +22 -23
  33. package/lib/client/harRouter.js +7 -9
  34. package/lib/client/jsHandle.js +3 -4
  35. package/lib/client/localUtils.js +24 -0
  36. package/lib/client/locator.js +27 -13
  37. package/lib/client/network.js +44 -37
  38. package/lib/client/page.js +50 -41
  39. package/lib/client/platform.js +71 -0
  40. package/lib/client/playwright.js +21 -1
  41. package/lib/client/selectors.js +8 -2
  42. package/lib/client/stream.js +2 -21
  43. package/lib/client/timeoutSettings.js +65 -0
  44. package/lib/client/tracing.js +29 -7
  45. package/lib/client/video.js +2 -2
  46. package/lib/client/waiter.js +19 -16
  47. package/lib/client/webSocket.js +106 -0
  48. package/lib/client/worker.js +4 -4
  49. package/lib/client/writableStream.js +2 -21
  50. package/lib/generated/consoleApiSource.js +1 -1
  51. package/lib/generated/injectedScriptSource.js +1 -1
  52. package/lib/generated/pollingRecorderSource.js +1 -1
  53. package/lib/generated/recorderSource.js +7 -0
  54. package/lib/generated/webSocketMockSource.js +1 -1
  55. package/lib/inProcessFactory.js +8 -3
  56. package/lib/outofprocess.js +12 -8
  57. package/lib/protocol/debug.js +1 -1
  58. package/lib/protocol/validator.js +77 -11
  59. package/lib/protocol/validatorPrimitives.js +1 -2
  60. package/lib/remote/playwrightConnection.js +21 -12
  61. package/lib/remote/playwrightServer.js +22 -8
  62. package/lib/server/android/android.js +17 -14
  63. package/lib/server/android/backendAdb.js +14 -14
  64. package/lib/server/artifact.js +3 -3
  65. package/lib/server/bidi/bidiBrowser.js +11 -8
  66. package/lib/server/bidi/bidiChromium.js +5 -4
  67. package/lib/server/bidi/bidiConnection.js +1 -3
  68. package/lib/server/bidi/bidiExecutionContext.js +71 -25
  69. package/lib/server/bidi/bidiFirefox.js +4 -3
  70. package/lib/server/bidi/bidiInput.js +11 -12
  71. package/lib/server/bidi/bidiNetworkManager.js +11 -12
  72. package/lib/server/bidi/bidiOverCdp.js +2 -2
  73. package/lib/server/bidi/bidiPage.js +39 -66
  74. package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
  75. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  76. package/lib/server/browser.js +2 -2
  77. package/lib/server/browserContext.js +60 -55
  78. package/lib/server/browserType.js +22 -18
  79. package/lib/server/callLog.js +79 -0
  80. package/lib/server/chromium/chromium.js +20 -16
  81. package/lib/server/chromium/chromiumSwitches.js +32 -9
  82. package/lib/server/chromium/crBrowser.js +25 -24
  83. package/lib/server/chromium/crConnection.js +2 -2
  84. package/lib/server/chromium/crCoverage.js +1 -1
  85. package/lib/server/chromium/crDevTools.js +1 -1
  86. package/lib/server/chromium/crDragDrop.js +1 -1
  87. package/lib/server/chromium/crExecutionContext.js +26 -35
  88. package/lib/server/chromium/crInput.js +17 -6
  89. package/lib/server/chromium/crNetworkManager.js +3 -3
  90. package/lib/server/chromium/crPage.js +43 -55
  91. package/lib/server/chromium/crPdf.js +1 -1
  92. package/lib/server/chromium/crProtocolHelper.js +3 -3
  93. package/lib/server/chromium/crServiceWorker.js +2 -2
  94. package/lib/server/chromium/videoRecorder.js +2 -2
  95. package/lib/server/clock.js +1 -1
  96. package/lib/server/codegen/csharp.js +21 -16
  97. package/lib/server/codegen/java.js +17 -9
  98. package/lib/server/codegen/javascript.js +37 -7
  99. package/lib/server/codegen/jsonl.js +1 -1
  100. package/lib/server/codegen/languages.js +2 -2
  101. package/lib/server/codegen/python.js +14 -17
  102. package/lib/server/debugController.js +23 -45
  103. package/lib/server/debugger.js +1 -1
  104. package/lib/server/deviceDescriptors.js +1 -1
  105. package/lib/server/deviceDescriptorsSource.json +131 -131
  106. package/lib/server/dispatchers/androidDispatcher.js +14 -3
  107. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  108. package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
  109. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  110. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  111. package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
  112. package/lib/server/dispatchers/dispatcher.js +27 -25
  113. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  114. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  115. package/lib/server/dispatchers/frameDispatcher.js +9 -3
  116. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  117. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
  118. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  119. package/lib/server/dispatchers/pageDispatcher.js +10 -8
  120. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  121. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  122. package/lib/server/dispatchers/tracingDispatcher.js +10 -0
  123. package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
  124. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  125. package/lib/server/dom.js +102 -48
  126. package/lib/server/download.js +1 -1
  127. package/lib/server/electron/electron.js +17 -16
  128. package/lib/server/errors.js +1 -1
  129. package/lib/server/fetch.js +49 -33
  130. package/lib/server/fileUploadUtils.js +7 -4
  131. package/lib/server/firefox/ffBrowser.js +17 -9
  132. package/lib/server/firefox/ffConnection.js +1 -1
  133. package/lib/server/firefox/ffExecutionContext.js +25 -29
  134. package/lib/server/firefox/ffInput.js +15 -4
  135. package/lib/server/firefox/ffNetworkManager.js +3 -3
  136. package/lib/server/firefox/ffPage.js +29 -50
  137. package/lib/server/firefox/firefox.js +7 -9
  138. package/lib/server/frameSelectors.js +1 -1
  139. package/lib/server/frames.js +65 -55
  140. package/lib/server/har/harRecorder.js +4 -4
  141. package/lib/server/har/harTracer.js +8 -9
  142. package/lib/server/harBackend.js +157 -0
  143. package/lib/server/helper.js +2 -2
  144. package/lib/server/index.js +1 -14
  145. package/lib/server/input.js +3 -4
  146. package/lib/server/instrumentation.js +2 -2
  147. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  148. package/lib/server/javascript.js +26 -33
  149. package/lib/server/launchApp.js +7 -7
  150. package/lib/server/localUtils.js +203 -0
  151. package/lib/server/network.js +5 -5
  152. package/lib/server/page.js +76 -37
  153. package/lib/server/pipeTransport.js +1 -1
  154. package/lib/server/playwright.js +5 -5
  155. package/lib/server/progress.js +1 -4
  156. package/lib/server/protocolError.js +1 -1
  157. package/lib/server/recorder/chat.js +177 -0
  158. package/lib/server/recorder/codeGenerator.js +154 -0
  159. package/lib/server/recorder/contextRecorder.js +9 -18
  160. package/lib/server/recorder/csharp.js +311 -0
  161. package/lib/server/recorder/java.js +249 -0
  162. package/lib/server/recorder/javascript.js +230 -0
  163. package/lib/server/recorder/jsonl.js +48 -0
  164. package/lib/server/recorder/language.js +45 -0
  165. package/lib/server/recorder/python.js +276 -0
  166. package/lib/server/recorder/recorderActions.js +6 -0
  167. package/lib/server/recorder/recorderApp.js +25 -28
  168. package/lib/server/recorder/recorderCollection.js +9 -21
  169. package/lib/server/recorder/recorderInTraceViewer.js +1 -1
  170. package/lib/server/recorder/recorderRunner.js +7 -3
  171. package/lib/server/recorder/recorderUtils.js +5 -28
  172. package/lib/server/recorder/throttledFile.js +3 -4
  173. package/lib/server/recorder/utils.js +46 -0
  174. package/lib/server/recorder.js +83 -43
  175. package/lib/server/registry/browserFetcher.js +10 -8
  176. package/lib/server/registry/dependencies.js +20 -20
  177. package/lib/server/registry/index.js +215 -61
  178. package/lib/server/registry/nativeDeps.js +10 -4
  179. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  180. package/lib/server/screenshotter.js +1 -1
  181. package/lib/server/selectors.js +3 -3
  182. package/lib/server/socksClientCertificatesInterceptor.js +8 -8
  183. package/lib/server/socksInterceptor.js +8 -5
  184. package/lib/server/storageScript.js +160 -0
  185. package/lib/server/timeoutSettings.js +74 -0
  186. package/lib/server/trace/recorder/snapshotter.js +10 -20
  187. package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
  188. package/lib/server/trace/recorder/tracing.js +108 -45
  189. package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
  190. package/lib/server/trace/viewer/traceViewer.js +21 -7
  191. package/lib/server/transport.js +3 -2
  192. package/lib/server/utils/ascii.js +31 -0
  193. package/lib/server/utils/comparators.js +159 -0
  194. package/lib/server/utils/crypto.js +171 -0
  195. package/lib/server/utils/debug.js +38 -0
  196. package/lib/server/utils/debugLogger.js +93 -0
  197. package/lib/server/utils/env.js +53 -0
  198. package/lib/server/utils/eventsHelper.js +38 -0
  199. package/lib/server/utils/expectUtils.js +33 -0
  200. package/lib/server/utils/fileUtils.js +204 -0
  201. package/lib/server/utils/happyEyeballs.js +207 -0
  202. package/lib/server/utils/hostPlatform.js +145 -0
  203. package/lib/server/utils/httpServer.js +233 -0
  204. package/lib/server/utils/image_tools/colorUtils.js +98 -0
  205. package/lib/server/utils/image_tools/compare.js +108 -0
  206. package/lib/server/utils/image_tools/imageChannel.js +70 -0
  207. package/lib/server/utils/image_tools/stats.js +102 -0
  208. package/lib/server/utils/linuxUtils.js +58 -0
  209. package/lib/server/utils/network.js +160 -0
  210. package/lib/server/utils/nodePlatform.js +140 -0
  211. package/lib/server/utils/pipeTransport.js +82 -0
  212. package/lib/server/utils/processLauncher.js +248 -0
  213. package/lib/server/utils/profiler.js +52 -0
  214. package/lib/server/utils/socksProxy.js +570 -0
  215. package/lib/server/utils/spawnAsync.js +45 -0
  216. package/lib/server/utils/task.js +58 -0
  217. package/lib/server/utils/userAgent.js +91 -0
  218. package/lib/server/utils/wsServer.js +128 -0
  219. package/lib/server/utils/zipFile.js +75 -0
  220. package/lib/server/utils/zones.js +54 -0
  221. package/lib/server/webkit/webkit.js +4 -4
  222. package/lib/server/webkit/wkBrowser.js +10 -10
  223. package/lib/server/webkit/wkConnection.js +1 -1
  224. package/lib/server/webkit/wkExecutionContext.js +26 -30
  225. package/lib/server/webkit/wkInput.js +17 -7
  226. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  227. package/lib/server/webkit/wkPage.js +80 -66
  228. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  229. package/lib/server/webkit/wkWorkers.js +2 -2
  230. package/lib/utils/fileUtils.js +1 -1
  231. package/lib/utils/glob.js +84 -0
  232. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  233. package/lib/utils/isomorphic/assert.js +25 -0
  234. package/lib/utils/isomorphic/colors.js +65 -0
  235. package/lib/utils/isomorphic/cssParser.js +5 -5
  236. package/lib/utils/isomorphic/headers.js +52 -0
  237. package/lib/utils/isomorphic/locatorGenerators.js +38 -8
  238. package/lib/utils/isomorphic/locatorParser.js +19 -13
  239. package/lib/utils/isomorphic/manualPromise.js +107 -0
  240. package/lib/utils/isomorphic/mimeType.js +11 -3
  241. package/lib/utils/isomorphic/multimap.js +73 -0
  242. package/lib/utils/isomorphic/rtti.js +41 -0
  243. package/lib/utils/isomorphic/semaphore.js +51 -0
  244. package/lib/utils/isomorphic/stackTrace.js +169 -0
  245. package/lib/utils/isomorphic/stringUtils.js +31 -1
  246. package/lib/utils/isomorphic/time.js +25 -0
  247. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  248. package/lib/utils/isomorphic/traceUtils.js +23 -0
  249. package/lib/utils/isomorphic/types.js +5 -0
  250. package/lib/utils/isomorphic/urlMatch.js +7 -5
  251. package/lib/utils/mimeType.js +30 -0
  252. package/lib/utils/stackTrace.js +1 -1
  253. package/lib/utils.js +447 -0
  254. package/lib/utilsBundle.js +4 -29
  255. package/lib/utilsBundleImpl/index.js +188 -33
  256. package/lib/vite/htmlReport/index.html +20 -17
  257. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  258. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  259. package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
  260. package/lib/vite/recorder/index.html +2 -2
  261. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
  262. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
  263. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
  264. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
  265. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  266. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
  267. package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
  268. package/lib/vite/traceViewer/embedded.html +6 -6
  269. package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
  270. package/lib/vite/traceViewer/index.html +27 -9
  271. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
  272. package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
  273. package/lib/vite/traceViewer/recorder.html +4 -4
  274. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  275. package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
  276. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
  277. package/lib/vite/traceViewer/uiMode.html +8 -7
  278. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
  279. package/lib/zipBundleImpl.js +4 -4
  280. package/package.json +7 -7
  281. package/types/protocol.d.ts +820 -153
  282. package/types/types.d.ts +285 -82
  283. package/bin/PrintDeps.exe +0 -0
  284. package/bin/README.md +0 -2
  285. package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
  286. package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
  287. package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
  288. package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
  289. package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
  290. package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
  291. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  292. package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
  293. package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
  294. package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
  295. package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
  296. package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
  297. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
  298. package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
  299. package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
  300. package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
  301. package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
  302. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  303. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  304. /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
  305. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  306. /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
  307. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ParserError = exports.KeyParser = void 0;
7
+ exports.parseAriaSnapshot = parseAriaSnapshot;
8
+ exports.parseAriaSnapshotUnsafe = parseAriaSnapshotUnsafe;
9
+ exports.valueOrRegex = valueOrRegex;
10
+ /**
11
+ * Copyright (c) Microsoft Corporation.
12
+ *
13
+ * Licensed under the Apache License, Version 2.0 (the "License");
14
+ * you may not use this file except in compliance with the License.
15
+ * You may obtain a copy of the License at
16
+ *
17
+ * http://www.apache.org/licenses/LICENSE-2.0
18
+ *
19
+ * Unless required by applicable law or agreed to in writing, software
20
+ * distributed under the License is distributed on an "AS IS" BASIS,
21
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22
+ * See the License for the specific language governing permissions and
23
+ * limitations under the License.
24
+ */
25
+
26
+ // https://www.w3.org/TR/wai-aria-1.2/#role_definitions
27
+
28
+ // We pass parsed template between worlds using JSON, make it easy.
29
+
30
+ function parseAriaSnapshotUnsafe(yaml, text) {
31
+ const result = parseAriaSnapshot(yaml, text);
32
+ if (result.errors.length) throw new Error(result.errors[0].message);
33
+ return result.fragment;
34
+ }
35
+ function parseAriaSnapshot(yaml, text, options = {}) {
36
+ var _fragment$children;
37
+ const lineCounter = new yaml.LineCounter();
38
+ const parseOptions = {
39
+ keepSourceTokens: true,
40
+ lineCounter,
41
+ ...options
42
+ };
43
+ const yamlDoc = yaml.parseDocument(text, parseOptions);
44
+ const errors = [];
45
+ const convertRange = range => {
46
+ return [lineCounter.linePos(range[0]), lineCounter.linePos(range[1])];
47
+ };
48
+ const addError = error => {
49
+ errors.push({
50
+ message: error.message,
51
+ range: [lineCounter.linePos(error.pos[0]), lineCounter.linePos(error.pos[1])]
52
+ });
53
+ };
54
+ const convertSeq = (container, seq) => {
55
+ for (const item of seq.items) {
56
+ const itemIsString = item instanceof yaml.Scalar && typeof item.value === 'string';
57
+ if (itemIsString) {
58
+ const childNode = KeyParser.parse(item, parseOptions, errors);
59
+ if (childNode) {
60
+ container.children = container.children || [];
61
+ container.children.push(childNode);
62
+ }
63
+ continue;
64
+ }
65
+ const itemIsMap = item instanceof yaml.YAMLMap;
66
+ if (itemIsMap) {
67
+ convertMap(container, item);
68
+ continue;
69
+ }
70
+ errors.push({
71
+ message: 'Sequence items should be strings or maps',
72
+ range: convertRange(item.range || seq.range)
73
+ });
74
+ }
75
+ };
76
+ const convertMap = (container, map) => {
77
+ for (const entry of map.items) {
78
+ container.children = container.children || [];
79
+ // Key must by a string
80
+ const keyIsString = entry.key instanceof yaml.Scalar && typeof entry.key.value === 'string';
81
+ if (!keyIsString) {
82
+ errors.push({
83
+ message: 'Only string keys are supported',
84
+ range: convertRange(entry.key.range || map.range)
85
+ });
86
+ continue;
87
+ }
88
+ const key = entry.key;
89
+ const value = entry.value;
90
+
91
+ // - text: "text"
92
+ if (key.value === 'text') {
93
+ const valueIsString = value instanceof yaml.Scalar && typeof value.value === 'string';
94
+ if (!valueIsString) {
95
+ errors.push({
96
+ message: 'Text value should be a string',
97
+ range: convertRange(entry.value.range || map.range)
98
+ });
99
+ continue;
100
+ }
101
+ container.children.push({
102
+ kind: 'text',
103
+ text: valueOrRegex(value.value)
104
+ });
105
+ continue;
106
+ }
107
+
108
+ // role "name": ...
109
+ const childNode = KeyParser.parse(key, parseOptions, errors);
110
+ if (!childNode) continue;
111
+
112
+ // - role "name": "text"
113
+ const valueIsScalar = value instanceof yaml.Scalar;
114
+ if (valueIsScalar) {
115
+ const type = typeof value.value;
116
+ if (type !== 'string' && type !== 'number' && type !== 'boolean') {
117
+ errors.push({
118
+ message: 'Node value should be a string or a sequence',
119
+ range: convertRange(entry.value.range || map.range)
120
+ });
121
+ continue;
122
+ }
123
+ container.children.push({
124
+ ...childNode,
125
+ children: [{
126
+ kind: 'text',
127
+ text: valueOrRegex(String(value.value))
128
+ }]
129
+ });
130
+ continue;
131
+ }
132
+
133
+ // - role "name":
134
+ // - child
135
+ const valueIsSequence = value instanceof yaml.YAMLSeq;
136
+ if (valueIsSequence) {
137
+ container.children.push(childNode);
138
+ convertSeq(childNode, value);
139
+ continue;
140
+ }
141
+ errors.push({
142
+ message: 'Map values should be strings or sequences',
143
+ range: convertRange(entry.value.range || map.range)
144
+ });
145
+ }
146
+ };
147
+ const fragment = {
148
+ kind: 'role',
149
+ role: 'fragment'
150
+ };
151
+ yamlDoc.errors.forEach(addError);
152
+ if (errors.length) return {
153
+ errors,
154
+ fragment
155
+ };
156
+ if (!(yamlDoc.contents instanceof yaml.YAMLSeq)) {
157
+ errors.push({
158
+ message: 'Aria snapshot must be a YAML sequence, elements starting with " -"',
159
+ range: yamlDoc.contents ? convertRange(yamlDoc.contents.range) : [{
160
+ line: 0,
161
+ col: 0
162
+ }, {
163
+ line: 0,
164
+ col: 0
165
+ }]
166
+ });
167
+ }
168
+ if (errors.length) return {
169
+ errors,
170
+ fragment
171
+ };
172
+ convertSeq(fragment, yamlDoc.contents);
173
+ if (errors.length) return {
174
+ errors,
175
+ fragment: emptyFragment
176
+ };
177
+ if (((_fragment$children = fragment.children) === null || _fragment$children === void 0 ? void 0 : _fragment$children.length) === 1) return {
178
+ fragment: fragment.children[0],
179
+ errors
180
+ };
181
+ return {
182
+ fragment,
183
+ errors
184
+ };
185
+ }
186
+ const emptyFragment = {
187
+ kind: 'role',
188
+ role: 'fragment'
189
+ };
190
+ function normalizeWhitespace(text) {
191
+ // TODO: why is this different from normalizeWhitespace in stringUtils.ts?
192
+ return text.replace(/[\u200b\u00ad]/g, '').replace(/[\r\n\s\t]+/g, ' ').trim();
193
+ }
194
+ function valueOrRegex(value) {
195
+ return value.startsWith('/') && value.endsWith('/') && value.length > 1 ? {
196
+ pattern: value.slice(1, -1)
197
+ } : normalizeWhitespace(value);
198
+ }
199
+ class KeyParser {
200
+ static parse(text, options, errors) {
201
+ try {
202
+ return new KeyParser(text.value)._parse();
203
+ } catch (e) {
204
+ if (e instanceof ParserError) {
205
+ const message = options.prettyErrors === false ? e.message : e.message + ':\n\n' + text.value + '\n' + ' '.repeat(e.pos) + '^\n';
206
+ errors.push({
207
+ message,
208
+ range: [options.lineCounter.linePos(text.range[0]), options.lineCounter.linePos(text.range[0] + e.pos)]
209
+ });
210
+ return null;
211
+ }
212
+ throw e;
213
+ }
214
+ }
215
+ constructor(input) {
216
+ this._input = void 0;
217
+ this._pos = void 0;
218
+ this._length = void 0;
219
+ this._input = input;
220
+ this._pos = 0;
221
+ this._length = input.length;
222
+ }
223
+ _peek() {
224
+ return this._input[this._pos] || '';
225
+ }
226
+ _next() {
227
+ if (this._pos < this._length) return this._input[this._pos++];
228
+ return null;
229
+ }
230
+ _eof() {
231
+ return this._pos >= this._length;
232
+ }
233
+ _isWhitespace() {
234
+ return !this._eof() && /\s/.test(this._peek());
235
+ }
236
+ _skipWhitespace() {
237
+ while (this._isWhitespace()) this._pos++;
238
+ }
239
+ _readIdentifier(type) {
240
+ if (this._eof()) this._throwError(`Unexpected end of input when expecting ${type}`);
241
+ const start = this._pos;
242
+ while (!this._eof() && /[a-zA-Z]/.test(this._peek())) this._pos++;
243
+ return this._input.slice(start, this._pos);
244
+ }
245
+ _readString() {
246
+ let result = '';
247
+ let escaped = false;
248
+ while (!this._eof()) {
249
+ const ch = this._next();
250
+ if (escaped) {
251
+ result += ch;
252
+ escaped = false;
253
+ } else if (ch === '\\') {
254
+ escaped = true;
255
+ } else if (ch === '"') {
256
+ return result;
257
+ } else {
258
+ result += ch;
259
+ }
260
+ }
261
+ this._throwError('Unterminated string');
262
+ }
263
+ _throwError(message, offset = 0) {
264
+ throw new ParserError(message, offset || this._pos);
265
+ }
266
+ _readRegex() {
267
+ let result = '';
268
+ let escaped = false;
269
+ let insideClass = false;
270
+ while (!this._eof()) {
271
+ const ch = this._next();
272
+ if (escaped) {
273
+ result += ch;
274
+ escaped = false;
275
+ } else if (ch === '\\') {
276
+ escaped = true;
277
+ result += ch;
278
+ } else if (ch === '/' && !insideClass) {
279
+ return {
280
+ pattern: result
281
+ };
282
+ } else if (ch === '[') {
283
+ insideClass = true;
284
+ result += ch;
285
+ } else if (ch === ']' && insideClass) {
286
+ result += ch;
287
+ insideClass = false;
288
+ } else {
289
+ result += ch;
290
+ }
291
+ }
292
+ this._throwError('Unterminated regex');
293
+ }
294
+ _readStringOrRegex() {
295
+ const ch = this._peek();
296
+ if (ch === '"') {
297
+ this._next();
298
+ return normalizeWhitespace(this._readString());
299
+ }
300
+ if (ch === '/') {
301
+ this._next();
302
+ return this._readRegex();
303
+ }
304
+ return null;
305
+ }
306
+ _readAttributes(result) {
307
+ let errorPos = this._pos;
308
+ while (true) {
309
+ this._skipWhitespace();
310
+ if (this._peek() === '[') {
311
+ this._next();
312
+ this._skipWhitespace();
313
+ errorPos = this._pos;
314
+ const flagName = this._readIdentifier('attribute');
315
+ this._skipWhitespace();
316
+ let flagValue = '';
317
+ if (this._peek() === '=') {
318
+ this._next();
319
+ this._skipWhitespace();
320
+ errorPos = this._pos;
321
+ while (this._peek() !== ']' && !this._isWhitespace() && !this._eof()) flagValue += this._next();
322
+ }
323
+ this._skipWhitespace();
324
+ if (this._peek() !== ']') this._throwError('Expected ]');
325
+ this._next(); // Consume ']'
326
+ this._applyAttribute(result, flagName, flagValue || 'true', errorPos);
327
+ } else {
328
+ break;
329
+ }
330
+ }
331
+ }
332
+ _parse() {
333
+ this._skipWhitespace();
334
+ const role = this._readIdentifier('role');
335
+ this._skipWhitespace();
336
+ const name = this._readStringOrRegex() || '';
337
+ const result = {
338
+ kind: 'role',
339
+ role,
340
+ name
341
+ };
342
+ this._readAttributes(result);
343
+ this._skipWhitespace();
344
+ if (!this._eof()) this._throwError('Unexpected input');
345
+ return result;
346
+ }
347
+ _applyAttribute(node, key, value, errorPos) {
348
+ if (key === 'checked') {
349
+ this._assert(value === 'true' || value === 'false' || value === 'mixed', 'Value of "checked\" attribute must be a boolean or "mixed"', errorPos);
350
+ node.checked = value === 'true' ? true : value === 'false' ? false : 'mixed';
351
+ return;
352
+ }
353
+ if (key === 'disabled') {
354
+ this._assert(value === 'true' || value === 'false', 'Value of "disabled" attribute must be a boolean', errorPos);
355
+ node.disabled = value === 'true';
356
+ return;
357
+ }
358
+ if (key === 'expanded') {
359
+ this._assert(value === 'true' || value === 'false', 'Value of "expanded" attribute must be a boolean', errorPos);
360
+ node.expanded = value === 'true';
361
+ return;
362
+ }
363
+ if (key === 'level') {
364
+ this._assert(!isNaN(Number(value)), 'Value of "level" attribute must be a number', errorPos);
365
+ node.level = Number(value);
366
+ return;
367
+ }
368
+ if (key === 'pressed') {
369
+ this._assert(value === 'true' || value === 'false' || value === 'mixed', 'Value of "pressed" attribute must be a boolean or "mixed"', errorPos);
370
+ node.pressed = value === 'true' ? true : value === 'false' ? false : 'mixed';
371
+ return;
372
+ }
373
+ if (key === 'selected') {
374
+ this._assert(value === 'true' || value === 'false', 'Value of "selected" attribute must be a boolean', errorPos);
375
+ node.selected = value === 'true';
376
+ return;
377
+ }
378
+ this._assert(false, `Unsupported attribute [${key}]`, errorPos);
379
+ }
380
+ _assert(value, message, valuePos) {
381
+ if (!value) this._throwError(message || 'Assertion error', valuePos);
382
+ }
383
+ }
384
+ exports.KeyParser = KeyParser;
385
+ class ParserError extends Error {
386
+ constructor(message, pos) {
387
+ super(message);
388
+ this.pos = void 0;
389
+ this.pos = pos;
390
+ }
391
+ }
392
+ exports.ParserError = ParserError;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.assert = assert;
7
+ /**
8
+ * Copyright (c) Microsoft Corporation.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * http://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+
23
+ function assert(value, message) {
24
+ if (!value) throw new Error(message || 'Assertion error');
25
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.webColors = exports.noColors = void 0;
7
+ /**
8
+ * Copyright (c) Microsoft Corporation.
9
+ *
10
+ * Licensed under the Apache License, Version 2.0 (the "License");
11
+ * you may not use this file except in compliance with the License.
12
+ * You may obtain a copy of the License at
13
+ *
14
+ * http://www.apache.org/licenses/LICENSE-2.0
15
+ *
16
+ * Unless required by applicable law or agreed to in writing, software
17
+ * distributed under the License is distributed on an "AS IS" BASIS,
18
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
+ * See the License for the specific language governing permissions and
20
+ * limitations under the License.
21
+ */
22
+
23
+ const webColors = exports.webColors = {
24
+ enabled: true,
25
+ reset: text => applyStyle(0, 0, text),
26
+ bold: text => applyStyle(1, 22, text),
27
+ dim: text => applyStyle(2, 22, text),
28
+ italic: text => applyStyle(3, 23, text),
29
+ underline: text => applyStyle(4, 24, text),
30
+ inverse: text => applyStyle(7, 27, text),
31
+ hidden: text => applyStyle(8, 28, text),
32
+ strikethrough: text => applyStyle(9, 29, text),
33
+ black: text => applyStyle(30, 39, text),
34
+ red: text => applyStyle(31, 39, text),
35
+ green: text => applyStyle(32, 39, text),
36
+ yellow: text => applyStyle(33, 39, text),
37
+ blue: text => applyStyle(34, 39, text),
38
+ magenta: text => applyStyle(35, 39, text),
39
+ cyan: text => applyStyle(36, 39, text),
40
+ white: text => applyStyle(37, 39, text),
41
+ gray: text => applyStyle(90, 39, text),
42
+ grey: text => applyStyle(90, 39, text)
43
+ };
44
+ const noColors = exports.noColors = {
45
+ enabled: false,
46
+ reset: t => t,
47
+ bold: t => t,
48
+ dim: t => t,
49
+ italic: t => t,
50
+ underline: t => t,
51
+ inverse: t => t,
52
+ hidden: t => t,
53
+ strikethrough: t => t,
54
+ black: t => t,
55
+ red: t => t,
56
+ green: t => t,
57
+ yellow: t => t,
58
+ blue: t => t,
59
+ magenta: t => t,
60
+ cyan: t => t,
61
+ white: t => t,
62
+ gray: t => t,
63
+ grey: t => t
64
+ };
65
+ const applyStyle = (open, close, text) => `\u001b[${open}m${text}\u001b[${close}m`;
@@ -9,7 +9,7 @@ exports.parseCSS = parseCSS;
9
9
  exports.serializeSelector = serializeSelector;
10
10
  var css = _interopRequireWildcard(require("./cssTokenizer"));
11
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
13
  /**
14
14
  * Copyright (c) Microsoft Corporation.
15
15
  *
@@ -46,7 +46,7 @@ function parseCSS(selector, customNames) {
46
46
  tokens = css.tokenize(selector);
47
47
  if (!(tokens[tokens.length - 1] instanceof css.EOFToken)) tokens.push(new css.EOFToken());
48
48
  } catch (e) {
49
- const newMessage = e.message + ` while parsing selector "${selector}"`;
49
+ const newMessage = e.message + ` while parsing css selector "${selector}". Did you mean to CSS.escape it?`;
50
50
  const index = (e.stack || '').indexOf(e.message);
51
51
  if (index !== -1) e.stack = e.stack.substring(0, index) + newMessage + e.stack.substring(index + e.message.length);
52
52
  e.message = newMessage;
@@ -61,11 +61,11 @@ function parseCSS(selector, customNames) {
61
61
  // TODO: Consider treating these as strings?
62
62
  token instanceof css.URLToken || token instanceof css.PercentageToken;
63
63
  });
64
- if (unsupportedToken) throw new InvalidSelectorError(`Unsupported token "${unsupportedToken.toSource()}" while parsing selector "${selector}"`);
64
+ if (unsupportedToken) throw new InvalidSelectorError(`Unsupported token "${unsupportedToken.toSource()}" while parsing css selector "${selector}". Did you mean to CSS.escape it?`);
65
65
  let pos = 0;
66
66
  const names = new Set();
67
67
  function unexpected() {
68
- return new InvalidSelectorError(`Unexpected token "${tokens[pos].toSource()}" while parsing selector "${selector}"`);
68
+ return new InvalidSelectorError(`Unexpected token "${tokens[pos].toSource()}" while parsing css selector "${selector}". Did you mean to CSS.escape it?`);
69
69
  }
70
70
  function skipWhitespace() {
71
71
  while (tokens[pos] instanceof css.WhitespaceToken) pos++;
@@ -227,7 +227,7 @@ function parseCSS(selector, customNames) {
227
227
  }
228
228
  const result = consumeFunctionArguments();
229
229
  if (!isEOF()) throw unexpected();
230
- if (result.some(arg => typeof arg !== 'object' || !('simples' in arg))) throw new InvalidSelectorError(`Error while parsing selector "${selector}"`);
230
+ if (result.some(arg => typeof arg !== 'object' || !('simples' in arg))) throw new InvalidSelectorError(`Error while parsing css selector "${selector}". Did you mean to CSS.escape it?`);
231
231
  return {
232
232
  selector: result,
233
233
  names: Array.from(names)
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.headersArrayToObject = headersArrayToObject;
7
+ exports.headersObjectToArray = headersObjectToArray;
8
+ /**
9
+ * Copyright (c) Microsoft Corporation.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ function headersObjectToArray(headers, separator, setCookieSeparator) {
25
+ if (!setCookieSeparator) setCookieSeparator = separator;
26
+ const result = [];
27
+ for (const name in headers) {
28
+ const values = headers[name];
29
+ if (values === undefined) continue;
30
+ if (separator) {
31
+ const sep = name.toLowerCase() === 'set-cookie' ? setCookieSeparator : separator;
32
+ for (const value of values.split(sep)) result.push({
33
+ name,
34
+ value: value.trim()
35
+ });
36
+ } else {
37
+ result.push({
38
+ name,
39
+ value: values
40
+ });
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ function headersArrayToObject(headers, lowerCase) {
46
+ const result = {};
47
+ for (const {
48
+ name,
49
+ value
50
+ } of headers) result[lowerCase ? name.toLowerCase() : name] = value;
51
+ return result;
52
+ }