├── .gitattributes ├── deno.json ├── .github ├── workflows │ ├── ci.yml │ ├── denopendabot.yml │ ├── release.yml │ └── test.yml ├── dependabot.yml └── FUNDING.yml ├── LICENSE ├── README.md ├── test.ts ├── nublar.ts └── deno.lock /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /deno.json: -------------------------------------------------------------------------------- 1 | { 2 | "tasks": { 3 | "cache": "deno cache *.ts --lock", 4 | "lock": "deno task -q cache --lock-write && git add deno.lock", 5 | "test": "deno test --allow-read --allow-write --allow-env --allow-net --allow-run", 6 | "run": "deno run --allow-read --allow-write --allow-env --allow-net ./nublar.ts", 7 | "dev": "deno task -q lock && deno fmt && deno lint && deno task test --fail-fast" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths-ignore: 8 | - '**.md' 9 | workflow_dispatch: 10 | 11 | env: 12 | account_id: ${{ secrets.ACCOUNT_ID }} 13 | api_token: ${{ secrets.API_TOKEN }} 14 | 15 | jobs: 16 | test: 17 | name: Test 18 | uses: ./.github/workflows/test.yml 19 | 20 | release: 21 | name: Release 22 | if: github.repository_owner == 'hasundue' 23 | needs: test 24 | uses: ./.github/workflows/release.yml 25 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "github-actions" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: hasundue 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/workflows/denopendabot.yml: -------------------------------------------------------------------------------- 1 | name: Denopendabot 2 | 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: "0 0 * * *" # modify to your convenient time 7 | 8 | jobs: 9 | run: 10 | name: Run App 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | # dispatch a `denopendabot_run` repository event 15 | - name: Dispatch Run 16 | uses: hasundue/denopendabot@0.18.2 # @denopendabot hasundue/denopendabot 17 | with: 18 | mode: app 19 | # or 'action' if you want run Denopendabot locally 20 | 21 | # branch to update dependencies 22 | base-branch: main 23 | 24 | # branch for Denopendabot to commit changes 25 | working-branch: denopendabot 26 | 27 | # labels for pull requests 28 | labels: dependencies 29 | 30 | # merge pull requests automatically if all the checks are passing 31 | auto-merge: any 32 | 33 | # only update specific files 34 | # include: mod.ts deps.ts 35 | 36 | # exclude specific files 37 | # exclude: deno.json LICENSE 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Shun Ueda 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # :national_park: nublar 2 | 3 | 4 | 5 | ![CI](https://github.com/hasundue/nublar/actions/workflows/ci.yml/badge.svg) 6 | [![codecov](https://codecov.io/gh/hasundue/nublar/branch/main/graph/badge.svg?token=7BS432RAXB)](https://codecov.io/gh/hasundue/nublar) 7 | ![denoland/deno](https://img.shields.io/badge/Deno-v1.39.2-informational?logo=deno) 8 | 9 | 10 | 11 | `nublar` is a command-line tool to manage your scripts installed via 12 | `deno install`. 13 | 14 | ## :passenger_ship: Installation 15 | 16 | ```sh 17 | deno install --global --allow-read --allow-write --allow-env --allow-net https://deno.land/x/nublar@0.5.0/nublar.ts 18 | ``` 19 | 20 | ## :world_map: Usage 21 | 22 | ```sh 23 | # list all scripts installed in your environment 24 | $ nublar list 25 | nublar 0.5.0 # @denopendabot hasundue/nublar 26 | molt 0.7.1 27 | 28 | # check updates for them 29 | $ nublar update --check 30 | Found molt 0.7.1 => 0.8.0 31 | 32 | # update all outdated scripts 33 | $ nublar update 34 | Updated molt 0.7.1 => 0.8.0 35 | 36 | # or you may specify scripts to be updated 37 | $ nublar update molt 38 | ``` 39 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | workflow_call: 5 | outputs: 6 | released: 7 | description: true if released 8 | value: ${{ jobs.release.outputs.released }} 9 | workflow_dispatch: 10 | 11 | jobs: 12 | release: 13 | name: Release 14 | runs-on: ubuntu-latest 15 | 16 | outputs: 17 | released: ${{ steps.run.outputs.released }} 18 | 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v4 22 | 23 | - name: Setup Deno 24 | uses: denoland/setup-deno@v2 25 | with: 26 | deno-version: v1.39.2 # @denopendabot denoland/deno 27 | 28 | - name: Run denomantic-release 29 | id: run 30 | run: > 31 | deno run -q --allow-env --allow-net --allow-write 32 | https://deno.land/x/denomantic_release@0.10.3/cli.ts 33 | ${{ github.repository }} 34 | --token ${{ secrets.GITHUB_TOKEN }} 35 | 36 | - name: Run Denopendabot 37 | if: ${{ steps.run.outputs.needs_update }} 38 | uses: hasundue/denopendabot@0.18.2 39 | with: 40 | mode: app 41 | release: ${{ steps.run.outputs.version }} 42 | auto-merge: any 43 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | paths-ignore: 8 | - '**.md' 9 | workflow_call: 10 | workflow_dispatch: 11 | 12 | jobs: 13 | test: 14 | name: Test 15 | strategy: 16 | matrix: 17 | os: 18 | - ubuntu-latest 19 | - windows-latest 20 | - macos-latest 21 | 22 | runs-on: ${{ matrix.os }} 23 | 24 | steps: 25 | - name: Checkout 26 | uses: actions/checkout@v4 27 | 28 | - name: Setup Deno 29 | uses: denoland/setup-deno@v2 30 | with: 31 | deno-version: v1.39.2 # @denopendabot denoland/deno 32 | 33 | - name: Format 34 | run: deno fmt --check 35 | 36 | - name: Lint 37 | run: deno lint 38 | 39 | - name: Test 40 | if: ${{ matrix.os != 'ubuntu-latest' }} 41 | run: deno task test --quiet 42 | 43 | - name: Test with coverage analysis 44 | if: ${{ matrix.os == 'ubuntu-latest' }} 45 | run: deno task test --quiet --coverage=./coverage 46 | 47 | - name: Create coverage report 48 | if: ${{ matrix.os == 'ubuntu-latest' }} 49 | run: deno coverage ./coverage --lcov > ./coverage.lcov 50 | 51 | - name: Upload to Codecov 52 | if: ${{ matrix.os == 'ubuntu-latest' }} 53 | uses: codecov/codecov-action@v5 54 | with: 55 | file: ./coverage.lcov 56 | fail_ci_if_error: false 57 | -------------------------------------------------------------------------------- /test.ts: -------------------------------------------------------------------------------- 1 | import { 2 | assertEquals, 3 | assertMatch, 4 | assertNotMatch, 5 | } from "https://deno.land/std@0.211.0/assert/mod.ts"; 6 | import { $, CommandBuilder } from "https://deno.land/x/dax@0.36.0/mod.ts"; 7 | 8 | const isWindows = Deno.build.os === "windows"; 9 | const cwd = Deno.cwd(); 10 | const commandBuilder = new CommandBuilder(); 11 | 12 | async function installScripts(specs: [name: string, url: string][]) { 13 | for (const spec of specs) { 14 | await $`deno install -A --root . --name ${spec[0]} ${spec[1]}`.text(); 15 | } 16 | } 17 | 18 | async function createTestEnv() { 19 | await installScripts([ 20 | ["nublar", "https://deno.land/x/nublar/nublar.ts"], 21 | ["udd", "https://deno.land/x/udd@0.5.0/main.ts"], // @denopendabot ignore 22 | ]); 23 | await $`touch bin/deno`; 24 | } 25 | 26 | function withTestEnv( 27 | name: string, 28 | fn: () => void | Promise, 29 | ) { 30 | Deno.test(name, async () => { 31 | const tempDir = await Deno.makeTempDir(); 32 | try { 33 | Deno.chdir(tempDir); 34 | await createTestEnv(); 35 | await fn(); 36 | } finally { 37 | Deno.chdir(cwd); 38 | await Deno.remove(tempDir, { recursive: true }); 39 | } 40 | }); 41 | } 42 | 43 | async function nublar(args: string) { 44 | return await commandBuilder 45 | .command(`deno run -A ${cwd}/nublar.ts ${args}`) 46 | .text(); 47 | } 48 | 49 | withTestEnv("createTestEnv", async () => { 50 | const expected = isWindows 51 | ? ["deno", "nublar", "nublar.cmd", "udd", "udd.cmd"] 52 | : ["deno", "nublar", "udd"]; 53 | assertEquals( 54 | await $`ls bin`.lines(), 55 | expected, 56 | ); 57 | }); 58 | 59 | withTestEnv("nublar", async () => { 60 | assertMatch( 61 | await nublar("--help"), 62 | /nublar/, 63 | ); 64 | }); 65 | 66 | withTestEnv("list", async () => { 67 | const result = await nublar("list --root ."); 68 | assertMatch(result, /nublar/); 69 | assertMatch(result, /udd/); 70 | assertNotMatch(result, /deno/); 71 | }); 72 | 73 | withTestEnv("update --check", async () => { 74 | const result = await nublar("update --root . --check"); 75 | assertMatch(result, /nublar/); 76 | assertMatch(result, /udd/); 77 | }); 78 | 79 | withTestEnv("update --check udd", async () => { 80 | const result = await nublar("update --root . --check udd"); 81 | assertNotMatch(result, /nublar/); 82 | assertMatch(result, /udd/); 83 | }); 84 | 85 | withTestEnv("update --check nublar", async () => { 86 | const result = await nublar("update --root . --check nublar"); 87 | assertMatch(result, /nublar/); 88 | assertNotMatch(result, /udd/); 89 | }); 90 | 91 | withTestEnv("update", async () => { 92 | const result = await nublar("update --root ."); 93 | assertMatch(result, /nublar/); 94 | assertMatch(result, /udd/); 95 | }); 96 | -------------------------------------------------------------------------------- /nublar.ts: -------------------------------------------------------------------------------- 1 | import { join, resolve } from "https://deno.land/std@0.211.0/path/mod.ts"; 2 | import { ensureDir } from "https://deno.land/std@0.211.0/fs/ensure_dir.ts"; 3 | import { Command } from "https://deno.land/x/cliffy@v0.25.7/command/mod.ts"; 4 | import { Table } from "https://deno.land/x/cliffy@v0.25.7/table/mod.ts"; 5 | import dir from "https://deno.land/x/dir@1.5.2/mod.ts"; 6 | import { 7 | DependencyKind, 8 | DependencySpec, 9 | stringify, 10 | } from "jsr:@molt/core@0.19.8/specs"; 11 | import { get } from "jsr:@molt/core@0.19.0/updates"; 12 | import { assert } from "jsr:@std/assert@1"; 13 | 14 | new Command() 15 | .name("nublar") 16 | .version("0.5.0") // @denopendabot hasundue/nublar 17 | .description( 18 | "A command-line tool to manage your Deno scripts installed via `deno install`.", 19 | ) 20 | .action(function () { 21 | this.showHelp(); 22 | }) 23 | .command( 24 | "list", 25 | "List installed scripts.", 26 | ) 27 | .option("--root ", "Specify an installation root of scripts.") 28 | .action((options) => list(options)) 29 | .command( 30 | "update [scripts...]", 31 | "Update scripts.", 32 | ) 33 | .option("--root ", "Installation root of scripts.") 34 | .option("-d, --check", "Don't actually update.") 35 | .action((options, ...scripts) => update(scripts, options)) 36 | .parse(); 37 | 38 | interface GlobalOptions { 39 | root?: string; 40 | } 41 | 42 | // ref: https://deno.land/manual@v1.25.4/tools/script_installer 43 | async function getRoot(options: GlobalOptions) { 44 | const home = dir("home"); 45 | const dotdeno = home ? join(home, ".deno") : undefined; 46 | const root = options?.root ?? Deno.env.get("DENO_INSTALL_ROOT") ?? dotdeno; 47 | if (!root) { 48 | console.error("Installation root is not defined"); 49 | Deno.exit(1); 50 | } else { 51 | await ensureDir(root); 52 | return root; 53 | } 54 | } 55 | 56 | async function getScriptDir(options: GlobalOptions) { 57 | const scriptDir = join(await getRoot(options), "bin"); 58 | await ensureDir(scriptDir); 59 | return scriptDir; 60 | } 61 | 62 | type Script = { 63 | name: string; 64 | path: string; 65 | content: string; 66 | url?: URL; 67 | version?: string; 68 | }; 69 | 70 | function parseUrls(content: string): string[] { 71 | const urls: string[] = []; 72 | // match jsr or http pkgs 73 | const regexp = /(https?:[^\'\"]+|jsr:@[^\'\"]+)/g; 74 | let match: RegExpExecArray | null; 75 | while ((match = regexp.exec(content))) { 76 | urls.push(match[0]); 77 | } 78 | return urls; 79 | } 80 | 81 | async function getScriptList(options: GlobalOptions) { 82 | const scriptDir = await getScriptDir(options); 83 | const scripts: Script[] = []; 84 | for await (const entry of Deno.readDir(resolve(scriptDir))) { 85 | if (entry.name === "deno" || entry.name.startsWith(".")) { 86 | continue; 87 | } 88 | const path = join(scriptDir, entry.name); 89 | const content = await Deno.readTextFile(path); 90 | const urls = parseUrls(content); 91 | if (urls.length === 0) { 92 | scripts.push({ 93 | name: entry.name, 94 | path, 95 | content, 96 | }); 97 | continue; 98 | } 99 | if (urls.length > 1) { 100 | console.warn(`More than one importable URLs found in ${path}`); 101 | } 102 | const url = new URL(urls[0]); 103 | scripts.push({ 104 | name: entry.name, 105 | version: parse(urls[0]).constraint, 106 | url, 107 | path, 108 | content, 109 | }); 110 | } 111 | return scripts; 112 | } 113 | 114 | async function list(options: GlobalOptions) { 115 | const scripts = await getScriptList(options); 116 | const table = Table.from( 117 | scripts.map((script) => [script.name, script.version]) 118 | // give scripts with definied version a higher priority 119 | .sort(([_n1, _v1], [_n2, v2]) => v2 ? 1 : -1), 120 | ); 121 | console.log(table.toString()); 122 | } 123 | 124 | type UpdateOptions = GlobalOptions & { 125 | check?: boolean; 126 | }; 127 | 128 | async function update( 129 | scriptNames: string[], 130 | options: UpdateOptions, 131 | ): Promise { 132 | const all = await getScriptList(options); 133 | const scripts = scriptNames.length 134 | ? all.filter((script) => scriptNames.includes(script.name)) 135 | : all; 136 | let found = false; 137 | for (const script of scripts) { 138 | if (!script.url) { 139 | continue; 140 | } 141 | 142 | const current = parse(script.url.href); 143 | const latest = await get(current); 144 | 145 | const latestVersion = latest?.released ?? latest?.constrainted; 146 | if (latestVersion && (latestVersion !== current.constraint)) { 147 | found = true; 148 | const action = options.check ? "Found" : "Updated"; 149 | console.log( 150 | `${action} ${script.name} ${script.version} => ${latestVersion}`, 151 | ); 152 | if (!options.check) { 153 | const content = script.content.replace( 154 | script.url.href, 155 | stringify({ ...current, constraint: latestVersion }), 156 | ); 157 | await Deno.writeTextFile(script.path, content); 158 | } 159 | } 160 | } 161 | if (!found) { 162 | console.log("No updates found."); 163 | } 164 | } 165 | 166 | const isKind = (kind: string): kind is DependencyKind => 167 | ["jsr", "npm", "http", "https"].includes(kind); 168 | export function parse(specifier: string): DependencySpec { 169 | const url = new URL(specifier); 170 | 171 | const kind = url.protocol.slice(0, -1); 172 | assert(isKind(kind), `Invalid protocol: ${kind}:`); 173 | 174 | const body = url.hostname + url.pathname; 175 | 176 | // best effort to match name and path if version is not specified 177 | if (!body.match(/@\d+/)) { 178 | if (body.startsWith("deno.land/std/")) { 179 | return { 180 | kind, 181 | name: "deno.land/std", 182 | path: body.replace("deno.land/std", ""), 183 | constraint: "", 184 | }; 185 | } 186 | if (body.startsWith("deno.land/x/")) { 187 | return { 188 | kind, 189 | name: "deno.land/x", 190 | path: body.replace("deno.land/x", ""), 191 | constraint: "", 192 | }; 193 | } 194 | return { kind, name: body, constraint: "" }; 195 | } 196 | 197 | // Try to find a path segment like "@/" 198 | const matched = body.match( 199 | /^(?.+)@(?[^/]+)(?\/.*)?$/, 200 | ); 201 | if (!matched) { 202 | throw new Error(`Could not parse dependency: ${specifier}`); 203 | } 204 | const { name, constraint, path } = matched.groups as { 205 | name: string; 206 | constraint: string; 207 | path?: string; 208 | }; 209 | return path ? { kind, name, constraint, path } : { kind, name, constraint }; 210 | } 211 | -------------------------------------------------------------------------------- /deno.lock: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "packages": { 4 | "specifiers": { 5 | "jsr:@core/unknownutil@^3.18.1": "jsr:@core/unknownutil@3.18.1", 6 | "jsr:@core/unknownutil@^4.0.0": "jsr:@core/unknownutil@4.3.0", 7 | "jsr:@molt/core@0.19.0": "jsr:@molt/core@0.19.0", 8 | "jsr:@molt/core@0.19.8": "jsr:@molt/core@0.19.8", 9 | "jsr:@std/assert@1": "jsr:@std/assert@1.0.6", 10 | "jsr:@std/assert@^1.0.0": "jsr:@std/assert@1.0.6", 11 | "jsr:@std/collections@^1.0.1": "jsr:@std/collections@1.0.7", 12 | "jsr:@std/internal@^1.0.4": "jsr:@std/internal@1.0.4", 13 | "jsr:@std/semver@^0.224.3": "jsr:@std/semver@0.224.3" 14 | }, 15 | "jsr": { 16 | "@core/unknownutil@3.18.1": { 17 | "integrity": "6aaa108b623ff971d062dd345da7ca03b97f61ae3d29c8677bff14fec11f0d76" 18 | }, 19 | "@core/unknownutil@4.3.0": { 20 | "integrity": "538a3687ffa81028e91d148818047df219663d0da671d906cecd165581ae55cc" 21 | }, 22 | "@molt/core@0.19.0": { 23 | "integrity": "dfa8a86a8c4e7756fefda2bd444d86b8fb11bc1dbfa782ad0f80af07587f8886", 24 | "dependencies": [ 25 | "jsr:@core/unknownutil@^3.18.1", 26 | "jsr:@std/assert@^1.0.0", 27 | "jsr:@std/collections@^1.0.1", 28 | "jsr:@std/semver@^0.224.3" 29 | ] 30 | }, 31 | "@molt/core@0.19.8": { 32 | "integrity": "7af509a9c7ff9b58e12c5235dc7fd09986a599baefb862e91a95b8f5d4f0585e", 33 | "dependencies": [ 34 | "jsr:@core/unknownutil@^4.0.0", 35 | "jsr:@std/assert@^1.0.0" 36 | ] 37 | }, 38 | "@std/assert@1.0.6": { 39 | "integrity": "1904c05806a25d94fe791d6d883b685c9e2dcd60e4f9fc30f4fc5cf010c72207", 40 | "dependencies": [ 41 | "jsr:@std/internal@^1.0.4" 42 | ] 43 | }, 44 | "@std/collections@1.0.7": { 45 | "integrity": "6cff6949907372564735e25a5c6a7945d67cc31913b1b4d1278d08c2a5a3291d" 46 | }, 47 | "@std/internal@1.0.4": { 48 | "integrity": "62e8e4911527e5e4f307741a795c0b0a9e6958d0b3790716ae71ce085f755422" 49 | }, 50 | "@std/semver@0.224.3": { 51 | "integrity": "7bb34b5ad46de2c0c73de0ca3e30081ef64b4361f66abd57c84ff1011c6a1233" 52 | } 53 | } 54 | }, 55 | "remote": { 56 | "https://deno.land/std@0.170.0/fmt/colors.ts": "03ad95e543d2808bc43c17a3dd29d25b43d0f16287fe562a0be89bf632454a12", 57 | "https://deno.land/std@0.204.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", 58 | "https://deno.land/std@0.204.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", 59 | "https://deno.land/std@0.204.0/path/_common/assert_path.ts": "061e4d093d4ba5aebceb2c4da3318bfe3289e868570e9d3a8e327d91c2958946", 60 | "https://deno.land/std@0.204.0/path/_common/constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", 61 | "https://deno.land/std@0.204.0/path/_common/normalize.ts": "2ba7fb4cc9fafb0f38028f434179579ce61d4d9e51296fad22b701c3d3cd7397", 62 | "https://deno.land/std@0.204.0/path/_common/normalize_string.ts": "88c472f28ae49525f9fe82de8c8816d93442d46a30d6bb5063b07ff8a89ff589", 63 | "https://deno.land/std@0.204.0/path/_os.ts": "30b0c2875f360c9296dbe6b7f2d528f0f9c741cecad2e97f803f5219e91b40a2", 64 | "https://deno.land/std@0.204.0/path/join.ts": "98d3d76c819af4a11a81d5ba2dbb319f1ce9d63fc2b615597d4bcfddd4a89a09", 65 | "https://deno.land/std@0.204.0/path/posix/_util.ts": "ecf49560fedd7dd376c6156cc5565cad97c1abe9824f4417adebc7acc36c93e5", 66 | "https://deno.land/std@0.204.0/path/posix/join.ts": "0c0d84bdc344876930126640011ec1b888e6facf74153ffad9ef26813aa2a076", 67 | "https://deno.land/std@0.204.0/path/posix/normalize.ts": "11de90a94ab7148cc46e5a288f7d732aade1d616bc8c862f5560fa18ff987b4b", 68 | "https://deno.land/std@0.204.0/path/windows/_util.ts": "f32b9444554c8863b9b4814025c700492a2b57ff2369d015360970a1b1099d54", 69 | "https://deno.land/std@0.204.0/path/windows/join.ts": "e6600bf88edeeef4e2276e155b8de1d5dec0435fd526ba2dc4d37986b2882f16", 70 | "https://deno.land/std@0.204.0/path/windows/normalize.ts": "9deebbf40c81ef540b7b945d4ccd7a6a2c5a5992f791e6d3377043031e164e69", 71 | "https://deno.land/std@0.211.0/assert/assert.ts": "bec068b2fccdd434c138a555b19a2c2393b71dfaada02b7d568a01541e67cdc5", 72 | "https://deno.land/std@0.211.0/assert/assertion_error.ts": "9f689a101ee586c4ce92f52fa7ddd362e86434ffdf1f848e45987dc7689976b8", 73 | "https://deno.land/std@0.211.0/fs/_get_file_info_type.ts": "da7bec18a7661dba360a1db475b826b18977582ce6fc9b25f3d4ee0403fe8cbd", 74 | "https://deno.land/std@0.211.0/fs/ensure_dir.ts": "139a6cf85c145003db9a2b470862ba153422e7deab2fe3c5b04c5b1cfb73d738", 75 | "https://deno.land/std@0.211.0/path/_common/assert_path.ts": "2ca275f36ac1788b2acb60fb2b79cb06027198bc2ba6fb7e163efaedde98c297", 76 | "https://deno.land/std@0.211.0/path/_common/basename.ts": "569744855bc8445f3a56087fd2aed56bdad39da971a8d92b138c9913aecc5fa2", 77 | "https://deno.land/std@0.211.0/path/_common/common.ts": "6157c7ec1f4db2b4a9a187efd6ce76dcaf1e61cfd49f87e40d4ea102818df031", 78 | "https://deno.land/std@0.211.0/path/_common/constants.ts": "dc5f8057159f4b48cd304eb3027e42f1148cf4df1fb4240774d3492b5d12ac0c", 79 | "https://deno.land/std@0.211.0/path/_common/dirname.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", 80 | "https://deno.land/std@0.211.0/path/_common/format.ts": "92500e91ea5de21c97f5fe91e178bae62af524b72d5fcd246d6d60ae4bcada8b", 81 | "https://deno.land/std@0.211.0/path/_common/from_file_url.ts": "d672bdeebc11bf80e99bf266f886c70963107bdd31134c4e249eef51133ceccf", 82 | "https://deno.land/std@0.211.0/path/_common/glob_to_reg_exp.ts": "2007aa87bed6eb2c8ae8381adcc3125027543d9ec347713c1ad2c68427330770", 83 | "https://deno.land/std@0.211.0/path/_common/normalize.ts": "684df4aa71a04bbcc346c692c8485594fc8a90b9408dfbc26ff32cf3e0c98cc8", 84 | "https://deno.land/std@0.211.0/path/_common/normalize_string.ts": "dfdf657a1b1a7db7999f7c575ee7e6b0551d9c20f19486c6c3f5ff428384c965", 85 | "https://deno.land/std@0.211.0/path/_common/relative.ts": "faa2753d9b32320ed4ada0733261e3357c186e5705678d9dd08b97527deae607", 86 | "https://deno.land/std@0.211.0/path/_common/strip_trailing_separators.ts": "7024a93447efcdcfeaa9339a98fa63ef9d53de363f1fbe9858970f1bba02655a", 87 | "https://deno.land/std@0.211.0/path/_common/to_file_url.ts": "7f76adbc83ece1bba173e6e98a27c647712cab773d3f8cbe0398b74afc817883", 88 | "https://deno.land/std@0.211.0/path/_interface.ts": "a1419fcf45c0ceb8acdccc94394e3e94f99e18cfd32d509aab514c8841799600", 89 | "https://deno.land/std@0.211.0/path/_os.ts": "8fb9b90fb6b753bd8c77cfd8a33c2ff6c5f5bc185f50de8ca4ac6a05710b2c15", 90 | "https://deno.land/std@0.211.0/path/basename.ts": "5d341aadb7ada266e2280561692c165771d071c98746fcb66da928870cd47668", 91 | "https://deno.land/std@0.211.0/path/common.ts": "973e019d3cfa6a134a13f1fda3f7efbaf400a64365d7a7b96f66afe373a09dc5", 92 | "https://deno.land/std@0.211.0/path/dirname.ts": "85bd955bf31d62c9aafdd7ff561c4b5fb587d11a9a5a45e2b01aedffa4238a7c", 93 | "https://deno.land/std@0.211.0/path/extname.ts": "593303db8ae8c865cbd9ceec6e55d4b9ac5410c1e276bfd3131916591b954441", 94 | "https://deno.land/std@0.211.0/path/format.ts": "98fad25f1af7b96a48efb5b67378fcc8ed77be895df8b9c733b86411632162af", 95 | "https://deno.land/std@0.211.0/path/from_file_url.ts": "911833ae4fd10a1c84f6271f36151ab785955849117dc48c6e43b929504ee069", 96 | "https://deno.land/std@0.211.0/path/glob_to_regexp.ts": "83c5fd36a8c86f5e72df9d0f45317f9546afa2ce39acaafe079d43a865aced08", 97 | "https://deno.land/std@0.211.0/path/is_absolute.ts": "4791afc8bfd0c87f0526eaa616b0d16e7b3ab6a65b62942e50eac68de4ef67d7", 98 | "https://deno.land/std@0.211.0/path/is_glob.ts": "a65f6195d3058c3050ab905705891b412ff942a292bcbaa1a807a74439a14141", 99 | "https://deno.land/std@0.211.0/path/join.ts": "ae2ec5ca44c7e84a235fd532e4a0116bfb1f2368b394db1c4fb75e3c0f26a33a", 100 | "https://deno.land/std@0.211.0/path/join_globs.ts": "e9589869a33dc3982101898ee50903db918ca00ad2614dbe3934d597d7b1fbea", 101 | "https://deno.land/std@0.211.0/path/mod.ts": "8e1ffe983557e9637184ccb84bd6b0447e319f4a28bfad7f3f41ee050579e5e6", 102 | "https://deno.land/std@0.211.0/path/normalize.ts": "4155743ccceeed319b350c1e62e931600272fad8ad00c417b91df093867a8352", 103 | "https://deno.land/std@0.211.0/path/normalize_glob.ts": "98ee8268fad271193603271c203ae973280b5abfbdd2cbca1053fd2af71869ca", 104 | "https://deno.land/std@0.211.0/path/parse.ts": "65e8e285f1a63b714e19ef24b68f56e76934c3df0b6e65fd440d3991f4f8aefb", 105 | "https://deno.land/std@0.211.0/path/posix/_util.ts": "1e3937da30f080bfc99fe45d7ed23c47dd8585c5e473b2d771380d3a6937cf9d", 106 | "https://deno.land/std@0.211.0/path/posix/basename.ts": "39ee27a29f1f35935d3603ccf01d53f3d6e0c5d4d0f84421e65bd1afeff42843", 107 | "https://deno.land/std@0.211.0/path/posix/common.ts": "809cc86e79db8171b9a97ac397d56b9588c25a8f3062f483c8d651a2b6739daa", 108 | "https://deno.land/std@0.211.0/path/posix/dirname.ts": "6535d2bdd566118963537b9dda8867ba9e2a361015540dc91f5afbb65c0cce8b", 109 | "https://deno.land/std@0.211.0/path/posix/extname.ts": "8d36ae0082063c5e1191639699e6f77d3acf501600a3d87b74943f0ae5327427", 110 | "https://deno.land/std@0.211.0/path/posix/format.ts": "185e9ee2091a42dd39e2a3b8e4925370ee8407572cee1ae52838aed96310c5c1", 111 | "https://deno.land/std@0.211.0/path/posix/from_file_url.ts": "951aee3a2c46fd0ed488899d024c6352b59154c70552e90885ed0c2ab699bc40", 112 | "https://deno.land/std@0.211.0/path/posix/glob_to_regexp.ts": "54d3ff40f309e3732ab6e5b19d7111d2d415248bcd35b67a99defcbc1972e697", 113 | "https://deno.land/std@0.211.0/path/posix/is_absolute.ts": "cebe561ad0ae294f0ce0365a1879dcfca8abd872821519b4fcc8d8967f888ede", 114 | "https://deno.land/std@0.211.0/path/posix/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", 115 | "https://deno.land/std@0.211.0/path/posix/join.ts": "aef88d5fa3650f7516730865dbb951594d1a955b785e2450dbee93b8e32694f3", 116 | "https://deno.land/std@0.211.0/path/posix/join_globs.ts": "35ddd5f321d79e1fc72d2ec9a8d8863f0bb1431125e57bb2661799278d4ee9cd", 117 | "https://deno.land/std@0.211.0/path/posix/mod.ts": "9dfff9f3618ba6990eb8495dadef13871e5756419b25079b6b905a4ebf790926", 118 | "https://deno.land/std@0.211.0/path/posix/normalize.ts": "baeb49816a8299f90a0237d214cef46f00ba3e95c0d2ceb74205a6a584b58a91", 119 | "https://deno.land/std@0.211.0/path/posix/normalize_glob.ts": "0f01bcfb0791144f0e901fd2cc706432baf84828c393f3c25c53583f03d0c0b7", 120 | "https://deno.land/std@0.211.0/path/posix/parse.ts": "d5bac4eb21262ab168eead7e2196cb862940c84cee572eafedd12a0d34adc8fb", 121 | "https://deno.land/std@0.211.0/path/posix/relative.ts": "3907d6eda41f0ff723d336125a1ad4349112cd4d48f693859980314d5b9da31c", 122 | "https://deno.land/std@0.211.0/path/posix/resolve.ts": "bac20d9921beebbbb2b73706683b518b1d0c1b1da514140cee409e90d6b2913a", 123 | "https://deno.land/std@0.211.0/path/posix/separator.ts": "6530f253a33d92d8f8a1d1d7fa7fad2992c739ad9886dde72e4e78793f1cfd49", 124 | "https://deno.land/std@0.211.0/path/posix/to_file_url.ts": "7aa752ba66a35049e0e4a4be5a0a31ac6b645257d2e031142abb1854de250aaf", 125 | "https://deno.land/std@0.211.0/path/posix/to_namespaced_path.ts": "28b216b3c76f892a4dca9734ff1cc0045d135532bfd9c435ae4858bfa5a2ebf0", 126 | "https://deno.land/std@0.211.0/path/relative.ts": "ab739d727180ed8727e34ed71d976912461d98e2b76de3d3de834c1066667add", 127 | "https://deno.land/std@0.211.0/path/resolve.ts": "a6f977bdb4272e79d8d0ed4333e3d71367cc3926acf15ac271f1d059c8494d8d", 128 | "https://deno.land/std@0.211.0/path/separator.ts": "2b5a590d4f1942e70650ee7421d161c24ec7d3b94b49981e4138ae07397fb2d2", 129 | "https://deno.land/std@0.211.0/path/to_file_url.ts": "88f049b769bce411e2d2db5bd9e6fd9a185a5fbd6b9f5ad8f52bef517c4ece1b", 130 | "https://deno.land/std@0.211.0/path/to_namespaced_path.ts": "b706a4103b104cfadc09600a5f838c2ba94dbcdb642344557122dda444526e40", 131 | "https://deno.land/std@0.211.0/path/windows/_util.ts": "d5f47363e5293fced22c984550d5e70e98e266cc3f31769e1710511803d04808", 132 | "https://deno.land/std@0.211.0/path/windows/basename.ts": "e2dbf31d1d6385bfab1ce38c333aa290b6d7ae9e0ecb8234a654e583cf22f8fe", 133 | "https://deno.land/std@0.211.0/path/windows/common.ts": "809cc86e79db8171b9a97ac397d56b9588c25a8f3062f483c8d651a2b6739daa", 134 | "https://deno.land/std@0.211.0/path/windows/dirname.ts": "33e421be5a5558a1346a48e74c330b8e560be7424ed7684ea03c12c21b627bc9", 135 | "https://deno.land/std@0.211.0/path/windows/extname.ts": "165a61b00d781257fda1e9606a48c78b06815385e7d703232548dbfc95346bef", 136 | "https://deno.land/std@0.211.0/path/windows/format.ts": "bbb5ecf379305b472b1082cd2fdc010e44a0020030414974d6029be9ad52aeb6", 137 | "https://deno.land/std@0.211.0/path/windows/from_file_url.ts": "ced2d587b6dff18f963f269d745c4a599cf82b0c4007356bd957cb4cb52efc01", 138 | "https://deno.land/std@0.211.0/path/windows/glob_to_regexp.ts": "6dcd1242bd8907aa9660cbdd7c93446e6927b201112b0cba37ca5d80f81be51b", 139 | "https://deno.land/std@0.211.0/path/windows/is_absolute.ts": "4a8f6853f8598cf91a835f41abed42112cebab09478b072e4beb00ec81f8ca8a", 140 | "https://deno.land/std@0.211.0/path/windows/is_glob.ts": "8a8b08c08bf731acf2c1232218f1f45a11131bc01de81e5f803450a5914434b9", 141 | "https://deno.land/std@0.211.0/path/windows/join.ts": "e0b3356615c1a75c56ebb6a7311157911659e11fd533d80d724800126b761ac3", 142 | "https://deno.land/std@0.211.0/path/windows/join_globs.ts": "35ddd5f321d79e1fc72d2ec9a8d8863f0bb1431125e57bb2661799278d4ee9cd", 143 | "https://deno.land/std@0.211.0/path/windows/mod.ts": "e739f7e783b69fb7956bed055e117201ccb071a7917c09f87c5c8c2b54369d38", 144 | "https://deno.land/std@0.211.0/path/windows/normalize.ts": "78126170ab917f0ca355a9af9e65ad6bfa5be14d574c5fb09bb1920f52577780", 145 | "https://deno.land/std@0.211.0/path/windows/normalize_glob.ts": "49c634af33a7c6bc738885c4b34633278b7ab47bd47bf11281b2190970b823e2", 146 | "https://deno.land/std@0.211.0/path/windows/parse.ts": "b9239edd892a06a06625c1b58425e199f018ce5649ace024d144495c984da734", 147 | "https://deno.land/std@0.211.0/path/windows/relative.ts": "3e1abc7977ee6cc0db2730d1f9cb38be87b0ce4806759d271a70e4997fc638d7", 148 | "https://deno.land/std@0.211.0/path/windows/resolve.ts": "75b2e3e1238d840782cee3d8864d82bfaa593c7af8b22f19c6422cf82f330ab3", 149 | "https://deno.land/std@0.211.0/path/windows/separator.ts": "2bbcc551f64810fb43252185bd1d33d66e0477d74bd52f03b89f5dc21a3dd486", 150 | "https://deno.land/std@0.211.0/path/windows/to_file_url.ts": "1cd63fd35ec8d1370feaa4752eccc4cc05ea5362a878be8dc7db733650995484", 151 | "https://deno.land/std@0.211.0/path/windows/to_namespaced_path.ts": "4ffa4fb6fae321448d5fe810b3ca741d84df4d7897e61ee29be961a6aac89a4c", 152 | "https://deno.land/x/cliffy@v0.25.7/_utils/distance.ts": "02af166952c7c358ac83beae397aa2fbca4ad630aecfcd38d92edb1ea429f004", 153 | "https://deno.land/x/cliffy@v0.25.7/command/_errors.ts": "a9bd23dc816b32ec96c9b8f3057218241778d8c40333b43341138191450965e5", 154 | "https://deno.land/x/cliffy@v0.25.7/command/_utils.ts": "9ab3d69fabab6c335b881b8a5229cbd5db0c68f630a1c307aff988b6396d9baf", 155 | "https://deno.land/x/cliffy@v0.25.7/command/command.ts": "a2b83c612acd65c69116f70dec872f6da383699b83874b70fcf38cddf790443f", 156 | "https://deno.land/x/cliffy@v0.25.7/command/completions/_bash_completions_generator.ts": "43b4abb543d4dc60233620d51e69d82d3b7c44e274e723681e0dce2a124f69f9", 157 | "https://deno.land/x/cliffy@v0.25.7/command/completions/_fish_completions_generator.ts": "d0289985f5cf0bd288c05273bfa286b24c27feb40822eb7fd9d7fee64e6580e8", 158 | "https://deno.land/x/cliffy@v0.25.7/command/completions/_zsh_completions_generator.ts": "14461eb274954fea4953ee75938821f721da7da607dc49bcc7db1e3f33a207bd", 159 | "https://deno.land/x/cliffy@v0.25.7/command/completions/bash.ts": "053aa2006ec327ccecacb00ba28e5eb836300e5c1bec1b3cfaee9ddcf8189756", 160 | "https://deno.land/x/cliffy@v0.25.7/command/completions/complete.ts": "58df61caa5e6220ff2768636a69337923ad9d4b8c1932aeb27165081c4d07d8b", 161 | "https://deno.land/x/cliffy@v0.25.7/command/completions/fish.ts": "9938beaa6458c6cf9e2eeda46a09e8cd362d4f8c6c9efe87d3cd8ca7477402a5", 162 | "https://deno.land/x/cliffy@v0.25.7/command/completions/mod.ts": "aeef7ec8e319bb157c39a4bab8030c9fe8fa327b4c1e94c9c1025077b45b40c0", 163 | "https://deno.land/x/cliffy@v0.25.7/command/completions/zsh.ts": "8b04ab244a0b582f7927d405e17b38602428eeb347a9968a657e7ea9f40e721a", 164 | "https://deno.land/x/cliffy@v0.25.7/command/deprecated.ts": "bbe6670f1d645b773d04b725b8b8e7814c862c9f1afba460c4d599ffe9d4983c", 165 | "https://deno.land/x/cliffy@v0.25.7/command/deps.ts": "275b964ce173770bae65f6b8ebe9d2fd557dc10292cdd1ed3db1735f0d77fa1d", 166 | "https://deno.land/x/cliffy@v0.25.7/command/help/_help_generator.ts": "f7c349cb2ddb737e70dc1f89bcb1943ca9017a53506be0d4138e0aadb9970a49", 167 | "https://deno.land/x/cliffy@v0.25.7/command/help/mod.ts": "09d74d3eb42d21285407cda688074c29595d9c927b69aedf9d05ff3f215820d3", 168 | "https://deno.land/x/cliffy@v0.25.7/command/mod.ts": "d0a32df6b14028e43bb2d41fa87d24bc00f9662a44e5a177b3db02f93e473209", 169 | "https://deno.land/x/cliffy@v0.25.7/command/type.ts": "24e88e3085e1574662b856ccce70d589959648817135d4469fab67b9cce1b364", 170 | "https://deno.land/x/cliffy@v0.25.7/command/types.ts": "ae02eec0ed7a769f7dba2dd5d3a931a61724b3021271b1b565cf189d9adfd4a0", 171 | "https://deno.land/x/cliffy@v0.25.7/command/types/action_list.ts": "33c98d449617c7a563a535c9ceb3741bde9f6363353fd492f90a74570c611c27", 172 | "https://deno.land/x/cliffy@v0.25.7/command/types/boolean.ts": "3879ec16092b4b5b1a0acb8675f8c9250c0b8a972e1e4c7adfba8335bd2263ed", 173 | "https://deno.land/x/cliffy@v0.25.7/command/types/child_command.ts": "f1fca390c7fbfa7a713ca15ef55c2c7656bcbb394d50e8ef54085bdf6dc22559", 174 | "https://deno.land/x/cliffy@v0.25.7/command/types/command.ts": "325d0382e383b725fd8d0ef34ebaeae082c5b76a1f6f2e843fee5dbb1a4fe3ac", 175 | "https://deno.land/x/cliffy@v0.25.7/command/types/enum.ts": "2178345972adf7129a47e5f02856ca3e6852a91442a1c78307dffb8a6a3c6c9f", 176 | "https://deno.land/x/cliffy@v0.25.7/command/types/file.ts": "8618f16ac9015c8589cbd946b3de1988cc4899b90ea251f3325c93c46745140e", 177 | "https://deno.land/x/cliffy@v0.25.7/command/types/integer.ts": "29864725fd48738579d18123d7ee78fed37515e6dc62146c7544c98a82f1778d", 178 | "https://deno.land/x/cliffy@v0.25.7/command/types/number.ts": "aeba96e6f470309317a16b308c82e0e4138a830ec79c9877e4622c682012bc1f", 179 | "https://deno.land/x/cliffy@v0.25.7/command/types/string.ts": "e4dadb08a11795474871c7967beab954593813bb53d9f69ea5f9b734e43dc0e0", 180 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/mod.ts": "17e2df3b620905583256684415e6c4a31e8de5c59066eb6d6c9c133919292dc4", 181 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider.ts": "d6fb846043232cbd23c57d257100c7fc92274984d75a5fead0f3e4266dc76ab8", 182 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/deno_land.ts": "24f8d82e38c51e09be989f30f8ad21f9dd41ac1bb1973b443a13883e8ba06d6d", 183 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/github.ts": "99e1b133dd446c6aa79f69e69c46eb8bc1c968dd331c2a7d4064514a317c7b59", 184 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/provider/nest_land.ts": "0e07936cea04fa41ac9297f32d87f39152ea873970c54cb5b4934b12fee1885e", 185 | "https://deno.land/x/cliffy@v0.25.7/command/upgrade/upgrade_command.ts": "3640a287d914190241ea1e636774b1b4b0e1828fa75119971dd5304784061e05", 186 | "https://deno.land/x/cliffy@v0.25.7/flags/_errors.ts": "f1fbb6bfa009e7950508c9d491cfb4a5551027d9f453389606adb3f2327d048f", 187 | "https://deno.land/x/cliffy@v0.25.7/flags/_utils.ts": "340d3ecab43cde9489187e1f176504d2c58485df6652d1cdd907c0e9c3ce4cc2", 188 | "https://deno.land/x/cliffy@v0.25.7/flags/_validate_flags.ts": "16eb5837986c6f6f7620817820161a78d66ce92d690e3697068726bbef067452", 189 | "https://deno.land/x/cliffy@v0.25.7/flags/deprecated.ts": "a72a35de3cc7314e5ebea605ca23d08385b218ef171c32a3f135fb4318b08126", 190 | "https://deno.land/x/cliffy@v0.25.7/flags/flags.ts": "68a9dfcacc4983a84c07ba19b66e5e9fccd04389fad215210c60fb414cc62576", 191 | "https://deno.land/x/cliffy@v0.25.7/flags/types.ts": "7452ea5296758fb7af89930349ce40d8eb9a43b24b3f5759283e1cb5113075fd", 192 | "https://deno.land/x/cliffy@v0.25.7/flags/types/boolean.ts": "4c026dd66ec9c5436860dc6d0241427bdb8d8e07337ad71b33c08193428a2236", 193 | "https://deno.land/x/cliffy@v0.25.7/flags/types/integer.ts": "b60d4d590f309ddddf066782d43e4dc3799f0e7d08e5ede7dc62a5ee94b9a6d9", 194 | "https://deno.land/x/cliffy@v0.25.7/flags/types/number.ts": "610936e2d29de7c8c304b65489a75ebae17b005c6122c24e791fbed12444d51e", 195 | "https://deno.land/x/cliffy@v0.25.7/flags/types/string.ts": "e89b6a5ce322f65a894edecdc48b44956ec246a1d881f03e97bbda90dd8638c5", 196 | "https://deno.land/x/cliffy@v0.25.7/table/border.ts": "2514abae4e4f51eda60a5f8c927ba24efd464a590027e900926b38f68e01253c", 197 | "https://deno.land/x/cliffy@v0.25.7/table/cell.ts": "1d787d8006ac8302020d18ec39f8d7f1113612c20801b973e3839de9c3f8b7b3", 198 | "https://deno.land/x/cliffy@v0.25.7/table/deps.ts": "5b05fa56c1a5e2af34f2103fd199e5f87f0507549963019563eae519271819d2", 199 | "https://deno.land/x/cliffy@v0.25.7/table/layout.ts": "46bf10ae5430cf4fbb92f23d588230e9c6336edbdb154e5c9581290562b169f4", 200 | "https://deno.land/x/cliffy@v0.25.7/table/mod.ts": "e74f69f38810ee6139a71132783765feb94436a6619c07474ada45b465189834", 201 | "https://deno.land/x/cliffy@v0.25.7/table/row.ts": "5f519ba7488d2ef76cbbf50527f10f7957bfd668ce5b9169abbc44ec88302645", 202 | "https://deno.land/x/cliffy@v0.25.7/table/table.ts": "ec204c9d08bb3ff1939c5ac7412a4c9ed7d00925d4fc92aff9bfe07bd269258d", 203 | "https://deno.land/x/cliffy@v0.25.7/table/utils.ts": "187bb7dcbcfb16199a5d906113f584740901dfca1007400cba0df7dcd341bc29", 204 | "https://deno.land/x/dir@1.5.2/cache_dir/mod.ts": "8a82889db79c547fbbd3536c9c964047657b19fb59365c5fa59afc46082f9fe5", 205 | "https://deno.land/x/dir@1.5.2/config_dir/mod.ts": "d16ca6f949c3e42ed23f942261d2482f340dd6c73542740f57c89abeaa83ea3f", 206 | "https://deno.land/x/dir@1.5.2/data_dir/mod.ts": "7d17c6d9e775974245e0456c8f83f751c41c792c06020d12ca1ca69a0ce4e671", 207 | "https://deno.land/x/dir@1.5.2/data_local_dir/mod.ts": "91eb1c4bfadfbeda30171007bac6d85aadacd43224a5ed721bbe56bc64e9eb66", 208 | "https://deno.land/x/dir@1.5.2/download_dir/mod.ts": "5e7e57b5b680f3117e635b4d05622edc276670d9d7cd43ee6626807f8b372770", 209 | "https://deno.land/x/dir@1.5.2/home_dir/mod.ts": "6128b52da60124f78a4fc176cd4687a073e9b0331803dd602dfb685fa4fe4ae1", 210 | "https://deno.land/x/dir@1.5.2/mod.ts": "95e1519b7b629c995025652342b36fbf64a6a9a0bd7822b0c4573a22f42f0529", 211 | "https://deno.land/x/dir@1.5.2/tmp_dir/mod.ts": "c89c792d454fa1e3b2882f34faa87e9b92fc2866118b348d9984d68d33773c58" 212 | } 213 | } 214 | --------------------------------------------------------------------------------