From 5b0ea4d2dee310d956e5fc9b719077d115487d08 Mon Sep 17 00:00:00 2001 From: centdix <40307056+centdix@users.noreply.github.com> Date: Thu, 31 Jul 2025 15:23:39 +0200 Subject: [PATCH] chore: use windmill-utils-internal for cli (#6297) * add utils package * naming * cleaning * simplify assignPath * rename old files * same for locks * create on confirm * default true * use replaceinlinescripts from utils * use extractscriptfromflows * make it compile * cleaning * use argsigtojson * fix * fix missing await * cleaner * cleaning * cleaning * use in frontend * add docs * testing * remove log * use autogenerated types * remove old * fix * cleaning * adapt usage * draft * better build script * fix build * revert to default creation * add docs * remove and rename * make everything work * add await * only if not installed * add vs code setting * add to publish action * fix bc * safer use of sep * fix * do not rename on push * no publish on release * use published package on frontend * nit --- .gitignore | 2 +- cli/.gitignore | 3 +- cli/build-mac.sh | 42 + cli/build.sh | 43 +- cli/deno.lock | 1767 +++-------------- cli/dev.ts | 14 +- cli/flow.ts | 64 +- cli/gen_wm_client-mac.sh | 28 + cli/main.ts | 5 +- cli/metadata.ts | 250 +-- cli/sync.ts | 129 +- cli/windmill-utils-internal/.gitignore | 1 - .../.vscode/settings.json | 3 + .../gen_wm_client-mac.sh | 9 +- cli/windmill-utils-internal/gen_wm_client.sh | 4 - cli/windmill-utils-internal/publish.sh | 11 + .../src/inline-scripts/extractor.ts | 18 +- .../src/inline-scripts/replacer.ts | 64 +- cli/windmill-utils-internal/tsconfig.json | 8 +- frontend/package-lock.json | 7 + frontend/package.json | 1 + .../display/dbtable/InsertRow.svelte | 2 +- frontend/src/lib/infer.ts | 2 +- frontend/src/lib/inferArgSig.ts | 199 -- 24 files changed, 511 insertions(+), 2165 deletions(-) create mode 100755 cli/build-mac.sh create mode 100755 cli/gen_wm_client-mac.sh create mode 100644 cli/windmill-utils-internal/.vscode/settings.json create mode 100755 cli/windmill-utils-internal/publish.sh delete mode 100644 frontend/src/lib/inferArgSig.ts diff --git a/.gitignore b/.gitignore index 04859823c9..7b93b49807 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ CaddyfileRemoteMalo *.swp **/.idea/ .direnv -.vscode +/.vscode .dev-docker-wrapper* backend/.minio-data .aider* diff --git a/cli/.gitignore b/cli/.gitignore index d0b1f2c514..74d3e102f5 100644 --- a/cli/.gitignore +++ b/cli/.gitignore @@ -1,2 +1,3 @@ npm/ -gen/ \ No newline at end of file +gen/ +node_modules/ \ No newline at end of file diff --git a/cli/build-mac.sh b/cli/build-mac.sh new file mode 100755 index 0000000000..7b8406032d --- /dev/null +++ b/cli/build-mac.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +# Generate client files +./gen_wm_client-mac.sh + +# Generate utils client files +./windmill-utils-internal/gen_wm_client-mac.sh + +# Function to add .ts extensions to relative imports +add_ts_extensions() { + find windmill-utils-internal/src -name "*.ts" -type f | while read -r file; do + # Create backup of original + cp "$file" "$file.orig" + + # Add .ts to relative imports that don't already have extensions + gsed -E \ + -e 's/(from[[:space:]]+["'"'"'])(\.[^"'"'"']*[^./][^"'"'"']*)(["'"'"'])/\1\2.ts\3/g' \ + -e 's/(import[[:space:]]+["'"'"'])(\.[^"'"'"']*[^./][^"'"'"']*)(["'"'"'])/\1\2.ts\3/g' \ + "$file.orig" > "$file" + done +} + +# Function to revert to original files +revert_extensions() { + find windmill-utils-internal/src -name "*.orig" -type f | while read -r backup_file; do + original_file="${backup_file%.orig}" + mv "$backup_file" "$original_file" + done +} + +# Set up trap to ensure cleanup happens on exit, error, or interruption +trap 'echo "Cleaning up..."; revert_extensions' EXIT ERR INT TERM + +# Add .ts extensions for Deno +echo "Adding .ts extensions for Deno build..." +add_ts_extensions + +# Run dnt +echo "Running dnt..." +deno run -A dnt.ts + +echo "Build complete!" \ No newline at end of file diff --git a/cli/build.sh b/cli/build.sh index ef91f3a804..aff8432a2a 100755 --- a/cli/build.sh +++ b/cli/build.sh @@ -1,4 +1,45 @@ #!/usr/bin/env bash -# Note for mac OS users: you need to install gnu-sed with `brew install gnu-sed` and use `gsed` instead of `sed`. + +# Set script to exit on any error +set -e + +# Generate client files ./gen_wm_client.sh + +# Generate utils client files +./windmill-utils-internal/gen_wm_client.sh + +# Function to add .ts extensions to relative imports +add_ts_extensions() { + find windmill-utils-internal/src -name "*.ts" -type f | while read -r file; do + # Create backup of original + cp "$file" "$file.orig" + + # Add .ts to relative imports that don't already have extensions + gsed -E \ + -e 's/(from[[:space:]]+["'"'"'])(\.[^"'"'"']*[^./][^"'"'"']*)(["'"'"'])/\1\2.ts\3/g' \ + -e 's/(import[[:space:]]+["'"'"'])(\.[^"'"'"']*[^./][^"'"'"']*)(["'"'"'])/\1\2.ts\3/g' \ + "$file.orig" > "$file" + done +} + +# Function to revert to original files +revert_extensions() { + find windmill-utils-internal/src -name "*.orig" -type f | while read -r backup_file; do + original_file="${backup_file%.orig}" + mv "$backup_file" "$original_file" + done +} + +# Set up trap to ensure cleanup happens on exit, error, or interruption +trap 'echo "Cleaning up..."; revert_extensions' EXIT ERR INT TERM + +# Add .ts extensions for Deno +echo "Adding .ts extensions for Deno build..." +add_ts_extensions + +# Run dnt +echo "Running dnt..." deno run -A dnt.ts + +echo "Build complete!" \ No newline at end of file diff --git a/cli/deno.lock b/cli/deno.lock index a9317589bb..497c0b7ac2 100644 --- a/cli/deno.lock +++ b/cli/deno.lock @@ -58,32 +58,17 @@ "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", - "npm:@ayonli/jsext@*": "0.9.58", - "npm:@oakserver/oak@12": "12.6.2", - "npm:@types/diff@^5.2.2": "5.2.2", - "npm:@types/node@*": "18.16.19", - "npm:diff@*": "5.2.0", + "npm:@ayonli/jsext@*": "1.8.0", + "npm:centdix-utils@*": "1.0.15", + "npm:diff@*": "8.0.2", "npm:es-main@*": "1.3.0", - "npm:esbuild@*": "0.23.0", - "npm:eslint-plugin-import@^2.30.0": "2.30.0_eslint@8.57.1", - "npm:eslint@^9.10.0": "9.10.0", - "npm:express@*": "4.19.2", - "npm:get-port@*": "7.1.0", + "npm:esbuild@*": "0.25.8", + "npm:express@*": "5.1.0", "npm:get-port@7.1.0": "7.1.0", - "npm:gitignore-parser@*": "0.0.2", "npm:jszip@3.7.1": "3.7.1", - "npm:minimatch@*": "10.0.1", - "npm:open@*": "10.1.0", - "npm:windmill-client@1.364.0": "1.364.0", - "npm:windmill-parser-wasm-csharp@*": "1.437.1", - "npm:windmill-parser-wasm-go@*": "1.429.0", - "npm:windmill-parser-wasm-php@*": "1.429.0", - "npm:windmill-parser-wasm-py@*": "1.477.1", - "npm:windmill-parser-wasm-regex@*": "1.439.0", - "npm:windmill-parser-wasm-rust@*": "1.429.0", - "npm:windmill-parser-wasm-ts@*": "1.438.2", - "npm:windmill-parser-wasm-yaml@*": "1.429.0", - "npm:ws@*": "8.18.0" + "npm:minimatch@*": "10.0.3", + "npm:open@*": "10.2.0", + "npm:ws@*": "8.18.3" }, "jsr": { "@david/code-block-writer@13.0.2": { @@ -297,365 +282,121 @@ } }, "npm": { - "@ayonli/jsext@0.9.58": { - "integrity": "sha512-AwGf64K6VqGyYLFA6rgyuU6jBbwUNJctENpW1bZayvXcIprhdfs7cn7S+EXi0pnNLupT9ptODYkKneB3/YuWww==", + "@ayonli/jsext@1.8.0": { + "integrity": "sha512-haJSYDLDaddK2LV1vr/n34lfLqIMdy0PH4+mumLBWMFzjJXhTXew9v6cpkaj9ZJhTbKRb+v+ny/0x3RxlkABZw==", "dependencies": [ - "iconv-lite@0.6.3", + "iconv-lite", "sudo-prompt", - "ws" + "ws", + "zod" ] }, - "@deno/shim-crypto@0.3.1": { - "integrity": "sha512-ed4pNnfur6UbASEgF34gVxR9p7Mc3qF+Ygbmjiil8ws5IhNFhPDFy5vE5hQAUA9JmVsSxXPcVLM5Rf8LOZqQ5Q==" + "@esbuild/aix-ppc64@0.25.8": { + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==" }, - "@deno/shim-deno-test@0.5.0": { - "integrity": "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==" + "@esbuild/android-arm64@0.25.8": { + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==" }, - "@deno/shim-deno@0.17.0": { - "integrity": "sha512-+FzsP65eehAgTQdzt1izLEV17ePCZqHxDQqRDbpRc1yJVYtDI2MvbRq5DvOj90uRt6zKn9qtWpEueDqG1QORhQ==", + "@esbuild/android-arm@0.25.8": { + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==" + }, + "@esbuild/android-x64@0.25.8": { + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==" + }, + "@esbuild/darwin-arm64@0.25.8": { + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==" + }, + "@esbuild/darwin-x64@0.25.8": { + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==" + }, + "@esbuild/freebsd-arm64@0.25.8": { + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==" + }, + "@esbuild/freebsd-x64@0.25.8": { + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==" + }, + "@esbuild/linux-arm64@0.25.8": { + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==" + }, + "@esbuild/linux-arm@0.25.8": { + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==" + }, + "@esbuild/linux-ia32@0.25.8": { + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==" + }, + "@esbuild/linux-loong64@0.25.8": { + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==" + }, + "@esbuild/linux-mips64el@0.25.8": { + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==" + }, + "@esbuild/linux-ppc64@0.25.8": { + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==" + }, + "@esbuild/linux-riscv64@0.25.8": { + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==" + }, + "@esbuild/linux-s390x@0.25.8": { + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==" + }, + "@esbuild/linux-x64@0.25.8": { + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==" + }, + "@esbuild/netbsd-arm64@0.25.8": { + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==" + }, + "@esbuild/netbsd-x64@0.25.8": { + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==" + }, + "@esbuild/openbsd-arm64@0.25.8": { + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==" + }, + "@esbuild/openbsd-x64@0.25.8": { + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==" + }, + "@esbuild/openharmony-arm64@0.25.8": { + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==" + }, + "@esbuild/sunos-x64@0.25.8": { + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==" + }, + "@esbuild/win32-arm64@0.25.8": { + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==" + }, + "@esbuild/win32-ia32@0.25.8": { + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==" + }, + "@esbuild/win32-x64@0.25.8": { + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==" + }, + "@isaacs/balanced-match@4.0.1": { + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" + }, + "@isaacs/brace-expansion@5.0.0": { + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dependencies": [ - "@deno/shim-deno-test", - "which@4.0.0" + "@isaacs/balanced-match" ] }, - "@esbuild/aix-ppc64@0.23.0": { - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==" - }, - "@esbuild/android-arm64@0.23.0": { - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==" - }, - "@esbuild/android-arm@0.23.0": { - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==" - }, - "@esbuild/android-x64@0.23.0": { - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==" - }, - "@esbuild/darwin-arm64@0.23.0": { - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==" - }, - "@esbuild/darwin-x64@0.23.0": { - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==" - }, - "@esbuild/freebsd-arm64@0.23.0": { - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==" - }, - "@esbuild/freebsd-x64@0.23.0": { - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==" - }, - "@esbuild/linux-arm64@0.23.0": { - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==" - }, - "@esbuild/linux-arm@0.23.0": { - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==" - }, - "@esbuild/linux-ia32@0.23.0": { - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==" - }, - "@esbuild/linux-loong64@0.23.0": { - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==" - }, - "@esbuild/linux-mips64el@0.23.0": { - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==" - }, - "@esbuild/linux-ppc64@0.23.0": { - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==" - }, - "@esbuild/linux-riscv64@0.23.0": { - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==" - }, - "@esbuild/linux-s390x@0.23.0": { - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==" - }, - "@esbuild/linux-x64@0.23.0": { - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==" - }, - "@esbuild/netbsd-x64@0.23.0": { - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==" - }, - "@esbuild/openbsd-arm64@0.23.0": { - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==" - }, - "@esbuild/openbsd-x64@0.23.0": { - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==" - }, - "@esbuild/sunos-x64@0.23.0": { - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==" - }, - "@esbuild/win32-arm64@0.23.0": { - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==" - }, - "@esbuild/win32-ia32@0.23.0": { - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==" - }, - "@esbuild/win32-x64@0.23.0": { - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==" - }, - "@eslint-community/eslint-utils@4.4.0_eslint@8.57.1": { - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": [ - "eslint@8.57.1", - "eslint-visitor-keys@3.4.3" - ] - }, - "@eslint-community/eslint-utils@4.4.0_eslint@9.10.0": { - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": [ - "eslint@9.10.0", - "eslint-visitor-keys@3.4.3" - ] - }, - "@eslint-community/regexpp@4.11.1": { - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==" - }, - "@eslint/config-array@0.18.0": { - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", - "dependencies": [ - "@eslint/object-schema", - "debug@4.3.7", - "minimatch@3.1.2" - ] - }, - "@eslint/eslintrc@2.1.4": { - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": [ - "ajv", - "debug@4.3.7", - "espree@9.6.1_acorn@8.12.1", - "globals@13.24.0", - "ignore", - "import-fresh", - "js-yaml", - "minimatch@3.1.2", - "strip-json-comments" - ] - }, - "@eslint/eslintrc@3.1.0": { - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dependencies": [ - "ajv", - "debug@4.3.7", - "espree@10.1.0_acorn@8.12.1", - "globals@14.0.0", - "ignore", - "import-fresh", - "js-yaml", - "minimatch@3.1.2", - "strip-json-comments" - ] - }, - "@eslint/js@8.57.1": { - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==" - }, - "@eslint/js@9.10.0": { - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==" - }, - "@eslint/object-schema@2.1.4": { - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==" - }, - "@eslint/plugin-kit@0.1.0": { - "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", - "dependencies": [ - "levn" - ] - }, - "@fastify/busboy@2.1.1": { - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==" - }, - "@humanwhocodes/config-array@0.13.0": { - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "dependencies": [ - "@humanwhocodes/object-schema", - "debug@4.3.7", - "minimatch@3.1.2" - ] - }, - "@humanwhocodes/module-importer@1.0.1": { - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema@2.0.3": { - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" - }, - "@humanwhocodes/retry@0.3.0": { - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==" - }, - "@nodelib/fs.scandir@2.1.5": { - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": [ - "@nodelib/fs.stat", - "run-parallel" - ] - }, - "@nodelib/fs.stat@2.0.5": { - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk@1.2.8": { - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": [ - "@nodelib/fs.scandir", - "fastq" - ] - }, - "@oakserver/oak@12.6.2": { - "integrity": "sha512-q9LfyC9tWV68me0GEUuA66qbwH8ep0bBdq9V02fePlPmPVUBCAzQQkomyaI/L4Uur+YALVXgLoTaC2rviZ7I4w==", - "dependencies": [ - "@deno/shim-crypto", - "@deno/shim-deno", - "tslib", - "undici" - ] - }, - "@rtsao/scc@1.1.0": { - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" - }, - "@types/diff@5.2.2": { - "integrity": "sha512-qVqLpd49rmJA2nZzLVsmfS/aiiBpfVE95dHhPVwG0NmSBAt+riPxnj53wq2oBq5m4Q2RF1IWFEUpnZTgrQZfEQ==" - }, - "@types/json5@0.0.29": { - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/node@18.16.19": { - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==" - }, - "@ungap/structured-clone@1.2.0": { - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "accepts@1.3.8": { - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "accepts@2.0.0": { + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dependencies": [ "mime-types", "negotiator" ] }, - "acorn-jsx@5.3.2_acorn@8.12.1": { - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dependencies": [ - "acorn" - ] - }, - "acorn@8.12.1": { - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==" - }, - "ajv@6.12.6": { - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": [ - "fast-deep-equal", - "fast-json-stable-stringify", - "json-schema-traverse", - "uri-js" - ] - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": [ - "color-convert" - ] - }, - "argparse@2.0.1": { - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-buffer-byte-length@1.0.1": { - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dependencies": [ - "call-bind", - "is-array-buffer" - ] - }, - "array-flatten@1.1.1": { - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-includes@3.1.8": { - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-object-atoms", - "get-intrinsic", - "is-string" - ] - }, - "array.prototype.findlastindex@1.2.5": { - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-errors", - "es-object-atoms", - "es-shim-unscopables" - ] - }, - "array.prototype.flat@1.3.2": { - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-shim-unscopables" - ] - }, - "array.prototype.flatmap@1.3.2": { - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-shim-unscopables" - ] - }, - "arraybuffer.prototype.slice@1.0.3": { - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dependencies": [ - "array-buffer-byte-length", - "call-bind", - "define-properties", - "es-abstract", - "es-errors", - "get-intrinsic", - "is-array-buffer", - "is-shared-array-buffer" - ] - }, - "available-typed-arrays@1.0.7": { - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": [ - "possible-typed-array-names" - ] - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "body-parser@1.20.2": { - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "body-parser@2.2.0": { + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dependencies": [ "bytes", "content-type", - "debug@2.6.9", - "depd", - "destroy", + "debug", "http-errors", - "iconv-lite@0.4.24", + "iconv-lite", "on-finished", "qs", "raw-body", - "type-is", - "unpipe" - ] - }, - "brace-expansion@1.1.11": { - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": [ - "balanced-match", - "concat-map" - ] - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": [ - "balanced-match" + "type-is" ] }, "bundle-name@4.1.0": { @@ -667,40 +408,28 @@ "bytes@3.1.2": { "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "call-bind@1.0.7": { - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "call-bind-apply-helpers@1.0.2": { + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dependencies": [ - "es-define-property", "es-errors", - "function-bind", - "get-intrinsic", - "set-function-length" + "function-bind" ] }, - "callsites@3.1.0": { - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "chalk@4.1.2": { - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "call-bound@1.0.4": { + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dependencies": [ - "ansi-styles", - "supports-color" + "call-bind-apply-helpers", + "get-intrinsic" ] }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "centdix-utils@1.0.15": { + "integrity": "sha512-bf7a8yAzEiA7a64dQZPZoAt2uGF4m2POEOSyxha6qRUe0j0HVj+WmOuBkFmFJMQlBxQmBxhj2o6lxZ+NtSFyGQ==", "dependencies": [ - "color-name" + "windmill-client" ] }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "concat-map@0.0.1": { - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "content-disposition@0.5.4": { - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "content-disposition@1.0.0": { + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dependencies": [ "safe-buffer@5.2.1" ] @@ -708,68 +437,21 @@ "content-type@1.0.5": { "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, - "cookie-signature@1.0.6": { - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "cookie-signature@1.2.2": { + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==" }, - "cookie@0.6.0": { - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "cookie@0.7.2": { + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" }, "core-util-is@1.0.3": { "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "debug@4.4.1": { + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": [ - "path-key", - "shebang-command", - "which@2.0.2" + "ms" ] }, - "data-view-buffer@1.0.1": { - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dependencies": [ - "call-bind", - "es-errors", - "is-data-view" - ] - }, - "data-view-byte-length@1.0.1": { - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dependencies": [ - "call-bind", - "es-errors", - "is-data-view" - ] - }, - "data-view-byte-offset@1.0.0": { - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": [ - "call-bind", - "es-errors", - "is-data-view" - ] - }, - "debug@2.6.9": { - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": [ - "ms@2.0.0" - ] - }, - "debug@3.2.7": { - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": [ - "ms@2.1.3" - ] - }, - "debug@4.3.7": { - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dependencies": [ - "ms@2.1.3" - ] - }, - "deep-is@0.1.4": { - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, "default-browser-id@5.0.0": { "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==" }, @@ -780,108 +462,31 @@ "default-browser-id" ] }, - "define-data-property@1.1.4": { - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": [ - "es-define-property", - "es-errors", - "gopd" - ] - }, "define-lazy-prop@3.0.0": { "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" }, - "define-properties@1.2.1": { - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": [ - "define-data-property", - "has-property-descriptors", - "object-keys" - ] - }, "depd@2.0.0": { "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, - "destroy@1.2.0": { - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "diff@8.0.2": { + "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==" }, - "diff@5.2.0": { - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" - }, - "doctrine@2.1.0": { - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dunder-proto@1.0.1": { + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": [ - "esutils" - ] - }, - "doctrine@3.0.0": { - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": [ - "esutils" + "call-bind-apply-helpers", + "es-errors", + "gopd" ] }, "ee-first@1.1.1": { "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, - "encodeurl@1.0.2": { - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "encodeurl@2.0.0": { + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, - "es-abstract@1.23.3": { - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dependencies": [ - "array-buffer-byte-length", - "arraybuffer.prototype.slice", - "available-typed-arrays", - "call-bind", - "data-view-buffer", - "data-view-byte-length", - "data-view-byte-offset", - "es-define-property", - "es-errors", - "es-object-atoms", - "es-set-tostringtag", - "es-to-primitive", - "function.prototype.name", - "get-intrinsic", - "get-symbol-description", - "globalthis", - "gopd", - "has-property-descriptors", - "has-proto", - "has-symbols", - "hasown", - "internal-slot", - "is-array-buffer", - "is-callable", - "is-data-view", - "is-negative-zero", - "is-regex", - "is-shared-array-buffer", - "is-string", - "is-typed-array", - "is-weakref", - "object-inspect", - "object-keys", - "object.assign", - "regexp.prototype.flags", - "safe-array-concat", - "safe-regex-test", - "string.prototype.trim", - "string.prototype.trimend", - "string.prototype.trimstart", - "typed-array-buffer", - "typed-array-byte-length", - "typed-array-byte-offset", - "typed-array-length", - "unbox-primitive", - "which-typed-array" - ] - }, - "es-define-property@1.0.0": { - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": [ - "get-intrinsic" - ] + "es-define-property@1.0.1": { + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, "es-errors@1.3.0": { "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" @@ -889,36 +494,14 @@ "es-main@1.3.0": { "integrity": "sha512-AzORKdz1Zt97TzbYQnIrI3ZiibWpRXUfpo/w0xOJ20GpNYd2bd3MU9m31zS/aJ1TJl6JfLTok83Y8HjNunYT0A==" }, - "es-object-atoms@1.0.0": { - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "es-object-atoms@1.1.1": { + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dependencies": [ "es-errors" ] }, - "es-set-tostringtag@2.0.3": { - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dependencies": [ - "get-intrinsic", - "has-tostringtag", - "hasown" - ] - }, - "es-shim-unscopables@1.0.2": { - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": [ - "hasown" - ] - }, - "es-to-primitive@1.2.1": { - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": [ - "is-callable", - "is-date-object", - "is-symbol" - ] - }, - "esbuild@0.23.0": { - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "esbuild@0.25.8": { + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", "dependencies": [ "@esbuild/aix-ppc64", "@esbuild/android-arm", @@ -937,9 +520,11 @@ "@esbuild/linux-riscv64", "@esbuild/linux-s390x", "@esbuild/linux-x64", + "@esbuild/netbsd-arm64", "@esbuild/netbsd-x64", "@esbuild/openbsd-arm64", "@esbuild/openbsd-x64", + "@esbuild/openharmony-arm64", "@esbuild/sunos-x64", "@esbuild/win32-arm64", "@esbuild/win32-ia32", @@ -949,198 +534,19 @@ "escape-html@1.0.3": { "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "escape-string-regexp@4.0.0": { - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint-import-resolver-node@0.3.9": { - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": [ - "debug@3.2.7", - "is-core-module", - "resolve" - ] - }, - "eslint-module-utils@2.11.0": { - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", - "dependencies": [ - "debug@3.2.7" - ] - }, - "eslint-plugin-import@2.30.0_eslint@8.57.1": { - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", - "dependencies": [ - "@rtsao/scc", - "array-includes", - "array.prototype.findlastindex", - "array.prototype.flat", - "array.prototype.flatmap", - "debug@3.2.7", - "doctrine@2.1.0", - "eslint@8.57.1", - "eslint-import-resolver-node", - "eslint-module-utils", - "hasown", - "is-core-module", - "is-glob", - "minimatch@3.1.2", - "object.fromentries", - "object.groupby", - "object.values", - "semver", - "tsconfig-paths" - ] - }, - "eslint-scope@7.2.2": { - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": [ - "esrecurse", - "estraverse" - ] - }, - "eslint-scope@8.0.2": { - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", - "dependencies": [ - "esrecurse", - "estraverse" - ] - }, - "eslint-visitor-keys@3.4.3": { - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" - }, - "eslint-visitor-keys@4.0.0": { - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==" - }, - "eslint@8.57.1": { - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dependencies": [ - "@eslint-community/eslint-utils@4.4.0_eslint@8.57.1", - "@eslint-community/regexpp", - "@eslint/eslintrc@2.1.4", - "@eslint/js@8.57.1", - "@humanwhocodes/config-array", - "@humanwhocodes/module-importer", - "@nodelib/fs.walk", - "@ungap/structured-clone", - "ajv", - "chalk", - "cross-spawn", - "debug@4.3.7", - "doctrine@3.0.0", - "escape-string-regexp", - "eslint-scope@7.2.2", - "eslint-visitor-keys@3.4.3", - "espree@9.6.1_acorn@8.12.1", - "esquery", - "esutils", - "fast-deep-equal", - "file-entry-cache@6.0.1", - "find-up", - "glob-parent", - "globals@13.24.0", - "graphemer", - "ignore", - "imurmurhash", - "is-glob", - "is-path-inside", - "js-yaml", - "json-stable-stringify-without-jsonify", - "levn", - "lodash.merge", - "minimatch@3.1.2", - "natural-compare", - "optionator", - "strip-ansi", - "text-table" - ] - }, - "eslint@9.10.0": { - "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", - "dependencies": [ - "@eslint-community/eslint-utils@4.4.0_eslint@9.10.0", - "@eslint-community/regexpp", - "@eslint/config-array", - "@eslint/eslintrc@3.1.0", - "@eslint/js@9.10.0", - "@eslint/plugin-kit", - "@humanwhocodes/module-importer", - "@humanwhocodes/retry", - "@nodelib/fs.walk", - "ajv", - "chalk", - "cross-spawn", - "debug@4.3.7", - "escape-string-regexp", - "eslint-scope@8.0.2", - "eslint-visitor-keys@4.0.0", - "espree@10.1.0_acorn@8.12.1", - "esquery", - "esutils", - "fast-deep-equal", - "file-entry-cache@8.0.0", - "find-up", - "glob-parent", - "ignore", - "imurmurhash", - "is-glob", - "is-path-inside", - "json-stable-stringify-without-jsonify", - "lodash.merge", - "minimatch@3.1.2", - "natural-compare", - "optionator", - "strip-ansi", - "text-table" - ] - }, - "espree@10.1.0_acorn@8.12.1": { - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", - "dependencies": [ - "acorn", - "acorn-jsx", - "eslint-visitor-keys@4.0.0" - ] - }, - "espree@9.6.1_acorn@8.12.1": { - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": [ - "acorn", - "acorn-jsx", - "eslint-visitor-keys@3.4.3" - ] - }, - "esquery@1.6.0": { - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dependencies": [ - "estraverse" - ] - }, - "esrecurse@4.3.0": { - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": [ - "estraverse" - ] - }, - "estraverse@5.3.0": { - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils@2.0.3": { - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, "etag@1.8.1": { "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, - "express@4.19.2": { - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "express@5.1.0": { + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dependencies": [ "accepts", - "array-flatten", "body-parser", "content-disposition", "content-type", "cookie", "cookie-signature", - "debug@2.6.9", - "depd", + "debug", "encodeurl", "escape-html", "etag", @@ -1148,206 +554,71 @@ "fresh", "http-errors", "merge-descriptors", - "methods", + "mime-types", "on-finished", + "once", "parseurl", - "path-to-regexp", "proxy-addr", "qs", "range-parser", - "safe-buffer@5.2.1", + "router", "send", "serve-static", - "setprototypeof", - "statuses", + "statuses@2.0.2", "type-is", - "utils-merge", "vary" ] }, - "fast-deep-equal@3.1.3": { - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify@2.1.0": { - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein@2.0.6": { - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq@1.17.1": { - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "finalhandler@2.1.0": { + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "dependencies": [ - "reusify" - ] - }, - "file-entry-cache@6.0.1": { - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": [ - "flat-cache@3.2.0" - ] - }, - "file-entry-cache@8.0.0": { - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dependencies": [ - "flat-cache@4.0.1" - ] - }, - "finalhandler@1.2.0": { - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": [ - "debug@2.6.9", + "debug", "encodeurl", "escape-html", "on-finished", "parseurl", - "statuses", - "unpipe" - ] - }, - "find-up@5.0.0": { - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": [ - "locate-path", - "path-exists" - ] - }, - "flat-cache@3.2.0": { - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": [ - "flatted", - "keyv", - "rimraf" - ] - }, - "flat-cache@4.0.1": { - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dependencies": [ - "flatted", - "keyv" - ] - }, - "flatted@3.3.1": { - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" - }, - "for-each@0.3.3": { - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": [ - "is-callable" + "statuses@2.0.2" ] }, "forwarded@0.2.0": { "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "fresh@0.5.2": { - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs.realpath@1.0.0": { - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "fresh@2.0.0": { + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" }, "function-bind@1.1.2": { "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "function.prototype.name@1.1.6": { - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "functions-have-names" - ] - }, - "functions-have-names@1.2.3": { - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "get-intrinsic@1.2.4": { - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "get-intrinsic@1.3.0": { + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": [ + "call-bind-apply-helpers", + "es-define-property", "es-errors", + "es-object-atoms", "function-bind", - "has-proto", + "get-proto", + "gopd", "has-symbols", - "hasown" + "hasown", + "math-intrinsics" ] }, "get-port@7.1.0": { "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==" }, - "get-symbol-description@1.0.2": { - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "get-proto@1.0.1": { + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": [ - "call-bind", - "es-errors", - "get-intrinsic" + "dunder-proto", + "es-object-atoms" ] }, - "gitignore-parser@0.0.2": { - "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==" + "gopd@1.2.0": { + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, - "glob-parent@6.0.2": { - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": [ - "is-glob" - ] - }, - "glob@7.2.3": { - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": [ - "fs.realpath", - "inflight", - "inherits", - "minimatch@3.1.2", - "once", - "path-is-absolute" - ] - }, - "globals@13.24.0": { - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": [ - "type-fest" - ] - }, - "globals@14.0.0": { - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==" - }, - "globalthis@1.0.4": { - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": [ - "define-properties", - "gopd" - ] - }, - "gopd@1.0.1": { - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": [ - "get-intrinsic" - ] - }, - "graphemer@1.4.0": { - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "has-bigints@1.0.2": { - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag@4.0.0": { - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors@1.0.2": { - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": [ - "es-define-property" - ] - }, - "has-proto@1.0.3": { - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" - }, - "has-symbols@1.0.3": { - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag@1.0.2": { - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": [ - "has-symbols" - ] + "has-symbols@1.1.0": { + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, "hasown@2.0.2": { "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", @@ -1361,166 +632,36 @@ "depd", "inherits", "setprototypeof", - "statuses", + "statuses@2.0.1", "toidentifier" ] }, - "iconv-lite@0.4.24": { - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": [ - "safer-buffer" - ] - }, "iconv-lite@0.6.3": { "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": [ "safer-buffer" ] }, - "ignore@5.3.2": { - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" - }, "immediate@3.0.6": { "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, - "import-fresh@3.3.0": { - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": [ - "parent-module", - "resolve-from" - ] - }, - "imurmurhash@0.1.4": { - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight@1.0.6": { - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": [ - "once", - "wrappy" - ] - }, "inherits@2.0.4": { "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "internal-slot@1.0.7": { - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dependencies": [ - "es-errors", - "hasown", - "side-channel" - ] - }, "ipaddr.js@1.9.1": { "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-array-buffer@3.0.4": { - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dependencies": [ - "call-bind", - "get-intrinsic" - ] - }, - "is-bigint@1.0.4": { - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": [ - "has-bigints" - ] - }, - "is-boolean-object@1.1.2": { - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": [ - "call-bind", - "has-tostringtag" - ] - }, - "is-callable@1.2.7": { - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module@2.15.1": { - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dependencies": [ - "hasown" - ] - }, - "is-data-view@1.0.1": { - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dependencies": [ - "is-typed-array" - ] - }, - "is-date-object@1.0.5": { - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": [ - "has-tostringtag" - ] - }, "is-docker@3.0.0": { "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": [ - "is-extglob" - ] - }, "is-inside-container@1.0.0": { "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dependencies": [ "is-docker" ] }, - "is-negative-zero@2.0.3": { - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==" - }, - "is-number-object@1.0.7": { - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": [ - "has-tostringtag" - ] - }, - "is-path-inside@3.0.3": { - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-regex@1.1.4": { - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": [ - "call-bind", - "has-tostringtag" - ] - }, - "is-shared-array-buffer@1.0.3": { - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": [ - "call-bind" - ] - }, - "is-string@1.0.7": { - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": [ - "has-tostringtag" - ] - }, - "is-symbol@1.0.4": { - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": [ - "has-symbols" - ] - }, - "is-typed-array@1.1.13": { - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": [ - "which-typed-array" - ] - }, - "is-weakref@1.0.2": { - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": [ - "call-bind" - ] + "is-promise@4.0.0": { + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, "is-wsl@3.1.0": { "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", @@ -1531,36 +672,6 @@ "isarray@1.0.0": { "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, - "isarray@2.0.5": { - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isexe@3.1.1": { - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" - }, - "js-yaml@4.1.0": { - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": [ - "argparse" - ] - }, - "json-buffer@3.0.1": { - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "json-schema-traverse@0.4.1": { - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify@1.0.1": { - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5@1.0.2": { - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": [ - "minimist" - ] - }, "jszip@3.7.1": { "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "dependencies": [ @@ -1570,121 +681,44 @@ "set-immediate-shim" ] }, - "keyv@4.5.4": { - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": [ - "json-buffer" - ] - }, - "levn@0.4.1": { - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": [ - "prelude-ls", - "type-check" - ] - }, "lie@3.3.0": { "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dependencies": [ "immediate" ] }, - "locate-path@6.0.0": { - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": [ - "p-locate" - ] + "math-intrinsics@1.1.0": { + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "lodash.merge@4.6.2": { - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "media-typer@1.1.0": { + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" }, - "media-typer@0.3.0": { - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "merge-descriptors@2.0.0": { + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==" }, - "merge-descriptors@1.0.1": { - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "mime-db@1.54.0": { + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==" }, - "methods@1.1.2": { - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime-db@1.52.0": { - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types@2.1.35": { - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "mime-types@3.0.1": { + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dependencies": [ "mime-db" ] }, - "mime@1.6.0": { - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "minimatch@10.0.3": { + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", "dependencies": [ - "brace-expansion@2.0.1" + "@isaacs/brace-expansion" ] }, - "minimatch@3.1.2": { - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": [ - "brace-expansion@1.1.11" - ] - }, - "minimist@1.2.8": { - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - }, - "ms@2.0.0": { - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "ms@2.1.3": { "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "natural-compare@1.4.0": { - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "negotiator@1.0.0": { + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" }, - "negotiator@0.6.3": { - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "object-inspect@1.13.2": { - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" - }, - "object-keys@1.1.1": { - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign@4.1.5": { - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": [ - "call-bind", - "define-properties", - "has-symbols", - "object-keys" - ] - }, - "object.fromentries@2.0.8": { - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-object-atoms" - ] - }, - "object.groupby@1.0.3": { - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract" - ] - }, - "object.values@1.2.0": { - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-object-atoms" - ] + "object-inspect@1.13.4": { + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" }, "on-finished@2.4.1": { "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", @@ -1698,70 +732,23 @@ "wrappy" ] }, - "open@10.1.0": { - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "open@10.2.0": { + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "dependencies": [ "default-browser", "define-lazy-prop", "is-inside-container", - "is-wsl" - ] - }, - "optionator@0.9.4": { - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dependencies": [ - "deep-is", - "fast-levenshtein", - "levn", - "prelude-ls", - "type-check", - "word-wrap" - ] - }, - "p-limit@3.1.0": { - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": [ - "yocto-queue" - ] - }, - "p-locate@5.0.0": { - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": [ - "p-limit" + "wsl-utils" ] }, "pako@1.0.11": { "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, - "parent-module@1.0.1": { - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": [ - "callsites" - ] - }, "parseurl@1.3.3": { "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, - "path-exists@4.0.0": { - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute@1.0.1": { - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse@1.0.7": { - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp@0.1.7": { - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "possible-typed-array-names@1.0.0": { - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" - }, - "prelude-ls@1.2.1": { - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "path-to-regexp@8.2.0": { + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==" }, "process-nextick-args@2.0.1": { "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" @@ -1773,27 +760,21 @@ "ipaddr.js" ] }, - "punycode@2.3.1": { - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "qs@6.11.0": { - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "qs@6.14.0": { + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dependencies": [ "side-channel" ] }, - "queue-microtask@1.2.3": { - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, "range-parser@1.2.1": { "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, - "raw-body@2.5.2": { - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "raw-body@3.0.0": { + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "dependencies": [ "bytes", "http-errors", - "iconv-lite@0.4.24", + "iconv-lite", "unpipe" ] }, @@ -1802,100 +783,53 @@ "dependencies": [ "core-util-is", "inherits", - "isarray@1.0.0", + "isarray", "process-nextick-args", "safe-buffer@5.1.2", "string_decoder", "util-deprecate" ] }, - "regexp.prototype.flags@1.5.2": { - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "router@2.2.0": { + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dependencies": [ - "call-bind", - "define-properties", - "es-errors", - "set-function-name" - ] - }, - "resolve-from@4.0.0": { - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve@1.22.8": { - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": [ - "is-core-module", - "path-parse", - "supports-preserve-symlinks-flag" - ] - }, - "reusify@1.0.4": { - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf@3.0.2": { - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": [ - "glob" + "debug", + "depd", + "is-promise", + "parseurl", + "path-to-regexp" ] }, "run-applescript@7.0.0": { "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==" }, - "run-parallel@1.2.0": { - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": [ - "queue-microtask" - ] - }, - "safe-array-concat@1.1.2": { - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dependencies": [ - "call-bind", - "get-intrinsic", - "has-symbols", - "isarray@2.0.5" - ] - }, "safe-buffer@5.1.2": { "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-buffer@5.2.1": { "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex-test@1.0.3": { - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dependencies": [ - "call-bind", - "es-errors", - "is-regex" - ] - }, "safer-buffer@2.1.2": { "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "semver@6.3.1": { - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - }, - "send@0.18.0": { - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "send@1.2.0": { + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dependencies": [ - "debug@2.6.9", - "depd", - "destroy", + "debug", "encodeurl", "escape-html", "etag", "fresh", "http-errors", - "mime", - "ms@2.1.3", + "mime-types", + "ms", "on-finished", "range-parser", - "statuses" + "statuses@2.0.2" ] }, - "serve-static@1.15.0": { - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "serve-static@2.2.0": { + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dependencies": [ "encodeurl", "escape-html", @@ -1903,77 +837,53 @@ "send" ] }, - "set-function-length@1.2.2": { - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": [ - "define-data-property", - "es-errors", - "function-bind", - "get-intrinsic", - "gopd", - "has-property-descriptors" - ] - }, - "set-function-name@2.0.2": { - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": [ - "define-data-property", - "es-errors", - "functions-have-names", - "has-property-descriptors" - ] - }, "set-immediate-shim@1.0.1": { "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" }, "setprototypeof@1.2.0": { "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "side-channel-list@1.0.0": { + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dependencies": [ - "shebang-regex" + "es-errors", + "object-inspect" ] }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel@1.0.6": { - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "side-channel-map@1.0.1": { + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dependencies": [ - "call-bind", + "call-bound", "es-errors", "get-intrinsic", "object-inspect" ] }, + "side-channel-weakmap@1.0.2": { + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": [ + "call-bound", + "es-errors", + "get-intrinsic", + "object-inspect", + "side-channel-map" + ] + }, + "side-channel@1.1.0": { + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": [ + "es-errors", + "object-inspect", + "side-channel-list", + "side-channel-map", + "side-channel-weakmap" + ] + }, "statuses@2.0.1": { "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, - "string.prototype.trim@1.2.9": { - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dependencies": [ - "call-bind", - "define-properties", - "es-abstract", - "es-object-atoms" - ] - }, - "string.prototype.trimend@1.0.8": { - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dependencies": [ - "call-bind", - "define-properties", - "es-object-atoms" - ] - }, - "string.prototype.trimstart@1.0.8": { - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dependencies": [ - "call-bind", - "define-properties", - "es-object-atoms" - ] + "statuses@2.0.2": { + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" }, "string_decoder@1.1.1": { "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", @@ -1981,207 +891,46 @@ "safe-buffer@5.1.2" ] }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": [ - "ansi-regex" - ] - }, - "strip-bom@3.0.0": { - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - }, - "strip-json-comments@3.1.1": { - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, "sudo-prompt@9.2.1": { "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" }, - "supports-color@7.2.0": { - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": [ - "has-flag" - ] - }, - "supports-preserve-symlinks-flag@1.0.0": { - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "text-table@0.2.0": { - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, "toidentifier@1.0.1": { "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, - "tsconfig-paths@3.15.0": { - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": [ - "@types/json5", - "json5", - "minimist", - "strip-bom" - ] - }, - "tslib@2.3.1": { - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "type-check@0.4.0": { - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": [ - "prelude-ls" - ] - }, - "type-fest@0.20.2": { - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "type-is@1.6.18": { - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "type-is@2.0.1": { + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dependencies": [ + "content-type", "media-typer", "mime-types" ] }, - "typed-array-buffer@1.0.2": { - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dependencies": [ - "call-bind", - "es-errors", - "is-typed-array" - ] - }, - "typed-array-byte-length@1.0.1": { - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dependencies": [ - "call-bind", - "for-each", - "gopd", - "has-proto", - "is-typed-array" - ] - }, - "typed-array-byte-offset@1.0.2": { - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dependencies": [ - "available-typed-arrays", - "call-bind", - "for-each", - "gopd", - "has-proto", - "is-typed-array" - ] - }, - "typed-array-length@1.0.6": { - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dependencies": [ - "call-bind", - "for-each", - "gopd", - "has-proto", - "is-typed-array", - "possible-typed-array-names" - ] - }, - "unbox-primitive@1.0.2": { - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": [ - "call-bind", - "has-bigints", - "has-symbols", - "which-boxed-primitive" - ] - }, - "undici@5.28.4": { - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": [ - "@fastify/busboy" - ] - }, "unpipe@1.0.0": { "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, - "uri-js@4.4.1": { - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": [ - "punycode" - ] - }, "util-deprecate@1.0.2": { "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "utils-merge@1.0.1": { - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, "vary@1.1.2": { "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, - "which-boxed-primitive@1.0.2": { - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": [ - "is-bigint", - "is-boolean-object", - "is-number-object", - "is-string", - "is-symbol" - ] - }, - "which-typed-array@1.1.15": { - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": [ - "available-typed-arrays", - "call-bind", - "for-each", - "gopd", - "has-tostringtag" - ] - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": [ - "isexe@2.0.0" - ] - }, - "which@4.0.0": { - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": [ - "isexe@3.1.1" - ] - }, - "windmill-client@1.364.0": { - "integrity": "sha512-UjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIaw==" - }, - "windmill-parser-wasm-csharp@1.437.1": { - "integrity": "sha512-qzB/kUE9JCf1CYFDz+50AI+SUVaZYn3lSgqmJ11Iuibl41AC4EIvfH4zrsOU53lcTOb9b4ZH3D6z9FjCCfqWsw==" - }, - "windmill-parser-wasm-go@1.429.0": { - "integrity": "sha512-M3jeGDqeTyPj9HyyX3msdzMrqIIzlfMfxTMsXS8m7MJp4Cm60qifMxD29Ipxb2B4WdzyGwCSlaBjLsXu0b3c5g==" - }, - "windmill-parser-wasm-php@1.429.0": { - "integrity": "sha512-SGJAtNpfdRZftkGboxWsm/yQDnJBJodwPQUbX2cWk/aoNook6ULesZwsYtBC9WN1VH6TIskLiVPohMmu6jtXmw==" - }, - "windmill-parser-wasm-py@1.477.1": { - "integrity": "sha512-EY3mSMWpqFPzd7fsLg2/hSfQFU8HpW9nplFwm4JHHCDbcTpBzlvzjPJoHAAGO5kMzowAxjqi5ai/mXjeUWuiSg==" - }, - "windmill-parser-wasm-regex@1.439.0": { - "integrity": "sha512-v7vcEOWurGbqvoTdtQ8wauyUYeuQExRCmr7phPtwUwD+1cNbqDrS11kM8p2Na3DXjL9RqGAGjd6uRjNSccZjjQ==" - }, - "windmill-parser-wasm-rust@1.429.0": { - "integrity": "sha512-c8mjpiw8RxoaBDtecb+sKeWM/IOjNr4Y06nHudGu8sMM48MNO1LhgcISLv8wl6Z9zWd7OzQrECJ6RLorpii5Uw==" - }, - "windmill-parser-wasm-ts@1.438.2": { - "integrity": "sha512-PC1KzhJ47Y3fa4XV3uHtUQN52N2WZCA6OxVopwZIZtwaiRS+MY4zhPFUKqe3rc7uoSkzk3qhkIJoggygBBXLCw==" - }, - "windmill-parser-wasm-yaml@1.429.0": { - "integrity": "sha512-elQYkaWOvzB8LiwVV9NbNqrupSmdtRY3mMEl+qmKTJhGLvYrVOxA8zyBtwGK0MGiFhTOO3ZO96LWSlDfBnpN9g==" - }, - "word-wrap@1.2.5": { - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + "windmill-client@1.515.1": { + "integrity": "sha512-o6qynOEbPubZTZUOLLs2Z9f+uBZQJUCw/+YWgvI6p8nu5BJ6J3N/wEfbY1X5TTnJNuqahQ0UgimYzhurT5XQFw==" }, "wrappy@1.0.2": { "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "ws@8.18.0": { - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==" + "ws@8.18.3": { + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==" }, - "yocto-queue@0.1.0": { - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "wsl-utils@0.1.0": { + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dependencies": [ + "is-wsl" + ] + }, + "zod@3.25.76": { + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" } }, "remote": { diff --git a/cli/dev.ts b/cli/dev.ts index 658a1a057a..3644b8a5fa 100644 --- a/cli/dev.ts +++ b/cli/dev.ts @@ -22,7 +22,8 @@ import { import { exts, findGlobalDeps, removeExtensionToPath } from "./script.ts"; import { inferContentTypeFromFilePath } from "./script_common.ts"; import { OpenFlow } from "./gen/types.gen.ts"; -import { FlowFile, replaceInlineScripts } from "./flow.ts"; +import { FlowFile } from "./flow.ts"; +import { replaceInlineScripts } from "./windmill-utils-internal/src/inline-scripts/replacer.ts"; import { parseMetadataFile } from "./metadata.ts"; const PORT = 3001; @@ -74,7 +75,16 @@ async function dev(opts: GlobalOptions & SyncOptions) { const localFlow = (await yamlParseFile( localPath + "flow.yaml" )) as FlowFile; - replaceInlineScripts(localFlow.value.modules, localPath, undefined); + await replaceInlineScripts( + localFlow.value.modules, + async (path: string) => await Deno.readTextFile(localPath + path), + log, + localPath, + SEP, + undefined, + (path: string, newPath: string) => Deno.renameSync(path, newPath), + (path: string) => Deno.removeSync(path), + ); currentLastEdit = { type: "flow", flow: localFlow, diff --git a/cli/flow.ts b/cli/flow.ts index bf3acd67ad..2cbeb06174 100644 --- a/cli/flow.ts +++ b/cli/flow.ts @@ -8,11 +8,12 @@ import { requireLogin } from "./auth.ts"; import { resolveWorkspace, validatePath } from "./context.ts"; import { resolve, track_job } from "./script.ts"; import { defaultFlowDefinition } from "./bootstrap/flow_bootstrap.ts"; -import { blueColor, generateFlowLockInternal } from "./metadata.ts"; +import { generateFlowLockInternal } from "./metadata.ts"; import { SyncOptions, mergeConfigWithConfigFile } from "./conf.ts"; import { FSFSElement, elementsToMap, ignoreF } from "./sync.ts"; -import { readInlinePathSync } from "./utils.ts"; -import { Flow, FlowModule } from "./gen/types.gen.ts"; +import { Flow } from "./gen/types.gen.ts"; +import { replaceInlineScripts } from "./windmill-utils-internal/src/inline-scripts/replacer.ts"; + export interface FlowFile { summary: string; @@ -23,55 +24,6 @@ export interface FlowFile { const alreadySynced: string[] = []; -export function replaceInlineScripts( - modules: FlowModule[], - localPath: string, - removeLocks: string[] | undefined -) { - modules.forEach((m, i) => { - if (!m.value) { - throw Error( - `Module value is undefined for flow module ${i} in ${localPath}` - ); - return; - } - if (m.value.type == "rawscript") { - if (m.value.content.startsWith("!inline")) { - const path = m.value.content.split(" ")[1]; - m.value.content = Deno.readTextFileSync(localPath + path); - const lock = m.value.lock; - if (removeLocks && removeLocks.includes(path)) { - m.value.lock = undefined; - } else if ( - lock && - typeof lock == "string" && - lock.trimStart().startsWith("!inline ") - ) { - const path = lock.split(" ")[1]; - try { - m.value.lock = readInlinePathSync(localPath + path); - } catch { - log.error(`Lock file ${path} not found`); - } - } - } - } else if (m.value.type == "forloopflow") { - replaceInlineScripts(m.value.modules, localPath, removeLocks); - } else if (m.value.type == "whileloopflow") { - replaceInlineScripts(m.value.modules, localPath, removeLocks); - } else if (m.value.type == "branchall") { - m.value.branches.forEach((b) => - replaceInlineScripts(b.modules, localPath, removeLocks) - ); - } else if (m.value.type == "branchone") { - m.value.branches.forEach((b) => - replaceInlineScripts(b.modules, localPath, removeLocks) - ); - replaceInlineScripts(m.value.default, localPath, removeLocks); - } - }); -} - export async function pushFlow( workspace: string, remotePath: string, @@ -98,7 +50,13 @@ export async function pushFlow( } const localFlow = (await yamlParseFile(localPath + "flow.yaml")) as FlowFile; - replaceInlineScripts(localFlow.value.modules, localPath, undefined); + await replaceInlineScripts( + localFlow.value.modules, + async (path: string) => await Deno.readTextFile(localPath + path), + log, + localPath, + SEP, + ); if (flow) { if (isSuperset(localFlow, flow)) { diff --git a/cli/gen_wm_client-mac.sh b/cli/gen_wm_client-mac.sh new file mode 100755 index 0000000000..b25d40a3aa --- /dev/null +++ b/cli/gen_wm_client-mac.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -eou pipefail +script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# only install gnu-sed if not already installed +if ! command -v gsed &> /dev/null; then + brew install gnu-sed +fi + +rm -rf "${script_dirpath}/gen" + +npx --yes @hey-api/openapi-ts@0.53.1 --input "${script_dirpath}/../backend/windmill-api/openapi.yaml" --output "${script_dirpath}/gen" --useOptions --client legacy/fetch --schemas false +cat < temp_file && mv temp_file gen/core/OpenAPI.ts +const getEnv = (key: string) => { + return Deno.env.get(key) +}; + +const baseUrl = getEnv("BASE_INTERNAL_URL") ?? getEnv("BASE_URL") ?? "http://localhost:8000"; +const baseUrlApi = (baseUrl ?? '') + "/api"; + +EOF +gsed -i 's/WITH_CREDENTIALS: false/WITH_CREDENTIALS: true/g' gen/core/OpenAPI.ts +gsed -i 's/TOKEN: undefined/TOKEN: getEnv("WM_TOKEN")/g' gen/core/OpenAPI.ts +gsed -i "s/BASE: '\/api'/BASE: baseUrlApi/g" gen/core/OpenAPI.ts + +find gen/ -name "*.ts" -exec gsed -i -E "s/(import.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; + +find gen/ -name "*.ts" -exec gsed -i -E "s/(export.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; diff --git a/cli/main.ts b/cli/main.ts index c555e468c0..ef3bd67809 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -265,8 +265,9 @@ const command = new Command() } } catch (error) { // If there's an error checking backend settings, just continue with defaults + const errorMessage = error instanceof Error ? error.message : String(error); log.warn( - `Could not check backend for git-sync settings: ${error.message}`, + `Could not check backend for git-sync settings: ${errorMessage}`, ); log.info("Continuing with default settings"); } @@ -373,7 +374,7 @@ const command = new Command() "upgrade", new UpgradeCommand({ provider: new NpmProvider({ package: "windmill-cli" }), - }).error((e) => { + }).error((e: any) => { log.error(e); log.info( "Try running with sudo and otherwise check the result of the command: npm uninstall windmill-cli && npm install -g windmill-cli", diff --git a/cli/metadata.ts b/cli/metadata.ts index 571262124b..75de6e3989 100644 --- a/cli/metadata.ts +++ b/cli/metadata.ts @@ -13,7 +13,6 @@ import { defaultScriptMetadata, } from "./bootstrap/script_bootstrap.ts"; import { Workspace } from "./workspace.ts"; -import { SchemaProperty } from "./bootstrap/common.ts"; import { languagesWithRawReqsSupport, LanguageWithRawReqsSupport, @@ -23,14 +22,15 @@ import { inferContentTypeFromFilePath } from "./script_common.ts"; import { GlobalDeps, exts, findGlobalDeps } from "./script.ts"; import { FSFSElement, - extractInlineScriptsForFlows, findCodebase, - newPathAssigner, yamlOptions, } from "./sync.ts"; import { generateHash, readInlinePathSync } from "./utils.ts"; import { SyncCodebase } from "./codebase.ts"; -import { FlowFile, replaceInlineScripts } from "./flow.ts"; +import { FlowFile } from "./flow.ts"; +import { replaceInlineScripts } from "./windmill-utils-internal/src/inline-scripts/replacer.ts"; +import { extractInlineScripts as extractInlineScriptsForFlows } from "./windmill-utils-internal/src/inline-scripts/extractor.ts"; +import { argSigToJsonSchemaType } from "./windmill-utils-internal/src/parse/parse-schema.ts"; import { getIsWin } from "./main.ts"; import { FlowValue } from "./gen/types.gen.ts"; @@ -172,10 +172,15 @@ export async function generateFlowLockInternal( } log.info(`Recomputing locks of ${changedScripts.join(", ")} in ${folder}`); - replaceInlineScripts( + await replaceInlineScripts( flowValue.value.modules, + async (path: string) => await Deno.readTextFile(folder + SEP + path), + log, folder + SEP!, - changedScripts + SEP, + changedScripts, + (path: string, newPath: string) => Deno.renameSync(path, newPath), + (path: string) => Deno.removeSync(path), ); //removeChangedLocks @@ -186,10 +191,7 @@ export async function generateFlowLockInternal( rawReqs ); - const inlineScripts = extractInlineScriptsForFlows( - flowValue.value.modules, - newPathAssigner(opts.defaultTs ?? "bun") - ); + const inlineScripts = extractInlineScriptsForFlows(flowValue.value.modules, {}, SEP); inlineScripts .filter((s) => s.path.endsWith(".lock")) .forEach((s) => { @@ -704,234 +706,6 @@ function sortObject(obj: any): any { ); } -//copied straight fron frontend /src/utils/inferArgs.ts -export function argSigToJsonSchemaType( - t: - | string - | { resource: string | null } - | { - list: - | ( - | string - | { - object: { - name?: string; - props?: { key: string; typ: any }[]; - }; - } - ) - | { str: any } - | { object: { name?: string; props?: { key: string; typ: any }[] } } - | null; - } - | { dynselect: string } - | { str: string[] | null } - | { object: { name?: string; props?: { key: string; typ: any }[] } } - | { - oneof: { - label: string; - properties: { key: string; typ: any }[]; - }[]; - }, - oldS: SchemaProperty -): void { - const newS: SchemaProperty = { type: "" }; - if (t === "int") { - newS.type = "integer"; - } else if (t === "float") { - newS.type = "number"; - } else if (t === "bool") { - newS.type = "boolean"; - } else if (t === "email") { - newS.type = "string"; - newS.format = "email"; - } else if (t === "sql") { - newS.type = "string"; - newS.format = "sql"; - } else if (t === "yaml") { - newS.type = "string"; - newS.format = "yaml"; - } else if (t === "bytes") { - newS.type = "string"; - newS.contentEncoding = "base64"; - newS.originalType = "bytes"; - } else if (t === "datetime") { - newS.type = "string"; - newS.format = "date-time"; - } else if (typeof t !== "string" && "oneof" in t) { - newS.type = "object"; - if (t.oneof) { - newS.oneOf = t.oneof.map((obj) => { - const oldObjS = - oldS.oneOf?.find((o) => o?.title === obj.label) ?? undefined; - const properties: Record = {}; - for (const prop of obj.properties) { - if (oldObjS?.properties && prop.key in oldObjS?.properties) { - properties[prop.key] = oldObjS?.properties[prop.key]; - } else { - properties[prop.key] = { description: "", type: "" }; - } - argSigToJsonSchemaType(prop.typ, properties[prop.key]); - } - return { - type: "object", - title: obj.label, - properties, - order: oldObjS?.order ?? undefined, - }; - }); - } - } else if (typeof t !== "string" && `object` in t) { - newS.type = "object"; - if (t.object.name) { - newS.format = `resource-${t.object.name}`; - } - if (t.object.props) { - const properties: Record = {}; - for (const prop of t.object.props) { - if (oldS.properties && prop.key in oldS.properties) { - properties[prop.key] = oldS.properties[prop.key]; - } else { - properties[prop.key] = { description: "", type: "" }; - } - argSigToJsonSchemaType(prop.typ, properties[prop.key]); - } - newS.properties = properties; - } - } else if (typeof t !== "string" && `str` in t) { - newS.type = "string"; - if (t.str) { - newS.originalType = "enum"; - newS.enum = t.str; - } else if (oldS.originalType == "string" && oldS.enum) { - newS.originalType = "string"; - newS.enum = oldS.enum; - } else { - newS.originalType = "string"; - newS.enum = undefined; - } - } else if (typeof t !== "string" && `resource` in t) { - newS.type = "object"; - newS.format = `resource-${t.resource}`; - } else if (typeof t !== "string" && `dynselect` in t) { - newS.type = "object"; - newS.format = `dynselect-${t.dynselect}`; - } else if (typeof t !== "string" && `list` in t) { - newS.type = "array"; - if (t.list === "int" || t.list === "float") { - newS.items = { type: "number" }; - newS.originalType = "number[]"; - } else if (t.list === "bytes") { - newS.items = { type: "string", contentEncoding: "base64" }; - newS.originalType = "bytes[]"; - } else if ( - t.list && - typeof t.list == "object" && - "str" in t.list && - t.list.str - ) { - newS.items = { type: "string", enum: t.list.str }; - newS.originalType = "enum[]"; - } else if ( - t.list == "string" || - (t.list && typeof t.list == "object" && "str" in t.list) - ) { - newS.items = { type: "string", enum: oldS.items?.enum }; - newS.originalType = "string[]"; - } else if ( - t.list && - typeof t.list == "object" && - "resource" in t.list && - t.list.resource - ) { - newS.items = { - type: "resource", - resourceType: t.list.resource as string, - }; - newS.originalType = "resource[]"; - } else if ( - t.list && - typeof t.list == "object" && - "object" in t.list && - t.list.object - ) { - if (t.list.object.name) { - newS.format = `resource-${t.list.object.name}`; - } - if (t.list.object.props && t.list.object.props.length > 0) { - const properties: Record = {}; - for (const prop of t.list.object.props) { - properties[prop.key] = { description: "", type: "" }; - argSigToJsonSchemaType(prop.typ, properties[prop.key]); - } - newS.items = { type: "object", properties: properties }; - } else { - newS.items = { type: "object" }; - } - newS.originalType = "record[]"; - } else { - newS.items = { type: "object" }; - newS.originalType = "object[]"; - } - } else { - newS.type = "object"; - } - - const preservedFields = [ - "description", - "pattern", - "min", - "max", - "currency", - "currencyLocale", - "multiselect", - "customErrorMessage", - "required", - "showExpr", - "password", - "order", - "dateFormat", - "title", - "placeholder", - ]; - - preservedFields.forEach((field) => { - // @ts-ignore - if (oldS[field] !== undefined) { - // @ts-ignore - newS[field] = oldS[field]; - } - }); - - if (oldS.type != newS.type) { - for (const prop of Object.getOwnPropertyNames(newS)) { - if (prop != "description") { - // @ts-ignore - delete oldS[prop]; - } - } - } else if ( - (oldS.format == "date" || oldS.format === "date-time") && - newS.format == "string" - ) { - newS.format = oldS.format; - } else if (newS.format == "date-time" && oldS.format == "date") { - newS.format = "date"; - } else if (oldS.items?.type != newS.items?.type) { - delete oldS.items; - } - - if (oldS.format && !newS.format) { - oldS.format = undefined - } - - Object.assign(oldS, newS); - // if (sameItems && savedItems != undefined && savedItems.enum != undefined) { - // sendUserToast(JSON.stringify(savedItems)) - // oldS.items = savedItems - // } -} - //////////////////////////////////////////////////////////////////////////////////////////// // end of refactoring TODO // //////////////////////////////////////////////////////////////////////////////////////////// diff --git a/cli/sync.ts b/cli/sync.ts index 4f9cb8a715..d64040e9ff 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -4,7 +4,6 @@ import { colors, Command, Confirm, - Input, Select, ensureDir, minimatch, @@ -37,8 +36,8 @@ import { } from "./script.ts"; import { handleFile } from "./script.ts"; -import { deepEqual, isFileResource, Repository, selectRepository } from "./utils.ts"; -import { SyncOptions, mergeConfigWithConfigFile, readConfigFile, getEffectiveSettings } from "./conf.ts"; +import { deepEqual, isFileResource } from "./utils.ts"; +import { SyncOptions, readConfigFile, getEffectiveSettings } from "./conf.ts"; import { Workspace } from "./workspace.ts"; import { removePathPrefix } from "./types.ts"; import { SyncCodebase, listSyncCodebases } from "./codebase.ts"; @@ -47,9 +46,10 @@ import { generateScriptMetadataInternal, readLockfile, } from "./metadata.ts"; -import { FlowModule, OpenFlow, RawScript } from "./gen/types.gen.ts"; +import { OpenFlow } from "./gen/types.gen.ts"; import { pushResource } from "./resource.ts"; - +import { assignPath } from "./windmill-utils-internal/src/path-utils/path-assigner.ts"; +import { extractInlineScripts as extractInlineScriptsForFlows } from "./windmill-utils-internal/src/inline-scripts/extractor.ts"; // Merge CLI options with effective settings, preserving CLI flags as overrides function mergeCliWithEffectiveOptions( @@ -310,56 +310,8 @@ export interface InlineScript { content: string; } -export function extractInlineScriptsForFlows( - modules: FlowModule[], - pathAssigner: PathAssigner -): InlineScript[] { - return modules.flatMap((m) => { - if (m.value.type == "rawscript") { - const [basePath, ext] = pathAssigner.assignPath( - m.summary, - m.value.language - ); - const path = basePath + ext; - const content = m.value.content; - const r = [{ path: path, content: content }]; - m.value.content = "!inline " + path.replaceAll(SEP, "/"); - const lock = m.value.lock; - if (lock && lock != "") { - const lockPath = basePath + "lock"; - m.value.lock = "!inline " + lockPath.replaceAll(SEP, "/"); - r.push({ path: lockPath, content: lock }); - } - return r; - } else if (m.value.type == "forloopflow") { - return extractInlineScriptsForFlows(m.value.modules, pathAssigner); - } else if (m.value.type == "branchall") { - return m.value.branches.flatMap((b) => - extractInlineScriptsForFlows(b.modules, pathAssigner) - ); - } else if (m.value.type == "whileloopflow") { - return extractInlineScriptsForFlows(m.value.modules, pathAssigner); - } else if (m.value.type == "branchone") { - return [ - ...m.value.branches.flatMap((b) => - extractInlineScriptsForFlows(b.modules, pathAssigner) - ), - ...extractInlineScriptsForFlows(m.value.default, pathAssigner), - ]; - } else { - return []; - } - }); -} - -interface PathAssigner { - assignPath(summary: string | undefined, language: string): [string, string]; -} -const INLINE_SCRIPT = "inline_script"; - export function extractInlineScriptsForApps( rec: any, - pathAssigner: PathAssigner ): InlineScript[] { if (!rec) { return []; @@ -368,8 +320,7 @@ export function extractInlineScriptsForApps( return Object.entries(rec).flatMap(([k, v]) => { if (k == "inlineScript" && typeof v == "object") { const o: Record = v as any; - const name = rec["name"]; - const [basePath, ext] = pathAssigner.assignPath(name, o["language"]); + const [basePath, ext] = assignPath(rec["id"], o["language"]); const r = []; if (o["content"]) { const content = o["content"]; @@ -389,69 +340,13 @@ export function extractInlineScriptsForApps( } return r; } else { - return extractInlineScriptsForApps(v, pathAssigner); + return extractInlineScriptsForApps(v); } }); } return []; } -export function newPathAssigner(defaultTs: "bun" | "deno"): PathAssigner { - let counter = 0; - const seen_names = new Set(); - function assignPath( - summary: string | undefined, - language: RawScript["language"] | "frontend" | "bunnative" - ): [string, string] { - let name; - - name = summary?.toLowerCase()?.replaceAll(" ", "_") ?? ""; - - let original_name = name; - - if (name == "") { - original_name = INLINE_SCRIPT; - name = `${INLINE_SCRIPT}_0`; - } - - while (seen_names.has(name)) { - counter++; - name = `${original_name}_${counter}`; - } - seen_names.add(name); - - let ext; - if (language == "python3") ext = "py"; - else if (language == defaultTs || language == "bunnative") ext = "ts"; - else if (language == "bun") ext = "bun.ts"; - else if (language == "deno") ext = "deno.ts"; - else if (language == "go") ext = "go"; - else if (language == "bash") ext = "sh"; - else if (language == "powershell") ext = "ps1"; - else if (language == "postgresql") ext = "pg.sql"; - else if (language == "mysql") ext = "my.sql"; - else if (language == "bigquery") ext = "bq.sql"; - else if (language == "oracledb") ext = "odb.sql"; - else if (language == "snowflake") ext = "sf.sql"; - else if (language == "mssql") ext = "ms.sql"; - else if (language == "graphql") ext = "gql"; - else if (language == "nativets") ext = "native.ts"; - else if (language == "frontend") ext = "frontend.js"; - else if (language == "php") ext = "php"; - else if (language == "rust") ext = "rs"; - else if (language == "csharp") ext = "cs"; - else if (language == "nu") ext = "nu"; - else if (language == "ansible") ext = "playbook.yml"; - else if (language == "java") ext = "java"; - else if (language == "duckdb") ext = "duckdb.sql"; - // for related places search: ADD_NEW_LANG - else ext = "no_ext"; - - return [`${name}.inline_script.`, ext]; - } - - return { assignPath }; -} function ZipFSElement( zip: JSZip, useYaml: boolean, @@ -495,10 +390,7 @@ function ZipFSElement( async *getChildren(): AsyncIterable { if (kind == "flow") { const flow: OpenFlow = JSON.parse(await f.async("text")); - const inlineScripts = extractInlineScriptsForFlows( - flow.value.modules, - newPathAssigner(defaultTs) - ); + const inlineScripts = extractInlineScriptsForFlows(flow.value.modules, {}, SEP); for (const s of inlineScripts) { yield { isDirectory: false, @@ -522,10 +414,7 @@ function ZipFSElement( }; } else if (kind == "app") { const app = JSON.parse(await f.async("text")); - const inlineScripts = extractInlineScriptsForApps( - app?.["value"], - newPathAssigner(defaultTs) - ); + const inlineScripts = extractInlineScriptsForApps(app?.["value"]); for (const s of inlineScripts) { yield { isDirectory: false, diff --git a/cli/windmill-utils-internal/.gitignore b/cli/windmill-utils-internal/.gitignore index 692a4a7d22..c8ab2aa653 100644 --- a/cli/windmill-utils-internal/.gitignore +++ b/cli/windmill-utils-internal/.gitignore @@ -18,7 +18,6 @@ src/gen/ .env.*.local # IDE/Editor files -.vscode/ .idea/ *.swp *.swo diff --git a/cli/windmill-utils-internal/.vscode/settings.json b/cli/windmill-utils-internal/.vscode/settings.json new file mode 100644 index 0000000000..81a8778ce7 --- /dev/null +++ b/cli/windmill-utils-internal/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "deno.enable": false +} \ No newline at end of file diff --git a/cli/windmill-utils-internal/gen_wm_client-mac.sh b/cli/windmill-utils-internal/gen_wm_client-mac.sh index 522efd3924..ba0e90c151 100755 --- a/cli/windmill-utils-internal/gen_wm_client-mac.sh +++ b/cli/windmill-utils-internal/gen_wm_client-mac.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash -brew install gnu-sed +# only install gnu-sed if not already installed +if ! command -v gsed &> /dev/null; then + brew install gnu-sed +fi script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" output_dirpath="${script_dirpath}/src/gen" @@ -20,7 +23,3 @@ EOF gsed -i 's/WITH_CREDENTIALS: false/WITH_CREDENTIALS: true/g' "${output_dirpath}/core/OpenAPI.ts" gsed -i 's/TOKEN: undefined/TOKEN: getEnv("WM_TOKEN")/g' "${output_dirpath}/core/OpenAPI.ts" gsed -i "s/BASE: '\/api'/BASE: baseUrlApi/g" "${output_dirpath}/core/OpenAPI.ts" - -find "${output_dirpath}" -name "*.ts" -exec gsed -i -E "s/(import.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; - -find "${output_dirpath}" -name "*.ts" -exec gsed -i -E "s/(export.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; \ No newline at end of file diff --git a/cli/windmill-utils-internal/gen_wm_client.sh b/cli/windmill-utils-internal/gen_wm_client.sh index 684081b04c..e504c2da96 100755 --- a/cli/windmill-utils-internal/gen_wm_client.sh +++ b/cli/windmill-utils-internal/gen_wm_client.sh @@ -18,7 +18,3 @@ EOF sed -i 's/WITH_CREDENTIALS: false/WITH_CREDENTIALS: true/g' "${output_dirpath}/core/OpenAPI.ts" sed -i 's/TOKEN: undefined/TOKEN: getEnv("WM_TOKEN")/g' "${output_dirpath}/core/OpenAPI.ts" sed -i "s/BASE: '\/api'/BASE: baseUrlApi/g" "${output_dirpath}/core/OpenAPI.ts" - -find "${output_dirpath}" -name "*.ts" -exec sed -i -E "s/(import.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; - -find "${output_dirpath}" -name "*.ts" -exec sed -i -E "s/(export.*from[[:space:]]*['\"][^'\"]+)(['\"])/\1.ts\2/g" {} \; \ No newline at end of file diff --git a/cli/windmill-utils-internal/publish.sh b/cli/windmill-utils-internal/publish.sh new file mode 100755 index 0000000000..23dc69d282 --- /dev/null +++ b/cli/windmill-utils-internal/publish.sh @@ -0,0 +1,11 @@ +#!/bin/bash +set -eou pipefail +script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +args=${1:-} + +rm -rf "${script_dirpath}/dist" + +npm install +npm run build +npm publish ${args} diff --git a/cli/windmill-utils-internal/src/inline-scripts/extractor.ts b/cli/windmill-utils-internal/src/inline-scripts/extractor.ts index 322b550f8c..2262090e65 100644 --- a/cli/windmill-utils-internal/src/inline-scripts/extractor.ts +++ b/cli/windmill-utils-internal/src/inline-scripts/extractor.ts @@ -1,5 +1,4 @@ -import { assignPath } from "../path-utils"; -import { SEP } from "../constants"; +import { assignPath } from "../path-utils/path-assigner"; import { FlowModule } from "../gen/types.gen"; /** @@ -24,6 +23,7 @@ interface InlineScript { export function extractInlineScripts( modules: FlowModule[], mapping: Record = {}, + separator: string = "/", defaultTs?: "bun" | "deno" ): InlineScript[] { return modules.flatMap((m) => { @@ -36,28 +36,28 @@ export function extractInlineScripts( const path = mapping[m.id] ?? basePath + ext; const content = m.value.content; const r = [{ path: path, content: content }]; - m.value.content = "!inline " + path.replace(SEP, "/"); + m.value.content = "!inline " + path.replaceAll(separator, "/"); const lock = m.value.lock; if (lock && lock != "") { const lockPath = basePath + "lock"; - m.value.lock = "!inline " + lockPath.replace(SEP, "/"); + m.value.lock = "!inline " + lockPath.replaceAll(separator, "/"); r.push({ path: lockPath, content: lock }); } return r; } else if (m.value.type == "forloopflow") { - return extractInlineScripts(m.value.modules, mapping, defaultTs); + return extractInlineScripts(m.value.modules, mapping, separator, defaultTs); } else if (m.value.type == "branchall") { return m.value.branches.flatMap((b) => - extractInlineScripts(b.modules, mapping, defaultTs) + extractInlineScripts(b.modules, mapping, separator, defaultTs) ); } else if (m.value.type == "whileloopflow") { - return extractInlineScripts(m.value.modules, mapping, defaultTs); + return extractInlineScripts(m.value.modules, mapping, separator, defaultTs); } else if (m.value.type == "branchone") { return [ ...m.value.branches.flatMap((b) => - extractInlineScripts(b.modules, mapping, defaultTs) + extractInlineScripts(b.modules, mapping, separator, defaultTs) ), - ...extractInlineScripts(m.value.default, mapping, defaultTs), + ...extractInlineScripts(m.value.default, mapping, separator, defaultTs), ]; } else { return []; diff --git a/cli/windmill-utils-internal/src/inline-scripts/replacer.ts b/cli/windmill-utils-internal/src/inline-scripts/replacer.ts index 134419ca64..9ca02c2d47 100644 --- a/cli/windmill-utils-internal/src/inline-scripts/replacer.ts +++ b/cli/windmill-utils-internal/src/inline-scripts/replacer.ts @@ -1,4 +1,4 @@ -import { FlowModule } from "../gen/types.gen.ts"; +import { FlowModule } from "../gen/types.gen"; /** * Replaces inline script references with actual file content from the filesystem. @@ -13,33 +13,72 @@ import { FlowModule } from "../gen/types.gen.ts"; */ export async function replaceInlineScripts( modules: FlowModule[], - fileReader: (...args: any[]) => any, + fileReader: (path: string) => Promise, logger: { - info: (...args: any[]) => void, - error: (...args: any[]) => void, + info: (message: string) => void, + error: (message: string) => void, } = { info: () => {}, error: () => {}, }, localPath: string, - removeLocks?: string[] + separator: string = "/", + removeLocks?: string[], + renamer?: (path: string, newPath: string) => void, + deleter?: (path: string) => void ): Promise { await Promise.all(modules.map(async (module) => { if (!module.value) { throw new Error(`Module value is undefined for module ${module.id}`); } - if (module.value.type === "rawscript") { - if (module.value.content.startsWith("!inline")) { + if (module.value.type === "rawscript" && module.value.content && module.value.content.startsWith("!inline")) { const path = module.value.content.split(" ")[1]; + const pathPrefix = path.split(".")[0]; + const pathSuffix = path.split(".").slice(1).join("."); + // new path is the module id with the same suffix + const newPath = module.id + "." + pathSuffix; + try { module.value.content = await fileReader(path); } catch { logger.error(`Script file ${path} not found`); + // try new path + try { + module.value.content = await fileReader(newPath); + } catch { + logger.error(`Script file ${newPath} not found`); + } } + + // rename the file if the prefix is different from the module id (fix old naming) + if (pathPrefix != module.id && renamer) { + logger.info(`Renaming ${path} to ${module.id}.${pathSuffix}`); + try { + renamer(localPath + path, localPath + module.id + "." + pathSuffix); + } catch { + logger.info(`Failed to rename ${path} to ${module.id}.${pathSuffix}`); + } + } + const lock = module.value.lock; if (removeLocks && removeLocks.includes(path)) { module.value.lock = undefined; + + // delete the file if the prefix is different from the module id (fix old naming) + if (lock && lock != "") { + const path = lock.split(" ")[1]; + const pathPrefix = path.split(".")[0]; + if (pathPrefix != module.id && deleter) { + logger.info(`Deleting ${path}`); + try { + deleter(localPath + path); + } catch { + logger.error(`Failed to delete ${path}`); + } + } + } + } else if ( lock && typeof lock == "string" && @@ -47,23 +86,22 @@ export async function replaceInlineScripts( ) { const path = lock.split(" ")[1]; try { - module.value.lock = await fileReader(path); + module.value.lock = await fileReader(path.replaceAll("/", separator)); } catch { logger.error(`Lock file ${path} not found`); } - } } } else if (module.value.type === "forloopflow" || module.value.type === "whileloopflow") { - await replaceInlineScripts(module.value.modules, fileReader, logger, localPath, removeLocks); + await replaceInlineScripts(module.value.modules, fileReader, logger, localPath, separator, removeLocks); } else if (module.value.type === "branchall") { await Promise.all(module.value.branches.map(async (branch) => { - await replaceInlineScripts(branch.modules, fileReader, logger, localPath, removeLocks); + await replaceInlineScripts(branch.modules, fileReader, logger, localPath, separator, removeLocks); })); } else if (module.value.type === "branchone") { await Promise.all(module.value.branches.map(async (branch) => { - await replaceInlineScripts(branch.modules, fileReader, logger, localPath, removeLocks); + await replaceInlineScripts(branch.modules, fileReader, logger, localPath, separator, removeLocks); })); - await replaceInlineScripts(module.value.default, fileReader, logger, localPath, removeLocks); + await replaceInlineScripts(module.value.default, fileReader, logger, localPath, separator, removeLocks); } })); } \ No newline at end of file diff --git a/cli/windmill-utils-internal/tsconfig.json b/cli/windmill-utils-internal/tsconfig.json index 395ae592af..38f18728f4 100644 --- a/cli/windmill-utils-internal/tsconfig.json +++ b/cli/windmill-utils-internal/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "ES2020", + "target": "ES2022", "module": "commonjs", - "lib": ["ES2020"], + "lib": ["ES2022"], "declaration": true, "outDir": "./dist", "rootDir": "./src", @@ -17,9 +17,7 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "allowImportingTsExtensions": true + "forceConsistentCasingInFileNames": true }, "include": [ "src/**/*" diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f209e6f479..c6c1290fa0 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -85,6 +85,7 @@ "windmill-parser-wasm-ts": "1.514.1", "windmill-parser-wasm-yaml": "1.510.1", "windmill-sql-datatype-parser-wasm": "1.318.0", + "windmill-utils-internal": "^1.0.0", "xterm": "^5.3.0", "xterm-readline": "^1.1.2", "y-monaco": "^0.1.4", @@ -12994,6 +12995,12 @@ "resolved": "https://registry.npmjs.org/windmill-sql-datatype-parser-wasm/-/windmill-sql-datatype-parser-wasm-1.318.0.tgz", "integrity": "sha512-jlRw6abUJi4vDm+7xDSjhb7dvm4tC+lBXv0EEwn52Veadwcl5EB1yGHb9XVqQEfcYr9JU62xfJlN6DoGQmYE/g==" }, + "node_modules/windmill-utils-internal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/windmill-utils-internal/-/windmill-utils-internal-1.0.0.tgz", + "integrity": "sha512-S93XgzdM8WNmDt+MUqiBzyA/3GacZV3Wo9DxxYpAuDHvIP4s8c9zKBhNIZqB008i1opI4tTxB8SwhsYBhTaRuw==", + "license": "Apache 2.0" + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index 9b00728f59..ca5168a4db 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -152,6 +152,7 @@ "windmill-parser-wasm-ts": "1.514.1", "windmill-parser-wasm-yaml": "1.510.1", "windmill-sql-datatype-parser-wasm": "1.318.0", + "windmill-utils-internal": "^1.0.0", "xterm": "^5.3.0", "xterm-readline": "^1.1.2", "y-monaco": "^0.1.4", diff --git a/frontend/src/lib/components/apps/components/display/dbtable/InsertRow.svelte b/frontend/src/lib/components/apps/components/display/dbtable/InsertRow.svelte index 375975c28d..773d37e8d0 100644 --- a/frontend/src/lib/components/apps/components/display/dbtable/InsertRow.svelte +++ b/frontend/src/lib/components/apps/components/display/dbtable/InsertRow.svelte @@ -13,7 +13,7 @@ init(wasmUrl) - import { argSigToJsonSchemaType } from '$lib/inferArgSig' + import { argSigToJsonSchemaType } from 'windmill-utils-internal' import SchemaForm from '$lib/components/SchemaForm.svelte' import { untrack } from 'svelte' diff --git a/frontend/src/lib/infer.ts b/frontend/src/lib/infer.ts index 3ddb61f037..8c6599bc06 100644 --- a/frontend/src/lib/infer.ts +++ b/frontend/src/lib/infer.ts @@ -39,7 +39,7 @@ import wasmUrlCSharp from 'windmill-parser-wasm-csharp/windmill_parser_wasm_bg.w import wasmUrlNu from 'windmill-parser-wasm-nu/windmill_parser_wasm_bg.wasm?url' import wasmUrlJava from 'windmill-parser-wasm-java/windmill_parser_wasm_bg.wasm?url' import { workspaceStore } from './stores.js' -import { argSigToJsonSchemaType } from './inferArgSig.js' +import { argSigToJsonSchemaType } from 'windmill-utils-internal' import { type AssetWithAccessType } from './components/assets/lib.js' const loadSchemaLastRun = diff --git a/frontend/src/lib/inferArgSig.ts b/frontend/src/lib/inferArgSig.ts deleted file mode 100644 index 6728f9b9d6..0000000000 --- a/frontend/src/lib/inferArgSig.ts +++ /dev/null @@ -1,199 +0,0 @@ -import type { SchemaProperty } from './common' - -export function argSigToJsonSchemaType( - t: - | string - | { resource: string | null } - | { - list: - | (string | { name?: string; props?: { key: string; typ: any }[] }) - | { str: any } - | { object: { name?: string; props?: { key: string; typ: any }[] } } - | null - } - | { dynselect: string } - | { str: string[] | null } - | { object: { name?: string; props?: { key: string; typ: any }[] } } - | { - oneof: { - label: string - properties: { key: string; typ: any }[] - }[] - }, - oldS: SchemaProperty -): void { - const newS: SchemaProperty = { type: '' } - if (t === 'int') { - newS.type = 'integer' - } else if (t === 'float') { - newS.type = 'number' - } else if (t === 'bool') { - newS.type = 'boolean' - } else if (t === 'email') { - newS.type = 'string' - newS.format = 'email' - } else if (t === 'sql') { - newS.type = 'string' - newS.format = 'sql' - } else if (t === 'yaml') { - newS.type = 'string' - newS.format = 'yaml' - } else if (t === 'bytes') { - newS.type = 'string' - newS.contentEncoding = 'base64' - newS.originalType = 'bytes' - } else if (t === 'datetime') { - newS.type = 'string' - newS.format = 'date-time' - } else if (typeof t !== 'string' && 'oneof' in t) { - newS.type = 'object' - if (t.oneof) { - newS.oneOf = t.oneof.map((obj) => { - const oldObjS = oldS.oneOf?.find((o) => o?.title === obj.label) ?? undefined - const properties: Record = {} - for (const prop of obj.properties) { - if (oldObjS?.properties && prop.key in oldObjS?.properties) { - properties[prop.key] = oldObjS?.properties[prop.key] - } else { - properties[prop.key] = { description: '', type: '' } - } - argSigToJsonSchemaType(prop.typ, properties[prop.key]) - } - return { - type: 'object', - title: obj.label, - properties, - order: oldObjS?.order ?? undefined - } - }) - } - } else if (typeof t !== 'string' && `object` in t) { - newS.type = 'object' - if (t.object.name) { - newS.format = `resource-${t.object.name}` - } - if (t.object.props) { - const properties: Record = {} - for (const prop of t.object.props) { - if (oldS.properties && prop.key in oldS.properties) { - properties[prop.key] = oldS.properties[prop.key] - } else { - properties[prop.key] = { description: '', type: '' } - } - argSigToJsonSchemaType(prop.typ, properties[prop.key]) - } - newS.properties = properties - } - } else if (typeof t !== 'string' && `str` in t) { - newS.type = 'string' - if (t.str) { - newS.originalType = 'enum' - newS.enum = t.str - } else if (oldS.originalType == 'string' && oldS.enum) { - newS.originalType = 'string' - newS.enum = oldS.enum - } else { - newS.originalType = 'string' - newS.enum = undefined - } - } else if (typeof t !== 'string' && `resource` in t) { - newS.type = 'object' - newS.format = `resource-${t.resource}` - } else if (typeof t !== 'string' && `dynselect` in t) { - newS.type = 'object' - newS.format = `dynselect-${t.dynselect}` - } else if (typeof t !== 'string' && `list` in t) { - newS.type = 'array' - if (t.list === 'int' || t.list === 'float') { - newS.items = { type: 'number' } - newS.originalType = 'number[]' - } else if (t.list === 'bytes') { - newS.items = { type: 'string', contentEncoding: 'base64' } - newS.originalType = 'bytes[]' - } else if (t.list && typeof t.list == 'object' && 'str' in t.list && t.list.str) { - newS.items = { type: 'string', enum: t.list.str } - newS.originalType = 'enum[]' - } else if (t.list == 'string' || (t.list && typeof t.list == 'object' && 'str' in t.list)) { - newS.items = { type: 'string', enum: oldS.items?.enum } - newS.originalType = 'string[]' - } else if (t.list && typeof t.list == 'object' && 'resource' in t.list && t.list.resource) { - newS.items = { - type: 'resource', - resourceType: t.list.resource as string - } - newS.originalType = 'resource[]' - } else if (t.list && typeof t.list == 'object' && 'object' in t.list && t.list.object) { - if (t.list.object.name) { - newS.format = `resource-${t.list.object.name}` - } - if (t.list.object.props && t.list.object.props.length > 0) { - const properties: Record = {} - for (const prop of t.list.object.props) { - properties[prop.key] = { description: '', type: '' } - argSigToJsonSchemaType(prop.typ, properties[prop.key]) - } - newS.items = { type: 'object', properties: properties } - } else { - newS.items = { type: 'object' } - } - newS.originalType = 'record[]' - } else { - newS.items = { type: 'object' } - newS.originalType = 'object[]' - } - } else { - newS.type = 'object' - } - - const preservedFields = [ - 'description', - 'pattern', - 'min', - 'max', - 'currency', - 'currencyLocale', - 'multiselect', - 'customErrorMessage', - 'required', - 'showExpr', - 'password', - 'order', - 'dateFormat', - 'title', - 'placeholder' - ] - - preservedFields.forEach((field) => { - // @ts-ignore - if (oldS[field] !== undefined) { - // @ts-ignore - newS[field] = oldS[field] - } - }) - - if (oldS.type != newS.type) { - for (const prop of Object.getOwnPropertyNames(newS)) { - if (prop != 'description') { - // @ts-ignore - delete oldS[prop] - } - } - } else if ((oldS.format == 'date' || oldS.format === 'date-time') && newS.format == 'string') { - newS.format = oldS.format - } else if (newS.format == 'date-time' && oldS.format == 'date') { - newS.format = 'date' - } else if (oldS.items?.type != newS.items?.type) { - delete oldS.items - } - - if (oldS.format && !newS.format) { - oldS.format = undefined - } - - Object.assign(oldS, newS) - // if (sameItems && savedItems != undefined && savedItems.enum != undefined) { - // sendUserToast(JSON.stringify(savedItems)) - // oldS.items = savedItems - // } - -}