From 67c448358758d76b49c87e5bcacf9af41e976c7e Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 29 Nov 2025 18:12:14 +0000 Subject: [PATCH] vite + svelte support on local dev --- cli/deno.json | 6 +- cli/deno.lock | 523 +++++++++++------- cli/deps.ts | 3 + cli/src/commands/app/bundle.ts | 89 ++- cli/src/commands/app/dev.ts | 23 +- cli/src/commands/app/raw_apps.ts | 7 +- cli/src/commands/dev/dev.ts | 2 +- cli/src/commands/script/script.ts | 10 +- cli/src/core/conf.ts | 4 +- frontend/scripts/untar_ui_builder.js | 2 +- .../(root)/(logged)/apps_raw/add/+page.svelte | 32 +- .../(root)/(logged)/apps_raw/add/templates.ts | 2 +- 12 files changed, 451 insertions(+), 252 deletions(-) diff --git a/cli/deno.json b/cli/deno.json index fae7e8f7dd..772ab0c3c6 100644 --- a/cli/deno.json +++ b/cli/deno.json @@ -13,6 +13,8 @@ "@std/path": "jsr:@std/path@^1.0.4", "@std/streams": "jsr:@std/streams@^1.0.4", "@std/yaml": "jsr:@std/yaml@^1.0.5", - "@types/diff": "npm:@types/diff@^5.2.2" - } + "@types/diff": "npm:@types/diff@^5.2.2", + "ws": "npm:ws@8.18.0" + }, + "nodeModulesDir": "auto" } \ No newline at end of file diff --git a/cli/deno.lock b/cli/deno.lock index bf7e990d8b..9b0009da9f 100644 --- a/cli/deno.lock +++ b/cli/deno.lock @@ -18,13 +18,13 @@ "jsr:@std/encoding@1.0.4": "1.0.4", "jsr:@std/encoding@^1.0.4": "1.0.4", "jsr:@std/fmt@0.223": "0.223.0", - "jsr:@std/fmt@1": "1.0.2", + "jsr:@std/fmt@1": "1.0.8", "jsr:@std/fmt@^1.0.2": "1.0.2", "jsr:@std/fmt@^1.0.5": "1.0.8", "jsr:@std/fmt@~0.225.4": "0.225.6", "jsr:@std/fs@*": "1.0.20", "jsr:@std/fs@0.223": "0.223.0", - "jsr:@std/fs@1": "1.0.3", + "jsr:@std/fs@1": "1.0.20", "jsr:@std/fs@^1.0.11": "1.0.20", "jsr:@std/fs@^1.0.3": "1.0.3", "jsr:@std/fs@~0.229.3": "0.229.3", @@ -40,7 +40,7 @@ "jsr:@std/net@^1.0.2": "1.0.2", "jsr:@std/path@*": "1.1.3", "jsr:@std/path@0.223": "0.223.0", - "jsr:@std/path@1": "1.0.4", + "jsr:@std/path@1": "1.1.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.4": "1.0.4", @@ -64,18 +64,23 @@ "jsr:@windmill-labs/cliffy-prompt@^1.0.0-rc.5": "1.0.0-rc.6", "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5": "1.0.0-rc.5", "jsr:@windmill-labs/cliffy-table@^1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/shared-utils@1.0.10": "1.0.10", "jsr:@windmill-labs/shared-utils@1.0.3": "1.0.3", "jsr:@windmill-labs/shared-utils@1.0.5": "1.0.5", "jsr:@windmill-labs/shared-utils@1.0.6": "1.0.6", "jsr:@windmill-labs/shared-utils@1.0.7": "1.0.7", "npm:@ayonli/jsext@*": "1.8.0", - "npm:@types/node@*": "22.12.0", + "npm:@types/diff@^5.2.2": "5.2.3", + "npm:@types/node@*": "24.2.0", + "npm:@types/ws@*": "8.18.1", "npm:@windmill-labs/shared-utils@1.0.1": "1.0.1", "npm:@windmill-labs/shared-utils@1.0.2": "1.0.2", "npm:centdix-utils@*": "1.0.15", "npm:diff@*": "8.0.2", "npm:es-main@*": "1.3.0", - "npm:esbuild@*": "0.25.8", + "npm:esbuild-plugin-vue3@0.5.1": "0.5.1_vue@3.5.25__typescript@4.9.5_typescript@4.9.5", + "npm:esbuild-svelte@0.9.3": "0.9.3_esbuild@0.24.2_svelte@5.45.2__acorn@8.14.1", + "npm:esbuild@*": "0.24.2", "npm:esbuild@0.24.2": "0.24.2", "npm:express@*": "5.1.0", "npm:get-port@7.1.0": "7.1.0", @@ -83,8 +88,10 @@ "npm:jszip@3.8.0": "3.8.0", "npm:minimatch@*": "10.0.3", "npm:open@*": "10.2.0", + "npm:svelte-preprocess@6.0.3": "6.0.3_svelte@5.45.2__acorn@8.14.1", "npm:ws@*": "8.18.3", - "npm:ws@8.18.0": "8.18.0" + "npm:ws@8.18.0": "8.18.0", + "npm:ws@8.18.3": "8.18.3" }, "jsr": { "@david/code-block-writer@13.0.2": { @@ -349,6 +356,9 @@ }, "@windmill-labs/shared-utils@1.0.7": { "integrity": "528638c7c508910e7f51b1ad9a5f1ff394e3fefb28fd3f96ab958c258a26e978" + }, + "@windmill-labs/shared-utils@1.0.10": { + "integrity": "bd1993eb8d693c8ba49da1618f82ff4601eeb59011b2cac13e664291f7a299d8" } }, "npm": { @@ -361,261 +371,151 @@ "zod" ] }, + "@babel/helper-string-parser@7.27.1": { + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier@7.28.5": { + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/parser@7.28.5": { + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dependencies": [ + "@babel/types" + ], + "bin": true + }, + "@babel/types@7.28.5": { + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dependencies": [ + "@babel/helper-string-parser", + "@babel/helper-validator-identifier" + ] + }, "@esbuild/aix-ppc64@0.24.2": { "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", "os": ["aix"], "cpu": ["ppc64"] }, - "@esbuild/aix-ppc64@0.25.8": { - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", - "os": ["aix"], - "cpu": ["ppc64"] - }, "@esbuild/android-arm64@0.24.2": { "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", "os": ["android"], "cpu": ["arm64"] }, - "@esbuild/android-arm64@0.25.8": { - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", - "os": ["android"], - "cpu": ["arm64"] - }, "@esbuild/android-arm@0.24.2": { "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", "os": ["android"], "cpu": ["arm"] }, - "@esbuild/android-arm@0.25.8": { - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", - "os": ["android"], - "cpu": ["arm"] - }, "@esbuild/android-x64@0.24.2": { "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", "os": ["android"], "cpu": ["x64"] }, - "@esbuild/android-x64@0.25.8": { - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", - "os": ["android"], - "cpu": ["x64"] - }, "@esbuild/darwin-arm64@0.24.2": { "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", "os": ["darwin"], "cpu": ["arm64"] }, - "@esbuild/darwin-arm64@0.25.8": { - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", - "os": ["darwin"], - "cpu": ["arm64"] - }, "@esbuild/darwin-x64@0.24.2": { "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", "os": ["darwin"], "cpu": ["x64"] }, - "@esbuild/darwin-x64@0.25.8": { - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", - "os": ["darwin"], - "cpu": ["x64"] - }, "@esbuild/freebsd-arm64@0.24.2": { "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", "os": ["freebsd"], "cpu": ["arm64"] }, - "@esbuild/freebsd-arm64@0.25.8": { - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", - "os": ["freebsd"], - "cpu": ["arm64"] - }, "@esbuild/freebsd-x64@0.24.2": { "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", "os": ["freebsd"], "cpu": ["x64"] }, - "@esbuild/freebsd-x64@0.25.8": { - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", - "os": ["freebsd"], - "cpu": ["x64"] - }, "@esbuild/linux-arm64@0.24.2": { "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", "os": ["linux"], "cpu": ["arm64"] }, - "@esbuild/linux-arm64@0.25.8": { - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", - "os": ["linux"], - "cpu": ["arm64"] - }, "@esbuild/linux-arm@0.24.2": { "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", "os": ["linux"], "cpu": ["arm"] }, - "@esbuild/linux-arm@0.25.8": { - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", - "os": ["linux"], - "cpu": ["arm"] - }, "@esbuild/linux-ia32@0.24.2": { "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", "os": ["linux"], "cpu": ["ia32"] }, - "@esbuild/linux-ia32@0.25.8": { - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", - "os": ["linux"], - "cpu": ["ia32"] - }, "@esbuild/linux-loong64@0.24.2": { "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", "os": ["linux"], "cpu": ["loong64"] }, - "@esbuild/linux-loong64@0.25.8": { - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", - "os": ["linux"], - "cpu": ["loong64"] - }, "@esbuild/linux-mips64el@0.24.2": { "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", "os": ["linux"], "cpu": ["mips64el"] }, - "@esbuild/linux-mips64el@0.25.8": { - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", - "os": ["linux"], - "cpu": ["mips64el"] - }, "@esbuild/linux-ppc64@0.24.2": { "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", "os": ["linux"], "cpu": ["ppc64"] }, - "@esbuild/linux-ppc64@0.25.8": { - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", - "os": ["linux"], - "cpu": ["ppc64"] - }, "@esbuild/linux-riscv64@0.24.2": { "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", "os": ["linux"], "cpu": ["riscv64"] }, - "@esbuild/linux-riscv64@0.25.8": { - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", - "os": ["linux"], - "cpu": ["riscv64"] - }, "@esbuild/linux-s390x@0.24.2": { "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", "os": ["linux"], "cpu": ["s390x"] }, - "@esbuild/linux-s390x@0.25.8": { - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", - "os": ["linux"], - "cpu": ["s390x"] - }, "@esbuild/linux-x64@0.24.2": { "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", "os": ["linux"], "cpu": ["x64"] }, - "@esbuild/linux-x64@0.25.8": { - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", - "os": ["linux"], - "cpu": ["x64"] - }, "@esbuild/netbsd-arm64@0.24.2": { "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", "os": ["netbsd"], "cpu": ["arm64"] }, - "@esbuild/netbsd-arm64@0.25.8": { - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", - "os": ["netbsd"], - "cpu": ["arm64"] - }, "@esbuild/netbsd-x64@0.24.2": { "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "os": ["netbsd"], "cpu": ["x64"] }, - "@esbuild/netbsd-x64@0.25.8": { - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", - "os": ["netbsd"], - "cpu": ["x64"] - }, "@esbuild/openbsd-arm64@0.24.2": { "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "os": ["openbsd"], "cpu": ["arm64"] }, - "@esbuild/openbsd-arm64@0.25.8": { - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", - "os": ["openbsd"], - "cpu": ["arm64"] - }, "@esbuild/openbsd-x64@0.24.2": { "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", "os": ["openbsd"], "cpu": ["x64"] }, - "@esbuild/openbsd-x64@0.25.8": { - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", - "os": ["openbsd"], - "cpu": ["x64"] - }, - "@esbuild/openharmony-arm64@0.25.8": { - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", - "os": ["openharmony"], - "cpu": ["arm64"] - }, "@esbuild/sunos-x64@0.24.2": { "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", "os": ["sunos"], "cpu": ["x64"] }, - "@esbuild/sunos-x64@0.25.8": { - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", - "os": ["sunos"], - "cpu": ["x64"] - }, "@esbuild/win32-arm64@0.24.2": { "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", "os": ["win32"], "cpu": ["arm64"] }, - "@esbuild/win32-arm64@0.25.8": { - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", - "os": ["win32"], - "cpu": ["arm64"] - }, "@esbuild/win32-ia32@0.24.2": { "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", "os": ["win32"], "cpu": ["ia32"] }, - "@esbuild/win32-ia32@0.25.8": { - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", - "os": ["win32"], - "cpu": ["ia32"] - }, "@esbuild/win32-x64@0.24.2": { "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", "os": ["win32"], "cpu": ["x64"] }, - "@esbuild/win32-x64@0.25.8": { - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", - "os": ["win32"], - "cpu": ["x64"] - }, "@isaacs/balanced-match@4.0.1": { "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" }, @@ -625,12 +525,128 @@ "@isaacs/balanced-match" ] }, - "@types/node@22.12.0": { - "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==", + "@jridgewell/gen-mapping@0.3.13": { + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": [ + "@jridgewell/sourcemap-codec", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/remapping@2.3.5": { + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dependencies": [ + "@jridgewell/gen-mapping", + "@jridgewell/trace-mapping" + ] + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/sourcemap-codec@1.5.5": { + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping@0.3.31": { + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": [ + "@jridgewell/resolve-uri", + "@jridgewell/sourcemap-codec" + ] + }, + "@sveltejs/acorn-typescript@1.0.7_acorn@8.14.1": { + "integrity": "sha512-znp1A/Y1Jj4l/Zy7PX5DZKBE0ZNY+5QBngiE21NJkfSTyzzC5iKNWOtwFXKtIrn7MXEFBck4jD95iBNkGjK92Q==", + "dependencies": [ + "acorn" + ] + }, + "@types/diff@5.2.3": { + "integrity": "sha512-K0Oqlrq3kQMaO2RhfrNQX5trmt+XLyom88zS0u84nnIcLvFnRUMRRHmrGny5GSM+kNO9IZLARsdQHDzkhAgmrQ==" + }, + "@types/estree@1.0.8": { + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "@types/node@24.2.0": { + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", "dependencies": [ "undici-types" ] }, + "@types/ws@8.18.1": { + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dependencies": [ + "@types/node" + ] + }, + "@vue/compiler-core@3.5.25": { + "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", + "dependencies": [ + "@babel/parser", + "@vue/shared", + "entities", + "estree-walker", + "source-map-js" + ] + }, + "@vue/compiler-dom@3.5.25": { + "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", + "dependencies": [ + "@vue/compiler-core", + "@vue/shared" + ] + }, + "@vue/compiler-sfc@3.5.25": { + "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", + "dependencies": [ + "@babel/parser", + "@vue/compiler-core", + "@vue/compiler-dom", + "@vue/compiler-ssr", + "@vue/shared", + "estree-walker", + "magic-string", + "postcss", + "source-map-js" + ] + }, + "@vue/compiler-ssr@3.5.25": { + "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", + "dependencies": [ + "@vue/compiler-dom", + "@vue/shared" + ] + }, + "@vue/reactivity@3.5.25": { + "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", + "dependencies": [ + "@vue/shared" + ] + }, + "@vue/runtime-core@3.5.25": { + "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", + "dependencies": [ + "@vue/reactivity", + "@vue/shared" + ] + }, + "@vue/runtime-dom@3.5.25": { + "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", + "dependencies": [ + "@vue/reactivity", + "@vue/runtime-core", + "@vue/shared", + "csstype" + ] + }, + "@vue/server-renderer@3.5.25_vue@3.5.25__typescript@4.9.5_typescript@4.9.5": { + "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", + "dependencies": [ + "@vue/compiler-ssr", + "@vue/shared", + "vue" + ] + }, + "@vue/shared@3.5.25": { + "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==" + }, "@windmill-labs/shared-utils@1.0.1": { "integrity": "sha512-DUMzPIFCKImuGpbuHXXmGGUT3VXYlgrv/jIIEOW+Iig+9tZvYqOUxfgn32lDhm73k82xBg8MdAf+0qABzfqFeQ==" }, @@ -644,6 +660,16 @@ "negotiator" ] }, + "acorn@8.14.1": { + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "bin": true + }, + "aria-query@5.3.2": { + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==" + }, + "axobject-query@4.1.0": { + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==" + }, "body-parser@2.2.0": { "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dependencies": [ @@ -687,6 +713,9 @@ "windmill-client" ] }, + "clsx@2.1.1": { + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" + }, "content-disposition@1.0.0": { "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dependencies": [ @@ -705,6 +734,9 @@ "core-util-is@1.0.3": { "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "csstype@3.2.3": { + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, "debug@4.4.1": { "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": [ @@ -727,6 +759,9 @@ "depd@2.0.0": { "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, + "devalue@5.5.0": { + "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==" + }, "diff@8.0.2": { "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==" }, @@ -744,6 +779,9 @@ "encodeurl@2.0.0": { "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, + "entities@4.5.0": { + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, "es-define-property@1.0.1": { "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, @@ -759,67 +797,49 @@ "es-errors" ] }, + "esbuild-plugin-vue3@0.5.1_vue@3.5.25__typescript@4.9.5_typescript@4.9.5": { + "integrity": "sha512-rhTPImJ1Zi7FbVa4xWlu9dJdt+mqWxc9Z+AQd+ArbHHwtyQRe8FvER8gaTw0O6bNsBjAtU5rq0rpZEkP3QaThg==", + "dependencies": [ + "typescript", + "vue" + ] + }, + "esbuild-svelte@0.9.3_esbuild@0.24.2_svelte@5.45.2__acorn@8.14.1": { + "integrity": "sha512-CgEcGY1r/d16+aggec3czoFBEBaYIrFOnMxpsO6fWNaNEqHregPN5DLAPZDqrL7rXDNplW+WMu8s3GMq9FqgJA==", + "dependencies": [ + "@jridgewell/trace-mapping", + "esbuild", + "svelte" + ] + }, "esbuild@0.24.2": { "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", "optionalDependencies": [ - "@esbuild/aix-ppc64@0.24.2", - "@esbuild/android-arm@0.24.2", - "@esbuild/android-arm64@0.24.2", - "@esbuild/android-x64@0.24.2", - "@esbuild/darwin-arm64@0.24.2", - "@esbuild/darwin-x64@0.24.2", - "@esbuild/freebsd-arm64@0.24.2", - "@esbuild/freebsd-x64@0.24.2", - "@esbuild/linux-arm@0.24.2", - "@esbuild/linux-arm64@0.24.2", - "@esbuild/linux-ia32@0.24.2", - "@esbuild/linux-loong64@0.24.2", - "@esbuild/linux-mips64el@0.24.2", - "@esbuild/linux-ppc64@0.24.2", - "@esbuild/linux-riscv64@0.24.2", - "@esbuild/linux-s390x@0.24.2", - "@esbuild/linux-x64@0.24.2", - "@esbuild/netbsd-arm64@0.24.2", - "@esbuild/netbsd-x64@0.24.2", - "@esbuild/openbsd-arm64@0.24.2", - "@esbuild/openbsd-x64@0.24.2", - "@esbuild/sunos-x64@0.24.2", - "@esbuild/win32-arm64@0.24.2", - "@esbuild/win32-ia32@0.24.2", - "@esbuild/win32-x64@0.24.2" - ], - "scripts": true, - "bin": true - }, - "esbuild@0.25.8": { - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", - "optionalDependencies": [ - "@esbuild/aix-ppc64@0.25.8", - "@esbuild/android-arm@0.25.8", - "@esbuild/android-arm64@0.25.8", - "@esbuild/android-x64@0.25.8", - "@esbuild/darwin-arm64@0.25.8", - "@esbuild/darwin-x64@0.25.8", - "@esbuild/freebsd-arm64@0.25.8", - "@esbuild/freebsd-x64@0.25.8", - "@esbuild/linux-arm@0.25.8", - "@esbuild/linux-arm64@0.25.8", - "@esbuild/linux-ia32@0.25.8", - "@esbuild/linux-loong64@0.25.8", - "@esbuild/linux-mips64el@0.25.8", - "@esbuild/linux-ppc64@0.25.8", - "@esbuild/linux-riscv64@0.25.8", - "@esbuild/linux-s390x@0.25.8", - "@esbuild/linux-x64@0.25.8", - "@esbuild/netbsd-arm64@0.25.8", - "@esbuild/netbsd-x64@0.25.8", - "@esbuild/openbsd-arm64@0.25.8", - "@esbuild/openbsd-x64@0.25.8", - "@esbuild/openharmony-arm64", - "@esbuild/sunos-x64@0.25.8", - "@esbuild/win32-arm64@0.25.8", - "@esbuild/win32-ia32@0.25.8", - "@esbuild/win32-x64@0.25.8" + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" ], "scripts": true, "bin": true @@ -827,6 +847,18 @@ "escape-html@1.0.3": { "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "esm-env@1.2.2": { + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" + }, + "esrap@2.2.0": { + "integrity": "sha512-WBmtxe7R9C5mvL4n2le8nMUe4mD5V9oiK2vJpQ9I3y20ENPUomPcphBXE8D1x/Bm84oN1V+lOfgXxtqmxTp3Xg==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, + "estree-walker@2.0.2": { + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "etag@1.8.1": { "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, @@ -857,7 +889,7 @@ "router", "send", "serve-static", - "statuses@2.0.2", + "statuses", "type-is", "vary" ] @@ -870,7 +902,7 @@ "escape-html", "on-finished", "parseurl", - "statuses@2.0.2" + "statuses" ] }, "forwarded@0.2.0": { @@ -925,7 +957,7 @@ "depd", "inherits", "setprototypeof", - "statuses@2.0.1", + "statuses", "toidentifier" ] }, @@ -958,6 +990,12 @@ "is-promise@4.0.0": { "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, + "is-reference@3.0.3": { + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dependencies": [ + "@types/estree" + ] + }, "is-wsl@3.1.0": { "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dependencies": [ @@ -991,6 +1029,15 @@ "immediate" ] }, + "locate-character@3.0.0": { + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec" + ] + }, "math-intrinsics@1.1.0": { "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, @@ -1018,6 +1065,10 @@ "ms@2.1.3": { "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true + }, "negotiator@1.0.0": { "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" }, @@ -1054,6 +1105,17 @@ "path-to-regexp@8.2.0": { "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==" }, + "picocolors@1.1.1": { + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "postcss@8.5.6": { + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dependencies": [ + "nanoid", + "picocolors", + "source-map-js" + ] + }, "process-nextick-args@2.0.1": { "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, @@ -1129,7 +1191,7 @@ "ms", "on-finished", "range-parser", - "statuses@2.0.2" + "statuses" ] }, "serve-static@2.2.0": { @@ -1183,12 +1245,12 @@ "side-channel-weakmap" ] }, + "source-map-js@1.2.1": { + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, "statuses@2.0.1": { "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, - "statuses@2.0.2": { - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" - }, "string_decoder@1.1.1": { "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": [ @@ -1199,6 +1261,33 @@ "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", "deprecated": true }, + "svelte-preprocess@6.0.3_svelte@5.45.2__acorn@8.14.1": { + "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", + "dependencies": [ + "svelte" + ], + "scripts": true + }, + "svelte@5.45.2_acorn@8.14.1": { + "integrity": "sha512-yyXdW2u3H0H/zxxWoGwJoQlRgaSJLp+Vhktv12iRw2WRDlKqUPT54Fi0K/PkXqrdkcQ98aBazpy0AH4BCBVfoA==", + "dependencies": [ + "@jridgewell/remapping", + "@jridgewell/sourcemap-codec", + "@sveltejs/acorn-typescript", + "@types/estree", + "acorn", + "aria-query", + "axobject-query", + "clsx", + "devalue", + "esm-env", + "esrap", + "is-reference", + "locate-character", + "magic-string", + "zimmerframe" + ] + }, "toidentifier@1.0.1": { "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, @@ -1210,8 +1299,12 @@ "mime-types" ] }, - "undici-types@6.20.0": { - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + "typescript@4.9.5": { + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": true + }, + "undici-types@7.10.0": { + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" }, "unpipe@1.0.0": { "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" @@ -1222,6 +1315,20 @@ "vary@1.1.2": { "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, + "vue@3.5.25_typescript@4.9.5": { + "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", + "dependencies": [ + "@vue/compiler-dom", + "@vue/compiler-sfc", + "@vue/runtime-dom", + "@vue/server-renderer", + "@vue/shared", + "typescript" + ], + "optionalPeers": [ + "typescript" + ] + }, "windmill-client@1.515.1": { "integrity": "sha512-o6qynOEbPubZTZUOLLs2Z9f+uBZQJUCw/+YWgvI6p8nu5BJ6J3N/wEfbY1X5TTnJNuqahQ0UgimYzhurT5XQFw==" }, @@ -1240,6 +1347,9 @@ "is-wsl" ] }, + "zimmerframe@1.1.4": { + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==" + }, "zod@3.25.76": { "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" } @@ -1511,7 +1621,8 @@ "jsr:@windmill-labs/cliffy-command@^1.0.0-rc.5", "jsr:@windmill-labs/cliffy-prompt@^1.0.0-rc.5", "jsr:@windmill-labs/cliffy-table@^1.0.0-rc.5", - "npm:@types/diff@^5.2.2" + "npm:@types/diff@^5.2.2", + "npm:ws@8.18.0" ] } } diff --git a/cli/deps.ts b/cli/deps.ts index adc49d62c6..28d8909d3c 100644 --- a/cli/deps.ts +++ b/cli/deps.ts @@ -59,6 +59,9 @@ export * as open from "npm:open"; export * as esMain from "npm:es-main"; export * as windmillUtils from "jsr:@windmill-labs/shared-utils@1.0.10"; +// needed for dnt transform +import * as wsTypes from "npm:@types/ws"; + import { OpenAPI } from "./gen/index.ts"; export function setClient(token?: string, baseUrl?: string) { diff --git a/cli/src/commands/app/bundle.ts b/cli/src/commands/app/bundle.ts index 6a64ed9252..daa1dd24d0 100644 --- a/cli/src/commands/app/bundle.ts +++ b/cli/src/commands/app/bundle.ts @@ -2,6 +2,7 @@ import * as fs from "node:fs"; import * as path from "node:path"; import process from "node:process"; +import { spawn } from "node:child_process"; import { log, colors } from "../../../deps.ts"; import { windmillUtils } from "../../../deps.ts"; export interface BundleOptions { @@ -30,6 +31,66 @@ export const DEFAULT_BUILD_OPTIONS = { write: true, }; +/** + * Detects which frontend frameworks are present in package.json + */ +export function detectFrameworks(appDir: string): { svelte: boolean; vue: boolean } { + const packageJsonPath = path.join(appDir, "package.json"); + if (!fs.existsSync(packageJsonPath)) { + return { svelte: false, vue: false }; + } + + try { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")); + const allDeps = { + ...packageJson.dependencies, + ...packageJson.devDependencies, + }; + + return { + svelte: "svelte" in allDeps, + vue: "vue" in allDeps, + }; + } catch { + return { svelte: false, vue: false }; + } +} + +/** + * Creates framework-specific esbuild plugins based on detected dependencies + */ +export async function createFrameworkPlugins(appDir: string): Promise { + const frameworks = detectFrameworks(appDir); + const plugins: any[] = []; + + if (frameworks.svelte) { + log.info(colors.blue("🔧 Svelte detected, adding svelte plugin...")); + try { + const esbuildSvelte = await import("npm:esbuild-svelte@0.9.3"); + const sveltePreprocess = await import("npm:svelte-preprocess@6.0.3"); + plugins.push( + esbuildSvelte.default({ + preprocess: sveltePreprocess.default(), + }) + ); + } catch (error: any) { + log.warn(colors.yellow(`Failed to load svelte plugin: ${error.message}`)); + } + } + + if (frameworks.vue) { + log.info(colors.blue("🔧 Vue detected, adding vue plugin...")); + try { + const esbuildPluginVue = await import("npm:esbuild-plugin-vue3@0.5.1"); + plugins.push(esbuildPluginVue.default()); + } catch (error: any) { + log.warn(colors.yellow(`Failed to load vue plugin: ${error.message}`)); + } + } + + return plugins; +} + /** * Ensures node_modules exists in the specified directory * Runs npm install if node_modules is missing @@ -41,13 +102,15 @@ export async function ensureNodeModules(appDir?: string): Promise { if (!fs.existsSync(nodeModulesPath)) { log.info(colors.yellow("📦 node_modules not found, running npm install...")); - const npmInstall = new Deno.Command("npm", { - args: ["install"], - cwd: targetDir, - stdout: "inherit", - stderr: "inherit", + const code = await new Promise((resolve, reject) => { + const npmInstall = spawn("npm", ["install"], { + cwd: targetDir, + stdio: "inherit", + shell: true, + }); + npmInstall.on("close", (code) => resolve(code ?? 0)); + npmInstall.on("error", reject); }); - const { code } = await npmInstall.output(); if (code !== 0) { throw new Error(`npm install failed with exit code ${code}`); } @@ -66,13 +129,16 @@ export async function createBundle( // Dynamically import esbuild const esbuild = await import("npm:esbuild@0.24.2"); - const entryPoint = options.entryPoint ?? "index.tsx"; + // Detect frameworks to determine default entry point + const frameworks = detectFrameworks(process.cwd()); + const defaultEntry = (frameworks.svelte || frameworks.vue) ? "index.ts" : "index.tsx"; + + const entryPoint = options.entryPoint ?? defaultEntry; const outDir = options.outDir ?? "dist"; const sourcemap = options.sourcemap ?? false; const minify = options.minify ?? true; const production = options.production ?? true; - // Verify entry point exists if (!fs.existsSync(entryPoint)) { throw new Error( @@ -81,9 +147,12 @@ export async function createBundle( } // Ensure node_modules exists in the app directory - const appDir = path.dirname(entryPoint); + const appDir = path.dirname(entryPoint) || process.cwd(); await ensureNodeModules(appDir); + // Load framework-specific plugins (svelte, vue) based on package.json + const frameworkPlugins = await createFrameworkPlugins(appDir); + // Ensure output directory exists const distDir = path.join(process.cwd(), outDir); if (!fs.existsSync(distDir)) { @@ -131,7 +200,7 @@ export async function createBundle( define: { "process.env.NODE_ENV": production ? '"production"' : '"development"', }, - plugins: [wmillPlugin], + plugins: [...frameworkPlugins, wmillPlugin], }; log.info(colors.blue("📦 Building bundle...")); diff --git a/cli/src/commands/app/dev.ts b/cli/src/commands/app/dev.ts index b4c24bffc9..bf49fab121 100644 --- a/cli/src/commands/app/dev.ts +++ b/cli/src/commands/app/dev.ts @@ -15,8 +15,8 @@ import * as path from "node:path"; import process from "node:process"; import { Buffer } from "node:buffer"; import { writeFileSync } from "node:fs"; -import { WebSocketServer, WebSocket } from "npm:ws@8.18.0"; -import { getDevBuildOptions, ensureNodeModules } from "./bundle.ts"; +import { WebSocketServer, WebSocket } from "npm:ws"; +import { getDevBuildOptions, ensureNodeModules, createFrameworkPlugins, detectFrameworks } from "./bundle.ts"; import { wmillTsDev as wmillTs } from "./wmillTsDev.ts"; import * as wmill from "../../../gen/services.gen.ts"; import { resolveWorkspace } from "../../core/context.ts"; @@ -104,9 +104,13 @@ async function dev(opts: DevOptions) { port: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map((p) => p + DEFAULT_PORT), })); const host = opts.host ?? DEFAULT_HOST; - const entryPoint = opts.entry ?? "index.tsx"; const shouldOpen = opts.open ?? true; + // Detect frameworks to determine default entry point + const frameworks = detectFrameworks(process.cwd()); + const defaultEntry = (frameworks.svelte || frameworks.vue) ? "index.ts" : "index.tsx"; + const entryPoint = opts.entry ?? defaultEntry; + // Verify entry point exists if (!fs.existsSync(entryPoint)) { log.error( @@ -118,7 +122,7 @@ async function dev(opts: DevOptions) { } // Ensure node_modules exists - const appDir = path.dirname(entryPoint); + const appDir = path.dirname(entryPoint) || process.cwd(); await ensureNodeModules(appDir); // In-memory cache of inferred schemas (runnableId -> schema) @@ -144,6 +148,9 @@ async function dev(opts: DevOptions) { const buildOptions = getDevBuildOptions(entryPoint); + // Load framework-specific plugins (svelte, vue) based on package.json + const frameworkPlugins = await createFrameworkPlugins(appDir); + const wmillPlugin = { name: "wmill-virtual", setup(build: any) { @@ -174,10 +181,12 @@ async function dev(opts: DevOptions) { }, }; + // Create esbuild context const ctx = await esbuild.context({ ...buildOptions, plugins: [ + ...frameworkPlugins, { name: "notify-on-rebuild", setup(build: any) { @@ -218,7 +227,7 @@ async function dev(opts: DevOptions) { runnablesWatcher = Deno.watchFs(runnablesPath); // Per-file debounce timeouts for schema inference (longer debounce for typing) - const schemaInferenceTimeouts: Record = {}; + const schemaInferenceTimeouts: Record = {}; const SCHEMA_DEBOUNCE_MS = 500; // Wait 500ms after last change before inferring schema // Handle runnables file changes in the background @@ -594,9 +603,7 @@ const command = new Command() .option("--host ", "Host to bind the dev server to", { default: DEFAULT_HOST, }) - .option("--entry ", "Entry point file for the application", { - default: "index.tsx", - }) + .option("--entry ", "Entry point file (default: index.ts for Svelte/Vue, index.tsx otherwise)") .option("--no-open", "Don't automatically open the browser") .action(dev as any); diff --git a/cli/src/commands/app/raw_apps.ts b/cli/src/commands/app/raw_apps.ts index 5bb1cb756c..18361819e5 100644 --- a/cli/src/commands/app/raw_apps.ts +++ b/cli/src/commands/app/raw_apps.ts @@ -14,7 +14,7 @@ import { Policy } from "../../../gen/types.gen.ts"; import { GlobalOptions, isSuperset } from "../../types.ts"; import { replaceInlineScripts, repopulateFields } from "./apps.ts"; -import { createBundle } from "./bundle.ts"; +import { createBundle, detectFrameworks } from "./bundle.ts"; import { mergeConfigWithConfigFile, SyncOptions } from "../../core/conf.ts"; export interface AppFile { @@ -102,7 +102,10 @@ export async function pushRawApp( const files = await collectAppFiles(localPath); async function createBundleRaw() { log.info(colors.yellow.bold(`Creating raw app ${remotePath} bundle...`)); - const entryPoint = localPath + "index.tsx"; + // Detect frameworks to determine entry point + const frameworks = detectFrameworks(localPath); + const entryFile = (frameworks.svelte || frameworks.vue) ? "index.ts" : "index.tsx"; + const entryPoint = localPath + entryFile; return await createBundle({ entryPoint: entryPoint, production: true, diff --git a/cli/src/commands/dev/dev.ts b/cli/src/commands/dev/dev.ts index 87ef3458d1..63c96bb8e8 100644 --- a/cli/src/commands/dev/dev.ts +++ b/cli/src/commands/dev/dev.ts @@ -167,7 +167,7 @@ async function dev(opts: GlobalOptions & SyncOptions) { ws.on("message", (message: WebSocket.RawData) => { let data; try { - data = JSON.parse(message); + data = JSON.parse(message.toString()); } catch (e) { console.log("Received invalid JSON: " + message + " " + e); return; diff --git a/cli/src/commands/script/script.ts b/cli/src/commands/script/script.ts index 7b35d859f4..97a4f085cc 100644 --- a/cli/src/commands/script/script.ts +++ b/cli/src/commands/script/script.ts @@ -228,7 +228,7 @@ export async function handleFile( }).toString(); log.info("Custom bundler executed for " + path); } else { - const esbuild = await import("npm:esbuild"); + const esbuild = await import("npm:esbuild@0.24.2"); log.info(`Started bundling ${path} ...`); const startTime = performance.now(); @@ -246,11 +246,15 @@ export async function handleFile( platform: "node", packages: "bundle", target: format == "cjs" ? "node20.15.1" : "esnext", - ...(codebase.banner != null && { banner: codebase.banner }), + banner: codebase.banner, + // ...(codebase.banner != null && { banner: codebase.banner }), }); const endTime = performance.now(); bundleContent = out.outputFiles[0].text; - outputFiles = out.outputFiles; + outputFiles = out.outputFiles ?? []; + if (outputFiles.length == 0) { + throw new Error(`No output files found for ${path}`); + } log.info( `Finished bundling ${path}: ${(bundleContent.length / 1024).toFixed( 0 diff --git a/cli/src/core/conf.ts b/cli/src/core/conf.ts index d56a97c5b4..b2d04c5f6b 100644 --- a/cli/src/core/conf.ts +++ b/cli/src/core/conf.ts @@ -102,7 +102,9 @@ export interface Codebase { inject?: string[]; loader?: any; format?: "cjs" | "esm"; - banner?: string | { js?: string }; + banner?: { + [type: string]: string; +}; } function getGitRepoRoot(): string | null { diff --git a/frontend/scripts/untar_ui_builder.js b/frontend/scripts/untar_ui_builder.js index 4a2edc71de..06704bc4f4 100644 --- a/frontend/scripts/untar_ui_builder.js +++ b/frontend/scripts/untar_ui_builder.js @@ -20,7 +20,7 @@ console.log('Running postinstall for root project'); import { x } from 'tar' -const tarUrl = 'https://pub-06154ed168a24e73a86ab84db6bf15d8.r2.dev/ui_builder-fa4de3c.tar.gz' +const tarUrl = 'https://pub-06154ed168a24e73a86ab84db6bf15d8.r2.dev/ui_builder-b4fcf00.tar.gz' const outputTarPath = path.join(process.cwd(), 'ui_builder.tar.gz') const extractTo = path.join(process.cwd(), 'static/ui_builder/') diff --git a/frontend/src/routes/(root)/(logged)/apps_raw/add/+page.svelte b/frontend/src/routes/(root)/(logged)/apps_raw/add/+page.svelte index c884dbc2e4..c4d2861404 100644 --- a/frontend/src/routes/(root)/(logged)/apps_raw/add/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/apps_raw/add/+page.svelte @@ -24,10 +24,10 @@ $importStore = undefined } - const state = nodraft ? undefined : localStorage.getItem('rawapp') + const appState = nodraft ? undefined : localStorage.getItem('rawapp') - let summary = '' - let files: Record = react19Template + let summary = $state('') + let files: Record = $state(react19Template) afterNavigate(() => { if (nodraft) { let url = new URL($page.url.href) @@ -35,15 +35,15 @@ replaceState(url.toString(), $page.state) } }) - let policy: Policy = { + let policy: Policy = $state({ on_behalf_of: $userStore?.username.includes('@') ? $userStore?.username : `u/${$userStore?.username}`, on_behalf_of_email: $userStore?.email, execution_mode: 'publisher' - } + }) - let runnables: Record = { + let runnables: Record = $state({ a: { name: 'a', fields: {}, @@ -67,7 +67,7 @@ } } } - } + }) loadApp() function extractValue(value: any) { @@ -104,7 +104,7 @@ console.log('App loaded from template id') sendUserToast('App loaded from template') goto('?', { replaceState: true }) - } else if (!templatePath && state) { + } else if (!templatePath && appState) { console.log('App loaded from browser stored autosave') sendUserToast('App restored from browser stored autosave', false, [ { @@ -115,7 +115,7 @@ } } ]) - let decoded = decodeState(state) + let decoded = decodeState(appState) extractValue(decoded) } } @@ -143,8 +143,8 @@ files: vueTemplate } ] - let templatePicker = nodraft != null - let hide = false + let templatePicker = $state(nodraft != null) + let reloadCounter = $state(0) {#if templatePicker} @@ -152,12 +152,10 @@
{#each templates as t}
{/if} -{#if !hide} +{#key reloadCounter} { goto(`/apps_raw/edit/${event.detail}`) @@ -186,4 +184,4 @@ {summary} newApp /> -{/if} +{/key} diff --git a/frontend/src/routes/(root)/(logged)/apps_raw/add/templates.ts b/frontend/src/routes/(root)/(logged)/apps_raw/add/templates.ts index 9a719d4bf4..a6d149ee4a 100644 --- a/frontend/src/routes/(root)/(logged)/apps_raw/add/templates.ts +++ b/frontend/src/routes/(root)/(logged)/apps_raw/add/templates.ts @@ -122,7 +122,7 @@ export const svelte5Template = { '/index.css': indexCss, '/package.json': `{ "dependencies": { - "svelte": "5.16.1", + "svelte": "5.45.2", "windmill-client": "^1" } }`,