chore(deps): update devdependency @nuxt/test-utils to v3.13.0 (main) (#27238)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Daniel Roe <daniel@roe.dev>
This commit is contained in:
renovate[bot] 2024-05-20 01:02:54 -05:00 committed by GitHub
parent 34ea903c34
commit 390a0ff281
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 175 additions and 459 deletions

View File

@ -48,7 +48,7 @@
"@eslint/js": "9.3.0", "@eslint/js": "9.3.0",
"@nuxt/eslint-config": "0.3.13", "@nuxt/eslint-config": "0.3.13",
"@nuxt/kit": "workspace:*", "@nuxt/kit": "workspace:*",
"@nuxt/test-utils": "3.12.1", "@nuxt/test-utils": "3.13.1",
"@nuxt/webpack-builder": "workspace:*", "@nuxt/webpack-builder": "workspace:*",
"@testing-library/vue": "8.1.0", "@testing-library/vue": "8.1.0",
"@types/eslint__js": "8.42.3", "@types/eslint__js": "8.42.3",

View File

@ -30,8 +30,8 @@ importers:
specifier: workspace:* specifier: workspace:*
version: link:packages/kit version: link:packages/kit
'@nuxt/test-utils': '@nuxt/test-utils':
specifier: 3.12.1 specifier: 3.13.1
version: 3.12.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)) version: 3.13.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
'@nuxt/webpack-builder': '@nuxt/webpack-builder':
specifier: workspace:* specifier: workspace:*
version: link:packages/webpack version: link:packages/webpack
@ -142,7 +142,7 @@ importers:
version: 1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0) version: 1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0)
vitest-environment-nuxt: vitest-environment-nuxt:
specifier: 1.0.0 specifier: 1.0.0
version: 1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)) version: 1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
vue: vue:
specifier: 3.4.27 specifier: 3.4.27
version: 3.4.27(typescript@5.4.5) version: 3.4.27(typescript@5.4.5)
@ -251,7 +251,7 @@ importers:
version: 2.0.2 version: 2.0.2
'@nuxt/devtools': '@nuxt/devtools':
specifier: ^1.3.1 specifier: ^1.3.1
version: 1.3.1(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(nuxt@packages+nuxt)(rollup@4.17.2)(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5)) version: 1.3.1(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(nuxt@packages+nuxt)(rollup@4.17.2)(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))
'@nuxt/kit': '@nuxt/kit':
specifier: workspace:* specifier: workspace:*
version: link:../kit version: link:../kit
@ -266,7 +266,7 @@ importers:
version: link:../vite version: link:../vite
'@types/node': '@types/node':
specifier: ^14.18.0 || >=16.10.0 specifier: ^14.18.0 || >=16.10.0
version: 20.12.10 version: 20.12.12
'@unhead/dom': '@unhead/dom':
specifier: ^1.9.10 specifier: ^1.9.10
version: 1.9.10 version: 1.9.10
@ -432,16 +432,16 @@ importers:
version: 11.0.4 version: 11.0.4
'@vitejs/plugin-vue': '@vitejs/plugin-vue':
specifier: 5.0.4 specifier: 5.0.4
version: 5.0.4(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5)) version: 5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))
unbuild: unbuild:
specifier: latest specifier: latest
version: 2.0.0(sass@1.69.4)(typescript@5.4.5) version: 2.0.0(sass@1.69.4)(typescript@5.4.5)
vite: vite:
specifier: 5.2.11 specifier: 5.2.11
version: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) version: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
vitest: vitest:
specifier: 1.6.0 specifier: 1.6.0
version: 1.6.0(@types/node@20.12.10)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0) version: 1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0)
packages/schema: packages/schema:
dependencies: dependencies:
@ -1741,10 +1741,6 @@ packages:
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@3.0.2':
resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.1.0': '@eslint/eslintrc@3.1.0':
resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@ -1959,20 +1955,21 @@ packages:
resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==} resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==}
hasBin: true hasBin: true
'@nuxt/test-utils@3.12.1': '@nuxt/test-utils@3.13.1':
resolution: {integrity: sha512-VRLNcDz9Ad/4pjHdNRVLPs5DVIO5IJ0ij81PLmsE/lt+5oeeIQld+AgHgcqM4BM1YKsXTBuavbk1mEBqj7h/+A==} resolution: {integrity: sha512-rqNnjArhFUU8qMHtpEZzjfF6fGTzeXxZsreNLUy9X5AoUuS37HgnobNJIirTrA0xzlzitKVm/mB9r4gXZGzWdQ==}
engines: {node: ^14.18.0 || >=16.10.0} engines: {node: '>=18.20.2'}
peerDependencies: peerDependencies:
'@cucumber/cucumber': ^10.3.1 '@cucumber/cucumber': ^10.3.1
'@jest/globals': ^29.5.0 '@jest/globals': ^29.5.0
'@playwright/test': ^1.42.1 '@playwright/test': ^1.43.1
'@testing-library/vue': ^7.0.0 || ^8.0.1 '@testing-library/vue': ^7.0.0 || ^8.0.1
'@vitest/ui': ^0.34.6 || ^1.0.0 '@vitest/ui': ^0.34.6 || ^1.0.0
'@vue/test-utils': ^2.4.2 '@vue/test-utils': ^2.4.2
h3: '*' h3: '*'
happy-dom: ^9.10.9 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 happy-dom: ^9.10.9 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0
jsdom: ^22.0.0 || ^23.0.0 || ^24.0.0 jsdom: ^22.0.0 || ^23.0.0 || ^24.0.0
playwright-core: ^1.34.3 nitropack: '*'
playwright-core: ^1.43.1
vite: 5.2.11 vite: 5.2.11
vitest: ^0.34.6 || ^1.0.0 vitest: ^0.34.6 || ^1.0.0
vue: 3.4.27 vue: 3.4.27
@ -2443,9 +2440,6 @@ packages:
'@types/node-sass@4.11.6': '@types/node-sass@4.11.6':
resolution: {integrity: sha512-Qkf5Fs9zzsXchenUY7oVdIHyv8FtPgqIXqOJzhh3FDqpYjqvc/gtZ3hlZVFmKQhl7wyI4+WkRbYufYC5pfY7iw==} resolution: {integrity: sha512-Qkf5Fs9zzsXchenUY7oVdIHyv8FtPgqIXqOJzhh3FDqpYjqvc/gtZ3hlZVFmKQhl7wyI4+WkRbYufYC5pfY7iw==}
'@types/node@20.12.10':
resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==}
'@types/node@20.12.12': '@types/node@20.12.12':
resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
@ -2531,14 +2525,6 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/scope-manager@7.7.1':
resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/scope-manager@7.8.0':
resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/scope-manager@7.9.0': '@typescript-eslint/scope-manager@7.9.0':
resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==} resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
@ -2553,36 +2539,10 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/types@7.7.1':
resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/types@7.8.0':
resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/types@7.9.0': '@typescript-eslint/types@7.9.0':
resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==} resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.7.1':
resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/typescript-estree@7.8.0':
resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
'@typescript-eslint/typescript-estree@7.9.0': '@typescript-eslint/typescript-estree@7.9.0':
resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==} resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
@ -2592,32 +2552,12 @@ packages:
typescript: typescript:
optional: true optional: true
'@typescript-eslint/utils@7.7.1':
resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/utils@7.8.0':
resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/utils@7.9.0': '@typescript-eslint/utils@7.9.0':
resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==} resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: ^8.56.0 eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.7.1':
resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/visitor-keys@7.8.0':
resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/visitor-keys@7.9.0': '@typescript-eslint/visitor-keys@7.9.0':
resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==} resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
engines: {node: ^18.18.0 || >=20.0.0} engines: {node: ^18.18.0 || >=20.0.0}
@ -5514,10 +5454,6 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'} engines: {node: '>=8'}
npm-run-path@5.1.0:
resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
npm-run-path@5.3.0: npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@ -7716,7 +7652,7 @@ snapshots:
dependencies: dependencies:
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
'@types/estree': 1.0.5 '@types/estree': 1.0.5
'@typescript-eslint/types': 7.8.0 '@typescript-eslint/types': 7.9.0
comment-parser: 1.4.1 comment-parser: 1.4.1
esquery: 1.5.0 esquery: 1.5.0
jsdoc-type-pratt-parser: 4.0.0 jsdoc-type-pratt-parser: 4.0.0
@ -8001,20 +7937,6 @@ snapshots:
'@eslint-community/regexpp@4.10.0': {} '@eslint-community/regexpp@4.10.0': {}
'@eslint/eslintrc@3.0.2':
dependencies:
ajv: 6.12.6
debug: 4.3.4
espree: 10.0.1
globals: 14.0.0
ignore: 5.3.1
import-fresh: 3.3.0
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
'@eslint/eslintrc@3.1.0': '@eslint/eslintrc@3.1.0':
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
@ -8249,13 +8171,13 @@ snapshots:
'@nuxt/devalue@2.0.2': {} '@nuxt/devalue@2.0.2': {}
'@nuxt/devtools-kit@1.3.1(nuxt@packages+nuxt)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))': '@nuxt/devtools-kit@1.3.1(nuxt@packages+nuxt)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))':
dependencies: dependencies:
'@nuxt/kit': link:packages/kit '@nuxt/kit': link:packages/kit
'@nuxt/schema': link:packages/schema '@nuxt/schema': link:packages/schema
execa: 7.2.0 execa: 7.2.0
nuxt: link:packages/nuxt nuxt: link:packages/nuxt
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
'@nuxt/devtools-wizard@1.3.1': '@nuxt/devtools-wizard@1.3.1':
dependencies: dependencies:
@ -8270,14 +8192,14 @@ snapshots:
rc9: 2.1.2 rc9: 2.1.2
semver: 7.6.2 semver: 7.6.2
'@nuxt/devtools@1.3.1(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(nuxt@packages+nuxt)(rollup@4.17.2)(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))': '@nuxt/devtools@1.3.1(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(nuxt@packages+nuxt)(rollup@4.17.2)(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
'@antfu/utils': 0.7.8 '@antfu/utils': 0.7.8
'@nuxt/devtools-kit': 1.3.1(nuxt@packages+nuxt)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)) '@nuxt/devtools-kit': 1.3.1(nuxt@packages+nuxt)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
'@nuxt/devtools-wizard': 1.3.1 '@nuxt/devtools-wizard': 1.3.1
'@nuxt/kit': link:packages/kit '@nuxt/kit': link:packages/kit
'@vue/devtools-applet': 7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-applet': 7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-core': 7.1.3(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-core': 7.1.3(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5))
birpc: 0.2.17 birpc: 0.2.17
consola: 3.2.3 consola: 3.2.3
@ -8307,9 +8229,9 @@ snapshots:
simple-git: 3.24.0 simple-git: 3.24.0
sirv: 2.0.4 sirv: 2.0.4
unimport: 3.7.1(rollup@4.17.2) unimport: 3.7.1(rollup@4.17.2)
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
vite-plugin-inspect: 0.8.4(@nuxt/kit@packages+kit)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)) vite-plugin-inspect: 0.8.4(@nuxt/kit@packages+kit)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
vite-plugin-vue-inspector: 5.1.0(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)) vite-plugin-vue-inspector: 5.1.0(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
which: 3.0.1 which: 3.0.1
ws: 8.17.0 ws: 8.17.0
transitivePeerDependencies: transitivePeerDependencies:
@ -8396,7 +8318,7 @@ snapshots:
rc9: 2.1.2 rc9: 2.1.2
std-env: 3.7.0 std-env: 3.7.0
'@nuxt/test-utils@3.12.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))': '@nuxt/test-utils@3.13.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
'@nuxt/kit': link:packages/kit '@nuxt/kit': link:packages/kit
'@nuxt/schema': link:packages/schema '@nuxt/schema': link:packages/schema
@ -8411,6 +8333,7 @@ snapshots:
h3: 1.11.1 h3: 1.11.1
local-pkg: 0.5.0 local-pkg: 0.5.0
magic-string: 0.30.10 magic-string: 0.30.10
nitropack: 2.9.6(encoding@0.1.13)
node-fetch-native: 1.6.4 node-fetch-native: 1.6.4
ofetch: 1.3.4 ofetch: 1.3.4
pathe: 1.1.2 pathe: 1.1.2
@ -8422,7 +8345,7 @@ snapshots:
unenv: 1.9.0 unenv: 1.9.0
unplugin: 1.10.1 unplugin: 1.10.1
vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
vitest-environment-nuxt: 1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)) vitest-environment-nuxt: 1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
vue: 3.4.27(typescript@5.4.5) vue: 3.4.27(typescript@5.4.5)
vue-router: 4.3.2(vue@3.4.27(typescript@5.4.5)) vue-router: 4.3.2(vue@3.4.27(typescript@5.4.5))
optionalDependencies: optionalDependencies:
@ -8753,7 +8676,7 @@ snapshots:
'@stylistic/eslint-plugin-plus@2.1.0(eslint@9.3.0)(typescript@5.4.5)': '@stylistic/eslint-plugin-plus@2.1.0(eslint@9.3.0)(typescript@5.4.5)':
dependencies: dependencies:
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
'@typescript-eslint/utils': 7.8.0(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.3.0)(typescript@5.4.5)
eslint: 9.3.0 eslint: 9.3.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -8763,7 +8686,7 @@ snapshots:
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.1.0(eslint@9.3.0) '@stylistic/eslint-plugin-js': 2.1.0(eslint@9.3.0)
'@types/eslint': 8.56.10 '@types/eslint': 8.56.10
'@typescript-eslint/utils': 7.8.0(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.3.0)(typescript@5.4.5)
eslint: 9.3.0 eslint: 9.3.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -8850,7 +8773,7 @@ snapshots:
'@types/fs-extra@11.0.4': '@types/fs-extra@11.0.4':
dependencies: dependencies:
'@types/jsonfile': 6.1.2 '@types/jsonfile': 6.1.2
'@types/node': 20.12.10 '@types/node': 20.12.12
'@types/hash-sum@1.0.2': {} '@types/hash-sum@1.0.2': {}
@ -8900,10 +8823,6 @@ snapshots:
dependencies: dependencies:
'@types/node': 20.12.12 '@types/node': 20.12.12
'@types/node@20.12.10':
dependencies:
undici-types: 5.26.5
'@types/node@20.12.12': '@types/node@20.12.12':
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
@ -8920,7 +8839,7 @@ snapshots:
'@types/sass-loader@8.0.8': '@types/sass-loader@8.0.8':
dependencies: dependencies:
'@types/node': 20.12.10 '@types/node': 20.12.12
'@types/node-sass': 4.11.6 '@types/node-sass': 4.11.6
'@types/webpack': 4.41.34 '@types/webpack': 4.41.34
sass: 1.69.4 sass: 1.69.4
@ -8943,7 +8862,7 @@ snapshots:
'@types/webpack-bundle-analyzer@4.7.0': '@types/webpack-bundle-analyzer@4.7.0':
dependencies: dependencies:
'@types/node': 20.12.10 '@types/node': 20.12.12
tapable: 2.2.1 tapable: 2.2.1
webpack: 5.91.0 webpack: 5.91.0
transitivePeerDependencies: transitivePeerDependencies:
@ -9019,16 +8938,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@7.7.1':
dependencies:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/visitor-keys': 7.7.1
'@typescript-eslint/scope-manager@7.8.0':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
'@typescript-eslint/scope-manager@7.9.0': '@typescript-eslint/scope-manager@7.9.0':
dependencies: dependencies:
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
@ -9046,42 +8955,8 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@7.7.1': {}
'@typescript-eslint/types@7.8.0': {}
'@typescript-eslint/types@7.9.0': {} '@typescript-eslint/types@7.9.0': {}
'@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/visitor-keys': 7.7.1
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)': '@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)':
dependencies: dependencies:
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
@ -9097,34 +8972,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@7.7.1(eslint@9.3.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.7.1
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
eslint: 9.3.0
semver: 7.6.2
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/utils@7.8.0(eslint@9.3.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
eslint: 9.3.0
semver: 7.6.2
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/utils@7.9.0(eslint@9.3.0)(typescript@5.4.5)': '@typescript-eslint/utils@7.9.0(eslint@9.3.0)(typescript@5.4.5)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0)
@ -9136,16 +8983,6 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@typescript-eslint/visitor-keys@7.7.1':
dependencies:
'@typescript-eslint/types': 7.7.1
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@7.8.0':
dependencies:
'@typescript-eslint/types': 7.8.0
eslint-visitor-keys: 3.4.3
'@typescript-eslint/visitor-keys@7.9.0': '@typescript-eslint/visitor-keys@7.9.0':
dependencies: dependencies:
'@typescript-eslint/types': 7.9.0 '@typescript-eslint/types': 7.9.0
@ -9186,16 +9023,6 @@ snapshots:
unhead: 1.9.10 unhead: 1.9.10
vue: 3.4.27(typescript@5.4.5) vue: 3.4.27(typescript@5.4.5)
'@unocss/astro@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))':
dependencies:
'@unocss/core': 0.60.2
'@unocss/reset': 0.60.2
'@unocss/vite': 0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))
optionalDependencies:
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
transitivePeerDependencies:
- rollup
'@unocss/astro@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))': '@unocss/astro@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))':
dependencies: dependencies:
'@unocss/core': 0.60.2 '@unocss/core': 0.60.2
@ -9333,22 +9160,6 @@ snapshots:
dependencies: dependencies:
'@unocss/core': 0.60.2 '@unocss/core': 0.60.2
'@unocss/vite@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))':
dependencies:
'@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0(rollup@4.17.2)
'@unocss/config': 0.60.2
'@unocss/core': 0.60.2
'@unocss/inspector': 0.60.2
'@unocss/scope': 0.60.2
'@unocss/transformer-directives': 0.60.2
chokidar: 3.6.0
fast-glob: 3.3.2
magic-string: 0.30.10
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
transitivePeerDependencies:
- rollup
'@unocss/vite@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))': '@unocss/vite@0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
@ -9393,11 +9204,6 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))':
dependencies:
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
vue: 3.4.27(typescript@5.4.5)
'@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))': '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
@ -9563,12 +9369,12 @@ snapshots:
'@vue/devtools-api@6.5.1': {} '@vue/devtools-api@6.5.1': {}
'@vue/devtools-applet@7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))': '@vue/devtools-applet@7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
'@vue/devtools-core': 7.1.3(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-core': 7.1.3(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.1.3 '@vue/devtools-shared': 7.1.3
'@vue/devtools-ui': 7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-ui': 7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vue@3.4.27(typescript@5.4.5))
lodash-es: 4.17.21 lodash-es: 4.17.21
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
shiki: 1.3.0 shiki: 1.3.0
@ -9593,14 +9399,14 @@ snapshots:
- unocss - unocss
- vite - vite
'@vue/devtools-core@7.1.3(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))': '@vue/devtools-core@7.1.3(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
'@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5)) '@vue/devtools-kit': 7.1.3(vue@3.4.27(typescript@5.4.5))
'@vue/devtools-shared': 7.1.3 '@vue/devtools-shared': 7.1.3
mitt: 3.0.1 mitt: 3.0.1
nanoid: 3.3.7 nanoid: 3.3.7
pathe: 1.1.2 pathe: 1.1.2
vite-hot-client: 0.2.3(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)) vite-hot-client: 0.2.3(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
transitivePeerDependencies: transitivePeerDependencies:
- vite - vite
- vue - vue
@ -9618,7 +9424,7 @@ snapshots:
dependencies: dependencies:
rfdc: 1.3.1 rfdc: 1.3.1
'@vue/devtools-ui@7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)))(vue@3.4.27(typescript@5.4.5))': '@vue/devtools-ui@7.1.3(@unocss/reset@0.60.2)(floating-vue@5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)))(unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)))(vue@3.4.27(typescript@5.4.5))':
dependencies: dependencies:
'@unocss/reset': 0.60.2 '@unocss/reset': 0.60.2
'@vue/devtools-shared': 7.1.3 '@vue/devtools-shared': 7.1.3
@ -9628,7 +9434,7 @@ snapshots:
colord: 2.9.3 colord: 2.9.3
floating-vue: 5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5)) floating-vue: 5.2.2(@nuxt/kit@packages+kit)(vue@3.4.27(typescript@5.4.5))
focus-trap: 7.5.4 focus-trap: 7.5.4
unocss: 0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)) unocss: 0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
vue: 3.4.27(typescript@5.4.5) vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies: transitivePeerDependencies:
- '@vue/composition-api' - '@vue/composition-api'
@ -10849,7 +10655,7 @@ snapshots:
eslint-plugin-import-x@0.5.0(eslint@9.3.0)(typescript@5.4.5): eslint-plugin-import-x@0.5.0(eslint@9.3.0)(typescript@5.4.5):
dependencies: dependencies:
'@typescript-eslint/utils': 7.8.0(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.3.0)(typescript@5.4.5)
debug: 4.3.4 debug: 4.3.4
doctrine: 3.0.0 doctrine: 3.0.0
eslint: 9.3.0 eslint: 9.3.0
@ -10881,7 +10687,7 @@ snapshots:
eslint-plugin-perfectionist@2.10.0(eslint@9.3.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.3.0)): eslint-plugin-perfectionist@2.10.0(eslint@9.3.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@9.3.0)):
dependencies: dependencies:
'@typescript-eslint/utils': 7.7.1(eslint@9.3.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.9.0(eslint@9.3.0)(typescript@5.4.5)
eslint: 9.3.0 eslint: 9.3.0
minimatch: 9.0.4 minimatch: 9.0.4
natural-compare-lite: 1.4.0 natural-compare-lite: 1.4.0
@ -10906,7 +10712,7 @@ snapshots:
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.24.5 '@babel/helper-validator-identifier': 7.24.5
'@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0) '@eslint-community/eslint-utils': 4.4.0(eslint@9.3.0)
'@eslint/eslintrc': 3.0.2 '@eslint/eslintrc': 3.1.0
ci-info: 4.0.0 ci-info: 4.0.0
clean-regexp: 1.0.0 clean-regexp: 1.0.0
core-js-compat: 3.37.1 core-js-compat: 3.37.1
@ -11072,7 +10878,7 @@ snapshots:
human-signals: 5.0.0 human-signals: 5.0.0
is-stream: 3.0.0 is-stream: 3.0.0
merge-stream: 2.0.0 merge-stream: 2.0.0
npm-run-path: 5.1.0 npm-run-path: 5.3.0
onetime: 6.0.0 onetime: 6.0.0
signal-exit: 4.1.0 signal-exit: 4.1.0
strip-final-newline: 3.0.0 strip-final-newline: 3.0.0
@ -12824,10 +12630,6 @@ snapshots:
dependencies: dependencies:
path-key: 3.1.1 path-key: 3.1.1
npm-run-path@5.1.0:
dependencies:
path-key: 4.0.0
npm-run-path@5.3.0: npm-run-path@5.3.0:
dependencies: dependencies:
path-key: 4.0.0 path-key: 4.0.0
@ -12859,7 +12661,7 @@ snapshots:
pathe: 1.1.2 pathe: 1.1.2
picocolors: 1.0.0 picocolors: 1.0.0
remark-parse: 11.0.0 remark-parse: 11.0.0
shiki: 1.1.6 shiki: 1.3.0
twoslash: 0.2.4(typescript@5.4.5) twoslash: 0.2.4(typescript@5.4.5)
typescript: 5.4.5 typescript: 5.4.5
unified: 11.0.4 unified: 11.0.4
@ -14358,35 +14160,6 @@ snapshots:
universalify@2.0.0: {} universalify@2.0.0: {}
unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)):
dependencies:
'@unocss/astro': 0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))
'@unocss/cli': 0.60.2(rollup@4.17.2)
'@unocss/core': 0.60.2
'@unocss/extractor-arbitrary-variants': 0.60.2
'@unocss/postcss': 0.60.2(postcss@8.4.38)
'@unocss/preset-attributify': 0.60.2
'@unocss/preset-icons': 0.60.2
'@unocss/preset-mini': 0.60.2
'@unocss/preset-tagify': 0.60.2
'@unocss/preset-typography': 0.60.2
'@unocss/preset-uno': 0.60.2
'@unocss/preset-web-fonts': 0.60.2
'@unocss/preset-wind': 0.60.2
'@unocss/reset': 0.60.2
'@unocss/transformer-attributify-jsx': 0.60.2
'@unocss/transformer-attributify-jsx-babel': 0.60.2
'@unocss/transformer-compile-class': 0.60.2
'@unocss/transformer-directives': 0.60.2
'@unocss/transformer-variant-group': 0.60.2
'@unocss/vite': 0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0))
optionalDependencies:
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
transitivePeerDependencies:
- postcss
- rollup
- supports-color
unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)): unocss@0.60.2(postcss@8.4.38)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)):
dependencies: dependencies:
'@unocss/astro': 0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)) '@unocss/astro': 0.60.2(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))
@ -14542,9 +14315,9 @@ snapshots:
unist-util-stringify-position: 4.0.0 unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2 vfile-message: 4.0.2
vite-hot-client@0.2.3(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)): vite-hot-client@0.2.3(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)):
dependencies: dependencies:
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
vite-node@1.5.3(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0): vite-node@1.5.3(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0):
dependencies: dependencies:
@ -14563,23 +14336,6 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-node@1.6.0(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0):
dependencies:
cac: 6.7.14
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
transitivePeerDependencies:
- '@types/node'
- less
- lightningcss
- sass
- stylus
- sugarss
- supports-color
- terser
vite-node@1.6.0(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0): vite-node@1.6.0(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
@ -14621,7 +14377,7 @@ snapshots:
typescript: 5.4.5 typescript: 5.4.5
vue-tsc: 2.0.19(typescript@5.4.5) vue-tsc: 2.0.19(typescript@5.4.5)
vite-plugin-inspect@0.8.4(@nuxt/kit@packages+kit)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)): vite-plugin-inspect@0.8.4(@nuxt/kit@packages+kit)(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)):
dependencies: dependencies:
'@antfu/utils': 0.7.8 '@antfu/utils': 0.7.8
'@rollup/pluginutils': 5.1.0(rollup@4.17.2) '@rollup/pluginutils': 5.1.0(rollup@4.17.2)
@ -14632,14 +14388,14 @@ snapshots:
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
picocolors: 1.0.0 picocolors: 1.0.0
sirv: 2.0.4 sirv: 2.0.4
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
optionalDependencies: optionalDependencies:
'@nuxt/kit': link:packages/kit '@nuxt/kit': link:packages/kit
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
vite-plugin-vue-inspector@5.1.0(vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)): vite-plugin-vue-inspector@5.1.0(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)):
dependencies: dependencies:
'@babel/core': 7.24.5 '@babel/core': 7.24.5
'@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.24.5) '@babel/plugin-proposal-decorators': 7.23.2(@babel/core@7.24.5)
@ -14650,21 +14406,10 @@ snapshots:
'@vue/compiler-dom': 3.4.27 '@vue/compiler-dom': 3.4.27
kolorist: 1.8.0 kolorist: 1.8.0
magic-string: 0.30.10 magic-string: 0.30.10
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0) vite: 5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite@5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.17.2
optionalDependencies:
'@types/node': 20.12.10
fsevents: 2.3.3
sass: 1.69.4
terser: 5.27.0
vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0): vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0):
dependencies: dependencies:
esbuild: 0.20.2 esbuild: 0.20.2
@ -14676,9 +14421,9 @@ snapshots:
sass: 1.69.4 sass: 1.69.4
terser: 5.27.0 terser: 5.27.0
vitest-environment-nuxt@1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)): vitest-environment-nuxt@1.0.0(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)):
dependencies: dependencies:
'@nuxt/test-utils': 3.12.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5)) '@nuxt/test-utils': 3.13.1(@testing-library/vue@8.1.0(@vue/compiler-sfc@3.4.27)(vue@3.4.27(typescript@5.4.5)))(@vue/test-utils@2.4.6)(h3@1.11.1)(happy-dom@14.11.0)(nitropack@2.9.6(encoding@0.1.13))(playwright-core@1.44.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.69.4)(terser@5.27.0))(vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0))(vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies: transitivePeerDependencies:
- '@cucumber/cucumber' - '@cucumber/cucumber'
- '@jest/globals' - '@jest/globals'
@ -14689,6 +14434,7 @@ snapshots:
- h3 - h3
- happy-dom - happy-dom
- jsdom - jsdom
- nitropack
- playwright-core - playwright-core
- vite - vite
- vitest - vitest
@ -14729,40 +14475,6 @@ snapshots:
- supports-color - supports-color
- terser - terser
vitest@1.6.0(@types/node@20.12.10)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0):
dependencies:
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
'@vitest/snapshot': 1.6.0
'@vitest/spy': 1.6.0
'@vitest/utils': 1.6.0
acorn-walk: 8.3.2
chai: 4.3.10
debug: 4.3.4
execa: 8.0.1
local-pkg: 0.5.0
magic-string: 0.30.10
pathe: 1.1.2
picocolors: 1.0.0
std-env: 3.7.0
strip-literal: 2.1.0
tinybench: 2.5.1
tinypool: 0.8.4
vite: 5.2.11(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
vite-node: 1.6.0(@types/node@20.12.10)(sass@1.69.4)(terser@5.27.0)
why-is-node-running: 2.2.2
optionalDependencies:
'@types/node': 20.12.10
happy-dom: 14.11.0
transitivePeerDependencies:
- less
- lightningcss
- sass
- stylus
- sugarss
- supports-color
- terser
vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0): vitest@1.6.0(@types/node@20.12.12)(happy-dom@14.11.0)(sass@1.69.4)(terser@5.27.0):
dependencies: dependencies:
'@vitest/expect': 1.6.0 '@vitest/expect': 1.6.0

View File

@ -30,22 +30,22 @@ await setup({
describe('server api', () => { describe('server api', () => {
it('should serialize', async () => { it('should serialize', async () => {
expect(await $fetch('/api/hello')).toBe('Hello API') expect(await $fetch<string>('/api/hello')).toBe('Hello API')
expect(await $fetch('/api/hey')).toEqual({ expect(await $fetch<string>('/api/hey')).toEqual({
foo: 'bar', foo: 'bar',
baz: 'qux', baz: 'qux',
}) })
}) })
it('should preserve states', async () => { it('should preserve states', async () => {
expect(await $fetch('/api/counter')).toEqual({ count: 0 }) expect(await $fetch<string>('/api/counter')).toEqual({ count: 0 })
expect(await $fetch('/api/counter')).toEqual({ count: 1 }) expect(await $fetch<string>('/api/counter')).toEqual({ count: 1 })
expect(await $fetch('/api/counter')).toEqual({ count: 2 }) expect(await $fetch<string>('/api/counter')).toEqual({ count: 2 })
expect(await $fetch('/api/counter')).toEqual({ count: 3 }) expect(await $fetch<string>('/api/counter')).toEqual({ count: 3 })
}) })
it('should auto-import', async () => { it('should auto-import', async () => {
const res = await $fetch('/api/auto-imports') const res = await $fetch<string>('/api/auto-imports')
expect(res).toMatchInlineSnapshot(` expect(res).toMatchInlineSnapshot(`
{ {
"autoImported": "utils", "autoImported": "utils",
@ -58,7 +58,7 @@ describe('server api', () => {
describe('route rules', () => { describe('route rules', () => {
it('should enable spa mode', async () => { it('should enable spa mode', async () => {
const headHtml = await $fetch('/route-rules/spa') const headHtml = await $fetch<string>('/route-rules/spa')
// SPA should render appHead tags // SPA should render appHead tags
expect(headHtml).toContain('<meta name="description" content="Nuxt Fixture">') expect(headHtml).toContain('<meta name="description" content="Nuxt Fixture">')
@ -74,7 +74,7 @@ describe('route rules', () => {
}) })
it('should not render loading template in spa mode if it is not enabled', async () => { it('should not render loading template in spa mode if it is not enabled', async () => {
const html = await $fetch('/route-rules/spa') const html = await $fetch<string>('/route-rules/spa')
expect(html).toContain('<div id="__nuxt"></div>') expect(html).toContain('<div id="__nuxt"></div>')
}) })
@ -85,26 +85,26 @@ describe('route rules', () => {
}) })
it('test noScript routeRules', async () => { it('test noScript routeRules', async () => {
const html = await $fetch('/no-scripts') const html = await $fetch<string>('/no-scripts')
expect(html).not.toContain('<script') expect(html).not.toContain('<script')
}) })
it.runIf(isTestingAppManifest)('should run middleware defined in routeRules config', async () => { it.runIf(isTestingAppManifest)('should run middleware defined in routeRules config', async () => {
const html = await $fetch('/route-rules/middleware') const html = await $fetch<string>('/route-rules/middleware')
expect(html).toContain('Hello from routeRules!') expect(html).toContain('Hello from routeRules!')
}) })
}) })
describe('modules', () => { describe('modules', () => {
it('should auto-register modules in ~/modules', async () => { it('should auto-register modules in ~/modules', async () => {
const result = await $fetch('/auto-registered-module') const result = await $fetch<string>('/auto-registered-module')
expect(result).toEqual('handler added by auto-registered module') expect(result).toEqual('handler added by auto-registered module')
}) })
}) })
describe('pages', () => { describe('pages', () => {
it('render index', async () => { it('render index', async () => {
const html = await $fetch('/') const html = await $fetch<string>('/')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -137,7 +137,7 @@ describe('pages', () => {
// TODO: support jsx with webpack // TODO: support jsx with webpack
it.runIf(!isWebpack)('supports jsx', async () => { it.runIf(!isWebpack)('supports jsx', async () => {
const html = await $fetch('/jsx') const html = await $fetch<string>('/jsx')
// should import JSX/TSX components with custom elements // should import JSX/TSX components with custom elements
expect(html).toContain('TSX component') expect(html).toContain('TSX component')
@ -146,7 +146,7 @@ describe('pages', () => {
}) })
it('respects aliases in page metadata', async () => { it('respects aliases in page metadata', async () => {
const html = await $fetch('/some-alias') const html = await $fetch<string>('/some-alias')
expect(html).toContain('Hello Nuxt 3!') expect(html).toContain('Hello Nuxt 3!')
}) })
@ -156,7 +156,7 @@ describe('pages', () => {
}) })
it('allows routes to be added dynamically', async () => { it('allows routes to be added dynamically', async () => {
const html = await $fetch('/add-route-test') const html = await $fetch<string>('/add-route-test')
expect(html).toContain('Hello Nuxt 3!') expect(html).toContain('Hello Nuxt 3!')
}) })
@ -218,7 +218,7 @@ describe('pages', () => {
}) })
it('preserves query', async () => { it('preserves query', async () => {
const html = await $fetch('/?test=true') const html = await $fetch<string>('/?test=true')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -230,7 +230,7 @@ describe('pages', () => {
}) })
it('/nested/[foo]/[bar].vue', async () => { it('/nested/[foo]/[bar].vue', async () => {
const html = await $fetch('/nested/one/two') const html = await $fetch<string>('/nested/one/two')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -241,10 +241,10 @@ describe('pages', () => {
}) })
it('/nested/[foo]/index.vue', async () => { it('/nested/[foo]/index.vue', async () => {
const html = await $fetch('/nested/foobar') const html = await $fetch<string>('/nested/foobar')
// TODO: should resolved to same entry // TODO: should resolved to same entry
// const html2 = await $fetch('/nested/foobar/index') // const html2 = await $fetch<string>('/nested/foobar/index')
// expect(html).toEqual(html2) // expect(html).toEqual(html2)
// Snapshot // Snapshot
@ -257,7 +257,7 @@ describe('pages', () => {
}) })
it('/nested/[foo]/user-[group].vue', async () => { it('/nested/[foo]/user-[group].vue', async () => {
const html = await $fetch('/nested/foobar/user-admin') const html = await $fetch<string>('/nested/foobar/user-admin')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -270,14 +270,14 @@ describe('pages', () => {
}) })
it('/parent', async () => { it('/parent', async () => {
const html = await $fetch('/parent') const html = await $fetch<string>('/parent')
expect(html).toContain('parent/index') expect(html).toContain('parent/index')
await expectNoClientErrors('/parent') await expectNoClientErrors('/parent')
}) })
it('/another-parent', async () => { it('/another-parent', async () => {
const html = await $fetch('/another-parent') const html = await $fetch<string>('/another-parent')
expect(html).toContain('another-parent/index') expect(html).toContain('another-parent/index')
await expectNoClientErrors('/another-parent') await expectNoClientErrors('/another-parent')
@ -302,7 +302,7 @@ describe('pages', () => {
}) })
it('/client-only-components', async () => { it('/client-only-components', async () => {
const html = await $fetch('/client-only-components') const html = await $fetch<string>('/client-only-components')
// ensure fallbacks with classes and arbitrary attributes are rendered // ensure fallbacks with classes and arbitrary attributes are rendered
expect(html).toContain('<div class="client-only-script" foo="bar">') expect(html).toContain('<div class="client-only-script" foo="bar">')
expect(html).toContain('<div class="client-only-script-setup" foo="hello">') expect(html).toContain('<div class="client-only-script-setup" foo="hello">')
@ -407,7 +407,7 @@ describe('pages', () => {
}) })
it('/client-only-explicit-import', async () => { it('/client-only-explicit-import', async () => {
const html = await $fetch('/client-only-explicit-import') const html = await $fetch<string>('/client-only-explicit-import')
// ensure fallbacks with classes and arbitrary attributes are rendered // ensure fallbacks with classes and arbitrary attributes are rendered
expect(html).toContain('<div class="client-only-script" foo="bar">') expect(html).toContain('<div class="client-only-script" foo="bar">')
@ -439,7 +439,7 @@ describe('pages', () => {
'clientfallback-stateful', 'clientfallback-stateful',
'clientfallback-async-setup', 'clientfallback-async-setup',
] ]
const html = await $fetch('/client-fallback') const html = await $fetch<string>('/client-fallback')
// ensure failed components are not rendered server-side // ensure failed components are not rendered server-side
expect(html).not.toContain('This breaks in server-side setup.') expect(html).not.toContain('This breaks in server-side setup.')
classes.forEach(c => expect(html).not.toContain(c)) classes.forEach(c => expect(html).not.toContain(c))
@ -546,7 +546,7 @@ describe('pages', () => {
describe('nuxt composables', () => { describe('nuxt composables', () => {
it('has useRequestURL()', async () => { it('has useRequestURL()', async () => {
const html = await $fetch('/url') const html = await $fetch<string>('/url')
expect(html).toContain('path: /url') expect(html).toContain('path: /url')
}) })
it('sets cookies correctly', async () => { it('sets cookies correctly', async () => {
@ -586,7 +586,7 @@ describe('nuxt composables', () => {
}) })
it('supports onPrehydrate', async () => { it('supports onPrehydrate', async () => {
const html = await $fetch('/composables/on-prehydrate') as string const html = await $fetch<string>('/composables/on-prehydrate') as string
/** /**
* Should look something like this: * Should look something like this:
* *
@ -670,7 +670,7 @@ describe('nuxt composables', () => {
describe('rich payloads', () => { describe('rich payloads', () => {
it('correctly serializes and revivifies complex types', async () => { it('correctly serializes and revivifies complex types', async () => {
const html = await $fetch('/json-payload') const html = await $fetch<string>('/json-payload')
for (const test of [ for (const test of [
'Date: true', 'Date: true',
'BigInt: true', 'BigInt: true',
@ -690,7 +690,7 @@ describe('rich payloads', () => {
describe('nuxt links', () => { describe('nuxt links', () => {
it('handles trailing slashes', async () => { it('handles trailing slashes', async () => {
const html = await $fetch('/nuxt-link/trailing-slash') const html = await $fetch<string>('/nuxt-link/trailing-slash')
const data: Record<string, string[]> = {} const data: Record<string, string[]> = {}
for (const selector of ['nuxt-link', 'router-link', 'link-with-trailing-slash', 'link-without-trailing-slash']) { for (const selector of ['nuxt-link', 'router-link', 'link-with-trailing-slash', 'link-without-trailing-slash']) {
data[selector] = [] data[selector] = []
@ -808,7 +808,7 @@ describe('nuxt links', () => {
}) })
it('useLink works', async () => { it('useLink works', async () => {
const html = await $fetch('/nuxt-link/use-link') const html = await $fetch<string>('/nuxt-link/use-link')
expect(html).toContain('<div>useLink in NuxtLink: true</div>') expect(html).toContain('<div>useLink in NuxtLink: true</div>')
expect(html).toContain('<div>route using useLink: /nuxt-link/trailing-slash</div>') expect(html).toContain('<div>route using useLink: /nuxt-link/trailing-slash</div>')
expect(html).toContain('<div>href using useLink: /nuxt-link/trailing-slash</div>') expect(html).toContain('<div>href using useLink: /nuxt-link/trailing-slash</div>')
@ -847,21 +847,21 @@ describe('nuxt links', () => {
describe('head tags', () => { describe('head tags', () => {
it('SSR should render tags', async () => { it('SSR should render tags', async () => {
const headHtml = await $fetch('/head') const headHtml = await $fetch<string>('/head')
expect(headHtml).toContain('<title>Using a dynamic component - Title Template Fn Change</title>') expect(headHtml).toContain('<title>Using a dynamic component - Title Template Fn Change</title>')
expect(headHtml).not.toContain('<meta name="description" content="first">') expect(headHtml).not.toContain('<meta name="description" content="first">')
expect(headHtml).toContain('<meta charset="utf-16">') expect(headHtml).toContain('<meta charset="utf-16">')
expect(headHtml.match('meta charset').length).toEqual(1) expect(headHtml.match('meta charset')!.length).toEqual(1)
expect(headHtml).toContain('<meta name="viewport" content="width=1024, initial-scale=1">') expect(headHtml).toContain('<meta name="viewport" content="width=1024, initial-scale=1">')
expect(headHtml.match('meta name="viewport"').length).toEqual(1) expect(headHtml.match('meta name="viewport"')!.length).toEqual(1)
expect(headHtml).not.toContain('<meta charset="utf-8">') expect(headHtml).not.toContain('<meta charset="utf-8">')
expect(headHtml).toContain('<meta name="description" content="overriding with an inline useHead call">') expect(headHtml).toContain('<meta name="description" content="overriding with an inline useHead call">')
expect(headHtml).toMatch(/<html[^>]*class="html-attrs-test"/) expect(headHtml).toMatch(/<html[^>]*class="html-attrs-test"/)
expect(headHtml).toMatch(/<body[^>]*class="body-attrs-test"/) expect(headHtml).toMatch(/<body[^>]*class="body-attrs-test"/)
expect(headHtml).toContain('<script src="https://a-body-appended-script.com"></script></body>') expect(headHtml).toContain('<script src="https://a-body-appended-script.com"></script></body>')
const indexHtml = await $fetch('/') const indexHtml = await $fetch<string>('/')
// should render charset by default // should render charset by default
expect(indexHtml).toContain('<meta charset="utf-8">') expect(indexHtml).toContain('<meta charset="utf-8">')
// should render <Head> components // should render <Head> components
@ -869,7 +869,7 @@ describe('head tags', () => {
}) })
it('SSR script setup should render tags', async () => { it('SSR script setup should render tags', async () => {
const headHtml = await $fetch('/head-script-setup') const headHtml = await $fetch<string>('/head-script-setup')
// useHead - title & titleTemplate are working // useHead - title & titleTemplate are working
expect(headHtml).toContain('<title>head script setup - Nuxt Playground</title>') expect(headHtml).toContain('<title>head script setup - Nuxt Playground</title>')
@ -885,7 +885,7 @@ describe('head tags', () => {
}) })
it.skipIf(isV4)('SPA should render appHead tags', async () => { it.skipIf(isV4)('SPA should render appHead tags', async () => {
const headHtml = await $fetch('/head', { headers: { 'x-nuxt-no-ssr': '1' } }) const headHtml = await $fetch<string>('/head', { headers: { 'x-nuxt-no-ssr': '1' } })
expect(headHtml).toContain('<meta name="description" content="Nuxt Fixture">') expect(headHtml).toContain('<meta name="description" content="Nuxt Fixture">')
expect(headHtml).toContain('<meta charset="utf-8">') expect(headHtml).toContain('<meta charset="utf-8">')
@ -893,26 +893,26 @@ describe('head tags', () => {
}) })
it.skipIf(isV4)('legacy vueuse/head works', async () => { it.skipIf(isV4)('legacy vueuse/head works', async () => {
const headHtml = await $fetch('/vueuse-head') const headHtml = await $fetch<string>('/vueuse-head')
expect(headHtml).toContain('<title>using provides usehead and updateDOM - VueUse head polyfill test</title>') expect(headHtml).toContain('<title>using provides usehead and updateDOM - VueUse head polyfill test</title>')
}) })
it('should render http-equiv correctly', async () => { it('should render http-equiv correctly', async () => {
const html = await $fetch('/head') const html = await $fetch<string>('/head')
// http-equiv should be rendered kebab case // http-equiv should be rendered kebab case
expect(html).toContain('<meta content="default-src https" http-equiv="content-security-policy">') expect(html).toContain('<meta content="default-src https" http-equiv="content-security-policy">')
}) })
// TODO: Doesn't adds header in test environment // TODO: Doesn't adds header in test environment
// it.todo('should render stylesheet link tag (SPA mode)', async () => { // it.todo('should render stylesheet link tag (SPA mode)', async () => {
// const html = await $fetch('/head', { headers: { 'x-nuxt-no-ssr': '1' } }) // const html = await $fetch<string>('/head', { headers: { 'x-nuxt-no-ssr': '1' } })
// expect(html).toMatch(/<link rel="stylesheet" href="\/_nuxt\/[^>]*.css"/) // expect(html).toMatch(/<link rel="stylesheet" href="\/_nuxt\/[^>]*.css"/)
// }) // })
}) })
describe('legacy async data', () => { describe('legacy async data', () => {
it('should work with defineNuxtComponent', async () => { it('should work with defineNuxtComponent', async () => {
const html = await $fetch('/legacy/async-data') const html = await $fetch<string>('/legacy/async-data')
expect(html).toContain('<div>Hello API</div>') expect(html).toContain('<div>Hello API</div>')
expect(html).toContain('<div>fooChild</div>') expect(html).toContain('<div>fooChild</div>')
expect(html).toContain('<div>fooParent</div>') expect(html).toContain('<div>fooParent</div>')
@ -978,12 +978,12 @@ describe('preserves current instance', () => {
// TODO: it's unclear why there's an error here but it must be an upstream issue // TODO: it's unclear why there's an error here but it must be an upstream issue
it.todo('should not return getCurrentInstance when there\'s an error in data', async () => { it.todo('should not return getCurrentInstance when there\'s an error in data', async () => {
await fetch('/instance/error') await fetch('/instance/error')
const html = await $fetch('/instance/next-request') const html = await $fetch<string>('/instance/next-request')
expect(html).toContain('This should be false: false') expect(html).toContain('This should be false: false')
}) })
// TODO: re-enable when https://github.com/nuxt/nuxt/issues/15164 is resolved // TODO: re-enable when https://github.com/nuxt/nuxt/issues/15164 is resolved
it.skipIf(isWindows)('should not lose current nuxt app after await in vue component', async () => { it.skipIf(isWindows)('should not lose current nuxt app after await in vue component', async () => {
const requests = await Promise.all(Array.from({ length: 100 }).map(() => $fetch('/instance/next-request'))) const requests = await Promise.all(Array.from({ length: 100 }).map(() => $fetch<string>('/instance/next-request')))
for (const html of requests) { for (const html of requests) {
expect(html).toContain('This should be true: true') expect(html).toContain('This should be true: true')
} }
@ -1035,7 +1035,7 @@ describe('errors', () => {
}) })
it('should not recursively throw an error when there is an error rendering the error page', async () => { it('should not recursively throw an error when there is an error rendering the error page', async () => {
const res = await $fetch('/', { const res = await $fetch<string>('/', {
headers: { headers: {
'x-test-recurse-error': 'true', 'x-test-recurse-error': 'true',
'accept': 'text/html', 'accept': 'text/html',
@ -1078,7 +1078,7 @@ describe('navigate external', () => {
describe('composables', () => { describe('composables', () => {
it('`callOnce` should run code once', async () => { it('`callOnce` should run code once', async () => {
const html = await $fetch('/once') const html = await $fetch<string>('/once')
expect(html).toContain('once.vue') expect(html).toContain('once.vue')
expect(html).toContain('once: 2') expect(html).toContain('once: 2')
@ -1088,11 +1088,11 @@ describe('composables', () => {
}) })
it('`useId` should generate unique ids', async () => { it('`useId` should generate unique ids', async () => {
// TODO: work around interesting Vue bug where async components are loaded in a different order on first import // TODO: work around interesting Vue bug where async components are loaded in a different order on first import
await $fetch('/use-id') await $fetch<string>('/use-id')
const sanitiseHTML = (html: string) => html.replace(/ data-[^= ]+="[^"]+"/g, '').replace(/<!--[[\]]-->/, '') const sanitiseHTML = (html: string) => html.replace(/ data-[^= ]+="[^"]+"/g, '').replace(/<!--[[\]]-->/, '')
const serverHTML = await $fetch('/use-id').then(html => sanitiseHTML(html.match(/<form.*<\/form>/)![0])) const serverHTML = await $fetch<string>('/use-id').then(html => sanitiseHTML(html.match(/<form.*<\/form>/)![0]))
const ids = serverHTML.match(/id="[^"]*"/g)?.map(id => id.replace(/id="([^"]*)"/, '$1')) as string[] const ids = serverHTML.match(/id="[^"]*"/g)?.map(id => id.replace(/id="([^"]*)"/, '$1')) as string[]
const renderedForm = [ const renderedForm = [
`<h2 id="${ids[0]}"> id: ${ids[0]}</h2><div><label for="${ids[1]}">Email</label><input id="${ids[1]}" name="email" type="email"><label for="${ids[2]}">Password</label><input id="${ids[2]}" name="password" type="password"></div>`, `<h2 id="${ids[0]}"> id: ${ids[0]}</h2><div><label for="${ids[1]}">Email</label><input id="${ids[1]}" name="email" type="email"><label for="${ids[2]}">Password</label><input id="${ids[2]}" name="password" type="password"></div>`,
@ -1130,7 +1130,7 @@ describe('composables', () => {
describe('middlewares', () => { describe('middlewares', () => {
it('should redirect to index with global middleware', async () => { it('should redirect to index with global middleware', async () => {
const html = await $fetch('/redirect/') const html = await $fetch<string>('/redirect/')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1148,7 +1148,7 @@ describe('middlewares', () => {
}) })
it('should allow aborting navigation fatally on client-side', async () => { it('should allow aborting navigation fatally on client-side', async () => {
const html = await $fetch('/middleware-abort') const html = await $fetch<string>('/middleware-abort')
expect(html).not.toContain('This is the error page') expect(html).not.toContain('This is the error page')
const { page } = await renderPage('/middleware-abort') const { page } = await renderPage('/middleware-abort')
expect(await page.innerHTML('body')).toContain('This is the error page') expect(await page.innerHTML('body')).toContain('This is the error page')
@ -1156,7 +1156,7 @@ describe('middlewares', () => {
}) })
it('should inject auth', async () => { it('should inject auth', async () => {
const html = await $fetch('/auth') const html = await $fetch<string>('/auth')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1166,7 +1166,7 @@ describe('middlewares', () => {
}) })
it('should not inject auth', async () => { it('should not inject auth', async () => {
const html = await $fetch('/no-auth') const html = await $fetch<string>('/no-auth')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1185,12 +1185,12 @@ describe('middlewares', () => {
describe('plugins', () => { describe('plugins', () => {
it('basic plugin', async () => { it('basic plugin', async () => {
const html = await $fetch('/plugins') const html = await $fetch<string>('/plugins')
expect(html).toContain('myPlugin: Injected by my-plugin') expect(html).toContain('myPlugin: Injected by my-plugin')
}) })
it('async plugin', async () => { it('async plugin', async () => {
const html = await $fetch('/plugins') const html = await $fetch<string>('/plugins')
expect(html).toContain('asyncPlugin: Async plugin works! 123') expect(html).toContain('asyncPlugin: Async plugin works! 123')
expect(html).toContain('useFetch works!') expect(html).toContain('useFetch works!')
}) })
@ -1198,7 +1198,7 @@ describe('plugins', () => {
describe('layouts', () => { describe('layouts', () => {
it('should apply custom layout', async () => { it('should apply custom layout', async () => {
const html = await $fetch('/with-layout') const html = await $fetch<string>('/with-layout')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1207,7 +1207,7 @@ describe('layouts', () => {
expect(html).toContain('Custom Layout:') expect(html).toContain('Custom Layout:')
}) })
it('should work with a dynamically set layout', async () => { it('should work with a dynamically set layout', async () => {
const html = await $fetch('/with-dynamic-layout') const html = await $fetch<string>('/with-dynamic-layout')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1217,7 +1217,7 @@ describe('layouts', () => {
await expectNoClientErrors('/with-dynamic-layout') await expectNoClientErrors('/with-dynamic-layout')
}) })
it('should work with a computed layout', async () => { it('should work with a computed layout', async () => {
const html = await $fetch('/with-computed-layout') const html = await $fetch<string>('/with-computed-layout')
// Snapshot // Snapshot
// expect(html).toMatchInlineSnapshot() // expect(html).toMatchInlineSnapshot()
@ -1227,7 +1227,7 @@ describe('layouts', () => {
await expectNoClientErrors('/with-computed-layout') await expectNoClientErrors('/with-computed-layout')
}) })
it('should allow passing custom props to a layout', async () => { it('should allow passing custom props to a layout', async () => {
const html = await $fetch('/layouts/with-props') const html = await $fetch<string>('/layouts/with-props')
expect(html).toContain('some prop was passed') expect(html).toContain('some prop was passed')
await expectNoClientErrors('/layouts/with-props') await expectNoClientErrors('/layouts/with-props')
}) })
@ -1235,7 +1235,7 @@ describe('layouts', () => {
describe('composable tree shaking', () => { describe('composable tree shaking', () => {
it('should work', async () => { it('should work', async () => {
const html = await $fetch('/tree-shake') const html = await $fetch<string>('/tree-shake')
expect(html).toContain('Tree Shake Example') expect(html).toContain('Tree Shake Example')
@ -1251,22 +1251,22 @@ describe('composable tree shaking', () => {
describe('ignore list', () => { describe('ignore list', () => {
it('should ignore composable files in .nuxtignore', async () => { it('should ignore composable files in .nuxtignore', async () => {
const html = await $fetch('/ignore/composables') const html = await $fetch<string>('/ignore/composables')
expect(html).toContain('was import ignored: true') expect(html).toContain('was import ignored: true')
}) })
it('should ignore scanned nitro handlers in .nuxtignore', async () => { it('should ignore scanned nitro handlers in .nuxtignore', async () => {
const html = await $fetch('/ignore/scanned') const html = await $fetch<string>('/ignore/scanned')
expect(html).not.toContain('this should be ignored') expect(html).not.toContain('this should be ignored')
}) })
it.skipIf(isDev())('should ignore public assets in .nuxtignore', async () => { it.skipIf(isDev())('should ignore public assets in .nuxtignore', async () => {
const html = await $fetch('/ignore/public-asset') const html = await $fetch<string>('/ignore/public-asset')
expect(html).not.toContain('this should be ignored') expect(html).not.toContain('this should be ignored')
}) })
}) })
describe('server tree shaking', () => { describe('server tree shaking', () => {
it('should work', async () => { it('should work', async () => {
const html = await $fetch('/client') const html = await $fetch<string>('/client')
expect(html).toContain('This page should not crash when rendered') expect(html).toContain('This page should not crash when rendered')
expect(html).toContain('fallback for ClientOnly') expect(html).toContain('fallback for ClientOnly')
@ -1287,13 +1287,13 @@ describe('server tree shaking', () => {
describe('extends support', () => { describe('extends support', () => {
describe('layouts & pages', () => { describe('layouts & pages', () => {
it('extends foo/layouts/default & foo/pages/index', async () => { it('extends foo/layouts/default & foo/pages/index', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('Extended layout from foo') expect(html).toContain('Extended layout from foo')
expect(html).toContain('Extended page from foo') expect(html).toContain('Extended page from foo')
}) })
it('extends [bar/layouts/override & bar/pages/override] over [foo/layouts/override & foo/pages/override]', async () => { it('extends [bar/layouts/override & bar/pages/override] over [foo/layouts/override & foo/pages/override]', async () => {
const html = await $fetch('/override') const html = await $fetch<string>('/override')
expect(html).toContain('Extended layout from bar') expect(html).toContain('Extended layout from bar')
expect(html).toContain('Extended page from bar') expect(html).toContain('Extended page from bar')
expect(html).toContain('This child page should not be overridden by bar') expect(html).toContain('This child page should not be overridden by bar')
@ -1302,62 +1302,62 @@ describe('extends support', () => {
describe('components', () => { describe('components', () => {
it('extends foo/components/ExtendsFoo', async () => { it('extends foo/components/ExtendsFoo', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('Extended component from foo') expect(html).toContain('Extended component from foo')
}) })
it('extends bar/components/ExtendsOverride over foo/components/ExtendsOverride', async () => { it('extends bar/components/ExtendsOverride over foo/components/ExtendsOverride', async () => {
const html = await $fetch('/override') const html = await $fetch<string>('/override')
expect(html).toContain('Extended component from bar') expect(html).toContain('Extended component from bar')
}) })
}) })
describe('middlewares', () => { describe('middlewares', () => {
it('works with layer aliases', async () => { it('works with layer aliases', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('from layer alias') expect(html).toContain('from layer alias')
}) })
it('extends foo/middleware/foo', async () => { it('extends foo/middleware/foo', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('Middleware | foo: Injected by extended middleware from foo') expect(html).toContain('Middleware | foo: Injected by extended middleware from foo')
}) })
it('extends bar/middleware/override over foo/middleware/override', async () => { it('extends bar/middleware/override over foo/middleware/override', async () => {
const html = await $fetch('/override') const html = await $fetch<string>('/override')
expect(html).toContain('Middleware | override: Injected by extended middleware from bar') expect(html).toContain('Middleware | override: Injected by extended middleware from bar')
}) })
it('global middlewares sorting', async () => { it('global middlewares sorting', async () => {
const html = await $fetch('/middleware/ordering') const html = await $fetch<string>('/middleware/ordering')
expect(html).toContain('catchall at middleware') expect(html).toContain('catchall at middleware')
}) })
}) })
describe('composables', () => { describe('composables', () => {
it('extends foo/composables/foo', async () => { it('extends foo/composables/foo', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('Composable | useExtendsFoo: foo') expect(html).toContain('Composable | useExtendsFoo: foo')
}) })
it('allows overriding composables', async () => { it('allows overriding composables', async () => {
const html = await $fetch('/extends') const html = await $fetch<string>('/extends')
expect(html).toContain('test from project') expect(html).toContain('test from project')
}) })
}) })
describe('plugins', () => { describe('plugins', () => {
it('extends foo/plugins/foo', async () => { it('extends foo/plugins/foo', async () => {
const html = await $fetch('/foo') const html = await $fetch<string>('/foo')
expect(html).toContain('Plugin | foo: String generated from foo plugin!') expect(html).toContain('Plugin | foo: String generated from foo plugin!')
}) })
it('respects plugin ordering within layers', async () => { it('respects plugin ordering within layers', async () => {
const html = await $fetch('/plugins/ordering') const html = await $fetch<string>('/plugins/ordering')
expect(html).toContain('catchall at plugins') expect(html).toContain('catchall at plugins')
}) })
}) })
describe('server', () => { describe('server', () => {
it('extends foo/server/api/foo', async () => { it('extends foo/server/api/foo', async () => {
expect(await $fetch('/api/foo')).toBe('foo') expect(await $fetch<string>('/api/foo')).toBe('foo')
}) })
it('extends foo/server/middleware/foo', async () => { it('extends foo/server/middleware/foo', async () => {
@ -1368,7 +1368,7 @@ describe('extends support', () => {
describe('app', () => { describe('app', () => {
it('extends foo/app/router.options & bar/app/router.options', async () => { it('extends foo/app/router.options & bar/app/router.options', async () => {
const html: string = await $fetch('/') const html: string = await $fetch<string>('/')
const routerLinkClasses = html.match(/href="\/" class="([^"]*)"/)?.[1].split(' ') const routerLinkClasses = html.match(/href="\/" class="([^"]*)"/)?.[1].split(' ')
expect(routerLinkClasses).toContain('foo-active-class') expect(routerLinkClasses).toContain('foo-active-class')
expect(routerLinkClasses).toContain('bar-exact-active-class') expect(routerLinkClasses).toContain('bar-exact-active-class')
@ -1607,7 +1607,7 @@ describe('layout switching', () => {
describe('automatically keyed composables', () => { describe('automatically keyed composables', () => {
it('should automatically generate keys', async () => { it('should automatically generate keys', async () => {
const html = await $fetch('/keyed-composables') const html = await $fetch<string>('/keyed-composables')
expect(html).toContain('true') expect(html).toContain('true')
expect(html).not.toContain('false') expect(html).not.toContain('false')
}) })
@ -1616,7 +1616,7 @@ describe('automatically keyed composables', () => {
}) })
it('should not automatically generate keys', async () => { it('should not automatically generate keys', async () => {
await expectNoClientErrors('/keyed-composables/local') await expectNoClientErrors('/keyed-composables/local')
const html = await $fetch('/keyed-composables/local') const html = await $fetch<string>('/keyed-composables/local')
expect(html).toContain('true') expect(html).toContain('true')
expect(html).not.toContain('false') expect(html).not.toContain('false')
}) })
@ -1624,7 +1624,7 @@ describe('automatically keyed composables', () => {
describe.runIf(isDev() && !isWebpack)('css links', () => { describe.runIf(isDev() && !isWebpack)('css links', () => {
it('should not inject links to CSS files that are inlined', async () => { it('should not inject links to CSS files that are inlined', async () => {
const html = await $fetch('/inline-only-css') const html = await $fetch<string>('/inline-only-css')
expect(html).toContain('--inline-only') expect(html).toContain('--inline-only')
expect(html).not.toContain('inline-only.css') expect(html).not.toContain('inline-only.css')
expect(html).toContain('assets/plugin.css') expect(html).toContain('assets/plugin.css')
@ -1648,7 +1648,7 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => {
] ]
it('should inline styles', async () => { it('should inline styles', async () => {
const html = await $fetch('/styles') const html = await $fetch<string>('/styles')
for (const style of inlinedCSS) { for (const style of inlinedCSS) {
expect.soft(html).toContain(style) expect.soft(html).toContain(style)
} }
@ -1659,7 +1659,7 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => {
'{--plugin:"plugin"}', // CSS imported ambiently in JS/TS '{--plugin:"plugin"}', // CSS imported ambiently in JS/TS
'{--global:"global";', // global css from nuxt.config '{--global:"global";', // global css from nuxt.config
] ]
const html = await $fetch('/route-rules/spa') const html = await $fetch<string>('/route-rules/spa')
for (const style of globalCSS) { for (const style of globalCSS) {
expect.soft(html).toContain(style) expect.soft(html).toContain(style)
} }
@ -1673,11 +1673,11 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => {
}) })
it('should not include inlined CSS in generated CSS file', async () => { it('should not include inlined CSS in generated CSS file', async () => {
const html: string = await $fetch('/styles') const html: string = await $fetch<string>('/styles')
const cssFiles = new Set([...html.matchAll(/<link [^>]*href="([^"]*\.css)">/g)].map(m => m[1])) const cssFiles = new Set([...html.matchAll(/<link [^>]*href="([^"]*\.css)">/g)].map(m => m[1]))
let css = '' let css = ''
for (const file of cssFiles || []) { for (const file of cssFiles || []) {
css += await $fetch(file) css += await $fetch<string>(file)
} }
// should not include inlined CSS in generated CSS files // should not include inlined CSS in generated CSS files
@ -1694,7 +1694,7 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => {
}) })
it('does not load stylesheet for page styles', async () => { it('does not load stylesheet for page styles', async () => {
const html: string = await $fetch('/styles') const html: string = await $fetch<string>('/styles')
expect(html.match(/<link [^>]*href="[^"]*\.css">/g)?.filter(m => m.includes('entry'))?.map(m => m.replace(/\.[^.]*\.css/, '.css'))).toMatchInlineSnapshot(` expect(html.match(/<link [^>]*href="[^"]*\.css">/g)?.filter(m => m.includes('entry'))?.map(m => m.replace(/\.[^.]*\.css/, '.css'))).toMatchInlineSnapshot(`
[ [
"<link rel="stylesheet" href="/_nuxt/entry.css">", "<link rel="stylesheet" href="/_nuxt/entry.css">",
@ -1710,7 +1710,7 @@ describe.skipIf(isDev() || isWebpack)('inlining component styles', () => {
}) })
it.todo('renders client-only styles only', async () => { it.todo('renders client-only styles only', async () => {
const html = await $fetch('/styles') const html = await $fetch<string>('/styles')
expect(html).toContain('{--client-only:"client-only"}') expect(html).toContain('{--client-only:"client-only"}')
}) })
}) })
@ -1865,7 +1865,7 @@ describe.skipIf(isDev() || isWindows || !isRenderingJson)('prefetching', () => {
}) })
it('should not prefetch certain dynamic imports by default', async () => { it('should not prefetch certain dynamic imports by default', async () => {
const html = await $fetch('/auth') const html = await $fetch<string>('/auth')
// should not prefetch global components // should not prefetch global components
expect(html).not.toMatch(/<link [^>]*\/_nuxt\/TestGlobal[^>]*\.js"/) expect(html).not.toMatch(/<link [^>]*\/_nuxt\/TestGlobal[^>]*\.js"/)
// should not prefetch all other pages // should not prefetch all other pages
@ -1901,7 +1901,7 @@ describe.runIf(isDev() && (!isWindows || !isCI))('detecting invalid root nodes',
describe('public directories', () => { describe('public directories', () => {
it('should directly return public directory paths', async () => { it('should directly return public directory paths', async () => {
const html = await $fetch('/assets-custom') const html = await $fetch<string>('/assets-custom')
expect(html).toContain('"/public.svg"') expect(html).toContain('"/public.svg"')
expect(html).toContain('"/custom/file.svg"') expect(html).toContain('"/custom/file.svg"')
}) })
@ -1910,7 +1910,7 @@ describe('public directories', () => {
// TODO: dynamic paths in dev // TODO: dynamic paths in dev
describe.skipIf(isDev())('dynamic paths', () => { describe.skipIf(isDev())('dynamic paths', () => {
it('should work with no overrides', async () => { it('should work with no overrides', async () => {
const html: string = await $fetch('/assets') const html: string = await $fetch<string>('/assets')
for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) { for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) {
const url = match[2] || match[3] const url = match[2] || match[3]
expect(url.startsWith('/_nuxt/') || url === '/public.svg').toBeTruthy() expect(url.startsWith('/_nuxt/') || url === '/public.svg').toBeTruthy()
@ -1919,11 +1919,11 @@ describe.skipIf(isDev())('dynamic paths', () => {
// webpack injects CSS differently // webpack injects CSS differently
it.skipIf(isWebpack)('adds relative paths to CSS', async () => { it.skipIf(isWebpack)('adds relative paths to CSS', async () => {
const html: string = await $fetch('/assets') const html: string = await $fetch<string>('/assets')
const urls = Array.from(html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)).map(m => m[2] || m[3]) const urls = Array.from(html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)).map(m => m[2] || m[3])
const cssURL = urls.find(u => /_nuxt\/assets.*\.css$/.test(u)) const cssURL = urls.find(u => /_nuxt\/assets.*\.css$/.test(u))
expect(cssURL).toBeDefined() expect(cssURL).toBeDefined()
const css: string = await $fetch(cssURL!) const css: string = await $fetch<string>(cssURL!)
const imageUrls = Array.from(css.matchAll(/url\(([^)]*)\)/g)).map(m => m[1].replace(/[-.]\w{8}\./g, '.')) const imageUrls = Array.from(css.matchAll(/url\(([^)]*)\)/g)).map(m => m[1].replace(/[-.]\w{8}\./g, '.'))
expect(imageUrls).toMatchInlineSnapshot(` expect(imageUrls).toMatchInlineSnapshot(`
[ [
@ -1943,7 +1943,7 @@ describe.skipIf(isDev())('dynamic paths', () => {
}, },
}) })
const html = await $fetch('/foo/assets') const html = await $fetch<string>('/foo/assets')
for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) { for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) {
const url = match[2] || match[3] const url = match[2] || match[3]
expect( expect(
@ -1954,7 +1954,7 @@ describe.skipIf(isDev())('dynamic paths', () => {
).toBeTruthy() ).toBeTruthy()
} }
expect(await $fetch('/foo/url')).toContain('path: /foo/url') expect(await $fetch<string>('/foo/url')).toContain('path: /foo/url')
}) })
it('should allow setting relative baseURL', async () => { it('should allow setting relative baseURL', async () => {
@ -1964,7 +1964,7 @@ describe.skipIf(isDev())('dynamic paths', () => {
}, },
}) })
const html = await $fetch('/assets') const html = await $fetch<string>('/assets')
for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) { for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) {
const url = match[2] || match[3] const url = match[2] || match[3]
expect( expect(
@ -1998,7 +1998,7 @@ describe.skipIf(isDev())('dynamic paths', () => {
}, },
}) })
const html = await $fetch('/foo/assets') const html = await $fetch<string>('/foo/assets')
for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) { for (const match of html.matchAll(/(href|src)="(.*?)"|url\(([^)]*)\)/g)) {
const url = match[2] || match[3] const url = match[2] || match[3]
expect( expect(
@ -2017,7 +2017,7 @@ describe.skipIf(isDev())('dynamic paths', () => {
describe('app config', () => { describe('app config', () => {
it('should work', async () => { it('should work', async () => {
const html = await $fetch('/app-config') const html = await $fetch<string>('/app-config')
const expectedAppConfig: Record<string, any> = { const expectedAppConfig: Record<string, any> = {
fromNuxtConfig: true, fromNuxtConfig: true,
@ -2030,14 +2030,14 @@ describe('app config', () => {
} }
expect.soft(html).toContain(JSON.stringify(expectedAppConfig)) expect.soft(html).toContain(JSON.stringify(expectedAppConfig))
const serverAppConfig = await $fetch('/api/app-config') const serverAppConfig = await $fetch<Record<string, any>>('/api/app-config')
expect(serverAppConfig).toMatchObject({ appConfig: expectedAppConfig }) expect(serverAppConfig).toMatchObject({ appConfig: expectedAppConfig })
}) })
}) })
describe('component islands', () => { describe('component islands', () => {
it('renders components with route', async () => { it('renders components with route', async () => {
const result: NuxtIslandResponse = await $fetch('/__nuxt_island/RouteComponent.json?url=/foo') const result = await $fetch<NuxtIslandResponse>('/__nuxt_island/RouteComponent.json?url=/foo')
result.html = result.html.replace(/ data-island-uid="[^"]*"/g, '') result.html = result.html.replace(/ data-island-uid="[^"]*"/g, '')
if (isDev()) { if (isDev()) {
@ -2057,7 +2057,7 @@ describe('component islands', () => {
}) })
it('render async component', async () => { it('render async component', async () => {
const result: NuxtIslandResponse = await $fetch(withQuery('/__nuxt_island/LongAsyncComponent.json', { const result = await $fetch<NuxtIslandResponse>(withQuery('/__nuxt_island/LongAsyncComponent.json', {
props: JSON.stringify({ props: JSON.stringify({
count: 3, count: 3,
}), }),
@ -2115,7 +2115,7 @@ describe('component islands', () => {
}) })
it('render .server async component', async () => { it('render .server async component', async () => {
const result: NuxtIslandResponse = await $fetch(withQuery('/__nuxt_island/AsyncServerComponent.json', { const result = await $fetch<NuxtIslandResponse>(withQuery('/__nuxt_island/AsyncServerComponent.json', {
props: JSON.stringify({ props: JSON.stringify({
count: 2, count: 2,
}), }),
@ -2144,7 +2144,7 @@ describe('component islands', () => {
if (!isWebpack) { if (!isWebpack) {
it('render server component with selective client hydration', async () => { it('render server component with selective client hydration', async () => {
const result: NuxtIslandResponse = await $fetch('/__nuxt_island/ServerWithClient') const result = await $fetch<NuxtIslandResponse>('/__nuxt_island/ServerWithClient')
if (isDev()) { if (isDev()) {
result.head.link = result.head.link.filter(l => !l.href.includes('@nuxt+ui-templates') && (l.href.startsWith('_nuxt/components/islands/') && l.href.includes('_nuxt/components/islands/AsyncServerComponent'))) result.head.link = result.head.link.filter(l => !l.href.includes('@nuxt+ui-templates') && (l.href.startsWith('_nuxt/components/islands/') && l.href.includes('_nuxt/components/islands/AsyncServerComponent')))
} }
@ -2178,7 +2178,7 @@ describe('component islands', () => {
} }
it('renders pure components', async () => { it('renders pure components', async () => {
const result: NuxtIslandResponse = await $fetch(withQuery('/__nuxt_island/PureComponent.json', { const result = await $fetch<NuxtIslandResponse>(withQuery('/__nuxt_island/PureComponent.json', {
props: JSON.stringify({ props: JSON.stringify({
bool: false, bool: false,
number: 3487, number: 3487,
@ -2305,17 +2305,17 @@ describe('component islands', () => {
describe.runIf(isDev() && !isWebpack)('vite plugins', () => { describe.runIf(isDev() && !isWebpack)('vite plugins', () => {
it('does not override vite plugins', async () => { it('does not override vite plugins', async () => {
expect(await $fetch('/vite-plugin-without-path')).toBe('vite-plugin without path') expect(await $fetch<string>('/vite-plugin-without-path')).toBe('vite-plugin without path')
expect(await $fetch('/__nuxt-test')).toBe('vite-plugin with __nuxt prefix') expect(await $fetch<string>('/__nuxt-test')).toBe('vite-plugin with __nuxt prefix')
}) })
it('does not allow direct access to nuxt source folder', async () => { it('does not allow direct access to nuxt source folder', async () => {
expect(await $fetch('/app.config')).toContain('catchall at') expect(await $fetch<string>('/app.config')).toContain('catchall at')
}) })
}) })
describe.skipIf(isDev() || isWindows || !isRenderingJson)('payload rendering', () => { describe.skipIf(isDev() || isWindows || !isRenderingJson)('payload rendering', () => {
it('renders a payload', async () => { it('renders a payload', async () => {
const payload = await $fetch('/random/a/_payload.json', { responseType: 'text' }) const payload = await $fetch<string>('/random/a/_payload.json', { responseType: 'text' })
const data = parsePayload(payload) const data = parsePayload(payload)
expect(typeof data.prerenderedAt).toEqual('number') expect(typeof data.prerenderedAt).toEqual('number')
@ -2370,7 +2370,7 @@ describe.skipIf(isDev() || isWindows || !isRenderingJson)('payload rendering', (
}) })
it.skipIf(!isRenderingJson)('should not include server-component HTML in payload', async () => { it.skipIf(!isRenderingJson)('should not include server-component HTML in payload', async () => {
const payload = await $fetch('/prefetch/server-components/_payload.json', { responseType: 'text' }) const payload = await $fetch<string>('/prefetch/server-components/_payload.json', { responseType: 'text' })
const entries = Object.entries(parsePayload(payload)) const entries = Object.entries(parsePayload(payload))
const [key, serializedComponent] = entries.find(([key]) => key.startsWith('AsyncServerComponent')) || [] const [key, serializedComponent] = entries.find(([key]) => key.startsWith('AsyncServerComponent')) || []
expect(serializedComponent).toEqual(key) expect(serializedComponent).toEqual(key)
@ -2379,13 +2379,13 @@ describe.skipIf(isDev() || isWindows || !isRenderingJson)('payload rendering', (
describe.skipIf(process.env.TEST_CONTEXT !== 'async')('Async context', () => { describe.skipIf(process.env.TEST_CONTEXT !== 'async')('Async context', () => {
it('should be available', async () => { it('should be available', async () => {
expect(await $fetch('/async-context')).toContain('&quot;hasApp&quot;: true') expect(await $fetch<string>('/async-context')).toContain('&quot;hasApp&quot;: true')
}) })
}) })
describe.skipIf(process.env.TEST_CONTEXT === 'async')('Async context', () => { describe.skipIf(process.env.TEST_CONTEXT === 'async')('Async context', () => {
it('should be unavailable', async () => { it('should be unavailable', async () => {
expect(await $fetch('/async-context')).toContain('&quot;hasApp&quot;: false') expect(await $fetch<string>('/async-context')).toContain('&quot;hasApp&quot;: false')
}) })
}) })
@ -2405,7 +2405,7 @@ describe.skipIf(isWindows)('useAsyncData', () => {
}) })
it('two requests resolve and sync', async () => { it('two requests resolve and sync', async () => {
await $fetch('/useAsyncData/refresh') await $fetch<string>('/useAsyncData/refresh')
}) })
it('requests can be cancelled/overridden', async () => { it('requests can be cancelled/overridden', async () => {
@ -2417,7 +2417,7 @@ describe.skipIf(isWindows)('useAsyncData', () => {
}) })
it('requests status can be used', async () => { it('requests status can be used', async () => {
const html = await $fetch('/useAsyncData/status') const html = await $fetch<string>('/useAsyncData/status')
expect(html).toContain('true') expect(html).toContain('true')
expect(html).not.toContain('false') expect(html).not.toContain('false')
@ -2542,7 +2542,7 @@ describe('keepalive', () => {
describe('teleports', () => { describe('teleports', () => {
it('should append teleports to body', async () => { it('should append teleports to body', async () => {
const html = await $fetch('/teleport') const html = await $fetch<string>('/teleport')
// Teleport is prepended to body, before the __nuxt div // Teleport is prepended to body, before the __nuxt div
expect(html).toContain('<div>Teleport</div><!--teleport anchor--><div id="__nuxt">') expect(html).toContain('<div>Teleport</div><!--teleport anchor--><div id="__nuxt">')
@ -2550,7 +2550,7 @@ describe('teleports', () => {
expect(html).toContain('<div><!--teleport start--><!--teleport end--><h1>Normal content</h1></div>') expect(html).toContain('<div><!--teleport start--><!--teleport end--><h1>Normal content</h1></div>')
}) })
it('should render teleports to app teleports element', async () => { it('should render teleports to app teleports element', async () => {
const html = await $fetch('/nuxt-teleport') const html = await $fetch<string>('/nuxt-teleport')
// Teleport is appended to body, after the __nuxt div // Teleport is appended to body, after the __nuxt div
expect(html).toContain('<div><!--teleport start--><!--teleport end--><h1>Normal content</h1></div></div></div><span id="nuxt-teleport"><div>Nuxt Teleport</div><!--teleport anchor--></span><script') expect(html).toContain('<div><!--teleport start--><!--teleport end--><h1>Normal content</h1></div></div></div><span id="nuxt-teleport"><div>Nuxt Teleport</div><!--teleport anchor--></span><script')
@ -2584,7 +2584,7 @@ describe('import components', () => {
let html = '' let html = ''
it.sequential('fetch import-components page', async () => { it.sequential('fetch import-components page', async () => {
html = await $fetch('/import-components') html = await $fetch<string>('/import-components')
}) })
it('load default component with mode all', () => { it('load default component with mode all', () => {
@ -2616,7 +2616,7 @@ describe('lazy import components', () => {
let html = '' let html = ''
it.sequential('fetch lazy-import-components page', async () => { it.sequential('fetch lazy-import-components page', async () => {
html = await $fetch('/lazy-import-components') html = await $fetch<string>('/lazy-import-components')
}) })
it('lazy load named component with mode all', () => { it('lazy load named component with mode all', () => {

View File

@ -71,7 +71,7 @@ if (process.env.TEST_ENV !== 'built' && !isWindows) {
it('should detect new routes', async () => { it('should detect new routes', async () => {
await expectWithPolling( await expectWithPolling(
() => $fetch('/some-404').then(r => r.includes('catchall at some-404')).catch(() => null), () => $fetch<string>('/some-404').then(r => r.includes('catchall at some-404')).catch(() => null),
true, true,
) )
@ -80,7 +80,7 @@ if (process.env.TEST_ENV !== 'built' && !isWindows) {
await fsp.writeFile(join(fixturePath, 'pages/some-404.vue'), indexVue) await fsp.writeFile(join(fixturePath, 'pages/some-404.vue'), indexVue)
await expectWithPolling( await expectWithPolling(
() => $fetch('/some-404').then(r => r.includes('Hello Nuxt 3')).catch(() => null), () => $fetch<string>('/some-404').then(r => r.includes('Hello Nuxt 3')).catch(() => null),
true, true,
) )
}) })

View File

@ -13,7 +13,11 @@ export default defineVitestConfig({
environmentOptions: { environmentOptions: {
nuxt: { nuxt: {
overrides: { overrides: {
runtimeConfig: {
app: {
buildId: 'override', buildId: 'override',
},
},
experimental: { experimental: {
appManifest: process.env.TEST_MANIFEST !== 'manifest-off', appManifest: process.env.TEST_MANIFEST !== 'manifest-off',
}, },