@itwin/certa 4.10.0-dev.30 → 4.10.0-dev.32

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/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Change Log - @itwin/certa
2
2
 
3
- This log was last generated on Wed, 09 Oct 2024 20:23:41 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 22 Oct 2024 20:03:09 GMT and should not be manually modified.
4
+
5
+ ## 4.9.5
6
+ Tue, 22 Oct 2024 20:01:40 GMT
7
+
8
+ _Version update only_
4
9
 
5
10
  ## 4.9.4
6
11
  Wed, 09 Oct 2024 20:22:04 GMT
package/lib/CertaCore.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.certa = exports.CertaCore = void 0;
3
+ exports.CertaCore = void 0;
4
+ exports.certa = certa;
4
5
  /*---------------------------------------------------------------------------------------------
5
6
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
7
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -50,5 +51,4 @@ async function certa(environment, config) {
50
51
  if (typeof cleanUpCallback === "function" && runner.supportsCleanup)
51
52
  await cleanUpCallback();
52
53
  }
53
- exports.certa = certa;
54
54
  //# sourceMappingURL=CertaCore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CertaCore.js","sourceRoot":"","sources":["../src/CertaCore.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,8EAA2E;AAC3E,wEAAqE;AAErE,kEAA+D;AAC/D,yDAA4D;AAC5D,mDAAmD;AASnD,MAAa,SAAS;IAGb,MAAM,CAAC,kBAAkB,CAAC,WAAmB,EAAE,MAAuB;QAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,WAAmB;QAC7C,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,GAAG,CAAC,CAAC;IAC1D,CAAC;;AAZH,8BAaC;AAZgB,kBAAQ,GAA+C,EAAE,CAAC;AAc3E,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,+BAAc,CAAC,CAAC;AACrD,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mCAAgB,CAAC,CAAC;AACzD,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,uCAAkB,CAAC,CAAC;AAEtD,KAAK,UAAU,KAAK,CAAC,WAAmB,EAAE,MAAmB;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAEpD,wHAAwH;IACxH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC;IACvD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,YAAY;QAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,mCAAmB,GAAE,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,UAAU;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAElC,gGAAgG;IAChG,IAAI,MAAM,CAAC,KAAK;QACd,IAAA,0BAAa,EAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAExC,gDAAgD;IAChD,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;IAExC;;;;OAIG;IACH,IAAI,eAAuD,CAAC;IAC5D,IAAI,MAAM,CAAC,iBAAiB;QAC1B,eAAe,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5D,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,OAAO,eAAe,KAAK,UAAU,IAAI,MAAM,CAAC,eAAe;QACjE,MAAM,eAAe,EAAE,CAAC;AAC5B,CAAC;AA/BD,sBA+BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ElectronTestRunner } from \"./runners/electron/ElectronTestRunner\";\r\nimport { ChromeTestRunner } from \"./runners/chrome/ChromeTestRunner\";\r\nimport { CertaConfig } from \"./CertaConfig\";\r\nimport { NodeTestRunner } from \"./runners/node/NodeTestRunner\";\r\nimport { relaunchForCoverage } from \"./utils/CoverageUtils\";\r\nimport { startDebugger } from \"./utils/SpawnUtils\";\r\n\r\nexport interface CertaTestRunner {\r\n readonly supportsCoverage: boolean;\r\n readonly supportsCleanup: boolean;\r\n initialize?(config: CertaConfig): Promise<void>;\r\n runTests(config: CertaConfig): Promise<void>;\r\n}\r\n\r\nexport class CertaCore {\r\n private static _runners: { [environment: string]: CertaTestRunner } = {};\r\n\r\n public static registerTestRunner(environment: string, runner: CertaTestRunner) {\r\n this._runners[environment] = runner;\r\n }\r\n\r\n public static getTestRunner(environment: string): CertaTestRunner {\r\n if (environment in this._runners)\r\n return this._runners[environment];\r\n\r\n throw new Error(`Unknown TestRunner: \"${environment}\"`);\r\n }\r\n}\r\n\r\nCertaCore.registerTestRunner(\"node\", NodeTestRunner);\r\nCertaCore.registerTestRunner(\"chrome\", ChromeTestRunner);\r\nCertaCore.registerTestRunner(\"electron\", ElectronTestRunner);\r\n\r\nexport async function certa(environment: string, config: CertaConfig): Promise<void> {\r\n const runner = CertaCore.getTestRunner(environment);\r\n\r\n // If we're going to measure code coverage, we should stop now and let an `nyc`-wrapped child process take it from here.\r\n const alreadyInNyc = process.env.NYC_CWD !== undefined;\r\n if (config.cover && runner.supportsCoverage && !alreadyInNyc)\r\n return process.exit(await relaunchForCoverage());\r\n\r\n if (runner.initialize)\r\n await runner.initialize(config);\r\n\r\n // In debug mode, we should now start listening for debugger connections (if we're not already).\r\n if (config.debug)\r\n startDebugger(config.ports.debugging);\r\n\r\n // Source map any errors in this backend process\r\n require(\"source-map-support\").install();\r\n\r\n /**\r\n * undefined if backendInitModule not specified;\r\n * callback if a cleanup function is returned by the backendInitModule export;\r\n * empty object if nothing is exported by the backendInitModule\r\n */\r\n let cleanUpCallback: undefined | (() => Promise<void>) | {};\r\n if (config.backendInitModule)\r\n cleanUpCallback = await require(config.backendInitModule);\r\n\r\n await runner.runTests(config);\r\n\r\n if (typeof cleanUpCallback === \"function\" && runner.supportsCleanup)\r\n await cleanUpCallback();\r\n}\r\n"]}
1
+ {"version":3,"file":"CertaCore.js","sourceRoot":"","sources":["../src/CertaCore.ts"],"names":[],"mappings":";;;AAqCA,sBA+BC;AApED;;;+FAG+F;AAC/F,8EAA2E;AAC3E,wEAAqE;AAErE,kEAA+D;AAC/D,yDAA4D;AAC5D,mDAAmD;AASnD,MAAa,SAAS;IAGb,MAAM,CAAC,kBAAkB,CAAC,WAAmB,EAAE,MAAuB;QAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,WAAmB;QAC7C,IAAI,WAAW,IAAI,IAAI,CAAC,QAAQ;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,GAAG,CAAC,CAAC;IAC1D,CAAC;;AAZH,8BAaC;AAZgB,kBAAQ,GAA+C,EAAE,CAAC;AAc3E,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,+BAAc,CAAC,CAAC;AACrD,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mCAAgB,CAAC,CAAC;AACzD,SAAS,CAAC,kBAAkB,CAAC,UAAU,EAAE,uCAAkB,CAAC,CAAC;AAEtD,KAAK,UAAU,KAAK,CAAC,WAAmB,EAAE,MAAmB;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAEpD,wHAAwH;IACxH,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC;IACvD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,YAAY;QAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,IAAA,mCAAmB,GAAE,CAAC,CAAC;IAEnD,IAAI,MAAM,CAAC,UAAU;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAElC,gGAAgG;IAChG,IAAI,MAAM,CAAC,KAAK;QACd,IAAA,0BAAa,EAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAExC,gDAAgD;IAChD,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;IAExC;;;;OAIG;IACH,IAAI,eAAuD,CAAC;IAC5D,IAAI,MAAM,CAAC,iBAAiB;QAC1B,eAAe,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5D,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE9B,IAAI,OAAO,eAAe,KAAK,UAAU,IAAI,MAAM,CAAC,eAAe;QACjE,MAAM,eAAe,EAAE,CAAC;AAC5B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ElectronTestRunner } from \"./runners/electron/ElectronTestRunner\";\r\nimport { ChromeTestRunner } from \"./runners/chrome/ChromeTestRunner\";\r\nimport { CertaConfig } from \"./CertaConfig\";\r\nimport { NodeTestRunner } from \"./runners/node/NodeTestRunner\";\r\nimport { relaunchForCoverage } from \"./utils/CoverageUtils\";\r\nimport { startDebugger } from \"./utils/SpawnUtils\";\r\n\r\nexport interface CertaTestRunner {\r\n readonly supportsCoverage: boolean;\r\n readonly supportsCleanup: boolean;\r\n initialize?(config: CertaConfig): Promise<void>;\r\n runTests(config: CertaConfig): Promise<void>;\r\n}\r\n\r\nexport class CertaCore {\r\n private static _runners: { [environment: string]: CertaTestRunner } = {};\r\n\r\n public static registerTestRunner(environment: string, runner: CertaTestRunner) {\r\n this._runners[environment] = runner;\r\n }\r\n\r\n public static getTestRunner(environment: string): CertaTestRunner {\r\n if (environment in this._runners)\r\n return this._runners[environment];\r\n\r\n throw new Error(`Unknown TestRunner: \"${environment}\"`);\r\n }\r\n}\r\n\r\nCertaCore.registerTestRunner(\"node\", NodeTestRunner);\r\nCertaCore.registerTestRunner(\"chrome\", ChromeTestRunner);\r\nCertaCore.registerTestRunner(\"electron\", ElectronTestRunner);\r\n\r\nexport async function certa(environment: string, config: CertaConfig): Promise<void> {\r\n const runner = CertaCore.getTestRunner(environment);\r\n\r\n // If we're going to measure code coverage, we should stop now and let an `nyc`-wrapped child process take it from here.\r\n const alreadyInNyc = process.env.NYC_CWD !== undefined;\r\n if (config.cover && runner.supportsCoverage && !alreadyInNyc)\r\n return process.exit(await relaunchForCoverage());\r\n\r\n if (runner.initialize)\r\n await runner.initialize(config);\r\n\r\n // In debug mode, we should now start listening for debugger connections (if we're not already).\r\n if (config.debug)\r\n startDebugger(config.ports.debugging);\r\n\r\n // Source map any errors in this backend process\r\n require(\"source-map-support\").install();\r\n\r\n /**\r\n * undefined if backendInitModule not specified;\r\n * callback if a cleanup function is returned by the backendInitModule export;\r\n * empty object if nothing is exported by the backendInitModule\r\n */\r\n let cleanUpCallback: undefined | (() => Promise<void>) | {};\r\n if (config.backendInitModule)\r\n cleanUpCallback = await require(config.backendInitModule);\r\n\r\n await runner.runTests(config);\r\n\r\n if (typeof cleanUpCallback === \"function\" && runner.supportsCleanup)\r\n await cleanUpCallback();\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configureRemoteReporter = void 0;
3
+ exports.configureRemoteReporter = configureRemoteReporter;
4
4
  /*---------------------------------------------------------------------------------------------
5
5
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
6
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -52,5 +52,4 @@ async function configureRemoteReporter(page) {
52
52
  })();
53
53
  });
54
54
  }
55
- exports.configureRemoteReporter = configureRemoteReporter;
56
55
  //# sourceMappingURL=MochaRemoteReporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MochaRemoteReporter.js","sourceRoot":"","sources":["../../../src/runners/chrome/MochaRemoteReporter.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,mCAAsC;AAEtC,6BAA2B;AAGpB,KAAK,UAAU,uBAAuB,CAAC,IAAU;IACtD,0DAA0D;IAC1D,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,qBAAY,EAAE,CAAC;IACtC,IAAI,YAAiB,CAAC;IAEtB,kFAAkF;IAClF,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,CAAC,gBAAwB,EAAE,YAAoB,EAAE,eAAoB,EAAE,EAAE;QACzH,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAE7D,+DAA+D;QAC/D,yEAAyE;QACzE,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,uFAAuF;QACvF,yEAAyE;QACzE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC9C,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEpC,mEAAmE;QACnE,YAAY,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,kFAAkF;IAClF,MAAM,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,IAAY,EAAE,KAAU,EAAE,GAAG,IAAW,EAAE,EAAE;QAChG,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvB,CAAC,GAAG,EAAE;YACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,QAAQ,GAAG,CAAC,YAAoB,EAAE,eAAoB,EAAE,EAAE;gBAC9D,uEAAuE;gBACvE,MAAM,cAAc;oBAClB,YAAY,MAAoB,EAAE,QAAa;wBAC7C,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBACzH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gCAClC,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACxG,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;oBAChG,CAAC;iBACF;gBACD,OAAO,QAAQ,CAAC,cAA2C,CAAC,CAAC;YAC/D,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAlDD,0DAkDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { EventEmitter } from \"events\";\r\nimport { Page } from \"playwright\";\r\nimport \"./MochaSerializer\";\r\ndeclare const window: any;\r\n\r\nexport async function configureRemoteReporter(page: Page) {\r\n // This will stand in for mocha's \"runner\" on the backend.\r\n // Basically, we'll just be using this to echo events from the frontend runner.\r\n const mockRunner = new EventEmitter();\r\n let realReporter: any;\r\n\r\n // Expose a function to the frontend for initializing the reporter on the backend.\r\n await page.exposeFunction(\"_CertaCreateReporter\", (serializedRunner: string, reporterName: string, reporterOptions: any) => {\r\n const runner = MochaSerializer.deserialize(serializedRunner);\r\n\r\n // Reporters will use these methods to register event handlers.\r\n // Since `runner` has been marshalled via JSON, they don't already exist.\r\n runner.on = mockRunner.on.bind(mockRunner);\r\n runner.once = mockRunner.once.bind(mockRunner);\r\n\r\n // Mocha already knows how to find and construct a reporter object from a reporterName,\r\n // so we can just leverage that instead of having to re-implement it all.\r\n const backendMocha = new (require(\"mocha\"))();\r\n backendMocha.reporter(reporterName);\r\n\r\n // Mocha.reporter saves the reporter constructor in this._reporter.\r\n realReporter = new backendMocha._reporter(runner, { reporterOptions });\r\n });\r\n\r\n // Expose a function to the frontend for initializing the reporter on the backend.\r\n await page.exposeFunction(\"_CertaEmitReporterEvent\", (name: string, stats: any, ...args: any[]) => {\r\n realReporter.stats = stats;\r\n mockRunner.emit(name, ...args.map((a) => MochaSerializer.deserialize(a)));\r\n });\r\n\r\n await page.evaluate(() => {\r\n (() => {\r\n const original = mocha.reporter.bind(mocha);\r\n mocha.reporter = (reporterName: string, reporterOptions: any) => {\r\n // A mocha reporter class that just forwards all events to the backend.\r\n class RemoteReporter {\r\n constructor(runner: Mocha.Runner, _options: any) {\r\n const events = [\"start\", \"end\", \"suite\", \"suite end\", \"test\", \"test end\", \"hook\", \"hook end\", \"pass\", \"fail\", \"pending\"];\r\n for (const event of events) {\r\n runner.on(event, (...args: any[]) => {\r\n window._CertaEmitReporterEvent(event, runner.stats, ...args.map((a) => MochaSerializer.serialize(a)));\r\n });\r\n }\r\n window._CertaCreateReporter(MochaSerializer.serialize(runner), reporterName, reporterOptions);\r\n }\r\n }\r\n return original(RemoteReporter as Mocha.ReporterConstructor);\r\n };\r\n })();\r\n });\r\n}\r\n"]}
1
+ {"version":3,"file":"MochaRemoteReporter.js","sourceRoot":"","sources":["../../../src/runners/chrome/MochaRemoteReporter.ts"],"names":[],"mappings":";;AASA,0DAkDC;AA3DD;;;+FAG+F;AAC/F,mCAAsC;AAEtC,6BAA2B;AAGpB,KAAK,UAAU,uBAAuB,CAAC,IAAU;IACtD,0DAA0D;IAC1D,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,qBAAY,EAAE,CAAC;IACtC,IAAI,YAAiB,CAAC;IAEtB,kFAAkF;IAClF,MAAM,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,CAAC,gBAAwB,EAAE,YAAoB,EAAE,eAAoB,EAAE,EAAE;QACzH,MAAM,MAAM,GAAG,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAE7D,+DAA+D;QAC/D,yEAAyE;QACzE,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/C,uFAAuF;QACvF,yEAAyE;QACzE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC9C,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAEpC,mEAAmE;QACnE,YAAY,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,kFAAkF;IAClF,MAAM,IAAI,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,IAAY,EAAE,KAAU,EAAE,GAAG,IAAW,EAAE,EAAE;QAChG,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvB,CAAC,GAAG,EAAE;YACJ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,KAAK,CAAC,QAAQ,GAAG,CAAC,YAAoB,EAAE,eAAoB,EAAE,EAAE;gBAC9D,uEAAuE;gBACvE,MAAM,cAAc;oBAClB,YAAY,MAAoB,EAAE,QAAa;wBAC7C,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;wBACzH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;4BAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE;gCAClC,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACxG,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM,CAAC,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;oBAChG,CAAC;iBACF;gBACD,OAAO,QAAQ,CAAC,cAA2C,CAAC,CAAC;YAC/D,CAAC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { EventEmitter } from \"events\";\r\nimport { Page } from \"playwright\";\r\nimport \"./MochaSerializer\";\r\ndeclare const window: any;\r\n\r\nexport async function configureRemoteReporter(page: Page) {\r\n // This will stand in for mocha's \"runner\" on the backend.\r\n // Basically, we'll just be using this to echo events from the frontend runner.\r\n const mockRunner = new EventEmitter();\r\n let realReporter: any;\r\n\r\n // Expose a function to the frontend for initializing the reporter on the backend.\r\n await page.exposeFunction(\"_CertaCreateReporter\", (serializedRunner: string, reporterName: string, reporterOptions: any) => {\r\n const runner = MochaSerializer.deserialize(serializedRunner);\r\n\r\n // Reporters will use these methods to register event handlers.\r\n // Since `runner` has been marshalled via JSON, they don't already exist.\r\n runner.on = mockRunner.on.bind(mockRunner);\r\n runner.once = mockRunner.once.bind(mockRunner);\r\n\r\n // Mocha already knows how to find and construct a reporter object from a reporterName,\r\n // so we can just leverage that instead of having to re-implement it all.\r\n const backendMocha = new (require(\"mocha\"))();\r\n backendMocha.reporter(reporterName);\r\n\r\n // Mocha.reporter saves the reporter constructor in this._reporter.\r\n realReporter = new backendMocha._reporter(runner, { reporterOptions });\r\n });\r\n\r\n // Expose a function to the frontend for initializing the reporter on the backend.\r\n await page.exposeFunction(\"_CertaEmitReporterEvent\", (name: string, stats: any, ...args: any[]) => {\r\n realReporter.stats = stats;\r\n mockRunner.emit(name, ...args.map((a) => MochaSerializer.deserialize(a)));\r\n });\r\n\r\n await page.evaluate(() => {\r\n (() => {\r\n const original = mocha.reporter.bind(mocha);\r\n mocha.reporter = (reporterName: string, reporterOptions: any) => {\r\n // A mocha reporter class that just forwards all events to the backend.\r\n class RemoteReporter {\r\n constructor(runner: Mocha.Runner, _options: any) {\r\n const events = [\"start\", \"end\", \"suite\", \"suite end\", \"test\", \"test end\", \"hook\", \"hook end\", \"pass\", \"fail\", \"pending\"];\r\n for (const event of events) {\r\n runner.on(event, (...args: any[]) => {\r\n window._CertaEmitReporterEvent(event, runner.stats, ...args.map((a) => MochaSerializer.serialize(a)));\r\n });\r\n }\r\n window._CertaCreateReporter(MochaSerializer.serialize(runner), reporterName, reporterOptions);\r\n }\r\n }\r\n return original(RemoteReporter as Mocha.ReporterConstructor);\r\n };\r\n })();\r\n });\r\n}\r\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="mocha" />
2
1
  type MochaObj = Mocha.Runnable | Mocha.Suite;
3
2
  /**
4
3
  * Helper for marshalling certain mocha objects between frontend and backend processes.
@@ -102,13 +101,13 @@ declare class MochaSerializer {
102
101
  emit(name: "post-require", context: Mocha.MochaGlobals, file: string, mocha: Mocha): boolean;
103
102
  emit(name: string, ...args: any[]): boolean;
104
103
  off(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Suite;
105
- removeAllListeners(event?: string | symbol | undefined): Mocha.Suite;
104
+ removeAllListeners(event?: string | symbol): Mocha.Suite;
106
105
  setMaxListeners(n: number): Mocha.Suite;
107
106
  getMaxListeners(): number;
108
107
  listeners(eventName: string | symbol): Function[];
109
108
  rawListeners(eventName: string | symbol): Function[];
110
- listenerCount(eventName: string | symbol, listener?: Function | undefined): number;
111
- eventNames(): (string | symbol)[];
109
+ listenerCount(eventName: string | symbol, listener?: Function): number;
110
+ eventNames(): Array<string | symbol>;
112
111
  $$index: number;
113
112
  $$typeName: string;
114
113
  } | {
@@ -146,13 +145,13 @@ declare class MochaSerializer {
146
145
  emit(name: "error", error: any): boolean;
147
146
  emit(name: string, ...args: any[]): boolean;
148
147
  off(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Test;
149
- removeAllListeners(event?: string | symbol | undefined): Mocha.Test;
148
+ removeAllListeners(event?: string | symbol): Mocha.Test;
150
149
  setMaxListeners(n: number): Mocha.Test;
151
150
  getMaxListeners(): number;
152
151
  listeners(eventName: string | symbol): Function[];
153
152
  rawListeners(eventName: string | symbol): Function[];
154
- listenerCount(eventName: string | symbol, listener?: Function | undefined): number;
155
- eventNames(): (string | symbol)[];
153
+ listenerCount(eventName: string | symbol, listener?: Function): number;
154
+ eventNames(): Array<string | symbol>;
156
155
  $$index: number;
157
156
  $$typeName: string;
158
157
  } | {
@@ -189,13 +188,13 @@ declare class MochaSerializer {
189
188
  emit(name: "error", error: any): boolean;
190
189
  emit(name: string, ...args: any[]): boolean;
191
190
  off(eventName: string | symbol, listener: (...args: any[]) => void): Mocha.Hook;
192
- removeAllListeners(event?: string | symbol | undefined): Mocha.Hook;
191
+ removeAllListeners(event?: string | symbol): Mocha.Hook;
193
192
  setMaxListeners(n: number): Mocha.Hook;
194
193
  getMaxListeners(): number;
195
194
  listeners(eventName: string | symbol): Function[];
196
195
  rawListeners(eventName: string | symbol): Function[];
197
- listenerCount(eventName: string | symbol, listener?: Function | undefined): number;
198
- eventNames(): (string | symbol)[];
196
+ listenerCount(eventName: string | symbol, listener?: Function): number;
197
+ eventNames(): Array<string | symbol>;
199
198
  $$index: number;
200
199
  $$typeName: string;
201
200
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"MochaSerializer.d.ts","sourceRoot":"","sources":["../../../src/runners/chrome/MochaSerializer.ts"],"names":[],"mappings":";AAOA,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAkB;WAE5B,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuB5D;;;;;;OAMG;WACW,SAAS,CAAC,IAAI,EAAE,GAAG;IAiBjC;;;OAGG;WACW,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;CAsB5C"}
1
+ {"version":3,"file":"MochaSerializer.d.ts","sourceRoot":"","sources":["../../../src/runners/chrome/MochaSerializer.ts"],"names":[],"mappings":"AAOA,KAAK,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAkB;WAE5B,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuB5D;;;;;;OAMG;WACW,SAAS,CAAC,IAAI,EAAE,GAAG;IAiBjC;;;OAGG;WACW,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;CAsB5C"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeBackendCallback = exports.registerBackendCallback = exports.executeRegisteredCallback = exports.getCallbacksRegisteredOnBackend = void 0;
3
+ exports.getCallbacksRegisteredOnBackend = getCallbacksRegisteredOnBackend;
4
+ exports.executeRegisteredCallback = executeRegisteredCallback;
5
+ exports.registerBackendCallback = registerBackendCallback;
6
+ exports.executeBackendCallback = executeBackendCallback;
4
7
  const isFrontend = (typeof (window) !== "undefined");
5
8
  /** @internal */
6
9
  function getCallbacksRegisteredOnBackend() {
@@ -9,7 +12,6 @@ function getCallbacksRegisteredOnBackend() {
9
12
  global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};
10
13
  return global._CertaRegisteredCallbacks;
11
14
  }
12
- exports.getCallbacksRegisteredOnBackend = getCallbacksRegisteredOnBackend;
13
15
  /** @internal */
14
16
  function executeRegisteredCallback(name, args) {
15
17
  const registeredCallbacks = getCallbacksRegisteredOnBackend();
@@ -17,18 +19,15 @@ function executeRegisteredCallback(name, args) {
17
19
  throw new Error(`Unknown certa backend callback "${name}"`);
18
20
  return registeredCallbacks[name](...args);
19
21
  }
20
- exports.executeRegisteredCallback = executeRegisteredCallback;
21
22
  function registerBackendCallback(name, cb) {
22
23
  if (isFrontend)
23
24
  throw new Error("This should only be called on the backend!");
24
25
  global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};
25
26
  global._CertaRegisteredCallbacks[name] = cb;
26
27
  }
27
- exports.registerBackendCallback = registerBackendCallback;
28
28
  async function executeBackendCallback(name, ...args) {
29
29
  if (!isFrontend)
30
30
  return executeRegisteredCallback(name, args);
31
31
  return window._CertaSendToBackend(name, args);
32
32
  }
33
- exports.executeBackendCallback = executeBackendCallback;
34
33
  //# sourceMappingURL=CallbackUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallbackUtils.js","sourceRoot":"","sources":["../../src/utils/CallbackUtils.ts"],"names":[],"mappings":";;;AAOA,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC;AAGrD,gBAAgB;AAChB,SAAgB,+BAA+B;IAC7C,IAAI,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAEhE,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC;IAC1E,OAAO,MAAM,CAAC,yBAAyB,CAAC;AAC1C,CAAC;AAND,0EAMC;AAED,gBAAgB;AAChB,SAAgB,yBAAyB,CAAC,IAAY,EAAE,IAAW;IACjE,MAAM,mBAAmB,GAAG,+BAA+B,EAAE,CAAC;IAC9D,IAAI,CAAC,CAAC,IAAI,IAAI,mBAAmB,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC;IAE9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAND,8DAMC;AAED,SAAgB,uBAAuB,CAAC,IAAY,EAAE,EAAwB;IAC5E,IAAI,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAEhE,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC;IAC1E,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C,CAAC;AAND,0DAMC;AAEM,KAAK,UAAU,sBAAsB,CAAC,IAAY,EAAE,GAAG,IAAW;IACvE,IAAI,CAAC,UAAU;QACb,OAAO,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AALD,wDAKC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\ndeclare const window: any;\r\ndeclare const global: any;\r\n\r\nconst isFrontend = (typeof (window) !== \"undefined\");\r\nexport type CertaBackendCallback = (...args: any[]) => void | null | undefined | number | string | boolean | Promise<void> | Promise<null> | Promise<undefined> | Promise<number> | Promise<string> | Promise<boolean>;\r\n\r\n/** @internal */\r\nexport function getCallbacksRegisteredOnBackend(): { [name: string]: CertaBackendCallback } {\r\n if (isFrontend)\r\n throw new Error(\"This should only be called on the backend!\");\r\n\r\n global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};\r\n return global._CertaRegisteredCallbacks;\r\n}\r\n\r\n/** @internal */\r\nexport function executeRegisteredCallback(name: string, args: any[]): any {\r\n const registeredCallbacks = getCallbacksRegisteredOnBackend();\r\n if (!(name in registeredCallbacks))\r\n throw new Error(`Unknown certa backend callback \"${name}\"`);\r\n\r\n return registeredCallbacks[name](...args);\r\n}\r\n\r\nexport function registerBackendCallback(name: string, cb: CertaBackendCallback): void {\r\n if (isFrontend)\r\n throw new Error(\"This should only be called on the backend!\");\r\n\r\n global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};\r\n global._CertaRegisteredCallbacks[name] = cb;\r\n}\r\n\r\nexport async function executeBackendCallback(name: string, ...args: any[]): Promise<any> {\r\n if (!isFrontend)\r\n return executeRegisteredCallback(name, args);\r\n\r\n return window._CertaSendToBackend(name, args);\r\n}\r\n"]}
1
+ {"version":3,"file":"CallbackUtils.js","sourceRoot":"","sources":["../../src/utils/CallbackUtils.ts"],"names":[],"mappings":";;AAWA,0EAMC;AAGD,8DAMC;AAED,0DAMC;AAED,wDAKC;AAlCD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC;AAGrD,gBAAgB;AAChB,SAAgB,+BAA+B;IAC7C,IAAI,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAEhE,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC;IAC1E,OAAO,MAAM,CAAC,yBAAyB,CAAC;AAC1C,CAAC;AAED,gBAAgB;AAChB,SAAgB,yBAAyB,CAAC,IAAY,EAAE,IAAW;IACjE,MAAM,mBAAmB,GAAG,+BAA+B,EAAE,CAAC;IAC9D,IAAI,CAAC,CAAC,IAAI,IAAI,mBAAmB,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,GAAG,CAAC,CAAC;IAE9D,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,uBAAuB,CAAC,IAAY,EAAE,EAAwB;IAC5E,IAAI,UAAU;QACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAEhE,MAAM,CAAC,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC;IAC1E,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9C,CAAC;AAEM,KAAK,UAAU,sBAAsB,CAAC,IAAY,EAAE,GAAG,IAAW;IACvE,IAAI,CAAC,UAAU;QACb,OAAO,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\ndeclare const window: any;\r\ndeclare const global: any;\r\n\r\nconst isFrontend = (typeof (window) !== \"undefined\");\r\nexport type CertaBackendCallback = (...args: any[]) => void | null | undefined | number | string | boolean | Promise<void> | Promise<null> | Promise<undefined> | Promise<number> | Promise<string> | Promise<boolean>;\r\n\r\n/** @internal */\r\nexport function getCallbacksRegisteredOnBackend(): { [name: string]: CertaBackendCallback } {\r\n if (isFrontend)\r\n throw new Error(\"This should only be called on the backend!\");\r\n\r\n global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};\r\n return global._CertaRegisteredCallbacks;\r\n}\r\n\r\n/** @internal */\r\nexport function executeRegisteredCallback(name: string, args: any[]): any {\r\n const registeredCallbacks = getCallbacksRegisteredOnBackend();\r\n if (!(name in registeredCallbacks))\r\n throw new Error(`Unknown certa backend callback \"${name}\"`);\r\n\r\n return registeredCallbacks[name](...args);\r\n}\r\n\r\nexport function registerBackendCallback(name: string, cb: CertaBackendCallback): void {\r\n if (isFrontend)\r\n throw new Error(\"This should only be called on the backend!\");\r\n\r\n global._CertaRegisteredCallbacks = global._CertaRegisteredCallbacks || {};\r\n global._CertaRegisteredCallbacks[name] = cb;\r\n}\r\n\r\nexport async function executeBackendCallback(name: string, ...args: any[]): Promise<any> {\r\n if (!isFrontend)\r\n return executeRegisteredCallback(name, args);\r\n\r\n return window._CertaSendToBackend(name, args);\r\n}\r\n"]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.writeCoverageData = exports.relaunchForCoverage = void 0;
3
+ exports.relaunchForCoverage = relaunchForCoverage;
4
+ exports.writeCoverageData = writeCoverageData;
4
5
  /*---------------------------------------------------------------------------------------------
5
6
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
7
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -31,7 +32,6 @@ async function relaunchForCoverage() {
31
32
  // Certa should exit with an error code if _either_ step failed.
32
33
  return instrumentedStatus || reporterStatus;
33
34
  }
34
- exports.relaunchForCoverage = relaunchForCoverage;
35
35
  /** Gets the current effective nyc config from `process.env`. Assumes we're running as a child process of `nyc`. */
36
36
  function getNycConfig() {
37
37
  const nycConfig = process.env.NYC_CONFIG;
@@ -57,5 +57,4 @@ function writeCoverageData(coverageData) {
57
57
  const coverageFileName = path.join(nycTempDirAbsolute, `${Math.random().toString(36).substring(2)}.json`);
58
58
  fs.writeFileSync(coverageFileName, JSON.stringify(coverageData));
59
59
  }
60
- exports.writeCoverageData = writeCoverageData;
61
60
  //# sourceMappingURL=CoverageUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoverageUtils.js","sourceRoot":"","sources":["../../src/utils/CoverageUtils.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,yBAAyB;AACzB,6BAA6B;AAC7B,6CAAyD;AAEzD;;;;GAIG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG;QACnB,GAAG;QACH,UAAU;QACV,IAAI;QACJ,GAAG,OAAO,CAAC,IAAI;KAChB,CAAC;IAEF,+GAA+G;IAC/G,kGAAkG;IAClG,MAAM,mBAAmB,GAAG,IAAA,8BAAiB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,IAAA,mBAAM,EAAC,mBAAmB,CAAC,CAAC;IAE7D,2EAA2E;IAC3E,MAAM,eAAe,GAAG,IAAA,8BAAiB,EAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAM,EAAC,eAAe,CAAC,CAAC;IAErD,gEAAgE;IAChE,OAAO,kBAAkB,IAAI,cAAc,CAAC;AAC9C,CAAC;AApBD,kDAoBC;AAED,mHAAmH;AACnH,SAAS,YAAY;IACnB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE1D,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,YAAiB;IACjD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;QACxB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,kBAAkB,mBAAmB,CAAC,CAAC;IAE5G,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1G,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAdD,8CAcC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { onExit, spawnChildProcess } from \"./SpawnUtils\";\r\n\r\n/**\r\n * Helper function for relaunching (as a child process) the current process running under `nyc` for measuring code coverage.\r\n * Once that completes, a second `nyc` child process will be spawned to report the coverage results.\r\n * Returns a promise that will be resolved with either 0 or the first non-zero child process exit code, once the reporter process terminates.\r\n */\r\nexport async function relaunchForCoverage(): Promise<number> {\r\n const nyc = require.resolve(\"nyc/bin/nyc\");\r\n const relaunchArgs = [\r\n nyc,\r\n \"--silent\",\r\n \"--\",\r\n ...process.argv,\r\n ];\r\n\r\n // By splitting \"instrument/runTests\" and \"report coverage\" into two steps, we allow test runners the option of\r\n // running separate (concurrent) instrumented processes that also write to `nyc`'s temp directory.\r\n const instrumentedProcess = spawnChildProcess(\"node\", relaunchArgs);\r\n const instrumentedStatus = await onExit(instrumentedProcess);\r\n\r\n // Now create a *combined* report for everything in `nyc`'s temp directory.\r\n const reporterProcess = spawnChildProcess(\"node\", [require.resolve(\"nyc/bin/nyc\"), \"report\"]);\r\n const reporterStatus = await onExit(reporterProcess);\r\n\r\n // Certa should exit with an error code if _either_ step failed.\r\n return instrumentedStatus || reporterStatus;\r\n}\r\n\r\n/** Gets the current effective nyc config from `process.env`. Assumes we're running as a child process of `nyc`. */\r\nfunction getNycConfig(): any {\r\n const nycConfig = process.env.NYC_CONFIG;\r\n if (!nycConfig)\r\n throw new Error(\"NYC_CONFIG is not set in environment\");\r\n\r\n return JSON.parse(nycConfig);\r\n}\r\n\r\n/**\r\n * Writes nyc or istanbul-generated coverage data to a uniquely-named file inside `nyc`'s temp directory.\r\n * All such files in the nyc temp directory are merged together when nyc reports are generated via `nyc report`.\r\n * @param coverageData The value of an nyc/istanbul-generated `__coverage__` object.\r\n */\r\nexport function writeCoverageData(coverageData: any): void {\r\n const nycConfig = getNycConfig();\r\n const nycCWD = nycConfig.cwd;\r\n const nycTempDir = nycConfig[\"temp-dir\"] || nycConfig[\"temp-directory\"];\r\n if (!nycCWD || !nycTempDir)\r\n throw new Error(\"Failed to determine nyc temp directory.\");\r\n\r\n const nycTempDirAbsolute = path.resolve(nycCWD, nycTempDir);\r\n if (!fs.existsSync(nycTempDirAbsolute))\r\n throw new Error(`Cannot save coverage data - nyc temp directory \"${nycTempDirAbsolute}\" does not exist.`);\r\n\r\n // Generate a unique filename, just like `nyc` does.\r\n const coverageFileName = path.join(nycTempDirAbsolute, `${Math.random().toString(36).substring(2)}.json`);\r\n fs.writeFileSync(coverageFileName, JSON.stringify(coverageData));\r\n}\r\n"]}
1
+ {"version":3,"file":"CoverageUtils.js","sourceRoot":"","sources":["../../src/utils/CoverageUtils.ts"],"names":[],"mappings":";;AAaA,kDAoBC;AAgBD,8CAcC;AA/DD;;;+FAG+F;AAC/F,yBAAyB;AACzB,6BAA6B;AAC7B,6CAAyD;AAEzD;;;;GAIG;AACI,KAAK,UAAU,mBAAmB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG;QACnB,GAAG;QACH,UAAU;QACV,IAAI;QACJ,GAAG,OAAO,CAAC,IAAI;KAChB,CAAC;IAEF,+GAA+G;IAC/G,kGAAkG;IAClG,MAAM,mBAAmB,GAAG,IAAA,8BAAiB,EAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,MAAM,IAAA,mBAAM,EAAC,mBAAmB,CAAC,CAAC;IAE7D,2EAA2E;IAC3E,MAAM,eAAe,GAAG,IAAA,8BAAiB,EAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9F,MAAM,cAAc,GAAG,MAAM,IAAA,mBAAM,EAAC,eAAe,CAAC,CAAC;IAErD,gEAAgE;IAChE,OAAO,kBAAkB,IAAI,cAAc,CAAC;AAC9C,CAAC;AAED,mHAAmH;AACnH,SAAS,YAAY;IACnB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,CAAC,SAAS;QACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAE1D,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,YAAiB;IACjD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;IAC7B,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU;QACxB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,kBAAkB,mBAAmB,CAAC,CAAC;IAE5G,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1G,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { onExit, spawnChildProcess } from \"./SpawnUtils\";\r\n\r\n/**\r\n * Helper function for relaunching (as a child process) the current process running under `nyc` for measuring code coverage.\r\n * Once that completes, a second `nyc` child process will be spawned to report the coverage results.\r\n * Returns a promise that will be resolved with either 0 or the first non-zero child process exit code, once the reporter process terminates.\r\n */\r\nexport async function relaunchForCoverage(): Promise<number> {\r\n const nyc = require.resolve(\"nyc/bin/nyc\");\r\n const relaunchArgs = [\r\n nyc,\r\n \"--silent\",\r\n \"--\",\r\n ...process.argv,\r\n ];\r\n\r\n // By splitting \"instrument/runTests\" and \"report coverage\" into two steps, we allow test runners the option of\r\n // running separate (concurrent) instrumented processes that also write to `nyc`'s temp directory.\r\n const instrumentedProcess = spawnChildProcess(\"node\", relaunchArgs);\r\n const instrumentedStatus = await onExit(instrumentedProcess);\r\n\r\n // Now create a *combined* report for everything in `nyc`'s temp directory.\r\n const reporterProcess = spawnChildProcess(\"node\", [require.resolve(\"nyc/bin/nyc\"), \"report\"]);\r\n const reporterStatus = await onExit(reporterProcess);\r\n\r\n // Certa should exit with an error code if _either_ step failed.\r\n return instrumentedStatus || reporterStatus;\r\n}\r\n\r\n/** Gets the current effective nyc config from `process.env`. Assumes we're running as a child process of `nyc`. */\r\nfunction getNycConfig(): any {\r\n const nycConfig = process.env.NYC_CONFIG;\r\n if (!nycConfig)\r\n throw new Error(\"NYC_CONFIG is not set in environment\");\r\n\r\n return JSON.parse(nycConfig);\r\n}\r\n\r\n/**\r\n * Writes nyc or istanbul-generated coverage data to a uniquely-named file inside `nyc`'s temp directory.\r\n * All such files in the nyc temp directory are merged together when nyc reports are generated via `nyc report`.\r\n * @param coverageData The value of an nyc/istanbul-generated `__coverage__` object.\r\n */\r\nexport function writeCoverageData(coverageData: any): void {\r\n const nycConfig = getNycConfig();\r\n const nycCWD = nycConfig.cwd;\r\n const nycTempDir = nycConfig[\"temp-dir\"] || nycConfig[\"temp-directory\"];\r\n if (!nycCWD || !nycTempDir)\r\n throw new Error(\"Failed to determine nyc temp directory.\");\r\n\r\n const nycTempDirAbsolute = path.resolve(nycCWD, nycTempDir);\r\n if (!fs.existsSync(nycTempDirAbsolute))\r\n throw new Error(`Cannot save coverage data - nyc temp directory \"${nycTempDirAbsolute}\" does not exist.`);\r\n\r\n // Generate a unique filename, just like `nyc` does.\r\n const coverageFileName = path.join(nycTempDirAbsolute, `${Math.random().toString(36).substring(2)}.json`);\r\n fs.writeFileSync(coverageFileName, JSON.stringify(coverageData));\r\n}\r\n"]}
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
1
  import { ChildProcess } from "child_process";
4
2
  /**
5
3
  * Helper function for spawning a child process with the same cwd, env, stdout, and stderr as the current process.
@@ -1 +1 @@
1
- {"version":3,"file":"SpawnUtils.d.ts","sourceRoot":"","sources":["../../src/utils/SpawnUtils.ts"],"names":[],"mappings":";;AAIA,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAC;AAGlE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,UAAQ,GAAG,YAAY,CAYrI;AAED,yGAAyG;AACzG,wBAAsB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjE;AAoBD;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAW1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,QAMzC"}
1
+ {"version":3,"file":"SpawnUtils.d.ts","sourceRoot":"","sources":["../../src/utils/SpawnUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAC;AAGlE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,UAAQ,GAAG,YAAY,CAYrI;AAED,yGAAyG;AACzG,wBAAsB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjE;AAoBD;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAW1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,QAMzC"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startDebugger = exports.relaunchInElectron = exports.onExit = exports.spawnChildProcess = void 0;
3
+ exports.spawnChildProcess = spawnChildProcess;
4
+ exports.onExit = onExit;
5
+ exports.relaunchInElectron = relaunchInElectron;
6
+ exports.startDebugger = startDebugger;
4
7
  /*---------------------------------------------------------------------------------------------
5
8
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
9
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -27,14 +30,12 @@ function spawnChildProcess(command, args, env, useIpc = false) {
27
30
  childProcess.stderr.on("data", (data) => process.stderr.write(data));
28
31
  return childProcess;
29
32
  }
30
- exports.spawnChildProcess = spawnChildProcess;
31
33
  /** Returns a Promise that will be resolved with the given child process's exit code upon termination. */
32
34
  async function onExit(child) {
33
35
  return new Promise((resolve) => {
34
36
  child.on("exit", (status) => resolve(status || 0));
35
37
  });
36
38
  }
37
- exports.onExit = onExit;
38
39
  /** Returns a Promise that will be resolved with the given child process's exit code upon termination. */
39
40
  async function onExitElectronApp(child) {
40
41
  let messageExitCode = 1; // Default to error
@@ -65,7 +66,6 @@ async function relaunchInElectron() {
65
66
  const child = spawnChildProcess(require("electron/index.js"), args, undefined, true);
66
67
  return onExitElectronApp(child);
67
68
  }
68
- exports.relaunchInElectron = relaunchInElectron;
69
69
  /**
70
70
  * Activates the v8 inspector and starts listening on the given port, then breaks as soon as a debugger has connected.
71
71
  * This is essentially what node does when run with `--inspect-brk={port}`, but doing this manually gives us more control
@@ -81,5 +81,4 @@ function startDebugger(port) {
81
81
  return;
82
82
  inspector.open(port, undefined, true);
83
83
  }
84
- exports.startDebugger = startDebugger;
85
84
  //# sourceMappingURL=SpawnUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SpawnUtils.js","sourceRoot":"","sources":["../../src/utils/SpawnUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ChildProcess, spawn, StdioOptions } from \"child_process\";\r\nimport * as inspector from \"inspector\";\r\n\r\n/**\r\n * Helper function for spawning a child process with the same cwd, env, stdout, and stderr as the current process.\r\n * Processes spawned by this function will also have an IPC channel, so the may communicate with their parent via `process.send()`.\r\n * @param command The command to run.\r\n * @param args List of string arguments.\r\n * @param env Environment vars to override in the child process.\r\n * @param useIpc Whether to enable an IPC channel when spawning.\r\n */\r\nexport function spawnChildProcess(command: string, args: ReadonlyArray<string>, env?: NodeJS.ProcessEnv, useIpc = false): ChildProcess {\r\n const childEnv = { ...process.env, ...(env || {}) };\r\n\r\n // FIXME: We should be able to remove the useIpc param and just always enable it,\r\n // but it's not safe to spawn electron with IPC enabled until https://github.com/electron/electron/issues/17044 is fixed.\r\n const stdio: StdioOptions = (useIpc) ? [\"ipc\", \"pipe\", \"pipe\"] : \"pipe\";\r\n const childProcess = spawn(command, args, { stdio, cwd: process.cwd(), env: childEnv });\r\n // For some reason, spawning using `stdio: \"inherit\"` results in some garbled output (for example, \"✓\" is printed as \"ΓêÜ\").\r\n // Using `stdio: \"pipe\"` and manually redirecting the output here seems to work though.\r\n childProcess.stdout!.on(\"data\", (data: any) => process.stdout.write(data));\r\n childProcess.stderr!.on(\"data\", (data: any) => process.stderr.write(data));\r\n return childProcess;\r\n}\r\n\r\n/** Returns a Promise that will be resolved with the given child process's exit code upon termination. */\r\nexport async function onExit(child: ChildProcess): Promise<number> {\r\n return new Promise((resolve) => {\r\n child.on(\"exit\", (status) => resolve(status || 0));\r\n });\r\n}\r\n\r\n/** Returns a Promise that will be resolved with the given child process's exit code upon termination. */\r\nasync function onExitElectronApp(child: ChildProcess): Promise<number> {\r\n let messageExitCode = 1; // Default to error\r\n child.on(\"message\", (message: any) => {\r\n messageExitCode = message.exitCode;\r\n });\r\n\r\n return new Promise((resolve) => {\r\n child.on(\"exit\", (_exitCode) => {\r\n // Note: Upgrading to electron 10 seems to cause the electron child process to always exit with 3221225477 = 0xC0000005(Access Violation).\r\n // This causes the exitCode we pass to app.exit(_exitCode) to be lost. To work around this issue, we instead pass a message from the\r\n // child process (see ElectronTestRunner), right before we call app.exit(). This message includes the exitCode based on the status of the\r\n // test runs. See ElectronTestRunner.runTests, and the above listener to the \"message\" event.\r\n resolve(messageExitCode);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Helper function for relaunching (as a child process) the current process in electron instead of node.\r\n * Returns a promise that will be resolved with the exit code of the child process, once it terminates.\r\n */\r\nexport async function relaunchInElectron(): Promise<number> {\r\n const args = process.argv.slice(1);\r\n\r\n // '--debug' is not allowed in Electron and '--inspect' will automatically start a debugger,\r\n // so we use custom parameter to indicate what we want to start debugger ourselves.\r\n const debugIdx = args.indexOf(\"--debug\");\r\n if (debugIdx >= 0)\r\n args[debugIdx] = \"--debug-electron\";\r\n\r\n const child = spawnChildProcess(require(\"electron/index.js\"), args, undefined, true);\r\n return onExitElectronApp(child);\r\n}\r\n\r\n/**\r\n * Activates the v8 inspector and starts listening on the given port, then breaks as soon as a debugger has connected.\r\n * This is essentially what node does when run with `--inspect-brk={port}`, but doing this manually gives us more control\r\n * over precisely _which_ child process connects to the debugger.\r\n *\r\n * For example, when using the chrome test runner, we want debug the original certa process (\"node certa ...args\") as the\r\n * test \"backend\", but with the electron test runner, we want to debug a child process (\"electron certa ...args\").\r\n * @param port Port to listen on for inspector connections.\r\n */\r\nexport function startDebugger(port: number) {\r\n // Don't try to activate if there's already an active inspector.\r\n if (inspector.url())\r\n return;\r\n\r\n inspector.open(port, undefined, true);\r\n}\r\n"]}
1
+ {"version":3,"file":"SpawnUtils.js","sourceRoot":"","sources":["../../src/utils/SpawnUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ChildProcess, spawn, StdioOptions } from \"child_process\";\r\nimport * as inspector from \"inspector\";\r\n\r\n/**\r\n * Helper function for spawning a child process with the same cwd, env, stdout, and stderr as the current process.\r\n * Processes spawned by this function will also have an IPC channel, so the may communicate with their parent via `process.send()`.\r\n * @param command The command to run.\r\n * @param args List of string arguments.\r\n * @param env Environment vars to override in the child process.\r\n * @param useIpc Whether to enable an IPC channel when spawning.\r\n */\r\nexport function spawnChildProcess(command: string, args: ReadonlyArray<string>, env?: NodeJS.ProcessEnv, useIpc = false): ChildProcess {\r\n const childEnv = { ...process.env, ...(env || {}) };\r\n\r\n // FIXME: We should be able to remove the useIpc param and just always enable it,\r\n // but it's not safe to spawn electron with IPC enabled until https://github.com/electron/electron/issues/17044 is fixed.\r\n const stdio: StdioOptions = (useIpc) ? [\"ipc\", \"pipe\", \"pipe\"] : \"pipe\";\r\n const childProcess = spawn(command, args, { stdio, cwd: process.cwd(), env: childEnv });\r\n // For some reason, spawning using `stdio: \"inherit\"` results in some garbled output (for example, \"✓\" is printed as \"ΓêÜ\").\r\n // Using `stdio: \"pipe\"` and manually redirecting the output here seems to work though.\r\n childProcess.stdout!.on(\"data\", (data: any) => process.stdout.write(data));\r\n childProcess.stderr!.on(\"data\", (data: any) => process.stderr.write(data));\r\n return childProcess;\r\n}\r\n\r\n/** Returns a Promise that will be resolved with the given child process's exit code upon termination. */\r\nexport async function onExit(child: ChildProcess): Promise<number> {\r\n return new Promise((resolve) => {\r\n child.on(\"exit\", (status) => resolve(status || 0));\r\n });\r\n}\r\n\r\n/** Returns a Promise that will be resolved with the given child process's exit code upon termination. */\r\nasync function onExitElectronApp(child: ChildProcess): Promise<number> {\r\n let messageExitCode = 1; // Default to error\r\n child.on(\"message\", (message: any) => {\r\n messageExitCode = message.exitCode;\r\n });\r\n\r\n return new Promise((resolve) => {\r\n child.on(\"exit\", (_exitCode) => {\r\n // Note: Upgrading to electron 10 seems to cause the electron child process to always exit with 3221225477 = 0xC0000005(Access Violation).\r\n // This causes the exitCode we pass to app.exit(_exitCode) to be lost. To work around this issue, we instead pass a message from the\r\n // child process (see ElectronTestRunner), right before we call app.exit(). This message includes the exitCode based on the status of the\r\n // test runs. See ElectronTestRunner.runTests, and the above listener to the \"message\" event.\r\n resolve(messageExitCode);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Helper function for relaunching (as a child process) the current process in electron instead of node.\r\n * Returns a promise that will be resolved with the exit code of the child process, once it terminates.\r\n */\r\nexport async function relaunchInElectron(): Promise<number> {\r\n const args = process.argv.slice(1);\r\n\r\n // '--debug' is not allowed in Electron and '--inspect' will automatically start a debugger,\r\n // so we use custom parameter to indicate what we want to start debugger ourselves.\r\n const debugIdx = args.indexOf(\"--debug\");\r\n if (debugIdx >= 0)\r\n args[debugIdx] = \"--debug-electron\";\r\n\r\n const child = spawnChildProcess(require(\"electron/index.js\"), args, undefined, true);\r\n return onExitElectronApp(child);\r\n}\r\n\r\n/**\r\n * Activates the v8 inspector and starts listening on the given port, then breaks as soon as a debugger has connected.\r\n * This is essentially what node does when run with `--inspect-brk={port}`, but doing this manually gives us more control\r\n * over precisely _which_ child process connects to the debugger.\r\n *\r\n * For example, when using the chrome test runner, we want debug the original certa process (\"node certa ...args\") as the\r\n * test \"backend\", but with the electron test runner, we want to debug a child process (\"electron certa ...args\").\r\n * @param port Port to listen on for inspector connections.\r\n */\r\nexport function startDebugger(port: number) {\r\n // Don't try to activate if there's already an active inspector.\r\n if (inspector.url())\r\n return;\r\n\r\n inspector.open(port, undefined, true);\r\n}\r\n"]}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  declare const sourceMapSupport: any;
3
2
  declare const originalPrepareStackTrace: ((err: Error, stackTraces: NodeJS.CallSite[]) => any) | undefined;
4
3
  //# sourceMappingURL=initSourceMaps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initSourceMaps.d.ts","sourceRoot":"","sources":["../../src/utils/initSourceMaps.ts"],"names":[],"mappings":";AAOA,OAAO,CAAC,MAAM,gBAAgB,EAAE,GAAG,CAAC;AAKpC,QAAA,MAAM,yBAAyB,mEAA0B,CAAC"}
1
+ {"version":3,"file":"initSourceMaps.d.ts","sourceRoot":"","sources":["../../src/utils/initSourceMaps.ts"],"names":[],"mappings":"AAOA,OAAO,CAAC,MAAM,gBAAgB,EAAE,GAAG,CAAC;AAKpC,QAAA,MAAM,yBAAyB,6BARoB,OAAS,QAAO,uBAQV,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/certa",
3
- "version": "4.10.0-dev.30",
3
+ "version": "4.10.0-dev.32",
4
4
  "description": "A mocha-based integration test runner",
5
5
  "license": "MIT",
6
6
  "main": "bin/certa.js",
@@ -46,8 +46,8 @@
46
46
  "eslint": "^8.56.0",
47
47
  "nyc": "^15.1.0",
48
48
  "rimraf": "^3.0.2",
49
- "typescript": "~5.3.3",
50
- "@itwin/build-tools": "4.10.0-dev.30"
49
+ "typescript": "~5.6.2",
50
+ "@itwin/build-tools": "4.10.0-dev.32"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "electron": ">=23.0.0 <34.0.0"