@checkly/playwright-core 1.42.17 → 1.47.20-alpha
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.
- package/ThirdPartyNotices.txt +144 -109
- package/browsers.json +15 -25
- package/lib/androidServerImpl.js +1 -1
- package/lib/browserServerImpl.js +1 -1
- package/lib/cli/driver.js +1 -3
- package/lib/cli/program.js +5 -10
- package/lib/client/android.js +1 -1
- package/lib/client/api.js +7 -0
- package/lib/client/browserContext.js +37 -5
- package/lib/client/browserType.js +19 -11
- package/lib/client/channelOwner.js +19 -16
- package/lib/client/clientInstrumentation.js +17 -7
- package/lib/client/clock.js +68 -0
- package/lib/client/connection.js +9 -6
- package/lib/client/electron.js +7 -5
- package/lib/client/elementHandle.js +44 -14
- package/lib/client/eventEmitter.js +314 -0
- package/lib/client/fetch.js +81 -28
- package/lib/client/frame.js +2 -4
- package/lib/client/jsHandle.js +7 -1
- package/lib/client/locator.js +9 -0
- package/lib/client/network.js +12 -9
- package/lib/client/page.js +45 -23
- package/lib/client/playwright.js +3 -0
- package/lib/client/tracing.js +7 -4
- package/lib/common/socksProxy.js +2 -2
- package/lib/generated/clockSource.js +7 -0
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/recorderSource.js +1 -1
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/protocol/serializers.js +12 -11
- package/lib/protocol/validator.js +137 -55
- package/lib/server/bidi/bidiBrowser.js +296 -0
- package/lib/server/bidi/bidiConnection.js +206 -0
- package/lib/server/bidi/bidiExecutionContext.js +162 -0
- package/lib/server/bidi/bidiFirefox.js +110 -0
- package/lib/server/bidi/bidiInput.js +174 -0
- package/lib/server/bidi/bidiNetworkManager.js +304 -0
- package/lib/server/bidi/bidiPage.js +456 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
- package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
- package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
- package/lib/server/browser.js +9 -1
- package/lib/server/browserContext.js +97 -22
- package/lib/server/browserType.js +27 -20
- package/lib/server/chromium/chromium.js +30 -15
- package/lib/server/chromium/chromiumSwitches.js +6 -3
- package/lib/server/chromium/crBrowser.js +11 -17
- package/lib/server/chromium/crConnection.js +2 -2
- package/lib/server/chromium/crDragDrop.js +28 -29
- package/lib/server/chromium/crNetworkManager.js +130 -84
- package/lib/server/chromium/crPage.js +34 -79
- package/lib/server/chromium/crProtocolHelper.js +3 -1
- package/lib/server/chromium/crServiceWorker.js +20 -23
- package/lib/server/chromium/videoRecorder.js +1 -1
- package/lib/server/clock.js +125 -0
- package/lib/server/codegen/csharp.js +299 -0
- package/lib/server/codegen/java.js +235 -0
- package/lib/server/codegen/javascript.js +223 -0
- package/lib/server/codegen/jsonl.js +47 -0
- package/lib/server/codegen/language.js +76 -0
- package/lib/server/codegen/languages.js +30 -0
- package/lib/server/codegen/python.js +265 -0
- package/lib/server/codegen/types.js +5 -0
- package/lib/server/debugController.js +3 -5
- package/lib/server/deviceDescriptors.js +9 -4
- package/lib/server/deviceDescriptorsSource.json +239 -119
- package/lib/server/dispatchers/androidDispatcher.js +1 -1
- package/lib/server/dispatchers/browserContextDispatcher.js +51 -7
- package/lib/server/dispatchers/dispatcher.js +36 -40
- package/lib/server/dispatchers/frameDispatcher.js +1 -2
- package/lib/server/dispatchers/jsHandleDispatcher.js +1 -1
- package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -6
- package/lib/server/dispatchers/localUtilsDispatcher.js +19 -5
- package/lib/server/dispatchers/networkDispatchers.js +2 -2
- package/lib/server/dispatchers/pageDispatcher.js +5 -2
- package/lib/server/dispatchers/playwrightDispatcher.js +1 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +8 -5
- package/lib/server/dom.js +90 -53
- package/lib/server/electron/electron.js +21 -4
- package/lib/server/fetch.js +74 -25
- package/lib/server/fileUploadUtils.js +7 -3
- package/lib/server/firefox/ffBrowser.js +36 -25
- package/lib/server/firefox/ffConnection.js +2 -2
- package/lib/server/firefox/ffNetworkManager.js +6 -4
- package/lib/server/firefox/ffPage.js +22 -24
- package/lib/server/firefox/firefox.js +25 -6
- package/lib/server/frameSelectors.js +2 -2
- package/lib/server/frames.js +205 -159
- package/lib/server/har/harTracer.js +4 -12
- package/lib/server/helper.js +3 -3
- package/lib/server/index.js +18 -0
- package/lib/server/input.js +18 -8
- package/lib/server/instrumentation.js +0 -4
- package/lib/server/isomorphic/utilityScriptSerializers.js +19 -5
- package/lib/server/javascript.js +3 -2
- package/lib/server/launchApp.js +3 -2
- package/lib/server/network.js +14 -4
- package/lib/server/page.js +75 -46
- package/lib/server/playwright.js +5 -2
- package/lib/server/recorder/codeGenerator.js +2 -1
- package/lib/server/recorder/contextRecorder.js +316 -0
- package/lib/server/recorder/csharp.js +2 -1
- package/lib/server/recorder/java.js +2 -1
- package/lib/server/recorder/javascript.js +2 -1
- package/lib/server/recorder/jsonl.js +2 -1
- package/lib/server/recorder/language.js +2 -1
- package/lib/server/recorder/python.js +2 -1
- package/lib/server/recorder/recorderApp.js +14 -5
- package/lib/server/recorder/recorderCollection.js +127 -0
- package/lib/server/recorder/recorderRunner.js +177 -0
- package/lib/server/recorder/recorderUtils.js +23 -0
- package/lib/server/recorder/throttledFile.js +46 -0
- package/lib/server/recorder/utils.js +2 -1
- package/lib/server/recorder.js +42 -418
- package/lib/server/registry/index.js +99 -100
- package/lib/server/registry/nativeDeps.js +107 -0
- package/lib/server/screenshotter.js +6 -12
- package/lib/server/socksClientCertificatesInterceptor.js +328 -0
- package/lib/server/trace/recorder/snapshotter.js +4 -1
- package/lib/server/trace/recorder/tracing.js +27 -96
- package/lib/server/trace/viewer/traceViewer.js +54 -67
- package/lib/server/transport.js +1 -1
- package/lib/server/webkit/webkit.js +5 -5
- package/lib/server/webkit/wkBrowser.js +14 -14
- package/lib/server/webkit/wkConnection.js +3 -3
- package/lib/server/webkit/wkInterceptableRequest.js +8 -4
- package/lib/server/webkit/wkPage.js +52 -34
- package/lib/server/webkit/wkProvisionalPage.js +36 -1
- package/lib/utils/crypto.js +141 -0
- package/lib/utils/debugLogger.js +2 -0
- package/lib/utils/env.js +4 -2
- package/lib/utils/expectUtils.js +33 -0
- package/lib/utils/fileUtils.js +140 -1
- package/lib/utils/glob.js +2 -1
- package/lib/utils/happy-eyeballs.js +29 -2
- package/lib/utils/hostPlatform.js +13 -4
- package/lib/utils/httpServer.js +54 -13
- package/lib/utils/index.js +53 -31
- package/lib/utils/isomorphic/cssTokenizer.js +1 -1
- package/lib/utils/isomorphic/locatorParser.js +1 -1
- package/lib/utils/isomorphic/mimeType.js +29 -0
- package/lib/utils/isomorphic/stringUtils.js +28 -1
- package/lib/utils/isomorphic/urlMatch.js +120 -0
- package/lib/utils/mimeType.js +2 -1
- package/lib/utils/network.js +7 -35
- package/lib/utils/stackTrace.js +2 -4
- package/lib/utils/timeoutRunner.js +11 -76
- package/lib/utils/zones.js +23 -60
- package/lib/utilsBundle.js +2 -1
- package/lib/utilsBundleImpl/index.js +33 -31
- package/lib/vite/htmlReport/index.html +12 -12
- package/lib/vite/recorder/assets/codeMirrorModule-C-fQ5QZD.js +24 -0
- package/lib/vite/recorder/assets/{codicon-zGuYmc9o.ttf → codicon-DCmgc-ay.ttf} +0 -0
- package/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
- package/lib/vite/recorder/assets/index-D-5S5PPN.js +47 -0
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-5yiV-3wl.js +16831 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-B7Z3vq11.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-C6p3E9Zg.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-CqYUz5ms.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-Dx6AXgMV.js +16838 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-T_sdMrbM.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
- package/lib/vite/traceViewer/assets/testServerConnection-D-tXL3sj.js +224 -0
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
- package/lib/vite/traceViewer/assets/workbench-Bjkiwcr1.js +19119 -0
- package/lib/vite/traceViewer/assets/workbench-C43LWZEX.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-C5OQh9VX.js +19119 -0
- package/lib/vite/traceViewer/assets/workbench-DrQjKdyE.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-caTaZnzx.js +72 -0
- package/lib/vite/traceViewer/assets/workbench-u2lRPMOT.js +72 -0
- package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
- package/lib/vite/traceViewer/assets/xtermModule-CZ7sDYXB.js +6529 -0
- package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
- package/lib/vite/traceViewer/codeMirrorModule.Cy8X9Wtw.css +344 -0
- package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/embedded.BQq6Psnz.js +104 -0
- package/lib/vite/traceViewer/embedded.BVDVQOzc.js +2 -0
- package/lib/vite/traceViewer/embedded.Bn8Ptzv6.js +2 -0
- package/lib/vite/traceViewer/embedded.CvhnUgIi.js +2 -0
- package/lib/vite/traceViewer/embedded.D27cnKiB.js +104 -0
- package/lib/vite/traceViewer/embedded.DPqrDeET.js +2 -0
- package/lib/vite/traceViewer/embedded.DjZq4InJ.css +68 -0
- package/lib/vite/traceViewer/embedded.html +16 -0
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
- package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
- package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
- package/lib/vite/traceViewer/index.B8dgQwuN.js +2 -0
- package/lib/vite/traceViewer/index.BGj8jY3H.js +2 -0
- package/lib/vite/traceViewer/index.C0EgJ4oW.js +195 -0
- package/lib/vite/traceViewer/index.CUpI-BFe.js +195 -0
- package/lib/vite/traceViewer/{index.-g_5lMbJ.css → index.CrbWWHbf.css} +1 -1
- package/lib/vite/traceViewer/index.QanXxRUb.css +131 -0
- package/lib/vite/traceViewer/index._cX8k4co.js +2 -0
- package/lib/vite/traceViewer/index.html +5 -4
- package/lib/vite/traceViewer/index.pMAN88y-.js +2 -0
- package/lib/vite/traceViewer/snapshot.html +1 -1
- package/lib/vite/traceViewer/sw.bundle.js +3 -4
- package/lib/vite/traceViewer/uiMode.D-tg1Oci.js +1730 -0
- package/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
- package/lib/vite/traceViewer/uiMode.DKjMBMlc.js +1730 -0
- package/lib/vite/traceViewer/uiMode.DVWUEIHq.css +1424 -0
- package/lib/vite/traceViewer/uiMode.DVrL7a1K.js +10 -0
- package/lib/vite/traceViewer/uiMode.Dg9oJCQU.js +10 -0
- package/lib/vite/traceViewer/uiMode.DwZAzstF.js +10 -0
- package/lib/vite/traceViewer/uiMode.html +5 -4
- package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
- package/lib/vite/traceViewer/uiMode.jY2s-9ps.js +10 -0
- package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
- package/lib/vite/traceViewer/workbench.B3X2QtYa.css +3702 -0
- package/lib/vite/traceViewer/workbench.DyTpxWVb.css +1 -0
- package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
- package/lib/vite/traceViewer/xtermModule.4oRVGWQ-.css +209 -0
- package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
- package/package.json +2 -2
- package/types/protocol.d.ts +960 -78
- package/types/structs.d.ts +1 -1
- package/types/types.d.ts +3083 -2448
- package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +0 -24
- package/lib/vite/recorder/assets/index-ljsTwXtJ.css +0 -1
- package/lib/vite/recorder/assets/index-yg8ypzl6.js +0 -47
- package/lib/vite/traceViewer/assets/codeMirrorModule-0bpaqixv.js +0 -24
- package/lib/vite/traceViewer/assets/wsPort-_JBDEilC.js +0 -69
- package/lib/vite/traceViewer/index.u51inEcm.js +0 -2
- package/lib/vite/traceViewer/uiMode.Fb0bNA4H.js +0 -10
- package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +0 -1
- package/lib/vite/traceViewer/wsPort.zR1WIy9-.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-Hs9-1ZG4.css → codeMirrorModule-ez37Vkbh.css} +0 -0
- /package/lib/vite/traceViewer/assets/{xtermModule-Yt6xwiJ_.js → xtermModule-BeNbaIVa.js} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.Hs9-1ZG4.css → codeMirrorModule.ez37Vkbh.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.0lwXJFHT.css → xtermModule.DSXBckUd.css} +0 -0
package/lib/utils/index.js
CHANGED
|
@@ -47,6 +47,17 @@ Object.keys(_debug).forEach(function (key) {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
});
|
|
50
|
+
var _debugLogger = require("./debugLogger");
|
|
51
|
+
Object.keys(_debugLogger).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _debugLogger[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _debugLogger[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
50
61
|
var _env = require("./env");
|
|
51
62
|
Object.keys(_env).forEach(function (key) {
|
|
52
63
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -69,25 +80,25 @@ Object.keys(_eventsHelper).forEach(function (key) {
|
|
|
69
80
|
}
|
|
70
81
|
});
|
|
71
82
|
});
|
|
72
|
-
var
|
|
73
|
-
Object.keys(
|
|
83
|
+
var _expectUtils = require("./expectUtils");
|
|
84
|
+
Object.keys(_expectUtils).forEach(function (key) {
|
|
74
85
|
if (key === "default" || key === "__esModule") return;
|
|
75
|
-
if (key in exports && exports[key] ===
|
|
86
|
+
if (key in exports && exports[key] === _expectUtils[key]) return;
|
|
76
87
|
Object.defineProperty(exports, key, {
|
|
77
88
|
enumerable: true,
|
|
78
89
|
get: function () {
|
|
79
|
-
return
|
|
90
|
+
return _expectUtils[key];
|
|
80
91
|
}
|
|
81
92
|
});
|
|
82
93
|
});
|
|
83
|
-
var
|
|
84
|
-
Object.keys(
|
|
94
|
+
var _fileUtils = require("./fileUtils");
|
|
95
|
+
Object.keys(_fileUtils).forEach(function (key) {
|
|
85
96
|
if (key === "default" || key === "__esModule") return;
|
|
86
|
-
if (key in exports && exports[key] ===
|
|
97
|
+
if (key in exports && exports[key] === _fileUtils[key]) return;
|
|
87
98
|
Object.defineProperty(exports, key, {
|
|
88
99
|
enumerable: true,
|
|
89
100
|
get: function () {
|
|
90
|
-
return
|
|
101
|
+
return _fileUtils[key];
|
|
91
102
|
}
|
|
92
103
|
});
|
|
93
104
|
});
|
|
@@ -135,7 +146,18 @@ Object.keys(_manualPromise).forEach(function (key) {
|
|
|
135
146
|
}
|
|
136
147
|
});
|
|
137
148
|
});
|
|
138
|
-
var
|
|
149
|
+
var _locatorGenerators = require("./isomorphic/locatorGenerators");
|
|
150
|
+
Object.keys(_locatorGenerators).forEach(function (key) {
|
|
151
|
+
if (key === "default" || key === "__esModule") return;
|
|
152
|
+
if (key in exports && exports[key] === _locatorGenerators[key]) return;
|
|
153
|
+
Object.defineProperty(exports, key, {
|
|
154
|
+
enumerable: true,
|
|
155
|
+
get: function () {
|
|
156
|
+
return _locatorGenerators[key];
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
var _mimeType = require("./isomorphic/mimeType");
|
|
139
161
|
Object.keys(_mimeType).forEach(function (key) {
|
|
140
162
|
if (key === "default" || key === "__esModule") return;
|
|
141
163
|
if (key in exports && exports[key] === _mimeType[key]) return;
|
|
@@ -146,6 +168,28 @@ Object.keys(_mimeType).forEach(function (key) {
|
|
|
146
168
|
}
|
|
147
169
|
});
|
|
148
170
|
});
|
|
171
|
+
var _stringUtils = require("./isomorphic/stringUtils");
|
|
172
|
+
Object.keys(_stringUtils).forEach(function (key) {
|
|
173
|
+
if (key === "default" || key === "__esModule") return;
|
|
174
|
+
if (key in exports && exports[key] === _stringUtils[key]) return;
|
|
175
|
+
Object.defineProperty(exports, key, {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
get: function () {
|
|
178
|
+
return _stringUtils[key];
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
var _urlMatch = require("./isomorphic/urlMatch");
|
|
183
|
+
Object.keys(_urlMatch).forEach(function (key) {
|
|
184
|
+
if (key === "default" || key === "__esModule") return;
|
|
185
|
+
if (key in exports && exports[key] === _urlMatch[key]) return;
|
|
186
|
+
Object.defineProperty(exports, key, {
|
|
187
|
+
enumerable: true,
|
|
188
|
+
get: function () {
|
|
189
|
+
return _urlMatch[key];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
149
193
|
var _multimap = require("./multimap");
|
|
150
194
|
Object.keys(_multimap).forEach(function (key) {
|
|
151
195
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -321,26 +365,4 @@ Object.keys(_zones).forEach(function (key) {
|
|
|
321
365
|
return _zones[key];
|
|
322
366
|
}
|
|
323
367
|
});
|
|
324
|
-
});
|
|
325
|
-
var _locatorGenerators = require("./isomorphic/locatorGenerators");
|
|
326
|
-
Object.keys(_locatorGenerators).forEach(function (key) {
|
|
327
|
-
if (key === "default" || key === "__esModule") return;
|
|
328
|
-
if (key in exports && exports[key] === _locatorGenerators[key]) return;
|
|
329
|
-
Object.defineProperty(exports, key, {
|
|
330
|
-
enumerable: true,
|
|
331
|
-
get: function () {
|
|
332
|
-
return _locatorGenerators[key];
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
var _stringUtils = require("./isomorphic/stringUtils");
|
|
337
|
-
Object.keys(_stringUtils).forEach(function (key) {
|
|
338
|
-
if (key === "default" || key === "__esModule") return;
|
|
339
|
-
if (key in exports && exports[key] === _stringUtils[key]) return;
|
|
340
|
-
Object.defineProperty(exports, key, {
|
|
341
|
-
enumerable: true,
|
|
342
|
-
get: function () {
|
|
343
|
-
return _stringUtils[key];
|
|
344
|
-
}
|
|
345
|
-
});
|
|
346
368
|
});
|
|
@@ -387,7 +387,7 @@ function tokenize(str1) {
|
|
|
387
387
|
throw new Error('Internal error');
|
|
388
388
|
};
|
|
389
389
|
const consumeEscape = function () {
|
|
390
|
-
// Assume the
|
|
390
|
+
// Assume the current character is the \
|
|
391
391
|
// and the next code point is not a newline.
|
|
392
392
|
consume();
|
|
393
393
|
if (hexdigit(code)) {
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.locatorOrSelectorAsSelector = locatorOrSelectorAsSelector;
|
|
7
|
-
var _stringUtils = require("
|
|
7
|
+
var _stringUtils = require("./stringUtils");
|
|
8
8
|
var _locatorGenerators = require("./locatorGenerators");
|
|
9
9
|
var _selectorParser = require("./selectorParser");
|
|
10
10
|
/**
|
|
@@ -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
|
+
}
|
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.cacheNormalizedWhitespaces = cacheNormalizedWhitespaces;
|
|
6
7
|
exports.cssEscape = cssEscape;
|
|
7
8
|
exports.escapeForAttributeSelector = escapeForAttributeSelector;
|
|
8
9
|
exports.escapeForTextSelector = escapeForTextSelector;
|
|
10
|
+
exports.escapeHTML = escapeHTML;
|
|
11
|
+
exports.escapeHTMLAttribute = escapeHTMLAttribute;
|
|
9
12
|
exports.escapeRegExp = escapeRegExp;
|
|
10
13
|
exports.escapeWithQuotes = escapeWithQuotes;
|
|
11
14
|
exports.isString = isString;
|
|
@@ -68,8 +71,19 @@ function cssEscapeOne(s, i) {
|
|
|
68
71
|
if (c >= 0x0080 || c === 0x002d || c === 0x005f || c >= 0x0030 && c <= 0x0039 || c >= 0x0041 && c <= 0x005a || c >= 0x0061 && c <= 0x007a) return s.charAt(i);
|
|
69
72
|
return '\\' + s.charAt(i);
|
|
70
73
|
}
|
|
74
|
+
let normalizedWhitespaceCache;
|
|
75
|
+
function cacheNormalizedWhitespaces() {
|
|
76
|
+
normalizedWhitespaceCache = new Map();
|
|
77
|
+
}
|
|
71
78
|
function normalizeWhiteSpace(text) {
|
|
72
|
-
|
|
79
|
+
var _normalizedWhitespace;
|
|
80
|
+
let result = (_normalizedWhitespace = normalizedWhitespaceCache) === null || _normalizedWhitespace === void 0 ? void 0 : _normalizedWhitespace.get(text);
|
|
81
|
+
if (result === undefined) {
|
|
82
|
+
var _normalizedWhitespace2;
|
|
83
|
+
result = text.replace(/\u200b/g, '').trim().replace(/\s+/g, ' ');
|
|
84
|
+
(_normalizedWhitespace2 = normalizedWhitespaceCache) === null || _normalizedWhitespace2 === void 0 || _normalizedWhitespace2.set(text, result);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
73
87
|
}
|
|
74
88
|
function normalizeEscapedRegexQuotes(source) {
|
|
75
89
|
// This function reverses the effect of escapeRegexForSelector below.
|
|
@@ -109,4 +123,17 @@ function trimStringWithEllipsis(input, cap) {
|
|
|
109
123
|
function escapeRegExp(s) {
|
|
110
124
|
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
|
|
111
125
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
|
|
126
|
+
}
|
|
127
|
+
const escaped = {
|
|
128
|
+
'&': '&',
|
|
129
|
+
'<': '<',
|
|
130
|
+
'>': '>',
|
|
131
|
+
'"': '"',
|
|
132
|
+
'\'': '''
|
|
133
|
+
};
|
|
134
|
+
function escapeHTMLAttribute(s) {
|
|
135
|
+
return s.replace(/[&<>"']/ug, char => escaped[char]);
|
|
136
|
+
}
|
|
137
|
+
function escapeHTML(s) {
|
|
138
|
+
return s.replace(/[&<]/ug, char => escaped[char]);
|
|
112
139
|
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.constructURLBasedOnBaseURL = constructURLBasedOnBaseURL;
|
|
7
|
+
exports.globToRegex = globToRegex;
|
|
8
|
+
exports.urlMatches = urlMatches;
|
|
9
|
+
exports.urlMatchesEqual = urlMatchesEqual;
|
|
10
|
+
var _stringUtils = require("./stringUtils");
|
|
11
|
+
/**
|
|
12
|
+
* 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
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping
|
|
28
|
+
const escapedChars = new Set(['$', '^', '+', '.', '*', '(', ')', '|', '\\', '?', '{', '}', '[', ']']);
|
|
29
|
+
function globToRegex(glob) {
|
|
30
|
+
const tokens = ['^'];
|
|
31
|
+
let inGroup = false;
|
|
32
|
+
for (let i = 0; i < glob.length; ++i) {
|
|
33
|
+
const c = glob[i];
|
|
34
|
+
if (c === '\\' && i + 1 < glob.length) {
|
|
35
|
+
const char = glob[++i];
|
|
36
|
+
tokens.push(escapedChars.has(char) ? '\\' + char : char);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (c === '*') {
|
|
40
|
+
const beforeDeep = glob[i - 1];
|
|
41
|
+
let starCount = 1;
|
|
42
|
+
while (glob[i + 1] === '*') {
|
|
43
|
+
starCount++;
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
const afterDeep = glob[i + 1];
|
|
47
|
+
const isDeep = starCount > 1 && (beforeDeep === '/' || beforeDeep === undefined) && (afterDeep === '/' || afterDeep === undefined);
|
|
48
|
+
if (isDeep) {
|
|
49
|
+
tokens.push('((?:[^/]*(?:\/|$))*)');
|
|
50
|
+
i++;
|
|
51
|
+
} else {
|
|
52
|
+
tokens.push('([^/]*)');
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
switch (c) {
|
|
57
|
+
case '?':
|
|
58
|
+
tokens.push('.');
|
|
59
|
+
break;
|
|
60
|
+
case '[':
|
|
61
|
+
tokens.push('[');
|
|
62
|
+
break;
|
|
63
|
+
case ']':
|
|
64
|
+
tokens.push(']');
|
|
65
|
+
break;
|
|
66
|
+
case '{':
|
|
67
|
+
inGroup = true;
|
|
68
|
+
tokens.push('(');
|
|
69
|
+
break;
|
|
70
|
+
case '}':
|
|
71
|
+
inGroup = false;
|
|
72
|
+
tokens.push(')');
|
|
73
|
+
break;
|
|
74
|
+
case ',':
|
|
75
|
+
if (inGroup) {
|
|
76
|
+
tokens.push('|');
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
tokens.push('\\' + c);
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
tokens.push(escapedChars.has(c) ? '\\' + c : c);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
tokens.push('$');
|
|
86
|
+
return new RegExp(tokens.join(''));
|
|
87
|
+
}
|
|
88
|
+
function isRegExp(obj) {
|
|
89
|
+
return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';
|
|
90
|
+
}
|
|
91
|
+
function urlMatchesEqual(match1, match2) {
|
|
92
|
+
if (isRegExp(match1) && isRegExp(match2)) return match1.source === match2.source && match1.flags === match2.flags;
|
|
93
|
+
return match1 === match2;
|
|
94
|
+
}
|
|
95
|
+
function urlMatches(baseURL, urlString, match) {
|
|
96
|
+
if (match === undefined || match === '') return true;
|
|
97
|
+
if ((0, _stringUtils.isString)(match) && !match.startsWith('*')) match = constructURLBasedOnBaseURL(baseURL, match);
|
|
98
|
+
if ((0, _stringUtils.isString)(match)) match = globToRegex(match);
|
|
99
|
+
if (isRegExp(match)) return match.test(urlString);
|
|
100
|
+
if (typeof match === 'string' && match === urlString) return true;
|
|
101
|
+
const url = parsedURL(urlString);
|
|
102
|
+
if (!url) return false;
|
|
103
|
+
if (typeof match === 'string') return url.pathname === match;
|
|
104
|
+
if (typeof match !== 'function') throw new Error('url parameter should be string, RegExp or function');
|
|
105
|
+
return match(url);
|
|
106
|
+
}
|
|
107
|
+
function parsedURL(url) {
|
|
108
|
+
try {
|
|
109
|
+
return new URL(url);
|
|
110
|
+
} catch (e) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function constructURLBasedOnBaseURL(baseURL, givenURL) {
|
|
115
|
+
try {
|
|
116
|
+
return new URL(givenURL, baseURL).toString();
|
|
117
|
+
} catch (e) {
|
|
118
|
+
return givenURL;
|
|
119
|
+
}
|
|
120
|
+
}
|
package/lib/utils/mimeType.js
CHANGED
|
@@ -26,4 +26,5 @@ function isJsonMimeType(mimeType) {
|
|
|
26
26
|
}
|
|
27
27
|
function isTextualMimeType(mimeType) {
|
|
28
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
|
-
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=mimeType.js.map
|
package/lib/utils/network.js
CHANGED
|
@@ -4,20 +4,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.NET_DEFAULT_TIMEOUT = void 0;
|
|
7
|
-
exports.
|
|
7
|
+
exports.createHttp2Server = createHttp2Server;
|
|
8
8
|
exports.createHttpServer = createHttpServer;
|
|
9
9
|
exports.createHttpsServer = createHttpsServer;
|
|
10
10
|
exports.fetchData = fetchData;
|
|
11
11
|
exports.httpRequest = httpRequest;
|
|
12
12
|
exports.isURLAvailable = isURLAvailable;
|
|
13
|
-
exports.urlMatches = urlMatches;
|
|
14
|
-
exports.urlMatchesEqual = urlMatchesEqual;
|
|
15
13
|
var _http = _interopRequireDefault(require("http"));
|
|
16
14
|
var _https = _interopRequireDefault(require("https"));
|
|
15
|
+
var _http2 = _interopRequireDefault(require("http2"));
|
|
17
16
|
var _utilsBundle = require("../utilsBundle");
|
|
18
17
|
var _url = _interopRequireDefault(require("url"));
|
|
19
|
-
var _rtti = require("./rtti");
|
|
20
|
-
var _glob = require("./glob");
|
|
21
18
|
var _happyEyeballs = require("./happy-eyeballs");
|
|
22
19
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
20
|
/**
|
|
@@ -102,36 +99,6 @@ function fetchData(params, onError) {
|
|
|
102
99
|
}, reject);
|
|
103
100
|
});
|
|
104
101
|
}
|
|
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
102
|
function createHttpServer(...args) {
|
|
136
103
|
const server = _http.default.createServer(...args);
|
|
137
104
|
decorateServer(server);
|
|
@@ -142,6 +109,11 @@ function createHttpsServer(...args) {
|
|
|
142
109
|
decorateServer(server);
|
|
143
110
|
return server;
|
|
144
111
|
}
|
|
112
|
+
function createHttp2Server(...args) {
|
|
113
|
+
const server = _http2.default.createSecureServer(...args);
|
|
114
|
+
decorateServer(server);
|
|
115
|
+
return server;
|
|
116
|
+
}
|
|
145
117
|
async function isURLAvailable(url, ignoreHTTPSErrors, onLog, onStdErr) {
|
|
146
118
|
let statusCode = await httpStatusCode(url, ignoreHTTPSErrors, onLog, onStdErr);
|
|
147
119
|
if (statusCode === 404 && url.pathname === '/') {
|
package/lib/utils/stackTrace.js
CHANGED
|
@@ -40,7 +40,6 @@ function rewriteErrorMessage(e, newMessage) {
|
|
|
40
40
|
return e;
|
|
41
41
|
}
|
|
42
42
|
const CORE_DIR = _path.default.resolve(__dirname, '..', '..');
|
|
43
|
-
const COVERAGE_PATH = _path.default.join(CORE_DIR, '..', '..', 'tests', 'config', 'coverage.js');
|
|
44
43
|
const internalStackPrefixes = [CORE_DIR];
|
|
45
44
|
const addInternalStackPrefix = prefix => internalStackPrefixes.push(prefix);
|
|
46
45
|
exports.addInternalStackPrefix = addInternalStackPrefix;
|
|
@@ -52,13 +51,12 @@ function captureRawStack() {
|
|
|
52
51
|
Error.stackTraceLimit = stackTraceLimit;
|
|
53
52
|
return stack.split('\n');
|
|
54
53
|
}
|
|
55
|
-
function captureLibraryStackTrace(
|
|
56
|
-
const stack =
|
|
54
|
+
function captureLibraryStackTrace() {
|
|
55
|
+
const stack = captureRawStack();
|
|
57
56
|
const isTesting = (0, _.isUnderTest)();
|
|
58
57
|
let parsedFrames = stack.map(line => {
|
|
59
58
|
const frame = (0, _utilsBundle.parseStackTraceLine)(line);
|
|
60
59
|
if (!frame || !frame.file) return null;
|
|
61
|
-
if (!process.env.PWDEBUGIMPL && isTesting && frame.file.includes(COVERAGE_PATH)) return null;
|
|
62
60
|
const isPlaywrightLibrary = frame.file.startsWith(CORE_DIR);
|
|
63
61
|
const parsed = {
|
|
64
62
|
frame,
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.TimeoutRunnerError = exports.TimeoutRunner = exports.MaxTime = void 0;
|
|
7
6
|
exports.pollAgainstDeadline = pollAgainstDeadline;
|
|
8
7
|
exports.raceAgainstDeadline = raceAgainstDeadline;
|
|
9
|
-
var _manualPromise = require("./manualPromise");
|
|
10
8
|
var _ = require("./");
|
|
11
9
|
/**
|
|
12
10
|
* Copyright (c) Microsoft Corporation.
|
|
@@ -24,85 +22,22 @@ var _ = require("./");
|
|
|
24
22
|
* limitations under the License.
|
|
25
23
|
*/
|
|
26
24
|
|
|
27
|
-
class TimeoutRunnerError extends Error {}
|
|
28
|
-
exports.TimeoutRunnerError = TimeoutRunnerError;
|
|
29
|
-
const MaxTime = exports.MaxTime = 2147483647; // 2^31-1
|
|
30
|
-
|
|
31
|
-
class TimeoutRunner {
|
|
32
|
-
constructor(timeout) {
|
|
33
|
-
this._running = void 0;
|
|
34
|
-
this._timeout = void 0;
|
|
35
|
-
this._elapsed = void 0;
|
|
36
|
-
this._deadline = MaxTime;
|
|
37
|
-
this._timeout = timeout;
|
|
38
|
-
this._elapsed = 0;
|
|
39
|
-
}
|
|
40
|
-
async run(cb) {
|
|
41
|
-
const running = this._running = {
|
|
42
|
-
lastElapsedSync: (0, _.monotonicTime)(),
|
|
43
|
-
timer: undefined,
|
|
44
|
-
timeoutPromise: new _manualPromise.ManualPromise()
|
|
45
|
-
};
|
|
46
|
-
try {
|
|
47
|
-
const resultPromise = Promise.race([cb(), running.timeoutPromise]);
|
|
48
|
-
this._updateTimeout(running, this._timeout);
|
|
49
|
-
return await resultPromise;
|
|
50
|
-
} finally {
|
|
51
|
-
this._updateTimeout(running, 0);
|
|
52
|
-
if (this._running === running) this._running = undefined;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
interrupt() {
|
|
56
|
-
if (this._running) this._updateTimeout(this._running, -1);
|
|
57
|
-
}
|
|
58
|
-
elapsed() {
|
|
59
|
-
this._syncElapsedAndStart();
|
|
60
|
-
return this._elapsed;
|
|
61
|
-
}
|
|
62
|
-
deadline() {
|
|
63
|
-
return this._deadline;
|
|
64
|
-
}
|
|
65
|
-
updateTimeout(timeout, elapsed) {
|
|
66
|
-
this._timeout = timeout;
|
|
67
|
-
if (elapsed !== undefined) {
|
|
68
|
-
this._syncElapsedAndStart();
|
|
69
|
-
this._elapsed = elapsed;
|
|
70
|
-
}
|
|
71
|
-
if (this._running) this._updateTimeout(this._running, timeout);
|
|
72
|
-
}
|
|
73
|
-
_syncElapsedAndStart() {
|
|
74
|
-
if (this._running) {
|
|
75
|
-
const now = (0, _.monotonicTime)();
|
|
76
|
-
this._elapsed += now - this._running.lastElapsedSync;
|
|
77
|
-
this._running.lastElapsedSync = now;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
_updateTimeout(running, timeout) {
|
|
81
|
-
if (running.timer) {
|
|
82
|
-
clearTimeout(running.timer);
|
|
83
|
-
running.timer = undefined;
|
|
84
|
-
}
|
|
85
|
-
this._syncElapsedAndStart();
|
|
86
|
-
this._deadline = timeout ? (0, _.monotonicTime)() + timeout : MaxTime;
|
|
87
|
-
if (timeout === 0) return;
|
|
88
|
-
timeout = timeout - this._elapsed;
|
|
89
|
-
if (timeout <= 0) running.timeoutPromise.reject(new TimeoutRunnerError());else running.timer = setTimeout(() => running.timeoutPromise.reject(new TimeoutRunnerError()), timeout);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
exports.TimeoutRunner = TimeoutRunner;
|
|
93
25
|
async function raceAgainstDeadline(cb, deadline) {
|
|
94
|
-
|
|
95
|
-
|
|
26
|
+
let timer;
|
|
27
|
+
return Promise.race([cb().then(result => {
|
|
96
28
|
return {
|
|
97
|
-
result
|
|
29
|
+
result,
|
|
98
30
|
timedOut: false
|
|
99
31
|
};
|
|
100
|
-
}
|
|
101
|
-
|
|
32
|
+
}), new Promise(resolve => {
|
|
33
|
+
const kMaxDeadline = 2147483647; // 2^31-1
|
|
34
|
+
const timeout = (deadline || kMaxDeadline) - (0, _.monotonicTime)();
|
|
35
|
+
timer = setTimeout(() => resolve({
|
|
102
36
|
timedOut: true
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
|
|
37
|
+
}), timeout);
|
|
38
|
+
})]).finally(() => {
|
|
39
|
+
clearTimeout(timer);
|
|
40
|
+
});
|
|
106
41
|
}
|
|
107
42
|
async function pollAgainstDeadline(callback, deadline, pollIntervals = [100, 250, 500, 1000]) {
|
|
108
43
|
var _pollIntervals$pop;
|
package/lib/utils/zones.js
CHANGED
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.runWithFinally = runWithFinally;
|
|
7
6
|
exports.zones = void 0;
|
|
8
|
-
var
|
|
7
|
+
var _async_hooks = require("async_hooks");
|
|
9
8
|
/**
|
|
10
9
|
* Copyright (c) Microsoft Corporation.
|
|
11
10
|
*
|
|
@@ -24,76 +23,40 @@ var _stackTrace = require("./stackTrace");
|
|
|
24
23
|
|
|
25
24
|
class ZoneManager {
|
|
26
25
|
constructor() {
|
|
27
|
-
this.
|
|
28
|
-
this._zones = new Map();
|
|
26
|
+
this._asyncLocalStorage = new _async_hooks.AsyncLocalStorage();
|
|
29
27
|
}
|
|
30
28
|
run(type, data, func) {
|
|
31
|
-
|
|
29
|
+
const previous = this._asyncLocalStorage.getStore();
|
|
30
|
+
const zone = new Zone(previous, type, data);
|
|
31
|
+
return this._asyncLocalStorage.run(zone, func);
|
|
32
32
|
}
|
|
33
|
-
zoneData(type
|
|
34
|
-
for (
|
|
35
|
-
|
|
36
|
-
const zone = this._zones.get(zoneId);
|
|
37
|
-
if (zone && zone.type === type) return zone.data;
|
|
38
|
-
}
|
|
33
|
+
zoneData(type) {
|
|
34
|
+
for (let zone = this._asyncLocalStorage.getStore(); zone; zone = zone.previous) {
|
|
35
|
+
if (zone.type === type) return zone.data;
|
|
39
36
|
}
|
|
40
|
-
return
|
|
37
|
+
return undefined;
|
|
41
38
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
exitZones(func) {
|
|
40
|
+
return this._asyncLocalStorage.run(undefined, func);
|
|
41
|
+
}
|
|
42
|
+
printZones() {
|
|
43
|
+
const zones = [];
|
|
44
|
+
for (let zone = this._asyncLocalStorage.getStore(); zone; zone = zone.previous) {
|
|
45
|
+
let str = zone.type;
|
|
46
|
+
if (zone.type === 'apiZone') str += `(${zone.data.apiName})`;
|
|
47
|
+
zones.push(str);
|
|
48
|
+
}
|
|
49
|
+
console.log('zones: ', zones.join(' -> '));
|
|
50
50
|
}
|
|
51
|
-
}
|
|
52
|
-
function zoneIds(line) {
|
|
53
|
-
const index = line.indexOf('__PWZONE__[');
|
|
54
|
-
if (index === -1) return [];
|
|
55
|
-
return line.substring(index + '__PWZONE__['.length, line.indexOf(']', index)).split(',').map(s => +s);
|
|
56
51
|
}
|
|
57
52
|
class Zone {
|
|
58
|
-
constructor(
|
|
59
|
-
this._manager = void 0;
|
|
60
|
-
this.id = void 0;
|
|
53
|
+
constructor(previous, type, data) {
|
|
61
54
|
this.type = void 0;
|
|
62
55
|
this.data = void 0;
|
|
63
|
-
this.
|
|
64
|
-
this._manager = manager;
|
|
65
|
-
this.id = id;
|
|
56
|
+
this.previous = void 0;
|
|
66
57
|
this.type = type;
|
|
67
58
|
this.data = data;
|
|
68
|
-
this.
|
|
69
|
-
}
|
|
70
|
-
run(func) {
|
|
71
|
-
this._manager._zones.set(this.id, this);
|
|
72
|
-
Object.defineProperty(func, 'name', {
|
|
73
|
-
value: `__PWZONE__[${this.id}]-${this.type}`
|
|
74
|
-
});
|
|
75
|
-
return runWithFinally(() => func(this.data), () => {
|
|
76
|
-
this._manager._zones.delete(this.id);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function runWithFinally(func, finallyFunc) {
|
|
81
|
-
try {
|
|
82
|
-
const result = func();
|
|
83
|
-
if (result instanceof Promise) {
|
|
84
|
-
return result.then(r => {
|
|
85
|
-
finallyFunc();
|
|
86
|
-
return r;
|
|
87
|
-
}).catch(e => {
|
|
88
|
-
finallyFunc();
|
|
89
|
-
throw e;
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
finallyFunc();
|
|
93
|
-
return result;
|
|
94
|
-
} catch (e) {
|
|
95
|
-
finallyFunc();
|
|
96
|
-
throw e;
|
|
59
|
+
this.previous = previous;
|
|
97
60
|
}
|
|
98
61
|
}
|
|
99
62
|
const zones = exports.zones = new ZoneManager();
|