From ae20203d74a54e4285e649c8878d5e4b70668df7 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen Date: Tue, 9 Dec 2025 12:54:20 +0100 Subject: [PATCH 1/9] Use vitest/alfa-test in Code Checker workspaces --- .../demo-page/package.json | 2 +- .../puppeteer/package.json | 4 +- .../puppeteer/test/puppeteer.spec.ts | 164 +++--- .../puppeteer/tsconfig.json | 1 + .../selenium/package.json | 7 +- .../selenium/test/selenium.spec.ts | 156 ++--- .../selenium/tsconfig.json | 1 + config/vitest.config.ts | 35 ++ package.json | 4 +- yarn.lock | 550 +++++++++++++----- 10 files changed, 629 insertions(+), 295 deletions(-) create mode 100644 config/vitest.config.ts diff --git a/accessibility-code-checker/demo-page/package.json b/accessibility-code-checker/demo-page/package.json index 53bb9208..0c8347b2 100644 --- a/accessibility-code-checker/demo-page/package.json +++ b/accessibility-code-checker/demo-page/package.json @@ -22,6 +22,6 @@ "@vitejs/plugin-react": "^4.2.1", "eslint": "^9.0.0", "typescript": "^5.2.2", - "vite": "^6.4.1" + "vite": "^7.2.7" } } diff --git a/accessibility-code-checker/puppeteer/package.json b/accessibility-code-checker/puppeteer/package.json index 1f04d997..94b25c84 100644 --- a/accessibility-code-checker/puppeteer/package.json +++ b/accessibility-code-checker/puppeteer/package.json @@ -6,10 +6,10 @@ "version": "0.0.0", "type": "module", "scripts": { - "test": "node test/puppeteer.spec.js" + "test": "vitest run" }, "devDependencies": { - "@siteimprove/alfa-test-deprecated": "^0.108.1", + "@siteimprove/alfa-test": "^0.108.1", "@siteimprove/alfa-test-utils": "^0.80.5" }, "dependencies": { diff --git a/accessibility-code-checker/puppeteer/test/puppeteer.spec.ts b/accessibility-code-checker/puppeteer/test/puppeteer.spec.ts index b56b2c84..9e8292bb 100644 --- a/accessibility-code-checker/puppeteer/test/puppeteer.spec.ts +++ b/accessibility-code-checker/puppeteer/test/puppeteer.spec.ts @@ -6,87 +6,91 @@ import { SIP, } from "@siteimprove/alfa-test-utils"; -import { test } from "@siteimprove/alfa-test-deprecated"; +import { test } from "@siteimprove/alfa-test"; import { getCommitInformation } from "@siteimprove/alfa-test-utils/git"; import puppeteer from "puppeteer"; -test("Page should be accessible", async (t) => { - // Create a browser instance - const browser = await puppeteer.launch({ - headless: true, - args: ["--no-sandbox", "--disable-dev-shm-usage"], - }); - - // Navigate to the local web page - // This supposes that the server is already running. See the demo-site folder. - // TODO: Replace with your own page - const page = await browser.newPage(); - await page.goto("http://localhost:5173"); - - // Get the document handle from the page - const document = await page.evaluateHandle(() => window.document); - - /* - * Usual Puppeteer instructions can live here. - * For example, navigating through the page, opening menus or modals, etc. - */ - - // Scrape the page - const alfaPage = await Puppeteer.toPage(document); - - // Close the browser - await browser.close(); - - // Run the audit - const alfaResult = await Audit.run(alfaPage); - - // (mandatory) Setup credentials (e.g., from environment variables). - const userName = process.env.SI_USER_EMAIL; - const apiKey = process.env.SI_API_KEY; - - // (mandatory) Setup site ID; TODO: replace with your own. - const siteID = 16788956729; - - // (recommended) Fetch information about the latest commit - const gitInformation = await getCommitInformation(); - - // (optional) Name the test, this can be built from the commit information. - const testName = (commit: CommitInformation) => - `On branch ${commit.BranchName} – Puppeteer integration`; - - // (optional) Provide a page title, this defaults to the first element. - // const pageTitle = "My page title"; - - // (optional) Provide a page URL, this defaults to the page URL upon scraping. - // This is useful to overwrite localhost URLs. - const pageURL = "https://demo.siteimprovedemo.com/"; - - // Upload the result to Siteimprove Intelligence Platform, if credentials are provided - const url = await SIP.upload(alfaResult, { - // mandatory options - userName, - apiKey, - siteID, - // optional options - commitInformation: gitInformation, - testName, - // pageTitle, - pageURL, - }); - - // Log the result to the console - Logging.fromAudit(alfaResult, url).print(); - - // Check if some rule was failing. - const failingRules = alfaResult.resultAggregates.filter( - (aggregate) => aggregate.failed > 0, - ); - - // Fail the test if any rule failed. - t.equal( - failingRules.size, - 0, - `The page has ${failingRules.size} failing rules`, - ); -}); +test( + "Page should be accessible", + async (t) => { + // Create a browser instance + const browser = await puppeteer.launch({ + headless: true, + args: ["--no-sandbox", "--disable-dev-shm-usage"], + }); + + // Navigate to the local web page + // This supposes that the server is already running. See the demo-site folder. + // TODO: Replace with your own page + const page = await browser.newPage(); + await page.goto("http://localhost:5173"); + + // Get the document handle from the page + const document = await page.evaluateHandle(() => window.document); + + /* + * Usual Puppeteer instructions can live here. + * For example, navigating through the page, opening menus or modals, etc. + */ + + // Scrape the page + const alfaPage = await Puppeteer.toPage(document); + + // Close the browser + await browser.close(); + + // Run the audit + const alfaResult = await Audit.run(alfaPage); + + // (mandatory) Setup credentials (e.g., from environment variables). + const userName = process.env.SI_USER_EMAIL; + const apiKey = process.env.SI_API_KEY; + + // (mandatory) Setup site ID; TODO: replace with your own. + const siteID = 16788956729; + + // (recommended) Fetch information about the latest commit + const gitInformation = await getCommitInformation(); + + // (optional) Name the test, this can be built from the commit information. + const testName = (commit: CommitInformation) => + `On branch ${commit.BranchName} – Puppeteer integration`; + + // (optional) Provide a page title, this defaults to the first <title> element. + // const pageTitle = "My page title"; + + // (optional) Provide a page URL, this defaults to the page URL upon scraping. + // This is useful to overwrite localhost URLs. + const pageURL = "https://demo.siteimprovedemo.com/"; + + // Upload the result to Siteimprove Intelligence Platform, if credentials are provided + const url = await SIP.upload(alfaResult, { + // mandatory options + userName, + apiKey, + siteID, + // optional options + commitInformation: gitInformation, + testName, + // pageTitle, + pageURL, + }); + + // Log the result to the console + Logging.fromAudit(alfaResult, url).print(); + + // Check if some rule was failing. + const failingRules = alfaResult.resultAggregates.filter( + (aggregate) => aggregate.failed > 0, + ); + + // Fail the test if any rule failed. + t.equal( + failingRules.size, + 0, + `The page has ${failingRules.size} failing rules`, + ); + }, + { timeout: 60_000 /* ms */ }, +); diff --git a/accessibility-code-checker/puppeteer/tsconfig.json b/accessibility-code-checker/puppeteer/tsconfig.json index 07107c13..8ac7ad15 100644 --- a/accessibility-code-checker/puppeteer/tsconfig.json +++ b/accessibility-code-checker/puppeteer/tsconfig.json @@ -1,5 +1,6 @@ { "$schema": "http://json.schemastore.org/tsconfig", "extends": "../tsconfig.json", + "compilerOptions": { "noEmit": true }, "files": ["test/puppeteer.spec.ts"] } diff --git a/accessibility-code-checker/selenium/package.json b/accessibility-code-checker/selenium/package.json index 873bfd5c..d22af98c 100644 --- a/accessibility-code-checker/selenium/package.json +++ b/accessibility-code-checker/selenium/package.json @@ -6,13 +6,14 @@ "version": "0.0.0", "type": "module", "scripts": { - "test": "node test/selenium.spec.js" + "test": "vitest run" }, "devDependencies": { "@siteimprove/alfa-selenium": "^0.80.5", - "@siteimprove/alfa-test-deprecated": "^0.108.1", + "@siteimprove/alfa-test": "^0.108.1", "@siteimprove/alfa-test-utils": "^0.80.5", "@types/selenium-webdriver": "^4", - "selenium-webdriver": "^4.25.0" + "selenium-webdriver": "^4.25.0", + "vitest": "^4.0.15" } } diff --git a/accessibility-code-checker/selenium/test/selenium.spec.ts b/accessibility-code-checker/selenium/test/selenium.spec.ts index af0d2aa4..9aa595b2 100644 --- a/accessibility-code-checker/selenium/test/selenium.spec.ts +++ b/accessibility-code-checker/selenium/test/selenium.spec.ts @@ -6,7 +6,7 @@ import { SIP, } from "@siteimprove/alfa-test-utils"; -import { test } from "@siteimprove/alfa-test-deprecated"; +import { test } from "@siteimprove/alfa-test"; import { getCommitInformation } from "@siteimprove/alfa-test-utils/git"; import { Browser, Builder, WebDriver } from "selenium-webdriver"; @@ -17,78 +17,82 @@ let driver: WebDriver | undefined; const options = new chrome.Options(); options.addArguments("--headless", "--no-sandbox", "--disable-dev-shm-usage"); -test("Page should be accessible", async (t) => { - // Create a browser instance - driver = await new Builder() - .forBrowser(Browser.CHROME) - .setChromeOptions(options) - .build(); - - // Navigate to the local web page - // This supposes that the server is already running. See the demo-site folder. - // TODO: Replace with your own page - await driver.get("http://localhost:5173"); - - /* - * Usual Selenium instructions can live here. - * For example, navigating through the page, opening menus or modals, etc. - */ - - // Scrape the page - const alfaPage = await Selenium.toPage(driver); - - // Close the driver - await driver.close(); - - // Run the audit - const alfaResult = await Audit.run(alfaPage); - - // (mandatory) Setup credentials (e.g., from environment variables). - const userName = process.env.SI_USER_EMAIL; - const apiKey = process.env.SI_API_KEY; - - // (mandatory) Setup site ID; TODO: replace with your own. - const siteID = 16788956729; - - // (recommended) Fetch information about the latest commit - const gitInformation = await getCommitInformation(); - - // (optional) Name the test, this can be built from the commit information. - const testName = (commit: CommitInformation) => - `On branch ${commit.BranchName} – Selenium integration`; - - // (optional) Provide a page title, this defaults to the first <title> element. - // const pageTitle = "My page title"; - - // (optional) Provide a page URL, this defaults to the page URL upon scraping. - // This is useful to overwrite localhost URLs. - const pageURL = "https://demo.siteimprovedemo.com/"; - - // Upload the result to Siteimprove Intelligence Platform, if credentials are provided - const url = await SIP.upload(alfaResult, { - // mandatory options - userName, - apiKey, - siteID, - // optional options - commitInformation: gitInformation, - testName, - // pageTitle, - pageURL, - }); - - // Log the result to the console - Logging.fromAudit(alfaResult, url).print(); - - // Check if some rule was failing. - const failingRules = alfaResult.resultAggregates.filter( - (aggregate) => aggregate.failed > 0, - ); - - // Fail the test if any rule failed. - t.equal( - failingRules.size, - 0, - `The page has ${failingRules.size} failing rules`, - ); -}); +test( + "Page should be accessible", + async (t) => { + // Create a browser instance + driver = await new Builder() + .forBrowser(Browser.CHROME) + .setChromeOptions(options) + .build(); + + // Navigate to the local web page + // This supposes that the server is already running. See the demo-site folder. + // TODO: Replace with your own page + await driver.get("http://localhost:5173"); + + /* + * Usual Selenium instructions can live here. + * For example, navigating through the page, opening menus or modals, etc. + */ + + // Scrape the page + const alfaPage = await Selenium.toPage(driver); + + // Close the driver + await driver.close(); + + // Run the audit + const alfaResult = await Audit.run(alfaPage); + + // (mandatory) Setup credentials (e.g., from environment variables). + const userName = process.env.SI_USER_EMAIL; + const apiKey = process.env.SI_API_KEY; + + // (mandatory) Setup site ID; TODO: replace with your own. + const siteID = 16788956729; + + // (recommended) Fetch information about the latest commit + const gitInformation = await getCommitInformation(); + + // (optional) Name the test, this can be built from the commit information. + const testName = (commit: CommitInformation) => + `On branch ${commit.BranchName} – Selenium integration`; + + // (optional) Provide a page title, this defaults to the first <title> element. + // const pageTitle = "My page title"; + + // (optional) Provide a page URL, this defaults to the page URL upon scraping. + // This is useful to overwrite localhost URLs. + const pageURL = "https://demo.siteimprovedemo.com/"; + + // Upload the result to Siteimprove Intelligence Platform, if credentials are provided + const url = await SIP.upload(alfaResult, { + // mandatory options + userName, + apiKey, + siteID, + // optional options + commitInformation: gitInformation, + testName, + // pageTitle, + pageURL, + }); + + // Log the result to the console + Logging.fromAudit(alfaResult, url).print(); + + // Check if some rule was failing. + const failingRules = alfaResult.resultAggregates.filter( + (aggregate) => aggregate.failed > 0, + ); + + // Fail the test if any rule failed. + t.equal( + failingRules.size, + 0, + `The page has ${failingRules.size} failing rules`, + ); + }, + { timeout: 60_000 /* ms */ }, +); diff --git a/accessibility-code-checker/selenium/tsconfig.json b/accessibility-code-checker/selenium/tsconfig.json index 13f83a34..c400eb7f 100644 --- a/accessibility-code-checker/selenium/tsconfig.json +++ b/accessibility-code-checker/selenium/tsconfig.json @@ -1,5 +1,6 @@ { "$schema": "http://json.schemastore.org/tsconfig", "extends": "../tsconfig.json", + "compilerOptions": { "noEmit": true }, "files": ["test/selenium.spec.ts"] } diff --git a/config/vitest.config.ts b/config/vitest.config.ts new file mode 100644 index 00000000..d3981c18 --- /dev/null +++ b/config/vitest.config.ts @@ -0,0 +1,35 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: [ + // Accessibility Code Checkers is not tested here since its tests are + // intentionally failing. + "custom-testing/test/**/*.spec.ts?(x)", + "end-to-end-testing/test/**/*.spec.ts?(x)", + "unit-testing/test/**/*.spec.ts?(x)", + ], + exclude: [ + // TODO + "custom-testing/adding-rules", + "custom-testing/answering", + "custom-testing/crawling", + "custom-testing/filtering", + "custom-testing/interacting", + "custom-testing/measuring-performances", + "custom-testing/navigating", + "custom-testing/scraping", + "end-to-end-testing/cypress", + "end-to-end-testing/fixtures", + "end-to-end-testing/playwright", + "end-to-end-testing/puppeteer", + "end-to-end-testing/webdriver", + "unit-testing/angular", + "unit-testing/react", + "unit-testing/vue", + ], + // Several tests, notably the ones that spawn a new browser instance, tend + // to take a lot of time… Especially when launching all tests simultaneously. + testTimeout: 60_000 /* ms */, + }, +}); diff --git a/package.json b/package.json index 8e571498..d494f800 100755 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "clean": "tsc --build --clean", "knip": "knip -c config/knip.ts", "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-{puppeteer,webdriver}' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", + "test-main": "yarn vitest run --config ./config/vitest.config.ts", "code-checker:comment": "echo 'First start the server with `yarn code-checker:start`, next run the tests with `yarn code-checker:test`. The tests are failing since the pages are purposefully not accessible; do not run them in blocking CI flows.'", "code-checker:start": "yarn workspace code-checker-demo-site run dev", "code-checker:test": "yarn workspaces foreach -A -v -p --include 'code-checker-*' --exclude 'code-checker-demo-site' run test", @@ -28,7 +29,8 @@ "knip": "^5.29.1", "playwright": "^1.47.0", "prettier": "^3.0.0", - "typescript": "^5.0.4" + "typescript": "^5.0.4", + "vitest": "^4.0.15" }, "//": [ "Somehow, https://github.com/enzymejs/enzyme/blob/master/packages/enzyme/package.json correctly pins cheerio", diff --git a/yarn.lock b/yarn.lock index 89ffd085..44b35480 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1521,142 +1521,156 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.40.1" +"@rollup/rollup-android-arm-eabi@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.53.3" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-android-arm64@npm:4.40.1" +"@rollup/rollup-android-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-android-arm64@npm:4.53.3" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.40.1" +"@rollup/rollup-darwin-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.53.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.40.1" +"@rollup/rollup-darwin-x64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.53.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.40.1" +"@rollup/rollup-freebsd-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.53.3" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.40.1" +"@rollup/rollup-freebsd-x64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.53.3" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.53.3" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.40.1" +"@rollup/rollup-linux-arm-musleabihf@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.53.3" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.40.1" +"@rollup/rollup-linux-arm64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.53.3" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.40.1" +"@rollup/rollup-linux-arm64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.53.3" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1" +"@rollup/rollup-linux-loong64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.53.3" conditions: os=linux & cpu=loong64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1" +"@rollup/rollup-linux-ppc64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.53.3" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.40.1" +"@rollup/rollup-linux-riscv64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.53.3" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.40.1" +"@rollup/rollup-linux-riscv64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.53.3" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.40.1" +"@rollup/rollup-linux-s390x-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.53.3" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.40.1" +"@rollup/rollup-linux-x64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.53.3" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.40.1" +"@rollup/rollup-linux-x64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.53.3" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.40.1" +"@rollup/rollup-openharmony-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.53.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.53.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.40.1" +"@rollup/rollup-win32-ia32-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.53.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.40.1": - version: 4.40.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.40.1" +"@rollup/rollup-win32-x64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.53.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.53.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2264,6 +2278,7 @@ __metadata: playwright: "npm:^1.47.0" prettier: "npm:^3.0.0" typescript: "npm:^5.0.4" + vitest: "npm:^4.0.15" languageName: unknown linkType: soft @@ -3183,6 +3198,16 @@ __metadata: languageName: node linkType: hard +"@siteimprove/alfa-test@npm:^0.108.1": + version: 0.108.1 + resolution: "@siteimprove/alfa-test@npm:0.108.1" + dependencies: + "@siteimprove/alfa-rng": "npm:^0.108.1" + vitest: "npm:^4.0.14" + checksum: 10/96aa8ddff3dcca3a3b4f37e1969be6367076c79964ea3384191cb4d3e97f92ca94f602013a0fd2a81d4addee8baf4aa80cf8b241995fda9a1ebb75136d0fafed + languageName: node + linkType: hard + "@siteimprove/alfa-thenable@npm:^0.108.1": version: 0.108.1 resolution: "@siteimprove/alfa-thenable@npm:0.108.1" @@ -3374,6 +3399,13 @@ __metadata: languageName: node linkType: hard +"@standard-schema/spec@npm:^1.0.0": + version: 1.0.0 + resolution: "@standard-schema/spec@npm:1.0.0" + checksum: 10/aee780cc1431888ca4b9aba9b24ffc8f3073fc083acc105e3951481478a2f4dc957796931b2da9e2d8329584cf211e4542275f188296c1cdff3ed44fd93a8bc8 + languageName: node + linkType: hard + "@szmarczak/http-timer@npm:^4.0.5": version: 4.0.5 resolution: "@szmarczak/http-timer@npm:4.0.5" @@ -3503,10 +3535,13 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:^5.0.0": - version: 5.0.0 - resolution: "@types/chai@npm:5.0.0" - checksum: 10/a6c03aa6b6d59ad40ddb48d07807690efb874628c15b9d89c17d97045a9305a487933398c1e5b5f94087b1a6a9a67a7c828eb9b635104526fd25bb5f9d4c4175 +"@types/chai@npm:^5.0.0, @types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10/e79947307dc235953622e65f83d2683835212357ca261389116ab90bed369ac862ba28b146b4fed08b503ae1e1a12cb93ce783f24bb8d562950469f4320e1c7c languageName: node linkType: hard @@ -3526,6 +3561,13 @@ __metadata: languageName: node linkType: hard +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10/249a27b0bb22f6aa28461db56afa21ec044fa0e303221a62dff81831b20c8530502175f1a49060f7099e7be06181078548ac47c668de79ff9880241968d43d0c + languageName: node + linkType: hard + "@types/easy-table@npm:^0.0.32": version: 0.0.32 resolution: "@types/easy-table@npm:0.0.32" @@ -3552,10 +3594,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.7": - version: 1.0.7 - resolution: "@types/estree@npm:1.0.7" - checksum: 10/419c845ece767ad4b21171e6e5b63dabb2eb46b9c0d97361edcd9cabbf6a95fcadb91d89b5fa098d1336fa0b8fceaea82fca97a2ef3971f5c86e53031e157b21 +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10/25a4c16a6752538ffde2826c2cc0c6491d90e69cd6187bef4a006dd2c3c45469f049e643d7e516c515f21484dc3d48fd5c870be158a5beb72f5baf3dc43e4099 languageName: node linkType: hard @@ -4018,6 +4060,86 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/expect@npm:4.0.15" + dependencies: + "@standard-schema/spec": "npm:^1.0.0" + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:4.0.15" + "@vitest/utils": "npm:4.0.15" + chai: "npm:^6.2.1" + tinyrainbow: "npm:^3.0.3" + checksum: 10/cfb1822012a7ba66d46224c94d2951a780668729199a81eed918103d74110333bd1296e8f598cf2345bac0998f01a71803146da97c8bb69d2775abf3918f02c9 + languageName: node + linkType: hard + +"@vitest/mocker@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/mocker@npm:4.0.15" + dependencies: + "@vitest/spy": "npm:4.0.15" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.21" + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/9f2aed963bd1bbe13f8acb5d05a95e3cf09d50e57708fb9e88cb4f18b0c0c9c854290bdffd8900914b64796ebdec4c068634487ec2fe55e7984941fff404601a + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/pretty-format@npm:4.0.15" + dependencies: + tinyrainbow: "npm:^3.0.3" + checksum: 10/c8ef240027ac340ae420a9b3eb77683a6399edd066832e27793eae19c189e567c5a225c1f26848aa2a2b7545dcc0c9019d6ff0a643cbf0eae004a05117fc2b05 + languageName: node + linkType: hard + +"@vitest/runner@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/runner@npm:4.0.15" + dependencies: + "@vitest/utils": "npm:4.0.15" + pathe: "npm:^2.0.3" + checksum: 10/682c070d00d0505bc4568e807a746238fe726290bcaea2695a009016ce2c396f8a3c090e5ed12795c1b65bcab4188d2fd8c513ce8324abf978272f319e445d19 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/snapshot@npm:4.0.15" + dependencies: + "@vitest/pretty-format": "npm:4.0.15" + magic-string: "npm:^0.30.21" + pathe: "npm:^2.0.3" + checksum: 10/f881257fc1c520541131296f9762d627ad61eb167a3d7129942a5c2dce46e870af1a8446fbf94d2fcdc5a31ab787ffff113f2b8dbd75b15d0494fe43db649682 + languageName: node + linkType: hard + +"@vitest/spy@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/spy@npm:4.0.15" + checksum: 10/700b06beb4fd33c1430bc5061e7c3055df9ad1e64500a0a02edba6a52e37ba3bf800eadfda1f617e1eeca53d7ab6941a69ba2812980347fcc3c3b736c5ae5a56 + languageName: node + linkType: hard + +"@vitest/utils@npm:4.0.15": + version: 4.0.15 + resolution: "@vitest/utils@npm:4.0.15" + dependencies: + "@vitest/pretty-format": "npm:4.0.15" + tinyrainbow: "npm:^3.0.3" + checksum: 10/54d3fd272e05ad43913d842a25dce705eb71db8591511f28fa4a6d0c28fd5eb109c580072e9f8dbc0f431425c890b74494c9d0b14f78d0be18ab87071f06d020 + languageName: node + linkType: hard + "@vue/compiler-core@npm:3.5.25": version: 3.5.25 resolution: "@vue/compiler-core@npm:3.5.25" @@ -4876,6 +4998,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10/a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" @@ -5552,10 +5681,10 @@ __metadata: languageName: node linkType: hard -"chai@npm:^6.0.0": - version: 6.2.0 - resolution: "chai@npm:6.2.0" - checksum: 10/199422854e253d8711ea3f220365c6a850c450abf68b31131d2a0f703cbfc5cb48e6c81567e0adbe80e83cdcae6dba82d069a41a77c16bdf6703329c5c3447ef +"chai@npm:^6.0.0, chai@npm:^6.2.1": + version: 6.2.1 + resolution: "chai@npm:6.2.1" + checksum: 10/f7917749e2468bd3a17ee4769b680e440002960c1294dd11c6d3ad102b5db9ea1a43e3ad9462b7b0f1502e5c845a6e39ce63db9de1def782e44652018c48acb7 languageName: node linkType: hard @@ -5945,7 +6074,7 @@ __metadata: react-dom: "npm:^18.2.0" react-router-dom: "npm:^6.24.1" typescript: "npm:^5.2.2" - vite: "npm:^6.4.1" + vite: "npm:^7.2.7" languageName: unknown linkType: soft @@ -5975,10 +6104,11 @@ __metadata: resolution: "code-checker-selenium@workspace:accessibility-code-checker/selenium" dependencies: "@siteimprove/alfa-selenium": "npm:^0.80.5" - "@siteimprove/alfa-test-deprecated": "npm:^0.108.1" + "@siteimprove/alfa-test": "npm:^0.108.1" "@siteimprove/alfa-test-utils": "npm:^0.80.5" "@types/selenium-webdriver": "npm:^4" selenium-webdriver: "npm:^4.25.0" + vitest: "npm:^4.0.15" languageName: unknown linkType: soft @@ -7546,6 +7676,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10/b6f3e576a3fed4d82b0d0ad4bbf6b3a5ad694d2e7ce8c4a069560da3db6399381eaba703616a182b16dde50ce998af64e07dcf49f2ae48153b9e07be3f107087 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -7845,6 +7982,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10/a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -7946,6 +8092,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.2": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10/a5fada3d0c621649261f886e7d93e6bf80ce26d8a86e5d517e38301b8baec8450ab2cb94ba6e7a0a6bf2fc9ee55f54e1b06938ef1efa52ddcfeffbfa01acbbcc + languageName: node + linkType: hard + "expect@npm:30.2.0, expect@npm:^30.0.0": version: 30.2.0 resolution: "expect@npm:30.2.0" @@ -8128,15 +8281,15 @@ __metadata: languageName: node linkType: hard -"fdir@npm:^6.4.4": - version: 6.4.4 - resolution: "fdir@npm:6.4.4" +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: picomatch: optional: true - checksum: 10/d0000d6b790059b35f4ed19acc8847a66452e0bc68b28766c929ffd523e5ec2083811fc8a545e4a1d4945ce70e887b3a610c145c681073b506143ae3076342ed + checksum: 10/14ca1c9f0a0e8f4f2e9bf4e8551065a164a09545dae548c12a18d238b72e51e5a7b39bd8e5494b56463a0877672d0a6c1ef62c6fa0677db1b0c847773be939b1 languageName: node linkType: hard @@ -11968,6 +12121,13 @@ __metadata: languageName: node linkType: hard +"obug@npm:^2.1.1": + version: 2.1.1 + resolution: "obug@npm:2.1.1" + checksum: 10/bdcf9213361786688019345f3452b95a1dc73710e4b403c82a1994b98bad6abc31b26cb72a482128c5fd53ea9daf6fbb7d0e0e7b2b7e9c8be6d779deeccee07f + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -12275,6 +12435,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10/01e9a69928f39087d96e1751ce7d6d50da8c39abf9a12e0ac2389c42c83bc76f78c45a475bd9026a02e6a6f79be63acc75667df855862fe567d99a00a540d23d + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -12310,10 +12477,10 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.1, picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10/ce617b8da36797d09c0baacb96ca8a44460452c89362d7cb8f70ca46b4158ba8bc3606912de7c818eb4a939f7f9015cef3c766ec8a0c6bfc725fdc078e39c717 +"picomatch@npm:^4.0.1, picomatch@npm:^4.0.2, picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 10/57b99055f40b16798f2802916d9c17e9744e620a0db136554af01d19598b96e45e2f00014c91d1b8b13874b80caa8c295b3d589a3f72373ec4aaf54baa5962d5 languageName: node linkType: hard @@ -12380,7 +12547,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.3, postcss@npm:^8.5.6": +"postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -13199,31 +13366,33 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.34.9": - version: 4.40.1 - resolution: "rollup@npm:4.40.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.40.1" - "@rollup/rollup-android-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-arm64": "npm:4.40.1" - "@rollup/rollup-darwin-x64": "npm:4.40.1" - "@rollup/rollup-freebsd-arm64": "npm:4.40.1" - "@rollup/rollup-freebsd-x64": "npm:4.40.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.40.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.40.1" - "@rollup/rollup-linux-loongarch64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.40.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.40.1" - "@rollup/rollup-linux-x64-musl": "npm:4.40.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.40.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.40.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.40.1" - "@types/estree": "npm:1.0.7" +"rollup@npm:^4.43.0": + version: 4.53.3 + resolution: "rollup@npm:4.53.3" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.53.3" + "@rollup/rollup-android-arm64": "npm:4.53.3" + "@rollup/rollup-darwin-arm64": "npm:4.53.3" + "@rollup/rollup-darwin-x64": "npm:4.53.3" + "@rollup/rollup-freebsd-arm64": "npm:4.53.3" + "@rollup/rollup-freebsd-x64": "npm:4.53.3" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.53.3" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.53.3" + "@rollup/rollup-linux-arm64-gnu": "npm:4.53.3" + "@rollup/rollup-linux-arm64-musl": "npm:4.53.3" + "@rollup/rollup-linux-loong64-gnu": "npm:4.53.3" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.53.3" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.53.3" + "@rollup/rollup-linux-riscv64-musl": "npm:4.53.3" + "@rollup/rollup-linux-s390x-gnu": "npm:4.53.3" + "@rollup/rollup-linux-x64-gnu": "npm:4.53.3" + "@rollup/rollup-linux-x64-musl": "npm:4.53.3" + "@rollup/rollup-openharmony-arm64": "npm:4.53.3" + "@rollup/rollup-win32-arm64-msvc": "npm:4.53.3" + "@rollup/rollup-win32-ia32-msvc": "npm:4.53.3" + "@rollup/rollup-win32-x64-gnu": "npm:4.53.3" + "@rollup/rollup-win32-x64-msvc": "npm:4.53.3" + "@types/estree": "npm:1.0.8" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -13246,9 +13415,9 @@ __metadata: optional: true "@rollup/rollup-linux-arm64-musl": optional: true - "@rollup/rollup-linux-loongarch64-gnu": + "@rollup/rollup-linux-loong64-gnu": optional: true - "@rollup/rollup-linux-powerpc64le-gnu": + "@rollup/rollup-linux-ppc64-gnu": optional: true "@rollup/rollup-linux-riscv64-gnu": optional: true @@ -13260,17 +13429,21 @@ __metadata: optional: true "@rollup/rollup-linux-x64-musl": optional: true + "@rollup/rollup-openharmony-arm64": + optional: true "@rollup/rollup-win32-arm64-msvc": optional: true "@rollup/rollup-win32-ia32-msvc": optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true "@rollup/rollup-win32-x64-msvc": optional: true fsevents: optional: true bin: rollup: dist/bin/rollup - checksum: 10/35d5e83a69000ddd6c087015eb5f862943c53b6e20702575ef50aeb99ce99b864fa74cca630815eb97cdfe1f278f5602f782e55f227b32ac2301f2a5f1fc5373 + checksum: 10/e2eff82405061fa907f15dfbf742b1f5fb4b214495c00989bcdbe21da5fcb3f6dec3deabacec491300a53c99da409586cfc77bdf29b411fccb9089b72cd3728d languageName: node linkType: hard @@ -13557,6 +13730,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10/e93ff66c6531a079af8fb217240df01f980155b5dc408d2d7bebc398dd284e383eb318153bf8acd4db3c4fe799aa5b9a641e38b0ba3b1975700b1c89547ea4e7 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -13789,6 +13969,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10/2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.10.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10/19c9cda4f370b1ffae2b8b08c72167d8c3e5cfa972aaf5c6873f85d0ed2faa729407f5abb194dc33380708c00315002febb6f1e1b484736bfcf9361ad366013a + languageName: node + linkType: hard + "streamx@npm:^2.15.0, streamx@npm:^2.21.0": version: 2.23.0 resolution: "streamx@npm:2.23.0" @@ -14210,13 +14404,34 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.13": - version: 0.2.13 - resolution: "tinyglobby@npm:0.2.13" +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10/cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c + languageName: node + linkType: hard + +"tinyexec@npm:^1.0.2": + version: 1.0.2 + resolution: "tinyexec@npm:1.0.2" + checksum: 10/cb709ed4240e873d3816e67f851d445f5676e0ae3a52931a60ff571d93d388da09108c8057b62351766133ee05ff3159dd56c3a0fbd39a5933c6639ce8771405 + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" dependencies: - fdir: "npm:^6.4.4" - picomatch: "npm:^4.0.2" - checksum: 10/b04557ee58ad2be5f2d2cbb4b441476436c92bb45ba2e1fc464d686b793392b305ed0bcb8b877429e9b5036bdd46770c161a08384c0720b6682b7cd6ac80e403 + fdir: "npm:^6.5.0" + picomatch: "npm:^4.0.3" + checksum: 10/d72bd826a8b0fa5fa3929e7fe5ba48fceb2ae495df3a231b6c5408cd7d8c00b58ab5a9c2a76ba56a62ee9b5e083626f1f33599734bed1ffc4b792406408f0ca2 + languageName: node + linkType: hard + +"tinyrainbow@npm:^3.0.3": + version: 3.0.3 + resolution: "tinyrainbow@npm:3.0.3" + checksum: 10/169cc63c15e1378674180f3207c82c05bfa58fc79992e48792e8d97b4b759012f48e95297900ede24a81f0087cf329a0d85bb81109739eacf03c650127b3f6c1 languageName: node linkType: hard @@ -14821,26 +15036,26 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.4.1": - version: 6.4.1 - resolution: "vite@npm:6.4.1" +"vite@npm:^6.0.0 || ^7.0.0, vite@npm:^7.2.7": + version: 7.2.7 + resolution: "vite@npm:7.2.7" dependencies: esbuild: "npm:^0.25.0" - fdir: "npm:^6.4.4" + fdir: "npm:^6.5.0" fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.2" - postcss: "npm:^8.5.3" - rollup: "npm:^4.34.9" - tinyglobby: "npm:^0.2.13" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" peerDependencies: - "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@types/node": ^20.19.0 || >=22.12.0 jiti: ">=1.21.0" - less: "*" + less: ^4.0.0 lightningcss: ^1.21.0 - sass: "*" - sass-embedded: "*" - stylus: "*" - sugarss: "*" + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -14872,7 +15087,66 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/ea2083b6b1d1c9e85a13d6797ae989aa1dbc27a5c054319c71141934bf3f8dba8d54b510618040f95751148da63787f28f043df7458a194c81f8b6d8a2d32844 + checksum: 10/ec7c588db66c8a3e50a24fc26422c6ef27c2e08a0ceccd200162e45be90d7d12c0a06d8ccc8c88139a657d51be5e10ddc83df9807daf6a1362c2e5ecdaf2a07e + languageName: node + linkType: hard + +"vitest@npm:^4.0.14, vitest@npm:^4.0.15": + version: 4.0.15 + resolution: "vitest@npm:4.0.15" + dependencies: + "@vitest/expect": "npm:4.0.15" + "@vitest/mocker": "npm:4.0.15" + "@vitest/pretty-format": "npm:4.0.15" + "@vitest/runner": "npm:4.0.15" + "@vitest/snapshot": "npm:4.0.15" + "@vitest/spy": "npm:4.0.15" + "@vitest/utils": "npm:4.0.15" + es-module-lexer: "npm:^1.7.0" + expect-type: "npm:^1.2.2" + magic-string: "npm:^0.30.21" + obug: "npm:^2.1.1" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.3" + std-env: "npm:^3.10.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^1.0.2" + tinyglobby: "npm:^0.2.15" + tinyrainbow: "npm:^3.0.3" + vite: "npm:^6.0.0 || ^7.0.0" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.0.15 + "@vitest/browser-preview": 4.0.15 + "@vitest/browser-webdriverio": 4.0.15 + "@vitest/ui": 4.0.15 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@opentelemetry/api": + optional: true + "@types/node": + optional: true + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10/b6df3d07b3f858ce1efc072d90753bc76d278a29245317b70e7bab0ded8bfaf81fc1e41aa30687365fef6d0e4110727867716440bc745e8948ae217a67f9d77b languageName: node linkType: hard @@ -15242,6 +15516,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10/0de6e6cd8f2f94a8b5ca44e84cf1751eadcac3ebedcdc6e5fbbe6c8011904afcbc1a2777c53496ec02ced7b81f2e7eda61e76bf8262a8bc3ceaa1f6040508051 + languageName: node + linkType: hard + "wide-align@npm:^1.1.0": version: 1.1.3 resolution: "wide-align@npm:1.1.3" From 3aff48526824963e598352056f15468ba15fe5b2 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 13:06:15 +0100 Subject: [PATCH 2/9] Clean up dirname definition --- .github/workflows/code-checker.yml | 2 +- .github/workflows/integrate.yml | 2 +- .github/workflows/puppeteer.yml | 2 +- config/vitest.config.ts | 35 ------------------- custom-testing/adding-rules/test/page.spec.ts | 16 ++++----- .../answering/test/answering.spec.ts | 14 ++++---- custom-testing/crawling/crawling.ts | 10 +++--- .../filtering/test/filtering.spec.ts | 24 ++++++------- .../interacting/test/interacting.spec.ts | 10 +++--- .../measuring-performances/performance.ts | 6 ++-- .../navigating/test/navigating.spec.ts | 10 +++--- custom-testing/scraping/scraping.ts | 10 +++--- .../playwright/test/page.spec.ts | 12 +++---- .../puppeteer/test/page.spec.ts | 12 +++---- .../webdriver/test/page.spec.ts | 10 +++--- end-to-end-testing/webdriver/wdio.conf.ts | 7 +--- package.json | 1 - yarn.lock | 16 ++------- 18 files changed, 63 insertions(+), 136 deletions(-) delete mode 100644 config/vitest.config.ts diff --git a/.github/workflows/code-checker.yml b/.github/workflows/code-checker.yml index f98056b6..e2227220 100644 --- a/.github/workflows/code-checker.yml +++ b/.github/workflows/code-checker.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20] + node-version: [24] steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 diff --git a/.github/workflows/integrate.yml b/.github/workflows/integrate.yml index adca6a69..4f1750aa 100644 --- a/.github/workflows/integrate.yml +++ b/.github/workflows/integrate.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20, 22] + node-version: [22, 24] steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 diff --git a/.github/workflows/puppeteer.yml b/.github/workflows/puppeteer.yml index ee80fc52..da798124 100644 --- a/.github/workflows/puppeteer.yml +++ b/.github/workflows/puppeteer.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [20, 22] + node-version: [22, 24] steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 diff --git a/config/vitest.config.ts b/config/vitest.config.ts deleted file mode 100644 index d3981c18..00000000 --- a/config/vitest.config.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - include: [ - // Accessibility Code Checkers is not tested here since its tests are - // intentionally failing. - "custom-testing/test/**/*.spec.ts?(x)", - "end-to-end-testing/test/**/*.spec.ts?(x)", - "unit-testing/test/**/*.spec.ts?(x)", - ], - exclude: [ - // TODO - "custom-testing/adding-rules", - "custom-testing/answering", - "custom-testing/crawling", - "custom-testing/filtering", - "custom-testing/interacting", - "custom-testing/measuring-performances", - "custom-testing/navigating", - "custom-testing/scraping", - "end-to-end-testing/cypress", - "end-to-end-testing/fixtures", - "end-to-end-testing/playwright", - "end-to-end-testing/puppeteer", - "end-to-end-testing/webdriver", - "unit-testing/angular", - "unit-testing/react", - "unit-testing/vue", - ], - // Several tests, notably the ones that spawn a new browser instance, tend - // to take a lot of time… Especially when launching all tests simultaneously. - testTimeout: 60_000 /* ms */, - }, -}); diff --git a/custom-testing/adding-rules/test/page.spec.ts b/custom-testing/adding-rules/test/page.spec.ts index dfa1a29f..c0435ff6 100755 --- a/custom-testing/adding-rules/test/page.spec.ts +++ b/custom-testing/adding-rules/test/page.spec.ts @@ -45,15 +45,15 @@ const myRule = Rule.Atomic.of<Page, Element>({ if (alt.isSome() && ariaLabel.isSome()) { return { 1: Err.of( - Diagnostic.of("The image has both an `alt` and an `aria-label`") + Diagnostic.of("The image has both an `alt` and an `aria-label`"), ), }; } else return { 1: Ok.of( Diagnostic.of( - "The image does not have both an `alt` and an `aria-label`" - ) + "The image does not have both an `alt` and an `aria-label`", + ), ), }; }, @@ -69,15 +69,13 @@ chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), allRules, - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; describe("page.html", () => { let browser: playwright.Browser; @@ -89,7 +87,7 @@ describe("page.html", () => { page = await browser.newPage(); await page.goto( - url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href + url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href, ); document = await page.evaluateHandle(() => window.document); diff --git a/custom-testing/answering/test/answering.spec.ts b/custom-testing/answering/test/answering.spec.ts index c4911d08..901c8611 100755 --- a/custom-testing/answering/test/answering.spec.ts +++ b/custom-testing/answering/test/answering.spec.ts @@ -27,8 +27,8 @@ chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), rules.filter((rule) => !rule.uri.includes("r111")), - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; @@ -37,9 +37,7 @@ const { expect } = chai; let browser: playwright.Browser; let page: playwright.Page; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; async function load(file: string): Promise<playwright.JSHandle> { const fixture = path.join(__dirname, "fixtures", file); @@ -76,7 +74,7 @@ async function teardown(): Promise<void> { * tests where the same question might be asked with different subjects). */ function oracle<I, T extends Hashable, S>( - color: "blue" | "white" = "white" + color: "blue" | "white" = "white", ): act.Oracle<I, T, Question.Metadata, S> { return (rule, question) => { // Checking the question URI to know what to answer @@ -90,8 +88,8 @@ function oracle<I, T extends Hashable, S>( .parent() .some( and(Element.isElement, (element) => - element.classes.includes("hello") - ) + element.classes.includes("hello"), + ), ) ) { // The result needs to be wrapped in all the layers needed by the diff --git a/custom-testing/crawling/crawling.ts b/custom-testing/crawling/crawling.ts index f337cdb5..aa4d1223 100644 --- a/custom-testing/crawling/crawling.ts +++ b/custom-testing/crawling/crawling.ts @@ -16,9 +16,7 @@ if (!scope) { process.exit(1); } -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; const frontier = Frontier.of(scope, [scope, ...seed]); @@ -42,7 +40,7 @@ Crawler.with(async (crawler) => { __dirname, "outcomes", url.host.getOr(""), - ...url.path.filter((segment) => segment !== "") + ...url.path.filter((segment) => segment !== ""), ) + ".json"; fs.mkdirSync(path.dirname(file), { recursive: true }); @@ -53,7 +51,7 @@ Crawler.with(async (crawler) => { }); function logStats<I, T extends Hashable, Q extends Question.Metadata>( - outcomes: Array<Outcome<I, T, Q>> + outcomes: Array<Outcome<I, T, Q>>, ): void { console.log(outcomes.filter(Outcome.isPassed).length, "passed outcomes"); @@ -61,6 +59,6 @@ function logStats<I, T extends Hashable, Q extends Question.Metadata>( console.log( outcomes.filter(Outcome.isInapplicable).length, - "inapplicable rules" + "inapplicable rules", ); } diff --git a/custom-testing/filtering/test/filtering.spec.ts b/custom-testing/filtering/test/filtering.spec.ts index c63a6a8a..27f7f361 100755 --- a/custom-testing/filtering/test/filtering.spec.ts +++ b/custom-testing/filtering/test/filtering.spec.ts @@ -27,8 +27,8 @@ chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), rules.filter((rule) => !rule.uri.includes("r111")), - [persist(() => "test/outcomes/filtering.spec.json")] - ) + [persist(() => "test/outcomes/filtering.spec.json")], + ), ); const { expect } = chai; @@ -37,9 +37,7 @@ const { expect } = chai; let browser: playwright.Browser; let page: playwright.Page; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = iport.meta.dirname; async function load(file: string): Promise<playwright.JSHandle> { const fixture = path.join(__dirname, "fixtures", file); @@ -89,7 +87,7 @@ describe("conformance.html", () => { // Level AA conformance is EAA and WAD requirement function aaFilter<T extends Hashable>(outcome: Outcome<unknown, T>): boolean { return outcome.rule.hasRequirement( - and(Criterion.isCriterion, Conformance.isAA()) + and(Criterion.isCriterion, Conformance.isAA()), ); } @@ -103,27 +101,27 @@ describe("conformance.html", () => { // Other examples of filters, based on conformance: // Only keep the outcomes failing a WCAG 2.0 Success Criterion. function wcag20Filter<T extends Hashable>( - outcome: Outcome<unknown, T> + outcome: Outcome<unknown, T>, ): boolean { return outcome.rule.hasRequirement( and(Criterion.isCriterion, (criterion) => - Iterable.some(criterion.versions, (version) => version === "2.0") - ) + Iterable.some(criterion.versions, (version) => version === "2.0"), + ), ); } // Only keep the outcomes failing a WCAG 2.0 AA Success Criterion (ADA requirement) function wcag20aaFilter<T extends Hashable>( - outcome: Outcome<unknown, T> + outcome: Outcome<unknown, T>, ): boolean { return outcome.rule.hasRequirement( - and(Criterion.isCriterion, Conformance.isAA("2.0")) + and(Criterion.isCriterion, Conformance.isAA("2.0")), ); } // Only keep the outcomes failing a WCAG technique function techniquesFilter<T extends Hashable>( - outcome: Outcome<unknown, T> + outcome: Outcome<unknown, T>, ): boolean { return outcome.rule.hasRequirement(Technique.isTechnique); } @@ -145,7 +143,7 @@ describe("scope.html", () => { // When filtering to only keep outcomes about components, the test passes. function componentFilter<T extends Hashable>( - outcome: Outcome<unknown, T> + outcome: Outcome<unknown, T>, ): boolean { return outcome.rule.hasTag((tag) => tag.equals(Scope.Component)); } diff --git a/custom-testing/interacting/test/interacting.spec.ts b/custom-testing/interacting/test/interacting.spec.ts index ea055a43..66181ba9 100755 --- a/custom-testing/interacting/test/interacting.spec.ts +++ b/custom-testing/interacting/test/interacting.spec.ts @@ -21,15 +21,13 @@ chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), [R69], - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; describe("Interacting with a page", () => { let browser: playwright.Browser; @@ -41,7 +39,7 @@ describe("Interacting with a page", () => { page = await browser.newPage(); await page.goto( - url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href + url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href, ); document = await page.evaluateHandle(() => window.document); diff --git a/custom-testing/measuring-performances/performance.ts b/custom-testing/measuring-performances/performance.ts index 376acc9e..67baadff 100755 --- a/custom-testing/measuring-performances/performance.ts +++ b/custom-testing/measuring-performances/performance.ts @@ -13,9 +13,7 @@ import type { Flattened } from "@siteimprove/alfa-rules"; const { isMeasure } = Performance.Measure; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; // We'll record the rules' performance in a duration object with this shape: interface Durations { @@ -56,7 +54,7 @@ function recordRule(entry: Performance.Entry<RuleEvent>): void { if (isMeasure(entry)) { const ruleId = entry.data.rule.uri.replace( "https://alfa.siteimprove.com/rules/", - "" + "", ); if (durations.rules[ruleId] === undefined) { durations.rules[ruleId] = {}; diff --git a/custom-testing/navigating/test/navigating.spec.ts b/custom-testing/navigating/test/navigating.spec.ts index f1e90aa6..accadace 100755 --- a/custom-testing/navigating/test/navigating.spec.ts +++ b/custom-testing/navigating/test/navigating.spec.ts @@ -20,15 +20,13 @@ chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), [R69], - [] - ) + [], + ), ); const { expect } = chai; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; describe("Navigating between pages", () => { let browser: playwright.Browser; @@ -40,7 +38,7 @@ describe("Navigating between pages", () => { page = await browser.newPage(); await page.goto( - url.pathToFileURL(path.join(__dirname, "fixtures", "page1.html")).href + url.pathToFileURL(path.join(__dirname, "fixtures", "page1.html")).href, ); document = await page.evaluateHandle(() => window.document); diff --git a/custom-testing/scraping/scraping.ts b/custom-testing/scraping/scraping.ts index 990757fb..044d7e0d 100644 --- a/custom-testing/scraping/scraping.ts +++ b/custom-testing/scraping/scraping.ts @@ -8,9 +8,7 @@ import { Scraper } from "@siteimprove/alfa-scraper"; import rules from "@siteimprove/alfa-rules"; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; const input = path.join(__dirname, "fixtures", "page.html"); const output = path.join(__dirname, "outcomes", "page.html.json"); @@ -48,7 +46,7 @@ Scraper.with(async (scraper) => { __dirname, "outcomes", url.host.getOr(""), - ...url.path.filter((segment) => segment !== "") + ...url.path.filter((segment) => segment !== ""), ) + ".json"; fs.mkdirSync(path.dirname(file), { recursive: true }); @@ -58,7 +56,7 @@ Scraper.with(async (scraper) => { }); function logStats<I, T extends Hashable, Q extends Question.Metadata>( - outcomes: Array<Outcome<I, T, Q>> + outcomes: Array<Outcome<I, T, Q>>, ): void { console.log(outcomes.filter(Outcome.isPassed).length, "passed outcomes"); @@ -66,6 +64,6 @@ function logStats<I, T extends Hashable, Q extends Question.Metadata>( console.log( outcomes.filter(Outcome.isInapplicable).length, - "inapplicable rules" + "inapplicable rules", ); } diff --git a/end-to-end-testing/playwright/test/page.spec.ts b/end-to-end-testing/playwright/test/page.spec.ts index 3e348c42..cb0411ae 100644 --- a/end-to-end-testing/playwright/test/page.spec.ts +++ b/end-to-end-testing/playwright/test/page.spec.ts @@ -15,16 +15,14 @@ import rules from "@siteimprove/alfa-rules"; import { persist } from "common/persist"; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; chai.use( alfa.Chai.createPlugin( (value: Playwright.Type) => Future.from(Playwright.toPage(value)), rules.filter((rule) => !rule.uri.includes("r111")), - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; @@ -40,8 +38,8 @@ describe("page.html", () => { await page.goto( url.pathToFileURL( - path.join(__dirname, "..", "..", "fixtures", "page.html") - ).href + path.join(__dirname, "..", "..", "fixtures", "page.html"), + ).href, ); document = await page.evaluateHandle(() => window.document); diff --git a/end-to-end-testing/puppeteer/test/page.spec.ts b/end-to-end-testing/puppeteer/test/page.spec.ts index 441eb054..88b6cedf 100644 --- a/end-to-end-testing/puppeteer/test/page.spec.ts +++ b/end-to-end-testing/puppeteer/test/page.spec.ts @@ -17,15 +17,13 @@ chai.use( alfa.Chai.createPlugin( (value: Puppeteer.Type) => Future.from(Puppeteer.toPage(value)), rules.filter((rule) => !rule.uri.includes("r111")), - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; describe("page.html", () => { let browser: puppeteer.Browser; @@ -38,8 +36,8 @@ describe("page.html", () => { await page.goto( url.pathToFileURL( - path.join(__dirname, "..", "..", "fixtures", "page.html") - ).href + path.join(__dirname, "..", "..", "fixtures", "page.html"), + ).href, ); document = await page.evaluateHandle(() => window.document); diff --git a/end-to-end-testing/webdriver/test/page.spec.ts b/end-to-end-testing/webdriver/test/page.spec.ts index bc972468..db04f7f7 100644 --- a/end-to-end-testing/webdriver/test/page.spec.ts +++ b/end-to-end-testing/webdriver/test/page.spec.ts @@ -14,20 +14,18 @@ chai.use( alfa.Chai.createPlugin( (value: WebElement) => Future.from(WebElement.toPage(value, browser)), rules, - [persist(() => "test/outcomes/page.spec.json")] - ) + [persist(() => "test/outcomes/page.spec.json")], + ), ); const { expect } = chai; -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; describe("page.html", () => { before(async () => { await browser.url( - url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href + url.pathToFileURL(path.join(__dirname, "fixtures", "page.html")).href, ); }); diff --git a/end-to-end-testing/webdriver/wdio.conf.ts b/end-to-end-testing/webdriver/wdio.conf.ts index 738f059f..8cfd2986 100644 --- a/end-to-end-testing/webdriver/wdio.conf.ts +++ b/end-to-end-testing/webdriver/wdio.conf.ts @@ -1,9 +1,4 @@ -// TODO: This should be replaced with import.meta.dirname once we switch to Node 22 -import * as path from "node:path"; -import * as url from "node:url"; - -const __filename = url.fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); +const __dirname = import.meta.dirname; export const config: WebdriverIO.Config = { runner: "local", diff --git a/package.json b/package.json index d494f800..d2f5132d 100755 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "clean": "tsc --build --clean", "knip": "knip -c config/knip.ts", "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-{puppeteer,webdriver}' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", - "test-main": "yarn vitest run --config ./config/vitest.config.ts", "code-checker:comment": "echo 'First start the server with `yarn code-checker:start`, next run the tests with `yarn code-checker:test`. The tests are failing since the pages are purposefully not accessible; do not run them in blocking CI flows.'", "code-checker:start": "yarn workspace code-checker-demo-site run dev", "code-checker:test": "yarn workspaces foreach -A -v -p --include 'code-checker-*' --exclude 'code-checker-demo-site' run test", diff --git a/yarn.lock b/yarn.lock index 44b35480..2a587993 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3133,16 +3133,6 @@ __metadata: languageName: node linkType: hard -"@siteimprove/alfa-test-deprecated@npm:^0.108.1": - version: 0.108.1 - resolution: "@siteimprove/alfa-test-deprecated@npm:0.108.1" - dependencies: - "@types/node": "npm:^24.10.1" - chalk: "npm:^5.6.2" - checksum: 10/7c25aeaffb19b306d09390d83eeec64b992f900ce8d8c6ea9899ec4a6cdec768be496a46f344aa6da882247748c3f97149df3b20c07e5a5d607cafafa7215a3e - languageName: node - linkType: hard - "@siteimprove/alfa-test-utils@npm:^0.80.5": version: 0.80.5 resolution: "@siteimprove/alfa-test-utils@npm:0.80.5" @@ -3706,7 +3696,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^24.10.1": +"@types/node@npm:*": version: 24.10.1 resolution: "@types/node@npm:24.10.1" dependencies: @@ -5721,7 +5711,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.1.2, chalk@npm:^5.3.0, chalk@npm:^5.6.2": +"chalk@npm:^5.1.2, chalk@npm:^5.3.0": version: 5.6.2 resolution: "chalk@npm:5.6.2" checksum: 10/1b2f48f6fba1370670d5610f9cd54c391d6ede28f4b7062dd38244ea5768777af72e5be6b74fb6c6d54cb84c4a2dff3f3afa9b7cb5948f7f022cfd3d087989e0 @@ -6093,7 +6083,7 @@ __metadata: resolution: "code-checker-puppeteer@workspace:accessibility-code-checker/puppeteer" dependencies: "@siteimprove/alfa-puppeteer": "npm:^0.80.5" - "@siteimprove/alfa-test-deprecated": "npm:^0.108.1" + "@siteimprove/alfa-test": "npm:^0.108.1" "@siteimprove/alfa-test-utils": "npm:^0.80.5" puppeteer: "npm:^24.0.0" languageName: unknown From a1b3ca5f6692f488dea7ba74afb6e2c0242fbf1d Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 13:15:50 +0100 Subject: [PATCH 3/9] Remove (alfa-)enzyme --- .../filtering/test/filtering.spec.ts | 2 +- unit-testing/react/components/button.spec.tsx | 6 +- unit-testing/react/package.json | 6 +- unit-testing/react/setup.ts | 12 +- yarn.lock | 836 +----------------- 5 files changed, 33 insertions(+), 829 deletions(-) diff --git a/custom-testing/filtering/test/filtering.spec.ts b/custom-testing/filtering/test/filtering.spec.ts index 27f7f361..decbb49b 100755 --- a/custom-testing/filtering/test/filtering.spec.ts +++ b/custom-testing/filtering/test/filtering.spec.ts @@ -37,7 +37,7 @@ const { expect } = chai; let browser: playwright.Browser; let page: playwright.Page; -const __dirname = iport.meta.dirname; +const __dirname = import.meta.dirname; async function load(file: string): Promise<playwright.JSHandle> { const fixture = path.join(__dirname, "fixtures", file); diff --git a/unit-testing/react/components/button.spec.tsx b/unit-testing/react/components/button.spec.tsx index 2c963d02..cf5abc79 100644 --- a/unit-testing/react/components/button.spec.tsx +++ b/unit-testing/react/components/button.spec.tsx @@ -1,13 +1,11 @@ /// <reference types="@siteimprove/alfa-jest" /> -import * as enzyme from "enzyme"; - import { Button } from "./button.js"; it("should not have a name", async () => { - await expect(enzyme.default.shallow(<Button></Button>)).not.toBeAccessible(); + await expect(<Button></Button>).not.toBeAccessible(); }); it("should have a name", async () => { - await expect(enzyme.default.shallow(<Button>Hello</Button>)).toBeAccessible(); + await expect(<Button>Hello</Button>).toBeAccessible(); }); diff --git a/unit-testing/react/package.json b/unit-testing/react/package.json index 8b1cb809..7a3b6ea0 100644 --- a/unit-testing/react/package.json +++ b/unit-testing/react/package.json @@ -22,17 +22,13 @@ "node": ">=20.0.0" }, "devDependencies": { - "@siteimprove/alfa-enzyme": "^0.80.5", "@siteimprove/alfa-jest": "^0.80.5", + "@siteimprove/alfa-react": "^0.80.5", "@siteimprove/alfa-rules": "^0.108.1", - "@types/enzyme": "^3.10.5", - "@types/enzyme-adapter-react-16": "^1.0.5", "@types/jest": "^29.5.1", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "common": "workspace:^", - "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.6", "jest": "^29.5.0", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/unit-testing/react/setup.ts b/unit-testing/react/setup.ts index f1db7ea7..adcb7e03 100644 --- a/unit-testing/react/setup.ts +++ b/unit-testing/react/setup.ts @@ -1,20 +1,16 @@ -import { Enzyme } from "@siteimprove/alfa-enzyme"; - import * as alfa from "@siteimprove/alfa-jest"; +import { React } from "@siteimprove/alfa-react"; // Only selecting a rule that apply to buttons. import { Rules } from "@siteimprove/alfa-rules"; const R12 = Rules.get("R12").getUnsafe(); -import * as enzyme from "enzyme"; -import Adapter from "enzyme-adapter-react-16"; - import { persist } from "common/persist"; -enzyme.default.configure({ adapter: new Adapter() }); +// enzyme.default.configure({ adapter: new Adapter() }); alfa.Jest.createPlugin( - (value: Enzyme.Type) => Enzyme.toPage(value), + (value: React.Type) => React.toPage(value), [R12], - [persist(() => "outcomes/button.spec.json")] + [persist(() => "outcomes/button.spec.json")], ); diff --git a/yarn.lock b/yarn.lock index 2a587993..c36f2616 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2248,20 +2248,6 @@ __metadata: languageName: node linkType: hard -"@siteimprove/alfa-enzyme@npm:^0.80.5": - version: 0.80.5 - resolution: "@siteimprove/alfa-enzyme@npm:0.80.5" - dependencies: - "@siteimprove/alfa-react": "npm:^0.80.5" - "@siteimprove/alfa-web": "npm:^0.108.1" - "@types/enzyme": "npm:^3.10.8" - enzyme: "npm:^3.11.0" - peerDependencies: - "@siteimprove/alfa-web": ^0.108.1 - checksum: 10/51e98c6a3781cbebe42ab7e01d7847841c93991acbaa7b4adeb39dc3b970801ba6d2bacc58771b2e7ac74a95a7996437055d0155ed0efe19e0416662dd6a83b0 - languageName: node - linkType: hard - "@siteimprove/alfa-equatable@npm:^0.108.1": version: 0.108.1 resolution: "@siteimprove/alfa-equatable@npm:0.108.1" @@ -3535,15 +3521,6 @@ __metadata: languageName: node linkType: hard -"@types/cheerio@npm:*": - version: 0.22.24 - resolution: "@types/cheerio@npm:0.22.24" - dependencies: - "@types/node": "npm:*" - checksum: 10/1fcfd1352c3d816eb0ecfb75554ecb228c8fec2a8cb80a55510a22cc1362e970b3548d23762d4dca2bf68d914a3d32cb0f9dc423531575fac9d7390f85ff8a98 - languageName: node - linkType: hard - "@types/cucumber@npm:^6.0.1": version: 6.0.1 resolution: "@types/cucumber@npm:6.0.1" @@ -3565,25 +3542,6 @@ __metadata: languageName: node linkType: hard -"@types/enzyme-adapter-react-16@npm:^1.0.5": - version: 1.0.6 - resolution: "@types/enzyme-adapter-react-16@npm:1.0.6" - dependencies: - "@types/enzyme": "npm:*" - checksum: 10/d668ed5fbb7bf72e647f212ab60e2208f96b566a1782cbaa35cd0be3bfc27c5d075367517d341155d35dd21834271df7d74bbf49d1f878e0b7be2a9c0daa17a3 - languageName: node - linkType: hard - -"@types/enzyme@npm:*, @types/enzyme@npm:^3.10.5, @types/enzyme@npm:^3.10.8": - version: 3.10.8 - resolution: "@types/enzyme@npm:3.10.8" - dependencies: - "@types/cheerio": "npm:*" - "@types/react": "npm:*" - checksum: 10/eec4549fff11c216705dfbaf5b0ee250f3fde785e94143be190e125aad857ec60a6b7d7b922acabaddc554e187bd411c7e1773200eb07aa013de7ea30df665cf - languageName: node - linkType: hard - "@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -3747,21 +3705,21 @@ __metadata: linkType: hard "@types/react-test-renderer@npm:^18.3.0": - version: 18.3.0 - resolution: "@types/react-test-renderer@npm:18.3.0" + version: 18.3.1 + resolution: "@types/react-test-renderer@npm:18.3.1" dependencies: - "@types/react": "npm:*" - checksum: 10/c53683990bd194cb68e3987bda79c78eff41517f7a747e92f3e54217c2ce3addd031b8a45bf631982c909cc2caeeb905372f322758e05bb76c03754a3f24426e + "@types/react": "npm:^18" + checksum: 10/f8cc23cc8decdb6068cdc8f8c306e189eab8e569443ce97b216e757ee42eb20b18d2280ef41e2955668413f14be92765a3ba86cfcfeeae6b20c965acd9674786 languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^18.2.66, @types/react@npm:^18.3.3, @types/react@npm:^18.3.5": - version: 18.3.5 - resolution: "@types/react@npm:18.3.5" +"@types/react@npm:*, @types/react@npm:^18, @types/react@npm:^18.2.66, @types/react@npm:^18.3.3, @types/react@npm:^18.3.5": + version: 18.3.27 + resolution: "@types/react@npm:18.3.27" dependencies: "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/ba0477c5ad4a762157c6262a199af6ccf9e24576877a26a7f516d5a9ba35374a6ac7f8686a10e5e8030513214f02bcb66e8363e43905afb7cd313deaf673de05 + csstype: "npm:^3.2.2" + checksum: 10/90155820a2af315cad1ff47df695f3f2f568c12ad641a7805746a6a9a9aa6c40b1374e819e50d39afe0e375a6b9160a73176cbdb4e09807262bc6fcdc06e67db languageName: node linkType: hard @@ -4674,25 +4632,6 @@ __metadata: languageName: node linkType: hard -"airbnb-prop-types@npm:^2.16.0": - version: 2.16.0 - resolution: "airbnb-prop-types@npm:2.16.0" - dependencies: - array.prototype.find: "npm:^2.1.1" - function.prototype.name: "npm:^1.1.2" - is-regex: "npm:^1.1.0" - object-is: "npm:^1.1.2" - object.assign: "npm:^4.1.0" - object.entries: "npm:^1.1.2" - prop-types: "npm:^15.7.2" - prop-types-exact: "npm:^1.2.0" - react-is: "npm:^16.13.1" - peerDependencies: - react: ^0.14 || ^15.0.0 || ^16.0.0-alpha - checksum: 10/8f87960bad4b2fc07bd4cddfbeaae6987f28257b5657261de4c8c40a92e09e0916d8df974b9dfbfa3873329871072e53f90f78c8f167b179e04d78e540a196df - languageName: node - linkType: hard - "ajv@npm:^6.12.3, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -4937,34 +4876,6 @@ __metadata: languageName: node linkType: hard -"array-filter@npm:^1.0.0": - version: 1.0.0 - resolution: "array-filter@npm:1.0.0" - checksum: 10/93f8bf988b19971d0a3f1dc01366346038cbacc0417d35cdcfee41f17c6848fc7aa8cf30656f928292ecf81566bb1e03bc711c9a923cc5e41b75e732c9e263bb - languageName: node - linkType: hard - -"array.prototype.find@npm:^2.1.1": - version: 2.1.1 - resolution: "array.prototype.find@npm:2.1.1" - dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.4" - checksum: 10/805574b1446324ace4211b4942503dd4c7e043491fa67860d6935ae5f35b33cf36647da8c19bed7e19287c5088f1d02688d4fd5ab6c34944f510220f4b7011ea - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.2.3": - version: 1.2.4 - resolution: "array.prototype.flat@npm:1.2.4" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.1" - checksum: 10/c8bd981449940cd2b905ee7d93f9530fb2c08fd2716d09a02ed45f9b86feba74939d57acca516f7fee926e414e473fc160df1421e94723c629c992eda8df06af - languageName: node - linkType: hard - "asn1@npm:~0.2.3": version: 0.2.4 resolution: "asn1@npm:0.2.4" @@ -5358,7 +5269,7 @@ __metadata: languageName: node linkType: hard -"boolbase@npm:^1.0.0, boolbase@npm:~1.0.0": +"boolbase@npm:^1.0.0": version: 1.0.0 resolution: "boolbase@npm:1.0.0" checksum: 10/3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 @@ -5574,19 +5485,6 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.7 - resolution: "call-bind@npm:1.0.7" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - set-function-length: "npm:^1.2.1" - checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 - languageName: node - linkType: hard - "call-bound@npm:^1.0.2": version: 1.0.4 resolution: "call-bound@npm:1.0.4" @@ -5762,20 +5660,6 @@ __metadata: languageName: node linkType: hard -"cheerio@npm:=1.0.0-rc.3": - version: 1.0.0-rc.3 - resolution: "cheerio@npm:1.0.0-rc.3" - dependencies: - css-select: "npm:~1.2.0" - dom-serializer: "npm:~0.1.1" - entities: "npm:~1.1.1" - htmlparser2: "npm:^3.9.1" - lodash: "npm:^4.15.0" - parse5: "npm:^3.0.1" - checksum: 10/3c47f5e5147a5718a2f0a98896b455686d34f94c4d998242eb698201fc447e032ddbf307d52491a366d85bd6b956fd40d910b17e671b044dac72b29aa88dc847 - languageName: node - linkType: hard - "cheerio@npm:^1.0.0-rc.12": version: 1.0.0 resolution: "cheerio@npm:1.0.0" @@ -6178,13 +6062,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10/90c5b6898610cd075984c58c4f88418a4fb44af08c1b1415e9854c03171bec31b336b7f3e4cefe33de994b3f12b03c5e2d638da4316df83593b9e82554e7e95b - languageName: node - linkType: hard - "commander@npm:^4.1.1": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -6466,18 +6343,6 @@ __metadata: languageName: node linkType: hard -"css-select@npm:~1.2.0": - version: 1.2.0 - resolution: "css-select@npm:1.2.0" - dependencies: - boolbase: "npm:~1.0.0" - css-what: "npm:2.1" - domutils: "npm:1.5.1" - nth-check: "npm:~1.0.1" - checksum: 10/4a57b1e39d209b5c99acfaf17de12ac09cc8df3f9c4f348be70f0bff23fce81d25d8c918d5d54a85045eaf4b8a556719d8863c672cb618d41fef9c01bbbe2fff - languageName: node - linkType: hard - "css-shorthand-properties@npm:^1.1.1": version: 1.1.1 resolution: "css-shorthand-properties@npm:1.1.1" @@ -6492,13 +6357,6 @@ __metadata: languageName: node linkType: hard -"css-what@npm:2.1": - version: 2.1.3 - resolution: "css-what@npm:2.1.3" - checksum: 10/2a46608ecbffadd6ebeef7cc5dfead018ca9b80b24db89ed6e2ac3e6fd59b5e79dd33cd0de0b35ec4fa61d062c5700dab9079e778a7fabfbc4165194c0dd780d - languageName: node - linkType: hard - "css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" @@ -6529,10 +6387,10 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.1.3": - version: 3.1.3 - resolution: "csstype@npm:3.1.3" - checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade +"csstype@npm:^3.1.3, csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10/ad41baf7e2ffac65ab544d79107bf7cd1a4bb9bab9ac3302f59ab4ba655d5e30942a8ae46e10ba160c6f4ecea464cc95b975ca2fefbdeeacd6ac63f12f99fe1f languageName: node linkType: hard @@ -6982,26 +6840,6 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: "npm:^1.0.0" - es-errors: "npm:^1.3.0" - gopd: "npm:^1.0.1" - checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3": - version: 1.1.3 - resolution: "define-properties@npm:1.1.3" - dependencies: - object-keys: "npm:^1.0.12" - checksum: 10/33125cafaf4de2c9934cfba20e0a45bccc53fa6d85370a48c0b5a9a0c76c7d0497a5fdf01bc5c1186cb61f2747f19f43520ca6fdd37b4d0290f552c6747e0a17 - languageName: node - linkType: hard - "degenerator@npm:^5.0.0": version: 5.0.1 resolution: "degenerator@npm:5.0.1" @@ -7111,13 +6949,6 @@ __metadata: languageName: node linkType: hard -"discontinuous-range@npm:1.0.0": - version: 1.0.0 - resolution: "discontinuous-range@npm:1.0.0" - checksum: 10/3c1716c6f107e80082600ac57648b49baa9aa60f71a442dadbaf66179610e239ed95ba96ff6080bc7845ea027ffe9176e22e94a04ff275a7dd5c30e2aece4cba - languageName: node - linkType: hard - "dom-event-types@npm:^1.0.0": version: 1.0.0 resolution: "dom-event-types@npm:1.0.0" @@ -7125,16 +6956,6 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: "npm:^2.0.1" - entities: "npm:^2.0.0" - checksum: 10/376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e - languageName: node - linkType: hard - "dom-serializer@npm:^2.0.0": version: 2.0.0 resolution: "dom-serializer@npm:2.0.0" @@ -7146,24 +6967,7 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:~0.1.1": - version: 0.1.1 - resolution: "dom-serializer@npm:0.1.1" - dependencies: - domelementtype: "npm:^1.3.0" - entities: "npm:^1.1.1" - checksum: 10/4f6a3eff802273741931cfd3c800fab4e683236eed10628d6605f52538a6bc0ce4770f3ca2ad68a27412c103ae9b6cdaed3c0a8e20d2704192bde497bc875215 - languageName: node - linkType: hard - -"domelementtype@npm:1, domelementtype@npm:^1.3.0, domelementtype@npm:^1.3.1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 10/7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": +"domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: 10/ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -7179,15 +6983,6 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^2.3.0": - version: 2.4.2 - resolution: "domhandler@npm:2.4.2" - dependencies: - domelementtype: "npm:1" - checksum: 10/d8b0303c53c0eda912e45820ef8f6023f8462a724e8b824324f27923970222a250c7569e067de398c4d9ca3ce0f2b2d2818bc632d6fa72956721d6729479a9b9 - languageName: node - linkType: hard - "domhandler@npm:^4.2.2": version: 4.2.2 resolution: "domhandler@npm:4.2.2" @@ -7206,26 +7001,6 @@ __metadata: languageName: node linkType: hard -"domutils@npm:1.5.1": - version: 1.5.1 - resolution: "domutils@npm:1.5.1" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10/88c610e4bba925946663cd5c5d28a359714dc2b0ed1c2ad99e645cbfba46c14e44c053a02dec8b9b436022402b6a32c5b38177723a3082ccdfa283b61e28b9e1 - languageName: node - linkType: hard - -"domutils@npm:^1.5.1": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: "npm:0" - domelementtype: "npm:1" - checksum: 10/8c1d879fd3bbfc0156c970d12ebdf530f541cbda895d7f631b2444d22bbb9d0e5a3a4c3210cffb17708ad67531d7d40e1bef95e915c53a218d268607b66b63c8 - languageName: node - linkType: hard - "domutils@npm:^3.0.1, domutils@npm:^3.1.0": version: 3.1.0 resolution: "domutils@npm:3.1.0" @@ -7506,20 +7281,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^1.1.1, entities@npm:~1.1.1": - version: 1.1.2 - resolution: "entities@npm:1.1.2" - checksum: 10/4a707022f4e932060f03df2526be55d085a2576fe534421e5b22bc62abb0d1f04241c171f9981e3d7baa4f4160606cad72a2f7eb01b6a25e279e3f31a2be4bf2 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 10/2c765221ee324dbe25e1b8ca5d1bf2a4d39e750548f2e85cbf7ca1d167d709689ddf1796623e66666ae747364c11ed512c03b48c5bbe70968d30f2a4009509b7 - languageName: node - linkType: hard - "entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" @@ -7534,84 +7295,6 @@ __metadata: languageName: node linkType: hard -"enzyme-adapter-react-16@npm:^1.15.6": - version: 1.15.6 - resolution: "enzyme-adapter-react-16@npm:1.15.6" - dependencies: - enzyme-adapter-utils: "npm:^1.14.0" - enzyme-shallow-equal: "npm:^1.0.4" - has: "npm:^1.0.3" - object.assign: "npm:^4.1.2" - object.values: "npm:^1.1.2" - prop-types: "npm:^15.7.2" - react-is: "npm:^16.13.1" - react-test-renderer: "npm:^16.0.0-0" - semver: "npm:^5.7.0" - peerDependencies: - enzyme: ^3.0.0 - react: ^16.0.0-0 - react-dom: ^16.0.0-0 - checksum: 10/c0242c62a73e6382c299bf5094cba92d8f5c9d9652c64a3a410500657cd2f2bf321f31a1ed9819c984a6adbef9cbe5a444db027a1b918afb59ce782b488eb21c - languageName: node - linkType: hard - -"enzyme-adapter-utils@npm:^1.14.0": - version: 1.14.0 - resolution: "enzyme-adapter-utils@npm:1.14.0" - dependencies: - airbnb-prop-types: "npm:^2.16.0" - function.prototype.name: "npm:^1.1.3" - has: "npm:^1.0.3" - object.assign: "npm:^4.1.2" - object.fromentries: "npm:^2.0.3" - prop-types: "npm:^15.7.2" - semver: "npm:^5.7.1" - peerDependencies: - react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 - checksum: 10/e441ee6db3172839941962d6cb07d4c6368b91815ac4fb000e28dac3dccc91a9a807a22f405499dfad3f865649737d951814a0bdc1fceec3f487ab0b4d593342 - languageName: node - linkType: hard - -"enzyme-shallow-equal@npm:^1.0.1, enzyme-shallow-equal@npm:^1.0.4": - version: 1.0.4 - resolution: "enzyme-shallow-equal@npm:1.0.4" - dependencies: - has: "npm:^1.0.3" - object-is: "npm:^1.1.2" - checksum: 10/54bbad0955683f09252568bfcb9d7e934a27c06634057db9e82b54c0d9f7a27b6160d77643177d973c133b87d404f284cc6aa0481c0a1c81cdff05b072e2bb49 - languageName: node - linkType: hard - -"enzyme@npm:^3.11.0": - version: 3.11.0 - resolution: "enzyme@npm:3.11.0" - dependencies: - array.prototype.flat: "npm:^1.2.3" - cheerio: "npm:^1.0.0-rc.3" - enzyme-shallow-equal: "npm:^1.0.1" - function.prototype.name: "npm:^1.1.2" - has: "npm:^1.0.3" - html-element-map: "npm:^1.2.0" - is-boolean-object: "npm:^1.0.1" - is-callable: "npm:^1.1.5" - is-number-object: "npm:^1.0.4" - is-regex: "npm:^1.0.5" - is-string: "npm:^1.0.5" - is-subset: "npm:^0.1.1" - lodash.escape: "npm:^4.0.1" - lodash.isequal: "npm:^4.5.0" - object-inspect: "npm:^1.7.0" - object-is: "npm:^1.0.2" - object.assign: "npm:^4.1.0" - object.entries: "npm:^1.1.1" - object.values: "npm:^1.1.1" - raf: "npm:^3.4.1" - rst-selector-parser: "npm:^2.2.3" - string.prototype.trim: "npm:^1.2.1" - checksum: 10/4d3c5d3c7c7b8f169b0b09bca9ea0bb262fed40a9964c3d3da3e137e789569ddfb012b69587502e6fd1bf8548e38084ff1ca36d17b27361e6915b5ec78a8ff57 - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -7628,31 +7311,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.4, es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2": - version: 1.18.0 - resolution: "es-abstract@npm:1.18.0" - dependencies: - call-bind: "npm:^1.0.2" - es-to-primitive: "npm:^1.2.1" - function-bind: "npm:^1.1.1" - get-intrinsic: "npm:^1.1.1" - has: "npm:^1.0.3" - has-symbols: "npm:^1.0.2" - is-callable: "npm:^1.2.3" - is-negative-zero: "npm:^2.0.1" - is-regex: "npm:^1.1.2" - is-string: "npm:^1.0.5" - object-inspect: "npm:^1.9.0" - object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.2" - string.prototype.trimend: "npm:^1.0.4" - string.prototype.trimstart: "npm:^1.0.4" - unbox-primitive: "npm:^1.0.0" - checksum: 10/98b2dd3778d0bc36b86302603681f26432aad85d2019834a09d5221ca350600eb4b1e95915d442644cfcc422d5996a806c13ca30435655150f4a4e081b5960cb - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": +"es-define-property@npm:^1.0.1": version: 1.0.1 resolution: "es-define-property@npm:1.0.1" checksum: 10/f8dc9e660d90919f11084db0a893128f3592b781ce967e4fccfb8f3106cb83e400a4032c559184ec52ee1dbd4b01e7776c7cd0b3327b1961b1a4a7008920fe78 @@ -7694,17 +7353,6 @@ __metadata: languageName: node linkType: hard -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: "npm:^1.1.4" - is-date-object: "npm:^1.0.1" - is-symbol: "npm:^1.0.2" - checksum: 10/74aeeefe2714cf99bb40cab7ce3012d74e1e2c1bd60d0a913b467b269edde6e176ca644b5ba03a5b865fb044a29bca05671cd445c85ca2cdc2de155d7fc8fe9b - languageName: node - linkType: hard - "esbuild-wasm@npm:>=0.13.8": version: 0.17.19 resolution: "esbuild-wasm@npm:0.17.19" @@ -8565,25 +8213,6 @@ __metadata: languageName: node linkType: hard -"function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.3": - version: 1.1.4 - resolution: "function.prototype.name@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.2" - functions-have-names: "npm:^1.2.2" - checksum: 10/07671cf87de3eec0d041c318fc45294940476498ae0eda7a0aaa4fcf4080902174577c90f22fd309fb5817f040d3acd53648d23993860d9a174b5bf907c4cc28 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.2": - version: 1.2.2 - resolution: "functions-have-names@npm:1.2.2" - checksum: 10/3553a12edfb307cc6303c1dd3a5becb17bb86a822163ccab279cf93ae9f7ed0c5294c2153e9248d96a2d125a56f8c66d34ee75c271f8ee2e7a89f8acf05fe128 - languageName: node - linkType: hard - "gauge@npm:~2.7.3": version: 2.7.4 resolution: "gauge@npm:2.7.4" @@ -8664,7 +8293,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": +"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0": version: 1.3.1 resolution: "get-intrinsic@npm:1.3.1" dependencies: @@ -8832,7 +8461,7 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": +"gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" checksum: 10/94e296d69f92dc1c0768fcfeecfb3855582ab59a7c75e969d5f96ce50c3d201fd86d5a2857c22565764d5bb8a816c7b1e58f133ec318cd56274da36c5e3fb1a1 @@ -8917,13 +8546,6 @@ __metadata: languageName: node linkType: hard -"has-bigints@npm:^1.0.1": - version: 1.0.1 - resolution: "has-bigints@npm:1.0.1" - checksum: 10/44ab55868174470065d2e0f8f6def1c990d12b82162a8803c679699fa8a39f966e336f2a33c185092fe8aea7e8bf2e85f1c26add5f29d98f2318bd270096b183 - languageName: node - linkType: hard - "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -8931,16 +8553,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: "npm:^1.0.0" - checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": version: 1.1.0 resolution: "has-symbols@npm:1.1.0" checksum: 10/959385c98696ebbca51e7534e0dc723ada325efa3475350951363cce216d27373e0259b63edb599f72eb94d6cde8577b4b2375f080b303947e560f85692834fa @@ -9007,16 +8620,6 @@ __metadata: languageName: node linkType: hard -"html-element-map@npm:^1.2.0": - version: 1.3.0 - resolution: "html-element-map@npm:1.3.0" - dependencies: - array-filter: "npm:^1.0.0" - call-bind: "npm:^1.0.2" - checksum: 10/bb9d1c9a755174eda7e434f6880f067cd7bd7b0e66e3cf7b709c1575e5aeb498419cf0587760b476385b11c7b561fdc4413bb4691d0c83ad820a37fa5fd73a77 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^3.0.0": version: 3.0.0 resolution: "html-encoding-sniffer@npm:3.0.0" @@ -9033,20 +8636,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^3.9.1": - version: 3.10.1 - resolution: "htmlparser2@npm:3.10.1" - dependencies: - domelementtype: "npm:^1.3.1" - domhandler: "npm:^2.3.0" - domutils: "npm:^1.5.1" - entities: "npm:^1.1.1" - inherits: "npm:^2.0.1" - readable-stream: "npm:^3.1.1" - checksum: 10/d5297fe76c0d6b0f35f39781417eb560ef12fa121953578083f3f2b240c74d5c35a38185689d181b6a82b66a3025436f14aa3413b94f3cd50ba15733f2f72389 - languageName: node - linkType: hard - "htmlparser2@npm:^9.1.0": version: 9.1.0 resolution: "htmlparser2@npm:9.1.0" @@ -9299,7 +8888,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 @@ -9365,13 +8954,6 @@ __metadata: languageName: node linkType: hard -"is-bigint@npm:^1.0.1": - version: 1.0.1 - resolution: "is-bigint@npm:1.0.1" - checksum: 10/04aa6fde59d2b7929df865acb89c8d7f89f919cc149b8be11e3560b1aab8667e5d939cc8954097c496f7dda80fd5bb67f829ca80ab66cc68918e41e2c1b9c5d7 - languageName: node - linkType: hard - "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" @@ -9381,15 +8963,6 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.0.1, is-boolean-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-boolean-object@npm:1.1.0" - dependencies: - call-bind: "npm:^1.0.0" - checksum: 10/d6d5113d7c40d111e6611efe3a76e999d6ea7c4bf2f33c41e30383ef005d6992b1d892ff4fb234db2debbbf4b9ba63f72326abdabfd925f80b8d53f5dd68de67 - languageName: node - linkType: hard - "is-buffer@npm:^1.1.5": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" @@ -9397,13 +8970,6 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.1.5, is-callable@npm:^1.2.3": - version: 1.2.3 - resolution: "is-callable@npm:1.2.3" - checksum: 10/34d51c2c4a9f316632cd4975a8d33756ff570281019ab347b26fbc972a4906c873c9e9cb8a10c8313a7797309397fbbc14b5b0e92ceb3dd1804c80459e74e9dc - languageName: node - linkType: hard - "is-core-module@npm:^2.2.0": version: 2.2.0 resolution: "is-core-module@npm:2.2.0" @@ -9413,13 +8979,6 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": - version: 1.0.2 - resolution: "is-date-object@npm:1.0.2" - checksum: 10/96c56c04631f866b3a3aea4b889eac6120c13d8a06dc7e105479ffd6f57e5ea3668f1d779ef30063d4b27aa8e9b235ea7d15bbdab54b056affc678c4769ff143 - languageName: node - linkType: hard - "is-docker@npm:^2.0.0": version: 2.2.1 resolution: "is-docker@npm:2.2.1" @@ -9499,20 +9058,6 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.1": - version: 2.0.1 - resolution: "is-negative-zero@npm:2.0.1" - checksum: 10/3a017d57c2d5e04e9584b82282016dbf8bda34104a40f580e296a9de9bd74a5d9f75a5460bdad0ab98f7a7124bb3d193ffa799cdfdad7bbb547cd9daffa649a8 - languageName: node - linkType: hard - -"is-number-object@npm:^1.0.4": - version: 1.0.4 - resolution: "is-number-object@npm:1.0.4" - checksum: 10/02939c84b28d2e4ec0ee2cb5fc8ac53ee3c4d67d801c280aa051c2392afd677fe47c84efd5d13ccd5e00f103041e58743b9fa535fe905a6f49b48315ae1ddcf8 - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -9548,16 +9093,6 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.0.5, is-regex@npm:^1.1.0, is-regex@npm:^1.1.2": - version: 1.1.2 - resolution: "is-regex@npm:1.1.2" - dependencies: - call-bind: "npm:^1.0.2" - has-symbols: "npm:^1.0.1" - checksum: 10/da07bea5f0ec7b05c8826f8dc0e1322fa7275a96bcc3d46a48fa6a31320a38ceb523ce07b5960b7413b3c6323fa60a33bf8b8855ef3feec7d14a46061882f6ed - languageName: node - linkType: hard - "is-stream@npm:^2.0.0, is-stream@npm:^2.0.1": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -9565,29 +9100,6 @@ __metadata: languageName: node linkType: hard -"is-string@npm:^1.0.5": - version: 1.0.5 - resolution: "is-string@npm:1.0.5" - checksum: 10/aaf13faa599cb831705eec248aaa8a7355554f397841ada961a08642711022ea27ef8176ae0c3f7ba66eee1f6b584ab31bd42cd354878a58bdade388fe163a79 - languageName: node - linkType: hard - -"is-subset@npm:^0.1.1": - version: 0.1.1 - resolution: "is-subset@npm:0.1.1" - checksum: 10/cce9aeb579b5676af9237e77a106d2721bfb34ec12b0e90d858b2585472ca223002b5a54da1203460749db8bb525ee5fa96ec8306c714f0170650a131f1be413 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.3 - resolution: "is-symbol@npm:1.0.3" - dependencies: - has-symbols: "npm:^1.0.1" - checksum: 10/4854604be4abb5f9d885d4bbc9f9318b7dbda9402fbe172c09861bb8910d97e70fac6dabbf1023a7ec56986f457c92abb08f1c99decce83c06c944130a0b1cd1 - languageName: node - linkType: hard - "is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" @@ -11165,13 +10677,6 @@ __metadata: languageName: node linkType: hard -"lodash.escape@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.escape@npm:4.0.1" - checksum: 10/ba1effab9aea7e20ee69b26cbfeb41c73da2eb4d2ab1c261aaf53dd0902ce1afc2f0b34fb24bc69c1d2dd201c332e1d1eb696092fc844a2c5c8e7ccd1ca32014 - languageName: node - linkType: hard - "lodash.flatten@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flatten@npm:4.4.0" @@ -11186,13 +10691,6 @@ __metadata: languageName: node linkType: hard -"lodash.isequal@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.isequal@npm:4.5.0" - checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 - languageName: node - linkType: hard - "lodash.isobject@npm:^3.0.2": version: 3.0.2 resolution: "lodash.isobject@npm:3.0.2" @@ -11249,7 +10747,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.15.0, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 @@ -11303,7 +10801,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.1.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -11753,13 +11251,6 @@ __metadata: languageName: node linkType: hard -"moo@npm:^0.5.0": - version: 0.5.1 - resolution: "moo@npm:0.5.1" - checksum: 10/78f1bfb8aeee346f1a23987ec9ecbfd5fe0c42249f0330296b84f3ddc324587724b8ca406744844db1ae6d5ae08e345d8e4c533fe24bc11efc2a0b055a58af2c - languageName: node - linkType: hard - "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -11813,23 +11304,6 @@ __metadata: languageName: node linkType: hard -"nearley@npm:^2.7.10": - version: 2.20.1 - resolution: "nearley@npm:2.20.1" - dependencies: - commander: "npm:^2.19.0" - moo: "npm:^0.5.0" - railroad-diagrams: "npm:^1.0.0" - randexp: "npm:0.4.6" - bin: - nearley-railroad: bin/nearley-railroad.js - nearley-test: bin/nearley-test.js - nearley-unparse: bin/nearley-unparse.js - nearleyc: bin/nearleyc.js - checksum: 10/b327a07d0fee967ec2b74205fee97c3ff13aeb6c91342443e5f0f00ed11e3fb8ce7e71e21de6a74f094206ebdb571e93c79a58f1fe5414714c97b0e55cd57cb2 - languageName: node - linkType: hard - "netmask@npm:^2.0.2": version: 2.0.2 resolution: "netmask@npm:2.0.2" @@ -12002,15 +11476,6 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:~1.0.1": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: "npm:~1.0.0" - checksum: 10/59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c - languageName: node - linkType: hard - "number-is-nan@npm:^1.0.0": version: 1.0.1 resolution: "number-is-nan@npm:1.0.1" @@ -12039,78 +11504,13 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.13.3, object-inspect@npm:^1.7.0, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.13.3": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" checksum: 10/aa13b1190ad3e366f6c83ad8a16ed37a19ed57d267385aa4bfdccda833d7b90465c057ff6c55d035a6b2e52c1a2295582b294217a0a3a1ae7abdd6877ef781fb languageName: node linkType: hard -"object-is@npm:^1.0.2, object-is@npm:^1.1.2": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 10/75365aff5da4bebad5d20efd9f9a7a13597e603f5eb03d89da8f578c3f3937fe01c6cb5fce86c0611c48795c0841401fd37c943821db0de703c7b30a290576ad - languageName: node - linkType: hard - -"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: 10/3d81d02674115973df0b7117628ea4110d56042e5326413e4b4313f0bcdf7dd78d4a3acef2c831463fa3796a66762c49daef306f4a0ea1af44877d7086d73bde - languageName: node - linkType: hard - -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - has-symbols: "npm:^1.0.1" - object-keys: "npm:^1.1.1" - checksum: 10/83fdff0208e5ea616aa59880add9c0cd08e58532d5bb010630a4695002f467e0a08f0f53d062ae33593ecf0fff42147b019be7fb17f2153264c37f8f4b85dfaa - languageName: node - linkType: hard - -"object.entries@npm:^1.1.1, object.entries@npm:^1.1.2": - version: 1.1.3 - resolution: "object.entries@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.1" - has: "npm:^1.0.3" - checksum: 10/42751e9470c7756b3559e23418a4fd2146d19082abccf00ad9efbeb12c4f05a4e2c06f838aad9f758f4b871c2934b7df21fe67b23978a7e662ae58c187c1e6e0 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.3": - version: 2.0.4 - resolution: "object.fromentries@npm:2.0.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.2" - has: "npm:^1.0.3" - checksum: 10/62ae902d1b06467b96df848a50b82db608204efedfc523df9ad54c315a582ba1a1b5ae94cf8a1d232f4c807615c153293a4dce4df5b0e13f5ea3b4fe99d080d4 - languageName: node - linkType: hard - -"object.values@npm:^1.1.1, object.values@npm:^1.1.2": - version: 1.1.3 - resolution: "object.values@npm:1.1.3" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.2" - has: "npm:^1.0.3" - checksum: 10/528523a295ef4ff04d68096234d60a4060987f39ede14e919c1e8c0ca14b9148db3080b4a7b38b7bb39932956e86104bceaa360cf5b3aac8fb25c4ef2b0ae9cd - languageName: node - linkType: hard - "obug@npm:^2.1.1": version: 2.1.1 resolution: "obug@npm:2.1.1" @@ -12349,15 +11749,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^3.0.1": - version: 3.0.3 - resolution: "parse5@npm:3.0.3" - dependencies: - "@types/node": "npm:*" - checksum: 10/c5ab0c0bf56996b9e37c4cd9d752e8fa899d14d6c8a761c2df14830d76730779252818ff1403d91c05be7647be81e6a6560063cc4b7285e4adb42e6b03642ec2 - languageName: node - linkType: hard - "parse5@npm:^7.0.0, parse5@npm:^7.1.1, parse5@npm:^7.1.2": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -12679,28 +12070,6 @@ __metadata: languageName: node linkType: hard -"prop-types-exact@npm:^1.2.0": - version: 1.2.0 - resolution: "prop-types-exact@npm:1.2.0" - dependencies: - has: "npm:^1.0.3" - object.assign: "npm:^4.1.0" - reflect.ownkeys: "npm:^0.2.0" - checksum: 10/61ab29c0f27959e62ec37581e38fff2c3b99ae231df312997f6b00b205f53789802b44511cc824cad60cd17b9663731da8ca6c77025ea880fd38a26f7de5e714 - languageName: node - linkType: hard - -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": - version: 15.7.2 - resolution: "prop-types@npm:15.7.2" - dependencies: - loose-envify: "npm:^1.4.0" - object-assign: "npm:^4.1.1" - react-is: "npm:^16.8.1" - checksum: 10/1d2b6462559e78e4ab15775b5f9ca21bbdcf94c0c6597624a407f9f5ce2cac8c02997bc59cc517b54f64aa1e95e5134c86755ee99a24659bc023d7b2b3096e15 - languageName: node - linkType: hard - "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" @@ -12907,32 +12276,6 @@ __metadata: languageName: node linkType: hard -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: "npm:^2.1.0" - checksum: 10/4c4b4c826b09d2aec6ca809f1a3c3c12136e7ec8d13fbb91f495dd2c99cd43345240e003da3bfd16036a432e635049fc6d9f69f9187f5f22ea88bb146ec75881 - languageName: node - linkType: hard - -"railroad-diagrams@npm:^1.0.0": - version: 1.0.0 - resolution: "railroad-diagrams@npm:1.0.0" - checksum: 10/5349cf7a27f28c2cd152b525964624e0d0a795ab062d01682084381570fbb07ab877035771bcfb27cd5b6a7ee9f8371ecc34ccc8c3bde3443676230a59a7a85e - languageName: node - linkType: hard - -"randexp@npm:0.4.6": - version: 0.4.6 - resolution: "randexp@npm:0.4.6" - dependencies: - discontinuous-range: "npm:1.0.0" - ret: "npm:~0.1.10" - checksum: 10/ae6d213ec8018b2d22960d2b73ee7a4e25f85050a11dc485b6d3a06ace318ca567353b1d75d8d11f529b7ed6bdeb52644b789307ef42812bf5da2ade4f85e113 - languageName: node - linkType: hard - "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -12970,13 +12313,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.8.1, react-is@npm:^16.8.6": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10/5aa564a1cde7d391ac980bedee21202fc90bdea3b399952117f54fb71a932af1e5902020144fb354b4690b2414a0c7aafe798eb617b76a3d441d956db7726fdf - languageName: node - linkType: hard - "react-refresh@npm:^0.14.2": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" @@ -13020,20 +12356,6 @@ __metadata: languageName: node linkType: hard -"react-test-renderer@npm:^16.0.0-0": - version: 16.14.0 - resolution: "react-test-renderer@npm:16.14.0" - dependencies: - object-assign: "npm:^4.1.1" - prop-types: "npm:^15.6.2" - react-is: "npm:^16.8.6" - scheduler: "npm:^0.19.1" - peerDependencies: - react: ^16.14.0 - checksum: 10/1a064a65c6073bb72376e8539e979836c52cd6629207163594078005e7bf68a4b35d9397a0ac04aa2a534a9f8f9eb2c2c3a5ff9d2dc8b67bafd6be7451dd1527 - languageName: node - linkType: hard - "react-test-renderer@npm:^18.3.1": version: 18.3.1 resolution: "react-test-renderer@npm:18.3.1" @@ -13134,13 +12456,6 @@ __metadata: languageName: node linkType: hard -"reflect.ownkeys@npm:^0.2.0": - version: 0.2.0 - resolution: "reflect.ownkeys@npm:0.2.0" - checksum: 10/9530b166569e547c2cf25ade3cdc39c662212feeccf3e0ed46e6d8abf92f5683c82d7857011cee6230bf648eb0b99b6b419a007012b8571dcd4bb4d818d3b88d - languageName: node - linkType: hard - "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -13303,13 +12618,6 @@ __metadata: languageName: node linkType: hard -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: 10/07c9e7619b4c86053fa57689bf7606b5a40fc1231fc87682424d0b3e296641cc19c218c3b8a8917305fbcca3bfc43038a5b6a63f54755c1bbca2f91857253b03 - languageName: node - linkType: hard - "ret@npm:~0.5.0": version: 0.5.0 resolution: "ret@npm:0.5.0" @@ -13437,16 +12745,6 @@ __metadata: languageName: node linkType: hard -"rst-selector-parser@npm:^2.2.3": - version: 2.2.3 - resolution: "rst-selector-parser@npm:2.2.3" - dependencies: - lodash.flattendeep: "npm:^4.4.0" - nearley: "npm:^2.7.10" - checksum: 10/f58b7f01d0045a21868e200e573fc3afd856e0c6d17526f61678220f849a817477a94a5cb1d88cf7db3fd4de65c16f722cc4ae5cacabe74ad59d8d6630709a41 - languageName: node - linkType: hard - "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -13534,16 +12832,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.19.1": - version: 0.19.1 - resolution: "scheduler@npm:0.19.1" - dependencies: - loose-envify: "npm:^1.1.0" - object-assign: "npm:^4.1.1" - checksum: 10/2bf42cd56994dd8a97bad0ecb6fbd720674f640c4a95957f9ab453dda28133d5f56755d842e6a0b203efef89a49c52354d151946f50e5c0b633d97d718285c8d - languageName: node - linkType: hard - "scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" @@ -13565,7 +12853,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.7.0, semver@npm:^5.7.1": +"semver@npm:2 || 3 || 4 || 5": version: 5.7.2 resolution: "semver@npm:5.7.2" bin: @@ -13635,20 +12923,6 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.1": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: "npm:^1.1.4" - es-errors: "npm:^1.3.0" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.4" - gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.2" - checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d - languageName: node - linkType: hard - "setimmediate@npm:^1.0.5": version: 1.0.5 resolution: "setimmediate@npm:1.0.5" @@ -14048,37 +13322,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.1": - version: 1.2.4 - resolution: "string.prototype.trim@npm:1.2.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.18.0-next.2" - checksum: 10/46e268c2fb6735a3f3ee24fe456e64c8fc19f6fc51490f0f5a74d13d386822dbeb74d0e76d2d2c000dc555108d034e49773b17ff1dbaaca65a53564909628c0f - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimend@npm:1.0.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 10/5733b0f9801276387be136f1591883fc1b6371e263533d7797dc6178916a98bd9f632870f25e58a827ed028c17003b70e37650e80fc6703af6883cb2f3b0c1b3 - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.4": - version: 1.0.4 - resolution: "string.prototype.trimstart@npm:1.0.4" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.3" - checksum: 10/18e0b7362c51f566a3de095c4bab953174897f6cebe92826234f04d2744b0fdb25095c74661e0c15776d1338d64965be0a4f9c8be8851ee15b827c63a5280fdb - languageName: node - linkType: hard - "string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -14688,18 +13931,6 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.0": - version: 1.0.1 - resolution: "unbox-primitive@npm:1.0.1" - dependencies: - function-bind: "npm:^1.1.1" - has-bigints: "npm:^1.0.1" - has-symbols: "npm:^1.0.2" - which-boxed-primitive: "npm:^1.0.2" - checksum: 10/16aacdfc555545a89ddc678f136029ead18215f6843b9b707ab383cdc2f739efc34470b6b79c36ce7d376432f75b65b4ecb437d20f97196ba9d4683db0425ea3 - languageName: node - linkType: hard - "unbzip2-stream@npm:1.4.3, unbzip2-stream@npm:^1.4.3": version: 1.4.3 resolution: "unbzip2-stream@npm:1.4.3" @@ -14782,17 +14013,13 @@ __metadata: version: 0.0.0-use.local resolution: "unit-testing-react@workspace:unit-testing/react" dependencies: - "@siteimprove/alfa-enzyme": "npm:^0.80.5" "@siteimprove/alfa-jest": "npm:^0.80.5" + "@siteimprove/alfa-react": "npm:^0.80.5" "@siteimprove/alfa-rules": "npm:^0.108.1" - "@types/enzyme": "npm:^3.10.5" - "@types/enzyme-adapter-react-16": "npm:^1.0.5" "@types/jest": "npm:^29.5.1" "@types/react": "npm:^18.3.5" "@types/react-dom": "npm:^18.3.0" common: "workspace:^" - enzyme: "npm:^3.11.0" - enzyme-adapter-react-16: "npm:^1.15.6" jest: "npm:^29.5.0" react: "npm:^18.3.1" react-dom: "npm:^18.3.1" @@ -15442,19 +14669,6 @@ __metadata: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" - dependencies: - is-bigint: "npm:^1.0.1" - is-boolean-object: "npm:^1.1.0" - is-number-object: "npm:^1.0.4" - is-string: "npm:^1.0.5" - is-symbol: "npm:^1.0.3" - checksum: 10/9c7ca7855255f25ac47f4ce8b59c4cc33629e713fd7a165c9d77a2bb47bf3d9655a5664660c70337a3221cf96742f3589fae15a3a33639908d33e29aa2941efb - languageName: node - linkType: hard - "which-module@npm:^2.0.0": version: 2.0.0 resolution: "which-module@npm:2.0.0" From c78bd087f368fa0f337b6ca2c1d61370f7b9abbb Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 13:22:01 +0100 Subject: [PATCH 4/9] Clean up --- package.json | 3 +-- unit-testing/react/setup.ts | 2 -- yarn.lock | 1 - 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/package.json b/package.json index d2f5132d..8e571498 100755 --- a/package.json +++ b/package.json @@ -28,8 +28,7 @@ "knip": "^5.29.1", "playwright": "^1.47.0", "prettier": "^3.0.0", - "typescript": "^5.0.4", - "vitest": "^4.0.15" + "typescript": "^5.0.4" }, "//": [ "Somehow, https://github.com/enzymejs/enzyme/blob/master/packages/enzyme/package.json correctly pins cheerio", diff --git a/unit-testing/react/setup.ts b/unit-testing/react/setup.ts index adcb7e03..13847222 100644 --- a/unit-testing/react/setup.ts +++ b/unit-testing/react/setup.ts @@ -7,8 +7,6 @@ const R12 = Rules.get("R12").getUnsafe(); import { persist } from "common/persist"; -// enzyme.default.configure({ adapter: new Adapter() }); - alfa.Jest.createPlugin( (value: React.Type) => React.toPage(value), [R12], diff --git a/yarn.lock b/yarn.lock index c36f2616..a1ce21ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2264,7 +2264,6 @@ __metadata: playwright: "npm:^1.47.0" prettier: "npm:^3.0.0" typescript: "npm:^5.0.4" - vitest: "npm:^4.0.15" languageName: unknown linkType: soft From c88fe55defa1cab7309e87beb79a15ddbecd6200 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 13:26:07 +0100 Subject: [PATCH 5/9] Reactivate puppeteer tests --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8e571498..6d0d10c6 100755 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "watch": "tsc --build --watch", "clean": "tsc --build --clean", "knip": "knip -c config/knip.ts", - "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-{puppeteer,webdriver}' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", + "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-{webdriver}' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", "code-checker:comment": "echo 'First start the server with `yarn code-checker:start`, next run the tests with `yarn code-checker:test`. The tests are failing since the pages are purposefully not accessible; do not run them in blocking CI flows.'", "code-checker:start": "yarn workspace code-checker-demo-site run dev", "code-checker:test": "yarn workspaces foreach -A -v -p --include 'code-checker-*' --exclude 'code-checker-demo-site' run test", From b7644c573888bd96bf67bf8b074cf55846415085 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 13:30:27 +0100 Subject: [PATCH 6/9] Deactivate apparmor --- .github/workflows/integrate.yml | 10 ++++++++++ package.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integrate.yml b/.github/workflows/integrate.yml index 4f1750aa..481fd4db 100644 --- a/.github/workflows/integrate.yml +++ b/.github/workflows/integrate.yml @@ -18,14 +18,24 @@ jobs: - uses: actions/setup-node@v6 with: node-version: ${{ matrix.node-version }} + + - name: Disable AppArmor on ubuntu + # Security on Ubuntu ⩾ 23 causes problem with Chrome, this is copied from + # https://github.com/puppeteer/puppeteer/blob/main/.github/workflows/ci.yml + # where they probably know what they do. + # if: ${{ matrix.os == 'ubuntu-latest' }} + run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns + - uses: actions/cache@v4 with: path: .yarn/cache key: yarn-${{ hashFiles('yarn.lock') }} + - run: yarn install --immutable - name: Install Playwright browsers # https://playwright.dev/docs/ci-intro run: yarn playwright install + - run: yarn dedupe --check - run: yarn build - run: yarn test diff --git a/package.json b/package.json index 6d0d10c6..44bcf7e1 100755 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "watch": "tsc --build --watch", "clean": "tsc --build --clean", "knip": "knip -c config/knip.ts", - "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-{webdriver}' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", + "test": "yarn workspaces foreach -A -v -p --exclude 'end-to-end-testing-webdriver' --exclude 'custom-testing-{crawling,measuring-performance}' --exclude 'unit-testing-angular' --exclude 'code-checker-*' run test", "code-checker:comment": "echo 'First start the server with `yarn code-checker:start`, next run the tests with `yarn code-checker:test`. The tests are failing since the pages are purposefully not accessible; do not run them in blocking CI flows.'", "code-checker:start": "yarn workspace code-checker-demo-site run dev", "code-checker:test": "yarn workspaces foreach -A -v -p --include 'code-checker-*' --exclude 'code-checker-demo-site' run test", From 5b90c93049d6468a799ce5340e5d0010babb3a6a Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 14:00:23 +0100 Subject: [PATCH 7/9] Clean up --- config/knip.ts | 8 +++++++- end-to-end-testing/webdriver/tsconfig.json | 10 ++-------- end-to-end-testing/webdriver/wdio.conf.ts | 11 ++++++++++- unit-testing/react/package.json | 4 +--- yarn.lock | 4 +--- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/config/knip.ts b/config/knip.ts index b23b1738..dcbb74d4 100644 --- a/config/knip.ts +++ b/config/knip.ts @@ -7,7 +7,13 @@ const config: KnipConfig = { ignoreDependencies: ["prettier"], workspaces: { "accessibility-code-checker/*": { entry, project }, - "accessibility-code-checker/demo-page": { entry: "src/main.tsx", project }, + "accessibility-code-checker/demo-page": { + // knip is somehow unhappy with something in vite, skipping the config file + // avoids looking into that… + vite: { config: [] }, + entry: "src/main.tsx", + project: ["src/**/*.ts", "src/**/*.tsx"], + }, common: { entry: "persist.ts", project }, "custom-testing/*": { entry, project }, "custom-testing/crawling": { entry: ["crawling.ts"], project }, diff --git a/end-to-end-testing/webdriver/tsconfig.json b/end-to-end-testing/webdriver/tsconfig.json index 3b28380f..9551d58f 100644 --- a/end-to-end-testing/webdriver/tsconfig.json +++ b/end-to-end-testing/webdriver/tsconfig.json @@ -1,13 +1,7 @@ { "$schema": "http://json.schemastore.org/tsconfig", "extends": "../tsconfig.json", - "compilerOptions": { - "types": ["mocha", "webdriverio/async"] - }, + "compilerOptions": { "types": ["mocha", "webdriverio/async"] }, "files": ["test/page.spec.ts", "wdio.conf.ts"], - "references": [ - { - "path": "../../common" - } - ] + "references": [{ "path": "../../common" }] } diff --git a/end-to-end-testing/webdriver/wdio.conf.ts b/end-to-end-testing/webdriver/wdio.conf.ts index 8cfd2986..2382b85c 100644 --- a/end-to-end-testing/webdriver/wdio.conf.ts +++ b/end-to-end-testing/webdriver/wdio.conf.ts @@ -1,4 +1,13 @@ -const __dirname = import.meta.dirname; +// Knip is somehow unhappy about the use of import.meta.url, not being able to +// detect that this should be a module. So, keeping the old way. + +import * as path from "node:path"; +import * as url from "node:url"; + +const __filename = url.fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// const __dirname = import.meta.dirname; export const config: WebdriverIO.Config = { runner: "local", diff --git a/unit-testing/react/package.json b/unit-testing/react/package.json index 7a3b6ea0..ad4b9e3e 100644 --- a/unit-testing/react/package.json +++ b/unit-testing/react/package.json @@ -29,8 +29,6 @@ "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "common": "workspace:^", - "jest": "^29.5.0", - "react": "^18.3.1", - "react-dom": "^18.3.1" + "jest": "^29.5.0" } } diff --git a/yarn.lock b/yarn.lock index a1ce21ba..f87a4917 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12293,7 +12293,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0, react-dom@npm:^18.3.1": +"react-dom@npm:^18.2.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" dependencies: @@ -14020,8 +14020,6 @@ __metadata: "@types/react-dom": "npm:^18.3.0" common: "workspace:^" jest: "npm:^29.5.0" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" languageName: unknown linkType: soft From 7f81e1e85d1d3eabbc4a66894d9c7ad2f6cbd05a Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 14:04:19 +0100 Subject: [PATCH 8/9] Clean up --- .../puppeteer/package.json | 3 +- config/knip.ts | 2 + unit-testing/react/package.json | 1 - yarn.lock | 60 +++++++++++-------- 4 files changed, 38 insertions(+), 28 deletions(-) diff --git a/accessibility-code-checker/puppeteer/package.json b/accessibility-code-checker/puppeteer/package.json index 94b25c84..c772f313 100644 --- a/accessibility-code-checker/puppeteer/package.json +++ b/accessibility-code-checker/puppeteer/package.json @@ -10,7 +10,8 @@ }, "devDependencies": { "@siteimprove/alfa-test": "^0.108.1", - "@siteimprove/alfa-test-utils": "^0.80.5" + "@siteimprove/alfa-test-utils": "^0.80.5", + "vitest": "^4.0.15" }, "dependencies": { "@siteimprove/alfa-puppeteer": "^0.80.5", diff --git a/config/knip.ts b/config/knip.ts index dcbb74d4..de247cf4 100644 --- a/config/knip.ts +++ b/config/knip.ts @@ -11,6 +11,8 @@ const config: KnipConfig = { // knip is somehow unhappy with something in vite, skipping the config file // avoids looking into that… vite: { config: [] }, + // Which of course causes dependencies usage to not be seen… + ignoreDependencies: ["@vitejs/plugin-react"], entry: "src/main.tsx", project: ["src/**/*.ts", "src/**/*.tsx"], }, diff --git a/unit-testing/react/package.json b/unit-testing/react/package.json index ad4b9e3e..016ea54d 100644 --- a/unit-testing/react/package.json +++ b/unit-testing/react/package.json @@ -27,7 +27,6 @@ "@siteimprove/alfa-rules": "^0.108.1", "@types/jest": "^29.5.1", "@types/react": "^18.3.5", - "@types/react-dom": "^18.3.0", "common": "workspace:^", "jest": "^29.5.0" } diff --git a/yarn.lock b/yarn.lock index f87a4917..8265948f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,7 +49,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.24.5, @babel/core@npm:^7.27.4": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.28.0": version: 7.28.5 resolution: "@babel/core@npm:7.28.5" dependencies: @@ -128,7 +128,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.27.1 resolution: "@babel/helper-plugin-utils@npm:7.27.1" checksum: 10/96136c2428888e620e2ec493c25888f9ceb4a21099dcf3dd4508ea64b58cdedbd5a9fb6c7b352546de84d6c24edafe482318646932a22c449ebd16d16c22d864 @@ -364,25 +364,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.24.5": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.24.7" +"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/56115b4a6c006ce82846f1ab21e5ba713ee8f57a166c96c94fc632cdfbc8b9cebbf20b7cd9b8076439dabecdbf0f8ca4c2cb1bed1bf0b15cb44505a429f6a92f + checksum: 10/72cbae66a58c6c36f7e12e8ed79f292192d858dd4bb00e9e89d8b695e4c5cb6ef48eec84bffff421a5db93fd10412c581f1cccdb00264065df76f121995bdb68 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.24.1": - version: 7.24.7 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.24.7" +"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10/682e2ae15d788453d8ab34cf0dcc29c093faf7c7cf1d60110c43f33e6477f916cf301456b314fc496fadc07123f7978225f41ac286ed0bfbad9c8e76392fdb6d + checksum: 10/e2843362adb53692be5ee9fa07a386d2d8883daad2063a3575b3c373fc14cdf4ea7978c67a183cb631b4c9c8d77b2f48c24c088f8e65cc3600cb8e97d72a7161 languageName: node linkType: hard @@ -1521,6 +1521,13 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-beta.27": + version: 1.0.0-beta.27 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.27" + checksum: 10/4f7da788d88b33d029d5acf84c63be27c62d7c53017476f2e3026172cf94062cb399cd15194c89574578f192016bbcb1e040ce6811b3bb9ec4d4faa2ad386459 + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.53.3": version: 4.53.3 resolution: "@rollup/rollup-android-arm-eabi@npm:4.53.3" @@ -3694,7 +3701,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.2.22, @types/react-dom@npm:^18.3.0": +"@types/react-dom@npm:^18.2.22": version: 18.3.0 resolution: "@types/react-dom@npm:18.3.0" dependencies: @@ -3993,17 +4000,18 @@ __metadata: linkType: hard "@vitejs/plugin-react@npm:^4.2.1": - version: 4.3.1 - resolution: "@vitejs/plugin-react@npm:4.3.1" + version: 4.7.0 + resolution: "@vitejs/plugin-react@npm:4.7.0" dependencies: - "@babel/core": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-self": "npm:^7.24.5" - "@babel/plugin-transform-react-jsx-source": "npm:^7.24.1" + "@babel/core": "npm:^7.28.0" + "@babel/plugin-transform-react-jsx-self": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx-source": "npm:^7.27.1" + "@rolldown/pluginutils": "npm:1.0.0-beta.27" "@types/babel__core": "npm:^7.20.5" - react-refresh: "npm:^0.14.2" + react-refresh: "npm:^0.17.0" peerDependencies: - vite: ^4.2.0 || ^5.0.0 - checksum: 10/a9d1eb30c968bf719a3277067211493746579aee14a7af8c0edb2cde38e8e5bbd461e62a41c3590e2c6eb04a047114eb3e97dcd591967625fbbc7aead8dfaf90 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + checksum: 10/619a5d650ce0e8e2f37dae369b803990c6647e81ec983a00e44a734b3feeefd5a32c20fbee56d496fbc239cad6b949797dddf7c6d9f23c48100c5b2b5dc41e1f languageName: node linkType: hard @@ -5969,6 +5977,7 @@ __metadata: "@siteimprove/alfa-test": "npm:^0.108.1" "@siteimprove/alfa-test-utils": "npm:^0.80.5" puppeteer: "npm:^24.0.0" + vitest: "npm:^4.0.15" languageName: unknown linkType: soft @@ -12312,10 +12321,10 @@ __metadata: languageName: node linkType: hard -"react-refresh@npm:^0.14.2": - version: 0.14.2 - resolution: "react-refresh@npm:0.14.2" - checksum: 10/512abf97271ab8623486061be04b608c39d932e3709f9af1720b41573415fa4993d0009fa5138b6705b60a98f4102f744d4e26c952b14f41a0e455521c6be4cc +"react-refresh@npm:^0.17.0": + version: 0.17.0 + resolution: "react-refresh@npm:0.17.0" + checksum: 10/5e94f07d43bb1cfdc9b0c6e0c8c73e754005489950dcff1edb53aa8451d1d69a47b740b195c7c80fb4eb511c56a3585dc55eddd83f0097fb5e015116a1460467 languageName: node linkType: hard @@ -14017,7 +14026,6 @@ __metadata: "@siteimprove/alfa-rules": "npm:^0.108.1" "@types/jest": "npm:^29.5.1" "@types/react": "npm:^18.3.5" - "@types/react-dom": "npm:^18.3.0" common: "workspace:^" jest: "npm:^29.5.0" languageName: unknown From cfe9d194f72ac1280f051770d7de9a670ebd0d80 Mon Sep 17 00:00:00 2001 From: Jean-Yves Moyen <jym@siteimprove.com> Date: Tue, 9 Dec 2025 14:29:40 +0100 Subject: [PATCH 9/9] Clean up --- .github/workflows/puppeteer.yml | 43 --------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 .github/workflows/puppeteer.yml diff --git a/.github/workflows/puppeteer.yml b/.github/workflows/puppeteer.yml deleted file mode 100644 index da798124..00000000 --- a/.github/workflows/puppeteer.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Puppeteer tests - -# We've experienced quite a lot of instability with the puppeteer setup, notably -# the fact that it works locally but not in the Github action. Thus, we've removed -# it from the main integrate workflow, which in turns means we do not have a nice -# way to try and fix it. - -# This workflow only runs the puppeteer tests, and MUST NOT be required as a branch -# protection. It will nonetheless let us monitor the status of it and make it easier -# for us to fix the problems once we get to it. - -on: - push: - branches: - - main - pull_request: - branches: - - "*" -jobs: - build: - name: Build (puppeteer) - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [22, 24] - steps: - - uses: actions/checkout@v5 - - uses: actions/setup-node@v6 - with: - node-version: ${{ matrix.node-version }} - - name: Disable AppArmor on ubuntu -# Security on Ubuntu ⩾ 23 causes problem with Chrome, this is copied from -# https://github.com/puppeteer/puppeteer/blob/main/.github/workflows/ci.yml -# where they probably know what they do. -# if: ${{ matrix.os == 'ubuntu-latest' }} - run: echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns - - uses: actions/cache@v4 - with: - path: .yarn/cache - key: yarn-${{ hashFiles('yarn.lock') }} - - run: yarn install --immutable - - run: yarn build - - run: yarn workspace end-to-end-testing-puppeteer test