testplane 8.32.0 → 8.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/build/package.json +2 -1
  2. package/build/src/browser/browser.d.ts +5 -0
  3. package/build/src/browser/browser.js +7 -1
  4. package/build/src/browser/browser.js.map +1 -1
  5. package/build/src/browser/cdp/connection.d.ts +52 -0
  6. package/build/src/browser/cdp/connection.js +413 -0
  7. package/build/src/browser/cdp/connection.js.map +1 -0
  8. package/build/src/browser/cdp/constants.d.ts +16 -0
  9. package/build/src/browser/cdp/constants.js +20 -0
  10. package/build/src/browser/cdp/constants.js.map +1 -0
  11. package/build/src/browser/cdp/debug.d.ts +2 -0
  12. package/build/src/browser/cdp/debug.js +9 -0
  13. package/build/src/browser/cdp/debug.js.map +1 -0
  14. package/build/src/browser/cdp/emitter.d.ts +7 -0
  15. package/build/src/browser/cdp/emitter.js +48 -0
  16. package/build/src/browser/cdp/emitter.js.map +1 -0
  17. package/build/src/browser/cdp/error.d.ts +23 -0
  18. package/build/src/browser/cdp/error.js +41 -0
  19. package/build/src/browser/cdp/error.js.map +1 -0
  20. package/build/src/browser/cdp/index.d.ts +13 -0
  21. package/build/src/browser/cdp/index.js +37 -0
  22. package/build/src/browser/cdp/index.js.map +1 -0
  23. package/build/src/browser/cdp/profiler.d.ts +60 -0
  24. package/build/src/browser/cdp/profiler.js +42 -0
  25. package/build/src/browser/cdp/profiler.js.map +1 -0
  26. package/build/src/browser/cdp/target.d.ts +75 -0
  27. package/build/src/browser/cdp/target.js +51 -0
  28. package/build/src/browser/cdp/target.js.map +1 -0
  29. package/build/src/browser/cdp/types.d.ts +124 -0
  30. package/build/src/browser/cdp/types.js +3 -0
  31. package/build/src/browser/cdp/types.js.map +1 -0
  32. package/build/src/browser/cdp/utils.d.ts +7 -0
  33. package/build/src/browser/cdp/utils.js +23 -0
  34. package/build/src/browser/cdp/utils.js.map +1 -0
  35. package/build/src/browser/cdp/ws-endpoint.d.ts +2 -0
  36. package/build/src/browser/cdp/ws-endpoint.js +70 -0
  37. package/build/src/browser/cdp/ws-endpoint.js.map +1 -0
  38. package/build/src/browser/existing-browser.d.ts +4 -0
  39. package/build/src/browser/existing-browser.js +54 -11
  40. package/build/src/browser/existing-browser.js.map +1 -1
  41. package/build/src/browser/history/async-local-storage.d.ts +5 -0
  42. package/build/src/browser/history/async-local-storage.js +14 -0
  43. package/build/src/browser/history/async-local-storage.js.map +1 -0
  44. package/build/src/browser/history/callstack.d.ts +0 -4
  45. package/build/src/browser/history/callstack.js +0 -8
  46. package/build/src/browser/history/callstack.js.map +1 -1
  47. package/build/src/browser/history/index.d.ts +11 -5
  48. package/build/src/browser/history/index.js +68 -54
  49. package/build/src/browser/history/index.js.map +1 -1
  50. package/build/src/browser/history/rrweb.js +1 -3
  51. package/build/src/browser/history/rrweb.js.map +1 -1
  52. package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
  53. package/build/src/test-reader/index.js +4 -4
  54. package/build/src/test-reader/index.js.map +1 -1
  55. package/build/src/test-reader/test-parser.js +4 -1
  56. package/build/src/test-reader/test-parser.js.map +1 -1
  57. package/build/src/worker/browser-env/runner/test-runner/index.js +1 -0
  58. package/build/src/worker/browser-env/runner/test-runner/index.js.map +1 -1
  59. package/build/src/worker/runner/test-runner/index.js +11 -0
  60. package/build/src/worker/runner/test-runner/index.js.map +1 -1
  61. package/package.json +2 -1
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.CDPEventEmitter = void 0;
27
+ const logger = __importStar(require("../../utils/logger"));
28
+ const events_1 = require("events");
29
+ class CDPEventEmitter extends events_1.EventEmitter {
30
+ on(event, listener) {
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ const eventListenerWithErrorBoundary = (params) => {
33
+ const logError = (e) => {
34
+ logger.error(`Catched unhandled error in CDP "${event}" handler: ${(e && e.stack) || e}`);
35
+ };
36
+ try {
37
+ const result = listener(params);
38
+ return result instanceof Promise ? result.catch(logError) : result;
39
+ }
40
+ catch (e) {
41
+ logError(e);
42
+ }
43
+ };
44
+ return super.on(event, eventListenerWithErrorBoundary);
45
+ }
46
+ }
47
+ exports.CDPEventEmitter = CDPEventEmitter;
48
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../../../src/browser/cdp/emitter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA6C;AAC7C,mCAAsC;AAEtC,MAAa,eAAmE,SAAQ,qBAAY;IAChG,EAAE,CAAkC,KAAQ,EAAE,QAAqD;QAC/F,8DAA8D;QAC9D,MAAM,8BAA8B,GAAG,CAAC,MAAiB,EAAwB,EAAE;YAC/E,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAQ,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,mCAAmC,KAAK,cAAc,CAAC,CAAC,IAAK,CAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC,CAAC;YAEF,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAEhC,OAAO,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACvE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IAC3D,CAAC;CACJ;AAnBD,0CAmBC"}
@@ -0,0 +1,23 @@
1
+ import type { CDPRequestId } from "./types";
2
+ export declare class CDPError extends Error {
3
+ code?: number;
4
+ requestId?: CDPRequestId;
5
+ constructor({ message, code, requestId }: {
6
+ message: string;
7
+ code?: number;
8
+ requestId?: CDPRequestId;
9
+ });
10
+ isNonRetryable(): boolean;
11
+ }
12
+ export declare class CDPTimeoutError extends CDPError {
13
+ constructor({ message, requestId }: {
14
+ message: string;
15
+ requestId?: CDPRequestId;
16
+ });
17
+ }
18
+ export declare class CDPConnectionTerminatedError extends CDPError {
19
+ constructor({ message, requestId, }?: {
20
+ message?: string;
21
+ requestId?: CDPRequestId;
22
+ });
23
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDPConnectionTerminatedError = exports.CDPTimeoutError = exports.CDPError = void 0;
4
+ const constants_1 = require("./constants");
5
+ class CDPError extends Error {
6
+ constructor({ message, code, requestId }) {
7
+ let errorMessage = message;
8
+ if (code) {
9
+ errorMessage += `\n\tErrorCode: ${code}`;
10
+ }
11
+ if (requestId) {
12
+ errorMessage += `\n\tCDP Request ID: ${requestId}`;
13
+ }
14
+ super(errorMessage);
15
+ this.name = this.constructor.name;
16
+ this.code = code;
17
+ this.requestId = requestId;
18
+ }
19
+ isNonRetryable() {
20
+ // JSON-RPC Protocol Errors
21
+ // CDP State/Execution Errors
22
+ // https://www.jsonrpc.org/specification#error_object
23
+ return Boolean(this.code && ((this.code >= -32700 && this.code <= -32600) || this.code === -32000));
24
+ }
25
+ }
26
+ exports.CDPError = CDPError;
27
+ class CDPTimeoutError extends CDPError {
28
+ constructor({ message, requestId }) {
29
+ super({ message, code: constants_1.CDP_ERROR_CODE.TIMEOUT, requestId });
30
+ this.name = this.constructor.name;
31
+ }
32
+ }
33
+ exports.CDPTimeoutError = CDPTimeoutError;
34
+ class CDPConnectionTerminatedError extends CDPError {
35
+ constructor({ message = "CDP connection was manually closed", requestId, } = {}) {
36
+ super({ message, code: constants_1.CDP_ERROR_CODE.CONNECTION_TERMINATED, requestId });
37
+ this.name = this.constructor.name;
38
+ }
39
+ }
40
+ exports.CDPConnectionTerminatedError = CDPConnectionTerminatedError;
41
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../../../src/browser/cdp/error.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAG7C,MAAa,QAAS,SAAQ,KAAK;IAI/B,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAgE;QAClG,IAAI,YAAY,GAAG,OAAO,CAAC;QAE3B,IAAI,IAAI,EAAE,CAAC;YACP,YAAY,IAAI,kBAAkB,IAAI,EAAE,CAAC;QAC7C,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACZ,YAAY,IAAI,uBAAuB,SAAS,EAAE,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,CAAC;QAEpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,cAAc;QACV,2BAA2B;QAC3B,6BAA6B;QAC7B,qDAAqD;QACrD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxG,CAAC;CACJ;AA5BD,4BA4BC;AAED,MAAa,eAAgB,SAAQ,QAAQ;IACzC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAiD;QAC7E,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,0BAAc,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AAND,0CAMC;AAED,MAAa,4BAA6B,SAAQ,QAAQ;IACtD,YAAY,EACR,OAAO,GAAG,oCAAoC,EAC9C,SAAS,MACuC,EAAE;QAClD,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,0BAAc,CAAC,qBAAqB,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACtC,CAAC;CACJ;AATD,oEASC"}
@@ -0,0 +1,13 @@
1
+ import type { Browser } from "../types";
2
+ import { CDPConnection } from "./connection";
3
+ import { CDPTarget } from "./target";
4
+ import { CDPProfiler } from "./profiler";
5
+ export declare class CDP {
6
+ private readonly _connection;
7
+ readonly target: CDPTarget;
8
+ readonly profiler: CDPProfiler;
9
+ static create(browser: Browser): Promise<CDP | null>;
10
+ constructor(connection: CDPConnection);
11
+ close(): void;
12
+ private _onEventMessage;
13
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDP = void 0;
4
+ const connection_1 = require("./connection");
5
+ const target_1 = require("./target");
6
+ const profiler_1 = require("./profiler");
7
+ class CDP {
8
+ static async create(browser) {
9
+ if (!browser.publicAPI.isChromium) {
10
+ return null;
11
+ }
12
+ const connection = await connection_1.CDPConnection.create(browser).catch(() => null);
13
+ return connection ? new this(connection) : null;
14
+ }
15
+ constructor(connection) {
16
+ this._connection = connection;
17
+ this.target = new target_1.CDPTarget(connection);
18
+ this.profiler = new profiler_1.CDPProfiler(connection);
19
+ this._connection.onEventMessage = this._onEventMessage.bind(this);
20
+ }
21
+ close() {
22
+ this._connection.close();
23
+ }
24
+ _onEventMessage(cdpEventMessage) {
25
+ const [domain, method] = cdpEventMessage.method.split(".", 2);
26
+ switch (domain) {
27
+ case "Target":
28
+ this.target.emit(method, cdpEventMessage.params);
29
+ break;
30
+ case "Profiler":
31
+ this.profiler.emit(method, cdpEventMessage.params);
32
+ break;
33
+ }
34
+ }
35
+ }
36
+ exports.CDP = CDP;
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/browser/cdp/index.ts"],"names":[],"mappings":";;;AACA,6CAA6C;AAC7C,qCAAqC;AACrC,yCAAyC;AAGzC,MAAa,GAAG;IAKZ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAgB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,0BAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAEzE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;IAED,YAAY,UAAyB;QACjC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAS,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAW,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,KAAK;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAEO,eAAe,CAAC,eAAyB;QAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAE9D,QAAQ,MAAM,EAAE,CAAC;YACb,KAAK,QAAQ;gBACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;gBACjD,MAAM;YACV,KAAK,UAAU;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;gBACnD,MAAM;QACd,CAAC;IACL,CAAC;CACJ;AAtCD,kBAsCC"}
@@ -0,0 +1,60 @@
1
+ import { CDPConnection } from "./connection";
2
+ import { CDPEventEmitter } from "./emitter";
3
+ import type { CDPDebuggerLocation, CDPSessionId, CDPScriptCoverage, CDPProfile } from "./types";
4
+ interface StartPreciseCoverageRequest {
5
+ /** Collect accurate call counts beyond simple 'covered' or 'not covered'. */
6
+ callCount: boolean;
7
+ /** Collect block-based coverage. */
8
+ detailed: boolean;
9
+ /** Allow the backend to send updates on its own initiative */
10
+ allowTriggeredUpdates: boolean;
11
+ }
12
+ interface StartPreciseCoverageResponse {
13
+ /** Monotonically increasing time (in seconds) when the coverage update was taken in the backend. */
14
+ timestamp: number;
15
+ }
16
+ interface TakePreciseCoverageResponse {
17
+ /** Coverage data for the current isolate */
18
+ result: CDPScriptCoverage[];
19
+ /** Monotonically increasing time (in seconds) when the coverage update was taken in the backend. */
20
+ timestamp: number;
21
+ }
22
+ export interface ProfilerEvents {
23
+ consoleProfileFinished: {
24
+ id: string;
25
+ /** Location of console.profileEnd(). */
26
+ location: CDPDebuggerLocation;
27
+ profile: CDPProfile;
28
+ /** Profile title passed as an argument to console.profile(). */
29
+ title?: string;
30
+ };
31
+ consoleProfileStarted: {
32
+ id: string;
33
+ /** Location of console.profile(). */
34
+ location: CDPDebuggerLocation;
35
+ /** Profile title passed as an argument to console.profile(). */
36
+ title?: string;
37
+ };
38
+ }
39
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/ */
40
+ export declare class CDPProfiler extends CDPEventEmitter<ProfilerEvents> {
41
+ private readonly _connection;
42
+ constructor(connection: CDPConnection);
43
+ /**
44
+ * @param sessionId result of "Target.attachToTarget"
45
+ * @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-disable
46
+ */
47
+ disable(sessionId: CDPSessionId): Promise<void>;
48
+ /**
49
+ * @param sessionId result of "Target.attachToTarget"
50
+ * @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-enable
51
+ */
52
+ enable(sessionId: CDPSessionId): Promise<void>;
53
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-startPreciseCoverage */
54
+ startPreciseCoverage(sessionId: CDPSessionId, params: StartPreciseCoverageRequest): Promise<StartPreciseCoverageResponse>;
55
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-stopPreciseCoverage */
56
+ stopPreciseCoverage(sessionId: CDPSessionId): Promise<void>;
57
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-takePreciseCoverage */
58
+ takePreciseCoverage(sessionId: CDPSessionId): Promise<TakePreciseCoverageResponse>;
59
+ }
60
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDPProfiler = void 0;
4
+ const emitter_1 = require("./emitter");
5
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/ */
6
+ class CDPProfiler extends emitter_1.CDPEventEmitter {
7
+ constructor(connection) {
8
+ super();
9
+ this._connection = connection;
10
+ }
11
+ /**
12
+ * @param sessionId result of "Target.attachToTarget"
13
+ * @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-disable
14
+ */
15
+ async disable(sessionId) {
16
+ return this._connection.request("Profiler.disable", { sessionId });
17
+ }
18
+ /**
19
+ * @param sessionId result of "Target.attachToTarget"
20
+ * @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-enable
21
+ */
22
+ async enable(sessionId) {
23
+ return this._connection.request("Profiler.enable", { sessionId });
24
+ }
25
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-startPreciseCoverage */
26
+ async startPreciseCoverage(sessionId, params) {
27
+ return this._connection.request("Profiler.startPreciseCoverage", {
28
+ sessionId,
29
+ params,
30
+ });
31
+ }
32
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-stopPreciseCoverage */
33
+ async stopPreciseCoverage(sessionId) {
34
+ return this._connection.request("Profiler.stopPreciseCoverage", { sessionId });
35
+ }
36
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Profiler/#method-takePreciseCoverage */
37
+ async takePreciseCoverage(sessionId) {
38
+ return this._connection.request("Profiler.takePreciseCoverage", { sessionId });
39
+ }
40
+ }
41
+ exports.CDPProfiler = CDPProfiler;
42
+ //# sourceMappingURL=profiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profiler.js","sourceRoot":"","sources":["../../../../src/browser/cdp/profiler.ts"],"names":[],"mappings":";;;AACA,uCAA4C;AA0C5C,6EAA6E;AAC7E,MAAa,WAAY,SAAQ,yBAA+B;IAG5D,YAAmB,UAAyB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,SAAuB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,SAAuB;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,yGAAyG;IACzG,KAAK,CAAC,oBAAoB,CACtB,SAAuB,EACvB,MAAmC;QAEnC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAA+B,+BAA+B,EAAE;YAC3F,SAAS;YACT,MAAM;SACT,CAAC,CAAC;IACP,CAAC;IAED,wGAAwG;IACxG,KAAK,CAAC,mBAAmB,CAAC,SAAuB;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,wGAAwG;IACxG,KAAK,CAAC,mBAAmB,CAAC,SAAuB;QAC7C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAA8B,8BAA8B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAChH,CAAC;CACJ;AA7CD,kCA6CC"}
@@ -0,0 +1,75 @@
1
+ import { CDPEventEmitter } from "./emitter";
2
+ import { CDPConnection } from "./connection";
3
+ import type { CDPBrowserContextId, CDPSessionId, CDPTargetId, CDPTargetInfo } from "./types";
4
+ interface GetBrowserContextsResponse {
5
+ browserContextIds: CDPBrowserContextId[];
6
+ }
7
+ interface CreateBrowserContextResponse {
8
+ browserContextId: CDPBrowserContextId;
9
+ }
10
+ interface CreateTargetResponse {
11
+ targetId: CDPTargetId;
12
+ }
13
+ interface CreateTargetResponse {
14
+ targetId: CDPTargetId;
15
+ }
16
+ interface AttachToTargetResponse {
17
+ sessionId: CDPSessionId;
18
+ }
19
+ interface GetTargetsResponse {
20
+ targetInfos: CDPTargetInfo[];
21
+ }
22
+ interface SetAutoAttachRequest {
23
+ autoAttach: boolean;
24
+ waitForDebuggerOnStart: boolean;
25
+ flatten?: boolean;
26
+ }
27
+ export interface TargetEvents {
28
+ receivedMessageFromTarget: {
29
+ sessionId: CDPSessionId;
30
+ message: string;
31
+ };
32
+ targetCrashed: {
33
+ targetId: CDPTargetId;
34
+ /** Termination status type. */
35
+ status: string;
36
+ /** Termination error code. */
37
+ errorCode: number;
38
+ };
39
+ targetCreated: {
40
+ targetInfo: CDPTargetInfo;
41
+ };
42
+ targetDestroyed: {
43
+ targetId: CDPTargetId;
44
+ };
45
+ targetInfoChanged: {
46
+ targetInfo: CDPTargetInfo;
47
+ };
48
+ }
49
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/ */
50
+ export declare class CDPTarget extends CDPEventEmitter<TargetEvents> {
51
+ private readonly _connection;
52
+ constructor(connection: CDPConnection);
53
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-getBrowserContexts */
54
+ getBrowserContexts(): Promise<GetBrowserContextsResponse>;
55
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-createBrowserContext */
56
+ createBrowserContext(): Promise<CreateBrowserContextResponse>;
57
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-disposeBrowserContext */
58
+ disposeBrowserContext(browserContextId: CDPBrowserContextId): Promise<void>;
59
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-createTarget */
60
+ createTarget({ url, browserContextId, }: {
61
+ url?: string;
62
+ browserContextId?: CDPBrowserContextId;
63
+ }): Promise<CreateTargetResponse>;
64
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-closeTarget */
65
+ closeTarget(targetId: CDPTargetId): Promise<void>;
66
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-activateTarget */
67
+ activateTarget(targetId: CDPTargetId): Promise<void>;
68
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-attachToTarget */
69
+ attachToTarget(targetId: CDPTargetId): Promise<AttachToTargetResponse>;
70
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-getTargets */
71
+ getTargets(): Promise<GetTargetsResponse>;
72
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-setAutoAttach */
73
+ setAutoAttach(sessionId: CDPSessionId, params: SetAutoAttachRequest): Promise<void>;
74
+ }
75
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDPTarget = void 0;
4
+ const emitter_1 = require("./emitter");
5
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/ */
6
+ class CDPTarget extends emitter_1.CDPEventEmitter {
7
+ constructor(connection) {
8
+ super();
9
+ this._connection = connection;
10
+ }
11
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-getBrowserContexts */
12
+ async getBrowserContexts() {
13
+ return this._connection.request("Target.getBrowserContexts");
14
+ }
15
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-createBrowserContext */
16
+ async createBrowserContext() {
17
+ return this._connection.request("Target.createBrowserContext");
18
+ }
19
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-disposeBrowserContext */
20
+ async disposeBrowserContext(browserContextId) {
21
+ return this._connection.request("Target.disposeBrowserContext", { params: { browserContextId } });
22
+ }
23
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-createTarget */
24
+ async createTarget({ url = "about:blank", browserContextId, }) {
25
+ const params = { url, browserContextId };
26
+ return this._connection.request("Target.createTarget", { params });
27
+ }
28
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-closeTarget */
29
+ async closeTarget(targetId) {
30
+ return this._connection.request("Target.closeTarget", { params: { targetId } });
31
+ }
32
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-activateTarget */
33
+ async activateTarget(targetId) {
34
+ return this._connection.request("Target.activateTarget", { params: { targetId } });
35
+ }
36
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-attachToTarget */
37
+ async attachToTarget(targetId) {
38
+ const params = { targetId, flatten: true };
39
+ return this._connection.request("Target.attachToTarget", { params });
40
+ }
41
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-getTargets */
42
+ async getTargets() {
43
+ return this._connection.request("Target.getTargets");
44
+ }
45
+ /** @link https://chromedevtools.github.io/devtools-protocol/1-3/Target/#method-setAutoAttach */
46
+ async setAutoAttach(sessionId, params) {
47
+ return this._connection.request("Target.setAutoAttach", { sessionId, params });
48
+ }
49
+ }
50
+ exports.CDPTarget = CDPTarget;
51
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../../../src/browser/cdp/target.ts"],"names":[],"mappings":";;;AAAA,uCAA4C;AAyD5C,2EAA2E;AAC3E,MAAa,SAAU,SAAQ,yBAA6B;IAGxD,YAAmB,UAAyB;QACxC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,qGAAqG;IACrG,KAAK,CAAC,kBAAkB;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAA6B,2BAA2B,CAAC,CAAC;IAC7F,CAAC;IAED,uGAAuG;IACvG,KAAK,CAAC,oBAAoB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAA+B,6BAA6B,CAAC,CAAC;IACjG,CAAC;IAED,wGAAwG;IACxG,KAAK,CAAC,qBAAqB,CAAC,gBAAqC;QAC7D,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,YAAY,CAAC,EACf,GAAG,GAAG,aAAa,EACnB,gBAAgB,GAInB;QACG,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;QAEzC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAuB,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,8FAA8F;IAC9F,KAAK,CAAC,WAAW,CAAC,QAAqB;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,cAAc,CAAC,QAAqB;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,cAAc,CAAC,QAAqB;QACtC,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE3C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAyB,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,6FAA6F;IAC7F,KAAK,CAAC,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAqB,mBAAmB,CAAC,CAAC;IAC7E,CAAC;IAED,gGAAgG;IAChG,KAAK,CAAC,aAAa,CAAC,SAAuB,EAAE,MAA4B;QACrE,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IACnF,CAAC;CACJ;AA/DD,8BA+DC"}
@@ -0,0 +1,124 @@
1
+ export type Domain = string;
2
+ export type MethodName = string;
3
+ export type SessionId = string;
4
+ export type Suffix = string;
5
+ export type CDPRequestId = number;
6
+ export type CDPTargetId = string;
7
+ export type CDPSessionId = string;
8
+ export type CDPBrowserContextId = string;
9
+ export type RuntimeScriptId = string;
10
+ type TargetType = "tab" | "page" | "iframe" | "worker" | "shared_worker" | "service_worker" | "worklet" | "shared_storage_worklet" | "browser" | "webview" | "other" | "auction_worklet" | "assistive_technology";
11
+ export interface CDPRequest<T extends {
12
+ [key in keyof T]: unknown;
13
+ } = Record<never, never>> {
14
+ id: CDPRequestId;
15
+ sessionId?: CDPSessionId;
16
+ method: `${Domain}.${MethodName}`;
17
+ params?: T;
18
+ }
19
+ export interface CDPErrorResponse {
20
+ id: CDPRequestId;
21
+ error: {
22
+ code: number;
23
+ message: string;
24
+ };
25
+ }
26
+ export interface CDPSuccessResponse<T = Record<string, unknown>> {
27
+ id: CDPRequestId;
28
+ result: T;
29
+ }
30
+ export interface CDPEvent<T = Record<string, unknown>> {
31
+ method: `${Domain}.${MethodName}`;
32
+ params: T;
33
+ }
34
+ export type CDPResponse<T = Record<string, unknown>> = CDPErrorResponse | CDPSuccessResponse<T>;
35
+ export type CDPMessage = CDPResponse | CDPEvent;
36
+ export interface CDPTargetInfo {
37
+ targetId: CDPTargetId;
38
+ type: TargetType;
39
+ title: string;
40
+ url: string;
41
+ /** Whether the target has an attached client. */
42
+ attached: boolean;
43
+ /** Opener target Id */
44
+ openerId?: CDPTargetId;
45
+ }
46
+ interface CoverageRange {
47
+ /** JavaScript script source offset for the range start. */
48
+ startOffset: number;
49
+ /** JavaScript script source offset for the range end. */
50
+ endOffset: number;
51
+ /** Collected execution count of the source range. */
52
+ count: number;
53
+ }
54
+ interface FunctionCoverage {
55
+ /** JavaScript function name. */
56
+ functionName: string;
57
+ /** Source ranges inside the function with coverage data. */
58
+ ranges: CoverageRange[];
59
+ /** Whether coverage data for this function has block granularity. */
60
+ isBlockCoverage: boolean;
61
+ }
62
+ export interface CDPScriptCoverage {
63
+ /** JavaScript script id. */
64
+ scriptId: RuntimeScriptId;
65
+ /** JavaScript script name or url. */
66
+ url: string;
67
+ /** Functions contained in the script that has coverage data. */
68
+ functions: FunctionCoverage[];
69
+ }
70
+ export interface CDPDebuggerLocation {
71
+ /** Script identifier as reported in the Debugger.scriptParsed. */
72
+ scriptId: RuntimeScriptId;
73
+ /** Line number in the script (0-based). */
74
+ lineNumber: number;
75
+ /** Column number in the script (0-based). */
76
+ columnNumber?: number;
77
+ }
78
+ interface RuntimeCallFrame {
79
+ /** JavaScript function name. */
80
+ functionName: string;
81
+ /** JavaScript script id. */
82
+ scriptId: RuntimeScriptId;
83
+ /** JavaScript script name or url. */
84
+ url: string;
85
+ /** JavaScript script line number (0-based). */
86
+ lineNumber: number;
87
+ /** JavaScript script column number (0-based). */
88
+ columnNumber: number;
89
+ }
90
+ interface PositionTickInfo {
91
+ /** Source line number (1-based). */
92
+ line: number;
93
+ /** Number of samples attributed to the source line. */
94
+ ticks: number;
95
+ }
96
+ interface ProfileNode {
97
+ /** Unique id of the node. */
98
+ id: number;
99
+ /** Function location. */
100
+ callFrame: RuntimeCallFrame;
101
+ /** Number of samples where this node was on top of the call stack. */
102
+ hitCount?: number;
103
+ /** Child node ids. */
104
+ children?: number[];
105
+ /** The reason of being not optimized. The function may be deoptimized or marked as don't optimize. */
106
+ deoptReason?: string;
107
+ /** An array of source position ticks. */
108
+ positionTicks?: PositionTickInfo[];
109
+ }
110
+ export interface CDPProfile {
111
+ /** The list of profile nodes. First item is the root node. */
112
+ nodes: ProfileNode[];
113
+ /** Profiling start timestamp in microseconds. */
114
+ startTime: number;
115
+ /** Profiling end timestamp in microseconds. */
116
+ endTime: number;
117
+ /** Ids of samples top nodes. */
118
+ samples?: number[];
119
+ /** Time intervals between adjacent samples in microseconds.
120
+ * The first delta is relative to the profile startTime.
121
+ */
122
+ timeDeltas: number[];
123
+ }
124
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/browser/cdp/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export declare const exponentiallyWait: ({ baseDelay, attempt, factor, jitter, }?: {
2
+ baseDelay?: number | undefined;
3
+ attempt?: number | undefined;
4
+ factor?: number | undefined;
5
+ jitter?: number | undefined;
6
+ }) => Promise<void>;
7
+ export declare const extractRequestIdFromBrokenResponse: (message: string) => number | null;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractRequestIdFromBrokenResponse = exports.exponentiallyWait = void 0;
4
+ const exponentiallyWait = ({ baseDelay = 500, attempt = 0, factor = 2, jitter = 100, } = {}) => {
5
+ const delay = Math.round(baseDelay * factor ** attempt + Math.random() * jitter);
6
+ return new Promise(resolve => setTimeout(resolve, delay).unref());
7
+ };
8
+ exports.exponentiallyWait = exponentiallyWait;
9
+ const extractRequestIdFromBrokenResponse = (message) => {
10
+ const idStartMarker = '{"id":';
11
+ if (!message.startsWith(idStartMarker)) {
12
+ return null;
13
+ }
14
+ const idEndPosition = message.indexOf(",");
15
+ if (idEndPosition === -1) {
16
+ return null;
17
+ }
18
+ const idPart = message.slice(idStartMarker.length, idEndPosition);
19
+ const requestId = Number(idPart);
20
+ return isNaN(requestId) ? null : requestId;
21
+ };
22
+ exports.extractRequestIdFromBrokenResponse = extractRequestIdFromBrokenResponse;
23
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/browser/cdp/utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAAG,CAAC,EAC9B,SAAS,GAAG,GAAG,EACf,OAAO,GAAG,CAAC,EACX,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,GAAG,MACgE,EAAE,EAAiB,EAAE;IACjG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;IAEjF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B;AAEK,MAAM,kCAAkC,GAAG,CAAC,OAAe,EAAiB,EAAE;IACjF,MAAM,aAAa,GAAG,QAAQ,CAAC;IAE/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC,CAAC;AAjBW,QAAA,kCAAkC,sCAiB7C"}
@@ -0,0 +1,2 @@
1
+ import type { Browser } from "../types";
2
+ export declare const getWsEndpoint: (browser: Browser) => Promise<string | null>;