Ionosphere.tv
3
fork

Configure Feed

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

feat: scaffold appview with SQLite schema and REST API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

+1765 -1
+1
.npmrc
··· 1 + approve-builds=false
+26
apps/ionosphere-appview/package.json
··· 1 + { 2 + "name": "ionosphere-appview", 3 + "version": "0.1.0", 4 + "type": "module", 5 + "dependencies": { 6 + "@atproto/api": "^0.15.0", 7 + "@hono/node-server": "^1.13.0", 8 + "@ionosphere/format": "workspace:*", 9 + "better-sqlite3": "^12.8.0", 10 + "hono": "^4.7.0", 11 + "relational-text": "^0.1.1", 12 + "tsx": "^4.19.0" 13 + }, 14 + "devDependencies": { 15 + "@types/better-sqlite3": "^7.6.0", 16 + "typescript": "^5.7.0", 17 + "vitest": "^3.0.0" 18 + }, 19 + "scripts": { 20 + "appview": "tsx src/appview.ts", 21 + "ingest": "tsx src/ingest.ts", 22 + "transcribe": "tsx src/transcribe.ts", 23 + "test": "vitest run", 24 + "typecheck": "tsc --noEmit" 25 + } 26 + }
+13
apps/ionosphere-appview/src/appview.ts
··· 1 + import { serve } from "@hono/node-server"; 2 + import { openDb, migrate } from "./db.js"; 3 + import { createRoutes } from "./routes.js"; 4 + 5 + const db = openDb(); 6 + migrate(db); 7 + 8 + const app = createRoutes(db); 9 + 10 + const port = parseInt(process.env.PORT || "3001", 10); 11 + serve({ fetch: app.fetch, port }, (info) => { 12 + console.log(`Ionosphere appview running on http://localhost:${info.port}`); 13 + });
+112
apps/ionosphere-appview/src/db.ts
··· 1 + import Database from "better-sqlite3"; 2 + import path from "node:path"; 3 + 4 + const DB_PATH = path.resolve( 5 + import.meta.dirname, 6 + "../../data/ionosphere.sqlite" 7 + ); 8 + 9 + export function openDb(): Database.Database { 10 + const db = new Database(DB_PATH); 11 + db.pragma("journal_mode = WAL"); 12 + db.pragma("foreign_keys = ON"); 13 + return db; 14 + } 15 + 16 + export function migrate(db: Database.Database): void { 17 + db.exec(` 18 + CREATE TABLE IF NOT EXISTS events ( 19 + uri TEXT PRIMARY KEY, 20 + did TEXT NOT NULL, 21 + rkey TEXT NOT NULL, 22 + name TEXT NOT NULL, 23 + description TEXT, 24 + location TEXT, 25 + starts_at TEXT NOT NULL, 26 + ends_at TEXT NOT NULL, 27 + tracks TEXT, 28 + schedule_repo TEXT, 29 + vod_repo TEXT, 30 + created_at TEXT DEFAULT CURRENT_TIMESTAMP 31 + ); 32 + 33 + CREATE TABLE IF NOT EXISTS speakers ( 34 + uri TEXT PRIMARY KEY, 35 + did TEXT, 36 + rkey TEXT NOT NULL, 37 + name TEXT NOT NULL, 38 + handle TEXT, 39 + speaker_did TEXT, 40 + bio TEXT, 41 + affiliations TEXT, 42 + created_at TEXT DEFAULT CURRENT_TIMESTAMP 43 + ); 44 + 45 + CREATE TABLE IF NOT EXISTS talks ( 46 + uri TEXT PRIMARY KEY, 47 + did TEXT NOT NULL, 48 + rkey TEXT NOT NULL, 49 + title TEXT NOT NULL, 50 + description TEXT, 51 + document TEXT, 52 + video_uri TEXT, 53 + schedule_uri TEXT, 54 + event_uri TEXT NOT NULL, 55 + room TEXT, 56 + category TEXT, 57 + talk_type TEXT, 58 + starts_at TEXT, 59 + ends_at TEXT, 60 + duration INTEGER, 61 + created_at TEXT DEFAULT CURRENT_TIMESTAMP, 62 + FOREIGN KEY (event_uri) REFERENCES events(uri) ON DELETE CASCADE 63 + ); 64 + 65 + CREATE TABLE IF NOT EXISTS talk_speakers ( 66 + talk_uri TEXT NOT NULL, 67 + speaker_uri TEXT NOT NULL, 68 + PRIMARY KEY (talk_uri, speaker_uri), 69 + FOREIGN KEY (talk_uri) REFERENCES talks(uri) ON DELETE CASCADE, 70 + FOREIGN KEY (speaker_uri) REFERENCES speakers(uri) ON DELETE CASCADE 71 + ); 72 + 73 + CREATE TABLE IF NOT EXISTS concepts ( 74 + uri TEXT PRIMARY KEY, 75 + did TEXT NOT NULL, 76 + rkey TEXT NOT NULL, 77 + name TEXT NOT NULL, 78 + aliases TEXT, 79 + description TEXT, 80 + wikidata_id TEXT, 81 + url TEXT, 82 + created_at TEXT DEFAULT CURRENT_TIMESTAMP 83 + ); 84 + 85 + CREATE TABLE IF NOT EXISTS talk_concepts ( 86 + talk_uri TEXT NOT NULL, 87 + concept_uri TEXT NOT NULL, 88 + mention_count INTEGER DEFAULT 1, 89 + PRIMARY KEY (talk_uri, concept_uri), 90 + FOREIGN KEY (talk_uri) REFERENCES talks(uri) ON DELETE CASCADE, 91 + FOREIGN KEY (concept_uri) REFERENCES concepts(uri) ON DELETE CASCADE 92 + ); 93 + 94 + CREATE TABLE IF NOT EXISTS talk_crossrefs ( 95 + from_talk_uri TEXT NOT NULL, 96 + to_talk_uri TEXT NOT NULL, 97 + PRIMARY KEY (from_talk_uri, to_talk_uri), 98 + FOREIGN KEY (from_talk_uri) REFERENCES talks(uri) ON DELETE CASCADE, 99 + FOREIGN KEY (to_talk_uri) REFERENCES talks(uri) ON DELETE CASCADE 100 + ); 101 + 102 + CREATE TABLE IF NOT EXISTS pipeline_status ( 103 + talk_uri TEXT PRIMARY KEY, 104 + ingested INTEGER DEFAULT 0, 105 + transcribed INTEGER DEFAULT 0, 106 + assembled INTEGER DEFAULT 0, 107 + enriched INTEGER DEFAULT 0, 108 + updated_at TEXT DEFAULT CURRENT_TIMESTAMP, 109 + FOREIGN KEY (talk_uri) REFERENCES talks(uri) ON DELETE CASCADE 110 + ); 111 + `); 112 + }
+96
apps/ionosphere-appview/src/routes.ts
··· 1 + import { Hono } from "hono"; 2 + import type Database from "better-sqlite3"; 3 + 4 + export function createRoutes(db: Database.Database): Hono { 5 + const app = new Hono(); 6 + 7 + app.get("/health", (c) => c.json({ status: "ok" })); 8 + 9 + app.get("/talks", (c) => { 10 + const talks = db 11 + .prepare( 12 + `SELECT t.*, GROUP_CONCAT(s.name) as speaker_names 13 + FROM talks t 14 + LEFT JOIN talk_speakers ts ON t.uri = ts.talk_uri 15 + LEFT JOIN speakers s ON ts.speaker_uri = s.uri 16 + GROUP BY t.uri 17 + ORDER BY t.starts_at ASC` 18 + ) 19 + .all(); 20 + return c.json({ talks }); 21 + }); 22 + 23 + app.get("/talks/:rkey", (c) => { 24 + const { rkey } = c.req.param(); 25 + const talk = db 26 + .prepare("SELECT * FROM talks WHERE rkey = ?") 27 + .get(rkey); 28 + if (!talk) return c.json({ error: "not found" }, 404); 29 + 30 + const speakers = db 31 + .prepare( 32 + `SELECT s.* FROM speakers s 33 + JOIN talk_speakers ts ON s.uri = ts.speaker_uri 34 + WHERE ts.talk_uri = ?` 35 + ) 36 + .all((talk as any).uri); 37 + 38 + const concepts = db 39 + .prepare( 40 + `SELECT c.* FROM concepts c 41 + JOIN talk_concepts tc ON c.uri = tc.concept_uri 42 + WHERE tc.talk_uri = ?` 43 + ) 44 + .all((talk as any).uri); 45 + 46 + return c.json({ talk, speakers, concepts }); 47 + }); 48 + 49 + app.get("/speakers", (c) => { 50 + const speakers = db.prepare("SELECT * FROM speakers ORDER BY name ASC").all(); 51 + return c.json({ speakers }); 52 + }); 53 + 54 + app.get("/speakers/:rkey", (c) => { 55 + const { rkey } = c.req.param(); 56 + const speaker = db.prepare("SELECT * FROM speakers WHERE rkey = ?").get(rkey); 57 + if (!speaker) return c.json({ error: "not found" }, 404); 58 + 59 + const talks = db 60 + .prepare( 61 + `SELECT t.* FROM talks t 62 + JOIN talk_speakers ts ON t.uri = ts.talk_uri 63 + WHERE ts.speaker_uri = ? 64 + ORDER BY t.starts_at ASC` 65 + ) 66 + .all((speaker as any).uri); 67 + 68 + return c.json({ speaker, talks }); 69 + }); 70 + 71 + app.get("/concepts", (c) => { 72 + const concepts = db 73 + .prepare("SELECT * FROM concepts ORDER BY name ASC") 74 + .all(); 75 + return c.json({ concepts }); 76 + }); 77 + 78 + app.get("/concepts/:rkey", (c) => { 79 + const { rkey } = c.req.param(); 80 + const concept = db.prepare("SELECT * FROM concepts WHERE rkey = ?").get(rkey); 81 + if (!concept) return c.json({ error: "not found" }, 404); 82 + 83 + const talks = db 84 + .prepare( 85 + `SELECT t.* FROM talks t 86 + JOIN talk_concepts tc ON t.uri = tc.talk_uri 87 + WHERE tc.concept_uri = ? 88 + ORDER BY t.starts_at ASC` 89 + ) 90 + .all((concept as any).uri); 91 + 92 + return c.json({ concept, talks }); 93 + }); 94 + 95 + return app; 96 + }
+8
apps/ionosphere-appview/tsconfig.json
··· 1 + { 2 + "extends": "../../tsconfig.json", 3 + "compilerOptions": { 4 + "rootDir": "src", 5 + "outDir": "dist" 6 + }, 7 + "include": ["src"] 8 + }
+4 -1
package.json
··· 6 6 "build": "pnpm --filter ionosphere build", 7 7 "appview": "pnpm --filter ionosphere-appview appview" 8 8 }, 9 - "devDependencies": {} 9 + "devDependencies": {}, 10 + "pnpm": { 11 + "onlyBuiltDependencies": ["better-sqlite3"] 12 + } 10 13 }
+1505
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: {} 10 + 11 + apps/ionosphere-appview: 12 + dependencies: 13 + '@atproto/api': 14 + specifier: ^0.15.0 15 + version: 0.15.27 16 + '@hono/node-server': 17 + specifier: ^1.13.0 18 + version: 1.19.12(hono@4.12.9) 19 + '@ionosphere/format': 20 + specifier: workspace:* 21 + version: link:../../formats/tv.ionosphere 22 + better-sqlite3: 23 + specifier: ^12.8.0 24 + version: 12.8.0 25 + hono: 26 + specifier: ^4.7.0 27 + version: 4.12.9 28 + relational-text: 29 + specifier: ^0.1.1 30 + version: 0.1.1 31 + tsx: 32 + specifier: ^4.19.0 33 + version: 4.21.0 34 + devDependencies: 35 + '@types/better-sqlite3': 36 + specifier: ^7.6.0 37 + version: 7.6.13 38 + typescript: 39 + specifier: ^5.7.0 40 + version: 5.9.3 41 + vitest: 42 + specifier: ^3.0.0 43 + version: 3.2.4(@types/node@25.5.0)(tsx@4.21.0) 44 + 45 + formats/tv.ionosphere: 46 + dependencies: 47 + relational-text: 48 + specifier: ^0.1.1 49 + version: 0.1.1 50 + devDependencies: 51 + typescript: 52 + specifier: ^5 53 + version: 5.9.3 54 + vitest: 55 + specifier: ^3.0.0 56 + version: 3.2.4(@types/node@25.5.0)(tsx@4.21.0) 57 + 58 + packages: 59 + 60 + '@atproto/api@0.15.27': 61 + resolution: {integrity: sha512-ok/WGafh1nz4t8pEQGtAF/32x2E2VDWU4af6BajkO5Gky2jp2q6cv6aB2A5yuvNNcc3XkYMYipsqVHVwLPMF9g==} 62 + 63 + '@atproto/common-web@0.4.19': 64 + resolution: {integrity: sha512-3BTi58p5WpT+9/zb6UZrdsXcfPo5P45UJm0E4iwHLILr+jc37CuBj9JReDSZ4U0i9RTrI3ZkfySyZ9bd+LnMsw==} 65 + 66 + '@atproto/lex-data@0.0.14': 67 + resolution: {integrity: sha512-53DUa9664SS76nGAMYopWsO10OH0AAdf7P/HSKB6Wzx3iqe6lk/K61QZnKxOG1LreYl5CfvIJU6eNf4txI6GlQ==} 68 + 69 + '@atproto/lex-json@0.0.14': 70 + resolution: {integrity: sha512-6lPkDKqe7teEu4WrN5q7400cvZKgYS3uwUMvzG3F9XkgVYhOwSDCtouV/nSLBbpvo3l9OP0kiigtclcNcyekww==} 71 + 72 + '@atproto/lexicon@0.4.14': 73 + resolution: {integrity: sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ==} 74 + 75 + '@atproto/lexicon@0.6.2': 76 + resolution: {integrity: sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw==} 77 + 78 + '@atproto/syntax@0.4.3': 79 + resolution: {integrity: sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==} 80 + 81 + '@atproto/syntax@0.5.2': 82 + resolution: {integrity: sha512-W41szOnkppoHr0iCUrzL8gy3OD6qmDyp1UvUgmTx2oFQfgbudpz51T/gznesiCcqiUT5obfHdx4PJ+WdlEOE7Q==} 83 + 84 + '@atproto/xrpc@0.7.7': 85 + resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} 86 + 87 + '@esbuild/aix-ppc64@0.27.4': 88 + resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} 89 + engines: {node: '>=18'} 90 + cpu: [ppc64] 91 + os: [aix] 92 + 93 + '@esbuild/android-arm64@0.27.4': 94 + resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} 95 + engines: {node: '>=18'} 96 + cpu: [arm64] 97 + os: [android] 98 + 99 + '@esbuild/android-arm@0.27.4': 100 + resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} 101 + engines: {node: '>=18'} 102 + cpu: [arm] 103 + os: [android] 104 + 105 + '@esbuild/android-x64@0.27.4': 106 + resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} 107 + engines: {node: '>=18'} 108 + cpu: [x64] 109 + os: [android] 110 + 111 + '@esbuild/darwin-arm64@0.27.4': 112 + resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} 113 + engines: {node: '>=18'} 114 + cpu: [arm64] 115 + os: [darwin] 116 + 117 + '@esbuild/darwin-x64@0.27.4': 118 + resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} 119 + engines: {node: '>=18'} 120 + cpu: [x64] 121 + os: [darwin] 122 + 123 + '@esbuild/freebsd-arm64@0.27.4': 124 + resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} 125 + engines: {node: '>=18'} 126 + cpu: [arm64] 127 + os: [freebsd] 128 + 129 + '@esbuild/freebsd-x64@0.27.4': 130 + resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} 131 + engines: {node: '>=18'} 132 + cpu: [x64] 133 + os: [freebsd] 134 + 135 + '@esbuild/linux-arm64@0.27.4': 136 + resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} 137 + engines: {node: '>=18'} 138 + cpu: [arm64] 139 + os: [linux] 140 + 141 + '@esbuild/linux-arm@0.27.4': 142 + resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} 143 + engines: {node: '>=18'} 144 + cpu: [arm] 145 + os: [linux] 146 + 147 + '@esbuild/linux-ia32@0.27.4': 148 + resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} 149 + engines: {node: '>=18'} 150 + cpu: [ia32] 151 + os: [linux] 152 + 153 + '@esbuild/linux-loong64@0.27.4': 154 + resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} 155 + engines: {node: '>=18'} 156 + cpu: [loong64] 157 + os: [linux] 158 + 159 + '@esbuild/linux-mips64el@0.27.4': 160 + resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} 161 + engines: {node: '>=18'} 162 + cpu: [mips64el] 163 + os: [linux] 164 + 165 + '@esbuild/linux-ppc64@0.27.4': 166 + resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} 167 + engines: {node: '>=18'} 168 + cpu: [ppc64] 169 + os: [linux] 170 + 171 + '@esbuild/linux-riscv64@0.27.4': 172 + resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} 173 + engines: {node: '>=18'} 174 + cpu: [riscv64] 175 + os: [linux] 176 + 177 + '@esbuild/linux-s390x@0.27.4': 178 + resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} 179 + engines: {node: '>=18'} 180 + cpu: [s390x] 181 + os: [linux] 182 + 183 + '@esbuild/linux-x64@0.27.4': 184 + resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} 185 + engines: {node: '>=18'} 186 + cpu: [x64] 187 + os: [linux] 188 + 189 + '@esbuild/netbsd-arm64@0.27.4': 190 + resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} 191 + engines: {node: '>=18'} 192 + cpu: [arm64] 193 + os: [netbsd] 194 + 195 + '@esbuild/netbsd-x64@0.27.4': 196 + resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} 197 + engines: {node: '>=18'} 198 + cpu: [x64] 199 + os: [netbsd] 200 + 201 + '@esbuild/openbsd-arm64@0.27.4': 202 + resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} 203 + engines: {node: '>=18'} 204 + cpu: [arm64] 205 + os: [openbsd] 206 + 207 + '@esbuild/openbsd-x64@0.27.4': 208 + resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} 209 + engines: {node: '>=18'} 210 + cpu: [x64] 211 + os: [openbsd] 212 + 213 + '@esbuild/openharmony-arm64@0.27.4': 214 + resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} 215 + engines: {node: '>=18'} 216 + cpu: [arm64] 217 + os: [openharmony] 218 + 219 + '@esbuild/sunos-x64@0.27.4': 220 + resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} 221 + engines: {node: '>=18'} 222 + cpu: [x64] 223 + os: [sunos] 224 + 225 + '@esbuild/win32-arm64@0.27.4': 226 + resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} 227 + engines: {node: '>=18'} 228 + cpu: [arm64] 229 + os: [win32] 230 + 231 + '@esbuild/win32-ia32@0.27.4': 232 + resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} 233 + engines: {node: '>=18'} 234 + cpu: [ia32] 235 + os: [win32] 236 + 237 + '@esbuild/win32-x64@0.27.4': 238 + resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} 239 + engines: {node: '>=18'} 240 + cpu: [x64] 241 + os: [win32] 242 + 243 + '@hono/node-server@1.19.12': 244 + resolution: {integrity: sha512-txsUW4SQ1iilgE0l9/e9VQWmELXifEFvmdA1j6WFh/aFPj99hIntrSsq/if0UWyGVkmrRPKA1wCeP+UCr1B9Uw==} 245 + engines: {node: '>=18.14.1'} 246 + peerDependencies: 247 + hono: ^4 248 + 249 + '@jridgewell/sourcemap-codec@1.5.5': 250 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 251 + 252 + '@rollup/rollup-android-arm-eabi@4.60.1': 253 + resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} 254 + cpu: [arm] 255 + os: [android] 256 + 257 + '@rollup/rollup-android-arm64@4.60.1': 258 + resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} 259 + cpu: [arm64] 260 + os: [android] 261 + 262 + '@rollup/rollup-darwin-arm64@4.60.1': 263 + resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} 264 + cpu: [arm64] 265 + os: [darwin] 266 + 267 + '@rollup/rollup-darwin-x64@4.60.1': 268 + resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} 269 + cpu: [x64] 270 + os: [darwin] 271 + 272 + '@rollup/rollup-freebsd-arm64@4.60.1': 273 + resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} 274 + cpu: [arm64] 275 + os: [freebsd] 276 + 277 + '@rollup/rollup-freebsd-x64@4.60.1': 278 + resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} 279 + cpu: [x64] 280 + os: [freebsd] 281 + 282 + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': 283 + resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} 284 + cpu: [arm] 285 + os: [linux] 286 + 287 + '@rollup/rollup-linux-arm-musleabihf@4.60.1': 288 + resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} 289 + cpu: [arm] 290 + os: [linux] 291 + 292 + '@rollup/rollup-linux-arm64-gnu@4.60.1': 293 + resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} 294 + cpu: [arm64] 295 + os: [linux] 296 + 297 + '@rollup/rollup-linux-arm64-musl@4.60.1': 298 + resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} 299 + cpu: [arm64] 300 + os: [linux] 301 + 302 + '@rollup/rollup-linux-loong64-gnu@4.60.1': 303 + resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} 304 + cpu: [loong64] 305 + os: [linux] 306 + 307 + '@rollup/rollup-linux-loong64-musl@4.60.1': 308 + resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} 309 + cpu: [loong64] 310 + os: [linux] 311 + 312 + '@rollup/rollup-linux-ppc64-gnu@4.60.1': 313 + resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} 314 + cpu: [ppc64] 315 + os: [linux] 316 + 317 + '@rollup/rollup-linux-ppc64-musl@4.60.1': 318 + resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} 319 + cpu: [ppc64] 320 + os: [linux] 321 + 322 + '@rollup/rollup-linux-riscv64-gnu@4.60.1': 323 + resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} 324 + cpu: [riscv64] 325 + os: [linux] 326 + 327 + '@rollup/rollup-linux-riscv64-musl@4.60.1': 328 + resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} 329 + cpu: [riscv64] 330 + os: [linux] 331 + 332 + '@rollup/rollup-linux-s390x-gnu@4.60.1': 333 + resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} 334 + cpu: [s390x] 335 + os: [linux] 336 + 337 + '@rollup/rollup-linux-x64-gnu@4.60.1': 338 + resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} 339 + cpu: [x64] 340 + os: [linux] 341 + 342 + '@rollup/rollup-linux-x64-musl@4.60.1': 343 + resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} 344 + cpu: [x64] 345 + os: [linux] 346 + 347 + '@rollup/rollup-openbsd-x64@4.60.1': 348 + resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} 349 + cpu: [x64] 350 + os: [openbsd] 351 + 352 + '@rollup/rollup-openharmony-arm64@4.60.1': 353 + resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} 354 + cpu: [arm64] 355 + os: [openharmony] 356 + 357 + '@rollup/rollup-win32-arm64-msvc@4.60.1': 358 + resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} 359 + cpu: [arm64] 360 + os: [win32] 361 + 362 + '@rollup/rollup-win32-ia32-msvc@4.60.1': 363 + resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} 364 + cpu: [ia32] 365 + os: [win32] 366 + 367 + '@rollup/rollup-win32-x64-gnu@4.60.1': 368 + resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} 369 + cpu: [x64] 370 + os: [win32] 371 + 372 + '@rollup/rollup-win32-x64-msvc@4.60.1': 373 + resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} 374 + cpu: [x64] 375 + os: [win32] 376 + 377 + '@types/better-sqlite3@7.6.13': 378 + resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} 379 + 380 + '@types/chai@5.2.3': 381 + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} 382 + 383 + '@types/deep-eql@4.0.2': 384 + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 385 + 386 + '@types/estree@1.0.8': 387 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 388 + 389 + '@types/node@25.5.0': 390 + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} 391 + 392 + '@vitest/expect@3.2.4': 393 + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} 394 + 395 + '@vitest/mocker@3.2.4': 396 + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} 397 + peerDependencies: 398 + msw: ^2.4.9 399 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 400 + peerDependenciesMeta: 401 + msw: 402 + optional: true 403 + vite: 404 + optional: true 405 + 406 + '@vitest/pretty-format@3.2.4': 407 + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} 408 + 409 + '@vitest/runner@3.2.4': 410 + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} 411 + 412 + '@vitest/snapshot@3.2.4': 413 + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} 414 + 415 + '@vitest/spy@3.2.4': 416 + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} 417 + 418 + '@vitest/utils@3.2.4': 419 + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} 420 + 421 + assertion-error@2.0.1: 422 + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 423 + engines: {node: '>=12'} 424 + 425 + await-lock@2.2.2: 426 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 427 + 428 + base64-js@1.5.1: 429 + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 430 + 431 + better-sqlite3@12.8.0: 432 + resolution: {integrity: sha512-RxD2Vd96sQDjQr20kdP+F+dK/1OUNiVOl200vKBZY8u0vTwysfolF6Hq+3ZK2+h8My9YvZhHsF+RSGZW2VYrPQ==} 433 + engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} 434 + 435 + bindings@1.5.0: 436 + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 437 + 438 + bl@4.1.0: 439 + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 440 + 441 + buffer@5.7.1: 442 + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 443 + 444 + cac@6.7.14: 445 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 446 + engines: {node: '>=8'} 447 + 448 + chai@5.3.3: 449 + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} 450 + engines: {node: '>=18'} 451 + 452 + check-error@2.1.3: 453 + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} 454 + engines: {node: '>= 16'} 455 + 456 + chownr@1.1.4: 457 + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 458 + 459 + debug@4.4.3: 460 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 461 + engines: {node: '>=6.0'} 462 + peerDependencies: 463 + supports-color: '*' 464 + peerDependenciesMeta: 465 + supports-color: 466 + optional: true 467 + 468 + decompress-response@6.0.0: 469 + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 470 + engines: {node: '>=10'} 471 + 472 + deep-eql@5.0.2: 473 + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 474 + engines: {node: '>=6'} 475 + 476 + deep-extend@0.6.0: 477 + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 478 + engines: {node: '>=4.0.0'} 479 + 480 + detect-libc@2.1.2: 481 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 482 + engines: {node: '>=8'} 483 + 484 + end-of-stream@1.4.5: 485 + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} 486 + 487 + es-module-lexer@1.7.0: 488 + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 489 + 490 + esbuild@0.27.4: 491 + resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} 492 + engines: {node: '>=18'} 493 + hasBin: true 494 + 495 + estree-walker@3.0.3: 496 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 497 + 498 + expand-template@2.0.3: 499 + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 500 + engines: {node: '>=6'} 501 + 502 + expect-type@1.3.0: 503 + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} 504 + engines: {node: '>=12.0.0'} 505 + 506 + fdir@6.5.0: 507 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 508 + engines: {node: '>=12.0.0'} 509 + peerDependencies: 510 + picomatch: ^3 || ^4 511 + peerDependenciesMeta: 512 + picomatch: 513 + optional: true 514 + 515 + file-uri-to-path@1.0.0: 516 + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 517 + 518 + fs-constants@1.0.0: 519 + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 520 + 521 + fsevents@2.3.3: 522 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 523 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 524 + os: [darwin] 525 + 526 + get-tsconfig@4.13.7: 527 + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} 528 + 529 + github-from-package@0.0.0: 530 + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 531 + 532 + hono@4.12.9: 533 + resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} 534 + engines: {node: '>=16.9.0'} 535 + 536 + ieee754@1.2.1: 537 + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 538 + 539 + inherits@2.0.4: 540 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 541 + 542 + ini@1.3.8: 543 + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 544 + 545 + iso-datestring-validator@2.2.2: 546 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 547 + 548 + js-tokens@9.0.1: 549 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 550 + 551 + loupe@3.2.1: 552 + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} 553 + 554 + magic-string@0.30.21: 555 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 556 + 557 + mimic-response@3.1.0: 558 + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 559 + engines: {node: '>=10'} 560 + 561 + minimist@1.2.8: 562 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 563 + 564 + mkdirp-classic@0.5.3: 565 + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 566 + 567 + ms@2.1.3: 568 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 569 + 570 + multiformats@9.9.0: 571 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 572 + 573 + nanoid@3.3.11: 574 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 575 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 576 + hasBin: true 577 + 578 + napi-build-utils@2.0.0: 579 + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} 580 + 581 + node-abi@3.89.0: 582 + resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==} 583 + engines: {node: '>=10'} 584 + 585 + once@1.4.0: 586 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 587 + 588 + pathe@2.0.3: 589 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 590 + 591 + pathval@2.0.1: 592 + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} 593 + engines: {node: '>= 14.16'} 594 + 595 + picocolors@1.1.1: 596 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 597 + 598 + picomatch@4.0.4: 599 + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} 600 + engines: {node: '>=12'} 601 + 602 + postcss@8.5.8: 603 + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} 604 + engines: {node: ^10 || ^12 || >=14} 605 + 606 + prebuild-install@7.1.3: 607 + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} 608 + engines: {node: '>=10'} 609 + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. 610 + hasBin: true 611 + 612 + pump@3.0.4: 613 + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} 614 + 615 + rc@1.2.8: 616 + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 617 + hasBin: true 618 + 619 + readable-stream@3.6.2: 620 + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 621 + engines: {node: '>= 6'} 622 + 623 + relational-text@0.1.1: 624 + resolution: {integrity: sha512-ZG/c70n5ovVgaVNl0uD4H8A1TAoqwp2424WFqY5k/E7VFYMxje39bXckC3m87HMhpaO7BYm7PCngnJIkbGYeHA==} 625 + peerDependencies: 626 + '@automerge/automerge': ^3.2.4 627 + peerDependenciesMeta: 628 + '@automerge/automerge': 629 + optional: true 630 + 631 + resolve-pkg-maps@1.0.0: 632 + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 633 + 634 + rollup@4.60.1: 635 + resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} 636 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 637 + hasBin: true 638 + 639 + safe-buffer@5.2.1: 640 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 641 + 642 + semver@7.7.4: 643 + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} 644 + engines: {node: '>=10'} 645 + hasBin: true 646 + 647 + siginfo@2.0.0: 648 + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 649 + 650 + simple-concat@1.0.1: 651 + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 652 + 653 + simple-get@4.0.1: 654 + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 655 + 656 + source-map-js@1.2.1: 657 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 658 + engines: {node: '>=0.10.0'} 659 + 660 + stackback@0.0.2: 661 + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 662 + 663 + std-env@3.10.0: 664 + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} 665 + 666 + string_decoder@1.3.0: 667 + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 668 + 669 + strip-json-comments@2.0.1: 670 + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 671 + engines: {node: '>=0.10.0'} 672 + 673 + strip-literal@3.1.0: 674 + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 675 + 676 + tar-fs@2.1.4: 677 + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} 678 + 679 + tar-stream@2.2.0: 680 + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 681 + engines: {node: '>=6'} 682 + 683 + tinybench@2.9.0: 684 + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 685 + 686 + tinyexec@0.3.2: 687 + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 688 + 689 + tinyglobby@0.2.15: 690 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 691 + engines: {node: '>=12.0.0'} 692 + 693 + tinypool@1.1.1: 694 + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} 695 + engines: {node: ^18.0.0 || >=20.0.0} 696 + 697 + tinyrainbow@2.0.0: 698 + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 699 + engines: {node: '>=14.0.0'} 700 + 701 + tinyspy@4.0.4: 702 + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} 703 + engines: {node: '>=14.0.0'} 704 + 705 + tlds@1.261.0: 706 + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} 707 + hasBin: true 708 + 709 + tslib@2.8.1: 710 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 711 + 712 + tsx@4.21.0: 713 + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} 714 + engines: {node: '>=18.0.0'} 715 + hasBin: true 716 + 717 + tunnel-agent@0.6.0: 718 + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 719 + 720 + typescript@5.9.3: 721 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 722 + engines: {node: '>=14.17'} 723 + hasBin: true 724 + 725 + uint8arrays@3.0.0: 726 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 727 + 728 + undici-types@7.18.2: 729 + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} 730 + 731 + unicode-segmenter@0.14.5: 732 + resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==} 733 + 734 + util-deprecate@1.0.2: 735 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 736 + 737 + vite-node@3.2.4: 738 + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 739 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 740 + hasBin: true 741 + 742 + vite@7.3.1: 743 + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} 744 + engines: {node: ^20.19.0 || >=22.12.0} 745 + hasBin: true 746 + peerDependencies: 747 + '@types/node': ^20.19.0 || >=22.12.0 748 + jiti: '>=1.21.0' 749 + less: ^4.0.0 750 + lightningcss: ^1.21.0 751 + sass: ^1.70.0 752 + sass-embedded: ^1.70.0 753 + stylus: '>=0.54.8' 754 + sugarss: ^5.0.0 755 + terser: ^5.16.0 756 + tsx: ^4.8.1 757 + yaml: ^2.4.2 758 + peerDependenciesMeta: 759 + '@types/node': 760 + optional: true 761 + jiti: 762 + optional: true 763 + less: 764 + optional: true 765 + lightningcss: 766 + optional: true 767 + sass: 768 + optional: true 769 + sass-embedded: 770 + optional: true 771 + stylus: 772 + optional: true 773 + sugarss: 774 + optional: true 775 + terser: 776 + optional: true 777 + tsx: 778 + optional: true 779 + yaml: 780 + optional: true 781 + 782 + vitest@3.2.4: 783 + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} 784 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 785 + hasBin: true 786 + peerDependencies: 787 + '@edge-runtime/vm': '*' 788 + '@types/debug': ^4.1.12 789 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 790 + '@vitest/browser': 3.2.4 791 + '@vitest/ui': 3.2.4 792 + happy-dom: '*' 793 + jsdom: '*' 794 + peerDependenciesMeta: 795 + '@edge-runtime/vm': 796 + optional: true 797 + '@types/debug': 798 + optional: true 799 + '@types/node': 800 + optional: true 801 + '@vitest/browser': 802 + optional: true 803 + '@vitest/ui': 804 + optional: true 805 + happy-dom: 806 + optional: true 807 + jsdom: 808 + optional: true 809 + 810 + why-is-node-running@2.3.0: 811 + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 812 + engines: {node: '>=8'} 813 + hasBin: true 814 + 815 + wrappy@1.0.2: 816 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 817 + 818 + zod@3.25.76: 819 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 820 + 821 + snapshots: 822 + 823 + '@atproto/api@0.15.27': 824 + dependencies: 825 + '@atproto/common-web': 0.4.19 826 + '@atproto/lexicon': 0.4.14 827 + '@atproto/syntax': 0.4.3 828 + '@atproto/xrpc': 0.7.7 829 + await-lock: 2.2.2 830 + multiformats: 9.9.0 831 + tlds: 1.261.0 832 + zod: 3.25.76 833 + 834 + '@atproto/common-web@0.4.19': 835 + dependencies: 836 + '@atproto/lex-data': 0.0.14 837 + '@atproto/lex-json': 0.0.14 838 + '@atproto/syntax': 0.5.2 839 + zod: 3.25.76 840 + 841 + '@atproto/lex-data@0.0.14': 842 + dependencies: 843 + multiformats: 9.9.0 844 + tslib: 2.8.1 845 + uint8arrays: 3.0.0 846 + unicode-segmenter: 0.14.5 847 + 848 + '@atproto/lex-json@0.0.14': 849 + dependencies: 850 + '@atproto/lex-data': 0.0.14 851 + tslib: 2.8.1 852 + 853 + '@atproto/lexicon@0.4.14': 854 + dependencies: 855 + '@atproto/common-web': 0.4.19 856 + '@atproto/syntax': 0.4.3 857 + iso-datestring-validator: 2.2.2 858 + multiformats: 9.9.0 859 + zod: 3.25.76 860 + 861 + '@atproto/lexicon@0.6.2': 862 + dependencies: 863 + '@atproto/common-web': 0.4.19 864 + '@atproto/syntax': 0.5.2 865 + iso-datestring-validator: 2.2.2 866 + multiformats: 9.9.0 867 + zod: 3.25.76 868 + 869 + '@atproto/syntax@0.4.3': 870 + dependencies: 871 + tslib: 2.8.1 872 + 873 + '@atproto/syntax@0.5.2': 874 + dependencies: 875 + tslib: 2.8.1 876 + 877 + '@atproto/xrpc@0.7.7': 878 + dependencies: 879 + '@atproto/lexicon': 0.6.2 880 + zod: 3.25.76 881 + 882 + '@esbuild/aix-ppc64@0.27.4': 883 + optional: true 884 + 885 + '@esbuild/android-arm64@0.27.4': 886 + optional: true 887 + 888 + '@esbuild/android-arm@0.27.4': 889 + optional: true 890 + 891 + '@esbuild/android-x64@0.27.4': 892 + optional: true 893 + 894 + '@esbuild/darwin-arm64@0.27.4': 895 + optional: true 896 + 897 + '@esbuild/darwin-x64@0.27.4': 898 + optional: true 899 + 900 + '@esbuild/freebsd-arm64@0.27.4': 901 + optional: true 902 + 903 + '@esbuild/freebsd-x64@0.27.4': 904 + optional: true 905 + 906 + '@esbuild/linux-arm64@0.27.4': 907 + optional: true 908 + 909 + '@esbuild/linux-arm@0.27.4': 910 + optional: true 911 + 912 + '@esbuild/linux-ia32@0.27.4': 913 + optional: true 914 + 915 + '@esbuild/linux-loong64@0.27.4': 916 + optional: true 917 + 918 + '@esbuild/linux-mips64el@0.27.4': 919 + optional: true 920 + 921 + '@esbuild/linux-ppc64@0.27.4': 922 + optional: true 923 + 924 + '@esbuild/linux-riscv64@0.27.4': 925 + optional: true 926 + 927 + '@esbuild/linux-s390x@0.27.4': 928 + optional: true 929 + 930 + '@esbuild/linux-x64@0.27.4': 931 + optional: true 932 + 933 + '@esbuild/netbsd-arm64@0.27.4': 934 + optional: true 935 + 936 + '@esbuild/netbsd-x64@0.27.4': 937 + optional: true 938 + 939 + '@esbuild/openbsd-arm64@0.27.4': 940 + optional: true 941 + 942 + '@esbuild/openbsd-x64@0.27.4': 943 + optional: true 944 + 945 + '@esbuild/openharmony-arm64@0.27.4': 946 + optional: true 947 + 948 + '@esbuild/sunos-x64@0.27.4': 949 + optional: true 950 + 951 + '@esbuild/win32-arm64@0.27.4': 952 + optional: true 953 + 954 + '@esbuild/win32-ia32@0.27.4': 955 + optional: true 956 + 957 + '@esbuild/win32-x64@0.27.4': 958 + optional: true 959 + 960 + '@hono/node-server@1.19.12(hono@4.12.9)': 961 + dependencies: 962 + hono: 4.12.9 963 + 964 + '@jridgewell/sourcemap-codec@1.5.5': {} 965 + 966 + '@rollup/rollup-android-arm-eabi@4.60.1': 967 + optional: true 968 + 969 + '@rollup/rollup-android-arm64@4.60.1': 970 + optional: true 971 + 972 + '@rollup/rollup-darwin-arm64@4.60.1': 973 + optional: true 974 + 975 + '@rollup/rollup-darwin-x64@4.60.1': 976 + optional: true 977 + 978 + '@rollup/rollup-freebsd-arm64@4.60.1': 979 + optional: true 980 + 981 + '@rollup/rollup-freebsd-x64@4.60.1': 982 + optional: true 983 + 984 + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': 985 + optional: true 986 + 987 + '@rollup/rollup-linux-arm-musleabihf@4.60.1': 988 + optional: true 989 + 990 + '@rollup/rollup-linux-arm64-gnu@4.60.1': 991 + optional: true 992 + 993 + '@rollup/rollup-linux-arm64-musl@4.60.1': 994 + optional: true 995 + 996 + '@rollup/rollup-linux-loong64-gnu@4.60.1': 997 + optional: true 998 + 999 + '@rollup/rollup-linux-loong64-musl@4.60.1': 1000 + optional: true 1001 + 1002 + '@rollup/rollup-linux-ppc64-gnu@4.60.1': 1003 + optional: true 1004 + 1005 + '@rollup/rollup-linux-ppc64-musl@4.60.1': 1006 + optional: true 1007 + 1008 + '@rollup/rollup-linux-riscv64-gnu@4.60.1': 1009 + optional: true 1010 + 1011 + '@rollup/rollup-linux-riscv64-musl@4.60.1': 1012 + optional: true 1013 + 1014 + '@rollup/rollup-linux-s390x-gnu@4.60.1': 1015 + optional: true 1016 + 1017 + '@rollup/rollup-linux-x64-gnu@4.60.1': 1018 + optional: true 1019 + 1020 + '@rollup/rollup-linux-x64-musl@4.60.1': 1021 + optional: true 1022 + 1023 + '@rollup/rollup-openbsd-x64@4.60.1': 1024 + optional: true 1025 + 1026 + '@rollup/rollup-openharmony-arm64@4.60.1': 1027 + optional: true 1028 + 1029 + '@rollup/rollup-win32-arm64-msvc@4.60.1': 1030 + optional: true 1031 + 1032 + '@rollup/rollup-win32-ia32-msvc@4.60.1': 1033 + optional: true 1034 + 1035 + '@rollup/rollup-win32-x64-gnu@4.60.1': 1036 + optional: true 1037 + 1038 + '@rollup/rollup-win32-x64-msvc@4.60.1': 1039 + optional: true 1040 + 1041 + '@types/better-sqlite3@7.6.13': 1042 + dependencies: 1043 + '@types/node': 25.5.0 1044 + 1045 + '@types/chai@5.2.3': 1046 + dependencies: 1047 + '@types/deep-eql': 4.0.2 1048 + assertion-error: 2.0.1 1049 + 1050 + '@types/deep-eql@4.0.2': {} 1051 + 1052 + '@types/estree@1.0.8': {} 1053 + 1054 + '@types/node@25.5.0': 1055 + dependencies: 1056 + undici-types: 7.18.2 1057 + 1058 + '@vitest/expect@3.2.4': 1059 + dependencies: 1060 + '@types/chai': 5.2.3 1061 + '@vitest/spy': 3.2.4 1062 + '@vitest/utils': 3.2.4 1063 + chai: 5.3.3 1064 + tinyrainbow: 2.0.0 1065 + 1066 + '@vitest/mocker@3.2.4(vite@7.3.1(@types/node@25.5.0)(tsx@4.21.0))': 1067 + dependencies: 1068 + '@vitest/spy': 3.2.4 1069 + estree-walker: 3.0.3 1070 + magic-string: 0.30.21 1071 + optionalDependencies: 1072 + vite: 7.3.1(@types/node@25.5.0)(tsx@4.21.0) 1073 + 1074 + '@vitest/pretty-format@3.2.4': 1075 + dependencies: 1076 + tinyrainbow: 2.0.0 1077 + 1078 + '@vitest/runner@3.2.4': 1079 + dependencies: 1080 + '@vitest/utils': 3.2.4 1081 + pathe: 2.0.3 1082 + strip-literal: 3.1.0 1083 + 1084 + '@vitest/snapshot@3.2.4': 1085 + dependencies: 1086 + '@vitest/pretty-format': 3.2.4 1087 + magic-string: 0.30.21 1088 + pathe: 2.0.3 1089 + 1090 + '@vitest/spy@3.2.4': 1091 + dependencies: 1092 + tinyspy: 4.0.4 1093 + 1094 + '@vitest/utils@3.2.4': 1095 + dependencies: 1096 + '@vitest/pretty-format': 3.2.4 1097 + loupe: 3.2.1 1098 + tinyrainbow: 2.0.0 1099 + 1100 + assertion-error@2.0.1: {} 1101 + 1102 + await-lock@2.2.2: {} 1103 + 1104 + base64-js@1.5.1: {} 1105 + 1106 + better-sqlite3@12.8.0: 1107 + dependencies: 1108 + bindings: 1.5.0 1109 + prebuild-install: 7.1.3 1110 + 1111 + bindings@1.5.0: 1112 + dependencies: 1113 + file-uri-to-path: 1.0.0 1114 + 1115 + bl@4.1.0: 1116 + dependencies: 1117 + buffer: 5.7.1 1118 + inherits: 2.0.4 1119 + readable-stream: 3.6.2 1120 + 1121 + buffer@5.7.1: 1122 + dependencies: 1123 + base64-js: 1.5.1 1124 + ieee754: 1.2.1 1125 + 1126 + cac@6.7.14: {} 1127 + 1128 + chai@5.3.3: 1129 + dependencies: 1130 + assertion-error: 2.0.1 1131 + check-error: 2.1.3 1132 + deep-eql: 5.0.2 1133 + loupe: 3.2.1 1134 + pathval: 2.0.1 1135 + 1136 + check-error@2.1.3: {} 1137 + 1138 + chownr@1.1.4: {} 1139 + 1140 + debug@4.4.3: 1141 + dependencies: 1142 + ms: 2.1.3 1143 + 1144 + decompress-response@6.0.0: 1145 + dependencies: 1146 + mimic-response: 3.1.0 1147 + 1148 + deep-eql@5.0.2: {} 1149 + 1150 + deep-extend@0.6.0: {} 1151 + 1152 + detect-libc@2.1.2: {} 1153 + 1154 + end-of-stream@1.4.5: 1155 + dependencies: 1156 + once: 1.4.0 1157 + 1158 + es-module-lexer@1.7.0: {} 1159 + 1160 + esbuild@0.27.4: 1161 + optionalDependencies: 1162 + '@esbuild/aix-ppc64': 0.27.4 1163 + '@esbuild/android-arm': 0.27.4 1164 + '@esbuild/android-arm64': 0.27.4 1165 + '@esbuild/android-x64': 0.27.4 1166 + '@esbuild/darwin-arm64': 0.27.4 1167 + '@esbuild/darwin-x64': 0.27.4 1168 + '@esbuild/freebsd-arm64': 0.27.4 1169 + '@esbuild/freebsd-x64': 0.27.4 1170 + '@esbuild/linux-arm': 0.27.4 1171 + '@esbuild/linux-arm64': 0.27.4 1172 + '@esbuild/linux-ia32': 0.27.4 1173 + '@esbuild/linux-loong64': 0.27.4 1174 + '@esbuild/linux-mips64el': 0.27.4 1175 + '@esbuild/linux-ppc64': 0.27.4 1176 + '@esbuild/linux-riscv64': 0.27.4 1177 + '@esbuild/linux-s390x': 0.27.4 1178 + '@esbuild/linux-x64': 0.27.4 1179 + '@esbuild/netbsd-arm64': 0.27.4 1180 + '@esbuild/netbsd-x64': 0.27.4 1181 + '@esbuild/openbsd-arm64': 0.27.4 1182 + '@esbuild/openbsd-x64': 0.27.4 1183 + '@esbuild/openharmony-arm64': 0.27.4 1184 + '@esbuild/sunos-x64': 0.27.4 1185 + '@esbuild/win32-arm64': 0.27.4 1186 + '@esbuild/win32-ia32': 0.27.4 1187 + '@esbuild/win32-x64': 0.27.4 1188 + 1189 + estree-walker@3.0.3: 1190 + dependencies: 1191 + '@types/estree': 1.0.8 1192 + 1193 + expand-template@2.0.3: {} 1194 + 1195 + expect-type@1.3.0: {} 1196 + 1197 + fdir@6.5.0(picomatch@4.0.4): 1198 + optionalDependencies: 1199 + picomatch: 4.0.4 1200 + 1201 + file-uri-to-path@1.0.0: {} 1202 + 1203 + fs-constants@1.0.0: {} 1204 + 1205 + fsevents@2.3.3: 1206 + optional: true 1207 + 1208 + get-tsconfig@4.13.7: 1209 + dependencies: 1210 + resolve-pkg-maps: 1.0.0 1211 + 1212 + github-from-package@0.0.0: {} 1213 + 1214 + hono@4.12.9: {} 1215 + 1216 + ieee754@1.2.1: {} 1217 + 1218 + inherits@2.0.4: {} 1219 + 1220 + ini@1.3.8: {} 1221 + 1222 + iso-datestring-validator@2.2.2: {} 1223 + 1224 + js-tokens@9.0.1: {} 1225 + 1226 + loupe@3.2.1: {} 1227 + 1228 + magic-string@0.30.21: 1229 + dependencies: 1230 + '@jridgewell/sourcemap-codec': 1.5.5 1231 + 1232 + mimic-response@3.1.0: {} 1233 + 1234 + minimist@1.2.8: {} 1235 + 1236 + mkdirp-classic@0.5.3: {} 1237 + 1238 + ms@2.1.3: {} 1239 + 1240 + multiformats@9.9.0: {} 1241 + 1242 + nanoid@3.3.11: {} 1243 + 1244 + napi-build-utils@2.0.0: {} 1245 + 1246 + node-abi@3.89.0: 1247 + dependencies: 1248 + semver: 7.7.4 1249 + 1250 + once@1.4.0: 1251 + dependencies: 1252 + wrappy: 1.0.2 1253 + 1254 + pathe@2.0.3: {} 1255 + 1256 + pathval@2.0.1: {} 1257 + 1258 + picocolors@1.1.1: {} 1259 + 1260 + picomatch@4.0.4: {} 1261 + 1262 + postcss@8.5.8: 1263 + dependencies: 1264 + nanoid: 3.3.11 1265 + picocolors: 1.1.1 1266 + source-map-js: 1.2.1 1267 + 1268 + prebuild-install@7.1.3: 1269 + dependencies: 1270 + detect-libc: 2.1.2 1271 + expand-template: 2.0.3 1272 + github-from-package: 0.0.0 1273 + minimist: 1.2.8 1274 + mkdirp-classic: 0.5.3 1275 + napi-build-utils: 2.0.0 1276 + node-abi: 3.89.0 1277 + pump: 3.0.4 1278 + rc: 1.2.8 1279 + simple-get: 4.0.1 1280 + tar-fs: 2.1.4 1281 + tunnel-agent: 0.6.0 1282 + 1283 + pump@3.0.4: 1284 + dependencies: 1285 + end-of-stream: 1.4.5 1286 + once: 1.4.0 1287 + 1288 + rc@1.2.8: 1289 + dependencies: 1290 + deep-extend: 0.6.0 1291 + ini: 1.3.8 1292 + minimist: 1.2.8 1293 + strip-json-comments: 2.0.1 1294 + 1295 + readable-stream@3.6.2: 1296 + dependencies: 1297 + inherits: 2.0.4 1298 + string_decoder: 1.3.0 1299 + util-deprecate: 1.0.2 1300 + 1301 + relational-text@0.1.1: {} 1302 + 1303 + resolve-pkg-maps@1.0.0: {} 1304 + 1305 + rollup@4.60.1: 1306 + dependencies: 1307 + '@types/estree': 1.0.8 1308 + optionalDependencies: 1309 + '@rollup/rollup-android-arm-eabi': 4.60.1 1310 + '@rollup/rollup-android-arm64': 4.60.1 1311 + '@rollup/rollup-darwin-arm64': 4.60.1 1312 + '@rollup/rollup-darwin-x64': 4.60.1 1313 + '@rollup/rollup-freebsd-arm64': 4.60.1 1314 + '@rollup/rollup-freebsd-x64': 4.60.1 1315 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 1316 + '@rollup/rollup-linux-arm-musleabihf': 4.60.1 1317 + '@rollup/rollup-linux-arm64-gnu': 4.60.1 1318 + '@rollup/rollup-linux-arm64-musl': 4.60.1 1319 + '@rollup/rollup-linux-loong64-gnu': 4.60.1 1320 + '@rollup/rollup-linux-loong64-musl': 4.60.1 1321 + '@rollup/rollup-linux-ppc64-gnu': 4.60.1 1322 + '@rollup/rollup-linux-ppc64-musl': 4.60.1 1323 + '@rollup/rollup-linux-riscv64-gnu': 4.60.1 1324 + '@rollup/rollup-linux-riscv64-musl': 4.60.1 1325 + '@rollup/rollup-linux-s390x-gnu': 4.60.1 1326 + '@rollup/rollup-linux-x64-gnu': 4.60.1 1327 + '@rollup/rollup-linux-x64-musl': 4.60.1 1328 + '@rollup/rollup-openbsd-x64': 4.60.1 1329 + '@rollup/rollup-openharmony-arm64': 4.60.1 1330 + '@rollup/rollup-win32-arm64-msvc': 4.60.1 1331 + '@rollup/rollup-win32-ia32-msvc': 4.60.1 1332 + '@rollup/rollup-win32-x64-gnu': 4.60.1 1333 + '@rollup/rollup-win32-x64-msvc': 4.60.1 1334 + fsevents: 2.3.3 1335 + 1336 + safe-buffer@5.2.1: {} 1337 + 1338 + semver@7.7.4: {} 1339 + 1340 + siginfo@2.0.0: {} 1341 + 1342 + simple-concat@1.0.1: {} 1343 + 1344 + simple-get@4.0.1: 1345 + dependencies: 1346 + decompress-response: 6.0.0 1347 + once: 1.4.0 1348 + simple-concat: 1.0.1 1349 + 1350 + source-map-js@1.2.1: {} 1351 + 1352 + stackback@0.0.2: {} 1353 + 1354 + std-env@3.10.0: {} 1355 + 1356 + string_decoder@1.3.0: 1357 + dependencies: 1358 + safe-buffer: 5.2.1 1359 + 1360 + strip-json-comments@2.0.1: {} 1361 + 1362 + strip-literal@3.1.0: 1363 + dependencies: 1364 + js-tokens: 9.0.1 1365 + 1366 + tar-fs@2.1.4: 1367 + dependencies: 1368 + chownr: 1.1.4 1369 + mkdirp-classic: 0.5.3 1370 + pump: 3.0.4 1371 + tar-stream: 2.2.0 1372 + 1373 + tar-stream@2.2.0: 1374 + dependencies: 1375 + bl: 4.1.0 1376 + end-of-stream: 1.4.5 1377 + fs-constants: 1.0.0 1378 + inherits: 2.0.4 1379 + readable-stream: 3.6.2 1380 + 1381 + tinybench@2.9.0: {} 1382 + 1383 + tinyexec@0.3.2: {} 1384 + 1385 + tinyglobby@0.2.15: 1386 + dependencies: 1387 + fdir: 6.5.0(picomatch@4.0.4) 1388 + picomatch: 4.0.4 1389 + 1390 + tinypool@1.1.1: {} 1391 + 1392 + tinyrainbow@2.0.0: {} 1393 + 1394 + tinyspy@4.0.4: {} 1395 + 1396 + tlds@1.261.0: {} 1397 + 1398 + tslib@2.8.1: {} 1399 + 1400 + tsx@4.21.0: 1401 + dependencies: 1402 + esbuild: 0.27.4 1403 + get-tsconfig: 4.13.7 1404 + optionalDependencies: 1405 + fsevents: 2.3.3 1406 + 1407 + tunnel-agent@0.6.0: 1408 + dependencies: 1409 + safe-buffer: 5.2.1 1410 + 1411 + typescript@5.9.3: {} 1412 + 1413 + uint8arrays@3.0.0: 1414 + dependencies: 1415 + multiformats: 9.9.0 1416 + 1417 + undici-types@7.18.2: {} 1418 + 1419 + unicode-segmenter@0.14.5: {} 1420 + 1421 + util-deprecate@1.0.2: {} 1422 + 1423 + vite-node@3.2.4(@types/node@25.5.0)(tsx@4.21.0): 1424 + dependencies: 1425 + cac: 6.7.14 1426 + debug: 4.4.3 1427 + es-module-lexer: 1.7.0 1428 + pathe: 2.0.3 1429 + vite: 7.3.1(@types/node@25.5.0)(tsx@4.21.0) 1430 + transitivePeerDependencies: 1431 + - '@types/node' 1432 + - jiti 1433 + - less 1434 + - lightningcss 1435 + - sass 1436 + - sass-embedded 1437 + - stylus 1438 + - sugarss 1439 + - supports-color 1440 + - terser 1441 + - tsx 1442 + - yaml 1443 + 1444 + vite@7.3.1(@types/node@25.5.0)(tsx@4.21.0): 1445 + dependencies: 1446 + esbuild: 0.27.4 1447 + fdir: 6.5.0(picomatch@4.0.4) 1448 + picomatch: 4.0.4 1449 + postcss: 8.5.8 1450 + rollup: 4.60.1 1451 + tinyglobby: 0.2.15 1452 + optionalDependencies: 1453 + '@types/node': 25.5.0 1454 + fsevents: 2.3.3 1455 + tsx: 4.21.0 1456 + 1457 + vitest@3.2.4(@types/node@25.5.0)(tsx@4.21.0): 1458 + dependencies: 1459 + '@types/chai': 5.2.3 1460 + '@vitest/expect': 3.2.4 1461 + '@vitest/mocker': 3.2.4(vite@7.3.1(@types/node@25.5.0)(tsx@4.21.0)) 1462 + '@vitest/pretty-format': 3.2.4 1463 + '@vitest/runner': 3.2.4 1464 + '@vitest/snapshot': 3.2.4 1465 + '@vitest/spy': 3.2.4 1466 + '@vitest/utils': 3.2.4 1467 + chai: 5.3.3 1468 + debug: 4.4.3 1469 + expect-type: 1.3.0 1470 + magic-string: 0.30.21 1471 + pathe: 2.0.3 1472 + picomatch: 4.0.4 1473 + std-env: 3.10.0 1474 + tinybench: 2.9.0 1475 + tinyexec: 0.3.2 1476 + tinyglobby: 0.2.15 1477 + tinypool: 1.1.1 1478 + tinyrainbow: 2.0.0 1479 + vite: 7.3.1(@types/node@25.5.0)(tsx@4.21.0) 1480 + vite-node: 3.2.4(@types/node@25.5.0)(tsx@4.21.0) 1481 + why-is-node-running: 2.3.0 1482 + optionalDependencies: 1483 + '@types/node': 25.5.0 1484 + transitivePeerDependencies: 1485 + - jiti 1486 + - less 1487 + - lightningcss 1488 + - msw 1489 + - sass 1490 + - sass-embedded 1491 + - stylus 1492 + - sugarss 1493 + - supports-color 1494 + - terser 1495 + - tsx 1496 + - yaml 1497 + 1498 + why-is-node-running@2.3.0: 1499 + dependencies: 1500 + siginfo: 2.0.0 1501 + stackback: 0.0.2 1502 + 1503 + wrappy@1.0.2: {} 1504 + 1505 + zod@3.25.76: {}