From b1f7873238a7a1623be315fafd45478c028ff859 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Sat, 13 Jun 2026 11:36:34 +0100 Subject: [PATCH] chore: tidy up + lint/typefix --- app/pages/dashboard.vue | 4 +- nuxt.config.ts | 11 +- package.json | 1 + pnpm-lock.yaml | 207 +++++++++++++------------- server/utils/git-wire/receive-pack.ts | 4 +- server/utils/queue.ts | 2 +- server/utils/splice.ts | 2 +- server/utils/sync-ref.ts | 1 + test/unit/encryption.spec.ts | 4 +- test/unit/github-ownership.spec.ts | 4 +- test/unit/repository-handler.spec.ts | 24 +-- test/unit/server-session.spec.ts | 3 +- test/unit/ssh-keypair.spec.ts | 3 +- test/unit/sync-push.spec.ts | 10 +- test/unit/sync-ref.spec.ts | 9 +- test/unit/tangled-pubkey.spec.ts | 24 +-- test/unit/tangled-repo.spec.ts | 16 +- test/utils/git-wire.ts | 2 +- 18 files changed, 175 insertions(+), 156 deletions(-) diff --git a/app/pages/dashboard.vue b/app/pages/dashboard.vue index 8aea9cf..6bc7ef2 100644 --- a/app/pages/dashboard.vue +++ b/app/pages/dashboard.vue @@ -176,8 +176,8 @@ function summariseRefs(refs: Record): string { const entries = Object.entries(refs) if (entries.length === 0) return '—' if (entries.length === 1) { - const [ref, sha] = entries[0]! - return `${ref} @ ${sha.slice(0, 7)}` + const [refName, sha] = entries[0]! + return `${refName} @ ${sha.slice(0, 7)}` } return `${entries.length} refs` } diff --git a/nuxt.config.ts b/nuxt.config.ts index ad0ce07..cca84d9 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -38,7 +38,16 @@ export default defineNuxtConfig({ }, typescript: { nodeTsConfig: { - include: ['../vite.config.ts'], + compilerOptions: { + types: ['node'], + }, + include: [ + '../vite.config.ts', + '../test/unit', + '../test/utils', + // TODO: fix in a better way 🤦 + './types/nitro-imports.d.ts', + ], }, }, app: { diff --git a/package.json b/package.json index 257c712..94fba21 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "@octokit/webhooks-types": "^7.6.1", "@playwright/test": "1.59.1", "@stylistic/eslint-plugin": "^5.10.0", + "@types/node": "^24.13.2", "@vitest/coverage-v8": "^4.1.5", "@vue/test-utils": "2.4.10", "drizzle-kit": "^0.31.10", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6da3eb8..715f501 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,13 +32,13 @@ importers: version: 2.2.0 '@nuxt/fonts': specifier: ^0.14.0 - 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)) + 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)) '@nuxt/image': specifier: ^2.0.0 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) '@nuxt/scripts': specifier: ^1.0.6 - 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)) + 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)) '@nuxtjs/html-validator': specifier: ^2.1.0 version: 2.1.0(@voidzero-dev/vite-plus-test@0.1.20)(magicast@0.5.2) @@ -56,16 +56,16 @@ importers: version: 0.45.2(@electric-sql/pglite@0.4.5)(@neondatabase/serverless@1.1.0) nuxt: specifier: ^4.4.4 - 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) + 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) nuxt-og-image: specifier: ^6.4.11 - version: 6.4.11(51cc4797704473e6ff9b1d290d94c09f) + version: 6.4.11(9146e07c6ffc7477ec4740733a944d20) rolldown: specifier: ^1.0.0-rc.18 version: 1.0.0-rc.18 vite-plus: specifier: 0.1.20 - 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) + 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) vue: specifier: 3.5.33 version: 3.5.33(typescript@6.0.3) @@ -78,7 +78,7 @@ importers: version: 0.4.5 '@nuxt/test-utils': specifier: 4.0.3 - 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)) + 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)) '@octokit/webhooks-types': specifier: ^7.6.1 version: 7.6.1 @@ -88,6 +88,9 @@ importers: '@stylistic/eslint-plugin': specifier: ^5.10.0 version: 5.10.0(eslint@10.3.0(jiti@2.6.1)) + '@types/node': + specifier: ^24.13.2 + version: 24.13.2 '@vitest/coverage-v8': specifier: ^4.1.5 version: 4.1.5(@vitest/browser@4.1.5)(@voidzero-dev/vite-plus-test@0.1.20) @@ -114,7 +117,7 @@ importers: version: 6.0.3 vitest: specifier: npm:@voidzero-dev/vite-plus-test@0.1.20 - 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)' + 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)' vue-tsc: specifier: 3.2.7 version: 3.2.7(typescript@6.0.3) @@ -2759,8 +2762,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@25.6.0': - resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==} + '@types/node@24.13.2': + resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -5474,8 +5477,8 @@ packages: unctx@2.5.0: resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==} - undici-types@7.19.2: - resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==} + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} undici@6.25.0: resolution: {integrity: sha512-ZgpWDC5gmNiuY9CnLVXEH8rl50xhRCuLNA97fAUnKi8RRuV4E6KG31pDTsLVUKnohJE0I3XDrTeEydAXRw47xg==} @@ -6871,27 +6874,27 @@ snapshots: '@nuxt/devalue@2.0.2': {} - '@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))': + '@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))': dependencies: '@nuxt/kit': 3.21.4(magicast@0.5.2) execa: 8.0.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) + 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) transitivePeerDependencies: - magicast - '@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))': + '@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))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) execa: 8.0.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) + 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) transitivePeerDependencies: - magicast - '@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))': + '@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))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) tinyexec: 1.1.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) + 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) transitivePeerDependencies: - magicast @@ -6906,9 +6909,9 @@ snapshots: pkg-types: 2.3.1 semver: 7.7.4 - '@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))': + '@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))': dependencies: - '@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)) + '@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)) '@nuxt/devtools-wizard': 3.2.4 '@nuxt/kit': 4.4.4(magicast@0.5.2) '@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3)) @@ -6936,9 +6939,9 @@ snapshots: sirv: 3.0.2 structured-clone-es: 2.0.0 tinyglobby: 0.2.16 - 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) - 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)) - 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)) + 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) + 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)) + 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)) which: 6.0.1 ws: 8.20.0 transitivePeerDependencies: @@ -6947,13 +6950,13 @@ snapshots: - utf-8-validate - vue - '@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))': + '@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))': dependencies: - '@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)) + '@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)) '@nuxt/kit': 4.4.4(magicast@0.5.2) consola: 3.4.2 defu: 6.1.7 - 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)) + 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)) h3: 1.15.11 magic-regexp: 0.10.0 ofetch: 1.5.1 @@ -7075,7 +7078,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.4.4(c703237518f96a01201357fd255c3b67)': + '@nuxt/nitro-server@4.4.4(a1970d5ae76c60e791e0476449345803)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -7094,7 +7097,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 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) - 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) + 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) nypm: 0.6.6 ohash: 2.0.11 pathe: 2.0.3 @@ -7153,9 +7156,9 @@ snapshots: pkg-types: 2.3.1 std-env: 4.1.0 - '@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))': + '@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))': dependencies: - '@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)) + '@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)) '@nuxt/kit': 4.4.4(magicast@0.5.2) '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) '@vueuse/core': 14.3.0(vue@3.5.33(typescript@6.0.3)) @@ -7211,10 +7214,10 @@ snapshots: rc9: 3.0.1 std-env: 4.1.0 - '@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))': + '@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))': dependencies: '@clack/prompts': 1.2.0 - '@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)) + '@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)) '@nuxt/kit': 3.21.4(magicast@0.5.2) c12: 3.3.4(magicast@0.5.2) consola: 3.4.2 @@ -7240,26 +7243,26 @@ snapshots: tinyexec: 1.1.2 ufo: 1.6.4 unplugin: 3.0.0 - 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)) + 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)) vue: 3.5.33(typescript@6.0.3) optionalDependencies: '@playwright/test': 1.59.1 '@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)) happy-dom: 20.9.0 playwright-core: 1.59.1 - 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)' + 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)' transitivePeerDependencies: - crossws - magicast - typescript - vite - '@nuxt/vite-builder@4.4.4(60540df5947dbcc3d30c3e97abb55c90)': + '@nuxt/vite-builder@4.4.4(f699aa546d87a8fa4804be6580b510f7)': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.2) - '@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)) - '@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)) + '@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)) + '@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)) autoprefixer: 10.5.0(postcss@8.5.13) consola: 3.4.2 cssnano: 7.1.8(postcss@8.5.13) @@ -7272,7 +7275,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - 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) + 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) nypm: 0.6.6 pathe: 2.0.3 pkg-types: 2.3.1 @@ -7281,9 +7284,9 @@ snapshots: std-env: 4.1.0 ufo: 1.6.4 unenv: 2.0.0-rc.24 - 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)' - 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) - 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)) + 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)' + 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) + 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)) vue: 3.5.33(typescript@6.0.3) vue-bundle-renderer: 2.2.0 optionalDependencies: @@ -8178,9 +8181,9 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@25.6.0': + '@types/node@24.13.2': dependencies: - undici-types: 7.19.2 + undici-types: 7.18.2 '@types/resolve@1.20.2': {} @@ -8190,7 +8193,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 '@typescript-eslint/types@8.59.1': {} @@ -8219,34 +8222,34 @@ snapshots: - rollup - supports-color - '@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))': + '@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))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) '@rolldown/pluginutils': 1.0.0-rc.18 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) - 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)' + 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)' vue: 3.5.33(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@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))': + '@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))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.13 - 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)' + 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)' vue: 3.5.33(typescript@6.0.3) - '@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))': + '@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))': dependencies: '@blazediff/core': 1.9.1 - '@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)) + '@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)) '@vitest/utils': 4.1.5 magic-string: 0.30.21 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.1.0 - 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)' + 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)' ws: 8.20.0 transitivePeerDependencies: - bufferutil @@ -8267,17 +8270,17 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - 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)' + 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)' optionalDependencies: - '@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)) + '@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)) - '@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))': + '@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))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - 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) + 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) optional: true '@vitest/pretty-format@4.1.5': @@ -8293,14 +8296,14 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.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)': + '@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)': dependencies: '@oxc-project/runtime': 0.127.0 '@oxc-project/types': 0.127.0 lightningcss: 1.32.0 postcss: 8.5.13 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 esbuild: 0.28.0 fsevents: 2.3.3 jiti: 2.6.1 @@ -8327,11 +8330,11 @@ snapshots: '@voidzero-dev/vite-plus-linux-x64-musl@0.1.20': optional: true - '@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)': + '@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)': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@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) + '@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) es-module-lexer: 1.7.0 obug: 2.1.1 pixelmatch: 7.2.0 @@ -8341,10 +8344,10 @@ snapshots: tinybench: 2.9.0 tinyexec: 1.1.2 tinyglobby: 0.2.16 - 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) + 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) ws: 8.20.0 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 '@vitest/coverage-v8': 4.1.5(@vitest/browser@4.1.5)(@voidzero-dev/vite-plus-test@0.1.20) happy-dom: 20.9.0 transitivePeerDependencies: @@ -8767,7 +8770,7 @@ snapshots: chrome-launcher@1.2.1: dependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 2.0.2 @@ -9362,7 +9365,7 @@ snapshots: dependencies: tiny-inflate: 1.0.3 - 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)): + 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)): dependencies: consola: 3.4.2 css-tree: 3.2.1 @@ -9378,7 +9381,7 @@ snapshots: unifont: 0.7.4 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) optionalDependencies: - 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) + 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) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -9500,7 +9503,7 @@ snapshots: happy-dom@20.9.0: dependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 @@ -9533,7 +9536,7 @@ snapshots: prompts: 2.4.2 semver: 7.7.4 optionalDependencies: - 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)' + 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)' http-errors@2.0.1: dependencies: @@ -10126,7 +10129,7 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt-og-image@6.4.11(51cc4797704473e6ff9b1d290d94c09f): + nuxt-og-image@6.4.11(9146e07c6ffc7477ec4740733a944d20): dependencies: '@clack/prompts': 1.3.0 '@nuxt/kit': 4.4.4(magicast@0.5.2) @@ -10142,8 +10145,8 @@ snapshots: magic-string: 0.30.21 magicast: 0.5.2 mocked-exports: 0.1.1 - nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261) - nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd) + nuxt-site-config: 4.0.8(9f18a20bd5176f6dc0da727abab2a89a) + nuxtseo-shared: 5.1.3(2e8bda1693c05897cf840ac1e487f801) nypm: 0.6.6 ofetch: 1.5.1 ohash: 2.0.11 @@ -10163,7 +10166,7 @@ snapshots: optionalDependencies: '@resvg/resvg-js': 2.6.2 '@resvg/resvg-wasm': 2.6.2 - 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)) + 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)) playwright-core: 1.59.1 sharp: 0.34.5 unifont: 0.7.4 @@ -10185,12 +10188,12 @@ snapshots: - magicast - vue - nuxt-site-config@4.0.8(6ac414940de2d45d3b2692e1d867e261): + nuxt-site-config@4.0.8(9f18a20bd5176f6dc0da727abab2a89a): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) h3: 1.15.11 nuxt-site-config-kit: 4.0.8(magicast@0.5.2)(vue@3.5.33(typescript@6.0.3)) - nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd) + nuxtseo-shared: 5.1.3(2e8bda1693c05897cf840ac1e487f801) pathe: 2.0.3 pkg-types: 2.3.1 site-config-stack: 4.0.8(vue@3.5.33(typescript@6.0.3)) @@ -10203,16 +10206,16 @@ snapshots: - vue - zod - 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): + 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): dependencies: '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3) '@nuxt/cli': 3.35.1(@nuxt/schema@4.4.4)(cac@6.7.14)(magicast@0.5.2) - '@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)) + '@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)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.4(c703237518f96a01201357fd255c3b67) + '@nuxt/nitro-server': 4.4.4(a1970d5ae76c60e791e0476449345803) '@nuxt/schema': 4.4.4 '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.4(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.4(60540df5947dbcc3d30c3e97abb55c90) + '@nuxt/vite-builder': 4.4.4(f699aa546d87a8fa4804be6580b510f7) '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) '@vue/shared': 3.5.33 chokidar: 5.0.0 @@ -10262,7 +10265,7 @@ snapshots: vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(vue@3.5.33(typescript@6.0.3)) optionalDependencies: '@parcel/watcher': 2.5.6 - '@types/node': 25.6.0 + '@types/node': 24.13.2 transitivePeerDependencies: - '@arethetypeswrong/core' - '@azure/app-configuration' @@ -10338,16 +10341,16 @@ snapshots: - xml2js - yaml - nuxtseo-shared@5.1.3(cdaeb7588bb59f0294d3d21d524df9cd): + nuxtseo-shared@5.1.3(2e8bda1693c05897cf840ac1e487f801): dependencies: '@clack/prompts': 1.3.0 - '@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)) + '@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)) '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxt/schema': 4.4.4 birpc: 4.0.0 consola: 3.4.2 defu: 6.1.7 - 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) + 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) ofetch: 1.5.1 pathe: 2.0.3 pkg-types: 2.3.1 @@ -10357,7 +10360,7 @@ snapshots: ufo: 1.6.4 vue: 3.5.33(typescript@6.0.3) optionalDependencies: - nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261) + nuxt-site-config: 4.0.8(9f18a20bd5176f6dc0da727abab2a89a) zod: 3.25.76 transitivePeerDependencies: - magicast @@ -11271,7 +11274,7 @@ snapshots: magic-string: 0.30.21 unplugin: 2.3.11 - undici-types@7.19.2: {} + undici-types@7.18.2: {} undici@6.25.0: {} @@ -11396,23 +11399,23 @@ snapshots: optionalDependencies: typescript: 6.0.3 - 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)): + 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)): dependencies: birpc: 2.9.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) - 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)) + 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) + 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)) - 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)): + 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)): dependencies: - 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) + 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) - 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): + 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): dependencies: cac: 6.7.14 es-module-lexer: 2.1.0 obug: 2.1.1 pathe: 2.0.3 - 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)' + 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)' transitivePeerDependencies: - '@arethetypeswrong/core' - '@tsdown/css' @@ -11433,7 +11436,7 @@ snapshots: - unplugin-unused - yaml - 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)): + 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)): dependencies: '@babel/code-frame': 7.29.0 chokidar: 4.0.3 @@ -11443,7 +11446,7 @@ snapshots: proper-lockfile: 4.1.2 tiny-invariant: 1.3.3 tinyglobby: 0.2.16 - 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)' + 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)' vscode-uri: 3.1.0 optionalDependencies: eslint: 10.3.0(jiti@2.6.1) @@ -11452,7 +11455,7 @@ snapshots: typescript: 6.0.3 vue-tsc: 3.2.7(typescript@6.0.3) - 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)): + 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)): dependencies: ansis: 4.2.0 debug: 4.4.3 @@ -11462,28 +11465,28 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.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) - 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)) + 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) + 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)) optionalDependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) transitivePeerDependencies: - supports-color - 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)): + 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)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.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) + 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) - 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): + 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): dependencies: '@oxc-project/types': 0.127.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) - '@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) + '@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) + '@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) oxfmt: 0.46.0 oxlint: 1.61.0(oxlint-tsgolint@0.22.0) oxlint-tsgolint: 0.22.0 @@ -11526,7 +11529,7 @@ snapshots: - vite - yaml - 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): + 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): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -11535,7 +11538,7 @@ snapshots: rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 25.6.0 + '@types/node': 24.13.2 fsevents: 2.3.3 jiti: 2.6.1 lightningcss: 1.32.0 @@ -11543,9 +11546,9 @@ snapshots: tsx: 4.21.0 yaml: 2.8.4 - 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)): + 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)): dependencies: - '@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)) + '@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)) transitivePeerDependencies: - '@cucumber/cucumber' - '@jest/globals' diff --git a/server/utils/git-wire/receive-pack.ts b/server/utils/git-wire/receive-pack.ts index 292ce04..c920c5a 100644 --- a/server/utils/git-wire/receive-pack.ts +++ b/server/utils/git-wire/receive-pack.ts @@ -1,8 +1,8 @@ import { type ChildProcessWithoutNullStreams, spawn } from 'node:child_process' import { Readable } from 'node:stream' -import { classifyNgReason, classifySshStderr, RemoteRejectedError, WireError } from './errors' +import { classifyNgReason, classifySshStderr, WireError } from './errors' import { encodePktLine, flushPkt, lineToString, PktLineReader } from './pkt-line' -import { type Advertisement, parseAdvertisement, ZERO_SHA } from './refs' +import { type Advertisement, parseAdvertisement } from './refs' const AGENT = 'synchub.to' const STDERR_CAP = 16 * 1024 diff --git a/server/utils/queue.ts b/server/utils/queue.ts index 1cebd3a..662c4e4 100644 --- a/server/utils/queue.ts +++ b/server/utils/queue.ts @@ -25,7 +25,7 @@ export async function enqueue(kind: string, payload: object, opts: EnqueueOption payload, runAfter: opts.runAfter ?? new Date(), }).returning({ id: job.id }) - return row + return row! } /** diff --git a/server/utils/splice.ts b/server/utils/splice.ts index fea8ec4..fd94f20 100644 --- a/server/utils/splice.ts +++ b/server/utils/splice.ts @@ -5,7 +5,7 @@ import { sshReceivePackFactory, } from './git-wire/receive-pack' import { ZERO_SHA } from './git-wire/refs' -import { fetchAdvertisement, fetchPack } from './git-wire/upload-pack' +import { fetchPack } from './git-wire/upload-pack' import { loadSshArgsForInstall } from './ssh-cmd' import { sshEndpointForKnot } from './sync-push-host' diff --git a/server/utils/sync-ref.ts b/server/utils/sync-ref.ts index 75cb87a..ce9265a 100644 --- a/server/utils/sync-ref.ts +++ b/server/utils/sync-ref.ts @@ -4,6 +4,7 @@ import { useDb } from './db' import { RemoteRejectedError, WireError } from './git-wire/errors' import { installationOctokit } from './github-app' import { spliceDelete, splicePush } from './splice' +import { fetchAdvertisement } from './git-wire/upload-pack' export type RefType = 'branch' | 'tag' diff --git a/test/unit/encryption.spec.ts b/test/unit/encryption.spec.ts index ba53a3a..e7286a4 100644 --- a/test/unit/encryption.spec.ts +++ b/test/unit/encryption.spec.ts @@ -40,14 +40,14 @@ describe('encryption', () => { it('throws on tampered ciphertext', () => { const { ciphertext, nonce } = encrypt('hello') const tampered = Buffer.from(ciphertext) - tampered[0] = tampered[0] ^ 0xFF + tampered[0] = tampered[0]! ^ 0xFF expect(() => decrypt(tampered, nonce)).toThrow(/invalid tag|auth/i) }) it('throws on tampered nonce', () => { const { ciphertext, nonce } = encrypt('hello') const tampered = Buffer.from(nonce) - tampered[0] = tampered[0] ^ 0xFF + tampered[0] = tampered[0]! ^ 0xFF expect(() => decrypt(ciphertext, tampered)).toThrow(/invalid tag|auth/i) }) diff --git a/test/unit/github-ownership.spec.ts b/test/unit/github-ownership.spec.ts index 2cf6d07..0c9fda3 100644 --- a/test/unit/github-ownership.spec.ts +++ b/test/unit/github-ownership.spec.ts @@ -3,7 +3,9 @@ import { userAdministersInstallation } from '../../server/utils/github-app' import type { UserOctokit } from '../../server/utils/github-app' function octokitReturning(ids: number[]): UserOctokit { - const request = vi.fn(async () => ({ data: { installations: ids.map(id => ({ id })) } })) + const request = vi.fn<() => Promise<{ data: { installations: { id: number }[] } }>>( + async () => ({ data: { installations: ids.map(id => ({ id })) } }), + ) // eslint-disable-next-line ts/no-unsafe-type-assertion -- only `request` is exercised return { request } as unknown as UserOctokit } diff --git a/test/unit/repository-handler.spec.ts b/test/unit/repository-handler.spec.ts index 2aa6715..d3e4d95 100644 --- a/test/unit/repository-handler.spec.ts +++ b/test/unit/repository-handler.spec.ts @@ -152,7 +152,7 @@ describe('github.repository job handler', () => { await dispatch(envelope('privatized')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeInstanceOf(Date) + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) expect(putRecordMock).not.toHaveBeenCalled() }) }) @@ -162,22 +162,22 @@ describe('github.repository job handler', () => { await seedMapping() await dispatch(envelope('transferred')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeInstanceOf(Date) + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) }) it('sets disabledAt for deleted', async () => { await seedMapping() await dispatch(envelope('deleted')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeInstanceOf(Date) + expect(rows[0]!.disabledAt).toBeInstanceOf(Date) }) it('leaves the tangled mirror fields untouched (we do not delete user data)', async () => { await seedMapping() await dispatch(envelope('deleted')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz') - expect(rows[0].tangledFullName).toBe('did:plc:abc/my-project') + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz') + expect(rows[0]!.tangledFullName).toBe('did:plc:abc/my-project') }) }) @@ -198,7 +198,7 @@ describe('github.repository job handler', () => { await dispatch(envelope('publicized')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeNull() + expect(rows[0]!.disabledAt).toBeNull() expect(putRecordMock).toHaveBeenCalledTimes(1) }) @@ -208,7 +208,7 @@ describe('github.repository job handler', () => { await dispatch(envelope('publicized')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeNull() + expect(rows[0]!.disabledAt).toBeNull() const jobs = await useDb().select().from(job) const kinds = jobs.map(j => j.kind) @@ -232,8 +232,8 @@ describe('github.repository job handler', () => { await dispatch(envelope('renamed')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].githubFullName).toBe('alice/new-name') - expect(rows[0].lastError).toMatch(/^info: renamed on github from alice\/my-project to alice\/new-name/) + expect(rows[0]!.githubFullName).toBe('alice/new-name') + expect(rows[0]!.lastError).toMatch(/^info: renamed on github from alice\/my-project to alice\/new-name/) // No tangled-side rename. expect(putRecordMock).not.toHaveBeenCalled() @@ -246,7 +246,7 @@ describe('github.repository job handler', () => { await dispatch(envelope('renamed')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].lastError).toBeNull() + expect(rows[0]!.lastError).toBeNull() }) }) @@ -255,8 +255,8 @@ describe('github.repository job handler', () => { await seedMapping() await dispatch(envelope('archived')) const rows = await useDb().select().from(repoMapping) - expect(rows[0].disabledAt).toBeNull() - expect(rows[0].lastError).toBeNull() + expect(rows[0]!.disabledAt).toBeNull() + expect(rows[0]!.lastError).toBeNull() expect(putRecordMock).not.toHaveBeenCalled() }) diff --git a/test/unit/server-session.spec.ts b/test/unit/server-session.spec.ts index bb13c6a..53d62b8 100644 --- a/test/unit/server-session.spec.ts +++ b/test/unit/server-session.spec.ts @@ -48,8 +48,9 @@ describe('server-session: sessionConfig', () => { }) }) +const acct = (did: string, installationId: number) => ({ did, installationId }) + describe('server-session: readAccounts', () => { - const acct = (did: string, installationId: number) => ({ did, installationId }) it('returns null for empty or malformed cookie data', () => { expect(readAccounts({})).toBeNull() diff --git a/test/unit/ssh-keypair.spec.ts b/test/unit/ssh-keypair.spec.ts index 342ce50..20e56fd 100644 --- a/test/unit/ssh-keypair.spec.ts +++ b/test/unit/ssh-keypair.spec.ts @@ -24,7 +24,7 @@ describe('ssh-keypair', () => { const { publicKeyOpenSsh, privateKeyPem } = generateKeypair('test') // Decode the OpenSSH public key back to raw bytes and reconstruct an SPKI key. - const b64 = publicKeyOpenSsh.split(' ')[1] + const b64 = publicKeyOpenSsh.split(' ')[1]! const blob = Buffer.from(b64, 'base64') // ssh-ed25519 framing: <4 bytes len><"ssh-ed25519"><4 bytes len><32 bytes raw key> const algoLen = blob.readUInt32BE(0) @@ -68,6 +68,7 @@ describe('ssh-keypair', () => { it('rejects non-ed25519 keys', () => { const { privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, + publicKeyEncoding: { type: 'spki', format: 'pem' }, privateKeyEncoding: { type: 'pkcs8', format: 'pem' }, }) expect(() => pkcs8ToOpenSshPrivate(privateKey, 'x')) diff --git a/test/unit/sync-push.spec.ts b/test/unit/sync-push.spec.ts index 68e3328..77460df 100644 --- a/test/unit/sync-push.spec.ts +++ b/test/unit/sync-push.spec.ts @@ -101,7 +101,7 @@ describe('sync-push', () => { token: 'install-token', })) const rows = await useDb().select().from(repoMapping) - expect((rows[0].lastSyncedRefs as Record)['refs/heads/main']).toBe('a'.repeat(40)) + expect((rows[0]!.lastSyncedRefs as Record)['refs/heads/main']).toBe('a'.repeat(40)) }) it('marks mapping error and stops on a terminal too-big failure', async () => { @@ -109,8 +109,8 @@ describe('sync-push', () => { splicePushMock.mockRejectedValue(new RemoteRejectedError('pack exceeded', 'too-big')) expect(await syncPush(payload())).toEqual({ status: 'skipped', reason: 'repo-gone' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].status).toBe('error') - expect(rows[0].lastError).toMatch(/size limit/) + expect(rows[0]!.status).toBe('error') + expect(rows[0]!.lastError).toMatch(/size limit/) }) it('marks mapping error when the knot rejects our key', async () => { @@ -118,7 +118,7 @@ describe('sync-push', () => { splicePushMock.mockRejectedValue(new RemoteRejectedError('denied', 'auth-rejected')) expect(await syncPush(payload())).toEqual({ status: 'skipped', reason: 'repo-gone' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].status).toBe('error') + expect(rows[0]!.status).toBe('error') }) it('rethrows a transient stale-old-sha for queue retry', async () => { @@ -126,6 +126,6 @@ describe('sync-push', () => { splicePushMock.mockRejectedValue(new RemoteRejectedError('stale', 'stale-old-sha')) await expect(syncPush(payload())).rejects.toMatchObject({ reason: 'stale-old-sha' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].status).toBe('active') + expect(rows[0]!.status).toBe('active') }) }) diff --git a/test/unit/sync-ref.spec.ts b/test/unit/sync-ref.spec.ts index 57729f3..ecb8214 100644 --- a/test/unit/sync-ref.spec.ts +++ b/test/unit/sync-ref.spec.ts @@ -1,4 +1,5 @@ import crypto from 'node:crypto' +import process from 'node:process' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { installation, repoMapping } from '../../server/db/schema' import { clearDb, setDb, useDb } from '../../server/utils/db' @@ -129,7 +130,7 @@ describe('sync-ref', () => { await syncCreateRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) const rows = await useDb().select().from(repoMapping) - expect((rows[0].lastSyncedRefs as Record)['refs/heads/main']).toBe('d'.repeat(40)) + expect((rows[0]!.lastSyncedRefs as Record)['refs/heads/main']).toBe('d'.repeat(40)) }) it('marks mapping error when the knot reports repo gone', async () => { @@ -138,7 +139,7 @@ describe('sync-ref', () => { const result = await syncCreateRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) expect(result).toEqual({ status: 'skipped', reason: 'repo-gone' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].status).toBe('error') + expect(rows[0]!.status).toBe('error') }) it('rethrows a transient stale-old-sha for queue retry', async () => { @@ -168,7 +169,7 @@ describe('sync-ref', () => { await seedMapping({ lastSyncedRefs: { 'refs/heads/main': 'abc', 'refs/heads/old': 'def' } }) await syncDeleteRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'old' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'abc' }) + expect(rows[0]!.lastSyncedRefs).toEqual({ 'refs/heads/main': 'abc' }) }) it('marks mapping as error if knot reports repo gone', async () => { @@ -177,7 +178,7 @@ describe('sync-ref', () => { const result = await syncDeleteRef({ installationId: 1, githubRepoId: 9001, refType: 'branch', ref: 'main' }) expect(result).toEqual({ status: 'skipped', reason: 'repo-gone' }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].status).toBe('error') + expect(rows[0]!.status).toBe('error') }) }) }) diff --git a/test/unit/tangled-pubkey.spec.ts b/test/unit/tangled-pubkey.spec.ts index 528a289..35fafe2 100644 --- a/test/unit/tangled-pubkey.spec.ts +++ b/test/unit/tangled-pubkey.spec.ts @@ -75,7 +75,7 @@ describe('generateAndPublishKey', () => { expect(result.created).toBe(true) expect(createRecordMock).toHaveBeenCalledTimes(1) - const call = createRecordMock.mock.calls[0][0] + const call = createRecordMock.mock.calls[0]![0] expect(call.repo).toBe('did:plc:abc') expect(call.collection).toBe('sh.tangled.publicKey') expect(call.record.$type).toBe('sh.tangled.publicKey') @@ -86,7 +86,7 @@ describe('generateAndPublishKey', () => { const rows = await db.select().from(sshKey) .where(sql`${sshKey.installationId} = 1 AND ${sshKey.did} = 'did:plc:abc'`) expect(rows).toHaveLength(1) - const row = rows[0] + const row = rows[0]! expect(row.publicKey).toMatch(/^ssh-ed25519 /) expect(row.tangledKeyRkey).toBe('3kh2y4xq2lk2v') @@ -163,8 +163,8 @@ describe('rotateKey', () => { const db = useDb() const before = await db.select().from(sshKey).where(sql`${sshKey.installationId} = 1`) expect(before).toHaveLength(1) - const oldPubKey = before[0].publicKey - const oldRkey = before[0].tangledKeyRkey + const oldPubKey = before[0]!.publicKey + const oldRkey = before[0]!.tangledKeyRkey const result = await rotateKey({ oauthSession: fakeOauthSession('did:plc:abc'), @@ -173,15 +173,15 @@ describe('rotateKey', () => { expect(result.created).toBe(true) expect(deleteRecordMock).toHaveBeenCalledTimes(1) - const del = deleteRecordMock.mock.calls[0][0] + const del = deleteRecordMock.mock.calls[0]![0] expect(del.repo).toBe('did:plc:abc') expect(del.collection).toBe('sh.tangled.publicKey') expect(del.rkey).toBe(oldRkey) const after = await db.select().from(sshKey).where(sql`${sshKey.installationId} = 1`) expect(after).toHaveLength(1) - expect(after[0].publicKey).not.toBe(oldPubKey) - expect(after[0].tangledKeyRkey).toBe('rkey-2') + expect(after[0]!.publicKey).not.toBe(oldPubKey) + expect(after[0]!.tangledKeyRkey).toBe('rkey-2') }) it('proceeds when the PDS reports the record is already gone (404)', async () => { @@ -202,7 +202,7 @@ describe('rotateKey', () => { const db = useDb() const rows = await db.select().from(sshKey) expect(rows).toHaveLength(1) - expect(rows[0].tangledKeyRkey).toBe('rkey-2') + expect(rows[0]!.tangledKeyRkey).toBe('rkey-2') }) it('aborts the rotation if the PDS delete fails for a non-404 reason', async () => { @@ -222,7 +222,7 @@ describe('rotateKey', () => { const db = useDb() const rows = await db.select().from(sshKey) expect(rows).toHaveLength(1) - expect(rows[0].tangledKeyRkey).toBe('rkey-1') + expect(rows[0]!.tangledKeyRkey).toBe('rkey-1') expect(createRecordMock).toHaveBeenCalledTimes(1) }) @@ -276,7 +276,7 @@ describe('revokeKeysForInstallation', () => { expect(restoreMock).toHaveBeenCalledWith('did:plc:abc') expect(deleteRecordMock).toHaveBeenCalledTimes(1) - const del = deleteRecordMock.mock.calls[0][0] + const del = deleteRecordMock.mock.calls[0]![0] expect(del.repo).toBe('did:plc:abc') expect(del.collection).toBe('sh.tangled.publicKey') expect(del.rkey).toBe('3kh2y4xq2lk2v') @@ -347,7 +347,7 @@ describe('revokeKeyForInstallationDid', () => { await revokeKeyForInstallationDid(1, 'did:plc:1') expect(restoreMock).toHaveBeenCalledWith('did:plc:1') - const del = deleteRecordMock.mock.calls[0][0] + const del = deleteRecordMock.mock.calls[0]![0] expect(del.repo).toBe('did:plc:1') expect(del.collection).toBe('sh.tangled.publicKey') expect(del.rkey).toBe('rkey-1') @@ -363,7 +363,7 @@ describe('revokeKeyForInstallationDid', () => { const db = useDb() const rows = await db.select().from(sshKey) expect(rows).toHaveLength(1) - expect(rows[0].did).toBe('did:plc:2') + expect(rows[0]!.did).toBe('did:plc:2') }) it('no-ops when no key exists for the pair', async () => { diff --git a/test/unit/tangled-repo.spec.ts b/test/unit/tangled-repo.spec.ts index 496afbf..cc4049b 100644 --- a/test/unit/tangled-repo.spec.ts +++ b/test/unit/tangled-repo.spec.ts @@ -156,9 +156,9 @@ describe('enrollRepo', () => { const rows = await useDb().select().from(repoMapping) .where(sql`${repoMapping.installationId} = 1`) expect(rows).toHaveLength(1) - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz') - expect(rows[0].knot).toBe('knot1.tangled.sh') - expect(rows[0].status).toBe('active') + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz') + expect(rows[0]!.knot).toBe('knot1.tangled.sh') + expect(rows[0]!.status).toBe('active') }) it('skips private repos', async () => { @@ -234,12 +234,12 @@ describe('enrollRepo', () => { const rows = await useDb().select().from(repoMapping) .where(sql`${repoMapping.installationId} = 1`) expect(rows).toHaveLength(1) - expect(rows[0].tangledRepoDid).toBe('did:plc:repo-new') - expect(rows[0].status).toBe('active') - expect(rows[0].lastError).toBeNull() + expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-new') + expect(rows[0]!.status).toBe('active') + expect(rows[0]!.lastError).toBeNull() // lastSyncedRefs preserved across the resync so the push worker keeps // dedupe state. - expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'deadbeef' }) + expect(rows[0]!.lastSyncedRefs).toEqual({ 'refs/heads/main': 'deadbeef' }) }) it('throws and writes nothing if the knot rejects the procedure', async () => { @@ -575,6 +575,6 @@ describe('syncRepoMetadata', () => { }) const rows = await useDb().select().from(repoMapping) - expect(rows[0].githubFullName).toBe('alice/renamed') + expect(rows[0]!.githubFullName).toBe('alice/renamed') }) }) diff --git a/test/utils/git-wire.ts b/test/utils/git-wire.ts index b80089d..eeb38d5 100644 --- a/test/utils/git-wire.ts +++ b/test/utils/git-wire.ts @@ -71,7 +71,7 @@ export function fakeGithubFetch(repos: Map) { const url = typeof input === 'string' ? input : input.toString() const match = url.match(/github\.com\/(.+?)\.git\/(info\/refs|git-upload-pack)/) if (!match) throw new Error(`fakeGithubFetch: unexpected url ${url}`) - const repoPath = repos.get(match[1]) + const repoPath = repos.get(match[1]!) if (!repoPath) return new Response(null, { status: 404, statusText: 'Not Found' }) if (match[2] === 'info/refs') { -- 2.51.2