Compare commits

...

2 Commits

Author SHA1 Message Date
Craigory Coppola 070e9612c8 feat(core): include setup for e2e benchmarks 2025-03-10 17:20:42 -04:00
Craigory Coppola 518b0cbfa5 feat(repo): setup codspeed for benchmarking 2025-03-10 11:26:12 -04:00
17 changed files with 581 additions and 154 deletions
+44 -1
View File
@@ -8,8 +8,12 @@ on:
branches:
- "**"
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
NX_CLOUD_ACCESS_TOKEN: OWViNjcxNmUtYzRmNC00YzBjLWFhNGEtNzc0OTYxZDYwNmEwfHJlYWQtd3JpdGU=
jobs:
main-linux:
@@ -160,3 +164,42 @@ jobs:
else
echo "Skip E2E tests for macOS as there are no changes in React Native projects."
fi
benchmarks:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Fetch Master
run: git fetch origin master:master
if: ${{ github.event_name == 'pull_request' }}
- name: Set SHAs
uses: nrwl/nx-set-shas@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ca-certificates lsof libvips-dev libglib2.0-dev libgirepository1.0-dev
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
version: 9.8.0
run_install: false
- name: Install project dependencies
run: |
pnpm install --frozen-lockfile
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Run benchmarks
uses: CodSpeedHQ/action@v3
with:
run: "pnpm exec nx run-many -t benchmark"
token: ${{ secrets.CODSPEED_TOKEN }}
+17
View File
@@ -0,0 +1,17 @@
{
"name": "e2e-benchmarks",
"targets": {
"benchmark": {
"command": "vitest bench",
"options": {
"cwd": "{projectRoot}",
"args": ["--watch=false"]
},
"configurations": {
"watch": {
"args": ["--watch=true"]
}
}
}
}
}
@@ -0,0 +1,115 @@
import { execSync } from 'node:child_process';
import { rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { bench, beforeAll, describe } from 'vitest';
describe('large-incremental-repo', () => {
const workspaceRoot = join(tmpdir(), 'nx-benchmark-large-incremental-repo');
beforeAll(() => {
rmSync(workspaceRoot, { recursive: true, force: true });
execSync(
`git clone https://github.com/vsavkin/large-monorepo ${workspaceRoot}`
);
execSync('npm i', { cwd: workspaceRoot });
execSync('npx nx migrate latest', { cwd: workspaceRoot });
execSync('npx nx migrate --run-migrations --if-exists', {
cwd: workspaceRoot,
});
});
describe('graph compute', () => {
describe('cold', () => {
bench(
'daemon=false',
() => {
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'false',
},
});
},
{
setup: () => {
execSync('npx nx reset', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'false',
},
});
},
}
);
bench(
'daemon=true',
() => {
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'true',
},
});
},
{
setup: () => {
execSync('npx nx reset', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'true',
},
});
},
}
);
});
describe('warm', () => {
/**
* Warms up the graph cache and daemon
*/
beforeAll(() => {
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'false',
},
});
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'true',
},
});
}, 60_000); // 1 minute
bench('daemon=false', () => {
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'false',
},
});
});
bench('daemon=true', () => {
execSync('npx nx show projects', {
cwd: workspaceRoot,
env: {
...process.env,
NX_DAEMON: 'true',
},
});
});
});
});
});
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"module": "commonjs",
"types": ["vitest", "node"]
},
"include": ["**/*.bench.ts", "**/*.d.ts", "jest.config.ts"]
}
+13
View File
@@ -0,0 +1,13 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"types": ["node", "vitest"]
},
"include": [],
"files": [],
"references": [
{
"path": "./tsconfig.bench.json"
}
]
}
+14
View File
@@ -0,0 +1,14 @@
import { defineConfig } from 'vitest/config';
import codspeedPlugin from '@codspeed/vitest-plugin';
import { join } from 'node:path';
export default defineConfig({
plugins: [codspeedPlugin()],
test: {
globals: true,
environment: 'node',
globalSetup: ['../utils/benchmark-setup.ts'],
hookTimeout: 60 * 60 * 1000, // 1 hour
},
benchmark: {},
} as any);
+72
View File
@@ -0,0 +1,72 @@
// This is exported from /jest/, but doesn't rely on jest itself.
import { startLocalRegistry } from '@nx/js/plugins/jest/local-registry';
import { existsSync, removeSync } from 'fs-extra';
import * as isCI from 'is-ci';
import { exec } from 'node:child_process';
import { join } from 'node:path';
import { registerTsConfigPaths } from '../../packages/nx/src/plugins/js/utils/register';
import { runLocalRelease } from '../../scripts/local-registry/populate-storage';
let teardownFn: (() => void) | undefined;
export async function setup() {
try {
const isVerbose: boolean = process.env.NX_VERBOSE_LOGGING === 'true';
teardownFn = await startLocalRegistry({
localRegistryTarget: '@nx/nx-source:local-registry',
verbose: isVerbose,
clearStorage: true,
});
/**
* Set the published version based on what has previously been loaded into the
* verdaccio storage.
*/
const publishedVersion = await getPublishedVersion();
if (publishedVersion) {
process.env.PUBLISHED_VERSION = publishedVersion;
}
if (process.env.NX_E2E_SKIP_CLEANUP !== 'true' || !existsSync('./build')) {
if (!isCI) {
registerTsConfigPaths(join(__dirname, '../../tsconfig.base.json'));
const { e2eCwd } = await import('./get-env-info');
removeSync(e2eCwd);
}
console.log('Publishing packages to local registry');
const publishVersion = process.env.PUBLISHED_VERSION ?? 'major';
// Always show full release logs on CI, they should only happen once via e2e-ci
await runLocalRelease(publishVersion, isCI || isVerbose);
}
} catch (err) {
// Clean up registry if possible after setup related errors
if (typeof teardownFn === 'function') {
teardownFn();
console.log('Killed local registry process due to an error during setup');
}
throw err;
}
}
export function teardown() {
teardownFn();
}
function getPublishedVersion(): Promise<string | undefined> {
return new Promise((resolve) => {
// Resolve the published nx version from verdaccio
exec(
'npm view nx@latest version',
{
windowsHide: false,
},
(error, stdout, stderr) => {
if (error) {
return resolve(undefined);
}
return resolve(stdout.trim());
}
);
});
}
+2 -2
View File
@@ -242,7 +242,6 @@
},
"@nx/powerpack-enterprise-cloud"
],
"nxCloudId": "62d013ea0852fe0a2df74438",
"nxCloudUrl": "https://staging.nx.app",
"parallel": 1,
"bust": 5,
@@ -371,5 +370,6 @@
}
}
]
}
},
"nxCloudId": "67cf575fb94d810c00034323"
}
+10 -1
View File
@@ -46,6 +46,8 @@
"@babel/preset-react": "^7.22.5",
"@babel/preset-typescript": "^7.22.5",
"@babel/runtime": "^7.22.6",
"@codspeed/tinybench-plugin": "^4.0.0",
"@codspeed/vitest-plugin": "^4.0.0",
"@eslint/compat": "^1.1.1",
"@eslint/eslintrc": "^2.1.1",
"@eslint/js": "^8.48.0",
@@ -377,6 +379,7 @@
"tailwind-merge": "^2.4.0",
"tailwindcss": "3.4.4",
"three": "^0.166.1",
"tinybench": "^2.9.0",
"tslib": "^2.3.0",
"webpack-cli": "^5.1.4"
},
@@ -395,5 +398,11 @@
"check-codeowners"
]
},
"packageManager": "pnpm@9.8.0"
"packageManager": "pnpm@9.8.0",
"pnpm": {
"overrides": {
"vite": "6.2.0",
"vitest": "3.0.5"
}
}
}
+1
View File
@@ -115,6 +115,7 @@
"@nestjs/cli", // nx init nest makes use of nestjs cli (which should be available in NestJS CLI app) to parse the nest-cli.json file
"ts-node", // We *may* fall back on ts-node, but we want to encourage the use of @swc-node instead so we don't explicitly list ts-node as an optional dep
"memfs", // used in mock for handling .node files in tests
"tinybench", // used in benchmarks
"events", // This is coming from @storybook/builder-manager since it uses the browser polyfill
"process", // This is coming from @storybook/builder-manager since it uses the browser polyfill
"prettier", // This is coming from @storybook/builder-manager since it uses the browser polyfill
+8
View File
@@ -105,6 +105,14 @@
"echo": {
"command": "echo hi"
},
"benchmark": {
"command": "node -r ts-node/register --hash-seed=1 --random-seed=1 --no-opt --predictable --predictable-gc-schedule --interpreted-frames-native-stack --allow-natives-syntax --expose-gc --no-concurrent-sweeping ./tools/tinybench-runner {projectRoot}",
"options": {
"env": {
"TS_NODE_PROJECT": "./tools/tinybench-runner/tsconfig.json"
}
}
},
"build": {
"dependsOn": ["^build-client", "build-base", "build-native"],
"inputs": [
@@ -0,0 +1,63 @@
import type { Bench } from 'tinybench';
import { projectsToRun } from './run-many';
import { ProjectGraph } from '../../config/project-graph';
let projectGraph: ProjectGraph = {
nodes: {
proj1: {
name: 'proj1',
type: 'lib',
data: {
root: 'proj1',
tags: ['api', 'theme1'],
targets: {
build: {},
test: {},
},
},
},
proj2: {
name: 'proj2',
type: 'lib',
data: {
root: 'proj2',
tags: ['ui', 'theme2'],
targets: {
test: {},
},
},
},
} as any,
dependencies: {},
};
for (let i = 0; i < 1000000; i++) {
projectGraph.nodes['proj' + i] = {
name: 'proj' + i,
type: 'lib',
data: {
root: 'proj' + i,
targets: {
test: {},
},
} as any,
};
}
export function registerBenchmarks(bench: Bench) {
return bench.add(
'should be able to select and exclude via patterns',
async () => {
projectsToRun(
{
targets: ['test'],
projects: ['proj1*'],
exclude: ['proj12*'],
},
projectGraph
);
},
{}
);
}
+17
View File
@@ -0,0 +1,17 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "CommonJS",
"outDir": "../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": [
"**/*.spec.ts",
"**/*_spec.ts",
"jest.config.ts",
"**/__fixtures__/**/*.*",
"./src/internal-testing-utils/**/*.ts"
],
"include": ["**/*.benchmark.ts"]
}
+2 -1
View File
@@ -11,7 +11,8 @@
"**/*_spec.ts",
"jest.config.ts",
"**/__fixtures__/**/*.*",
"./src/internal-testing-utils/**/*.ts"
"./src/internal-testing-utils/**/*.ts",
"**/*.benchmark.ts"
],
"include": ["**/*.ts"]
}
+137 -149
View File
@@ -7,6 +7,8 @@ settings:
overrides:
minimist: ^1.2.6
underscore: ^1.12.1
vite: 6.2.0
vitest: 3.0.5
importers:
@@ -156,6 +158,9 @@ importers:
three:
specifier: ^0.166.1
version: 0.166.1
tinybench:
specifier: ^2.9.0
version: 2.9.0
tslib:
specifier: ^2.3.0
version: 2.7.0
@@ -223,6 +228,12 @@ importers:
'@babel/runtime':
specifier: ^7.22.6
version: 7.25.6
'@codspeed/tinybench-plugin':
specifier: ^4.0.0
version: 4.0.0(tinybench@2.9.0)
'@codspeed/vitest-plugin':
specifier: ^4.0.0
version: 4.0.0(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@20.0.3(bufferutil@4.0.7))(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))
'@eslint/compat':
specifier: ^1.1.1
version: 1.1.1
@@ -372,7 +383,7 @@ importers:
version: 1.9.0(react-redux@8.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1))(react@18.3.1)
'@remix-run/dev':
specifier: ^2.14.0
version: 2.14.0(@remix-run/react@2.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(bufferutil@4.0.7)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))
version: 2.14.0(@remix-run/react@2.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(bufferutil@4.0.7)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1)
'@remix-run/node':
specifier: ^2.14.0
version: 2.14.0(typescript@5.7.3)
@@ -843,7 +854,7 @@ importers:
version: 11.0.1
nuxt:
specifier: ^3.10.0
version: 3.13.2(@azure/identity@4.5.0)(@azure/storage-blob@12.25.0)(@parcel/watcher@2.4.1)(@types/node@20.16.10)(bufferutil@4.0.7)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(webpack-sources@3.2.3)
version: 3.13.2(@azure/identity@4.5.0)(@azure/storage-blob@12.25.0)(@parcel/watcher@2.4.1)(@types/node@20.16.10)(bufferutil@4.0.7)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(webpack-sources@3.2.3)(yaml@2.6.1)
nx:
specifier: 20.5.0-rc.4
version: 20.5.0-rc.4(@swc-node/register@1.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@swc/types@0.1.12)(typescript@5.7.3))(@swc/core@1.5.7(@swc/helpers@0.5.11))
@@ -2615,6 +2626,20 @@ packages:
resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
engines: {node: '>=16.13'}
'@codspeed/core@4.0.0':
resolution: {integrity: sha512-B3zwdwLG8rcV0ORfYKX1wDP6ZCWf9C6ySidSf61q2vm9v5Lj2cWwRvj7vX+w/UyFHWKjp/zSyWTEed/r3Fv4Tg==}
'@codspeed/tinybench-plugin@4.0.0':
resolution: {integrity: sha512-h31pWeN1yrxAnkL5UYyBLTt0abrWFbdEIFzuO11lGqYp6BQn8OitaJFsDWo5SAk5od+hb/tKTtjGpDm5UnQ5Sw==}
peerDependencies:
tinybench: ^2.3.0
'@codspeed/vitest-plugin@4.0.0':
resolution: {integrity: sha512-L7oCOuVL2xI1/z+HLt56+7Xs/MGzbaf5aaOys6vOMDAs1PmxbmyAz6g1Y0x1TrP1+dvR9LUZQCKM/CsXHCrNxg==}
peerDependencies:
vite: 6.2.0
vitest: 3.0.5
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@@ -4173,7 +4198,7 @@ packages:
resolution: {integrity: sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ==}
peerDependencies:
typescript: '>= 4.3.x'
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
vite: 6.2.0
peerDependenciesMeta:
typescript:
optional: true
@@ -5340,7 +5365,7 @@ packages:
'@nuxt/devtools-kit@1.4.2':
resolution: {integrity: sha512-8a5PhVnC7E94318/sHbNSe9mI2MlsQ8+pJLGs2Hh1OJyidB9SWe6hoFc8q4K9VOtXak9uCFVb5V2JGXS1q+1aA==}
peerDependencies:
vite: '*'
vite: 6.2.0
'@nuxt/devtools-wizard@1.4.2':
resolution: {integrity: sha512-TyhmPBg/xJKPOdnwR3DAh8KMUt6/0dUNABCxGVeY7PYbIiXt4msIGVJkBc4y+WwIJHOYPrSRClmZVsXQfRlB4A==}
@@ -5350,7 +5375,7 @@ packages:
resolution: {integrity: sha512-Ok3g2P7iwKyK8LiwozbYVAZTo8t91iXSmlJj2ozeo1okKQ2Qi1AtwB6nYgIlkUHZmo155ZjG/LCHYI5uhQ/sGw==}
hasBin: true
peerDependencies:
vite: '*'
vite: 6.2.0
'@nuxt/kit@3.13.2':
resolution: {integrity: sha512-KvRw21zU//wdz25IeE1E5m/aFSzhJloBRAQtv+evcFeZvuroIxpIQuUqhbzuwznaUwpiWbmwlcsp5uOWmi4vwA==}
@@ -5614,8 +5639,8 @@ packages:
'@nx/vite@20.5.0-rc.4':
resolution: {integrity: sha512-LiqiwTn8Ndqh1EUIuaECGaGYsZBv281RrBAHqsxujQt1F/J6LOmhK0wANaG1abTVMhZhXM78Eq0aH+yicQluBQ==}
peerDependencies:
vite: ^5.0.0 || ^6.0.0
vitest: ^1.3.1 || ^2.0.0 || ^3.0.0
vite: 6.2.0
vitest: 3.0.5
'@nx/web@20.5.0-rc.4':
resolution: {integrity: sha512-ZjcCZ53XVchNAWf2ZIOBB88KF/Aksapf699lz55ExWjSCj/hX1QNyGUfj0A4AOeFHmzvoFaKjlatJpIt3BieXg==}
@@ -6192,7 +6217,7 @@ packages:
'@remix-run/react': ^2.14.0
'@remix-run/serve': ^2.14.0
typescript: ^5.1.0
vite: ^5.1.0
vite: 6.2.0
wrangler: ^3.28.2
peerDependenciesMeta:
'@remix-run/serve':
@@ -6912,7 +6937,7 @@ packages:
resolution: {integrity: sha512-PyJsaEPyuRFFEplpNUi+nbuJd7d1DC2dAZjpsaHTXyqg5iPIbkIgsbCJLUDeIXnUDqM/utjmMpN0sQKJuhIc6w==}
peerDependencies:
storybook: ^8.4.6
vite: ^4.0.0 || ^5.0.0 || ^6.0.0
vite: 6.2.0
'@storybook/builder-webpack5@8.4.6':
resolution: {integrity: sha512-/ZInCFk2myJZinnAU05bATe+9iJn3+YRoxl+CUpYljxzsjoqb7iAwaNaMNolZCDOnMj24Kg2Pt87WtzAhu+ilw==}
@@ -7029,7 +7054,7 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
storybook: ^8.4.6
vite: ^4.0.0 || ^5.0.0 || ^6.0.0
vite: 6.2.0
'@storybook/react-webpack5@8.4.6':
resolution: {integrity: sha512-qUCOUoYW09voRhk0PzEZpZz6F5Ek9aHvVto8KW3lyYEuk6qujqUTNO6Y/X7hMraVt/C3l0+Ds4D5LEmxNBvd8g==}
@@ -7983,20 +8008,20 @@ packages:
resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==}
engines: {node: '>=14.21.3'}
peerDependencies:
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
vite: 6.2.0
'@vitejs/plugin-vue-jsx@4.0.1':
resolution: {integrity: sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vite: 6.2.0
vue: ^3.0.0
'@vitejs/plugin-vue@5.1.4':
resolution: {integrity: sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vite: 6.2.0
vue: ^3.2.25
'@vitest/expect@2.0.5':
@@ -8009,7 +8034,7 @@ packages:
resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==}
peerDependencies:
msw: ^2.4.9
vite: ^5.0.0 || ^6.0.0
vite: 6.2.0
peerDependenciesMeta:
msw:
optional: true
@@ -16349,6 +16374,10 @@ packages:
stable@0.1.8:
resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==}
stack-trace@1.0.0-pre2:
resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==}
engines: {node: '>=16'}
stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
@@ -17592,7 +17621,7 @@ packages:
vite-hot-client@0.2.3:
resolution: {integrity: sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==}
peerDependencies:
vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0
vite: 6.2.0
vite-node@1.6.0:
resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
@@ -17619,7 +17648,7 @@ packages:
optionator: ^0.9.1
stylelint: '>=13'
typescript: '*'
vite: '>=2.0.0'
vite: 6.2.0
vls: '*'
vti: '*'
vue-tsc: ~2.1.6
@@ -17648,7 +17677,7 @@ packages:
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': '*'
vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0
vite: 6.2.0
peerDependenciesMeta:
'@nuxt/kit':
optional: true
@@ -17656,78 +17685,7 @@ packages:
vite-plugin-vue-inspector@5.2.0:
resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==}
peerDependencies:
vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0
vite@5.4.11:
resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || >=20.0.0
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
vite@6.1.0:
resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
jiti: '>=1.21.0'
less: '*'
lightningcss: ^1.21.0
sass: '*'
sass-embedded: '*'
stylus: '*'
sugarss: '*'
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
jiti:
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vite: 6.2.0
vite@6.2.0:
resolution: {integrity: sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==}
@@ -18668,7 +18626,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.24.7
'@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9)
'@inquirer/confirm': 5.1.6(@types/node@20.16.10)
'@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))
'@vitejs/plugin-basic-ssl': 1.2.0(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))
beasties: 0.2.0
browserslist: 4.24.4
esbuild: 0.25.0
@@ -18686,7 +18644,7 @@ snapshots:
semver: 7.7.1
source-map-support: 0.5.21
typescript: 5.7.3
vite: 6.1.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
watchpack: 2.4.2
optionalDependencies:
less: 4.2.2
@@ -20847,6 +20805,31 @@ snapshots:
dependencies:
mime: 3.0.0
'@codspeed/core@4.0.0':
dependencies:
axios: 1.7.7
find-up: 6.3.0
form-data: 4.0.0
node-gyp-build: 4.8.2
transitivePeerDependencies:
- debug
'@codspeed/tinybench-plugin@4.0.0(tinybench@2.9.0)':
dependencies:
'@codspeed/core': 4.0.0
stack-trace: 1.0.0-pre2
tinybench: 2.9.0
transitivePeerDependencies:
- debug
'@codspeed/vitest-plugin@4.0.0(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@20.0.3(bufferutil@4.0.7))(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))':
dependencies:
'@codspeed/core': 4.0.0
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vitest: 3.0.5(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@20.0.3(bufferutil@4.0.7))(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
transitivePeerDependencies:
- debug
'@colors/colors@1.5.0':
optional: true
@@ -23336,12 +23319,12 @@ snapshots:
- supports-color
- webpack-sources
'@nuxt/vite-builder@3.13.2(@types/node@20.16.10)(eslint@8.57.0)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vue@3.5.6(typescript@5.7.3))(webpack-sources@3.2.3)':
'@nuxt/vite-builder@3.13.2(@types/node@20.16.10)(eslint@8.57.0)(jiti@1.21.6)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vue@3.5.6(typescript@5.7.3))(webpack-sources@3.2.3)(yaml@2.6.1)':
dependencies:
'@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.22.0)(webpack-sources@3.2.3)
'@rollup/plugin-replace': 5.0.7(rollup@4.22.0)
'@vitejs/plugin-vue': 5.1.4(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0))(vue@3.5.6(typescript@5.7.3))
'@vitejs/plugin-vue-jsx': 4.0.1(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0))(vue@3.5.6(typescript@5.7.3))
'@vitejs/plugin-vue': 5.1.4(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vue@3.5.6(typescript@5.7.3))
'@vitejs/plugin-vue-jsx': 4.0.1(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vue@3.5.6(typescript@5.7.3))
autoprefixer: 10.4.20(postcss@8.5.2)
clear: 0.1.0
consola: 3.2.3
@@ -23367,15 +23350,16 @@ snapshots:
ufo: 1.5.4
unenv: 1.10.0
unplugin: 1.14.1(webpack-sources@3.2.3)
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite-node: 2.1.1(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite-plugin-checker: 0.8.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0))
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vite-node: 2.1.1(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vite-plugin-checker: 0.8.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))
vue: 3.5.6(typescript@5.7.3)
vue-bundle-renderer: 2.1.0
transitivePeerDependencies:
- '@biomejs/biome'
- '@types/node'
- eslint
- jiti
- less
- lightningcss
- magicast
@@ -23389,12 +23373,14 @@ snapshots:
- sugarss
- supports-color
- terser
- tsx
- typescript
- uWebSockets.js
- vls
- vti
- vue-tsc
- webpack-sources
- yaml
'@nuxtjs/opencollective@0.3.2(encoding@0.1.13)':
dependencies:
@@ -24785,7 +24771,7 @@ snapshots:
react: 18.3.1
react-redux: 8.0.5(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1)
'@remix-run/dev@2.14.0(@remix-run/react@2.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(bufferutil@4.0.7)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))':
'@remix-run/dev@2.14.0(@remix-run/react@2.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.3))(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(bufferutil@4.0.7)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(ts-node@10.9.1(@swc/core@1.5.7(@swc/helpers@0.5.11))(@types/node@20.16.10)(typescript@5.7.3))(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(yaml@2.6.1)':
dependencies:
'@babel/core': 7.26.0
'@babel/generator': 7.26.2
@@ -24802,7 +24788,7 @@ snapshots:
'@remix-run/router': 1.21.0
'@remix-run/server-runtime': 2.14.0(typescript@5.7.3)
'@types/mdx': 2.0.13
'@vanilla-extract/integration': 6.5.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
'@vanilla-extract/integration': 6.5.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
arg: 5.0.2
cacache: 17.1.4
chalk: 4.1.2
@@ -24841,7 +24827,7 @@ snapshots:
tar-fs: 2.1.1
tsconfig-paths: 4.2.0
valibot: 0.41.0(typescript@5.7.3)
vite-node: 1.6.0(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite-node: 1.6.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
ws: 7.5.10(bufferutil@4.0.7)
optionalDependencies:
typescript: 5.7.3
@@ -24851,6 +24837,7 @@ snapshots:
- babel-plugin-macros
- bluebird
- bufferutil
- jiti
- less
- lightningcss
- sass
@@ -24860,7 +24847,9 @@ snapshots:
- supports-color
- terser
- ts-node
- tsx
- utf-8-validate
- yaml
'@remix-run/node@2.14.0(typescript@5.7.3)':
dependencies:
@@ -26809,7 +26798,7 @@ snapshots:
transitivePeerDependencies:
- babel-plugin-macros
'@vanilla-extract/integration@6.5.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)':
'@vanilla-extract/integration@6.5.0(@types/node@20.16.10)(babel-plugin-macros@3.1.0)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)':
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.26.0)
@@ -26822,11 +26811,12 @@ snapshots:
lodash: 4.17.21
mlly: 1.7.1
outdent: 0.8.0
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite-node: 1.6.0(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vite-node: 1.6.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- jiti
- less
- lightningcss
- sass
@@ -26835,6 +26825,8 @@ snapshots:
- sugarss
- supports-color
- terser
- tsx
- yaml
'@vanilla-extract/private@1.0.6': {}
@@ -27018,27 +27010,27 @@ snapshots:
minimatch: 7.4.6
semver: 7.6.3
'@vitejs/plugin-basic-ssl@1.2.0(vite@6.1.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))':
dependencies:
vite: 6.1.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
'@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))':
dependencies:
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
'@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0))(vue@3.5.6(typescript@5.7.3))':
'@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))':
dependencies:
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
'@vitejs/plugin-vue-jsx@4.0.1(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vue@3.5.6(typescript@5.7.3))':
dependencies:
'@babel/core': 7.26.9
'@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.26.9)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.9)
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vue: 3.5.6(typescript@5.7.3)
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@5.1.4(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0))(vue@3.5.6(typescript@5.7.3))':
'@vitejs/plugin-vue@5.1.4(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vue@3.5.6(typescript@5.7.3))':
dependencies:
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vue: 3.5.6(typescript@5.7.3)
'@vitest/expect@2.0.5':
@@ -34598,14 +34590,14 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
nuxt@3.13.2(@azure/identity@4.5.0)(@azure/storage-blob@12.25.0)(@parcel/watcher@2.4.1)(@types/node@20.16.10)(bufferutil@4.0.7)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(webpack-sources@3.2.3):
nuxt@3.13.2(@azure/identity@4.5.0)(@azure/storage-blob@12.25.0)(@parcel/watcher@2.4.1)(@types/node@20.16.10)(bufferutil@4.0.7)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(webpack-sources@3.2.3)(yaml@2.6.1):
dependencies:
'@nuxt/devalue': 2.0.2
'@nuxt/devtools': 1.4.2(bufferutil@4.0.7)(rollup@4.22.0)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1))(vue@3.5.6(typescript@5.7.3))(webpack-sources@3.2.3)
'@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.22.0)(webpack-sources@3.2.3)
'@nuxt/schema': 3.13.2(rollup@4.22.0)(webpack-sources@3.2.3)
'@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.22.0)(webpack-sources@3.2.3)
'@nuxt/vite-builder': 3.13.2(@types/node@20.16.10)(eslint@8.57.0)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vue@3.5.6(typescript@5.7.3))(webpack-sources@3.2.3)
'@nuxt/vite-builder': 3.13.2(@types/node@20.16.10)(eslint@8.57.0)(jiti@1.21.6)(less@4.1.3)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.22.0)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(typescript@5.7.3)(vue@3.5.6(typescript@5.7.3))(webpack-sources@3.2.3)(yaml@2.6.1)
'@unhead/dom': 1.11.6
'@unhead/shared': 1.11.6
'@unhead/ssr': 1.11.6
@@ -34701,6 +34693,7 @@ snapshots:
- sugarss
- supports-color
- terser
- tsx
- typescript
- uWebSockets.js
- utf-8-validate
@@ -34710,6 +34703,7 @@ snapshots:
- vue-tsc
- webpack-sources
- xml2js
- yaml
nwsapi@2.2.12: {}
@@ -37553,6 +37547,8 @@ snapshots:
stable@0.1.8: {}
stack-trace@1.0.0-pre2: {}
stack-utils@2.0.6:
dependencies:
escape-string-regexp: 2.0.0
@@ -38972,15 +38968,16 @@ snapshots:
dependencies:
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vite-node@1.6.0(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0):
vite-node@1.6.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
cac: 6.7.14
debug: 4.3.7(supports-color@8.1.1)
pathe: 1.1.2
picocolors: 1.1.1
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
transitivePeerDependencies:
- '@types/node'
- jiti
- less
- lightningcss
- sass
@@ -38989,15 +38986,18 @@ snapshots:
- sugarss
- supports-color
- terser
- tsx
- yaml
vite-node@2.1.1(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0):
vite-node@2.1.1(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
cac: 6.7.14
debug: 4.4.0
pathe: 1.1.2
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
transitivePeerDependencies:
- '@types/node'
- jiti
- less
- lightningcss
- sass
@@ -39006,6 +39006,8 @@ snapshots:
- sugarss
- supports-color
- terser
- tsx
- yaml
vite-node@3.0.5(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
@@ -39028,7 +39030,7 @@ snapshots:
- tsx
- yaml
vite-plugin-checker@0.8.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)):
vite-plugin-checker@0.8.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.7.3)(vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)):
dependencies:
'@babel/code-frame': 7.26.2
ansi-escapes: 4.3.2
@@ -39040,7 +39042,7 @@ snapshots:
npm-run-path: 4.0.1
strip-ansi: 6.0.1
tiny-invariant: 1.3.3
vite: 5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)
vite: 6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1)
vscode-languageclient: 7.0.0
vscode-languageserver: 7.0.0
vscode-languageserver-textdocument: 1.0.12
@@ -39083,36 +39085,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
vite@5.4.11(@types/node@20.16.10)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.2
rollup: 4.34.8
optionalDependencies:
'@types/node': 20.16.10
fsevents: 2.3.3
less: 4.1.3
sass: 1.55.0
sass-embedded: 1.85.1
stylus: 0.64.0
terser: 5.39.0
vite@6.1.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
esbuild: 0.24.2
postcss: 8.5.3
rollup: 4.34.8
optionalDependencies:
'@types/node': 20.16.10
fsevents: 2.3.3
jiti: 1.21.6
less: 4.2.2
sass: 1.85.0
sass-embedded: 1.85.1
stylus: 0.64.0
terser: 5.39.0
yaml: 2.6.1
vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
esbuild: 0.25.0
@@ -39129,6 +39101,22 @@ snapshots:
terser: 5.39.0
yaml: 2.6.1
vite@6.2.0(@types/node@20.16.10)(jiti@1.21.6)(less@4.2.2)(sass-embedded@1.85.1)(sass@1.85.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
esbuild: 0.25.0
postcss: 8.5.3
rollup: 4.34.8
optionalDependencies:
'@types/node': 20.16.10
fsevents: 2.3.3
jiti: 1.21.6
less: 4.2.2
sass: 1.85.0
sass-embedded: 1.85.1
stylus: 0.64.0
terser: 5.39.0
yaml: 2.6.1
vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.16.10)(jiti@1.21.6)(jsdom@20.0.3(bufferutil@4.0.7))(less@4.1.3)(sass-embedded@1.85.1)(sass@1.55.0)(stylus@0.64.0)(terser@5.39.0)(yaml@2.6.1):
dependencies:
'@vitest/expect': 3.0.5
+48
View File
@@ -0,0 +1,48 @@
import { join } from 'node:path';
import { Bench, Fn } from 'tinybench';
import { withCodSpeed } from '@codspeed/tinybench-plugin';
import { globWithWorkspaceContext } from 'nx/src/utils/workspace-context';
import { workspaceRoot } from '../../packages/nx/src/utils/workspace-root';
export function findAllBenchmarks(root: string) {
return globWithWorkspaceContext(workspaceRoot, [
join(root, '**', '*.benchmark.ts'),
]);
}
export async function runAllBenchmarks(root: string) {
const bench = withCodSpeed(new Bench());
const benchmarks = await findAllBenchmarks(root);
for (const benchmarkFile of benchmarks) {
const m = require(join('../../', benchmarkFile)) as {
registerBenchmarks?: (bench: Bench) => void;
};
if (m.registerBenchmarks) {
m.registerBenchmarks(bench);
} else {
throw new Error(`No benchmarks found in ${benchmarkFile}`);
}
}
const results = await bench.run();
console.table(bench.table());
const errors = results.map((s) => s.result?.error).filter(Boolean);
if (errors.length) {
throw new AggregateError(errors);
}
}
if (require.main === module) {
const root = process.argv[2] || '.';
runAllBenchmarks(root)
.then(() => {
console.log('All benchmarks completed.');
process.exit(0);
})
.catch((err) => {
console.error('Error running benchmarks:', err);
process.exit(1);
});
}
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "../../build/bench-out",
"module": "commonjs",
"types": ["node"]
},
"include": ["../../**/*.ts"]
}