diff --git a/.github/DockerfileBackendTests b/.github/DockerfileBackendTests index dbfffc0c7b..7fda0e025f 100644 --- a/.github/DockerfileBackendTests +++ b/.github/DockerfileBackendTests @@ -27,31 +27,38 @@ RUN wget https://golang.org/dl/go1.21.5.linux-amd64.tar.gz && tar -C /usr/local ENV PATH="${PATH}:/usr/local/go/bin" ENV GO_PATH=/usr/local/go/bin/go -# Install UV +# UV RUN curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.4.18/uv-installer.sh | sh && mv /usr/local/cargo/bin/uv /usr/local/bin/uv ENV TZ=Etc/UTC ENV PYTHON_VERSION 3.11.4 +# Python RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \ && tar -xf Python-${PYTHON_VERSION}.tgz && cd Python-${PYTHON_VERSION}/ && ./configure --enable-optimizations \ && make -j 4 && make install RUN /usr/local/bin/python3 -m pip install pip-tools +# Bun COPY --from=oven/bun:1.2.4 /usr/local/bin/bun /usr/bin/bun ARG TARGETPLATFORM +# Deno RUN curl -Lsf https://github.com/denoland/deno/releases/download/v2.0.2/deno-x86_64-unknown-linux-gnu.zip -o deno.zip # RUN [ "$TARGETPLATFORM" == "linux/arm64" ] && curl -Lsf https://github.com/denoland/deno/releases/download/v2.0.0/deno-aarch64-unknown-linux-gnu.zip -o deno.zip || true - RUN unzip deno.zip && rm deno.zip && mv deno /usr/bin/deno RUN apt-get update \ && apt-get install -y postgresql-client --allow-unauthenticated RUN rustup component add rustfmt + +# C# COPY --from=bitnami/dotnet-sdk:9.0.101-debian-12-r0 /opt/bitnami/dotnet-sdk /opt/dotnet-sdk RUN ln -s /opt/dotnet-sdk/bin/dotnet /usr/bin/dotnet + +# Nushell +COPY --from=ghcr.io/nushell/nushell:0.101.0-bookworm /usr/bin/nu /usr/bin/nu diff --git a/.github/workflows/build-publish-rh-image.yml b/.github/workflows/build-publish-rh-image.yml index 26b4bd6896..01a1f4fa97 100644 --- a/.github/workflows/build-publish-rh-image.yml +++ b/.github/workflows/build-publish-rh-image.yml @@ -64,7 +64,7 @@ jobs: platforms: linux/amd64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,otel,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,otel,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu secrets: | rh_username=${{ secrets.RH_USERNAME }} rh_password=${{ secrets.RH_PASSWORD }} @@ -81,7 +81,7 @@ jobs: platforms: linux/arm64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,otel,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,deno_core,license,otel,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu secrets: | rh_username=${{ secrets.RH_USERNAME }} rh_password=${{ secrets.RH_PASSWORD }} diff --git a/.github/workflows/build_windows_worker_.yml b/.github/workflows/build_windows_worker_.yml index c108f8a0d1..7cc5a56902 100644 --- a/.github/workflows/build_windows_worker_.yml +++ b/.github/workflows/build_windows_worker_.yml @@ -51,7 +51,7 @@ jobs: $env:OPENSSL_DIR="${Env:VCPKG_INSTALLATION_ROOT}\installed\x64-windows-static" mkdir frontend/build && cd backend New-Item -Path . -Name "windmill-api/openapi-deref.yaml" -ItemType "File" -Force - cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,sqs_trigger,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,nats,sqs_trigger,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu - name: Rename binary with corresponding architecture run: | diff --git a/.github/workflows/docker-image-rpi4.yml b/.github/workflows/docker-image-rpi4.yml index c0fc7ad576..8dad6651f8 100644 --- a/.github/workflows/docker-image-rpi4.yml +++ b/.github/workflows/docker-image-rpi4.yml @@ -67,7 +67,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=embedding,parquet,openidconnect,deno_core,license,http_trigger,zip,oauth2,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + features=embedding,parquet,openidconnect,deno_core,license,http_trigger,zip,oauth2,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:dev ${{ steps.meta-public.outputs.tags }} diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 03457b4b79..cf95bcd108 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -95,7 +95,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=embedding,parquet,openidconnect,jemalloc,deno_core,license,http_trigger,zip,oauth2,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + features=embedding,parquet,openidconnect,jemalloc,deno_core,license,http_trigger,zip,oauth2,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} ${{ steps.meta-public.outputs.tags }} @@ -157,7 +157,7 @@ jobs: platforms: linux/amd64,linux/arm64 push: true build-args: | - features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,otel,dind,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu tags: | ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} ${{ steps.meta-ee-public.outputs.tags }} diff --git a/.github/workflows/publish_windows_worker.yml b/.github/workflows/publish_windows_worker.yml index 50576fc519..1ef3d32b99 100644 --- a/.github/workflows/publish_windows_worker.yml +++ b/.github/workflows/publish_windows_worker.yml @@ -53,7 +53,7 @@ jobs: $env:OPENSSL_DIR="${Env:VCPKG_INSTALLATION_ROOT}\installed\x64-windows-static" mkdir frontend/build && cd backend New-Item -Path . -Name "windmill-api/openapi-deref.yaml" -ItemType "File" -Force - cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust + cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,deno_core,license,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,php,mysql,mssql,bigquery,oracledb,postgres_trigger,mqtt_trigger,websocket,python,smtp,csharp,static_frontend,rust,nu - name: Rename binary with corresponding architecture run: | diff --git a/.gitignore b/.gitignore index 3e6c2f3a75..60c80becbf 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ CaddyfileRemoteMalo **/.idea/ .direnv .vscode +.dev-docker-wrapper* diff --git a/Dockerfile b/Dockerfile index 2b323ba243..4d3e2655f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,6 +41,8 @@ COPY /typescript-client/docs/ /frontend/static/tsdocs/ RUN npm run generate-backend-client ENV NODE_OPTIONS "--max-old-space-size=8192" ARG VITE_BASE_URL "" +# Read more about macro in docker/dev.nu +# -- MACRO-SPREAD-WASM-PARSER-DEV-ONLY -- # RUN npm run build diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 8d400bb62a..eb243435c9 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -1358,7 +1358,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", ] [[package]] @@ -1367,6 +1376,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "1.3.2" @@ -1622,6 +1637,17 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "byte-unit" +version = "5.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cd29c3c585209b0cbc7309bfe3ed7efd8c84c21b7af29c8bfae908f8777174" +dependencies = [ + "rust_decimal", + "serde", + "utf8-width", +] + [[package]] name = "bytecheck" version = "0.6.12" @@ -1689,6 +1715,12 @@ dependencies = [ "either", ] +[[package]] +name = "bytesize" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2c12f985c78475a6b8d629afd0c360260ef34cfef52efccdcfd31972f81c2e" + [[package]] name = "bzip2" version = "0.4.4" @@ -1885,11 +1917,21 @@ dependencies = [ "iana-time-zone", "js-sys", "num-traits", + "pure-rust-locales", "serde", "wasm-bindgen", "windows-targets 0.52.6", ] +[[package]] +name = "chrono-humanize" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b" +dependencies = [ + "chrono", +] + [[package]] name = "chrono-tz" version = "0.9.0" @@ -2352,6 +2394,15 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + [[package]] name = "crunchy" version = "0.2.3" @@ -3058,8 +3109,8 @@ dependencies = [ "anyhow", "az", "bincode", - "bit-set", - "bit-vec", + "bit-set 0.5.3", + "bit-vec 0.6.3", "bytes", "capacity_builder 0.1.3", "cooked-waker", @@ -3254,7 +3305,7 @@ dependencies = [ "filetime", "junction", "libc", - "nix", + "nix 0.27.1", "rand 0.8.5", "rayon", "serde", @@ -3659,7 +3710,7 @@ dependencies = [ "libc", "log", "memchr", - "nix", + "nix 0.27.1", "pin-project-lite", "rand 0.8.5", "serde", @@ -3752,7 +3803,7 @@ dependencies = [ "hyper-util", "libc", "log", - "nix", + "nix 0.27.1", "node_resolver", "notify", "ntapi", @@ -4542,6 +4593,16 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "erased-serde" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "errno" version = "0.3.10" @@ -4619,6 +4680,17 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +[[package]] +name = "fancy-regex" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e24cb5a94bcae1e5408b0effca5cd7172ea3c5755049c5f3af4cd283a165298" +dependencies = [ + "bit-set 0.8.0", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + [[package]] name = "fastdivide" version = "0.4.2" @@ -6326,6 +6398,15 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +[[package]] +name = "inventory" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab08d7cd2c5897f2c949e5383ea7c7db03fb19130ffcfbf7eda795137ae3cb83" +dependencies = [ + "rustversion", +] + [[package]] name = "ipconfig" version = "0.3.2" @@ -6365,6 +6446,12 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "is_ci" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -6741,6 +6828,17 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +[[package]] +name = "libproc" +version = "0.14.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78a09b56be5adbcad5aa1197371688dc6bb249a26da3bca2011ee2fb987ebfb" +dependencies = [ + "bindgen 0.70.1", + "errno", + "libc", +] + [[package]] name = "libredox" version = "0.1.3" @@ -6864,6 +6962,15 @@ dependencies = [ "hashbrown 0.15.2", ] +[[package]] +name = "lscolors" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53304fff6ab1e597661eee37e42ea8c47a146fca280af902bb76bff8a896e523" +dependencies = [ + "nu-ansi-term 0.50.1", +] + [[package]] name = "lz4_flex" version = "0.11.3" @@ -6884,6 +6991,15 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + [[package]] name = "macro_rules_attribute" version = "0.2.0" @@ -7143,6 +7259,35 @@ dependencies = [ "paste", ] +[[package]] +name = "miette" +version = "7.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a955165f87b37fd1862df2a59547ac542c77ef6d17c666f619d1ad22dd89484" +dependencies = [ + "cfg-if", + "miette-derive", + "owo-colors", + "supports-color", + "supports-hyperlinks", + "supports-unicode", + "terminal_size", + "textwrap", + "thiserror 1.0.69", + "unicode-width 0.1.14", +] + +[[package]] +name = "miette-derive" +version = "7.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf45bf44ab49be92fd1227a3be6fc6f617f1a337c06af54981048574d8783147" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "mime" version = "0.3.17" @@ -7381,7 +7526,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.5.3", "bitflags 2.9.0", "codespan-reporting", "hexf-parse", @@ -7470,6 +7615,18 @@ dependencies = [ "libc", ] +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.9.0", + "cfg-if", + "cfg_aliases 0.2.1", + "libc", +] + [[package]] name = "nkeys" version = "0.4.4" @@ -7569,6 +7726,145 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.50.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "nu-derive-value" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71f7c8ed6ba88a567ec6f7c4cad4a7a8465ab93b8cdaf89d3dc72347a83c2d1f" +dependencies = [ + "heck 0.5.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "nu-engine" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c6619583ed281060a9ea0a3f4532eea918370c94e703b903065f35e5aa49b14" +dependencies = [ + "log", + "nu-glob", + "nu-path", + "nu-protocol", + "nu-utils", + "terminal_size", +] + +[[package]] +name = "nu-glob" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd0a9fe69412acdc8501f5ef19031f9cac119d93823cb957b14ddfe1cb97660" + +[[package]] +name = "nu-parser" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2adc2876bd7bc83be15786cedf2cb08a81a9d70fa4b8df569b3f1cbec1e0b58d" +dependencies = [ + "bytesize", + "chrono", + "itertools 0.13.0", + "log", + "nu-engine", + "nu-path", + "nu-protocol", + "nu-utils", + "serde_json", +] + +[[package]] +name = "nu-path" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ccd1bbaf370d79118bd1a807abb07d8d1386751d0ae9266baafa91bd0b5523f" +dependencies = [ + "dirs 5.0.1", + "omnipath", + "pwd", +] + +[[package]] +name = "nu-protocol" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f49a395b632530d7f46fd24183c7f42423677f70afb3cb4726e3abfe92273b" +dependencies = [ + "byte-unit", + "bytes", + "chrono", + "chrono-humanize", + "dirs 5.0.1", + "dirs-sys 0.4.1", + "fancy-regex", + "heck 0.5.0", + "indexmap 2.8.0", + "log", + "lru", + "miette", + "nix 0.29.0", + "nu-derive-value", + "nu-path", + "nu-system", + "nu-utils", + "num-format", + "serde", + "serde_json", + "thiserror 2.0.12", + "typetag", + "windows-sys 0.48.0", +] + +[[package]] +name = "nu-system" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81182f7e64bd5dd16ab844d8e40f78e389d06d95f5a0c419f4701fb8fc163077" +dependencies = [ + "chrono", + "itertools 0.13.0", + "libc", + "libproc", + "log", + "mach2", + "nix 0.29.0", + "ntapi", + "procfs", + "sysinfo", + "windows 0.56.0", +] + +[[package]] +name = "nu-utils" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d1468fa8e6e12d9d53c90b44f3d11a37d87502d7a30d145f122341c5b33745" +dependencies = [ + "crossterm_winapi", + "fancy-regex", + "log", + "lscolors", + "nix 0.29.0", + "num-format", + "serde", + "serde_json", + "strip-ansi-escapes", + "sys-locale", + "unicase", +] + [[package]] name = "nuid" version = "0.5.0" @@ -7638,6 +7934,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + [[package]] name = "num-integer" version = "0.1.46" @@ -7802,6 +8108,12 @@ dependencies = [ "asn1-rs", ] +[[package]] +name = "omnipath" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80adb31078122c880307e9cdfd4e3361e6545c319f9b9dcafcb03acd3b51a575" + [[package]] name = "once_cell" version = "1.21.1" @@ -8117,6 +8429,12 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "owo-colors" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564" + [[package]] name = "p224" version = "0.13.2" @@ -8589,7 +8907,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613283563cd90e1dfc3518d548caee47e0e725455ed619881f5cf21f36de4b48" dependencies = [ "array-init", - "bit-vec", + "bit-vec 0.6.3", "bytes", "chrono", "fallible-iterator 0.2.0", @@ -8736,6 +9054,31 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "procfs" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" +dependencies = [ + "bitflags 2.9.0", + "chrono", + "flate2", + "hex", + "procfs-core", + "rustix 0.38.44", +] + +[[package]] +name = "procfs-core" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" +dependencies = [ + "bitflags 2.9.0", + "chrono", + "hex", +] + [[package]] name = "profiling" version = "1.0.16" @@ -8939,6 +9282,22 @@ dependencies = [ "reborrow", ] +[[package]] +name = "pure-rust-locales" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a" + +[[package]] +name = "pwd" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2" +dependencies = [ + "libc", + "thiserror 1.0.69", +] + [[package]] name = "quick-xml" version = "0.30.0" @@ -10008,7 +10367,7 @@ dependencies = [ "libc", "log", "memchr", - "nix", + "nix 0.27.1", "radix_trie", "unicode-segmentation", "unicode-width 0.1.14", @@ -11169,6 +11528,15 @@ dependencies = [ "unicode-properties", ] +[[package]] +name = "strip-ansi-escapes" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a8f8038e7e7969abb3f1b7c2a811225e9296da208539e0f79c5251d6cac0025" +dependencies = [ + "vte", +] + [[package]] name = "strsim" version = "0.10.0" @@ -11241,6 +11609,27 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "supports-color" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" +dependencies = [ + "is_ci", +] + +[[package]] +name = "supports-hyperlinks" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "804f44ed3c63152de6a9f90acbea1a110441de43006ea51bcce8f436196a288b" + +[[package]] +name = "supports-unicode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" + [[package]] name = "swc_allocator" version = "0.1.10" @@ -11668,6 +12057,15 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + [[package]] name = "sys_traits" version = "0.1.7" @@ -11692,6 +12090,20 @@ dependencies = [ "walkdir", ] +[[package]] +name = "sysinfo" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "rayon", + "windows 0.57.0", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -11920,6 +12332,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +dependencies = [ + "rustix 1.0.3", + "windows-sys 0.59.0", +] + [[package]] name = "text_lines" version = "0.6.0" @@ -11929,6 +12351,16 @@ dependencies = [ "serde", ] +[[package]] +name = "textwrap" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" +dependencies = [ + "unicode-linebreak", + "unicode-width 0.2.0", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -12721,7 +13153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", - "nu-ansi-term", + "nu-ansi-term 0.46.0", "once_cell", "regex", "serde", @@ -12832,12 +13264,42 @@ version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +[[package]] +name = "typetag" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f22b40dd7bfe8c14230cf9702081366421890435b2d625fa92b4acc4c3de6f" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "typify" version = "0.0.12" @@ -12987,6 +13449,12 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + [[package]] name = "unicode-normalization" version = "0.1.24" @@ -13158,6 +13626,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -13257,6 +13731,15 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +[[package]] +name = "vte" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "231fdcd7ef3037e8330d8e17e61011a2c244126acc0a982f4040ac3f9f0bc077" +dependencies = [ + "memchr", +] + [[package]] name = "waker-fn" version = "1.2.0" @@ -13481,7 +13964,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39" dependencies = [ "arrayvec", - "bit-vec", + "bit-vec 0.6.3", "bitflags 2.9.0", "cfg_aliases 0.1.1", "codespan-reporting", @@ -13512,7 +13995,7 @@ dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set", + "bit-set 0.5.3", "bitflags 2.9.0", "block", "cfg_aliases 0.1.1", @@ -13983,6 +14466,17 @@ dependencies = [ "windmill-parser", ] +[[package]] +name = "windmill-parser-nu" +version = "1.478.1" +dependencies = [ + "anyhow", + "nu-parser", + "serde_json", + "wasm-bindgen", + "windmill-parser", +] + [[package]] name = "windmill-parser-php" version = "1.478.1" @@ -14086,6 +14580,7 @@ dependencies = [ "windmill-parser-csharp", "windmill-parser-go", "windmill-parser-graphql", + "windmill-parser-nu", "windmill-parser-php", "windmill-parser-py", "windmill-parser-rust", @@ -14155,7 +14650,7 @@ dependencies = [ "async-recursion", "backon", "base64 0.22.1", - "bit-vec", + "bit-vec 0.6.3", "bollard", "bytes", "chrono", @@ -14187,7 +14682,7 @@ dependencies = [ "mappable-rc", "mysql_async", "native-tls", - "nix", + "nix 0.27.1", "object_store", "once_cell", "opentelemetry", @@ -14219,6 +14714,7 @@ dependencies = [ "windmill-parser-csharp", "windmill-parser-go", "windmill-parser-graphql", + "windmill-parser-nu", "windmill-parser-php", "windmill-parser-py", "windmill-parser-py-imports", @@ -14240,6 +14736,26 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" +dependencies = [ + "windows-core 0.56.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.58.0" @@ -14259,19 +14775,65 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" +dependencies = [ + "windows-implement 0.56.0", + "windows-interface 0.56.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.58.0", + "windows-interface 0.58.0", "windows-result 0.2.0", "windows-strings 0.1.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows-implement" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -14283,6 +14845,28 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "windows-interface" +version = "0.56.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + [[package]] name = "windows-interface" version = "0.58.0" @@ -14311,6 +14895,15 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.2.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 82fc14974c..d69ba61f7f 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -22,11 +22,12 @@ members = [ "./parsers/windmill-parser-go", "./parsers/windmill-parser-rust", "./parsers/windmill-parser-csharp", + "./parsers/windmill-parser-nu", "./parsers/windmill-parser-bash", "./parsers/windmill-parser-py", "./parsers/windmill-parser-py-imports", "./parsers/windmill-sql-datatype-parser-wasm", - "./parsers/windmill-parser-yaml", "windmill-macros", + "./parsers/windmill-parser-yaml", "windmill-macros", "parsers/windmill-parser-nu", ] [workspace.package] @@ -79,6 +80,7 @@ sqs_trigger = ["windmill-api/sqs_trigger"] python = ["windmill-worker/python"] smtp = ["windmill-api/smtp", "windmill-common/smtp"] csharp = ["windmill-worker/csharp"] +nu = ["windmill-worker/nu"] license = ["windmill-api/license"] oauth2 = ["windmill-api/oauth2"] http_trigger = ["windmill-api/http_trigger"] @@ -155,6 +157,7 @@ windmill-parser-go = { path = "./parsers/windmill-parser-go" } windmill-parser-rust = { path = "./parsers/windmill-parser-rust" } windmill-parser-yaml = { path = "./parsers/windmill-parser-yaml" } windmill-parser-csharp = { path = "./parsers/windmill-parser-csharp" } +windmill-parser-nu = { path = "./parsers/windmill-parser-nu" } windmill-parser-bash = { path = "./parsers/windmill-parser-bash" } windmill-parser-sql = { path = "./parsers/windmill-parser-sql" } windmill-parser-graphql = { path = "./parsers/windmill-parser-graphql" } @@ -310,6 +313,7 @@ rdkafka = { version = "0.36.2", features = ["cmake-build", "ssl-vendored"] } pg_escape = "0.1.1" async-nats = "0.38.0" nkeys = "0.4.4" +nu-parser = { version = "0.101.0", default-features = false } datafusion = "39.0.0" object_store = { version = "0.10.0", features = ["aws", "azure"] } @@ -355,7 +359,7 @@ quote = "1.0.36" regex-lite = "0.1.6" yaml-rust = "0.4.5" tokio-tungstenite = { version = "0.24.0", features = ["native-tls"] } -tree-sitter = {version = "0.23.0", features = []} +tree-sitter = { version = "0.23.0", features = [] } tree-sitter-c-sharp = "0.23.0" oracle = { version = "0.6.3", features = ["chrono"] } rumqttc = { version = "0.24.0", features = ["use-native-tls"]} diff --git a/backend/migrations/20250122094704_add_nu_lang.down.sql b/backend/migrations/20250122094704_add_nu_lang.down.sql new file mode 100644 index 0000000000..d2f607c5b8 --- /dev/null +++ b/backend/migrations/20250122094704_add_nu_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20250122094704_add_nu_lang.up.sql b/backend/migrations/20250122094704_add_nu_lang.up.sql new file mode 100644 index 0000000000..5317efa87f --- /dev/null +++ b/backend/migrations/20250122094704_add_nu_lang.up.sql @@ -0,0 +1,2 @@ +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'nu'; +UPDATE config set config = jsonb_set(config, '{worker_tags}', config->'worker_tags' || '["nu"]'::jsonb) where name = 'worker__default' and config @> '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun", "php", "rust", "ansible", "csharp"]}'::jsonb AND NOT config->'worker_tags' @> '"nu"'::jsonb; diff --git a/backend/parsers/windmill-parser-nu/Cargo.toml b/backend/parsers/windmill-parser-nu/Cargo.toml new file mode 100644 index 0000000000..c8c3e0d616 --- /dev/null +++ b/backend/parsers/windmill-parser-nu/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "windmill-parser-nu" +version.workspace = true +authors.workspace = true +edition.workspace = true + +[lib] +name = "windmill_parser_nu" +path = "./src/lib.rs" + +[dependencies] +windmill-parser.workspace = true +anyhow.workspace = true +nu-parser.workspace = true +wasm-bindgen.workspace = true +serde_json.workspace = true diff --git a/backend/parsers/windmill-parser-nu/src/lib.rs b/backend/parsers/windmill-parser-nu/src/lib.rs new file mode 100644 index 0000000000..ddd049f609 --- /dev/null +++ b/backend/parsers/windmill-parser-nu/src/lib.rs @@ -0,0 +1,261 @@ +#![cfg_attr(target_arch = "wasm32", feature(c_variadic))] + +use anyhow::{anyhow, bail}; +use nu_parser::lex; + +use serde_json::{json, Value}; +use windmill_parser::{Arg, MainArgSignature, Typ}; + +pub fn parse_nu_signature(code: &str) -> anyhow::Result { + let (tokens, ..) = lex(code.as_bytes(), 0, &[], &[], true); + let src = code.to_owned(); + #[derive(Debug)] + enum LastToken { + None, + Def, + Main, + Args(String), + } + let mut last_token = LastToken::None; + for token in tokens { + let s = token.span; + let cont = src.get(s.start..s.end).ok_or(anyhow!("Parsing error"))?; + last_token = match last_token { + LastToken::None if cont == "def" => LastToken::Def, + LastToken::Def if cont == "main" => LastToken::Main, + LastToken::Main => { + LastToken::Args(cont.get(1..(cont.len() - 1)).unwrap_or("Error").to_owned()) + } + LastToken::Args(_) => break, + _ => LastToken::None, + }; + } + + let LastToken::Args(args) = last_token else { + bail!("Cannot find main function."); + }; + + let mut sig = MainArgSignature::default(); + sig.no_main_func = Some(false); + + let batches = args + .lines() + .filter_map(|el| { + if el.trim_start().starts_with('#') { + None + } else { + Some( + el.split(',') + .map(|el| el.trim()) + .filter(|el| el != &"") + .collect::>(), + ) + } + }) + .flatten() + .collect::>(); + + let mut compensate_lookahead = 0; + for (i, batch) in batches.iter().enumerate() { + // parse_default can lookahead and if it does we need to compensate + // otherwise we would try to parse data already parsed but not yielded by parse_default + if compensate_lookahead > 0 { + compensate_lookahead -= 1; + continue; + } + + let type_start = batch.find(":"); + let default_start = batch.find("="); + + let (name, typ, default) = match (type_start, default_start) { + (None, None) => (batch.trim(), None, None), + (None, Some(d)) => ( + batch + .get(0..d) + .ok_or(anyhow!("Cannot parse argument ident"))? + .trim(), + None, + Some(parse_default( + &batch + .get(d..) + .ok_or(anyhow!("Cannot parse default value for argument"))?, + &batches, + i, + &mut compensate_lookahead, + )?), + ), + (Some(t), None) => ( + batch + .get(0..t) + .ok_or(anyhow!("Cannot parse argument ident"))? + .trim(), + Some(parse_type( + &batch + .get(t..) + .ok_or(anyhow!("Cannot parse type of argument"))?, + )?), + None, + ), + (Some(t), Some(d)) => { + if t < d { + ( + batch + .get(0..t) + .ok_or(anyhow!("Cannot parse argument ident"))? + .trim(), + Some(parse_type( + &batch + .get(t..d) + .ok_or(anyhow!("Cannot parse type of argument"))?, + )?), + Some(parse_default( + &batch + .get(d..) + .ok_or(anyhow!("Cannot parse default value of argument"))?, + &batches, + i, + &mut compensate_lookahead, + )?), + ) + } else { + bail!("Parsing error `:` should be before `=`\nit likely means you are trying to set default value to record or table which is not supported at the moment.") + } + } + }; + + // Check if it is optional + let optional = { + let Some(element) = name.chars().last() else { + bail!("Internal error, cannot check if argument is optional") + }; + element == '?' + }; + + // Rest parameters are not supported + if matches!(name.get(0..3), Some("...")) { + bail!("Rest (...) parameters are not supported") + } + + // Flags are not supported + if matches!(name.get(0..2), Some("--")) { + bail!("Flags are not supported") + } + + sig.args.push(Arg { + name: if optional { + name.get(..name.len() - 1).unwrap_or("Error").to_owned() + } else { + name.to_owned() + }, + typ: typ.unwrap_or(Typ::Unknown), + otyp: None, + has_default: default.is_some() || optional, + default: default.or_else(|| if optional { Some(json!(null)) } else { None }), + oidx: None, + }); + } + + fn parse_type(content: &str) -> anyhow::Result { + let c = content.replace(":", "").trim().to_owned(); + let typ = match c.as_str() { + "string" => Typ::Str(None), + "int" => Typ::Int, + "float" => Typ::Float, + "number" => Typ::Float, + "record" => Typ::Object(vec![]), + "table" => Typ::List(Box::new(Typ::Object(vec![]))), + "nothing" => Typ::Unknown, + // TODO: needs additional work on literal parsing + // "binary" => Typ::Bytes, + "datetime" => Typ::Datetime, + "any" => Typ::Unknown, + "bool" => Typ::Bool, + // Lists + "list" | "list" | "list" => Typ::List(Box::new(Typ::Unknown)), + "list" => Typ::List(Box::new(Typ::Float)), + "list" => Typ::List(Box::new(Typ::Bool)), + "list" => Typ::List(Box::new(Typ::Str(None))), + // list is not supported + // Records and Tables + // TODO: Support in V1? + s if s.contains("record<") => { + bail!("typed records are not supported, use `ident: record`") + } + s if s.contains("table<") => { + bail!("typed tables are not supported, use `ident: table`") + } + s => bail!("{s} is not supported"), + }; + Ok(typ) + } + fn parse_default( + content: &str, + ctx: &[&str], + i: usize, + skip: &mut usize, + ) -> anyhow::Result { + let mut c = content.replace("=", "").trim().to_owned(); + + fn parse_object_literal( + (open, close): (char, char), + mut c_2: String, + ctx: &[&str], + i: usize, + skip: &mut usize, + ) -> anyhow::Result { + // It is list + // if c.contains("[") { + let mut closed = false; + if c_2 != open.to_string() { + // [a ~ , ~ ... + // Add ^ + c_2 += ","; + } + // else { + // [ + // a < Do not add "," + // ... + // } + let remainder = &ctx + .iter() + .skip(i + 1) + .map_while(|el| { + let el = el.trim(); + + if closed { + None + } else { + if el.chars().last() == Some(close) { + closed = true; + } + *skip += 1; + Some(el) + } + }) + .collect::>() + .join(","); + + if remainder.contains(&['{', '[']) { + bail!("Nesting is not supported") + } + + Ok((c_2 + remainder) + // Remove trailing comma if there is any + .replace(&format!(",{close}"), &close.to_string())) + } + // It is list + if c.contains("[") { + if c.chars().last() != Some(']') { + c = parse_object_literal(('[', ']'), c.clone(), ctx, i, skip)?; + } + } + // It is record + if c.contains("{") { + if c.chars().last() != Some('}') { + c = parse_object_literal(('{', '}'), c.clone(), ctx, i, skip)?; + } + } + Ok(serde_json::from_str(&c)?) + } + Ok(sig) +} diff --git a/backend/parsers/windmill-parser-nu/tests/tests.rs b/backend/parsers/windmill-parser-nu/tests/tests.rs new file mode 100644 index 0000000000..13c54930d6 --- /dev/null +++ b/backend/parsers/windmill-parser-nu/tests/tests.rs @@ -0,0 +1,690 @@ +#[cfg(test)] +mod test { + use serde_json::json; + use windmill_parser::{Arg, MainArgSignature, Typ}; + use windmill_parser_nu::parse_nu_signature; + + #[test] + fn test_nu_no_main_sig() { + assert!(parse_nu_signature("").is_err()); + } + #[test] + fn test_nu_any_sig() { + let sig = parse_nu_signature( + r#" + def main [ a, b , c, d] {} + "#, + ) + .unwrap(); + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "a".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "b".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "c".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "d".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_optional_sig() { + let sig = parse_nu_signature( + r#" + def main [foo?] {} + "#, + ) + .unwrap(); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + name: "foo".into(), + otyp: None, + typ: Typ::Unknown, + default: Some(serde_json::Value::Null), + has_default: true, + oidx: None + },], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_simple_typed_sig() { + let sig = parse_nu_signature( + r#" + def main [ foo: string, bar: int] {} + "#, + ) + .unwrap(); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "foo".into(), + otyp: None, + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "bar".into(), + otyp: None, + typ: Typ::Int, + default: None, + has_default: false, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_complete_typed_sig() { + let sig = parse_nu_signature( + r#" + def main [ + a1: any, + a2: bool, + a3: int, + a4: float, + a5: datetime, + a6: string, + a7: record, + a8: list, + a9: table, + a10: nothing, + ] {} + "#, + ) + .unwrap(); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "a1".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a2".into(), + otyp: None, + typ: Typ::Bool, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a3".into(), + otyp: None, + typ: Typ::Int, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a4".into(), + otyp: None, + typ: Typ::Float, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a5".into(), + otyp: None, + typ: Typ::Datetime, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a6".into(), + otyp: None, + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a7".into(), + otyp: None, + typ: Typ::Object(vec![]), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a8".into(), + otyp: None, + typ: Typ::List(Box::new(Typ::Unknown)), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a9".into(), + otyp: None, + typ: Typ::List(Box::new(Typ::Object(vec![]))), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "a10".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_default_sig() { + let sig = parse_nu_signature( + r#" + def main [ foo = "Foo", bar: string = "Bar", bazz = 3 ] {} + "#, + ) + .unwrap(); + + println!("{}", serde_json::to_string_pretty(&sig).unwrap()); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "foo".into(), + otyp: None, + typ: Typ::Unknown, + default: Some(json!("Foo")), + has_default: true, + oidx: None + }, + Arg { + name: "bar".into(), + otyp: None, + typ: Typ::Str(None), + default: Some(json!("Bar")), + has_default: true, + oidx: None + }, + Arg { + name: "bazz".into(), + otyp: None, + typ: Typ::Unknown, + default: Some(json!(3)), + has_default: true, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_preprocessor_sig() {} + + #[test] + fn test_nu_flags_sig() { + assert!(parse_nu_signature( + r#" + def main [--flag] {} + "#, + ) + .is_err()); + } + #[test] + fn test_nu_rest_sig() { + assert!(parse_nu_signature( + r#" + def main [...foo: string] {} + "#, + ) + .is_err()) + } + + // #[test] + // fn test_nu_dynamically_sized_sig() { + // parse_nu_signature( + // r#" + // def main [] { + + // } + // "#, + // ); + // } + // #[test] + // fn test_nu_record_sig() { + // let sig = parse_nu_signature( + // r#" + // def main [ foo: record ] { } + // "#, + // ) + // .unwrap(); + + // assert_eq!( + // MainArgSignature { + // star_args: false, + // star_kwargs: false, + // args: vec![Arg { + // name: "foo".into(), + // otyp: None, + // typ: Typ::Object(vec![ + // ObjectProperty { key: "a".into(), typ: Box::new(Typ::Str(None)) }, + // ObjectProperty { key: "b".into(), typ: Box::new(Typ::Unknown) }, + // ObjectProperty { key: "c".into(), typ: Box::new(Typ::Float) }, + // ObjectProperty { key: "d".into(), typ: Box::new(Typ::Unknown) }, + // ]), + // default: None, + // has_default: false, + // oidx: None + // },], + // no_main_func: Some(false), + // has_preprocessor: None, + // }, + // sig + // ); + // } + + #[test] + fn test_nu_list_sig() { + let sig = parse_nu_signature( + r#" + def main [ foo: list ] { } + "#, + ) + .unwrap(); + + println!("{}", serde_json::to_string_pretty(&sig).unwrap()); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + name: "foo".into(), + otyp: None, + typ: Typ::List(Box::new(Typ::Float)), + default: None, + has_default: false, + oidx: None + },], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + #[test] + fn test_nu_list_full_sig() { + let sig = parse_nu_signature( + r#" + def main [ a, foo: list = [ 2, 3, 4 ], b ] { } + "#, + ) + .unwrap(); + + println!("{}", serde_json::to_string_pretty(&sig).unwrap()); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "a".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "foo".into(), + otyp: None, + typ: Typ::List(Box::new(Typ::Float)), + default: Some(json!([2, 3, 4])), + has_default: true, + oidx: None + }, + Arg { + name: "b".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + + #[test] + fn test_nu_datetime_sig() { + let sig = parse_nu_signature( + r#" + def main [ foo: datetime ] { } + "#, + ) + .unwrap(); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + name: "foo".into(), + otyp: None, + typ: Typ::Datetime, + default: None, + has_default: false, + oidx: None + },], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + // TODO: Re-enable for V1 + // #[test] + // fn test_nu_table_sig() { + // let sig = parse_nu_signature( + // r#" + // def main [ foo: table] { } + // "#, + // ) + // .unwrap(); + + // assert_eq!( + // MainArgSignature { + // star_args: false, + // star_kwargs: false, + // args: vec![Arg { + // name: "foo".into(), + // otyp: None, + // typ: Typ::List(Box::new(Typ::Object(vec![ + // ObjectProperty { key: "a".into(), typ: Box::new(Typ::Unknown) }, + // ObjectProperty { key: "b".into(), typ: Box::new(Typ::Float) }, + // ObjectProperty { key: "c".into(), typ: Box::new(Typ::Str(None)) }, + // ]))), + // default: None, + // has_default: false, + // oidx: None + // },], + // no_main_func: Some(false), + // has_preprocessor: None, + // }, + // sig + // ); + // } + + #[test] + fn test_nu_wrapup_sig() { + let sig = parse_nu_signature( + r#" + def main [a ,b :int,c? , d: string = "foo", bi?: any] {} + "#, + ) + .unwrap(); + + assert_eq!( + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "a".into(), + otyp: None, + typ: Typ::Unknown, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "b".into(), + otyp: None, + typ: Typ::Int, + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "c".into(), + otyp: None, + typ: Typ::Unknown, + default: Some(serde_json::Value::Null), + has_default: true, + oidx: None + }, + Arg { + name: "d".into(), + otyp: None, + typ: Typ::Str(None), + default: Some(json!("foo")), + has_default: true, + oidx: None + }, + Arg { + name: "bi".into(), + otyp: None, + typ: Typ::Unknown, + default: Some(serde_json::Value::Null), + has_default: true, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: None, + }, + sig + ); + } + // #[test] + // fn test_nu_wrapup_nested_sig() { + // let sig = parse_nu_signature( + // r#" + // def main [ + // baz: string, + // foo: record, + // d: record> + // = + // { + // a: "a", + // b: 3, + // c: [ 2, 3, 4 ], + // d: { + // a: true, + // b: false, + // c: true + // } + // } + // ] { } + // "#, + // ) + // .unwrap(); + + // println!("{}", serde_json::to_string_pretty(&sig).unwrap()); + + // assert_eq!( + // MainArgSignature { + // star_args: false, + // star_kwargs: false, + // args: vec![ + // Arg { + // name: "baz".into(), + // otyp: None, + // typ: Typ::Str(None), + // default: None, + // has_default: false, + // oidx: None + // }, + // Arg { + // name: "foo".into(), + // otyp: None, + // typ: Typ::Object(vec![ + // ObjectProperty { key: "a".into(), typ: Box::new(Typ::Str(None)) }, + // ObjectProperty { key: "b".into(), typ: Box::new(Typ::Unknown) }, + // ObjectProperty { + // key: "c".into(), + // typ: Box::new(Typ::List(Box::new(Typ::Float))) + // }, + // ObjectProperty { + // key: "d".into(), + // typ: Box::new(Typ::Object(vec![ + // ObjectProperty { + // key: "a1".into(), + // typ: Box::new(Typ::Unknown) + // }, + // ObjectProperty { + // key: "b1".into(), + // typ: Box::new(Typ::Unknown) + // }, + // ObjectProperty { + // key: "c1".into(), + // typ: Box::new(Typ::Unknown) + // } + // ])) + // }, + // ]), + // default: Some(json!({ + // "a": "a", + // "b": 3, + // "c": [ + // 2, + // 3, + // 4 + // ], + // "d": { + // "a": true, + // "b": false, + // "c": true + // } + // })), + // has_default: true, + // oidx: None + // }, + // ], + // no_main_func: Some(false), + // has_preprocessor: None, + // }, + // sig + // ); + // } + #[test] + fn test_nu_nested_extra_types() { + assert_eq!( + parse_nu_signature( + r#" + def main [a: list] {} + "#, + ) + .is_err(), + true + ); + assert_eq!( + parse_nu_signature( + r#" + def main [a: list] {} + "#, + ) + .is_err(), + true + ); + assert_eq!( + parse_nu_signature( + r#" + def main [a: list] {} + "#, + ) + .is_err(), + true + ); + assert_eq!( + parse_nu_signature( + r#" + def main [a: list] {} + "#, + ) + .is_err(), + true + ); + assert_eq!( + parse_nu_signature( + r#" + def main [a: list>] {} + "#, + ) + .is_err(), + true + ); + } +} diff --git a/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql index d75bf4396c..590ce1bd5f 100644 --- a/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql +++ b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql @@ -2580,4 +2580,4 @@ import innerdifffolder '{}', '', '', -'f/foobar/bar', -28028598712388159, 'python3', ''); \ No newline at end of file +'f/foobar/bar', -28028598712388159, 'python3', ''); diff --git a/backend/parsers/windmill-parser-wasm/.envrc b/backend/parsers/windmill-parser-wasm/.envrc new file mode 100644 index 0000000000..f7604555f4 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/.envrc @@ -0,0 +1 @@ +use flake ../../#wasm diff --git a/backend/parsers/windmill-parser-wasm/Cargo.toml b/backend/parsers/windmill-parser-wasm/Cargo.toml index c78a9da69f..fe450c32b4 100644 --- a/backend/parsers/windmill-parser-wasm/Cargo.toml +++ b/backend/parsers/windmill-parser-wasm/Cargo.toml @@ -27,6 +27,7 @@ rust-parser = [ "dep:windmill-parser-rust"] graphql-parser = [ "dep:windmill-parser-graphql"] ansible-parser = [ "dep:windmill-parser-yaml"] csharp-parser = [ "dep:windmill-parser-csharp"] +nu-parser = [ "dep:windmill-parser-nu"] [dependencies] anyhow.workspace = true @@ -41,6 +42,7 @@ windmill-parser-graphql = { workspace = true, optional = true } windmill-parser-rust = { workspace = true, optional = true } windmill-parser-yaml = { workspace = true, optional = true } windmill-parser-csharp = { workspace = true, optional = true } +windmill-parser-nu = { workspace = true, optional = true } wasm-bindgen.workspace = true serde_json.workspace = true getrandom = { workspace = true, features = ["js"] } diff --git a/backend/parsers/windmill-parser-wasm/README_DEV.md b/backend/parsers/windmill-parser-wasm/README_DEV.md index ff3f866f4e..1de11be4bf 100644 --- a/backend/parsers/windmill-parser-wasm/README_DEV.md +++ b/backend/parsers/windmill-parser-wasm/README_DEV.md @@ -1,3 +1,4 @@ + ### Windmill parser wasm How to build @@ -14,7 +15,20 @@ Install wasm-pack cargo install wasm-pack ``` -#### To use it on a dev environment +Or enter nix devshell + +``` +nix develop ../../#wasm +``` + +#### Dev locally + +``` +./dev.nu +``` + + +#### Or how to use it on a dev environment manually Go to frontend and run: @@ -23,3 +37,15 @@ npm install ../backend/parsers/windmill-parser-wasm/pkg ``` Make sure to not reset the package.json before commiting + +#### Testing with docker + +Go to the root +``` +sudo docker/dev.nu up --features "," --wasm-pkg +``` + +For example to test `nu`: +``` +sudo docker/dev.nu up --features "static_frontend,nu" --wasm-pkg nu +``` diff --git a/backend/parsers/windmill-parser-wasm/build-pkgs-cli.sh b/backend/parsers/windmill-parser-wasm/build-pkgs-cli.sh new file mode 100755 index 0000000000..34c36e8820 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/build-pkgs-cli.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash +set -eou pipefail + +#-# bun and deno +OUT_DIR="../../../cli/wasm/ts" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "ts-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-ts"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# sql languages, graphql and bash/powershell, since they all use regex +OUT_DIR="../../../cli/wasm/regex" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR \ + --features "sql-parser,graphql-parser,bash-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-regex"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# python +OUT_DIR="../../../cli/wasm/python" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "py-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-py"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# go +OUT_DIR="../../../cli/wasm/go" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "go-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-go"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# php +OUT_DIR="../../../cli/wasm/php" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "php-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-php"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# rust +OUT_DIR="../../../cli/wasm/rust" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "rust-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-rust"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# ansible +OUT_DIR="../../../cli/wasm/yaml" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "ansible-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-yaml"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# C# (needs some more stuff to compile C tree sitter into wasm) +OUT_DIR="../../../cli/wasm/csharp" +mkdir -p $OUT_DIR +CFLAGS_wasm32_unknown_unknown="-I$(pwd)/wasm-sysroot -Wbad-function-cast -Wcast-function-type -fno-builtin" RUSTFLAGS="-Zwasm-c-abi=spec" wasm-pack build --release --target deno --out-dir $OUT_DIR --features "csharp-parser" +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-csharp"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + +#-# Nu +OUT_DIR="../../../cli/wasm/nu" +mkdir -p $OUT_DIR +wasm-pack build --release --target deno --out-dir $OUT_DIR --features "nu-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +# sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-nu"/' $OUT_DIR/package.json +rm $OUT_DIR/.gitignore + diff --git a/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh b/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh index dcd5a78275..85de323a90 100755 --- a/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh +++ b/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh @@ -1,56 +1,63 @@ #!/bin/bash set -eou pipefail -# full pkg +#-# full pkg OUT_DIR="pkg" wasm-pack build --release --target web --out-dir $OUT_DIR --all-features \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort -# bun and deno +#-# bun and deno OUT_DIR="pkg-ts" wasm-pack build --release --target web --out-dir $OUT_DIR --features "ts-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-ts"/' $OUT_DIR/package.json -# sql languages, graphql and bash/powershell, since they all use regex +#-# sql languages, graphql and bash/powershell, since they all use regex OUT_DIR="pkg-regex" wasm-pack build --release --target web --out-dir $OUT_DIR \ --features "sql-parser,graphql-parser,bash-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-regex"/' $OUT_DIR/package.json -# python +#-# python OUT_DIR="pkg-py" wasm-pack build --release --target web --out-dir $OUT_DIR --features "py-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-py"/' $OUT_DIR/package.json -# go +#-# go OUT_DIR="pkg-go" wasm-pack build --release --target web --out-dir $OUT_DIR --features "go-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-go"/' $OUT_DIR/package.json -# php +#-# php OUT_DIR="pkg-php" wasm-pack build --release --target web --out-dir $OUT_DIR --features "php-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-php"/' $OUT_DIR/package.json -# rust +#-# rust OUT_DIR="pkg-rust" wasm-pack build --release --target web --out-dir $OUT_DIR --features "rust-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-rust"/' $OUT_DIR/package.json -# ansible +#-# ansible OUT_DIR="pkg-yaml" wasm-pack build --release --target web --out-dir $OUT_DIR --features "ansible-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-yaml"/' $OUT_DIR/package.json -# C# (needs some more stuff to compile C tree sitter into wasm) +#-# C# (needs some more stuff to compile C tree sitter into wasm) # TODO: hasn't been tested on mac, might need fixing OUT_DIR="pkg-csharp" CFLAGS_wasm32_unknown_unknown="-I$(pwd)/wasm-sysroot -Wbad-function-cast -Wcast-function-type -fno-builtin" RUSTFLAGS="-Zwasm-c-abi=spec" wasm-pack build --release --target web --out-dir $OUT_DIR --features "csharp-parser" sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-csharp"/' $OUT_DIR/package.json + +#-# nu +# TODO: hasn't been tested on mac, might need fixing +OUT_DIR="pkg-nu" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "nu-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-nu"/' $OUT_DIR/package.json diff --git a/backend/parsers/windmill-parser-wasm/build-pkgs.sh b/backend/parsers/windmill-parser-wasm/build-pkgs.sh index ec7a1f5ee4..e2f0b6b471 100755 --- a/backend/parsers/windmill-parser-wasm/build-pkgs.sh +++ b/backend/parsers/windmill-parser-wasm/build-pkgs.sh @@ -1,55 +1,62 @@ -#!/bin/bash +#!/usr/bin/env bash set -eou pipefail -# full pkg +#-# full pkg OUT_DIR="pkg" wasm-pack build --release --target web --out-dir $OUT_DIR --all-features \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort -# bun and deno +#-# bun and deno OUT_DIR="pkg-ts" wasm-pack build --release --target web --out-dir $OUT_DIR --features "ts-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-ts"/' $OUT_DIR/package.json -# sql languages, graphql and bash/powershell, since they all use regex +#-# sql languages, graphql and bash/powershell, since they all use regex OUT_DIR="pkg-regex" wasm-pack build --release --target web --out-dir $OUT_DIR \ --features "sql-parser,graphql-parser,bash-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-regex"/' $OUT_DIR/package.json -# python +#-# python OUT_DIR="pkg-py" wasm-pack build --release --target web --out-dir $OUT_DIR --features "py-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-py"/' $OUT_DIR/package.json -# go +#-# go OUT_DIR="pkg-go" wasm-pack build --release --target web --out-dir $OUT_DIR --features "go-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-go"/' $OUT_DIR/package.json -# php +#-# php OUT_DIR="pkg-php" wasm-pack build --release --target web --out-dir $OUT_DIR --features "php-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-php"/' $OUT_DIR/package.json -# rust +#-# rust OUT_DIR="pkg-rust" wasm-pack build --release --target web --out-dir $OUT_DIR --features "rust-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-rust"/' $OUT_DIR/package.json -# ansible +#-# ansible OUT_DIR="pkg-yaml" wasm-pack build --release --target web --out-dir $OUT_DIR --features "ansible-parser" \ -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-yaml"/' $OUT_DIR/package.json -# C# (needs some more stuff to compile C tree sitter into wasm) +#-# C# (needs some more stuff to compile C tree sitter into wasm) OUT_DIR="pkg-csharp" CFLAGS_wasm32_unknown_unknown="-I$(pwd)/wasm-sysroot -Wbad-function-cast -Wcast-function-type -fno-builtin" RUSTFLAGS="-Zwasm-c-abi=spec" wasm-pack build --release --target web --out-dir $OUT_DIR --features "csharp-parser" sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-csharp"/' $OUT_DIR/package.json + +#-# Nu +OUT_DIR="pkg-nu" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "nu-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-nu"/' $OUT_DIR/package.json + diff --git a/backend/parsers/windmill-parser-wasm/build.sh b/backend/parsers/windmill-parser-wasm/build.sh index b872e2c912..c843d2b445 100755 --- a/backend/parsers/windmill-parser-wasm/build.sh +++ b/backend/parsers/windmill-parser-wasm/build.sh @@ -1,4 +1,8 @@ -#!/bin/bash +#!/usr/bin/env bash set -eou pipefail -deno task wasmbuild --out ../../../cli/wasm/ -p windmill-parser-wasm --all-features +# Flags are needed to build correctly with C# +# NOTE: Currently does not work with nix nor nixos +CFLAGS_wasm32_unknown_unknown="-I$(pwd)/wasm-sysroot -Wbad-function-cast -Wcast-function-type -fno-builtin" RUSTFLAGS="-Zwasm-c-abi=spec" deno task wasmbuild --inline --out ../../../cli/wasm/ -p windmill-parser-wasm --all-features + + diff --git a/backend/parsers/windmill-parser-wasm/deno.json b/backend/parsers/windmill-parser-wasm/deno.json index abdd5e39d1..1887a74f76 100644 --- a/backend/parsers/windmill-parser-wasm/deno.json +++ b/backend/parsers/windmill-parser-wasm/deno.json @@ -1,5 +1,5 @@ { "tasks": { - "wasmbuild": "deno run -A jsr:@deno/wasmbuild@0.17.2" + "wasmbuild": "deno run -A jsr:@deno/wasmbuild@0.19.0" } } diff --git a/backend/parsers/windmill-parser-wasm/dev.nu b/backend/parsers/windmill-parser-wasm/dev.nu new file mode 100755 index 0000000000..e80f3c302f --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/dev.nu @@ -0,0 +1,25 @@ +#!/usr/bin/env nu + +# Build in debug mode specified lang parser to wasm +# and perform installation to frontend +def "main" [ + lang: string # Example: nu + --release(-r) +] { + let out_dir = $'pkg-($lang)' + if $release { + open build-pkgs.sh + | split row '#-' + | find $out_dir + | bash -c $"RUST_LOG=trace ($in.0)" + } else { + open build-pkgs.sh + | split row '#-' + | find $out_dir + | str replace "--release" "--no-opt" + | bash -c $"WASM_OPT=-Oz ($in.0)" + } + ( + cd ../../../frontend; npm install ../backend/parsers/windmill-parser-wasm/($out_dir) + ) +} diff --git a/backend/parsers/windmill-parser-wasm/flake.lock b/backend/parsers/windmill-parser-wasm/flake.lock deleted file mode 100644 index c8733c1921..0000000000 --- a/backend/parsers/windmill-parser-wasm/flake.lock +++ /dev/null @@ -1,95 +0,0 @@ -{ - "nodes": { - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1737885589, - "narHash": "sha256-Zf0hSrtzaM1DEz8//+Xs51k/wdSajticVrATqDrfQjg=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "852ff1d9e153d8875a83602e03fdef8a63f0ecf8", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1736320768, - "narHash": "sha256-nIYdTAiKIGnFNugbomgBJR+Xv5F1ZQU+HfaBqJKroC0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "4bc9c909d9ac828a039f288cf872d16d38185db8", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - } - }, - "rust-overlay": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1738117527, - "narHash": "sha256-GFviGfaezjGLFUlxdv3zyC7rSZvTXqwcG/YsF6MDkOw=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "6a3dc6ce4132bd57359214d986db376f2333c14d", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/backend/parsers/windmill-parser-wasm/flake.nix b/backend/parsers/windmill-parser-wasm/flake.nix deleted file mode 100644 index ac97d8c80a..0000000000 --- a/backend/parsers/windmill-parser-wasm/flake.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ - inputs = { - nixpkgs.url = "nixpkgs/nixos-unstable"; - flake-utils.url = "github:numtide/flake-utils"; - rust-overlay.url = "github:oxalica/rust-overlay"; - }; - - outputs = { - nixpkgs, - flake-utils, - rust-overlay, - ... - }: - flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - overlays = [(import rust-overlay)]; - }; - rust = pkgs.rust-bin.nightly.latest.default.override { - extensions = [ - "rust-src" - ]; - targets = ["wasm32-unknown-unknown"]; - }; - in { - devShell = pkgs.mkShell { - buildInputs = with pkgs; [ - rust - nodejs - wasm-pack - sccache - ]; - RUSTC_WRAPPER = "${pkgs.sccache}/bin/sccache"; - CARGO_PATH = "${rust}/bin/cargo"; - }; - }); -} diff --git a/backend/parsers/windmill-parser-wasm/publish-pkgs.sh b/backend/parsers/windmill-parser-wasm/publish-pkgs.sh index a4af8bb684..4180853b8b 100755 --- a/backend/parsers/windmill-parser-wasm/publish-pkgs.sh +++ b/backend/parsers/windmill-parser-wasm/publish-pkgs.sh @@ -27,3 +27,6 @@ popd pushd "pkg-csharp" && npm publish ${args} popd + +pushd "pkg-nu" && npm publish ${args} +popd diff --git a/backend/parsers/windmill-parser-wasm/src/lib.rs b/backend/parsers/windmill-parser-wasm/src/lib.rs index 306d67751c..2ca8f2f2b0 100644 --- a/backend/parsers/windmill-parser-wasm/src/lib.rs +++ b/backend/parsers/windmill-parser-wasm/src/lib.rs @@ -149,3 +149,9 @@ pub fn parse_ansible(code: &str) -> String { pub fn parse_csharp(code: &str) -> String { wrap_sig(windmill_parser_csharp::parse_csharp_signature(code)) } + +#[cfg(feature = "nu-parser")] +#[wasm_bindgen] +pub fn parse_nu(code: &str) -> String { + wrap_sig(windmill_parser_nu::parse_nu_signature(code)) +} diff --git a/backend/parsers/windmill-parser/src/lib.rs b/backend/parsers/windmill-parser/src/lib.rs index 6f793d0cc7..617b906154 100644 --- a/backend/parsers/windmill-parser/src/lib.rs +++ b/backend/parsers/windmill-parser/src/lib.rs @@ -10,7 +10,7 @@ use convert_case::{Boundary, Case, Casing}; use serde::Serialize; use serde_json::Value; -#[derive(Serialize, Debug, PartialEq)] +#[derive(Serialize, Debug, PartialEq, Default)] pub struct MainArgSignature { pub star_args: bool, pub star_kwargs: bool, diff --git a/backend/src/main.rs b/backend/src/main.rs index 9c87afa8a2..235365926b 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -66,8 +66,8 @@ use windmill_common::global_settings::OBJECT_STORE_CACHE_CONFIG_SETTING; use windmill_worker::{ get_hub_script_content_and_requirements, BUN_BUNDLE_CACHE_DIR, BUN_CACHE_DIR, CSHARP_CACHE_DIR, DENO_CACHE_DIR, DENO_CACHE_DIR_DEPS, DENO_CACHE_DIR_NPM, GO_BIN_CACHE_DIR, GO_CACHE_DIR, - POWERSHELL_CACHE_DIR, PY310_CACHE_DIR, PY311_CACHE_DIR, PY312_CACHE_DIR, PY313_CACHE_DIR, - RUST_CACHE_DIR, TAR_PY310_CACHE_DIR, TAR_PY311_CACHE_DIR, TAR_PY312_CACHE_DIR, + NU_CACHE_DIR, POWERSHELL_CACHE_DIR, PY310_CACHE_DIR, PY311_CACHE_DIR, PY312_CACHE_DIR, + PY313_CACHE_DIR, RUST_CACHE_DIR, TAR_PY310_CACHE_DIR, TAR_PY311_CACHE_DIR, TAR_PY312_CACHE_DIR, TAR_PY313_CACHE_DIR, UV_CACHE_DIR, }; @@ -1080,6 +1080,7 @@ pub async fn run_workers( GO_BIN_CACHE_DIR, RUST_CACHE_DIR, CSHARP_CACHE_DIR, + NU_CACHE_DIR, HUB_CACHE_DIR, POWERSHELL_CACHE_DIR, ] { diff --git a/backend/tests/worker.rs b/backend/tests/worker.rs index 0e0e209a5b..17f210d05f 100644 --- a/backend/tests/worker.rs +++ b/backend/tests/worker.rs @@ -1886,6 +1886,109 @@ echo "hello $msg" assert_eq!(job.json_result(), Some(json!("hello world"))); } +#[cfg(feature = "nu")] +#[sqlx::test(fixtures("base"))] +async fn test_nu_job(db: Pool) { + initialize_tracing().await; + let server = ApiServer::start(db.clone()).await; + let port = server.addr.port(); + + let content = r#" +def main [ msg: string ] { + "hello " + $msg +} +"# + .to_owned(); + + let job = RunJob::from(JobPayload::Code(RawCode { + hash: None, + content, + path: None, + lock: None, + language: ScriptLang::Nu, + custom_concurrency_key: None, + concurrent_limit: None, + concurrency_time_window_s: None, + cache_ttl: None, + dedicated_worker: None, + })) + .arg("msg", json!("world")) + .run_until_complete(&db, port) + .await; + assert_eq!(job.json_result(), Some(json!("hello world"))); +} + +#[cfg(feature = "nu")] +#[sqlx::test(fixtures("base"))] +async fn test_nu_job_full(db: Pool) { + initialize_tracing().await; + let server = ApiServer::start(db.clone()).await; + let port = server.addr.port(); + + let content = r#" +def main [ + # Required + ## Primitive + a + b: any + c: bool + d: float + e: datetime + f: string + j: nothing + ## Nesting + g: record + h: list + i: table + # Optional + m? + n = "foo" + o: any = "foo" + p?: any + # TODO: ...x + ] { + 0 +} + "# + .to_owned(); + + let result = RunJob::from(JobPayload::Code(RawCode { + hash: None, + content, + path: None, + lock: None, + language: ScriptLang::Nu, + custom_concurrency_key: None, + concurrent_limit: None, + concurrency_time_window_s: None, + cache_ttl: None, + dedicated_worker: None, + })) + .arg("a", json!("3")) + .arg("b", json!("null")) + .arg("c", json!(true)) + .arg("d", json!(3.0)) + .arg("e", json!("2024-09-24T10:00:00.000Z")) + .arg("f", json!("str")) + .arg("j", json!(null)) + .arg("g", json!({"a": 32})) + .arg("h", json!(["foo"])) + .arg( + "i", + json!([ + {"a": 1, "b": "foo", "c": true}, + {"a": 2, "b": "baz", "c": false} + ]), + ) + .arg("n", json!("baz")) + .run_until_complete(&db, port) + .await + .json_result() + .unwrap(); + + assert_eq!(result, serde_json::json!(0)); +} + #[sqlx::test(fixtures("base"))] async fn test_python_job(db: Pool) { initialize_tracing().await; diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 29b84c05b5..5339ed86af 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -13380,7 +13380,8 @@ components: php, rust, ansible, - csharp + csharp, + nu ] Preview: diff --git a/backend/windmill-api/src/scripts.rs b/backend/windmill-api/src/scripts.rs index 6b6003b329..3e0197fccc 100644 --- a/backend/windmill-api/src/scripts.rs +++ b/backend/windmill-api/src/scripts.rs @@ -610,6 +610,7 @@ async fn create_script_internal<'c>( || ns.language == ScriptLang::Rust || ns.language == ScriptLang::Ansible || ns.language == ScriptLang::CSharp + || ns.language == ScriptLang::Nu || ns.language == ScriptLang::Php) { Some(String::new()) diff --git a/backend/windmill-api/src/workspaces_export.rs b/backend/windmill-api/src/workspaces_export.rs index 449b5e3256..003a01c002 100644 --- a/backend/windmill-api/src/workspaces_export.rs +++ b/backend/windmill-api/src/workspaces_export.rs @@ -376,6 +376,7 @@ pub(crate) async fn tarball_workspace( ScriptLang::Rust => "rs", ScriptLang::Ansible => "playbook.yml", ScriptLang::CSharp => "cs", + ScriptLang::Nu => "nu", ScriptLang::OracleDB => "odb.sql", }; archive diff --git a/backend/windmill-common/src/global_settings.rs b/backend/windmill-common/src/global_settings.rs index 41ccccdebd..e0c091a0da 100644 --- a/backend/windmill-common/src/global_settings.rs +++ b/backend/windmill-common/src/global_settings.rs @@ -40,7 +40,7 @@ pub const JWT_SECRET_SETTING: &str = "jwt_secret"; pub const EMAIL_DOMAIN_SETTING: &str = "email_domain"; pub const OTEL_SETTING: &str = "otel"; -pub const ENV_SETTINGS: [&str; 58] = [ +pub const ENV_SETTINGS: &[&str] = &[ "DISABLE_NSJAIL", "MODE", "NUM_WORKERS", @@ -58,6 +58,7 @@ pub const ENV_SETTINGS: [&str; 58] = [ "S3_CACHE_BUCKET", "COOKIE_DOMAIN", "PYTHON_PATH", + "NU_PATH", "DENO_PATH", "GO_PATH", "GOPRIVATE", diff --git a/backend/windmill-common/src/schema.rs b/backend/windmill-common/src/schema.rs index d3ef869c6c..4b97f761ae 100644 --- a/backend/windmill-common/src/schema.rs +++ b/backend/windmill-common/src/schema.rs @@ -364,6 +364,7 @@ pub fn should_validate_schema(code: &str, lang: &ScriptLang) -> bool { ScriptLang::Rust => find_annotation("//!", annotation, code), ScriptLang::Ansible => find_annotation("#", annotation, code), ScriptLang::CSharp => find_annotation("//", annotation, code), + ScriptLang::Nu => find_annotation("#", annotation, code), } } @@ -650,4 +651,3 @@ mod tests { .expect("Validation should work for this"); } } - diff --git a/backend/windmill-common/src/scripts.rs b/backend/windmill-common/src/scripts.rs index 5658d505b6..b38598f0b8 100644 --- a/backend/windmill-common/src/scripts.rs +++ b/backend/windmill-common/src/scripts.rs @@ -50,6 +50,7 @@ pub enum ScriptLang { Rust, Ansible, CSharp, + Nu, } impl ScriptLang { @@ -74,6 +75,7 @@ impl ScriptLang { ScriptLang::Rust => "rust", ScriptLang::Ansible => "ansible", ScriptLang::CSharp => "csharp", + ScriptLang::Nu => "nu", } } } diff --git a/backend/windmill-common/src/worker.rs b/backend/windmill-common/src/worker.rs index 856555f29d..af5814aedc 100644 --- a/backend/windmill-common/src/worker.rs +++ b/backend/windmill-common/src/worker.rs @@ -50,6 +50,7 @@ lazy_static::lazy_static! { "rust".to_string(), "ansible".to_string(), "csharp".to_string(), + "nu".to_string(), "dependency".to_string(), "flow".to_string(), "other".to_string() diff --git a/backend/windmill-worker/Cargo.toml b/backend/windmill-worker/Cargo.toml index 73e91da388..f216dab35b 100644 --- a/backend/windmill-worker/Cargo.toml +++ b/backend/windmill-worker/Cargo.toml @@ -29,6 +29,7 @@ oracledb = ["dep:oracle"] python = ["dep:windmill-parser-py", "dep:windmill-parser-py-imports"] csharp = ["dep:windmill-parser-csharp"] rust = ["dep:windmill-parser-rust"] +nu = ["dep:windmill-parser-nu"] [dependencies] windmill-queue.workspace = true @@ -39,6 +40,7 @@ windmill-parser-ts.workspace = true windmill-parser-go.workspace = true windmill-parser-rust = { workspace = true, optional = true } windmill-parser-csharp = { workspace = true, optional = true } +windmill-parser-nu = { workspace = true, optional = true } windmill-parser-py = { workspace = true, optional = true } windmill-parser-yaml.workspace = true windmill-parser-py-imports = { workspace = true, optional = true } diff --git a/backend/windmill-worker/nsjail/run.nu.config.proto b/backend/windmill-worker/nsjail/run.nu.config.proto new file mode 100644 index 0000000000..8d27d92455 --- /dev/null +++ b/backend/windmill-worker/nsjail/run.nu.config.proto @@ -0,0 +1,106 @@ +name: "nu run script" + +mode: ONCE +hostname: "nu" +log_level: ERROR + +disable_rl: true + +cwd: "/tmp" + +clone_newnet: false +clone_newuser: {CLONE_NEWUSER} + +keep_caps: false +keep_env: true +mount_proc: true + +mount { + src: "/bin" + dst: "/bin" + is_bind: true +} + +mount { + src: "/lib" + dst: "/lib" + is_bind: true +} + + +mount { + src: "/lib64" + dst: "/lib64" + is_bind: true + mandatory: false +} + + +mount { + src: "/usr" + dst: "/usr" + is_bind: true +} + +mount { + src: "/dev/null" + dst: "/dev/null" + is_bind: true + rw: true +} + +mount { + dst: "/tmp" + fstype: "tmpfs" + rw: true + options: "size=800000000" +} + +mount { + src: "{NU_PATH}" + dst: "{NU_PATH}" + is_bind: true +} + +mount { + src: "{JOB_DIR}/main.nu" + dst: "/tmp/main.nu" + is_bind: true +} + +mount { + src: "{JOB_DIR}/result.json" + dst: "/tmp/result.json" + rw: true + is_bind: true +} + +mount { + src: "{JOB_DIR}/args.json" + dst: "/tmp/args.json" + rw: true + is_bind: true +} +mount { + src: "/etc" + dst: "/etc" + is_bind: true +} + +mount { + src: "/dev/random" + dst: "/dev/random" + is_bind: true +} + +mount { + src: "/dev/urandom" + dst: "/dev/urandom" + is_bind: true +} + +iface_no_lo: true + +{SHARED_MOUNT} + +envar: "HOME=/tmp" diff --git a/backend/windmill-worker/src/lib.rs b/backend/windmill-worker/src/lib.rs index 40c19beea6..4ae83309da 100644 --- a/backend/windmill-worker/src/lib.rs +++ b/backend/windmill-worker/src/lib.rs @@ -9,6 +9,8 @@ mod snowflake_executor; mod ansible_executor; mod bash_executor; +#[cfg(feature = "nu")] +mod nu_executor; #[cfg(feature = "benchmark")] pub mod bench; mod bun_executor; diff --git a/backend/windmill-worker/src/nu_executor.rs b/backend/windmill-worker/src/nu_executor.rs new file mode 100644 index 0000000000..2859e016b8 --- /dev/null +++ b/backend/windmill-worker/src/nu_executor.rs @@ -0,0 +1,356 @@ +use std::{collections::HashMap, process::Stdio}; + +use itertools::Itertools; +use serde_json::value::RawValue; +use tokio::{fs::File, io::AsyncWriteExt, process::Command}; +use windmill_common::{error::Error, worker::write_file}; +use windmill_parser::Arg; +use windmill_parser_nu::parse_nu_signature; +use windmill_queue::{append_logs, CanceledBy, MiniPulledJob}; + +use crate::{ + common::{ + create_args_and_out_file, get_reserved_variables, read_result, start_child_process, + OccupancyMetrics, + }, + handle_child, AuthedClientBackgroundTask, DISABLE_NSJAIL, DISABLE_NUSER, NSJAIL_PATH, PATH_ENV, + PROXY_ENVS, +}; + +const NSJAIL_CONFIG_RUN_NU_CONTENT: &str = include_str!("../nsjail/run.nu.config.proto"); +lazy_static::lazy_static! { + static ref NU_PATH: String = std::env::var("NU_PATH").unwrap_or_else(|_| "/usr/bin/nu".to_string()); + // TODO(v1): + // static ref PLUGIN_USE_RE: Regex = Regex::new(r#"(?:plugin use )(?.*)"#).unwrap(); +} + +// TODO: Can be generalized and used for other handlers +#[allow(dead_code)] +pub(crate) struct JobHandlerInput<'a> { + pub base_internal_url: &'a str, + pub canceled_by: &'a mut Option, + pub client: &'a AuthedClientBackgroundTask, + pub db: &'a sqlx::Pool, + pub envs: HashMap, + pub inner_content: &'a str, + pub job: &'a MiniPulledJob, + pub job_dir: &'a str, + pub mem_peak: &'a mut i32, + pub occupancy_metrics: &'a mut OccupancyMetrics, + pub requirements_o: Option<&'a String>, + pub shared_mount: &'a str, + pub worker_name: &'a str, +} + +pub async fn handle_nu_job<'a>(mut args: JobHandlerInput<'a>) -> Result, Error> { + // TODO(v1): + // --- Handle plugins --- + // let plugins = get_plugins(&mut args).await?; + // TODO(v1): + // --- Handle imports --- + // TODO(v1): + // --- Handle relative --- + // --- Wrap and write to fs --- + { + create_args_and_out_file(&args.client, args.job, args.job_dir, args.db).await?; + File::create(format!("{}/main.nu", args.job_dir)) + .await? + .write_all(&wrap(args.inner_content)?.into_bytes()) + .await?; + } + // --- Execute --- + { + run(&mut args).await?; + } + // --- Retrieve results --- + { + read_result(&args.job_dir).await + } +} + +// async fn get_plugins<'a>( +// JobHandlerInput { +// occupancy_metrics, +// mem_peak, +// canceled_by, +// worker_name, +// job, +// db, +// inner_content, +// .. +// }: &mut JobHandlerInput<'a>, +// ) -> Result, Error> { +// let plugins_dir = concatcp!(NU_CACHE_DIR, "/plugins"); +// let nu_version = from_utf8_mut( +// Command::new(NU_PATH.as_str()) +// .arg("--version") +// .output() +// .await? +// .stdout +// .as_mut_slice(), +// ) +// .map_err(|e| windmill_common::error::Error::ExecutionErr(e.to_string()))? +// .to_owned(); + +// let plugins = parse_plugin_use(inner_content); + +// for plugin in &plugins { +// let mut run_cmd = Command::new(CARGO_PATH.as_str()); +// // cargo install nu_plugin_query --version (nu --version); plugin add ~/.cargo/bin/nu_plugin_query +// run_cmd +// // TODO: make it work with env_clear +// // .env_clear() +// .args(&[ +// "install", +// "--root", +// plugins_dir, +// "--locked", +// &format!("nu_plugin_{plugin}"), +// "--version", +// &nu_version, +// ]) +// .stdout(Stdio::piped()) +// .stderr(Stdio::piped()); + +// #[cfg(windows)] +// nsjail_cmd.env("SystemRoot", SYSTEM_ROOT.as_str()); +// let child = start_child_process(run_cmd, "cargo").await?; +// // handle_child::handle_child( +// // &job.id, +// // db, +// // mem_peak, +// // canceled_by, +// // child, +// // !*DISABLE_NSJAIL, +// // worker_name, +// // &job.workspace_id, +// // "cargo", +// // job.timeout, +// // false, +// // &mut Some(occupancy_metrics), +// // ) +// // .await?; +// } +// Ok(plugins) +// } + +// fn parse_plugin_use(inner_content: &str) -> Vec<&str> { +// let mut plugins = vec![]; +// // TODO: Ignore plugins with # in the beginning +// for cap in PLUGIN_USE_RE.captures_iter(inner_content).into_iter() { +// if let Some(mat) = cap.name("plugin") { +// plugins.push(mat.as_str()); +// } +// } +// plugins +// } + +/// Wraps content script +/// that upon execution reads args.json (which are piped and transformed from previous flow step or top level inputs) +/// Also wrapper takes output of program and serializes to result.json (Which windmill will know how to use later) +fn wrap(inner_content: &str) -> Result { + let sig = parse_nu_signature(inner_content)?; + let spread = sig + .args + .clone() + .into_iter() + .map(|Arg { name, typ, has_default, .. }| { + // Apply additional input transformation + let transformation = format!( + "| if $in != null {{ {} }} else {{ $in }}", + match typ { + // JSON converts X.0 to X and nu can't coerce type automatically + windmill_parser::Typ::Datetime => "into datetime", + windmill_parser::Typ::Bytes => "into binary", + windmill_parser::Typ::Float => "into float", + // Ident + _ => "$in", + } + ); + let nullguard = if has_default || matches!(typ, windmill_parser::Typ::Unknown) { + "".to_owned() + } else { + format!("| nullguard {name}") + }; + format!("\n\t\t\t($parsed_args.{name}? {nullguard} {transformation}) ",) + }) + .collect_vec() + .join(" "); + Ok( + r#" +$env.config.table.mode = 'basic' + +def nullguard [ name: string ] { + if ($in == null) { + panic $"argument `($name)` of main function can't be null" + } + $in +} + +# TODO: Probably needs rework in order for LSP to work +def get_variable [ pat ] { + let addr = $"($env.BASE_INTERNAL_URL)/api/w/($env.WM_WORKSPACE)/variables/get_value/($pat)" ; + http get -H ["Authorization", $"Bearer ($env.WM_TOKEN)"] $addr | return $in +} +def get_resource [ pat ] { + let addr = $"($env.BASE_INTERNAL_URL)/api/w/($env.WM_WORKSPACE)/resources/get_value_interpolated/($pat)" ; + http get -H ["Authorization", $"Bearer ($env.WM_TOKEN)"] $addr | return $in +} + +def 'main --wrapped' [] { + let parsed_args = open args.json + (main SPREAD + ) | to json | save -f result.json +} + +INNER_CONTENT + "# + .replace("INNER_CONTENT", inner_content) + .replace("SPREAD", &spread), // .replace("TRANSFORM", transform) + ) +} + +async fn run<'a>( + JobHandlerInput { + occupancy_metrics, + mem_peak, + canceled_by, + worker_name, + job, + db, + job_dir, + shared_mount, + client, + envs, + base_internal_url, + .. + }: &mut JobHandlerInput<'a>, + // plugins: Vec<&'a str>, +) -> Result<(), Error> { + let client = &client.get_authed().await; + let reserved_variables = get_reserved_variables(job, &client.token, db).await?; + let child = if !cfg!(windows) && !*DISABLE_NSJAIL { + append_logs( + &job.id, + &job.workspace_id, + format!("\n\n--- ISOLATED NU CODE EXECUTION ---\n"), + db.clone(), + ) + .await; + + write_file( + job_dir, + "run.config.proto", + &NSJAIL_CONFIG_RUN_NU_CONTENT + .replace("{JOB_DIR}", job_dir) + .replace("{NU_PATH}", &NU_PATH) + .replace("{SHARED_MOUNT}", &shared_mount) + .replace("{CLONE_NEWUSER}", &(!*DISABLE_NUSER).to_string()), + )?; + let mut nsjail_cmd = Command::new(NSJAIL_PATH.as_str()); + nsjail_cmd + .env_clear() + .current_dir(job_dir) + .env("PATH", PATH_ENV.as_str()) + .env("BASE_INTERNAL_URL", base_internal_url) + .envs(envs) + .envs(reserved_variables) + .envs(PROXY_ENVS.clone()) + .args(vec![ + "--config", + "run.config.proto", + "--", + NU_PATH.as_str(), + "/tmp/main.nu", + "--wrapped", + ]) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + + start_child_process(nsjail_cmd, NSJAIL_PATH.as_str()).await? + } else { + append_logs( + &job.id, + &job.workspace_id, + format!("\n\n--- NU CODE EXECUTION ---\n"), + db.clone(), + ) + .await; + + // let plugin_registry = format!("{job_dir}/plugin-registry"); + // File::create(&plugin_registry).await?; + // + let mut cmd = Command::new(if cfg!(windows) { + "nu" + } else { + NU_PATH.as_str() + }); + cmd.env_clear() + .current_dir(job_dir.to_owned()) + .env("PATH", PATH_ENV.as_str()) + .env("BASE_INTERNAL_URL", base_internal_url) + .envs(envs) + .envs(reserved_variables) + .envs(PROXY_ENVS.clone()) + .args(&[ + "main.nu", + "--wrapped", + // TODO(v1): + // "--plugins", + // &format!( + // "[{}]", + // plugins + // .into_iter() + // .map(|pl| format!("{NU_CACHE_DIR}/plugins/bin/nu_plugin_{pl}")) + // .collect_vec() + // .join(",") + // ), + ]) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + + #[cfg(windows)] + { + cmd.env("SystemRoot", crate::SYSTEM_ROOT.as_str()) + .env("USERPROFILE", crate::USERPROFILE_ENV.as_str()) + .env( + "TMP", + std::env::var("TMP").unwrap_or_else(|_| String::from("/tmp")), + ); + } + start_child_process(cmd, "nu").await? + }; + handle_child::handle_child( + &job.id, + db, + mem_peak, + canceled_by, + child, + !*DISABLE_NSJAIL, + worker_name, + &job.workspace_id, + "nu", + job.timeout, + false, + &mut Some(occupancy_metrics), + ) + .await +} +// #[cfg(test)] +// mod test { +// use super::parse_plugin_use; + +// #[test] +// fn test_nu_plugin_use() { +// let content = r#" +// plugin use foo +// plugin use bar +// plugin use baz +// plugin use meh +// "#; +// assert_eq!( +// vec!["foo", "bar", "baz", "meh"], // +// parse_plugin_use(content) +// ); +// } +// } diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs index ea2ddca55f..6f7bd1f16a 100644 --- a/backend/windmill-worker/src/worker.rs +++ b/backend/windmill-worker/src/worker.rs @@ -122,6 +122,9 @@ use crate::{ #[cfg(feature = "rust")] use crate::rust_executor::handle_rust_job; +#[cfg(feature = "nu")] +use crate::nu_executor::{handle_nu_job, JobHandlerInput}; + #[cfg(feature = "php")] use crate::php_executor::handle_php_job; @@ -275,6 +278,7 @@ pub const DENO_CACHE_DIR_NPM: &str = concatcp!(ROOT_CACHE_DIR, "deno/npm"); pub const GO_CACHE_DIR: &str = concatcp!(ROOT_CACHE_DIR, "go"); pub const RUST_CACHE_DIR: &str = concatcp!(ROOT_CACHE_DIR, "rust"); +pub const NU_CACHE_DIR: &str = concatcp!(ROOT_CACHE_DIR, "nu"); pub const CSHARP_CACHE_DIR: &str = concatcp!(ROOT_CACHE_DIR, "csharp"); pub const BUN_CACHE_DIR: &str = concatcp!(ROOT_CACHE_NOMOUNT_DIR, "bun"); pub const BUN_BUNDLE_CACHE_DIR: &str = concatcp!(ROOT_CACHE_DIR, "bun"); @@ -3026,6 +3030,30 @@ mount {{ ) .await } + Some(ScriptLang::Nu) => { + #[cfg(not(feature = "nu"))] + return Err( + anyhow::anyhow!("Nu is not available because the feature is not enabled").into(), + ); + + #[cfg(feature = "nu")] + handle_nu_job(JobHandlerInput { + mem_peak, + canceled_by, + job, + db, + client, + inner_content: &code, + job_dir, + requirements_o: lock.as_ref(), + shared_mount: &shared_mount, + base_internal_url, + worker_name, + envs, + occupancy_metrics, + }) + .await + } _ => panic!("unreachable, language is not supported: {language:#?}"), }; tracing::info!( @@ -3089,6 +3117,10 @@ fn parse_sig_of_lang( ScriptLang::CSharp => Some(windmill_parser_csharp::parse_csharp_signature(code)?), #[cfg(not(feature = "csharp"))] ScriptLang::CSharp => None, + #[cfg(feature = "nu")] + ScriptLang::Nu => Some(windmill_parser_nu::parse_nu_signature(code)?), + #[cfg(not(feature = "nu"))] + ScriptLang::Nu => None, } } else { None diff --git a/backend/windmill-worker/src/worker_lockfiles.rs b/backend/windmill-worker/src/worker_lockfiles.rs index c0b0826664..47a0d264cb 100644 --- a/backend/windmill-worker/src/worker_lockfiles.rs +++ b/backend/windmill-worker/src/worker_lockfiles.rs @@ -2050,6 +2050,7 @@ async fn capture_dependency_job( ScriptLang::Graphql => Ok("".to_owned()), ScriptLang::OracleDB => Ok("".to_owned()), ScriptLang::Bash => Ok("".to_owned()), + ScriptLang::Nu => Ok("".to_owned()), ScriptLang::Powershell => Ok("".to_owned()), ScriptLang::Nativets => Ok("".to_owned()), } diff --git a/cli/bootstrap/script_bootstrap.ts b/cli/bootstrap/script_bootstrap.ts index 79ca7d92b7..5c2247e66b 100644 --- a/cli/bootstrap/script_bootstrap.ts +++ b/cli/bootstrap/script_bootstrap.ts @@ -94,6 +94,11 @@ function main() { } } `, + nu: ` +def main [] { + print "Hello World" +} + `, rust: `fn main() -> Result<(), String> { println!("Hello World"); diff --git a/cli/deno.json b/cli/deno.json index 6276c18bbc..fae7e8f7dd 100644 --- a/cli/deno.json +++ b/cli/deno.json @@ -15,4 +15,4 @@ "@std/yaml": "jsr:@std/yaml@^1.0.5", "@types/diff": "npm:@types/diff@^5.2.2" } -} +} \ No newline at end of file diff --git a/cli/deno.lock b/cli/deno.lock index 4d4111261c..b1ff9b9a2b 100644 --- a/cli/deno.lock +++ b/cli/deno.lock @@ -1,2319 +1,2195 @@ { - "version": "3", - "packages": { - "specifiers": { - "jsr:@david/code-block-writer@^13.0.2": "jsr:@david/code-block-writer@13.0.2", - "jsr:@deno/cache-dir@^0.10.3": "jsr:@deno/cache-dir@0.10.3", - "jsr:@deno/dnt@0.41.3": "jsr:@deno/dnt@0.41.3", - "jsr:@deno/dnt@^0.41.3": "jsr:@deno/dnt@0.41.3", - "jsr:@std/assert@1.0.0-rc.2": "jsr:@std/assert@1.0.0-rc.2", - "jsr:@std/assert@^0.223.0": "jsr:@std/assert@0.223.0", - "jsr:@std/assert@^0.226.0": "jsr:@std/assert@0.226.0", - "jsr:@std/bytes@^0.223.0": "jsr:@std/bytes@0.223.0", - "jsr:@std/bytes@^1.0.2": "jsr:@std/bytes@1.0.2", - "jsr:@std/cli@1.0.0-rc.2": "jsr:@std/cli@1.0.0-rc.2", - "jsr:@std/encoding": "jsr:@std/encoding@1.0.4", - "jsr:@std/encoding@1.0.0-rc.2": "jsr:@std/encoding@1.0.0-rc.2", - "jsr:@std/encoding@^1.0.4": "jsr:@std/encoding@1.0.4", - "jsr:@std/fmt@1": "jsr:@std/fmt@1.0.2", - "jsr:@std/fmt@^0.223": "jsr:@std/fmt@0.223.0", - "jsr:@std/fmt@^1.0.2": "jsr:@std/fmt@1.0.2", - "jsr:@std/fmt@~0.225.4": "jsr:@std/fmt@0.225.6", - "jsr:@std/fs": "jsr:@std/fs@1.0.3", - "jsr:@std/fs@1": "jsr:@std/fs@1.0.3", - "jsr:@std/fs@^0.223": "jsr:@std/fs@0.223.0", - "jsr:@std/fs@^0.229.3": "jsr:@std/fs@0.229.3", - "jsr:@std/fs@^1.0.3": "jsr:@std/fs@1.0.3", - "jsr:@std/io": "jsr:@std/io@0.224.7", - "jsr:@std/io@^0.223": "jsr:@std/io@0.223.0", - "jsr:@std/io@^0.224.7": "jsr:@std/io@0.224.7", - "jsr:@std/io@~0.224.2": "jsr:@std/io@0.224.7", - "jsr:@std/log": "jsr:@std/log@0.224.7", - "jsr:@std/log@^0.224.7": "jsr:@std/log@0.224.7", - "jsr:@std/net": "jsr:@std/net@1.0.2", - "jsr:@std/net@^1.0.2": "jsr:@std/net@1.0.2", - "jsr:@std/path": "jsr:@std/path@1.0.4", - "jsr:@std/path@1": "jsr:@std/path@1.0.4", - "jsr:@std/path@1.0.0-rc.1": "jsr:@std/path@1.0.0-rc.1", - "jsr:@std/path@1.0.0-rc.2": "jsr:@std/path@1.0.0-rc.2", - "jsr:@std/path@^0.223": "jsr:@std/path@0.223.0", - "jsr:@std/path@^0.225.2": "jsr:@std/path@0.225.2", - "jsr:@std/path@^1.0.4": "jsr:@std/path@1.0.4", - "jsr:@std/streams@^1.0.4": "jsr:@std/streams@1.0.4", - "jsr:@std/text@1.0.0-rc.1": "jsr:@std/text@1.0.0-rc.1", - "jsr:@std/yaml": "jsr:@std/yaml@1.0.5", - "jsr:@std/yaml@^1.0.5": "jsr:@std/yaml@1.0.5", - "jsr:@ts-morph/bootstrap@^0.24.0": "jsr:@ts-morph/bootstrap@0.24.0", - "jsr:@ts-morph/common@^0.24.0": "jsr:@ts-morph/common@0.24.0", - "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-ansi@^1.0.0-rc.5": "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-command@^1.0.0-rc.5": "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-flags@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-flags@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-keycode@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-keycode@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.6": "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.6", - "jsr:@windmill-labs/cliffy-prompt@^1.0.0-rc.5": "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5": "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-table@^1.0.0-rc.5": "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5", - "npm:@ayonli/jsext": "npm:@ayonli/jsext@0.9.58", - "npm:@oakserver/oak@12": "npm:@oakserver/oak@12.6.2", - "npm:@types/diff@^5.2.2": "npm:@types/diff@5.2.2", - "npm:@types/node": "npm:@types/node@18.16.19", - "npm:diff": "npm:diff@5.2.0", - "npm:es-main": "npm:es-main@1.3.0", - "npm:esbuild": "npm:esbuild@0.23.0", - "npm:eslint-plugin-import@^2.30.0": "npm:eslint-plugin-import@2.30.0_eslint@8.57.1", - "npm:eslint@^9.10.0": "npm:eslint@9.10.0", - "npm:express": "npm:express@4.19.2", - "npm:get-port": "npm:get-port@7.1.0", - "npm:get-port@7.1.0": "npm:get-port@7.1.0", - "npm:gitignore-parser": "npm:gitignore-parser@0.0.2", - "npm:jszip@3.7.1": "npm:jszip@3.7.1", - "npm:minimatch": "npm:minimatch@10.0.1", - "npm:open": "npm:open@10.1.0", - "npm:windmill-client@1.364.0": "npm:windmill-client@1.364.0", - "npm:ws": "npm:ws@8.18.0" + "version": "4", + "specifiers": { + "jsr:@david/code-block-writer@^13.0.2": "13.0.2", + "jsr:@deno/cache-dir@~0.10.3": "0.10.3", + "jsr:@deno/dnt@0.41.3": "0.41.3", + "jsr:@deno/dnt@~0.41.3": "0.41.3", + "jsr:@deno/graph@~0.73.1": "0.73.1", + "jsr:@std/assert@0.223": "0.223.0", + "jsr:@std/assert@0.226": "0.226.0", + "jsr:@std/assert@1.0.0-rc.2": "1.0.0-rc.2", + "jsr:@std/bytes@0.223": "0.223.0", + "jsr:@std/bytes@^1.0.2": "1.0.2", + "jsr:@std/cli@1.0.0-rc.2": "1.0.0-rc.2", + "jsr:@std/encoding@*": "1.0.4", + "jsr:@std/encoding@1.0.0-rc.2": "1.0.0-rc.2", + "jsr:@std/encoding@^1.0.4": "1.0.4", + "jsr:@std/fmt@0.223": "0.223.0", + "jsr:@std/fmt@1": "1.0.2", + "jsr:@std/fmt@^1.0.2": "1.0.2", + "jsr:@std/fmt@~0.225.4": "0.225.6", + "jsr:@std/fs@*": "1.0.3", + "jsr:@std/fs@0.223": "0.223.0", + "jsr:@std/fs@1": "1.0.3", + "jsr:@std/fs@^1.0.3": "1.0.3", + "jsr:@std/fs@~0.229.3": "0.229.3", + "jsr:@std/io@*": "0.224.7", + "jsr:@std/io@0.223": "0.223.0", + "jsr:@std/io@~0.224.2": "0.224.7", + "jsr:@std/io@~0.224.7": "0.224.7", + "jsr:@std/log@*": "0.224.7", + "jsr:@std/log@~0.224.7": "0.224.7", + "jsr:@std/net@*": "1.0.2", + "jsr:@std/net@^1.0.2": "1.0.2", + "jsr:@std/path@*": "1.0.4", + "jsr:@std/path@0.223": "0.223.0", + "jsr:@std/path@1": "1.0.4", + "jsr:@std/path@1.0.0-rc.1": "1.0.0-rc.1", + "jsr:@std/path@1.0.0-rc.2": "1.0.0-rc.2", + "jsr:@std/path@^1.0.4": "1.0.4", + "jsr:@std/path@~0.225.2": "0.225.2", + "jsr:@std/streams@^1.0.4": "1.0.4", + "jsr:@std/text@1.0.0-rc.1": "1.0.0-rc.1", + "jsr:@std/yaml@*": "1.0.5", + "jsr:@std/yaml@^1.0.5": "1.0.5", + "jsr:@ts-morph/bootstrap@0.24": "0.24.0", + "jsr:@ts-morph/common@0.24": "0.24.0", + "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-ansi@^1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-command@^1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-flags@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-keycode@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5": "1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.6": "1.0.0-rc.6", + "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: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: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" + }, + "jsr": { + "@david/code-block-writer@13.0.2": { + "integrity": "14dd3baaafa3a2dea8bf7dfbcddeccaa13e583da2d21d666c01dc6d681cd74ad" }, - "jsr": { - "@david/code-block-writer@13.0.2": { - "integrity": "14dd3baaafa3a2dea8bf7dfbcddeccaa13e583da2d21d666c01dc6d681cd74ad" - }, - "@deno/cache-dir@0.10.3": { - "integrity": "eb022f84ecc49c91d9d98131c6e6b118ff63a29e343624d058646b9d50404776", - "dependencies": [ - "jsr:@std/fmt@^0.223", - "jsr:@std/fs@^0.223", - "jsr:@std/io@^0.223", - "jsr:@std/path@^0.223" - ] - }, - "@deno/dnt@0.41.3": { - "integrity": "b2ef2c8a5111eef86cb5bfcae103d6a2938e8e649e2461634a7befb7fc59d6d2", - "dependencies": [ - "jsr:@david/code-block-writer@^13.0.2", - "jsr:@deno/cache-dir@^0.10.3", - "jsr:@std/fmt@1", - "jsr:@std/fs@1", - "jsr:@std/path@1", - "jsr:@ts-morph/bootstrap@^0.24.0" - ] - }, - "@std/assert@0.223.0": { - "integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24" - }, - "@std/assert@0.226.0": { - "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3" - }, - "@std/assert@1.0.0-rc.2": { - "integrity": "0484eab1d76b55fca1c3beaff485a274e67dd3b9f065edcbe70030dfc0b964d3" - }, - "@std/bytes@0.223.0": { - "integrity": "84b75052cd8680942c397c2631318772b295019098f40aac5c36cead4cba51a8" - }, - "@std/bytes@1.0.2": { - "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" - }, - "@std/cli@1.0.0-rc.2": { - "integrity": "97dfae82b9f0e189768ebfa7a5da53375955b94bad0a1804f8e3b73563b03787" - }, - "@std/encoding@1.0.0-rc.2": { - "integrity": "160d7674a20ebfbccdf610b3801fee91cf6e42d1c106dd46bbaf46e395cd35ef" - }, - "@std/encoding@1.0.4": { - "integrity": "2266cd516b32369e3dc5695717c96bf88343a1f761d6e6187a02a2bbe2af86ae" - }, - "@std/fmt@0.223.0": { - "integrity": "6deb37794127dfc7d7bded2586b9fc6f5d50e62a8134846608baf71ffc1a5208" - }, - "@std/fmt@0.225.6": { - "integrity": "aba6aea27f66813cecfd9484e074a9e9845782ab0685c030e453a8a70b37afc8" - }, - "@std/fmt@1.0.2": { - "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" - }, - "@std/fs@0.223.0": { - "integrity": "3b4b0550b2c524cbaaa5a9170c90e96cbb7354e837ad1bdaf15fc9df1ae9c31c" - }, - "@std/fs@0.229.3": { - "integrity": "783bca21f24da92e04c3893c9e79653227ab016c48e96b3078377ebd5222e6eb", - "dependencies": [ - "jsr:@std/path@1.0.0-rc.1" - ] - }, - "@std/fs@1.0.3": { - "integrity": "3cb839b1360b0a42d8b367c3093bfe4071798e6694fa44cf1963e04a8edba4fe", - "dependencies": [ - "jsr:@std/path@^1.0.4" - ] - }, - "@std/io@0.223.0": { - "integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1", - "dependencies": [ - "jsr:@std/assert@^0.223.0", - "jsr:@std/bytes@^0.223.0" - ] - }, - "@std/io@0.224.7": { - "integrity": "a70848793c44a7c100926571a8c9be68ba85487bfcd4d0540d86deabe1123dc9", - "dependencies": [ - "jsr:@std/bytes@^1.0.2" - ] - }, - "@std/log@0.224.7": { - "integrity": "021941e5cd16de60cb11599c9b36f892aea95987fe66c753922808da27909e18", - "dependencies": [ - "jsr:@std/fmt@^1.0.2", - "jsr:@std/fs@^1.0.3", - "jsr:@std/io@^0.224.7" - ] - }, - "@std/net@1.0.2": { - "integrity": "520c18ddb7f67d3830a1adfef03a155d496fe9683a9cb63bb823b5afb86484dc" - }, - "@std/path@0.223.0": { - "integrity": "593963402d7e6597f5a6e620931661053572c982fc014000459edc1f93cc3989", - "dependencies": [ - "jsr:@std/assert@^0.223.0" - ] - }, - "@std/path@0.225.2": { - "integrity": "0f2db41d36b50ef048dcb0399aac720a5348638dd3cb5bf80685bf2a745aa506", - "dependencies": [ - "jsr:@std/assert@^0.226.0" - ] - }, - "@std/path@1.0.0-rc.1": { - "integrity": "b8c00ae2f19106a6bb7cbf1ab9be52aa70de1605daeb2dbdc4f87a7cbaf10ff6" - }, - "@std/path@1.0.0-rc.2": { - "integrity": "39f20d37a44d1867abac8d91c169359ea6e942237a45a99ee1e091b32b921c7d" - }, - "@std/path@1.0.4": { - "integrity": "48dd5d8389bcfcd619338a01bdf862cb7799933390146a54ae59356a0acc7105" - }, - "@std/streams@1.0.4": { - "integrity": "a1a5b01c74ca1d2dcaacfe1d4bbb91392e765946d82a3471bd95539adc6da83a", - "dependencies": [ - "jsr:@std/bytes@^1.0.2" - ] - }, - "@std/text@1.0.0-rc.1": { - "integrity": "34c722203e87ee12792c8d4a0cd2ee0e001341cbce75b860fc21be19d62232b0" - }, - "@std/yaml@1.0.5": { - "integrity": "71ba3d334305ee2149391931508b2c293a8490f94a337eef3a09cade1a2a2742" - }, - "@ts-morph/bootstrap@0.24.0": { - "integrity": "a826a2ef7fa8a7c3f1042df2c034d20744d94da2ee32bf29275bcd4dffd3c060", - "dependencies": [ - "jsr:@ts-morph/common@^0.24.0" - ] - }, - "@ts-morph/common@0.24.0": { - "integrity": "12b625b8e562446ba658cdbe9ad77774b4bd96b992ae8bd34c60dbf24d06c1f3", - "dependencies": [ - "jsr:@std/fs@^0.229.3", - "jsr:@std/path@^0.225.2" - ] - }, - "@windmill-labs/cliffy-ansi@1.0.0-rc.5": { - "integrity": "1109cbcb0c415b57779352f708f5969b8c645f56bc555cbafc6ea5e0c6a360a4", - "dependencies": [ - "jsr:@std/encoding@1.0.0-rc.2", - "jsr:@std/fmt@~0.225.4", - "jsr:@std/io@~0.224.2", - "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5" - ] - }, - "@windmill-labs/cliffy-command@1.0.0-rc.5": { - "integrity": "3eaa9def5f5afa1028f4a60ee4d9065ccc5f194d032824365c6ebcb9f46db66e", - "dependencies": [ - "jsr:@std/fmt@~0.225.4", - "jsr:@std/text@1.0.0-rc.1", - "jsr:@windmill-labs/cliffy-flags@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5" - ] - }, - "@windmill-labs/cliffy-flags@1.0.0-rc.5": { - "integrity": "0e4b5b53a02295f8bf27d93b3bcca5d5d001a0286aea17404e6ef6347f69363c", - "dependencies": [ - "jsr:@std/text@1.0.0-rc.1" - ] - }, - "@windmill-labs/cliffy-internal@1.0.0-rc.5": { - "integrity": "876b989ad2d1b739cc4a4f1386dbb80f819d2851ad583c1f486fc6ebe9beadf6" - }, - "@windmill-labs/cliffy-keycode@1.0.0-rc.5": { - "integrity": "2bc1b1af363528e38ed47bce525f417cab278b829a423353ffd589622f5a746e" - }, - "@windmill-labs/cliffy-prompt@1.0.0-rc.5": { - "integrity": "329a097911f219b15ea643ae83b6b360a11df7fc4cafdac1bf6869259475033a", - "dependencies": [ - "jsr:@std/assert@1.0.0-rc.2", - "jsr:@std/fmt@~0.225.4", - "jsr:@std/io@~0.224.2", - "jsr:@std/path@1.0.0-rc.2", - "jsr:@std/text@1.0.0-rc.1", - "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-keycode@1.0.0-rc.5" - ] - }, - "@windmill-labs/cliffy-prompt@1.0.0-rc.6": { - "integrity": "ffe09bee0e1e07bc12b2147be509d10b47eb6a36cbfea80fc206b4ae86693205", - "dependencies": [ - "jsr:@std/assert@1.0.0-rc.2", - "jsr:@std/fmt@~0.225.4", - "jsr:@std/io@~0.224.2", - "jsr:@std/path@1.0.0-rc.2", - "jsr:@std/text@1.0.0-rc.1", - "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-internal@1.0.0-rc.5", - "jsr:@windmill-labs/cliffy-keycode@1.0.0-rc.5" - ] - }, - "@windmill-labs/cliffy-table@1.0.0-rc.5": { - "integrity": "5f26cb6ccbc2fbf1b1f79f9062d166e32e11d34398c0deac7e6f9d8378970546", - "dependencies": [ - "jsr:@std/cli@1.0.0-rc.2", - "jsr:@std/fmt@~0.225.4" - ] - } + "@deno/cache-dir@0.10.3": { + "integrity": "eb022f84ecc49c91d9d98131c6e6b118ff63a29e343624d058646b9d50404776", + "dependencies": [ + "jsr:@deno/graph", + "jsr:@std/fmt@0.223", + "jsr:@std/fs@0.223", + "jsr:@std/io@0.223", + "jsr:@std/path@0.223" + ] }, - "npm": { - "@ayonli/jsext@0.9.58": { - "integrity": "sha512-AwGf64K6VqGyYLFA6rgyuU6jBbwUNJctENpW1bZayvXcIprhdfs7cn7S+EXi0pnNLupT9ptODYkKneB3/YuWww==", - "dependencies": { - "iconv-lite": "iconv-lite@0.6.3", - "sudo-prompt": "sudo-prompt@9.2.1", - "ws": "ws@8.18.0" - } - }, - "@deno/shim-crypto@0.3.1": { - "integrity": "sha512-ed4pNnfur6UbASEgF34gVxR9p7Mc3qF+Ygbmjiil8ws5IhNFhPDFy5vE5hQAUA9JmVsSxXPcVLM5Rf8LOZqQ5Q==", - "dependencies": {} - }, - "@deno/shim-deno-test@0.5.0": { - "integrity": "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==", - "dependencies": {} - }, - "@deno/shim-deno@0.17.0": { - "integrity": "sha512-+FzsP65eehAgTQdzt1izLEV17ePCZqHxDQqRDbpRc1yJVYtDI2MvbRq5DvOj90uRt6zKn9qtWpEueDqG1QORhQ==", - "dependencies": { - "@deno/shim-deno-test": "@deno/shim-deno-test@0.5.0", - "which": "which@4.0.0" - } - }, - "@esbuild/aix-ppc64@0.23.0": { - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", - "dependencies": {} - }, - "@esbuild/android-arm64@0.23.0": { - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", - "dependencies": {} - }, - "@esbuild/android-arm@0.23.0": { - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", - "dependencies": {} - }, - "@esbuild/android-x64@0.23.0": { - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", - "dependencies": {} - }, - "@esbuild/darwin-arm64@0.23.0": { - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", - "dependencies": {} - }, - "@esbuild/darwin-x64@0.23.0": { - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", - "dependencies": {} - }, - "@esbuild/freebsd-arm64@0.23.0": { - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", - "dependencies": {} - }, - "@esbuild/freebsd-x64@0.23.0": { - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", - "dependencies": {} - }, - "@esbuild/linux-arm64@0.23.0": { - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", - "dependencies": {} - }, - "@esbuild/linux-arm@0.23.0": { - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", - "dependencies": {} - }, - "@esbuild/linux-ia32@0.23.0": { - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", - "dependencies": {} - }, - "@esbuild/linux-loong64@0.23.0": { - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", - "dependencies": {} - }, - "@esbuild/linux-mips64el@0.23.0": { - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", - "dependencies": {} - }, - "@esbuild/linux-ppc64@0.23.0": { - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", - "dependencies": {} - }, - "@esbuild/linux-riscv64@0.23.0": { - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", - "dependencies": {} - }, - "@esbuild/linux-s390x@0.23.0": { - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", - "dependencies": {} - }, - "@esbuild/linux-x64@0.23.0": { - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", - "dependencies": {} - }, - "@esbuild/netbsd-x64@0.23.0": { - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", - "dependencies": {} - }, - "@esbuild/openbsd-arm64@0.23.0": { - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", - "dependencies": {} - }, - "@esbuild/openbsd-x64@0.23.0": { - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", - "dependencies": {} - }, - "@esbuild/sunos-x64@0.23.0": { - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", - "dependencies": {} - }, - "@esbuild/win32-arm64@0.23.0": { - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", - "dependencies": {} - }, - "@esbuild/win32-ia32@0.23.0": { - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", - "dependencies": {} - }, - "@esbuild/win32-x64@0.23.0": { - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", - "dependencies": {} - }, - "@eslint-community/eslint-utils@4.4.0_eslint@8.57.1": { - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint": "eslint@8.57.1", - "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" - } - }, - "@eslint-community/eslint-utils@4.4.0_eslint@9.10.0": { - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint": "eslint@9.10.0", - "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" - } - }, - "@eslint-community/regexpp@4.11.1": { - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", - "dependencies": {} - }, - "@eslint/config-array@0.18.0": { - "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", - "dependencies": { - "@eslint/object-schema": "@eslint/object-schema@2.1.4", - "debug": "debug@4.3.7", - "minimatch": "minimatch@3.1.2" - } - }, - "@eslint/eslintrc@2.1.4": { - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "ajv@6.12.6", - "debug": "debug@4.3.7", - "espree": "espree@9.6.1_acorn@8.12.1", - "globals": "globals@13.24.0", - "ignore": "ignore@5.3.2", - "import-fresh": "import-fresh@3.3.0", - "js-yaml": "js-yaml@4.1.0", - "minimatch": "minimatch@3.1.2", - "strip-json-comments": "strip-json-comments@3.1.1" - } - }, - "@eslint/eslintrc@3.1.0": { - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dependencies": { - "ajv": "ajv@6.12.6", - "debug": "debug@4.3.7", - "espree": "espree@10.1.0_acorn@8.12.1", - "globals": "globals@14.0.0", - "ignore": "ignore@5.3.2", - "import-fresh": "import-fresh@3.3.0", - "js-yaml": "js-yaml@4.1.0", - "minimatch": "minimatch@3.1.2", - "strip-json-comments": "strip-json-comments@3.1.1" - } - }, - "@eslint/js@8.57.1": { - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dependencies": {} - }, - "@eslint/js@9.10.0": { - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", - "dependencies": {} - }, - "@eslint/object-schema@2.1.4": { - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", - "dependencies": {} - }, - "@eslint/plugin-kit@0.1.0": { - "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", - "dependencies": { - "levn": "levn@0.4.1" - } - }, - "@fastify/busboy@2.1.1": { - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dependencies": {} - }, - "@humanwhocodes/config-array@0.13.0": { - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "dependencies": { - "@humanwhocodes/object-schema": "@humanwhocodes/object-schema@2.0.3", - "debug": "debug@4.3.7", - "minimatch": "minimatch@3.1.2" - } - }, - "@humanwhocodes/module-importer@1.0.1": { - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dependencies": {} - }, - "@humanwhocodes/object-schema@2.0.3": { - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dependencies": {} - }, - "@humanwhocodes/retry@0.3.0": { - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", - "dependencies": {} - }, - "@nodelib/fs.scandir@2.1.5": { - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", - "run-parallel": "run-parallel@1.2.0" - } - }, - "@nodelib/fs.stat@2.0.5": { - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dependencies": {} - }, - "@nodelib/fs.walk@1.2.8": { - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", - "fastq": "fastq@1.17.1" - } - }, - "@oakserver/oak@12.6.2": { - "integrity": "sha512-q9LfyC9tWV68me0GEUuA66qbwH8ep0bBdq9V02fePlPmPVUBCAzQQkomyaI/L4Uur+YALVXgLoTaC2rviZ7I4w==", - "dependencies": { - "@deno/shim-crypto": "@deno/shim-crypto@0.3.1", - "@deno/shim-deno": "@deno/shim-deno@0.17.0", - "tslib": "tslib@2.3.1", - "undici": "undici@5.28.4" - } - }, - "@rtsao/scc@1.1.0": { - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dependencies": {} - }, - "@types/diff@5.2.2": { - "integrity": "sha512-qVqLpd49rmJA2nZzLVsmfS/aiiBpfVE95dHhPVwG0NmSBAt+riPxnj53wq2oBq5m4Q2RF1IWFEUpnZTgrQZfEQ==", - "dependencies": {} - }, - "@types/json5@0.0.29": { - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dependencies": {} - }, - "@types/node@18.16.19": { - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", - "dependencies": {} - }, - "@ungap/structured-clone@1.2.0": { - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dependencies": {} - }, - "accepts@1.3.8": { - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "mime-types@2.1.35", - "negotiator": "negotiator@0.6.3" - } - }, - "acorn-jsx@5.3.2_acorn@8.12.1": { - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dependencies": { - "acorn": "acorn@8.12.1" - } - }, - "acorn@8.12.1": { - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dependencies": {} - }, - "ajv@6.12.6": { - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "fast-deep-equal@3.1.3", - "fast-json-stable-stringify": "fast-json-stable-stringify@2.1.0", - "json-schema-traverse": "json-schema-traverse@0.4.1", - "uri-js": "uri-js@4.4.1" - } - }, - "ansi-regex@5.0.1": { - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dependencies": {} - }, - "ansi-styles@4.3.0": { - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "color-convert@2.0.1" - } - }, - "argparse@2.0.1": { - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dependencies": {} - }, - "array-buffer-byte-length@1.0.1": { - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "is-array-buffer": "is-array-buffer@3.0.4" - } - }, - "array-flatten@1.1.1": { - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dependencies": {} - }, - "array-includes@3.1.8": { - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-object-atoms": "es-object-atoms@1.0.0", - "get-intrinsic": "get-intrinsic@1.2.4", - "is-string": "is-string@1.0.7" - } - }, - "array.prototype.findlastindex@1.2.5": { - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-errors": "es-errors@1.3.0", - "es-object-atoms": "es-object-atoms@1.0.0", - "es-shim-unscopables": "es-shim-unscopables@1.0.2" - } - }, - "array.prototype.flat@1.3.2": { - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-shim-unscopables": "es-shim-unscopables@1.0.2" - } - }, - "array.prototype.flatmap@1.3.2": { - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-shim-unscopables": "es-shim-unscopables@1.0.2" - } - }, - "arraybuffer.prototype.slice@1.0.3": { - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dependencies": { - "array-buffer-byte-length": "array-buffer-byte-length@1.0.1", - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-errors": "es-errors@1.3.0", - "get-intrinsic": "get-intrinsic@1.2.4", - "is-array-buffer": "is-array-buffer@3.0.4", - "is-shared-array-buffer": "is-shared-array-buffer@1.0.3" - } - }, - "available-typed-arrays@1.0.7": { - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "possible-typed-array-names@1.0.0" - } - }, - "balanced-match@1.0.2": { - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dependencies": {} - }, - "body-parser@1.20.2": { - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "bytes@3.1.2", - "content-type": "content-type@1.0.5", - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "destroy": "destroy@1.2.0", - "http-errors": "http-errors@2.0.0", - "iconv-lite": "iconv-lite@0.4.24", - "on-finished": "on-finished@2.4.1", - "qs": "qs@6.11.0", - "raw-body": "raw-body@2.5.2", - "type-is": "type-is@1.6.18", - "unpipe": "unpipe@1.0.0" - } - }, - "brace-expansion@1.1.11": { - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2", - "concat-map": "concat-map@0.0.1" - } - }, - "brace-expansion@2.0.1": { - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "balanced-match@1.0.2" - } - }, - "bundle-name@4.1.0": { - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dependencies": { - "run-applescript": "run-applescript@7.0.0" - } - }, - "bytes@3.1.2": { - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dependencies": {} - }, - "call-bind@1.0.7": { - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0", - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "get-intrinsic": "get-intrinsic@1.2.4", - "set-function-length": "set-function-length@1.2.2" - } - }, - "callsites@3.1.0": { - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dependencies": {} - }, - "chalk@4.1.2": { - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "ansi-styles@4.3.0", - "supports-color": "supports-color@7.2.0" - } - }, - "color-convert@2.0.1": { - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "color-name@1.1.4" - } - }, - "color-name@1.1.4": { - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dependencies": {} - }, - "concat-map@0.0.1": { - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dependencies": {} - }, - "content-disposition@0.5.4": { - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "safe-buffer@5.2.1" - } - }, - "content-type@1.0.5": { - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dependencies": {} - }, - "cookie-signature@1.0.6": { - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dependencies": {} - }, - "cookie@0.6.0": { - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dependencies": {} - }, - "core-util-is@1.0.3": { - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dependencies": {} - }, - "cross-spawn@7.0.3": { - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "path-key@3.1.1", - "shebang-command": "shebang-command@2.0.0", - "which": "which@2.0.2" - } - }, - "data-view-buffer@1.0.1": { - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "is-data-view": "is-data-view@1.0.1" - } - }, - "data-view-byte-length@1.0.1": { - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "is-data-view": "is-data-view@1.0.1" - } - }, - "data-view-byte-offset@1.0.0": { - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "is-data-view": "is-data-view@1.0.1" - } - }, - "debug@2.6.9": { - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "ms@2.0.0" - } - }, - "debug@3.2.7": { - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "ms@2.1.3" - } - }, - "debug@4.3.7": { - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dependencies": { - "ms": "ms@2.1.3" - } - }, - "deep-is@0.1.4": { - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dependencies": {} - }, - "default-browser-id@5.0.0": { - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", - "dependencies": {} - }, - "default-browser@5.2.1": { - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", - "dependencies": { - "bundle-name": "bundle-name@4.1.0", - "default-browser-id": "default-browser-id@5.0.0" - } - }, - "define-data-property@1.1.4": { - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0", - "es-errors": "es-errors@1.3.0", - "gopd": "gopd@1.0.1" - } - }, - "define-lazy-prop@3.0.0": { - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dependencies": {} - }, - "define-properties@1.2.1": { - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "define-data-property@1.1.4", - "has-property-descriptors": "has-property-descriptors@1.0.2", - "object-keys": "object-keys@1.1.1" - } - }, - "depd@2.0.0": { - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dependencies": {} - }, - "destroy@1.2.0": { - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dependencies": {} - }, - "diff@5.2.0": { - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dependencies": {} - }, - "doctrine@2.1.0": { - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "esutils@2.0.3" - } - }, - "doctrine@3.0.0": { - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "esutils@2.0.3" - } - }, - "ee-first@1.1.1": { - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dependencies": {} - }, - "encodeurl@1.0.2": { - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dependencies": {} - }, - "es-abstract@1.23.3": { - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dependencies": { - "array-buffer-byte-length": "array-buffer-byte-length@1.0.1", - "arraybuffer.prototype.slice": "arraybuffer.prototype.slice@1.0.3", - "available-typed-arrays": "available-typed-arrays@1.0.7", - "call-bind": "call-bind@1.0.7", - "data-view-buffer": "data-view-buffer@1.0.1", - "data-view-byte-length": "data-view-byte-length@1.0.1", - "data-view-byte-offset": "data-view-byte-offset@1.0.0", - "es-define-property": "es-define-property@1.0.0", - "es-errors": "es-errors@1.3.0", - "es-object-atoms": "es-object-atoms@1.0.0", - "es-set-tostringtag": "es-set-tostringtag@2.0.3", - "es-to-primitive": "es-to-primitive@1.2.1", - "function.prototype.name": "function.prototype.name@1.1.6", - "get-intrinsic": "get-intrinsic@1.2.4", - "get-symbol-description": "get-symbol-description@1.0.2", - "globalthis": "globalthis@1.0.4", - "gopd": "gopd@1.0.1", - "has-property-descriptors": "has-property-descriptors@1.0.2", - "has-proto": "has-proto@1.0.3", - "has-symbols": "has-symbols@1.0.3", - "hasown": "hasown@2.0.2", - "internal-slot": "internal-slot@1.0.7", - "is-array-buffer": "is-array-buffer@3.0.4", - "is-callable": "is-callable@1.2.7", - "is-data-view": "is-data-view@1.0.1", - "is-negative-zero": "is-negative-zero@2.0.3", - "is-regex": "is-regex@1.1.4", - "is-shared-array-buffer": "is-shared-array-buffer@1.0.3", - "is-string": "is-string@1.0.7", - "is-typed-array": "is-typed-array@1.1.13", - "is-weakref": "is-weakref@1.0.2", - "object-inspect": "object-inspect@1.13.2", - "object-keys": "object-keys@1.1.1", - "object.assign": "object.assign@4.1.5", - "regexp.prototype.flags": "regexp.prototype.flags@1.5.2", - "safe-array-concat": "safe-array-concat@1.1.2", - "safe-regex-test": "safe-regex-test@1.0.3", - "string.prototype.trim": "string.prototype.trim@1.2.9", - "string.prototype.trimend": "string.prototype.trimend@1.0.8", - "string.prototype.trimstart": "string.prototype.trimstart@1.0.8", - "typed-array-buffer": "typed-array-buffer@1.0.2", - "typed-array-byte-length": "typed-array-byte-length@1.0.1", - "typed-array-byte-offset": "typed-array-byte-offset@1.0.2", - "typed-array-length": "typed-array-length@1.0.6", - "unbox-primitive": "unbox-primitive@1.0.2", - "which-typed-array": "which-typed-array@1.1.15" - } - }, - "es-define-property@1.0.0": { - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "es-errors@1.3.0": { - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dependencies": {} - }, - "es-main@1.3.0": { - "integrity": "sha512-AzORKdz1Zt97TzbYQnIrI3ZiibWpRXUfpo/w0xOJ20GpNYd2bd3MU9m31zS/aJ1TJl6JfLTok83Y8HjNunYT0A==", - "dependencies": {} - }, - "es-object-atoms@1.0.0": { - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dependencies": { - "es-errors": "es-errors@1.3.0" - } - }, - "es-set-tostringtag@2.0.3": { - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dependencies": { - "get-intrinsic": "get-intrinsic@1.2.4", - "has-tostringtag": "has-tostringtag@1.0.2", - "hasown": "hasown@2.0.2" - } - }, - "es-shim-unscopables@1.0.2": { - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": { - "hasown": "hasown@2.0.2" - } - }, - "es-to-primitive@1.2.1": { - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "is-callable@1.2.7", - "is-date-object": "is-date-object@1.0.5", - "is-symbol": "is-symbol@1.0.4" - } - }, - "esbuild@0.23.0": { - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", - "dependencies": { - "@esbuild/aix-ppc64": "@esbuild/aix-ppc64@0.23.0", - "@esbuild/android-arm": "@esbuild/android-arm@0.23.0", - "@esbuild/android-arm64": "@esbuild/android-arm64@0.23.0", - "@esbuild/android-x64": "@esbuild/android-x64@0.23.0", - "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.23.0", - "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.23.0", - "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.23.0", - "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.23.0", - "@esbuild/linux-arm": "@esbuild/linux-arm@0.23.0", - "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.23.0", - "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.23.0", - "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.23.0", - "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.23.0", - "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.23.0", - "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.23.0", - "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.23.0", - "@esbuild/linux-x64": "@esbuild/linux-x64@0.23.0", - "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.23.0", - "@esbuild/openbsd-arm64": "@esbuild/openbsd-arm64@0.23.0", - "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.23.0", - "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.23.0", - "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.23.0", - "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.23.0", - "@esbuild/win32-x64": "@esbuild/win32-x64@0.23.0" - } - }, - "escape-html@1.0.3": { - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dependencies": {} - }, - "escape-string-regexp@4.0.0": { - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dependencies": {} - }, - "eslint-import-resolver-node@0.3.9": { - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "debug@3.2.7", - "is-core-module": "is-core-module@2.15.1", - "resolve": "resolve@1.22.8" - } - }, - "eslint-module-utils@2.11.0": { - "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==", - "dependencies": { - "debug": "debug@3.2.7" - } - }, - "eslint-plugin-import@2.30.0_eslint@8.57.1": { - "integrity": "sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==", - "dependencies": { - "@rtsao/scc": "@rtsao/scc@1.1.0", - "array-includes": "array-includes@3.1.8", - "array.prototype.findlastindex": "array.prototype.findlastindex@1.2.5", - "array.prototype.flat": "array.prototype.flat@1.3.2", - "array.prototype.flatmap": "array.prototype.flatmap@1.3.2", - "debug": "debug@3.2.7", - "doctrine": "doctrine@2.1.0", - "eslint": "eslint@8.57.1", - "eslint-import-resolver-node": "eslint-import-resolver-node@0.3.9", - "eslint-module-utils": "eslint-module-utils@2.11.0", - "hasown": "hasown@2.0.2", - "is-core-module": "is-core-module@2.15.1", - "is-glob": "is-glob@4.0.3", - "minimatch": "minimatch@3.1.2", - "object.fromentries": "object.fromentries@2.0.8", - "object.groupby": "object.groupby@1.0.3", - "object.values": "object.values@1.2.0", - "semver": "semver@6.3.1", - "tsconfig-paths": "tsconfig-paths@3.15.0" - } - }, - "eslint-scope@7.2.2": { - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "esrecurse@4.3.0", - "estraverse": "estraverse@5.3.0" - } - }, - "eslint-scope@8.0.2": { - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", - "dependencies": { - "esrecurse": "esrecurse@4.3.0", - "estraverse": "estraverse@5.3.0" - } - }, - "eslint-visitor-keys@3.4.3": { - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dependencies": {} - }, - "eslint-visitor-keys@4.0.0": { - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dependencies": {} - }, - "eslint@8.57.1": { - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "dependencies": { - "@eslint-community/eslint-utils": "@eslint-community/eslint-utils@4.4.0_eslint@8.57.1", - "@eslint-community/regexpp": "@eslint-community/regexpp@4.11.1", - "@eslint/eslintrc": "@eslint/eslintrc@2.1.4", - "@eslint/js": "@eslint/js@8.57.1", - "@humanwhocodes/config-array": "@humanwhocodes/config-array@0.13.0", - "@humanwhocodes/module-importer": "@humanwhocodes/module-importer@1.0.1", - "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", - "@ungap/structured-clone": "@ungap/structured-clone@1.2.0", - "ajv": "ajv@6.12.6", - "chalk": "chalk@4.1.2", - "cross-spawn": "cross-spawn@7.0.3", - "debug": "debug@4.3.7", - "doctrine": "doctrine@3.0.0", - "escape-string-regexp": "escape-string-regexp@4.0.0", - "eslint-scope": "eslint-scope@7.2.2", - "eslint-visitor-keys": "eslint-visitor-keys@3.4.3", - "espree": "espree@9.6.1_acorn@8.12.1", - "esquery": "esquery@1.6.0", - "esutils": "esutils@2.0.3", - "fast-deep-equal": "fast-deep-equal@3.1.3", - "file-entry-cache": "file-entry-cache@6.0.1", - "find-up": "find-up@5.0.0", - "glob-parent": "glob-parent@6.0.2", - "globals": "globals@13.24.0", - "graphemer": "graphemer@1.4.0", - "ignore": "ignore@5.3.2", - "imurmurhash": "imurmurhash@0.1.4", - "is-glob": "is-glob@4.0.3", - "is-path-inside": "is-path-inside@3.0.3", - "js-yaml": "js-yaml@4.1.0", - "json-stable-stringify-without-jsonify": "json-stable-stringify-without-jsonify@1.0.1", - "levn": "levn@0.4.1", - "lodash.merge": "lodash.merge@4.6.2", - "minimatch": "minimatch@3.1.2", - "natural-compare": "natural-compare@1.4.0", - "optionator": "optionator@0.9.4", - "strip-ansi": "strip-ansi@6.0.1", - "text-table": "text-table@0.2.0" - } - }, - "eslint@9.10.0": { - "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", - "dependencies": { - "@eslint-community/eslint-utils": "@eslint-community/eslint-utils@4.4.0_eslint@9.10.0", - "@eslint-community/regexpp": "@eslint-community/regexpp@4.11.1", - "@eslint/config-array": "@eslint/config-array@0.18.0", - "@eslint/eslintrc": "@eslint/eslintrc@3.1.0", - "@eslint/js": "@eslint/js@9.10.0", - "@eslint/plugin-kit": "@eslint/plugin-kit@0.1.0", - "@humanwhocodes/module-importer": "@humanwhocodes/module-importer@1.0.1", - "@humanwhocodes/retry": "@humanwhocodes/retry@0.3.0", - "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", - "ajv": "ajv@6.12.6", - "chalk": "chalk@4.1.2", - "cross-spawn": "cross-spawn@7.0.3", - "debug": "debug@4.3.7", - "escape-string-regexp": "escape-string-regexp@4.0.0", - "eslint-scope": "eslint-scope@8.0.2", - "eslint-visitor-keys": "eslint-visitor-keys@4.0.0", - "espree": "espree@10.1.0_acorn@8.12.1", - "esquery": "esquery@1.6.0", - "esutils": "esutils@2.0.3", - "fast-deep-equal": "fast-deep-equal@3.1.3", - "file-entry-cache": "file-entry-cache@8.0.0", - "find-up": "find-up@5.0.0", - "glob-parent": "glob-parent@6.0.2", - "ignore": "ignore@5.3.2", - "imurmurhash": "imurmurhash@0.1.4", - "is-glob": "is-glob@4.0.3", - "is-path-inside": "is-path-inside@3.0.3", - "json-stable-stringify-without-jsonify": "json-stable-stringify-without-jsonify@1.0.1", - "lodash.merge": "lodash.merge@4.6.2", - "minimatch": "minimatch@3.1.2", - "natural-compare": "natural-compare@1.4.0", - "optionator": "optionator@0.9.4", - "strip-ansi": "strip-ansi@6.0.1", - "text-table": "text-table@0.2.0" - } - }, - "espree@10.1.0_acorn@8.12.1": { - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", - "dependencies": { - "acorn": "acorn@8.12.1", - "acorn-jsx": "acorn-jsx@5.3.2_acorn@8.12.1", - "eslint-visitor-keys": "eslint-visitor-keys@4.0.0" - } - }, - "espree@9.6.1_acorn@8.12.1": { - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "acorn@8.12.1", - "acorn-jsx": "acorn-jsx@5.3.2_acorn@8.12.1", - "eslint-visitor-keys": "eslint-visitor-keys@3.4.3" - } - }, - "esquery@1.6.0": { - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dependencies": { - "estraverse": "estraverse@5.3.0" - } - }, - "esrecurse@4.3.0": { - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "estraverse@5.3.0" - } - }, - "estraverse@5.3.0": { - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dependencies": {} - }, - "esutils@2.0.3": { - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dependencies": {} - }, - "etag@1.8.1": { - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dependencies": {} - }, - "express@4.19.2": { - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "accepts@1.3.8", - "array-flatten": "array-flatten@1.1.1", - "body-parser": "body-parser@1.20.2", - "content-disposition": "content-disposition@0.5.4", - "content-type": "content-type@1.0.5", - "cookie": "cookie@0.6.0", - "cookie-signature": "cookie-signature@1.0.6", - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "etag": "etag@1.8.1", - "finalhandler": "finalhandler@1.2.0", - "fresh": "fresh@0.5.2", - "http-errors": "http-errors@2.0.0", - "merge-descriptors": "merge-descriptors@1.0.1", - "methods": "methods@1.1.2", - "on-finished": "on-finished@2.4.1", - "parseurl": "parseurl@1.3.3", - "path-to-regexp": "path-to-regexp@0.1.7", - "proxy-addr": "proxy-addr@2.0.7", - "qs": "qs@6.11.0", - "range-parser": "range-parser@1.2.1", - "safe-buffer": "safe-buffer@5.2.1", - "send": "send@0.18.0", - "serve-static": "serve-static@1.15.0", - "setprototypeof": "setprototypeof@1.2.0", - "statuses": "statuses@2.0.1", - "type-is": "type-is@1.6.18", - "utils-merge": "utils-merge@1.0.1", - "vary": "vary@1.1.2" - } - }, - "fast-deep-equal@3.1.3": { - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dependencies": {} - }, - "fast-json-stable-stringify@2.1.0": { - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dependencies": {} - }, - "fast-levenshtein@2.0.6": { - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dependencies": {} - }, - "fastq@1.17.1": { - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "reusify@1.0.4" - } - }, - "file-entry-cache@6.0.1": { - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "flat-cache@3.2.0" - } - }, - "file-entry-cache@8.0.0": { - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dependencies": { - "flat-cache": "flat-cache@4.0.1" - } - }, - "finalhandler@1.2.0": { - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "debug@2.6.9", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "on-finished": "on-finished@2.4.1", - "parseurl": "parseurl@1.3.3", - "statuses": "statuses@2.0.1", - "unpipe": "unpipe@1.0.0" - } - }, - "find-up@5.0.0": { - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "locate-path@6.0.0", - "path-exists": "path-exists@4.0.0" - } - }, - "flat-cache@3.2.0": { - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "flatted@3.3.1", - "keyv": "keyv@4.5.4", - "rimraf": "rimraf@3.0.2" - } - }, - "flat-cache@4.0.1": { - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dependencies": { - "flatted": "flatted@3.3.1", - "keyv": "keyv@4.5.4" - } - }, - "flatted@3.3.1": { - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dependencies": {} - }, - "for-each@0.3.3": { - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "is-callable@1.2.7" - } - }, - "forwarded@0.2.0": { - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dependencies": {} - }, - "fresh@0.5.2": { - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dependencies": {} - }, - "fs.realpath@1.0.0": { - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dependencies": {} - }, - "function-bind@1.1.2": { - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dependencies": {} - }, - "function.prototype.name@1.1.6": { - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "functions-have-names": "functions-have-names@1.2.3" - } - }, - "functions-have-names@1.2.3": { - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dependencies": {} - }, - "get-intrinsic@1.2.4": { - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "has-proto": "has-proto@1.0.3", - "has-symbols": "has-symbols@1.0.3", - "hasown": "hasown@2.0.2" - } - }, - "get-port@7.1.0": { - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", - "dependencies": {} - }, - "get-symbol-description@1.0.2": { - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "gitignore-parser@0.0.2": { - "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==", - "dependencies": {} - }, - "glob-parent@6.0.2": { - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "is-glob@4.0.3" - } - }, - "glob@7.2.3": { - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "fs.realpath@1.0.0", - "inflight": "inflight@1.0.6", - "inherits": "inherits@2.0.4", - "minimatch": "minimatch@3.1.2", - "once": "once@1.4.0", - "path-is-absolute": "path-is-absolute@1.0.1" - } - }, - "globals@13.24.0": { - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "type-fest@0.20.2" - } - }, - "globals@14.0.0": { - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dependencies": {} - }, - "globalthis@1.0.4": { - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": { - "define-properties": "define-properties@1.2.1", - "gopd": "gopd@1.0.1" - } - }, - "gopd@1.0.1": { - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "graphemer@1.4.0": { - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dependencies": {} - }, - "has-bigints@1.0.2": { - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dependencies": {} - }, - "has-flag@4.0.0": { - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dependencies": {} - }, - "has-property-descriptors@1.0.2": { - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "es-define-property@1.0.0" - } - }, - "has-proto@1.0.3": { - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dependencies": {} - }, - "has-symbols@1.0.3": { - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dependencies": {} - }, - "has-tostringtag@1.0.2": { - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "has-symbols@1.0.3" - } - }, - "hasown@2.0.2": { - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "function-bind@1.1.2" - } - }, - "http-errors@2.0.0": { - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "depd@2.0.0", - "inherits": "inherits@2.0.4", - "setprototypeof": "setprototypeof@1.2.0", - "statuses": "statuses@2.0.1", - "toidentifier": "toidentifier@1.0.1" - } - }, - "iconv-lite@0.4.24": { - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": "safer-buffer@2.1.2" - } - }, - "iconv-lite@0.6.3": { - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": "safer-buffer@2.1.2" - } - }, - "ignore@5.3.2": { - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dependencies": {} - }, - "immediate@3.0.6": { - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dependencies": {} - }, - "import-fresh@3.3.0": { - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "parent-module@1.0.1", - "resolve-from": "resolve-from@4.0.0" - } - }, - "imurmurhash@0.1.4": { - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dependencies": {} - }, - "inflight@1.0.6": { - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "once@1.4.0", - "wrappy": "wrappy@1.0.2" - } - }, - "inherits@2.0.4": { - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dependencies": {} - }, - "internal-slot@1.0.7": { - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dependencies": { - "es-errors": "es-errors@1.3.0", - "hasown": "hasown@2.0.2", - "side-channel": "side-channel@1.0.6" - } - }, - "ipaddr.js@1.9.1": { - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dependencies": {} - }, - "is-array-buffer@3.0.4": { - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "get-intrinsic": "get-intrinsic@1.2.4" - } - }, - "is-bigint@1.0.4": { - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "has-bigints@1.0.2" - } - }, - "is-boolean-object@1.1.2": { - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "is-callable@1.2.7": { - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dependencies": {} - }, - "is-core-module@2.15.1": { - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dependencies": { - "hasown": "hasown@2.0.2" - } - }, - "is-data-view@1.0.1": { - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dependencies": { - "is-typed-array": "is-typed-array@1.1.13" - } - }, - "is-date-object@1.0.5": { - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "is-docker@3.0.0": { - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dependencies": {} - }, - "is-extglob@2.1.1": { - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dependencies": {} - }, - "is-glob@4.0.3": { - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "is-extglob@2.1.1" - } - }, - "is-inside-container@1.0.0": { - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "is-docker@3.0.0" - } - }, - "is-negative-zero@2.0.3": { - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dependencies": {} - }, - "is-number-object@1.0.7": { - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "is-path-inside@3.0.3": { - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dependencies": {} - }, - "is-regex@1.1.4": { - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "is-shared-array-buffer@1.0.3": { - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": { - "call-bind": "call-bind@1.0.7" - } - }, - "is-string@1.0.7": { - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "is-symbol@1.0.4": { - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "has-symbols@1.0.3" - } - }, - "is-typed-array@1.1.13": { - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": { - "which-typed-array": "which-typed-array@1.1.15" - } - }, - "is-weakref@1.0.2": { - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7" - } - }, - "is-wsl@3.1.0": { - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", - "dependencies": { - "is-inside-container": "is-inside-container@1.0.0" - } - }, - "isarray@1.0.0": { - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dependencies": {} - }, - "isarray@2.0.5": { - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dependencies": {} - }, - "isexe@2.0.0": { - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dependencies": {} - }, - "isexe@3.1.1": { - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dependencies": {} - }, - "js-yaml@4.1.0": { - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "argparse@2.0.1" - } - }, - "json-buffer@3.0.1": { - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dependencies": {} - }, - "json-schema-traverse@0.4.1": { - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dependencies": {} - }, - "json-stable-stringify-without-jsonify@1.0.1": { - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dependencies": {} - }, - "json5@1.0.2": { - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "minimist@1.2.8" - } - }, - "jszip@3.7.1": { - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "dependencies": { - "lie": "lie@3.3.0", - "pako": "pako@1.0.11", - "readable-stream": "readable-stream@2.3.8", - "set-immediate-shim": "set-immediate-shim@1.0.1" - } - }, - "keyv@4.5.4": { - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "json-buffer@3.0.1" - } - }, - "levn@0.4.1": { - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "prelude-ls@1.2.1", - "type-check": "type-check@0.4.0" - } - }, - "lie@3.3.0": { - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "immediate@3.0.6" - } - }, - "locate-path@6.0.0": { - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "p-locate@5.0.0" - } - }, - "lodash.merge@4.6.2": { - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dependencies": {} - }, - "media-typer@0.3.0": { - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dependencies": {} - }, - "merge-descriptors@1.0.1": { - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dependencies": {} - }, - "methods@1.1.2": { - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dependencies": {} - }, - "mime-db@1.52.0": { - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dependencies": {} - }, - "mime-types@2.1.35": { - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "mime-db@1.52.0" - } - }, - "mime@1.6.0": { - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dependencies": {} - }, - "minimatch@10.0.1": { - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dependencies": { - "brace-expansion": "brace-expansion@2.0.1" - } - }, - "minimatch@3.1.2": { - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "brace-expansion@1.1.11" - } - }, - "minimist@1.2.8": { - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dependencies": {} - }, - "ms@2.0.0": { - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dependencies": {} - }, - "ms@2.1.3": { - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dependencies": {} - }, - "natural-compare@1.4.0": { - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dependencies": {} - }, - "negotiator@0.6.3": { - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dependencies": {} - }, - "object-inspect@1.13.2": { - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dependencies": {} - }, - "object-keys@1.1.1": { - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dependencies": {} - }, - "object.assign@4.1.5": { - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "has-symbols": "has-symbols@1.0.3", - "object-keys": "object-keys@1.1.1" - } - }, - "object.fromentries@2.0.8": { - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-object-atoms": "es-object-atoms@1.0.0" - } - }, - "object.groupby@1.0.3": { - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3" - } - }, - "object.values@1.2.0": { - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-object-atoms": "es-object-atoms@1.0.0" - } - }, - "on-finished@2.4.1": { - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "ee-first@1.1.1" - } - }, - "once@1.4.0": { - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "wrappy@1.0.2" - } - }, - "open@10.1.0": { - "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", - "dependencies": { - "default-browser": "default-browser@5.2.1", - "define-lazy-prop": "define-lazy-prop@3.0.0", - "is-inside-container": "is-inside-container@1.0.0", - "is-wsl": "is-wsl@3.1.0" - } - }, - "optionator@0.9.4": { - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dependencies": { - "deep-is": "deep-is@0.1.4", - "fast-levenshtein": "fast-levenshtein@2.0.6", - "levn": "levn@0.4.1", - "prelude-ls": "prelude-ls@1.2.1", - "type-check": "type-check@0.4.0", - "word-wrap": "word-wrap@1.2.5" - } - }, - "p-limit@3.1.0": { - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "yocto-queue@0.1.0" - } - }, - "p-locate@5.0.0": { - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "p-limit@3.1.0" - } - }, - "pako@1.0.11": { - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dependencies": {} - }, - "parent-module@1.0.1": { - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "callsites@3.1.0" - } - }, - "parseurl@1.3.3": { - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dependencies": {} - }, - "path-exists@4.0.0": { - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dependencies": {} - }, - "path-is-absolute@1.0.1": { - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dependencies": {} - }, - "path-key@3.1.1": { - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dependencies": {} - }, - "path-parse@1.0.7": { - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dependencies": {} - }, - "path-to-regexp@0.1.7": { - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dependencies": {} - }, - "possible-typed-array-names@1.0.0": { - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dependencies": {} - }, - "prelude-ls@1.2.1": { - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dependencies": {} - }, - "process-nextick-args@2.0.1": { - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dependencies": {} - }, - "proxy-addr@2.0.7": { - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "forwarded@0.2.0", - "ipaddr.js": "ipaddr.js@1.9.1" - } - }, - "punycode@2.3.1": { - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dependencies": {} - }, - "qs@6.11.0": { - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "side-channel@1.0.6" - } - }, - "queue-microtask@1.2.3": { - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dependencies": {} - }, - "range-parser@1.2.1": { - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dependencies": {} - }, - "raw-body@2.5.2": { - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "bytes@3.1.2", - "http-errors": "http-errors@2.0.0", - "iconv-lite": "iconv-lite@0.4.24", - "unpipe": "unpipe@1.0.0" - } - }, - "readable-stream@2.3.8": { - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "core-util-is@1.0.3", - "inherits": "inherits@2.0.4", - "isarray": "isarray@1.0.0", - "process-nextick-args": "process-nextick-args@2.0.1", - "safe-buffer": "safe-buffer@5.1.2", - "string_decoder": "string_decoder@1.1.1", - "util-deprecate": "util-deprecate@1.0.2" - } - }, - "regexp.prototype.flags@1.5.2": { - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-errors": "es-errors@1.3.0", - "set-function-name": "set-function-name@2.0.2" - } - }, - "resolve-from@4.0.0": { - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dependencies": {} - }, - "resolve@1.22.8": { - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "is-core-module@2.15.1", - "path-parse": "path-parse@1.0.7", - "supports-preserve-symlinks-flag": "supports-preserve-symlinks-flag@1.0.0" - } - }, - "reusify@1.0.4": { - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dependencies": {} - }, - "rimraf@3.0.2": { - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "glob@7.2.3" - } - }, - "run-applescript@7.0.0": { - "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", - "dependencies": {} - }, - "run-parallel@1.2.0": { - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dependencies": { - "queue-microtask": "queue-microtask@1.2.3" - } - }, - "safe-array-concat@1.1.2": { - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "get-intrinsic": "get-intrinsic@1.2.4", - "has-symbols": "has-symbols@1.0.3", - "isarray": "isarray@2.0.5" - } - }, - "safe-buffer@5.1.2": { - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dependencies": {} - }, - "safe-buffer@5.2.1": { - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dependencies": {} - }, - "safe-regex-test@1.0.3": { - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "is-regex": "is-regex@1.1.4" - } - }, - "safer-buffer@2.1.2": { - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dependencies": {} - }, - "semver@6.3.1": { - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dependencies": {} - }, - "send@0.18.0": { - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "debug@2.6.9", - "depd": "depd@2.0.0", - "destroy": "destroy@1.2.0", - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "etag": "etag@1.8.1", - "fresh": "fresh@0.5.2", - "http-errors": "http-errors@2.0.0", - "mime": "mime@1.6.0", - "ms": "ms@2.1.3", - "on-finished": "on-finished@2.4.1", - "range-parser": "range-parser@1.2.1", - "statuses": "statuses@2.0.1" - } - }, - "serve-static@1.15.0": { - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "encodeurl@1.0.2", - "escape-html": "escape-html@1.0.3", - "parseurl": "parseurl@1.3.3", - "send": "send@0.18.0" - } - }, - "set-function-length@1.2.2": { - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "define-data-property@1.1.4", - "es-errors": "es-errors@1.3.0", - "function-bind": "function-bind@1.1.2", - "get-intrinsic": "get-intrinsic@1.2.4", - "gopd": "gopd@1.0.1", - "has-property-descriptors": "has-property-descriptors@1.0.2" - } - }, - "set-function-name@2.0.2": { - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": { - "define-data-property": "define-data-property@1.1.4", - "es-errors": "es-errors@1.3.0", - "functions-have-names": "functions-have-names@1.2.3", - "has-property-descriptors": "has-property-descriptors@1.0.2" - } - }, - "set-immediate-shim@1.0.1": { - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "dependencies": {} - }, - "setprototypeof@1.2.0": { - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dependencies": {} - }, - "shebang-command@2.0.0": { - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "shebang-regex@3.0.0" - } - }, - "shebang-regex@3.0.0": { - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dependencies": {} - }, - "side-channel@1.0.6": { - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "get-intrinsic": "get-intrinsic@1.2.4", - "object-inspect": "object-inspect@1.13.2" - } - }, - "statuses@2.0.1": { - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dependencies": {} - }, - "string.prototype.trim@1.2.9": { - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-abstract": "es-abstract@1.23.3", - "es-object-atoms": "es-object-atoms@1.0.0" - } - }, - "string.prototype.trimend@1.0.8": { - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-object-atoms": "es-object-atoms@1.0.0" - } - }, - "string.prototype.trimstart@1.0.8": { - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "define-properties": "define-properties@1.2.1", - "es-object-atoms": "es-object-atoms@1.0.0" - } - }, - "string_decoder@1.1.1": { - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "safe-buffer@5.1.2" - } - }, - "strip-ansi@6.0.1": { - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "ansi-regex@5.0.1" - } - }, - "strip-bom@3.0.0": { - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dependencies": {} - }, - "strip-json-comments@3.1.1": { - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dependencies": {} - }, - "sudo-prompt@9.2.1": { - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "dependencies": {} - }, - "supports-color@7.2.0": { - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "has-flag@4.0.0" - } - }, - "supports-preserve-symlinks-flag@1.0.0": { - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dependencies": {} - }, - "text-table@0.2.0": { - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dependencies": {} - }, - "toidentifier@1.0.1": { - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dependencies": {} - }, - "tsconfig-paths@3.15.0": { - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": { - "@types/json5": "@types/json5@0.0.29", - "json5": "json5@1.0.2", - "minimist": "minimist@1.2.8", - "strip-bom": "strip-bom@3.0.0" - } - }, - "tslib@2.3.1": { - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dependencies": {} - }, - "type-check@0.4.0": { - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "prelude-ls@1.2.1" - } - }, - "type-fest@0.20.2": { - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dependencies": {} - }, - "type-is@1.6.18": { - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "media-typer@0.3.0", - "mime-types": "mime-types@2.1.35" - } - }, - "typed-array-buffer@1.0.2": { - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "es-errors": "es-errors@1.3.0", - "is-typed-array": "is-typed-array@1.1.13" - } - }, - "typed-array-byte-length@1.0.1": { - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "for-each": "for-each@0.3.3", - "gopd": "gopd@1.0.1", - "has-proto": "has-proto@1.0.3", - "is-typed-array": "is-typed-array@1.1.13" - } - }, - "typed-array-byte-offset@1.0.2": { - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dependencies": { - "available-typed-arrays": "available-typed-arrays@1.0.7", - "call-bind": "call-bind@1.0.7", - "for-each": "for-each@0.3.3", - "gopd": "gopd@1.0.1", - "has-proto": "has-proto@1.0.3", - "is-typed-array": "is-typed-array@1.1.13" - } - }, - "typed-array-length@1.0.6": { - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "for-each": "for-each@0.3.3", - "gopd": "gopd@1.0.1", - "has-proto": "has-proto@1.0.3", - "is-typed-array": "is-typed-array@1.1.13", - "possible-typed-array-names": "possible-typed-array-names@1.0.0" - } - }, - "unbox-primitive@1.0.2": { - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "call-bind@1.0.7", - "has-bigints": "has-bigints@1.0.2", - "has-symbols": "has-symbols@1.0.3", - "which-boxed-primitive": "which-boxed-primitive@1.0.2" - } - }, - "undici@5.28.4": { - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dependencies": { - "@fastify/busboy": "@fastify/busboy@2.1.1" - } - }, - "unpipe@1.0.0": { - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dependencies": {} - }, - "uri-js@4.4.1": { - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "punycode@2.3.1" - } - }, - "util-deprecate@1.0.2": { - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dependencies": {} - }, - "utils-merge@1.0.1": { - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dependencies": {} - }, - "vary@1.1.2": { - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dependencies": {} - }, - "which-boxed-primitive@1.0.2": { - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "is-bigint@1.0.4", - "is-boolean-object": "is-boolean-object@1.1.2", - "is-number-object": "is-number-object@1.0.7", - "is-string": "is-string@1.0.7", - "is-symbol": "is-symbol@1.0.4" - } - }, - "which-typed-array@1.1.15": { - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": { - "available-typed-arrays": "available-typed-arrays@1.0.7", - "call-bind": "call-bind@1.0.7", - "for-each": "for-each@0.3.3", - "gopd": "gopd@1.0.1", - "has-tostringtag": "has-tostringtag@1.0.2" - } - }, - "which@2.0.2": { - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "isexe@2.0.0" - } - }, - "which@4.0.0": { - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dependencies": { - "isexe": "isexe@3.1.1" - } - }, - "windmill-client@1.364.0": { - "integrity": "sha512-UjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIaw==", - "dependencies": {} - }, - "word-wrap@1.2.5": { - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dependencies": {} - }, - "wrappy@1.0.2": { - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dependencies": {} - }, - "ws@8.18.0": { - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dependencies": {} - }, - "yocto-queue@0.1.0": { - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dependencies": {} - } + "@deno/dnt@0.41.3": { + "integrity": "b2ef2c8a5111eef86cb5bfcae103d6a2938e8e649e2461634a7befb7fc59d6d2", + "dependencies": [ + "jsr:@david/code-block-writer", + "jsr:@deno/cache-dir", + "jsr:@std/fmt@1", + "jsr:@std/fs@1", + "jsr:@std/path@1", + "jsr:@ts-morph/bootstrap" + ] + }, + "@deno/graph@0.73.1": { + "integrity": "cd69639d2709d479037d5ce191a422eabe8d71bb68b0098344f6b07411c84d41" + }, + "@std/assert@0.223.0": { + "integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24" + }, + "@std/assert@0.226.0": { + "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3" + }, + "@std/assert@1.0.0-rc.2": { + "integrity": "0484eab1d76b55fca1c3beaff485a274e67dd3b9f065edcbe70030dfc0b964d3" + }, + "@std/bytes@0.223.0": { + "integrity": "84b75052cd8680942c397c2631318772b295019098f40aac5c36cead4cba51a8" + }, + "@std/bytes@1.0.2": { + "integrity": "fbdee322bbd8c599a6af186a1603b3355e59a5fb1baa139f8f4c3c9a1b3e3d57" + }, + "@std/cli@1.0.0-rc.2": { + "integrity": "97dfae82b9f0e189768ebfa7a5da53375955b94bad0a1804f8e3b73563b03787" + }, + "@std/encoding@1.0.0-rc.2": { + "integrity": "160d7674a20ebfbccdf610b3801fee91cf6e42d1c106dd46bbaf46e395cd35ef" + }, + "@std/encoding@1.0.4": { + "integrity": "2266cd516b32369e3dc5695717c96bf88343a1f761d6e6187a02a2bbe2af86ae" + }, + "@std/fmt@0.223.0": { + "integrity": "6deb37794127dfc7d7bded2586b9fc6f5d50e62a8134846608baf71ffc1a5208" + }, + "@std/fmt@0.225.6": { + "integrity": "aba6aea27f66813cecfd9484e074a9e9845782ab0685c030e453a8a70b37afc8" + }, + "@std/fmt@1.0.2": { + "integrity": "87e9dfcdd3ca7c066e0c3c657c1f987c82888eb8103a3a3baa62684ffeb0f7a7" + }, + "@std/fs@0.223.0": { + "integrity": "3b4b0550b2c524cbaaa5a9170c90e96cbb7354e837ad1bdaf15fc9df1ae9c31c" + }, + "@std/fs@0.229.3": { + "integrity": "783bca21f24da92e04c3893c9e79653227ab016c48e96b3078377ebd5222e6eb", + "dependencies": [ + "jsr:@std/path@1.0.0-rc.1" + ] + }, + "@std/fs@1.0.3": { + "integrity": "3cb839b1360b0a42d8b367c3093bfe4071798e6694fa44cf1963e04a8edba4fe", + "dependencies": [ + "jsr:@std/path@^1.0.4" + ] + }, + "@std/io@0.223.0": { + "integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1", + "dependencies": [ + "jsr:@std/assert@0.223", + "jsr:@std/bytes@0.223" + ] + }, + "@std/io@0.224.7": { + "integrity": "a70848793c44a7c100926571a8c9be68ba85487bfcd4d0540d86deabe1123dc9", + "dependencies": [ + "jsr:@std/bytes@^1.0.2" + ] + }, + "@std/log@0.224.7": { + "integrity": "021941e5cd16de60cb11599c9b36f892aea95987fe66c753922808da27909e18", + "dependencies": [ + "jsr:@std/fmt@^1.0.2", + "jsr:@std/fs@^1.0.3", + "jsr:@std/io@~0.224.7" + ] + }, + "@std/net@1.0.2": { + "integrity": "520c18ddb7f67d3830a1adfef03a155d496fe9683a9cb63bb823b5afb86484dc" + }, + "@std/path@0.223.0": { + "integrity": "593963402d7e6597f5a6e620931661053572c982fc014000459edc1f93cc3989", + "dependencies": [ + "jsr:@std/assert@0.223" + ] + }, + "@std/path@0.225.2": { + "integrity": "0f2db41d36b50ef048dcb0399aac720a5348638dd3cb5bf80685bf2a745aa506", + "dependencies": [ + "jsr:@std/assert@0.226" + ] + }, + "@std/path@1.0.0-rc.1": { + "integrity": "b8c00ae2f19106a6bb7cbf1ab9be52aa70de1605daeb2dbdc4f87a7cbaf10ff6" + }, + "@std/path@1.0.0-rc.2": { + "integrity": "39f20d37a44d1867abac8d91c169359ea6e942237a45a99ee1e091b32b921c7d" + }, + "@std/path@1.0.4": { + "integrity": "48dd5d8389bcfcd619338a01bdf862cb7799933390146a54ae59356a0acc7105" + }, + "@std/streams@1.0.4": { + "integrity": "a1a5b01c74ca1d2dcaacfe1d4bbb91392e765946d82a3471bd95539adc6da83a", + "dependencies": [ + "jsr:@std/bytes@^1.0.2" + ] + }, + "@std/text@1.0.0-rc.1": { + "integrity": "34c722203e87ee12792c8d4a0cd2ee0e001341cbce75b860fc21be19d62232b0" + }, + "@std/yaml@1.0.5": { + "integrity": "71ba3d334305ee2149391931508b2c293a8490f94a337eef3a09cade1a2a2742" + }, + "@ts-morph/bootstrap@0.24.0": { + "integrity": "a826a2ef7fa8a7c3f1042df2c034d20744d94da2ee32bf29275bcd4dffd3c060", + "dependencies": [ + "jsr:@ts-morph/common" + ] + }, + "@ts-morph/common@0.24.0": { + "integrity": "12b625b8e562446ba658cdbe9ad77774b4bd96b992ae8bd34c60dbf24d06c1f3", + "dependencies": [ + "jsr:@std/fs@~0.229.3", + "jsr:@std/path@~0.225.2" + ] + }, + "@windmill-labs/cliffy-ansi@1.0.0-rc.5": { + "integrity": "1109cbcb0c415b57779352f708f5969b8c645f56bc555cbafc6ea5e0c6a360a4", + "dependencies": [ + "jsr:@std/encoding@1.0.0-rc.2", + "jsr:@std/fmt@~0.225.4", + "jsr:@std/io@~0.224.2", + "jsr:@windmill-labs/cliffy-internal" + ] + }, + "@windmill-labs/cliffy-command@1.0.0-rc.5": { + "integrity": "3eaa9def5f5afa1028f4a60ee4d9065ccc5f194d032824365c6ebcb9f46db66e", + "dependencies": [ + "jsr:@std/fmt@~0.225.4", + "jsr:@std/text", + "jsr:@windmill-labs/cliffy-flags", + "jsr:@windmill-labs/cliffy-internal", + "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5" + ] + }, + "@windmill-labs/cliffy-flags@1.0.0-rc.5": { + "integrity": "0e4b5b53a02295f8bf27d93b3bcca5d5d001a0286aea17404e6ef6347f69363c", + "dependencies": [ + "jsr:@std/text" + ] + }, + "@windmill-labs/cliffy-internal@1.0.0-rc.5": { + "integrity": "876b989ad2d1b739cc4a4f1386dbb80f819d2851ad583c1f486fc6ebe9beadf6" + }, + "@windmill-labs/cliffy-keycode@1.0.0-rc.5": { + "integrity": "2bc1b1af363528e38ed47bce525f417cab278b829a423353ffd589622f5a746e" + }, + "@windmill-labs/cliffy-prompt@1.0.0-rc.5": { + "integrity": "329a097911f219b15ea643ae83b6b360a11df7fc4cafdac1bf6869259475033a", + "dependencies": [ + "jsr:@std/assert@1.0.0-rc.2", + "jsr:@std/fmt@~0.225.4", + "jsr:@std/io@~0.224.2", + "jsr:@std/path@1.0.0-rc.2", + "jsr:@std/text", + "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-internal", + "jsr:@windmill-labs/cliffy-keycode" + ] + }, + "@windmill-labs/cliffy-prompt@1.0.0-rc.6": { + "integrity": "ffe09bee0e1e07bc12b2147be509d10b47eb6a36cbfea80fc206b4ae86693205", + "dependencies": [ + "jsr:@std/assert@1.0.0-rc.2", + "jsr:@std/fmt@~0.225.4", + "jsr:@std/io@~0.224.2", + "jsr:@std/path@1.0.0-rc.2", + "jsr:@std/text", + "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-internal", + "jsr:@windmill-labs/cliffy-keycode" + ] + }, + "@windmill-labs/cliffy-table@1.0.0-rc.5": { + "integrity": "5f26cb6ccbc2fbf1b1f79f9062d166e32e11d34398c0deac7e6f9d8378970546", + "dependencies": [ + "jsr:@std/cli", + "jsr:@std/fmt@~0.225.4" + ] + } + }, + "npm": { + "@ayonli/jsext@0.9.58": { + "integrity": "sha512-AwGf64K6VqGyYLFA6rgyuU6jBbwUNJctENpW1bZayvXcIprhdfs7cn7S+EXi0pnNLupT9ptODYkKneB3/YuWww==", + "dependencies": [ + "iconv-lite@0.6.3", + "sudo-prompt", + "ws" + ] + }, + "@deno/shim-crypto@0.3.1": { + "integrity": "sha512-ed4pNnfur6UbASEgF34gVxR9p7Mc3qF+Ygbmjiil8ws5IhNFhPDFy5vE5hQAUA9JmVsSxXPcVLM5Rf8LOZqQ5Q==" + }, + "@deno/shim-deno-test@0.5.0": { + "integrity": "sha512-4nMhecpGlPi0cSzT67L+Tm+GOJqvuk8gqHBziqcUQOarnuIax1z96/gJHCSIz2Z0zhxE6Rzwb3IZXPtFh51j+w==" + }, + "@deno/shim-deno@0.17.0": { + "integrity": "sha512-+FzsP65eehAgTQdzt1izLEV17ePCZqHxDQqRDbpRc1yJVYtDI2MvbRq5DvOj90uRt6zKn9qtWpEueDqG1QORhQ==", + "dependencies": [ + "@deno/shim-deno-test", + "which@4.0.0" + ] + }, + "@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==", + "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==", + "dependencies": [ + "bytes", + "content-type", + "debug@2.6.9", + "depd", + "destroy", + "http-errors", + "iconv-lite@0.4.24", + "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" + ] + }, + "bundle-name@4.1.0": { + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dependencies": [ + "run-applescript" + ] + }, + "bytes@3.1.2": { + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind@1.0.7": { + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": [ + "es-define-property", + "es-errors", + "function-bind", + "get-intrinsic", + "set-function-length" + ] + }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chalk@4.1.2": { + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": [ + "ansi-styles", + "supports-color" + ] + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "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==", + "dependencies": [ + "safe-buffer@5.2.1" + ] + }, + "content-type@1.0.5": { + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie-signature@1.0.6": { + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookie@0.6.0": { + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "core-util-is@1.0.3": { + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cross-spawn@7.0.3": { + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": [ + "path-key", + "shebang-command", + "which@2.0.2" + ] + }, + "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==" + }, + "default-browser@5.2.1": { + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dependencies": [ + "bundle-name", + "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@5.2.0": { + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==" + }, + "doctrine@2.1.0": { + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": [ + "esutils" + ] + }, + "doctrine@3.0.0": { + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": [ + "esutils" + ] + }, + "ee-first@1.1.1": { + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl@1.0.2": { + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "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-errors@1.3.0": { + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-main@1.3.0": { + "integrity": "sha512-AzORKdz1Zt97TzbYQnIrI3ZiibWpRXUfpo/w0xOJ20GpNYd2bd3MU9m31zS/aJ1TJl6JfLTok83Y8HjNunYT0A==" + }, + "es-object-atoms@1.0.0": { + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "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==", + "dependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ] + }, + "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==", + "dependencies": [ + "accepts", + "array-flatten", + "body-parser", + "content-disposition", + "content-type", + "cookie", + "cookie-signature", + "debug@2.6.9", + "depd", + "encodeurl", + "escape-html", + "etag", + "finalhandler", + "fresh", + "http-errors", + "merge-descriptors", + "methods", + "on-finished", + "parseurl", + "path-to-regexp", + "proxy-addr", + "qs", + "range-parser", + "safe-buffer@5.2.1", + "send", + "serve-static", + "setprototypeof", + "statuses", + "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==", + "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", + "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" + ] + }, + "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==" + }, + "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==", + "dependencies": [ + "es-errors", + "function-bind", + "has-proto", + "has-symbols", + "hasown" + ] + }, + "get-port@7.1.0": { + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==" + }, + "get-symbol-description@1.0.2": { + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": [ + "call-bind", + "es-errors", + "get-intrinsic" + ] + }, + "gitignore-parser@0.0.2": { + "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==" + }, + "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" + ] + }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": [ + "function-bind" + ] + }, + "http-errors@2.0.0": { + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": [ + "depd", + "inherits", + "setprototypeof", + "statuses", + "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-wsl@3.1.0": { + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dependencies": [ + "is-inside-container" + ] + }, + "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": [ + "lie", + "pako", + "readable-stream", + "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" + ] + }, + "lodash.merge@4.6.2": { + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "media-typer@0.3.0": { + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors@1.0.1": { + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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==", + "dependencies": [ + "mime-db" + ] + }, + "mime@1.6.0": { + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "minimatch@10.0.1": { + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dependencies": [ + "brace-expansion@2.0.1" + ] + }, + "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@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" + ] + }, + "on-finished@2.4.1": { + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": [ + "ee-first" + ] + }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": [ + "wrappy" + ] + }, + "open@10.1.0": { + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "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" + ] + }, + "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==" + }, + "process-nextick-args@2.0.1": { + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr@2.0.7": { + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": [ + "forwarded", + "ipaddr.js" + ] + }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "qs@6.11.0": { + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "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==", + "dependencies": [ + "bytes", + "http-errors", + "iconv-lite@0.4.24", + "unpipe" + ] + }, + "readable-stream@2.3.8": { + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": [ + "core-util-is", + "inherits", + "isarray@1.0.0", + "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==", + "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" + ] + }, + "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==", + "dependencies": [ + "debug@2.6.9", + "depd", + "destroy", + "encodeurl", + "escape-html", + "etag", + "fresh", + "http-errors", + "mime", + "ms@2.1.3", + "on-finished", + "range-parser", + "statuses" + ] + }, + "serve-static@1.15.0": { + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": [ + "encodeurl", + "escape-html", + "parseurl", + "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==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel@1.0.6": { + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": [ + "call-bind", + "es-errors", + "get-intrinsic", + "object-inspect" + ] + }, + "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" + ] + }, + "string_decoder@1.1.1": { + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": [ + "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==", + "dependencies": [ + "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==" + }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws@8.18.0": { + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==" + }, + "yocto-queue@0.1.0": { + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } }, - "remote": {}, "workspace": { "dependencies": [ - "jsr:@deno/dnt@^0.41.3", + "jsr:@deno/dnt@~0.41.3", "jsr:@std/encoding@^1.0.4", "jsr:@std/fs@^1.0.3", - "jsr:@std/io@^0.224.7", - "jsr:@std/log@^0.224.7", + "jsr:@std/io@~0.224.7", + "jsr:@std/log@~0.224.7", "jsr:@std/net@^1.0.2", "jsr:@std/path@^1.0.4", "jsr:@std/streams@^1.0.4", diff --git a/cli/dnt.ts b/cli/dnt.ts index d711434b88..64d9957499 100644 --- a/cli/dnt.ts +++ b/cli/dnt.ts @@ -13,9 +13,18 @@ await build({ }, ], outDir: "./npm", - shims: { + shims: { // see JS docs for overview and more options deno: true, + // shims to only use in the tests + customDev: [{ + // this is what `timers: "dev"` does internally + package: { + name: "@deno/shim-timers", + version: "~0.1.0", + }, + globalNames: ["setTimeout", "setInterval"], + }], }, scriptModule: false, filterDiagnostic(diagnostic) { @@ -50,12 +59,25 @@ await build({ postBuild() { // steps to run after building and before running the tests // add shebang to npm/esm/main.js + const dirs = [ + "nu", + "ts", + "regex", + "python", + "go", + "php", + "rust", + "yaml", + "csharp", + ]; + for (const l of dirs) { + Deno.copyFileSync( + "wasm/" + l + "/windmill_parser_wasm_bg.wasm", + "npm/esm/wasm/" + l + "/windmill_parser_wasm_bg.wasm" + ); + } Deno.copyFileSync("../LICENSE", "npm/LICENSE"); Deno.copyFileSync("README.md", "npm/README.md"); - Deno.copyFileSync( - "wasm/windmill_parser_wasm_bg.wasm", - "npm/esm/wasm/windmill_parser_wasm_bg.wasm" - ); }, }); diff --git a/cli/gen/core/OpenAPI.ts b/cli/gen/core/OpenAPI.ts index 50969d8252..3aa0d92808 100644 --- a/cli/gen/core/OpenAPI.ts +++ b/cli/gen/core/OpenAPI.ts @@ -54,7 +54,7 @@ export const OpenAPI: OpenAPIConfig = { PASSWORD: undefined, TOKEN: getEnv("WM_TOKEN"), USERNAME: undefined, - VERSION: '1.476.0', + VERSION: '1.477.1', WITH_CREDENTIALS: true, interceptors: { request: new Interceptors(), diff --git a/cli/gen/services.gen.ts b/cli/gen/services.gen.ts index 5e5944d3f4..b3fa22bf66 100644 --- a/cli/gen/services.gen.ts +++ b/cli/gen/services.gen.ts @@ -3,7 +3,7 @@ import type { CancelablePromise } from './core/CancelablePromise.ts'; import { OpenAPI } from './core/OpenAPI.ts'; import { request as __request } from './core/request.ts'; -import type { BackendVersionResponse, BackendUptodateResponse, GetLicenseIdResponse, GetOpenApiYamlResponse, GetAuditLogData, GetAuditLogResponse, ListAuditLogsData, ListAuditLogsResponse, LoginData, LoginResponse, LogoutResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, IsOwnerOfPathData, IsOwnerOfPathResponse, SetPasswordData, SetPasswordResponse, SetPasswordForUserData, SetPasswordForUserResponse, SetLoginTypeForUserData, SetLoginTypeForUserResponse, CreateUserGloballyData, CreateUserGloballyResponse, GlobalUserUpdateData, GlobalUserUpdateResponse, GlobalUsernameInfoData, GlobalUsernameInfoResponse, GlobalUserRenameData, GlobalUserRenameResponse, GlobalUserDeleteData, GlobalUserDeleteResponse, GlobalUsersOverwriteData, GlobalUsersOverwriteResponse, GlobalUsersExportResponse, DeleteUserData, DeleteUserResponse, ListWorkspacesResponse, IsDomainAllowedResponse, ListUserWorkspacesResponse, ListWorkspacesAsSuperAdminData, ListWorkspacesAsSuperAdminResponse, CreateWorkspaceData, CreateWorkspaceResponse, ExistsWorkspaceData, ExistsWorkspaceResponse, ExistsUsernameData, ExistsUsernameResponse, GetGlobalData, GetGlobalResponse, SetGlobalData, SetGlobalResponse, GetLocalResponse, TestSmtpData, TestSmtpResponse, TestCriticalChannelsData, TestCriticalChannelsResponse, GetCriticalAlertsData, GetCriticalAlertsResponse, AcknowledgeCriticalAlertData, AcknowledgeCriticalAlertResponse, AcknowledgeAllCriticalAlertsResponse, TestLicenseKeyData, TestLicenseKeyResponse, TestObjectStorageConfigData, TestObjectStorageConfigResponse, SendStatsResponse, GetLatestKeyRenewalAttemptResponse, RenewLicenseKeyData, RenewLicenseKeyResponse, CreateCustomerPortalSessionData, CreateCustomerPortalSessionResponse, TestMetadataData, TestMetadataResponse, ListGlobalSettingsResponse, GetCurrentEmailResponse, RefreshUserTokenData, RefreshUserTokenResponse, GetTutorialProgressResponse, UpdateTutorialProgressData, UpdateTutorialProgressResponse, LeaveInstanceResponse, GetUsageResponse, GetRunnableResponse, GlobalWhoamiResponse, ListWorkspaceInvitesResponse, WhoamiData, WhoamiResponse, AcceptInviteData, AcceptInviteResponse, DeclineInviteData, DeclineInviteResponse, InviteUserData, InviteUserResponse, AddUserData, AddUserResponse, DeleteInviteData, DeleteInviteResponse, ArchiveWorkspaceData, ArchiveWorkspaceResponse, UnarchiveWorkspaceData, UnarchiveWorkspaceResponse, DeleteWorkspaceData, DeleteWorkspaceResponse, LeaveWorkspaceData, LeaveWorkspaceResponse, GetWorkspaceNameData, GetWorkspaceNameResponse, ChangeWorkspaceNameData, ChangeWorkspaceNameResponse, ChangeWorkspaceIdData, ChangeWorkspaceIdResponse, ChangeWorkspaceColorData, ChangeWorkspaceColorResponse, WhoisData, WhoisResponse, UpdateOperatorSettingsData, UpdateOperatorSettingsResponse, ExistsEmailData, ExistsEmailResponse, ListUsersAsSuperAdminData, ListUsersAsSuperAdminResponse, ListPendingInvitesData, ListPendingInvitesResponse, GetSettingsData, GetSettingsResponse, GetDeployToData, GetDeployToResponse, GetIsPremiumData, GetIsPremiumResponse, GetPremiumInfoData, GetPremiumInfoResponse, SetAutomaticBillingData, SetAutomaticBillingResponse, GetThresholdAlertData, GetThresholdAlertResponse, SetThresholdAlertData, SetThresholdAlertResponse, EditSlackCommandData, EditSlackCommandResponse, EditTeamsCommandData, EditTeamsCommandResponse, ListAvailableTeamsIdsData, ListAvailableTeamsIdsResponse, ListAvailableTeamsChannelsData, ListAvailableTeamsChannelsResponse, ConnectTeamsData, ConnectTeamsResponse, RunSlackMessageTestJobData, RunSlackMessageTestJobResponse, RunTeamsMessageTestJobData, RunTeamsMessageTestJobResponse, EditDeployToData, EditDeployToResponse, EditAutoInviteData, EditAutoInviteResponse, EditWebhookData, EditWebhookResponse, EditCopilotConfigData, EditCopilotConfigResponse, GetCopilotInfoData, GetCopilotInfoResponse, EditErrorHandlerData, EditErrorHandlerResponse, EditLargeFileStorageConfigData, EditLargeFileStorageConfigResponse, EditWorkspaceGitSyncConfigData, EditWorkspaceGitSyncConfigResponse, EditWorkspaceDeployUiSettingsData, EditWorkspaceDeployUiSettingsResponse, EditWorkspaceDefaultAppData, EditWorkspaceDefaultAppResponse, EditDefaultScriptsData, EditDefaultScriptsResponse, GetDefaultScriptsData, GetDefaultScriptsResponse, SetEnvironmentVariableData, SetEnvironmentVariableResponse, GetWorkspaceEncryptionKeyData, GetWorkspaceEncryptionKeyResponse, SetWorkspaceEncryptionKeyData, SetWorkspaceEncryptionKeyResponse, GetWorkspaceDefaultAppData, GetWorkspaceDefaultAppResponse, GetLargeFileStorageConfigData, GetLargeFileStorageConfigResponse, GetWorkspaceUsageData, GetWorkspaceUsageResponse, GetUsedTriggersData, GetUsedTriggersResponse, ListUsersData, ListUsersResponse, ListUsersUsageData, ListUsersUsageResponse, ListUsernamesData, ListUsernamesResponse, UsernameToEmailData, UsernameToEmailResponse, CreateTokenData, CreateTokenResponse, CreateTokenImpersonateData, CreateTokenImpersonateResponse, DeleteTokenData, DeleteTokenResponse, ListTokensData, ListTokensResponse, GetOidcTokenData, GetOidcTokenResponse, CreateVariableData, CreateVariableResponse, EncryptValueData, EncryptValueResponse, DeleteVariableData, DeleteVariableResponse, UpdateVariableData, UpdateVariableResponse, GetVariableData, GetVariableResponse, GetVariableValueData, GetVariableValueResponse, ExistsVariableData, ExistsVariableResponse, ListVariableData, ListVariableResponse, ListContextualVariablesData, ListContextualVariablesResponse, WorkspaceGetCriticalAlertsData, WorkspaceGetCriticalAlertsResponse, WorkspaceAcknowledgeCriticalAlertData, WorkspaceAcknowledgeCriticalAlertResponse, WorkspaceAcknowledgeAllCriticalAlertsData, WorkspaceAcknowledgeAllCriticalAlertsResponse, WorkspaceMuteCriticalAlertsUiData, WorkspaceMuteCriticalAlertsUiResponse, LoginWithOauthData, LoginWithOauthResponse, ConnectSlackCallbackData, ConnectSlackCallbackResponse, ConnectSlackCallbackInstanceData, ConnectSlackCallbackInstanceResponse, ConnectCallbackData, ConnectCallbackResponse, CreateAccountData, CreateAccountResponse, RefreshTokenData, RefreshTokenResponse, DisconnectAccountData, DisconnectAccountResponse, DisconnectSlackData, DisconnectSlackResponse, DisconnectTeamsData, DisconnectTeamsResponse, ListOauthLoginsResponse, ListOauthConnectsResponse, GetOauthConnectData, GetOauthConnectResponse, SyncTeamsResponse, SendMessageToConversationData, SendMessageToConversationResponse, CreateResourceData, CreateResourceResponse, DeleteResourceData, DeleteResourceResponse, UpdateResourceData, UpdateResourceResponse, UpdateResourceValueData, UpdateResourceValueResponse, GetResourceData, GetResourceResponse, GetResourceValueInterpolatedData, GetResourceValueInterpolatedResponse, GetResourceValueData, GetResourceValueResponse, ExistsResourceData, ExistsResourceResponse, ListResourceData, ListResourceResponse, ListSearchResourceData, ListSearchResourceResponse, ListResourceNamesData, ListResourceNamesResponse, CreateResourceTypeData, CreateResourceTypeResponse, FileResourceTypeToFileExtMapData, FileResourceTypeToFileExtMapResponse, DeleteResourceTypeData, DeleteResourceTypeResponse, UpdateResourceTypeData, UpdateResourceTypeResponse, GetResourceTypeData, GetResourceTypeResponse, ExistsResourceTypeData, ExistsResourceTypeResponse, ListResourceTypeData, ListResourceTypeResponse, ListResourceTypeNamesData, ListResourceTypeNamesResponse, QueryResourceTypesData, QueryResourceTypesResponse, ListHubIntegrationsData, ListHubIntegrationsResponse, ListHubFlowsResponse, GetHubFlowByIdData, GetHubFlowByIdResponse, ListHubAppsResponse, GetHubAppByIdData, GetHubAppByIdResponse, GetPublicAppByCustomPathData, GetPublicAppByCustomPathResponse, GetHubScriptContentByPathData, GetHubScriptContentByPathResponse, GetHubScriptByPathData, GetHubScriptByPathResponse, GetTopHubScriptsData, GetTopHubScriptsResponse, QueryHubScriptsData, QueryHubScriptsResponse, ListSearchScriptData, ListSearchScriptResponse, ListScriptsData, ListScriptsResponse, ListScriptPathsData, ListScriptPathsResponse, CreateDraftData, CreateDraftResponse, DeleteDraftData, DeleteDraftResponse, CreateScriptData, CreateScriptResponse, ToggleWorkspaceErrorHandlerForScriptData, ToggleWorkspaceErrorHandlerForScriptResponse, GetCustomTagsData, GetCustomTagsResponse, GeDefaultTagsResponse, IsDefaultTagsPerWorkspaceResponse, ArchiveScriptByPathData, ArchiveScriptByPathResponse, ArchiveScriptByHashData, ArchiveScriptByHashResponse, DeleteScriptByHashData, DeleteScriptByHashResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, GetScriptByPathData, GetScriptByPathResponse, GetTriggersCountOfScriptData, GetTriggersCountOfScriptResponse, ListTokensOfScriptData, ListTokensOfScriptResponse, GetScriptByPathWithDraftData, GetScriptByPathWithDraftResponse, GetScriptHistoryByPathData, GetScriptHistoryByPathResponse, GetScriptLatestVersionData, GetScriptLatestVersionResponse, UpdateScriptHistoryData, UpdateScriptHistoryResponse, RawScriptByPathData, RawScriptByPathResponse, RawScriptByPathTokenedData, RawScriptByPathTokenedResponse, ExistsScriptByPathData, ExistsScriptByPathResponse, GetScriptByHashData, GetScriptByHashResponse, RawScriptByHashData, RawScriptByHashResponse, GetScriptDeploymentStatusData, GetScriptDeploymentStatusResponse, RunScriptByPathData, RunScriptByPathResponse, OpenaiSyncScriptByPathData, OpenaiSyncScriptByPathResponse, RunWaitResultScriptByPathData, RunWaitResultScriptByPathResponse, RunWaitResultScriptByPathGetData, RunWaitResultScriptByPathGetResponse, OpenaiSyncFlowByPathData, OpenaiSyncFlowByPathResponse, RunWaitResultFlowByPathData, RunWaitResultFlowByPathResponse, ResultByIdData, ResultByIdResponse, ListFlowPathsData, ListFlowPathsResponse, ListSearchFlowData, ListSearchFlowResponse, ListFlowsData, ListFlowsResponse, GetFlowHistoryData, GetFlowHistoryResponse, GetFlowLatestVersionData, GetFlowLatestVersionResponse, ListFlowPathsFromWorkspaceRunnableData, ListFlowPathsFromWorkspaceRunnableResponse, GetFlowVersionData, GetFlowVersionResponse, UpdateFlowHistoryData, UpdateFlowHistoryResponse, GetFlowByPathData, GetFlowByPathResponse, GetFlowDeploymentStatusData, GetFlowDeploymentStatusResponse, GetTriggersCountOfFlowData, GetTriggersCountOfFlowResponse, ListTokensOfFlowData, ListTokensOfFlowResponse, ToggleWorkspaceErrorHandlerForFlowData, ToggleWorkspaceErrorHandlerForFlowResponse, GetFlowByPathWithDraftData, GetFlowByPathWithDraftResponse, ExistsFlowByPathData, ExistsFlowByPathResponse, CreateFlowData, CreateFlowResponse, UpdateFlowData, UpdateFlowResponse, ArchiveFlowByPathData, ArchiveFlowByPathResponse, DeleteFlowByPathData, DeleteFlowByPathResponse, ListRawAppsData, ListRawAppsResponse, ExistsRawAppData, ExistsRawAppResponse, GetRawAppDataData, GetRawAppDataResponse, ListSearchAppData, ListSearchAppResponse, ListAppsData, ListAppsResponse, CreateAppData, CreateAppResponse, ExistsAppData, ExistsAppResponse, GetAppByPathData, GetAppByPathResponse, GetAppLiteByPathData, GetAppLiteByPathResponse, GetAppByPathWithDraftData, GetAppByPathWithDraftResponse, GetAppHistoryByPathData, GetAppHistoryByPathResponse, GetAppLatestVersionData, GetAppLatestVersionResponse, UpdateAppHistoryData, UpdateAppHistoryResponse, GetPublicAppBySecretData, GetPublicAppBySecretResponse, GetPublicResourceData, GetPublicResourceResponse, GetPublicSecretOfAppData, GetPublicSecretOfAppResponse, GetAppByVersionData, GetAppByVersionResponse, CreateRawAppData, CreateRawAppResponse, UpdateRawAppData, UpdateRawAppResponse, DeleteRawAppData, DeleteRawAppResponse, DeleteAppData, DeleteAppResponse, UpdateAppData, UpdateAppResponse, CustomPathExistsData, CustomPathExistsResponse, ExecuteComponentData, ExecuteComponentResponse, UploadS3FileFromAppData, UploadS3FileFromAppResponse, DeleteS3FileFromAppData, DeleteS3FileFromAppResponse, RunFlowByPathData, RunFlowByPathResponse, RestartFlowAtStepData, RestartFlowAtStepResponse, RunScriptByHashData, RunScriptByHashResponse, RunScriptPreviewData, RunScriptPreviewResponse, RunCodeWorkflowTaskData, RunCodeWorkflowTaskResponse, RunRawScriptDependenciesData, RunRawScriptDependenciesResponse, RunFlowPreviewData, RunFlowPreviewResponse, ListQueueData, ListQueueResponse, GetQueueCountData, GetQueueCountResponse, GetCompletedCountData, GetCompletedCountResponse, CountCompletedJobsData, CountCompletedJobsResponse, ListFilteredUuidsData, ListFilteredUuidsResponse, CancelSelectionData, CancelSelectionResponse, ListCompletedJobsData, ListCompletedJobsResponse, ListJobsData, ListJobsResponse, GetDbClockResponse, CountJobsByTagData, CountJobsByTagResponse, GetJobData, GetJobResponse, GetRootJobIdData, GetRootJobIdResponse, GetJobLogsData, GetJobLogsResponse, GetJobArgsData, GetJobArgsResponse, GetJobUpdatesData, GetJobUpdatesResponse, GetLogFileFromStoreData, GetLogFileFromStoreResponse, GetFlowDebugInfoData, GetFlowDebugInfoResponse, GetCompletedJobData, GetCompletedJobResponse, GetCompletedJobResultData, GetCompletedJobResultResponse, GetCompletedJobResultMaybeData, GetCompletedJobResultMaybeResponse, DeleteCompletedJobData, DeleteCompletedJobResponse, CancelQueuedJobData, CancelQueuedJobResponse, CancelPersistentQueuedJobsData, CancelPersistentQueuedJobsResponse, ForceCancelQueuedJobData, ForceCancelQueuedJobResponse, CreateJobSignatureData, CreateJobSignatureResponse, GetResumeUrlsData, GetResumeUrlsResponse, GetSlackApprovalPayloadData, GetSlackApprovalPayloadResponse, ResumeSuspendedJobGetData, ResumeSuspendedJobGetResponse, ResumeSuspendedJobPostData, ResumeSuspendedJobPostResponse, SetFlowUserStateData, SetFlowUserStateResponse, GetFlowUserStateData, GetFlowUserStateResponse, ResumeSuspendedFlowAsOwnerData, ResumeSuspendedFlowAsOwnerResponse, CancelSuspendedJobGetData, CancelSuspendedJobGetResponse, CancelSuspendedJobPostData, CancelSuspendedJobPostResponse, GetSuspendedJobFlowData, GetSuspendedJobFlowResponse, PreviewScheduleData, PreviewScheduleResponse, CreateScheduleData, CreateScheduleResponse, UpdateScheduleData, UpdateScheduleResponse, SetScheduleEnabledData, SetScheduleEnabledResponse, DeleteScheduleData, DeleteScheduleResponse, GetScheduleData, GetScheduleResponse, ExistsScheduleData, ExistsScheduleResponse, ListSchedulesData, ListSchedulesResponse, ListSchedulesWithJobsData, ListSchedulesWithJobsResponse, SetDefaultErrorOrRecoveryHandlerData, SetDefaultErrorOrRecoveryHandlerResponse, CreateHttpTriggerData, CreateHttpTriggerResponse, UpdateHttpTriggerData, UpdateHttpTriggerResponse, DeleteHttpTriggerData, DeleteHttpTriggerResponse, GetHttpTriggerData, GetHttpTriggerResponse, ListHttpTriggersData, ListHttpTriggersResponse, ExistsHttpTriggerData, ExistsHttpTriggerResponse, ExistsRouteData, ExistsRouteResponse, CreateWebsocketTriggerData, CreateWebsocketTriggerResponse, UpdateWebsocketTriggerData, UpdateWebsocketTriggerResponse, DeleteWebsocketTriggerData, DeleteWebsocketTriggerResponse, GetWebsocketTriggerData, GetWebsocketTriggerResponse, ListWebsocketTriggersData, ListWebsocketTriggersResponse, ExistsWebsocketTriggerData, ExistsWebsocketTriggerResponse, SetWebsocketTriggerEnabledData, SetWebsocketTriggerEnabledResponse, TestWebsocketConnectionData, TestWebsocketConnectionResponse, CreateKafkaTriggerData, CreateKafkaTriggerResponse, UpdateKafkaTriggerData, UpdateKafkaTriggerResponse, DeleteKafkaTriggerData, DeleteKafkaTriggerResponse, GetKafkaTriggerData, GetKafkaTriggerResponse, ListKafkaTriggersData, ListKafkaTriggersResponse, ExistsKafkaTriggerData, ExistsKafkaTriggerResponse, SetKafkaTriggerEnabledData, SetKafkaTriggerEnabledResponse, TestKafkaConnectionData, TestKafkaConnectionResponse, CreateNatsTriggerData, CreateNatsTriggerResponse, UpdateNatsTriggerData, UpdateNatsTriggerResponse, DeleteNatsTriggerData, DeleteNatsTriggerResponse, GetNatsTriggerData, GetNatsTriggerResponse, ListNatsTriggersData, ListNatsTriggersResponse, ExistsNatsTriggerData, ExistsNatsTriggerResponse, SetNatsTriggerEnabledData, SetNatsTriggerEnabledResponse, TestNatsConnectionData, TestNatsConnectionResponse, CreateSqsTriggerData, CreateSqsTriggerResponse, UpdateSqsTriggerData, UpdateSqsTriggerResponse, DeleteSqsTriggerData, DeleteSqsTriggerResponse, GetSqsTriggerData, GetSqsTriggerResponse, ListSqsTriggersData, ListSqsTriggersResponse, ExistsSqsTriggerData, ExistsSqsTriggerResponse, SetSqsTriggerEnabledData, SetSqsTriggerEnabledResponse, TestSqsConnectionData, TestSqsConnectionResponse, CreateMqttTriggerData, CreateMqttTriggerResponse, UpdateMqttTriggerData, UpdateMqttTriggerResponse, DeleteMqttTriggerData, DeleteMqttTriggerResponse, GetMqttTriggerData, GetMqttTriggerResponse, ListMqttTriggersData, ListMqttTriggersResponse, ExistsMqttTriggerData, ExistsMqttTriggerResponse, SetMqttTriggerEnabledData, SetMqttTriggerEnabledResponse, TestMqttConnectionData, TestMqttConnectionResponse, IsValidPostgresConfigurationData, IsValidPostgresConfigurationResponse, CreateTemplateScriptData, CreateTemplateScriptResponse, GetTemplateScriptData, GetTemplateScriptResponse, ListPostgresReplicationSlotData, ListPostgresReplicationSlotResponse, CreatePostgresReplicationSlotData, CreatePostgresReplicationSlotResponse, DeletePostgresReplicationSlotData, DeletePostgresReplicationSlotResponse, ListPostgresPublicationData, ListPostgresPublicationResponse, GetPostgresPublicationData, GetPostgresPublicationResponse, CreatePostgresPublicationData, CreatePostgresPublicationResponse, UpdatePostgresPublicationData, UpdatePostgresPublicationResponse, DeletePostgresPublicationData, DeletePostgresPublicationResponse, CreatePostgresTriggerData, CreatePostgresTriggerResponse, UpdatePostgresTriggerData, UpdatePostgresTriggerResponse, DeletePostgresTriggerData, DeletePostgresTriggerResponse, GetPostgresTriggerData, GetPostgresTriggerResponse, ListPostgresTriggersData, ListPostgresTriggersResponse, ExistsPostgresTriggerData, ExistsPostgresTriggerResponse, SetPostgresTriggerEnabledData, SetPostgresTriggerEnabledResponse, TestPostgresConnectionData, TestPostgresConnectionResponse, ListInstanceGroupsResponse, GetInstanceGroupData, GetInstanceGroupResponse, CreateInstanceGroupData, CreateInstanceGroupResponse, UpdateInstanceGroupData, UpdateInstanceGroupResponse, DeleteInstanceGroupData, DeleteInstanceGroupResponse, AddUserToInstanceGroupData, AddUserToInstanceGroupResponse, RemoveUserFromInstanceGroupData, RemoveUserFromInstanceGroupResponse, ExportInstanceGroupsResponse, OverwriteInstanceGroupsData, OverwriteInstanceGroupsResponse, ListGroupsData, ListGroupsResponse, ListGroupNamesData, ListGroupNamesResponse, CreateGroupData, CreateGroupResponse, UpdateGroupData, UpdateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, AddUserToGroupData, AddUserToGroupResponse, RemoveUserToGroupData, RemoveUserToGroupResponse, ListFoldersData, ListFoldersResponse, ListFolderNamesData, ListFolderNamesResponse, CreateFolderData, CreateFolderResponse, UpdateFolderData, UpdateFolderResponse, DeleteFolderData, DeleteFolderResponse, GetFolderData, GetFolderResponse, ExistsFolderData, ExistsFolderResponse, GetFolderUsageData, GetFolderUsageResponse, AddOwnerToFolderData, AddOwnerToFolderResponse, RemoveOwnerToFolderData, RemoveOwnerToFolderResponse, ListWorkersData, ListWorkersResponse, ExistsWorkerWithTagData, ExistsWorkerWithTagResponse, GetQueueMetricsResponse, GetCountsOfJobsWaitingPerTagResponse, ListWorkerGroupsResponse, GetConfigData, GetConfigResponse, UpdateConfigData, UpdateConfigResponse, DeleteConfigData, DeleteConfigResponse, ListConfigsResponse, ListAutoscalingEventsData, ListAutoscalingEventsResponse, GetGranularAclsData, GetGranularAclsResponse, AddGranularAclsData, AddGranularAclsResponse, RemoveGranularAclsData, RemoveGranularAclsResponse, SetCaptureConfigData, SetCaptureConfigResponse, PingCaptureConfigData, PingCaptureConfigResponse, GetCaptureConfigsData, GetCaptureConfigsResponse, ListCapturesData, ListCapturesResponse, GetCaptureData, GetCaptureResponse, DeleteCaptureData, DeleteCaptureResponse, StarData, StarResponse, UnstarData, UnstarResponse, GetInputHistoryData, GetInputHistoryResponse, GetArgsFromHistoryOrSavedInputData, GetArgsFromHistoryOrSavedInputResponse, ListInputsData, ListInputsResponse, CreateInputData, CreateInputResponse, UpdateInputData, UpdateInputResponse, DeleteInputData, DeleteInputResponse, DuckdbConnectionSettingsData, DuckdbConnectionSettingsResponse, DuckdbConnectionSettingsV2Data, DuckdbConnectionSettingsV2Response, PolarsConnectionSettingsData, PolarsConnectionSettingsResponse, PolarsConnectionSettingsV2Data, PolarsConnectionSettingsV2Response, S3ResourceInfoData, S3ResourceInfoResponse, DatasetStorageTestConnectionData, DatasetStorageTestConnectionResponse, ListStoredFilesData, ListStoredFilesResponse, LoadFileMetadataData, LoadFileMetadataResponse, LoadFilePreviewData, LoadFilePreviewResponse, LoadParquetPreviewData, LoadParquetPreviewResponse, LoadTableRowCountData, LoadTableRowCountResponse, LoadCsvPreviewData, LoadCsvPreviewResponse, DeleteS3FileData, DeleteS3FileResponse, MoveS3FileData, MoveS3FileResponse, FileUploadData, FileUploadResponse, FileDownloadData, FileDownloadResponse, FileDownloadParquetAsCsvData, FileDownloadParquetAsCsvResponse, GetJobMetricsData, GetJobMetricsResponse, SetJobProgressData, SetJobProgressResponse, GetJobProgressData, GetJobProgressResponse, ListLogFilesData, ListLogFilesResponse, GetLogFileData, GetLogFileResponse, ListConcurrencyGroupsResponse, DeleteConcurrencyGroupData, DeleteConcurrencyGroupResponse, GetConcurrencyKeyData, GetConcurrencyKeyResponse, ListExtendedJobsData, ListExtendedJobsResponse, SearchJobsIndexData, SearchJobsIndexResponse, SearchLogsIndexData, SearchLogsIndexResponse, CountSearchLogsIndexData, CountSearchLogsIndexResponse, ClearIndexData, ClearIndexResponse } from './types.gen.ts'; +import type { BackendVersionResponse, BackendUptodateResponse, GetLicenseIdResponse, GetOpenApiYamlResponse, GetAuditLogData, GetAuditLogResponse, ListAuditLogsData, ListAuditLogsResponse, LoginData, LoginResponse, LogoutResponse, GetUserData, GetUserResponse, UpdateUserData, UpdateUserResponse, IsOwnerOfPathData, IsOwnerOfPathResponse, SetPasswordData, SetPasswordResponse, SetPasswordForUserData, SetPasswordForUserResponse, SetLoginTypeForUserData, SetLoginTypeForUserResponse, CreateUserGloballyData, CreateUserGloballyResponse, GlobalUserUpdateData, GlobalUserUpdateResponse, GlobalUsernameInfoData, GlobalUsernameInfoResponse, GlobalUserRenameData, GlobalUserRenameResponse, GlobalUserDeleteData, GlobalUserDeleteResponse, GlobalUsersOverwriteData, GlobalUsersOverwriteResponse, GlobalUsersExportResponse, DeleteUserData, DeleteUserResponse, ListWorkspacesResponse, IsDomainAllowedResponse, ListUserWorkspacesResponse, ListWorkspacesAsSuperAdminData, ListWorkspacesAsSuperAdminResponse, CreateWorkspaceData, CreateWorkspaceResponse, ExistsWorkspaceData, ExistsWorkspaceResponse, ExistsUsernameData, ExistsUsernameResponse, GetGlobalData, GetGlobalResponse, SetGlobalData, SetGlobalResponse, GetLocalResponse, TestSmtpData, TestSmtpResponse, TestCriticalChannelsData, TestCriticalChannelsResponse, GetCriticalAlertsData, GetCriticalAlertsResponse, AcknowledgeCriticalAlertData, AcknowledgeCriticalAlertResponse, AcknowledgeAllCriticalAlertsResponse, TestLicenseKeyData, TestLicenseKeyResponse, TestObjectStorageConfigData, TestObjectStorageConfigResponse, SendStatsResponse, GetLatestKeyRenewalAttemptResponse, RenewLicenseKeyData, RenewLicenseKeyResponse, CreateCustomerPortalSessionData, CreateCustomerPortalSessionResponse, TestMetadataData, TestMetadataResponse, ListGlobalSettingsResponse, GetCurrentEmailResponse, RefreshUserTokenData, RefreshUserTokenResponse, GetTutorialProgressResponse, UpdateTutorialProgressData, UpdateTutorialProgressResponse, LeaveInstanceResponse, GetUsageResponse, GetRunnableResponse, GlobalWhoamiResponse, ListWorkspaceInvitesResponse, WhoamiData, WhoamiResponse, AcceptInviteData, AcceptInviteResponse, DeclineInviteData, DeclineInviteResponse, InviteUserData, InviteUserResponse, AddUserData, AddUserResponse, DeleteInviteData, DeleteInviteResponse, ArchiveWorkspaceData, ArchiveWorkspaceResponse, UnarchiveWorkspaceData, UnarchiveWorkspaceResponse, DeleteWorkspaceData, DeleteWorkspaceResponse, LeaveWorkspaceData, LeaveWorkspaceResponse, GetWorkspaceNameData, GetWorkspaceNameResponse, ChangeWorkspaceNameData, ChangeWorkspaceNameResponse, ChangeWorkspaceIdData, ChangeWorkspaceIdResponse, ChangeWorkspaceColorData, ChangeWorkspaceColorResponse, WhoisData, WhoisResponse, UpdateOperatorSettingsData, UpdateOperatorSettingsResponse, ExistsEmailData, ExistsEmailResponse, ListUsersAsSuperAdminData, ListUsersAsSuperAdminResponse, ListPendingInvitesData, ListPendingInvitesResponse, GetSettingsData, GetSettingsResponse, GetDeployToData, GetDeployToResponse, GetIsPremiumData, GetIsPremiumResponse, GetPremiumInfoData, GetPremiumInfoResponse, SetAutomaticBillingData, SetAutomaticBillingResponse, GetThresholdAlertData, GetThresholdAlertResponse, SetThresholdAlertData, SetThresholdAlertResponse, EditSlackCommandData, EditSlackCommandResponse, EditTeamsCommandData, EditTeamsCommandResponse, ListAvailableTeamsIdsData, ListAvailableTeamsIdsResponse, ListAvailableTeamsChannelsData, ListAvailableTeamsChannelsResponse, ConnectTeamsData, ConnectTeamsResponse, RunSlackMessageTestJobData, RunSlackMessageTestJobResponse, RunTeamsMessageTestJobData, RunTeamsMessageTestJobResponse, EditDeployToData, EditDeployToResponse, EditAutoInviteData, EditAutoInviteResponse, EditWebhookData, EditWebhookResponse, EditCopilotConfigData, EditCopilotConfigResponse, GetCopilotInfoData, GetCopilotInfoResponse, EditErrorHandlerData, EditErrorHandlerResponse, EditLargeFileStorageConfigData, EditLargeFileStorageConfigResponse, EditWorkspaceGitSyncConfigData, EditWorkspaceGitSyncConfigResponse, EditWorkspaceDeployUiSettingsData, EditWorkspaceDeployUiSettingsResponse, EditWorkspaceDefaultAppData, EditWorkspaceDefaultAppResponse, EditDefaultScriptsData, EditDefaultScriptsResponse, GetDefaultScriptsData, GetDefaultScriptsResponse, SetEnvironmentVariableData, SetEnvironmentVariableResponse, GetWorkspaceEncryptionKeyData, GetWorkspaceEncryptionKeyResponse, SetWorkspaceEncryptionKeyData, SetWorkspaceEncryptionKeyResponse, GetWorkspaceDefaultAppData, GetWorkspaceDefaultAppResponse, GetLargeFileStorageConfigData, GetLargeFileStorageConfigResponse, GetWorkspaceUsageData, GetWorkspaceUsageResponse, GetUsedTriggersData, GetUsedTriggersResponse, ListUsersData, ListUsersResponse, ListUsersUsageData, ListUsersUsageResponse, ListUsernamesData, ListUsernamesResponse, UsernameToEmailData, UsernameToEmailResponse, CreateTokenData, CreateTokenResponse, CreateTokenImpersonateData, CreateTokenImpersonateResponse, DeleteTokenData, DeleteTokenResponse, ListTokensData, ListTokensResponse, GetOidcTokenData, GetOidcTokenResponse, CreateVariableData, CreateVariableResponse, EncryptValueData, EncryptValueResponse, DeleteVariableData, DeleteVariableResponse, UpdateVariableData, UpdateVariableResponse, GetVariableData, GetVariableResponse, GetVariableValueData, GetVariableValueResponse, ExistsVariableData, ExistsVariableResponse, ListVariableData, ListVariableResponse, ListContextualVariablesData, ListContextualVariablesResponse, WorkspaceGetCriticalAlertsData, WorkspaceGetCriticalAlertsResponse, WorkspaceAcknowledgeCriticalAlertData, WorkspaceAcknowledgeCriticalAlertResponse, WorkspaceAcknowledgeAllCriticalAlertsData, WorkspaceAcknowledgeAllCriticalAlertsResponse, WorkspaceMuteCriticalAlertsUiData, WorkspaceMuteCriticalAlertsUiResponse, LoginWithOauthData, LoginWithOauthResponse, ConnectSlackCallbackData, ConnectSlackCallbackResponse, ConnectSlackCallbackInstanceData, ConnectSlackCallbackInstanceResponse, ConnectCallbackData, ConnectCallbackResponse, CreateAccountData, CreateAccountResponse, RefreshTokenData, RefreshTokenResponse, DisconnectAccountData, DisconnectAccountResponse, DisconnectSlackData, DisconnectSlackResponse, DisconnectTeamsData, DisconnectTeamsResponse, ListOauthLoginsResponse, ListOauthConnectsResponse, GetOauthConnectData, GetOauthConnectResponse, SyncTeamsResponse, SendMessageToConversationData, SendMessageToConversationResponse, CreateResourceData, CreateResourceResponse, DeleteResourceData, DeleteResourceResponse, UpdateResourceData, UpdateResourceResponse, UpdateResourceValueData, UpdateResourceValueResponse, GetResourceData, GetResourceResponse, GetResourceValueInterpolatedData, GetResourceValueInterpolatedResponse, GetResourceValueData, GetResourceValueResponse, ExistsResourceData, ExistsResourceResponse, ListResourceData, ListResourceResponse, ListSearchResourceData, ListSearchResourceResponse, ListResourceNamesData, ListResourceNamesResponse, CreateResourceTypeData, CreateResourceTypeResponse, FileResourceTypeToFileExtMapData, FileResourceTypeToFileExtMapResponse, DeleteResourceTypeData, DeleteResourceTypeResponse, UpdateResourceTypeData, UpdateResourceTypeResponse, GetResourceTypeData, GetResourceTypeResponse, ExistsResourceTypeData, ExistsResourceTypeResponse, ListResourceTypeData, ListResourceTypeResponse, ListResourceTypeNamesData, ListResourceTypeNamesResponse, QueryResourceTypesData, QueryResourceTypesResponse, ListHubIntegrationsData, ListHubIntegrationsResponse, ListHubFlowsResponse, GetHubFlowByIdData, GetHubFlowByIdResponse, ListHubAppsResponse, GetHubAppByIdData, GetHubAppByIdResponse, GetPublicAppByCustomPathData, GetPublicAppByCustomPathResponse, GetHubScriptContentByPathData, GetHubScriptContentByPathResponse, GetHubScriptByPathData, GetHubScriptByPathResponse, GetTopHubScriptsData, GetTopHubScriptsResponse, QueryHubScriptsData, QueryHubScriptsResponse, ListSearchScriptData, ListSearchScriptResponse, ListScriptsData, ListScriptsResponse, ListScriptPathsData, ListScriptPathsResponse, CreateDraftData, CreateDraftResponse, DeleteDraftData, DeleteDraftResponse, CreateScriptData, CreateScriptResponse, ToggleWorkspaceErrorHandlerForScriptData, ToggleWorkspaceErrorHandlerForScriptResponse, GetCustomTagsData, GetCustomTagsResponse, GeDefaultTagsResponse, IsDefaultTagsPerWorkspaceResponse, ArchiveScriptByPathData, ArchiveScriptByPathResponse, ArchiveScriptByHashData, ArchiveScriptByHashResponse, DeleteScriptByHashData, DeleteScriptByHashResponse, DeleteScriptByPathData, DeleteScriptByPathResponse, GetScriptByPathData, GetScriptByPathResponse, GetTriggersCountOfScriptData, GetTriggersCountOfScriptResponse, ListTokensOfScriptData, ListTokensOfScriptResponse, GetScriptByPathWithDraftData, GetScriptByPathWithDraftResponse, GetScriptHistoryByPathData, GetScriptHistoryByPathResponse, GetScriptLatestVersionData, GetScriptLatestVersionResponse, UpdateScriptHistoryData, UpdateScriptHistoryResponse, RawScriptByPathData, RawScriptByPathResponse, RawScriptByPathTokenedData, RawScriptByPathTokenedResponse, ExistsScriptByPathData, ExistsScriptByPathResponse, GetScriptByHashData, GetScriptByHashResponse, RawScriptByHashData, RawScriptByHashResponse, GetScriptDeploymentStatusData, GetScriptDeploymentStatusResponse, RunScriptByPathData, RunScriptByPathResponse, OpenaiSyncScriptByPathData, OpenaiSyncScriptByPathResponse, RunWaitResultScriptByPathData, RunWaitResultScriptByPathResponse, RunWaitResultScriptByPathGetData, RunWaitResultScriptByPathGetResponse, OpenaiSyncFlowByPathData, OpenaiSyncFlowByPathResponse, RunWaitResultFlowByPathData, RunWaitResultFlowByPathResponse, ResultByIdData, ResultByIdResponse, ListFlowPathsData, ListFlowPathsResponse, ListSearchFlowData, ListSearchFlowResponse, ListFlowsData, ListFlowsResponse, GetFlowHistoryData, GetFlowHistoryResponse, GetFlowLatestVersionData, GetFlowLatestVersionResponse, ListFlowPathsFromWorkspaceRunnableData, ListFlowPathsFromWorkspaceRunnableResponse, GetFlowVersionData, GetFlowVersionResponse, UpdateFlowHistoryData, UpdateFlowHistoryResponse, GetFlowByPathData, GetFlowByPathResponse, GetFlowDeploymentStatusData, GetFlowDeploymentStatusResponse, GetTriggersCountOfFlowData, GetTriggersCountOfFlowResponse, ListTokensOfFlowData, ListTokensOfFlowResponse, ToggleWorkspaceErrorHandlerForFlowData, ToggleWorkspaceErrorHandlerForFlowResponse, GetFlowByPathWithDraftData, GetFlowByPathWithDraftResponse, ExistsFlowByPathData, ExistsFlowByPathResponse, CreateFlowData, CreateFlowResponse, UpdateFlowData, UpdateFlowResponse, ArchiveFlowByPathData, ArchiveFlowByPathResponse, DeleteFlowByPathData, DeleteFlowByPathResponse, ListRawAppsData, ListRawAppsResponse, ExistsRawAppData, ExistsRawAppResponse, GetRawAppDataData, GetRawAppDataResponse, ListSearchAppData, ListSearchAppResponse, ListAppsData, ListAppsResponse, CreateAppData, CreateAppResponse, ExistsAppData, ExistsAppResponse, GetAppByPathData, GetAppByPathResponse, GetAppLiteByPathData, GetAppLiteByPathResponse, GetAppByPathWithDraftData, GetAppByPathWithDraftResponse, GetAppHistoryByPathData, GetAppHistoryByPathResponse, GetAppLatestVersionData, GetAppLatestVersionResponse, UpdateAppHistoryData, UpdateAppHistoryResponse, GetPublicAppBySecretData, GetPublicAppBySecretResponse, GetPublicResourceData, GetPublicResourceResponse, GetPublicSecretOfAppData, GetPublicSecretOfAppResponse, GetAppByVersionData, GetAppByVersionResponse, CreateRawAppData, CreateRawAppResponse, UpdateRawAppData, UpdateRawAppResponse, DeleteRawAppData, DeleteRawAppResponse, DeleteAppData, DeleteAppResponse, UpdateAppData, UpdateAppResponse, CustomPathExistsData, CustomPathExistsResponse, ExecuteComponentData, ExecuteComponentResponse, UploadS3FileFromAppData, UploadS3FileFromAppResponse, DeleteS3FileFromAppData, DeleteS3FileFromAppResponse, RunFlowByPathData, RunFlowByPathResponse, RestartFlowAtStepData, RestartFlowAtStepResponse, RunScriptByHashData, RunScriptByHashResponse, RunScriptPreviewData, RunScriptPreviewResponse, RunCodeWorkflowTaskData, RunCodeWorkflowTaskResponse, RunRawScriptDependenciesData, RunRawScriptDependenciesResponse, RunFlowPreviewData, RunFlowPreviewResponse, ListQueueData, ListQueueResponse, GetQueueCountData, GetQueueCountResponse, GetCompletedCountData, GetCompletedCountResponse, CountCompletedJobsData, CountCompletedJobsResponse, ListFilteredUuidsData, ListFilteredUuidsResponse, CancelSelectionData, CancelSelectionResponse, ListCompletedJobsData, ListCompletedJobsResponse, ListJobsData, ListJobsResponse, GetDbClockResponse, CountJobsByTagData, CountJobsByTagResponse, GetJobData, GetJobResponse, GetRootJobIdData, GetRootJobIdResponse, GetJobLogsData, GetJobLogsResponse, GetJobArgsData, GetJobArgsResponse, GetJobUpdatesData, GetJobUpdatesResponse, GetLogFileFromStoreData, GetLogFileFromStoreResponse, GetFlowDebugInfoData, GetFlowDebugInfoResponse, GetCompletedJobData, GetCompletedJobResponse, GetCompletedJobResultData, GetCompletedJobResultResponse, GetCompletedJobResultMaybeData, GetCompletedJobResultMaybeResponse, DeleteCompletedJobData, DeleteCompletedJobResponse, CancelQueuedJobData, CancelQueuedJobResponse, CancelPersistentQueuedJobsData, CancelPersistentQueuedJobsResponse, ForceCancelQueuedJobData, ForceCancelQueuedJobResponse, CreateJobSignatureData, CreateJobSignatureResponse, GetResumeUrlsData, GetResumeUrlsResponse, GetSlackApprovalPayloadData, GetSlackApprovalPayloadResponse, ResumeSuspendedJobGetData, ResumeSuspendedJobGetResponse, ResumeSuspendedJobPostData, ResumeSuspendedJobPostResponse, SetFlowUserStateData, SetFlowUserStateResponse, GetFlowUserStateData, GetFlowUserStateResponse, ResumeSuspendedFlowAsOwnerData, ResumeSuspendedFlowAsOwnerResponse, CancelSuspendedJobGetData, CancelSuspendedJobGetResponse, CancelSuspendedJobPostData, CancelSuspendedJobPostResponse, GetSuspendedJobFlowData, GetSuspendedJobFlowResponse, PreviewScheduleData, PreviewScheduleResponse, CreateScheduleData, CreateScheduleResponse, UpdateScheduleData, UpdateScheduleResponse, SetScheduleEnabledData, SetScheduleEnabledResponse, DeleteScheduleData, DeleteScheduleResponse, GetScheduleData, GetScheduleResponse, ExistsScheduleData, ExistsScheduleResponse, ListSchedulesData, ListSchedulesResponse, ListSchedulesWithJobsData, ListSchedulesWithJobsResponse, SetDefaultErrorOrRecoveryHandlerData, SetDefaultErrorOrRecoveryHandlerResponse, CreateHttpTriggerData, CreateHttpTriggerResponse, UpdateHttpTriggerData, UpdateHttpTriggerResponse, DeleteHttpTriggerData, DeleteHttpTriggerResponse, GetHttpTriggerData, GetHttpTriggerResponse, ListHttpTriggersData, ListHttpTriggersResponse, ExistsHttpTriggerData, ExistsHttpTriggerResponse, ExistsRouteData, ExistsRouteResponse, CreateWebsocketTriggerData, CreateWebsocketTriggerResponse, UpdateWebsocketTriggerData, UpdateWebsocketTriggerResponse, DeleteWebsocketTriggerData, DeleteWebsocketTriggerResponse, GetWebsocketTriggerData, GetWebsocketTriggerResponse, ListWebsocketTriggersData, ListWebsocketTriggersResponse, ExistsWebsocketTriggerData, ExistsWebsocketTriggerResponse, SetWebsocketTriggerEnabledData, SetWebsocketTriggerEnabledResponse, TestWebsocketConnectionData, TestWebsocketConnectionResponse, CreateKafkaTriggerData, CreateKafkaTriggerResponse, UpdateKafkaTriggerData, UpdateKafkaTriggerResponse, DeleteKafkaTriggerData, DeleteKafkaTriggerResponse, GetKafkaTriggerData, GetKafkaTriggerResponse, ListKafkaTriggersData, ListKafkaTriggersResponse, ExistsKafkaTriggerData, ExistsKafkaTriggerResponse, SetKafkaTriggerEnabledData, SetKafkaTriggerEnabledResponse, TestKafkaConnectionData, TestKafkaConnectionResponse, CreateNatsTriggerData, CreateNatsTriggerResponse, UpdateNatsTriggerData, UpdateNatsTriggerResponse, DeleteNatsTriggerData, DeleteNatsTriggerResponse, GetNatsTriggerData, GetNatsTriggerResponse, ListNatsTriggersData, ListNatsTriggersResponse, ExistsNatsTriggerData, ExistsNatsTriggerResponse, SetNatsTriggerEnabledData, SetNatsTriggerEnabledResponse, TestNatsConnectionData, TestNatsConnectionResponse, CreateSqsTriggerData, CreateSqsTriggerResponse, UpdateSqsTriggerData, UpdateSqsTriggerResponse, DeleteSqsTriggerData, DeleteSqsTriggerResponse, GetSqsTriggerData, GetSqsTriggerResponse, ListSqsTriggersData, ListSqsTriggersResponse, ExistsSqsTriggerData, ExistsSqsTriggerResponse, SetSqsTriggerEnabledData, SetSqsTriggerEnabledResponse, TestSqsConnectionData, TestSqsConnectionResponse, CreateMqttTriggerData, CreateMqttTriggerResponse, UpdateMqttTriggerData, UpdateMqttTriggerResponse, DeleteMqttTriggerData, DeleteMqttTriggerResponse, GetMqttTriggerData, GetMqttTriggerResponse, ListMqttTriggersData, ListMqttTriggersResponse, ExistsMqttTriggerData, ExistsMqttTriggerResponse, SetMqttTriggerEnabledData, SetMqttTriggerEnabledResponse, TestMqttConnectionData, TestMqttConnectionResponse, IsValidPostgresConfigurationData, IsValidPostgresConfigurationResponse, CreateTemplateScriptData, CreateTemplateScriptResponse, GetTemplateScriptData, GetTemplateScriptResponse, ListPostgresReplicationSlotData, ListPostgresReplicationSlotResponse, CreatePostgresReplicationSlotData, CreatePostgresReplicationSlotResponse, DeletePostgresReplicationSlotData, DeletePostgresReplicationSlotResponse, ListPostgresPublicationData, ListPostgresPublicationResponse, GetPostgresPublicationData, GetPostgresPublicationResponse, CreatePostgresPublicationData, CreatePostgresPublicationResponse, UpdatePostgresPublicationData, UpdatePostgresPublicationResponse, DeletePostgresPublicationData, DeletePostgresPublicationResponse, CreatePostgresTriggerData, CreatePostgresTriggerResponse, UpdatePostgresTriggerData, UpdatePostgresTriggerResponse, DeletePostgresTriggerData, DeletePostgresTriggerResponse, GetPostgresTriggerData, GetPostgresTriggerResponse, ListPostgresTriggersData, ListPostgresTriggersResponse, ExistsPostgresTriggerData, ExistsPostgresTriggerResponse, SetPostgresTriggerEnabledData, SetPostgresTriggerEnabledResponse, TestPostgresConnectionData, TestPostgresConnectionResponse, ListInstanceGroupsResponse, GetInstanceGroupData, GetInstanceGroupResponse, CreateInstanceGroupData, CreateInstanceGroupResponse, UpdateInstanceGroupData, UpdateInstanceGroupResponse, DeleteInstanceGroupData, DeleteInstanceGroupResponse, AddUserToInstanceGroupData, AddUserToInstanceGroupResponse, RemoveUserFromInstanceGroupData, RemoveUserFromInstanceGroupResponse, ExportInstanceGroupsResponse, OverwriteInstanceGroupsData, OverwriteInstanceGroupsResponse, ListGroupsData, ListGroupsResponse, ListGroupNamesData, ListGroupNamesResponse, CreateGroupData, CreateGroupResponse, UpdateGroupData, UpdateGroupResponse, DeleteGroupData, DeleteGroupResponse, GetGroupData, GetGroupResponse, AddUserToGroupData, AddUserToGroupResponse, RemoveUserToGroupData, RemoveUserToGroupResponse, ListFoldersData, ListFoldersResponse, ListFolderNamesData, ListFolderNamesResponse, CreateFolderData, CreateFolderResponse, UpdateFolderData, UpdateFolderResponse, DeleteFolderData, DeleteFolderResponse, GetFolderData, GetFolderResponse, ExistsFolderData, ExistsFolderResponse, GetFolderUsageData, GetFolderUsageResponse, AddOwnerToFolderData, AddOwnerToFolderResponse, RemoveOwnerToFolderData, RemoveOwnerToFolderResponse, ListWorkersData, ListWorkersResponse, ExistsWorkerWithTagData, ExistsWorkerWithTagResponse, GetQueueMetricsResponse, GetCountsOfJobsWaitingPerTagResponse, ListWorkerGroupsResponse, GetConfigData, GetConfigResponse, UpdateConfigData, UpdateConfigResponse, DeleteConfigData, DeleteConfigResponse, ListConfigsResponse, ListAutoscalingEventsData, ListAutoscalingEventsResponse, GetGranularAclsData, GetGranularAclsResponse, AddGranularAclsData, AddGranularAclsResponse, RemoveGranularAclsData, RemoveGranularAclsResponse, SetCaptureConfigData, SetCaptureConfigResponse, PingCaptureConfigData, PingCaptureConfigResponse, GetCaptureConfigsData, GetCaptureConfigsResponse, ListCapturesData, ListCapturesResponse, MoveCapturesAndConfigsData, MoveCapturesAndConfigsResponse, GetCaptureData, GetCaptureResponse, DeleteCaptureData, DeleteCaptureResponse, StarData, StarResponse, UnstarData, UnstarResponse, GetInputHistoryData, GetInputHistoryResponse, GetArgsFromHistoryOrSavedInputData, GetArgsFromHistoryOrSavedInputResponse, ListInputsData, ListInputsResponse, CreateInputData, CreateInputResponse, UpdateInputData, UpdateInputResponse, DeleteInputData, DeleteInputResponse, DuckdbConnectionSettingsData, DuckdbConnectionSettingsResponse, DuckdbConnectionSettingsV2Data, DuckdbConnectionSettingsV2Response, PolarsConnectionSettingsData, PolarsConnectionSettingsResponse, PolarsConnectionSettingsV2Data, PolarsConnectionSettingsV2Response, S3ResourceInfoData, S3ResourceInfoResponse, DatasetStorageTestConnectionData, DatasetStorageTestConnectionResponse, ListStoredFilesData, ListStoredFilesResponse, LoadFileMetadataData, LoadFileMetadataResponse, LoadFilePreviewData, LoadFilePreviewResponse, LoadParquetPreviewData, LoadParquetPreviewResponse, LoadTableRowCountData, LoadTableRowCountResponse, LoadCsvPreviewData, LoadCsvPreviewResponse, DeleteS3FileData, DeleteS3FileResponse, MoveS3FileData, MoveS3FileResponse, FileUploadData, FileUploadResponse, FileDownloadData, FileDownloadResponse, FileDownloadParquetAsCsvData, FileDownloadParquetAsCsvResponse, GetJobMetricsData, GetJobMetricsResponse, SetJobProgressData, SetJobProgressResponse, GetJobProgressData, GetJobProgressResponse, ListLogFilesData, ListLogFilesResponse, GetLogFileData, GetLogFileResponse, ListConcurrencyGroupsResponse, DeleteConcurrencyGroupData, DeleteConcurrencyGroupResponse, GetConcurrencyKeyData, GetConcurrencyKeyResponse, ListExtendedJobsData, ListExtendedJobsResponse, SearchJobsIndexData, SearchJobsIndexResponse, SearchLogsIndexData, SearchLogsIndexResponse, CountSearchLogsIndexData, CountSearchLogsIndexResponse, ClearIndexData, ClearIndexResponse } from './types.gen.ts'; /** * get backend version @@ -3015,6 +3015,7 @@ export const deleteScriptByHash = (data: DeleteScriptByHashData): CancelableProm * @param data The data for the request. * @param data.workspace * @param data.path + * @param data.keepCaptures keep captures * @returns string script path * @throws ApiError */ @@ -3024,6 +3025,9 @@ export const deleteScriptByPath = (data: DeleteScriptByPathData): CancelableProm path: { workspace: data.workspace, path: data.path + }, + query: { + keep_captures: data.keepCaptures } }); }; @@ -3850,6 +3854,7 @@ export const archiveFlowByPath = (data: ArchiveFlowByPathData): CancelablePromis * @param data The data for the request. * @param data.workspace * @param data.path + * @param data.keepCaptures keep captures * @returns string flow delete * @throws ApiError */ @@ -3859,6 +3864,9 @@ export const deleteFlowByPath = (data: DeleteFlowByPathData): CancelablePromise< path: { workspace: data.workspace, path: data.path + }, + query: { + keep_captures: data.keepCaptures } }); }; @@ -4612,6 +4620,7 @@ export const runFlowPreview = (data: RunFlowPreviewData): CancelablePromise => { return __request(OpenAPI, { + method: 'POST', + url: '/w/{workspace}/capture/move/{runnable_kind}/{path}', + path: { + workspace: data.workspace, + runnable_kind: data.runnableKind, + path: data.path + }, + body: data.requestBody, + mediaType: 'application/json' +}); }; + /** * get a capture * @param data The data for the request. @@ -7801,6 +7837,7 @@ export const unstar = (data: UnstarData): CancelablePromise => { * @param data.runnableType * @param data.page which page to return (start at 1, default 1) * @param data.perPage number of items to return for a given page (default 30, max 100) + * @param data.args filter on jobs containing those args as a json subset (@> in postgres) * @param data.includePreview * @returns Input Input history for completed jobs * @throws ApiError @@ -7816,6 +7853,7 @@ export const getInputHistory = (data: GetInputHistoryData): CancelablePromise); +export type MoveCapturesAndConfigsData = { + path: string; + /** + * move captures and configs to a new path + */ + requestBody: { + new_path?: string; + }; + runnableKind: 'script' | 'flow'; + workspace: string; +}; + +export type MoveCapturesAndConfigsResponse = (string); + export type GetCaptureData = { id: number; workspace: string; @@ -6913,6 +6960,10 @@ export type UnstarData = { export type UnstarResponse = (unknown); export type GetInputHistoryData = { + /** + * filter on jobs containing those args as a json subset (@> in postgres) + */ + args?: string; includePreview?: boolean; /** * which page to return (start at 1, default 1) diff --git a/cli/metadata.ts b/cli/metadata.ts index ac0dde6bd5..2f5e536595 100644 --- a/cli/metadata.ts +++ b/cli/metadata.ts @@ -12,25 +12,8 @@ import { ScriptMetadata, defaultScriptMetadata, } from "./bootstrap/script_bootstrap.ts"; -import { - instantiate as instantiateWasm, - parse_ansible, - parse_bash, - parse_bigquery, - parse_deno, - parse_go, - parse_graphql, - parse_mssql, - parse_mysql, - parse_php, - parse_powershell, - parse_python, - parse_rust, - parse_csharp, - parse_snowflake, - parse_sql, - parse_oracledb, -} from "./wasm/windmill_parser_wasm.generated.js"; + + import { Workspace } from "./workspace.ts"; import { SchemaProperty } from "./bootstrap/common.ts"; import { ScriptLanguage } from "./script_common.ts"; @@ -312,8 +295,7 @@ export async function updateScriptSchema( path: string ): Promise { // infer schema from script content and update it inplace - await instantiateWasm(); - const result = inferSchema( + const result = await inferSchema( language, scriptContent, metadataContent.schema, @@ -471,80 +453,102 @@ export async function updateFlow( //////////////////////////////////////////////////////////////////////////////////////////// // below functions copied from Windmill's FE inferArgs function. TODO: refactor // //////////////////////////////////////////////////////////////////////////////////////////// -export function inferSchema( +export async function inferSchema( language: ScriptLanguage, content: string, currentSchema: any, path: string -): { +): Promise<{ schema: any; has_preprocessor: boolean | undefined; no_main_func: boolean | undefined; -} { +}> { let inferedSchema: any; if (language === "python3") { + const { parse_python } = await import('./wasm/python/windmill_parser_wasm.js') inferedSchema = JSON.parse(parse_python(content)); } else if (language === "nativets") { + const { parse_deno } = await import('./wasm/ts/windmill_parser_wasm.js') inferedSchema = JSON.parse(parse_deno(content)); } else if (language === "bun") { + const { parse_deno } = await import('./wasm/ts/windmill_parser_wasm.js') inferedSchema = JSON.parse(parse_deno(content)); } else if (language === "deno") { + const { parse_deno } = await import('./wasm/ts/windmill_parser_wasm.js') inferedSchema = JSON.parse(parse_deno(content)); } else if (language === "go") { + const { parse_go } = await import("./wasm/go/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_go(content)); } else if (language === "mysql") { + const { parse_mysql } = await import("./wasm/regex/windmill_parser_wasm.js"); + inferedSchema = JSON.parse(parse_mysql(content)); inferedSchema.args = [ { name: "database", typ: { resource: "mysql" } }, ...inferedSchema.args, ]; } else if (language === "bigquery") { + const { parse_bigquery } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_bigquery(content)); inferedSchema.args = [ { name: "database", typ: { resource: "bigquery" } }, ...inferedSchema.args, ]; } else if (language === "oracledb") { + const { parse_oracledb } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_oracledb(content)); inferedSchema.args = [ { name: "database", typ: { resource: "oracledb" } }, ...inferedSchema.args, ]; } else if (language === "snowflake") { + const { parse_snowflake } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_snowflake(content)); inferedSchema.args = [ { name: "database", typ: { resource: "snowflake" } }, ...inferedSchema.args, ]; } else if (language === "mssql") { + const { parse_mssql } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_mssql(content)); inferedSchema.args = [ { name: "database", typ: { resource: "ms_sql_server" } }, ...inferedSchema.args, ]; } else if (language === "postgresql") { + const { parse_sql } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_sql(content)); inferedSchema.args = [ { name: "database", typ: { resource: "postgresql" } }, ...inferedSchema.args, ]; } else if (language === "graphql") { + const { parse_graphql } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_graphql(content)); inferedSchema.args = [ { name: "api", typ: { resource: "graphql" } }, ...inferedSchema.args, ]; } else if (language === "bash") { + const { parse_bash } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_bash(content)); } else if (language === "powershell") { + const { parse_powershell } = await import("./wasm/regex/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_powershell(content)); } else if (language === "php") { + const { parse_php } = await import("./wasm/php/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_php(content)); } else if (language === "rust") { + const { parse_rust } = await import("./wasm/rust/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_rust(content)); } else if (language === "csharp") { + const { parse_csharp } = await import("./wasm/csharp/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_csharp(content)); + } else if (language === "nu") { + const { parse_nu } = await import("./wasm/nu/windmill_parser_wasm.js"); + inferedSchema = JSON.parse(parse_nu(content)); } else if (language === "ansible") { + const { parse_ansible } = await import("./wasm/yaml/windmill_parser_wasm.js"); inferedSchema = JSON.parse(parse_ansible(content)); } else { throw new Error("Invalid language: " + language); @@ -588,6 +592,7 @@ export function inferSchema( } } + return { schema: currentSchema, has_preprocessor: inferedSchema.has_preprocessor, diff --git a/cli/script.ts b/cli/script.ts index 2a46ad842b..7adbae0837 100644 --- a/cli/script.ts +++ b/cli/script.ts @@ -567,6 +567,8 @@ export function filePathExtensionFromContentType( return ".playbook.yml"; } else if (language === "csharp") { return ".cs"; + } else if (language === "nu") { + return ".nu"; } else { throw new Error("Invalid language: " + language); } @@ -592,6 +594,7 @@ export const exts = [ ".php", ".rs", ".cs", + ".nu", ".playbook.yml", ]; diff --git a/cli/script_common.ts b/cli/script_common.ts index 49fc491803..6fbd96ecf1 100644 --- a/cli/script_common.ts +++ b/cli/script_common.ts @@ -16,6 +16,7 @@ export type ScriptLanguage = | "php" | "rust" | "csharp" + | "nu" | "ansible"; export function inferContentTypeFromFilePath( @@ -60,6 +61,8 @@ export function inferContentTypeFromFilePath( return "csharp"; } else if (contentPath.endsWith(".playbook.yml")) { return "ansible"; + } else if (contentPath.endsWith(".nu")) { + return "nu"; } else { throw new Error( "Invalid language: " + contentPath.substring(contentPath.lastIndexOf(".")) diff --git a/cli/sync.ts b/cli/sync.ts index 622eaae2d2..6832136e06 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -340,6 +340,7 @@ export function newPathAssigner(defaultTs: "bun" | "deno"): PathAssigner { 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 ext = "no_ext"; @@ -687,6 +688,7 @@ export async function elementsToMap( "rs", "cs", "yml", + "nu", ].includes(path.split(".").pop() ?? "") && !isFileResource(path) ) diff --git a/cli/test.nu b/cli/test.nu new file mode 100755 index 0000000000..aa24760c6e --- /dev/null +++ b/cli/test.nu @@ -0,0 +1,88 @@ +#!/usr/bin/env nu +# NOTE: Not polished yet +# This script supposed to test wasm parsers in cli +# Currently you would need to create local dir in repo root (it is ignored by git) +# In there init windmill workspace +# +# Start instance with languages features on +# Invoke this script from local: ../cli/test.nu test deno + +const languages = [ + "python3", + "nativets", + "bun", + "deno", + "go", + "mysql", + "bigquery", + "oracledb", + "snowflake", + "mssql", + "postgresql", + "graphql", + "bash", + "powershell", + # "php", + "rust", + "csharp", + "nu", + "ansible", +]; + +def main [] { + main test deno; + main build; + main test node; +} + +def 'main test deno' [] { + main clean; + $languages | each { |l| + print $"+ ($l)" + deno run -A ../cli/main.ts script bootstrap $"f/tests/(random uuid)" $l + } + deno run -A ../cli/main.ts script generate-metadata +} + +def 'main test node' [] { + # TODO: Use node + main clean; + $languages | each { |l| + print $"+ ($l)" + node ../cli/npm/esm/main.js script bootstrap $"f/tests/(random uuid)" $l + } + node ../cli/npm/esm/main.js script generate-metadata +} + +def 'main clean' [] { + rm -rf f/tests/* +} + +def 'main build' [] { + ../cli/build.sh +} + +# def main [] { +# main clean; +# $languages | each { |l| +# print $"+ ($l)" +# # deno run -A ../cli/main.ts script bootstrap $"f/tests/(random uuid)" $l +# # +# let cmd = r#' +# import { inferSchema } from '../cli/metadata.ts'; + +# await inferSchema("LANG", "", undefined, "f/tests/NAME)") +# '# +# | str replace "LANG" $l +# | str replace "NAME" (random uuid); + +# deno eval $cmd +# } + +# # deno run -A ../cli/main.ts script generate-metadata +# } + +# def 'main clean' [] { +# rm -rf f/tests/* +# } + diff --git a/cli/types.ts b/cli/types.ts index 62f4f9bf53..4ee23508c1 100644 --- a/cli/types.ts +++ b/cli/types.ts @@ -226,6 +226,7 @@ export function getTypeStrFromPath( parsed.ext == ".php" || parsed.ext == ".rs" || parsed.ext == ".cs" || + parsed.ext == ".nu" || (parsed.ext == ".yml" && parsed.name.split(".").pop() == "playbook") ) { return "script"; diff --git a/cli/wasm/csharp/windmill_parser_wasm.d.ts b/cli/wasm/csharp/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..5bb156ad9e --- /dev/null +++ b/cli/wasm/csharp/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_csharp(code: string): string; diff --git a/cli/wasm/csharp/windmill_parser_wasm.js b/cli/wasm/csharp/windmill_parser_wasm.js new file mode 100644 index 0000000000..5f0003a020 --- /dev/null +++ b/cli/wasm/csharp/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_csharp(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_csharp(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/csharp/windmill_parser_wasm_bg.wasm b/cli/wasm/csharp/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..a628388cf9 Binary files /dev/null and b/cli/wasm/csharp/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/csharp/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/csharp/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..2de9fc9f0c --- /dev/null +++ b/cli/wasm/csharp/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_csharp: (a: number, b: number) => [number, number]; +export const abort: () => void; +export const malloc: (a: number) => number; +export const calloc: (a: number, b: number) => number; +export const realloc: (a: number, b: number) => number; +export const free: (a: number) => void; +export const strncmp: (a: number, b: number, c: number) => number; +export const iswspace: (a: number) => number; +export const iswalnum: (a: number) => number; +export const clock: () => bigint; +export const isprint: (a: number) => number; +export const fprintf: (a: number, b: number, c: number) => number; +export const fputs: (a: number, b: number) => number; +export const fputc: (a: number, b: number) => number; +export const fdopen: (a: number, b: number) => number; +export const fclose: (a: number) => number; +export const fwrite: (a: number, b: number, c: number, d: number) => number; +export const vsnprintf: (a: number, b: number, c: number, d: number) => number; +export const clock_gettime: (a: number, b: number) => void; +export const snprintf: () => void; +export const __assert_fail: (a: number, b: number, c: number, d: number) => void; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/go/windmill_parser_wasm.d.ts b/cli/wasm/go/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..f93ff83c68 --- /dev/null +++ b/cli/wasm/go/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_go(code: string): string; diff --git a/cli/wasm/go/windmill_parser_wasm.js b/cli/wasm/go/windmill_parser_wasm.js new file mode 100644 index 0000000000..ce2eb507ea --- /dev/null +++ b/cli/wasm/go/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_go(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_go(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/go/windmill_parser_wasm_bg.wasm b/cli/wasm/go/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..160ed99326 Binary files /dev/null and b/cli/wasm/go/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/go/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/go/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..6b7eed66b0 --- /dev/null +++ b/cli/wasm/go/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_go: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/nu/windmill_parser_wasm.d.ts b/cli/wasm/nu/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..c854a7693d --- /dev/null +++ b/cli/wasm/nu/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_nu(code: string): string; diff --git a/cli/wasm/nu/windmill_parser_wasm.js b/cli/wasm/nu/windmill_parser_wasm.js new file mode 100644 index 0000000000..fc00a9ee3e --- /dev/null +++ b/cli/wasm/nu/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_nu(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_nu(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/nu/windmill_parser_wasm_bg.wasm b/cli/wasm/nu/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..520acc48c4 Binary files /dev/null and b/cli/wasm/nu/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/nu/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/nu/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..b30073d3dc --- /dev/null +++ b/cli/wasm/nu/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_nu: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/php/windmill_parser_wasm.d.ts b/cli/wasm/php/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..7324082938 --- /dev/null +++ b/cli/wasm/php/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_php(code: string): string; diff --git a/cli/wasm/php/windmill_parser_wasm.js b/cli/wasm/php/windmill_parser_wasm.js new file mode 100644 index 0000000000..c0cdf9229d --- /dev/null +++ b/cli/wasm/php/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_php(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_php(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/php/windmill_parser_wasm_bg.wasm b/cli/wasm/php/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..9ca97f73b7 Binary files /dev/null and b/cli/wasm/php/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/php/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/php/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..a771d8a427 --- /dev/null +++ b/cli/wasm/php/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_php: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/python/windmill_parser_wasm.d.ts b/cli/wasm/python/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..14851b02df --- /dev/null +++ b/cli/wasm/python/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_python(code: string, main_override?: string | null): string; diff --git a/cli/wasm/python/windmill_parser_wasm.js b/cli/wasm/python/windmill_parser_wasm.js new file mode 100644 index 0000000000..d09b9eb221 --- /dev/null +++ b/cli/wasm/python/windmill_parser_wasm.js @@ -0,0 +1,128 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @param {string | null} [main_override] + * @returns {string} + */ +export function parse_python(code, main_override) { + let deferred3_0; + let deferred3_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + var ptr1 = isLikeNone(main_override) ? 0 : passStringToWasm0(main_override, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + const ret = wasm.parse_python(ptr0, len0, ptr1, len1); + deferred3_0 = ret[0]; + deferred3_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/python/windmill_parser_wasm_bg.wasm b/cli/wasm/python/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..37a288920d Binary files /dev/null and b/cli/wasm/python/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/python/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/python/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..1dcef70fb0 --- /dev/null +++ b/cli/wasm/python/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_python: (a: number, b: number, c: number, d: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/regex/windmill_parser_wasm.d.ts b/cli/wasm/regex/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..45f9ae539c --- /dev/null +++ b/cli/wasm/regex/windmill_parser_wasm.d.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_bash(code: string): string; +export function parse_powershell(code: string): string; +export function parse_sql(code: string): string; +export function parse_mysql(code: string): string; +export function parse_oracledb(code: string): string; +export function parse_bigquery(code: string): string; +export function parse_snowflake(code: string): string; +export function parse_mssql(code: string): string; +export function parse_db_resource(code: string): string | undefined; +export function parse_graphql(code: string): string; diff --git a/cli/wasm/regex/windmill_parser_wasm.js b/cli/wasm/regex/windmill_parser_wasm.js new file mode 100644 index 0000000000..5418fad879 --- /dev/null +++ b/cli/wasm/regex/windmill_parser_wasm.js @@ -0,0 +1,289 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_bash(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_bash(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_powershell(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_powershell(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_sql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_sql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_mysql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_mysql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_oracledb(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_oracledb(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_bigquery(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_bigquery(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_snowflake(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_snowflake(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_mssql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_mssql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string | undefined} + */ +export function parse_db_resource(code) { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_db_resource(ptr0, len0); + let v2; + if (ret[0] !== 0) { + v2 = getStringFromWasm0(ret[0], ret[1]).slice(); + wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); + } + return v2; +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_graphql(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_graphql(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/regex/windmill_parser_wasm_bg.wasm b/cli/wasm/regex/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..81d0ae1ded Binary files /dev/null and b/cli/wasm/regex/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/regex/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/regex/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..7c158b1063 --- /dev/null +++ b/cli/wasm/regex/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,18 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_bash: (a: number, b: number) => [number, number]; +export const parse_powershell: (a: number, b: number) => [number, number]; +export const parse_sql: (a: number, b: number) => [number, number]; +export const parse_mysql: (a: number, b: number) => [number, number]; +export const parse_oracledb: (a: number, b: number) => [number, number]; +export const parse_bigquery: (a: number, b: number) => [number, number]; +export const parse_snowflake: (a: number, b: number) => [number, number]; +export const parse_mssql: (a: number, b: number) => [number, number]; +export const parse_db_resource: (a: number, b: number) => [number, number]; +export const parse_graphql: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/rust/windmill_parser_wasm.d.ts b/cli/wasm/rust/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..1887ec5186 --- /dev/null +++ b/cli/wasm/rust/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_rust(code: string): string; diff --git a/cli/wasm/rust/windmill_parser_wasm.js b/cli/wasm/rust/windmill_parser_wasm.js new file mode 100644 index 0000000000..c0db59571d --- /dev/null +++ b/cli/wasm/rust/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_rust(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_rust(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/rust/windmill_parser_wasm_bg.wasm b/cli/wasm/rust/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..5448399f37 Binary files /dev/null and b/cli/wasm/rust/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/rust/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/rust/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..154edfa723 --- /dev/null +++ b/cli/wasm/rust/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_rust: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/ts/windmill_parser_wasm.d.ts b/cli/wasm/ts/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..040155c057 --- /dev/null +++ b/cli/wasm/ts/windmill_parser_wasm.d.ts @@ -0,0 +1,5 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_deno(code: string, main_override?: string | null, skip_params?: boolean | null): string; +export function parse_outputs(code: string): string; +export function parse_ts_imports(code: string): string; diff --git a/cli/wasm/ts/windmill_parser_wasm.js b/cli/wasm/ts/windmill_parser_wasm.js new file mode 100644 index 0000000000..a4999eac0a --- /dev/null +++ b/cli/wasm/ts/windmill_parser_wasm.js @@ -0,0 +1,429 @@ + + +function addToExternrefTable0(obj) { + const idx = wasm.__externref_table_alloc(); + wasm.__wbindgen_export_2.set(idx, obj); + return idx; +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + const idx = addToExternrefTable0(e); + wasm.__wbindgen_exn_store(idx); + } +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedDataViewMemory0 = null; + +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches && builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} +/** + * @param {string} code + * @param {string | null} [main_override] + * @param {boolean | null} [skip_params] + * @returns {string} + */ +export function parse_deno(code, main_override, skip_params) { + let deferred3_0; + let deferred3_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + var ptr1 = isLikeNone(main_override) ? 0 : passStringToWasm0(main_override, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + const ret = wasm.parse_deno(ptr0, len0, ptr1, len1, isLikeNone(skip_params) ? 0xFFFFFF : skip_params ? 1 : 0); + deferred3_0 = ret[0]; + deferred3_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_outputs(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_outputs(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_ts_imports(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_ts_imports(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbg_buffer_609cc3eee51ed158: function(arg0) { + const ret = arg0.buffer; + return ret; + }, + __wbg_call_672a4d21634d4a24: function() { return handleError(function (arg0, arg1) { + const ret = arg0.call(arg1); + return ret; + }, arguments) }, + __wbg_done_769e5ede4b31c67b: function(arg0) { + const ret = arg0.done; + return ret; + }, + __wbg_entries_3265d4158b33e5dc: function(arg0) { + const ret = Object.entries(arg0); + return ret; + }, + __wbg_eval_58d0b9f11db87ad1: function(arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); + return ret; + }, + __wbg_get_67b2ba62fc30de12: function() { return handleError(function (arg0, arg1) { + const ret = Reflect.get(arg0, arg1); + return ret; + }, arguments) }, + __wbg_get_b9b93047fe3cf45b: function(arg0, arg1) { + const ret = arg0[arg1 >>> 0]; + return ret; + }, + __wbg_instanceof_ArrayBuffer_e14585432e3737fc: function(arg0) { + let result; + try { + result = arg0 instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Map_f3469ce2244d2430: function(arg0) { + let result; + try { + result = arg0 instanceof Map; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Uint8Array_17156bcf118086a9: function(arg0) { + let result; + try { + result = arg0 instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_isArray_a1eab7e0d067391b: function(arg0) { + const ret = Array.isArray(arg0); + return ret; + }, + __wbg_isSafeInteger_343e2beeeece1bb0: function(arg0) { + const ret = Number.isSafeInteger(arg0); + return ret; + }, + __wbg_iterator_9a24c88df860dc65: function() { + const ret = Symbol.iterator; + return ret; + }, + __wbg_length_a446193dc22c12f8: function(arg0) { + const ret = arg0.length; + return ret; + }, + __wbg_length_e2d2a49132c1b256: function(arg0) { + const ret = arg0.length; + return ret; + }, + __wbg_new_a12002a7f91c75be: function(arg0) { + const ret = new Uint8Array(arg0); + return ret; + }, + __wbg_next_25feadfc0913fea9: function(arg0) { + const ret = arg0.next; + return ret; + }, + __wbg_next_6574e1a8a62d1055: function() { return handleError(function (arg0) { + const ret = arg0.next(); + return ret; + }, arguments) }, + __wbg_set_65595bdd868b3009: function(arg0, arg1, arg2) { + arg0.set(arg1, arg2 >>> 0); + }, + __wbg_value_cd1ffa7b1ab794f1: function(arg0) { + const ret = arg0.value; + return ret; + }, + __wbindgen_bigint_from_i64: function(arg0) { + const ret = arg0; + return ret; + }, + __wbindgen_bigint_from_u64: function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return ret; + }, + __wbindgen_bigint_get_as_i64: function(arg0, arg1) { + const v = arg1; + const ret = typeof(v) === 'bigint' ? v : undefined; + getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }, + __wbindgen_boolean_get: function(arg0) { + const v = arg0; + const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; + return ret; + }, + __wbindgen_debug_string: function(arg0, arg1) { + const ret = debugString(arg1); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbindgen_error_new: function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return ret; + }, + __wbindgen_in: function(arg0, arg1) { + const ret = arg0 in arg1; + return ret; + }, + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_2; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + __wbindgen_is_bigint: function(arg0) { + const ret = typeof(arg0) === 'bigint'; + return ret; + }, + __wbindgen_is_function: function(arg0) { + const ret = typeof(arg0) === 'function'; + return ret; + }, + __wbindgen_is_object: function(arg0) { + const val = arg0; + const ret = typeof(val) === 'object' && val !== null; + return ret; + }, + __wbindgen_jsval_eq: function(arg0, arg1) { + const ret = arg0 === arg1; + return ret; + }, + __wbindgen_jsval_loose_eq: function(arg0, arg1) { + const ret = arg0 == arg1; + return ret; + }, + __wbindgen_memory: function() { + const ret = wasm.memory; + return ret; + }, + __wbindgen_number_get: function(arg0, arg1) { + const obj = arg1; + const ret = typeof(obj) === 'number' ? obj : undefined; + getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }, + __wbindgen_string_get: function(arg0, arg1) { + const obj = arg1; + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }, + __wbindgen_throw: function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/ts/windmill_parser_wasm_bg.wasm b/cli/wasm/ts/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..92a2ea9771 Binary files /dev/null and b/cli/wasm/ts/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/ts/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/ts/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..9d924315d9 --- /dev/null +++ b/cli/wasm/ts/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,13 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_deno: (a: number, b: number, c: number, d: number, e: number) => [number, number]; +export const parse_outputs: (a: number, b: number) => [number, number]; +export const parse_ts_imports: (a: number, b: number) => [number, number]; +export const __wbindgen_exn_store: (a: number) => void; +export const __externref_table_alloc: () => number; +export const __wbindgen_export_2: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/cli/wasm/windmill_parser_wasm.generated.d.ts b/cli/wasm/windmill_parser_wasm.generated.d.ts deleted file mode 100644 index ac139dee65..0000000000 --- a/cli/wasm/windmill_parser_wasm.generated.d.ts +++ /dev/null @@ -1,146 +0,0 @@ -// deno-lint-ignore-file -// deno-fmt-ignore-file - -export interface InstantiateResult { - instance: WebAssembly.Instance; - exports: { - parse_deno: typeof parse_deno; - parse_outputs: typeof parse_outputs; - parse_ts_imports: typeof parse_ts_imports; - parse_bash: typeof parse_bash; - parse_powershell: typeof parse_powershell; - parse_go: typeof parse_go; - parse_python: typeof parse_python; - parse_sql: typeof parse_sql; - parse_mysql: typeof parse_mysql; - parse_oracledb: typeof parse_oracledb; - parse_bigquery: typeof parse_bigquery; - parse_snowflake: typeof parse_snowflake; - parse_mssql: typeof parse_mssql; - parse_db_resource: typeof parse_db_resource; - parse_graphql: typeof parse_graphql; - parse_php: typeof parse_php; - parse_rust: typeof parse_rust; - parse_ansible: typeof parse_ansible; - parse_csharp: typeof parse_csharp - }; -} - -/** Gets if the Wasm module has been instantiated. */ -export function isInstantiated(): boolean; - -/** Options for instantiating a Wasm instance. */ -export interface InstantiateOptions { - /** Optional url to the Wasm file to instantiate. */ - url?: URL; - /** Callback to decompress the raw Wasm file bytes before instantiating. */ - decompress?: (bytes: Uint8Array) => Uint8Array; -} - -/** Instantiates an instance of the Wasm module returning its functions. -* @remarks It is safe to call this multiple times and once successfully -* loaded it will always return a reference to the same object. */ -export function instantiate(opts?: InstantiateOptions): Promise; - -/** Instantiates an instance of the Wasm module along with its exports. - * @remarks It is safe to call this multiple times and once successfully - * loaded it will always return a reference to the same object. */ -export function instantiateWithInstance(opts?: InstantiateOptions): Promise; - -/** -* @param {string} code -* @param {string | undefined} [main_override] -* @returns {string} -*/ -export function parse_deno(code: string, main_override?: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_outputs(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_ts_imports(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_bash(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_powershell(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_go(code: string): string; -/** -* @param {string} code -* @param {string | undefined} [main_override] -* @returns {string} -*/ -export function parse_python(code: string, main_override?: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_sql(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_mysql(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_oracledb(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_bigquery(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_snowflake(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_mssql(code: string): string; -/** -* @param {string} code -* @returns {string | undefined} -*/ -export function parse_db_resource(code: string): string | undefined; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_graphql(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_php(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_rust(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_ansible(code: string): string; -/** -* @param {string} code -* @returns {string} -*/ -export function parse_csharp(code: string): string; diff --git a/cli/wasm/windmill_parser_wasm.generated.js b/cli/wasm/windmill_parser_wasm.generated.js deleted file mode 100644 index 81ae826164..0000000000 --- a/cli/wasm/windmill_parser_wasm.generated.js +++ /dev/null @@ -1,1268 +0,0 @@ -// @generated file from wasmbuild -- do not edit -// @ts-nocheck: generated -// deno-lint-ignore-file -// deno-fmt-ignore-file -/// - -// source-hash: f0b1d0be016a3874b6824c3458a87cf04fc171fd -let wasm; - -const heap = new Array(128).fill(undefined); - -heap.push(undefined, null, true, false); - -function getObject(idx) { - return heap[idx]; -} - -let heap_next = heap.length; - -function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; -} - -function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; -} - -function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - - heap[idx] = obj; - return idx; -} - -const cachedTextDecoder = typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; - -if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); - -let cachedUint8Memory0 = null; - -function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; -} - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedFloat64Memory0 = null; - -function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; -} - -let cachedInt32Memory0 = null; - -function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; -} - -let WASM_VECTOR_LEN = 0; - -const cachedTextEncoder = typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; - -const encodeString = function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); -}; - -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - - const mem = getUint8Memory0(); - - let offset = 0; - - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7F) break; - mem[ptr + offset] = code; - } - - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - - offset += ret.written; - ptr = realloc(ptr, len, offset, 1) >>> 0; - } - - WASM_VECTOR_LEN = offset; - return ptr; -} - -let cachedBigInt64Memory0 = null; - -function getBigInt64Memory0() { - if ( - cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0 - ) { - cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); - } - return cachedBigInt64Memory0; -} - -function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; - } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; - } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; -} -/** - * @param {string} code - * @param {string | undefined} [main_override] - * @returns {string} - */ -export function parse_deno(code, main_override) { - let deferred3_0; - let deferred3_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - var ptr1 = isLikeNone(main_override) - ? 0 - : passStringToWasm0( - main_override, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - wasm.parse_deno(retptr, ptr0, len0, ptr1, len1); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred3_0 = r0; - deferred3_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_outputs(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_outputs(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_ts_imports(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_ts_imports(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_bash(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_bash(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_powershell(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_powershell(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_go(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_go(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @param {string | undefined} [main_override] - * @returns {string} - */ -export function parse_python(code, main_override) { - let deferred3_0; - let deferred3_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - var ptr1 = isLikeNone(main_override) - ? 0 - : passStringToWasm0( - main_override, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - wasm.parse_python(retptr, ptr0, len0, ptr1, len1); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred3_0 = r0; - deferred3_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred3_0, deferred3_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_sql(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_sql(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_mysql(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_mysql(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_oracledb(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_oracledb(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_bigquery(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_bigquery(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_snowflake(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_snowflake(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_mssql(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_mssql(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string | undefined} - */ -export function parse_db_resource(code) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_db_resource(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - let v2; - if (r0 !== 0) { - v2 = getStringFromWasm0(r0, r1).slice(); - wasm.__wbindgen_free(r0, r1 * 1, 1); - } - return v2; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_graphql(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_graphql(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_php(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_php(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_rust(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_rust(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_ansible(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_ansible(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -/** - * @param {string} code - * @returns {string} - */ -export function parse_csharp(code) { - let deferred2_0; - let deferred2_1; - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - const ptr0 = passStringToWasm0( - code, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len0 = WASM_VECTOR_LEN; - wasm.parse_csharp(retptr, ptr0, len0); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - deferred2_0 = r0; - deferred2_1 = r1; - return getStringFromWasm0(r0, r1); - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); - } -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_exn_store(addHeapObject(e)); - } -} - -const imports = { - __wbindgen_placeholder__: { - __wbg_get_bd8e338fbd5f5cc8: function (arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); - }, - __wbg_length_cd7af8117672b8b8: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbindgen_is_object: function (arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }, - __wbg_next_40fc327bfc8770e6: function (arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); - }, - __wbindgen_is_function: function (arg0) { - const ret = typeof (getObject(arg0)) === "function"; - return ret; - }, - __wbindgen_object_drop_ref: function (arg0) { - takeObject(arg0); - }, - __wbg_next_196c84450b364254: function () { - return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); - }, arguments); - }, - __wbg_done_298b57d23c0fc80c: function (arg0) { - const ret = getObject(arg0).done; - return ret; - }, - __wbg_value_d93c65011f51a456: function (arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); - }, - __wbg_iterator_2cee6dadfd956dfa: function () { - const ret = Symbol.iterator; - return addHeapObject(ret); - }, - __wbg_get_e3c254076557e348: function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_call_27c0f87801dedf93: function () { - return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }, - __wbg_isArray_2ab64d95e09ea0ae: function (arg0) { - const ret = Array.isArray(getObject(arg0)); - return ret; - }, - __wbg_instanceof_ArrayBuffer_836825be07d4c9d2: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }, - __wbg_instanceof_Map_87917e0a7aaf4012: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Map; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }, - __wbg_isSafeInteger_f7b04ef02296c4d2: function (arg0) { - const ret = Number.isSafeInteger(getObject(arg0)); - return ret; - }, - __wbg_entries_95cc2c823b285a09: function (arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); - }, - __wbindgen_memory: function () { - const ret = wasm.memory; - return addHeapObject(ret); - }, - __wbg_buffer_12d079cc21e14bdb: function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }, - __wbg_new_63b92bc8671ed464: function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }, - __wbg_set_a47bac70306a19a7: function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }, - __wbg_length_c20a40f15020d68a: function (arg0) { - const ret = getObject(arg0).length; - return ret; - }, - __wbg_instanceof_Uint8Array_2b3bbecd033d19f6: function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }, - __wbindgen_error_new: function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - __wbindgen_jsval_loose_eq: function (arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }, - __wbindgen_boolean_get: function (arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; - }, - __wbindgen_number_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }, - __wbindgen_string_get: function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : undefined; - var ptr1 = isLikeNone(ret) - ? 0 - : passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_bigint_get_as_i64: function (arg0, arg1) { - const v = getObject(arg1); - const ret = typeof v === "bigint" ? v : undefined; - getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }, - __wbindgen_debug_string: function (arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0( - ret, - wasm.__wbindgen_malloc, - wasm.__wbindgen_realloc, - ); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, - __wbindgen_throw: function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }, - __wbindgen_is_bigint: function (arg0) { - const ret = typeof (getObject(arg0)) === "bigint"; - return ret; - }, - __wbindgen_in: function (arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; - }, - __wbindgen_bigint_from_i64: function (arg0) { - const ret = arg0; - return addHeapObject(ret); - }, - __wbindgen_jsval_eq: function (arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; - }, - __wbindgen_bigint_from_u64: function (arg0) { - const ret = BigInt.asUintN(64, arg0); - return addHeapObject(ret); - }, - __wbg_eval_73a4cb0af5990ab1: function (arg0, arg1) { - const ret = eval(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, - }, -}; - -class WasmBuildLoader { - #options; - #lastLoadPromise; - #instantiated; - - constructor(options) { - this.#options = options; - } - - get instance() { - return this.#instantiated?.instance; - } - - get module() { - return this.#instantiated?.module; - } - - load( - url, - decompress, - ) { - if (this.#instantiated) { - return Promise.resolve(this.#instantiated); - } else if (this.#lastLoadPromise == null) { - this.#lastLoadPromise = (async () => { - try { - this.#instantiated = await this.#instantiate(url, decompress); - return this.#instantiated; - } finally { - this.#lastLoadPromise = undefined; - } - })(); - } - return this.#lastLoadPromise; - } - - async #instantiate(url, decompress) { - const imports = this.#options.imports; - if (this.#options.cache != null && url.protocol !== "file:") { - try { - const result = await this.#options.cache( - url, - decompress ?? ((bytes) => bytes), - ); - if (result instanceof URL) { - url = result; - decompress = undefined; // already decompressed - } else if (result != null) { - return WebAssembly.instantiate(result, imports); - } - } catch { - // ignore if caching ever fails (ex. when on deploy) - } - } - - const isFile = url.protocol === "file:"; - - // make file urls work in Node via dnt - const isNode = globalThis.process?.versions?.node != null; - if (isFile && typeof Deno !== "object") { - throw new Error( - "Loading local files are not supported in this environment", - ); - } - if (isNode && isFile) { - // the deno global will be shimmed by dnt - const wasmCode = await Deno.readFile(url); - return WebAssembly.instantiate( - decompress ? decompress(wasmCode) : wasmCode, - imports, - ); - } - - switch (url.protocol) { - case "file:": - case "https:": - case "http:": { - const wasmResponse = await fetchWithRetries(url); - if (decompress) { - const wasmCode = new Uint8Array(await wasmResponse.arrayBuffer()); - return WebAssembly.instantiate(decompress(wasmCode), imports); - } - if ( - isFile || - wasmResponse.headers.get("content-type")?.toLowerCase() - .startsWith("application/wasm") - ) { - return WebAssembly.instantiateStreaming(wasmResponse, imports); - } else { - return WebAssembly.instantiate( - await wasmResponse.arrayBuffer(), - imports, - ); - } - } - default: - throw new Error(`Unsupported protocol: ${url.protocol}`); - } - } -} -const isNodeOrDeno = typeof Deno === "object" || - (typeof process !== "undefined" && process.versions != null && - process.versions.node != null); - -const loader = new WasmBuildLoader({ - imports, - cache: isNodeOrDeno ? cacheToLocalDir : undefined, -}); - -export async function instantiate(opts) { - return (await instantiateWithInstance(opts)).exports; -} - -export async function instantiateWithInstance(opts) { - const { instance } = await loader.load( - opts?.url ?? new URL("windmill_parser_wasm_bg.wasm", import.meta.url), - opts?.decompress, - ); - wasm = wasm ?? instance.exports; - cachedInt32Memory0 = cachedInt32Memory0 ?? new Int32Array(wasm.memory.buffer); - cachedUint8Memory0 = cachedUint8Memory0 ?? new Uint8Array(wasm.memory.buffer); - return { - instance, - exports: getWasmInstanceExports(), - }; -} - -function getWasmInstanceExports() { - return { - parse_deno, - parse_outputs, - parse_ts_imports, - parse_bash, - parse_powershell, - parse_go, - parse_python, - parse_sql, - parse_mysql, - parse_oracledb, - parse_bigquery, - parse_snowflake, - parse_mssql, - parse_db_resource, - parse_graphql, - parse_php, - parse_rust, - parse_ansible, - parse_csharp, - }; -} - -export function isInstantiated() { - return loader.instance != null; -} -export async function cacheToLocalDir(url, decompress) { - const localPath = await getUrlLocalPath(url); - if (localPath == null) { - return undefined; - } - if (!await exists(localPath)) { - const fileBytes = decompress(new Uint8Array(await getUrlBytes(url))); - try { - await Deno.writeFile(localPath, fileBytes); - } catch { - // ignore and return the wasm bytes - return fileBytes; - } - } - return toFileUrl(localPath); -} -async function getUrlLocalPath(url) { - try { - const dataDirPath = await getInitializedLocalDataDirPath(); - const hash = await getUrlHash(url); - return `${dataDirPath}/${hash}.wasm`; - } catch { - return undefined; - } -} -async function getInitializedLocalDataDirPath() { - const dataDir = localDataDir(); - if (dataDir == null) { - throw new Error(`Could not find local data directory.`); - } - const dirPath = `${dataDir}/deno-wasmbuild`; - await ensureDir(dirPath); - return dirPath; -} -async function exists(filePath) { - try { - await Deno.lstat(filePath); - return true; - } catch (error) { - if (error instanceof Deno.errors.NotFound) { - return false; - } - throw error; - } -} -async function ensureDir(dir) { - try { - const fileInfo = await Deno.lstat(dir); - if (!fileInfo.isDirectory) { - throw new Error(`Path was not a directory '${dir}'`); - } - } catch (err) { - if (err instanceof Deno.errors.NotFound) { - // if dir not exists. then create it. - await Deno.mkdir(dir, { recursive: true }); - return; - } - throw err; - } -} -async function getUrlHash(url) { - // Taken from MDN: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest - const hashBuffer = await crypto.subtle.digest( - "SHA-256", - new TextEncoder().encode(url.href), - ); - // convert buffer to byte array - const hashArray = Array.from(new Uint8Array(hashBuffer)); - // convert bytes to hex string - const hashHex = hashArray - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); - return hashHex; -} -async function getUrlBytes(url) { - const response = await fetchWithRetries(url); - return await response.arrayBuffer(); -} -// the below is extracted from deno_std/path -const WHITESPACE_ENCODINGS = { - "\u0009": "%09", - "\u000A": "%0A", - "\u000B": "%0B", - "\u000C": "%0C", - "\u000D": "%0D", - "\u0020": "%20", -}; -function encodeWhitespace(string) { - return string.replaceAll(/[\s]/g, (c) => { - return WHITESPACE_ENCODINGS[c] ?? c; - }); -} -function toFileUrl(path) { - return Deno.build.os === "windows" - ? windowsToFileUrl(path) - : posixToFileUrl(path); -} -function posixToFileUrl(path) { - const url = new URL("file:///"); - url.pathname = encodeWhitespace( - path.replace(/%/g, "%25").replace(/\\/g, "%5C"), - ); - return url; -} -function windowsToFileUrl(path) { - const [, hostname, pathname] = path.match( - /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, - ); - const url = new URL("file:///"); - url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); - if (hostname != null && hostname != "localhost") { - url.hostname = hostname; - if (!url.hostname) { - throw new TypeError("Invalid hostname."); - } - } - return url; -} -export async function fetchWithRetries(url, maxRetries = 5) { - let sleepMs = 250; - let iterationCount = 0; - while (true) { - iterationCount++; - try { - const res = await fetch(url); - if (res.ok || iterationCount > maxRetries) { - return res; - } - } catch (err) { - if (iterationCount > maxRetries) { - throw err; - } - } - console.warn(`Failed fetching. Retrying in ${sleepMs}ms...`); - await new Promise((resolve) => setTimeout(resolve, sleepMs)); - sleepMs = Math.min(sleepMs * 2, 10000); - } -} -// MIT License - Copyright (c) justjavac. -// https://github.com/justjavac/deno_dirs/blob/e8c001bbef558f08fd486d444af391729b0b8068/data_local_dir/mod.ts -function localDataDir() { - switch (Deno.build.os) { - case "linux": { - const xdg = Deno.env.get("XDG_DATA_HOME"); - if (xdg) { - return xdg; - } - const home = Deno.env.get("HOME"); - if (home) { - return `${home}/.local/share`; - } - break; - } - case "darwin": { - const home = Deno.env.get("HOME"); - if (home) { - return `${home}/Library/Application Support`; - } - break; - } - case "windows": - return Deno.env.get("LOCALAPPDATA") ?? undefined; - } - return undefined; -} diff --git a/cli/wasm/windmill_parser_wasm_bg.wasm b/cli/wasm/windmill_parser_wasm_bg.wasm deleted file mode 100644 index 19f605d076..0000000000 Binary files a/cli/wasm/windmill_parser_wasm_bg.wasm and /dev/null differ diff --git a/cli/wasm/yaml/windmill_parser_wasm.d.ts b/cli/wasm/yaml/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000..ed09685cac --- /dev/null +++ b/cli/wasm/yaml/windmill_parser_wasm.d.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_ansible(code: string): string; diff --git a/cli/wasm/yaml/windmill_parser_wasm.js b/cli/wasm/yaml/windmill_parser_wasm.js new file mode 100644 index 0000000000..909de8a6e8 --- /dev/null +++ b/cli/wasm/yaml/windmill_parser_wasm.js @@ -0,0 +1,121 @@ + + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_ansible(code) { + let deferred2_0; + let deferred2_1; + try { + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_ansible(ptr0, len0); + deferred2_0 = ret[0]; + deferred2_1 = ret[1]; + return getStringFromWasm0(ret[0], ret[1]); + } finally { + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_init_externref_table: function() { + const table = wasm.__wbindgen_export_0; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; + }, + }, + +}; + +const wasm_url = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); +let wasmCode = ''; +switch (wasm_url.protocol) { + case 'file:': + wasmCode = await Deno.readFile(wasm_url); + break + case 'https:': + case 'http:': + wasmCode = await (await fetch(wasm_url)).arrayBuffer(); + break + default: + throw new Error(`Unsupported protocol: ${wasm_url.protocol}`); +} + +const wasmInstance = (await WebAssembly.instantiate(wasmCode, imports)).instance; +const wasm = wasmInstance.exports; +export const __wasm = wasm; + +wasm.__wbindgen_start(); + diff --git a/cli/wasm/yaml/windmill_parser_wasm_bg.wasm b/cli/wasm/yaml/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000..40e1226b48 Binary files /dev/null and b/cli/wasm/yaml/windmill_parser_wasm_bg.wasm differ diff --git a/cli/wasm/yaml/windmill_parser_wasm_bg.wasm.d.ts b/cli/wasm/yaml/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000..b33332b645 --- /dev/null +++ b/cli/wasm/yaml/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const parse_ansible: (a: number, b: number) => [number, number]; +export const __wbindgen_export_0: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_free: (a: number, b: number, c: number) => void; +export const __wbindgen_start: () => void; diff --git a/docker/DockerfileFull b/docker/DockerfileFull index c64dff2e00..7f904b01b7 100644 --- a/docker/DockerfileFull +++ b/docker/DockerfileFull @@ -1,10 +1,16 @@ FROM ghcr.io/windmill-labs/windmill:dev +# Rust COPY --from=rust:1.81.0 /usr/local/cargo /usr/local/cargo COPY --from=rust:1.81.0 /usr/local/rustup /usr/local/rustup +# Ansible RUN uv tool install ansible && [ -d "$(uv tool dir)/ansible/bin/" ] && find "$(uv tool dir)/ansible/bin/" -mindepth 1 -maxdepth 1 -type f -executable -regextype posix-extended -regex '^((.+/)?)[^.]+' -print0 | xargs -0 ln -s -t "$UV_TOOL_BIN_DIR/" || true +# C# COPY --from=bitnami/dotnet-sdk:9.0.101-debian-12-r0 /opt/bitnami/dotnet-sdk /opt/dotnet-sdk RUN ln -s /opt/dotnet-sdk/bin/dotnet /usr/bin/dotnet ENV DOTNET_ROOT="/opt/dotnet-sdk/bin" + +# Nushell +COPY --from=ghcr.io/nushell/nushell:0.101.0-bookworm /usr/bin/nu /usr/bin/nu diff --git a/docker/DockerfileFullEe b/docker/DockerfileFullEe index 9661443f53..b074bb4ecf 100644 --- a/docker/DockerfileFullEe +++ b/docker/DockerfileFullEe @@ -19,9 +19,11 @@ RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ FROM ghcr.io/windmill-labs/windmill-ee:dev +# Rust COPY --from=rust:1.81.0 /usr/local/cargo /usr/local/cargo COPY --from=rust:1.81.0 /usr/local/rustup /usr/local/rustup +# Ansible RUN uv tool install ansible && [ -d "$(uv tool dir)/ansible/bin/" ] && find "$(uv tool dir)/ansible/bin/" -mindepth 1 -maxdepth 1 -type f -executable -regextype posix-extended -regex '^((.+/)?)[^.]+' -print0 | xargs -0 ln -s -t "$UV_TOOL_BIN_DIR/" || true # dotnet SDK COPY --from=bitnami/dotnet-sdk:9.0.101-debian-12-r0 /opt/bitnami/dotnet-sdk /opt/dotnet-sdk @@ -32,3 +34,6 @@ ENV DOTNET_ROOT="/opt/dotnet-sdk/bin" COPY --from=oracledb-client /opt/oracle/23/lib /opt/oracle/23/lib RUN apt-get -y update && apt-get install -y libaio1 RUN echo /opt/oracle/23/lib > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig + +# Nushell +COPY --from=ghcr.io/nushell/nushell:0.101.0-bookworm /usr/bin/nu /usr/bin/nu diff --git a/docker/DockerfileNsjail b/docker/DockerfileNsjail index ca1c71b706..d667b15722 100644 --- a/docker/DockerfileNsjail +++ b/docker/DockerfileNsjail @@ -42,9 +42,11 @@ FROM ghcr.io/windmill-labs/windmill-ee:dev RUN apt-get update && apt-get install -y libprotobuf-dev libnl-route-3-dev +# Rust COPY --from=rust:1.80.1 /usr/local/cargo /usr/local/cargo COPY --from=rust:1.80.1 /usr/local/rustup /usr/local/rustup +# Ansible RUN uv tool install ansible && [ -d "$(uv tool dir)/ansible/bin/" ] && find "$(uv tool dir)/ansible/bin/" -mindepth 1 -maxdepth 1 -type f -executable -regextype posix-extended -regex '^((.+/)?)[^.]+' -print0 | xargs -0 ln -s -t "$UV_TOOL_BIN_DIR/" || true # dotnet SDK @@ -57,4 +59,7 @@ COPY --from=oracledb-client /opt/oracle/23/lib /opt/oracle/23/lib RUN apt-get -y update && apt-get install -y libaio1 RUN echo /opt/oracle/23/lib > /etc/ld.so.conf.d/oracle-instantclient.conf && ldconfig +# Nushell +COPY --from=ghcr.io/nushell/nushell:0.101.0-bookworm /usr/bin/nu /usr/bin/nu + COPY --from=nsjail /nsjail/nsjail /bin/nsjail diff --git a/docker/dev.nu b/docker/dev.nu new file mode 100755 index 0000000000..a1fd303b0b --- /dev/null +++ b/docker/dev.nu @@ -0,0 +1,170 @@ +#! /usr/bin/env nu +# ------------------------------------ # +# Build and Test docker images locally # +# run: # +# docker/dev.nu --help # +# ------------------------------------ # + +let branch = git branch --show-current; +# cp -f Caddyfile .dev-docker/Caddyfile + +# --- Constraints --- # +def constraints [ + custom_dockerfile?: path + features?: string +] { + # if ($features | str contains "enterprise") { + # print "Building in EE mode" + # print "Is windmill ee private repo mounted? [Y/n]"; + # let inp = input listen --types [key] + + # if ($inp.code != "y") { + # # print "You can use --auto-substitute(-s) to automatically mount ee private repo (TODO)" + # print "Aborted" + # return; + # } + # } + if not ($features | str contains "static_frontend") { + panic "If you compile without 'static_frontend' you won't be able to load frontend" + } + if ($features | str contains "enterprise") and not ($features | str contains "license") { + panic "If you build enterprise you also need to include 'license' feature" + } +} +# --- Patches --- # +# ./Dockerfile +def patch_main_dockerfile [ + features?: string + wasm_pkg?: string +] { + let dockerfile = open ./Dockerfile + # Spread wasm parser + if $wasm_pkg != null { + $dockerfile + | str replace '# -- MACRO-SPREAD-WASM-PARSER-DEV-ONLY -- #' $"COPY ./backend/parsers/windmill-parser-wasm/pkg-($wasm_pkg) ./node_modules/windmill-parser-wasm-($wasm_pkg)" + | return $in + } + + print $dockerfile + + return $dockerfile +} + +# ./docker/Dockerfile* +def patch_custom_dockerfile [ + custom_dockerfile: path + features?: string +] { + open $custom_dockerfile + | str replace 'ghcr.io/windmill-labs/windmill-ee:dev' (get_ident -f $features) + | return $in +} + +# ./docker-compose.yml +def patch_docker_compose [ + custom_dockerfile?: path + features?: string +] { + mut compose = open ./docker-compose.yml + + $compose.services.windmill_worker.pull_policy = "never" + $compose.services.windmill_worker_native.pull_policy = "never" + $compose.services.windmill_server.pull_policy = "never" + $compose.services.windmill_indexer.pull_policy = "never" + + if ($custom_dockerfile | default 'none' | path basename) == "DockerfileNsjail" { + $compose.services.windmill_worker.privileged = true + $compose.services.windmill_worker_native.privileged = true + + $compose.services.windmill_worker.environment ++= ["DISABLE_NSJAIL=false"] + $compose.services.windmill_worker_native.environment ++= ["DISABLE_NSJAIL=false"] + } + return ($compose | to yaml) +} + +# Build and Test docker images +# +# For more info run: +# docker.nu up --help +# docker.nu build --help +# +# Should be invoked in repo root +def main [] { + ./docker/dev.nu --help; +} + +# TODO: +# Also we need single tmpdir for it +def kill [] {} + +# Get tag for dockerfile + features +def "main tag" [ + custom_dockerfile?: path # Any dockerfile that depends on root Dockerfile + --features(-f): string # Features that will be passed to base Dockerfile to compile windmill +] { + get_ident $custom_dockerfile -f $features +} + +# Run and Build (if not yet) docker image +def "main up" [ + custom_dockerfile?: path # Any dockerfile that depends on root Dockerfile + --features(-f): string = "static_frontend" # Features that will be passed to base Dockerfile to compile windmill + --wasm-pkg: string # Include unreleased wasm parser in docker image + --rebuild(-r) # Rebuild if there is existing image with same tag + --yes(-y) # Say yes for every confirmation (TODO) + --podman(-p) # Use podman as a backend (TODO) +] { + constraints $custom_dockerfile $features + + # let base_ident = get_ident -f $features; + let ident = get_ident $custom_dockerfile -f $features; + + if $rebuild or not (docker images | into string | str contains $ident) { + let base_ident = get_ident -f $features; + + if $rebuild or not (docker images | into string | str contains $base_ident) { + print $"Building base image with ident: ($base_ident)" + docker build . -t ($base_ident) -f (wrap "Dockerfile" (patch_main_dockerfile $features $wasm_pkg)) --build-arg features=($features) + } + + if $custom_dockerfile != null { + # let ident = get_ident $custom_dockerfile -f $features; + print $"Building image by path ($custom_dockerfile) with ident: ($ident)" + docker build -f (wrap "DockerfileCustom" (patch_custom_dockerfile $custom_dockerfile $features)) -t $ident / + } + } else { + print $"($ident) was found" + } + + print $"Running: ($ident)" + WM_IMAGE=$"($ident)" docker compose -f (wrap "docker-compose.yml" (patch_docker_compose $custom_dockerfile $features)) up +} + +# TODO +def clone_ee_private [] { + let rev = open backend/ee-repo-ref.txt + git clone --depth 1 git@github.com:windmill-labs/windmill-ee-private.git .docker.nu/private-ee-repo-rev-($rev) + # git checkout ddcfdfc18a9833a5fc4e62ad62a265ef1e06a0aa) +} + +def get_ident [ custom_dockerfile?: path, --features(-f): string ] { + let feat_postfix = if $features != null { + $features | split row ',' | each { |e| $e | str trim --left --right } | sort | str join "-"; + } else { + "no-features" + } + + if $custom_dockerfile != null { + let df_postfix = $"($custom_dockerfile)" | split row "Dockerfile" | get 1 | str downcase; + return ($branch | append $df_postfix | append $feat_postfix | str join "__"); + } else { + return ($branch | append $feat_postfix | str join "-"); + } +} + +def wrap [ filename content ] { + let tmpfile = ".dev-docker-wrapper-" ++ $filename; + $content | save -f $tmpfile + return $tmpfile +} + diff --git a/flake.lock b/flake.lock index c0cae8c380..8a6dec28f5 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1736883708, - "narHash": "sha256-uQ+NQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140=", + "lastModified": 1740367490, + "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "eb62e6aa39ea67e0b8018ba8ea077efe65807dc8", + "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05", "type": "github" }, "original": { @@ -61,11 +61,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1737080704, - "narHash": "sha256-n+J2h9GM9ZpFOQUmtZoCr1+DFF/iO5UlmLJeHIxbZGY=", + "lastModified": 1740536993, + "narHash": "sha256-3YI+1ONZ28chM19Hep9Z+TSyiybYf/1VC/gwImVZKUw=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "f9953fe89f8b65401fc4d4a288940bc2cb072949", + "rev": "9f05c0655de9dc2c7b60b689447c48abb9190bf8", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6f4463e5ae..506e61d68e 100644 --- a/flake.nix +++ b/flake.nix @@ -7,167 +7,242 @@ outputs = { self, nixpkgs, flake-utils, rust-overlay }: flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { - inherit system; - config.allowUnfree = true; - overlays = [ (import rust-overlay) ]; - }; - rust = pkgs.rust-bin.stable.latest.default.override { - extensions = [ - "rust-src" # for rust-analyzer - "rust-analyzer" + let + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + overlays = [ (import rust-overlay) ]; + }; + rust = pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rust-src" # for rust-analyzer + "rust-analyzer" + ]; + }; + buildInputs = with pkgs; [ + openssl + openssl.dev + libxml2.dev + xmlsec.dev + libxslt.dev + libtool + nodejs + postgresql + pkg-config + cmake ]; - }; - buildInputs = with pkgs; [ - openssl openssl.dev libxml2.dev xmlsec.dev libxslt.dev libtool - rust nodejs - postgresql - pkg-config cmake - ]; - PKG_CONFIG_PATH = pkgs.lib.makeSearchPath "lib/pkgconfig" (with pkgs; [ - openssl.dev - libxml2.dev - xmlsec.dev - libxslt.dev - ]); - RUSTY_V8_ARCHIVE = - let + PKG_CONFIG_PATH = pkgs.lib.makeSearchPath "lib/pkgconfig" + (with pkgs; [ openssl.dev libxml2.dev xmlsec.dev libxslt.dev ]); + RUSTY_V8_ARCHIVE = let version = "130.0.1"; target = pkgs.hostPlatform.rust.rustcTarget; sha256 = { - x86_64-linux = "sha256-qc25H3Aj2KRhsAZ+2SD1c4RmweVK07oW71opZXRuUoc="; - aarch64-linux = "sha256-qc25H3Aj2KRhsAZ+2SD1c4RmweVK07oW71opZXRuUoc="; + x86_64-linux = + "sha256-qc25H3Aj2KRhsAZ+2SD1c4RmweVK07oW71opZXRuUoc="; + aarch64-linux = + "sha256-qc25H3Aj2KRhsAZ+2SD1c4RmweVK07oW71opZXRuUoc="; x86_64-darwin = pkgs.lib.fakeHash; - aarch64-darwin = "sha256-d1QTLt8gOUFxACes4oyIYgDF/srLOEk+5p5Oj1ECajQ="; + aarch64-darwin = + "sha256-d1QTLt8gOUFxACes4oyIYgDF/srLOEk+5p5Oj1ECajQ="; }.${system}; in pkgs.fetchurl { name = "librusty_v8-${version}"; - url = "https://github.com/denoland/rusty_v8/releases/download/v${version}/librusty_v8_release_${target}.a.gz"; + url = + "https://github.com/denoland/rusty_v8/releases/download/v${version}/librusty_v8_release_${target}.a.gz"; inherit sha256; }; - in { - devShell = pkgs.mkShell { - buildInputs = buildInputs ++ (with pkgs; [ - git xcaddy sqlx-cli flock sccache - deno python3 python3Packages.pip go bun uv dotnet-sdk_9 oracle-instantclient - ]); - packages = [ - (pkgs.writeScriptBin "wm-caddy" '' - cd ./frontend - xcaddy build $* \ - --with github.com/mholt/caddy-l4@145ec36251a44286f05a10d231d8bfb3a8192e09 \ - --with github.com/RussellLuo/caddy-ext/layer4@ab1e18cfe426012af351a68463937ae2e934a2a1 - '') - (pkgs.writeScriptBin "wm-build" '' - cd ./frontend - npm install - npm run ${if pkgs.stdenv.isDarwin then "generate-backend-client-mac" else "generate-backend-client"} - npm run build $* - '') - (pkgs.writeScriptBin "wm-migrate" '' - cd ./backend - sqlx migrate run - '') - (pkgs.writeScriptBin "wm-setup" '' - sqlx database create - wm-build - wm-caddy - wm-migrate - '') - (pkgs.writeScriptBin "wm-reset" '' - sqlx database drop -f - sqlx database create - wm-migrate - '') - (pkgs.writeScriptBin "wm-bench" '' - deno run -A benchmarks/main.ts -e admin@windmill.dev -p changeme $* - '') - (pkgs.writeScriptBin "wm" '' - cd ./frontend - npm run dev $* - '') - ]; - - inherit PKG_CONFIG_PATH RUSTY_V8_ARCHIVE; - NODE_ENV = "development"; - NODE_OPTIONS = "--max-old-space-size=16384"; - DATABASE_URL = "postgres://postgres:changeme@127.0.0.1:5432/"; - REMOTE = "http://127.0.0.1:8000"; - REMOTE_LSP = "http://127.0.0.1:3001"; - RUSTC_WRAPPER = "${pkgs.sccache}/bin/sccache"; - DENO_PATH = "${pkgs.deno}/bin/deno"; - GO_PATH = "${pkgs.go}/bin/go"; - BUN_PATH = "${pkgs.bun}/bin/bun"; - UV_PATH = "${pkgs.uv}/bin/uv"; - FLOCK_PATH = "${pkgs.flock}/bin/flock"; - CARGO_PATH = "${rust}/bin/cargo"; - DOTNET_PATH = "${pkgs.dotnet-sdk_9}/bin/dotnet"; - DOTNET_ROOT = "${pkgs.dotnet-sdk_9}/share/dotnet"; - ORACLE_LIB_DIR = "${pkgs.oracle-instantclient.lib}/lib"; - }; - packages.default = self.packages.${system}.windmill; - packages.windmill-client = pkgs.buildNpmPackage { - name = "windmill-client"; - version = (pkgs.lib.strings.trim (builtins.readFile ./version.txt)); - - src = pkgs.nix-gitignore.gitignoreSource [] ./frontend; - nativeBuildInputs = with pkgs; [ pkg-config ]; - buildInputs = with pkgs; [ nodejs pixman cairo pango ]; - doCheck = false; - - npmDepsHash = "sha256-NXk9mnf74+/k0i3goqU8Zi/jr5b/bmW+HWRLJCI2CX8="; - npmBuild = "npm run build"; - - postUnpack = '' - mkdir -p ./backend/windmill-api/ - cp ${./backend/windmill-api/openapi.yaml} ./backend/windmill-api/openapi.yaml - cp ${./openflow.openapi.yaml} ./openflow.openapi.yaml - ''; - preBuild = '' - npm run ${if pkgs.stdenv.isDarwin then "generate-backend-client-mac" else "generate-backend-client"} - ''; - - installPhase = '' - mkdir -p $out/build - cp -r build $out - ''; - - NODE_OPTIONS = "--max-old-space-size=8192"; - }; - packages.windmill = pkgs.rustPlatform.buildRustPackage { - pname = "windmill"; - version = (pkgs.lib.strings.trim (builtins.readFile ./version.txt)); - - src = ./backend; - nativeBuildInputs = buildInputs - ++ [ self.packages.${system}.windmill-client pkgs.perl ] - ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ - # Additional darwin specific inputs can be set here - pkgs.libiconv - pkgs.darwin.apple_sdk.frameworks.SystemConfiguration - ]; - - cargoLock = { - lockFile = ./backend/Cargo.lock; - outputHashes = { - "php-parser-rs-0.1.3" = "sha256-ZeI3KgUPmtjlRfq6eAYveqt8Ay35gwj6B9iOQRjQa9A="; - "progenitor-0.3.0" = "sha256-F6XRZFVIN6/HfcM8yI/PyNke45FL7jbcznIiqj22eIQ="; - "tinyvector-0.1.0" = "sha256-NYGhofU4rh+2IAM+zwe04YQdXY8Aa4gTmn2V2HtzRfI="; - }; + in { + # Enter by `nix develop .#wasm` + devShells."wasm" = pkgs.mkShell { + buildInputs = buildInputs ++ (with pkgs; [ + (rust-bin.nightly.latest.default.override { + extensions = [ + "rust-src" # for rust-analyzer + "rust-analyzer" + ]; + targets = [ "wasm32-unknown-unknown" ]; + }) + wasm-pack + deno + ]); }; - buildFeatures = [ - "enterprise" "enterprise_saml" "stripe" "embedding" "parquet" "prometheus" - "openidconnect" "cloud" "jemalloc" "tantivy" "deno_core" "license" "http_trigger" - "zip" "oauth2" "kafka" "otel" "dind" "php" "mysql" "mssql" "bigquery" "websocket" - "python" "smtp" "csharp" "static_frontend" "rust" - ]; - doCheck = false; + devShells.default = pkgs.mkShell { + buildInputs = buildInputs ++ (with pkgs; [ + rust + git + xcaddy + sqlx-cli + flock + sccache + deno + python3 + python3Packages.pip + go + bun + uv + nushell + dotnet-sdk_9 + oracle-instantclient + svelte-language-server + ]); + packages = [ + (pkgs.writeScriptBin "wm-caddy" '' + cd ./frontend + xcaddy build $* \ + --with github.com/mholt/caddy-l4@145ec36251a44286f05a10d231d8bfb3a8192e09 \ + --with github.com/RussellLuo/caddy-ext/layer4@ab1e18cfe426012af351a68463937ae2e934a2a1 + '') + (pkgs.writeScriptBin "wm-build" '' + cd ./frontend + npm install + npm run ${ + if pkgs.stdenv.isDarwin then + "generate-backend-client-mac" + else + "generate-backend-client" + } + npm run build $* + '') + (pkgs.writeScriptBin "wm-migrate" '' + cd ./backend + sqlx migrate run + '') + (pkgs.writeScriptBin "wm-setup" '' + sqlx database create + wm-build + wm-caddy + wm-migrate + '') + (pkgs.writeScriptBin "wm-reset" '' + sqlx database drop -f + sqlx database create + wm-migrate + '') + (pkgs.writeScriptBin "wm-bench" '' + deno run -A benchmarks/main.ts -e admin@windmill.dev -p changeme $* + '') + (pkgs.writeScriptBin "wm" '' + cd ./frontend + npm run dev $* + '') + ]; - inherit PKG_CONFIG_PATH RUSTY_V8_ARCHIVE; - SQLX_OFFLINE = true; - FRONTEND_BUILD_DIR = "${self.packages.${system}.windmill-client}/build"; - }; - }); + inherit PKG_CONFIG_PATH RUSTY_V8_ARCHIVE; + NODE_ENV = "development"; + NODE_OPTIONS = "--max-old-space-size=16384"; + DATABASE_URL = "postgres://postgres:changeme@127.0.0.1:5432/"; + REMOTE = "http://127.0.0.1:8000"; + REMOTE_LSP = "http://127.0.0.1:3001"; + RUSTC_WRAPPER = "${pkgs.sccache}/bin/sccache"; + DENO_PATH = "${pkgs.deno}/bin/deno"; + GO_PATH = "${pkgs.go}/bin/go"; + BUN_PATH = "${pkgs.bun}/bin/bun"; + UV_PATH = "${pkgs.uv}/bin/uv"; + NU_PATH = "${pkgs.nushell}/bin/nu"; + FLOCK_PATH = "${pkgs.flock}/bin/flock"; + CARGO_PATH = "${rust}/bin/cargo"; + DOTNET_PATH = "${pkgs.dotnet-sdk_9}/bin/dotnet"; + DOTNET_ROOT = "${pkgs.dotnet-sdk_9}/share/dotnet"; + ORACLE_LIB_DIR = "${pkgs.oracle-instantclient.lib}/lib"; + }; + packages.default = self.packages.${system}.windmill; + packages.windmill-client = pkgs.buildNpmPackage { + name = "windmill-client"; + version = (pkgs.lib.strings.trim (builtins.readFile ./version.txt)); + + src = pkgs.nix-gitignore.gitignoreSource [ ] ./frontend; + nativeBuildInputs = with pkgs; [ pkg-config ]; + buildInputs = with pkgs; [ nodejs pixman cairo pango ]; + doCheck = false; + + npmDepsHash = "sha256-NXk9mnf74+/k0i3goqU8Zi/jr5b/bmW+HWRLJCI2CX8="; + npmBuild = "npm run build"; + + postUnpack = '' + mkdir -p ./backend/windmill-api/ + cp ${ + ./backend/windmill-api/openapi.yaml + } ./backend/windmill-api/openapi.yaml + cp ${./openflow.openapi.yaml} ./openflow.openapi.yaml + ''; + preBuild = '' + npm run ${ + if pkgs.stdenv.isDarwin then + "generate-backend-client-mac" + else + "generate-backend-client" + } + ''; + + installPhase = '' + mkdir -p $out/build + cp -r build $out + ''; + + NODE_OPTIONS = "--max-old-space-size=8192"; + }; + packages.windmill = pkgs.rustPlatform.buildRustPackage { + pname = "windmill"; + version = (pkgs.lib.strings.trim (builtins.readFile ./version.txt)); + + src = ./backend; + nativeBuildInputs = buildInputs + ++ [ self.packages.${system}.windmill-client pkgs.perl ] + ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ + # Additional darwin specific inputs can be set here + pkgs.libiconv + pkgs.darwin.apple_sdk.frameworks.SystemConfiguration + ]; + + cargoLock = { + lockFile = ./backend/Cargo.lock; + outputHashes = { + "php-parser-rs-0.1.3" = + "sha256-ZeI3KgUPmtjlRfq6eAYveqt8Ay35gwj6B9iOQRjQa9A="; + "progenitor-0.3.0" = + "sha256-F6XRZFVIN6/HfcM8yI/PyNke45FL7jbcznIiqj22eIQ="; + "tinyvector-0.1.0" = + "sha256-NYGhofU4rh+2IAM+zwe04YQdXY8Aa4gTmn2V2HtzRfI="; + }; + }; + + buildFeatures = [ + "enterprise" + "enterprise_saml" + "stripe" + "embedding" + "parquet" + "prometheus" + "openidconnect" + "cloud" + "jemalloc" + "tantivy" + "deno_core" + "license" + "http_trigger" + "zip" + "oauth2" + "kafka" + "otel" + "dind" + "php" + "mysql" + "mssql" + "bigquery" + "websocket" + "python" + "smtp" + "csharp" + "static_frontend" + "rust" + ]; + doCheck = false; + + inherit PKG_CONFIG_PATH RUSTY_V8_ARCHIVE; + SQLX_OFFLINE = true; + FRONTEND_BUILD_DIR = + "${self.packages.${system}.windmill-client}/build"; + }; + }); } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b307035fca..cece7518b1 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -69,6 +69,7 @@ "vscode-ws-jsonrpc": "~3.4.0", "windmill-parser-wasm-csharp": "^1.437.1", "windmill-parser-wasm-go": "^1.429.0", + "windmill-parser-wasm-nu": "^1.474.1", "windmill-parser-wasm-php": "^1.429.0", "windmill-parser-wasm-py": "^1.477.1", "windmill-parser-wasm-regex": "^1.439.0", @@ -12588,6 +12589,11 @@ "resolved": "https://registry.npmjs.org/windmill-parser-wasm-go/-/windmill-parser-wasm-go-1.429.0.tgz", "integrity": "sha512-M3jeGDqeTyPj9HyyX3msdzMrqIIzlfMfxTMsXS8m7MJp4Cm60qifMxD29Ipxb2B4WdzyGwCSlaBjLsXu0b3c5g==" }, + "node_modules/windmill-parser-wasm-nu": { + "version": "1.474.1", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-nu/-/windmill-parser-wasm-nu-1.474.1.tgz", + "integrity": "sha512-ikRhz9CWpWilt/7K8mmRniF2cdWnH6EgjuL189z76pcEQbuMwDO4eXocAdMDaufehOsTWpXmDtsYeFfmayPIpQ==" + }, "node_modules/windmill-parser-wasm-php": { "version": "1.429.0", "resolved": "https://registry.npmjs.org/windmill-parser-wasm-php/-/windmill-parser-wasm-php-1.429.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 9032983fea..d6135d7613 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -144,6 +144,7 @@ "vscode-ws-jsonrpc": "~3.4.0", "windmill-parser-wasm-csharp": "^1.437.1", "windmill-parser-wasm-go": "^1.429.0", + "windmill-parser-wasm-nu": "^1.474.1", "windmill-parser-wasm-php": "^1.429.0", "windmill-parser-wasm-py": "^1.477.1", "windmill-parser-wasm-regex": "^1.439.0", @@ -514,4 +515,4 @@ "optionalDependencies": { "fsevents": "^2.3.3" } -} +} \ No newline at end of file diff --git a/frontend/src/lib/components/Editor.svelte b/frontend/src/lib/components/Editor.svelte index b5f6565362..db74de17b4 100644 --- a/frontend/src/lib/components/Editor.svelte +++ b/frontend/src/lib/components/Editor.svelte @@ -192,6 +192,7 @@ | 'rust' | 'yaml' | 'csharp' + | 'nu' export let code: string = '' export let cmdEnterAction: (() => void) | undefined = undefined export let formatAction: (() => void) | undefined = undefined @@ -201,7 +202,7 @@ ruff: false, deno: false, go: false, - shellcheck: false + shellcheck: false, } export let shouldBindKey: boolean = true export let fixedOverflowWidgets = true @@ -246,7 +247,7 @@ let destroyed = false const uri = - lang != 'go' && lang != 'typescript' && lang != 'python' + lang != 'go' && lang != 'typescript' && lang != 'python' && lang != 'nu' ? `file:///${filePath ?? rHash}.${langToExt(lang)}` : `file:///tmp/monaco/${randomHash()}.${langToExt(lang)}` @@ -369,7 +370,7 @@ export async function format() { if (editor) { code = getCode() - if (lang != 'shell') { + if (lang != 'shell' && lang != 'nu') { if ($formatOnSave != false) { if (scriptLang == 'deno' && languageClients.length > 0) { languageClients.forEach(async (x) => { @@ -1120,7 +1121,7 @@ initialized = true try { - model = meditor.createModel(code, lang, mUri.parse(uri)) + model = meditor.createModel(code, (lang == 'nu') ? 'python' : lang, mUri.parse(uri)) } catch (err) { console.log('model already existed', err) const nmodel = meditor.getModel(mUri.parse(uri)) diff --git a/frontend/src/lib/components/EditorBar.svelte b/frontend/src/lib/components/EditorBar.svelte index fc597cf8e0..3a778bfa66 100644 --- a/frontend/src/lib/components/EditorBar.svelte +++ b/frontend/src/lib/components/EditorBar.svelte @@ -92,7 +92,8 @@ 'nativets', 'php', 'rust', - 'csharp' + 'csharp', + 'nu' ].includes(lang ?? '') $: showVarPicker = [ 'python3', @@ -105,7 +106,8 @@ 'nativets', 'php', 'rust', - 'csharp' + 'csharp', + 'nu' ].includes(lang ?? '') $: showResourcePicker = [ 'python3', @@ -118,7 +120,8 @@ 'nativets', 'php', 'rust', - 'csharp' + 'csharp', + 'nu' ].includes(lang ?? '') $: showResourceTypePicker = ['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)) || @@ -368,6 +371,8 @@ editor.insertAtCursor(`std::env::var("${name}").unwrap();`) } else if (lang == 'csharp') { editor.insertAtCursor(`Environment.GetEnvironmentVariable("${name}");`) + } else if (lang == 'nu') { + editor.insertAtCursor(`$env.${name}`) } sendUserToast(`${name} inserted at cursor`) }} @@ -433,6 +438,8 @@ client.DefaultRequestHeaders.Add("Authorization", $"Bearer {Environment.GetEnvir string ${windmillPathToCamelCaseName(path)} = await client.GetStringAsync(uri); `) + } else if (lang == 'nu') { + editor.insertAtCursor(`get_variable ${path}`) } sendUserToast(`${name} inserted at cursor`) }} @@ -515,6 +522,8 @@ client.DefaultRequestHeaders.Add("Authorization", $"Bearer {Environment.GetEnvir JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetStringAsync(uri)); `) + } else if (lang == 'nu') { + editor.insertAtCursor(`get_resource ${path}`) } sendUserToast(`${path} inserted at cursor`) }} @@ -639,7 +648,7 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS {/if} {#if customUi?.assistants != false} - {#if lang == 'deno' || lang == 'python3' || lang == 'go' || lang == 'bash'} + {#if lang == 'deno' || lang == 'python3' || lang == 'go' || lang == 'bash' || lang == 'nu'} diff --git a/frontend/src/lib/components/ScriptEditor.svelte b/frontend/src/lib/components/ScriptEditor.svelte index f00347febe..2dacb88b8f 100644 --- a/frontend/src/lib/components/ScriptEditor.svelte +++ b/frontend/src/lib/components/ScriptEditor.svelte @@ -64,7 +64,7 @@ deno: false, go: false, ruff: false, - shellcheck: false + shellcheck: false, } const dispatch = createEventDispatcher() diff --git a/frontend/src/lib/components/WorkerGroup.svelte b/frontend/src/lib/components/WorkerGroup.svelte index a3dd1c0dce..55878d4928 100644 --- a/frontend/src/lib/components/WorkerGroup.svelte +++ b/frontend/src/lib/components/WorkerGroup.svelte @@ -122,7 +122,8 @@ 'php', 'rust', 'ansible', - 'csharp' + 'csharp', + 'nu' ] const nativeTags = [ 'nativets', diff --git a/frontend/src/lib/components/common/languageIcons/LanguageIcon.svelte b/frontend/src/lib/components/common/languageIcons/LanguageIcon.svelte index f3855adce0..1c75ce39ed 100644 --- a/frontend/src/lib/components/common/languageIcons/LanguageIcon.svelte +++ b/frontend/src/lib/components/common/languageIcons/LanguageIcon.svelte @@ -20,6 +20,7 @@ import RustIcon from '$lib/components/icons/RustIcon.svelte' import AnsibleIcon from '$lib/components/icons/AnsibleIcon.svelte' import CSharpIcon from '$lib/components/icons/CSharpIcon.svelte' + import NuIcon from '$lib/components/icons/NuIcon.svelte' export let lang: | SupportedLanguage @@ -54,7 +55,8 @@ php: 'PHP', rust: 'Rust', ansible: 'Ansible Playbook', - csharp: 'C#' + csharp: 'C#', + nu: 'Nu' } const langToComponent: Record< @@ -84,7 +86,8 @@ php: PHPIcon, rust: RustIcon, ansible: AnsibleIcon, - csharp: CSharpIcon + csharp: CSharpIcon, + nu: NuIcon } let subIconScale = width === 30 ? 0.6 : 0.8 diff --git a/frontend/src/lib/components/icons/NuIcon.svelte b/frontend/src/lib/components/icons/NuIcon.svelte new file mode 100644 index 0000000000..2af6655af8 --- /dev/null +++ b/frontend/src/lib/components/icons/NuIcon.svelte @@ -0,0 +1,6 @@ + + + diff --git a/frontend/src/lib/editorUtils.ts b/frontend/src/lib/editorUtils.ts index 33c54c4a0f..12ebc7f0b1 100644 --- a/frontend/src/lib/editorUtils.ts +++ b/frontend/src/lib/editorUtils.ts @@ -82,6 +82,8 @@ export function langToExt(lang: string): string { return 'yml' case 'csharp': return 'cs' + case 'nu': + return 'nu' default: return 'unknown' } diff --git a/frontend/src/lib/infer.ts b/frontend/src/lib/infer.ts index 0e1ab2bc77..4c0e55fa94 100644 --- a/frontend/src/lib/infer.ts +++ b/frontend/src/lib/infer.ts @@ -23,6 +23,7 @@ import initPhpParser, { parse_php } from 'windmill-parser-wasm-php' import initRustParser, { parse_rust } from 'windmill-parser-wasm-rust' import initYamlParser, { parse_ansible } from 'windmill-parser-wasm-yaml' import initCSharpParser, { parse_csharp } from 'windmill-parser-wasm-csharp' +import initNuParser, { parse_nu } from 'windmill-parser-wasm-nu' import wasmUrlTs from 'windmill-parser-wasm-ts/windmill_parser_wasm_bg.wasm?url' import wasmUrlRegex from 'windmill-parser-wasm-regex/windmill_parser_wasm_bg.wasm?url' @@ -32,6 +33,7 @@ import wasmUrlPhp from 'windmill-parser-wasm-php/windmill_parser_wasm_bg.wasm?ur import wasmUrlRust from 'windmill-parser-wasm-rust/windmill_parser_wasm_bg.wasm?url' import wasmUrlYaml from 'windmill-parser-wasm-yaml/windmill_parser_wasm_bg.wasm?url' import wasmUrlCSharp from 'windmill-parser-wasm-csharp/windmill_parser_wasm_bg.wasm?url' +import wasmUrlNu from 'windmill-parser-wasm-nu/windmill_parser_wasm_bg.wasm?url' import { workspaceStore } from './stores.js' import { argSigToJsonSchemaType } from './inferArgSig.js' @@ -66,6 +68,9 @@ async function initWasmYaml() { async function initWasmCSharp() { await initCSharpParser(wasmUrlCSharp) } +async function initWasmNu() { + await initNuParser(wasmUrlNu) +} export async function inferArgs( language: SupportedLanguage | 'bunnative' | undefined, @@ -178,6 +183,9 @@ export async function inferArgs( } else if (language == 'csharp') { await initWasmCSharp() inferedSchema = JSON.parse(parse_csharp(code)) + } else if (language == 'nu') { + await initWasmNu() + inferedSchema = JSON.parse(parse_nu(code)) } else { return null } diff --git a/frontend/src/lib/script_helpers.ts b/frontend/src/lib/script_helpers.ts index 1f1755a5a7..bdb5ce0870 100644 --- a/frontend/src/lib/script_helpers.ts +++ b/frontend/src/lib/script_helpers.ts @@ -414,6 +414,52 @@ class Script } ` +const NU_INIT_CODE = `use std assert + +# Nushell +# A new type of shell +def main [ + no_default: string, + name = "Nicolas Bourbaki", + age: int = 42, + date_of_birth?: datetime, + obj: record = {"records": "included"}, + l: list = ["or", "lists!"], + tables?: table, + enable_kill_mode?: bool = true, +] { + # Test + # https://www.nushell.sh/book/testing.html + assert ($age == 42) + + print $"Hello World and a warm welcome especially to ($name)" + print "and its acolytes.." $age $obj $l + print $tables + + let secret = try { + get_variable f/examples/secret + } catch { + 'No secret yet at f/examples/secret !' + }; + + print $"The variable at \`f/examples/secret\`: ($secret)" + # fetch context variables + let user = $env.WM_USERNAME + + # Nu pipelines + ls | where size > 1kb | sort-by modified | print "ls:" $in + + # Nu works with existing data + # Nu speaks JSON, YAML, SQLite, Excel, and more out of the box. + # It's easy to bring data into a Nu pipeline whether it's in a file, a database, or a web API: + let nu_license = http get https://api.github.com/repos/nushell/nushell | get license + + return { splitted: ($name | split words), user: $user, nu_license: $nu_license} + # Interested in learning more? + # https://www.nushell.sh/book/getting_started.html +} +` + const FETCH_INIT_CODE = `export async function main( url: string | undefined, method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' = 'GET', @@ -974,6 +1020,9 @@ export const INITIAL_CODE = { csharp: { script: CSHARP_INIT_CODE }, + nu: { + script: NU_INIT_CODE + }, docker: { script: DOCKER_INIT_CODE }, @@ -1081,6 +1130,8 @@ export function initialCode( return INITIAL_CODE.ansible.script } else if (language == 'csharp') { return INITIAL_CODE.csharp.script + } else if (language == 'nu') { + return INITIAL_CODE.nu.script } else if (language == 'bun' || language == 'bunnative') { if (kind == 'trigger') { return INITIAL_CODE.bun.trigger diff --git a/frontend/src/lib/scripts.ts b/frontend/src/lib/scripts.ts index f1acf854cd..95c0869e36 100644 --- a/frontend/src/lib/scripts.ts +++ b/frontend/src/lib/scripts.ts @@ -43,6 +43,8 @@ export function scriptLangToEditorLang( return 'yaml' } else if (lang == 'csharp') { return 'csharp' + } else if (lang == 'nu') { + return 'nu' } else if (lang == undefined) { return 'typescript' } else { @@ -122,7 +124,8 @@ const scriptLanguagesArray: [SupportedLanguage | 'docker' | 'bunnative', string] ['rust', 'Rust'], ['ansible', 'Ansible Playbook'], ['csharp', 'C#'], - ['docker', 'Docker'] + ['docker', 'Docker'], + ['nu', 'Nu'] ] export function processLangs(selected: string | undefined, langs: string[]): string[] { if (selected === 'nativets') { @@ -131,7 +134,7 @@ export function processLangs(selected: string | undefined, langs: string[]): str let ls = langs.filter((lang) => lang !== 'nativets') //those languages are newer and may not be in the saved list - let nl = ['bunnative', 'rust', 'ansible', 'csharp'] + let nl = ['bunnative', 'rust', 'ansible', 'csharp', 'nu'] nl.forEach((lang) => { if (!ls.includes(lang)) { ls.push(lang) diff --git a/frontend/src/routes/(root)/(logged)/run/[...run]/+page.svelte b/frontend/src/routes/(root)/(logged)/run/[...run]/+page.svelte index 678c3c11eb..15251cf14f 100644 --- a/frontend/src/routes/(root)/(logged)/run/[...run]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/run/[...run]/+page.svelte @@ -755,7 +755,7 @@ priority: {job.priority} {/if} - {#if job.tag && !['deno', 'python3', 'flow', 'other', 'go', 'postgresql', 'mysql', 'bigquery', 'snowflake', 'mssql', 'graphql', 'oracledb', 'nativets', 'bash', 'powershell', 'php', 'rust', 'other', 'ansible', 'csharp', 'dependency'].includes(job.tag)} + {#if job.tag && !['deno', 'python3', 'flow', 'other', 'go', 'postgresql', 'mysql', 'bigquery', 'snowflake', 'mssql', 'graphql', 'oracledb', 'nativets', 'bash', 'powershell', 'php', 'rust', 'other', 'ansible', 'csharp', 'dependency', 'nu'].includes(job.tag)}
Tag: {job.tag}
diff --git a/lsp/dev.nu b/lsp/dev.nu new file mode 100755 index 0000000000..0beac3cfc1 --- /dev/null +++ b/lsp/dev.nu @@ -0,0 +1,21 @@ +#!/usr/bin/env nu +let tag = $"dev-lsp-(git branch --show-current)"; + +# Build docker image and start server on localhost:3001 +def main [ + --podman(-p) # Use podman + # TODO: + --detach(-d) # Run container in background and print container ID + ] { + if $podman { + podman build --tag $tag .; podman run -p 3001:3001 $tag + } else { + docker build --tag $tag .; docker run -p 3001:3001 $tag + } +} + +# Stop podman container +def "main stop" [] { + try { docker stop (docker ps -q --filter $"ancestor=($tag)") } + try { podman stop (podman ps -q --filter $"ancestor=($tag)") } +} diff --git a/lsp/pyls_launcher.py b/lsp/pyls_launcher.py index 93636b5786..614d47294e 100644 --- a/lsp/pyls_launcher.py +++ b/lsp/pyls_launcher.py @@ -71,33 +71,25 @@ class LanguageServerWebSocketHandler(websocket.WebSocketHandler): def check_origin(self, origin): return True - class PyrightLS(LanguageServerWebSocketHandler): procargs = ["pipenv", "run", "pyright-langserver", "--stdio"] - class DiagnosticLS(LanguageServerWebSocketHandler): procargs = ["diagnostic-languageserver", "--stdio", "--log-level", "4"] - class RuffLS(LanguageServerWebSocketHandler): procargs = ["ruff-lsp"] - class DenoLS(LanguageServerWebSocketHandler): procargs = ["deno", "lsp"] - - class GoLS(LanguageServerWebSocketHandler): procargs = ["gopls", "serve"] - class MainHandler(web.RequestHandler): def get(self): self.write("ok") - if __name__ == "__main__": monaco_path = "/tmp/monaco" os.makedirs(monaco_path, exist_ok=True)