diff --git a/.changeset/wild-zoos-relax.md b/.changeset/wild-zoos-relax.md new file mode 100644 index 0000000000..9657a32603 --- /dev/null +++ b/.changeset/wild-zoos-relax.md @@ -0,0 +1,5 @@ +--- +'@kadena/rwa-demo': patch +--- + +init project diff --git a/.github/labeler.yml b/.github/labeler.yml index 7c81075ea3..9bade7ce6b 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -49,6 +49,9 @@ Github Config & Actions: '@kadena/explorer': - changed-files: - any-glob-to-any-file: packages/apps/explorer/* +'@kadena/rwa-demo': + - changed-files: + - any-glob-to-any-file: packages/apps/rwa-demo/* '@kadena/graph': - changed-files: - any-glob-to-any-file: packages/apps/graph/* diff --git a/packages.json b/packages.json index 76bdf49e69..2920552cbb 100644 --- a/packages.json +++ b/packages.json @@ -89,6 +89,12 @@ "private": true, "path": "packages/apps/explorer" }, + { + "name": "@kadena/rwa-demo", + "version": "0.0.1", + "private": true, + "path": "packages/apps/rwa-demo" + }, { "name": "@kadena/graph", "version": "1.0.14", diff --git a/packages/apps/rwa-demo/.eslintignore b/packages/apps/rwa-demo/.eslintignore new file mode 100644 index 0000000000..6dd0af785e --- /dev/null +++ b/packages/apps/rwa-demo/.eslintignore @@ -0,0 +1,2 @@ +# generated code +**/__generated__/** diff --git a/packages/apps/rwa-demo/.eslintrc.js b/packages/apps/rwa-demo/.eslintrc.js new file mode 100644 index 0000000000..4e4a5d9190 --- /dev/null +++ b/packages/apps/rwa-demo/.eslintrc.js @@ -0,0 +1,18 @@ +// This is a workaround for https://github.com/eslint/eslint/issues/3458 +require('@rushstack/eslint-config/patch/modern-module-resolution'); + +module.exports = { + extends: ['@kadena-dev/eslint-config/profile/next'], + ignorePatterns: ['**/__generated__/**'], + parserOptions: { tsconfigRootDir: __dirname }, + rules: { + 'jsx-a11y/aria-props': 'warn', + 'jsx-a11y/role-has-required-aria-props': 'warn', + 'jsx-a11y/heading-has-content': 'warn', + 'jsx-a11y/mouse-events-have-key-events': 'warn', + 'jsx-a11y/role-supports-aria-props': 'warn', + '@rushstack/no-new-null': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/jsx-uses-react': 'off', + }, +}; diff --git a/packages/apps/rwa-demo/.gitignore b/packages/apps/rwa-demo/.gitignore new file mode 100644 index 0000000000..26b002aac1 --- /dev/null +++ b/packages/apps/rwa-demo/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# env files (can opt-in for commiting if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/packages/apps/rwa-demo/.prettierignore b/packages/apps/rwa-demo/.prettierignore new file mode 100644 index 0000000000..6edcfd6787 --- /dev/null +++ b/packages/apps/rwa-demo/.prettierignore @@ -0,0 +1,2 @@ +src/__generated__ +**/*.md diff --git a/packages/apps/rwa-demo/README.md b/packages/apps/rwa-demo/README.md new file mode 100644 index 0000000000..e215bc4ccf --- /dev/null +++ b/packages/apps/rwa-demo/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/packages/apps/rwa-demo/next.config.js b/packages/apps/rwa-demo/next.config.js new file mode 100644 index 0000000000..3161867b75 --- /dev/null +++ b/packages/apps/rwa-demo/next.config.js @@ -0,0 +1,13 @@ +const { createVanillaExtractPlugin } = require('@vanilla-extract/next-plugin'); +const withVanillaExtract = createVanillaExtractPlugin(); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + transpilePackages: ['@kadena/kode-ui'], + env: {}, + async redirects() { + return []; + }, +}; + +module.exports = withVanillaExtract(nextConfig); diff --git a/packages/apps/rwa-demo/package.json b/packages/apps/rwa-demo/package.json new file mode 100644 index 0000000000..5860fa038d --- /dev/null +++ b/packages/apps/rwa-demo/package.json @@ -0,0 +1,45 @@ +{ + "name": "@kadena/rwa-demo", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev", + "lint": "pnpm run /^lint:.*/", + "lint:fmt": "prettier . --cache --check", + "lint:src": "eslint src", + "start": "next start", + "test": "echo ''", + "test:coverage": "vitest run --coverage", + "test:watch": "vitest --coverage" + }, + "dependencies": { + "@kadena/kode-icons": "workspace:*", + "@kadena/kode-ui": "workspace:*", + "@vanilla-extract/css": "1.14.2", + "@vanilla-extract/next-plugin": "2.4.0", + "@vanilla-extract/recipes": "0.5.1", + "next": "14.2.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@kadena-dev/eslint-config": "workspace:*", + "@kadena-dev/lint-package": "workspace:*", + "@kadena-dev/shared-config": "workspace:*", + "@types/node": "^20.12.7", + "@types/react": "^18.2.79", + "@types/react-dom": "^18.2.25", + "@vanilla-extract/vite-plugin": "4.0.7", + "@vitejs/plugin-react": "^4.3.1", + "@vitest/coverage-v8": "^1.6.0", + "eslint": "^8.45.0", + "eslint-config-next": "13.4.5", + "happy-dom": "^12.9.1", + "next-router-mock": "^0.9.10", + "prettier": "~3.2.5", + "typescript": "5.4.5", + "vitest": "^1.6.0", + "vitest-dom": "^0.1.1" + } +} diff --git a/packages/apps/rwa-demo/src/app/layout.tsx b/packages/apps/rwa-demo/src/app/layout.tsx new file mode 100644 index 0000000000..e4febf0d5b --- /dev/null +++ b/packages/apps/rwa-demo/src/app/layout.tsx @@ -0,0 +1,20 @@ +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Create Next App', + description: 'Generated by create next app', +}; + +const RootLayout = ({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) => { + return ( + + {children} + + ); +}; + +export default RootLayout; diff --git a/packages/apps/rwa-demo/src/app/page.tsx b/packages/apps/rwa-demo/src/app/page.tsx new file mode 100644 index 0000000000..079187b0db --- /dev/null +++ b/packages/apps/rwa-demo/src/app/page.tsx @@ -0,0 +1,5 @@ +const Home = () => { + return
hello world!
; +}; + +export default Home; diff --git a/packages/apps/rwa-demo/tsconfig.json b/packages/apps/rwa-demo/tsconfig.json new file mode 100644 index 0000000000..c1334095f8 --- /dev/null +++ b/packages/apps/rwa-demo/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/apps/rwa-demo/vitest-globals.ts b/packages/apps/rwa-demo/vitest-globals.ts new file mode 100644 index 0000000000..1bf0e43ab2 --- /dev/null +++ b/packages/apps/rwa-demo/vitest-globals.ts @@ -0,0 +1,3 @@ +export const setup = () => { + process.env.TZ = 'UTC'; +}; diff --git a/packages/apps/rwa-demo/vitest.config.ts b/packages/apps/rwa-demo/vitest.config.ts new file mode 100644 index 0000000000..73764cff07 --- /dev/null +++ b/packages/apps/rwa-demo/vitest.config.ts @@ -0,0 +1,48 @@ +import baseConfig from '@kadena-dev/shared-config/vitest.config'; +import { vanillaExtractPlugin } from '@vanilla-extract/vite-plugin'; +import react from '@vitejs/plugin-react'; +import path from 'path'; +import { defineConfig, mergeConfig } from 'vitest/config'; + +export default mergeConfig( + baseConfig, + defineConfig({ + plugins: [vanillaExtractPlugin(), react()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + test: { + globals: true, + globalSetup: './vitest-globals.ts', + setupFiles: ['vitest.setup.ts'], + environment: 'happy-dom', + coverage: { + provider: 'v8', + thresholds: { + lines: 90, + functions: 90, + branches: 90, + statements: 90, + }, + exclude: [ + 'src/**/*.tsx', + 'src/**/*.d.ts', + 'src/**/__fixtures__/**/*.ts', + 'src/graphql/**/*.ts', + 'src/**/*.graph.ts', + 'src/__generated__/**/*.ts', + 'src/__mocks__/**/*.ts', + 'src/config/**/*', + 'src/constants/**/*', + 'src/components/**/index.ts', + 'src/**/*.css.ts', + 'src/**/*.md', + 'src/**/*.mdx', + 'src/instrumentation.ts', + ], + }, + }, + }), +); diff --git a/packages/apps/rwa-demo/vitest.setup.ts b/packages/apps/rwa-demo/vitest.setup.ts new file mode 100644 index 0000000000..e0871d1074 --- /dev/null +++ b/packages/apps/rwa-demo/vitest.setup.ts @@ -0,0 +1,21 @@ +import '@vanilla-extract/css/disableRuntimeStyles'; +import { afterEach, beforeAll, vi } from 'vitest'; +import 'vitest-dom/extend-expect'; + +beforeAll(() => { + vi.mock('next/router', () => import('next-router-mock')); +}); + +afterEach(() => {}); + +Object.defineProperty(window, 'matchMedia', { + writable: true, + value: vi.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })), +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28c85891d7..7fa6927265 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1253,6 +1253,85 @@ importers: specifier: ^0.1.1 version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) + packages/apps/rwa-demo: + dependencies: + '@kadena/kode-icons': + specifier: workspace:* + version: link:../../libs/kode-icons + '@kadena/kode-ui': + specifier: workspace:* + version: link:../../libs/kode-ui + '@vanilla-extract/css': + specifier: 1.14.2 + version: 1.14.2 + '@vanilla-extract/next-plugin': + specifier: 2.4.0 + version: 2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2) + '@vanilla-extract/recipes': + specifier: 0.5.1 + version: 0.5.1(@vanilla-extract/css@1.14.2) + next: + specifier: 14.2.2 + version: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + devDependencies: + '@kadena-dev/eslint-config': + specifier: workspace:* + version: link:../../tools/eslint-config + '@kadena-dev/lint-package': + specifier: workspace:* + version: link:../../tools/lint-package + '@kadena-dev/shared-config': + specifier: workspace:* + version: link:../../tools/shared-config + '@types/node': + specifier: ^20.12.7 + version: 20.16.5 + '@types/react': + specifier: ^18.2.79 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.2.25 + version: 18.3.0 + '@vanilla-extract/vite-plugin': + specifier: 4.0.7 + version: 4.0.7(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)(vite@5.3.3(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)) + '@vitejs/plugin-react': + specifier: ^4.3.1 + version: 4.3.1(vite@5.3.3(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)) + '@vitest/coverage-v8': + specifier: ^1.6.0 + version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) + eslint: + specifier: ^8.45.0 + version: 8.57.0 + eslint-config-next: + specifier: 13.4.5 + version: 13.4.5(eslint@8.57.0)(typescript@5.4.5) + happy-dom: + specifier: ^12.9.1 + version: 12.10.3 + next-router-mock: + specifier: ^0.9.10 + version: 0.9.13(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + prettier: + specifier: ~3.2.5 + version: 3.2.5 + typescript: + specifier: 5.4.5 + version: 5.4.5 + vitest: + specifier: ^1.6.0 + version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) + vitest-dom: + specifier: ^0.1.1 + version: 0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) + packages/apps/spirekey-example: dependencies: '@kadena/client': @@ -25383,15 +25462,13 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/codeframe@2.12.0': dependencies: @@ -25451,7 +25528,7 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.11)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) @@ -25866,7 +25943,7 @@ snapshots: '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) @@ -31120,6 +31197,22 @@ snapshots: - terser - webpack + '@vanilla-extract/next-plugin@2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2)': + dependencies: + '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2) + next: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - webpack + '@vanilla-extract/private@1.0.5': {} '@vanilla-extract/private@1.0.6': {} @@ -31252,6 +31345,24 @@ snapshots: - supports-color - terser + '@vanilla-extract/webpack-plugin@2.3.7(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2)': + dependencies: + '@vanilla-extract/integration': 7.1.7(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1) + chalk: 4.1.2 + debug: 4.3.4(supports-color@5.5.0) + loader-utils: 2.0.4 + webpack: 5.88.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + '@vitejs/plugin-react-swc@3.7.0(@swc/helpers@0.5.11)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1))': dependencies: '@swc/core': 1.6.7(@swc/helpers@0.5.11) @@ -31277,6 +31388,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.3.1(vite@5.3.3(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1))': + dependencies: + '@babel/core': 7.24.7 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.24.7) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.3.3(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 @@ -31296,6 +31418,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.4(supports-color@5.5.0) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.10 + magicast: 0.3.4 + picocolors: 1.0.1 + std-env: 3.7.0 + strip-literal: 2.1.0 + test-exclude: 6.0.0 + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) + transitivePeerDependencies: + - supports-color + '@vitest/expect@1.3.1': dependencies: '@vitest/spy': 1.3.1 @@ -44133,6 +44274,16 @@ snapshots: redent: 4.0.0 vitest: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) + vitest-dom@0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)): + dependencies: + aria-query: 5.3.0 + chalk: 5.3.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash-es: 4.17.21 + redent: 4.0.0 + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) + vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1): dependencies: '@vitest/expect': 1.6.0