From fd18f42e0fd37e4451429a54eb44ac2755529ece Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 7 Sep 2024 02:31:26 +0200 Subject: [PATCH] feat: make CLI node compatible (#4347) --- .github/change-versions.sh | 2 +- .github/workflows/npm_on_release.yml | 5 +- cli/.gitignore | 1 + cli/build.sh | 1 + cli/conf.ts | 4 +- cli/deno.json | 17 + cli/deno.lock | 1014 ++++++++++++++++++++++++++ cli/deps.ts | 69 +- cli/dev.ts | 92 ++- cli/dnt.ts | 47 ++ cli/instance.ts | 52 +- cli/login.ts | 86 ++- cli/main.ts | 117 +-- cli/pull.ts | 7 +- cli/store.ts | 54 +- cli/sync.ts | 19 +- cli/upgrade.ts | 65 ++ cli/user.ts | 7 +- cli/workspace.ts | 54 +- 19 files changed, 1466 insertions(+), 247 deletions(-) create mode 100644 cli/.gitignore create mode 100755 cli/build.sh create mode 100644 cli/deno.json create mode 100644 cli/deno.lock create mode 100644 cli/dnt.ts create mode 100644 cli/upgrade.ts diff --git a/.github/change-versions.sh b/.github/change-versions.sh index 8974c283ab..77ecbc6985 100755 --- a/.github/change-versions.sh +++ b/.github/change-versions.sh @@ -7,7 +7,7 @@ VERSION=$1 echo "Updating versions to: $VERSION" sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/backend/Cargo.toml -sed -i -e "/^export const VERSION =/s/= .*/= \"v$VERSION\";/" ${root_dirpath}/cli/main.ts +sed -i -e "/^export const VERSION =/s/= .*/= \"$VERSION\";/" ${root_dirpath}/cli/main.ts sed -i -e "/^export const VERSION =/s/= .*/= \"v$VERSION\";/" ${root_dirpath}/benchmarks/lib.ts sed -i -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/backend/windmill-api/openapi.yaml sed -i -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/openflow.openapi.yaml diff --git a/.github/workflows/npm_on_release.yml b/.github/workflows/npm_on_release.yml index a4cc1a028f..e9ddfb8de6 100644 --- a/.github/workflows/npm_on_release.yml +++ b/.github/workflows/npm_on_release.yml @@ -13,6 +13,9 @@ jobs: with: node-version: "16.x" registry-url: "https://registry.npmjs.org" - - run: cd typescript-client && ./publish.sh + - run: cd typescript-client && ./publish.sh && cd .. env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - run: cd cli && ./build.sh.sh && cd npm && npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} \ No newline at end of file diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 0000000000..f89613352f --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1 @@ +npm/ \ No newline at end of file diff --git a/cli/build.sh b/cli/build.sh new file mode 100755 index 0000000000..462d45f8c3 --- /dev/null +++ b/cli/build.sh @@ -0,0 +1 @@ +deno run -A dnt.ts \ No newline at end of file diff --git a/cli/conf.ts b/cli/conf.ts index bac5b7ca9d..fa18de880b 100644 --- a/cli/conf.ts +++ b/cli/conf.ts @@ -44,13 +44,13 @@ export async function readConfigFile(): Promise { await Deno.readTextFile("wmill.yaml") ) as SyncOptions; if (conf?.defaultTs == undefined) { - log.warning( + log.warn( "No defaultTs defined in your wmill.yaml. Using 'bun' as default." ); } return typeof conf == "object" ? conf : ({} as SyncOptions); } catch (e) { - log.warning( + log.warn( "No wmill.yaml found. Use 'wmill init' to bootstrap it. Using 'bun' as default typescript runtime." ); return {}; diff --git a/cli/deno.json b/cli/deno.json new file mode 100644 index 0000000000..3741d2dc7c --- /dev/null +++ b/cli/deno.json @@ -0,0 +1,17 @@ +{ + "imports": { + "@cliffy/ansi": "jsr:@windmill-labs/cliffy-ansi@^1.0.0-rc.5", + "@cliffy/command": "jsr:@windmill-labs/cliffy-command@^1.0.0-rc.5", + "@cliffy/prompt": "jsr:@windmill-labs/cliffy-prompt@^1.0.0-rc.5", + "@cliffy/table": "jsr:@windmill-labs/cliffy-table@^1.0.0-rc.5", + "@deno/dnt": "jsr:@deno/dnt@^0.41.3", + "@std/encoding": "jsr:@std/encoding@^1.0.4", + "@std/fs": "jsr:@std/fs@^1.0.3", + "@std/io": "jsr:@std/io@^0.224.7", + "@std/log": "jsr:@std/log@^0.224.7", + "@std/net": "jsr:@std/net@^1.0.2", + "@std/path": "jsr:@std/path@^1.0.4", + "@std/streams": "jsr:@std/streams@^1.0.4", + "@std/yaml": "jsr:@std/yaml@^1.0.5" + } +} diff --git a/cli/deno.lock b/cli/deno.lock new file mode 100644 index 0000000000..3cfeeaeb38 --- /dev/null +++ b/cli/deno.lock @@ -0,0 +1,1014 @@ +{ + "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:@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/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/net": "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/text@1.0.0-rc.1": "jsr:@std/text@1.0.0-rc.1", + "jsr:@std/yaml": "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-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-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/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:express": "npm:express@4.19.2", + "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" + }, + "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/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-table@1.0.0-rc.5": { + "integrity": "5f26cb6ccbc2fbf1b1f79f9062d166e32e11d34398c0deac7e6f9d8378970546", + "dependencies": [ + "jsr:@std/cli@1.0.0-rc.2", + "jsr:@std/fmt@~0.225.4" + ] + } + }, + "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": {} + }, + "@fastify/busboy@2.1.1": { + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dependencies": {} + }, + "@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" + } + }, + "@types/node@18.16.19": { + "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", + "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" + } + }, + "array-flatten@1.1.1": { + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dependencies": {} + }, + "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@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" + } + }, + "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": {} + }, + "debug@2.6.9": { + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "ms@2.0.0" + } + }, + "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": {} + }, + "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": {} + }, + "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-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": {} + }, + "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": {} + }, + "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" + } + }, + "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" + } + }, + "forwarded@0.2.0": { + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dependencies": {} + }, + "fresh@0.5.2": { + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dependencies": {} + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "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" + } + }, + "gitignore-parser@0.0.2": { + "integrity": "sha512-X6mpqUv59uWLGD4n3hZ8Cu8KbF2PMWPSFYmxZjdkpm3yOU7hSUYnzTkZI1mcWqchphvqyuz3/BhgBR4E/JtkCg==", + "dependencies": {} + }, + "gopd@1.0.1": { + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "get-intrinsic@1.2.4" + } + }, + "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": {} + }, + "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" + } + }, + "immediate@3.0.6": { + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dependencies": {} + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dependencies": {} + }, + "ipaddr.js@1.9.1": { + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dependencies": {} + }, + "is-docker@3.0.0": { + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dependencies": {} + }, + "is-inside-container@1.0.0": { + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "is-docker@3.0.0" + } + }, + "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": {} + }, + "isexe@3.1.1": { + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dependencies": {} + }, + "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" + } + }, + "lie@3.3.0": { + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "immediate@3.0.6" + } + }, + "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" + } + }, + "ms@2.0.0": { + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dependencies": {} + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dependencies": {} + }, + "negotiator@0.6.3": { + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dependencies": {} + }, + "object-inspect@1.13.2": { + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dependencies": {} + }, + "on-finished@2.4.1": { + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "ee-first@1.1.1" + } + }, + "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" + } + }, + "pako@1.0.11": { + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dependencies": {} + }, + "parseurl@1.3.3": { + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dependencies": {} + }, + "path-to-regexp@0.1.7": { + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "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" + } + }, + "qs@6.11.0": { + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "side-channel@1.0.6" + } + }, + "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" + } + }, + "run-applescript@7.0.0": { + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dependencies": {} + }, + "safe-buffer@5.1.2": { + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dependencies": {} + }, + "safe-buffer@5.2.1": { + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dependencies": {} + }, + "safer-buffer@2.1.2": { + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "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-immediate-shim@1.0.1": { + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", + "dependencies": {} + }, + "setprototypeof@1.2.0": { + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "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_decoder@1.1.1": { + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "safe-buffer@5.1.2" + } + }, + "sudo-prompt@9.2.1": { + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "dependencies": {} + }, + "toidentifier@1.0.1": { + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dependencies": {} + }, + "tslib@2.3.1": { + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "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" + } + }, + "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": {} + }, + "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@4.0.0": { + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "isexe@3.1.1" + } + }, + "windmill-client@1.364.0": { + "integrity": "sha512-UjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIaw==", + "dependencies": {} + }, + "ws@8.18.0": { + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dependencies": {} + } + } + }, + "remote": {}, + "workspace": { + "dependencies": [ + "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/net@^1.0.2", + "jsr:@std/path@^1.0.4", + "jsr:@std/streams@^1.0.4", + "jsr:@std/yaml@^1.0.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-prompt@^1.0.0-rc.5", + "jsr:@windmill-labs/cliffy-table@^1.0.0-rc.5" + ] + } +} diff --git a/cli/deps.ts b/cli/deps.ts index 5f5d809af3..91e850efc6 100644 --- a/cli/deps.ts +++ b/cli/deps.ts @@ -2,51 +2,40 @@ export * from "npm:windmill-client@1.364.0"; // cliffy -export { Command } from "https://deno.land/x/cliffy@v1.0.0-rc.4/command/mod.ts"; -export { Table } from "https://deno.land/x/cliffy@v1.0.0-rc.4/table/table.ts"; -export { colors } from "https://deno.land/x/cliffy@v1.0.0-rc.4/ansi/colors.ts"; -export { Secret } from "https://deno.land/x/cliffy@v1.0.0-rc.4/prompt/secret.ts"; -export { Select } from "https://deno.land/x/cliffy@v1.0.0-rc.4/prompt/select.ts"; -export { Confirm } from "https://deno.land/x/cliffy@v1.0.0-rc.4/prompt/confirm.ts"; -export { Input } from "https://deno.land/x/cliffy@v1.0.0-rc.4/prompt/input.ts"; -export { - DenoLandProvider, - UpgradeCommand, -} from "https://deno.land/x/cliffy@v1.0.0-rc.4/command/upgrade/mod.ts"; -export { CompletionsCommand } from "https://deno.land/x/cliffy@v1.0.0-rc.4/command/completions/mod.ts"; +export { Command } from "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5"; +export { Table } from "jsr:@windmill-labs/cliffy-table@1.0.0-rc.5"; +export { colors } from "jsr:@windmill-labs/cliffy-ansi@1.0.0-rc.5/colors"; +export { Secret } from "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5/secret"; +export { Select } from "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5/select"; +export { Confirm } from "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5/confirm"; +export { Input } from "jsr:@windmill-labs/cliffy-prompt@1.0.0-rc.5/input"; +export { UpgradeCommand } from "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5/upgrade"; +export { NpmProvider } from "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5/upgrade/provider/npm"; +export { Provider } from "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5/upgrade"; + +export { CompletionsCommand } from "jsr:@windmill-labs/cliffy-command@1.0.0-rc.5/completions"; // std -export * as path from "https://deno.land/std@0.207.0/path/mod.ts"; -export { ensureDir } from "https://deno.land/std@0.207.0/fs/ensure_dir.ts"; -export { - copy, - readAll, - readerFromStreamReader, -} from "https://deno.land/std@0.207.0/streams/mod.ts"; -export { SEP } from "https://deno.land/std@0.207.0/path/separator.ts"; -export { DelimiterStream } from "https://deno.land/std@0.207.0/streams/mod.ts"; -export { iterateReader } from "https://deno.land/std@0.207.0/streams/iterate_reader.ts"; -export { writeAllSync } from "https://deno.land/std@0.207.0/streams/mod.ts"; -export { encodeHex } from "https://deno.land/std@0.207.0/encoding/hex.ts"; -export * as log from "https://deno.land/std@0.207.0/log/mod.ts"; -export { - stringify as yamlStringify, - parse as yamlParse, -} from "https://deno.land/std@0.207.0/yaml/mod.ts"; +export { ensureDir } from "jsr:@std/fs"; +export { SEPARATOR as SEP } from "jsr:@std/path"; +export * as path from "jsr:@std/path/"; +export { encodeHex } from "jsr:@std/encoding"; +export { getAvailablePort } from "jsr:@std/net"; +export { writeAllSync } from "jsr:@std/io/write-all"; +export { copy } from "jsr:@std/io/copy"; +export { readAll } from "jsr:@std/io/read-all"; + +export * as log from "jsr:@std/log"; +export { stringify as yamlStringify, parse as yamlParse } from "jsr:@std/yaml"; // other -export { Application, Router } from "https://deno.land/x/oak@v12.5.0/mod.ts"; -export { getPort } from "https://deno.land/x/getport@v2.1.2/mod.ts"; -export { getAvailablePort } from "https://deno.land/x/port@1.0.0/mod.ts"; -export { default as dir } from "https://deno.land/x/dir@1.5.1/mod.ts"; -export { passwordGenerator } from "https://deno.land/x/password_generator@latest/mod.ts"; // TODO: I think the version is called latest, but it's still pinned. -export { nanoid } from "https://deno.land/x/nanoid@v3.0.0/mod.ts"; -export * as cbor from "https://deno.land/x/cbor@v1.4.1/index.js"; -export { default as Murmurhash3 } from "https://deno.land/x/murmurhash@v1.0.0/mod.ts"; -export { default as microdiff } from "https://deno.land/x/microdiff@v1.3.1/index.ts"; -export { default as objectHash } from "https://deno.land/x/object_hash@2.0.3.1/mod.ts"; export { minimatch } from "npm:minimatch"; export { default as JSZip } from "npm:jszip@3.7.1"; -export { open } from "https://deno.land/x/open@v0.0.5/index.ts"; +export * as express from "npm:express"; +export * as http from "node:http"; +export { WebSocketServer, WebSocket } from "npm:ws"; + +export * as open from "npm:open"; export { default as gitignore_parser } from "npm:gitignore-parser"; +export * as esMain from "npm:es-main"; diff --git a/cli/dev.ts b/cli/dev.ts index 39342d7626..62c7a8e55f 100644 --- a/cli/dev.ts +++ b/cli/dev.ts @@ -1,5 +1,14 @@ -import getPort from "https://deno.land/x/getport@v2.1.2/mod.ts"; -import { Application, Command, Router, log, open, path } from "./deps.ts"; +import { + Command, + SEP, + WebSocketServer, + express, + getAvailablePort, + http, + log, + open, + WebSocket, +} from "./deps.ts"; import { GlobalOptions } from "./types.ts"; import { ignoreF } from "./sync.ts"; import { requireLogin, resolveWorkspace } from "./context.ts"; @@ -40,7 +49,7 @@ async function dev(opts: GlobalOptions & SyncOptions) { if (paths.length == 0) { return; } - const cpath = (await Deno.realPath(paths[0])).replace(base + path.sep, ""); + const cpath = (await Deno.realPath(paths[0])).replace(base + SEP, ""); console.log("Detected change in " + cpath); if (!ignore(cpath, false)) { const content = await Deno.readTextFile(cpath); @@ -52,7 +61,7 @@ async function dev(opts: GlobalOptions & SyncOptions) { path: wmPath, language: lang, }; - broadcast_changes(currentLastEdit); + broadcastChanges(currentLastEdit); log.info("Updated " + wmPath); } } @@ -62,67 +71,74 @@ async function dev(opts: GlobalOptions & SyncOptions) { language: string; }; - const connectedClients = new Set(); + const connectedClients: Set = new Set(); - const app = new Application(); - const router: Router = new Router(); - - // send a message to all connected clients - function broadcast_changes(lastEdit: LastEdit) { + // Function to send a message to all connected clients + function broadcastChanges(lastEdit: LastEdit) { for (const client of connectedClients.values()) { client.send(JSON.stringify(lastEdit)); } } async function startApp() { - router.get("/ws", async (ctx) => { - const socket = await ctx.upgrade(); - connectedClients.add(socket); - log.info(`New client connected`); + const app = express(); + const server = http.createServer(app); + const wss = new WebSocketServer({ server }); - socket.onopen = () => { + // WebSocket server event listeners + wss.on("connection", (ws: WebSocket) => { + connectedClients.add(ws); + console.log("New client connected"); + + ws.on("open", () => { if (currentLastEdit) { - broadcast_changes(currentLastEdit); + broadcastChanges(currentLastEdit); } - }; + }); - socket.onclose = () => { - connectedClients.delete(socket); - }; + ws.on("close", () => { + connectedClients.delete(ws); + console.log("Client disconnected"); + }); - socket.onmessage = (event) => { - let data: any | undefined = undefined; + ws.on("message", (message: WebSocket.RawData) => { + let data; try { - data = JSON.parse(event.data); - } catch { - console.log("Received invalid JSON: " + event.data); + data = JSON.parse(message); + } catch (e) { + console.log("Received invalid JSON: " + message + " " + e); return; } - if (data.type == "load") { - loadPaths([data.path] as string[]); + if (data.type === "load") { + loadPaths([data.path]); } - }; + }); }); - app.use(router.routes()); - app.use(router.allowedMethods()); - - const port = getPort(PORT); + // Start the server + const port = await getAvailablePort({ preferredPort: 3001 }); const url = `${workspace.remote}scripts/dev?workspace=${workspace.workspaceId}&local=true` + - (port == PORT ? "" : "&port=" + port); + (port === PORT ? "" : `&port=${port}`); + console.log(`Go to ${url}`); try { - await open(url); - log.info("Opened browser for you"); - } catch { - console.error(`Failed to open browser, please navigate to ${url}`); + open.openApp(open.apps.browser, { arguments: [url] }); + console.log("Opened browser for you"); + } catch (error) { + console.error( + `Failed to open browser, please navigate to ${url}, ${error}` + ); } + console.log( "Dev server will automatically point to the last script edited locally" ); - await app.listen({ port }); + + server.listen(port, () => { + console.log(`Server listening on port ${port}`); + }); } await Promise.all([startApp(), watchChanges()]); diff --git a/cli/dnt.ts b/cli/dnt.ts new file mode 100644 index 0000000000..4808a944f4 --- /dev/null +++ b/cli/dnt.ts @@ -0,0 +1,47 @@ +// ex. scripts/build_npm.ts +import { build, emptyDir } from "jsr:@deno/dnt@0.41.3"; +import { VERSION } from "./main.ts"; +await emptyDir("./npm"); + +await build({ + entryPoints: [ + { + kind: "bin", + name: "wmill", // command name + path: "./main.ts", + }, + ], + outDir: "./npm", + shims: { + // see JS docs for overview and more options + deno: true, + }, + typeCheck: false, + scriptModule: false, + package: { + // package.json properties + name: "windmill-cli", + version: VERSION, + description: "CLI for Windmill", + license: "Apache 2.0", + repository: { + type: "git", + url: "git+https://github.com/windmill-labs/windmill.git", + }, + bugs: { + url: "https://github.com/windmill-labs/windmill/issues", + }, + }, + + postBuild() { + // steps to run after building and before running the tests + // add shebang to npm/esm/main.js + + 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/instance.ts b/cli/instance.ts index 48a2caba16..a47fc6f282 100644 --- a/cli/instance.ts +++ b/cli/instance.ts @@ -8,7 +8,7 @@ import { Command, setClient, } from "./deps.ts"; -import { DelimiterStream, Input, colors, log } from "./deps.ts"; +import { Input, colors, log } from "./deps.ts"; import { loginInteractive } from "./login.ts"; import { getRootStore } from "./store.ts"; import { push, pull } from "./sync.ts"; @@ -43,46 +43,20 @@ export interface Instance { prefix: string; } -function makeInstanceStream( - readable: ReadableStream -): ReadableStream { - return readable - .pipeThrough(new DelimiterStream(new TextEncoder().encode("\n"))) - .pipeThrough(new TextDecoderStream()) - .pipeThrough( - new TransformStream({ - transform(line, controller) { - try { - if (line.length <= 2) { - return; - } - const instance = JSON.parse(line) as Instance; - controller.enqueue(instance); - } catch { - /* ignore */ - } - }, - }) - ); -} - -async function getInstanceStream() { - const file = await Deno.open((await getRootStore()) + "instances.ndjson", { - write: false, - read: true, - }); - return makeInstanceStream(file.readable); -} - export async function allInstances(): Promise { try { - const instanceStream = await getInstanceStream(); - const instances: Instance[] = []; - for await (const instance of instanceStream) { - instances.push(instance); - } - - return instances; + const file = (await getRootStore()) + "instances.ndjson"; + const txt = await Deno.readTextFile(file); + return txt + .split("\n") + .map((line) => { + if (line.length <= 2) { + return; + } + const instance = JSON.parse(line) as Instance; + return instance; + }) + .filter(Boolean) as Instance[]; } catch (_) { return []; } diff --git a/cli/login.ts b/cli/login.ts index 1d38ea4d88..ce7613b31c 100644 --- a/cli/login.ts +++ b/cli/login.ts @@ -1,5 +1,6 @@ import { GlobalOptions } from "./types.ts"; import { colors, getAvailablePort, log, open, Secret, Select } from "./deps.ts"; +import * as http from "node:http"; export async function loginInteractive(remote: string) { let token: string | undefined; @@ -51,28 +52,67 @@ export async function browserLogin( return undefined; } - const server = Deno.listen({ transport: "tcp", port }); - const url = `${baseUrl}user/cli?port=${port}`; - log.info(`Login by going to ${url}`); - try { - await open(url); - log.info("Opened browser for you"); - } catch { - console.error(`Failed to open browser, please navigate to ${url}`); - } - const firstConnection = await server.accept(); - const httpFirstConnection = Deno.serveHttp(firstConnection); - const firstRequest = (await httpFirstConnection.nextRequest())!; - const params = new URL(firstRequest.request.url!).searchParams; - const token = params.get("token"); - // const _workspace = params.get("workspace"); - await firstRequest?.respondWith( - Response.redirect(baseUrl + "user/cli-success", 302) - ); + // const server = Deno.listen({ transport: "tcp", port }); + // const url = `${baseUrl}user/cli?port=${port}`; + // log.info(`Login by going to ${url}`); + // try { + // await open.openApp(open.apps.browser, { arguments: [url] }); - setTimeout(() => { - httpFirstConnection.close(); - server.close(); - }, 10); - return token ?? undefined; + // log.info("Opened browser for you"); + // } catch { + // console.error(`Failed to open browser, please navigate to ${url}`); + // } + // const firstConnection = await server.accept(); + // const httpFirstConnection = Deno.serveHttp(firstConnection); + // const firstRequest = (await httpFirstConnection.nextRequest())!; + // const params = new URL(firstRequest.request.url!).searchParams; + // const token = params.get("token"); + // // const _workspace = params.get("workspace"); + // await firstRequest?.respondWith( + // Response.redirect(baseUrl + "user/cli-success", 302) + // ); + + // setTimeout(() => { + // httpFirstConnection.close(); + // server.close(); + // }, 10); + // return token ?? undefined; + + return new Promise((resolve) => { + const server = http.createServer((req, res) => { + const params = new URL(req.url!, `http://${req.headers.host}`) + .searchParams; + const token = params.get("token"); + + // Redirect the user to the success page + res.writeHead(302, { Location: `${baseUrl}user/cli-success` }); + res.end(); + + // Close the server after a short delay + setTimeout(() => { + server.close(); + }, 10); + + // Resolve the promise with the token + resolve(token ?? undefined); + }); + + const url = `${baseUrl}user/cli?port=${port}`; + log.info(`Login by going to ${url}`); + + try { + open.openApp(open.apps.browser, { arguments: [url] }); + + log.info("Opened browser for you"); + } catch (error) { + console.error( + `Failed to open browser, please navigate to ${url}, error: ${error}` + ); + } + + // Start the server + server.listen(port, () => { + console.log(`Listening on port ${port}`); + }); + }); } diff --git a/cli/main.ts b/cli/main.ts index f99eb0079a..502e38d2a2 100644 --- a/cli/main.ts +++ b/cli/main.ts @@ -1,9 +1,9 @@ import { Command, CompletionsCommand, - DenoLandProvider, UpgradeCommand, colors, + esMain, log, yamlStringify, } from "./deps.ts"; @@ -22,19 +22,21 @@ import schedule from "./schedule.ts"; import sync from "./sync.ts"; import instance from "./instance.ts"; import dev from "./dev.ts"; -import { fetchVersion, tryResolveVersion } from "./context.ts"; +import { fetchVersion } from "./context.ts"; import { GlobalOptions } from "./types.ts"; import { OpenAPI } from "./deps.ts"; import { getHeaders } from "./utils.ts"; +import { NpmProvider } from "./upgrade.ts"; -addEventListener("error", (event) => { - if (event.error) { - console.error("Error details of: " + event.error.message); - console.error(JSON.stringify(event.error, null, 4)); - } -}); +// addEventListener("error", (event) => { +// if (event.error) { +// console.error("Error details of: " + event.error.message); +// console.error(JSON.stringify(event.error, null, 4)); +// } +// }); + +export const VERSION = "1.392.0"; -export const VERSION = "v1.392.0"; let command: any = new Command() .name("wmill") @@ -108,15 +110,7 @@ let command: any = new Command() .command( "upgrade", new UpgradeCommand({ - main: "main.ts", - args: [ - "--allow-net", - "--allow-read", - "--allow-write", - "--allow-env", - "-q", - ], - provider: new DenoLandProvider({ name: "wmill" }), + provider: new NpmProvider({ package: "windmill-cli" }), }) ) .command("completions", new CompletionsCommand()); @@ -125,42 +119,65 @@ if (Number.parseInt(VERSION.replace("v", "").replace(".", "")) > 1700) { } export let showDiffs = false; -try { - if (Deno.args.length === 0) { - command.showHelp(); - } - const LOG_LEVEL = - Deno.args.includes("--verbose") || Deno.args.includes("--debug") - ? "DEBUG" - : "INFO"; - // const NO_COLORS = Deno.args.includes("--no-colors"); - showDiffs = Deno.args.includes("--show-diffs"); +async function main() { + try { + if (Deno.args.length === 0) { + command.showHelp(); + } + const LOG_LEVEL = + Deno.args.includes("--verbose") || Deno.args.includes("--debug") + ? "DEBUG" + : "INFO"; + // const NO_COLORS = Deno.args.includes("--no-colors"); + showDiffs = Deno.args.includes("--show-diffs"); - log.setup({ - handlers: { - console: new log.handlers.ConsoleHandler(LOG_LEVEL, { - formatter: "{msg}", - }), - }, - loggers: { - default: { - level: LOG_LEVEL, - handlers: ["console"], + log.setup({ + handlers: { + console: new log.ConsoleHandler(LOG_LEVEL, { + formatter: ({ msg }) => `${msg}`, + }), }, - }, - }); - log.debug("Debug logging enabled. CLI build against " + VERSION); + loggers: { + default: { + level: LOG_LEVEL, + handlers: ["console"], + }, + }, + }); + log.debug("Debug logging enabled. CLI build against " + VERSION); - const extraHeaders = getHeaders(); - if (extraHeaders) { - OpenAPI.HEADERS = extraHeaders; + const extraHeaders = getHeaders(); + if (extraHeaders) { + OpenAPI.HEADERS = extraHeaders; + } + await command.parse(Deno.args); + } catch (e) { + if (e.name === "ApiError") { + console.log("Server failed. " + e.statusText + ": " + e.body); + } + throw e; } - await command.parse(Deno.args); -} catch (e) { - if (e.name === "ApiError") { - console.log("Server failed. " + e.statusText + ": " + e.body); - } - throw e; } +//@ts-ignore +if (esMain.default(import.meta)) { + main(); + // test1(); + // test2(); + // module was not imported but called directly +} + +// function test1() { +// // dnt-shim-ignore deno-lint-ignore no-explicit-any +// const { Deno, process } = globalThis as any; + +// console.log(Deno); +// } + +// function test2() { +// const { Deno, process } = globalThis as any; + +// console.log(Deno); +// } + export default command; diff --git a/cli/pull.ts b/cli/pull.ts index c9b71aff3b..376b02f251 100644 --- a/cli/pull.ts +++ b/cli/pull.ts @@ -59,13 +59,10 @@ export async function downloadZip( log.debug(`Downloaded zip/tarball successfully`); } const blob = await zipResponse.blob(); - return await JSZip.loadAsync(blob as any); + return await JSZip.loadAsync((await blob.arrayBuffer()) as any); } -async function stub( - _opts: GlobalOptions & { override: boolean }, - _dir: string -) { +function stub(_opts: GlobalOptions & { override: boolean }, _dir: string) { console.log( colors.red.underline( 'Pull is deprecated. Use "sync pull --raw" instead. See for more information.' diff --git a/cli/store.ts b/cli/store.ts index 0e057a9d58..3833b8f9b7 100644 --- a/cli/store.ts +++ b/cli/store.ts @@ -1,4 +1,4 @@ -import { dir, ensureDir } from "./deps.ts"; +import { ensureDir } from "./deps.ts"; function hash_string(str: string): number { let hash = 0, @@ -14,7 +14,7 @@ function hash_string(str: string): number { } export async function getRootStore(): Promise { - const store = (dir("config") ?? dir("tmp") ?? "/tmp/") + "/windmill/"; + const store = (config_dir() ?? tmp_dir() ?? "/tmp/") + "/windmill/"; await ensureDir(store); return store; } @@ -25,3 +25,53 @@ export async function getStore(baseUrl: string): Promise { await ensureDir(baseStore); return baseStore; } + +//inlined import dir from "https://deno.land/x/dir/mod.ts"; +function tmp_dir(): string | null { + switch (Deno.build.os) { + case "linux": { + const xdg = Deno.env.get("XDG_RUNTIME_DIR"); + if (xdg) return `${xdg}-/tmp`; + + const tmpDir = Deno.env.get("TMPDIR"); + if (tmpDir) return tmpDir; + + const tempDir = Deno.env.get("TEMP"); + if (tempDir) return tempDir; + + const tmp = Deno.env.get("TMP"); + if (tmp) return tmp; + + return "/var/tmp"; + } + case "darwin": + return Deno.env.get("TMPDIR") ?? null; + case "windows": + return Deno.env.get("TMP") ?? Deno.env.get("TEMP") ?? null; + } + return null; +} + +function config_dir(): string | null { + switch (Deno.build.os) { + case "linux": { + const xdg = Deno.env.get("XDG_CONFIG_HOME"); + if (xdg) return xdg; + + const home = Deno.env.get("HOME"); + if (home) return `${home}/.config`; + break; + } + + case "darwin": { + const home = Deno.env.get("HOME"); + if (home) return `${home}/Library/Preferences`; + break; + } + + case "windows": + return Deno.env.get("APPDATA") ?? null; + } + + return null; +} diff --git a/cli/sync.ts b/cli/sync.ts index 6827b46579..459ad6d19b 100644 --- a/cli/sync.ts +++ b/cli/sync.ts @@ -158,7 +158,7 @@ export async function FSFSElement( ); } } catch (e) { - log.warning(`Error reading dir: ${localP}, ${e}`); + log.warn(`Error reading dir: ${localP}, ${e}`); } }, // async getContentBytes(): Promise { @@ -621,7 +621,7 @@ export async function elementsToMap( continue; } } catch (e) { - log.warning(`Error reading variable ${path} to check for secrets`); + log.warn(`Error reading variable ${path} to check for secrets`); } } map[entry.path] = content; @@ -920,6 +920,7 @@ export async function pull(opts: GlobalOptions & SyncOptions) { const conflicts = []; const changedScripts: string[] = []; const changedFlows: string[] = []; + const changedApps: string[] = []; // deno-lint-ignore no-inner-declarations async function addToChangedIfNotExists(p: string) { @@ -931,6 +932,11 @@ export async function pull(opts: GlobalOptions & SyncOptions) { if (!changedFlows.includes(folder)) { changedFlows.push(folder); } + } else if (p.includes(".app" + SEP)) { + const folder = p.substring(0, p.indexOf(".app" + SEP)) + ".app" + SEP; + if (!changedApps.includes(folder)) { + changedApps.push(folder); + } } else { if (!changedScripts.includes(p)) { changedScripts.push(p); @@ -1072,6 +1078,13 @@ export async function pull(opts: GlobalOptions & SyncOptions) { log.info(`Updating lock for flow ${change}`); await generateFlowLockInternal(change, false, workspace, true); } + if (changedApps.length > 0) { + log.info( + `Apps ${changedApps.join( + ", " + )} scripts were changed but ignoring for now` + ); + } log.info( colors.bold.green.underline( `\nDone! All ${changes.length} changes applied locally and wmill-lock.yaml updated.` @@ -1327,7 +1340,7 @@ export async function push(opts: GlobalOptions & SyncOptions) { case "folder": await FolderService.deleteFolder({ workspace: workspaceId, - name: change.path.split(path.sep)[1], + name: change.path.split(SEP)[1], }); break; case "resource": diff --git a/cli/upgrade.ts b/cli/upgrade.ts new file mode 100644 index 0000000000..0c7c1778de --- /dev/null +++ b/cli/upgrade.ts @@ -0,0 +1,65 @@ +import { Provider } from "./deps.ts"; + +export type NpmProviderOptions = { main?: string; logger?: any } & ( + | { + package: string; + } + | { + scope: string; + name?: string; + } +); + +export class NpmProvider extends Provider { + name = "npm"; + private readonly repositoryUrl = "https://npmjs.org/"; + private readonly apiUrl = "https://registry.npmjs.org/"; + private readonly packageName?: string; + + constructor({ main, logger, ...options }: NpmProviderOptions) { + super({ main, logger }); + + this.packageName = "package" in options ? options.package : options.name; + } + + async getVersions(name: string): Promise { + const response = await fetch( + new URL(`${this.packageName ?? name}`, this.apiUrl) + ); + if (!response.ok) { + throw new Error( + "couldn't fetch the latest version - try again after sometime" + ); + } + + const { + "dist-tags": { latest }, + versions, + } = (await response.json()) as NpmApiPackageMetadata; + + return { + latest, + versions: Object.keys(versions).reverse(), + }; + } + + getRepositoryUrl(name: string, version?: string): string { + return new URL( + `package/${this.packageName ?? name}${version ? `/v/${version}` : ""}`, + this.repositoryUrl + ).href; + } + + getRegistryUrl(name: string, version: string): string { + return `npm:${this.packageName ?? name}@${version}`; + } +} + +type NpmApiPackageMetadata = { + "dist-tags": { + latest: string; + }; + versions: { + [version: string]: unknown; + }; +}; diff --git a/cli/user.ts b/cli/user.ts index 82e9648950..148595df76 100644 --- a/cli/user.ts +++ b/cli/user.ts @@ -12,7 +12,6 @@ import { Command, GlobalUserInfo, log, - passwordGenerator, Table, UserService, GroupService, @@ -57,6 +56,10 @@ async function list(opts: GlobalOptions) { .render(); } +function rdString() { + return Math.random().toString(36).slice(2, 7); +} + async function add( opts: GlobalOptions & { superadmin?: boolean; @@ -67,7 +70,7 @@ async function add( password?: string ) { await requireLogin(opts); - const password_final = password ?? passwordGenerator("*", 15); + const password_final = password ?? rdString(); await UserService.createUserGlobally({ requestBody: { email, diff --git a/cli/workspace.ts b/cli/workspace.ts index 956df39793..fdbd1fa884 100644 --- a/cli/workspace.ts +++ b/cli/workspace.ts @@ -5,7 +5,6 @@ import { loginInteractive, tryGetLoginInfo } from "./login.ts"; import { colors, Command, - DelimiterStream, Input, log, setClient, @@ -23,47 +22,20 @@ export interface Workspace { token: string; } -function makeWorkspaceStream( - readable: ReadableStream -): ReadableStream { - return readable - .pipeThrough(new DelimiterStream(new TextEncoder().encode("\n"))) - .pipeThrough(new TextDecoderStream()) - .pipeThrough( - new TransformStream({ - transform(line, controller) { - try { - if (line.length <= 2) { - return; - } - const workspace = JSON.parse(line) as Workspace; - workspace.remote = new URL(workspace.remote).toString(); // add trailing slash in all cases! - controller.enqueue(workspace); - } catch { - /* ignore */ - } - }, - }) - ); -} - -export async function getWorkspaceStream() { - const file = await Deno.open((await getRootStore()) + "remotes.ndjson", { - write: false, - read: true, - }); - return makeWorkspaceStream(file.readable); -} - export async function allWorkspaces(): Promise { try { - const workspaceStream = await getWorkspaceStream(); - const workspaces: Workspace[] = []; - for await (const workspace of workspaceStream) { - workspaces.push(workspace); - } - - return workspaces; + const file = (await getRootStore()) + "remotes.ndjson"; + const txt = await Deno.readTextFile(file); + return txt + .split("\n") + .map((line) => { + if (line.length <= 2) { + return; + } + const instance = JSON.parse(line) as Workspace; + return instance; + }) + .filter(Boolean) as Workspace[]; } catch (_) { return []; } @@ -95,7 +67,7 @@ export async function getActiveWorkspace( export async function getWorkspaceByName( workspaceName: string ): Promise { - const workspaceStream = await getWorkspaceStream(); + const workspaceStream = await allWorkspaces(); for await (const workspace of workspaceStream) { if (workspace.name === workspaceName) { return workspace;