@itwin/certa 5.1.0-dev.9 → 5.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,80 @@
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 Fri, 08 Aug 2025 18:06:10 GMT and should not be manually modified.
4
+
5
+ ## 5.1.1
6
+ Fri, 08 Aug 2025 18:06:10 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 5.1.0
11
+ Fri, 08 Aug 2025 12:51:53 GMT
12
+
13
+ ### Updates
14
+
15
+ - Add support for Electron 37
16
+ - Add support for Electron 36
17
+
18
+ ## 5.0.5
19
+ Wed, 06 Aug 2025 15:34:15 GMT
20
+
21
+ _Version update only_
22
+
23
+ ## 5.0.4
24
+ Wed, 16 Jul 2025 14:59:59 GMT
25
+
26
+ _Version update only_
27
+
28
+ ## 5.0.3
29
+ Fri, 11 Jul 2025 00:56:56 GMT
30
+
31
+ _Version update only_
32
+
33
+ ## 5.0.2
34
+ Thu, 26 Jun 2025 22:16:01 GMT
35
+
36
+ _Version update only_
37
+
38
+ ## 5.0.1
39
+ Tue, 17 Jun 2025 18:33:51 GMT
40
+
41
+ _Version update only_
42
+
43
+ ## 5.0.0
44
+ Fri, 13 Jun 2025 20:25:38 GMT
45
+
46
+ ### Updates
47
+
48
+ - Dropped support for Node 18
49
+ - Dropped support for Electron 32 and older
50
+ - Upgrade to Electron 34, drop support for Electron 33
51
+ - Upgrade to Electron 35, drop support for Electron 34
52
+ - Add support for Electron 36
53
+
54
+ ## 4.11.6
55
+ Mon, 16 Jun 2025 15:00:15 GMT
56
+
57
+ _Version update only_
58
+
59
+ ## 4.11.5
60
+ Fri, 06 Jun 2025 13:41:18 GMT
61
+
62
+ _Version update only_
63
+
64
+ ## 4.11.4
65
+ Tue, 03 Jun 2025 16:15:19 GMT
66
+
67
+ _Version update only_
68
+
69
+ ## 4.11.3
70
+ Wed, 28 May 2025 13:56:22 GMT
71
+
72
+ _Version update only_
73
+
74
+ ## 4.11.2
75
+ Tue, 20 May 2025 20:14:45 GMT
76
+
77
+ _Version update only_
4
78
 
5
79
  ## 4.11.1
6
80
  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":"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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 }\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.1.1",
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.1.1"
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": "",