From bb74b691b70ffdebf405613004b037b8e3333fa5 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 14:46:06 +0200 Subject: [PATCH 01/23] only install dependencies that are at least 7 days old --- pnpm-workspace.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3f6cb5d7f2c8..cebec8fa8998 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,5 @@ +minimumReleaseAge: 10080 # 7 days in minutes + packages: - 'crates/node' - 'crates/node/npm/*' From c88df142293a4c5c6886540131da5c43aeab395b Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 15:13:28 +0200 Subject: [PATCH 02/23] bump packageManager to pnpm v10.33.0 This also gives us the `minimumReleaseAge` (introduces in 10.16) --- package.json | 2 +- pnpm-lock.yaml | 135 ++++++++++++++++++++++++++++++++++++------------- 2 files changed, 101 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index c06e7c606009..b718c3878ca3 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "typescript": "^5.5.4", "vitest": "^4.0.18" }, - "packageManager": "pnpm@9.6.0", + "packageManager": "pnpm@10.33.0", "pnpm": { "patchedDependencies": { "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 820f1103043f..922f2fa6e9e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,10 +45,10 @@ catalogs: patchedDependencies: '@parcel/watcher@2.5.1': - hash: p6xahr7zs4c5qsorj3exeppxhm + hash: c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c path: patches/@parcel__watcher@2.5.1.patch lightningcss@1.32.0: - hash: mz3chiqe2jbihxa25xumd4ogum + hash: 1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930 path: patches/lightningcss@1.32.0.patch importers: @@ -87,9 +87,19 @@ importers: version: 5.5.4 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) crates/node: + devDependencies: + '@napi-rs/cli': + specifier: 3.4.1 + version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + '@napi-rs/wasm-runtime': + specifier: ^1.1.1 + version: 1.1.1 + emnapi: + specifier: 1.8.1 + version: 1.8.1(node-addon-api@8.3.0) optionalDependencies: '@tailwindcss/oxide-android-arm64': specifier: workspace:* @@ -127,16 +137,6 @@ importers: '@tailwindcss/oxide-win32-x64-msvc': specifier: workspace:* version: link:npm/win32-x64-msvc - devDependencies: - '@napi-rs/cli': - specifier: 3.4.1 - version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) - '@napi-rs/wasm-runtime': - specifier: ^1.1.1 - version: 1.1.1 - emnapi: - specifier: 1.8.1 - version: 1.8.1(node-addon-api@8.3.0) crates/node/npm/android-arm-eabi: {} @@ -211,7 +211,7 @@ importers: dependencies: '@parcel/watcher': specifier: ^2.5.1 - version: 2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm) + version: 2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c) '@tailwindcss/node': specifier: workspace:* version: link:../@tailwindcss-node @@ -244,7 +244,7 @@ importers: version: 2.6.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -482,7 +482,7 @@ importers: version: 1.7.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -550,7 +550,7 @@ importers: version: 19.2.3(@types/react@19.2.14) autoprefixer: specifier: ^10.4.24 - version: 10.4.24(postcss@8.5.6) + version: 10.4.24(postcss@8.5.8) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -1170,89 +1170,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1531,42 +1547,49 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-arm64-musl@1.4.5': resolution: {integrity: sha512-yWjcPDgJ2nIL3KNvi4536dlT/CcCWO0DUyEOlBs/SacG7BeD6IjGh6yYzd3/X1Y3JItCbZoDoLUH8iB1lTXo3w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/lzma-linux-ppc64-gnu@1.4.5': resolution: {integrity: sha512-0XRhKuIU/9ZjT4WDIG/qnX7Xz7mSQHYZo9Gb3MP2gcvBgr6BA4zywQ9k3gmQaPn9ECE+CZg2V7DV7kT+x2pUMQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-riscv64-gnu@1.4.5': resolution: {integrity: sha512-QrqDIPEUUB23GCpyQj/QFyMlr8SGxxyExeZz9OWFnHfb70kXdTLWrHS/hEI1Ru+lSbQ/6xRqeoGyQ4Aqdg+/RA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-s390x-gnu@1.4.5': resolution: {integrity: sha512-k8RVM5aMhW86E9H0QXdquwojew4H3SwPxbRVbl49/COJQWCUjGi79X6mYruMnMPEznZinUiT1jgKbFo2A00NdA==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-gnu@1.4.5': resolution: {integrity: sha512-6rMtBgnIq2Wcl1rQdZsnM+rtCcVCbws1nF8S2NzaUsVaZv8bjrPiAa0lwg4Eqnn1d9lgwqT+cZgm5m+//K08Kw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-musl@1.4.5': resolution: {integrity: sha512-eiadGBKi7Vd0bCArBUOO/qqRYPHt/VQVvGyYvDFt6C2ZSIjlD+HuOl+2oS1sjf4CFjK4eDIog6EdXnL0NE6iyQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/lzma-wasm32-wasi@1.4.5': resolution: {integrity: sha512-+VyHHlr68dvey6fXc2hehw9gHVFIW3TtGF1XkcbAu65qVXsA9D/T+uuoRVqhE+JCyFHFrO0ixRbZDRK1XJt1sA==} @@ -1636,36 +1659,42 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-arm64-musl@1.1.0': resolution: {integrity: sha512-L/y1/26q9L/uBqiW/JdOb/Dc94egFvNALUZV2WCGKQXc6UByPBMgdiEyW2dtoYxYYYYc+AKD+jr+wQPcvX2vrQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/tar-linux-ppc64-gnu@1.1.0': resolution: {integrity: sha512-EPE1K/80RQvPbLRJDJs1QmCIcH+7WRi0F73+oTe1582y9RtfGRuzAkzeBuAGRXAQEjRQw/RjtNqr6UTJ+8UuWQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-s390x-gnu@1.1.0': resolution: {integrity: sha512-B2jhWiB1ffw1nQBqLUP1h4+J1ovAxBOoe5N2IqDMOc63fsPZKNqF1PvO/dIem8z7LL4U4bsfmhy3gBfu547oNQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-gnu@1.1.0': resolution: {integrity: sha512-tbZDHnb9617lTnsDMGo/eAMZxnsQFnaRe+MszRqHguKfMwkisc9CCJnks/r1o84u5fECI+J/HOrKXgczq/3Oww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-musl@1.1.0': resolution: {integrity: sha512-dV6cODlzbO8u6Anmv2N/ilQHq/AWz0xyltuXoLU3yUyXbZcnWYZuB2rL8OBGPmqNcD+x9NdScBNXh7vWN0naSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/tar-wasm32-wasi@1.1.0': resolution: {integrity: sha512-jIa9nb2HzOrfH0F8QQ9g3WE4aMH5vSI5/1NYVNm9ysCmNjCCtMXCAhlI3WKCdm/DwHf0zLqdrrtDFXODcNaqMw==} @@ -1732,24 +1761,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-arm64-musl@1.0.1': resolution: {integrity: sha512-jAasbIvjZXCgX0TCuEFQr+4D6Lla/3AAVx2LmDuMjgG4xoIXzjKWl7c4chuaD+TI+prWT0X6LJcdzFT+ROKGHQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-linux-x64-gnu@1.0.1': resolution: {integrity: sha512-Plgk5rPqqK2nocBGajkMVbGm010Z7dnUgq0wtnYRZbzWWxwWcXfZMPa8EYxrK4eE8SzpI7VlZP1tdVsdjgGwMw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': resolution: {integrity: sha512-GW7AzGuWxtQkyHknHWYFdR0CHmW6is8rG2Rf4V6GNmMpmwtXt/ItWYWtBe4zqJWycMNazpfZKSw/BpT7/MVCXQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': resolution: {integrity: sha512-/nQVSTrqSsn7YdAc2R7Ips/tnw5SPUcl3D7QrXCNGPqjbatIspnaexvaOYNyKMU6xPu+pc0BTnKVmqhlJJCPLA==} @@ -1798,24 +1831,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.2.2': resolution: {integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.2.2': resolution: {integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.2.2': resolution: {integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.2.2': resolution: {integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==} @@ -2020,36 +2057,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-glibc@2.5.1': resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.0': resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} @@ -2062,12 +2105,14 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} @@ -2080,12 +2125,14 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} @@ -2098,12 +2145,14 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} @@ -2211,36 +2260,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} @@ -2305,56 +2360,67 @@ packages: resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.44.0': resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.44.0': resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.44.0': resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.44.0': resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.44.0': resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.44.0': resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.44.0': resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.44.0': resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.44.0': resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.44.0': resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} @@ -2664,9 +2730,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001761: - resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} - caniuse-lite@1.0.30001769: resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} @@ -3149,24 +3212,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -5229,7 +5296,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 - '@parcel/watcher@2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm)': + '@parcel/watcher@2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c)': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 @@ -5479,13 +5546,13 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) '@vitest/pretty-format@4.0.18': dependencies: @@ -5636,13 +5703,13 @@ snapshots: assertion-error@2.0.1: {} - autoprefixer@10.4.24(postcss@8.5.6): + autoprefixer@10.4.24(postcss@8.5.8): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001769 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.8 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -5666,7 +5733,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.11 - caniuse-lite: 1.0.30001761 + caniuse-lite: 1.0.30001769 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -5700,8 +5767,6 @@ snapshots: camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001761: {} - caniuse-lite@1.0.30001769: {} chai@6.2.1: {} @@ -6169,7 +6234,7 @@ snapshots: lightningcss-win32-x64-msvc@1.32.0: {} - lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum): + lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930): dependencies: detect-libc: 2.1.2 optionalDependencies: @@ -6922,7 +6987,7 @@ snapshots: util-deprecate@1.0.2: {} - vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: esbuild: 0.25.0 fdir: 6.5.0(picomatch@4.0.3) @@ -6934,7 +6999,7 @@ snapshots: '@types/node': 20.19.1 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) terser: 5.31.6 tsx: 4.19.1 yaml: 2.6.0 @@ -6942,7 +7007,7 @@ snapshots: vite@8.0.0(@types/node@20.19.1)(esbuild@0.27.0)(jiti@2.6.1)(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@oxc-project/runtime': 0.115.0 - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) picomatch: 4.0.3 postcss: 8.5.8 rolldown: 1.0.0-rc.9 @@ -6956,10 +7021,10 @@ snapshots: tsx: 4.19.1 yaml: 2.6.0 - vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -6976,7 +7041,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.1 From cacd528b690ff4adf5aab039e525a0b2ee54578f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 15:32:16 +0200 Subject: [PATCH 03/23] ensure pnpm 10.33.0 is used in FreeBSD install --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index d5ad798be455..f00b76ad9a7a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -175,7 +175,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 4852cce7b7a9..54718bb484c1 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -174,7 +174,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a872900ff9e2..d33d30e4941b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -170,7 +170,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal From 1555b937acf8b3f650a74c99fc648b6ae0fc30f1 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 15:34:18 +0200 Subject: [PATCH 04/23] allow bun to run postinstall scripts --- pnpm-workspace.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cebec8fa8998..6a55890467f0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,10 @@ minimumReleaseAge: 10080 # 7 days in minutes +# Allow postinstall scripts during installation +# https://pnpm.io/settings#onlybuiltdependencies +onlyBuiltDependencies: + - bun + packages: - 'crates/node' - 'crates/node/npm/*' From 7ecd53813ca997d92d9bc82361d367828ae23cda Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 15:50:32 +0200 Subject: [PATCH 05/23] do not crash on `git commit` --- integrations/upgrade/upgrade-errors.test.ts | 6 +++--- integrations/utils.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 6733801e087f..f1f24081ba9e 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -36,7 +36,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration"') + await exec('git commit -m "before migration" || true') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') @@ -124,7 +124,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration"') + await exec('git commit -m "before migration" || true') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') @@ -212,7 +212,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration"') + await exec('git commit -m "before migration" || true') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') diff --git a/integrations/utils.ts b/integrations/utils.ts index 8e4a1c496f34..be915b853daa 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -442,7 +442,7 @@ export function test( try { await context.exec('git init', { cwd: root }) await context.exec('git add --all', { cwd: root }) - await context.exec('git commit -m "before migration"', { cwd: root }) + await context.exec('git commit -m "before migration" || true', { cwd: root }) } catch (error: any) { console.error(error) console.error(error.stdout?.toString()) From 291a1ebaf9390caf13143bc76db50e21b08ff8f8 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 15:53:14 +0200 Subject: [PATCH 06/23] skip `test` in stack trace --- integrations/utils.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/integrations/utils.ts b/integrations/utils.ts index be915b853daa..374e03ec1704 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -451,7 +451,12 @@ export function test( } } - return await testCallback(context) + try { + return await testCallback(context) + } catch (err) { + Error.captureStackTrace(test) + throw err + } }, ) } From 1caabb0df6fdb9fc1aa2ef488ca6cd6662c687da Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 16:00:43 +0200 Subject: [PATCH 07/23] skip `testCallback` instead of `test` --- integrations/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/utils.ts b/integrations/utils.ts index 374e03ec1704..fe2bef1fb6f7 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -454,7 +454,7 @@ export function test( try { return await testCallback(context) } catch (err) { - Error.captureStackTrace(test) + Error.captureStackTrace(testCallback) throw err } }, From 8b915d1fdd5b336d4127464366cd0a449c61c3f4 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 16:12:22 +0200 Subject: [PATCH 08/23] use `--allow-empty` instead of `|| true` for Windows This will create an empty commit when there is nothing to commit, but we don't really care about that. We only care that files are committed if there are files such that we have a clean working directory. --- integrations/upgrade/upgrade-errors.test.ts | 6 +++--- integrations/utils.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index f1f24081ba9e..fb8e2b70fcc2 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -36,7 +36,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration" || true') + await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') @@ -124,7 +124,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration" || true') + await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') @@ -212,7 +212,7 @@ test( // Ensure we are in a git repo await exec('git init') await exec('git add --all') - await exec('git commit -m "before migration" || true') + await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 await exec('npx @tailwindcss/upgrade') diff --git a/integrations/utils.ts b/integrations/utils.ts index fe2bef1fb6f7..dbce66ca8bc8 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -442,7 +442,7 @@ export function test( try { await context.exec('git init', { cwd: root }) await context.exec('git add --all', { cwd: root }) - await context.exec('git commit -m "before migration" || true', { cwd: root }) + await context.exec('git commit -m "before migration" --allow-empty', { cwd: root }) } catch (error: any) { console.error(error) console.error(error.stdout?.toString()) From 4c27a29153c1d1382a2893c2576361b91e9e888b Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 16:45:06 +0200 Subject: [PATCH 09/23] approve other known dependencies --- pnpm-workspace.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6a55890467f0..ef34ac69970f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,13 @@ minimumReleaseAge: 10080 # 7 days in minutes # Allow postinstall scripts during installation # https://pnpm.io/settings#onlybuiltdependencies onlyBuiltDependencies: + - '@parcel/watcher' - bun + - esbuild + - sharp + - tree-sitter + - tree-sitter-javascript + - tree-sitter-typescript packages: - 'crates/node' From bf526c354eaca53c615904116e4ac2fb1b27442e Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 16:49:05 +0200 Subject: [PATCH 10/23] run bun's postinstall to make sure it's installed correctly --- integrations/upgrade/upgrade-errors.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index fb8e2b70fcc2..693c41b9009f 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -110,6 +110,7 @@ test( // Use `bun` to install dependencies await exec('rm ./pnpm-lock.yaml') try { + await exec('npm rebuild bun') // Run postinstall of bun await exec('npx bun install', {}, { ignoreStdErr: true }) } catch (e) { // When preparing for a release, the version in `package.json` will point From 72b6741e723d894e55259ad0b0042b71e9556e4f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Thu, 2 Apr 2026 17:02:54 +0200 Subject: [PATCH 11/23] strip the `npm warn` from the snapshot In the test directly --- integrations/upgrade/upgrade-errors.test.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 693c41b9009f..dfb5c0a1f673 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -51,7 +51,7 @@ test( // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( - stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0')), + stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` @@ -140,7 +140,7 @@ test( // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( - stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0')), + stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` @@ -228,7 +228,7 @@ test( // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( - stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0')), + stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` @@ -250,3 +250,7 @@ test( `) }, ) + +function stripNpmWarnings(input: string) { + return input.replace(/npm warn.*?\n/g, '') +} From 6e98876e1913ed5674af0ea53b4c105111da42ff Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 12:20:15 +0200 Subject: [PATCH 12/23] call `vitest` directly I think `pnpm run` is injecting some environment variables (https://pnpm.io/cli/run#environment) based on the pnpm-workspace.yaml settings. You can at least see weird warnings in CI about it: ``` npm warn Unknown env config "catalog". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options. npm warn Unknown env config "minimum-release-age". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options. npm warn Unknown env config "npm-globalconfig". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options. npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options. npm warn Unknown env config "_jsr-registry". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options. ``` Let's see if we can exec vitest directly --- .github/workflows/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 3b2cf8f1b80a..41599c07b1d2 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -109,7 +109,7 @@ jobs: CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER: 'lld-link' - name: Test ${{ matrix.integration }} - run: pnpm run test:integrations ./integrations/${{ matrix.integration }} + run: pnpm exec vitest --root=./integrations ./integrations/${{ matrix.integration }} env: GITHUB_WORKSPACE: ${{ github.workspace }} From 05273d2c7790ccc77518248f9165c5f4185fa051 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 12:42:42 +0200 Subject: [PATCH 13/23] try pnpm 10.16.0 --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- package.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index f00b76ad9a7a..cf8cc165733d 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -175,7 +175,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.33.0 --unsafe-perm=true + sudo npm install -g pnpm@10.16.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 54718bb484c1..51008bf4b8f3 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -174,7 +174,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.33.0 --unsafe-perm=true + sudo npm install -g pnpm@10.16.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d33d30e4941b..a51092b0a556 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -170,7 +170,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.33.0 --unsafe-perm=true + sudo npm install -g pnpm@10.16.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/package.json b/package.json index b718c3878ca3..2e8adb1c8b8f 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "typescript": "^5.5.4", "vitest": "^4.0.18" }, - "packageManager": "pnpm@10.33.0", + "packageManager": "pnpm@10.16.0", "pnpm": { "patchedDependencies": { "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch", From bcd7b7e787661ab037dd08d1a5fdf47279d73feb Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 12:51:33 +0200 Subject: [PATCH 14/23] try pnpm 9.6.0 --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- package.json | 2 +- pnpm-lock.yaml | 136 ++++++------------------- 5 files changed, 33 insertions(+), 111 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index cf8cc165733d..d5ad798be455 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -175,7 +175,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.16.0 --unsafe-perm=true + sudo npm install -g pnpm@9.6.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 51008bf4b8f3..4852cce7b7a9 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -174,7 +174,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.16.0 --unsafe-perm=true + sudo npm install -g pnpm@9.6.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a51092b0a556..a872900ff9e2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -170,7 +170,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@10.16.0 --unsafe-perm=true + sudo npm install -g pnpm@9.6.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/package.json b/package.json index 2e8adb1c8b8f..c06e7c606009 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "typescript": "^5.5.4", "vitest": "^4.0.18" }, - "packageManager": "pnpm@10.16.0", + "packageManager": "pnpm@9.6.0", "pnpm": { "patchedDependencies": { "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 922f2fa6e9e6..c847d395cfb1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,10 +45,10 @@ catalogs: patchedDependencies: '@parcel/watcher@2.5.1': - hash: c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c + hash: p6xahr7zs4c5qsorj3exeppxhm path: patches/@parcel__watcher@2.5.1.patch lightningcss@1.32.0: - hash: 1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930 + hash: mz3chiqe2jbihxa25xumd4ogum path: patches/lightningcss@1.32.0.patch importers: @@ -87,19 +87,9 @@ importers: version: 5.5.4 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) crates/node: - devDependencies: - '@napi-rs/cli': - specifier: 3.4.1 - version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) - '@napi-rs/wasm-runtime': - specifier: ^1.1.1 - version: 1.1.1 - emnapi: - specifier: 1.8.1 - version: 1.8.1(node-addon-api@8.3.0) optionalDependencies: '@tailwindcss/oxide-android-arm64': specifier: workspace:* @@ -137,6 +127,16 @@ importers: '@tailwindcss/oxide-win32-x64-msvc': specifier: workspace:* version: link:npm/win32-x64-msvc + devDependencies: + '@napi-rs/cli': + specifier: 3.4.1 + version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + '@napi-rs/wasm-runtime': + specifier: ^1.1.1 + version: 1.1.1 + emnapi: + specifier: 1.8.1 + version: 1.8.1(node-addon-api@8.3.0) crates/node/npm/android-arm-eabi: {} @@ -211,7 +211,7 @@ importers: dependencies: '@parcel/watcher': specifier: ^2.5.1 - version: 2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c) + version: 2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm) '@tailwindcss/node': specifier: workspace:* version: link:../@tailwindcss-node @@ -244,7 +244,7 @@ importers: version: 2.6.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) + version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -482,7 +482,7 @@ importers: version: 1.7.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) + version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -550,7 +550,7 @@ importers: version: 19.2.3(@types/react@19.2.14) autoprefixer: specifier: ^10.4.24 - version: 10.4.24(postcss@8.5.8) + version: 10.4.24(postcss@8.5.6) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -1170,105 +1170,89 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1547,49 +1531,42 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@napi-rs/lzma-linux-arm64-musl@1.4.5': resolution: {integrity: sha512-yWjcPDgJ2nIL3KNvi4536dlT/CcCWO0DUyEOlBs/SacG7BeD6IjGh6yYzd3/X1Y3JItCbZoDoLUH8iB1lTXo3w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@napi-rs/lzma-linux-ppc64-gnu@1.4.5': resolution: {integrity: sha512-0XRhKuIU/9ZjT4WDIG/qnX7Xz7mSQHYZo9Gb3MP2gcvBgr6BA4zywQ9k3gmQaPn9ECE+CZg2V7DV7kT+x2pUMQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] - libc: [glibc] '@napi-rs/lzma-linux-riscv64-gnu@1.4.5': resolution: {integrity: sha512-QrqDIPEUUB23GCpyQj/QFyMlr8SGxxyExeZz9OWFnHfb70kXdTLWrHS/hEI1Ru+lSbQ/6xRqeoGyQ4Aqdg+/RA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] - libc: [glibc] '@napi-rs/lzma-linux-s390x-gnu@1.4.5': resolution: {integrity: sha512-k8RVM5aMhW86E9H0QXdquwojew4H3SwPxbRVbl49/COJQWCUjGi79X6mYruMnMPEznZinUiT1jgKbFo2A00NdA==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] - libc: [glibc] '@napi-rs/lzma-linux-x64-gnu@1.4.5': resolution: {integrity: sha512-6rMtBgnIq2Wcl1rQdZsnM+rtCcVCbws1nF8S2NzaUsVaZv8bjrPiAa0lwg4Eqnn1d9lgwqT+cZgm5m+//K08Kw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@napi-rs/lzma-linux-x64-musl@1.4.5': resolution: {integrity: sha512-eiadGBKi7Vd0bCArBUOO/qqRYPHt/VQVvGyYvDFt6C2ZSIjlD+HuOl+2oS1sjf4CFjK4eDIog6EdXnL0NE6iyQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@napi-rs/lzma-wasm32-wasi@1.4.5': resolution: {integrity: sha512-+VyHHlr68dvey6fXc2hehw9gHVFIW3TtGF1XkcbAu65qVXsA9D/T+uuoRVqhE+JCyFHFrO0ixRbZDRK1XJt1sA==} @@ -1659,42 +1636,36 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@napi-rs/tar-linux-arm64-musl@1.1.0': resolution: {integrity: sha512-L/y1/26q9L/uBqiW/JdOb/Dc94egFvNALUZV2WCGKQXc6UByPBMgdiEyW2dtoYxYYYYc+AKD+jr+wQPcvX2vrQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@napi-rs/tar-linux-ppc64-gnu@1.1.0': resolution: {integrity: sha512-EPE1K/80RQvPbLRJDJs1QmCIcH+7WRi0F73+oTe1582y9RtfGRuzAkzeBuAGRXAQEjRQw/RjtNqr6UTJ+8UuWQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] - libc: [glibc] '@napi-rs/tar-linux-s390x-gnu@1.1.0': resolution: {integrity: sha512-B2jhWiB1ffw1nQBqLUP1h4+J1ovAxBOoe5N2IqDMOc63fsPZKNqF1PvO/dIem8z7LL4U4bsfmhy3gBfu547oNQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] - libc: [glibc] '@napi-rs/tar-linux-x64-gnu@1.1.0': resolution: {integrity: sha512-tbZDHnb9617lTnsDMGo/eAMZxnsQFnaRe+MszRqHguKfMwkisc9CCJnks/r1o84u5fECI+J/HOrKXgczq/3Oww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@napi-rs/tar-linux-x64-musl@1.1.0': resolution: {integrity: sha512-dV6cODlzbO8u6Anmv2N/ilQHq/AWz0xyltuXoLU3yUyXbZcnWYZuB2rL8OBGPmqNcD+x9NdScBNXh7vWN0naSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@napi-rs/tar-wasm32-wasi@1.1.0': resolution: {integrity: sha512-jIa9nb2HzOrfH0F8QQ9g3WE4aMH5vSI5/1NYVNm9ysCmNjCCtMXCAhlI3WKCdm/DwHf0zLqdrrtDFXODcNaqMw==} @@ -1761,28 +1732,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@napi-rs/wasm-tools-linux-arm64-musl@1.0.1': resolution: {integrity: sha512-jAasbIvjZXCgX0TCuEFQr+4D6Lla/3AAVx2LmDuMjgG4xoIXzjKWl7c4chuaD+TI+prWT0X6LJcdzFT+ROKGHQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@napi-rs/wasm-tools-linux-x64-gnu@1.0.1': resolution: {integrity: sha512-Plgk5rPqqK2nocBGajkMVbGm010Z7dnUgq0wtnYRZbzWWxwWcXfZMPa8EYxrK4eE8SzpI7VlZP1tdVsdjgGwMw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': resolution: {integrity: sha512-GW7AzGuWxtQkyHknHWYFdR0CHmW6is8rG2Rf4V6GNmMpmwtXt/ItWYWtBe4zqJWycMNazpfZKSw/BpT7/MVCXQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': resolution: {integrity: sha512-/nQVSTrqSsn7YdAc2R7Ips/tnw5SPUcl3D7QrXCNGPqjbatIspnaexvaOYNyKMU6xPu+pc0BTnKVmqhlJJCPLA==} @@ -1831,28 +1798,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-musl@16.2.2': resolution: {integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-x64-gnu@16.2.2': resolution: {integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-musl@16.2.2': resolution: {integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-win32-arm64-msvc@16.2.2': resolution: {integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==} @@ -2019,7 +1982,6 @@ packages: '@parcel/watcher-darwin-arm64@2.5.6': resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} - cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.5.0': @@ -2037,7 +1999,6 @@ packages: '@parcel/watcher-darwin-x64@2.5.6': resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.5.0': @@ -2057,47 +2018,40 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm-glibc@2.5.1': resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.0': resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} - cpu: [arm64] os: [linux] '@parcel/watcher-linux-arm64-musl@2.5.0': @@ -2105,19 +2059,16 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} - cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.5.0': @@ -2125,19 +2076,16 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.5.0': @@ -2145,19 +2093,16 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [linux] '@parcel/watcher-wasm@2.5.0': @@ -2205,7 +2150,6 @@ packages: '@parcel/watcher-win32-x64@2.5.6': resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} - cpu: [x64] os: [win32] '@parcel/watcher@2.5.0': @@ -2260,42 +2204,36 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} @@ -2360,67 +2298,56 @@ packages: resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.44.0': resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.44.0': resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.44.0': resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.44.0': resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.44.0': resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.44.0': resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.44.0': resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.44.0': resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.44.0': resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.44.0': resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} @@ -2712,7 +2639,6 @@ packages: bun@1.3.9: resolution: {integrity: sha512-v5hkh1us7sMNjfimWE70flYbD5I1/qWQaqmJ45q2qk5H/7muQVa478LSVRSFyGTBUBog2LsPQnfIRdjyWJRY+A==} - cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -3212,28 +3138,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -5296,7 +5218,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 - '@parcel/watcher@2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c)': + '@parcel/watcher@2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm)': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 @@ -5546,13 +5468,13 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) '@vitest/pretty-format@4.0.18': dependencies: @@ -5703,13 +5625,13 @@ snapshots: assertion-error@2.0.1: {} - autoprefixer@10.4.24(postcss@8.5.8): + autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001769 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -6234,7 +6156,7 @@ snapshots: lightningcss-win32-x64-msvc@1.32.0: {} - lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930): + lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum): dependencies: detect-libc: 2.1.2 optionalDependencies: @@ -6987,7 +6909,7 @@ snapshots: util-deprecate@1.0.2: {} - vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: esbuild: 0.25.0 fdir: 6.5.0(picomatch@4.0.3) @@ -6999,7 +6921,7 @@ snapshots: '@types/node': 20.19.1 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) + lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) terser: 5.31.6 tsx: 4.19.1 yaml: 2.6.0 @@ -7007,7 +6929,7 @@ snapshots: vite@8.0.0(@types/node@20.19.1)(esbuild@0.27.0)(jiti@2.6.1)(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@oxc-project/runtime': 0.115.0 - lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) + lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) picomatch: 4.0.3 postcss: 8.5.8 rolldown: 1.0.0-rc.9 @@ -7021,10 +6943,10 @@ snapshots: tsx: 4.19.1 yaml: 2.6.0 - vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -7041,7 +6963,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.1 From f5898db667190161f9938b83812eadc39bd5ec81 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 13:11:12 +0200 Subject: [PATCH 15/23] use pnpm 10.33.0 --- .github/workflows/prepare-release.yml | 2 +- .github/workflows/release-insiders.yml | 2 +- .github/workflows/release.yml | 2 +- package.json | 2 +- pnpm-lock.yaml | 136 +++++++++++++++++++------ 5 files changed, 111 insertions(+), 33 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index d5ad798be455..f00b76ad9a7a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -175,7 +175,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release-insiders.yml b/.github/workflows/release-insiders.yml index 4852cce7b7a9..54718bb484c1 100644 --- a/.github/workflows/release-insiders.yml +++ b/.github/workflows/release-insiders.yml @@ -174,7 +174,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a872900ff9e2..d33d30e4941b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -170,7 +170,7 @@ jobs: shell: bash run: | sudo pkg install -y -f curl node libnghttp2 npm - sudo npm install -g pnpm@9.6.0 --unsafe-perm=true + sudo npm install -g pnpm@10.33.0 --unsafe-perm=true curl -sSf https://static.rust-lang.org/rustup/archive/1.27.1/x86_64-unknown-freebsd/rustup-init --output rustup-init chmod +x rustup-init ./rustup-init -y --profile minimal diff --git a/package.json b/package.json index c06e7c606009..b718c3878ca3 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "typescript": "^5.5.4", "vitest": "^4.0.18" }, - "packageManager": "pnpm@9.6.0", + "packageManager": "pnpm@10.33.0", "pnpm": { "patchedDependencies": { "@parcel/watcher@2.5.1": "patches/@parcel__watcher@2.5.1.patch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c847d395cfb1..922f2fa6e9e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,10 +45,10 @@ catalogs: patchedDependencies: '@parcel/watcher@2.5.1': - hash: p6xahr7zs4c5qsorj3exeppxhm + hash: c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c path: patches/@parcel__watcher@2.5.1.patch lightningcss@1.32.0: - hash: mz3chiqe2jbihxa25xumd4ogum + hash: 1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930 path: patches/lightningcss@1.32.0.patch importers: @@ -87,9 +87,19 @@ importers: version: 5.5.4 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + version: 4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) crates/node: + devDependencies: + '@napi-rs/cli': + specifier: 3.4.1 + version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) + '@napi-rs/wasm-runtime': + specifier: ^1.1.1 + version: 1.1.1 + emnapi: + specifier: 1.8.1 + version: 1.8.1(node-addon-api@8.3.0) optionalDependencies: '@tailwindcss/oxide-android-arm64': specifier: workspace:* @@ -127,16 +137,6 @@ importers: '@tailwindcss/oxide-win32-x64-msvc': specifier: workspace:* version: link:npm/win32-x64-msvc - devDependencies: - '@napi-rs/cli': - specifier: 3.4.1 - version: 3.4.1(@emnapi/runtime@1.8.1)(@types/node@20.19.1)(node-addon-api@8.3.0) - '@napi-rs/wasm-runtime': - specifier: ^1.1.1 - version: 1.1.1 - emnapi: - specifier: 1.8.1 - version: 1.8.1(node-addon-api@8.3.0) crates/node/npm/android-arm-eabi: {} @@ -211,7 +211,7 @@ importers: dependencies: '@parcel/watcher': specifier: ^2.5.1 - version: 2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm) + version: 2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c) '@tailwindcss/node': specifier: workspace:* version: link:../@tailwindcss-node @@ -244,7 +244,7 @@ importers: version: 2.6.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -482,7 +482,7 @@ importers: version: 1.7.1 lightningcss: specifier: 'catalog:' - version: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + version: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -550,7 +550,7 @@ importers: version: 19.2.3(@types/react@19.2.14) autoprefixer: specifier: ^10.4.24 - version: 10.4.24(postcss@8.5.6) + version: 10.4.24(postcss@8.5.8) typescript: specifier: ^5.9.3 version: 5.9.3 @@ -1170,89 +1170,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1531,42 +1547,49 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-arm64-musl@1.4.5': resolution: {integrity: sha512-yWjcPDgJ2nIL3KNvi4536dlT/CcCWO0DUyEOlBs/SacG7BeD6IjGh6yYzd3/X1Y3JItCbZoDoLUH8iB1lTXo3w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/lzma-linux-ppc64-gnu@1.4.5': resolution: {integrity: sha512-0XRhKuIU/9ZjT4WDIG/qnX7Xz7mSQHYZo9Gb3MP2gcvBgr6BA4zywQ9k3gmQaPn9ECE+CZg2V7DV7kT+x2pUMQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-riscv64-gnu@1.4.5': resolution: {integrity: sha512-QrqDIPEUUB23GCpyQj/QFyMlr8SGxxyExeZz9OWFnHfb70kXdTLWrHS/hEI1Ru+lSbQ/6xRqeoGyQ4Aqdg+/RA==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-s390x-gnu@1.4.5': resolution: {integrity: sha512-k8RVM5aMhW86E9H0QXdquwojew4H3SwPxbRVbl49/COJQWCUjGi79X6mYruMnMPEznZinUiT1jgKbFo2A00NdA==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-gnu@1.4.5': resolution: {integrity: sha512-6rMtBgnIq2Wcl1rQdZsnM+rtCcVCbws1nF8S2NzaUsVaZv8bjrPiAa0lwg4Eqnn1d9lgwqT+cZgm5m+//K08Kw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/lzma-linux-x64-musl@1.4.5': resolution: {integrity: sha512-eiadGBKi7Vd0bCArBUOO/qqRYPHt/VQVvGyYvDFt6C2ZSIjlD+HuOl+2oS1sjf4CFjK4eDIog6EdXnL0NE6iyQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/lzma-wasm32-wasi@1.4.5': resolution: {integrity: sha512-+VyHHlr68dvey6fXc2hehw9gHVFIW3TtGF1XkcbAu65qVXsA9D/T+uuoRVqhE+JCyFHFrO0ixRbZDRK1XJt1sA==} @@ -1636,36 +1659,42 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-arm64-musl@1.1.0': resolution: {integrity: sha512-L/y1/26q9L/uBqiW/JdOb/Dc94egFvNALUZV2WCGKQXc6UByPBMgdiEyW2dtoYxYYYYc+AKD+jr+wQPcvX2vrQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/tar-linux-ppc64-gnu@1.1.0': resolution: {integrity: sha512-EPE1K/80RQvPbLRJDJs1QmCIcH+7WRi0F73+oTe1582y9RtfGRuzAkzeBuAGRXAQEjRQw/RjtNqr6UTJ+8UuWQ==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-s390x-gnu@1.1.0': resolution: {integrity: sha512-B2jhWiB1ffw1nQBqLUP1h4+J1ovAxBOoe5N2IqDMOc63fsPZKNqF1PvO/dIem8z7LL4U4bsfmhy3gBfu547oNQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-gnu@1.1.0': resolution: {integrity: sha512-tbZDHnb9617lTnsDMGo/eAMZxnsQFnaRe+MszRqHguKfMwkisc9CCJnks/r1o84u5fECI+J/HOrKXgczq/3Oww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/tar-linux-x64-musl@1.1.0': resolution: {integrity: sha512-dV6cODlzbO8u6Anmv2N/ilQHq/AWz0xyltuXoLU3yUyXbZcnWYZuB2rL8OBGPmqNcD+x9NdScBNXh7vWN0naSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/tar-wasm32-wasi@1.1.0': resolution: {integrity: sha512-jIa9nb2HzOrfH0F8QQ9g3WE4aMH5vSI5/1NYVNm9ysCmNjCCtMXCAhlI3WKCdm/DwHf0zLqdrrtDFXODcNaqMw==} @@ -1732,24 +1761,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-arm64-musl@1.0.1': resolution: {integrity: sha512-jAasbIvjZXCgX0TCuEFQr+4D6Lla/3AAVx2LmDuMjgG4xoIXzjKWl7c4chuaD+TI+prWT0X6LJcdzFT+ROKGHQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-linux-x64-gnu@1.0.1': resolution: {integrity: sha512-Plgk5rPqqK2nocBGajkMVbGm010Z7dnUgq0wtnYRZbzWWxwWcXfZMPa8EYxrK4eE8SzpI7VlZP1tdVsdjgGwMw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/wasm-tools-linux-x64-musl@1.0.1': resolution: {integrity: sha512-GW7AzGuWxtQkyHknHWYFdR0CHmW6is8rG2Rf4V6GNmMpmwtXt/ItWYWtBe4zqJWycMNazpfZKSw/BpT7/MVCXQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/wasm-tools-wasm32-wasi@1.0.1': resolution: {integrity: sha512-/nQVSTrqSsn7YdAc2R7Ips/tnw5SPUcl3D7QrXCNGPqjbatIspnaexvaOYNyKMU6xPu+pc0BTnKVmqhlJJCPLA==} @@ -1798,24 +1831,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@16.2.2': resolution: {integrity: sha512-VKLuscm0P/mIfzt+SDdn2+8TNNJ7f0qfEkA+az7OqQbjzKdBxAHs0UvuiVoCtbwX+dqMEL9U54b5wQ/aN3dHeg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@16.2.2': resolution: {integrity: sha512-kU3OPHJq6sBUjOk7wc5zJ7/lipn8yGldMoAv4z67j6ov6Xo/JvzA7L7LCsyzzsXmgLEhk3Qkpwqaq/1+XpNR3g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@16.2.2': resolution: {integrity: sha512-CKXRILyErMtUftp+coGcZ38ZwE/Aqq45VMCcRLr2I4OXKrgxIBDXHnBgeX/UMil0S09i2JXaDL3Q+TN8D/cKmg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@16.2.2': resolution: {integrity: sha512-sS/jSk5VUoShUqINJFvNjVT7JfR5ORYj/+/ZpOYbbIohv/lQfduWnGAycq2wlknbOql2xOR0DoV0s6Xfcy49+g==} @@ -1982,6 +2019,7 @@ packages: '@parcel/watcher-darwin-arm64@2.5.6': resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [darwin] '@parcel/watcher-darwin-x64@2.5.0': @@ -1999,6 +2037,7 @@ packages: '@parcel/watcher-darwin-x64@2.5.6': resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [darwin] '@parcel/watcher-freebsd-x64@2.5.0': @@ -2018,40 +2057,47 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-glibc@2.5.1': resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.0': resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm-musl@2.5.1': resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.0': resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.1': resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] '@parcel/watcher-linux-arm64-musl@2.5.0': @@ -2059,16 +2105,19 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.1': resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} + cpu: [arm64] os: [linux] '@parcel/watcher-linux-x64-glibc@2.5.0': @@ -2076,16 +2125,19 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.1': resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [linux] '@parcel/watcher-linux-x64-musl@2.5.0': @@ -2093,16 +2145,19 @@ packages: engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.1': resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [linux] '@parcel/watcher-wasm@2.5.0': @@ -2150,6 +2205,7 @@ packages: '@parcel/watcher-win32-x64@2.5.6': resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} engines: {node: '>= 10.0.0'} + cpu: [x64] os: [win32] '@parcel/watcher@2.5.0': @@ -2204,36 +2260,42 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} @@ -2298,56 +2360,67 @@ packages: resolution: {integrity: sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.44.0': resolution: {integrity: sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.44.0': resolution: {integrity: sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.44.0': resolution: {integrity: sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.44.0': resolution: {integrity: sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.44.0': resolution: {integrity: sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.44.0': resolution: {integrity: sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.44.0': resolution: {integrity: sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.44.0': resolution: {integrity: sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.44.0': resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.44.0': resolution: {integrity: sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.44.0': resolution: {integrity: sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==} @@ -2639,6 +2712,7 @@ packages: bun@1.3.9: resolution: {integrity: sha512-v5hkh1us7sMNjfimWE70flYbD5I1/qWQaqmJ45q2qk5H/7muQVa478LSVRSFyGTBUBog2LsPQnfIRdjyWJRY+A==} + cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -3138,24 +3212,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -5218,7 +5296,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 - '@parcel/watcher@2.5.1(patch_hash=p6xahr7zs4c5qsorj3exeppxhm)': + '@parcel/watcher@2.5.1(patch_hash=c22241764997c5af4980d3be22550ae47858f14849dca486726653fa127eb69c)': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 @@ -5468,13 +5546,13 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': + '@vitest/mocker@4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) '@vitest/pretty-format@4.0.18': dependencies: @@ -5625,13 +5703,13 @@ snapshots: assertion-error@2.0.1: {} - autoprefixer@10.4.24(postcss@8.5.6): + autoprefixer@10.4.24(postcss@8.5.8): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001769 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.8 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -6156,7 +6234,7 @@ snapshots: lightningcss-win32-x64-msvc@1.32.0: {} - lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum): + lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930): dependencies: detect-libc: 2.1.2 optionalDependencies: @@ -6909,7 +6987,7 @@ snapshots: util-deprecate@1.0.2: {} - vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: esbuild: 0.25.0 fdir: 6.5.0(picomatch@4.0.3) @@ -6921,7 +6999,7 @@ snapshots: '@types/node': 20.19.1 fsevents: 2.3.3 jiti: 2.6.1 - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) terser: 5.31.6 tsx: 4.19.1 yaml: 2.6.0 @@ -6929,7 +7007,7 @@ snapshots: vite@8.0.0(@types/node@20.19.1)(esbuild@0.27.0)(jiti@2.6.1)(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@oxc-project/runtime': 0.115.0 - lightningcss: 1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum) + lightningcss: 1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930) picomatch: 4.0.3 postcss: 8.5.8 rolldown: 1.0.0-rc.9 @@ -6943,10 +7021,10 @@ snapshots: tsx: 4.19.1 yaml: 2.6.0 - vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): + vitest@4.0.18(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) + '@vitest/mocker': 4.0.18(vite@7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -6963,7 +7041,7 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=mz3chiqe2jbihxa25xumd4ogum))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) + vite: 7.0.0(@types/node@20.19.1)(jiti@2.6.1)(lightningcss@1.32.0(patch_hash=1d4a8800d60d13d42887b88b3a86576df4b451670308145fb432ec8abbf40930))(terser@5.31.6)(tsx@4.19.1)(yaml@2.6.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.1 From c6b8efd1f17b0db32014e77e8afd526668a5cd00 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 13:25:15 +0200 Subject: [PATCH 16/23] use `pnpm exec`, `bun x` and `npx` --- integrations/upgrade/index.test.ts | 86 ++++++++++----------- integrations/upgrade/upgrade-errors.test.ts | 12 +-- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/integrations/upgrade/index.test.ts b/integrations/upgrade/index.test.ts index cf58f5912c43..d8defce73f10 100644 --- a/integrations/upgrade/index.test.ts +++ b/integrations/upgrade/index.test.ts @@ -28,7 +28,7 @@ test( }, }, async ({ fs, exec, expect }) => { - let output = await exec('npx @tailwindcss/upgrade') + let output = await exec('pnpm exec upgrade') expect(output).toContain('Cannot find any CSS files that reference Tailwind CSS.') // Files should not be modified @@ -100,7 +100,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -158,7 +158,7 @@ test( }) // Ensure the v4 project compiles correctly - await exec('npx tailwindcss --input src/input.css --output dist/out.css') + await exec('pnpm exec tailwindcss --input src/input.css --output dist/out.css') await fs.expectFileToContain('dist/out.css', [ candidate`flex!`, @@ -204,7 +204,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./**/*.{html,php,txt}')).toMatchInlineSnapshot(` " @@ -262,7 +262,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -334,7 +334,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -406,7 +406,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -483,7 +483,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -586,7 +586,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -694,7 +694,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain( 'postcss.config.js', @@ -765,7 +765,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let packageJsonContent = await fs.read('package.json') let packageJson = JSON.parse(packageJsonContent) @@ -812,7 +812,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let packageJsonContent = await fs.read('package.json') let packageJson = JSON.parse(packageJsonContent) @@ -864,7 +864,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain('src/index.css', css`@import 'tailwindcss';`) await fs.expectFileToContain( @@ -940,7 +940,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') await fs.expectFileToContain('src/index.css', css`@import 'tailwindcss';`) await fs.expectFileToContain( @@ -1007,7 +1007,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.html')).toMatchInlineSnapshot(` " @@ -1054,7 +1054,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.html')).toMatchInlineSnapshot(` " @@ -1098,7 +1098,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1170,7 +1170,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1281,7 +1281,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -1414,7 +1414,7 @@ test( }, }, async ({ exec, fs, expect }) => { - let output = await exec('npx @tailwindcss/upgrade --force') + let output = await exec('pnpm exec upgrade --force') expect(output).toMatch( /You have one or more stylesheets that are imported into a utility layer and non-utility layer./, @@ -1538,7 +1538,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -1763,8 +1763,8 @@ test( }, }, async ({ exec, expect }) => { - let output = await exec('npx @tailwindcss/upgrade --force', {}, { ignoreStdErr: true }).catch( - (e) => e.toString(), + let output = await exec('pnpm exec upgrade --force', {}, { ignoreStdErr: true }).catch((e) => + e.toString(), ) expect(output).toMatch('Could not determine configuration file for:') @@ -1835,7 +1835,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -1971,7 +1971,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -2091,7 +2091,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.{html,css}')).toMatchInlineSnapshot(` " @@ -2171,7 +2171,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -2255,7 +2255,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') expect(await fs.dumpFiles('./src/**/*.css')).toMatchInlineSnapshot(` " @@ -2309,7 +2309,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') let pkg = JSON.parse(await fs.read('package.json')) @@ -2388,7 +2388,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') // Files should not be modified expect(await fs.dumpFiles('./*.{js,css,html}')).toMatchInlineSnapshot(` @@ -2486,7 +2486,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade --force') + await exec('pnpm exec upgrade --force') // Files should not be modified expect(await fs.dumpFiles('./*.{js,css,html,tsx}')).toMatchInlineSnapshot(` @@ -2593,7 +2593,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade ./src/index.css') + await exec('pnpm exec upgrade ./src/index.css') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2719,7 +2719,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2805,7 +2805,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -2873,7 +2873,7 @@ test( }, }, async ({ exec, root, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') let before = await fs.dumpFiles('./src/**/*.{css,html}') expect(before).toMatchInlineSnapshot(` @@ -2915,7 +2915,7 @@ test( } // Run the upgrade again - let output = await exec('npx @tailwindcss/upgrade') + let output = await exec('pnpm exec upgrade') expect(output).toContain('No changes were made to your repository') let after = await fs.dumpFiles('./src/**/*.{css,html}') @@ -2994,7 +2994,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,html}')).toMatchInlineSnapshot(` " @@ -3043,7 +3043,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/{*,.env,.env.*}')).toMatchInlineSnapshot(` " @@ -3114,7 +3114,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./{src,templates}/**/*')).toMatchInlineSnapshot(` " @@ -3190,7 +3190,7 @@ test( let originalKeepFile = await fs.read('src/keep.php') let originalTemplate = await fs.read('src/templates/template-0.php') - let process = await spawn('npx @tailwindcss/upgrade --force', { + let process = await spawn('pnpm exec upgrade --force', { env: { NODE_OPTIONS: '--require=./hook.cjs', }, @@ -3257,7 +3257,7 @@ test( }, }, async ({ root, exec, fs, expect }) => { - let stdout = await exec('npx @tailwindcss/upgrade', { + let stdout = await exec('pnpm exec upgrade', { cwd: path.join(root, 'project-a'), }) @@ -3331,7 +3331,7 @@ test( }, }, async ({ exec, fs, expect }) => { - let stdout = await exec('npx @tailwindcss/upgrade') + let stdout = await exec('pnpm exec upgrade') expect(stdout).not.toContain( 'Running this command will add the dependency to the workspace root', @@ -3407,7 +3407,7 @@ test( }, }, async ({ exec, fs, expect }) => { - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') expect(await fs.dumpFiles('./src/**/*.{css,vue}')).toMatchInlineSnapshot(` " diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index dfb5c0a1f673..408e28ec30fd 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -39,7 +39,7 @@ test( await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 - await exec('npx @tailwindcss/upgrade') + await exec('pnpm exec upgrade') // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. @@ -47,7 +47,7 @@ test( // Re-running the upgrade should result in an error return expect(() => { - return exec('npx @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { + return exec('pnpm exec upgrade', {}, { ignoreStdErr: true }).catch((e) => { // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( @@ -55,7 +55,7 @@ test( ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: npx @tailwindcss/upgrade + "Command failed: pnpm exec upgrade ≈ tailwindcss v4.0.0 │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` @@ -128,7 +128,7 @@ test( await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 - await exec('npx @tailwindcss/upgrade') + await exec('bun x @tailwindcss/upgrade') // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. @@ -136,7 +136,7 @@ test( // Re-running the upgrade should result in an error return expect(() => { - return exec('npx @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { + return exec('bun x @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( @@ -144,7 +144,7 @@ test( ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: npx @tailwindcss/upgrade + "Command failed: bun x @tailwindcss/upgrade ≈ tailwindcss v4.0.0 │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` From 6dbdecbcae48b63bdaad5a7f96caa97fd12c5882 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 21:54:05 +0200 Subject: [PATCH 17/23] set minimumReleaseAge to 2 days --- pnpm-workspace.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ef34ac69970f..cfe0316193ba 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ -minimumReleaseAge: 10080 # 7 days in minutes +minimumReleaseAge: 2880 # 2 days in minutes # Allow postinstall scripts during installation # https://pnpm.io/settings#onlybuiltdependencies From 357779b15b58d81fc4b7f457dce089156c9e8771 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 22:13:48 +0200 Subject: [PATCH 18/23] clean git repo state --- integrations/upgrade/upgrade-errors.test.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 408e28ec30fd..05016df504c6 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -43,7 +43,8 @@ test( // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. - await exec('git reset --hard HEAD') + await exec('git reset --hard') + await exec('git clean -df') // Re-running the upgrade should result in an error return expect(() => { @@ -132,7 +133,8 @@ test( // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. - await exec('git reset --hard HEAD') + await exec('git reset --hard') + await exec('git clean -df') // Re-running the upgrade should result in an error return expect(() => { @@ -220,7 +222,8 @@ test( // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. - await exec('git reset --hard HEAD') + await exec('git reset --hard') + await exec('git clean -df') // Re-running the upgrade should result in an error return expect(() => { From c79c140134d3f2e2ea7ab7bbd86463af3ab843bd Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 22:28:45 +0200 Subject: [PATCH 19/23] tmp: debug --- .github/workflows/integration-tests.yml | 2 +- integrations/upgrade/upgrade-errors.test.ts | 364 +++++++++--------- integrations/utils.ts | 9 +- .../@tailwindcss-upgrade/src/utils/git.ts | 4 +- 4 files changed, 190 insertions(+), 189 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 41599c07b1d2..263a362e3084 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -109,7 +109,7 @@ jobs: CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER: 'lld-link' - name: Test ${{ matrix.integration }} - run: pnpm exec vitest --root=./integrations ./integrations/${{ matrix.integration }} + run: pnpm exec vitest --allowOnly --root=./integrations ./integrations/${{ matrix.integration }} env: GITHUB_WORKSPACE: ${{ github.workspace }} diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 05016df504c6..40f722568f10 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -39,16 +39,20 @@ test( await exec('git commit -m "before migration" --allow-empty') // Fully upgrade to v4 + console.log('Running upgrade command...') await exec('pnpm exec upgrade') + console.log('Ran upgrade command successfully') // Undo all changes to the current repo. This will bring the repo back to a // v3 state, but the `node_modules` will now have v4 installed. + console.log('Cleaning up changes...') await exec('git reset --hard') await exec('git clean -df') + console.log('Cleaned up changes successfully') // Re-running the upgrade should result in an error return expect(() => { - return exec('pnpm exec upgrade', {}, { ignoreStdErr: true }).catch((e) => { + return exec('pnpm exec upgrade --force', {}, { ignoreStdErr: true }).catch((e) => { // Replacing the current version with a hardcoded `v4` to make it stable // when we release new minor/patch versions. return Promise.reject( @@ -56,7 +60,7 @@ test( ) }) }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: pnpm exec upgrade + "Command failed: pnpm exec upgrade --force ≈ tailwindcss v4.0.0 │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` @@ -75,184 +79,184 @@ test( }, ) -test( - 'upgrades half-upgraded v3 project to v4 (bun)', - { - fs: { - 'package.json': json` - { - "dependencies": { - "tailwindcss": "^3", - "@tailwindcss/upgrade": "workspace:^" - }, - "devDependencies": { - "@tailwindcss/cli": "workspace:^", - "bun": "^1.0.0" - } - } - `, - 'tailwind.config.js': js` - /** @type {import('tailwindcss').Config} */ - module.exports = { - content: ['./src/**/*.{html,js}'], - } - `, - 'src/index.html': html` -
Hello World
- `, - 'src/input.css': css` - @tailwind base; - @tailwind components; - @tailwind utilities; - `, - }, - }, - async ({ exec, expect }) => { - // Use `bun` to install dependencies - await exec('rm ./pnpm-lock.yaml') - try { - await exec('npm rebuild bun') // Run postinstall of bun - await exec('npx bun install', {}, { ignoreStdErr: true }) - } catch (e) { - // When preparing for a release, the version in `package.json` will point - // to a non-existent version because it's not published yet. - // TODO: Find a better approach to handle this and actually test it even - // on release branches. Note: the pnpm version _does_ work because of - // overrides in the package.json file. - if (`${e}`.includes('No version matching')) return - throw e - } - - // Ensure we are in a git repo - await exec('git init') - await exec('git add --all') - await exec('git commit -m "before migration" --allow-empty') - - // Fully upgrade to v4 - await exec('bun x @tailwindcss/upgrade') - - // Undo all changes to the current repo. This will bring the repo back to a - // v3 state, but the `node_modules` will now have v4 installed. - await exec('git reset --hard') - await exec('git clean -df') - - // Re-running the upgrade should result in an error - return expect(() => { - return exec('bun x @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { - // Replacing the current version with a hardcoded `v4` to make it stable - // when we release new minor/patch versions. - return Promise.reject( - stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), - ) - }) - }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: bun x @tailwindcss/upgrade - ≈ tailwindcss v4.0.0 - - │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` - - │ ↳ Version mismatch - │ - │ \`\`\`diff - │ - "tailwindcss": "^3" (expected version in \`package.json\`) - │ + "tailwindcss": "4.0.0" (installed version in \`node_modules\`) - │ \`\`\` - │ - │ Make sure to run \`bun install\` and try again. - - " - `) - }, -) - -test( - 'upgrades half-upgraded v3 project to v4 (npm)', - { - fs: { - 'package.json': json` - { - "dependencies": { - "tailwindcss": "^3", - "@tailwindcss/upgrade": "workspace:^" - }, - "devDependencies": { - "@tailwindcss/cli": "workspace:^" - } - } - `, - 'tailwind.config.js': js` - /** @type {import('tailwindcss').Config} */ - module.exports = { - content: ['./src/**/*.{html,js}'], - } - `, - 'src/index.html': html` -
Hello World
- `, - 'src/input.css': css` - @tailwind base; - @tailwind components; - @tailwind utilities; - `, - }, - }, - async ({ exec, expect }) => { - // Use `npm` to install dependencies - await exec('rm ./pnpm-lock.yaml') - await exec('rm -rf ./node_modules') - try { - await exec('npm install', {}, { ignoreStdErr: true }) - } catch (e) { - // When preparing for a release, the version in `package.json` will point - // to a non-existent version because it's not published yet. - // TODO: Find a better approach to handle this and actually test it even - // on release branches. Note: the pnpm version _does_ work because of - // overrides in the package.json file. - if (`${e}`.includes('npm error code ETARGET')) return - throw e - } - - // Ensure we are in a git repo - await exec('git init') - await exec('git add --all') - await exec('git commit -m "before migration" --allow-empty') - - // Fully upgrade to v4 - await exec('npx @tailwindcss/upgrade') - - // Undo all changes to the current repo. This will bring the repo back to a - // v3 state, but the `node_modules` will now have v4 installed. - await exec('git reset --hard') - await exec('git clean -df') - - // Re-running the upgrade should result in an error - return expect(() => { - return exec('npx @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { - // Replacing the current version with a hardcoded `v4` to make it stable - // when we release new minor/patch versions. - return Promise.reject( - stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), - ) - }) - }).rejects.toThrowErrorMatchingInlineSnapshot(` - "Command failed: npx @tailwindcss/upgrade - ≈ tailwindcss v4.0.0 - - │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` - - │ ↳ Version mismatch - │ - │ \`\`\`diff - │ - "tailwindcss": "^3" (expected version in \`package.json\`) - │ + "tailwindcss": "4.0.0" (installed version in \`node_modules\`) - │ \`\`\` - │ - │ Make sure to run \`npm install\` and try again. - - " - `) - }, -) +// test( +// 'upgrades half-upgraded v3 project to v4 (bun)', +// { +// fs: { +// 'package.json': json` +// { +// "dependencies": { +// "tailwindcss": "^3", +// "@tailwindcss/upgrade": "workspace:^" +// }, +// "devDependencies": { +// "@tailwindcss/cli": "workspace:^", +// "bun": "^1.0.0" +// } +// } +// `, +// 'tailwind.config.js': js` +// [>* @type {import('tailwindcss').Config} <] +// module.exports = { +// content: ['./src/**/*.{html,js}'], +// } +// `, +// 'src/index.html': html` +//
Hello World
+// `, +// 'src/input.css': css` +// @tailwind base; +// @tailwind components; +// @tailwind utilities; +// `, +// }, +// }, +// async ({ exec, expect }) => { +// // Use `bun` to install dependencies +// await exec('rm ./pnpm-lock.yaml') +// try { +// await exec('npm rebuild bun') // Run postinstall of bun +// await exec('npx bun install', {}, { ignoreStdErr: true }) +// } catch (e) { +// // When preparing for a release, the version in `package.json` will point +// // to a non-existent version because it's not published yet. +// // TODO: Find a better approach to handle this and actually test it even +// // on release branches. Note: the pnpm version _does_ work because of +// // overrides in the package.json file. +// if (`${e}`.includes('No version matching')) return +// throw e +// } +// +// // Ensure we are in a git repo +// await exec('git init') +// await exec('git add --all') +// await exec('git commit -m "before migration" --allow-empty') +// +// // Fully upgrade to v4 +// await exec('bun x @tailwindcss/upgrade') +// +// // Undo all changes to the current repo. This will bring the repo back to a +// // v3 state, but the `node_modules` will now have v4 installed. +// await exec('git reset --hard') +// await exec('git clean -df') +// +// // Re-running the upgrade should result in an error +// return expect(() => { +// return exec('bun x @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { +// // Replacing the current version with a hardcoded `v4` to make it stable +// // when we release new minor/patch versions. +// return Promise.reject( +// stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), +// ) +// }) +// }).rejects.toThrowErrorMatchingInlineSnapshot(` +// "Command failed: bun x @tailwindcss/upgrade +// ≈ tailwindcss v4.0.0 +// +// │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` +// +// │ ↳ Version mismatch +// │ +// │ \`\`\`diff +// │ - "tailwindcss": "^3" (expected version in \`package.json\`) +// │ + "tailwindcss": "4.0.0" (installed version in \`node_modules\`) +// │ \`\`\` +// │ +// │ Make sure to run \`bun install\` and try again. +// +// " +// `) +// }, +// ) +// +// test( +// 'upgrades half-upgraded v3 project to v4 (npm)', +// { +// fs: { +// 'package.json': json` +// { +// "dependencies": { +// "tailwindcss": "^3", +// "@tailwindcss/upgrade": "workspace:^" +// }, +// "devDependencies": { +// "@tailwindcss/cli": "workspace:^" +// } +// } +// `, +// 'tailwind.config.js': js` +// [>* @type {import('tailwindcss').Config} <] +// module.exports = { +// content: ['./src/**/*.{html,js}'], +// } +// `, +// 'src/index.html': html` +//
Hello World
+// `, +// 'src/input.css': css` +// @tailwind base; +// @tailwind components; +// @tailwind utilities; +// `, +// }, +// }, +// async ({ exec, expect }) => { +// // Use `npm` to install dependencies +// await exec('rm ./pnpm-lock.yaml') +// await exec('rm -rf ./node_modules') +// try { +// await exec('npm install', {}, { ignoreStdErr: true }) +// } catch (e) { +// // When preparing for a release, the version in `package.json` will point +// // to a non-existent version because it's not published yet. +// // TODO: Find a better approach to handle this and actually test it even +// // on release branches. Note: the pnpm version _does_ work because of +// // overrides in the package.json file. +// if (`${e}`.includes('npm error code ETARGET')) return +// throw e +// } +// +// // Ensure we are in a git repo +// await exec('git init') +// await exec('git add --all') +// await exec('git commit -m "before migration" --allow-empty') +// +// // Fully upgrade to v4 +// await exec('npx @tailwindcss/upgrade') +// +// // Undo all changes to the current repo. This will bring the repo back to a +// // v3 state, but the `node_modules` will now have v4 installed. +// await exec('git reset --hard') +// await exec('git clean -df') +// +// // Re-running the upgrade should result in an error +// return expect(() => { +// return exec('npx @tailwindcss/upgrade', {}, { ignoreStdErr: true }).catch((e) => { +// // Replacing the current version with a hardcoded `v4` to make it stable +// // when we release new minor/patch versions. +// return Promise.reject( +// stripNpmWarnings(stripVTControlCharacters(e.message.replace(/\d+\.\d+\.\d+/g, '4.0.0'))), +// ) +// }) +// }).rejects.toThrowErrorMatchingInlineSnapshot(` +// "Command failed: npx @tailwindcss/upgrade +// ≈ tailwindcss v4.0.0 +// +// │ ↳ Upgrading from Tailwind CSS \`v4.0.0\` +// +// │ ↳ Version mismatch +// │ +// │ \`\`\`diff +// │ - "tailwindcss": "^3" (expected version in \`package.json\`) +// │ + "tailwindcss": "4.0.0" (installed version in \`node_modules\`) +// │ \`\`\` +// │ +// │ Make sure to run \`npm install\` and try again. +// +// " +// `) +// }, +// ) function stripNpmWarnings(input: string) { return input.replace(/npm warn.*?\n/g, '') diff --git a/integrations/utils.ts b/integrations/utils.ts index dbce66ca8bc8..bda751d7e262 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -91,7 +91,7 @@ export function test( retry: process.env.CI ? 2 : 0, only: only || (!process.env.CI && debug), skip, - concurrent: true, + concurrent: false, }, async (options) => { let rootDir = debug ? path.join(REPO_ROOT, '.debug') : TMP_ROOT @@ -451,12 +451,7 @@ export function test( } } - try { - return await testCallback(context) - } catch (err) { - Error.captureStackTrace(testCallback) - throw err - } + return testCallback(context) }, ) } diff --git a/packages/@tailwindcss-upgrade/src/utils/git.ts b/packages/@tailwindcss-upgrade/src/utils/git.ts index 75f64b1c1d8d..2add55e441c8 100644 --- a/packages/@tailwindcss-upgrade/src/utils/git.ts +++ b/packages/@tailwindcss-upgrade/src/utils/git.ts @@ -3,7 +3,9 @@ import { execSync } from 'node:child_process' export function isRepoDirty(cwd?: string) { try { let stdout = execSync('git status --porcelain', { encoding: 'utf-8', cwd }) - return stdout.trim() !== '' + let isDirty = stdout.trim() !== '' + + return isDirty } catch (error) { // If it's not a git repository we don't know if it's dirty or not. But we // also don't want to block the migration. Maybe we can still fail and From 6672f75ab74002022966feb08415a1c0f6d95dc7 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Fri, 3 Apr 2026 23:37:58 +0200 Subject: [PATCH 20/23] tmp: disable retry --- integrations/upgrade/upgrade-errors.test.ts | 2 ++ integrations/utils.ts | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/integrations/upgrade/upgrade-errors.test.ts b/integrations/upgrade/upgrade-errors.test.ts index 40f722568f10..eab9c8081ed4 100644 --- a/integrations/upgrade/upgrade-errors.test.ts +++ b/integrations/upgrade/upgrade-errors.test.ts @@ -31,7 +31,9 @@ test( @tailwind utilities; `, }, + retry: 0, }, + async ({ exec, expect }) => { // Ensure we are in a git repo await exec('git init') diff --git a/integrations/utils.ts b/integrations/utils.ts index bda751d7e262..d19deedeb0dd 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -37,6 +37,7 @@ interface TestConfig { [filePath: string]: string | Uint8Array } + retry?: number timeout?: number installDependencies?: boolean } @@ -88,7 +89,7 @@ export function test( name, { timeout: config.timeout ?? TEST_TIMEOUT, - retry: process.env.CI ? 2 : 0, + retry: config.retry ?? (process.env.CI ? 2 : 0), only: only || (!process.env.CI && debug), skip, concurrent: false, From a62b61df64bef761a1a237f62385f0d79de1824a Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sat, 4 Apr 2026 00:14:36 +0200 Subject: [PATCH 21/23] try with execFile --- .../@tailwindcss-upgrade/src/utils/packages.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/@tailwindcss-upgrade/src/utils/packages.ts b/packages/@tailwindcss-upgrade/src/utils/packages.ts index 461a6983a86d..f618d34236ec 100644 --- a/packages/@tailwindcss-upgrade/src/utils/packages.ts +++ b/packages/@tailwindcss-upgrade/src/utils/packages.ts @@ -1,4 +1,4 @@ -import { exec as execCb } from 'node:child_process' +import { execFile as execFileCb } from 'node:child_process' import { readFileSync } from 'node:fs' import fs from 'node:fs/promises' import { dirname, resolve } from 'node:path' @@ -6,7 +6,15 @@ import { promisify } from 'node:util' import { DefaultMap } from '../../../tailwindcss/src/utils/default-map' import { error, warn } from './renderer' -const exec = promisify(execCb) +const execFile = promisify(execFileCb) + +async function run(packageManager: string, args: string[], cwd: string) { + // if (process.platform === 'win32' && packageManager !== 'bun') { + // return await execFile(`${packageManager}.cmd`, args, { cwd }) + // } + + return await execFile(packageManager, args, { cwd }) +} const SAVE_DEV: Record = { default: '-D', @@ -43,7 +51,7 @@ export function pkg(base: string) { let command = `${packageManager} add ${args.join(' ')}` try { - return await exec(command, { cwd: base }) + return await run(packageManager, ['add', ...args], base) } catch (e: any) { error(`An error occurred while running \`${command}\`\n\n${e.stdout}\n${e.stderr}`, { prefix: '↳ ', @@ -60,7 +68,7 @@ export function pkg(base: string) { let packageManager = await packageManagerForBase.get(base) let command = `${packageManager} remove ${packages.join(' ')}` try { - return await exec(command, { cwd: base }) + return await run(packageManager, ['remove', ...packages], base) } catch (e: any) { error(`An error occurred while running \`${command}\`\n\n${e.stdout}\n${e.stderr}`, { prefix: '↳ ', From 9592d19b27fd4964918ec83c71e566d97cc03345 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sat, 4 Apr 2026 00:26:32 +0200 Subject: [PATCH 22/23] use execFile with cmd.exe on Windows --- packages/@tailwindcss-upgrade/src/utils/packages.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/@tailwindcss-upgrade/src/utils/packages.ts b/packages/@tailwindcss-upgrade/src/utils/packages.ts index f618d34236ec..a99bb99233df 100644 --- a/packages/@tailwindcss-upgrade/src/utils/packages.ts +++ b/packages/@tailwindcss-upgrade/src/utils/packages.ts @@ -9,9 +9,13 @@ import { error, warn } from './renderer' const execFile = promisify(execFileCb) async function run(packageManager: string, args: string[], cwd: string) { - // if (process.platform === 'win32' && packageManager !== 'bun') { - // return await execFile(`${packageManager}.cmd`, args, { cwd }) - // } + if (process.platform === 'win32' && packageManager !== 'bun') { + return await execFile( + process.env.ComSpec || 'cmd.exe', + ['/d', '/s', '/c', packageManager, ...args], + { cwd }, + ) + } return await execFile(packageManager, args, { cwd }) } From 187ae6232b4cd531e4ce0f0988dbafa037238f4f Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sat, 4 Apr 2026 00:36:09 +0200 Subject: [PATCH 23/23] use execFile in the integration test --- integrations/utils.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/integrations/utils.ts b/integrations/utils.ts index d19deedeb0dd..052a24488d57 100644 --- a/integrations/utils.ts +++ b/integrations/utils.ts @@ -1,6 +1,6 @@ import dedent from 'dedent' import fastGlob from 'fast-glob' -import { exec, spawn } from 'node:child_process' +import { execFile, spawn } from 'node:child_process' import fs from 'node:fs/promises' import { platform, tmpdir } from 'node:os' import path from 'node:path' @@ -71,6 +71,9 @@ type SpawnActor = { predicate: (message: string) => boolean; resolve: () => void export const IS_WINDOWS = platform() === 'win32' +const SHELL_EXECUTABLE = IS_WINDOWS ? process.env.ComSpec || 'cmd.exe' : '/bin/sh' +const SHELL_ARGS = IS_WINDOWS ? ['/d', '/s', '/c'] : ['-c'] + const TEST_TIMEOUT = IS_WINDOWS ? 120000 : 60000 const ASSERTION_TIMEOUT = IS_WINDOWS ? 10000 : 5000 @@ -123,8 +126,9 @@ export function test( } if (debug) console.log(`> ${command}`) return new Promise((resolve, reject) => { - let child = exec( - command, + let child = execFile( + SHELL_EXECUTABLE, + [...SHELL_ARGS, command], { cwd, ...childProcessOptions, @@ -135,6 +139,10 @@ export function test( }, (error, stdout, stderr) => { if (error) { + error.message = error.message.replace(/^Command failed:.*?(\r?\n|$)/, (match) => { + let newline = match.endsWith('\r\n') ? '\r\n' : '\n' + return `Command failed: ${command}${newline}` + }) if (execOptions.ignoreStdErr !== true) console.error(stderr) if (only || debug) { console.error(stdout)