ci: Enable Playwright tests in PRs (#17238)

This commit is contained in:
shortstacked
2025-07-16 09:05:11 +01:00
committed by GitHub
parent 4bba13ccb8
commit e63ae55a0c
15 changed files with 436 additions and 267 deletions

View File

@@ -0,0 +1,42 @@
name: 'Blacksmith Node.js Build Setup'
description: 'Configures Node.js with pnpm, installs dependencies, enables Turborepo caching, (optional) sets up Docker layer caching, and builds the project or an optional command.'
inputs:
node-version:
description: 'Node.js version to use. Uses latest 22.x by default.'
required: false
default: '22.x'
enable-docker-cache:
description: 'Whether to set up Blacksmith Buildx for Docker layer caching.'
required: false
default: 'false'
type: boolean
build-command:
description: 'Command to execute for building the project or an optional command. Leave empty to skip build step.'
required: false
default: 'pnpm build'
type: string
runs:
using: 'composite'
steps:
- name: Setup Node.js
uses: useblacksmith/setup-node@65c6ca86fdeb0ab3d85e78f57e4f6a7e4780b391 # v5.0.4
with:
node-version: ${{ inputs.node-version }}
- name: Setup pnpm and Install Dependencies
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0
with:
run_install: true
- name: Configure Turborepo Cache
uses: useblacksmith/caching-for-turbo@bafb57e7ebdbf1185762286ec94d24648cd3938a # v1
- name: Setup Blacksmith Buildx for Docker Cache
if: ${{ inputs.enable-docker-cache == 'true' }}
uses: useblacksmith/build-push-action@574eb0ee0b59c6a687ace24192f0727dfb65d6d7 # v1.2.0
- name: Build Project
run: ${{ inputs.build-command }}
shell: bash

View File

@@ -40,81 +40,18 @@ on:
CYPRESS_RECORD_KEY: CYPRESS_RECORD_KEY:
description: 'Cypress record key.' description: 'Cypress record key.'
required: true required: true
outputs: CURRENTS_RECORD_KEY:
tests_passed: description: 'Currents record key.'
description: 'True if all E2E tests passed, otherwise false' required: true
value: ${{ jobs.check_testing_matrix.outputs.all_tests_passed }}
env:
NODE_OPTIONS: --max-old-space-size=4096
jobs: jobs:
# single job that generates and outputs a common id
prepare:
runs-on: ubuntu-latest
outputs:
uuid: ${{ steps.uuid.outputs.value }}
steps:
- name: Generate unique ID 💎
id: uuid
# take the current commit + timestamp together
# the typical value would be something like
# "sha-5d3fe...35d3-time-1620841214"
run: echo "value=sha-$GITHUB_SHA-time-$(date +"%s")" >> $GITHUB_OUTPUT
- name: Calculate Git Ref 🤔
id: calculate_ref
run: |
if [ -n "${{ inputs.pr_number }}" ]; then
echo "value=refs/pull/${{ inputs.pr_number }}/head" >> $GITHUB_OUTPUT
else
echo "value=${{ inputs.branch }}" >> $GITHUB_OUTPUT
fi
install:
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: ['prepare']
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ steps.calculate_ref.outputs.value }}
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0
- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.x
cache: 'pnpm'
- name: Cache build artifacts
id: cache-build-artifacts
uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5
with:
path: |
/home/runner/.cache/Cypress
/github/home/.pnpm-store
./packages/**/dist
key: ${{ github.sha }}-ui
- name: Install dependencies
if: steps.cache-build-artifacts.outputs.cache-hit != 'true'
run: pnpm install --frozen-lockfile
- name: Cypress build
if: steps.cache-build-artifacts.outputs.cache-hit != 'true'
uses: cypress-io/github-action@be1bab96b388bbd9ce3887e397d373c8557e15af # v6.9.2
with:
# Disable running of tests within install job
runTests: false
install: false
build: pnpm build
- name: Cypress install
if: steps.cache-build-artifacts.outputs.cache-hit != 'true'
working-directory: cypress
run: pnpm cypress:install
testing: testing:
runs-on: blacksmith-2vcpu-ubuntu-2204 runs-on: blacksmith-2vcpu-ubuntu-2204
needs: ['prepare', 'install'] outputs:
dashboardUrl: ${{ steps.cypress.outputs.dashboardUrl }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -123,31 +60,15 @@ jobs:
containers: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.containers || '[1]' ) }} containers: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.containers || '[1]' ) }}
steps: steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with: - name: Set up and build
ref: ${{ steps.calculate_ref.outputs.value }} uses: ./.github/actions/setup-nodejs-blacksmith
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.0.0 - name: Install Cypress
working-directory: cypress
- name: Setup Node.js run: pnpm cypress:install
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 22.x
cache: 'pnpm'
- name: Restore cached pnpm modules
id: cache-build-artifacts
uses: useblacksmith/cache@c5fe29eb0efdf1cf4186b9f7fcbbcbc0cf025662 # v5
with:
path: |
/home/runner/.cache/Cypress
/github/home/.pnpm-store
./packages/**/dist
key: ${{ github.sha }}-ui
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Cypress run - name: Cypress run
id: cypress
uses: cypress-io/github-action@be1bab96b388bbd9ce3887e397d373c8557e15af # v6.9.2 uses: cypress-io/github-action@be1bab96b388bbd9ce3887e397d373c8557e15af # v6.9.2
with: with:
working-directory: cypress working-directory: cypress
@@ -159,7 +80,7 @@ jobs:
parallel: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.parallel || false ) }} parallel: ${{ fromJSON( inputs.spec == 'e2e/*' && inputs.parallel || false ) }}
# We have to provide custom ci-build-id key to make sure that this workflow could be run multiple times # We have to provide custom ci-build-id key to make sure that this workflow could be run multiple times
# in the same parent workflow # in the same parent workflow
ci-build-id: ${{ needs.prepare.outputs.uuid }} ci-build-id: ${{ github.run_id }}-${{ github.run_attempt }}
spec: '${{ inputs.spec }}' spec: '${{ inputs.spec }}'
env: env:
NODE_OPTIONS: --dns-result-order=ipv4first NODE_OPTIONS: --dns-result-order=ipv4first
@@ -169,21 +90,49 @@ jobs:
COMMIT_INFO_MESSAGE: 🌳 ${{ inputs.branch }} 🤖 ${{ inputs.user }} 🗃️ ${{ inputs.spec }} COMMIT_INFO_MESSAGE: 🌳 ${{ inputs.branch }} 🤖 ${{ inputs.user }} 🗃️ ${{ inputs.spec }}
SHELL: /bin/sh SHELL: /bin/sh
# Check if all tests passed and set the output variable - name: Upload test results artifact
check_testing_matrix: if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: test-results-${{ matrix.containers }}
path: cypress/test-results-*.xml
upload-to-currents:
needs: testing
if: always()
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [testing]
outputs:
all_tests_passed: ${{ steps.all_tests_passed.outputs.result }}
steps: steps:
- name: Check all tests passed - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
id: all_tests_passed
- name: Download all test results
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
path: test-results
- name: Merge and upload to Currents
run: | run: |
success=true npm install -g @currents/cmd junit-report-merger
for status in ${{ needs.testing.result }}; do # Merge all XML files, so Currents can show a single view for Cypress
if [ $status != "success" ]; then jrm combined-results.xml "test-results/**/test-results-*.xml"
success=false
break - name: Upload merged XML as artifact
fi uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
done with:
echo "::set-output name=result::$success" name: merged-junit-results
path: combined-results.xml
- name: Convert and upload to Currents
run: |
currents convert \
--input-format=junit \
--input-file=combined-results.xml \
--output-dir=.currents \
--framework=node \
--framework-version=cypress-14.4.0
currents upload \
--project-id=I0yzoc \
--key=${{ secrets.CURRENTS_RECORD_KEY }} \
--ci-build-id=n8n-io/n8n-${{ github.run_id }}-${{ github.run_attempt }} \
--report-dir=.currents \
--tag=cypress

View File

@@ -24,56 +24,21 @@ jobs:
with: with:
pr_number: ${{ github.event.pull_request.number }} pr_number: ${{ github.event.pull_request.number }}
user: ${{ github.event.pull_request.user.login || 'PR User' }} user: ${{ github.event.pull_request.user.login || 'PR User' }}
secrets: secrets: inherit
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
run-playwright-tests:
name: Playwright
uses: ./.github/workflows/playwright-test-reusable.yml
needs: [eligibility_check]
if: needs.eligibility_check.outputs.should_run == 'true'
secrets: inherit
post-e2e-tests: post-e2e-tests:
name: E2E - Checks name: E2E - Checks
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [eligibility_check, run-e2e-tests] needs: [eligibility_check, run-e2e-tests, run-playwright-tests]
if: always() && needs.eligibility_check.result != 'skipped' if: always() && needs.eligibility_check.result != 'skipped'
steps: steps:
- name: Determine Outcome and Comment Message - name: Fail if tests failed
id: determine_outcome if: needs.run-e2e-tests.result == 'failure' || needs.run-playwright-tests.result == 'failure'
run: | run: exit 1
JOB_OUTCOME="success"
COMMENT_BODY=""
SHOULD_POST_COMMENT="false"
if [[ "${{ needs.eligibility_check.outputs.should_run }}" == "false" ]]; then
COMMENT_BODY=" E2E tests were not run for this PR based on the eligibility criteria."
SHOULD_POST_COMMENT="true"
JOB_OUTCOME="success"
elif [[ "${{ needs.run-e2e-tests.result }}" == "success" ]]; then
COMMENT_BODY=":white_check_mark: All Cypress E2E specs passed"
SHOULD_POST_COMMENT="true"
JOB_OUTCOME="success"
elif [[ "${{ needs.run-e2e-tests.result }}" == "failure" ]]; then
COMMENT_BODY=":warning: Some Cypress E2E specs are failing, please fix them before merging"
SHOULD_POST_COMMENT="true"
JOB_OUTCOME="failure"
else
COMMENT_BODY=" E2E tests were scheduled but did not complete as expected (Result: ${{ needs.run-e2e-tests.result }})."
SHOULD_POST_COMMENT="true"
JOB_OUTCOME="failure"
fi
echo "comment_body=$COMMENT_BODY" >> $GITHUB_OUTPUT
echo "should_post_comment=$SHOULD_POST_COMMENT" >> $GITHUB_OUTPUT
echo "job_outcome=$JOB_OUTCOME" >> $GITHUB_OUTPUT
- name: Create or Update PR Comment
if: steps.determine_outcome.outputs.should_post_comment == 'true' && needs.eligibility_check.outputs.should_run == 'true'
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043
with:
issue-number: ${{ github.event.pull_request.number }}
body: ${{ steps.determine_outcome.outputs.comment_body }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Finalize Job Status
run: |
if [[ "${{ steps.determine_outcome.outputs.job_outcome }}" == "failure" ]]; then
exit 1
else
exit 0
fi

View File

@@ -48,13 +48,17 @@ jobs:
branch: ${{ github.event.inputs.branch || 'master' }} branch: ${{ github.event.inputs.branch || 'master' }}
user: ${{ github.event.inputs.user || 'PR User' }} user: ${{ github.event.inputs.user || 'PR User' }}
spec: ${{ github.event.inputs.spec || 'e2e/*' }} spec: ${{ github.event.inputs.spec || 'e2e/*' }}
secrets: secrets: inherit
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
run-playwright-tests:
name: Playwright
uses: ./.github/workflows/playwright-test-reusable.yml
secrets: inherit
calls-success-url-notify: calls-success-url-notify:
name: Calls success URL and notifies name: Calls success URL and notifies
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [run-e2e-tests] needs: [run-e2e-tests, run-playwright-tests]
if: ${{ github.event.inputs.success-url != '' }} if: ${{ github.event.inputs.success-url != '' }}
steps: steps:
- name: Notify Slack on failure - name: Notify Slack on failure

View File

@@ -0,0 +1,13 @@
name: Run Playwright Tests (Docker Build)
# This workflow is used to run Playwright tests in a Docker container built from the current branch
on:
workflow_call:
workflow_dispatch:
jobs:
build-and-test:
uses: ./.github/workflows/playwright-test-reusable.yml
with:
test-mode: docker-build
secrets: inherit

View File

@@ -0,0 +1,37 @@
name: Run Playwright Tests (Docker Pull)
# This workflow is used to run Playwright tests in a Docker container pulled from the registry
on:
workflow_call:
inputs:
shards:
description: 'Shards for parallel execution'
required: false
default: '[1]'
type: string
image:
description: 'Image to use'
required: false
default: 'n8nio/n8n:nightly'
type: string
workflow_dispatch:
inputs:
shards:
description: 'Shards for parallel execution'
required: false
default: '[1]'
type: string
image:
description: 'Image to use'
required: false
default: 'n8nio/n8n:nightly'
type: string
jobs:
build-and-test:
uses: ./.github/workflows/playwright-test-reusable.yml
with:
test-mode: docker-pull
shards: ${{ inputs.shards }}
docker-image: ${{ inputs.image }}
secrets: inherit

View File

@@ -0,0 +1,84 @@
name: Playwright Tests - Reusable
on:
workflow_call:
inputs:
test-mode:
description: 'Test mode: local (pnpm start from local), docker-build, or docker-pull'
required: false
default: 'local'
type: string
shards:
description: 'Shards for parallel execution'
required: false
default: '[1]'
type: string
docker-image:
description: 'Docker image to use (for docker-pull mode)'
required: false
default: 'n8nio/n8n:nightly'
type: string
secrets:
CURRENTS_RECORD_KEY:
required: true
env:
PLAYWRIGHT_BROWSERS_PATH: packages/testing/playwright/ms-playwright-cache
NODE_OPTIONS: --max-old-space-size=4096
# Disable Ryuk to avoid issues with Docker since it needs privileged access, containers are cleaned on teardown anyway
TESTCONTAINERS_RYUK_DISABLED: true
jobs:
test:
runs-on: blacksmith-2vcpu-ubuntu-2204
strategy:
fail-fast: false
matrix:
shard: ${{ fromJSON(inputs.shards || '[1]') }}
name: Test (Shard ${{ matrix.shard }}/${{ strategy.job-total }})
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 1
- name: Setup Environment
uses: ./.github/actions/setup-nodejs-blacksmith
with:
build-command: ${{ inputs.test-mode == 'docker-build' && 'pnpm build:docker' || 'pnpm turbo build:playwright' }}
enable-docker-cache: ${{ inputs.test-mode != 'local' }}
- name: Install Browsers (Docker Build)
if: inputs.test-mode == 'docker-build'
run: pnpm turbo install-browsers:ci
- name: Start Local Server
if: inputs.test-mode == 'local'
env:
E2E_TESTS: true
run: |
pnpm start &
npx wait-on http://localhost:5678 --timeout 15000
- name: Run Tests (Local)
if: inputs.test-mode == 'local'
run: |
pnpm --filter=n8n-playwright test \
--shard=${{ matrix.shard }}/${{ strategy.job-total }} \
--workers=2
env:
N8N_BASE_URL: http://localhost:5678
RESET_E2E_DB: true
CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }}
- name: Run Tests (Docker)
if: inputs.test-mode != 'local'
run: |
pnpm --filter=n8n-playwright run test:standard \
--shard=${{ matrix.shard }}/${{ strategy.job-total }} \
--workers=2
env:
N8N_DOCKER_IMAGE: ${{ inputs.test-mode == 'docker-build' && 'n8nio/n8n:local' || inputs.docker-image }}
CURRENTS_RECORD_KEY: ${{ secrets.CURRENTS_RECORD_KEY }}

View File

@@ -31,4 +31,8 @@ module.exports = defineConfig({
return config; return config;
}, },
}, },
reporter: 'mocha-junit-reporter',
reporterOptions: {
mochaFile: 'test-results-[hash].xml',
},
}); });

View File

@@ -20,6 +20,7 @@
"@n8n/api-types": "workspace:*", "@n8n/api-types": "workspace:*",
"@types/lodash": "catalog:", "@types/lodash": "catalog:",
"eslint-plugin-cypress": "^4.3.0", "eslint-plugin-cypress": "^4.3.0",
"mocha-junit-reporter": "^2.2.1",
"n8n-workflow": "workspace:*" "n8n-workflow": "workspace:*"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,9 @@
import type { CurrentsConfig } from '@currents/playwright'; import type { CurrentsConfig } from '@currents/playwright';
export const config: CurrentsConfig = { const config: CurrentsConfig = {
recordKey: process.env.CURRENTS_RECORD_KEY ?? '', recordKey: process.env.CURRENTS_RECORD_KEY ?? '',
projectId: process.env.CURRENTS_PROJECT_ID ?? 'I0yzoc', projectId: process.env.CURRENTS_PROJECT_ID ?? 'I0yzoc',
}; };
// eslint-disable-next-line import-x/no-default-export
export default config;

View File

@@ -1,6 +1,18 @@
import { request } from '@playwright/test'; import { request } from '@playwright/test';
import { ApiHelpers } from './services/api-helper'; import { ApiHelpers } from './services/api-helper';
import { createN8NStack } from 'n8n-containers/n8n-test-container-creation';
async function pullImagesForCI() {
console.log(`🔄 Pulling images for ${process.env.N8N_DOCKER_IMAGE}...`);
const stack = await createN8NStack({
postgres: true,
});
console.log(`🔄 Images pulled for ${process.env.N8N_DOCKER_IMAGE}...`);
await stack.stop();
}
async function globalSetup() { async function globalSetup() {
console.log('🚀 Starting global setup...'); console.log('🚀 Starting global setup...');
@@ -9,6 +21,9 @@ async function globalSetup() {
const n8nBaseUrl = process.env.N8N_BASE_URL; const n8nBaseUrl = process.env.N8N_BASE_URL;
if (!n8nBaseUrl) { if (!n8nBaseUrl) {
console.log('⚠️ N8N_BASE_URL environment variable is not set, skipping database reset'); console.log('⚠️ N8N_BASE_URL environment variable is not set, skipping database reset');
if (process.env.CI) {
await pullImagesForCI();
}
return; return;
} }

View File

@@ -1,7 +1,10 @@
/* eslint-disable import-x/no-default-export */ /* eslint-disable import-x/no-default-export */
import { currentsReporter } from '@currents/playwright';
import type { Project } from '@playwright/test'; import type { Project } from '@playwright/test';
import { defineConfig } from '@playwright/test'; import { defineConfig } from '@playwright/test';
import currentsConfig from './currents.config';
/* /*
* Mode-based Test Configuration * Mode-based Test Configuration
* *
@@ -105,6 +108,7 @@ export default defineConfig({
['html', { open: 'never' }], ['html', { open: 'never' }],
['json', { outputFile: 'test-results.json' }], ['json', { outputFile: 'test-results.json' }],
['blob'], ['blob'],
currentsReporter(currentsConfig),
] ]
: [['html']], : [['html']],

255
pnpm-lock.yaml generated
View File

@@ -375,6 +375,9 @@ importers:
eslint-plugin-cypress: eslint-plugin-cypress:
specifier: ^4.3.0 specifier: ^4.3.0
version: 4.3.0(eslint@9.29.0(jiti@1.21.7)) version: 4.3.0(eslint@9.29.0(jiti@1.21.7))
mocha-junit-reporter:
specifier: ^2.2.1
version: 2.2.1(mocha@11.7.1)
n8n-workflow: n8n-workflow:
specifier: workspace:* specifier: workspace:*
version: link:../packages/workflow version: link:../packages/workflow
@@ -4328,12 +4331,6 @@ packages:
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@eslint-community/eslint-utils@4.4.0':
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/eslint-utils@4.7.0': '@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -6889,9 +6886,6 @@ packages:
'@types/eslint@9.6.1': '@types/eslint@9.6.1':
resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.8': '@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@@ -8228,6 +8222,9 @@ packages:
resolution: {integrity: sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==} resolution: {integrity: sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==}
engines: {'0': node} engines: {'0': node}
browser-stdout@1.3.1:
resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
browserslist-to-esbuild@2.1.1: browserslist-to-esbuild@2.1.1:
resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==}
engines: {node: '>=18'} engines: {node: '>=18'}
@@ -9097,6 +9094,10 @@ packages:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
decamelize@4.0.0:
resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
engines: {node: '>=10'}
decimal.js@10.4.3: decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
@@ -9199,6 +9200,10 @@ packages:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
diff@7.0.0:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
engines: {node: '>=0.3.1'}
dingbat-to-unicode@1.0.1: dingbat-to-unicode@1.0.1:
resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==}
@@ -9667,10 +9672,6 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
esquery@1.5.0:
resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
engines: {node: '>=0.10'}
esquery@1.6.0: esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'} engines: {node: '>=0.10'}
@@ -10475,10 +10476,6 @@ packages:
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
http-proxy-agent@7.0.0:
resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
engines: {node: '>= 14'}
http-proxy-agent@7.0.2: http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
@@ -10805,6 +10802,10 @@ packages:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
is-plain-obj@2.1.0:
resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
engines: {node: '>=8'}
is-plain-obj@4.1.0: is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -12098,8 +12099,10 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
mlly@1.7.1: mkdirp@3.0.1:
resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
engines: {node: '>=10'}
hasBin: true
mlly@1.7.4: mlly@1.7.4:
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
@@ -12133,6 +12136,16 @@ packages:
mobx@6.12.0: mobx@6.12.0:
resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==} resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==}
mocha-junit-reporter@2.2.1:
resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==}
peerDependencies:
mocha: '>=2.2.5'
mocha@11.7.1:
resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
module-details-from-path@1.0.3: module-details-from-path@1.0.3:
resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==}
@@ -12931,9 +12944,6 @@ packages:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
pkg-types@1.1.3:
resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==}
pkg-types@1.3.1: pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
@@ -14779,9 +14789,6 @@ packages:
uc.micro@2.1.0: uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
ufo@1.6.1: ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
@@ -15455,6 +15462,9 @@ packages:
worker-timers@7.1.8: worker-timers@7.1.8:
resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==}
workerpool@9.3.3:
resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==}
wrap-ansi@6.2.0: wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -15602,6 +15612,10 @@ packages:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'} engines: {node: '>=12'}
yargs-unparser@2.0.0:
resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
engines: {node: '>=10'}
yargs@16.2.0: yargs@16.2.0:
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -16591,7 +16605,7 @@ snapshots:
'@azure/abort-controller@1.1.0': '@azure/abort-controller@1.1.0':
dependencies: dependencies:
tslib: 2.6.2 tslib: 2.8.1
'@azure/abort-controller@2.0.0': '@azure/abort-controller@2.0.0':
dependencies: dependencies:
@@ -16611,7 +16625,7 @@ snapshots:
dependencies: dependencies:
'@azure/abort-controller': 2.1.2 '@azure/abort-controller': 2.1.2
'@azure/core-util': 1.12.0 '@azure/core-util': 1.12.0
tslib: 2.6.2 tslib: 2.8.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -16623,7 +16637,7 @@ snapshots:
'@azure/core-tracing': 1.0.1 '@azure/core-tracing': 1.0.1
'@azure/core-util': 1.7.0 '@azure/core-util': 1.7.0
'@azure/logger': 1.0.3 '@azure/logger': 1.0.3
tslib: 2.6.2 tslib: 2.8.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -16661,7 +16675,7 @@ snapshots:
'@azure/core-util': 1.12.0 '@azure/core-util': 1.12.0
'@azure/logger': 1.0.3 '@azure/logger': 1.0.3
'@typespec/ts-http-runtime': 0.2.2 '@typespec/ts-http-runtime': 0.2.2
tslib: 2.6.2 tslib: 2.8.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -16686,13 +16700,13 @@ snapshots:
'@azure/core-tracing@1.2.0': '@azure/core-tracing@1.2.0':
dependencies: dependencies:
tslib: 2.6.2 tslib: 2.8.1
'@azure/core-util@1.12.0': '@azure/core-util@1.12.0':
dependencies: dependencies:
'@azure/abort-controller': 2.1.2 '@azure/abort-controller': 2.1.2
'@typespec/ts-http-runtime': 0.2.2 '@typespec/ts-http-runtime': 0.2.2
tslib: 2.6.2 tslib: 2.8.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -16759,7 +16773,7 @@ snapshots:
'@azure/logger@1.0.3': '@azure/logger@1.0.3':
dependencies: dependencies:
tslib: 2.6.2 tslib: 2.8.1
'@azure/msal-browser@3.19.0': '@azure/msal-browser@3.19.0':
dependencies: dependencies:
@@ -16810,15 +16824,15 @@ snapshots:
'@babel/core@7.26.10': '@babel/core@7.26.10':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@babel/code-frame': 7.26.2 '@babel/code-frame': 7.27.1
'@babel/generator': 7.26.10 '@babel/generator': 7.26.10
'@babel/helper-compilation-targets': 7.26.5 '@babel/helper-compilation-targets': 7.27.2
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10)
'@babel/helpers': 7.26.10 '@babel/helpers': 7.26.10
'@babel/parser': 7.26.10 '@babel/parser': 7.27.5
'@babel/template': 7.26.9 '@babel/template': 7.26.9
'@babel/traverse': 7.26.10 '@babel/traverse': 7.26.10
'@babel/types': 7.26.10 '@babel/types': 7.27.6
convert-source-map: 2.0.0 convert-source-map: 2.0.0
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@8.1.1)
gensync: 1.0.0-beta.2 gensync: 1.0.0-beta.2
@@ -16851,7 +16865,7 @@ snapshots:
dependencies: dependencies:
'@babel/compat-data': 7.27.5 '@babel/compat-data': 7.27.5
'@babel/helper-validator-option': 7.27.1 '@babel/helper-validator-option': 7.27.1
browserslist: 4.24.4 browserslist: 4.25.0
lru-cache: 5.1.1 lru-cache: 5.1.1
semver: 7.7.2 semver: 7.7.2
@@ -17510,13 +17524,13 @@ snapshots:
'@babel/template@7.26.9': '@babel/template@7.26.9':
dependencies: dependencies:
'@babel/code-frame': 7.26.2 '@babel/code-frame': 7.27.1
'@babel/parser': 7.26.10 '@babel/parser': 7.27.5
'@babel/types': 7.26.10 '@babel/types': 7.27.6
'@babel/traverse@7.26.10': '@babel/traverse@7.26.10':
dependencies: dependencies:
'@babel/code-frame': 7.26.2 '@babel/code-frame': 7.27.1
'@babel/generator': 7.26.10 '@babel/generator': 7.26.10
'@babel/parser': 7.27.5 '@babel/parser': 7.27.5
'@babel/template': 7.26.9 '@babel/template': 7.26.9
@@ -17756,7 +17770,7 @@ snapshots:
'@currents/commit-info': 1.0.1-beta.0 '@currents/commit-info': 1.0.1-beta.0
async-retry: 1.3.3 async-retry: 1.3.3
axios: 1.10.0(debug@4.4.1) axios: 1.10.0(debug@4.4.1)
axios-retry: 4.5.0(axios@1.10.0) axios-retry: 4.5.0(axios@1.10.0(debug@4.4.1))
c12: 1.11.2(magicast@0.3.5) c12: 1.11.2(magicast@0.3.5)
chalk: 4.1.2 chalk: 4.1.2
commander: 12.1.0 commander: 12.1.0
@@ -17945,11 +17959,6 @@ snapshots:
'@esbuild/win32-x64@0.24.2': '@esbuild/win32-x64@0.24.2':
optional: true optional: true
'@eslint-community/eslint-utils@4.4.0(eslint@9.29.0(jiti@1.21.7))':
dependencies:
eslint: 9.29.0(jiti@1.21.7)
eslint-visitor-keys: 3.4.3
'@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))': '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))':
dependencies: dependencies:
eslint: 9.29.0(jiti@1.21.7) eslint: 9.29.0(jiti@1.21.7)
@@ -18206,7 +18215,7 @@ snapshots:
debug: 4.4.1(supports-color@8.1.1) debug: 4.4.1(supports-color@8.1.1)
kolorist: 1.8.0 kolorist: 1.8.0
local-pkg: 0.5.0 local-pkg: 0.5.0
mlly: 1.7.1 mlly: 1.7.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -20798,7 +20807,7 @@ snapshots:
'@types/asn1@0.2.0': '@types/asn1@0.2.0':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/aws4@1.11.2': '@types/aws4@1.11.2':
dependencies: dependencies:
@@ -20884,8 +20893,6 @@ snapshots:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
'@types/estree@1.0.6': {}
'@types/estree@1.0.8': {} '@types/estree@1.0.8': {}
'@types/eventsource@1.1.9': {} '@types/eventsource@1.1.9': {}
@@ -20919,12 +20926,12 @@ snapshots:
'@types/ftp@0.3.33': '@types/ftp@0.3.33':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/glob@8.0.0': '@types/glob@8.0.0':
dependencies: dependencies:
'@types/minimatch': 5.1.2 '@types/minimatch': 5.1.2
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/gm@1.25.0': '@types/gm@1.25.0':
dependencies: dependencies:
@@ -20984,7 +20991,7 @@ snapshots:
'@types/jsonfile@6.1.4': '@types/jsonfile@6.1.4':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
optional: true optional: true
'@types/jsonpath@0.2.0': {} '@types/jsonpath@0.2.0': {}
@@ -21064,7 +21071,7 @@ snapshots:
'@types/node-fetch@2.6.12': '@types/node-fetch@2.6.12':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
form-data: 4.0.2 form-data: 4.0.2
'@types/node@20.17.57': '@types/node@20.17.57':
@@ -21192,7 +21199,7 @@ snapshots:
'@types/ssh2@1.11.6': '@types/ssh2@1.11.6':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/sshpk@1.17.4': '@types/sshpk@1.17.4':
dependencies: dependencies:
@@ -21230,7 +21237,7 @@ snapshots:
'@types/tedious@4.0.9': '@types/tedious@4.0.9':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/temp@0.9.4': '@types/temp@0.9.4':
dependencies: dependencies:
@@ -21238,7 +21245,7 @@ snapshots:
'@types/through@0.0.30': '@types/through@0.0.30':
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/tough-cookie@4.0.2': {} '@types/tough-cookie@4.0.2': {}
@@ -22278,16 +22285,29 @@ snapshots:
axe-core@4.7.2: {} axe-core@4.7.2: {}
axios-retry@4.5.0(axios@1.10.0): axios-retry@4.5.0(axios@1.10.0(debug@4.4.1)):
dependencies: dependencies:
axios: 1.10.0(debug@4.4.1) axios: 1.10.0(debug@4.4.1)
is-retry-allowed: 2.2.0 is-retry-allowed: 2.2.0
axios-retry@4.5.0(axios@1.10.0):
dependencies:
axios: 1.10.0
is-retry-allowed: 2.2.0
axios-retry@4.5.0(axios@1.8.3): axios-retry@4.5.0(axios@1.8.3):
dependencies: dependencies:
axios: 1.8.3 axios: 1.8.3
is-retry-allowed: 2.2.0 is-retry-allowed: 2.2.0
axios@1.10.0:
dependencies:
follow-redirects: 1.15.9(debug@4.3.6)
form-data: 4.0.2
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
axios@1.10.0(debug@4.3.6): axios@1.10.0(debug@4.3.6):
dependencies: dependencies:
follow-redirects: 1.15.9(debug@4.3.6) follow-redirects: 1.15.9(debug@4.3.6)
@@ -22509,6 +22529,8 @@ snapshots:
browser-request@0.3.3: {} browser-request@0.3.3: {}
browser-stdout@1.3.1: {}
browserslist-to-esbuild@2.1.1(browserslist@4.24.4): browserslist-to-esbuild@2.1.1(browserslist@4.24.4):
dependencies: dependencies:
browserslist: 4.24.4 browserslist: 4.24.4
@@ -22586,7 +22608,7 @@ snapshots:
bundlemon@3.1.0(typescript@5.8.3): bundlemon@3.1.0(typescript@5.8.3):
dependencies: dependencies:
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
axios-retry: 4.5.0(axios@1.10.0) axios-retry: 4.5.0(axios@1.10.0)
brotli-size: 4.0.0 brotli-size: 4.0.0
bundlemon-utils: 2.0.1 bundlemon-utils: 2.0.1
@@ -23507,6 +23529,8 @@ snapshots:
decamelize@1.2.0: {} decamelize@1.2.0: {}
decamelize@4.0.0: {}
decimal.js@10.4.3: {} decimal.js@10.4.3: {}
decko@1.2.0: {} decko@1.2.0: {}
@@ -23596,6 +23620,8 @@ snapshots:
diff@4.0.2: diff@4.0.2:
optional: true optional: true
diff@7.0.0: {}
dingbat-to-unicode@1.0.1: {} dingbat-to-unicode@1.0.1: {}
dir-glob@3.0.1: dir-glob@3.0.1:
@@ -24074,7 +24100,7 @@ snapshots:
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
is-core-module: 2.16.1 is-core-module: 2.16.1
resolve: 1.22.10 resolve: 1.22.10
transitivePeerDependencies: transitivePeerDependencies:
@@ -24098,7 +24124,7 @@ snapshots:
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)):
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3) '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.8.3)
eslint: 9.29.0(jiti@1.21.7) eslint: 9.29.0(jiti@1.21.7)
@@ -24137,7 +24163,7 @@ snapshots:
array.prototype.findlastindex: 1.2.6 array.prototype.findlastindex: 1.2.6
array.prototype.flat: 1.3.3 array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.29.0(jiti@1.21.7) eslint: 9.29.0(jiti@1.21.7)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
@@ -24235,7 +24261,7 @@ snapshots:
eslint@9.29.0(jiti@1.21.7): eslint@9.29.0(jiti@1.21.7):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.29.0(jiti@1.21.7)) '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7))
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.20.1 '@eslint/config-array': 0.20.1
'@eslint/config-helpers': 0.2.3 '@eslint/config-helpers': 0.2.3
@@ -24246,7 +24272,7 @@ snapshots:
'@humanfs/node': 0.16.6 '@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3 '@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.6 '@types/estree': 1.0.8
'@types/json-schema': 7.0.15 '@types/json-schema': 7.0.15
ajv: 6.12.6 ajv: 6.12.6
chalk: 4.1.2 chalk: 4.1.2
@@ -24256,7 +24282,7 @@ snapshots:
eslint-scope: 8.4.0 eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
espree: 10.4.0 espree: 10.4.0
esquery: 1.5.0 esquery: 1.6.0
esutils: 2.0.3 esutils: 2.0.3
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
file-entry-cache: 8.0.0 file-entry-cache: 8.0.0
@@ -24289,10 +24315,6 @@ snapshots:
esprima@4.0.1: {} esprima@4.0.1: {}
esquery@1.5.0:
dependencies:
estraverse: 5.3.0
esquery@1.6.0: esquery@1.6.0:
dependencies: dependencies:
estraverse: 5.3.0 estraverse: 5.3.0
@@ -25067,7 +25089,7 @@ snapshots:
array-parallel: 0.1.3 array-parallel: 0.1.3
array-series: 0.1.5 array-series: 0.1.5
cross-spawn: 7.0.6 cross-spawn: 7.0.6
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -25133,7 +25155,7 @@ snapshots:
groq-sdk@0.19.0(encoding@0.1.13): groq-sdk@0.19.0(encoding@0.1.13):
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
'@types/node-fetch': 2.6.12 '@types/node-fetch': 2.6.12
abort-controller: 3.0.0 abort-controller: 3.0.0
agentkeepalive: 4.6.0 agentkeepalive: 4.6.0
@@ -25309,13 +25331,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
http-proxy-agent@7.0.0:
dependencies:
agent-base: 7.1.3
debug: 4.4.1(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.2: http-proxy-agent@7.0.2:
dependencies: dependencies:
agent-base: 7.1.3 agent-base: 7.1.3
@@ -25448,7 +25463,7 @@ snapshots:
infisical-node@1.3.0: infisical-node@1.3.0:
dependencies: dependencies:
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
dotenv: 16.3.1 dotenv: 16.3.1
tweetnacl: 1.0.3 tweetnacl: 1.0.3
tweetnacl-util: 0.15.1 tweetnacl-util: 0.15.1
@@ -25681,6 +25696,8 @@ snapshots:
is-path-inside@3.0.3: {} is-path-inside@3.0.3: {}
is-plain-obj@2.1.0: {}
is-plain-obj@4.1.0: {} is-plain-obj@4.1.0: {}
is-plain-object@5.0.0: {} is-plain-object@5.0.0: {}
@@ -26434,7 +26451,7 @@ snapshots:
decimal.js: 10.4.3 decimal.js: 10.4.3
form-data: 4.0.2 form-data: 4.0.2
html-encoding-sniffer: 4.0.0 html-encoding-sniffer: 4.0.0
http-proxy-agent: 7.0.0 http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6 https-proxy-agent: 7.0.6
is-potential-custom-element-name: 1.0.1 is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.7 nwsapi: 2.2.7
@@ -26610,7 +26627,7 @@ snapshots:
'@langchain/groq': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13) '@langchain/groq': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(encoding@0.1.13)
'@langchain/mistralai': 0.2.1(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67) '@langchain/mistralai': 0.2.1(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))(zod@3.25.67)
'@langchain/ollama': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67))) '@langchain/ollama': 0.2.3(@langchain/core@0.3.61(openai@5.8.1(ws@8.18.2)(zod@3.25.67)))
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
cheerio: 1.0.0 cheerio: 1.0.0
handlebars: 4.7.8 handlebars: 4.7.8
transitivePeerDependencies: transitivePeerDependencies:
@@ -27466,12 +27483,7 @@ snapshots:
mkdirp@2.1.3: {} mkdirp@2.1.3: {}
mlly@1.7.1: mkdirp@3.0.1: {}
dependencies:
acorn: 8.14.0
pathe: 1.1.2
pkg-types: 1.1.3
ufo: 1.5.4
mlly@1.7.4: mlly@1.7.4:
dependencies: dependencies:
@@ -27498,6 +27510,40 @@ snapshots:
mobx@6.12.0: {} mobx@6.12.0: {}
mocha-junit-reporter@2.2.1(mocha@11.7.1):
dependencies:
debug: 4.4.1(supports-color@8.1.1)
md5: 2.3.0
mkdirp: 3.0.1
mocha: 11.7.1
strip-ansi: 6.0.1
xml: 1.0.1
transitivePeerDependencies:
- supports-color
mocha@11.7.1:
dependencies:
browser-stdout: 1.3.1
chokidar: 4.0.3
debug: 4.4.1(supports-color@8.1.1)
diff: 7.0.0
escape-string-regexp: 4.0.0
find-up: 5.0.0
glob: 10.4.5
he: 1.2.0
js-yaml: 4.1.0
log-symbols: 4.1.0
minimatch: 9.0.5
ms: 2.1.3
picocolors: 1.1.1
serialize-javascript: 6.0.2
strip-json-comments: 3.1.1
supports-color: 8.1.1
workerpool: 9.3.3
yargs: 17.7.2
yargs-parser: 21.1.1
yargs-unparser: 2.0.0
module-details-from-path@1.0.3: {} module-details-from-path@1.0.3: {}
moment-timezone@0.5.37: moment-timezone@0.5.37:
@@ -28210,7 +28256,7 @@ snapshots:
pdf-parse@1.1.1: pdf-parse@1.1.1:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
node-ensure: 0.0.0 node-ensure: 0.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -28337,12 +28383,6 @@ snapshots:
dependencies: dependencies:
find-up: 4.1.0 find-up: 4.1.0
pkg-types@1.1.3:
dependencies:
confbox: 0.1.8
mlly: 1.7.4
pathe: 1.1.2
pkg-types@1.3.1: pkg-types@1.3.1:
dependencies: dependencies:
confbox: 0.1.8 confbox: 0.1.8
@@ -28464,7 +28504,7 @@ snapshots:
posthog-node@3.2.1: posthog-node@3.2.1:
dependencies: dependencies:
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
rusha: 0.8.14 rusha: 0.8.14
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -28599,7 +28639,7 @@ snapshots:
'@protobufjs/path': 1.1.2 '@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0 '@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0 '@protobufjs/utf8': 1.1.0
'@types/node': 20.17.57 '@types/node': 20.19.1
long: 5.3.2 long: 5.3.2
proxy-addr@2.0.7: proxy-addr@2.0.7:
@@ -29091,7 +29131,7 @@ snapshots:
retry-axios@2.6.0(axios@1.10.0(debug@4.4.1)): retry-axios@2.6.0(axios@1.10.0(debug@4.4.1)):
dependencies: dependencies:
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
retry-request@7.0.2(encoding@0.1.13): retry-request@7.0.2(encoding@0.1.13):
dependencies: dependencies:
@@ -29116,7 +29156,7 @@ snapshots:
rhea@1.0.24: rhea@1.0.24:
dependencies: dependencies:
debug: 3.2.7(supports-color@8.1.1) debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -29579,7 +29619,7 @@ snapshots:
asn1.js: 5.4.1 asn1.js: 5.4.1
asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1) asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1)
asn1.js-rfc5280: 3.0.0 asn1.js-rfc5280: 3.0.0
axios: 1.10.0(debug@4.4.1) axios: 1.10.0
big-integer: 1.6.52 big-integer: 1.6.52
bignumber.js: 9.1.2 bignumber.js: 9.1.2
binascii: 0.0.2 binascii: 0.0.2
@@ -30375,7 +30415,7 @@ snapshots:
ts-type@3.0.1(ts-toolbelt@9.6.0): ts-type@3.0.1(ts-toolbelt@9.6.0):
dependencies: dependencies:
'@types/node': 20.17.57 '@types/node': 20.19.1
ts-toolbelt: 9.6.0 ts-toolbelt: 9.6.0
tslib: 2.8.1 tslib: 2.8.1
typedarray-dts: 1.0.0 typedarray-dts: 1.0.0
@@ -30600,8 +30640,6 @@ snapshots:
uc.micro@2.1.0: {} uc.micro@2.1.0: {}
ufo@1.5.4: {}
ufo@1.6.1: {} ufo@1.6.1: {}
uglify-js@3.17.4: {} uglify-js@3.17.4: {}
@@ -30672,7 +30710,7 @@ snapshots:
'@antfu/install-pkg': 0.3.3 '@antfu/install-pkg': 0.3.3
'@antfu/utils': 0.7.10 '@antfu/utils': 0.7.10
'@iconify/utils': 2.1.25 '@iconify/utils': 2.1.25
debug: 4.4.0 debug: 4.4.1(supports-color@8.1.1)
kolorist: 1.8.0 kolorist: 1.8.0
local-pkg: 0.5.0 local-pkg: 0.5.0
unplugin: 1.11.0 unplugin: 1.11.0
@@ -31342,6 +31380,8 @@ snapshots:
worker-timers-broker: 6.1.8 worker-timers-broker: 6.1.8
worker-timers-worker: 7.0.71 worker-timers-worker: 7.0.71
workerpool@9.3.3: {}
wrap-ansi@6.2.0: wrap-ansi@6.2.0:
dependencies: dependencies:
ansi-styles: 4.3.0 ansi-styles: 4.3.0
@@ -31441,6 +31481,13 @@ snapshots:
yargs-parser@21.1.1: {} yargs-parser@21.1.1: {}
yargs-unparser@2.0.0:
dependencies:
camelcase: 6.3.0
decamelize: 4.0.0
flat: 5.0.2
is-plain-obj: 2.1.0
yargs@16.2.0: yargs@16.2.0:
dependencies: dependencies:
cliui: 7.0.4 cliui: 7.0.4

View File

@@ -14,7 +14,6 @@ import path from 'path';
// Disable verbose mode for cleaner output // Disable verbose mode for cleaner output
$.verbose = false; $.verbose = false;
process.env.FORCE_COLOR = '1'; process.env.FORCE_COLOR = '1';
process.env.DOCKER_BUILDKIT = '1';
// #region ===== Helper Functions ===== // #region ===== Helper Functions =====
@@ -136,10 +135,12 @@ async function buildDockerImage() {
echo(chalk.yellow('INFO: Building Docker image...')); echo(chalk.yellow('INFO: Building Docker image...'));
try { try {
const { stdout } = await $`DOCKER_BUILDKIT=1 docker build \ const { stdout } = await $`docker build \
--platform ${platform} \ --platform ${platform} \
--build-arg TARGETPLATFORM=${platform} \
-t ${config.fullImageName} \ -t ${config.fullImageName} \
-f ${config.dockerfilePath} \ -f ${config.dockerfilePath} \
--load \
${config.buildContext}`; ${config.buildContext}`;
echo(stdout); echo(stdout);

View File

@@ -12,7 +12,7 @@
"cache": false "cache": false
}, },
"build:playwright": { "build:playwright": {
"dependsOn": ["install-browsers", "build"] "dependsOn": ["install-browsers:ci", "build"]
}, },
"build:backend": { "build:backend": {
"dependsOn": ["n8n#build"] "dependsOn": ["n8n#build"]