@itwin/certa 5.1.0-dev.9 → 5.2.0-dev.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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,67 @@
1
1
  # Change Log - @itwin/certa
2
2
 
3
- This log was last generated on Wed, 30 Apr 2025 13:16:15 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 06 Aug 2025 15:37:23 GMT and should not be manually modified.
4
+
5
+ ## 5.0.5
6
+ Wed, 06 Aug 2025 15:34:15 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 5.0.4
11
+ Wed, 16 Jul 2025 14:59:59 GMT
12
+
13
+ _Version update only_
14
+
15
+ ## 5.0.3
16
+ Fri, 11 Jul 2025 00:56:56 GMT
17
+
18
+ _Version update only_
19
+
20
+ ## 5.0.2
21
+ Thu, 26 Jun 2025 22:16:01 GMT
22
+
23
+ _Version update only_
24
+
25
+ ## 5.0.1
26
+ Tue, 17 Jun 2025 18:33:51 GMT
27
+
28
+ _Version update only_
29
+
30
+ ## 5.0.0
31
+ Fri, 13 Jun 2025 20:25:38 GMT
32
+
33
+ ### Updates
34
+
35
+ - Dropped support for Node 18
36
+ - Dropped support for Electron 32 and older
37
+ - Upgrade to Electron 34, drop support for Electron 33
38
+ - Upgrade to Electron 35, drop support for Electron 34
39
+ - Add support for Electron 36
40
+
41
+ ## 4.11.6
42
+ Mon, 16 Jun 2025 15:00:15 GMT
43
+
44
+ _Version update only_
45
+
46
+ ## 4.11.5
47
+ Fri, 06 Jun 2025 13:41:18 GMT
48
+
49
+ _Version update only_
50
+
51
+ ## 4.11.4
52
+ Tue, 03 Jun 2025 16:15:19 GMT
53
+
54
+ _Version update only_
55
+
56
+ ## 4.11.3
57
+ Wed, 28 May 2025 13:56:22 GMT
58
+
59
+ _Version update only_
60
+
61
+ ## 4.11.2
62
+ Tue, 20 May 2025 20:14:45 GMT
63
+
64
+ _Version update only_
4
65
 
5
66
  ## 4.11.1
6
67
  Wed, 30 Apr 2025 13:13:21 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"ChromeTestRunner.d.ts","sourceRoot":"","sources":["../../../src/runners/chrome/ChromeTestRunner.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,qBAAa,gBAAgB;IAC3B,gBAAuB,gBAAgB,QAAQ;IAC/C,gBAAuB,eAAe,QAAQ;WAC1B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WA4B9C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAcjE"}
1
+ {"version":3,"file":"ChromeTestRunner.d.ts","sourceRoot":"","sources":["../../../src/runners/chrome/ChromeTestRunner.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,qBAAa,gBAAgB;IAC3B,gBAAuB,gBAAgB,QAAQ;IAC/C,gBAAuB,eAAe,QAAQ;WAC1B,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WA4B9C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAejE"}
@@ -49,6 +49,7 @@ class ChromeTestRunner {
49
49
  if (config.cover)
50
50
  (0, CoverageUtils_1.writeCoverageData)(coverage);
51
51
  process.exitCode = failures;
52
+ process.emit("chrome-test-runner-done");
52
53
  }
53
54
  }
54
55
  exports.ChromeTestRunner = ChromeTestRunner;
@@ -62,7 +63,10 @@ async function runTestsInPlaywright(config, port) {
62
63
  // Don't let dialogs block tests
63
64
  page.on("dialog", async (dialog) => dialog.dismiss());
64
65
  // Re-throw any uncaught exceptions from the frontend in the backend
65
- page.on("pageerror", reject);
66
+ page.on("pageerror", async (error) => {
67
+ await browser.close();
68
+ reject(error);
69
+ });
66
70
  // Expose some functions to the frontend that will execute _in the backend context_
67
71
  await page.exposeFunction("_CertaConsole", (type, args) => console[type](...args));
68
72
  await page.exposeFunction("_CertaSendToBackend", CallbackUtils_1.executeRegisteredCallback);
@@ -96,6 +100,7 @@ async function runTestsInPlaywright(config, port) {
96
100
  });
97
101
  }
98
102
  catch (error) {
103
+ await browser.close();
99
104
  reject(error); // eslint-disable-line @typescript-eslint/prefer-promise-reject-errors
100
105
  }
101
106
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ChromeTestRunner.js","sourceRoot":"","sources":["../../../src/runners/chrome/ChromeTestRunner.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,6BAA6B;AAC7B,2CAAoE;AAEpE,uDAA2D;AAC3D,6DAAsE;AAEtE,6DAA8D;AAC9D,+DAAgE;AAShE,IAAI,OAAgB,CAAC;AACrB,IAAI,gBAA8B,CAAC;AAEnC,MAAa,gBAAgB;IACpB,MAAM,CAAU,gBAAgB,GAAG,IAAI,CAAC;IACxC,MAAM,CAAU,eAAe,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAmB;QAChD,mIAAmI;QACnI,MAAM,OAAO,GAAkB;YAC7B,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,IAAI;YAC/B,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK;SACxB,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK;YACd,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,2BAA2B,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAEnG,OAAO,GAAG,MAAM,qBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzC,MAAM,YAAY,GAAG;YACnB,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,2DAA2D;YACnG,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,4BAA4B,CAAC,EAAE,2DAA2D;YAC3H,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,2DAA2D;SAChI,CAAC;QACF,gBAAgB,GAAG,IAAA,8BAAiB,EAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAEnG,+DAA+D;QAC/D,MAAM,eAAe,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QACrG,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC3E,IAAI,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ;YACtC,OAAO,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,KAAK,CAAC,QAAQ,0DAA0D,UAAU,EAAE,CAAC,CAAC;QAC3H,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAmB;QAC9C,4DAA4D;QAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YACvC,MAAM,CAAC,YAAoB,CAAC,UAAU,GAAG,IAAI,CAAC;QAEjD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC;QAC3F,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAExB,mCAAmC;QACnC,IAAI,MAAM,CAAC,KAAK;YACd,IAAA,iCAAiB,EAAC,QAAQ,CAAC,CAAC;QAE9B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;;AA5CH,4CA6CC;AAED,KAAK,UAAU,UAAU,CAAC,IAAU,EAAE,UAAkB;IACtD,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAmB,EAAE,IAAY;IACnE,OAAO,IAAI,OAAO,CAAoB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YAEjF,gCAAgC;YAChC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAE3D,oEAAoE;YACpE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAE7B,mFAAmF;YACnF,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,IAAuB,EAAE,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAC7G,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,yCAAyB,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,OAA0B,EAAE,EAAE;gBAC9E,UAAU,CAAC,KAAK,IAAI,EAAE;oBACpB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,+CAA+C;YAC/C,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC;YACxF,MAAM,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACvF,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACtE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1D,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC5F,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACzE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAChE,MAAM,IAAA,6CAAuB,EAAC,IAAI,CAAC,CAAC;YACpC,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpE,MAAM,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEnC,yBAAyB;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;gBAC7B,uDAAuD;gBACvD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,IAAW,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAa,CAAC;gBAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;oBACtC,OAAO,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,8BAA8B;gBACrF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sEAAsE;QACvF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as path from \"path\";\nimport { Browser, chromium, LaunchOptions, Page } from \"playwright\";\nimport { ChildProcess } from \"child_process\";\nimport { spawnChildProcess } from \"../../utils/SpawnUtils\";\nimport { executeRegisteredCallback } from \"../../utils/CallbackUtils\";\nimport { CertaConfig } from \"../../CertaConfig\";\nimport { writeCoverageData } from \"../../utils/CoverageUtils\";\nimport { configureRemoteReporter } from \"./MochaRemoteReporter\";\n\ninterface ChromeTestResults {\n failures: number;\n coverage: any;\n}\n\ntype ConsoleMethodName = \"log\" | \"error\" | \"dir\";\n\nlet browser: Browser;\nlet webserverProcess: ChildProcess;\n\nexport class ChromeTestRunner {\n public static readonly supportsCoverage = true;\n public static readonly supportsCleanup = true;\n public static async initialize(config: CertaConfig): Promise<void> {\n // Go ahead and launch playwright now - the VS Code debugger gets confused if it can't at least see the chrome instance right away.\n const options: LaunchOptions = {\n args: config.chromeOptions.args,\n headless: !config.debug,\n };\n\n if (config.debug)\n options.args?.push(`--disable-gpu`, `--remote-debugging-port=${config.ports.frontendDebugging}`);\n\n browser = await chromium.launch(options);\n\n const webserverEnv = {\n CERTA_PORT: `${config.ports.frontend}`, // eslint-disable-line @typescript-eslint/naming-convention\n CERTA_PATH: path.join(__dirname, \"../../../public/index.html\"), // eslint-disable-line @typescript-eslint/naming-convention\n CERTA_PUBLIC_DIRS: JSON.stringify(config.chromeOptions.publicDirs), // eslint-disable-line @typescript-eslint/naming-convention\n };\n webserverProcess = spawnChildProcess(\"node\", [require.resolve(\"./webserver\")], webserverEnv, true);\n\n // Don't continue until the webserver is started and listening.\n const webserverExited = new Promise<never>((_resolve, reject) => webserverProcess.once(\"exit\", () => reject(new Error(\"Webserver exited!\"))));\n const webserverStarted = new Promise<number>((resolve) => webserverProcess.once(\"message\", resolve));\n const actualPort = await Promise.race([webserverExited, webserverStarted]);\n if (actualPort !== config.ports.frontend)\n console.warn(`CERTA: Port ${config.ports.frontend} was already in use, so serving test resources on port ${actualPort}`);\n process.env.CERTA_PORT = String(actualPort);\n }\n\n public static async runTests(config: CertaConfig): Promise<void> {\n // FIXME: Do we really want to always enforce this behavior?\n if (process.env.CI || process.env.TF_BUILD)\n (config.mochaOptions as any).forbidOnly = true;\n\n const { failures, coverage } = await runTestsInPlaywright(config, process.env.CERTA_PORT!);\n webserverProcess.kill();\n\n // Save nyc/istanbul coverage file.\n if (config.cover)\n writeCoverageData(coverage);\n\n process.exitCode = failures;\n }\n}\n\nasync function loadScript(page: Page, scriptPath: string) {\n return page.addScriptTag({ url: `/@/${scriptPath}` });\n}\n\nasync function runTestsInPlaywright(config: CertaConfig, port: string) {\n return new Promise<ChromeTestResults>(async (resolve, reject) => {\n try {\n const page = browser.contexts().pop()?.pages()?.pop() || await browser.newPage();\n\n // Don't let dialogs block tests\n page.on(\"dialog\", async (dialog: any) => dialog.dismiss());\n\n // Re-throw any uncaught exceptions from the frontend in the backend\n page.on(\"pageerror\", reject);\n\n // Expose some functions to the frontend that will execute _in the backend context_\n await page.exposeFunction(\"_CertaConsole\", (type: ConsoleMethodName, args: any[]) => console[type](...args));\n await page.exposeFunction(\"_CertaSendToBackend\", executeRegisteredCallback);\n await page.exposeFunction(\"_CertaReportResults\", (results: ChromeTestResults) => {\n setTimeout(async () => {\n await browser.close();\n resolve(results);\n });\n });\n\n // Now load the page (and requisite scripts)...\n const testBundle = (config.cover && config.instrumentedTestBundle) || config.testBundle;\n await page.goto(`http://localhost:${port}`);\n await page.addScriptTag({ content: `var _CERTA_CONFIG = ${JSON.stringify(config)};` });\n await loadScript(page, require.resolve(\"../../utils/initLogging.js\"));\n await loadScript(page, require.resolve(\"mocha/mocha.js\"));\n await loadScript(page, require.resolve(\"source-map-support/browser-source-map-support.js\"));\n await loadScript(page, require.resolve(\"../../utils/initSourceMaps.js\"));\n await loadScript(page, require.resolve(\"./MochaSerializer.js\"));\n await configureRemoteReporter(page);\n await loadScript(page, require.resolve(\"../../utils/initMocha.js\"));\n await loadScript(page, testBundle);\n\n // ...and start the tests\n await page.evaluate(async () => {\n // NB: This is being evaluated in the frontend context!\n Mocha.reporters.Base.color = true as any;\n const globals = window as any;\n mocha.run((failures) => {\n const coverage = globals.__coverage__;\n globals._CertaReportResults({ failures, coverage }); // This will close the browser\n });\n });\n } catch (error) {\n reject(error); // eslint-disable-line @typescript-eslint/prefer-promise-reject-errors\n }\n });\n}\n"]}
1
+ {"version":3,"file":"ChromeTestRunner.js","sourceRoot":"","sources":["../../../src/runners/chrome/ChromeTestRunner.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as path from \"path\";\nimport { Browser, chromium, LaunchOptions, Page } from \"playwright\";\nimport { ChildProcess } from \"child_process\";\nimport { spawnChildProcess } from \"../../utils/SpawnUtils\";\nimport { executeRegisteredCallback } from \"../../utils/CallbackUtils\";\nimport { CertaConfig } from \"../../CertaConfig\";\nimport { writeCoverageData } from \"../../utils/CoverageUtils\";\nimport { configureRemoteReporter } from \"./MochaRemoteReporter\";\n\ninterface ChromeTestResults {\n failures: number;\n coverage: any;\n}\n\ntype ConsoleMethodName = \"log\" | \"error\" | \"dir\";\n\nlet browser: Browser;\nlet webserverProcess: ChildProcess;\n\nexport class ChromeTestRunner {\n public static readonly supportsCoverage = true;\n public static readonly supportsCleanup = true;\n public static async initialize(config: CertaConfig): Promise<void> {\n // Go ahead and launch playwright now - the VS Code debugger gets confused if it can't at least see the chrome instance right away.\n const options: LaunchOptions = {\n args: config.chromeOptions.args,\n headless: !config.debug,\n };\n\n if (config.debug)\n options.args?.push(`--disable-gpu`, `--remote-debugging-port=${config.ports.frontendDebugging}`);\n\n browser = await chromium.launch(options);\n\n const webserverEnv = {\n CERTA_PORT: `${config.ports.frontend}`, // eslint-disable-line @typescript-eslint/naming-convention\n CERTA_PATH: path.join(__dirname, \"../../../public/index.html\"), // eslint-disable-line @typescript-eslint/naming-convention\n CERTA_PUBLIC_DIRS: JSON.stringify(config.chromeOptions.publicDirs), // eslint-disable-line @typescript-eslint/naming-convention\n };\n webserverProcess = spawnChildProcess(\"node\", [require.resolve(\"./webserver\")], webserverEnv, true);\n\n // Don't continue until the webserver is started and listening.\n const webserverExited = new Promise<never>((_resolve, reject) => webserverProcess.once(\"exit\", () => reject(new Error(\"Webserver exited!\"))));\n const webserverStarted = new Promise<number>((resolve) => webserverProcess.once(\"message\", resolve));\n const actualPort = await Promise.race([webserverExited, webserverStarted]);\n if (actualPort !== config.ports.frontend)\n console.warn(`CERTA: Port ${config.ports.frontend} was already in use, so serving test resources on port ${actualPort}`);\n process.env.CERTA_PORT = String(actualPort);\n }\n\n public static async runTests(config: CertaConfig): Promise<void> {\n // FIXME: Do we really want to always enforce this behavior?\n if (process.env.CI || process.env.TF_BUILD)\n (config.mochaOptions as any).forbidOnly = true;\n\n const { failures, coverage } = await runTestsInPlaywright(config, process.env.CERTA_PORT!);\n webserverProcess.kill();\n\n // Save nyc/istanbul coverage file.\n if (config.cover)\n writeCoverageData(coverage);\n\n process.exitCode = failures;\n (process as any).emit(\"chrome-test-runner-done\");\n }\n}\n\nasync function loadScript(page: Page, scriptPath: string) {\n return page.addScriptTag({ url: `/@/${scriptPath}` });\n}\n\nasync function runTestsInPlaywright(config: CertaConfig, port: string) {\n return new Promise<ChromeTestResults>(async (resolve, reject) => {\n try {\n const page = browser.contexts().pop()?.pages()?.pop() || await browser.newPage();\n\n // Don't let dialogs block tests\n page.on(\"dialog\", async (dialog: any) => dialog.dismiss());\n\n // Re-throw any uncaught exceptions from the frontend in the backend\n page.on(\"pageerror\", async (error) => {\n await browser.close();\n reject(error);\n });\n\n // Expose some functions to the frontend that will execute _in the backend context_\n await page.exposeFunction(\"_CertaConsole\", (type: ConsoleMethodName, args: any[]) => console[type](...args));\n await page.exposeFunction(\"_CertaSendToBackend\", executeRegisteredCallback);\n await page.exposeFunction(\"_CertaReportResults\", (results: ChromeTestResults) => {\n setTimeout(async () => {\n await browser.close();\n resolve(results);\n });\n });\n\n // Now load the page (and requisite scripts)...\n const testBundle = (config.cover && config.instrumentedTestBundle) || config.testBundle;\n await page.goto(`http://localhost:${port}`);\n await page.addScriptTag({ content: `var _CERTA_CONFIG = ${JSON.stringify(config)};` });\n await loadScript(page, require.resolve(\"../../utils/initLogging.js\"));\n await loadScript(page, require.resolve(\"mocha/mocha.js\"));\n await loadScript(page, require.resolve(\"source-map-support/browser-source-map-support.js\"));\n await loadScript(page, require.resolve(\"../../utils/initSourceMaps.js\"));\n await loadScript(page, require.resolve(\"./MochaSerializer.js\"));\n await configureRemoteReporter(page);\n await loadScript(page, require.resolve(\"../../utils/initMocha.js\"));\n await loadScript(page, testBundle);\n\n // ...and start the tests\n await page.evaluate(async () => {\n // NB: This is being evaluated in the frontend context!\n Mocha.reporters.Base.color = true as any;\n const globals = window as any;\n mocha.run((failures) => {\n const coverage = globals.__coverage__;\n globals._CertaReportResults({ failures, coverage }); // This will close the browser\n });\n });\n } catch (error) {\n await browser.close();\n reject(error); // eslint-disable-line @typescript-eslint/prefer-promise-reject-errors\n }\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/certa",
3
- "version": "5.1.0-dev.9",
3
+ "version": "5.2.0-dev.2",
4
4
  "description": "A mocha-based integration test runner",
5
5
  "license": "MIT",
6
6
  "main": "bin/certa.js",
@@ -34,7 +34,7 @@
34
34
  "yargs": "^17.4.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@itwin/eslint-plugin": "5.0.0-dev.1",
37
+ "@itwin/eslint-plugin": "5.2.2-dev.2",
38
38
  "@types/chai": "4.3.1",
39
39
  "@types/detect-port": "~1.1.0",
40
40
  "@types/express": "^4.17.20",
@@ -42,15 +42,15 @@
42
42
  "@types/mocha": "^10.0.6",
43
43
  "@types/node": "~20.17.0",
44
44
  "@types/yargs": "17.0.19",
45
- "electron": "^35.0.0",
46
- "eslint": "^9.13.0",
45
+ "electron": "^37.2.0",
46
+ "eslint": "^9.31.0",
47
47
  "nyc": "^17.1.0",
48
48
  "rimraf": "^6.0.1",
49
49
  "typescript": "~5.6.2",
50
- "@itwin/build-tools": "5.1.0-dev.9"
50
+ "@itwin/build-tools": "5.2.0-dev.2"
51
51
  },
52
52
  "peerDependencies": {
53
- "electron": "^35.0.0"
53
+ "electron": "^35.0.0 || ^36.0.0 || ^37.0.0"
54
54
  },
55
55
  "peerDependenciesMeta": {
56
56
  "electron": {
@@ -61,6 +61,7 @@
61
61
  "build": "tsc 1>&2",
62
62
  "clean": "rimraf -g lib .rush/temp/package-deps*.json",
63
63
  "lint": "eslint \"./src/**/*.ts\" 1>&2",
64
+ "lint-deprecation": "eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \"./src/**/*.ts\"",
64
65
  "test": "",
65
66
  "docs": "",
66
67
  "cover": "",