authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-07-09 22:34:07-07:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2025-10-14 02:40:46-07:00
log4806d9a59255af0ae518db8cc5e8e911ac484997
treefe545a2adb3ae808ad683f32bcf2abb27bc6166d
parent7bda48ef5d8953025b6c2bd49458753b0199f30b
signature Commit is signed but in an unrecognized format.

setup source of truth server


10 files changed, 341 insertions(+), 277 deletions(-)

.dockerignore created+4
......@@ -0,0 +1,4 @@
1.clover
2.env
3node_modules
4
.gitignore+1
......@@ -1,3 +1,4 @@
11.clover
2.env
23node_modules
34
framework/backend/entry-node.ts+7-1
......@@ -1,6 +1,8 @@
11import "@paperclover/console/inject";
22import "#debug";
33
4const app = require(globalThis.CLOVER_SERVER_ENTRY ?? process.argv[2]);
5
46const protocol = "http";
57
68const server = serve({
......@@ -29,7 +31,11 @@ process.on("SIGTERM", () => {
2931 });
3032});
3133
32import app from "#backend";
34declare global {
35 /* Control via --define:globalThis.CLOVER_SERVER_ENTRY="..." */
36 var CLOVER_SERVER_ENTRY: string;
37}
38
3339import url from "node:url";
3440import { serve } from "@hono/node-server";
3541import process from "node:process";
framework/lib/fs.ts+2
......@@ -15,6 +15,7 @@ export {
1515 statSync,
1616 writeFile,
1717 writeFileSync,
18 type FileHandle,
1819};
1920
2021export function mkdir(dir: string) {
......@@ -105,5 +106,6 @@ import {
105106 rmdir,
106107 stat,
107108 writeFile,
109 type FileHandle,
108110} from "node:fs/promises";
109111export { Stats } from "node:fs";
framework/lib/sqlite.ts+1-1
......@@ -10,7 +10,7 @@ export function getDb(file: string) {
1010 if (db) return db;
1111 const fileWithExt = file.includes(".") ? file : file + ".sqlite";
1212 db = new WrappedDatabase(
13 new DatabaseSync(path.join(".clover/", fileWithExt)),
13 new DatabaseSync(path.join(process.env.CLOVER_DB ?? ".clover", fileWithExt)),
1414 );
1515 map.set(file, db);
1616 return db;
package-lock.json+269-265
......@@ -54,30 +54,30 @@
5454 }
5555 },
5656 "node_modules/@babel/compat-data": {
57 "version": "7.27.5",
58 "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
59 "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
57 "version": "7.28.0",
58 "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz",
59 "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==",
6060 "license": "MIT",
6161 "engines": {
6262 "node": ">=6.9.0"
6363 }
6464 },
6565 "node_modules/@babel/core": {
66 "version": "7.27.4",
67 "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
68 "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
66 "version": "7.28.0",
67 "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz",
68 "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==",
6969 "license": "MIT",
7070 "dependencies": {
7171 "@ampproject/remapping": "^2.2.0",
7272 "@babel/code-frame": "^7.27.1",
73 "@babel/generator": "^7.27.3",
73 "@babel/generator": "^7.28.0",
7474 "@babel/helper-compilation-targets": "^7.27.2",
7575 "@babel/helper-module-transforms": "^7.27.3",
76 "@babel/helpers": "^7.27.4",
77 "@babel/parser": "^7.27.4",
76 "@babel/helpers": "^7.27.6",
77 "@babel/parser": "^7.28.0",
7878 "@babel/template": "^7.27.2",
79 "@babel/traverse": "^7.27.4",
80 "@babel/types": "^7.27.3",
79 "@babel/traverse": "^7.28.0",
80 "@babel/types": "^7.28.0",
8181 "convert-source-map": "^2.0.0",
8282 "debug": "^4.1.0",
8383 "gensync": "^1.0.0-beta.2",
......@@ -93,15 +93,15 @@
9393 }
9494 },
9595 "node_modules/@babel/generator": {
96 "version": "7.27.5",
97 "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
98 "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
96 "version": "7.28.0",
97 "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz",
98 "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==",
9999 "license": "MIT",
100100 "dependencies": {
101 "@babel/parser": "^7.27.5",
102 "@babel/types": "^7.27.3",
103 "@jridgewell/gen-mapping": "^0.3.5",
104 "@jridgewell/trace-mapping": "^0.3.25",
101 "@babel/parser": "^7.28.0",
102 "@babel/types": "^7.28.0",
103 "@jridgewell/gen-mapping": "^0.3.12",
104 "@jridgewell/trace-mapping": "^0.3.28",
105105 "jsesc": "^3.0.2"
106106 },
107107 "engines": {
......@@ -157,6 +157,15 @@
157157 "@babel/core": "^7.0.0"
158158 }
159159 },
160 "node_modules/@babel/helper-globals": {
161 "version": "7.28.0",
162 "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
163 "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
164 "license": "MIT",
165 "engines": {
166 "node": ">=6.9.0"
167 }
168 },
160169 "node_modules/@babel/helper-member-expression-to-functions": {
161170 "version": "7.27.1",
162171 "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz",
......@@ -292,12 +301,12 @@
292301 }
293302 },
294303 "node_modules/@babel/parser": {
295 "version": "7.27.5",
296 "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
297 "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
304 "version": "7.28.0",
305 "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz",
306 "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==",
298307 "license": "MIT",
299308 "dependencies": {
300 "@babel/types": "^7.27.3"
309 "@babel/types": "^7.28.0"
301310 },
302311 "bin": {
303312 "parser": "bin/babel-parser.js"
......@@ -338,12 +347,12 @@
338347 }
339348 },
340349 "node_modules/@babel/plugin-transform-typescript": {
341 "version": "7.27.1",
342 "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz",
343 "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==",
350 "version": "7.28.0",
351 "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz",
352 "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==",
344353 "license": "MIT",
345354 "dependencies": {
346 "@babel/helper-annotate-as-pure": "^7.27.1",
355 "@babel/helper-annotate-as-pure": "^7.27.3",
347356 "@babel/helper-create-class-features-plugin": "^7.27.1",
348357 "@babel/helper-plugin-utils": "^7.27.1",
349358 "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
......@@ -380,27 +389,27 @@
380389 }
381390 },
382391 "node_modules/@babel/traverse": {
383 "version": "7.27.4",
384 "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
385 "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
392 "version": "7.28.0",
393 "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz",
394 "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==",
386395 "license": "MIT",
387396 "dependencies": {
388397 "@babel/code-frame": "^7.27.1",
389 "@babel/generator": "^7.27.3",
390 "@babel/parser": "^7.27.4",
398 "@babel/generator": "^7.28.0",
399 "@babel/helper-globals": "^7.28.0",
400 "@babel/parser": "^7.28.0",
391401 "@babel/template": "^7.27.2",
392 "@babel/types": "^7.27.3",
393 "debug": "^4.3.1",
394 "globals": "^11.1.0"
402 "@babel/types": "^7.28.0",
403 "debug": "^4.3.1"
395404 },
396405 "engines": {
397406 "node": ">=6.9.0"
398407 }
399408 },
400409 "node_modules/@babel/types": {
401 "version": "7.27.6",
402 "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
403 "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
410 "version": "7.28.0",
411 "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz",
412 "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==",
404413 "license": "MIT",
405414 "dependencies": {
406415 "@babel/helper-string-parser": "^7.27.1",
......@@ -435,9 +444,9 @@
435444 }
436445 },
437446 "node_modules/@codemirror/language": {
438 "version": "6.11.1",
439 "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.1.tgz",
440 "integrity": "sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==",
447 "version": "6.11.2",
448 "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.2.tgz",
449 "integrity": "sha512-p44TsNArL4IVXDTbapUmEkAlvWs2CFQbcfc0ymDsis1kH2wh0gcY96AS29c/vp2d0y2Tquk1EDSaawpzilUiAw==",
441450 "license": "MIT",
442451 "dependencies": {
443452 "@codemirror/state": "^6.0.0",
......@@ -480,9 +489,9 @@
480489 }
481490 },
482491 "node_modules/@codemirror/view": {
483 "version": "6.37.2",
484 "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.2.tgz",
485 "integrity": "sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==",
492 "version": "6.38.0",
493 "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.0.tgz",
494 "integrity": "sha512-yvSchUwHOdupXkd7xJ0ob36jdsSR/I+/C+VbY0ffBiL5NiSTEBDfB1ZGWbbIlDd5xgdUkody+lukAdOxYrOBeg==",
486495 "license": "MIT",
487496 "dependencies": {
488497 "@codemirror/state": "^6.5.0",
......@@ -492,9 +501,9 @@
492501 }
493502 },
494503 "node_modules/@emnapi/runtime": {
495 "version": "1.4.3",
496 "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
497 "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
504 "version": "1.4.4",
505 "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz",
506 "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==",
498507 "license": "MIT",
499508 "optional": true,
500509 "dependencies": {
......@@ -502,9 +511,9 @@
502511 }
503512 },
504513 "node_modules/@esbuild/aix-ppc64": {
505 "version": "0.25.5",
506 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
507 "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
514 "version": "0.25.6",
515 "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
516 "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==",
508517 "cpu": [
509518 "ppc64"
510519 ],
......@@ -518,9 +527,9 @@
518527 }
519528 },
520529 "node_modules/@esbuild/android-arm": {
521 "version": "0.25.5",
522 "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
523 "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
530 "version": "0.25.6",
531 "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz",
532 "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==",
524533 "cpu": [
525534 "arm"
526535 ],
......@@ -534,9 +543,9 @@
534543 }
535544 },
536545 "node_modules/@esbuild/android-arm64": {
537 "version": "0.25.5",
538 "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
539 "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
546 "version": "0.25.6",
547 "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz",
548 "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==",
540549 "cpu": [
541550 "arm64"
542551 ],
......@@ -550,9 +559,9 @@
550559 }
551560 },
552561 "node_modules/@esbuild/android-x64": {
553 "version": "0.25.5",
554 "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
555 "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
562 "version": "0.25.6",
563 "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz",
564 "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==",
556565 "cpu": [
557566 "x64"
558567 ],
......@@ -566,9 +575,9 @@
566575 }
567576 },
568577 "node_modules/@esbuild/darwin-arm64": {
569 "version": "0.25.5",
570 "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
571 "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
578 "version": "0.25.6",
579 "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz",
580 "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==",
572581 "cpu": [
573582 "arm64"
574583 ],
......@@ -582,9 +591,9 @@
582591 }
583592 },
584593 "node_modules/@esbuild/darwin-x64": {
585 "version": "0.25.5",
586 "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
587 "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
594 "version": "0.25.6",
595 "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz",
596 "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==",
588597 "cpu": [
589598 "x64"
590599 ],
......@@ -598,9 +607,9 @@
598607 }
599608 },
600609 "node_modules/@esbuild/freebsd-arm64": {
601 "version": "0.25.5",
602 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
603 "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
610 "version": "0.25.6",
611 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz",
612 "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==",
604613 "cpu": [
605614 "arm64"
606615 ],
......@@ -614,9 +623,9 @@
614623 }
615624 },
616625 "node_modules/@esbuild/freebsd-x64": {
617 "version": "0.25.5",
618 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
619 "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
626 "version": "0.25.6",
627 "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz",
628 "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==",
620629 "cpu": [
621630 "x64"
622631 ],
......@@ -630,9 +639,9 @@
630639 }
631640 },
632641 "node_modules/@esbuild/linux-arm": {
633 "version": "0.25.5",
634 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
635 "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
642 "version": "0.25.6",
643 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz",
644 "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==",
636645 "cpu": [
637646 "arm"
638647 ],
......@@ -646,9 +655,9 @@
646655 }
647656 },
648657 "node_modules/@esbuild/linux-arm64": {
649 "version": "0.25.5",
650 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
651 "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
658 "version": "0.25.6",
659 "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz",
660 "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==",
652661 "cpu": [
653662 "arm64"
654663 ],
......@@ -662,9 +671,9 @@
662671 }
663672 },
664673 "node_modules/@esbuild/linux-ia32": {
665 "version": "0.25.5",
666 "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
667 "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
674 "version": "0.25.6",
675 "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz",
676 "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==",
668677 "cpu": [
669678 "ia32"
670679 ],
......@@ -678,9 +687,9 @@
678687 }
679688 },
680689 "node_modules/@esbuild/linux-loong64": {
681 "version": "0.25.5",
682 "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
683 "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
690 "version": "0.25.6",
691 "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz",
692 "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==",
684693 "cpu": [
685694 "loong64"
686695 ],
......@@ -694,9 +703,9 @@
694703 }
695704 },
696705 "node_modules/@esbuild/linux-mips64el": {
697 "version": "0.25.5",
698 "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
699 "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
706 "version": "0.25.6",
707 "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz",
708 "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==",
700709 "cpu": [
701710 "mips64el"
702711 ],
......@@ -710,9 +719,9 @@
710719 }
711720 },
712721 "node_modules/@esbuild/linux-ppc64": {
713 "version": "0.25.5",
714 "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
715 "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
722 "version": "0.25.6",
723 "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz",
724 "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==",
716725 "cpu": [
717726 "ppc64"
718727 ],
......@@ -726,9 +735,9 @@
726735 }
727736 },
728737 "node_modules/@esbuild/linux-riscv64": {
729 "version": "0.25.5",
730 "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
731 "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
738 "version": "0.25.6",
739 "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz",
740 "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==",
732741 "cpu": [
733742 "riscv64"
734743 ],
......@@ -742,9 +751,9 @@
742751 }
743752 },
744753 "node_modules/@esbuild/linux-s390x": {
745 "version": "0.25.5",
746 "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
747 "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
754 "version": "0.25.6",
755 "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz",
756 "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==",
748757 "cpu": [
749758 "s390x"
750759 ],
......@@ -758,9 +767,9 @@
758767 }
759768 },
760769 "node_modules/@esbuild/linux-x64": {
761 "version": "0.25.5",
762 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
763 "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
770 "version": "0.25.6",
771 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz",
772 "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==",
764773 "cpu": [
765774 "x64"
766775 ],
......@@ -774,9 +783,9 @@
774783 }
775784 },
776785 "node_modules/@esbuild/netbsd-arm64": {
777 "version": "0.25.5",
778 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
779 "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
786 "version": "0.25.6",
787 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz",
788 "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==",
780789 "cpu": [
781790 "arm64"
782791 ],
......@@ -790,9 +799,9 @@
790799 }
791800 },
792801 "node_modules/@esbuild/netbsd-x64": {
793 "version": "0.25.5",
794 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
795 "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
802 "version": "0.25.6",
803 "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz",
804 "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==",
796805 "cpu": [
797806 "x64"
798807 ],
......@@ -806,9 +815,9 @@
806815 }
807816 },
808817 "node_modules/@esbuild/openbsd-arm64": {
809 "version": "0.25.5",
810 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
811 "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
818 "version": "0.25.6",
819 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz",
820 "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==",
812821 "cpu": [
813822 "arm64"
814823 ],
......@@ -822,9 +831,9 @@
822831 }
823832 },
824833 "node_modules/@esbuild/openbsd-x64": {
825 "version": "0.25.5",
826 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
827 "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
834 "version": "0.25.6",
835 "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz",
836 "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==",
828837 "cpu": [
829838 "x64"
830839 ],
......@@ -837,10 +846,26 @@
837846 "node": ">=18"
838847 }
839848 },
849 "node_modules/@esbuild/openharmony-arm64": {
850 "version": "0.25.6",
851 "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz",
852 "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==",
853 "cpu": [
854 "arm64"
855 ],
856 "license": "MIT",
857 "optional": true,
858 "os": [
859 "openharmony"
860 ],
861 "engines": {
862 "node": ">=18"
863 }
864 },
840865 "node_modules/@esbuild/sunos-x64": {
841 "version": "0.25.5",
842 "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
843 "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
866 "version": "0.25.6",
867 "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz",
868 "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==",
844869 "cpu": [
845870 "x64"
846871 ],
......@@ -854,9 +879,9 @@
854879 }
855880 },
856881 "node_modules/@esbuild/win32-arm64": {
857 "version": "0.25.5",
858 "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
859 "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
882 "version": "0.25.6",
883 "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz",
884 "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==",
860885 "cpu": [
861886 "arm64"
862887 ],
......@@ -870,9 +895,9 @@
870895 }
871896 },
872897 "node_modules/@esbuild/win32-ia32": {
873 "version": "0.25.5",
874 "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
875 "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
898 "version": "0.25.6",
899 "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz",
900 "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==",
876901 "cpu": [
877902 "ia32"
878903 ],
......@@ -886,9 +911,9 @@
886911 }
887912 },
888913 "node_modules/@esbuild/win32-x64": {
889 "version": "0.25.5",
890 "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
891 "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
914 "version": "0.25.6",
915 "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz",
916 "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==",
892917 "cpu": [
893918 "x64"
894919 ],
......@@ -902,9 +927,9 @@
902927 }
903928 },
904929 "node_modules/@hono/node-server": {
905 "version": "1.14.4",
906 "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.14.4.tgz",
907 "integrity": "sha512-DnxpshhYewr2q9ZN8ez/M5mmc3sucr8CT1sIgIy1bkeUXut9XWDkqHoFHRhWIQgkYnKpVRxunyhK7WzpJeJ6qQ==",
930 "version": "1.15.0",
931 "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.15.0.tgz",
932 "integrity": "sha512-MjmK4l5N4dQpZ9OSWN0tCj7ejuc7WvuWMzSKtc89bnknJykAeHxzRigXBTYZk85H6Awrii6RM59iUiUluApu2A==",
908933 "license": "MIT",
909934 "engines": {
910935 "node": ">=18.14.1"
......@@ -1310,17 +1335,13 @@
13101335 }
13111336 },
13121337 "node_modules/@jridgewell/gen-mapping": {
1313 "version": "0.3.8",
1314 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
1315 "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
1338 "version": "0.3.12",
1339 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
1340 "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
13161341 "license": "MIT",
13171342 "dependencies": {
1318 "@jridgewell/set-array": "^1.2.1",
1319 "@jridgewell/sourcemap-codec": "^1.4.10",
1343 "@jridgewell/sourcemap-codec": "^1.5.0",
13201344 "@jridgewell/trace-mapping": "^0.3.24"
1321 },
1322 "engines": {
1323 "node": ">=6.0.0"
13241345 }
13251346 },
13261347 "node_modules/@jridgewell/resolve-uri": {
......@@ -1332,25 +1353,16 @@
13321353 "node": ">=6.0.0"
13331354 }
13341355 },
1335 "node_modules/@jridgewell/set-array": {
1336 "version": "1.2.1",
1337 "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
1338 "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
1339 "license": "MIT",
1340 "engines": {
1341 "node": ">=6.0.0"
1342 }
1343 },
13441356 "node_modules/@jridgewell/sourcemap-codec": {
1345 "version": "1.5.0",
1346 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
1347 "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
1357 "version": "1.5.4",
1358 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
1359 "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
13481360 "license": "MIT"
13491361 },
13501362 "node_modules/@jridgewell/trace-mapping": {
1351 "version": "0.3.25",
1352 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
1353 "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
1363 "version": "0.3.29",
1364 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
1365 "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
13541366 "license": "MIT",
13551367 "dependencies": {
13561368 "@jridgewell/resolve-uri": "^3.1.0",
......@@ -1397,9 +1409,9 @@
13971409 "license": "MIT"
13981410 },
13991411 "node_modules/@marko/compiler": {
1400 "version": "5.39.21",
1401 "resolved": "https://registry.npmjs.org/@marko/compiler/-/compiler-5.39.21.tgz",
1402 "integrity": "sha512-wDLJYjINuH4ESSlVGXmUnEQV+VcHXEEbXK7BWRjp3Bg+nLyLapa+hBBrYLRt9/ctyWXgzYscInKQpGAxm/Sgdg==",
1412 "version": "5.39.28",
1413 "resolved": "https://registry.npmjs.org/@marko/compiler/-/compiler-5.39.28.tgz",
1414 "integrity": "sha512-jO/GGNWwyHlCE/fAhiLc1+Xc3apU73wfmjqBFiQmFHyAT2KZRyKJbPz7aVs8uutrPY8Xks9ZCXiXOk0RgvUlvg==",
14031415 "license": "MIT",
14041416 "dependencies": {
14051417 "@babel/code-frame": "^7.26.2",
......@@ -1467,7 +1479,7 @@
14671479 }
14681480 },
14691481 "node_modules/@paperclover/console": {
1470 "resolved": "git+https://git.paperclover.net/clo/console.git#acdad1b233b5e27dd8ff817d3b8ee7f1a88519d3",
1482 "resolved": "git+https://git.paperclover.net/clo/console.git#1a6ac2b79fdd8a21a1c57d25723975872bc07e3e",
14711483 "dependencies": {
14721484 "ansi-escapes": "^7.0.0",
14731485 "chalk": "^5.4.1",
......@@ -1568,9 +1580,9 @@
15681580 "license": "MIT"
15691581 },
15701582 "node_modules/@types/node": {
1571 "version": "24.0.10",
1572 "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz",
1573 "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==",
1583 "version": "24.0.12",
1584 "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.12.tgz",
1585 "integrity": "sha512-LtOrbvDf5ndC9Xi+4QZjVL0woFymF/xSTKZKPgrrl7H7XoeDvnD+E2IclKVDyaK9UM756W/3BXqSU+JEHopA9g==",
15741586 "devOptional": true,
15751587 "license": "MIT",
15761588 "dependencies": {
......@@ -1621,9 +1633,9 @@
16211633 }
16221634 },
16231635 "node_modules/agent-base": {
1624 "version": "7.1.3",
1625 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
1626 "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
1636 "version": "7.1.4",
1637 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
1638 "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
16271639 "license": "MIT",
16281640 "engines": {
16291641 "node": ">= 14"
......@@ -1715,16 +1727,16 @@
17151727 }
17161728 },
17171729 "node_modules/bare-events": {
1718 "version": "2.5.4",
1719 "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
1720 "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
1730 "version": "2.6.0",
1731 "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.6.0.tgz",
1732 "integrity": "sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==",
17211733 "license": "Apache-2.0",
17221734 "optional": true
17231735 },
17241736 "node_modules/bare-fs": {
1725 "version": "4.1.5",
1726 "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz",
1727 "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==",
1737 "version": "4.1.6",
1738 "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.6.tgz",
1739 "integrity": "sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==",
17281740 "license": "Apache-2.0",
17291741 "optional": true,
17301742 "dependencies": {
......@@ -1802,9 +1814,9 @@
18021814 "license": "MIT"
18031815 },
18041816 "node_modules/browserslist": {
1805 "version": "4.25.0",
1806 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
1807 "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
1817 "version": "4.25.1",
1818 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz",
1819 "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==",
18081820 "funding": [
18091821 {
18101822 "type": "opencollective",
......@@ -1821,8 +1833,8 @@
18211833 ],
18221834 "license": "MIT",
18231835 "dependencies": {
1824 "caniuse-lite": "^1.0.30001718",
1825 "electron-to-chromium": "^1.5.160",
1836 "caniuse-lite": "^1.0.30001726",
1837 "electron-to-chromium": "^1.5.173",
18261838 "node-releases": "^2.0.19",
18271839 "update-browserslist-db": "^1.1.3"
18281840 },
......@@ -1858,9 +1870,9 @@
18581870 }
18591871 },
18601872 "node_modules/caniuse-lite": {
1861 "version": "1.0.30001721",
1862 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz",
1863 "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==",
1873 "version": "1.0.30001727",
1874 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz",
1875 "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==",
18641876 "funding": [
18651877 {
18661878 "type": "opencollective",
......@@ -1988,9 +2000,9 @@
19882000 }
19892001 },
19902002 "node_modules/codemirror": {
1991 "version": "6.0.1",
1992 "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz",
1993 "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==",
2003 "version": "6.0.2",
2004 "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz",
2005 "integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==",
19942006 "license": "MIT",
19952007 "dependencies": {
19962008 "@codemirror/autocomplete": "^6.0.0",
......@@ -2143,9 +2155,9 @@
21432155 }
21442156 },
21452157 "node_modules/decode-named-character-reference": {
2146 "version": "1.1.0",
2147 "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
2148 "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
2158 "version": "1.2.0",
2159 "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
2160 "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
21492161 "license": "MIT",
21502162 "dependencies": {
21512163 "character-entities": "^2.0.0"
......@@ -2207,15 +2219,15 @@
22072219 }
22082220 },
22092221 "node_modules/devtools-protocol": {
2210 "version": "0.0.1452169",
2211 "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1452169.tgz",
2212 "integrity": "sha512-FOFDVMGrAUNp0dDKsAU1TorWJUx2JOU1k9xdgBKKJF3IBh/Uhl2yswG5r3TEAOrCiGY2QRp1e6LVDQrCsTKO4g==",
2222 "version": "0.0.1464554",
2223 "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1464554.tgz",
2224 "integrity": "sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==",
22132225 "license": "BSD-3-Clause"
22142226 },
22152227 "node_modules/electron-to-chromium": {
2216 "version": "1.5.165",
2217 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz",
2218 "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==",
2228 "version": "1.5.181",
2229 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.181.tgz",
2230 "integrity": "sha512-+ISMj8OIQ+0qEeDj14Rt8WwcTOiqHyAB+5bnK1K7xNNLjBJ4hRCQfUkw8RWtcLbfBzDwc15ZnKH0c7SNOfwiyA==",
22192231 "license": "ISC"
22202232 },
22212233 "node_modules/emoji-regex": {
......@@ -2225,9 +2237,9 @@
22252237 "license": "MIT"
22262238 },
22272239 "node_modules/end-of-stream": {
2228 "version": "1.4.4",
2229 "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2230 "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
2240 "version": "1.4.5",
2241 "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
2242 "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
22312243 "license": "MIT",
22322244 "dependencies": {
22332245 "once": "^1.4.0"
......@@ -2305,9 +2317,9 @@
23052317 }
23062318 },
23072319 "node_modules/esbuild": {
2308 "version": "0.25.5",
2309 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
2310 "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
2320 "version": "0.25.6",
2321 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz",
2322 "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==",
23112323 "hasInstallScript": true,
23122324 "license": "MIT",
23132325 "bin": {
......@@ -2317,31 +2329,32 @@
23172329 "node": ">=18"
23182330 },
23192331 "optionalDependencies": {
2320 "@esbuild/aix-ppc64": "0.25.5",
2321 "@esbuild/android-arm": "0.25.5",
2322 "@esbuild/android-arm64": "0.25.5",
2323 "@esbuild/android-x64": "0.25.5",
2324 "@esbuild/darwin-arm64": "0.25.5",
2325 "@esbuild/darwin-x64": "0.25.5",
2326 "@esbuild/freebsd-arm64": "0.25.5",
2327 "@esbuild/freebsd-x64": "0.25.5",
2328 "@esbuild/linux-arm": "0.25.5",
2329 "@esbuild/linux-arm64": "0.25.5",
2330 "@esbuild/linux-ia32": "0.25.5",
2331 "@esbuild/linux-loong64": "0.25.5",
2332 "@esbuild/linux-mips64el": "0.25.5",
2333 "@esbuild/linux-ppc64": "0.25.5",
2334 "@esbuild/linux-riscv64": "0.25.5",
2335 "@esbuild/linux-s390x": "0.25.5",
2336 "@esbuild/linux-x64": "0.25.5",
2337 "@esbuild/netbsd-arm64": "0.25.5",
2338 "@esbuild/netbsd-x64": "0.25.5",
2339 "@esbuild/openbsd-arm64": "0.25.5",
2340 "@esbuild/openbsd-x64": "0.25.5",
2341 "@esbuild/sunos-x64": "0.25.5",
2342 "@esbuild/win32-arm64": "0.25.5",
2343 "@esbuild/win32-ia32": "0.25.5",
2344 "@esbuild/win32-x64": "0.25.5"
2332 "@esbuild/aix-ppc64": "0.25.6",
2333 "@esbuild/android-arm": "0.25.6",
2334 "@esbuild/android-arm64": "0.25.6",
2335 "@esbuild/android-x64": "0.25.6",
2336 "@esbuild/darwin-arm64": "0.25.6",
2337 "@esbuild/darwin-x64": "0.25.6",
2338 "@esbuild/freebsd-arm64": "0.25.6",
2339 "@esbuild/freebsd-x64": "0.25.6",
2340 "@esbuild/linux-arm": "0.25.6",
2341 "@esbuild/linux-arm64": "0.25.6",
2342 "@esbuild/linux-ia32": "0.25.6",
2343 "@esbuild/linux-loong64": "0.25.6",
2344 "@esbuild/linux-mips64el": "0.25.6",
2345 "@esbuild/linux-ppc64": "0.25.6",
2346 "@esbuild/linux-riscv64": "0.25.6",
2347 "@esbuild/linux-s390x": "0.25.6",
2348 "@esbuild/linux-x64": "0.25.6",
2349 "@esbuild/netbsd-arm64": "0.25.6",
2350 "@esbuild/netbsd-x64": "0.25.6",
2351 "@esbuild/openbsd-arm64": "0.25.6",
2352 "@esbuild/openbsd-x64": "0.25.6",
2353 "@esbuild/openharmony-arm64": "0.25.6",
2354 "@esbuild/sunos-x64": "0.25.6",
2355 "@esbuild/win32-arm64": "0.25.6",
2356 "@esbuild/win32-ia32": "0.25.6",
2357 "@esbuild/win32-x64": "0.25.6"
23452358 }
23462359 },
23472360 "node_modules/escalade": {
......@@ -2581,9 +2594,9 @@
25812594 }
25822595 },
25832596 "node_modules/get-uri": {
2584 "version": "6.0.4",
2585 "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz",
2586 "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==",
2597 "version": "6.0.5",
2598 "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz",
2599 "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==",
25872600 "license": "MIT",
25882601 "dependencies": {
25892602 "basic-ftp": "^5.0.2",
......@@ -2594,15 +2607,6 @@
25942607 "node": ">= 14"
25952608 }
25962609 },
2597 "node_modules/globals": {
2598 "version": "11.12.0",
2599 "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
2600 "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
2601 "license": "MIT",
2602 "engines": {
2603 "node": ">=4"
2604 }
2605 },
26062610 "node_modules/hast-util-to-estree": {
26072611 "version": "3.1.3",
26082612 "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
......@@ -2681,15 +2685,15 @@
26812685 }
26822686 },
26832687 "node_modules/hls.js": {
2684 "version": "1.6.5",
2685 "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.5.tgz",
2686 "integrity": "sha512-KMn5n7JBK+olC342740hDPHnGWfE8FiHtGMOdJPfUjRdARTWj9OB+8c13fnsf9sk1VtpuU2fKSgUjHvg4rNbzQ==",
2688 "version": "1.6.7",
2689 "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.7.tgz",
2690 "integrity": "sha512-QW2fnwDGKGc9DwQUGLbmMOz8G48UZK7PVNJPcOUql1b8jubKx4/eMHNP5mGqr6tYlJNDG1g10Lx2U/qPzL6zwQ==",
26872691 "license": "Apache-2.0"
26882692 },
26892693 "node_modules/hono": {
2690 "version": "4.7.11",
2691 "resolved": "https://registry.npmjs.org/hono/-/hono-4.7.11.tgz",
2692 "integrity": "sha512-rv0JMwC0KALbbmwJDEnxvQCeJh+xbS3KEWW5PC9cMJ08Ur9xgatI0HmtgYZfOdOSOeYsp5LO2cOhdI8cLEbDEQ==",
2694 "version": "4.8.4",
2695 "resolved": "https://registry.npmjs.org/hono/-/hono-4.8.4.tgz",
2696 "integrity": "sha512-KOIBp1+iUs0HrKztM4EHiB2UtzZDTBihDtOF5K6+WaJjCPeaW4Q92R8j63jOhvJI5+tZSMuKD9REVEXXY9illg==",
26932697 "license": "MIT",
26942698 "engines": {
26952699 "node": ">=16.9.0"
......@@ -2970,12 +2974,12 @@
29702974 }
29712975 },
29722976 "node_modules/marko": {
2973 "version": "6.0.21",
2974 "resolved": "https://registry.npmjs.org/marko/-/marko-6.0.21.tgz",
2975 "integrity": "sha512-yBMI1GfqAncP/R24vATKOr/VkAOox49hr6Jqw/HBwYQqU/QMpwYOMMNii09K3mJm0ABcq/oGk/CF81a3AZ3EsQ==",
2977 "version": "6.0.35",
2978 "resolved": "https://registry.npmjs.org/marko/-/marko-6.0.35.tgz",
2979 "integrity": "sha512-1zoMBeMEfltQ8QtmW0WoYYsjC0vUJaomQPpXQSlDw9i1o7YZ6T9v8ZSPcScv4ODRM1+XQ0hfNuUT+u7qijXcsA==",
29762980 "license": "MIT",
29772981 "dependencies": {
2978 "@marko/compiler": "^5.39.21",
2982 "@marko/compiler": "^5.39.28",
29792983 "csstype": "^3.1.3",
29802984 "magic-string": "^0.30.17"
29812985 },
......@@ -3938,9 +3942,9 @@
39383942 "license": "MIT"
39393943 },
39403944 "node_modules/pump": {
3941 "version": "3.0.2",
3942 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
3943 "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
3945 "version": "3.0.3",
3946 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
3947 "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
39443948 "license": "MIT",
39453949 "dependencies": {
39463950 "end-of-stream": "^1.1.0",
......@@ -3948,17 +3952,17 @@
39483952 }
39493953 },
39503954 "node_modules/puppeteer": {
3951 "version": "24.10.1",
3952 "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.10.1.tgz",
3953 "integrity": "sha512-7T3rfSaaPt5A31VITV5YKQ4wPCCv4aPn8byDaV+9lhDU9v7BWYY4Ncwerw3ZR5mIolrh/PvzGdIDK7yiBth75g==",
3955 "version": "24.12.1",
3956 "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.12.1.tgz",
3957 "integrity": "sha512-+vvwl+Xo4z5uXLLHG+XW8uXnUXQ62oY6KU6bEFZJvHWLutbmv5dw9A/jcMQ0fqpQdLydHmK0Uy7/9Ilj8ufwSQ==",
39543958 "hasInstallScript": true,
39553959 "license": "Apache-2.0",
39563960 "dependencies": {
39573961 "@puppeteer/browsers": "2.10.5",
39583962 "chromium-bidi": "5.1.0",
39593963 "cosmiconfig": "^9.0.0",
3960 "devtools-protocol": "0.0.1452169",
3961 "puppeteer-core": "24.10.1",
3964 "devtools-protocol": "0.0.1464554",
3965 "puppeteer-core": "24.12.1",
39623966 "typed-query-selector": "^2.12.0"
39633967 },
39643968 "bin": {
......@@ -3969,17 +3973,17 @@
39693973 }
39703974 },
39713975 "node_modules/puppeteer-core": {
3972 "version": "24.10.1",
3973 "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.10.1.tgz",
3974 "integrity": "sha512-AE6doA9znmEEps/pC5lc9p0zejCdNLR6UBp3EZ49/15Nbvh+uklXxGox7Qh8/lFGqGVwxInl0TXmsOmIuIMwiQ==",
3976 "version": "24.12.1",
3977 "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.12.1.tgz",
3978 "integrity": "sha512-8odp6d3ERKBa3BAVaYWXn95UxQv3sxvP1reD+xZamaX6ed8nCykhwlOiHSaHR9t/MtmIB+rJmNencI6Zy4Gxvg==",
39753979 "license": "Apache-2.0",
39763980 "dependencies": {
39773981 "@puppeteer/browsers": "2.10.5",
39783982 "chromium-bidi": "5.1.0",
39793983 "debug": "^4.4.1",
3980 "devtools-protocol": "0.0.1452169",
3984 "devtools-protocol": "0.0.1464554",
39813985 "typed-query-selector": "^2.12.0",
3982 "ws": "^8.18.2"
3986 "ws": "^8.18.3"
39833987 },
39843988 "engines": {
39853989 "node": ">=18"
......@@ -4411,27 +4415,27 @@
44114415 "license": "MIT"
44124416 },
44134417 "node_modules/style-to-js": {
4414 "version": "1.1.16",
4415 "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz",
4416 "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==",
4418 "version": "1.1.17",
4419 "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz",
4420 "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==",
44174421 "license": "MIT",
44184422 "dependencies": {
4419 "style-to-object": "1.0.8"
4423 "style-to-object": "1.0.9"
44204424 }
44214425 },
44224426 "node_modules/style-to-object": {
4423 "version": "1.0.8",
4424 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
4425 "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==",
4427 "version": "1.0.9",
4428 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz",
4429 "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==",
44264430 "license": "MIT",
44274431 "dependencies": {
44284432 "inline-style-parser": "0.2.4"
44294433 }
44304434 },
44314435 "node_modules/tar-fs": {
4432 "version": "3.0.9",
4433 "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz",
4434 "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==",
4436 "version": "3.1.0",
4437 "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.0.tgz",
4438 "integrity": "sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==",
44354439 "license": "MIT",
44364440 "dependencies": {
44374441 "pump": "^3.0.0",
......@@ -4745,9 +4749,9 @@
47454749 "license": "ISC"
47464750 },
47474751 "node_modules/ws": {
4748 "version": "8.18.2",
4749 "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
4750 "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==",
4752 "version": "8.18.3",
4753 "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
4754 "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
47514755 "license": "MIT",
47524756 "engines": {
47534757 "node": ">=10.0.0"
......@@ -4818,9 +4822,9 @@
48184822 }
48194823 },
48204824 "node_modules/zod": {
4821 "version": "3.25.64",
4822 "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.64.tgz",
4823 "integrity": "sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==",
4825 "version": "3.25.76",
4826 "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
4827 "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
48244828 "license": "MIT",
48254829 "funding": {
48264830 "url": "https://github.com/sponsors/colinhacks"
src/backend.ts-2
......@@ -34,10 +34,8 @@ async function removeDuplicateSlashes(c: Context, next: Next) {
3434}
3535
3636import { type Context, Hono, type Next } from "#hono";
37import { HTTPException } from "hono/http-exception";
3837import { logger } from "hono/logger";
3938import { trimTrailingSlash } from "hono/trailing-slash";
4039import * as assets from "#sitegen/assets";
4140import * as admin from "./admin.ts";
4241import { scoped } from "@paperclover/console";
43import * as util from "node:util";
src/blog/pages/25/file-viewer-internals.mdx created+10
......@@ -0,0 +1,10 @@
1export const blog: BlogMeta = {
2 title: "Marko is the coziest HTML templating language",
3 desc: "...todo...",
4 date: "2025-07-08",
5 draft: true,
6};
7export const meta = formatBlogMeta(blob);
8export * as layout from "@/blog/layout.tsx";
9
10
src/source-of-truth.dockerfile created+31
......@@ -0,0 +1,31 @@
1from node:24-alpine as builder
2
3run apk add --no-cache git
4
5workdir /paperclover.net
6copy package*.json ./
7run npm ci
8copy . ./
9run npx esbuild --bundle \
10 framework/backend/entry-node.ts \
11 --platform=node \
12 --format=esm \
13 --define:globalThis.CLOVER_SERVER_ENTRY='"@/source-of-truth.ts"' \
14 --minify \
15 --sourcemap=linked \
16 --entry-names=index \
17 --outdir=/app
18
19from node:24-alpine as runtime
20
21workdir /app
22copy --from=builder /app/ ./
23
24env PORT=3001
25# must be configured
26env CLOVER_DB=/dev/null
27env CLOVER_FILE_RAW=/dev/null
28env CLOVER_FILE_DERIVED=/dev/null
29
30cmd ["node", "--enable-source-maps", "/app/index.js"]
31
src/source-of-truth.ts+16-8
......@@ -20,14 +20,21 @@
2020const app = new Hono();
2121export default app;
2222
23const token = "bwaa";
24const nasRoot = "/Volumes/clover";
23const token = process.env.CLOVER_SOT_KEY;
2524
26const rawFileRoot = path.join(nasRoot, "Published");
27const derivedFileRoot = path.join(
28 nasRoot,
29 "Documents/Config/clover_file/derived",
30);
25const nasRoot = process.platform === "win32"
26 ? "\\\\zenith\\clover"
27 : process.platform === "darwin"
28 ? "/Volumes/clover"
29 : "/media/clover";
30
31const rawFileRoot = process.env.CLOVER_FILE_RAW ??
32 path.join(nasRoot, "Published");
33const derivedFileRoot = process.env.CLOVER_FILE_DERIVED ??
34 path.join(nasRoot, "Documents/Config/clover_file/derived");
35
36if (!fs.existsSync(rawFileRoot)) throw new Error(`${rawFileRoot} does not exist`);
37if (!fs.existsSync(derivedFileRoot)) throw new Error(`${derivedFileRoot} does not exist`);
3138
3239type Awaitable<T> = T | Promise<T>;
3340
......@@ -88,8 +95,9 @@ app.get("/file/*", async (c) => {
8895 },
8996 });
9097 c.header("Content-Type", mime.contentTypeFor(fullPath));
91 if (!derivedAsset)
98 if (!derivedAsset) {
9299 c.header("Content-Length", file.size.toString());
100 }
93101 return c.body(stream.Readable.toWeb(nodeStream) as ReadableStream);
94102});
95103