├── .gitignore ├── .vscode └── settings.json ├── .github └── workflows │ └── tests.yml ├── .devcontainer ├── Dockerfile └── devcontainer.json ├── tests └── test-bin-get-installation.sh ├── LICENSE ├── README.md ├── bin-get_test.ts ├── bin-get.ts └── lock.json /.gitignore: -------------------------------------------------------------------------------- 1 | .env -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "deno.enable": true, 3 | } -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | on: 3 | push: 4 | jobs: 5 | Tests: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - name: Install dependencies 9 | run: | 10 | sudo apt-get update && export DEBIAN_FRONTEND=noninteractive 11 | sudo apt-get -y install --no-install-recommends jq curl shellcheck file 12 | - name: Check out code 13 | uses: actions/checkout@v3 14 | 15 | - name: Run tests bash version 16 | run: | 17 | ./tests/test-bin-get-installation.sh 18 | 19 | - name: Run tests Deno version 20 | run: | 21 | sudo deno test --allow-all 22 | -------------------------------------------------------------------------------- /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | # See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.238.1/containers/ubuntu/.devcontainer/base.Dockerfile 2 | 3 | # [Choice] Ubuntu version (use ubuntu-22.04 or ubuntu-18.04 on local arm64/Apple Silicon): ubuntu-22.04, ubuntu-20.04, ubuntu-18.04 4 | ARG VARIANT="jammy" 5 | FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} 6 | 7 | # [Optional] Uncomment this section to install additional OS packages. 8 | RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ 9 | && apt-get -y install --no-install-recommends jq curl shellcheck file 10 | 11 | RUN curl -sL https://raw.githubusercontent.com/wimpysworld/deb-get/main/deb-get | sudo -E bash -s install deb-get 12 | 13 | RUN curl -fsSL https://deno.land/install.sh | sudo DENO_INSTALL=/usr/local sh 14 | 15 | 16 | -------------------------------------------------------------------------------- /tests/test-bin-get-installation.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | 4 | # @todo replace with bats or something 5 | 6 | 7 | DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" && pwd)" 8 | cd "$DIR" || exit 1 9 | 10 | set -e 11 | 12 | sudo rm -f "$(command -v bin-get)" 13 | 14 | # This is the same code as in the README.md 15 | sudo curl -fsSL https://deno.land/install.sh | sudo DENO_INSTALL=/usr/local sh 16 | 17 | sudo deno run --allow-all https://raw.githubusercontent.com/OhMyMndy/bin-get/main/bin-get.ts install helm/helm 18 | 19 | 20 | sudo cp ./bin-get.ts /usr/bin/bin-get.ts 21 | sudo chmod +x /usr/bin/bin-get.ts 22 | 23 | if ! command -v bin-get.ts >/dev/null; then 24 | echo "bin-get.ts is not installed, but should!" >&2 25 | exit 1 26 | fi 27 | 28 | sudo curl -SsL https://raw.githubusercontent.com/OhMyMndy/bin-get/main/bin-get.ts -o /usr/bin/bin-get.ts 29 | sudo chmod +x /usr/bin/bin-get.ts 30 | 31 | if ! command -v bin-get.ts >/dev/null; then 32 | echo "bin-get.ts is not installed, but should!" >&2 33 | exit 1 34 | fi 35 | 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Mandy Schoep 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: 2 | // https://github.com/microsoft/vscode-dev-containers/tree/v0.238.1/containers/ubuntu 3 | { 4 | "name": "Ubuntu", 5 | "build": { 6 | "dockerfile": "Dockerfile", 7 | // Update 'VARIANT' to pick an Ubuntu version: jammy / ubuntu-22.04, focal / ubuntu-20.04, bionic /ubuntu-18.04 8 | // Use ubuntu-22.04 or ubuntu-18.04 on local arm64/Apple Silicon. 9 | "args": { "VARIANT": "ubuntu-22.04" } 10 | }, 11 | 12 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 13 | // "forwardPorts": [], 14 | 15 | // Use 'postCreateCommand' to run commands after the container is created. 16 | // "postCreateCommand": "uname -a", 17 | 18 | // Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. 19 | "remoteUser": "vscode", 20 | "features": { 21 | "docker-from-docker": "latest", 22 | "git": "os-provided" 23 | }, 24 | "customizations": { 25 | "vscode": { 26 | "extensions": [ 27 | "timonwong.shellcheck", 28 | "mads-hartmann.bash-ide-vscode", 29 | "DavidAnson.vscode-markdownlint", 30 | "denoland.vscode-deno" 31 | ] 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bin-get 2 | 3 | ![Tests](https://github.com/OhMyMndy/bin-get/actions/workflows/tests.yml/badge.svg) 4 | 5 | Get binaries from Github Releases in a convenient way! 6 | 7 | Why [Deno](https://deno.land)? 8 | 9 | - Only dependency for `bin-get.ts` would be `deno` itself (To install `curl -fsSL https://deno.land/install.sh | sudo DENO_INSTALL=/usr/local sh`) 10 | - Better error management 11 | - Use the power of TypeScript! 12 | - By default no filesystem, network or environment access 13 | - Look at that cute Deno logo! 14 | 15 | ## Usage 16 | 17 | Install package in `/usr/bin` without explicitly installing `bin-get.ts` 18 | 19 | ```bash 20 | sudo $(which deno) run --allow-all https://raw.githubusercontent.com/OhMyMndy/bin-get/main/bin-get.ts install helm/helm 21 | ``` 22 | 23 | Install package in a user accessible location: 24 | 25 | ```bash 26 | deno run --allow-all https://raw.githubusercontent.com/OhMyMndy/bin-get/main/bin-get.ts install helm/helm --directory ~/.bin 27 | 28 | ``` 29 | 30 | Or install `bin-get` 31 | 32 | ```bash 33 | deno install --allow-all https://raw.githubusercontent.com/OhMyMndy/bin-get/main/bin-get.ts 34 | ``` 35 | 36 | ## Contributing 37 | 38 | Use [Github Codespaces](https://github.com/features/codespaces)/[vscode devcontainers](https://code.visualstudio.com/docs/remote/containers) if you want (development setup is already configured!) 39 | 40 | - Add test if necessary 41 | - Makes sure tests pass before creating a pull request 42 | - Have fun! :-) 43 | 44 | ## Related projects 45 | 46 | - [deb-get](https://github.com/wimpysworld/deb-get): *deb-get makes it easy to install and update .debs published in 3rd party apt repositories or made available via direct download on websites or GitHub release pages.* 47 | 48 | ## Todo 49 | 50 | - Add code to verify binaries with checksum 51 | - Add more tests with different packages 52 | -------------------------------------------------------------------------------- /bin-get_test.ts: -------------------------------------------------------------------------------- 1 | import { exists } from "https://deno.land/std@0.149.0/fs/exists.ts"; 2 | import { assert } from "https://deno.land/std@0.149.0/testing/asserts.ts"; 3 | 4 | const defaultAllows = new Map([ 5 | ["--allow-write", "/usr/bin/,/tmp"], 6 | ["--allow-env", null], 7 | ["--allow-read", null], 8 | ["--allow-net", "api.github.com"], 9 | ]); 10 | 11 | function getAllowList(options: Map): string[] { 12 | const allowsList = defaultAllows; 13 | 14 | return Array.from( 15 | Array.from(allowsList).map(([k, v]) => { 16 | if (options.has(k)) { 17 | if (v) { 18 | v += options.get(k); 19 | } else { 20 | v = options.get(k) + ""; 21 | } 22 | } 23 | if (v) { 24 | return `${k}=${v}`; 25 | } 26 | return k; 27 | }).values(), 28 | ); 29 | } 30 | 31 | const testPackages: string[] = [ 32 | "helm/helm", 33 | "sachaos/viddy", 34 | "r-darwish/topgrade", 35 | "hadolint/hadolint", 36 | "whalebrew/whalebrew", 37 | "mutagen-io/mutagen", 38 | "mutagen-io/mutagen-compose" 39 | ]; 40 | 41 | for (const testPackage of testPackages) { 42 | Deno.test(`Test install ${testPackage}`, async () => { 43 | const p = Deno.run({ 44 | cmd: [ 45 | "deno", 46 | "run", 47 | "--allow-all", 48 | "./bin-get.ts", 49 | "install", 50 | testPackage, 51 | "--force", 52 | ], 53 | }); 54 | await p.status(); 55 | Deno.close(p.rid); 56 | }); 57 | assert( 58 | await exists(`/usr/bin/` + testPackage.split("/")[1]), 59 | `${testPackage} should be installed in /usr/bin/`, 60 | ); 61 | } 62 | 63 | Deno.test(`Test install helm with predefined allow list`, async () => { 64 | const p = Deno.run({ 65 | cmd: [ 66 | "deno", 67 | "run", 68 | ...getAllowList( 69 | new Map([["--allow-net", ",get.helm.sh"]]), 70 | ), 71 | "./bin-get.ts", 72 | "install", 73 | "helm/helm", 74 | "--force", 75 | ], 76 | }); 77 | await p.status(); 78 | Deno.close(p.rid); 79 | }); 80 | 81 | Deno.test("Test install helm with custom location", async () => { 82 | const p = Deno.run({ 83 | cmd: [ 84 | "deno", 85 | "run", 86 | "--allow-all", 87 | "./bin-get.ts", 88 | "install", 89 | "helm/helm", 90 | "--force", 91 | "--directory", 92 | "/root/.bin/", 93 | ], 94 | }); 95 | await p.status(); 96 | Deno.close(p.rid); 97 | assert( 98 | await exists("/root/.bin/helm"), 99 | `helm should be installed in /root/.bin/helm`, 100 | ); 101 | }); 102 | -------------------------------------------------------------------------------- /bin-get.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env -S deno run --allow-write=/usr/bin/,/tmp --allow-env --allow-read 2 | 3 | import { red } from "https://deno.land/x/nanocolors@0.1.12/mod.ts"; 4 | import { tgz } from "https://deno.land/x/compress@v0.4.4/mod.ts"; 5 | import { 6 | copy, 7 | readerFromStreamReader, 8 | } from "https://deno.land/std@0.174.0/streams/conversion.ts"; 9 | import { exists } from "https://deno.land/std@0.174.0/fs/mod.ts"; 10 | 11 | import yargs from "https://deno.land/x/yargs@v17.5.1-deno/deno.ts"; 12 | import { Arguments } from "https://deno.land/x/yargs@v17.5.1-deno/deno-types.ts"; 13 | import { YargsInstance } from "https://deno.land/x/yargs@v17.5.1-deno/build/lib/yargs-factory.js"; 14 | 15 | import { emptyDir, walkSync } from "https://deno.land/std@0.174.0/fs/mod.ts"; 16 | 17 | type ApiResult = { 18 | message: string | undefined; 19 | body: string | undefined; 20 | assets: Array | undefined; 21 | }; 22 | type Asset = { 23 | browser_download_url: string; 24 | name: string; 25 | type: "tgz" | "binary"; 26 | }; 27 | 28 | async function install( 29 | githubPackageName: string, 30 | version: string, 31 | installDirectory: string, 32 | force: boolean, 33 | ) { 34 | if (!githubPackageName) { 35 | console.log(red("Please provide a package name as the second argument")); 36 | Deno.exit(5); 37 | } 38 | 39 | let githubApiUrl = 40 | `https://api.github.com/repos/${githubPackageName}/releases/latest`; 41 | if (version) { 42 | githubApiUrl = 43 | `https://api.github.com/repos/${githubPackageName}/releases/tags/${version}`; 44 | } 45 | 46 | const result = await (await api(githubApiUrl)).json() as ApiResult; 47 | if (result.message) { 48 | console.log( 49 | red( 50 | `${result.message} for package ${githubPackageName} at ${githubApiUrl}`, 51 | ), 52 | ); 53 | Deno.exit(1); 54 | } 55 | if (result.assets) { 56 | appendAssetsFromBody(result); 57 | result.assets = result.assets.filter(function (asset: Asset) { 58 | return matchAssetToPlatform(asset); 59 | }); 60 | 61 | if (result.assets.length === 0) { 62 | console.log(red(`No downloadable asset found for ${githubPackageName}`)); 63 | Deno.exit(3); 64 | } 65 | // if (result.assets.length > 1) { 66 | // console.log(red(`Multiple downloadable assets found for ${githubPackageName}`)); 67 | // console.log(result.assets.map((asset) => asset.browser_download_url)); 68 | // } 69 | downloadAsset(result.assets[0], githubPackageName, installDirectory, force); 70 | } 71 | } 72 | const systemArch = Deno.build.arch.toLowerCase(); 73 | const archMap: Record = { 74 | "x86_64": ["x86_64", "amd64"], 75 | }; 76 | 77 | const os = Deno.build.os.toLowerCase(); 78 | 79 | function matchAssetToPlatform(asset: Asset): boolean { 80 | const assetName = asset.name.toLowerCase(); 81 | let architectureMatch = false; 82 | if (archMap[systemArch]) { 83 | for (const arch of archMap[systemArch]) { 84 | if (assetName.match(arch)) { 85 | architectureMatch = true; 86 | break; 87 | } 88 | } 89 | } 90 | if (!architectureMatch) { 91 | return false; 92 | } 93 | 94 | if (!assetName.match(os)) { 95 | return false; 96 | } 97 | 98 | if (assetName.match(/(tar\.gz|tgz)$/)) { 99 | asset.type = "tgz"; 100 | } 101 | 102 | if (assetName.match(/(\.asc|\.sha[0-9]+(sum)?|\.md5)$/)) { 103 | return false; 104 | } 105 | 106 | if (!asset.type) { 107 | asset.type = "binary"; 108 | } 109 | 110 | return true; 111 | } 112 | 113 | function appendAssetsFromBody(result: ApiResult) { 114 | const urls = result.body?.matchAll(/http[^)]+/g); 115 | if (!urls) { 116 | return; 117 | } 118 | 119 | for (const url of urls) { 120 | result.assets?.push({ 121 | browser_download_url: url[0], 122 | name: url[0], 123 | } as Asset); 124 | } 125 | } 126 | async function downloadAsset( 127 | asset: Asset, 128 | githubPackageName: string, 129 | installDirectory: string, 130 | force: boolean, 131 | ): Promise { 132 | verbose && console.log(asset); 133 | 134 | const packageName = githubPackageName.split("/")[1]; 135 | const tempDir = await Deno.makeTempDir(); 136 | const tempResult = await Deno.makeTempFile(); 137 | let filePath: string | null = null; 138 | 139 | const response = await api(asset.browser_download_url); 140 | const rdr = response.body?.getReader(); 141 | if (rdr) { 142 | const r = readerFromStreamReader(rdr); 143 | const f = await Deno.open(tempResult, { 144 | create: true, 145 | write: true, 146 | }); 147 | await copy(r, f); 148 | f.close(); 149 | } 150 | 151 | if (asset.type == "tgz") { 152 | console.log(`uncompressing to ${tempDir}`); 153 | await tgz.uncompress(tempResult, tempDir); 154 | // now copy the binary to the tempResult binary 155 | const files = Array.from(walkSync(tempDir, { 156 | includeDirs: false, 157 | includeFiles: true, 158 | })); 159 | for (const file of files) { 160 | if (file.name == packageName) { 161 | filePath = file.path; 162 | break; 163 | } 164 | } 165 | } else if (asset.type == "binary") { 166 | filePath = tempResult; 167 | } 168 | try { 169 | if (filePath) { 170 | console.log("Installing..."); 171 | await Deno.chmod(filePath, 0o755); 172 | await Deno.mkdir(installDirectory, { 173 | recursive: true, 174 | }); 175 | const installLocation: string = installDirectory + "/" + packageName; 176 | // @todo add --force flag to override without asking 177 | if (await exists(installLocation) && !force) { 178 | const answer = prompt( 179 | `File already exists at ${installLocation}, do you want to override? [y/N]`, 180 | ); 181 | if (answer?.toLowerCase().trim() == "n") { 182 | Deno.exit(0); 183 | } 184 | } 185 | if (await exists(installLocation)) { 186 | await Deno.remove(installLocation); 187 | } 188 | await Deno.copyFile(filePath, installLocation); 189 | } 190 | } finally { 191 | await emptyDir(tempDir); 192 | await Deno.remove(tempResult); 193 | } 194 | 195 | return true; 196 | } 197 | 198 | async function api(url: string) { 199 | const headers: Record = {}; 200 | if (url.match(/github/)) { 201 | const credentials = githubCredentials(); 202 | if (credentials) { 203 | headers["Authorization"] = "Basic " + credentials.join(":"); 204 | } 205 | } 206 | return await fetch(url, { 207 | headers: headers, 208 | }); 209 | } 210 | 211 | function githubCredentials() { 212 | const token = Deno.env.get("GITHUB_TOKEN"); 213 | const user = Deno.env.get("GITHUB_USER"); 214 | if (token && user) { 215 | return [ 216 | user, 217 | token, 218 | ]; 219 | } 220 | return null; 221 | } 222 | let verbose = false; 223 | await yargs(Deno.args) 224 | .scriptName("bin-get") 225 | .command( 226 | "install [package-version] [--yes] [--force] [--verbose] [--directory]", 227 | "install a package", 228 | (yargs: YargsInstance) => { 229 | return yargs.positional("package-version", { 230 | describe: "Github repo name (helm/helm for example)", 231 | }); 232 | }, 233 | (argv: Arguments) => { 234 | verbose = argv.verbose; 235 | if (!argv.directory) { 236 | argv.directory = "/usr/bin"; 237 | } 238 | install( 239 | argv.package, 240 | argv["package-version"], 241 | argv.directory, 242 | argv.force, 243 | ); 244 | }, 245 | ) 246 | .strictCommands() 247 | .demandCommand(1) 248 | .parse(); 249 | -------------------------------------------------------------------------------- /lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "https://deno.land/std@0.129.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74", 3 | "https://deno.land/std@0.129.0/_util/os.ts": "49b92edea1e82ba295ec946de8ffd956ed123e2948d9bd1d3e901b04e4307617", 4 | "https://deno.land/std@0.129.0/archive/tar.ts": "35ea1baddec7988cc4034765a2cee7613bc8074bd40940d3f5e98f63070a716a", 5 | "https://deno.land/std@0.129.0/async/abortable.ts": "a896ac6b0d4237bd2d2d248217cfa1f0d85ccda93cb25ebda55e33850e526be6", 6 | "https://deno.land/std@0.129.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0", 7 | "https://deno.land/std@0.129.0/async/debounce.ts": "564273ef242bcfcda19a439132f940db8694173abffc159ea34f07d18fc42620", 8 | "https://deno.land/std@0.129.0/async/deferred.ts": "bc18e28108252c9f67dfca2bbc4587c3cbf3aeb6e155f8c864ca8ecff992b98a", 9 | "https://deno.land/std@0.129.0/async/delay.ts": "cbbdf1c87d1aed8edc7bae13592fb3e27e3106e0748f089c263390d4f49e5f6c", 10 | "https://deno.land/std@0.129.0/async/mod.ts": "2240c6841157738414331f47dee09bb8c0482c5b1980b6e3234dd03515c8132f", 11 | "https://deno.land/std@0.129.0/async/mux_async_iterator.ts": "f4d1d259b0c694d381770ddaaa4b799a94843eba80c17f4a2ec2949168e52d1e", 12 | "https://deno.land/std@0.129.0/async/pool.ts": "97b0dd27c69544e374df857a40902e74e39532f226005543eabacb551e277082", 13 | "https://deno.land/std@0.129.0/async/tee.ts": "1341feb1f5b1a96f8628d0f8fc07d8c43d3813423f18a63bf1b4785568d21b1f", 14 | "https://deno.land/std@0.129.0/bytes/bytes_list.ts": "67eb118e0b7891d2f389dad4add35856f4ad5faab46318ff99653456c23b025d", 15 | "https://deno.land/std@0.129.0/bytes/equals.ts": "fc16dff2090cced02497f16483de123dfa91e591029f985029193dfaa9d894c9", 16 | "https://deno.land/std@0.129.0/bytes/mod.ts": "d3b455c0dbd4804644159d1e25946ade5ee385d2359894de49e2c6101b18b7a9", 17 | "https://deno.land/std@0.129.0/encoding/base64.ts": "c8c16b4adaa60d7a8eee047c73ece26844435e8f7f1328d74593dbb2dd58ea4f", 18 | "https://deno.land/std@0.129.0/encoding/base64url.ts": "55f9d13df02efac10c6f96169daa3e702606a64e8aa27c0295f645f198c27130", 19 | "https://deno.land/std@0.129.0/fmt/colors.ts": "30455035d6d728394781c10755351742dd731e3db6771b1843f9b9e490104d37", 20 | "https://deno.land/std@0.129.0/fmt/printf.ts": "e2c0f72146aed1efecf0c39ab928b26ae493a2278f670a871a0fbdcf36ff3379", 21 | "https://deno.land/std@0.129.0/fs/_util.ts": "0fb24eb4bfebc2c194fb1afdb42b9c3dda12e368f43e8f2321f84fc77d42cb0f", 22 | "https://deno.land/std@0.129.0/fs/ensure_dir.ts": "9dc109c27df4098b9fc12d949612ae5c9c7169507660dcf9ad90631833209d9d", 23 | "https://deno.land/std@0.129.0/fs/ensure_file.ts": "7d353e64fee3d4d1e7c6b6726a2a5e987ba402c15fb49566309042887349c545", 24 | "https://deno.land/std@0.129.0/io/buffer.ts": "bd0c4bf53db4b4be916ca5963e454bddfd3fcd45039041ea161dbf826817822b", 25 | "https://deno.land/std@0.129.0/io/files.ts": "d199ef64e918a256320ba8d8d44ae91de87c9077df8f8d6cca013f1b9fbbe285", 26 | "https://deno.land/std@0.129.0/io/readers.ts": "679471f3b9929b54393c9cd75b6bd178b4bc6d9aab5c0f1f9538f862cf4746fe", 27 | "https://deno.land/std@0.129.0/io/types.d.ts": "01f60ae7ec02675b5dbed150d258fc184a78dfe5c209ef53ba4422b46b58822c", 28 | "https://deno.land/std@0.129.0/io/util.ts": "078da53bba767bec0d45f7da44411f6dbf269e51ef7fcfea5e3714e04681c674", 29 | "https://deno.land/std@0.129.0/node/_buffer.d.ts": "90f674081428a61978b6d481c5f557ff743a3f4a85d7ae113caab48fdf5b8a63", 30 | "https://deno.land/std@0.129.0/node/_buffer.mjs": "f4a7df481d4eed06dc0151b833177d8ef74fc3a96dd4d2b073e690b6ced9474d", 31 | "https://deno.land/std@0.129.0/node/_core.ts": "568d277be2e086af996cbdd599fec569f5280e9a494335ca23ad392b130d7bb9", 32 | "https://deno.land/std@0.129.0/node/_events.d.ts": "5b6d1a7931eb692d3b64018e7a3f57310284d3bf467aa2e6371c65bb626c1859", 33 | "https://deno.land/std@0.129.0/node/_events.mjs": "c0e3e0e290a8b81fee9d2973a529c8dcd5ebb4406782d1f91085274e2cb8490f", 34 | "https://deno.land/std@0.129.0/node/_fixed_queue.ts": "455b3c484de48e810b13bdf95cd1658ecb1ba6bcb8b9315ffe994efcde3ba5f5", 35 | "https://deno.land/std@0.129.0/node/_next_tick.ts": "64c361f6bca21df2a72dd77b84bd49d80d97a694dd3080703bc78f52146351d1", 36 | "https://deno.land/std@0.129.0/node/_process/exiting.ts": "bc9694769139ffc596f962087155a8bfef10101d03423b9dcbc51ce6e1f88fce", 37 | "https://deno.land/std@0.129.0/node/_util/_util_callbackify.ts": "79928ad80df3e469f7dcdb198118a7436d18a9f6c08bd7a4382332ad25a718cf", 38 | "https://deno.land/std@0.129.0/node/_utils.ts": "c2c352e83c4c96f5ff994b1c8246bff2abcb21bfc3f1c06162cb3af1d201e615", 39 | "https://deno.land/std@0.129.0/node/buffer.ts": "fbecbf3f237fa49bec96e97ecf56a7b92d48037b3d11219288e68943cc921600", 40 | "https://deno.land/std@0.129.0/node/events.ts": "a1d40fc0dbccc944379ef968b80ea08f9fce579e88b5057fdb64e4f0812476dd", 41 | "https://deno.land/std@0.129.0/node/internal/buffer.mjs": "6662fe7fe517329453545be34cea27a24f8ccd6d09afd4f609f11ade2b6dfca7", 42 | "https://deno.land/std@0.129.0/node/internal/crypto/keys.ts": "16ce7b15a9fc5e4e3dee8fde75dae12f3d722558d5a1a6e65a9b4f86d64a21e9", 43 | "https://deno.land/std@0.129.0/node/internal/crypto/util.mjs": "1de55a47fdbed6721b467a77ba48fdd1550c10b5eee77bbdb602eaffee365a5e", 44 | "https://deno.land/std@0.129.0/node/internal/error_codes.ts": "ac03c4eae33de3a69d6c98e8678003207eecf75a6900eb847e3fea3c8c9e6d8f", 45 | "https://deno.land/std@0.129.0/node/internal/errors.ts": "0d3a1eb03b654beb29b8354759a6902f45a840d4f957e9a3c632a24ce4c32632", 46 | "https://deno.land/std@0.129.0/node/internal/hide_stack_frames.ts": "a91962ec84610bc7ec86022c4593cdf688156a5910c07b5bcd71994225c13a03", 47 | "https://deno.land/std@0.129.0/node/internal/normalize_encoding.mjs": "3779ec8a7adf5d963b0224f9b85d1bc974a2ec2db0e858396b5d3c2c92138a0a", 48 | "https://deno.land/std@0.129.0/node/internal/util.mjs": "684653b962fae84fd2bc08997291b1a50bed09b95dcfa7d35e3c4143163e879a", 49 | "https://deno.land/std@0.129.0/node/internal/util/comparisons.ts": "680b55fe8bdf1613633bc469fa0440f43162c76dbe36af9aa2966310e1bb9f6e", 50 | "https://deno.land/std@0.129.0/node/internal/util/debuglog.ts": "99e91bdf26f6c67861031f684817e1705a5bc300e81346585b396f413387edfb", 51 | "https://deno.land/std@0.129.0/node/internal/util/inspect.mjs": "d1c2569c66a3dab45eec03208f22ad4351482527859c0011a28a6c797288a0aa", 52 | "https://deno.land/std@0.129.0/node/internal/util/types.ts": "b2dacb8f1f5d28a51c4da5c5b75172b7fcf694073ce95ca141323657e18b0c60", 53 | "https://deno.land/std@0.129.0/node/internal/validators.mjs": "a7e82eafb7deb85c332d5f8d9ffef052f46a42d4a121eada4a54232451acc49a", 54 | "https://deno.land/std@0.129.0/node/internal_binding/_libuv_winerror.ts": "801e05c2742ae6cd42a5f0fd555a255a7308a65732551e962e5345f55eedc519", 55 | "https://deno.land/std@0.129.0/node/internal_binding/_node.ts": "e4075ba8a37aef4eb5b592c8e3807c39cb49ca8653faf8e01a43421938076c1b", 56 | "https://deno.land/std@0.129.0/node/internal_binding/_utils.ts": "1c50883b5751a9ea1b38951e62ed63bacfdc9d69ea665292edfa28e1b1c5bd94", 57 | "https://deno.land/std@0.129.0/node/internal_binding/_winerror.ts": "8811d4be66f918c165370b619259c1f35e8c3e458b8539db64c704fbde0a7cd2", 58 | "https://deno.land/std@0.129.0/node/internal_binding/buffer.ts": "722c62b85f966e0777b2d98c021b60e75d7f2c2dabc43413ef37d60dbd13a5d9", 59 | "https://deno.land/std@0.129.0/node/internal_binding/constants.ts": "aff06aac49eda4234bd3a2b0b8e1fbfc67824e281c532ff9960831ab503014cc", 60 | "https://deno.land/std@0.129.0/node/internal_binding/string_decoder.ts": "5cb1863763d1e9b458bc21d6f976f16d9c18b3b3f57eaf0ade120aee38fba227", 61 | "https://deno.land/std@0.129.0/node/internal_binding/types.ts": "4c26fb74ba2e45de553c15014c916df6789529a93171e450d5afb016b4c765e7", 62 | "https://deno.land/std@0.129.0/node/internal_binding/util.ts": "90364292e2bd598ab5d105b48ca49817b6708f2d1d9cbaf08b2b3ab5ca4c90a7", 63 | "https://deno.land/std@0.129.0/node/internal_binding/uv.ts": "3821bc5e676d6955d68f581988c961d77dd28190aba5a9c59f16001a4deb34ba", 64 | "https://deno.land/std@0.129.0/node/util.ts": "7fd6933b37af89a8e64d73dc6ee1732455a59e7e6d0965311fbd73cd634ea630", 65 | "https://deno.land/std@0.129.0/node/util/types.mjs": "f9288198cacd374b41bae7e92a23179d3160f4c0eaf14e19be3a4e7057219a60", 66 | "https://deno.land/std@0.129.0/path/_constants.ts": "df1db3ffa6dd6d1252cc9617e5d72165cd2483df90e93833e13580687b6083c3", 67 | "https://deno.land/std@0.129.0/path/_interface.ts": "ee3b431a336b80cf445441109d089b70d87d5e248f4f90ff906820889ecf8d09", 68 | "https://deno.land/std@0.129.0/path/_util.ts": "c1e9686d0164e29f7d880b2158971d805b6e0efc3110d0b3e24e4b8af2190d2b", 69 | "https://deno.land/std@0.129.0/path/common.ts": "bee563630abd2d97f99d83c96c2fa0cca7cee103e8cb4e7699ec4d5db7bd2633", 70 | "https://deno.land/std@0.129.0/path/glob.ts": "cb5255638de1048973c3e69e420c77dc04f75755524cb3b2e160fe9277d939ee", 71 | "https://deno.land/std@0.129.0/path/mod.ts": "4275129bb766f0e475ecc5246aa35689eeade419d72a48355203f31802640be7", 72 | "https://deno.land/std@0.129.0/path/posix.ts": "663e4a6fe30a145f56aa41a22d95114c4c5582d8b57d2d7c9ed27ad2c47636bb", 73 | "https://deno.land/std@0.129.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", 74 | "https://deno.land/std@0.129.0/path/win32.ts": "e7bdf63e8d9982b4d8a01ef5689425c93310ece950e517476e22af10f41a136e", 75 | "https://deno.land/std@0.129.0/streams/conversion.ts": "712585bfa0172a97fb68dd46e784ae8ad59d11b88079d6a4ab098ff42e697d21", 76 | "https://deno.land/std@0.129.0/testing/_diff.ts": "9d849cd6877694152e01775b2d93f9d6b7aef7e24bfe3bfafc4d7a1ac8e9f392", 77 | "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", 78 | "https://deno.land/std@0.149.0/_deno_unstable.ts": "be3276fd42cffb49f51b705c4b0aa8656aaf2a34be22d769455c8e50ea38e51a", 79 | "https://deno.land/std@0.149.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74", 80 | "https://deno.land/std@0.149.0/_util/os.ts": "3b4c6e27febd119d36a416d7a97bd3b0251b77c88942c8f16ee5953ea13e2e49", 81 | "https://deno.land/std@0.149.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4", 82 | "https://deno.land/std@0.149.0/bytes/equals.ts": "3c3558c3ae85526f84510aa2b48ab2ad7bdd899e2e0f5b7a8ffc85acb3a6043a", 83 | "https://deno.land/std@0.149.0/bytes/mod.ts": "763f97d33051cc3f28af1a688dfe2830841192a9fea0cbaa55f927b49d49d0bf", 84 | "https://deno.land/std@0.149.0/fmt/colors.ts": "6f9340b7fb8cc25a993a99e5efc56fe81bb5af284ff412129dd06df06f53c0b4", 85 | "https://deno.land/std@0.149.0/fmt/printf.ts": "e2c0f72146aed1efecf0c39ab928b26ae493a2278f670a871a0fbdcf36ff3379", 86 | "https://deno.land/std@0.149.0/fs/_util.ts": "2cf50bfb1081c2d5f2efec10ac19abbc2baf478e51cd1b057d0da2f30585b6ba", 87 | "https://deno.land/std@0.149.0/fs/copy.ts": "9248d1492599957af8c693ceb10a432b09f0b0b61c60a4d6aff29b0c7d3a17b3", 88 | "https://deno.land/std@0.149.0/fs/empty_dir.ts": "7274d87160de34cbed0531e284df383045cf43543bbeadeb97feac598bd8f3c5", 89 | "https://deno.land/std@0.149.0/fs/ensure_dir.ts": "9dc109c27df4098b9fc12d949612ae5c9c7169507660dcf9ad90631833209d9d", 90 | "https://deno.land/std@0.149.0/fs/ensure_file.ts": "7d353e64fee3d4d1e7c6b6726a2a5e987ba402c15fb49566309042887349c545", 91 | "https://deno.land/std@0.149.0/fs/ensure_link.ts": "489e23df9fe3e6636048b5830ddf0f111eb29621eb85719255ad9bd645f3471b", 92 | "https://deno.land/std@0.149.0/fs/ensure_symlink.ts": "88dc83de1bc90ed883dd458c2d2eae3d5834a4617d12925734836e1f0803b274", 93 | "https://deno.land/std@0.149.0/fs/eol.ts": "b92f0b88036de507e7e6fbedbe8f666835ea9dcbf5ac85917fa1fadc919f83a5", 94 | "https://deno.land/std@0.149.0/fs/exists.ts": "cb734d872f8554ea40b8bff77ad33d4143c1187eac621a55bf37781a43c56f6d", 95 | "https://deno.land/std@0.149.0/fs/expand_glob.ts": "143400698822117018c3646f4b7d2d418bc5cdede1ec837a8c70013b7711c761", 96 | "https://deno.land/std@0.149.0/fs/mod.ts": "7111008fcdf935f1bfdf07f881f4d1e152063d146025e9622ae12d1fd5f4d7b8", 97 | "https://deno.land/std@0.149.0/fs/move.ts": "0573cedcf583f09a9494f2dfccbf67de68a93629942d6b5e6e74a9e45d4e8a2e", 98 | "https://deno.land/std@0.149.0/fs/walk.ts": "6ce8d87fbaeda23383e979599ad27f3f94b3e5ff0c0cd976b5fc5c2aa0df7d92", 99 | "https://deno.land/std@0.149.0/io/buffer.ts": "bd0c4bf53db4b4be916ca5963e454bddfd3fcd45039041ea161dbf826817822b", 100 | "https://deno.land/std@0.149.0/io/types.d.ts": "0cae3a62da7a37043661746c65c021058bae020b54e50c0e774916e5d4baee43", 101 | "https://deno.land/std@0.149.0/path/_constants.ts": "df1db3ffa6dd6d1252cc9617e5d72165cd2483df90e93833e13580687b6083c3", 102 | "https://deno.land/std@0.149.0/path/_interface.ts": "ee3b431a336b80cf445441109d089b70d87d5e248f4f90ff906820889ecf8d09", 103 | "https://deno.land/std@0.149.0/path/_util.ts": "c1e9686d0164e29f7d880b2158971d805b6e0efc3110d0b3e24e4b8af2190d2b", 104 | "https://deno.land/std@0.149.0/path/common.ts": "bee563630abd2d97f99d83c96c2fa0cca7cee103e8cb4e7699ec4d5db7bd2633", 105 | "https://deno.land/std@0.149.0/path/glob.ts": "cb5255638de1048973c3e69e420c77dc04f75755524cb3b2e160fe9277d939ee", 106 | "https://deno.land/std@0.149.0/path/mod.ts": "4945b430b759b0b3d98f2a278542cbcf95e0ad2bd8eaaed3c67322b306b2b346", 107 | "https://deno.land/std@0.149.0/path/posix.ts": "c1f7afe274290ea0b51da07ee205653b2964bd74909a82deb07b69a6cc383aaa", 108 | "https://deno.land/std@0.149.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", 109 | "https://deno.land/std@0.149.0/path/win32.ts": "bd7549042e37879c68ff2f8576a25950abbfca1d696d41d82c7bca0b7e6f452c", 110 | "https://deno.land/std@0.149.0/streams/conversion.ts": "fc3db02026183da795fa32ac7549868e9f19c75ba029d4b4c3739af62b48517a", 111 | "https://deno.land/std@0.149.0/testing/_diff.ts": "029a00560b0d534bc0046f1bce4bd36b3b41ada3f2a3178c85686eb2ff5f1413", 112 | "https://deno.land/std@0.149.0/testing/_format.ts": "0d8dc79eab15b67cdc532826213bbe05bccfd276ca473a50a3fc7bbfb7260642", 113 | "https://deno.land/std@0.149.0/testing/asserts.ts": "0ee58a557ac764e762c62bb21f00e7d897e3919e71be38b2d574fb441d721005", 114 | "https://deno.land/x/cliui@v7.0.4-deno/build/lib/index.d.ts": "4f04923352ce24027ad6fe25c85249e0b0cc5c29fe18d62024d004c59d9e41ee", 115 | "https://deno.land/x/cliui@v7.0.4-deno/build/lib/index.js": "fb6030c7b12602a4fca4d81de3ddafa301ba84fd9df73c53de6f3bdda7b482d5", 116 | "https://deno.land/x/cliui@v7.0.4-deno/build/lib/string-utils.js": "b3eb9d2e054a43a3064af17332fb1839a7dadb205c5371af4789616afb1a117f", 117 | "https://deno.land/x/cliui@v7.0.4-deno/deno.ts": "d07bc3338661f8011e3a5fd215061d17a52107a5383c29f40ce0c1ecb8bb8cc3", 118 | "https://deno.land/x/compress@v0.4.4/deps.ts": "096395daebc7ed8a18f0484e4ffcc3a7f70e50946735f7df9611a7fcfd8272cc", 119 | "https://deno.land/x/compress@v0.4.4/gzip/gzip.ts": "4bf22e9cd3368332928324dd9443ef72cabd05e9234e5a37dd7b3517d50e945e", 120 | "https://deno.land/x/compress@v0.4.4/gzip/gzip_file.ts": "b044ec0df4266c084baa033a4ab5394882e44a86d09d5616636467dcb39c671d", 121 | "https://deno.land/x/compress@v0.4.4/gzip/gzip_stream.ts": "6781cf0e47648e3e5631cba4cc2cd018a24935ce09fdaa86e0cabcf78b5012df", 122 | "https://deno.land/x/compress@v0.4.4/gzip/mod.ts": "4ade8edbe01b54a84f289351e137ebdfc040a74cd616636770cf1724fbf522d1", 123 | "https://deno.land/x/compress@v0.4.4/gzip/writer_gunzip.ts": "5aba34394820b835c414048ac2e15f52d443f1f773ebe61fd2517c938572d616", 124 | "https://deno.land/x/compress@v0.4.4/gzip/writer_gzip.ts": "c7aad0c51ab4f5952c068088186339cfc79a2ee1e057d6e16731b1175f342645", 125 | "https://deno.land/x/compress@v0.4.4/interface.ts": "fc5f87bd208ab8a03a1f65972b11781967c3d21c3d756fe9ae99ca98e10e5780", 126 | "https://deno.land/x/compress@v0.4.4/mod.ts": "ae8b15826334021583a5bd1978c63840f85156ea3635f5941bfc6733aad247e5", 127 | "https://deno.land/x/compress@v0.4.4/tar/mod.ts": "6d9073005e678479908047cbe9e4716e484f80d1f2a1e15d3d6ac92213ffaeba", 128 | "https://deno.land/x/compress@v0.4.4/tgz/mod.ts": "397620ab5228b8df53a44f2ba1228bcac61e5ded44cbd89b7d4a3e2220583fae", 129 | "https://deno.land/x/compress@v0.4.4/utils/uint8.ts": "9c82e09c065f1f4bc648e3b14df441b43a7960fc7bdb29e9fb8d3a69c7e9d425", 130 | "https://deno.land/x/compress@v0.4.4/zlib/deflate.ts": "e1e3b406dcc3e20021e53cde427b4b9ced752b72df820de73fec17c6e5ba999e", 131 | "https://deno.land/x/compress@v0.4.4/zlib/inflate.ts": "618cc3dd25d202bf6b89d92f3ab2865e7495884cafce950638c77cbc1537aeb1", 132 | "https://deno.land/x/compress@v0.4.4/zlib/mod.ts": "4dca9c1e934b7ab27f31c318abd7bfd39b09be96fd76ba27bd46f3a4e73b4ad0", 133 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/adler32.ts": "e34c7596d63a655755c4b0a44a40d4f9c1d1c4d3b891e5c1f3f840f8939e1940", 134 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/crc32.ts": "b9bc4adaf327d32585205d1176bd52f6453c06dd1040544611d4c869e638119c", 135 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/deflate.ts": "8d1dd88630279313e50deed4fe5feefe8128307cc48fa560e659b5234ab09d83", 136 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/gzheader.ts": "11e6da7383447aae9791308dc2350a809fa341a876a2da396b03a2a31408c20c", 137 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/inffast.ts": "282daf5ea16bb876d26e342f3c24fe1a8ec84640e713a970b02232955a853f86", 138 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/inflate.ts": "76751c1a5b18d70a929fa31ce4959db0bde1b9097bfa1b5ea3b4d1fba2ab92fa", 139 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/inftrees.ts": "8a6d765a5c42bf3b6990060cabbe52e88493f8ce6d082e6e35d97756914cfb8e", 140 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/messages.ts": "c82229bd67ccc3b6162f3aca1c5e7f936e546aa91ac9a9ac4fcfefc3a9dc5ac8", 141 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/status.ts": "5987864d2d43d59bbbfa2e6ef4d5a07284c1d10489cc5843ddf41ac547957ac3", 142 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/trees.ts": "6b65a767646e031e87e7b725ffad0c511fe701f393a01652e1e7ee8884f60fee", 143 | "https://deno.land/x/compress@v0.4.4/zlib/zlib/zstream.ts": "c110fd5919235e317d64933852e24a1bba0126202be592e90e58f7b19315ad93", 144 | "https://deno.land/x/crc32@v0.2.0/mod.ts": "de7a3fa2d4ef24b96fc21e1cc4d2d65d1d2b1dcea92f63960e3e11bfa82df0fa", 145 | "https://deno.land/x/escalade@v3.0.3/sync.ts": "493bc66563292c5c10c4a75a467a5933f24dad67d74b0f5a87e7b988fe97c104", 146 | "https://deno.land/x/y18n@v5.0.0-deno/build/lib/index.d.ts": "11f40d97041eb271cc1a1c7b296c6e7a068d4843759575e7416f0d14ebf8239c", 147 | "https://deno.land/x/y18n@v5.0.0-deno/build/lib/index.js": "92c4624714aa508d33c6d21c0b0ffa072369a8b306e5f8c7727662f570bbd026", 148 | "https://deno.land/x/y18n@v5.0.0-deno/deno.ts": "80997f0709a0b43d29931e2b33946f2bbc32b13fd82f80a5409628455427e28d", 149 | "https://deno.land/x/y18n@v5.0.0-deno/lib/platform-shims/deno.ts": "8fa2c96ac03734966260cfd2c5bc240e41725c913e5b64a0297aede09f52b39d", 150 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/argsert.js": "eb085555452eac3ff300935994a42f35d16e04cf698cb775cb5ad4f5653c0627", 151 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/command.js": "5226c9b9ae869029e7135064f72a3d0e98fd798a3d8fe323c97a001406f3b5a4", 152 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/completion-templates.js": "d9bbed244af4394b786f8abce9efbbdc3777a73458ebd7b6bf23b2495ac11027", 153 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/completion.js": "685a0af1686d6d40dc68564be1cde55c78d803821c236d38af67275482d7c99b", 154 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/middleware.js": "6ab9c953a83264739aa50d7fa6b1ab693500336dfd593b9958865e12beb8bdeb", 155 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/parse-command.js": "327242c0afae207b7aefa13133439e3b321d7db4229febc5b7bd5285770ac7f7", 156 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/typings/common-types.js": "9618b81a86acb88a61fd9988e9bc3ec21c5250d94fc2231ba7d898e71500789d", 157 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/usage.js": "cc921e3ff450df820df602b3a719c83cf4deb2059b26a87f758fbdb6845e63bf", 158 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/apply-extends.js": "64640dce92669705abead3bdbe2c46c8318c8623843a55e4726fb3c55ff9dd1d", 159 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/is-promise.js": "be45baa3090c5106dd4e442cceef6b357a268783a2ee28ec10fe131a8cd8db72", 160 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/levenshtein.js": "d8638efc3376b5f794b1c8df6ef4f3d484b29d919127c7fdc242400e3cfded91", 161 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/maybe-async-result.js": "31cf4026279e14c87d16faa14ac758f35c8cc5795d29393c5ce07120f5a3caf6", 162 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/obj-filter.js": "5523fb2288d1e86ed48c460e176770b49587554df4ae2405b468c093786b040b", 163 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/set-blocking.js": "6fa8ffc3299f456e42902736bae35fbc1f2dc96b3905a02ba9629f5bd9f80af1", 164 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/utils/which-module.js": "9267633b2c9f8990b2c699101b641e59ae59932e0dee5270613c0508bfa13c5d", 165 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/validation.js": "af040834cb9201d4238bbeb8f673eb2ebaff9611857270524a7c86dfcf2ca51b", 166 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/yargs-factory.js": "b6a0d809e47b36ad63668b1917e979c4da87ab02a9a9004450781b2ab28b1010", 167 | "https://deno.land/x/yargs@v17.5.1-deno/build/lib/yerror.js": "9729aaa8bce1a0d00c57f470efb2ad76ad2988661bb48f3769e496a3435b4462", 168 | "https://deno.land/x/yargs@v17.5.1-deno/deno-types.ts": "62f5c61899c6da491890c8c84fd9580cfbfa2a83f5a70f6dc74727bbfb148623", 169 | "https://deno.land/x/yargs@v17.5.1-deno/deno.ts": "f3df0bfd08ba367ec36dc59ef6cab1a391ace49ad44387ec5fe5d76289af08af", 170 | "https://deno.land/x/yargs@v17.5.1-deno/lib/platform-shims/deno.ts": "14c4db47fc5c0f504aa9789fda73781b63b93db53fd2c57be6930b915106da5a", 171 | "https://deno.land/x/yargs_parser@v20.2.4-deno/build/lib/string-utils.js": "12fc056b23703bc370aae5b179dc5abee53fca277abc30eaf76f78d2546d6413", 172 | "https://deno.land/x/yargs_parser@v20.2.4-deno/build/lib/tokenize-arg-string.js": "7e0875b11795b8e217386e45f14b24a6e501ebbc62e15aa469aa8829d4d0ee61", 173 | "https://deno.land/x/yargs_parser@v20.2.4-deno/build/lib/yargs-parser-types.d.ts": "434deb76c6632b3b6cbc4c6f153f8aca04e06055ae9c6b24b40218cbc42688d9", 174 | "https://deno.land/x/yargs_parser@v20.2.4-deno/build/lib/yargs-parser.js": "453200a7dfbb002e605d8009b7dad30f2b1d93665e046ab89c073a4fe63dfd48", 175 | "https://deno.land/x/yargs_parser@v20.2.4-deno/deno.ts": "ad53c0c82c3982c4fc5be9472384b259e0a32ce1f7ae0f68de7b2445df5642fc", 176 | "https://esm.sh/nanocolors@0.1.12": "c8839b60ed89922e21b21ccc4065a9d374674ae01700d6acdcbda20bccb8f370", 177 | "https://esm.sh/v53/nanocolors@0.1.12/deno/nanocolors.js": "31f67e5ad1c71450357597e6a326ccaba49e6fdbf3c7b789cb4416367eafad27", 178 | "https://esm.sh/v53/nanocolors@0.1.12/index.d.ts": "95c84dd8f2305620305ef451665aa719b8fc49ea36f67121b96891aafa94cc43", 179 | "https://esm.sh/v53/node_events.js": "507b1d9405b8384264d683e0508416c4be85498e65d32d0fcf64d6d353a30151", 180 | "https://esm.sh/v53/node_process.js": "5d7775669070d8ad8a4f9c97bb8acf6c56afca1b56187b6b50f026091c2467a3", 181 | "https://esm.sh/v53/tty-browserify@0.0.1/deno/tty-browserify.js": "642222a31c43ca9ef8c2c320aa349d62eb1ed6ee59ef04fe4cf0fd21f56bddc8" 182 | } 183 | --------------------------------------------------------------------------------