an attempt at a lightweight photo/album viewer

jail drizzle-kit

+77 -367
+2 -2
.gitignore
··· 9 9 .env.* 10 10 !.env.template 11 11 12 - preprocessing/albums-api-client 13 - 14 12 *.swp 15 13 16 14 frontend/test-diff 17 15 18 16 server/*.db 19 17 server/build 18 + 19 + preprocessing/photos-api-client
+4 -5
server/deno.json
··· 8 8 "@scalar/hono-api-reference": "npm:@scalar/hono-api-reference@^0.9.28", 9 9 "@std/dotenv": "jsr:@std/dotenv@^0.225.5", 10 10 "@types/deno": "npm:@types/deno@^2.5.0", 11 - "debug": "npm:debug@^4.4.3", 12 - "drizzle-kit": "npm:drizzle-kit@^0.31.8", 13 11 "drizzle-orm": "npm:drizzle-orm@^0.45.1", 14 12 "drizzle-zod": "npm:drizzle-zod@^0.8.3", 15 13 "eslint": "npm:eslint@^9.39.2", ··· 25 23 }, 26 24 "tasks": { 27 25 "generate": "deno run runtimes/generate.ts", 28 - "start": "deno run $(deno task allow-native-sql) --allow-read=.env --allow-net=0.0.0.0:8000 --allow-sys=hostname --allow-env=LIBSQL_JS_DEV,CI,TERM,NODE_V8_COVERAGE main.ts", 26 + "dev": "deno run $(deno task allow-native-sql) --allow-read=.env --allow-net=0.0.0.0:8000 --allow-sys=hostname --allow-env=LIBSQL_JS_DEV,CI,TERM,NODE_V8_COVERAGE runtimes/main.ts", 27 + "serve": "deno run $(deno task allow-native-sql) --allow-read=.env --allow-net=0.0.0.0:8000 --allow-env=LIBSQL_JS_DEV runtimes/main.ts", 29 28 "lint": "eslint .", 30 - "db-gen": "deno run drizzle-kit generate", 31 - "db-write": "deno run drizzle-kit push", 29 + "db-gen": "cd jail/drizzle-kit; make gen", 30 + "db-write": "cd jail/drizzle-kit; make push", 32 31 "allow-native-sql": "echo --allow-ffi=./node_modules/.deno/@libsql+darwin-arm64@0.5.22/node_modules/@libsql/darwin-arm64/index.node" 33 32 }, 34 33 "compilerOptions": {
-355
server/deno.lock
··· 8 8 "npm:@libsql/client@~0.15.15": "0.15.15", 9 9 "npm:@scalar/hono-api-reference@~0.9.28": "0.9.28_hono@4.11.0", 10 10 "npm:@types/deno@^2.5.0": "2.5.0", 11 - "npm:debug@^4.4.3": "4.4.3", 12 - "npm:drizzle-kit@~0.31.8": "0.31.8_esbuild@0.25.12", 13 11 "npm:drizzle-orm@~0.45.1": "0.45.1_@libsql+client@0.15.15_postgres@3.4.7", 14 12 "npm:drizzle-zod@~0.8.3": "0.8.3_drizzle-orm@0.45.1__@libsql+client@0.15.15__postgres@3.4.7_zod@4.1.13_@libsql+client@0.15.15_postgres@3.4.7", 15 13 "npm:eslint@^9.39.2": "9.39.2", ··· 121 119 "sisteransi" 122 120 ] 123 121 }, 124 - "@drizzle-team/brocli@0.10.2": { 125 - "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==" 126 - }, 127 122 "@es-joy/jsdoccomment@0.76.0": { 128 123 "integrity": "sha512-g+RihtzFgGTx2WYCuTHbdOXJeAlGnROws0TeALx9ow/ZmOROOZkVg5wp/B44n0WJgI4SQFP1eWM2iRPlU2Y14w==", 129 124 "dependencies": [ ··· 147 142 "@es-joy/resolve.exports@1.2.0": { 148 143 "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==" 149 144 }, 150 - "@esbuild-kit/core-utils@3.3.2": { 151 - "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", 152 - "dependencies": [ 153 - "esbuild@0.18.20", 154 - "source-map-support" 155 - ], 156 - "deprecated": true 157 - }, 158 - "@esbuild-kit/esm-loader@2.6.5": { 159 - "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", 160 - "dependencies": [ 161 - "@esbuild-kit/core-utils", 162 - "get-tsconfig" 163 - ], 164 - "deprecated": true 165 - }, 166 - "@esbuild/aix-ppc64@0.25.12": { 167 - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 168 - "os": ["aix"], 169 - "cpu": ["ppc64"] 170 - }, 171 - "@esbuild/android-arm64@0.18.20": { 172 - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 173 - "os": ["android"], 174 - "cpu": ["arm64"] 175 - }, 176 - "@esbuild/android-arm64@0.25.12": { 177 - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 178 - "os": ["android"], 179 - "cpu": ["arm64"] 180 - }, 181 - "@esbuild/android-arm@0.18.20": { 182 - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 183 - "os": ["android"], 184 - "cpu": ["arm"] 185 - }, 186 - "@esbuild/android-arm@0.25.12": { 187 - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 188 - "os": ["android"], 189 - "cpu": ["arm"] 190 - }, 191 - "@esbuild/android-x64@0.18.20": { 192 - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 193 - "os": ["android"], 194 - "cpu": ["x64"] 195 - }, 196 - "@esbuild/android-x64@0.25.12": { 197 - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 198 - "os": ["android"], 199 - "cpu": ["x64"] 200 - }, 201 - "@esbuild/darwin-arm64@0.18.20": { 202 - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 203 - "os": ["darwin"], 204 - "cpu": ["arm64"] 205 - }, 206 - "@esbuild/darwin-arm64@0.25.12": { 207 - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 208 - "os": ["darwin"], 209 - "cpu": ["arm64"] 210 - }, 211 - "@esbuild/darwin-x64@0.18.20": { 212 - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 213 - "os": ["darwin"], 214 - "cpu": ["x64"] 215 - }, 216 - "@esbuild/darwin-x64@0.25.12": { 217 - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 218 - "os": ["darwin"], 219 - "cpu": ["x64"] 220 - }, 221 - "@esbuild/freebsd-arm64@0.18.20": { 222 - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 223 - "os": ["freebsd"], 224 - "cpu": ["arm64"] 225 - }, 226 - "@esbuild/freebsd-arm64@0.25.12": { 227 - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 228 - "os": ["freebsd"], 229 - "cpu": ["arm64"] 230 - }, 231 - "@esbuild/freebsd-x64@0.18.20": { 232 - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 233 - "os": ["freebsd"], 234 - "cpu": ["x64"] 235 - }, 236 - "@esbuild/freebsd-x64@0.25.12": { 237 - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 238 - "os": ["freebsd"], 239 - "cpu": ["x64"] 240 - }, 241 - "@esbuild/linux-arm64@0.18.20": { 242 - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 243 - "os": ["linux"], 244 - "cpu": ["arm64"] 245 - }, 246 - "@esbuild/linux-arm64@0.25.12": { 247 - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 248 - "os": ["linux"], 249 - "cpu": ["arm64"] 250 - }, 251 - "@esbuild/linux-arm@0.18.20": { 252 - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 253 - "os": ["linux"], 254 - "cpu": ["arm"] 255 - }, 256 - "@esbuild/linux-arm@0.25.12": { 257 - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 258 - "os": ["linux"], 259 - "cpu": ["arm"] 260 - }, 261 - "@esbuild/linux-ia32@0.18.20": { 262 - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 263 - "os": ["linux"], 264 - "cpu": ["ia32"] 265 - }, 266 - "@esbuild/linux-ia32@0.25.12": { 267 - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 268 - "os": ["linux"], 269 - "cpu": ["ia32"] 270 - }, 271 - "@esbuild/linux-loong64@0.18.20": { 272 - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 273 - "os": ["linux"], 274 - "cpu": ["loong64"] 275 - }, 276 - "@esbuild/linux-loong64@0.25.12": { 277 - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 278 - "os": ["linux"], 279 - "cpu": ["loong64"] 280 - }, 281 - "@esbuild/linux-mips64el@0.18.20": { 282 - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 283 - "os": ["linux"], 284 - "cpu": ["mips64el"] 285 - }, 286 - "@esbuild/linux-mips64el@0.25.12": { 287 - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 288 - "os": ["linux"], 289 - "cpu": ["mips64el"] 290 - }, 291 - "@esbuild/linux-ppc64@0.18.20": { 292 - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 293 - "os": ["linux"], 294 - "cpu": ["ppc64"] 295 - }, 296 - "@esbuild/linux-ppc64@0.25.12": { 297 - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 298 - "os": ["linux"], 299 - "cpu": ["ppc64"] 300 - }, 301 - "@esbuild/linux-riscv64@0.18.20": { 302 - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 303 - "os": ["linux"], 304 - "cpu": ["riscv64"] 305 - }, 306 - "@esbuild/linux-riscv64@0.25.12": { 307 - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 308 - "os": ["linux"], 309 - "cpu": ["riscv64"] 310 - }, 311 - "@esbuild/linux-s390x@0.18.20": { 312 - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 313 - "os": ["linux"], 314 - "cpu": ["s390x"] 315 - }, 316 - "@esbuild/linux-s390x@0.25.12": { 317 - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 318 - "os": ["linux"], 319 - "cpu": ["s390x"] 320 - }, 321 - "@esbuild/linux-x64@0.18.20": { 322 - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 323 - "os": ["linux"], 324 - "cpu": ["x64"] 325 - }, 326 - "@esbuild/linux-x64@0.25.12": { 327 - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 328 - "os": ["linux"], 329 - "cpu": ["x64"] 330 - }, 331 - "@esbuild/netbsd-arm64@0.25.12": { 332 - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 333 - "os": ["netbsd"], 334 - "cpu": ["arm64"] 335 - }, 336 - "@esbuild/netbsd-x64@0.18.20": { 337 - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 338 - "os": ["netbsd"], 339 - "cpu": ["x64"] 340 - }, 341 - "@esbuild/netbsd-x64@0.25.12": { 342 - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 343 - "os": ["netbsd"], 344 - "cpu": ["x64"] 345 - }, 346 - "@esbuild/openbsd-arm64@0.25.12": { 347 - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 348 - "os": ["openbsd"], 349 - "cpu": ["arm64"] 350 - }, 351 - "@esbuild/openbsd-x64@0.18.20": { 352 - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 353 - "os": ["openbsd"], 354 - "cpu": ["x64"] 355 - }, 356 - "@esbuild/openbsd-x64@0.25.12": { 357 - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 358 - "os": ["openbsd"], 359 - "cpu": ["x64"] 360 - }, 361 - "@esbuild/openharmony-arm64@0.25.12": { 362 - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 363 - "os": ["openharmony"], 364 - "cpu": ["arm64"] 365 - }, 366 - "@esbuild/sunos-x64@0.18.20": { 367 - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 368 - "os": ["sunos"], 369 - "cpu": ["x64"] 370 - }, 371 - "@esbuild/sunos-x64@0.25.12": { 372 - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 373 - "os": ["sunos"], 374 - "cpu": ["x64"] 375 - }, 376 - "@esbuild/win32-arm64@0.18.20": { 377 - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 378 - "os": ["win32"], 379 - "cpu": ["arm64"] 380 - }, 381 - "@esbuild/win32-arm64@0.25.12": { 382 - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 383 - "os": ["win32"], 384 - "cpu": ["arm64"] 385 - }, 386 - "@esbuild/win32-ia32@0.18.20": { 387 - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 388 - "os": ["win32"], 389 - "cpu": ["ia32"] 390 - }, 391 - "@esbuild/win32-ia32@0.25.12": { 392 - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 393 - "os": ["win32"], 394 - "cpu": ["ia32"] 395 - }, 396 - "@esbuild/win32-x64@0.18.20": { 397 - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 398 - "os": ["win32"], 399 - "cpu": ["x64"] 400 - }, 401 - "@esbuild/win32-x64@0.25.12": { 402 - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 403 - "os": ["win32"], 404 - "cpu": ["x64"] 405 - }, 406 145 "@eslint-community/eslint-plugin-eslint-comments@4.5.0_eslint@9.39.2": { 407 146 "integrity": "sha512-MAhuTKlr4y/CE3WYX26raZjy+I/kS2PLKSzvfmDCGrBLTFHOYwqROZdr4XwPgXwX3K9rjzMr4pSmUWGnzsUyMg==", 408 147 "dependencies": [ ··· 914 653 ], 915 654 "bin": true 916 655 }, 917 - "buffer-from@1.1.2": { 918 - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 919 - }, 920 656 "builtin-modules@5.0.0": { 921 657 "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==" 922 658 }, ··· 1035 771 "diff-sequences@27.5.1": { 1036 772 "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==" 1037 773 }, 1038 - "drizzle-kit@0.31.8_esbuild@0.25.12": { 1039 - "integrity": "sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg==", 1040 - "dependencies": [ 1041 - "@drizzle-team/brocli", 1042 - "@esbuild-kit/esm-loader", 1043 - "esbuild@0.25.12", 1044 - "esbuild-register" 1045 - ], 1046 - "bin": true 1047 - }, 1048 774 "drizzle-orm@0.45.1_@libsql+client@0.15.15_postgres@3.4.7": { 1049 775 "integrity": "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA==", 1050 776 "dependencies": [ ··· 1084 810 }, 1085 811 "entities@4.5.0": { 1086 812 "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" 1087 - }, 1088 - "esbuild-register@3.6.0_esbuild@0.25.12": { 1089 - "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", 1090 - "dependencies": [ 1091 - "debug", 1092 - "esbuild@0.25.12" 1093 - ] 1094 - }, 1095 - "esbuild@0.18.20": { 1096 - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 1097 - "optionalDependencies": [ 1098 - "@esbuild/android-arm@0.18.20", 1099 - "@esbuild/android-arm64@0.18.20", 1100 - "@esbuild/android-x64@0.18.20", 1101 - "@esbuild/darwin-arm64@0.18.20", 1102 - "@esbuild/darwin-x64@0.18.20", 1103 - "@esbuild/freebsd-arm64@0.18.20", 1104 - "@esbuild/freebsd-x64@0.18.20", 1105 - "@esbuild/linux-arm@0.18.20", 1106 - "@esbuild/linux-arm64@0.18.20", 1107 - "@esbuild/linux-ia32@0.18.20", 1108 - "@esbuild/linux-loong64@0.18.20", 1109 - "@esbuild/linux-mips64el@0.18.20", 1110 - "@esbuild/linux-ppc64@0.18.20", 1111 - "@esbuild/linux-riscv64@0.18.20", 1112 - "@esbuild/linux-s390x@0.18.20", 1113 - "@esbuild/linux-x64@0.18.20", 1114 - "@esbuild/netbsd-x64@0.18.20", 1115 - "@esbuild/openbsd-x64@0.18.20", 1116 - "@esbuild/sunos-x64@0.18.20", 1117 - "@esbuild/win32-arm64@0.18.20", 1118 - "@esbuild/win32-ia32@0.18.20", 1119 - "@esbuild/win32-x64@0.18.20" 1120 - ], 1121 - "scripts": true, 1122 - "bin": true 1123 - }, 1124 - "esbuild@0.25.12": { 1125 - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 1126 - "optionalDependencies": [ 1127 - "@esbuild/aix-ppc64", 1128 - "@esbuild/android-arm@0.25.12", 1129 - "@esbuild/android-arm64@0.25.12", 1130 - "@esbuild/android-x64@0.25.12", 1131 - "@esbuild/darwin-arm64@0.25.12", 1132 - "@esbuild/darwin-x64@0.25.12", 1133 - "@esbuild/freebsd-arm64@0.25.12", 1134 - "@esbuild/freebsd-x64@0.25.12", 1135 - "@esbuild/linux-arm@0.25.12", 1136 - "@esbuild/linux-arm64@0.25.12", 1137 - "@esbuild/linux-ia32@0.25.12", 1138 - "@esbuild/linux-loong64@0.25.12", 1139 - "@esbuild/linux-mips64el@0.25.12", 1140 - "@esbuild/linux-ppc64@0.25.12", 1141 - "@esbuild/linux-riscv64@0.25.12", 1142 - "@esbuild/linux-s390x@0.25.12", 1143 - "@esbuild/linux-x64@0.25.12", 1144 - "@esbuild/netbsd-arm64", 1145 - "@esbuild/netbsd-x64@0.25.12", 1146 - "@esbuild/openbsd-arm64", 1147 - "@esbuild/openbsd-x64@0.25.12", 1148 - "@esbuild/openharmony-arm64", 1149 - "@esbuild/sunos-x64@0.25.12", 1150 - "@esbuild/win32-arm64@0.25.12", 1151 - "@esbuild/win32-ia32@0.25.12", 1152 - "@esbuild/win32-x64@0.25.12" 1153 - ], 1154 - "scripts": true, 1155 - "bin": true 1156 813 }, 1157 814 "escalade@3.2.0": { 1158 815 "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" ··· 2481 2138 "source-map-js@1.2.1": { 2482 2139 "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" 2483 2140 }, 2484 - "source-map-support@0.5.21": { 2485 - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2486 - "dependencies": [ 2487 - "buffer-from", 2488 - "source-map" 2489 - ] 2490 - }, 2491 - "source-map@0.6.1": { 2492 - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 2493 - }, 2494 2141 "spdx-exceptions@2.5.0": { 2495 2142 "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" 2496 2143 }, ··· 2716 2363 "npm:@libsql/client@~0.15.15", 2717 2364 "npm:@scalar/hono-api-reference@~0.9.28", 2718 2365 "npm:@types/deno@^2.5.0", 2719 - "npm:debug@^4.4.3", 2720 - "npm:drizzle-kit@~0.31.8", 2721 2366 "npm:drizzle-orm@~0.45.1", 2722 2367 "npm:drizzle-zod@~0.8.3", 2723 2368 "npm:eslint@^9.39.2",
+3 -3
server/drizzle.config.ts server/jail/drizzle-kit/drizzle.config.ts.jail
··· 1 + 1 2 import { defineConfig } from 'drizzle-kit' 2 - import env from './env.ts' 3 3 4 4 export default defineConfig({ 5 5 out: './build/db/migrations', 6 - schema: './src/db/schema', 6 + schema: 'build/schema', 7 7 dialect: 'sqlite', 8 8 dbCredentials: { 9 - url: env.DATABASE_URL, 9 + url: 'file:build/staging.db' 10 10 }, 11 11 })
server/gen-openapi-spec.sh

This is a binary file and will not be displayed.

+13
server/jail/drizzle-kit/Containerfile
··· 1 + # drizzle-kit is in jail because it does not support deno @std/dotenv 2 + FROM node:latest 3 + 4 + RUN adduser jail 5 + 6 + USER jail 7 + WORKDIR /home/jail 8 + 9 + RUN npm init -y 10 + RUN npm i drizzle-kit drizzle-orm @libsql/client 11 + 12 + COPY drizzle.config.ts.jail drizzle.config.ts 13 + COPY build/schema src/db/schema
+53
server/jail/drizzle-kit/Makefile
··· 1 + # --- Configuration --- 2 + # Set the name for your image and the running container 3 + IMAGE_NAME := drizzle-kit 4 + CONTAINER_NAME := i-drizzle-kit 5 + 6 + HOST_DIR := $(shell pwd)/build 7 + CONTAINER_HOME := /home/jail 8 + CONTAINER_DIR := $(CONTAINER_HOME)/build 9 + DATA_MOUNT := $(HOST_DIR):$(CONTAINER_DIR):z 10 + 11 + GEN_EXEC := $(CONTAINER_HOME)/node_modules/.bin/drizzle-kit generate 12 + PUSH_EXEC := $(CONTAINER_HOME)/node_modules/.bin/drizzle-kit push 13 + 14 + # --- Main Targets --- 15 + 16 + # Build the container image (DEFAULT target) 17 + # Run 'make' or 'make build' 18 + build: Containerfile 19 + @mkdir -p build 20 + @cp -r ../../src/db/schema build/ 21 + @podman build -q -t $(IMAGE_NAME) . > /dev/null 22 + 23 + # Run 'make run' 24 + gen: build clean 25 + @podman run --rm -v $(DATA_MOUNT) --name $(CONTAINER_NAME) $(IMAGE_NAME) $(GEN_EXEC) 26 + 27 + # Run 'make run' 28 + push: build clean 29 + @podman run --rm -v $(DATA_MOUNT) --name $(CONTAINER_NAME) $(IMAGE_NAME) $(PUSH_EXEC) 30 + 31 + # Inspect: Run the container with an interactive shell 32 + # Run 'make inspect' 33 + inspect: build clean 34 + @podman run -it --rm -v $(DATA_MOUNT) --name $(CONTAINER_NAME) $(IMAGE_NAME) /bin/sh 35 + 36 + # Force a rebuild and then run 37 + force-rebuild: clean 38 + @podman build --no-cache -t $(IMAGE_NAME) . 39 + @make run 40 + 41 + # --- Utility Targets --- 42 + 43 + # Stop and remove the container (alias for 'clean') 44 + stop: clean 45 + 46 + # Clean up any potentially leftover container instance 47 + # The '|| true' ignores errors if the container doesn't exist 48 + clean: 49 + @podman stop $(CONTAINER_NAME) >/dev/null 2>&1 || true 50 + @podman rm $(CONTAINER_NAME) >/dev/null 2>&1 || true 51 + 52 + # Add a .PHONY target to prevent 'make' from confusing targets with file names 53 + .PHONY: build run inspect force-rebuild stop clean
+2 -2
server/runtimes/dev.ts
··· 1 + import openapiConfig from '@/openapi.config.ts' 2 + import { PhotoAPI } from '@/src/app.ts' 1 3 import type { AppBindings } from '@/types.ts' 2 4 import { OpenAPIHono } from '@hono/zod-openapi' 3 5 import { Scalar } from '@scalar/hono-api-reference' ··· 5 7 import pino from 'pino' 6 8 import pretty from 'pino-pretty' 7 9 import defaultHook from 'stoker/openapi/default-hook' 8 - import openapiConfig from '@/openapi.config.ts' 9 - import { PhotoAPI } from '@/src/common/app.ts' 10 10 11 11 function devTools(app: OpenAPIHono<AppBindings>) { 12 12 app.use(pinoLogger({