alpha
Login
or
Join now
danielroe.dev
/
synchub.to
Star
1
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
mirror your GitHub repos to tangled.org automatically
Star
1
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
chore: tidy up + lint/typefix
author
Daniel Roe
date
1 week ago
(Jun 13, 2026, 11:36 AM +0100)
commit
b1f78732
b1f7873238a7a1623be315fafd45478c028ff859
parent
02dfd766
02dfd766de98864ba314c075ba0e8410bd57770f
+175
-156
18 changed files
Expand all
Collapse all
Unified
Split
app
pages
dashboard.vue
nuxt.config.ts
package.json
pnpm-lock.yaml
server
utils
git-wire
receive-pack.ts
queue.ts
splice.ts
sync-ref.ts
test
unit
encryption.spec.ts
github-ownership.spec.ts
repository-handler.spec.ts
server-session.spec.ts
ssh-keypair.spec.ts
sync-push.spec.ts
sync-ref.spec.ts
tangled-pubkey.spec.ts
tangled-repo.spec.ts
utils
git-wire.ts
+2
-2
app/pages/dashboard.vue
Reviewed
···
176
176
const entries = Object.entries(refs)
177
177
if (entries.length === 0) return '—'
178
178
if (entries.length === 1) {
179
179
-
const [ref, sha] = entries[0]!
180
180
-
return `${ref} @ ${sha.slice(0, 7)}`
179
179
+
const [refName, sha] = entries[0]!
180
180
+
return `${refName} @ ${sha.slice(0, 7)}`
181
181
}
182
182
return `${entries.length} refs`
183
183
}
+10
-1
nuxt.config.ts
Reviewed
···
38
38
},
39
39
typescript: {
40
40
nodeTsConfig: {
41
41
-
include: ['../vite.config.ts'],
41
41
+
compilerOptions: {
42
42
+
types: ['node'],
43
43
+
},
44
44
+
include: [
45
45
+
'../vite.config.ts',
46
46
+
'../test/unit',
47
47
+
'../test/utils',
48
48
+
// TODO: fix in a better way 🤦
49
49
+
'./types/nitro-imports.d.ts',
50
50
+
],
42
51
},
43
52
},
44
53
app: {
+1
package.json
Reviewed
···
62
62
"@octokit/webhooks-types": "^7.6.1",
63
63
"@playwright/test": "1.59.1",
64
64
"@stylistic/eslint-plugin": "^5.10.0",
65
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
Reviewed
···
32
32
version: 2.2.0
33
33
'@nuxt/fonts':
34
34
specifier: ^0.14.0
35
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
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
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
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
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
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
62
-
version: 6.4.11(51cc4797704473e6ff9b1d290d94c09f)
62
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
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
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
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
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
91
+
'@types/node':
92
92
+
specifier: ^24.13.2
93
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
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
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
2762
-
'@types/node@25.6.0':
2763
2763
-
resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
2765
2765
+
'@types/node@24.13.2':
2766
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
5477
-
undici-types@7.19.2:
5478
5478
-
resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
5480
5480
+
undici-types@7.18.2:
5481
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
7078
-
'@nuxt/nitro-server@4.4.4(c703237518f96a01201357fd255c3b67)':
7081
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
7257
-
'@nuxt/vite-builder@4.4.4(60540df5947dbcc3d30c3e97abb55c90)':
7260
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
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
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
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
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
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
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
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
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
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
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
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
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
8181
-
'@types/node@25.6.0':
8184
8184
+
'@types/node@24.13.2':
8182
8185
dependencies:
8183
8183
-
undici-types: 7.19.2
8186
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
8193
-
'@types/node': 25.6.0
8196
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
8303
-
'@types/node': 25.6.0
8306
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
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
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
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
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
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
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
8347
-
'@types/node': 25.6.0
8350
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
8770
-
'@types/node': 25.6.0
8773
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
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
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
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
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
9503
-
'@types/node': 25.6.0
9506
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
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
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
10129
-
nuxt-og-image@6.4.11(51cc4797704473e6ff9b1d290d94c09f):
10132
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
10145
-
nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261)
10146
10146
-
nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd)
10148
10148
+
nuxt-site-config: 4.0.8(9f18a20bd5176f6dc0da727abab2a89a)
10149
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
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
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
10188
-
nuxt-site-config@4.0.8(6ac414940de2d45d3b2692e1d867e261):
10191
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
10193
-
nuxtseo-shared: 5.1.3(cdaeb7588bb59f0294d3d21d524df9cd)
10196
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
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
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
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
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
10212
-
'@nuxt/nitro-server': 4.4.4(c703237518f96a01201357fd255c3b67)
10215
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
10215
-
'@nuxt/vite-builder': 4.4.4(60540df5947dbcc3d30c3e97abb55c90)
10218
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
10265
-
'@types/node': 25.6.0
10268
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
10341
-
nuxtseo-shared@5.1.3(cdaeb7588bb59f0294d3d21d524df9cd):
10344
10344
+
nuxtseo-shared@5.1.3(2e8bda1693c05897cf840ac1e487f801):
10342
10345
dependencies:
10343
10346
'@clack/prompts': 1.3.0
10344
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
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
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
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
10360
-
nuxt-site-config: 4.0.8(6ac414940de2d45d3b2692e1d867e261)
10363
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
11274
-
undici-types@7.19.2: {}
11277
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
11538
-
'@types/node': 25.6.0
11541
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
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
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
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
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
Reviewed
···
1
1
import { type ChildProcessWithoutNullStreams, spawn } from 'node:child_process'
2
2
import { Readable } from 'node:stream'
3
3
-
import { classifyNgReason, classifySshStderr, RemoteRejectedError, WireError } from './errors'
3
3
+
import { classifyNgReason, classifySshStderr, WireError } from './errors'
4
4
import { encodePktLine, flushPkt, lineToString, PktLineReader } from './pkt-line'
5
5
-
import { type Advertisement, parseAdvertisement, ZERO_SHA } from './refs'
5
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
Reviewed
···
25
25
payload,
26
26
runAfter: opts.runAfter ?? new Date(),
27
27
}).returning({ id: job.id })
28
28
-
return row
28
28
+
return row!
29
29
}
30
30
31
31
/**
+1
-1
server/utils/splice.ts
Reviewed
···
5
5
sshReceivePackFactory,
6
6
} from './git-wire/receive-pack'
7
7
import { ZERO_SHA } from './git-wire/refs'
8
8
-
import { fetchAdvertisement, fetchPack } from './git-wire/upload-pack'
8
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
Reviewed
···
4
4
import { RemoteRejectedError, WireError } from './git-wire/errors'
5
5
import { installationOctokit } from './github-app'
6
6
import { spliceDelete, splicePush } from './splice'
7
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
Reviewed
···
40
40
it('throws on tampered ciphertext', () => {
41
41
const { ciphertext, nonce } = encrypt('hello')
42
42
const tampered = Buffer.from(ciphertext)
43
43
-
tampered[0] = tampered[0] ^ 0xFF
43
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
50
-
tampered[0] = tampered[0] ^ 0xFF
50
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
Reviewed
···
3
3
import type { UserOctokit } from '../../server/utils/github-app'
4
4
5
5
function octokitReturning(ids: number[]): UserOctokit {
6
6
-
const request = vi.fn(async () => ({ data: { installations: ids.map(id => ({ id })) } }))
6
6
+
const request = vi.fn<() => Promise<{ data: { installations: { id: number }[] } }>>(
7
7
+
async () => ({ data: { installations: ids.map(id => ({ id })) } }),
8
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
Reviewed
···
152
152
await dispatch(envelope('privatized'))
153
153
154
154
const rows = await useDb().select().from(repoMapping)
155
155
-
expect(rows[0].disabledAt).toBeInstanceOf(Date)
155
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
165
-
expect(rows[0].disabledAt).toBeInstanceOf(Date)
165
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
172
-
expect(rows[0].disabledAt).toBeInstanceOf(Date)
172
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
179
-
expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz')
180
180
-
expect(rows[0].tangledFullName).toBe('did:plc:abc/my-project')
179
179
+
expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz')
180
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
201
-
expect(rows[0].disabledAt).toBeNull()
201
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
211
-
expect(rows[0].disabledAt).toBeNull()
211
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
235
-
expect(rows[0].githubFullName).toBe('alice/new-name')
236
236
-
expect(rows[0].lastError).toMatch(/^info: renamed on github from alice\/my-project to alice\/new-name/)
235
235
+
expect(rows[0]!.githubFullName).toBe('alice/new-name')
236
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
249
-
expect(rows[0].lastError).toBeNull()
249
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
258
-
expect(rows[0].disabledAt).toBeNull()
259
259
-
expect(rows[0].lastError).toBeNull()
258
258
+
expect(rows[0]!.disabledAt).toBeNull()
259
259
+
expect(rows[0]!.lastError).toBeNull()
260
260
expect(putRecordMock).not.toHaveBeenCalled()
261
261
})
262
262
+2
-1
test/unit/server-session.spec.ts
Reviewed
···
48
48
})
49
49
})
50
50
51
51
+
const acct = (did: string, installationId: number) => ({ did, installationId })
52
52
+
51
53
describe('server-session: readAccounts', () => {
52
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
Reviewed
···
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
27
-
const b64 = publicKeyOpenSsh.split(' ')[1]
27
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
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
Reviewed
···
101
101
token: 'install-token',
102
102
}))
103
103
const rows = await useDb().select().from(repoMapping)
104
104
-
expect((rows[0].lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('a'.repeat(40))
104
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
112
-
expect(rows[0].status).toBe('error')
113
113
-
expect(rows[0].lastError).toMatch(/size limit/)
112
112
+
expect(rows[0]!.status).toBe('error')
113
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
121
-
expect(rows[0].status).toBe('error')
121
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
129
-
expect(rows[0].status).toBe('active')
129
129
+
expect(rows[0]!.status).toBe('active')
130
130
})
131
131
})
+5
-4
test/unit/sync-ref.spec.ts
Reviewed
···
1
1
import crypto from 'node:crypto'
2
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
132
-
expect((rows[0].lastSyncedRefs as Record<string, string>)['refs/heads/main']).toBe('d'.repeat(40))
133
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
141
-
expect(rows[0].status).toBe('error')
142
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
171
-
expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'abc' })
172
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
180
-
expect(rows[0].status).toBe('error')
181
181
+
expect(rows[0]!.status).toBe('error')
181
182
})
182
183
})
183
184
})
+12
-12
test/unit/tangled-pubkey.spec.ts
Reviewed
···
75
75
76
76
expect(result.created).toBe(true)
77
77
expect(createRecordMock).toHaveBeenCalledTimes(1)
78
78
-
const call = createRecordMock.mock.calls[0][0]
78
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
89
-
const row = rows[0]
89
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
166
-
const oldPubKey = before[0].publicKey
167
167
-
const oldRkey = before[0].tangledKeyRkey
166
166
+
const oldPubKey = before[0]!.publicKey
167
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
176
-
const del = deleteRecordMock.mock.calls[0][0]
176
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
183
-
expect(after[0].publicKey).not.toBe(oldPubKey)
184
184
-
expect(after[0].tangledKeyRkey).toBe('rkey-2')
183
183
+
expect(after[0]!.publicKey).not.toBe(oldPubKey)
184
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
205
-
expect(rows[0].tangledKeyRkey).toBe('rkey-2')
205
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
225
-
expect(rows[0].tangledKeyRkey).toBe('rkey-1')
225
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
279
-
const del = deleteRecordMock.mock.calls[0][0]
279
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
350
-
const del = deleteRecordMock.mock.calls[0][0]
350
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
366
-
expect(rows[0].did).toBe('did:plc:2')
366
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
Reviewed
···
156
156
const rows = await useDb().select().from(repoMapping)
157
157
.where(sql`${repoMapping.installationId} = 1`)
158
158
expect(rows).toHaveLength(1)
159
159
-
expect(rows[0].tangledRepoDid).toBe('did:plc:repo-xyz')
160
160
-
expect(rows[0].knot).toBe('knot1.tangled.sh')
161
161
-
expect(rows[0].status).toBe('active')
159
159
+
expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-xyz')
160
160
+
expect(rows[0]!.knot).toBe('knot1.tangled.sh')
161
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
237
-
expect(rows[0].tangledRepoDid).toBe('did:plc:repo-new')
238
238
-
expect(rows[0].status).toBe('active')
239
239
-
expect(rows[0].lastError).toBeNull()
237
237
+
expect(rows[0]!.tangledRepoDid).toBe('did:plc:repo-new')
238
238
+
expect(rows[0]!.status).toBe('active')
239
239
+
expect(rows[0]!.lastError).toBeNull()
240
240
// lastSyncedRefs preserved across the resync so the push worker keeps
241
241
// dedupe state.
242
242
-
expect(rows[0].lastSyncedRefs).toEqual({ 'refs/heads/main': 'deadbeef' })
242
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
578
-
expect(rows[0].githubFullName).toBe('alice/renamed')
578
578
+
expect(rows[0]!.githubFullName).toBe('alice/renamed')
579
579
})
580
580
})
+1
-1
test/utils/git-wire.ts
Reviewed
···
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
74
-
const repoPath = repos.get(match[1])
74
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') {