From 94dd9656814df165ede9f069bb125e19f4c17cbf Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 16:17:29 +0400 Subject: [PATCH 01/21] fix(a11y): update role attributes for tab panels and improve workflow actions --- .github/workflows/release.yml | 32 +++++++++---------- .github/workflows/test.yml | 13 ++++++-- .../code-snippet/code-snippet.component.html | 4 +-- 3 files changed, 29 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 19b11139..3b6e750e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,20 +36,20 @@ jobs: runs-on: ubuntu-latest needs: [build-staging-image] steps: - - uses: passeidireto/trigger-external-workflow-action@main - env: - PAYLOAD_SERVICE: "webcomponents" - with: - repository: docaxess/pdfa11y-k8s-webservices - event: deploy_staging - github_pat: ${{ secrets.K8S_WEBSERVICES_PAT }} + - uses: passeidireto/trigger-external-workflow-action@main + env: + PAYLOAD_SERVICE: "webcomponents" + with: + repository: docaxess/pdfa11y-k8s-webservices + event: deploy_staging + github_pat: ${{ secrets.K8S_WEBSERVICES_PAT }} - - uses: slackapi/slack-github-action@v1.26.0 - with: - channel-id: 'C0779L6QQT1' #'saas-deployment' - payload: | - { - "text": ":rocket: webcomponents.ipedis.com has been released on staging ! :tada: ( ${{ github.ref_name }} )" - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.DEPLOYMENT_SLACK_BOT }} \ No newline at end of file + - uses: slackapi/slack-github-action@v2.1.1 + with: + webhook-type: webhook-trigger + #'saas-deployment' + webhook: ${{ secrets.DEPLOYMENT_SLACK_BOT }} + payload: | + { + "text": ":rocket: webcomponents.ipedis.com has been released on staging ! :tada: ( ${{ github.ref_name }} )" + } diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c5cc4c8e..fdc28ce7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,9 +11,9 @@ jobs: matrix: node-version: [22.x] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Use Node ${{ matrix.node-version }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: ${{ matrix.node-version }} cache: 'npm' @@ -32,3 +32,12 @@ jobs: - name: e2e all packages run: npm run e2e + + axe-linter: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dequelabs/axe-linter-action@v1 + with: + api_key: ${{ secrets.AXE_LINTER_API_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/apps/demo/src/app/features/code-snippet/code-snippet.component.html b/apps/demo/src/app/features/code-snippet/code-snippet.component.html index 7b468937..2e7b2294 100644 --- a/apps/demo/src/app/features/code-snippet/code-snippet.component.html +++ b/apps/demo/src/app/features/code-snippet/code-snippet.component.html @@ -66,7 +66,7 @@
@@ -74,7 +74,7 @@
From bafd5cbd4ca38debb6d488dcd3bb7086575320ad Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 19:17:13 +0400 Subject: [PATCH 02/21] feat(e2e): add Playwright configuration and accessibility tests for demo app --- .github/workflows/test.yml | 8 +- .gitignore | 1 + apps/demo/e2e/README.md | 55 +++ apps/demo/e2e/accessibility.spec.ts | 106 ++++++ apps/demo/e2e/axe.md | 71 ++++ apps/demo/e2e/demo-basic.spec.ts | 61 +++ apps/demo/e2e/home.spec.ts | 28 ++ apps/demo/playwright.config.manual.ts | 33 ++ apps/demo/playwright.config.ts | 31 ++ apps/demo/project.json | 7 + package-lock.json | 512 ++++++++++++++++++++++---- package.json | 17 +- packages/accordion/package.e2e.json | 16 + packages/pagination/package.e2e.json | 16 + packages/search-bar/package.e2e.json | 16 + playwright-report/index.html | 68 ++++ test-results/.last-run.json | 4 + 17 files changed, 976 insertions(+), 74 deletions(-) create mode 100644 apps/demo/e2e/README.md create mode 100644 apps/demo/e2e/accessibility.spec.ts create mode 100644 apps/demo/e2e/axe.md create mode 100644 apps/demo/e2e/demo-basic.spec.ts create mode 100644 apps/demo/e2e/home.spec.ts create mode 100644 apps/demo/playwright.config.manual.ts create mode 100644 apps/demo/playwright.config.ts create mode 100644 packages/accordion/package.e2e.json create mode 100644 packages/pagination/package.e2e.json create mode 100644 packages/search-bar/package.e2e.json create mode 100644 playwright-report/index.html create mode 100644 test-results/.last-run.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fdc28ce7..047b46c3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,9 +30,15 @@ jobs: - name: Test all packages run: npm run test - - name: e2e all packages + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + + - name: Demo e2e tests run: npm run e2e + - name: Demo Axe tests + run: npm run e2e:axe + axe-linter: runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index f770acfe..0d63be66 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ Thumbs.db packages/*/.stencil .angular +.env diff --git a/apps/demo/e2e/README.md b/apps/demo/e2e/README.md new file mode 100644 index 00000000..415e73b3 --- /dev/null +++ b/apps/demo/e2e/README.md @@ -0,0 +1,55 @@ +# Demo App E2E Tests - Minimal Setup + +Simple, reliable e2e tests for the demo application. + +## Test Files + +- `home.spec.ts` - Basic home page tests +- `demo-basic.spec.ts` - Navigation tests for main component pages + +## Running Tests + +### Local Development +```bash +# Run demo e2e tests +npm run e2e:demo + +# Manual run (if server already running) +npm run demo:e2e:manual + +# Build and test (full local CI simulation) +npm run ci:demo +``` + +### CI Pipeline +```bash +# Basic CI (no e2e) +npm run ci:basic + +# Full CI with e2e +npm run build && npm run e2e:demo +``` + +## Configuration + +- **Browser**: Chromium only (for speed and reliability) +- **Auto-server**: Starts demo app automatically on port 4201 +- **Timeout**: 5s per test +- **Parallelization**: All tests run in parallel + +## Test Strategy + +**Minimal and Focused:** +- ✅ Page loads successfully +- ✅ Basic navigation works +- ✅ Components render on their pages +- ✅ No complex interactions (to avoid flakiness) + +**What's NOT tested:** +- ❌ Complex component interactions +- ❌ Form submissions +- ❌ Animation states +- ❌ Mobile menu toggles +- ❌ Tooltips/dropdowns + +This keeps tests fast, reliable, and focused on critical functionality. \ No newline at end of file diff --git a/apps/demo/e2e/accessibility.spec.ts b/apps/demo/e2e/accessibility.spec.ts new file mode 100644 index 00000000..29d698c1 --- /dev/null +++ b/apps/demo/e2e/accessibility.spec.ts @@ -0,0 +1,106 @@ +import { BrowserContext, chromium, test } from '@playwright/test'; +import { + wrapPlaywrightPage, + playwrightConfig, + PlaywrightController +} from '@axe-core/watcher'; +import * as dotenv from 'dotenv'; + +// Load environment variables +dotenv.config(); + +const API_KEY = process.env.AXE_DEVELOPER_HUB_API_KEY; + +if (!API_KEY) { + console.warn('AXE_DEVELOPER_HUB_API_KEY not found in environment variables'); +} + +test.describe('Accessibility Tests', () => { + let controller: PlaywrightController; + + test.beforeEach(async ({ page }) => { + const browserContext: BrowserContext = await chromium.launchPersistentContext( + '', + playwrightConfig({ + axe: { + apiKey: API_KEY, + timeout: { + flush: 10000 + } + }, + headless: false, + args: ['--headless=new'] + })); + const p = await browserContext.newPage(); + const controller = new PlaywrightController(p); + + // Wrap the page for axe monitoring + wrapPlaywrightPage(p, controller); + }); + + test.afterEach(async () => { + // Flush test results to axe Developer Hub + if (controller) { + try { + await controller.flush(); + } catch (error) { + console.warn('Failed to flush accessibility results:', error); + } + } + }); + + test('should pass accessibility audit on home page', async ({ page }) => { + await page.goto('/'); + await page.waitForLoadState('networkidle'); + + // The axe-watcher automatically scans the page for accessibility issues + // We just need to interact with the page normally + + // Wait a bit to ensure all content is loaded + await page.waitForTimeout(2000); + }); + + test('should pass accessibility audit on accordion page', async ({ page }) => { + await page.goto('/accordion'); + await page.waitForLoadState('networkidle'); + + // Check that the page has loaded + await page.locator('h2:has-text("Accordion")').first().waitFor(); + + // Wait for component to be fully rendered + await page.waitForTimeout(2000); + }); + + test('should pass accessibility audit on alert page', async ({ page }) => { + await page.goto('/alert'); + await page.waitForLoadState('networkidle'); + + // Check that the page has loaded + await page.locator('h2:has-text("Alert")').first().waitFor(); + + // Wait for component to be fully rendered + await page.waitForTimeout(2000); + }); + + test('should pass accessibility audit on table page', async ({ page }) => { + await page.goto('/table'); + await page.waitForLoadState('networkidle'); + + // Check that the page has loaded + await page.locator('h2:has-text("Table")').first().waitFor(); + + // Wait for component to be fully rendered + await page.waitForTimeout(2000); + }); + + test('should pass accessibility audit on form components', async ({ page }) => { + await page.goto('/checkbox'); + await page.waitForLoadState('networkidle'); + + // Check that the page has loaded + await page.locator('h1, h2').first().waitFor(); + + // Wait for component to be fully rendered + await page.waitForTimeout(2000); + }); +}); diff --git a/apps/demo/e2e/axe.md b/apps/demo/e2e/axe.md new file mode 100644 index 00000000..4421aba6 --- /dev/null +++ b/apps/demo/e2e/axe.md @@ -0,0 +1,71 @@ +In the root level of your testing folder, install the @axe-core/watcher package and all of its dependencies using npm or your preferred package manager (for example, yarn or pnpm). +``` +npm install --save-dev @axe-core/watcher +``` +In your test file or files, import the playwrightConfig() function, the wrapPlaywright() function, and the PlaywrightController class from @axe-core/watcher: + +``` +import { + wrapPlaywrightPage, + playwrightConfig, + PlaywrightController +} from '@axe-core/watcher'; +``` +In your test setup code (typically in a before or beforeAll block), wrap any existing code for creating a browserContext instance with a call to playwrightConfig() while providing your API key: + +``` +import { chromium, BrowserContext } from 'playwright'; +import { playwrightConfig } from '@axe-core/watcher'; + +const API_KEY = process.env.AXE_DEVELOPER_HUB + +const browserContext: BrowserContext = await chromium.launchPersistentContext( + /** + * We set userDataDir to an empty string which saves + * browser data to a temporary directory + * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context + */ + '', + playwrightConfig({ + axe: { + apiKey: API_KEY + }, + /** + * We support both headless and headed mode with Chrome. + * + * For headless mode: + * - Use '--headless=chrome' for browsers v94-108. + * - Use '--headless=new' for browsers v109+. + * + * For headed mode: + * - Remove the '--headless' flag. + * + * @see https://playwright.dev/docs/chrome-extensions#headless-mode + */ + headless: false, + args: ['--headless=new'] + }) +); +``` + + +Once you have a page instance, create an instance of the PlaywrightController class and wrap your browserContext: + +``` +// Create a page instance, using your browser context. +let page = await browserContext.newPage(); + +// Initialize the PlaywrightController by passing in the Playwright page. +const controller = new PlaywrightController(page); + +// Use the new wrapped Playwright page instance. +page = wrapPlaywrightPage(page, controller); +``` + +Finally, ensure all test results from axe Watcher are flushed out. To do this, add the following block of code to your test teardown code (typically in an afterEach block): + +``` +afterEach(async () => { +await controller.flush() +}) +``` diff --git a/apps/demo/e2e/demo-basic.spec.ts b/apps/demo/e2e/demo-basic.spec.ts new file mode 100644 index 00000000..a18fcf43 --- /dev/null +++ b/apps/demo/e2e/demo-basic.spec.ts @@ -0,0 +1,61 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Demo App - Basic Tests', () => { + test('should load the home page', async ({ page }) => { + await page.goto('/'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that the page has loaded (any heading) + await expect(page.locator('h1, h2').first()).toBeVisible(); + }); + + test('should navigate to accordion page', async ({ page }) => { + await page.goto('/accordion'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that we're on accordion page + await expect(page.locator('h2:has-text("Accordion")').first()).toBeVisible(); + + // Check that accordion component exists + const accordion = page.locator('ip-accordion').first(); + if (await accordion.count() > 0) { + await expect(accordion).toBeVisible(); + } + }); + + test('should navigate to alert page', async ({ page }) => { + await page.goto('/alert'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that we're on alert page + await expect(page.locator('h2:has-text("Alert")').first()).toBeVisible(); + + // Check that alert component exists + const alert = page.locator('ip-alert').first(); + if (await alert.count() > 0) { + await expect(alert).toBeVisible(); + } + }); + + test('should navigate to table page', async ({ page }) => { + await page.goto('/table'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that we're on table page + await expect(page.locator('h2:has-text("Table")').first()).toBeVisible(); + + // Check that table component exists + const table = page.locator('ip-table').first(); + if (await table.count() > 0) { + await expect(table).toBeVisible(); + } + }); +}); \ No newline at end of file diff --git a/apps/demo/e2e/home.spec.ts b/apps/demo/e2e/home.spec.ts new file mode 100644 index 00000000..623cca35 --- /dev/null +++ b/apps/demo/e2e/home.spec.ts @@ -0,0 +1,28 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Home Page', () => { + test('should load the home page', async ({ page }) => { + await page.goto('/'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that the page title is correct (it's "Accueil" in French) + await expect(page).toHaveTitle(/Accueil|Home|Ipedis/); + + // Check that any heading is visible + await expect(page.locator('h1, h2').first()).toBeVisible(); + }); + + test('should have navigation links', async ({ page }) => { + await page.goto('/'); + + // Wait for page to load + await page.waitForLoadState('networkidle'); + + // Check that there are some navigation links + const links = page.locator('a[href]'); + const linkCount = await links.count(); + expect(linkCount).toBeGreaterThan(0); + }); +}); \ No newline at end of file diff --git a/apps/demo/playwright.config.manual.ts b/apps/demo/playwright.config.manual.ts new file mode 100644 index 00000000..b735d750 --- /dev/null +++ b/apps/demo/playwright.config.manual.ts @@ -0,0 +1,33 @@ +import { defineConfig, devices } from '@playwright/test'; + +// Alternative config without automatic server startup +// Use this if you want to manually start the server first +export default defineConfig({ + testDir: './e2e', + fullyParallel: true, + forbidOnly: !!process.env['CI'], + retries: process.env['CI'] ? 2 : 0, + workers: process.env['CI'] ? 1 : undefined, + reporter: 'html', + use: { + baseURL: 'http://localhost:4200', + trace: 'on-first-retry', + }, + + projects: [ + { + name: 'chromium', + use: {}, + }, + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + ], + + // No webServer - expects you to start the server manually +}); \ No newline at end of file diff --git a/apps/demo/playwright.config.ts b/apps/demo/playwright.config.ts new file mode 100644 index 00000000..09da4441 --- /dev/null +++ b/apps/demo/playwright.config.ts @@ -0,0 +1,31 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + fullyParallel: true, + forbidOnly: !!process.env['CI'], + retries: process.env['CI'] ? 2 : 0, + workers: process.env['CI'] ? 1 : undefined, + reporter: 'html', + use: { + baseURL: 'http://localhost:4201', + trace: 'on-first-retry', + }, + timeout: 45000, + + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + } + ], + + webServer: { + command: 'npx nx serve demo --port 4201 --host localhost', + url: 'http://localhost:4201', + reuseExistingServer: !process.env['CI'], + timeout: 120 * 1000, + stdout: 'pipe', + stderr: 'pipe', + }, +}); diff --git a/apps/demo/project.json b/apps/demo/project.json index e17782b6..8c23411d 100644 --- a/apps/demo/project.json +++ b/apps/demo/project.json @@ -89,6 +89,13 @@ "options": { "jestConfig": "apps/demo/jest.config.ts" } + }, + "e2e": { + "executor": "@nx/playwright:playwright", + "outputs": ["{workspaceRoot}/dist/.playwright"], + "options": { + "config": "apps/demo/playwright.config.ts" + } } } } diff --git a/package-lock.json b/package-lock.json index 478554cc..707ec61b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "@angular/cli": "^18.1.3", "@angular/compiler-cli": "18.1.1", "@angular/language-service": "18.1.1", + "@axe-core/watcher": "^3.23.0", "@nrwl/angular": "^19.5.6", "@nrwl/workspace": "^19.5.6", "@nx/angular": "19.5.2", @@ -68,6 +69,7 @@ "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.17.0", "@typescript-eslint/utils": "7.17.0", + "dotenv": "^17.2.2", "eslint": "~8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.6.0", @@ -84,6 +86,9 @@ "ts-node": "10.9.1", "typescript": "5.5.4" }, + "engines": { + "node": "^22.0.0" + }, "optionalDependencies": { "@nx/nx-darwin-arm64": "19.4.2", "@nx/nx-darwin-x64": "19.4.2", @@ -1706,6 +1711,41 @@ "@angular/core": "^18.0.0" } }, + "node_modules/@axe-core/watcher": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@axe-core/watcher/-/watcher-3.23.0.tgz", + "integrity": "sha512-DyCsqwbB/YuzEkYKYwSvCGeFKghjBDWM0LJ8R0QDsrtJU9OKTRvzIcl2og9fMPafPxMysSMOyYXTqhVSOpep9A==", + "dev": true, + "license": "UNLICENSED", + "dependencies": { + "debug": "^4.3.5", + "eventemitter3": "^5.0.1", + "node-fetch": "^2.6.7", + "sync-request": "^6.1.0", + "uuid": "^11.0.3" + } + }, + "node_modules/@axe-core/watcher/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@axe-core/watcher/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -5082,6 +5122,10 @@ "resolved": "packages/login", "link": true }, + "node_modules/@ipedis/menu": { + "resolved": "packages/menu", + "link": true + }, "node_modules/@ipedis/modal": { "resolved": "packages/modal", "link": true @@ -5098,6 +5142,14 @@ "resolved": "packages/show-more", "link": true }, + "node_modules/@ipedis/slider": { + "resolved": "packages/slider", + "link": true + }, + "node_modules/@ipedis/stepper": { + "resolved": "packages/stepper", + "link": true + }, "node_modules/@ipedis/tab-panel": { "resolved": "packages/tab-panel", "link": true @@ -7627,6 +7679,19 @@ "node": ">=8" } }, + "node_modules/@nrwl/angular/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/@nrwl/angular/node_modules/express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -8669,6 +8734,19 @@ "node": ">=8" } }, + "node_modules/@nrwl/workspace/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/@nrwl/workspace/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11742,6 +11820,16 @@ "@types/node": "*" } }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -11818,6 +11906,16 @@ "@types/send": "*" } }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -12875,6 +12973,13 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", @@ -13830,6 +13935,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -13884,6 +14002,13 @@ ], "license": "CC-BY-4.0" }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -14382,6 +14507,55 @@ "dev": true, "license": "MIT" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", @@ -15533,9 +15707,9 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "17.2.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", + "integrity": "sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -15561,6 +15735,33 @@ "url": "https://dotenvx.com" } }, + "node_modules/dotenv-expand/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -15766,13 +15967,10 @@ "license": "MIT" }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -15793,6 +15991,34 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", @@ -17356,16 +17582,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -17384,6 +17615,29 @@ "node": ">=8.0.0" } }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -17563,12 +17817,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -17624,22 +17878,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -17880,6 +18122,22 @@ "node": ">= 0.6" } }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -17978,6 +18236,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "license": "MIT" + }, "node_modules/http-server": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", @@ -19011,24 +19286,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -19066,25 +19323,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jest-circus/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-circus/node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", @@ -21946,6 +22184,15 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -23129,6 +23376,19 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/nx/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -23672,6 +23932,12 @@ "node": ">=6" } }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -24766,6 +25032,16 @@ "node": ">=0.4.0" } }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -26678,6 +26954,31 @@ "dev": true, "license": "MIT" }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-port": "^3.1.0" + } + }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", @@ -27031,6 +27332,54 @@ "dev": true, "license": "MIT" }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", @@ -27579,6 +27928,13 @@ "dev": true, "license": "MIT" }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, "node_modules/typescript": { "version": "5.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", @@ -29290,6 +29646,10 @@ "name": "@ipedis/login", "version": "0.0.1" }, + "packages/menu": { + "name": "@ipedis/menu", + "version": "0.0.1" + }, "packages/modal": { "name": "@ipedis/modal", "version": "0.0.1" @@ -29310,6 +29670,14 @@ "name": "@ipedis/show-more", "version": "0.0.1" }, + "packages/slider": { + "name": "@ipedis/slider", + "version": "0.0.1" + }, + "packages/stepper": { + "name": "@ipedis/stepper", + "version": "0.0.1" + }, "packages/tab-panel": { "name": "@ipedis/tab-panel", "version": "0.0.1" diff --git a/package.json b/package.json index 994807f1..6ddd2dda 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,20 @@ "demo:ssr": "nx run demo:build:production && node dist/demo/server/server.mjs", "migrate": "nx migrate latest && nx migrate --run-migrations --if-exists", "run:ci": "npm run lint && npm run test && npm run e2e && npm run build", - "serve": "nx serve demo" + "serve": "nx serve demo", + "demo:e2e": "nx run demo:e2e", + "demo:e2e:manual": "playwright test --config apps/demo/playwright.config.manual.ts", + "e2e:demo": "nx run demo:e2e", + "e2e:axe": "playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts", + "ci:demo": "npm run build && npm run e2e:demo", + "ci:axe": "npm run build && npm run e2e:axe", + "ci:basic": "npm run lint && npm run test && npm run build" + }, + "engines": { + "node": "^22.0.0" + }, + "volta": { + "node": "22.20.0" }, "private": false, "devDependencies": { @@ -30,6 +43,7 @@ "@angular/cli": "^18.1.3", "@angular/compiler-cli": "18.1.1", "@angular/language-service": "18.1.1", + "@axe-core/watcher": "^3.23.0", "@nrwl/angular": "^19.5.6", "@nrwl/workspace": "^19.5.6", "@nx/angular": "19.5.2", @@ -55,6 +69,7 @@ "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.17.0", "@typescript-eslint/utils": "7.17.0", + "dotenv": "^17.2.2", "eslint": "~8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.6.0", diff --git a/packages/accordion/package.e2e.json b/packages/accordion/package.e2e.json new file mode 100644 index 00000000..e650916e --- /dev/null +++ b/packages/accordion/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "accordion", + "version": "1", + "main": "../../dist/packages/accordion/dist/index.cjs.js", + "module": "../../dist/packages/accordion/dist/index.js", + "es2015": "../../dist/packages/accordion/dist/esm/index.mjs", + "es2017": "../../dist/packages/accordion/dist/esm/index.mjs", + "types": "../../dist/packages/accordion/dist/types/index.d.ts", + "collection": "../../dist/packages/accordion/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/accordion/dist/collection/index.js", + "unpkg": "../../dist/packages/accordion/dist/accordion/accordion.js", + "files": [ + "../../dist/packages/accordion/dist/", + "../../dist/packages/accordion/loader/" + ] +} diff --git a/packages/pagination/package.e2e.json b/packages/pagination/package.e2e.json new file mode 100644 index 00000000..6496b14b --- /dev/null +++ b/packages/pagination/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "pagination", + "version": "1", + "main": "../../dist/packages/pagination/dist/index.cjs.js", + "module": "../../dist/packages/pagination/dist/index.js", + "es2015": "../../dist/packages/pagination/dist/esm/index.mjs", + "es2017": "../../dist/packages/pagination/dist/esm/index.mjs", + "types": "../../dist/packages/pagination/dist/types/index.d.ts", + "collection": "../../dist/packages/pagination/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/pagination/dist/collection/index.js", + "unpkg": "../../dist/packages/pagination/dist/pagination/pagination.js", + "files": [ + "../../dist/packages/pagination/dist/", + "../../dist/packages/pagination/loader/" + ] +} diff --git a/packages/search-bar/package.e2e.json b/packages/search-bar/package.e2e.json new file mode 100644 index 00000000..e41da11e --- /dev/null +++ b/packages/search-bar/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "search-bar", + "version": "1", + "main": "../../dist/packages/search-bar/dist/index.cjs.js", + "module": "../../dist/packages/search-bar/dist/index.js", + "es2015": "../../dist/packages/search-bar/dist/esm/index.mjs", + "es2017": "../../dist/packages/search-bar/dist/esm/index.mjs", + "types": "../../dist/packages/search-bar/dist/types/index.d.ts", + "collection": "../../dist/packages/search-bar/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/search-bar/dist/collection/index.js", + "unpkg": "../../dist/packages/search-bar/dist/search-bar/search-bar.js", + "files": [ + "../../dist/packages/search-bar/dist/", + "../../dist/packages/search-bar/loader/" + ] +} diff --git a/playwright-report/index.html b/playwright-report/index.html new file mode 100644 index 00000000..66328bed --- /dev/null +++ b/playwright-report/index.html @@ -0,0 +1,68 @@ + + + + + + + + + Playwright Test Report + + + + +
+ + + \ No newline at end of file diff --git a/test-results/.last-run.json b/test-results/.last-run.json new file mode 100644 index 00000000..cbcc1fba --- /dev/null +++ b/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file From 90b5b9679626896a911143f33f2650d27d65f300 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 19:22:34 +0400 Subject: [PATCH 03/21] chore: update Dockerfile and CI configuration to use npm ci for consistent dependency installation --- .github/workflows/test.yml | 2 +- .gitignore | 2 ++ apps/demo/docker/Dockerfile | 2 +- playwright-report/index.html | 68 ------------------------------------ 4 files changed, 4 insertions(+), 70 deletions(-) delete mode 100644 playwright-report/index.html diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 047b46c3..9c509a91 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: cache: 'npm' - name: Install dependencies - run: npm install + run: npm ci - name: Lint all packages run: npm run lint diff --git a/.gitignore b/.gitignore index 0d63be66..4599e665 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,5 @@ Thumbs.db packages/*/.stencil .angular .env + +playwright-report diff --git a/apps/demo/docker/Dockerfile b/apps/demo/docker/Dockerfile index 8f218291..626c0e6f 100644 --- a/apps/demo/docker/Dockerfile +++ b/apps/demo/docker/Dockerfile @@ -3,7 +3,7 @@ WORKDIR /app/src RUN apk add --no-cache --virtual .build-deps alpine-sdk python3 COPY package*.json ./ -RUN npm install +RUN npm ci COPY . ./ RUN npm run build diff --git a/playwright-report/index.html b/playwright-report/index.html deleted file mode 100644 index 66328bed..00000000 --- a/playwright-report/index.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - Playwright Test Report - - - - -
- - - \ No newline at end of file From 8de9e18c2d4b7527152542942105611bf84e5543 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 19:25:05 +0400 Subject: [PATCH 04/21] chore: update Dockerfile and CI configuration to use npm ci for consistent dependency installation --- package-lock.json | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/package-lock.json b/package-lock.json index 707ec61b..b950f0eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19286,6 +19286,24 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/jest-circus/node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -19323,6 +19341,25 @@ "dev": true, "license": "MIT" }, + "node_modules/jest-circus/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jest-circus/node_modules/dedent": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", From 27c3b8154c7502ef08f9086cbafdeb4f4de53186 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 19:39:57 +0400 Subject: [PATCH 05/21] chore: update Dockerfile and CI configuration to use npm ci for consistent dependency installation --- apps/demo/e2e/accessibility.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/demo/e2e/accessibility.spec.ts b/apps/demo/e2e/accessibility.spec.ts index 29d698c1..a8f87206 100644 --- a/apps/demo/e2e/accessibility.spec.ts +++ b/apps/demo/e2e/accessibility.spec.ts @@ -9,7 +9,7 @@ import * as dotenv from 'dotenv'; // Load environment variables dotenv.config(); -const API_KEY = process.env.AXE_DEVELOPER_HUB_API_KEY; +const API_KEY = process.env['AXE_DEVELOPER_HUB_API_KEY']; if (!API_KEY) { console.warn('AXE_DEVELOPER_HUB_API_KEY not found in environment variables'); From 86a91497753906a2c2ebb7295d7b3fdc715adae5 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 19:50:07 +0400 Subject: [PATCH 06/21] chore: update Dockerfile and CI configuration to use npm ci for consistent dependency installation --- apps/demo/e2e/accessibility.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/demo/e2e/accessibility.spec.ts b/apps/demo/e2e/accessibility.spec.ts index a8f87206..b9fd6897 100644 --- a/apps/demo/e2e/accessibility.spec.ts +++ b/apps/demo/e2e/accessibility.spec.ts @@ -23,7 +23,7 @@ test.describe('Accessibility Tests', () => { '', playwrightConfig({ axe: { - apiKey: API_KEY, + apiKey: API_KEY || '', timeout: { flush: 10000 } From 01a211cffb2686b5cc2f662c4e6604b8767734ee Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 20:00:44 +0400 Subject: [PATCH 07/21] chore: update Dockerfile and CI configuration to use npm ci for consistent dependency installation --- apps/demo/jest.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/demo/jest.config.ts b/apps/demo/jest.config.ts index e67a3957..a96cf143 100644 --- a/apps/demo/jest.config.ts +++ b/apps/demo/jest.config.ts @@ -4,6 +4,7 @@ export default { preset: '../../jest.preset.js', setupFilesAfterEnv: ['/src/test-setup.ts'], coverageDirectory: '../coverage/demo', + testPathIgnorePatterns: ['/e2e/'], transform: { '^.+\\.(ts|mjs|js|html)$': [ 'jest-preset-angular', From 1c2c2acea1a1bce1aa06a476c307d4131566f84f Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 20:17:27 +0400 Subject: [PATCH 08/21] chore: add testing configuration with browser arguments for sandboxing --- packages/accordion/stencil.config.ts | 4 ++++ packages/alert/stencil.config.ts | 4 ++++ packages/breadcrumb/package.e2e.json | 16 ++++++++++++++++ packages/breadcrumb/stencil.config.ts | 4 ++++ packages/checkbox/stencil.config.ts | 4 ++++ packages/dropdown/package.e2e.json | 16 ++++++++++++++++ packages/dropdown/stencil.config.ts | 4 ++++ packages/footnote/stencil.config.ts | 4 ++++ packages/login/stencil.config.ts | 4 ++++ packages/menu/stencil.config.ts | 4 ++++ packages/modal/stencil.config.ts | 4 ++++ packages/pagination/stencil.config.ts | 4 ++++ packages/radio/stencil.config.ts | 4 ++++ packages/search-bar/stencil.config.ts | 4 ++++ packages/show-more/package.e2e.json | 16 ++++++++++++++++ packages/show-more/stencil.config.ts | 4 ++++ packages/slider/stencil.config.ts | 4 ++++ packages/stepper/stencil.config.ts | 4 ++++ packages/tab-panel/stencil.config.ts | 4 ++++ packages/table/stencil.config.ts | 4 ++++ packages/toggle/stencil.config.ts | 4 ++++ packages/tooltip/stencil.config.ts | 4 ++++ test-results/.last-run.json | 4 ---- 23 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 packages/breadcrumb/package.e2e.json create mode 100644 packages/dropdown/package.e2e.json create mode 100644 packages/show-more/package.e2e.json delete mode 100644 test-results/.last-run.json diff --git a/packages/accordion/stencil.config.ts b/packages/accordion/stencil.config.ts index 70f58394..326b7bfc 100644 --- a/packages/accordion/stencil.config.ts +++ b/packages/accordion/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/alert/stencil.config.ts b/packages/alert/stencil.config.ts index 92ff760c..ac92e553 100644 --- a/packages/alert/stencil.config.ts +++ b/packages/alert/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/breadcrumb/package.e2e.json b/packages/breadcrumb/package.e2e.json new file mode 100644 index 00000000..a844b812 --- /dev/null +++ b/packages/breadcrumb/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "breadcrumb", + "version": "1", + "main": "../../dist/packages/breadcrumb/dist/index.cjs.js", + "module": "../../dist/packages/breadcrumb/dist/index.js", + "es2015": "../../dist/packages/breadcrumb/dist/esm/index.mjs", + "es2017": "../../dist/packages/breadcrumb/dist/esm/index.mjs", + "types": "../../dist/packages/breadcrumb/dist/types/index.d.ts", + "collection": "../../dist/packages/breadcrumb/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/breadcrumb/dist/collection/index.js", + "unpkg": "../../dist/packages/breadcrumb/dist/breadcrumb/breadcrumb.js", + "files": [ + "../../dist/packages/breadcrumb/dist/", + "../../dist/packages/breadcrumb/loader/" + ] +} \ No newline at end of file diff --git a/packages/breadcrumb/stencil.config.ts b/packages/breadcrumb/stencil.config.ts index 43e9e40d..0aba1f58 100644 --- a/packages/breadcrumb/stencil.config.ts +++ b/packages/breadcrumb/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/checkbox/stencil.config.ts b/packages/checkbox/stencil.config.ts index c93e1256..c8ad18e2 100644 --- a/packages/checkbox/stencil.config.ts +++ b/packages/checkbox/stencil.config.ts @@ -16,6 +16,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ angularOutputTarget({ componentCorePackage: 'checkbox', diff --git a/packages/dropdown/package.e2e.json b/packages/dropdown/package.e2e.json new file mode 100644 index 00000000..280a731b --- /dev/null +++ b/packages/dropdown/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "dropdown", + "version": "1", + "main": "../../dist/packages/dropdown/dist/index.cjs.js", + "module": "../../dist/packages/dropdown/dist/index.js", + "es2015": "../../dist/packages/dropdown/dist/esm/index.mjs", + "es2017": "../../dist/packages/dropdown/dist/esm/index.mjs", + "types": "../../dist/packages/dropdown/dist/types/index.d.ts", + "collection": "../../dist/packages/dropdown/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/dropdown/dist/collection/index.js", + "unpkg": "../../dist/packages/dropdown/dist/dropdown/dropdown.js", + "files": [ + "../../dist/packages/dropdown/dist/", + "../../dist/packages/dropdown/loader/" + ] +} \ No newline at end of file diff --git a/packages/dropdown/stencil.config.ts b/packages/dropdown/stencil.config.ts index 93398c7c..9a2c30f3 100644 --- a/packages/dropdown/stencil.config.ts +++ b/packages/dropdown/stencil.config.ts @@ -16,6 +16,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ angularOutputTarget({ componentCorePackage: 'dropdown', diff --git a/packages/footnote/stencil.config.ts b/packages/footnote/stencil.config.ts index 53c0e19f..fbdba9bc 100644 --- a/packages/footnote/stencil.config.ts +++ b/packages/footnote/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/login/stencil.config.ts b/packages/login/stencil.config.ts index e103c274..9f0c3ad8 100644 --- a/packages/login/stencil.config.ts +++ b/packages/login/stencil.config.ts @@ -15,6 +15,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ angularOutputTarget({ componentCorePackage: 'login', diff --git a/packages/menu/stencil.config.ts b/packages/menu/stencil.config.ts index 67fb53fe..331173f0 100644 --- a/packages/menu/stencil.config.ts +++ b/packages/menu/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/modal/stencil.config.ts b/packages/modal/stencil.config.ts index 2a623db0..10c2bdae 100644 --- a/packages/modal/stencil.config.ts +++ b/packages/modal/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/pagination/stencil.config.ts b/packages/pagination/stencil.config.ts index d157716f..0feaf583 100644 --- a/packages/pagination/stencil.config.ts +++ b/packages/pagination/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/radio/stencil.config.ts b/packages/radio/stencil.config.ts index 39a12f22..8b45459f 100644 --- a/packages/radio/stencil.config.ts +++ b/packages/radio/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/search-bar/stencil.config.ts b/packages/search-bar/stencil.config.ts index 5d7d4a91..c7e71b72 100644 --- a/packages/search-bar/stencil.config.ts +++ b/packages/search-bar/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/show-more/package.e2e.json b/packages/show-more/package.e2e.json new file mode 100644 index 00000000..9bb70b89 --- /dev/null +++ b/packages/show-more/package.e2e.json @@ -0,0 +1,16 @@ +{ + "name": "show-more", + "version": "1", + "main": "../../dist/packages/show-more/dist/index.cjs.js", + "module": "../../dist/packages/show-more/dist/index.js", + "es2015": "../../dist/packages/show-more/dist/esm/index.mjs", + "es2017": "../../dist/packages/show-more/dist/esm/index.mjs", + "types": "../../dist/packages/show-more/dist/types/index.d.ts", + "collection": "../../dist/packages/show-more/dist/collection/collection-manifest.json", + "collection:main": "../../dist/packages/show-more/dist/collection/index.js", + "unpkg": "../../dist/packages/show-more/dist/show-more/show-more.js", + "files": [ + "../../dist/packages/show-more/dist/", + "../../dist/packages/show-more/loader/" + ] +} \ No newline at end of file diff --git a/packages/show-more/stencil.config.ts b/packages/show-more/stencil.config.ts index f32f58a5..1c6608d6 100644 --- a/packages/show-more/stencil.config.ts +++ b/packages/show-more/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/slider/stencil.config.ts b/packages/slider/stencil.config.ts index 254facd6..7d84447e 100644 --- a/packages/slider/stencil.config.ts +++ b/packages/slider/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/stepper/stencil.config.ts b/packages/stepper/stencil.config.ts index 2a5d0324..11f75918 100644 --- a/packages/stepper/stencil.config.ts +++ b/packages/stepper/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/tab-panel/stencil.config.ts b/packages/tab-panel/stencil.config.ts index cfc999ab..e8710b61 100644 --- a/packages/tab-panel/stencil.config.ts +++ b/packages/tab-panel/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/table/stencil.config.ts b/packages/table/stencil.config.ts index 0bd24cc2..263de264 100644 --- a/packages/table/stencil.config.ts +++ b/packages/table/stencil.config.ts @@ -14,6 +14,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ { type: 'dist', diff --git a/packages/toggle/stencil.config.ts b/packages/toggle/stencil.config.ts index 3f66ac03..19255433 100644 --- a/packages/toggle/stencil.config.ts +++ b/packages/toggle/stencil.config.ts @@ -16,6 +16,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ angularOutputTarget({ componentCorePackage: 'toggle', diff --git a/packages/tooltip/stencil.config.ts b/packages/tooltip/stencil.config.ts index 45f18c56..4e4c3bf9 100644 --- a/packages/tooltip/stencil.config.ts +++ b/packages/tooltip/stencil.config.ts @@ -16,6 +16,10 @@ export const config: Config = { plugins: [sass()], + testing: { + browserArgs: ['--no-sandbox', '--disable-setuid-sandbox'], + }, + outputTargets: [ angularOutputTarget({ componentCorePackage: 'tooltip', diff --git a/test-results/.last-run.json b/test-results/.last-run.json deleted file mode 100644 index cbcc1fba..00000000 --- a/test-results/.last-run.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "status": "passed", - "failedTests": [] -} \ No newline at end of file From ad7720c83bead0a781eef25f416f5c2566924771 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 20:24:00 +0400 Subject: [PATCH 09/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 18 +++++++++--------- packages/breadcrumb/package.e2e.json | 2 +- packages/dropdown/package.e2e.json | 2 +- packages/show-more/package.e2e.json | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9c509a91..23ea8d8c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,15 +20,15 @@ jobs: - name: Install dependencies run: npm ci - - - name: Lint all packages - run: npm run lint - - - name: Build all packages - run: npm run build - - - name: Test all packages - run: npm run test +# +# - name: Lint all packages +# run: npm run lint +# +# - name: Build all packages +# run: npm run build +# +# - name: Test all packages +# run: npm run test - name: Install Playwright browsers run: npx playwright install --with-deps chromium diff --git a/packages/breadcrumb/package.e2e.json b/packages/breadcrumb/package.e2e.json index a844b812..f896b578 100644 --- a/packages/breadcrumb/package.e2e.json +++ b/packages/breadcrumb/package.e2e.json @@ -13,4 +13,4 @@ "../../dist/packages/breadcrumb/dist/", "../../dist/packages/breadcrumb/loader/" ] -} \ No newline at end of file +} diff --git a/packages/dropdown/package.e2e.json b/packages/dropdown/package.e2e.json index 280a731b..24770a3f 100644 --- a/packages/dropdown/package.e2e.json +++ b/packages/dropdown/package.e2e.json @@ -13,4 +13,4 @@ "../../dist/packages/dropdown/dist/", "../../dist/packages/dropdown/loader/" ] -} \ No newline at end of file +} diff --git a/packages/show-more/package.e2e.json b/packages/show-more/package.e2e.json index 9bb70b89..824fc584 100644 --- a/packages/show-more/package.e2e.json +++ b/packages/show-more/package.e2e.json @@ -13,4 +13,4 @@ "../../dist/packages/show-more/dist/", "../../dist/packages/show-more/loader/" ] -} \ No newline at end of file +} From 7f91b13d28029e777018691ef512e9ffac2ae5ca Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 20:25:59 +0400 Subject: [PATCH 10/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 23ea8d8c..9c509a91 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,15 +20,15 @@ jobs: - name: Install dependencies run: npm ci -# -# - name: Lint all packages -# run: npm run lint -# -# - name: Build all packages -# run: npm run build -# -# - name: Test all packages -# run: npm run test + + - name: Lint all packages + run: npm run lint + + - name: Build all packages + run: npm run build + + - name: Test all packages + run: npm run test - name: Install Playwright browsers run: npx playwright install --with-deps chromium From cdfa8104d0d5abde36d267b2f7a37106e732f9eb Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:02:13 +0400 Subject: [PATCH 11/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 91 ++++++++++++++++++++++++--- .gitignore | 1 + apps/demo/playwright.config.manual.ts | 12 +--- packages/accordion/package.e2e.json | 16 ----- packages/breadcrumb/package.e2e.json | 16 ----- packages/dropdown/package.e2e.json | 16 ----- packages/pagination/package.e2e.json | 16 ----- packages/search-bar/package.e2e.json | 16 ----- packages/show-more/package.e2e.json | 16 ----- 9 files changed, 85 insertions(+), 115 deletions(-) delete mode 100644 packages/accordion/package.e2e.json delete mode 100644 packages/breadcrumb/package.e2e.json delete mode 100644 packages/dropdown/package.e2e.json delete mode 100644 packages/pagination/package.e2e.json delete mode 100644 packages/search-bar/package.e2e.json delete mode 100644 packages/show-more/package.e2e.json diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9c509a91..5e5f7db8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,37 +5,110 @@ on: pull_request: jobs: - build-and-test: + setup: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [22.x] steps: - uses: actions/checkout@v5 - - name: Use Node ${{ matrix.node-version }} + - name: Setup Node.js uses: actions/setup-node@v5 with: - node-version: ${{ matrix.node-version }} + node-version: '22.x' cache: 'npm' - name: Install dependencies run: npm ci + - name: Build all packages + run: npm run build + + - name: Upload build artifacts + uses: actions/upload-artifact@v3 + with: + name: build-artifacts + path: | + dist/ + node_modules/ + retention-days: 1 + + lint: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: build-artifacts + - name: Lint all packages run: npm run lint - - name: Build all packages - run: npm run build + test: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: build-artifacts - name: Test all packages run: npm run test + e2e-tests: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: build-artifacts + - name: Install Playwright browsers - run: npx playwright install --with-deps chromium + run: npx playwright install --with-deps - name: Demo e2e tests run: npm run e2e + axe-tests: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: build-artifacts + + - name: Install Playwright browsers + run: npx playwright install-deps + - name: Demo Axe tests run: npm run e2e:axe diff --git a/.gitignore b/.gitignore index 4599e665..493b60b0 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,7 @@ Thumbs.db .nx/workspace-data packages/*/.stencil +packages/*/package.e2e.json .angular .env diff --git a/apps/demo/playwright.config.manual.ts b/apps/demo/playwright.config.manual.ts index b735d750..db6baa9e 100644 --- a/apps/demo/playwright.config.manual.ts +++ b/apps/demo/playwright.config.manual.ts @@ -17,17 +17,9 @@ export default defineConfig({ projects: [ { name: 'chromium', - use: {}, - }, - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, + use: {...devices['Desktop Chrome'] }, }, ], // No webServer - expects you to start the server manually -}); \ No newline at end of file +}); diff --git a/packages/accordion/package.e2e.json b/packages/accordion/package.e2e.json deleted file mode 100644 index e650916e..00000000 --- a/packages/accordion/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "accordion", - "version": "1", - "main": "../../dist/packages/accordion/dist/index.cjs.js", - "module": "../../dist/packages/accordion/dist/index.js", - "es2015": "../../dist/packages/accordion/dist/esm/index.mjs", - "es2017": "../../dist/packages/accordion/dist/esm/index.mjs", - "types": "../../dist/packages/accordion/dist/types/index.d.ts", - "collection": "../../dist/packages/accordion/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/accordion/dist/collection/index.js", - "unpkg": "../../dist/packages/accordion/dist/accordion/accordion.js", - "files": [ - "../../dist/packages/accordion/dist/", - "../../dist/packages/accordion/loader/" - ] -} diff --git a/packages/breadcrumb/package.e2e.json b/packages/breadcrumb/package.e2e.json deleted file mode 100644 index f896b578..00000000 --- a/packages/breadcrumb/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "breadcrumb", - "version": "1", - "main": "../../dist/packages/breadcrumb/dist/index.cjs.js", - "module": "../../dist/packages/breadcrumb/dist/index.js", - "es2015": "../../dist/packages/breadcrumb/dist/esm/index.mjs", - "es2017": "../../dist/packages/breadcrumb/dist/esm/index.mjs", - "types": "../../dist/packages/breadcrumb/dist/types/index.d.ts", - "collection": "../../dist/packages/breadcrumb/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/breadcrumb/dist/collection/index.js", - "unpkg": "../../dist/packages/breadcrumb/dist/breadcrumb/breadcrumb.js", - "files": [ - "../../dist/packages/breadcrumb/dist/", - "../../dist/packages/breadcrumb/loader/" - ] -} diff --git a/packages/dropdown/package.e2e.json b/packages/dropdown/package.e2e.json deleted file mode 100644 index 24770a3f..00000000 --- a/packages/dropdown/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "dropdown", - "version": "1", - "main": "../../dist/packages/dropdown/dist/index.cjs.js", - "module": "../../dist/packages/dropdown/dist/index.js", - "es2015": "../../dist/packages/dropdown/dist/esm/index.mjs", - "es2017": "../../dist/packages/dropdown/dist/esm/index.mjs", - "types": "../../dist/packages/dropdown/dist/types/index.d.ts", - "collection": "../../dist/packages/dropdown/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/dropdown/dist/collection/index.js", - "unpkg": "../../dist/packages/dropdown/dist/dropdown/dropdown.js", - "files": [ - "../../dist/packages/dropdown/dist/", - "../../dist/packages/dropdown/loader/" - ] -} diff --git a/packages/pagination/package.e2e.json b/packages/pagination/package.e2e.json deleted file mode 100644 index 6496b14b..00000000 --- a/packages/pagination/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "pagination", - "version": "1", - "main": "../../dist/packages/pagination/dist/index.cjs.js", - "module": "../../dist/packages/pagination/dist/index.js", - "es2015": "../../dist/packages/pagination/dist/esm/index.mjs", - "es2017": "../../dist/packages/pagination/dist/esm/index.mjs", - "types": "../../dist/packages/pagination/dist/types/index.d.ts", - "collection": "../../dist/packages/pagination/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/pagination/dist/collection/index.js", - "unpkg": "../../dist/packages/pagination/dist/pagination/pagination.js", - "files": [ - "../../dist/packages/pagination/dist/", - "../../dist/packages/pagination/loader/" - ] -} diff --git a/packages/search-bar/package.e2e.json b/packages/search-bar/package.e2e.json deleted file mode 100644 index e41da11e..00000000 --- a/packages/search-bar/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "search-bar", - "version": "1", - "main": "../../dist/packages/search-bar/dist/index.cjs.js", - "module": "../../dist/packages/search-bar/dist/index.js", - "es2015": "../../dist/packages/search-bar/dist/esm/index.mjs", - "es2017": "../../dist/packages/search-bar/dist/esm/index.mjs", - "types": "../../dist/packages/search-bar/dist/types/index.d.ts", - "collection": "../../dist/packages/search-bar/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/search-bar/dist/collection/index.js", - "unpkg": "../../dist/packages/search-bar/dist/search-bar/search-bar.js", - "files": [ - "../../dist/packages/search-bar/dist/", - "../../dist/packages/search-bar/loader/" - ] -} diff --git a/packages/show-more/package.e2e.json b/packages/show-more/package.e2e.json deleted file mode 100644 index 824fc584..00000000 --- a/packages/show-more/package.e2e.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "show-more", - "version": "1", - "main": "../../dist/packages/show-more/dist/index.cjs.js", - "module": "../../dist/packages/show-more/dist/index.js", - "es2015": "../../dist/packages/show-more/dist/esm/index.mjs", - "es2017": "../../dist/packages/show-more/dist/esm/index.mjs", - "types": "../../dist/packages/show-more/dist/types/index.d.ts", - "collection": "../../dist/packages/show-more/dist/collection/collection-manifest.json", - "collection:main": "../../dist/packages/show-more/dist/collection/index.js", - "unpkg": "../../dist/packages/show-more/dist/show-more/show-more.js", - "files": [ - "../../dist/packages/show-more/dist/", - "../../dist/packages/show-more/loader/" - ] -} From 04f946b0fe1ff396a0071468f26eefced9fef267 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:03:22 +0400 Subject: [PATCH 12/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e5f7db8..c43cd51b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,7 +22,7 @@ jobs: run: npm run build - name: Upload build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: build-artifacts path: | @@ -42,7 +42,7 @@ jobs: cache: 'npm' - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build-artifacts @@ -61,7 +61,7 @@ jobs: cache: 'npm' - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build-artifacts @@ -80,7 +80,7 @@ jobs: cache: 'npm' - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build-artifacts @@ -102,7 +102,7 @@ jobs: cache: 'npm' - name: Download build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: build-artifacts From 32c66a716dbf1feb054275abc227001a1c6494df Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:15:10 +0400 Subject: [PATCH 13/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c43cd51b..35e78e26 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,6 +46,9 @@ jobs: with: name: build-artifacts + - name: Fix node_modules binaries + run: npm ci --prefer-offline + - name: Lint all packages run: npm run lint @@ -65,6 +68,9 @@ jobs: with: name: build-artifacts + - name: Fix node_modules binaries + run: npm ci --prefer-offline + - name: Test all packages run: npm run test @@ -84,6 +90,9 @@ jobs: with: name: build-artifacts + - name: Fix node_modules binaries + run: npm ci --prefer-offline + - name: Install Playwright browsers run: npx playwright install --with-deps @@ -106,8 +115,11 @@ jobs: with: name: build-artifacts + - name: Fix node_modules binaries + run: npm ci --prefer-offline + - name: Install Playwright browsers - run: npx playwright install-deps + run: npx playwright install --with-deps - name: Demo Axe tests run: npm run e2e:axe From f73963ba9410e988b758b922deb7a7d8ff8208dd Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:36:35 +0400 Subject: [PATCH 14/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 25 +++++++------------------ package.json | 2 +- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 35e78e26..05dd0c3c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: run: npm ci - name: Build all packages - run: npm run build + run: npx nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && npx nx run demo:build:production - name: Upload build artifacts uses: actions/upload-artifact@v4 @@ -46,11 +46,8 @@ jobs: with: name: build-artifacts - - name: Fix node_modules binaries - run: npm ci --prefer-offline - - name: Lint all packages - run: npm run lint + run: npx nx run-many --target=lint --all --parallel test: runs-on: ubuntu-latest @@ -68,11 +65,8 @@ jobs: with: name: build-artifacts - - name: Fix node_modules binaries - run: npm ci --prefer-offline - - name: Test all packages - run: npm run test + run: npx nx run-many --target=test --all --parallel e2e-tests: runs-on: ubuntu-latest @@ -90,14 +84,11 @@ jobs: with: name: build-artifacts - - name: Fix node_modules binaries - run: npm ci --prefer-offline - - name: Install Playwright browsers run: npx playwright install --with-deps - name: Demo e2e tests - run: npm run e2e + run: npx nx run-many --target=e2e --all --parallel --exclude=demo axe-tests: runs-on: ubuntu-latest @@ -115,15 +106,13 @@ jobs: with: name: build-artifacts - - name: Fix node_modules binaries - run: npm ci --prefer-offline - - name: Install Playwright browsers run: npx playwright install --with-deps - name: Demo Axe tests - run: npm run e2e:axe - + run: npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts + env: + AXE_DEVELOPER_HUB_API_KEY: ${{ secrets.AXE_DEVELOPER_HUB_API_KEY }} axe-linter: runs-on: ubuntu-latest steps: diff --git a/package.json b/package.json index 6ddd2dda..9f4033c7 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint:update": "prettier *.json --write && nx run-many --target=lint --all --fix --parallel", "build": "nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && nx run demo:build:production", "lint": "nx run-many --target=lint --all --parallel", - "e2e": "nx run-many --target=e2e --all --parallel", + "e2e": "nx run-many --target=e2e --all --parallel --exclude=demo", "test": "nx run-many --target=test --all --parallel", "demo:ssr": "nx run demo:build:production && node dist/demo/server/server.mjs", "migrate": "nx migrate latest && nx migrate --run-migrations --if-exists", From 459666353fdcfe8f0c6864ac6dc47f9e576bce99 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:47:34 +0400 Subject: [PATCH 15/21] chore: add testing configuration with browser arguments for sandboxing --- .github/workflows/test.yml | 73 -------------------------------------- 1 file changed, 73 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 05dd0c3c..1fbd3295 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,91 +21,18 @@ jobs: - name: Build all packages run: npx nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && npx nx run demo:build:production - - name: Upload build artifacts - uses: actions/upload-artifact@v4 - with: - name: build-artifacts - path: | - dist/ - node_modules/ - retention-days: 1 - - lint: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Lint all packages run: npx nx run-many --target=lint --all --parallel - test: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Test all packages run: npx nx run-many --target=test --all --parallel - e2e-tests: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Install Playwright browsers run: npx playwright install --with-deps - name: Demo e2e tests run: npx nx run-many --target=e2e --all --parallel --exclude=demo - axe-tests: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Install Playwright browsers run: npx playwright install --with-deps From 22af482f18968102d848a247a6a5ef6ab8af56ca Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:50:48 +0400 Subject: [PATCH 16/21] Revert "chore: add testing configuration with browser arguments for sandboxing" This reverts commit 459666353fdcfe8f0c6864ac6dc47f9e576bce99. --- .github/workflows/test.yml | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1fbd3295..05dd0c3c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,18 +21,91 @@ jobs: - name: Build all packages run: npx nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && npx nx run demo:build:production + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: build-artifacts + path: | + dist/ + node_modules/ + retention-days: 1 + + lint: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: build-artifacts + - name: Lint all packages run: npx nx run-many --target=lint --all --parallel + test: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: build-artifacts + - name: Test all packages run: npx nx run-many --target=test --all --parallel + e2e-tests: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: build-artifacts + - name: Install Playwright browsers run: npx playwright install --with-deps - name: Demo e2e tests run: npx nx run-many --target=e2e --all --parallel --exclude=demo + axe-tests: + runs-on: ubuntu-latest + needs: setup + steps: + - uses: actions/checkout@v5 + - name: Setup Node.js + uses: actions/setup-node@v5 + with: + node-version: '22.x' + cache: 'npm' + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + name: build-artifacts + - name: Install Playwright browsers run: npx playwright install --with-deps From 546bc701bf7cc81e665c61e2f9bc324c3e364fdd Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 21:51:19 +0400 Subject: [PATCH 17/21] chore: include hidden files in artifact upload --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 05dd0c3c..e3367050 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,6 +24,7 @@ jobs: - name: Upload build artifacts uses: actions/upload-artifact@v4 with: + include-hidden-files: true name: build-artifacts path: | dist/ From 1a167df1f17e1eb8a192fa7751d8ed23a6362ba7 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 22:19:09 +0400 Subject: [PATCH 18/21] chore: update build scripts and improve test configuration --- .github/workflows/test.yml | 76 +---------------------------- .gitignore | 1 + apps/demo/e2e/accessibility.spec.ts | 2 +- package.json | 6 ++- 4 files changed, 7 insertions(+), 78 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e3367050..c7a2639d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,94 +19,20 @@ jobs: run: npm ci - name: Build all packages - run: npx nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && npx nx run demo:build:production - - - name: Upload build artifacts - uses: actions/upload-artifact@v4 - with: - include-hidden-files: true - name: build-artifacts - path: | - dist/ - node_modules/ - retention-days: 1 - - lint: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts + run: npm run build - name: Lint all packages run: npx nx run-many --target=lint --all --parallel - test: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Test all packages run: npx nx run-many --target=test --all --parallel - e2e-tests: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Install Playwright browsers run: npx playwright install --with-deps - name: Demo e2e tests run: npx nx run-many --target=e2e --all --parallel --exclude=demo - axe-tests: - runs-on: ubuntu-latest - needs: setup - steps: - - uses: actions/checkout@v5 - - name: Setup Node.js - uses: actions/setup-node@v5 - with: - node-version: '22.x' - cache: 'npm' - - - name: Download build artifacts - uses: actions/download-artifact@v4 - with: - name: build-artifacts - - name: Install Playwright browsers run: npx playwright install --with-deps diff --git a/.gitignore b/.gitignore index 493b60b0..41da22d8 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ packages/*/package.e2e.json .env playwright-report +test-results diff --git a/apps/demo/e2e/accessibility.spec.ts b/apps/demo/e2e/accessibility.spec.ts index b9fd6897..5e90b22d 100644 --- a/apps/demo/e2e/accessibility.spec.ts +++ b/apps/demo/e2e/accessibility.spec.ts @@ -32,7 +32,7 @@ test.describe('Accessibility Tests', () => { args: ['--headless=new'] })); const p = await browserContext.newPage(); - const controller = new PlaywrightController(p); + controller = new PlaywrightController(p); // Wrap the page for axe monitoring wrapPlaywrightPage(p, controller); diff --git a/package.json b/package.json index 9f4033c7..714a2848 100644 --- a/package.json +++ b/package.json @@ -10,14 +10,16 @@ "scripts": { "nx": "nx", "lint:update": "prettier *.json --write && nx run-many --target=lint --all --fix --parallel", - "build": "nx run-many --target=build --all --projects=tag:type:webcomponent --parallel && nx run demo:build:production", + "build:packages": "nx run-many --target=build --all --projects=tag:type:webcomponent --parallel", + "build:cleanup": "find dist/packages -name '*.entry.js.map' -delete 2>/dev/null || true", + "build": "npm run build:packages && npm run build:cleanup && nx run demo:build:production", "lint": "nx run-many --target=lint --all --parallel", "e2e": "nx run-many --target=e2e --all --parallel --exclude=demo", "test": "nx run-many --target=test --all --parallel", "demo:ssr": "nx run demo:build:production && node dist/demo/server/server.mjs", "migrate": "nx migrate latest && nx migrate --run-migrations --if-exists", "run:ci": "npm run lint && npm run test && npm run e2e && npm run build", - "serve": "nx serve demo", + "serve": "npm run build:packages && npm run build:cleanup && nx serve demo", "demo:e2e": "nx run demo:e2e", "demo:e2e:manual": "playwright test --config apps/demo/playwright.config.manual.ts", "e2e:demo": "nx run demo:e2e", From 3a4fa884afe744e743118c5d1e7a692d7d93f7ad Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 22:32:15 +0400 Subject: [PATCH 19/21] chore: update build scripts and improve test configuration --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c7a2639d..289b16b5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,7 +37,7 @@ jobs: run: npx playwright install --with-deps - name: Demo Axe tests - run: npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts + run: build:cleanup && npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts env: AXE_DEVELOPER_HUB_API_KEY: ${{ secrets.AXE_DEVELOPER_HUB_API_KEY }} axe-linter: From 85f86830f93b8053027d841abb3060748feb4cc4 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 22:43:50 +0400 Subject: [PATCH 20/21] chore: update build scripts and improve test configuration --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 289b16b5..358986ee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -37,7 +37,7 @@ jobs: run: npx playwright install --with-deps - name: Demo Axe tests - run: build:cleanup && npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts + run: npm run build:cleanup && npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts env: AXE_DEVELOPER_HUB_API_KEY: ${{ secrets.AXE_DEVELOPER_HUB_API_KEY }} axe-linter: From 2feb74e4722b0172bd13010acf9b83f47951dc05 Mon Sep 17 00:00:00 2001 From: Yanis Date: Sun, 28 Sep 2025 23:21:49 +0400 Subject: [PATCH 21/21] chore: update accessibility tests and Playwright configuration for improved browser handling --- .github/workflows/test.yml | 3 --- apps/demo/e2e/accessibility.spec.ts | 4 ++-- apps/demo/playwright.config.manual.ts | 2 +- apps/demo/playwright.config.ts | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 358986ee..3380b5c0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,9 +33,6 @@ jobs: - name: Demo e2e tests run: npx nx run-many --target=e2e --all --parallel --exclude=demo - - name: Install Playwright browsers - run: npx playwright install --with-deps - - name: Demo Axe tests run: npm run build:cleanup && npx playwright test apps/demo/e2e/accessibility.spec.ts --config apps/demo/playwright.config.ts env: diff --git a/apps/demo/e2e/accessibility.spec.ts b/apps/demo/e2e/accessibility.spec.ts index 5e90b22d..dd6a2718 100644 --- a/apps/demo/e2e/accessibility.spec.ts +++ b/apps/demo/e2e/accessibility.spec.ts @@ -18,7 +18,7 @@ if (!API_KEY) { test.describe('Accessibility Tests', () => { let controller: PlaywrightController; - test.beforeEach(async ({ page }) => { + test.beforeEach(async ({ page, browser }) => { const browserContext: BrowserContext = await chromium.launchPersistentContext( '', playwrightConfig({ @@ -28,7 +28,7 @@ test.describe('Accessibility Tests', () => { flush: 10000 } }, - headless: false, + channel: 'chromium', args: ['--headless=new'] })); const p = await browserContext.newPage(); diff --git a/apps/demo/playwright.config.manual.ts b/apps/demo/playwright.config.manual.ts index db6baa9e..9568923d 100644 --- a/apps/demo/playwright.config.manual.ts +++ b/apps/demo/playwright.config.manual.ts @@ -17,7 +17,7 @@ export default defineConfig({ projects: [ { name: 'chromium', - use: {...devices['Desktop Chrome'] }, + use: { ...devices['Desktop Chrome'], channel: 'chromium' }, }, ], diff --git a/apps/demo/playwright.config.ts b/apps/demo/playwright.config.ts index 09da4441..c7088f04 100644 --- a/apps/demo/playwright.config.ts +++ b/apps/demo/playwright.config.ts @@ -16,7 +16,7 @@ export default defineConfig({ projects: [ { name: 'chromium', - use: { ...devices['Desktop Chrome'] }, + use: { ...devices['Desktop Chrome'], channel: 'chromium' }, } ],