@checkly/playwright-core 1.41.2-beta.0

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 (305) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +1513 -0
  5. package/bin/PrintDeps.exe +0 -0
  6. package/bin/README.md +2 -0
  7. package/bin/install_media_pack.ps1 +5 -0
  8. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  9. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  10. package/bin/reinstall_chrome_beta_win.ps1 +23 -0
  11. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  12. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  13. package/bin/reinstall_chrome_stable_win.ps1 +23 -0
  14. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  15. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  16. package/bin/reinstall_msedge_beta_win.ps1 +22 -0
  17. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  18. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  19. package/bin/reinstall_msedge_dev_win.ps1 +22 -0
  20. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  21. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  22. package/bin/reinstall_msedge_stable_win.ps1 +23 -0
  23. package/browsers.json +64 -0
  24. package/cli.js +17 -0
  25. package/index.d.ts +17 -0
  26. package/index.js +33 -0
  27. package/index.mjs +28 -0
  28. package/lib/androidServerImpl.js +69 -0
  29. package/lib/browserServerImpl.js +92 -0
  30. package/lib/cli/driver.js +97 -0
  31. package/lib/cli/program.js +582 -0
  32. package/lib/cli/programWithTestStub.js +67 -0
  33. package/lib/client/accessibility.js +50 -0
  34. package/lib/client/android.js +473 -0
  35. package/lib/client/api.js +272 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +145 -0
  38. package/lib/client/browserContext.js +509 -0
  39. package/lib/client/browserType.js +233 -0
  40. package/lib/client/cdpSession.js +53 -0
  41. package/lib/client/channelOwner.js +229 -0
  42. package/lib/client/clientHelper.js +57 -0
  43. package/lib/client/clientInstrumentation.js +40 -0
  44. package/lib/client/connection.js +327 -0
  45. package/lib/client/consoleMessage.js +55 -0
  46. package/lib/client/coverage.js +41 -0
  47. package/lib/client/dialog.js +57 -0
  48. package/lib/client/download.js +62 -0
  49. package/lib/client/electron.js +130 -0
  50. package/lib/client/elementHandle.js +291 -0
  51. package/lib/client/errors.js +77 -0
  52. package/lib/client/events.js +93 -0
  53. package/lib/client/fetch.js +343 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +506 -0
  56. package/lib/client/harRouter.js +93 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +123 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +35 -0
  61. package/lib/client/locator.js +432 -0
  62. package/lib/client/network.js +601 -0
  63. package/lib/client/page.js +707 -0
  64. package/lib/client/playwright.js +74 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +135 -0
  68. package/lib/client/types.js +24 -0
  69. package/lib/client/video.js +51 -0
  70. package/lib/client/waiter.js +158 -0
  71. package/lib/client/webError.js +37 -0
  72. package/lib/client/worker.js +71 -0
  73. package/lib/client/writableStream.js +54 -0
  74. package/lib/common/socksProxy.js +569 -0
  75. package/lib/common/timeoutSettings.js +73 -0
  76. package/lib/common/types.js +5 -0
  77. package/lib/generated/consoleApiSource.js +7 -0
  78. package/lib/generated/injectedScriptSource.js +7 -0
  79. package/lib/generated/recorderSource.js +7 -0
  80. package/lib/generated/utilityScriptSource.js +7 -0
  81. package/lib/image_tools/colorUtils.js +98 -0
  82. package/lib/image_tools/compare.js +108 -0
  83. package/lib/image_tools/imageChannel.js +70 -0
  84. package/lib/image_tools/stats.js +102 -0
  85. package/lib/inProcessFactory.js +54 -0
  86. package/lib/inprocess.js +20 -0
  87. package/lib/outofprocess.js +67 -0
  88. package/lib/protocol/debug.js +27 -0
  89. package/lib/protocol/serializers.js +172 -0
  90. package/lib/protocol/transport.js +82 -0
  91. package/lib/protocol/validator.js +2599 -0
  92. package/lib/protocol/validatorPrimitives.js +139 -0
  93. package/lib/remote/playwrightConnection.js +274 -0
  94. package/lib/remote/playwrightServer.js +110 -0
  95. package/lib/server/accessibility.js +62 -0
  96. package/lib/server/android/android.js +441 -0
  97. package/lib/server/android/backendAdb.js +172 -0
  98. package/lib/server/artifact.js +104 -0
  99. package/lib/server/browser.js +129 -0
  100. package/lib/server/browserContext.js +609 -0
  101. package/lib/server/browserType.js +300 -0
  102. package/lib/server/chromium/appIcon.png +0 -0
  103. package/lib/server/chromium/chromium.js +346 -0
  104. package/lib/server/chromium/chromiumSwitches.js +41 -0
  105. package/lib/server/chromium/crAccessibility.js +237 -0
  106. package/lib/server/chromium/crBrowser.js +521 -0
  107. package/lib/server/chromium/crConnection.js +228 -0
  108. package/lib/server/chromium/crCoverage.js +246 -0
  109. package/lib/server/chromium/crDevTools.js +104 -0
  110. package/lib/server/chromium/crDragDrop.js +144 -0
  111. package/lib/server/chromium/crExecutionContext.js +156 -0
  112. package/lib/server/chromium/crInput.js +171 -0
  113. package/lib/server/chromium/crNetworkManager.js +723 -0
  114. package/lib/server/chromium/crPage.js +1173 -0
  115. package/lib/server/chromium/crPdf.js +147 -0
  116. package/lib/server/chromium/crProtocolHelper.js +131 -0
  117. package/lib/server/chromium/crServiceWorker.js +115 -0
  118. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  119. package/lib/server/chromium/videoRecorder.js +155 -0
  120. package/lib/server/console.js +59 -0
  121. package/lib/server/cookieStore.js +112 -0
  122. package/lib/server/debugController.js +236 -0
  123. package/lib/server/debugger.js +132 -0
  124. package/lib/server/deviceDescriptors.js +21 -0
  125. package/lib/server/deviceDescriptorsSource.json +1549 -0
  126. package/lib/server/dialog.js +70 -0
  127. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  128. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  129. package/lib/server/dispatchers/browserContextDispatcher.js +306 -0
  130. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  131. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  132. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  133. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  134. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  135. package/lib/server/dispatchers/dispatcher.js +400 -0
  136. package/lib/server/dispatchers/electronDispatcher.js +80 -0
  137. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  138. package/lib/server/dispatchers/frameDispatcher.js +287 -0
  139. package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
  140. package/lib/server/dispatchers/jsonPipeDispatcher.js +61 -0
  141. package/lib/server/dispatchers/localUtilsDispatcher.js +399 -0
  142. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  143. package/lib/server/dispatchers/pageDispatcher.js +363 -0
  144. package/lib/server/dispatchers/playwrightDispatcher.js +105 -0
  145. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  146. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  147. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  148. package/lib/server/dispatchers/writableStreamDispatcher.js +55 -0
  149. package/lib/server/dom.js +808 -0
  150. package/lib/server/download.js +53 -0
  151. package/lib/server/electron/electron.js +254 -0
  152. package/lib/server/electron/loader.js +57 -0
  153. package/lib/server/errors.js +68 -0
  154. package/lib/server/fetch.js +611 -0
  155. package/lib/server/fileChooser.js +42 -0
  156. package/lib/server/fileUploadUtils.js +71 -0
  157. package/lib/server/firefox/ffAccessibility.js +215 -0
  158. package/lib/server/firefox/ffBrowser.js +447 -0
  159. package/lib/server/firefox/ffConnection.js +168 -0
  160. package/lib/server/firefox/ffExecutionContext.js +138 -0
  161. package/lib/server/firefox/ffInput.js +150 -0
  162. package/lib/server/firefox/ffNetworkManager.js +231 -0
  163. package/lib/server/firefox/ffPage.js +558 -0
  164. package/lib/server/firefox/firefox.js +91 -0
  165. package/lib/server/formData.js +75 -0
  166. package/lib/server/frameSelectors.js +171 -0
  167. package/lib/server/frames.js +1597 -0
  168. package/lib/server/har/harRecorder.js +139 -0
  169. package/lib/server/har/harTracer.js +539 -0
  170. package/lib/server/helper.js +103 -0
  171. package/lib/server/index.js +96 -0
  172. package/lib/server/input.js +301 -0
  173. package/lib/server/instrumentation.js +74 -0
  174. package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
  175. package/lib/server/javascript.js +305 -0
  176. package/lib/server/launchApp.js +90 -0
  177. package/lib/server/macEditingCommands.js +139 -0
  178. package/lib/server/network.js +607 -0
  179. package/lib/server/page.js +793 -0
  180. package/lib/server/pipeTransport.js +85 -0
  181. package/lib/server/playwright.js +82 -0
  182. package/lib/server/progress.js +102 -0
  183. package/lib/server/protocolError.js +49 -0
  184. package/lib/server/recorder/codeGenerator.js +153 -0
  185. package/lib/server/recorder/csharp.js +310 -0
  186. package/lib/server/recorder/java.js +216 -0
  187. package/lib/server/recorder/javascript.js +229 -0
  188. package/lib/server/recorder/jsonl.js +47 -0
  189. package/lib/server/recorder/language.js +44 -0
  190. package/lib/server/recorder/python.js +275 -0
  191. package/lib/server/recorder/recorderActions.js +5 -0
  192. package/lib/server/recorder/recorderApp.js +181 -0
  193. package/lib/server/recorder/recorderUtils.js +48 -0
  194. package/lib/server/recorder/utils.js +45 -0
  195. package/lib/server/recorder.js +700 -0
  196. package/lib/server/registry/browserFetcher.js +168 -0
  197. package/lib/server/registry/dependencies.js +322 -0
  198. package/lib/server/registry/index.js +925 -0
  199. package/lib/server/registry/nativeDeps.js +383 -0
  200. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  201. package/lib/server/screenshotter.js +354 -0
  202. package/lib/server/selectors.js +73 -0
  203. package/lib/server/socksInterceptor.js +100 -0
  204. package/lib/server/trace/recorder/snapshotter.js +168 -0
  205. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  206. package/lib/server/trace/recorder/tracing.js +552 -0
  207. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  208. package/lib/server/trace/viewer/traceViewer.js +229 -0
  209. package/lib/server/transport.js +191 -0
  210. package/lib/server/types.js +24 -0
  211. package/lib/server/usKeyboardLayout.js +555 -0
  212. package/lib/server/webkit/webkit.js +87 -0
  213. package/lib/server/webkit/wkAccessibility.js +194 -0
  214. package/lib/server/webkit/wkBrowser.js +328 -0
  215. package/lib/server/webkit/wkConnection.js +173 -0
  216. package/lib/server/webkit/wkExecutionContext.js +146 -0
  217. package/lib/server/webkit/wkInput.js +169 -0
  218. package/lib/server/webkit/wkInterceptableRequest.js +158 -0
  219. package/lib/server/webkit/wkPage.js +1198 -0
  220. package/lib/server/webkit/wkProvisionalPage.js +59 -0
  221. package/lib/server/webkit/wkWorkers.js +104 -0
  222. package/lib/third_party/diff_match_patch.js +2222 -0
  223. package/lib/third_party/pixelmatch.js +255 -0
  224. package/lib/utils/ascii.js +31 -0
  225. package/lib/utils/comparators.js +171 -0
  226. package/lib/utils/crypto.js +33 -0
  227. package/lib/utils/debug.js +46 -0
  228. package/lib/utils/debugLogger.js +89 -0
  229. package/lib/utils/env.js +47 -0
  230. package/lib/utils/eventsHelper.js +38 -0
  231. package/lib/utils/fileUtils.js +66 -0
  232. package/lib/utils/glob.js +83 -0
  233. package/lib/utils/happy-eyeballs.js +154 -0
  234. package/lib/utils/headers.js +52 -0
  235. package/lib/utils/hostPlatform.js +124 -0
  236. package/lib/utils/httpServer.js +195 -0
  237. package/lib/utils/index.js +324 -0
  238. package/lib/utils/isomorphic/cssParser.js +250 -0
  239. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  240. package/lib/utils/isomorphic/locatorGenerators.js +651 -0
  241. package/lib/utils/isomorphic/locatorParser.js +179 -0
  242. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  243. package/lib/utils/isomorphic/selectorParser.js +397 -0
  244. package/lib/utils/isomorphic/stringUtils.js +107 -0
  245. package/lib/utils/isomorphic/traceUtils.js +39 -0
  246. package/lib/utils/linuxUtils.js +78 -0
  247. package/lib/utils/manualPromise.js +109 -0
  248. package/lib/utils/mimeType.js +29 -0
  249. package/lib/utils/multimap.js +75 -0
  250. package/lib/utils/network.js +189 -0
  251. package/lib/utils/processLauncher.js +248 -0
  252. package/lib/utils/profiler.js +53 -0
  253. package/lib/utils/rtti.js +41 -0
  254. package/lib/utils/semaphore.js +51 -0
  255. package/lib/utils/spawnAsync.js +45 -0
  256. package/lib/utils/stackTrace.js +123 -0
  257. package/lib/utils/task.js +58 -0
  258. package/lib/utils/time.js +37 -0
  259. package/lib/utils/timeoutRunner.js +131 -0
  260. package/lib/utils/traceUtils.js +44 -0
  261. package/lib/utils/userAgent.js +105 -0
  262. package/lib/utils/wsServer.js +125 -0
  263. package/lib/utils/zipFile.js +75 -0
  264. package/lib/utils/zones.js +99 -0
  265. package/lib/utilsBundle.js +81 -0
  266. package/lib/utilsBundleImpl/index.js +51 -0
  267. package/lib/utilsBundleImpl/xdg-open +1066 -0
  268. package/lib/vite/htmlReport/index.html +66 -0
  269. package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
  270. package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
  271. package/lib/vite/recorder/assets/codicon-zGuYmc9o.ttf +0 -0
  272. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +1 -0
  273. package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
  274. package/lib/vite/recorder/index.html +29 -0
  275. package/lib/vite/recorder/playwright-logo.svg +9 -0
  276. package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +24 -0
  277. package/lib/vite/traceViewer/assets/codeMirrorModule-fqJB1XDu.js +24 -0
  278. package/lib/vite/traceViewer/assets/codeMirrorModule-y3M3aAqy.js +24 -0
  279. package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +69 -0
  280. package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +69 -0
  281. package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +69 -0
  282. package/lib/vite/traceViewer/assets/xtermModule-Yt6xwiJ_.js +9 -0
  283. package/lib/vite/traceViewer/codeMirrorModule.Hs9-1ZG4.css +1 -0
  284. package/lib/vite/traceViewer/codicon.zGuYmc9o.ttf +0 -0
  285. package/lib/vite/traceViewer/index.-g_5lMbJ.css +1 -0
  286. package/lib/vite/traceViewer/index.4X7zDysg.js +2 -0
  287. package/lib/vite/traceViewer/index.HkJgzlGy.js +2 -0
  288. package/lib/vite/traceViewer/index.html +26 -0
  289. package/lib/vite/traceViewer/index.kRjx5sAJ.js +2 -0
  290. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  291. package/lib/vite/traceViewer/snapshot.html +21 -0
  292. package/lib/vite/traceViewer/sw.bundle.js +4 -0
  293. package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +10 -0
  294. package/lib/vite/traceViewer/uiMode.GTNzARcV.js +10 -0
  295. package/lib/vite/traceViewer/uiMode.html +17 -0
  296. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +1 -0
  297. package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +10 -0
  298. package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +1 -0
  299. package/lib/vite/traceViewer/xtermModule.0lwXJFHT.css +32 -0
  300. package/lib/zipBundle.js +25 -0
  301. package/lib/zipBundleImpl.js +5 -0
  302. package/package.json +43 -0
  303. package/types/protocol.d.ts +20304 -0
  304. package/types/structs.d.ts +45 -0
  305. package/types/types.d.ts +20626 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cssEscape = cssEscape;
7
+ exports.escapeForAttributeSelector = escapeForAttributeSelector;
8
+ exports.escapeForTextSelector = escapeForTextSelector;
9
+ exports.escapeWithQuotes = escapeWithQuotes;
10
+ exports.isString = isString;
11
+ exports.normalizeEscapedRegexQuotes = normalizeEscapedRegexQuotes;
12
+ exports.normalizeWhiteSpace = normalizeWhiteSpace;
13
+ exports.quoteCSSAttributeValue = quoteCSSAttributeValue;
14
+ exports.toSnakeCase = toSnakeCase;
15
+ exports.toTitleCase = toTitleCase;
16
+ exports.trimString = trimString;
17
+ exports.trimStringWithEllipsis = trimStringWithEllipsis;
18
+ /**
19
+ * Copyright (c) Microsoft Corporation.
20
+ *
21
+ * Licensed under the Apache License, Version 2.0 (the "License");
22
+ * you may not use this file except in compliance with the License.
23
+ * You may obtain a copy of the License at
24
+ *
25
+ * http://www.apache.org/licenses/LICENSE-2.0
26
+ *
27
+ * Unless required by applicable law or agreed to in writing, software
28
+ * distributed under the License is distributed on an "AS IS" BASIS,
29
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30
+ * See the License for the specific language governing permissions and
31
+ * limitations under the License.
32
+ */
33
+
34
+ // NOTE: this function should not be used to escape any selectors.
35
+ function escapeWithQuotes(text, char = '\'') {
36
+ const stringified = JSON.stringify(text);
37
+ const escapedText = stringified.substring(1, stringified.length - 1).replace(/\\"/g, '"');
38
+ if (char === '\'') return char + escapedText.replace(/[']/g, '\\\'') + char;
39
+ if (char === '"') return char + escapedText.replace(/["]/g, '\\"') + char;
40
+ if (char === '`') return char + escapedText.replace(/[`]/g, '`') + char;
41
+ throw new Error('Invalid escape char');
42
+ }
43
+ function isString(obj) {
44
+ return typeof obj === 'string' || obj instanceof String;
45
+ }
46
+ function toTitleCase(name) {
47
+ return name.charAt(0).toUpperCase() + name.substring(1);
48
+ }
49
+ function toSnakeCase(name) {
50
+ // E.g. ignoreHTTPSErrors => ignore_https_errors.
51
+ return name.replace(/([a-z0-9])([A-Z])/g, '$1_$2').replace(/([A-Z])([A-Z][a-z])/g, '$1_$2').toLowerCase();
52
+ }
53
+ function cssEscape(s) {
54
+ let result = '';
55
+ for (let i = 0; i < s.length; i++) result += cssEscapeOne(s, i);
56
+ return result;
57
+ }
58
+ function quoteCSSAttributeValue(text) {
59
+ return `"${cssEscape(text).replace(/\\ /g, ' ')}"`;
60
+ }
61
+ function cssEscapeOne(s, i) {
62
+ // https://drafts.csswg.org/cssom/#serialize-an-identifier
63
+ const c = s.charCodeAt(i);
64
+ if (c === 0x0000) return '\uFFFD';
65
+ if (c >= 0x0001 && c <= 0x001f || c >= 0x0030 && c <= 0x0039 && (i === 0 || i === 1 && s.charCodeAt(0) === 0x002d)) return '\\' + c.toString(16) + ' ';
66
+ if (i === 0 && c === 0x002d && s.length === 1) return '\\' + s.charAt(i);
67
+ if (c >= 0x0080 || c === 0x002d || c === 0x005f || c >= 0x0030 && c <= 0x0039 || c >= 0x0041 && c <= 0x005a || c >= 0x0061 && c <= 0x007a) return s.charAt(i);
68
+ return '\\' + s.charAt(i);
69
+ }
70
+ function normalizeWhiteSpace(text) {
71
+ return text.replace(/\u200b/g, '').trim().replace(/\s+/g, ' ');
72
+ }
73
+ function normalizeEscapedRegexQuotes(source) {
74
+ // This function reverses the effect of escapeRegexForSelector below.
75
+ // Odd number of backslashes followed by the quote -> remove unneeded backslash.
76
+ return source.replace(/(^|[^\\])(\\\\)*\\(['"`])/g, '$1$2$3');
77
+ }
78
+ function escapeRegexForSelector(re) {
79
+ // Unicode mode does not allow "identity character escapes", so we do not escape and
80
+ // hope that it does not contain quotes and/or >> signs.
81
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Character_escape
82
+ // TODO: rework RE usages in internal selectors away from literal representation to json, e.g. {source,flags}.
83
+ if (re.unicode || re.unicodeSets) return String(re);
84
+ // Even number of backslashes followed by the quote -> insert a backslash.
85
+ return String(re).replace(/(^|[^\\])(\\\\)*(["'`])/g, '$1$2\\$3').replace(/>>/g, '\\>\\>');
86
+ }
87
+ function escapeForTextSelector(text, exact) {
88
+ if (typeof text !== 'string') return escapeRegexForSelector(text);
89
+ return `${JSON.stringify(text)}${exact ? 's' : 'i'}`;
90
+ }
91
+ function escapeForAttributeSelector(value, exact) {
92
+ if (typeof value !== 'string') return escapeRegexForSelector(value);
93
+ // TODO: this should actually be
94
+ // cssEscape(value).replace(/\\ /g, ' ')
95
+ // However, our attribute selectors do not conform to CSS parsing spec,
96
+ // so we escape them differently.
97
+ return `"${value.replace(/\\/g, '\\\\').replace(/["]/g, '\\"')}"${exact ? 's' : 'i'}`;
98
+ }
99
+ function trimString(input, cap, suffix = '') {
100
+ if (input.length <= cap) return input;
101
+ const chars = [...input];
102
+ if (chars.length > cap) return chars.slice(0, cap - suffix.length).join('') + suffix;
103
+ return chars.join('');
104
+ }
105
+ function trimStringWithEllipsis(input, cap) {
106
+ return trimString(input, cap, '\u2026');
107
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseClientSideCallMetadata = parseClientSideCallMetadata;
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 parseClientSideCallMetadata(data) {
24
+ const result = new Map();
25
+ const {
26
+ files,
27
+ stacks
28
+ } = data;
29
+ for (const s of stacks) {
30
+ const [id, ff] = s;
31
+ result.set(`call@${id}`, ff.map(f => ({
32
+ file: files[f[0]],
33
+ line: f[1],
34
+ column: f[2],
35
+ function: f[3]
36
+ })));
37
+ }
38
+ return result;
39
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getLinuxDistributionInfo = getLinuxDistributionInfo;
7
+ exports.getLinuxDistributionInfoSync = getLinuxDistributionInfoSync;
8
+ var _fs = _interopRequireDefault(require("fs"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ /**
11
+ * Copyright 2017 Google Inc. All rights reserved.
12
+ * Modifications copyright (c) Microsoft Corporation.
13
+ *
14
+ * Licensed under the Apache License, Version 2.0 (the "License");
15
+ * you may not use this file except in compliance with the License.
16
+ * You may obtain a copy of the License at
17
+ *
18
+ * http://www.apache.org/licenses/LICENSE-2.0
19
+ *
20
+ * Unless required by applicable law or agreed to in writing, software
21
+ * distributed under the License is distributed on an "AS IS" BASIS,
22
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ * See the License for the specific language governing permissions and
24
+ * limitations under the License.
25
+ */
26
+
27
+ let didFailToReadOSRelease = false;
28
+ let osRelease;
29
+ async function getLinuxDistributionInfo() {
30
+ if (process.platform !== 'linux') return undefined;
31
+ if (!osRelease && !didFailToReadOSRelease) {
32
+ try {
33
+ var _fields$get, _fields$get2;
34
+ // List of /etc/os-release values for different distributions could be
35
+ // found here: https://gist.github.com/aslushnikov/8ceddb8288e4cf9db3039c02e0f4fb75
36
+ const osReleaseText = await _fs.default.promises.readFile('/etc/os-release', 'utf8');
37
+ const fields = parseOSReleaseText(osReleaseText);
38
+ osRelease = {
39
+ id: (_fields$get = fields.get('id')) !== null && _fields$get !== void 0 ? _fields$get : '',
40
+ version: (_fields$get2 = fields.get('version_id')) !== null && _fields$get2 !== void 0 ? _fields$get2 : ''
41
+ };
42
+ } catch (e) {
43
+ didFailToReadOSRelease = true;
44
+ }
45
+ }
46
+ return osRelease;
47
+ }
48
+ function getLinuxDistributionInfoSync() {
49
+ if (process.platform !== 'linux') return undefined;
50
+ if (!osRelease && !didFailToReadOSRelease) {
51
+ try {
52
+ var _fields$get3, _fields$get4;
53
+ // List of /etc/os-release values for different distributions could be
54
+ // found here: https://gist.github.com/aslushnikov/8ceddb8288e4cf9db3039c02e0f4fb75
55
+ const osReleaseText = _fs.default.readFileSync('/etc/os-release', 'utf8');
56
+ const fields = parseOSReleaseText(osReleaseText);
57
+ osRelease = {
58
+ id: (_fields$get3 = fields.get('id')) !== null && _fields$get3 !== void 0 ? _fields$get3 : '',
59
+ version: (_fields$get4 = fields.get('version_id')) !== null && _fields$get4 !== void 0 ? _fields$get4 : ''
60
+ };
61
+ } catch (e) {
62
+ didFailToReadOSRelease = true;
63
+ }
64
+ }
65
+ return osRelease;
66
+ }
67
+ function parseOSReleaseText(osReleaseText) {
68
+ const fields = new Map();
69
+ for (const line of osReleaseText.split('\n')) {
70
+ const tokens = line.split('=');
71
+ const name = tokens.shift();
72
+ let value = tokens.join('=').trim();
73
+ if (value.startsWith('"') && value.endsWith('"')) value = value.substring(1, value.length - 1);
74
+ if (!name) continue;
75
+ fields.set(name.toLowerCase(), value);
76
+ }
77
+ return fields;
78
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ManualPromise = exports.LongStandingScope = void 0;
7
+ var _stackTrace = require("./stackTrace");
8
+ let _Symbol$species, _Symbol$toStringTag;
9
+ /**
10
+ * Copyright (c) Microsoft Corporation.
11
+ *
12
+ * Licensed under the Apache License, Version 2.0 (the "License");
13
+ * you may not use this file except in compliance with the License.
14
+ * You may obtain a copy of the License at
15
+ *
16
+ * http://www.apache.org/licenses/LICENSE-2.0
17
+ *
18
+ * Unless required by applicable law or agreed to in writing, software
19
+ * distributed under the License is distributed on an "AS IS" BASIS,
20
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
+ * See the License for the specific language governing permissions and
22
+ * limitations under the License.
23
+ */
24
+ _Symbol$species = Symbol.species;
25
+ _Symbol$toStringTag = Symbol.toStringTag;
26
+ class ManualPromise extends Promise {
27
+ constructor() {
28
+ let resolve;
29
+ let reject;
30
+ super((f, r) => {
31
+ resolve = f;
32
+ reject = r;
33
+ });
34
+ this._resolve = void 0;
35
+ this._reject = void 0;
36
+ this._isDone = void 0;
37
+ this._isDone = false;
38
+ this._resolve = resolve;
39
+ this._reject = reject;
40
+ }
41
+ isDone() {
42
+ return this._isDone;
43
+ }
44
+ resolve(t) {
45
+ this._isDone = true;
46
+ this._resolve(t);
47
+ }
48
+ reject(e) {
49
+ this._isDone = true;
50
+ this._reject(e);
51
+ }
52
+ static get [_Symbol$species]() {
53
+ return Promise;
54
+ }
55
+ get [_Symbol$toStringTag]() {
56
+ return 'ManualPromise';
57
+ }
58
+ }
59
+ exports.ManualPromise = ManualPromise;
60
+ class LongStandingScope {
61
+ constructor() {
62
+ this._terminateError = void 0;
63
+ this._closeError = void 0;
64
+ this._terminatePromises = new Map();
65
+ this._isClosed = false;
66
+ }
67
+ reject(error) {
68
+ this._isClosed = true;
69
+ this._terminateError = error;
70
+ for (const p of this._terminatePromises.keys()) p.resolve(error);
71
+ }
72
+ close(error) {
73
+ this._isClosed = true;
74
+ this._closeError = error;
75
+ for (const [p, frames] of this._terminatePromises) p.resolve(cloneError(error, frames));
76
+ }
77
+ isClosed() {
78
+ return this._isClosed;
79
+ }
80
+ static async raceMultiple(scopes, promise) {
81
+ return Promise.race(scopes.map(s => s.race(promise)));
82
+ }
83
+ async race(promise) {
84
+ return this._race(Array.isArray(promise) ? promise : [promise], false);
85
+ }
86
+ async safeRace(promise, defaultValue) {
87
+ return this._race([promise], true, defaultValue);
88
+ }
89
+ async _race(promises, safe, defaultValue) {
90
+ const terminatePromise = new ManualPromise();
91
+ const frames = (0, _stackTrace.captureRawStack)();
92
+ if (this._terminateError) terminatePromise.resolve(this._terminateError);
93
+ if (this._closeError) terminatePromise.resolve(cloneError(this._closeError, frames));
94
+ this._terminatePromises.set(terminatePromise, frames);
95
+ try {
96
+ return await Promise.race([terminatePromise.then(e => safe ? defaultValue : Promise.reject(e)), ...promises]);
97
+ } finally {
98
+ this._terminatePromises.delete(terminatePromise);
99
+ }
100
+ }
101
+ }
102
+ exports.LongStandingScope = LongStandingScope;
103
+ function cloneError(error, frames) {
104
+ const clone = new Error();
105
+ clone.name = error.name;
106
+ clone.message = error.message;
107
+ clone.stack = [error.name + ':' + error.message, ...frames].join('\n');
108
+ return clone;
109
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isJsonMimeType = isJsonMimeType;
7
+ exports.isTextualMimeType = isTextualMimeType;
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 isJsonMimeType(mimeType) {
25
+ return !!mimeType.match(/^(application\/json|application\/.*?\+json|text\/(x-)?json)(;\s*charset=.*)?$/);
26
+ }
27
+ function isTextualMimeType(mimeType) {
28
+ return !!mimeType.match(/^(text\/.*?|application\/(json|(x-)?javascript|xml.*?|ecmascript|graphql|x-www-form-urlencoded)|image\/svg(\+xml)?|application\/.*?(\+json|\+xml))(;\s*charset=.*)?$/);
29
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MultiMap = void 0;
7
+ let _Symbol$iterator;
8
+ _Symbol$iterator = Symbol.iterator;
9
+ /**
10
+ * Copyright (c) Microsoft Corporation.
11
+ *
12
+ * Licensed under the Apache License, Version 2.0 (the "License");
13
+ * you may not use this file except in compliance with the License.
14
+ * You may obtain a copy of the License at
15
+ *
16
+ * http://www.apache.org/licenses/LICENSE-2.0
17
+ *
18
+ * Unless required by applicable law or agreed to in writing, software
19
+ * distributed under the License is distributed on an "AS IS" BASIS,
20
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
+ * See the License for the specific language governing permissions and
22
+ * limitations under the License.
23
+ */
24
+
25
+ class MultiMap {
26
+ constructor() {
27
+ this._map = void 0;
28
+ this._map = new Map();
29
+ }
30
+ set(key, value) {
31
+ let values = this._map.get(key);
32
+ if (!values) {
33
+ values = [];
34
+ this._map.set(key, values);
35
+ }
36
+ values.push(value);
37
+ }
38
+ get(key) {
39
+ return this._map.get(key) || [];
40
+ }
41
+ has(key) {
42
+ return this._map.has(key);
43
+ }
44
+ delete(key, value) {
45
+ const values = this._map.get(key);
46
+ if (!values) return;
47
+ if (values.includes(value)) this._map.set(key, values.filter(v => value !== v));
48
+ }
49
+ deleteAll(key) {
50
+ this._map.delete(key);
51
+ }
52
+ hasValue(key, value) {
53
+ const values = this._map.get(key);
54
+ if (!values) return false;
55
+ return values.includes(value);
56
+ }
57
+ get size() {
58
+ return this._map.size;
59
+ }
60
+ [_Symbol$iterator]() {
61
+ return this._map[Symbol.iterator]();
62
+ }
63
+ keys() {
64
+ return this._map.keys();
65
+ }
66
+ values() {
67
+ const result = [];
68
+ for (const key of this.keys()) result.push(...this.get(key));
69
+ return result;
70
+ }
71
+ clear() {
72
+ this._map.clear();
73
+ }
74
+ }
75
+ exports.MultiMap = MultiMap;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NET_DEFAULT_TIMEOUT = void 0;
7
+ exports.constructURLBasedOnBaseURL = constructURLBasedOnBaseURL;
8
+ exports.createHttpServer = createHttpServer;
9
+ exports.createHttpsServer = createHttpsServer;
10
+ exports.fetchData = fetchData;
11
+ exports.httpRequest = httpRequest;
12
+ exports.isURLAvailable = isURLAvailable;
13
+ exports.urlMatches = urlMatches;
14
+ exports.urlMatchesEqual = urlMatchesEqual;
15
+ var _http = _interopRequireDefault(require("http"));
16
+ var _https = _interopRequireDefault(require("https"));
17
+ var _utilsBundle = require("../utilsBundle");
18
+ var _url = _interopRequireDefault(require("url"));
19
+ var _rtti = require("./rtti");
20
+ var _glob = require("./glob");
21
+ var _happyEyeballs = require("./happy-eyeballs");
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ /**
24
+ * Copyright (c) Microsoft Corporation.
25
+ *
26
+ * Licensed under the Apache License, Version 2.0 (the "License");
27
+ * you may not use this file except in compliance with the License.
28
+ * You may obtain a copy of the License at
29
+ *
30
+ * http://www.apache.org/licenses/LICENSE-2.0
31
+ *
32
+ * Unless required by applicable law or agreed to in writing, software
33
+ * distributed under the License is distributed on an "AS IS" BASIS,
34
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
35
+ * See the License for the specific language governing permissions and
36
+ * limitations under the License.
37
+ */
38
+
39
+ const NET_DEFAULT_TIMEOUT = exports.NET_DEFAULT_TIMEOUT = 30_000;
40
+ function httpRequest(params, onResponse, onError) {
41
+ var _params$timeout;
42
+ const parsedUrl = _url.default.parse(params.url);
43
+ let options = {
44
+ ...parsedUrl,
45
+ agent: parsedUrl.protocol === 'https:' ? _happyEyeballs.httpsHappyEyeballsAgent : _happyEyeballs.httpHappyEyeballsAgent,
46
+ method: params.method || 'GET',
47
+ headers: params.headers
48
+ };
49
+ if (params.rejectUnauthorized !== undefined) options.rejectUnauthorized = params.rejectUnauthorized;
50
+ const timeout = (_params$timeout = params.timeout) !== null && _params$timeout !== void 0 ? _params$timeout : NET_DEFAULT_TIMEOUT;
51
+ const proxyURL = (0, _utilsBundle.getProxyForUrl)(params.url);
52
+ if (proxyURL) {
53
+ const parsedProxyURL = _url.default.parse(proxyURL);
54
+ if (params.url.startsWith('http:')) {
55
+ options = {
56
+ path: parsedUrl.href,
57
+ host: parsedProxyURL.hostname,
58
+ port: parsedProxyURL.port,
59
+ headers: options.headers,
60
+ method: options.method
61
+ };
62
+ } else {
63
+ parsedProxyURL.secureProxy = parsedProxyURL.protocol === 'https:';
64
+ options.agent = new _utilsBundle.HttpsProxyAgent(parsedProxyURL);
65
+ options.rejectUnauthorized = false;
66
+ }
67
+ }
68
+ const requestCallback = res => {
69
+ const statusCode = res.statusCode || 0;
70
+ if (statusCode >= 300 && statusCode < 400 && res.headers.location) httpRequest({
71
+ ...params,
72
+ url: new URL(res.headers.location, params.url).toString()
73
+ }, onResponse, onError);else onResponse(res);
74
+ };
75
+ const request = options.protocol === 'https:' ? _https.default.request(options, requestCallback) : _http.default.request(options, requestCallback);
76
+ request.on('error', onError);
77
+ if (timeout !== undefined) {
78
+ const rejectOnTimeout = () => {
79
+ onError(new Error(`Request to ${params.url} timed out after ${timeout}ms`));
80
+ request.abort();
81
+ };
82
+ if (timeout <= 0) {
83
+ rejectOnTimeout();
84
+ return;
85
+ }
86
+ request.setTimeout(timeout, rejectOnTimeout);
87
+ }
88
+ request.end(params.data);
89
+ }
90
+ function fetchData(params, onError) {
91
+ return new Promise((resolve, reject) => {
92
+ httpRequest(params, async response => {
93
+ if (response.statusCode !== 200) {
94
+ const error = onError ? await onError(params, response) : new Error(`fetch failed: server returned code ${response.statusCode}. URL: ${params.url}`);
95
+ reject(error);
96
+ return;
97
+ }
98
+ let body = '';
99
+ response.on('data', chunk => body += chunk);
100
+ response.on('error', error => reject(error));
101
+ response.on('end', () => resolve(body));
102
+ }, reject);
103
+ });
104
+ }
105
+ function urlMatchesEqual(match1, match2) {
106
+ if ((0, _rtti.isRegExp)(match1) && (0, _rtti.isRegExp)(match2)) return match1.source === match2.source && match1.flags === match2.flags;
107
+ return match1 === match2;
108
+ }
109
+ function urlMatches(baseURL, urlString, match) {
110
+ if (match === undefined || match === '') return true;
111
+ if ((0, _rtti.isString)(match) && !match.startsWith('*')) match = constructURLBasedOnBaseURL(baseURL, match);
112
+ if ((0, _rtti.isString)(match)) match = (0, _glob.globToRegex)(match);
113
+ if ((0, _rtti.isRegExp)(match)) return match.test(urlString);
114
+ if (typeof match === 'string' && match === urlString) return true;
115
+ const url = parsedURL(urlString);
116
+ if (!url) return false;
117
+ if (typeof match === 'string') return url.pathname === match;
118
+ if (typeof match !== 'function') throw new Error('url parameter should be string, RegExp or function');
119
+ return match(url);
120
+ }
121
+ function parsedURL(url) {
122
+ try {
123
+ return new URL(url);
124
+ } catch (e) {
125
+ return null;
126
+ }
127
+ }
128
+ function constructURLBasedOnBaseURL(baseURL, givenURL) {
129
+ try {
130
+ return new URL(givenURL, baseURL).toString();
131
+ } catch (e) {
132
+ return givenURL;
133
+ }
134
+ }
135
+ function createHttpServer(...args) {
136
+ const server = _http.default.createServer(...args);
137
+ decorateServer(server);
138
+ return server;
139
+ }
140
+ function createHttpsServer(...args) {
141
+ const server = _https.default.createServer(...args);
142
+ decorateServer(server);
143
+ return server;
144
+ }
145
+ async function isURLAvailable(url, ignoreHTTPSErrors, onLog, onStdErr) {
146
+ let statusCode = await httpStatusCode(url, ignoreHTTPSErrors, onLog, onStdErr);
147
+ if (statusCode === 404 && url.pathname === '/') {
148
+ const indexUrl = new URL(url);
149
+ indexUrl.pathname = '/index.html';
150
+ statusCode = await httpStatusCode(indexUrl, ignoreHTTPSErrors, onLog, onStdErr);
151
+ }
152
+ return statusCode >= 200 && statusCode < 404;
153
+ }
154
+ async function httpStatusCode(url, ignoreHTTPSErrors, onLog, onStdErr) {
155
+ return new Promise(resolve => {
156
+ onLog === null || onLog === void 0 || onLog(`HTTP HEAD: ${url}`);
157
+ httpRequest({
158
+ method: 'HEAD',
159
+ url: url.toString(),
160
+ headers: {
161
+ Accept: '*/*'
162
+ },
163
+ rejectUnauthorized: !ignoreHTTPSErrors
164
+ }, res => {
165
+ var _res$statusCode;
166
+ res.resume();
167
+ const statusCode = (_res$statusCode = res.statusCode) !== null && _res$statusCode !== void 0 ? _res$statusCode : 0;
168
+ onLog === null || onLog === void 0 || onLog(`HTTP Status: ${statusCode}`);
169
+ resolve(statusCode);
170
+ }, error => {
171
+ if (error.code === 'DEPTH_ZERO_SELF_SIGNED_CERT') onStdErr === null || onStdErr === void 0 || onStdErr(`[WebServer] Self-signed certificate detected. Try adding ignoreHTTPSErrors: true to config.webServer.`);
172
+ onLog === null || onLog === void 0 || onLog(`Error while checking if ${url} is available: ${error.message}`);
173
+ resolve(0);
174
+ });
175
+ });
176
+ }
177
+ function decorateServer(server) {
178
+ const sockets = new Set();
179
+ server.on('connection', socket => {
180
+ sockets.add(socket);
181
+ socket.once('close', () => sockets.delete(socket));
182
+ });
183
+ const close = server.close;
184
+ server.close = callback => {
185
+ for (const socket of sockets) socket.destroy();
186
+ sockets.clear();
187
+ return close.call(server, callback);
188
+ };
189
+ }