mirror your GitHub repos to tangled.org automatically
1

Configure Feed

Select the types of activity you want to include in your feed.

chore: tidy up + lint/typefix

+175 -156
+2 -2
app/pages/dashboard.vue
··· 176 176 const entries = Object.entries(refs) 177 177 if (entries.length === 0) return '—' 178 178 if (entries.length === 1) { 179 - const [ref, sha] = entries[0]! 180 - return `${ref} @ ${sha.slice(0, 7)}` 179 + const [refName, sha] = entries[0]! 180 + return `${refName} @ ${sha.slice(0, 7)}` 181 181 } 182 182 return `${entries.length} refs` 183 183 }
+10 -1
nuxt.config.ts
··· 38 38 }, 39 39 typescript: { 40 40 nodeTsConfig: { 41 - include: ['../vite.config.ts'], 41 + compilerOptions: { 42 + types: ['node'], 43 + }, 44 + include: [ 45 + '../vite.config.ts', 46 + '../test/unit', 47 + '../test/utils', 48 + // TODO: fix in a better way 🤦 49 + './types/nitro-imports.d.ts', 50 + ], 42 51 }, 43 52 }, 44 53 app: {
+1
package.json
··· 62 62 "@octokit/webhooks-types": "^7.6.1", 63 63 "@playwright/test": "1.59.1", 64 64 "@stylistic/eslint-plugin": "^5.10.0", 65 + "@types/node": "^24.13.2", 65 66 "@vitest/coverage-v8": "^4.1.5", 66 67 "@vue/test-utils": "2.4.10", 67 68 "drizzle-kit": "^0.31.10",
+105 -102
pnpm-lock.yaml
··· 32 32 version: 2.2.0 33 33 '@nuxt/fonts': 34 34 specifier: ^0.14.0 35 - version: 0.14.0(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 35 + version: 0.14.0(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 36 36 '@nuxt/image': 37 37 specifier: ^2.0.0 38 38 version: 2.0.0(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(srvx@0.11.15) 39 39 '@nuxt/scripts': 40 40 specifier: ^1.0.6 41 - version: 1.0.6(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 41 + version: 1.0.6(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 42 42 '@nuxtjs/html-validator': 43 43 specifier: ^2.1.0 44 44 version: 2.1.0(@voidzero-dev/vite-plus-test@0.1.20)(magicast@0.5.2) ··· 56 56 version: 0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0) 57 57 nuxt: 58 58 specifier: ^4.4.4 59 - version: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 59 + version: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@24.13.2)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 60 60 nuxt-og-image: 61 61 specifier: ^6.4.11 62 - version: 6.4.11(51cc4797704473e6ff9b1d290d94c09f) 62 + version: 6.4.11(9146e07c6ffc7477ec4740733a944d20) 63 63 rolldown: 64 64 specifier: ^1.0.0-rc.18 65 65 version: 1.0.0-rc.18 66 66 vite-plus: 67 67 specifier: 0.1.20 68 - version: 0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) 68 + version: 0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) 69 69 vue: 70 70 specifier: 3.5.33 71 71 version: 3.5.33(typescript@6.0.3) ··· 78 78 version: 0.4.5 79 79 '@nuxt/test-utils': 80 80 specifier: 4.0.3 81 - version: 4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 81 + version: 4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 82 82 '@octokit/webhooks-types': 83 83 specifier: ^7.6.1 84 84 version: 7.6.1 ··· 88 88 '@stylistic/eslint-plugin': 89 89 specifier: ^5.10.0 90 90 version: 5.10.0(eslint@10.3.0(jiti@2.6.1)) 91 + '@types/node': 92 + specifier: ^24.13.2 93 + version: 24.13.2 91 94 '@vitest/coverage-v8': 92 95 specifier: ^4.1.5 93 96 version: 4.1.5(@vitest/browser@4.1.5)(@voidzero-dev/vite-plus-test@0.1.20) ··· 114 117 version: 6.0.3 115 118 vitest: 116 119 specifier: npm:@voidzero-dev/vite-plus-test@0.1.20 117 - version: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 120 + version: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 118 121 vue-tsc: 119 122 specifier: 3.2.7 120 123 version: 3.2.7(typescript@6.0.3) ··· 2759 2762 '@types/json-schema@7.0.15': 2760 2763 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 2761 2764 2762 - '@types/node@25.6.0': 2763 - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} 2765 + '@types/node@24.13.2': 2766 + resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} 2764 2767 2765 2768 '@types/resolve@1.20.2': 2766 2769 resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} ··· 5474 5477 unctx@2.5.0: 5475 5478 resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==} 5476 5479 5477 - undici-types@7.19.2: 5478 - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} 5480 + undici-types@7.18.2: 5481 + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} 5479 5482 5480 5483 undici@6.25.0: 5481 5484 resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} ··· 6871 6874 6872 6875 '@nuxt/devalue@2.0.2': {} 6873 6876 6874 - '@nuxt/devtools-kit@2.7.0(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6877 + '@nuxt/devtools-kit@2.7.0(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6875 6878 dependencies: 6876 6879 '@nuxt/kit': 3.21.4(magicast@0.5.2) 6877 6880 execa: 8.0.1 6878 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6881 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6879 6882 transitivePeerDependencies: 6880 6883 - magicast 6881 6884 6882 - '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6885 + '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6883 6886 dependencies: 6884 6887 '@nuxt/kit': 4.4.4(magicast@0.5.2) 6885 6888 execa: 8.0.1 6886 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6889 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6887 6890 transitivePeerDependencies: 6888 6891 - magicast 6889 6892 6890 - '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6893 + '@nuxt/devtools-kit@4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6891 6894 dependencies: 6892 6895 '@nuxt/kit': 4.4.4(magicast@0.5.2) 6893 6896 tinyexec: 1.1.2 6894 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6897 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6895 6898 transitivePeerDependencies: 6896 6899 - magicast 6897 6900 ··· 6906 6909 pkg-types: 2.3.1 6907 6910 semver: 7.7.4 6908 6911 6909 - '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 6912 + '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 6910 6913 dependencies: 6911 - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6914 + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6912 6915 '@nuxt/devtools-wizard': 3.2.4 6913 6916 '@nuxt/kit': 4.4.4(magicast@0.5.2) 6914 6917 '@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3)) ··· 6936 6939 sirv: 3.0.2 6937 6940 structured-clone-es: 2.0.0 6938 6941 tinyglobby: 0.2.16 6939 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6940 - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.4(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6941 - vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 6942 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 6943 + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.4(magicast@0.5.2))(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6944 + vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 6942 6945 which: 6.0.1 6943 6946 ws: 8.20.0 6944 6947 transitivePeerDependencies: ··· 6947 6950 - utf-8-validate 6948 6951 - vue 6949 6952 6950 - '@nuxt/fonts@0.14.0(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6953 + '@nuxt/fonts@0.14.0(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 6951 6954 dependencies: 6952 - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6955 + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6953 6956 '@nuxt/kit': 4.4.4(magicast@0.5.2) 6954 6957 consola: 3.4.2 6955 6958 defu: 6.1.7 6956 - fontless: 0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6959 + fontless: 0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 6957 6960 h3: 1.15.11 6958 6961 magic-regexp: 0.10.0 6959 6962 ofetch: 1.5.1 ··· 7075 7078 transitivePeerDependencies: 7076 7079 - magicast 7077 7080 7078 - '@nuxt/nitro-server@4.4.4(c703237518f96a01201357fd255c3b67)': 7081 + '@nuxt/nitro-server@4.4.4(a1970d5ae76c60e791e0476449345803)': 7079 7082 dependencies: 7080 7083 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) 7081 7084 '@nuxt/devalue': 2.0.2 ··· 7094 7097 klona: 2.0.6 7095 7098 mocked-exports: 0.1.1 7096 7099 nitropack: 2.13.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(oxc-parser@0.128.0)(rolldown@1.0.0-rc.18)(srvx@0.11.15) 7097 - nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 7100 + nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@24.13.2)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 7098 7101 nypm: 0.6.6 7099 7102 ohash: 2.0.11 7100 7103 pathe: 2.0.3 ··· 7153 7156 pkg-types: 2.3.1 7154 7157 std-env: 4.1.0 7155 7158 7156 - '@nuxt/scripts@1.0.6(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 7159 + '@nuxt/scripts@1.0.6(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 7157 7160 dependencies: 7158 - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7161 + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7159 7162 '@nuxt/kit': 4.4.4(magicast@0.5.2) 7160 7163 '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) 7161 7164 '@vueuse/core': 14.3.0(vue@3.5.33(typescript@6.0.3)) ··· 7211 7214 rc9: 3.0.1 7212 7215 std-env: 4.1.0 7213 7216 7214 - '@nuxt/test-utils@4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 7217 + '@nuxt/test-utils@4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 7215 7218 dependencies: 7216 7219 '@clack/prompts': 1.2.0 7217 - '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7220 + '@nuxt/devtools-kit': 2.7.0(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7218 7221 '@nuxt/kit': 3.21.4(magicast@0.5.2) 7219 7222 c12: 3.3.4(magicast@0.5.2) 7220 7223 consola: 3.4.2 ··· 7240 7243 tinyexec: 1.1.2 7241 7244 ufo: 1.6.4 7242 7245 unplugin: 3.0.0 7243 - vitest-environment-nuxt: 2.0.0(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7246 + vitest-environment-nuxt: 2.0.0(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 7244 7247 vue: 3.5.33(typescript@6.0.3) 7245 7248 optionalDependencies: 7246 7249 '@playwright/test': 1.59.1 7247 7250 '@vue/test-utils': 2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) 7248 7251 happy-dom: 20.9.0 7249 7252 playwright-core: 1.59.1 7250 - vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 7253 + vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 7251 7254 transitivePeerDependencies: 7252 7255 - crossws 7253 7256 - magicast 7254 7257 - typescript 7255 7258 - vite 7256 7259 7257 - '@nuxt/vite-builder@4.4.4(60540df5947dbcc3d30c3e97abb55c90)': 7260 + '@nuxt/vite-builder@4.4.4(f699aa546d87a8fa4804be6580b510f7)': 7258 7261 dependencies: 7259 7262 '@nuxt/kit': 4.4.4(magicast@0.5.2) 7260 7263 '@rollup/plugin-replace': 6.0.3(rollup@4.60.2) 7261 - '@vitejs/plugin-vue': 6.0.6(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 7262 - '@vitejs/plugin-vue-jsx': 5.1.5(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 7264 + '@vitejs/plugin-vue': 6.0.6(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 7265 + '@vitejs/plugin-vue-jsx': 5.1.5(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 7263 7266 autoprefixer: 10.5.0(postcss@8.5.13) 7264 7267 consola: 3.4.2 7265 7268 cssnano: 7.1.8(postcss@8.5.13) ··· 7272 7275 magic-string: 0.30.21 7273 7276 mlly: 1.8.2 7274 7277 mocked-exports: 0.1.1 7275 - nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 7278 + nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@24.13.2)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 7276 7279 nypm: 0.6.6 7277 7280 pathe: 2.0.3 7278 7281 pkg-types: 2.3.1 ··· 7281 7284 std-env: 4.1.0 7282 7285 ufo: 1.6.4 7283 7286 unenv: 2.0.0-rc.24 7284 - vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 7285 - vite-node: 5.3.0(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 7286 - vite-plugin-checker: 0.13.0(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(eslint@10.3.0(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) 7287 + vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 7288 + vite-node: 5.3.0(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 7289 + vite-plugin-checker: 0.13.0(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(eslint@10.3.0(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)) 7287 7290 vue: 3.5.33(typescript@6.0.3) 7288 7291 vue-bundle-renderer: 2.2.0 7289 7292 optionalDependencies: ··· 8178 8181 8179 8182 '@types/json-schema@7.0.15': {} 8180 8183 8181 - '@types/node@25.6.0': 8184 + '@types/node@24.13.2': 8182 8185 dependencies: 8183 - undici-types: 7.19.2 8186 + undici-types: 7.18.2 8184 8187 8185 8188 '@types/resolve@1.20.2': {} 8186 8189 ··· 8190 8193 8191 8194 '@types/ws@8.18.1': 8192 8195 dependencies: 8193 - '@types/node': 25.6.0 8196 + '@types/node': 24.13.2 8194 8197 8195 8198 '@typescript-eslint/types@8.59.1': {} 8196 8199 ··· 8219 8222 - rollup 8220 8223 - supports-color 8221 8224 8222 - '@vitejs/plugin-vue-jsx@5.1.5(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 8225 + '@vitejs/plugin-vue-jsx@5.1.5(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 8223 8226 dependencies: 8224 8227 '@babel/core': 7.29.0 8225 8228 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) 8226 8229 '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) 8227 8230 '@rolldown/pluginutils': 1.0.0-rc.18 8228 8231 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) 8229 - vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 8232 + vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 8230 8233 vue: 3.5.33(typescript@6.0.3) 8231 8234 transitivePeerDependencies: 8232 8235 - supports-color 8233 8236 8234 - '@vitejs/plugin-vue@6.0.6(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 8237 + '@vitejs/plugin-vue@6.0.6(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3))': 8235 8238 dependencies: 8236 8239 '@rolldown/pluginutils': 1.0.0-rc.13 8237 - vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 8240 + vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 8238 8241 vue: 3.5.33(typescript@6.0.3) 8239 8242 8240 - '@vitest/browser@4.1.5(@voidzero-dev/vite-plus-test@0.1.20)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 8243 + '@vitest/browser@4.1.5(@voidzero-dev/vite-plus-test@0.1.20)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 8241 8244 dependencies: 8242 8245 '@blazediff/core': 1.9.1 8243 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 8246 + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 8244 8247 '@vitest/utils': 4.1.5 8245 8248 magic-string: 0.30.21 8246 8249 pngjs: 7.0.0 8247 8250 sirv: 3.0.2 8248 8251 tinyrainbow: 3.1.0 8249 - vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 8252 + vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 8250 8253 ws: 8.20.0 8251 8254 transitivePeerDependencies: 8252 8255 - bufferutil ··· 8267 8270 obug: 2.1.1 8268 8271 std-env: 4.1.0 8269 8272 tinyrainbow: 3.1.0 8270 - vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 8273 + vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 8271 8274 optionalDependencies: 8272 - '@vitest/browser': 4.1.5(@voidzero-dev/vite-plus-test@0.1.20)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 8275 + '@vitest/browser': 4.1.5(@voidzero-dev/vite-plus-test@0.1.20)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 8273 8276 8274 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 8277 + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': 8275 8278 dependencies: 8276 8279 '@vitest/spy': 4.1.5 8277 8280 estree-walker: 3.0.3 8278 8281 magic-string: 0.30.21 8279 8282 optionalDependencies: 8280 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 8283 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 8281 8284 optional: true 8282 8285 8283 8286 '@vitest/pretty-format@4.1.5': ··· 8293 8296 convert-source-map: 2.0.0 8294 8297 tinyrainbow: 3.1.0 8295 8298 8296 - '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)': 8299 + '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)': 8297 8300 dependencies: 8298 8301 '@oxc-project/runtime': 0.127.0 8299 8302 '@oxc-project/types': 0.127.0 8300 8303 lightningcss: 1.32.0 8301 8304 postcss: 8.5.13 8302 8305 optionalDependencies: 8303 - '@types/node': 25.6.0 8306 + '@types/node': 24.13.2 8304 8307 esbuild: 0.28.0 8305 8308 fsevents: 2.3.3 8306 8309 jiti: 2.6.1 ··· 8327 8330 '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20': 8328 8331 optional: true 8329 8332 8330 - '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)': 8333 + '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)': 8331 8334 dependencies: 8332 8335 '@standard-schema/spec': 1.1.0 8333 8336 '@types/chai': 5.2.3 8334 - '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 8337 + '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 8335 8338 es-module-lexer: 1.7.0 8336 8339 obug: 2.1.1 8337 8340 pixelmatch: 7.2.0 ··· 8341 8344 tinybench: 2.9.0 8342 8345 tinyexec: 1.1.2 8343 8346 tinyglobby: 0.2.16 8344 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 8347 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 8345 8348 ws: 8.20.0 8346 8349 optionalDependencies: 8347 - '@types/node': 25.6.0 8350 + '@types/node': 24.13.2 8348 8351 '@vitest/coverage-v8': 4.1.5(@vitest/browser@4.1.5)(@voidzero-dev/vite-plus-test@0.1.20) 8349 8352 happy-dom: 20.9.0 8350 8353 transitivePeerDependencies: ··· 8767 8770 8768 8771 chrome-launcher@1.2.1: 8769 8772 dependencies: 8770 - '@types/node': 25.6.0 8773 + '@types/node': 24.13.2 8771 8774 escape-string-regexp: 4.0.0 8772 8775 is-wsl: 2.2.0 8773 8776 lighthouse-logger: 2.0.2 ··· 9362 9365 dependencies: 9363 9366 tiny-inflate: 1.0.3 9364 9367 9365 - fontless@0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 9368 + fontless@0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 9366 9369 dependencies: 9367 9370 consola: 3.4.2 9368 9371 css-tree: 3.2.1 ··· 9378 9381 unifont: 0.7.4 9379 9382 unstorage: 1.17.5(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1) 9380 9383 optionalDependencies: 9381 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 9384 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 9382 9385 transitivePeerDependencies: 9383 9386 - '@azure/app-configuration' 9384 9387 - '@azure/cosmos' ··· 9500 9503 9501 9504 happy-dom@20.9.0: 9502 9505 dependencies: 9503 - '@types/node': 25.6.0 9506 + '@types/node': 24.13.2 9504 9507 '@types/whatwg-mimetype': 3.0.2 9505 9508 '@types/ws': 8.18.1 9506 9509 entities: 7.0.1 ··· 9533 9536 prompts: 2.4.2 9534 9537 semver: 7.7.4 9535 9538 optionalDependencies: 9536 - vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 9539 + vitest: '@voidzero-dev/vite-plus-test@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4)' 9537 9540 9538 9541 http-errors@2.0.1: 9539 9542 dependencies: ··· 10126 10129 dependencies: 10127 10130 boolbase: 1.0.0 10128 10131 10129 - nuxt-og-image@6.4.11(51cc4797704473e6ff9b1d290d94c09f): 10132 + nuxt-og-image@6.4.11(9146e07c6ffc7477ec4740733a944d20): 10130 10133 dependencies: 10131 10134 '@clack/prompts': 1.3.0 10132 10135 '@nuxt/kit': 4.4.4(magicast@0.5.2) ··· 10142 10145 magic-string: 0.30.21 10143 10146 magicast: 0.5.2 10144 10147 mocked-exports: 0.1.1 10145 - nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261) 10146 - nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd) 10148 + nuxt-site-config: 4.0.8(9f18a20bd5176f6dc0da727abab2a89a) 10149 + nuxtseo-shared: 5.1.3(2e8bda1693c05897cf840ac1e487f801) 10147 10150 nypm: 0.6.6 10148 10151 ofetch: 1.5.1 10149 10152 ohash: 2.0.11 ··· 10163 10166 optionalDependencies: 10164 10167 '@resvg/resvg-js': 2.6.2 10165 10168 '@resvg/resvg-wasm': 2.6.2 10166 - fontless: 0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 10169 + fontless: 0.2.1(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 10167 10170 playwright-core: 1.59.1 10168 10171 sharp: 0.34.5 10169 10172 unifont: 0.7.4 ··· 10185 10188 - magicast 10186 10189 - vue 10187 10190 10188 - nuxt-site-config@4.0.8(6ac414940de2d45d3b2692e1d867e261): 10191 + nuxt-site-config@4.0.8(9f18a20bd5176f6dc0da727abab2a89a): 10189 10192 dependencies: 10190 10193 '@nuxt/kit': 4.4.4(magicast@0.5.2) 10191 10194 h3: 1.15.11 10192 10195 nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) 10193 - nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd) 10196 + nuxtseo-shared: 5.1.3(2e8bda1693c05897cf840ac1e487f801) 10194 10197 pathe: 2.0.3 10195 10198 pkg-types: 2.3.1 10196 10199 site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3)) ··· 10203 10206 - vue 10204 10207 - zod 10205 10208 10206 - nuxt@4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4): 10209 + nuxt@4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@24.13.2)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4): 10207 10210 dependencies: 10208 10211 '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3) 10209 10212 '@nuxt/cli': 3.35.1(@nuxt/schema@4.4.4)(cac@6.7.14)(magicast@0.5.2) 10210 - '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 10213 + '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)) 10211 10214 '@nuxt/kit': 4.4.4(magicast@0.5.2) 10212 - '@nuxt/nitro-server': 4.4.4(c703237518f96a01201357fd255c3b67) 10215 + '@nuxt/nitro-server': 4.4.4(a1970d5ae76c60e791e0476449345803) 10213 10216 '@nuxt/schema': 4.4.4 10214 10217 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.4(magicast@0.5.2)) 10215 - '@nuxt/vite-builder': 4.4.4(60540df5947dbcc3d30c3e97abb55c90) 10218 + '@nuxt/vite-builder': 4.4.4(f699aa546d87a8fa4804be6580b510f7) 10216 10219 '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) 10217 10220 '@vue/shared': 3.5.33 10218 10221 chokidar: 5.0.0 ··· 10262 10265 vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)) 10263 10266 optionalDependencies: 10264 10267 '@parcel/watcher': 2.5.6 10265 - '@types/node': 25.6.0 10268 + '@types/node': 24.13.2 10266 10269 transitivePeerDependencies: 10267 10270 - '@arethetypeswrong/core' 10268 10271 - '@azure/app-configuration' ··· 10338 10341 - xml2js 10339 10342 - yaml 10340 10343 10341 - nuxtseo-shared@5.1.3(cdaeb7588bb59f0294d3d21d524df9cd): 10344 + nuxtseo-shared@5.1.3(2e8bda1693c05897cf840ac1e487f801): 10342 10345 dependencies: 10343 10346 '@clack/prompts': 1.3.0 10344 - '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 10347 + '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 10345 10348 '@nuxt/kit': 4.4.4(magicast@0.5.2) 10346 10349 '@nuxt/schema': 4.4.4 10347 10350 birpc: 4.0.0 10348 10351 consola: 3.4.2 10349 10352 defu: 6.1.7 10350 - nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 10353 + nuxt: 4.4.4(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@electric-sql/pglite@0.4.5)(@parcel/watcher@2.5.6)(@types/node@24.13.2)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4(@electric-sql/pglite@0.4.5)(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0)))(drizzle-orm@0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0))(esbuild@0.28.0)(eslint@10.3.0(jiti@2.6.1))(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue-tsc@3.2.7(typescript@6.0.3))(yaml@2.8.4) 10351 10354 ofetch: 1.5.1 10352 10355 pathe: 2.0.3 10353 10356 pkg-types: 2.3.1 ··· 10357 10360 ufo: 1.6.4 10358 10361 vue: 3.5.33(typescript@6.0.3) 10359 10362 optionalDependencies: 10360 - nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261) 10363 + nuxt-site-config: 4.0.8(9f18a20bd5176f6dc0da727abab2a89a) 10361 10364 zod: 3.25.76 10362 10365 transitivePeerDependencies: 10363 10366 - magicast ··· 11271 11274 magic-string: 0.30.21 11272 11275 unplugin: 2.3.11 11273 11276 11274 - undici-types@7.19.2: {} 11277 + undici-types@7.18.2: {} 11275 11278 11276 11279 undici@6.25.0: {} 11277 11280 ··· 11396 11399 optionalDependencies: 11397 11400 typescript: 6.0.3 11398 11401 11399 - vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11402 + vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11400 11403 dependencies: 11401 11404 birpc: 2.9.0 11402 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11403 - vite-hot-client: 2.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11405 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11406 + vite-hot-client: 2.2.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11404 11407 11405 - vite-hot-client@2.2.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11408 + vite-hot-client@2.2.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11406 11409 dependencies: 11407 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11410 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11408 11411 11409 - vite-node@5.3.0(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4): 11412 + vite-node@5.3.0(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4): 11410 11413 dependencies: 11411 11414 cac: 6.7.14 11412 11415 es-module-lexer: 2.1.0 11413 11416 obug: 2.1.1 11414 11417 pathe: 2.0.3 11415 - vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 11418 + vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 11416 11419 transitivePeerDependencies: 11417 11420 - '@arethetypeswrong/core' 11418 11421 - '@tsdown/css' ··· 11433 11436 - unplugin-unused 11434 11437 - yaml 11435 11438 11436 - vite-plugin-checker@0.13.0(@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(eslint@10.3.0(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)): 11439 + vite-plugin-checker@0.13.0(@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4))(eslint@10.3.0(jiti@2.6.1))(optionator@0.9.4)(oxlint@1.61.0(oxlint-tsgolint@0.22.0))(typescript@6.0.3)(vue-tsc@3.2.7(typescript@6.0.3)): 11437 11440 dependencies: 11438 11441 '@babel/code-frame': 7.29.0 11439 11442 chokidar: 4.0.3 ··· 11443 11446 proper-lockfile: 4.1.2 11444 11447 tiny-invariant: 1.3.3 11445 11448 tinyglobby: 0.2.16 11446 - vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 11449 + vite: '@voidzero-dev/vite-plus-core@0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4)' 11447 11450 vscode-uri: 3.1.0 11448 11451 optionalDependencies: 11449 11452 eslint: 10.3.0(jiti@2.6.1) ··· 11452 11455 typescript: 6.0.3 11453 11456 vue-tsc: 3.2.7(typescript@6.0.3) 11454 11457 11455 - vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.4(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11458 + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.4(magicast@0.5.2))(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11456 11459 dependencies: 11457 11460 ansis: 4.2.0 11458 11461 debug: 4.4.3 ··· 11462 11465 perfect-debounce: 2.1.0 11463 11466 sirv: 3.0.2 11464 11467 unplugin-utils: 0.3.1 11465 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11466 - vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11468 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11469 + vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11467 11470 optionalDependencies: 11468 11471 '@nuxt/kit': 4.4.4(magicast@0.5.2) 11469 11472 transitivePeerDependencies: 11470 11473 - supports-color 11471 11474 11472 - vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)): 11475 + vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(vue@3.5.33(typescript@6.0.3)): 11473 11476 dependencies: 11474 11477 estree-walker: 3.0.3 11475 11478 exsolve: 1.0.8 11476 11479 magic-string: 0.30.21 11477 11480 pathe: 2.0.3 11478 11481 source-map-js: 1.2.1 11479 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11482 + vite: 7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) 11480 11483 vue: 3.5.33(typescript@6.0.3) 11481 11484 11482 - vite-plus@0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4): 11485 + vite-plus@0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4): 11483 11486 dependencies: 11484 11487 '@oxc-project/types': 0.127.0 11485 - '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 11486 - '@voidzero-dev/vite-plus-test': 0.1.20(@types/node@25.6.0)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) 11488 + '@voidzero-dev/vite-plus-core': 0.1.20(@types/node@24.13.2)(esbuild@0.28.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(yaml@2.8.4) 11489 + '@voidzero-dev/vite-plus-test': 0.1.20(@types/node@24.13.2)(@vitest/coverage-v8@4.1.5)(esbuild@0.28.0)(happy-dom@20.9.0)(jiti@2.6.1)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))(yaml@2.8.4) 11487 11490 oxfmt: 0.46.0 11488 11491 oxlint: 1.61.0(oxlint-tsgolint@0.22.0) 11489 11492 oxlint-tsgolint: 0.22.0 ··· 11526 11529 - vite 11527 11530 - yaml 11528 11531 11529 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): 11532 + vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): 11530 11533 dependencies: 11531 11534 esbuild: 0.27.7 11532 11535 fdir: 6.5.0(picomatch@4.0.4) ··· 11535 11538 rollup: 4.60.2 11536 11539 tinyglobby: 0.2.16 11537 11540 optionalDependencies: 11538 - '@types/node': 25.6.0 11541 + '@types/node': 24.13.2 11539 11542 fsevents: 2.3.3 11540 11543 jiti: 2.6.1 11541 11544 lightningcss: 1.32.0 ··· 11543 11546 tsx: 4.21.0 11544 11547 yaml: 2.8.4 11545 11548 11546 - vitest-environment-nuxt@2.0.0(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11549 + vitest-environment-nuxt@2.0.0(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)): 11547 11550 dependencies: 11548 - '@nuxt/test-utils': 4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11551 + '@nuxt/test-utils': 4.0.3(@playwright/test@1.59.1)(@voidzero-dev/vite-plus-test@0.1.20)(@vue/test-utils@2.4.10(@vue/compiler-dom@3.5.33)(@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)))(crossws@0.4.5(srvx@0.11.15))(happy-dom@20.9.0)(magicast@0.5.2)(playwright-core@1.59.1)(typescript@6.0.3)(vite@7.3.2(@types/node@24.13.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) 11549 11552 transitivePeerDependencies: 11550 11553 - '@cucumber/cucumber' 11551 11554 - '@jest/globals'
+2 -2
server/utils/git-wire/receive-pack.ts
··· 1 1 import { type ChildProcessWithoutNullStreams, spawn } from 'node:child_process' 2 2 import { Readable } from 'node:stream' 3 - import { classifyNgReason, classifySshStderr, RemoteRejectedError, WireError } from './errors' 3 + import { classifyNgReason, classifySshStderr, WireError } from './errors' 4 4 import { encodePktLine, flushPkt, lineToString, PktLineReader } from './pkt-line' 5 - import { type Advertisement, parseAdvertisement, ZERO_SHA } from './refs' 5 + import { type Advertisement, parseAdvertisement } from './refs' 6 6 7 7 const AGENT = 'synchub.to' 8 8 const STDERR_CAP = 16 * 1024
+1 -1
server/utils/queue.ts
··· 25 25 payload, 26 26 runAfter: opts.runAfter ?? new Date(), 27 27 }).returning({ id: job.id }) 28 - return row 28 + return row! 29 29 } 30 30 31 31 /**
+1 -1
server/utils/splice.ts
··· 5 5 sshReceivePackFactory, 6 6 } from './git-wire/receive-pack' 7 7 import { ZERO_SHA } from './git-wire/refs' 8 - import { fetchAdvertisement, fetchPack } from './git-wire/upload-pack' 8 + import { fetchPack } from './git-wire/upload-pack' 9 9 import { loadSshArgsForInstall } from './ssh-cmd' 10 10 import { sshEndpointForKnot } from './sync-push-host' 11 11
+1
server/utils/sync-ref.ts
··· 4 4 import { RemoteRejectedError, WireError } from './git-wire/errors' 5 5 import { installationOctokit } from './github-app' 6 6 import { spliceDelete, splicePush } from './splice' 7 + import { fetchAdvertisement } from './git-wire/upload-pack' 7 8 8 9 export type RefType = 'branch' | 'tag' 9 10
+2 -2
test/unit/encryption.spec.ts
··· 40 40 it('throws on tampered ciphertext', () => { 41 41 const { ciphertext, nonce } = encrypt('hello') 42 42 const tampered = Buffer.from(ciphertext) 43 - tampered[0] = tampered[0] ^ 0xFF 43 + tampered[0] = tampered[0]! ^ 0xFF 44 44 expect(() => decrypt(tampered, nonce)).toThrow(/invalid tag|auth/i) 45 45 }) 46 46 47 47 it('throws on tampered nonce', () => { 48 48 const { ciphertext, nonce } = encrypt('hello') 49 49 const tampered = Buffer.from(nonce) 50 - tampered[0] = tampered[0] ^ 0xFF 50 + tampered[0] = tampered[0]! ^ 0xFF 51 51 expect(() => decrypt(ciphertext, tampered)).toThrow(/invalid tag|auth/i) 52 52 }) 53 53
+3 -1
test/unit/github-ownership.spec.ts
··· 3 3 import type { UserOctokit } from '../../server/utils/github-app' 4 4 5 5 function octokitReturning(ids: number[]): UserOctokit { 6 - const request = vi.fn(async () => ({ data: { installations: ids.map(id => ({ id })) } })) 6 + const request = vi.fn<() => Promise<{ data: { installations: { id: number }[] } }>>( 7 + async () => ({ data: { installations: ids.map(id => ({ id })) } }), 8 + ) 7 9 // eslint-disable-next-line ts/no-unsafe-type-assertion -- only `request` is exercised 8 10 return { request } as unknown as UserOctokit 9 11 }
+12 -12
test/unit/repository-handler.spec.ts
··· 152 152 await dispatch(envelope('privatized')) 153 153 154 154 const rows = await useDb().select().from(repoMapping) 155 - expect(rows[0].disabledAt).toBeInstanceOf(Date) 155 + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) 156 156 expect(putRecordMock).not.toHaveBeenCalled() 157 157 }) 158 158 }) ··· 162 162 await seedMapping() 163 163 await dispatch(envelope('transferred')) 164 164 const rows = await useDb().select().from(repoMapping) 165 - expect(rows[0].disabledAt).toBeInstanceOf(Date) 165 + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) 166 166 }) 167 167 168 168 it('sets disabledAt for deleted', async () => { 169 169 await seedMapping() 170 170 await dispatch(envelope('deleted')) 171 171 const rows = await useDb().select().from(repoMapping) 172 - expect(rows[0].disabledAt).toBeInstanceOf(Date) 172 + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) 173 173 }) 174 174 175 175 it('leaves the tangled mirror fields untouched (we do not delete user data)', async () => { 176 176 await seedMapping() 177 177 await dispatch(envelope('deleted')) 178 178 const rows = await useDb().select().from(repoMapping) 179 - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz') 180 - expect(rows[0].tangledFullName).toBe('did:plc:abc/my-project') 179 + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz') 180 + expect(rows[0]!.tangledFullName).toBe('did:plc:abc/my-project') 181 181 }) 182 182 }) 183 183 ··· 198 198 await dispatch(envelope('publicized')) 199 199 200 200 const rows = await useDb().select().from(repoMapping) 201 - expect(rows[0].disabledAt).toBeNull() 201 + expect(rows[0]!.disabledAt).toBeNull() 202 202 expect(putRecordMock).toHaveBeenCalledTimes(1) 203 203 }) 204 204 ··· 208 208 await dispatch(envelope('publicized')) 209 209 210 210 const rows = await useDb().select().from(repoMapping) 211 - expect(rows[0].disabledAt).toBeNull() 211 + expect(rows[0]!.disabledAt).toBeNull() 212 212 213 213 const jobs = await useDb().select().from(job) 214 214 const kinds = jobs.map(j => j.kind) ··· 232 232 await dispatch(envelope('renamed')) 233 233 234 234 const rows = await useDb().select().from(repoMapping) 235 - expect(rows[0].githubFullName).toBe('alice/new-name') 236 - expect(rows[0].lastError).toMatch(/^info: renamed on github from alice\/my-project to alice\/new-name/) 235 + expect(rows[0]!.githubFullName).toBe('alice/new-name') 236 + expect(rows[0]!.lastError).toMatch(/^info: renamed on github from alice\/my-project to alice\/new-name/) 237 237 238 238 // No tangled-side rename. 239 239 expect(putRecordMock).not.toHaveBeenCalled() ··· 246 246 await dispatch(envelope('renamed')) 247 247 248 248 const rows = await useDb().select().from(repoMapping) 249 - expect(rows[0].lastError).toBeNull() 249 + expect(rows[0]!.lastError).toBeNull() 250 250 }) 251 251 }) 252 252 ··· 255 255 await seedMapping() 256 256 await dispatch(envelope('archived')) 257 257 const rows = await useDb().select().from(repoMapping) 258 - expect(rows[0].disabledAt).toBeNull() 259 - expect(rows[0].lastError).toBeNull() 258 + expect(rows[0]!.disabledAt).toBeNull() 259 + expect(rows[0]!.lastError).toBeNull() 260 260 expect(putRecordMock).not.toHaveBeenCalled() 261 261 }) 262 262
+2 -1
test/unit/server-session.spec.ts
··· 48 48 }) 49 49 }) 50 50 51 + const acct = (did: string, installationId: number) => ({ did, installationId }) 52 + 51 53 describe('server-session: readAccounts', () => { 52 - const acct = (did: string, installationId: number) => ({ did, installationId }) 53 54 54 55 it('returns null for empty or malformed cookie data', () => { 55 56 expect(readAccounts({})).toBeNull()
+2 -1
test/unit/ssh-keypair.spec.ts
··· 24 24 const { publicKeyOpenSsh, privateKeyPem } = generateKeypair('test') 25 25 26 26 // Decode the OpenSSH public key back to raw bytes and reconstruct an SPKI key. 27 - const b64 = publicKeyOpenSsh.split(' ')[1] 27 + const b64 = publicKeyOpenSsh.split(' ')[1]! 28 28 const blob = Buffer.from(b64, 'base64') 29 29 // ssh-ed25519 framing: <4 bytes len><"ssh-ed25519"><4 bytes len><32 bytes raw key> 30 30 const algoLen = blob.readUInt32BE(0) ··· 68 68 it('rejects non-ed25519 keys', () => { 69 69 const { privateKey } = crypto.generateKeyPairSync('rsa', { 70 70 modulusLength: 2048, 71 + publicKeyEncoding: { type: 'spki', format: 'pem' }, 71 72 privateKeyEncoding: { type: 'pkcs8', format: 'pem' }, 72 73 }) 73 74 expect(() => pkcs8ToOpenSshPrivate(privateKey, 'x'))
+5 -5
test/unit/sync-push.spec.ts
··· 101 101 token: 'install-token', 102 102 })) 103 103 const rows = await useDb().select().from(repoMapping) 104 - expect((rows[0].lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('a'.repeat(40)) 104 + expect((rows[0]!.lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('a'.repeat(40)) 105 105 }) 106 106 107 107 it('marks mapping error and stops on a terminal too-big failure', async () => { ··· 109 109 splicePushMock.mockRejectedValue(new RemoteRejectedError('pack exceeded', 'too-big')) 110 110 expect(await syncPush(payload())).toEqual({ status: 'skipped', reason: 'repo-gone' }) 111 111 const rows = await useDb().select().from(repoMapping) 112 - expect(rows[0].status).toBe('error') 113 - expect(rows[0].lastError).toMatch(/size limit/) 112 + expect(rows[0]!.status).toBe('error') 113 + expect(rows[0]!.lastError).toMatch(/size limit/) 114 114 }) 115 115 116 116 it('marks mapping error when the knot rejects our key', async () => { ··· 118 118 splicePushMock.mockRejectedValue(new RemoteRejectedError('denied', 'auth-rejected')) 119 119 expect(await syncPush(payload())).toEqual({ status: 'skipped', reason: 'repo-gone' }) 120 120 const rows = await useDb().select().from(repoMapping) 121 - expect(rows[0].status).toBe('error') 121 + expect(rows[0]!.status).toBe('error') 122 122 }) 123 123 124 124 it('rethrows a transient stale-old-sha for queue retry', async () => { ··· 126 126 splicePushMock.mockRejectedValue(new RemoteRejectedError('stale', 'stale-old-sha')) 127 127 await expect(syncPush(payload())).rejects.toMatchObject({ reason: 'stale-old-sha' }) 128 128 const rows = await useDb().select().from(repoMapping) 129 - expect(rows[0].status).toBe('active') 129 + expect(rows[0]!.status).toBe('active') 130 130 }) 131 131 })
+5 -4
test/unit/sync-ref.spec.ts
··· 1 1 import crypto from 'node:crypto' 2 + import process from 'node:process' 2 3 import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' 3 4 import { installation, repoMapping } from '../../server/db/schema' 4 5 import { clearDb, setDb, useDb } from '../../server/utils/db' ··· 129 130 await syncCreateRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) 130 131 131 132 const rows = await useDb().select().from(repoMapping) 132 - expect((rows[0].lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('d'.repeat(40)) 133 + expect((rows[0]!.lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('d'.repeat(40)) 133 134 }) 134 135 135 136 it('marks mapping error when the knot reports repo gone', async () => { ··· 138 139 const result = await syncCreateRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) 139 140 expect(result).toEqual({ status: 'skipped', reason: 'repo-gone' }) 140 141 const rows = await useDb().select().from(repoMapping) 141 - expect(rows[0].status).toBe('error') 142 + expect(rows[0]!.status).toBe('error') 142 143 }) 143 144 144 145 it('rethrows a transient stale-old-sha for queue retry', async () => { ··· 168 169 await seedMapping({ lastSyncedRefs: { 'refs/heads/main': 'abc', 'refs/heads/old': 'def' } }) 169 170 await syncDeleteRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'old' }) 170 171 const rows = await useDb().select().from(repoMapping) 171 - expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'abc' }) 172 + expect(rows[0]!.lastSyncedRefs).toEqual({ 'refs/heads/main': 'abc' }) 172 173 }) 173 174 174 175 it('marks mapping as error if knot reports repo gone', async () => { ··· 177 178 const result = await syncDeleteRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) 178 179 expect(result).toEqual({ status: 'skipped', reason: 'repo-gone' }) 179 180 const rows = await useDb().select().from(repoMapping) 180 - expect(rows[0].status).toBe('error') 181 + expect(rows[0]!.status).toBe('error') 181 182 }) 182 183 }) 183 184 })
+12 -12
test/unit/tangled-pubkey.spec.ts
··· 75 75 76 76 expect(result.created).toBe(true) 77 77 expect(createRecordMock).toHaveBeenCalledTimes(1) 78 - const call = createRecordMock.mock.calls[0][0] 78 + const call = createRecordMock.mock.calls[0]![0] 79 79 expect(call.repo).toBe('did:plc:abc') 80 80 expect(call.collection).toBe('sh.tangled.publicKey') 81 81 expect(call.record.$type).toBe('sh.tangled.publicKey') ··· 86 86 const rows = await db.select().from(sshKey) 87 87 .where(sql`${sshKey.installationId} = 1 AND ${sshKey.did} = 'did:plc:abc'`) 88 88 expect(rows).toHaveLength(1) 89 - const row = rows[0] 89 + const row = rows[0]! 90 90 expect(row.publicKey).toMatch(/^ssh-ed25519 /) 91 91 expect(row.tangledKeyRkey).toBe('3kh2y4xq2lk2v') 92 92 ··· 163 163 const db = useDb() 164 164 const before = await db.select().from(sshKey).where(sql`${sshKey.installationId} = 1`) 165 165 expect(before).toHaveLength(1) 166 - const oldPubKey = before[0].publicKey 167 - const oldRkey = before[0].tangledKeyRkey 166 + const oldPubKey = before[0]!.publicKey 167 + const oldRkey = before[0]!.tangledKeyRkey 168 168 169 169 const result = await rotateKey({ 170 170 oauthSession: fakeOauthSession('did:plc:abc'), ··· 173 173 expect(result.created).toBe(true) 174 174 175 175 expect(deleteRecordMock).toHaveBeenCalledTimes(1) 176 - const del = deleteRecordMock.mock.calls[0][0] 176 + const del = deleteRecordMock.mock.calls[0]![0] 177 177 expect(del.repo).toBe('did:plc:abc') 178 178 expect(del.collection).toBe('sh.tangled.publicKey') 179 179 expect(del.rkey).toBe(oldRkey) 180 180 181 181 const after = await db.select().from(sshKey).where(sql`${sshKey.installationId} = 1`) 182 182 expect(after).toHaveLength(1) 183 - expect(after[0].publicKey).not.toBe(oldPubKey) 184 - expect(after[0].tangledKeyRkey).toBe('rkey-2') 183 + expect(after[0]!.publicKey).not.toBe(oldPubKey) 184 + expect(after[0]!.tangledKeyRkey).toBe('rkey-2') 185 185 }) 186 186 187 187 it('proceeds when the PDS reports the record is already gone (404)', async () => { ··· 202 202 const db = useDb() 203 203 const rows = await db.select().from(sshKey) 204 204 expect(rows).toHaveLength(1) 205 - expect(rows[0].tangledKeyRkey).toBe('rkey-2') 205 + expect(rows[0]!.tangledKeyRkey).toBe('rkey-2') 206 206 }) 207 207 208 208 it('aborts the rotation if the PDS delete fails for a non-404 reason', async () => { ··· 222 222 const db = useDb() 223 223 const rows = await db.select().from(sshKey) 224 224 expect(rows).toHaveLength(1) 225 - expect(rows[0].tangledKeyRkey).toBe('rkey-1') 225 + expect(rows[0]!.tangledKeyRkey).toBe('rkey-1') 226 226 expect(createRecordMock).toHaveBeenCalledTimes(1) 227 227 }) 228 228 ··· 276 276 277 277 expect(restoreMock).toHaveBeenCalledWith('did:plc:abc') 278 278 expect(deleteRecordMock).toHaveBeenCalledTimes(1) 279 - const del = deleteRecordMock.mock.calls[0][0] 279 + const del = deleteRecordMock.mock.calls[0]![0] 280 280 expect(del.repo).toBe('did:plc:abc') 281 281 expect(del.collection).toBe('sh.tangled.publicKey') 282 282 expect(del.rkey).toBe('3kh2y4xq2lk2v') ··· 347 347 await revokeKeyForInstallationDid(1, 'did:plc:1') 348 348 349 349 expect(restoreMock).toHaveBeenCalledWith('did:plc:1') 350 - const del = deleteRecordMock.mock.calls[0][0] 350 + const del = deleteRecordMock.mock.calls[0]![0] 351 351 expect(del.repo).toBe('did:plc:1') 352 352 expect(del.collection).toBe('sh.tangled.publicKey') 353 353 expect(del.rkey).toBe('rkey-1') ··· 363 363 const db = useDb() 364 364 const rows = await db.select().from(sshKey) 365 365 expect(rows).toHaveLength(1) 366 - expect(rows[0].did).toBe('did:plc:2') 366 + expect(rows[0]!.did).toBe('did:plc:2') 367 367 }) 368 368 369 369 it('no-ops when no key exists for the pair', async () => {
+8 -8
test/unit/tangled-repo.spec.ts
··· 156 156 const rows = await useDb().select().from(repoMapping) 157 157 .where(sql`${repoMapping.installationId} = 1`) 158 158 expect(rows).toHaveLength(1) 159 - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz') 160 - expect(rows[0].knot).toBe('knot1.tangled.sh') 161 - expect(rows[0].status).toBe('active') 159 + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz') 160 + expect(rows[0]!.knot).toBe('knot1.tangled.sh') 161 + expect(rows[0]!.status).toBe('active') 162 162 }) 163 163 164 164 it('skips private repos', async () => { ··· 234 234 const rows = await useDb().select().from(repoMapping) 235 235 .where(sql`${repoMapping.installationId} = 1`) 236 236 expect(rows).toHaveLength(1) 237 - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-new') 238 - expect(rows[0].status).toBe('active') 239 - expect(rows[0].lastError).toBeNull() 237 + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-new') 238 + expect(rows[0]!.status).toBe('active') 239 + expect(rows[0]!.lastError).toBeNull() 240 240 // lastSyncedRefs preserved across the resync so the push worker keeps 241 241 // dedupe state. 242 - expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'deadbeef' }) 242 + expect(rows[0]!.lastSyncedRefs).toEqual({ 'refs/heads/main': 'deadbeef' }) 243 243 }) 244 244 245 245 it('throws and writes nothing if the knot rejects the procedure', async () => { ··· 575 575 }) 576 576 577 577 const rows = await useDb().select().from(repoMapping) 578 - expect(rows[0].githubFullName).toBe('alice/renamed') 578 + expect(rows[0]!.githubFullName).toBe('alice/renamed') 579 579 }) 580 580 })
+1 -1
test/utils/git-wire.ts
··· 71 71 const url = typeof input === 'string' ? input : input.toString() 72 72 const match = url.match(/github\.com\/(.+?)\.git\/(info\/refs|git-upload-pack)/) 73 73 if (!match) throw new Error(`fakeGithubFetch: unexpected url ${url}`) 74 - const repoPath = repos.get(match[1]) 74 + const repoPath = repos.get(match[1]!) 75 75 if (!repoPath) return new Response(null, { status: 404, statusText: 'Not Found' }) 76 76 77 77 if (match[2] === 'info/refs') {