patchright-core 1.50.1 → 1.51.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 (242) hide show
  1. package/ThirdPartyNotices.txt +1 -43
  2. package/browsers.json +22 -10
  3. package/index.js +0 -1
  4. package/lib/androidServerImpl.js +4 -4
  5. package/lib/browserServerImpl.js +18 -9
  6. package/lib/cli/driver.js +6 -6
  7. package/lib/cli/program.js +9 -9
  8. package/lib/cli/programWithTestStub.js +2 -1
  9. package/lib/client/android.js +37 -58
  10. package/lib/client/artifact.js +4 -7
  11. package/lib/client/browser.js +10 -15
  12. package/lib/client/browserContext.js +77 -73
  13. package/lib/client/browserType.js +30 -64
  14. package/lib/client/channelOwner.js +23 -20
  15. package/lib/client/clientHelper.js +5 -7
  16. package/lib/client/clientStackTrace.js +65 -0
  17. package/lib/client/connection.js +46 -39
  18. package/lib/client/consoleMessage.js +4 -7
  19. package/lib/client/electron.js +10 -10
  20. package/lib/client/elementHandle.js +32 -33
  21. package/lib/client/errors.js +2 -2
  22. package/lib/client/eventEmitter.js +5 -8
  23. package/lib/client/fetch.js +60 -61
  24. package/lib/client/fileUtils.js +31 -0
  25. package/lib/client/frame.js +30 -29
  26. package/lib/client/harRouter.js +7 -9
  27. package/lib/client/jsHandle.js +3 -4
  28. package/lib/client/localUtils.js +24 -0
  29. package/lib/client/locator.js +37 -18
  30. package/lib/client/network.js +40 -40
  31. package/lib/client/page.js +59 -55
  32. package/lib/client/platform.js +71 -0
  33. package/lib/client/playwright.js +21 -1
  34. package/lib/client/selectors.js +8 -2
  35. package/lib/client/stream.js +2 -21
  36. package/lib/client/timeoutSettings.js +65 -0
  37. package/lib/client/tracing.js +10 -7
  38. package/lib/client/video.js +2 -2
  39. package/lib/client/waiter.js +5 -6
  40. package/lib/client/webSocket.js +106 -0
  41. package/lib/client/worker.js +12 -10
  42. package/lib/client/writableStream.js +2 -21
  43. package/lib/generated/consoleApiSource.js +1 -1
  44. package/lib/generated/injectedScriptSource.js +1 -1
  45. package/lib/inProcessFactory.js +6 -3
  46. package/lib/outofprocess.js +12 -8
  47. package/lib/protocol/validator.js +64 -13
  48. package/lib/protocol/validatorPrimitives.js +1 -2
  49. package/lib/remote/playwrightConnection.js +18 -10
  50. package/lib/remote/playwrightServer.js +20 -7
  51. package/lib/server/android/android.js +17 -14
  52. package/lib/server/android/backendAdb.js +14 -14
  53. package/lib/server/artifact.js +3 -3
  54. package/lib/server/bidi/bidiBrowser.js +2 -2
  55. package/lib/server/bidi/bidiChromium.js +4 -3
  56. package/lib/server/bidi/bidiConnection.js +1 -1
  57. package/lib/server/bidi/bidiExecutionContext.js +70 -40
  58. package/lib/server/bidi/bidiFirefox.js +4 -3
  59. package/lib/server/bidi/bidiInput.js +5 -8
  60. package/lib/server/bidi/bidiNetworkManager.js +3 -3
  61. package/lib/server/bidi/bidiOverCdp.js +2 -2
  62. package/lib/server/bidi/bidiPage.js +30 -46
  63. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  64. package/lib/server/browser.js +2 -2
  65. package/lib/server/browserContext.js +37 -40
  66. package/lib/server/browserType.js +18 -17
  67. package/lib/{utils/sequence.js → server/callLog.js} +18 -3
  68. package/lib/server/chromium/chromium.js +14 -14
  69. package/lib/server/chromium/chromiumSwitches.js +32 -1
  70. package/lib/server/chromium/crBrowser.js +15 -14
  71. package/lib/server/chromium/crConnection.js +2 -2
  72. package/lib/server/chromium/crCoverage.js +1 -1
  73. package/lib/server/chromium/crDevTools.js +1 -1
  74. package/lib/server/chromium/crDragDrop.js +1 -1
  75. package/lib/server/chromium/crExecutionContext.js +25 -17
  76. package/lib/server/chromium/crInput.js +2 -2
  77. package/lib/server/chromium/crNetworkManager.js +73 -26
  78. package/lib/server/chromium/crPage.js +22 -23
  79. package/lib/server/chromium/crPdf.js +1 -1
  80. package/lib/server/chromium/crProtocolHelper.js +3 -3
  81. package/lib/server/chromium/crServiceWorker.js +2 -2
  82. package/lib/server/chromium/videoRecorder.js +2 -2
  83. package/lib/server/clock.js +1 -1
  84. package/lib/server/codegen/javascript.js +1 -1
  85. package/lib/server/codegen/languages.js +2 -2
  86. package/lib/server/debugController.js +3 -3
  87. package/lib/server/deviceDescriptors.js +1 -1
  88. package/lib/server/deviceDescriptorsSource.json +131 -131
  89. package/lib/server/dispatchers/androidDispatcher.js +1 -1
  90. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  91. package/lib/server/dispatchers/browserContextDispatcher.js +19 -19
  92. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  93. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  94. package/lib/server/dispatchers/dispatcher.js +27 -25
  95. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  96. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  97. package/lib/server/dispatchers/frameDispatcher.js +4 -4
  98. package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
  99. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  100. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -298
  101. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  102. package/lib/server/dispatchers/pageDispatcher.js +11 -9
  103. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  104. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  105. package/lib/server/dispatchers/webSocketRouteDispatcher.js +8 -7
  106. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  107. package/lib/server/dom.js +18 -12
  108. package/lib/server/download.js +1 -1
  109. package/lib/server/electron/electron.js +17 -16
  110. package/lib/server/errors.js +1 -1
  111. package/lib/server/fetch.js +36 -25
  112. package/lib/server/fileUploadUtils.js +7 -4
  113. package/lib/server/firefox/ffBrowser.js +8 -2
  114. package/lib/server/firefox/ffConnection.js +1 -1
  115. package/lib/server/firefox/ffExecutionContext.js +25 -17
  116. package/lib/server/firefox/ffNetworkManager.js +2 -2
  117. package/lib/server/firefox/ffPage.js +15 -21
  118. package/lib/server/firefox/firefox.js +7 -9
  119. package/lib/server/frameSelectors.js +1 -1
  120. package/lib/server/frames.js +366 -209
  121. package/lib/server/har/harRecorder.js +4 -4
  122. package/lib/server/har/harTracer.js +7 -8
  123. package/lib/server/harBackend.js +157 -0
  124. package/lib/server/helper.js +2 -2
  125. package/lib/server/index.js +1 -8
  126. package/lib/server/input.js +1 -1
  127. package/lib/server/instrumentation.js +2 -2
  128. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  129. package/lib/server/javascript.js +46 -33
  130. package/lib/server/launchApp.js +2 -2
  131. package/lib/server/localUtils.js +203 -0
  132. package/lib/server/network.js +3 -3
  133. package/lib/server/page.js +41 -22
  134. package/lib/server/pipeTransport.js +1 -1
  135. package/lib/server/playwright.js +5 -5
  136. package/lib/server/progress.js +1 -1
  137. package/lib/server/protocolError.js +1 -1
  138. package/lib/server/recorder/contextRecorder.js +3 -3
  139. package/lib/server/recorder/recorderApp.js +18 -12
  140. package/lib/server/recorder/recorderCollection.js +3 -3
  141. package/lib/server/recorder/throttledFile.js +3 -4
  142. package/lib/server/recorder.js +7 -5
  143. package/lib/server/registry/browserFetcher.js +9 -7
  144. package/lib/server/registry/dependencies.js +15 -15
  145. package/lib/server/registry/index.js +38 -44
  146. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  147. package/lib/server/screenshotter.js +1 -1
  148. package/lib/server/selectors.js +3 -3
  149. package/lib/server/socksClientCertificatesInterceptor.js +8 -8
  150. package/lib/server/socksInterceptor.js +8 -5
  151. package/lib/server/storageScript.js +160 -0
  152. package/lib/{common → server}/timeoutSettings.js +6 -5
  153. package/lib/server/trace/recorder/snapshotter.js +9 -8
  154. package/lib/server/trace/recorder/tracing.js +40 -31
  155. package/lib/server/trace/test/inMemorySnapshotter.js +4 -4
  156. package/lib/server/trace/viewer/traceViewer.js +13 -5
  157. package/lib/server/transport.js +2 -2
  158. package/lib/{utils → server/utils}/comparators.js +4 -4
  159. package/lib/{utils → server/utils}/crypto.js +4 -4
  160. package/lib/{utils → server/utils}/debug.js +4 -12
  161. package/lib/{utils → server/utils}/debugLogger.js +2 -2
  162. package/lib/{utils → server/utils}/env.js +4 -0
  163. package/lib/{utils → server/utils}/expectUtils.js +1 -1
  164. package/lib/{utils → server/utils}/fileUtils.js +4 -5
  165. package/lib/{utils/happy-eyeballs.js → server/utils/happyEyeballs.js} +22 -24
  166. package/lib/{utils → server/utils}/hostPlatform.js +1 -1
  167. package/lib/{utils → server/utils}/httpServer.js +8 -8
  168. package/lib/{utils → server/utils}/linuxUtils.js +3 -23
  169. package/lib/{utils → server/utils}/network.js +4 -4
  170. package/lib/server/utils/nodePlatform.js +140 -0
  171. package/lib/{protocol/transport.js → server/utils/pipeTransport.js} +2 -2
  172. package/lib/{utils → server/utils}/processLauncher.js +5 -5
  173. package/lib/{utils → server/utils}/profiler.js +5 -6
  174. package/lib/{common → server/utils}/socksProxy.js +10 -9
  175. package/lib/{utils → server/utils}/userAgent.js +2 -16
  176. package/lib/{utils → server/utils}/wsServer.js +3 -3
  177. package/lib/{utils → server/utils}/zipFile.js +1 -1
  178. package/lib/{utils → server/utils}/zones.js +9 -24
  179. package/lib/server/webkit/webkit.js +4 -4
  180. package/lib/server/webkit/wkBrowser.js +4 -4
  181. package/lib/server/webkit/wkConnection.js +1 -1
  182. package/lib/server/webkit/wkExecutionContext.js +25 -17
  183. package/lib/server/webkit/wkInput.js +2 -2
  184. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  185. package/lib/server/webkit/wkPage.js +41 -40
  186. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  187. package/lib/server/webkit/wkWorkers.js +2 -2
  188. package/lib/utils/isomorphic/ariaSnapshot.js +2 -1
  189. package/lib/utils/isomorphic/assert.js +25 -0
  190. package/lib/utils/isomorphic/colors.js +65 -0
  191. package/lib/utils/isomorphic/cssParser.js +1 -1
  192. package/lib/utils/isomorphic/locatorGenerators.js +13 -1
  193. package/lib/utils/isomorphic/locatorParser.js +2 -2
  194. package/lib/utils/{manualPromise.js → isomorphic/manualPromise.js} +3 -5
  195. package/lib/utils/isomorphic/mimeType.js +11 -3
  196. package/lib/utils/{multimap.js → isomorphic/multimap.js} +1 -3
  197. package/lib/utils/{rtti.js → isomorphic/rtti.js} +2 -5
  198. package/lib/utils/isomorphic/stackTrace.js +169 -0
  199. package/lib/utils/isomorphic/stringUtils.js +1 -1
  200. package/lib/utils/{time.js → isomorphic/time.js} +1 -13
  201. package/lib/utils/{timeoutRunner.js → isomorphic/timeoutRunner.js} +4 -4
  202. package/lib/utils/isomorphic/traceUtils.js +23 -0
  203. package/lib/{utils/index.js → utils.js} +200 -121
  204. package/lib/utilsBundle.js +1 -25
  205. package/lib/utilsBundleImpl/index.js +114 -116
  206. package/lib/vite/htmlReport/index.html +20 -20
  207. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  208. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  209. package/lib/vite/recorder/index.html +1 -1
  210. package/lib/vite/traceViewer/assets/codeMirrorModule-DpJ-EmBQ.js +24 -0
  211. package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +259 -0
  212. package/lib/vite/traceViewer/assets/{xtermModule-c-SNdYZy.js → xtermModule-BoAIEibi.js} +7 -7
  213. package/lib/vite/traceViewer/defaultSettingsView.5fN5lw10.css +1 -0
  214. package/lib/vite/traceViewer/index.CUq7VgrV.js +2 -0
  215. package/lib/vite/traceViewer/index.html +3 -3
  216. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  217. package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +5 -0
  218. package/lib/vite/traceViewer/uiMode.html +3 -3
  219. package/lib/zipBundleImpl.js +4 -4
  220. package/package.json +7 -7
  221. package/types/protocol.d.ts +123 -99
  222. package/types/types.d.ts +91 -37
  223. package/lib/utils/stackTrace.js +0 -134
  224. package/lib/utils/traceUtils.js +0 -44
  225. package/lib/vite/recorder/assets/codeMirrorModule-CNAqJrkA.js +0 -24
  226. package/lib/vite/recorder/assets/index-DGS0JLxS.js +0 -184
  227. package/lib/vite/traceViewer/assets/codeMirrorModule-D55P_UuL.js +0 -24
  228. package/lib/vite/traceViewer/assets/defaultSettingsView-B-uNoFsX.js +0 -243
  229. package/lib/vite/traceViewer/defaultSettingsView.2xeEXCXv.css +0 -1
  230. package/lib/vite/traceViewer/index.BfvuujqP.js +0 -2
  231. package/lib/vite/traceViewer/uiMode.CStJu6jo.js +0 -5
  232. /package/lib/{utils → server/utils}/ascii.js +0 -0
  233. /package/lib/{utils → server/utils}/eventsHelper.js +0 -0
  234. /package/lib/{image_tools → server/utils/image_tools}/colorUtils.js +0 -0
  235. /package/lib/{image_tools → server/utils/image_tools}/compare.js +0 -0
  236. /package/lib/{image_tools → server/utils/image_tools}/imageChannel.js +0 -0
  237. /package/lib/{image_tools → server/utils/image_tools}/stats.js +0 -0
  238. /package/lib/{utils → server/utils}/spawnAsync.js +0 -0
  239. /package/lib/{utils → server/utils}/task.js +0 -0
  240. /package/lib/utils/{headers.js → isomorphic/headers.js} +0 -0
  241. /package/lib/utils/{semaphore.js → isomorphic/semaphore.js} +0 -0
  242. /package/lib/{common → utils/isomorphic}/types.js +0 -0
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.HttpServer = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
8
8
  var _path = _interopRequireDefault(require("path"));
9
- var _utilsBundle = require("../utilsBundle");
10
- var _debug = require("./debug");
11
- var _network = require("./network");
12
- var _manualPromise = require("./manualPromise");
9
+ var _utilsBundle = require("../../utilsBundle");
13
10
  var _crypto = require("./crypto");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ var _assert = require("../../utils/isomorphic/assert");
12
+ var _manualPromise = require("../../utils/isomorphic/manualPromise");
13
+ var _network = require("./network");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
15
  /**
16
16
  * Copyright (c) Microsoft Corporation.
17
17
  *
@@ -69,7 +69,7 @@ class HttpServer {
69
69
  }
70
70
  }
71
71
  createWebSocket(transport, guid) {
72
- (0, _debug.assert)(!this._wsGuid, 'can only create one main websocket transport per server');
72
+ (0, _assert.assert)(!this._wsGuid, 'can only create one main websocket transport per server');
73
73
  this._wsGuid = guid || (0, _crypto.createGuid)();
74
74
  const wss = new _utilsBundle.wsServer({
75
75
  server: this._server,
@@ -109,7 +109,7 @@ class HttpServer {
109
109
  return this._wsGuid;
110
110
  }
111
111
  async start(options = {}) {
112
- (0, _debug.assert)(!this._started, 'server already started');
112
+ (0, _assert.assert)(!this._started, 'server already started');
113
113
  this._started = true;
114
114
  const host = options.host || 'localhost';
115
115
  if (options.preferredPort) {
@@ -123,7 +123,7 @@ class HttpServer {
123
123
  await this._tryStart(options.port, host);
124
124
  }
125
125
  const address = this._server.address();
126
- (0, _debug.assert)(address, 'Could not bind server socket');
126
+ (0, _assert.assert)(address, 'Could not bind server socket');
127
127
  if (typeof address === 'string') {
128
128
  this._urlPrefixPrecise = address;
129
129
  this._urlPrefixHumanReadable = address;
@@ -3,10 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getLinuxDistributionInfo = getLinuxDistributionInfo;
7
6
  exports.getLinuxDistributionInfoSync = getLinuxDistributionInfoSync;
8
7
  var _fs = _interopRequireDefault(require("fs"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
9
  /**
11
10
  * Copyright 2017 Google Inc. All rights reserved.
12
11
  * Modifications copyright (c) Microsoft Corporation.
@@ -26,14 +25,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
26
25
 
27
26
  let didFailToReadOSRelease = false;
28
27
  let osRelease;
29
- async function getLinuxDistributionInfo() {
28
+ function getLinuxDistributionInfoSync() {
30
29
  if (process.platform !== 'linux') return undefined;
31
30
  if (!osRelease && !didFailToReadOSRelease) {
32
31
  try {
33
32
  var _fields$get, _fields$get2;
34
33
  // List of /etc/os-release values for different distributions could be
35
34
  // found here: https://gist.github.com/aslushnikov/8ceddb8288e4cf9db3039c02e0f4fb75
36
- const osReleaseText = await _fs.default.promises.readFile('/etc/os-release', 'utf8');
35
+ const osReleaseText = _fs.default.readFileSync('/etc/os-release', 'utf8');
37
36
  const fields = parseOSReleaseText(osReleaseText);
38
37
  osRelease = {
39
38
  id: (_fields$get = fields.get('id')) !== null && _fields$get !== void 0 ? _fields$get : '',
@@ -45,25 +44,6 @@ async function getLinuxDistributionInfo() {
45
44
  }
46
45
  return osRelease;
47
46
  }
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
47
  function parseOSReleaseText(osReleaseText) {
68
48
  const fields = new Map();
69
49
  for (const line of osReleaseText.split('\n')) {
@@ -11,12 +11,12 @@ exports.fetchData = fetchData;
11
11
  exports.httpRequest = httpRequest;
12
12
  exports.isURLAvailable = isURLAvailable;
13
13
  var _http = _interopRequireDefault(require("http"));
14
- var _https = _interopRequireDefault(require("https"));
15
14
  var _http2 = _interopRequireDefault(require("http2"));
16
- var _utilsBundle = require("../utilsBundle");
15
+ var _https = _interopRequireDefault(require("https"));
17
16
  var _url = _interopRequireDefault(require("url"));
18
- var _happyEyeballs = require("./happy-eyeballs");
19
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ var _utilsBundle = require("../../utilsBundle");
18
+ var _happyEyeballs = require("./happyEyeballs");
19
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
20
  /**
21
21
  * Copyright (c) Microsoft Corporation.
22
22
  *
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.nodePlatform = void 0;
7
+ exports.setBoxedStackPrefixes = setBoxedStackPrefixes;
8
+ var _crypto = _interopRequireDefault(require("crypto"));
9
+ var _fs = _interopRequireDefault(require("fs"));
10
+ var _path = _interopRequireDefault(require("path"));
11
+ var util = _interopRequireWildcard(require("util"));
12
+ var _stream = require("stream");
13
+ var _events = require("events");
14
+ var _utilsBundle = require("../../utilsBundle");
15
+ var _debugLogger = require("./debugLogger");
16
+ var _zones = require("./zones");
17
+ var _debug = require("./debug");
18
+ 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); }
19
+ 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; }
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
+ /**
22
+ * Copyright (c) Microsoft Corporation.
23
+ *
24
+ * Licensed under the Apache License, Version 2.0 (the "License");
25
+ * you may not use this file except in compliance with the License.
26
+ * You may obtain a copy of the License at
27
+ *
28
+ * http://www.apache.org/licenses/LICENSE-2.0
29
+ *
30
+ * Unless required by applicable law or agreed to in writing, software
31
+ * distributed under the License is distributed on an "AS IS" BASIS,
32
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33
+ * See the License for the specific language governing permissions and
34
+ * limitations under the License.
35
+ */
36
+
37
+ const pipelineAsync = util.promisify(_stream.pipeline);
38
+ class NodeZone {
39
+ constructor(zone) {
40
+ this._zone = void 0;
41
+ this._zone = zone;
42
+ }
43
+ push(data) {
44
+ return new NodeZone(this._zone.with('apiZone', data));
45
+ }
46
+ pop() {
47
+ return new NodeZone(this._zone.without('apiZone'));
48
+ }
49
+ run(func) {
50
+ return this._zone.run(func);
51
+ }
52
+ data() {
53
+ return this._zone.data('apiZone');
54
+ }
55
+ }
56
+ let boxedStackPrefixes = [];
57
+ function setBoxedStackPrefixes(prefixes) {
58
+ boxedStackPrefixes = prefixes;
59
+ }
60
+ const coreDir = _path.default.dirname(require.resolve('../../../package.json'));
61
+ const nodePlatform = exports.nodePlatform = {
62
+ name: 'node',
63
+ boxedStackPrefixes: () => {
64
+ if (process.env.PWDEBUGIMPL) return [];
65
+ return [coreDir, ...boxedStackPrefixes];
66
+ },
67
+ calculateSha1: text => {
68
+ const sha1 = _crypto.default.createHash('sha1');
69
+ sha1.update(text);
70
+ return Promise.resolve(sha1.digest('hex'));
71
+ },
72
+ colors: _utilsBundle.colors,
73
+ coreDir,
74
+ createGuid: () => _crypto.default.randomBytes(16).toString('hex'),
75
+ defaultMaxListeners: () => _events.EventEmitter.defaultMaxListeners,
76
+ fs: () => _fs.default,
77
+ env: process.env,
78
+ inspectCustom: util.inspect.custom,
79
+ isDebugMode: () => !!(0, _debug.debugMode)(),
80
+ isJSDebuggerAttached: () => !!require('inspector').url(),
81
+ isLogEnabled(name) {
82
+ return _debugLogger.debugLogger.isEnabled(name);
83
+ },
84
+ isUnderTest: () => (0, _debug.isUnderTest)(),
85
+ log(name, message) {
86
+ _debugLogger.debugLogger.log(name, message);
87
+ },
88
+ path: () => _path.default,
89
+ pathSeparator: _path.default.sep,
90
+ showInternalStackFrames: () => !!process.env.PWDEBUGIMPL,
91
+ async streamFile(path, stream) {
92
+ await pipelineAsync(_fs.default.createReadStream(path), stream);
93
+ },
94
+ streamReadable: channel => {
95
+ return new ReadableStreamImpl(channel);
96
+ },
97
+ streamWritable: channel => {
98
+ return new WritableStreamImpl(channel);
99
+ },
100
+ zones: {
101
+ current: () => new NodeZone((0, _zones.currentZone)()),
102
+ empty: new NodeZone(_zones.emptyZone)
103
+ }
104
+ };
105
+ class ReadableStreamImpl extends _stream.Readable {
106
+ constructor(channel) {
107
+ super();
108
+ this._channel = void 0;
109
+ this._channel = channel;
110
+ }
111
+ async _read() {
112
+ const result = await this._channel.read({
113
+ size: 1024 * 1024
114
+ });
115
+ if (result.binary.byteLength) this.push(result.binary);else this.push(null);
116
+ }
117
+ _destroy(error, callback) {
118
+ // Stream might be destroyed after the connection was closed.
119
+ this._channel.close().catch(e => null);
120
+ super._destroy(error, callback);
121
+ }
122
+ }
123
+ class WritableStreamImpl extends _stream.Writable {
124
+ constructor(channel) {
125
+ super();
126
+ this._channel = void 0;
127
+ this._channel = channel;
128
+ }
129
+ async _write(chunk, encoding, callback) {
130
+ const error = await this._channel.write({
131
+ binary: typeof chunk === 'string' ? Buffer.from(chunk) : chunk
132
+ }).catch(e => e);
133
+ callback(error || null);
134
+ }
135
+ async _final(callback) {
136
+ // Stream might be destroyed after the connection was closed.
137
+ const error = await this._channel.close().catch(e => e);
138
+ callback(error || null);
139
+ }
140
+ }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PipeTransport = void 0;
7
- var _utils = require("../utils");
7
+ var _task = require("./task");
8
8
  /**
9
9
  * Copyright (c) Microsoft Corporation.
10
10
  *
@@ -25,7 +25,7 @@ class PipeTransport {
25
25
  constructor(pipeWrite, pipeRead, closeable, endian = 'le') {
26
26
  this._pipeWrite = void 0;
27
27
  this._data = Buffer.from([]);
28
- this._waitForNextTask = (0, _utils.makeWaitForNextTask)();
28
+ this._waitForNextTask = (0, _task.makeWaitForNextTask)();
29
29
  this._closed = false;
30
30
  this._bytesLeft = 0;
31
31
  this.onmessage = void 0;
@@ -8,14 +8,14 @@ exports.gracefullyCloseAll = gracefullyCloseAll;
8
8
  exports.gracefullyCloseSet = void 0;
9
9
  exports.gracefullyProcessExitDoNotHang = gracefullyProcessExitDoNotHang;
10
10
  exports.launchProcess = launchProcess;
11
- var _fs = _interopRequireDefault(require("fs"));
12
11
  var childProcess = _interopRequireWildcard(require("child_process"));
12
+ var _fs = _interopRequireDefault(require("fs"));
13
13
  var readline = _interopRequireWildcard(require("readline"));
14
- var _ = require("./");
15
14
  var _fileUtils = require("./fileUtils");
15
+ var _utils = require("../../utils");
16
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
17
  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); }
17
- 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; }
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ 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; }
19
19
  /**
20
20
  * Copyright 2017 Google Inc. All rights reserved.
21
21
  * Modifications copyright (c) Microsoft Corporation.
@@ -55,7 +55,7 @@ let sigintHandlerCalled = false;
55
55
  function sigintHandler() {
56
56
  const exitWithCode130 = () => {
57
57
  // Give tests a chance to see that launched process did exit and dispatch any async calls.
58
- if ((0, _.isUnderTest)()) {
58
+ if ((0, _utils.isUnderTest)()) {
59
59
  // eslint-disable-next-line no-restricted-properties
60
60
  setTimeout(() => process.exit(130), 1000);
61
61
  } else {
@@ -5,10 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.startProfiling = startProfiling;
7
7
  exports.stopProfiling = stopProfiling;
8
- var fs = _interopRequireWildcard(require("fs"));
9
- var path = _interopRequireWildcard(require("path"));
10
- 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); }
11
- 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; }
8
+ var _fs = _interopRequireDefault(require("fs"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
11
  /**
13
12
  * Copyright Microsoft Corporation. All rights reserved.
14
13
  *
@@ -43,10 +42,10 @@ async function stopProfiling(profileName) {
43
42
  profile
44
43
  }) => {
45
44
  if (!err) {
46
- fs.mkdirSync(profileDir, {
45
+ _fs.default.mkdirSync(profileDir, {
47
46
  recursive: true
48
47
  });
49
- fs.writeFileSync(path.join(profileDir, profileName + '.json'), JSON.stringify(profile));
48
+ _fs.default.writeFileSync(_path.default.join(profileDir, profileName + '.json'), JSON.stringify(profile));
50
49
  }
51
50
  f();
52
51
  }));
@@ -7,10 +7,11 @@ exports.SocksProxyHandler = exports.SocksProxy = void 0;
7
7
  exports.parsePattern = parsePattern;
8
8
  var _events = _interopRequireDefault(require("events"));
9
9
  var _net = _interopRequireDefault(require("net"));
10
- var _debugLogger = require("../utils/debugLogger");
11
- var _happyEyeballs = require("../utils/happy-eyeballs");
12
- var _utils = require("../utils");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ var _assert = require("../../utils/isomorphic/assert");
11
+ var _crypto = require("./crypto");
12
+ var _debugLogger = require("./debugLogger");
13
+ var _happyEyeballs = require("./happyEyeballs");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  /**
15
16
  * Copyright (c) Microsoft Corporation.
16
17
  *
@@ -79,7 +80,7 @@ class SocksConnection {
79
80
  this._run().catch(() => this._socket.end());
80
81
  }
81
82
  async _run() {
82
- (0, _utils.assert)(await this._authenticate());
83
+ (0, _assert.assert)(await this._authenticate());
83
84
  const {
84
85
  command,
85
86
  host,
@@ -119,9 +120,9 @@ class SocksConnection {
119
120
  // +----+--------+
120
121
 
121
122
  const version = await this._readByte();
122
- (0, _utils.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
123
+ (0, _assert.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
123
124
  const nMethods = await this._readByte();
124
- (0, _utils.assert)(nMethods, 'No authentication methods specified');
125
+ (0, _assert.assert)(nMethods, 'No authentication methods specified');
125
126
  const methods = await this._readBytes(nMethods);
126
127
  for (const method of methods) {
127
128
  if (method === 0) {
@@ -148,7 +149,7 @@ class SocksConnection {
148
149
  // +----+-----+-------+------+----------+----------+
149
150
 
150
151
  const version = await this._readByte();
151
- (0, _utils.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
152
+ (0, _assert.assert)(version === 0x05, 'The VER field must be set to x05 for this version of the protocol, was ' + version);
152
153
  const command = await this._readByte();
153
154
  await this._readByte(); // skip reserved.
154
155
  const addressType = await this._readByte();
@@ -335,7 +336,7 @@ class SocksProxy extends _events.default {
335
336
  this._patternMatcher = () => false;
336
337
  this._directSockets = new Map();
337
338
  this._server = new _net.default.Server(socket => {
338
- const uid = (0, _utils.createGuid)();
339
+ const uid = (0, _crypto.createGuid)();
339
340
  const connection = new SocksConnection(uid, socket, this);
340
341
  this._connections.set(uid, connection);
341
342
  });
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.getEmbedderName = getEmbedderName;
7
7
  exports.getPlaywrightVersion = getPlaywrightVersion;
8
8
  exports.getUserAgent = getUserAgent;
9
- exports.userAgentVersionMatchesErrorMessage = userAgentVersionMatchesErrorMessage;
10
9
  var _child_process = require("child_process");
11
10
  var _os = _interopRequireDefault(require("os"));
12
11
  var _linuxUtils = require("../utils/linuxUtils");
13
- var _ascii = require("./ascii");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
13
  /**
16
14
  * Copyright (c) Microsoft Corporation.
17
15
  *
@@ -88,18 +86,6 @@ function getEmbedderName() {
88
86
  };
89
87
  }
90
88
  function getPlaywrightVersion(majorMinorOnly = false) {
91
- const version = process.env.PW_VERSION_OVERRIDE || require('./../../package.json').version;
89
+ const version = process.env.PW_VERSION_OVERRIDE || require('./../../../package.json').version;
92
90
  return majorMinorOnly ? version.split('.').slice(0, 2).join('.') : version;
93
- }
94
- function userAgentVersionMatchesErrorMessage(userAgent) {
95
- const match = userAgent.match(/^Playwright\/(\d+\.\d+\.\d+)/);
96
- if (!match) {
97
- // Cannot parse user agent - be lax.
98
- return;
99
- }
100
- const received = match[1].split('.').slice(0, 2).join('.');
101
- const expected = getPlaywrightVersion(true);
102
- if (received !== expected) {
103
- return (0, _ascii.wrapInASCIIBox)([`Playwright version mismatch:`, ` - server version: v${expected}`, ` - client version: v${received}`, ``, `If you are using VSCode extension, restart VSCode.`, ``, `If you are connecting to a remote service,`, `keep your local Playwright version in sync`, `with the remote service version.`, ``, `<3 Playwright Team`].join('\n'), 1);
104
- }
105
91
  }
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.perMessageDeflate = exports.WSServer = void 0;
7
- var _utils = require("../utils");
8
- var _utilsBundle = require("../utilsBundle");
7
+ var _network = require("./network");
8
+ var _utilsBundle = require("../../utilsBundle");
9
9
  var _debugLogger = require("./debugLogger");
10
10
  /**
11
11
  * Copyright (c) Microsoft Corporation.
@@ -44,7 +44,7 @@ class WSServer {
44
44
  }
45
45
  async listen(port = 0, hostname, path) {
46
46
  _debugLogger.debugLogger.log('server', `Server started at ${new Date()}`);
47
- const server = (0, _utils.createHttpServer)((request, response) => {
47
+ const server = (0, _network.createHttpServer)((request, response) => {
48
48
  if (request.method === 'GET' && request.url === '/json') {
49
49
  response.setHeader('Content-Type', 'application/json');
50
50
  response.end(JSON.stringify({
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ZipFile = void 0;
7
- var _zipBundle = require("../zipBundle");
7
+ var _zipBundle = require("../../zipBundle");
8
8
  /**
9
9
  * Copyright (c) Microsoft Corporation.
10
10
  *
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.zones = exports.Zone = void 0;
6
+ exports.Zone = void 0;
7
+ exports.currentZone = currentZone;
8
+ exports.emptyZone = void 0;
7
9
  var _async_hooks = require("async_hooks");
8
10
  /**
9
11
  * Copyright (c) Microsoft Corporation.
@@ -21,29 +23,8 @@ var _async_hooks = require("async_hooks");
21
23
  * limitations under the License.
22
24
  */
23
25
 
24
- class ZoneManager {
25
- constructor() {
26
- this._asyncLocalStorage = new _async_hooks.AsyncLocalStorage();
27
- this._emptyZone = Zone.createEmpty(this._asyncLocalStorage);
28
- }
29
- run(type, data, func) {
30
- return this.current().with(type, data).run(func);
31
- }
32
- zoneData(type) {
33
- return this.current().data(type);
34
- }
35
- current() {
36
- var _this$_asyncLocalStor;
37
- return (_this$_asyncLocalStor = this._asyncLocalStorage.getStore()) !== null && _this$_asyncLocalStor !== void 0 ? _this$_asyncLocalStor : this._emptyZone;
38
- }
39
- empty() {
40
- return this._emptyZone;
41
- }
42
- }
26
+ const asyncLocalStorage = new _async_hooks.AsyncLocalStorage();
43
27
  class Zone {
44
- static createEmpty(asyncLocalStorage) {
45
- return new Zone(asyncLocalStorage, new Map());
46
- }
47
28
  constructor(asyncLocalStorage, store) {
48
29
  this._asyncLocalStorage = void 0;
49
30
  this._data = void 0;
@@ -66,4 +47,8 @@ class Zone {
66
47
  }
67
48
  }
68
49
  exports.Zone = Zone;
69
- const zones = exports.zones = new ZoneManager();
50
+ const emptyZone = exports.emptyZone = new Zone(asyncLocalStorage, new Map());
51
+ function currentZone() {
52
+ var _asyncLocalStorage$ge;
53
+ return (_asyncLocalStorage$ge = asyncLocalStorage.getStore()) !== null && _asyncLocalStorage$ge !== void 0 ? _asyncLocalStorage$ge : emptyZone;
54
+ }
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.WebKit = void 0;
7
- var _wkBrowser = require("../webkit/wkBrowser");
8
7
  var _path = _interopRequireDefault(require("path"));
9
8
  var _wkConnection = require("./wkConnection");
9
+ var _ascii = require("../utils/ascii");
10
10
  var _browserType = require("../browserType");
11
- var _utils = require("../../utils");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ var _wkBrowser = require("../webkit/wkBrowser");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  /**
14
14
  * Copyright 2017 Google Inc. All rights reserved.
15
15
  * Modifications copyright (c) Microsoft Corporation.
@@ -42,7 +42,7 @@ class WebKit extends _browserType.BrowserType {
42
42
  }
43
43
  doRewriteStartupLog(error) {
44
44
  if (!error.logs) return error;
45
- if (error.logs.includes('Failed to open display') || error.logs.includes('cannot open display')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
45
+ if (error.logs.includes('Failed to open display') || error.logs.includes('cannot open display')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
46
46
  return error;
47
47
  }
48
48
  attemptToGracefullyCloseBrowser(transport) {
@@ -4,15 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.WKBrowserContext = exports.WKBrowser = void 0;
7
+ var _utils = require("../../utils");
7
8
  var _browser = require("../browser");
8
9
  var _browserContext = require("../browserContext");
9
- var _utils = require("../../utils");
10
10
  var network = _interopRequireWildcard(require("../network"));
11
11
  var _wkConnection = require("./wkConnection");
12
12
  var _wkPage = require("./wkPage");
13
13
  var _errors = require("../errors");
14
14
  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); }
15
- 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; }
15
+ 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; }
16
16
  /**
17
17
  * Copyright 2017 Google Inc. All rights reserved.
18
18
  * Modifications copyright (c) Microsoft Corporation.
@@ -30,8 +30,8 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
30
30
  * limitations under the License.
31
31
  */
32
32
 
33
- const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15';
34
- const BROWSER_VERSION = '18.2';
33
+ const DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.4 Safari/605.1.15';
34
+ const BROWSER_VERSION = '18.4';
35
35
  class WKBrowser extends _browser.Browser {
36
36
  static async connect(parent, transport, options) {
37
37
  const browser = new WKBrowser(parent, transport, options);
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.kPageProxyMessageReceived = exports.kBrowserCloseMessageId = exports.WKSession = exports.WKConnection = void 0;
7
7
  var _events = require("events");
8
8
  var _utils = require("../../utils");
9
- var _debugLogger = require("../../utils/debugLogger");
9
+ var _debugLogger = require("../utils/debugLogger");
10
10
  var _helper = require("../helper");
11
11
  var _protocolError = require("../protocolError");
12
12
  /**