diff --git a/deno.lock b/deno.lock index b9bd62b9..4b0ba3cd 100644 --- a/deno.lock +++ b/deno.lock @@ -6,31 +6,38 @@ "jsr:@cliffy/table@1.0.0-rc.4": "1.0.0-rc.4", "jsr:@std/assert@*": "1.0.14", "jsr:@std/assert@0.221": "0.221.0", + "jsr:@std/cli@~0.224.7": "0.224.7", "jsr:@std/console@0.221": "0.221.0", "jsr:@std/datetime@*": "0.225.5", "jsr:@std/datetime@~0.225.3": "0.225.5", + "jsr:@std/encoding@1.0.0-rc.2": "1.0.0-rc.2", "jsr:@std/fmt@0.221": "0.221.0", "jsr:@std/fmt@0.225.4": "0.225.4", "jsr:@std/fmt@0.225.6": "0.225.6", "jsr:@std/fmt@^1.0.5": "1.0.8", + "jsr:@std/fmt@~0.225.4": "0.225.6", "jsr:@std/fs@*": "1.0.19", "jsr:@std/fs@0.229.3": "0.229.3", "jsr:@std/fs@^1.0.11": "1.0.19", + "jsr:@std/http@0.224.5": "0.224.5", "jsr:@std/internal@^1.0.10": "1.0.10", "jsr:@std/internal@^1.0.9": "1.0.10", "jsr:@std/io@~0.225.2": "0.225.2", "jsr:@std/log@~0.224.6": "0.224.14", "jsr:@std/media-types@0.224.0": "0.224.0", + "jsr:@std/media-types@^1.0.0-rc.1": "1.1.0", + "jsr:@std/net@~0.224.3": "0.224.5", "jsr:@std/path@*": "1.0.3", "jsr:@std/path@1.0.0-rc.1": "1.0.0-rc.1", + "jsr:@std/path@1.0.0-rc.2": "1.0.0-rc.2", "jsr:@std/path@1.0.3": "1.0.3", "jsr:@std/path@^1.1.1": "1.1.2", + "jsr:@std/streams@~0.224.5": "0.224.5", "jsr:@std/text@0.221": "0.221.0", "jsr:@std/yaml@*": "1.0.9", "jsr:@std/yaml@^1.0.5": "1.0.9", "jsr:@torm/sqlite@^1.9.7": "1.9.7", "npm:@deno/vite-plugin@1.0.5": "1.0.5_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0", - "npm:@jsr/andykais__ts-rpc@~0.2.4": "0.2.4_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0", "npm:@jsr/torm__sqlite@^1.9.7": "1.9.7", "npm:@opentelemetry/api@1.9.0": "1.9.0", "npm:@opentelemetry/api@^1.9.0": "1.9.0", @@ -38,10 +45,10 @@ "npm:@sveltejs/vite-plugin-svelte@6.2.1": "6.2.1_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0", "npm:@tailwindcss/vite@4.1.14": "4.1.14_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0", "npm:@types/node@*": "24.2.0", - "npm:esbuild@*": "0.25.10", "npm:sv@*": "0.9.6", "npm:svelte-check@4.3.2": "4.3.2_svelte@5.39.8__acorn@8.15.0_typescript@5.9.3", "npm:svelte@5.39.8": "5.39.8_acorn@8.15.0", + "npm:svelte@~5.39.8": "5.39.8_acorn@8.15.0", "npm:tailwindcss@4.1.14": "4.1.14", "npm:ts-expect@*": "1.3.0", "npm:ts-pattern@5.2.0": "5.2.0", @@ -83,6 +90,9 @@ "jsr:@std/internal@^1.0.10" ] }, + "@std/cli@0.224.7": { + "integrity": "654ca6477518e5e3a0d3fabafb2789e92b8c0febf1a1d24ba4b567aba94b5977" + }, "@std/console@0.221.0": { "integrity": "8f2afc1f3f14f5d6039c0c767f057e4aa1897d2210e167c4667cb155cafb9d11", "dependencies": [ @@ -92,6 +102,9 @@ "@std/datetime@0.225.5": { "integrity": "9f650f6caec546b80172e95a4edb8478d5fe060c4c937f7ede242ffceab6efc9" }, + "@std/encoding@1.0.0-rc.2": { + "integrity": "160d7674a20ebfbccdf610b3801fee91cf6e42d1c106dd46bbaf46e395cd35ef" + }, "@std/fmt@0.221.0": { "integrity": "379fed69bdd9731110f26b9085aeb740606b20428ce6af31ef6bd45ef8efa62a" }, @@ -117,6 +130,18 @@ "jsr:@std/path@^1.1.1" ] }, + "@std/http@0.224.5": { + "integrity": "b03b5d1529f6c423badfb82f6640f9f2557b4034cd7c30655ba5bb447ff750a4", + "dependencies": [ + "jsr:@std/cli", + "jsr:@std/encoding", + "jsr:@std/fmt@~0.225.4", + "jsr:@std/media-types@^1.0.0-rc.1", + "jsr:@std/net", + "jsr:@std/path@1.0.0-rc.2", + "jsr:@std/streams" + ] + }, "@std/internal@1.0.10": { "integrity": "e3be62ce42cab0e177c27698e5d9800122f67b766a0bea6ca4867886cbde8cf7" }, @@ -134,9 +159,18 @@ "@std/media-types@0.224.0": { "integrity": "5ac87989393f8cb1c81bee02aef6f5d4c8289b416deabc04f9ad25dff292d0b0" }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@0.224.5": { + "integrity": "9c2ae90a5c3dc7771da5ae5e13b6f7d5d0b316c1954c5d53f2bfc1129fb757ff" + }, "@std/path@1.0.0-rc.1": { "integrity": "b8c00ae2f19106a6bb7cbf1ab9be52aa70de1605daeb2dbdc4f87a7cbaf10ff6" }, + "@std/path@1.0.0-rc.2": { + "integrity": "39f20d37a44d1867abac8d91c169359ea6e942237a45a99ee1e091b32b921c7d" + }, "@std/path@1.0.3": { "integrity": "cd89d014ce7eb3742f2147b990f6753ee51d95276bfc211bc50c860c1bc7df6f" }, @@ -146,6 +180,9 @@ "jsr:@std/internal@^1.0.10" ] }, + "@std/streams@0.224.5": { + "integrity": "bcde7818dd5460d474cdbd674b15f6638b9cd73cd64e52bd852fba2bd4d8ec91" + }, "@std/text@0.221.0": { "integrity": "a2f89ceb0d8851cd33e6774064621a1da9fbc36578cf4f02c5b5bcd7e8c84b67", "dependencies": [ @@ -339,242 +376,6 @@ "@jridgewell/sourcemap-codec" ] }, - "@jsr/andykais__ts-rpc@0.2.4_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3": { - "integrity": "sha512-q8DSNIQLpPw/z+VcVcY+rrbRsmzZmw+bwopW4u95buXRLO/Bet8uYRddroAA8AI5zZkvuHJnxlNppwUmIFU5rA==", - "dependencies": [ - "@jsr/oak__oak", - "@sveltejs/kit@2.5.24_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/andykais__ts-rpc/0.2.4.tgz" - }, - "@jsr/andykais__ts-rpc@0.2.4_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0": { - "integrity": "sha512-q8DSNIQLpPw/z+VcVcY+rrbRsmzZmw+bwopW4u95buXRLO/Bet8uYRddroAA8AI5zZkvuHJnxlNppwUmIFU5rA==", - "dependencies": [ - "@jsr/oak__oak", - "@sveltejs/kit@2.5.24_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/andykais__ts-rpc/0.2.4.tgz" - }, - "@jsr/oak__commons@0.10.2": { - "integrity": "sha512-E7aBj8qrfgPiAhmXCTpq/ZhErnlbMwsG6WO2cthuXrwEDl5pNf90nTi6Q/Jjw0ngC/9ElfueXmGEuWydhGYJBQ==", - "dependencies": [ - "@jsr/std__assert@0.226.0", - "@jsr/std__bytes@0.224.0", - "@jsr/std__crypto@0.224.0", - "@jsr/std__http@0.224.5", - "@jsr/std__media-types@0.224.1" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/oak__commons/0.10.2.tgz" - }, - "@jsr/oak__oak@16.0.0": { - "integrity": "sha512-UTt9R1AdKUJQXDzeWy2CRG5nimxCkvEoMplhhkEXC13apV1UNTqm54SaeE5ctfcyhv1iwb4Gsd78joMg9HCdTA==", - "dependencies": [ - "@jsr/oak__commons", - "@jsr/std__assert@0.223.0", - "@jsr/std__bytes@0.223.0", - "@jsr/std__crypto@0.223.0", - "@jsr/std__http@0.223.0", - "@jsr/std__io@0.223.0", - "@jsr/std__media-types@0.223.0", - "@jsr/std__path@0.223.0", - "path-to-regexp" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/oak__oak/16.0.0.tgz" - }, - "@jsr/std__assert@0.223.0": { - "integrity": "sha512-qcx+Oe/fdwQu3+XXTFXN6j7bLlEbgHDXvqokSCdJknqOz8bOdzMT5TW1bJbKhInUx2M8Kiz80HLm8VuMaOx6Xw==", - "dependencies": [ - "@jsr/std__fmt@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__assert/0.223.0.tgz" - }, - "@jsr/std__assert@0.224.0": { - "integrity": "sha512-RB0p0ydybgKSfTba6kHWytfpEJ0CBPi+byxZikLYa51L9uLINW52/j6n4KuiLFoh2cdFfpNZSNMY/dzQPW90DQ==", - "dependencies": [ - "@jsr/std__fmt@0.224.0", - "@jsr/std__internal@0.224.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__assert/0.224.0.tgz" - }, - "@jsr/std__assert@0.226.0": { - "integrity": "sha512-xCuUFDfHkIZd96glKgjZbnYFqu6blu8Y53SyvDMlFDJm1Y/j+/FcW6xq7TzGFIaF5B9QecIlDfamfhzA8ZdVbg==", - "dependencies": [ - "@jsr/std__internal@1.0.10" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__assert/0.226.0.tgz" - }, - "@jsr/std__async@0.223.0": { - "integrity": "sha512-spBHGl5tQk2VbhlDmTZzeXJSIjjN1dCYnBSDk0X3Ta9HyeZ5rCGLi65N+jqPjxx0ZRy5AmWB0xPCf9gqBlClyA==", - "dependencies": [ - "@jsr/std__assert@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__async/0.223.0.tgz" - }, - "@jsr/std__async@1.0.14": { - "integrity": "sha512-aIG8W3TOmW+lKdAJA5w56qASu9EiUmBXbhW6eAlSEUBid+KVESGqQygFFg+awt/c8K+qobVM6M/u3SbIy0NyUQ==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__async/1.0.14.tgz" - }, - "@jsr/std__bytes@0.223.0": { - "integrity": "sha512-6bhkazZZPE8iYa3unUKEd0Nk4o0k9pWe4VAjyQVqgx+hbMjLCWQHhdNCW9ySbWUbqBVuI/V+FdWGzxdfAk/HjQ==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__bytes/0.223.0.tgz" - }, - "@jsr/std__bytes@0.224.0": { - "integrity": "sha512-0/hHYaG7LO4y1fjh45xLQyiaGnjaLHLpvnXf1DQV+Qv5MJJNJjvm+1uGCzu7fHQZAljL9DgOeN3PAQCwzpsHJw==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__bytes/0.224.0.tgz" - }, - "@jsr/std__bytes@1.0.6": { - "integrity": "sha512-St6yKggjFGhxS52IFLJWvkchRFbAKg2Xh8UxA4S1EGz7GJ2Ui+ssDDldj/w2c8vCxvl6qgR0HaYbKeFJNqujmA==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__bytes/1.0.6.tgz" - }, - "@jsr/std__cli@0.223.0": { - "integrity": "sha512-VYI5Z7dCg8EbXnZXqtWw4691SD3frCILY/63JLR7iw5CrrKAQOFWcKbiQappDFT5R9xXD6PE2Gqp4CS6+E/DwA==", - "dependencies": [ - "@jsr/std__assert@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__cli/0.223.0.tgz" - }, - "@jsr/std__cli@0.224.7": { - "integrity": "sha512-SSE7AMT/nqTUKeQXB+PZcmD6L5IjsOFDQdm88Ik2o6P4gS+gXewLMPZJu/X/gaOH5ux2C4xZ26Dgp3vCAIuB4g==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__cli/0.224.7.tgz" - }, - "@jsr/std__crypto@0.223.0": { - "integrity": "sha512-KgZFVi1lmwnWs5ZsIeUxV9HfE3groJIFHUWzLv2C6UpeS6PLI0iL2ccZc+B5fvYcJiZyUrCUWowRkA5Jkgc2AQ==", - "dependencies": [ - "@jsr/std__assert@0.223.0", - "@jsr/std__encoding@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__crypto/0.223.0.tgz" - }, - "@jsr/std__crypto@0.224.0": { - "integrity": "sha512-qzZWI8VnH215FS7hmQsAeNafjLMkmSl1OOvexorVUEf1Zl9omHSN87MwIjtmyVXGLtpGRLzIhKXbeup1xO69Zw==", - "dependencies": [ - "@jsr/std__assert@0.224.0", - "@jsr/std__encoding@0.224.3" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__crypto/0.224.0.tgz" - }, - "@jsr/std__encoding@0.223.0": { - "integrity": "sha512-auQ0wUZFsVGXU+6qfjGeonWe8utBhp+y43etR1lanCJXXUzL5W3yS+i73Fki+RLjvxUG4Pwd1CrGSR57kIvrIg==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__encoding/0.223.0.tgz" - }, - "@jsr/std__encoding@0.224.3": { - "integrity": "sha512-zAuX2QV1zwJ5RSmrnDGVerAtN3pBXpYYNlGzhERW9AiQ1UJd2/xruyB3i5NdTWy2OK2pjETswOj+0+prYTPlxQ==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__encoding/0.224.3.tgz" - }, - "@jsr/std__encoding@1.0.0-rc.2": { - "integrity": "sha512-ISvxD+exWVg/aESN3G1Tr0oszHRgUEEK1JjiRcuyCtd1uqSGXXMAoswYlYvPwA6mxZ7FQbFSZEbP3tN2J+fIUQ==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__encoding/1.0.0-rc.2.tgz" - }, - "@jsr/std__fmt@0.223.0": { - "integrity": "sha512-iuviJIMnAxlrQaDhe6vuYVyENvN8I1YUfjv8if7SeCc1sE+K820Jaqe6J2K+UivIkXnh0Qh3Wh/PBIvdK9sI5g==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__fmt/0.223.0.tgz" - }, - "@jsr/std__fmt@0.224.0": { - "integrity": "sha512-lyrH5LesMB897QW0NIbZlGp72Ucopj2hMZW2wqB0NyZhuXfLH2sPBIUpCSf87kRKTGnx90JV905w4iTp0TD+Sg==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__fmt/0.224.0.tgz" - }, - "@jsr/std__fmt@0.225.6": { - "integrity": "sha512-5wll7CImyrJfen4fecziNSxZ5S6Fo3H1rQqKMQDewRGHAnFVqcHLe8wwCuDLK+HTbSPy6AkR3b136WpjVdOjTQ==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__fmt/0.225.6.tgz" - }, - "@jsr/std__http@0.223.0": { - "integrity": "sha512-v60Hv8J1GXM1ExsJgBXVcmhbyt4Ip3RFaIdkVrycujbBL5qFuhNnvkmggAonP+nwXy5V0crU/tkLNWTyncoPXQ==", - "dependencies": [ - "@jsr/std__assert@0.223.0", - "@jsr/std__async@0.223.0", - "@jsr/std__cli@0.223.0", - "@jsr/std__encoding@0.223.0", - "@jsr/std__fmt@0.223.0", - "@jsr/std__media-types@0.223.0", - "@jsr/std__path@0.223.0", - "@jsr/std__streams@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__http/0.223.0.tgz" - }, - "@jsr/std__http@0.224.5": { - "integrity": "sha512-PomDgsxwBoCkqTCG7e1Sz4QCAgNFhEGf71GWNercppQlgKtzp6zxsDgcJ4+vrqHIq5W8L1eqJWiceNkUUkMZjQ==", - "dependencies": [ - "@jsr/std__async@1.0.14", - "@jsr/std__cli@0.224.7", - "@jsr/std__encoding@1.0.0-rc.2", - "@jsr/std__fmt@0.225.6", - "@jsr/std__media-types@1.1.0", - "@jsr/std__net", - "@jsr/std__path@1.0.0-rc.2", - "@jsr/std__streams@0.224.5" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__http/0.224.5.tgz" - }, - "@jsr/std__internal@0.224.0": { - "integrity": "sha512-inYzKOGAFK2tyy1D4NfwlbPiqEcSaXfOms3Tm4Y+1LmKSYOeB9wjqWHF4y/BJuYj8XUv61F7eaHaIw6NIlhBWg==", - "dependencies": [ - "@jsr/std__fmt@0.224.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__internal/0.224.0.tgz" - }, - "@jsr/std__internal@1.0.10": { - "integrity": "sha512-fmD6yKep/sMnB2yPQU/REZG7Z4N9SZwcUBNnceo4QkXk67l3JEfxHoROQ/YHeVSOmq6x55Ra6nuMjz2ib3nj3g==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__internal/1.0.10.tgz" - }, - "@jsr/std__io@0.223.0": { - "integrity": "sha512-VUPpfHeLvhooQFyujLSj6/KDCqgF+joBpb6eO9dg+JJWvy5wHj1Nl2EMRQe6Pl8nNVUwjt+ZraydkGTdlDS1jw==", - "dependencies": [ - "@jsr/std__assert@0.223.0", - "@jsr/std__bytes@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__io/0.223.0.tgz" - }, - "@jsr/std__io@0.224.9": { - "integrity": "sha512-MwBAa4WDb2yOuzbd21cweZfIFnH5I0ICOtCTi2ckHLQ+Dx99gvavXPX+e7nqrahaDuaaBlZcA5TC6XHh99IOpw==", - "dependencies": [ - "@jsr/std__bytes@1.0.6" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__io/0.224.9.tgz" - }, - "@jsr/std__media-types@0.223.0": { - "integrity": "sha512-wJe0dRZiL1OqU8oGXReVuMK5stHERyGgpR/6yS4qW9+p74+XXSIP+OGubfzl8TjeKeULd82zLbk1QNo5FvwXNw==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__media-types/0.223.0.tgz" - }, - "@jsr/std__media-types@0.224.1": { - "integrity": "sha512-L3kF5zNOA0KNibbdKwxmjaHUOpa7vWTb6BNwv41QZEjOtmS8GWPTRAXkglLEUfu2gl6pXlOoT3BmXv/naO5tKA==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__media-types/0.224.1.tgz" - }, - "@jsr/std__media-types@1.1.0": { - "integrity": "sha512-dHvaxHL7ENWnltgL653uo3KnKFse3ZbopZop2gqsT7yrscx7irZEClu5Cba7gMPPRk4Lg1FbriNcaBViM2RSBw==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__media-types/1.1.0.tgz" - }, - "@jsr/std__net@0.224.5": { - "integrity": "sha512-DjUCeCR9+KA9REz1r0vDLAVnV5I0PcystRYB1L+XxAlRY1DuQ6ZFtCsiLzcDrniitSsHGYqmYfI3ZLgWvr3Clw==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__net/0.224.5.tgz" - }, - "@jsr/std__path@0.223.0": { - "integrity": "sha512-zeAxeBWFMmvlJdvBOzgIGmuqV6vLsZHt+2SWkIF00mMr2k96emGaq0Nw4KRnqkB4syawgc3OAo4EAbWJBu7Yvw==", - "dependencies": [ - "@jsr/std__assert@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__path/0.223.0.tgz" - }, - "@jsr/std__path@1.0.0-rc.2": { - "integrity": "sha512-qUHfVMqAtMGPFmdkOfmkCONqgpe4UFVAaD+wL6ZdlQxtvQiNxHQWsje+djri+0095s/kkoBOPH4CpYxBq+zh3A==", - "tarball": "https://npm.jsr.io/~/11/@jsr/std__path/1.0.0-rc.2.tgz" - }, - "@jsr/std__streams@0.223.0": { - "integrity": "sha512-YfOfRTpnTocgC5h22aRMgu74ByBO6763PgwG2p7iFWYZFBRrDNW6WqYK1MFXcbU8VrwlgpUEvkS3Xk9dJnd+hw==", - "dependencies": [ - "@jsr/std__assert@0.223.0", - "@jsr/std__bytes@0.223.0", - "@jsr/std__io@0.223.0" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__streams/0.223.0.tgz" - }, - "@jsr/std__streams@0.224.5": { - "integrity": "sha512-LWs0LfBcyj4VzE3ff1cwoEyJ3AkoIT3CQubxeA0YQr3KEC/c6xB9Rq9nVit8gZ8RgtbMDlyfPtN1MkwTgPFj+g==", - "dependencies": [ - "@jsr/std__bytes@1.0.6", - "@jsr/std__io@0.224.9" - ], - "tarball": "https://npm.jsr.io/~/11/@jsr/std__streams/0.224.5.tgz" - }, "@jsr/torm__sqlite@1.9.7": { "integrity": "sha512-naligACB12UtWD43fd0QtUCIgNotPoiib3r/qFHAMj0Hy2RxapfR24dSH2U5gHQM4DSBCt2/sqwcjojY2T3SMw==", "dependencies": [ @@ -725,7 +526,7 @@ "mrmime", "sade", "set-cookie-parser", - "sirv@3.0.2", + "sirv", "svelte", "vite@7.1.8_picomatch@4.0.3" ], @@ -751,7 +552,7 @@ "mrmime", "sade", "set-cookie-parser", - "sirv@3.0.2", + "sirv", "svelte", "vite@7.1.8_picomatch@4.0.3_@types+node@24.2.0" ], @@ -760,50 +561,6 @@ ], "bin": true }, - "@sveltejs/kit@2.5.24_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3": { - "integrity": "sha512-Nr2oxsCsDfEkdS/zzQQQbsPYTbu692Qs3/iE3L7VHzCVjG2+WujF9oMUozWI7GuX98KxYSoPMlAsfmDLSg44hQ==", - "dependencies": [ - "@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3", - "@types/cookie", - "cookie", - "devalue", - "esm-env", - "import-meta-resolve", - "kleur", - "magic-string", - "mrmime", - "sade", - "set-cookie-parser", - "sirv@2.0.4", - "svelte", - "tiny-glob", - "vite@7.1.8_picomatch@4.0.3" - ], - "scripts": true, - "bin": true - }, - "@sveltejs/kit@2.5.24_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0": { - "integrity": "sha512-Nr2oxsCsDfEkdS/zzQQQbsPYTbu692Qs3/iE3L7VHzCVjG2+WujF9oMUozWI7GuX98KxYSoPMlAsfmDLSg44hQ==", - "dependencies": [ - "@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3_@types+node@24.2.0", - "@types/cookie", - "cookie", - "devalue", - "esm-env", - "import-meta-resolve", - "kleur", - "magic-string", - "mrmime", - "sade", - "set-cookie-parser", - "sirv@2.0.4", - "svelte", - "tiny-glob", - "vite@7.1.8_picomatch@4.0.3_@types+node@24.2.0" - ], - "scripts": true, - "bin": true - }, "@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.39.8___acorn@8.15.0__vite@7.1.8___picomatch@4.0.3_svelte@5.39.8__acorn@8.15.0_vite@7.1.8__picomatch@4.0.3": { "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", "dependencies": [ @@ -1075,18 +832,9 @@ "os": ["darwin"], "scripts": true }, - "globalyzer@0.1.0": { - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" - }, - "globrex@0.1.2": { - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, "graceful-fs@4.2.11": { "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "import-meta-resolve@4.2.0": { - "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==" - }, "is-reference@3.0.3": { "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", "dependencies": [ @@ -1199,9 +947,6 @@ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "bin": true }, - "path-to-regexp@6.2.1": { - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" - }, "picocolors@1.1.1": { "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, @@ -1263,14 +1008,6 @@ "set-cookie-parser@2.7.1": { "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" }, - "sirv@2.0.4": { - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dependencies": [ - "@polka/url", - "mrmime", - "totalist" - ] - }, "sirv@3.0.2": { "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", "dependencies": [ @@ -1343,13 +1080,6 @@ "yallist" ] }, - "tiny-glob@0.2.9": { - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dependencies": [ - "globalyzer", - "globrex" - ] - }, "tinyglobby@0.2.15_picomatch@4.0.3": { "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dependencies": [ @@ -1468,7 +1198,6 @@ "packageJson": { "dependencies": [ "npm:@deno/vite-plugin@1.0.5", - "npm:@jsr/andykais__ts-rpc@~0.2.4", "npm:@jsr/torm__sqlite@^1.9.7", "npm:@opentelemetry/api@1.9.0", "npm:@sveltejs/kit@2.43.7", @@ -1485,7 +1214,6 @@ }, "packages/web/adapter/lib": { "dependencies": [ - "jsr:@andykais/ts-rpc@~0.2.2", "jsr:@std/http@0.224.5", "npm:@opentelemetry/api@1.9.0", "npm:svelte@~5.39.8" diff --git a/packages/web/adapter/lib/deno.json b/packages/web/adapter/lib/deno.json index 945089bd..f9ee05ce 100644 --- a/packages/web/adapter/lib/deno.json +++ b/packages/web/adapter/lib/deno.json @@ -10,7 +10,6 @@ "imports": { "@opentelemetry/api": "npm:@opentelemetry/api@1.9.0", - "@andykais/ts-rpc": "jsr:@andykais/ts-rpc@^0.2.2", "@std/http/file-server": "jsr:@std/http@0.224.5/file-server", "svelte": "npm:svelte@~5.39.8" diff --git a/packages/web/package.json b/packages/web/package.json index be9e65e8..a3923b72 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -13,7 +13,6 @@ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" }, "dependencies": { - "@andykais/ts-rpc": "npm:@jsr/andykais__ts-rpc@^0.2.4", "@torm/sqlite": "npm:@jsr/torm__sqlite@^1.9.7", "@opentelemetry/api": "1.9.0" }, diff --git a/packages/web/src/hooks.server.ts b/packages/web/src/hooks.server.ts index 582e97d4..7beb0008 100644 --- a/packages/web/src/hooks.server.ts +++ b/packages/web/src/hooks.server.ts @@ -1,41 +1,6 @@ import * as sveltekit from '@sveltejs/kit' -import { Forager } from '@forager/core' -import { env } from '$env/dynamic/private' -import { dev, building } from '$app/environment' -import { type Config, load_config, PackagesConfig } from '$lib/server/config.ts' import { trace } from "@opentelemetry/api" - - -let forager: Forager -let config: Config - -if (!building) { - if (dev) { - if (env.FORAGER_CONFIG) { - // TODO make this dev-only - config = await load_config(env.FORAGER_CONFIG) - if (config.web.editing) { - config.core.editing = config.web.editing - } - forager = new Forager(config.core) - } else { - config = PackagesConfig.parse({ - core: {database: {folder: 'database'}, thumbnail_folder: 'thumbnails', logger: {level: 'INFO'}}, - web: {asset_folder: 'static_assets', logger: {level: 'INFO'}} - }) - forager = new Forager(config.core) - } - - forager.init() - } else { - if (env.FORAGER_INSTANCE) { - forager = env.FORAGER_INSTANCE - config = env.FORAGER_CONFIG - } else { - throw new Error(`FORAGER_INSTANCE must be passed to sveltekit hooks`) - } - } -} +import {forager, config} from '$lib/api/backend.ts' export const handle: sveltekit.Handle = async ({ event, resolve }) => { const span = trace.getActiveSpan() diff --git a/packages/web/src/lib/api.ts b/packages/web/src/lib/api.ts deleted file mode 100644 index 0be1dbc5..00000000 --- a/packages/web/src/lib/api.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { type Forager } from '@forager/core' -import * as rpc from '@andykais/ts-rpc/adapters/sveltekit.ts' -import { type Config } from '$lib/server/config.ts' - - -interface Context { - forager: Forager - config: Config -} - -class ForagerTagApi extends rpc.ApiController { - search = this.context.forager.tag.search -} - -class ForagerApi extends rpc.ApiController { - media = this.context.forager.media - series = this.context.forager.series - tag = this.module(ForagerTagApi) - views = this.context.forager.views - -} - -export class Api extends rpc.ApiController { - forager = this.module(ForagerApi) - - config(): Config { - return this.context.config - } - - server_time(): Date { - return new Date() - } -} - -export type ApiSpec = rpc.InferSpec diff --git a/packages/web/src/lib/api/backend.ts b/packages/web/src/lib/api/backend.ts new file mode 100644 index 00000000..75a2502d --- /dev/null +++ b/packages/web/src/lib/api/backend.ts @@ -0,0 +1,50 @@ +import * as svelte_server from '$app/server'; +import { Forager } from '@forager/core' +import { env } from '$env/dynamic/private' +import { dev, building } from '$app/environment' +import { type Config, load_config, PackagesConfig } from '$lib/server/config.ts' + + +let forager: Forager +let config: Config + +if (!building) { + if (dev) { + if (env.FORAGER_CONFIG) { + // TODO make this dev-only + config = await load_config(env.FORAGER_CONFIG) + if (config.web.editing) { + config.core.editing = config.web.editing + } + forager = new Forager(config.core) + } else { + config = PackagesConfig.parse({ + core: {database: {folder: 'database'}, thumbnail_folder: 'thumbnails', logger: {level: 'INFO'}}, + web: {asset_folder: 'static_assets', logger: {level: 'INFO'}} + }) + forager = new Forager(config.core) + } + + forager.init() + } else { + if (env.FORAGER_INSTANCE) { + forager = (env.FORAGER_INSTANCE as unknown) as Forager + config = (env.FORAGER_CONFIG as unknown) as Config + } else { + throw new Error(`FORAGER_INSTANCE must be passed to sveltekit hooks`) + } + } +} + +export const query = (fn: (...args: Params) => Return) => { + const fn_wrappped = (arg_list: Params): Return => { + return fn(...arg_list) + } + return svelte_server.query('unchecked', fn_wrappped) +} + + +export { + forager, + config +} diff --git a/packages/web/src/lib/api/client.ts b/packages/web/src/lib/api/client.ts new file mode 100644 index 00000000..6ce23e8b --- /dev/null +++ b/packages/web/src/lib/api/client.ts @@ -0,0 +1,27 @@ +import * as media from '$lib/api/remote_functions/media.remote.ts' +import * as tag from '$lib/api/remote_functions/tag.remote.ts' +import * as views from '$lib/api/remote_functions/views.remote.ts' + +const wrap_args = (fn: (params: Params) => Return): (...args: Params) => Return => { + return (...args: Params): Return => { + return fn(args) + } +} + +export const forager = { + media: { + search: wrap_args(media.search), + group: wrap_args(media.group), + update: wrap_args(media.update), + get: wrap_args(media.get), + create: wrap_args(media.create), + upsert: wrap_args(media.upsert), + }, + tag: { + search: wrap_args(tag.search), + }, + views: { + start: wrap_args(views.start), + update: wrap_args(views.update), + }, +} diff --git a/packages/web/src/lib/api/remote_functions/media.remote.ts b/packages/web/src/lib/api/remote_functions/media.remote.ts new file mode 100644 index 00000000..20d1d702 --- /dev/null +++ b/packages/web/src/lib/api/remote_functions/media.remote.ts @@ -0,0 +1,9 @@ +import {forager, query} from '$lib/api/backend.ts' + +export const search = query(forager.media.search) +export const group = query(forager.media.group) +export const update = query(forager.media.update) +export const get = query(forager.media.get) +export const create = query(forager.media.create) +export const upsert = query(forager.media.upsert) +// export delete = query(forager.media.delete) // NOTE we cannot name functions delete :( diff --git a/packages/web/src/lib/api/remote_functions/tag.remote.ts b/packages/web/src/lib/api/remote_functions/tag.remote.ts new file mode 100644 index 00000000..4c012af3 --- /dev/null +++ b/packages/web/src/lib/api/remote_functions/tag.remote.ts @@ -0,0 +1,3 @@ +import {forager, query} from '$lib/api/backend.ts' + +export const search = query(forager.tag.search) diff --git a/packages/web/src/lib/api/remote_functions/views.remote.ts b/packages/web/src/lib/api/remote_functions/views.remote.ts new file mode 100644 index 00000000..2fd2b97a --- /dev/null +++ b/packages/web/src/lib/api/remote_functions/views.remote.ts @@ -0,0 +1,4 @@ +import {forager, query} from '$lib/api/backend.ts' + +export const start = query(forager.views.start) +export const update = query(forager.views.update) diff --git a/packages/web/src/lib/base_controller.ts b/packages/web/src/lib/base_controller.ts index b221163e..a0b19b00 100644 --- a/packages/web/src/lib/base_controller.ts +++ b/packages/web/src/lib/base_controller.ts @@ -1,13 +1,9 @@ -import * as svelte from 'svelte' -import type {ApiSpec} from '$lib/api.ts' -import * as rpc from '@andykais/ts-rpc/client.ts' import type { Config } from '$lib/server/config.ts' import {create_focuser, SettingsRune} from '$lib/runes/index.ts' import {Keybinds} from '$lib/keybinds.ts' abstract class BaseController { - client: ReturnType> keybinds: Keybinds #config: Config | undefined @@ -18,7 +14,6 @@ abstract class BaseController { constructor(config: Config) { this.#config = config - this.client = rpc.create(`${window.location.protocol}${window.location.host}/rpc/:signature`) this.keybinds = new Keybinds(config) } diff --git a/packages/web/src/lib/components/TagAutoCompleteInput.svelte b/packages/web/src/lib/components/TagAutoCompleteInput.svelte index 2f489350..88f29463 100644 --- a/packages/web/src/lib/components/TagAutoCompleteInput.svelte +++ b/packages/web/src/lib/components/TagAutoCompleteInput.svelte @@ -1,5 +1,6 @@