diff --git a/.vscode/settings.json b/.vscode/settings.json index ab96ded..040b13f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,9 @@ "debug.javascript.usePreview": false, "deno.import_intellisense_origins": { "https://deno.land": true + }, + "deno.suggest.imports.hosts": { + "https://deno.land": true, + "https://deno.hibas123.de": false } } diff --git a/cli/commands/deprecate.ts b/cli/commands/deprecate.ts index 1fb2f00..27589b6 100644 --- a/cli/commands/deprecate.ts +++ b/cli/commands/deprecate.ts @@ -1,11 +1,11 @@ -import { Colors, Cliffy } from "../deps.ts"; +import { Colors, CliffyPrompt } from "../deps.ts"; import { getMeta, setMeta, log } from "../global.ts"; export default async function deprecate(options: any) { const meta = await getMeta(); - const res = await Cliffy.Confirm.prompt( + const res = await CliffyPrompt.Confirm.prompt( "Are you sure you want to deprecat this package?" ); diff --git a/cli/commands/init.ts b/cli/commands/init.ts index 6d5eb3d..99ab30b 100644 --- a/cli/commands/init.ts +++ b/cli/commands/init.ts @@ -1,4 +1,4 @@ -import { Cliffy, Path, FS } from "../deps.ts"; +import { CliffyPrompt, Path, FS } from "../deps.ts"; import { getMeta, setMeta, @@ -11,7 +11,7 @@ export default async function init() { let existing = {}; try { existing = await getMeta(); - } catch (err) {} + } catch (err) { } let meta: IMeta = { name: Path.basename(Deno.cwd()).toLowerCase().replace(/\s+/g, "-"), version: "0.0.1", @@ -23,21 +23,21 @@ export default async function init() { }; if (isInteractive()) { - meta.name = await Cliffy.Input.prompt({ + meta.name = await CliffyPrompt.Input.prompt({ message: "What's the name of your package?", default: meta.name, }); - meta.description = await Cliffy.Input.prompt({ + meta.description = await CliffyPrompt.Input.prompt({ message: "What's the description of your package?", default: meta.description, }); - meta.author = await Cliffy.Input.prompt({ + meta.author = await CliffyPrompt.Input.prompt({ message: "Who's the author of your package?", default: meta.author, }); if (!(await FS.exists("README.md"))) { - const res = await Cliffy.Confirm.prompt({ + const res = await CliffyPrompt.Confirm.prompt({ message: "Autogenerate README?", default: true, }); diff --git a/cli/commands/setup.ts b/cli/commands/setup.ts index ca38b4e..6c37d04 100644 --- a/cli/commands/setup.ts +++ b/cli/commands/setup.ts @@ -1,23 +1,23 @@ -import { Cliffy } from "../deps.ts"; +import { CliffyPrompt } from "../deps.ts"; import { getConfig, setConfig } from "../global.ts"; export default async function setup() { - const registry = await Cliffy.Input.prompt({ + const registry = await CliffyPrompt.Input.prompt({ message: "What's your registry?", default: getConfig("registry"), }); - const username = await Cliffy.Input.prompt({ + const username = await CliffyPrompt.Input.prompt({ message: "What's your username?", default: getConfig("username"), }); - const password = await Cliffy.Secret.prompt({ + const password = await CliffyPrompt.Secret.prompt({ message: "What's your password?", hidden: true, default: getConfig("password"), }); - const author = await Cliffy.Input.prompt({ + const author = await CliffyPrompt.Input.prompt({ message: "Who are you? (optional) Name ", default: getConfig("author"), }); diff --git a/cli/commands/upgrade.ts b/cli/commands/upgrade.ts index d1d18f9..b9aab8e 100644 --- a/cli/commands/upgrade.ts +++ b/cli/commands/upgrade.ts @@ -1,4 +1,4 @@ -import { Cliffy, Colors } from "../deps.ts"; +import { CliffyPrompt, Colors } from "../deps.ts"; import { version } from "../version.ts"; export default async function upgrade() { @@ -7,14 +7,14 @@ export default async function upgrade() { ).then((e) => e.json()); if (meta.version === version) { - const res = await Cliffy.Confirm.prompt({ + const res = await CliffyPrompt.Confirm.prompt({ message: Colors.yellow("No update available!") + " Continue?", default: false, }); if (!res) return; } - const res = await Cliffy.Confirm.prompt({ + const res = await CliffyPrompt.Confirm.prompt({ message: "Are you sure you want to upgrade?", default: true, }); diff --git a/cli/denreg.ts b/cli/denreg.ts index ba2670b..bd3a5c4 100644 --- a/cli/denreg.ts +++ b/cli/denreg.ts @@ -1,4 +1,4 @@ -import { Cliffy, Path, Colors } from "./deps.ts"; +import { CliffyCommand, Path, Colors } from "./deps.ts"; import { init } from "./global.ts"; import { version } from "./version.ts"; @@ -26,7 +26,7 @@ const commandWrapper = (cmd: CommandHandler) => { opts = params; }; }; -const flags = await new Cliffy.Command() +const flags = await new CliffyCommand.Command() .name("denreg") .version(version) .description("CLI for the Open Source DenReg package registry") @@ -44,13 +44,13 @@ const flags = await new Cliffy.Command() }) .command( "setup", - new Cliffy.Command() + new CliffyCommand.Command() .description("Configure cli") .action(commandWrapper(setupCMD)) ) .command( "publish", - new Cliffy.Command() + new CliffyCommand.Command() .description("Upload package") .action(commandWrapper(publishCMD)) .option("-d, --dry [dry:boolean]", "Dry run", { @@ -59,13 +59,13 @@ const flags = await new Cliffy.Command() ) .command( "init", - new Cliffy.Command() + new CliffyCommand.Command() .description("Create meta.json") .action(commandWrapper(initCMD)) ) .command( "bump", - new Cliffy.Command() + new CliffyCommand.Command() .complete("major|minor|patch", () => ["major", "minor", "patch"]) .arguments("") .description("Change package version") @@ -73,18 +73,18 @@ const flags = await new Cliffy.Command() ) .command( "deprecate", - new Cliffy.Command() + new CliffyCommand.Command() .description("Deprecate package") .action(commandWrapper(deprecateCMD)) ) .command( "upgrade", - new Cliffy.Command() + new CliffyCommand.Command() .description("Upgrade to latest version of denreg cli") .action(commandWrapper(upgradeCMD)) ) - .command("completions", new Cliffy.CompletionsCommand()) - .command("help", new Cliffy.HelpCommand().global()) + .command("completions", new CliffyCommand.CompletionsCommand()) + .command("help", new CliffyCommand.HelpCommand().global()) .parse(Deno.args); await init(flags.options); diff --git a/cli/deps.ts b/cli/deps.ts index 1e3bc74..8282b0c 100644 --- a/cli/deps.ts +++ b/cli/deps.ts @@ -1,6 +1,7 @@ export * as Compress from "https://deno.hibas123.de/raw/@denreg-tar/mod.ts"; export * as Ini from "https://deno.land/x/ini@v2.1.0/mod.ts"; -export * as Cliffy from "https://deno.land/x/cliffy@v0.18.2/mod.ts"; +export * as CliffyPrompt from "https://deno.land/x/cliffy@v1.0.0-rc.3/prompt/mod.ts"; +export * as CliffyCommand from "https://deno.land/x/cliffy@v1.0.0-rc.3/command/mod.ts"; export * as Base64 from "https://deno.land/std@0.91.0/encoding/base64.ts"; export * as FS from "https://deno.land/std@0.91.0/fs/mod.ts"; export * as Colors from "https://deno.land/std@0.91.0/fmt/colors.ts"; diff --git a/cli/meta.json b/cli/meta.json index f82f94a..22adee5 100644 --- a/cli/meta.json +++ b/cli/meta.json @@ -1,11 +1,15 @@ { "name": "@denreg-cli", - "version": "0.2.11", + "version": "1.0.0", "description": "CLI for the DenReg package registry", "author": "Fabian Stamm ", "contributors": [], - "files": ["**/*.ts", "**/*.js", "README.md"], + "files": [ + "**/*.ts", + "**/*.js", + "README.md" + ], "hooks": { "prepublish": "pre.ts" } -} +} \ No newline at end of file diff --git a/cli/version.ts b/cli/version.ts index 0336e56..0fec7f7 100644 --- a/cli/version.ts +++ b/cli/version.ts @@ -1 +1 @@ -export const version = "0.2.11" \ No newline at end of file +export const version = "1.0.0" \ No newline at end of file diff --git a/jsx/meta.json b/jsx/meta.json index af1bd25..8cc48e6 100644 --- a/jsx/meta.json +++ b/jsx/meta.json @@ -1,6 +1,6 @@ { "name": "@denreg-jsx", - "version": "0.1.2", + "version": "0.1.4", "description": "Denreg JSX renderer", "author": "Fabian Stamm ", "contributors": [], @@ -11,4 +11,4 @@ "tsconfig.json", "README.md" ] -} +} \ No newline at end of file diff --git a/markdown/meta.json b/markdown/meta.json index 897784e..de24c76 100644 --- a/markdown/meta.json +++ b/markdown/meta.json @@ -1,6 +1,6 @@ { "name": "markdown", - "version": "0.0.1", + "version": "0.1.0", "description": "", "author": "Fabian Stamm ", "contributors": [], @@ -9,4 +9,4 @@ "**/*.js", "README.md" ] -} +} \ No newline at end of file diff --git a/markdown/src/block-lexer.ts b/markdown/src/block-lexer.ts index 1d85438..120c2a5 100644 --- a/markdown/src/block-lexer.ts +++ b/markdown/src/block-lexer.ts @@ -22,7 +22,9 @@ import { Obj } from "./interfaces.ts"; import { Marked } from "./marked.ts"; -import { load } from "https://deno.land/std/encoding/_yaml/loader/loader.ts"; +import { parse } from "https://deno.land/std@0.208.0/yaml/mod.ts"; + + export class BlockLexer { static simpleRules: RegExp[] = []; @@ -300,7 +302,7 @@ export class BlockLexer { // Grabs front-matter data and parse it into Javascript object. if (fmArr = /^(?:\-\-\-)(.*?)(?:\-\-\-|\.\.\.)/s.exec(nextPart)) { nextPart = nextPart.substring(fmArr[0].length); - this.frontmatter = load(fmArr[1]); + this.frontmatter = parse(fmArr[1]); } continue; @@ -510,7 +512,7 @@ export class BlockLexer { if (nextPart) { throw new Error( "Infinite loop on byte: " + nextPart.charCodeAt(0) + - `, near text '${nextPart.slice(0, 30)}...'`, + `, near text '${nextPart.slice(0, 30)}...'`, ); } } diff --git a/registry/Dockerfile b/registry/Dockerfile index b63e22f..c3dc908 100644 --- a/registry/Dockerfile +++ b/registry/Dockerfile @@ -1,11 +1,11 @@ -FROM docker.hibas123.de/deno +FROM docker.io/denoland/deno:alpine-1.38.3 WORKDIR /app ADD src /app/src ADD public /app/public -ADD tsconfig.json /app/ -RUN /usr/bin/deno cache --unstable --config /app/tsconfig.json src/registry.ts +ADD deno.json /app/ +RUN deno cache --unstable src/registry.ts VOLUME [ "/app/data" ] -ENTRYPOINT [ "/usr/bin/deno", "run", "-A", "--unstable", "--config", "/app/tsconfig.json", "/app/src/registry.ts" ] +CMD [ "run", "-A", "--unstable", "/app/src/registry.ts" ] diff --git a/registry/Earthfile b/registry/Earthfile new file mode 100644 index 0000000..66084b0 --- /dev/null +++ b/registry/Earthfile @@ -0,0 +1,18 @@ +VERSION 0.7 +FROM docker.io/denoland/deno:alpine-1.38.3 +WORKDIR /app + +docker-multi: + BUILD --platform linux/amd64 --platform linux/arm64 +docker + +docker: + COPY src /app/src + COPY public /app/public + COPY deno.json /app/ + + RUN deno cache --unstable src/registry.ts + CMD [ "run", "-A", "--unstable", "/app/src/registry.ts" ] + + ARG EARTHLY_TARGET_TAG + ARG TAG=$EARTHLY_TARGET_TAG + SAVE IMAGE --push git.hibas.dev/deno/denreg:$TAG diff --git a/registry/deno.json b/registry/deno.json new file mode 100644 index 0000000..128cc22 --- /dev/null +++ b/registry/deno.json @@ -0,0 +1,19 @@ +{ + "tasks": { + "start": "deno run --allow-net --allow-read index.tsx" + }, + "imports": { + "nano-jsx": "https://deno.land/x/nano_jsx@v0.0.34/mod.ts", + "oak": "https://deno.land/x/oak@v10.6.0/mod.ts" + }, + "compilerOptions": { + "lib": [ + "dom", + "dom.iterable", + "dom.asynciterable", + "deno.ns" + ], + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment" + } +} \ No newline at end of file diff --git a/registry/deno.lock b/registry/deno.lock new file mode 100644 index 0000000..b421199 --- /dev/null +++ b/registry/deno.lock @@ -0,0 +1,388 @@ +{ + "version": "3", + "redirects": { + "https://deno.land/std/fs/mod.ts": "https://deno.land/std@0.208.0/fs/mod.ts", + "https://deno.land/std/path/mod.ts": "https://deno.land/std@0.208.0/path/mod.ts", + "https://deno.land/std/uuid/mod.ts": "https://deno.land/std@0.208.0/uuid/mod.ts", + "https://deno.land/x/base64/base64url.ts": "https://deno.land/x/base64@v0.2.1/base64url.ts", + "https://deno.land/x/nano_jsx/mod.ts": "https://deno.land/x/nano_jsx@v0.1.0/mod.ts", + "https://git.stamm.me/Deno/DenReg/raw/branch/master/tar/mod.ts": "https://git.hibas.dev/Deno/DenReg/raw/branch/master/tar/mod.ts" + }, + "remote": { + "https://cdn.skypack.dev/-/@jsreport/mingo@v2.4.1-ZVYVnAnRedyuAPBNb9NZ/dist=es2019,mode=imports/optimized/@jsreport/mingo.js": "75213f47970810db2eaed8a551167ba85d301eeec879b21b8fce9faf61a68b33", + "https://cdn.skypack.dev/-/prismjs@v1.29.0-tsFxawAKDjgdZ80OeL0T/dist=es2019,mode=imports/optimized/prismjs.js": "4aa116c4194f957b8500bd5fbcec3b2cf9c9132dad3d1fcebebe634b9ef8603e", + "https://cdn.skypack.dev/@jsreport/mingo": "a2acca816e6078b3080e80b717fa09a9e0c7a805017d514536b0655b7dad79a7", + "https://cdn.skypack.dev/prismjs": "2f31eecf3dea3232b302fbc57b7d0383d8f27d4ce1b14c72b77989d33de16bd5", + "https://deno.hibas123.de/raw/ini@0.0.3/ini.ts": "436fba4744160024f02844ea255778c5009e65ececdccee65ff846e0edf5f829", + "https://deno.hibas123.de/raw/ini@0.0.3/mod.ts": "c04a10c3a9e7849149caaf7a9101dce60919345149797ac463f5a6778f3e062f", + "https://deno.hibas123.de/raw/markdown@0.1.0/mod.ts": "495ee5abb28bff8e6e4027819ece57f61342ef7715419675c1b1be24c47fc624", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/block-lexer.ts": "8bb407abb7dc0cdf99eef9610c67812057749a36f7ffddc87aa6ce30ece3df71", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/extend-regexp.ts": "187bbc8527a00add37f05790af39e0a242dd2064270ab52a536f104d76634ab7", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/helpers.ts": "5cfea4e14aed4dc1964c006bab11f83444f51db5cfdeeb9d94e0463f5fa3f369", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/inline-lexer.ts": "8e665c6540dd2dac5a71e4b0e67546b32315e7e2593ed076d4b5aecc03715df0", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/interfaces.ts": "fe985b08281f5e00e658aed72b16d1c890f465683f27e357b4aa34b26ff4e748", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/marked.ts": "36cacb1b13527429bf48935d0fed1f715e71238375ba5163054d57cb6ebbe732", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/parser.ts": "3b200dc5ca451f7309d794da517c8b80cfe333c3636e5beb168b29b952f10f9a", + "https://deno.hibas123.de/raw/markdown@0.1.0/src/renderer.ts": "5437d447a90e6bdff628dde6c5e56d2210bc979661c47850576dc9ed9372334b", + "https://deno.land/std@0.208.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", + "https://deno.land/std@0.208.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", + "https://deno.land/std@0.208.0/bytes/concat.ts": "d3d420badeb4f26a0f2f3ce343725f937326aff1b4634b25341b12b27353aac4", + "https://deno.land/std@0.208.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", + "https://deno.land/std@0.208.0/crypto/_fnv/fnv32.ts": "e4649dfdefc5c987ed53c3c25db62db771a06d9d1b9c36d2b5cf0853b8e82153", + "https://deno.land/std@0.208.0/crypto/_fnv/fnv64.ts": "bfa0e4702061fdb490a14e6bf5f9168a22fb022b307c5723499469bfefca555e", + "https://deno.land/std@0.208.0/crypto/_fnv/mod.ts": "f956a95f58910f223e420340b7404702ecd429603acd4491fa77af84f746040c", + "https://deno.land/std@0.208.0/crypto/_fnv/util.ts": "accba12bfd80a352e32a872f87df2a195e75561f1b1304a4cb4f5a4648d288f9", + "https://deno.land/std@0.208.0/crypto/_wasm/lib/deno_std_wasm_crypto.generated.mjs": "c41c4676a3ea2a92e8fdff55434533474131e4dfac2262a6a6c81631069808d8", + "https://deno.land/std@0.208.0/crypto/_wasm/mod.ts": "d7b7dc54bbd6b02c16cd08e8e3d30fa9aa9692efb112a7ab5d8595827b9a0234", + "https://deno.land/std@0.208.0/crypto/crypto.ts": "91c67764abb640b3e2a0b46867704d02077c0b1f978f5c711e4408e5d856717d", + "https://deno.land/std@0.208.0/encoding/_util.ts": "f368920189c4fe6592ab2e93bd7ded8f3065b84f95cd3e036a4a10a75649dcba", + "https://deno.land/std@0.208.0/encoding/base64.ts": "81c0ecff5ccb402def58ca03d8bd245bd01da15a077d3362b568e991aa10f4d9", + "https://deno.land/std@0.208.0/fs/_util.ts": "fbf57dcdc9f7bc8128d60301eece608246971a7836a3bb1e78da75314f08b978", + "https://deno.land/std@0.208.0/fs/copy.ts": "ca19e4837965914471df38fbd61e16f9e8adfe89f9cffb0c83615c83ea3fc2bf", + "https://deno.land/std@0.208.0/fs/empty_dir.ts": "7fba29ef2d03f3503cd512616efc0535984cf1bbe7ca9d098e8b4d0d88910120", + "https://deno.land/std@0.208.0/fs/ensure_dir.ts": "dc64c4c75c64721d4e3fb681f1382f803ff3d2868f08563ff923fdd20d071c40", + "https://deno.land/std@0.208.0/fs/ensure_file.ts": "39ac83cc283a20ec2735e956adf5de3e8a3334e0b6820547b5772f71c49ae083", + "https://deno.land/std@0.208.0/fs/ensure_link.ts": "c15e69c48556d78aae31b83e0c0ece04b7b8bc0951412f5b759aceb6fde7f0ac", + "https://deno.land/std@0.208.0/fs/ensure_symlink.ts": "b389c8568f0656d145ac7ece472afe710815cccbb2ebfd19da7978379ae143fe", + "https://deno.land/std@0.208.0/fs/eol.ts": "8565e1e076c5baced170236617150a7833668658e000205d896fc54084309ce1", + "https://deno.land/std@0.208.0/fs/exists.ts": "cb59a853d84871d87acab0e7936a4dac11282957f8e195102c5a7acb42546bb8", + "https://deno.land/std@0.208.0/fs/expand_glob.ts": "4f98c508fc9e40d6311d2f7fd88aaad05235cc506388c22dda315e095305811d", + "https://deno.land/std@0.208.0/fs/mod.ts": "bc3d0acd488cc7b42627044caf47d72019846d459279544e1934418955ba4898", + "https://deno.land/std@0.208.0/fs/move.ts": "b4f8f46730b40c32ea3c0bc8eb0fd0e8139249a698883c7b3756424cf19785c9", + "https://deno.land/std@0.208.0/fs/walk.ts": "c1e6b43f72a46e89b630140308bd51a4795d416a416b4cfb7cd4bd1e25946723", + "https://deno.land/std@0.208.0/io/buffer.ts": "11acaeae3dc0e491a335d82915e09e9f8afd53ecb82562515e5951e78f69b076", + "https://deno.land/std@0.208.0/path/_common/assert_path.ts": "061e4d093d4ba5aebceb2c4da3318bfe3289e868570e9d3a8e327d91c2958946", + "https://deno.land/std@0.208.0/path/_common/basename.ts": "0d978ff818f339cd3b1d09dc914881f4d15617432ae519c1b8fdc09ff8d3789a", + "https://deno.land/std@0.208.0/path/_common/common.ts": "9e4233b2eeb50f8b2ae10ecc2108f58583aea6fd3e8907827020282dc2b76143", + "https://deno.land/std@0.208.0/path/_common/constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", + "https://deno.land/std@0.208.0/path/_common/dirname.ts": "2ba7fb4cc9fafb0f38028f434179579ce61d4d9e51296fad22b701c3d3cd7397", + "https://deno.land/std@0.208.0/path/_common/format.ts": "11aa62e316dfbf22c126917f5e03ea5fe2ee707386555a8f513d27ad5756cf96", + "https://deno.land/std@0.208.0/path/_common/from_file_url.ts": "ef1bf3197d2efbf0297a2bdbf3a61d804b18f2bcce45548ae112313ec5be3c22", + "https://deno.land/std@0.208.0/path/_common/glob_to_reg_exp.ts": "5c3c2b79fc2294ec803d102bd9855c451c150021f452046312819fbb6d4dc156", + "https://deno.land/std@0.208.0/path/_common/normalize.ts": "2ba7fb4cc9fafb0f38028f434179579ce61d4d9e51296fad22b701c3d3cd7397", + "https://deno.land/std@0.208.0/path/_common/normalize_string.ts": "88c472f28ae49525f9fe82de8c8816d93442d46a30d6bb5063b07ff8a89ff589", + "https://deno.land/std@0.208.0/path/_common/relative.ts": "1af19d787a2a84b8c534cc487424fe101f614982ae4851382c978ab2216186b4", + "https://deno.land/std@0.208.0/path/_common/strip_trailing_separators.ts": "7ffc7c287e97bdeeee31b155828686967f222cd73f9e5780bfe7dfb1b58c6c65", + "https://deno.land/std@0.208.0/path/_common/to_file_url.ts": "a8cdd1633bc9175b7eebd3613266d7c0b6ae0fb0cff24120b6092ac31662f9ae", + "https://deno.land/std@0.208.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", + "https://deno.land/std@0.208.0/path/_os.ts": "30b0c2875f360c9296dbe6b7f2d528f0f9c741cecad2e97f803f5219e91b40a2", + "https://deno.land/std@0.208.0/path/basename.ts": "04bb5ef3e86bba8a35603b8f3b69537112cdd19ce64b77f2522006da2977a5f3", + "https://deno.land/std@0.208.0/path/common.ts": "f4d061c7d0b95a65c2a1a52439edec393e906b40f1caf4604c389fae7caa80f5", + "https://deno.land/std@0.208.0/path/dirname.ts": "88a0a71c21debafc4da7a4cd44fd32e899462df458fbca152390887d41c40361", + "https://deno.land/std@0.208.0/path/extname.ts": "2da4e2490f3b48b7121d19fb4c91681a5e11bd6bd99df4f6f47d7a71bb6ecdf2", + "https://deno.land/std@0.208.0/path/format.ts": "3457530cc85d1b4bab175f9ae73998b34fd456c830d01883169af0681b8894fb", + "https://deno.land/std@0.208.0/path/from_file_url.ts": "e7fa233ea1dff9641e8d566153a24d95010110185a6f418dd2e32320926043f8", + "https://deno.land/std@0.208.0/path/glob.ts": "a00a81a55c02bbe074ab21a50b6495c6f7795f54cd718c824adaa92c6c9b7419", + "https://deno.land/std@0.208.0/path/glob_to_regexp.ts": "74d7448c471e293d03f05ccb968df4365fed6aaa508506b6325a8efdc01d8271", + "https://deno.land/std@0.208.0/path/is_absolute.ts": "67232b41b860571c5b7537f4954c88d86ae2ba45e883ee37d3dec27b74909d13", + "https://deno.land/std@0.208.0/path/is_glob.ts": "567dce5c6656bdedfc6b3ee6c0833e1e4db2b8dff6e62148e94a917f289c06ad", + "https://deno.land/std@0.208.0/path/join.ts": "98d3d76c819af4a11a81d5ba2dbb319f1ce9d63fc2b615597d4bcfddd4a89a09", + "https://deno.land/std@0.208.0/path/join_globs.ts": "9b84d5103b63d3dbed4b2cf8b12477b2ad415c7d343f1488505162dc0e5f4db8", + "https://deno.land/std@0.208.0/path/mod.ts": "3defabebc98279e62b392fee7a6937adc932a8f4dcd2471441e36c15b97b00e0", + "https://deno.land/std@0.208.0/path/normalize.ts": "aa95be9a92c7bd4f9dc0ba51e942a1973e2b93d266cd74f5ca751c136d520b66", + "https://deno.land/std@0.208.0/path/normalize_glob.ts": "674baa82e1c00b6cb153bbca36e06f8e0337cb8062db6d905ab5de16076ca46b", + "https://deno.land/std@0.208.0/path/parse.ts": "d87ff0deef3fb495bc0d862278ff96da5a06acf0625ca27769fc52ac0d3d6ece", + "https://deno.land/std@0.208.0/path/posix/_util.ts": "ecf49560fedd7dd376c6156cc5565cad97c1abe9824f4417adebc7acc36c93e5", + "https://deno.land/std@0.208.0/path/posix/basename.ts": "a630aeb8fd8e27356b1823b9dedd505e30085015407caa3396332752f6b8406a", + "https://deno.land/std@0.208.0/path/posix/common.ts": "e781d395dc76f6282e3f7dd8de13194abb8b04a82d109593141abc6e95755c8b", + "https://deno.land/std@0.208.0/path/posix/dirname.ts": "f48c9c42cc670803b505478b7ef162c7cfa9d8e751b59d278b2ec59470531472", + "https://deno.land/std@0.208.0/path/posix/extname.ts": "ee7f6571a9c0a37f9218fbf510c440d1685a7c13082c348d701396cc795e0be0", + "https://deno.land/std@0.208.0/path/posix/format.ts": "b94876f77e61bfe1f147d5ccb46a920636cd3cef8be43df330f0052b03875968", + "https://deno.land/std@0.208.0/path/posix/from_file_url.ts": "b97287a83e6407ac27bdf3ab621db3fccbf1c27df0a1b1f20e1e1b5acf38a379", + "https://deno.land/std@0.208.0/path/posix/glob_to_regexp.ts": "6ed00c71fbfe0ccc35977c35444f94e82200b721905a60bd1278b1b768d68b1a", + "https://deno.land/std@0.208.0/path/posix/is_absolute.ts": "159900a3422d11069d48395568217eb7fc105ceda2683d03d9b7c0f0769e01b8", + "https://deno.land/std@0.208.0/path/posix/is_glob.ts": "ec4fbc604b9db8487f7b56ab0e759b24a971ab6a45f7b0b698bc39b8b9f9680f", + "https://deno.land/std@0.208.0/path/posix/join.ts": "0c0d84bdc344876930126640011ec1b888e6facf74153ffad9ef26813aa2a076", + "https://deno.land/std@0.208.0/path/posix/join_globs.ts": "f4838d54b1f60a34a40625a3293f6e583135348be1b2974341ac04743cb26121", + "https://deno.land/std@0.208.0/path/posix/mod.ts": "f1b08a7f64294b7de87fc37190d63b6ce5b02889af9290c9703afe01951360ae", + "https://deno.land/std@0.208.0/path/posix/normalize.ts": "11de90a94ab7148cc46e5a288f7d732aade1d616bc8c862f5560fa18ff987b4b", + "https://deno.land/std@0.208.0/path/posix/normalize_glob.ts": "10a1840c628ebbab679254d5fa1c20e59106102354fb648a1765aed72eb9f3f9", + "https://deno.land/std@0.208.0/path/posix/parse.ts": "199208f373dd93a792e9c585352bfc73a6293411bed6da6d3bc4f4ef90b04c8e", + "https://deno.land/std@0.208.0/path/posix/relative.ts": "e2f230608b0f083e6deaa06e063943e5accb3320c28aef8d87528fbb7fe6504c", + "https://deno.land/std@0.208.0/path/posix/resolve.ts": "51579d83159d5c719518c9ae50812a63959bbcb7561d79acbdb2c3682236e285", + "https://deno.land/std@0.208.0/path/posix/separator.ts": "0b6573b5f3269a3164d8edc9cefc33a02dd51003731c561008c8bb60220ebac1", + "https://deno.land/std@0.208.0/path/posix/to_file_url.ts": "08d43ea839ee75e9b8b1538376cfe95911070a655cd312bc9a00f88ef14967b6", + "https://deno.land/std@0.208.0/path/posix/to_namespaced_path.ts": "c9228a0e74fd37e76622cd7b142b8416663a9b87db643302fa0926b5a5c83bdc", + "https://deno.land/std@0.208.0/path/relative.ts": "23d45ede8b7ac464a8299663a43488aad6b561414e7cbbe4790775590db6349c", + "https://deno.land/std@0.208.0/path/resolve.ts": "5b184efc87155a0af9fa305ff68a109e28de9aee81fc3e77cd01380f19daf867", + "https://deno.land/std@0.208.0/path/separator.ts": "40a3e9a4ad10bef23bc2cd6c610291b6c502a06237c2c4cd034a15ca78dedc1f", + "https://deno.land/std@0.208.0/path/to_file_url.ts": "edaafa089e0bce386e1b2d47afe7c72e379ff93b28a5829a5885e4b6c626d864", + "https://deno.land/std@0.208.0/path/to_namespaced_path.ts": "cf8734848aac3c7527d1689d2adf82132b1618eff3cc523a775068847416b22a", + "https://deno.land/std@0.208.0/path/windows/_util.ts": "f32b9444554c8863b9b4814025c700492a2b57ff2369d015360970a1b1099d54", + "https://deno.land/std@0.208.0/path/windows/basename.ts": "8a9dbf7353d50afbc5b221af36c02a72c2d1b2b5b9f7c65bf6a5a2a0baf88ad3", + "https://deno.land/std@0.208.0/path/windows/common.ts": "e781d395dc76f6282e3f7dd8de13194abb8b04a82d109593141abc6e95755c8b", + "https://deno.land/std@0.208.0/path/windows/dirname.ts": "5c2aa541384bf0bd9aca821275d2a8690e8238fa846198ef5c7515ce31a01a94", + "https://deno.land/std@0.208.0/path/windows/extname.ts": "07f4fa1b40d06a827446b3e3bcc8d619c5546b079b8ed0c77040bbef716c7614", + "https://deno.land/std@0.208.0/path/windows/format.ts": "343019130d78f172a5c49fdc7e64686a7faf41553268961e7b6c92a6d6548edf", + "https://deno.land/std@0.208.0/path/windows/from_file_url.ts": "d53335c12b0725893d768be3ac6bf0112cc5b639d2deb0171b35988493b46199", + "https://deno.land/std@0.208.0/path/windows/glob_to_regexp.ts": "290755e18ec6c1a4f4d711c3390537358e8e3179581e66261a0cf348b1a13395", + "https://deno.land/std@0.208.0/path/windows/is_absolute.ts": "245b56b5f355ede8664bd7f080c910a97e2169972d23075554ae14d73722c53c", + "https://deno.land/std@0.208.0/path/windows/is_glob.ts": "ec4fbc604b9db8487f7b56ab0e759b24a971ab6a45f7b0b698bc39b8b9f9680f", + "https://deno.land/std@0.208.0/path/windows/join.ts": "e6600bf88edeeef4e2276e155b8de1d5dec0435fd526ba2dc4d37986b2882f16", + "https://deno.land/std@0.208.0/path/windows/join_globs.ts": "f4838d54b1f60a34a40625a3293f6e583135348be1b2974341ac04743cb26121", + "https://deno.land/std@0.208.0/path/windows/mod.ts": "d7040f461465c2c21c1c68fc988ef0bdddd499912138cde3abf6ad60c7fb3814", + "https://deno.land/std@0.208.0/path/windows/normalize.ts": "9deebbf40c81ef540b7b945d4ccd7a6a2c5a5992f791e6d3377043031e164e69", + "https://deno.land/std@0.208.0/path/windows/normalize_glob.ts": "344ff5ed45430495b9a3d695567291e50e00b1b3b04ea56712a2acf07ab5c128", + "https://deno.land/std@0.208.0/path/windows/parse.ts": "120faf778fe1f22056f33ded069b68e12447668fcfa19540c0129561428d3ae5", + "https://deno.land/std@0.208.0/path/windows/relative.ts": "026855cd2c36c8f28f1df3c6fbd8f2449a2aa21f48797a74700c5d872b86d649", + "https://deno.land/std@0.208.0/path/windows/resolve.ts": "5ff441ab18a2346abadf778121128ee71bda4d0898513d4639a6ca04edca366b", + "https://deno.land/std@0.208.0/path/windows/separator.ts": "ae21f27015f10510ed1ac4a0ba9c4c9c967cbdd9d9e776a3e4967553c397bd5d", + "https://deno.land/std@0.208.0/path/windows/to_file_url.ts": "8e9ea9e1ff364aa06fa72999204229952d0a279dbb876b7b838b2b2fea55cce3", + "https://deno.land/std@0.208.0/path/windows/to_namespaced_path.ts": "e0f4d4a5e77f28a5708c1a33ff24360f35637ba6d8f103d19661255ef7bfd50d", + "https://deno.land/std@0.208.0/streams/_common.ts": "3b2c1f0287ce2ad51fff4091a7d0f48375c85b0ec341468e76d5ac13bb0014dd", + "https://deno.land/std@0.208.0/streams/buffer.ts": "6cd773d22cf21bb988a98cc551b5abfc4c3b03516f93eaa3fb6f2f6e16032deb", + "https://deno.land/std@0.208.0/streams/byte_slice_stream.ts": "c46d7c74836fc8c1a9acd9fe211cbe1bbaaee1b36087c834fb03af4991135c3a", + "https://deno.land/std@0.208.0/streams/copy.ts": "faa201291ce9116fb1fae9d16b4f033e259fdea437b77404ff5cf742507844e6", + "https://deno.land/std@0.208.0/streams/delimiter_stream.ts": "af7aab15d830636265c998ca330576edb6a50959fec1949d2fa57ef8dda299d2", + "https://deno.land/std@0.208.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1", + "https://deno.land/std@0.208.0/streams/iterate_reader.ts": "d6b2770f8ee27fb1c1e2c5a3c66451647f6fb5371534c78bef2ce614d60568d8", + "https://deno.land/std@0.208.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048", + "https://deno.land/std@0.208.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38", + "https://deno.land/std@0.208.0/streams/merge_readable_streams.ts": "22963b9bbec8d000d9613db859002768e013fd731cafd55942dc0120d03e7b5d", + "https://deno.land/std@0.208.0/streams/mod.ts": "e133c271474f1e9dc19f5c4959406f5c2101540c56a3e7d7abc6bdb7bcef807e", + "https://deno.land/std@0.208.0/streams/read_all.ts": "64bfb842f4047f81d977dead27b6e5a9faaba17c8f1c30066284553dcfc13171", + "https://deno.land/std@0.208.0/streams/readable_stream_from_reader.ts": "c28abb70a35c683f522b6bd43d39c272db33d86d874c59e728e26f270956b773", + "https://deno.land/std@0.208.0/streams/reader_from_iterable.ts": "4fd184770b3756987b97c7718df3f5c4a2828b50e1cdc33111827d640dca6366", + "https://deno.land/std@0.208.0/streams/reader_from_stream_reader.ts": "6fb8852fdd9775ce940a4facf6e265f1f233cc3b90f6d064b1556f6b0ef3d18b", + "https://deno.land/std@0.208.0/streams/text_delimiter_stream.ts": "f0dc8ff953a8a77f0d1fa8db1fee62de817f36e20d79b00b1362847e30fbdd90", + "https://deno.land/std@0.208.0/streams/text_line_stream.ts": "4958525688593d20c1c439a006dabd64881736bff642744ca060b2c34b40c240", + "https://deno.land/std@0.208.0/streams/to_array_buffer.ts": "31b0729f6527054760a3758e84d6d646eac0f7f586204a81824c3eb7728ce836", + "https://deno.land/std@0.208.0/streams/to_blob.ts": "4cf929b3ffe5d4dbe445d572246159ee2eebf69e998a0ba867b9048fb6e92797", + "https://deno.land/std@0.208.0/streams/to_json.ts": "10635fac9826392bb8e70bc8354d3beb1058fa1676aa9b6f98257a0d5575f520", + "https://deno.land/std@0.208.0/streams/to_text.ts": "4018b5f7a0e7ab28d6957c239e401f8b534ef326b7ebd282ca76b3cd55380aab", + "https://deno.land/std@0.208.0/streams/to_transform_stream.ts": "50af06140c414090df8c3879f46bed4043a5d73caa60352c0c9682a88ec7a8c9", + "https://deno.land/std@0.208.0/streams/writable_stream_from_writer.ts": "057bdfc6c08e34a8a86e2d61efe7354a8a0976260cd1437de8b7e64bcefaa9b9", + "https://deno.land/std@0.208.0/streams/write_all.ts": "8fc9525c16eb60eb851274d4693ecd35c2177620239fbdfa8f5aacb32702f2cb", + "https://deno.land/std@0.208.0/streams/writer_from_stream_writer.ts": "71d7a26f2a2b955794a7318856ad64d9eade36467d930b40698d3d5bfb0ce3b4", + "https://deno.land/std@0.208.0/streams/zip_readable_streams.ts": "721c5bce8862c8225e60995b2d61c7b1b1d5b5178b60d303a01f453d5c26bb62", + "https://deno.land/std@0.208.0/uuid/_common.ts": "cb1441f4df460571fc0919e1c5c217f3e7006189b703caf946604b3f791ae34d", + "https://deno.land/std@0.208.0/uuid/constants.ts": "0d0e95561343da44adb4a4edbc1f04cef48b0d75288c4d1704f58743f4a50d88", + "https://deno.land/std@0.208.0/uuid/mod.ts": "5c7ca252dddba1ddf0bca2dc1124328245272650c98251d71996bb9cd8f5a386", + "https://deno.land/std@0.208.0/uuid/v1.ts": "fe36009afce7ced96e1b5928565e12c5a8eb0df1a2b5063c0a72bda6b75c0de5", + "https://deno.land/std@0.208.0/uuid/v3.ts": "397ad58daec8b5ef6ba7e94fe86c9bc56b194adcbe2f70ec40a1fb005203c870", + "https://deno.land/std@0.208.0/uuid/v4.ts": "0f081880c156fd59b9e44e2f84ea0f94a3627e89c224eaf6cc982b53d849f37e", + "https://deno.land/std@0.208.0/uuid/v5.ts": "9daaf769e487b512d25adf8e137e05ff2e3392d27f66d5b273ee28030ff7cd58", + "https://deno.land/std@0.208.0/yaml/_dumper/dumper.ts": "717403d0e700de783f2ef5c906b3d7245383e1509fc050e7ff5d4a53a03dbf40", + "https://deno.land/std@0.208.0/yaml/_dumper/dumper_state.ts": "f0d0673ceea288334061ca34b63954c2bb5feb5bf6de5e4cfe9a942cdf6e5efe", + "https://deno.land/std@0.208.0/yaml/_error.ts": "b59e2c76ce5a47b1b9fa0ff9f96c1dd92ea1e1b17ce4347ece5944a95c3c1a84", + "https://deno.land/std@0.208.0/yaml/_loader/loader.ts": "63ec7f0a265dbbabc54b25a4beefff7650e205160a2d75c7d8f8363b5f84851a", + "https://deno.land/std@0.208.0/yaml/_loader/loader_state.ts": "0841870b467169269d7c2dfa75cd288c319bc06f65edd9e42c29e5fced91c7a4", + "https://deno.land/std@0.208.0/yaml/_mark.ts": "dcd8585dee585e024475e9f3fe27d29740670fb64ebb970388094cad0fc11d5d", + "https://deno.land/std@0.208.0/yaml/_state.ts": "ef03d55ec235d48dcfbecc0ab3ade90bfae69a61094846e08003421c2cf5cfc6", + "https://deno.land/std@0.208.0/yaml/_type/binary.ts": "24d49614463a7339a8a16d894919c2ec18a10588ae360ec352093b60e2cc8b0d", + "https://deno.land/std@0.208.0/yaml/_type/bool.ts": "5bfa75da84343d45347b521ba4e5aeace9fe6f53447405290d53315a3fc20e66", + "https://deno.land/std@0.208.0/yaml/_type/float.ts": "056bd3cb9c5586238b20517511014fb24b0e36f98f9f6073e12da308b6b9808a", + "https://deno.land/std@0.208.0/yaml/_type/function.ts": "ff574fe84a750695302864e1c31b93f12d14ada4bde79a5f93197fc33ad17471", + "https://deno.land/std@0.208.0/yaml/_type/int.ts": "563ad074f0fa7aecf6b6c3d84135bcc95a8269dcc15de878de20ce868fd773fa", + "https://deno.land/std@0.208.0/yaml/_type/map.ts": "7b105e4ab03a361c61e7e335a0baf4d40f06460b13920e5af3fb2783a1464000", + "https://deno.land/std@0.208.0/yaml/_type/merge.ts": "8192bf3e4d637f32567917f48bb276043da9cf729cf594e5ec191f7cd229337e", + "https://deno.land/std@0.208.0/yaml/_type/mod.ts": "060e2b3d38725094b77ea3a3f05fc7e671fced8e67ca18e525be98c4aa8f4bbb", + "https://deno.land/std@0.208.0/yaml/_type/nil.ts": "606e8f0c44d73117c81abec822f89ef81e40f712258c74f186baa1af659b8887", + "https://deno.land/std@0.208.0/yaml/_type/omap.ts": "cfe59a294726f5cea705c39a61fd2b08199cf48f4ccd6b040cb550ec0f38d0a1", + "https://deno.land/std@0.208.0/yaml/_type/pairs.ts": "0032fdfe57558d21696a4f8cf5b5cfd1f698743177080affc18629685c905666", + "https://deno.land/std@0.208.0/yaml/_type/regexp.ts": "1ce118de15b2da43b4bd8e4395f42d448b731acf3bdaf7c888f40789f9a95f8b", + "https://deno.land/std@0.208.0/yaml/_type/seq.ts": "95333abeec8a7e4d967b8c8328b269e342a4bbdd2585395549b9c4f58c8533a2", + "https://deno.land/std@0.208.0/yaml/_type/set.ts": "f28ba44e632ef2a6eb580486fd47a460445eeddbdf1dbc739c3e62486f566092", + "https://deno.land/std@0.208.0/yaml/_type/str.ts": "a67a3c6e429d95041399e964015511779b1130ea5889fa257c48457bd3446e31", + "https://deno.land/std@0.208.0/yaml/_type/timestamp.ts": "706ea80a76a73e48efaeb400ace087da1f927647b53ad6f754f4e06d51af087f", + "https://deno.land/std@0.208.0/yaml/_type/undefined.ts": "94a316ca450597ccbc6750cbd79097ad0d5f3a019797eed3c841a040c29540ba", + "https://deno.land/std@0.208.0/yaml/_utils.ts": "26b311f0d42a7ce025060bd6320a68b50e52fd24a839581eb31734cd48e20393", + "https://deno.land/std@0.208.0/yaml/mod.ts": "28ecda6652f3e7a7735ee29c247bfbd32a2e2fc5724068e9fd173ec4e59f66f7", + "https://deno.land/std@0.208.0/yaml/parse.ts": "1fbbda572bf3fff578b6482c0d8b85097a38de3176bf3ab2ca70c25fb0c960ef", + "https://deno.land/std@0.208.0/yaml/schema.ts": "96908b78dc50c340074b93fc1598d5e7e2fe59103f89ff81e5a49b2dedf77a67", + "https://deno.land/std@0.208.0/yaml/schema/core.ts": "fa406f18ceedc87a50e28bb90ec7a4c09eebb337f94ef17468349794fa828639", + "https://deno.land/std@0.208.0/yaml/schema/default.ts": "0047e80ae8a4a93293bc4c557ae8a546aabd46bb7165b9d9b940d57b4d88bde9", + "https://deno.land/std@0.208.0/yaml/schema/extended.ts": "0784416bf062d20a1626b53c03380e265b3e39b9409afb9f4cb7d659fd71e60d", + "https://deno.land/std@0.208.0/yaml/schema/failsafe.ts": "d219ab5febc43f770917d8ec37735a4b1ad671149846cbdcade767832b42b92b", + "https://deno.land/std@0.208.0/yaml/schema/json.ts": "5f41dd7c2f1ad545ef6238633ce9ee3d444dfc5a18101e1768bd5504bf90e5e5", + "https://deno.land/std@0.208.0/yaml/schema/mod.ts": "4472e827bab5025e92bc2eb2eeefa70ecbefc64b2799b765c69af84822efef32", + "https://deno.land/std@0.208.0/yaml/stringify.ts": "fffc09c65c68d3d63f8159e8cbaa3f489bc20a8e55b4fbb61a8c2e9f914d1d02", + "https://deno.land/std@0.208.0/yaml/type.ts": "65553da3da3c029b6589c6e4903f0afbea6768be8fca61580711457151f2b30f", + "https://deno.land/std@0.63.0/_util/assert.ts": "e1f76e77c5ccb5a8e0dbbbe6cce3a56d2556c8cb5a9a8802fc9565af72462149", + "https://deno.land/std@0.63.0/archive/tar.ts": "5a0a7465d57fec2684239b07da0f5ec884c6c71a768297f73c348f22e04acd92", + "https://deno.land/std@0.63.0/bytes/mod.ts": "b1a149ac741728db00bda9ce1a2d044f248edd5ac95e708a6cc501bfd3adb4a7", + "https://deno.land/std@0.63.0/encoding/utf8.ts": "8654fa820aa69a37ec5eb11908e20b39d056c9bf1c23ab294303ff467f3d50a1", + "https://deno.land/std@0.63.0/fs/_util.ts": "68508c05d5a02678179a02beabf2b3eac5b16c5a9cbd1c272686d8101bb2679d", + "https://deno.land/std@0.63.0/fs/copy.ts": "b562e8f482cb8459bb011cbd769769bbdb4f6bc966effd277c06edbdbe41b72e", + "https://deno.land/std@0.63.0/fs/empty_dir.ts": "4d706eb01e5d08d862c673200d1978526e485368559fc7fb0f297add68f9cc43", + "https://deno.land/std@0.63.0/fs/ensure_dir.ts": "54cf0cfb16160857116d1bdff98214ad0189275fe2f089607fdc06c52ac79cc4", + "https://deno.land/std@0.63.0/fs/ensure_file.ts": "b70eccaee6f41ae226d399ad9c8ebc29beb5dd86fe179d30ab7e681976352baf", + "https://deno.land/std@0.63.0/fs/ensure_link.ts": "f647cea5c3b65f4a6618444546e9ca891d38f54f7fd4c718fb1fd575b4232213", + "https://deno.land/std@0.63.0/fs/ensure_symlink.ts": "d472af1507fb920db214f6816522ddc89eefd5800735243873053b2523882ec1", + "https://deno.land/std@0.63.0/fs/eol.ts": "4a0b2a612e0639b76d9c5fab0392e7bf1a158a7dab191ff7b7564870a1173812", + "https://deno.land/std@0.63.0/fs/exists.ts": "5429dce6587bfcdde06a7a2a1fd5ad932c17d74ca082e67934fa646cff1d2e57", + "https://deno.land/std@0.63.0/fs/expand_glob.ts": "415a109faaf50f8bf3e116bac534928a72373d0a981784e6130d91d11ce543a6", + "https://deno.land/std@0.63.0/fs/mod.ts": "88bb982130bb86df1cb350619fed4118c4cc439eeced6484330b7255e3a16568", + "https://deno.land/std@0.63.0/fs/move.ts": "020f56063c66288facbebc7d3c8dd3f309b0949fcaea49e463ccd5217fc82e2c", + "https://deno.land/std@0.63.0/fs/read_json.ts": "6922a9adc50cd2a7233298fd7b7ad9062d8602a55d4abb2b72d23ef0268b1306", + "https://deno.land/std@0.63.0/fs/walk.ts": "1715028b1646648b1239b9f93ff42beaf38f8e77424f8f9c2ffab9ee1594a54f", + "https://deno.land/std@0.63.0/fs/write_json.ts": "89a6231f51a6759dfff8f1f5534d030c2239c22fc9f3c0b3305d424f4f1d5604", + "https://deno.land/std@0.63.0/io/bufio.ts": "e76c5b7bf978a638aae6f62b87efde3ab7203b85902ce9b84ac8388c8c2bb104", + "https://deno.land/std@0.63.0/io/readers.ts": "4c2e98abf2a2a1d5e2adaf460479a1c69f742951c1bc141b26654d2f5248b663", + "https://deno.land/std@0.63.0/path/_constants.ts": "e11f32a36644e04dce243f3c1f30c02cc5d149827f48a755628176f0707cfc70", + "https://deno.land/std@0.63.0/path/_globrex.ts": "cfd1af99fb5ed2eff9b49aef994cdf7a14a5d26cd32b14c60b27bfff49839c82", + "https://deno.land/std@0.63.0/path/_interface.ts": "5876f91d35fd42624893a4aaddaee352144e1f46e719f1dde6511bab7c3c1029", + "https://deno.land/std@0.63.0/path/_util.ts": "f0fa012d40ae9b6acbef03908e534eb11e694de6470fb4d78ea4f38829e735ab", + "https://deno.land/std@0.63.0/path/common.ts": "e4ec66a7416d56f60331b66e27a8a4f08c7b1cf48e350271cb69754a01cf5c04", + "https://deno.land/std@0.63.0/path/glob.ts": "dbcda011329b5ba0f955823e578af19a8bf8d01586a07925b42affe885544e62", + "https://deno.land/std@0.63.0/path/mod.ts": "6de8885c2534757097818e302becd1cefcbc4c28ac022cc279e612ee04e8cfd1", + "https://deno.land/std@0.63.0/path/posix.ts": "1a6e53e1c90dde43750f38134ace0f6300f7330f5456b60d4979a4564fcf5f7a", + "https://deno.land/std@0.63.0/path/separator.ts": "9dd15d46ff84a16e13554f56af7fee1f85f8d0f379efbbe60ac066a60561f036", + "https://deno.land/std@0.63.0/path/win32.ts": "b530878b0f3f281c7f06fa73dc8e89a15106ab06e88ca1dea27394d09a1b0514", + "https://deno.land/std@0.79.0/async/pool.ts": "a499691231d8c249f044f69d204b479ad3af7f115e0b37342829eff076bc2450", + "https://deno.land/std@0.79.0/encoding/base64.ts": "b1d8f99b778981548457ec74bc6273ad785ffd6f61b2233bd5b30925345b565d", + "https://deno.land/std@0.79.0/encoding/hex.ts": "07a03ba41c96060a4ed4ba272e50b9e23f3c5b3839f4b069cdebc24d57434386", + "https://deno.land/std@0.79.0/hash/_wasm/hash.ts": "005f64c4d9343ecbc91e0da9ae5e800f146c20930ad829bbb872c5c06bd89c5f", + "https://deno.land/std@0.79.0/hash/_wasm/wasm.js": "fa27095b91e6268682100997577f1d3478beab5b045777e27ff7b2b5d19c8fdc", + "https://deno.land/std@0.79.0/hash/mod.ts": "e764a6a9ab2f5519a97f928e17cc13d984e3dd5c7f742ff9c1c8fb3114790f0c", + "https://deno.land/std@0.80.0/fs/eol.ts": "e133163510b683fc26a8285c4fa81e259a398ca592ab49edc3fdc9b2cc71e99a", + "https://deno.land/std@0.81.0/_util/assert.ts": "e1f76e77c5ccb5a8e0dbbbe6cce3a56d2556c8cb5a9a8802fc9565af72462149", + "https://deno.land/std@0.81.0/_util/has_own_property.ts": "91a2ef2fae5d941643a6472b97cac7ed8060a96deb66f4fafb4a2750c8af18e5", + "https://deno.land/std@0.81.0/_util/os.ts": "e2be3e25f96e4b5a233a08fd03aba80819bcaee66ac53c11c9b5aaa64799b475", + "https://deno.land/std@0.81.0/async/deferred.ts": "ecdb71319e164ec4ace5a44e3ee991b52c21bfc19e498acdf8eccdc0b1184f70", + "https://deno.land/std@0.81.0/async/delay.ts": "35957d585a6e3dd87706858fb1d6b551cb278271b03f52c5a2cb70e65e00c26a", + "https://deno.land/std@0.81.0/async/mod.ts": "39f2602a005805dd1e6b9da4ee5391b14d15e8fec4fa5494a6165c599911d746", + "https://deno.land/std@0.81.0/async/mux_async_iterator.ts": "2532c6f448fda34db7ab9504746db671c32425dd4ffa96eeb9df744c3038c106", + "https://deno.land/std@0.81.0/async/pool.ts": "a499691231d8c249f044f69d204b479ad3af7f115e0b37342829eff076bc2450", + "https://deno.land/std@0.81.0/bytes/mod.ts": "e4f91c6473fe13e3cf1a23649137f87f49135c10bc08fc0f83382a0fb0b03744", + "https://deno.land/std@0.81.0/datetime/formatter.ts": "0db8ca0d476bd80151b3557eb8f1bb2b6d5ba0713c8fc98f3526c2ce8c01649e", + "https://deno.land/std@0.81.0/datetime/mod.ts": "38ecaf7da9f81da63a18c7e6d4602ba70f563e99ab786c179393c7984fbf6006", + "https://deno.land/std@0.81.0/datetime/tokenizer.ts": "ae21a459f2f017ac81b1b49caa81174b6b8ab8a4d8d82195dcf25bb67b565c71", + "https://deno.land/std@0.81.0/encoding/utf8.ts": "1b7e77db9a12363c67872f8a208886ca1329f160c1ca9133b13d2ed399688b99", + "https://deno.land/std@0.81.0/fmt/colors.ts": "c5665c66f1a67228f21c5989bbb04b36d369b98dd7ceac06f5e26856c81c2531", + "https://deno.land/std@0.81.0/http/_io.ts": "8e1ed7effe99446535a98ac0cdcfd544265c78c46e4cef5a8c5f8e31037711d9", + "https://deno.land/std@0.81.0/http/cookie.ts": "8b54d578e1b72df92b30ec65c0e0d89142fec8700bff18a8cfe3ce87e60edeb6", + "https://deno.land/std@0.81.0/http/http_status.ts": "0ecc0799a208f49452023b1b927106ba5a2c13cc6cf6666345db028239d554ab", + "https://deno.land/std@0.81.0/http/server.ts": "282bb3b13da077a760083b465843fc2b8bf8936c3e22c514f6ae695db0721866", + "https://deno.land/std@0.81.0/io/bufio.ts": "3cbbe1f761c1c636d1e7128ed4e7fdca6bf21d9199aa3cae71e69972a6ae8f93", + "https://deno.land/std@0.81.0/io/ioutil.ts": "b781afd113a7d29c88c3d88efec391a0446c3e6537b74f795dd8579339ae8a5f", + "https://deno.land/std@0.81.0/io/readers.ts": "4c2e98abf2a2a1d5e2adaf460479a1c69f742951c1bc141b26654d2f5248b663", + "https://deno.land/std@0.81.0/mime/multipart.ts": "fa3c5ea5374ecae99e02543506a6ef4dc43ed5f3e26f406e8f4fea20f184cca6", + "https://deno.land/std@0.81.0/path/_constants.ts": "3a19d04e5d6de4620df22ab40c2e8c9d87002b56702d2b4669c14dfa2765e368", + "https://deno.land/std@0.81.0/path/_interface.ts": "67b276380d297a7cedc3c17f7a0bf122edcfc96a3e1f69de06f379d85ba0e2c0", + "https://deno.land/std@0.81.0/path/_util.ts": "7820a788b35c26dfc27ff329df12507fc0553ae92727009597046f6cf856b4fa", + "https://deno.land/std@0.81.0/path/common.ts": "e4ec66a7416d56f60331b66e27a8a4f08c7b1cf48e350271cb69754a01cf5c04", + "https://deno.land/std@0.81.0/path/glob.ts": "c36be777b82346a3fac02ef0ffef7d6c9bfe4da50f4599c798d7ded072f88d22", + "https://deno.land/std@0.81.0/path/mod.ts": "ef6a91aed4bc417eb56f8d5947f117f35ed3ca76c24d19dc482d3d6514218d5f", + "https://deno.land/std@0.81.0/path/posix.ts": "0f635537634111caa17a944b7405cf0a50ed6d6dd1a847c65323bebeccec5718", + "https://deno.land/std@0.81.0/path/separator.ts": "696812939d47fbe095002e92d595e3a1cdf03157222029a39c68dce9995f38c4", + "https://deno.land/std@0.81.0/path/win32.ts": "c5efe2a88d2351adddb53c22439ef32dc1081bc0d4205ae54a2ce388bcc600fb", + "https://deno.land/std@0.81.0/textproto/mod.ts": "4c378eda3cb6216608bb4c3a34201761c65f6980c4669455ca224c330cd5b790", + "https://deno.land/std@0.83.0/_util/assert.ts": "e1f76e77c5ccb5a8e0dbbbe6cce3a56d2556c8cb5a9a8802fc9565af72462149", + "https://deno.land/std@0.83.0/_util/os.ts": "e2be3e25f96e4b5a233a08fd03aba80819bcaee66ac53c11c9b5aaa64799b475", + "https://deno.land/std@0.83.0/encoding/base64.ts": "b1d8f99b778981548457ec74bc6273ad785ffd6f61b2233bd5b30925345b565d", + "https://deno.land/std@0.83.0/encoding/hex.ts": "fa01b16414c8e04caa0055f2d8c4610a3ec714a04315d0afe6956e07d501e11d", + "https://deno.land/std@0.83.0/fmt/colors.ts": "c5665c66f1a67228f21c5989bbb04b36d369b98dd7ceac06f5e26856c81c2531", + "https://deno.land/std@0.83.0/fs/_util.ts": "9318f5253cb09177280bdce64b6af97012707cdb458c02864811c2bae1dd1dbd", + "https://deno.land/std@0.83.0/fs/copy.ts": "94a9035388fb197e5d61db360bbf77497dbddd66bce56a42b7b6e0c39d5f7a2e", + "https://deno.land/std@0.83.0/fs/empty_dir.ts": "4d706eb01e5d08d862c673200d1978526e485368559fc7fb0f297add68f9cc43", + "https://deno.land/std@0.83.0/fs/ensure_dir.ts": "54cf0cfb16160857116d1bdff98214ad0189275fe2f089607fdc06c52ac79cc4", + "https://deno.land/std@0.83.0/fs/ensure_file.ts": "b70eccaee6f41ae226d399ad9c8ebc29beb5dd86fe179d30ab7e681976352baf", + "https://deno.land/std@0.83.0/fs/ensure_link.ts": "f647cea5c3b65f4a6618444546e9ca891d38f54f7fd4c718fb1fd575b4232213", + "https://deno.land/std@0.83.0/fs/ensure_symlink.ts": "88e14896b2cf069ac6342cf929c1ca57a681eb90f48e5af658c05fbb100c6097", + "https://deno.land/std@0.83.0/fs/eol.ts": "e133163510b683fc26a8285c4fa81e259a398ca592ab49edc3fdc9b2cc71e99a", + "https://deno.land/std@0.83.0/fs/exists.ts": "5429dce6587bfcdde06a7a2a1fd5ad932c17d74ca082e67934fa646cff1d2e57", + "https://deno.land/std@0.83.0/fs/expand_glob.ts": "1b43b860bd0834f2d79db4b88bb3ae97b4aed6c91e377bb843cc9d2f024bb117", + "https://deno.land/std@0.83.0/fs/mod.ts": "54ba0d1dac6de21ac32e3b60b83930e7febb4a2148ed735013b8d911c889d172", + "https://deno.land/std@0.83.0/fs/move.ts": "63803372793b85edfb8da586145fa5d33f4836caf4cea919f5b172b06bcab08a", + "https://deno.land/std@0.83.0/fs/walk.ts": "8d37f2164a7397668842a7cb5d53b9e7bcd216462623b1b96abe519f76d7f8b9", + "https://deno.land/std@0.83.0/hash/_wasm/hash.ts": "005f64c4d9343ecbc91e0da9ae5e800f146c20930ad829bbb872c5c06bd89c5f", + "https://deno.land/std@0.83.0/hash/_wasm/wasm.js": "fa27095b91e6268682100997577f1d3478beab5b045777e27ff7b2b5d19c8fdc", + "https://deno.land/std@0.83.0/hash/mod.ts": "e764a6a9ab2f5519a97f928e17cc13d984e3dd5c7f742ff9c1c8fb3114790f0c", + "https://deno.land/std@0.83.0/path/_constants.ts": "3a19d04e5d6de4620df22ab40c2e8c9d87002b56702d2b4669c14dfa2765e368", + "https://deno.land/std@0.83.0/path/_interface.ts": "67b276380d297a7cedc3c17f7a0bf122edcfc96a3e1f69de06f379d85ba0e2c0", + "https://deno.land/std@0.83.0/path/_util.ts": "7820a788b35c26dfc27ff329df12507fc0553ae92727009597046f6cf856b4fa", + "https://deno.land/std@0.83.0/path/common.ts": "e4ec66a7416d56f60331b66e27a8a4f08c7b1cf48e350271cb69754a01cf5c04", + "https://deno.land/std@0.83.0/path/glob.ts": "c36be777b82346a3fac02ef0ffef7d6c9bfe4da50f4599c798d7ded072f88d22", + "https://deno.land/std@0.83.0/path/mod.ts": "ef6a91aed4bc417eb56f8d5947f117f35ed3ca76c24d19dc482d3d6514218d5f", + "https://deno.land/std@0.83.0/path/posix.ts": "0f635537634111caa17a944b7405cf0a50ed6d6dd1a847c65323bebeccec5718", + "https://deno.land/std@0.83.0/path/separator.ts": "696812939d47fbe095002e92d595e3a1cdf03157222029a39c68dce9995f38c4", + "https://deno.land/std@0.83.0/path/win32.ts": "c5efe2a88d2351adddb53c22439ef32dc1081bc0d4205ae54a2ce388bcc600fb", + "https://deno.land/x/abc@v1.2.4/_header.ts": "111617a83e956c74f2bb2c3ccbb0cc39801b13365c11c050e74d0b74d31546ac", + "https://deno.land/x/abc@v1.2.4/_http_method.ts": "407c04d24eaee5ce9a1b00a9f1ef0d5b0b0cacfec080a98ece15ed8471ee9ef8", + "https://deno.land/x/abc@v1.2.4/_mime.ts": "32d91f49a4477ec4901830b12c22ce77c5ade18bc22f83ce6e3f803c47cbfdd3", + "https://deno.land/x/abc@v1.2.4/app.ts": "88c0ff086e82cabf7a72276a263cc4d51de6db2e9d8f947dff3f8370a9488b7c", + "https://deno.land/x/abc@v1.2.4/constants.ts": "1c04ea5873f9540a1c227c70ebbf97f3f3c2751a88b98f035f7eccf6b3ae4201", + "https://deno.land/x/abc@v1.2.4/context.ts": "e919516d5b9b21bbb70cd59409174b98a72f05f8fbb1f41ed30ca7a75170b806", + "https://deno.land/x/abc@v1.2.4/group.ts": "cadbb1476b06b828494bf1fc049c1184cd5fc8bf519c1eb9e59e5b4409c8eba6", + "https://deno.land/x/abc@v1.2.4/http_exception.ts": "45cd2e85f3f63f011af35064459d5180257766ebc4af981aef6c3a7fc9955ca3", + "https://deno.land/x/abc@v1.2.4/middleware/cors.ts": "c274cfb67d71a97e3648a299aad5a7eed428a20ee02914bb3428c044d66edd3c", + "https://deno.land/x/abc@v1.2.4/middleware/logger.ts": "18aaf687a365050c8cffa133019bf2af13c4fdf755ea75ab6f8c194059f40a5c", + "https://deno.land/x/abc@v1.2.4/middleware/skipper.ts": "a8f299c116b6f68e6c3f387cb871b2e7d6f4418ecee927f0fc0ca1794be53662", + "https://deno.land/x/abc@v1.2.4/mod.ts": "861cbdf90446f40afc7ddcaacbcb69e432e0970e6c6ea830ea80fd988de3a2e8", + "https://deno.land/x/abc@v1.2.4/router.ts": "45be01701031eda4c95f9a68c6248014a4e939c2e9e0679d920867fe327a7da0", + "https://deno.land/x/abc@v1.2.4/types.ts": "2e8a6ebbacf3c814b3b1f40d9b38a8833d8e41b55b67a23e5bbedf4edb51212a", + "https://deno.land/x/abc@v1.2.4/util.ts": "8eb6a894461a1875132b4d380cf6e52396a5fbcc7e1cde4aa7d523183cadf51b", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/encoding/utf8.ts": "7e1736536d5c8c9c5a541eff0515ab1fbb068c7d3ee2064264c87adcb540c7b7", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/fmt/colors.ts": "4ccb3297215fff946df10a6e8f844cf582534562f1c36d8a66addc3681be907f", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/http/cookie.ts": "8a62a5a7a9f7231e4045f176e45ace7a54b39f90019771a6308c383591ca04d2", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/http/http_status.ts": "f517061c2ff552bf04414a00b77b57aff6c1f8493fb9ecc06c966e082e7c0e45", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/http/server.ts": "7c1511c064a883e2f34aaa19a6f4a7403364447c6f95f7cdb238f7aa50e9e49c", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/mime/multipart.ts": "f5e978a047df388190a59d9ddb5905ae75048e129b14c9b8ca567f1322699672", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/std/path/mod.ts": "a095ff43f5219bbe6ebee2e4038106b0cb6509499cee5d650e63749c802ffb6a", + "https://deno.land/x/abc@v1.2.4/vendor/https/deno.land/x/router/mod.ts": "a12a329c0b5d04e409fc7ad9f202fd3f78ed494e0236c04eba98a02e69731707", + "https://deno.land/x/aws_sign_v4@0.1.5/deps.ts": "83822a3274e4e2fa51d62f099fde58500a842c1ebd220d407cc2c9428296b7f3", + "https://deno.land/x/aws_sign_v4@0.1.5/mod.ts": "133d10a9073f1550795bdea025a398a5b2e64bb0276af6c4e76d963fec0eac84", + "https://deno.land/x/aws_sign_v4@0.1.5/src/date.ts": "96d156206dceadbede0e8cd709dd2b0f8c8aef858359dbe187b78c50bdc73353", + "https://deno.land/x/aws_sign_v4@0.1.5/src/signing.ts": "20188270e96390320b776d6b00596a02140106fabb5cb61e0a3263252fd0c8ba", + "https://deno.land/x/base64@v0.2.1/base.ts": "47dc8d68f07dc91524bdd6db36eccbe59cf4d935b5fc09f27357a3944bb3ff7b", + "https://deno.land/x/base64@v0.2.1/base64url.ts": "18bbf879b31f1f32cca8adaa2b6885ae325c2cec6a66c5817b684ca12c46ad5e", + "https://deno.land/x/html_entities@v1.0/lib/xml-entities.js": "cbbc40f7b6fd1f925508ff7d43a52d2383a57a64d0aaa3a7a1eca9d4155e4bde", + "https://deno.land/x/nano_jsx@v0.1.0/component.ts": "6bd3dab67754e91308df863e11e2b7945bbe0bf575b4bc529e8a9e02087eb732", + "https://deno.land/x/nano_jsx@v0.1.0/components/helmet.ts": "59e598dc79c7b18620de175c61eb26f4aeb6905a6654cd63359208a26471541e", + "https://deno.land/x/nano_jsx@v0.1.0/components/img.ts": "82a9f830394a7d6cd9b789b48fe1e70bc64eb151c4b410a3da74347c06acdae0", + "https://deno.land/x/nano_jsx@v0.1.0/components/index.ts": "8855ee8302a9a19f38202d4a7ff5b17e22942600da02356bdfbc80c99c5c55f5", + "https://deno.land/x/nano_jsx@v0.1.0/components/link.ts": "0f0b1c57dc8c466203105062335e0d9ded89a34e75d08b1bbeece198d42021cb", + "https://deno.land/x/nano_jsx@v0.1.0/components/router.ts": "186e77064a96c31cb66ff1935c93d91904347647fcb13b56b5875ea64905397d", + "https://deno.land/x/nano_jsx@v0.1.0/components/suspense.ts": "0711b7cdcd42b0b085972eca796d3ba7c436a736e1d2ce17db7e0cd1d3b928f5", + "https://deno.land/x/nano_jsx@v0.1.0/components/visible.ts": "f19487f7faff0bad38a5549f1efac1df351e83ee4a77ca5886412b439f4b6b53", + "https://deno.land/x/nano_jsx@v0.1.0/context.ts": "a65018beedf3e1863b96f9d99cf2d471c231a6ae0c77877a77754a398105f9fc", + "https://deno.land/x/nano_jsx@v0.1.0/core.ts": "9346346ba7ddc52057131953a333c3ffa12e2a93aaceb25dabbab4bf8f1a171c", + "https://deno.land/x/nano_jsx@v0.1.0/customElementsMode.ts": "61b9688ae89bfcc6109b72eaab4d82a69a8482d89770f3e2c1359b79bf57bb91", + "https://deno.land/x/nano_jsx@v0.1.0/fragment.ts": "9cfb0dcdcb02d5cc53f027b4b55609e4f9d6d9322b665292e572856f4b688569", + "https://deno.land/x/nano_jsx@v0.1.0/helpers.ts": "d904aa646534f1c0cf7c05a6c8e02231f906d962acb725c964aedbcf50216d85", + "https://deno.land/x/nano_jsx@v0.1.0/htm.ts": "d8d9cd4fb4ad4645bff3698c7eb96e7798022c5519d04e709ebde236edde156b", + "https://deno.land/x/nano_jsx@v0.1.0/htm/build.ts": "9d6b6eb407c0db2d1213a3f9c82efc66a2bec34c89976132ff13e3e095dcaaaf", + "https://deno.land/x/nano_jsx@v0.1.0/htm/constants.ts": "3f296f87f03bd0ba8d7673884a1f6c4c927a2774648eaa4fd3ca9e3c46c3f7b8", + "https://deno.land/x/nano_jsx@v0.1.0/htm/index.ts": "29912b9f7a760884fce79caca82649b9772cfa3c3272e0426a4ce377b67d70d5", + "https://deno.land/x/nano_jsx@v0.1.0/index.ts": "0f39c911a39c61cb39f9bd8a2481500126dcb1b2a826d5b4523dd47a08b6938d", + "https://deno.land/x/nano_jsx@v0.1.0/jsx.ts": "7d5b4d4a249fba1a42f2016f54f71ca049d96ff490e098db4a19b2a9b197b952", + "https://deno.land/x/nano_jsx@v0.1.0/lazy.ts": "f8b8a2b915daff1fb70704ffad5171c805f1e28778b5cd0f8c827780762776c4", + "https://deno.land/x/nano_jsx@v0.1.0/mod.ts": "3dda2bc0dbee9abd01c03acf43ab55a7854952afe0450245fc2ad12eb9bd9598", + "https://deno.land/x/nano_jsx@v0.1.0/regexDom.ts": "de82fd3110c5a367e3d4ba9b774cfef3baf995deff455edc7363551d79089c90", + "https://deno.land/x/nano_jsx@v0.1.0/ssr.ts": "1ab6c17f41f612fe409d29d81ce1f17692ff02e5abea6ef4080cabecafc246dd", + "https://deno.land/x/nano_jsx@v0.1.0/state.ts": "cfc6ca6eb5e65f4cd60717a0a96ce604053bacf6e0b8835afbe22327e9979a1b", + "https://deno.land/x/nano_jsx@v0.1.0/store.ts": "bf075833a656fc87b2a24c486bb3f77e13f19d6d9efcc42e31ffb6f24ec8eb93", + "https://deno.land/x/nano_jsx@v0.1.0/types.ts": "fb338d7fa4422a92c442d14e073a2deb01d42b017fcd36013a1f6554e17c5449", + "https://deno.land/x/nano_jsx@v0.1.0/version.ts": "d7f3813a3b1c490f16e77047483b0dc52cc0cec6cb1b73d6926cf9ad96129a59", + "https://deno.land/x/nano_jsx@v0.1.0/withStyles.ts": "8aae4c8e79319fe991d49dd8ccc927c221786dfe58de640dba9d9885ce0dd4b7", + "https://deno.land/x/router@v2.0.0/mod.ts": "8792d3c390e0446d89eb94ee8030dd20de18f2aba649e263d2832f3f150ea2ce", + "https://deno.land/x/s3@0.3.0/deps.ts": "590be3be45b218c91979d4d70db22cc25d16aa2f0ea6d4c414508f87bb3525e7", + "https://deno.land/x/s3@0.3.0/mod.ts": "2f2bee45abe1c1197bba5d251ea49b3a342ed474c829119f315202011195f649", + "https://deno.land/x/s3@0.3.0/src/bucket.ts": "85fd6d3a4f633ef70509d60397aa4dbf4cc7b6cfb155dedc70a22794a49984ff", + "https://deno.land/x/s3@0.3.0/src/error.ts": "a7857ca64eedbaf5c4daad5e83fdef5c4acd61534bffdab784b4e17e008e6aae", + "https://denopkg.com/chiefbiiko/hmac@v1.0.2/deps.ts": "fb061e6fa0fd96f455ef647c57e9e6309a86fb0bf484447fc6cb38e57262192f", + "https://denopkg.com/chiefbiiko/hmac@v1.0.2/mod.ts": "83590b95de468d0cf5398b7631b4fb62a64226786247fe265482045d799e8f97", + "https://denopkg.com/chiefbiiko/sha1@v1.0.3/deps.ts": "2e1af51a48c8507017fdb057b950366601b177fb7e73d5de54c1b3e0e115d72e", + "https://denopkg.com/chiefbiiko/sha1@v1.0.3/mod.ts": "146a101c9776cc9c807053c93f23e4b321ade5251f65745df418f4a75d5fd27b", + "https://denopkg.com/chiefbiiko/sha256@v1.0.2/deps.ts": "2e1af51a48c8507017fdb057b950366601b177fb7e73d5de54c1b3e0e115d72e", + "https://denopkg.com/chiefbiiko/sha256@v1.0.2/mod.ts": "f109aa5eeb201a0cbfaf44950b70a429838b187e8a84c5b810c1ac84953427cc", + "https://denopkg.com/chiefbiiko/sha512@v1.0.3/deps.ts": "2e1af51a48c8507017fdb057b950366601b177fb7e73d5de54c1b3e0e115d72e", + "https://denopkg.com/chiefbiiko/sha512@v1.0.3/mod.ts": "33190babd4c0e748bb2568fd003444487c8798c8c3a618f6593098c12805fe15", + "https://denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.ts": "4a927e5cd1d9b080d72881eb285b3b94edb6dadc1828aeb194117645f4481ac0", + "https://git.hibas.dev/Deno/DenReg/raw/branch/master/tar/mod.ts": "472497c6ef7ed0f45e11c6ad9a3d7ff9caf3ea9da377e53b73a9466d089f1beb", + "https://git.hibas.dev/Deno/DenReg/raw/branch/master/tar/src/deps.ts": "d8066e3bcd0a1885ce6b352f71845ec639e9392f7b84f517d1ff6d70e39498ec", + "https://git.hibas.dev/Deno/DenReg/raw/branch/master/tar/src/mod.ts": "438a487ea4a8ef4f2767cd2399a569fd0ef59524b4863b68568775a2bca76416", + "https://raw.githubusercontent.com/hibas123/dndb/master/deps.ts": "02b61f3ce1d74cf2f0c723b4e43240a6c6da39166391b1adec5b139c06e8e010", + "https://raw.githubusercontent.com/hibas123/dndb/master/mod.ts": "3890f580d22e97bacf44050661b74a2c4a3dcbf75e4d8e0f56fd2cbce9305f2a", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/find.js": "59b664c58cc986a2639b3a5ca0a158ddbc6cf812345f65c0b2bd3533c058dc41", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/findOne.js": "3230785e45781324b421c47b7e9ef1f5bd058691d75d2eae9ab2242815159792", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/insert.js": "8df8a869bf97c16eb5ee696157b59cf8d2b0238b427b08a92b6e4e63ce2ffadd", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/mod.js": "fe009c4a55bad2ad84a0d3ad7ee0ab0d3166f91f2f706fe0550df92a90171b7e", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/remove.js": "5f623dea009ec34831ba8362175a090b1055f28fe9576e9f929ce7df888a6467", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/methods/update.js": "9e8c9ec9cfebe3c46cfe68ef6fd98e452c24cb93c858f58e03d1d81b87c62da6", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/mod.ts": "476b9d0069b60443b3e9684fa086374bffbc45f02a083b7608c28dfd5733f702", + "https://raw.githubusercontent.com/hibas123/dndb/master/src/storage.js": "fa06befe5609fda4dfc6fc2ddc0cfdc4765ddf0b9cccf106fc14435f83ef975c", + "https://raw.githubusercontent.com/nekobato/deno-xml-parser/0bc4c2bd2f5fad36d274279978ca57eec57c680c/index.ts": "05d093028c005706e37b46bfe2bb7e2488f42fdc74d2196ac818902336927c01" + } +} diff --git a/registry/src/deps.ts b/registry/src/deps.ts index ad93c6a..08937f4 100644 --- a/registry/src/deps.ts +++ b/registry/src/deps.ts @@ -1,8 +1,4 @@ // @deno-types="./types/hotfix.d.ts" - -export * as S3 from "https://deno.land/x/s3@0.3.0/mod.ts"; -export { S3Error } from "https://deno.land/x/s3@0.3.0/src/error.ts"; - export * as Ini from "https://deno.hibas123.de/raw/ini@0.0.3/mod.ts"; export * as ABC from "https://deno.land/x/abc@v1.2.4/mod.ts"; @@ -11,20 +7,20 @@ export * as LoggerMW from "https://deno.land/x/abc@v1.2.4/middleware/logger.ts"; export * as Path from "https://deno.land/std@0.83.0/path/mod.ts"; export * as FS from "https://deno.land/std@0.83.0/fs/mod.ts"; -export * as Base64 from "https://deno.land/std@0.83.0/encoding/base64.ts"; +export * as Base64 from "https://deno.land/std@0.208.0/encoding/base64.ts"; export * as Hash from "https://deno.land/std@0.83.0/hash/mod.ts"; export * as Colors from "https://deno.land/std@0.83.0/fmt/colors.ts"; +export * as Streams from "https://deno.land/std@0.208.0/streams/mod.ts"; -export * as Compress from "https://git.stamm.me/Deno/DenReg/raw/branch/master/tar/mod.ts"; + +export * as Compress from "https://git.hibas.dev/Deno/DenReg/raw/branch/master/tar/mod.ts"; export { default as Prism } from "https://cdn.skypack.dev/prismjs"; -export { Marked } from "https://deno.hibas123.de/raw/markdown/mod.ts"; +export { Marked } from "https://deno.hibas123.de/raw/markdown@0.1.0/mod.ts"; import DS from "https://raw.githubusercontent.com/hibas123/dndb/master/mod.ts"; -import * as Pico from "https://deno.hibas123.de/raw/@denreg-jsx@0.1.2/mod.ts"; - -export { Pico }; +export * as Nano from "https://deno.land/x/nano_jsx@v0.1.0/mod.ts"; export const Datastore = DS; diff --git a/registry/src/http/api.ts b/registry/src/http/api.ts index 152d37c..39e8c28 100644 --- a/registry/src/http/api.ts +++ b/registry/src/http/api.ts @@ -1,17 +1,16 @@ -import { ABC, Path, Compress, FS, Colors, S3Error } from "../deps.ts"; +import { ABC, Path, Compress, FS, Colors } from "../deps.ts"; -import bucket from "../s3.ts"; import { isValidPackageName, basicauth, isValidFullVersion, getAbsolutePackageVersion, - getBucketFilePath, + getFilePath, } from "../utils.ts"; -import db, { IPackage } from "../db.ts"; +import * as Storage from "../storage.ts"; -import { v4 } from "https://deno.land/std/uuid/mod.ts"; +import db from "../db.ts"; export default function api(g: ABC.Group) { const cacheControl = (next: ABC.HandlerFunc) => (ctx: ABC.Context) => { @@ -21,14 +20,15 @@ export default function api(g: ABC.Group) { g.get( "/", - (ctx) => { + (_ctx) => { return { version: "1" }; }, cacheControl ); - g.get("/module", async (ctx) => { - return db.package.find({}).then((res) => res.map((e) => e.name)); + g.get("/module", async (_ctx) => { + const res = await db.package.find({}); + return res.map((e) => e.name); }); g.get("/module/:module", async (ctx) => { @@ -47,7 +47,7 @@ export default function api(g: ABC.Group) { ctx.response.status = 404; return "// Not found"; } else { - let version = getAbsolutePackageVersion( + const version = getAbsolutePackageVersion( module, ctx.params.version ) as string; @@ -57,19 +57,17 @@ export default function api(g: ABC.Group) { return "// Not found"; } - const bucketPath = await getBucketFilePath(module.name, version, "/"); + const bucketPath = await getFilePath(module.name, version, "/"); + + const filesItr = Storage.walkFiles(module.name + "/" + version + "/"); - const filesItr = bucket.listAllObjects({ - batchSize: 100, - prefix: bucketPath, - }); const allowedExts = new Set( (ctx.queryParams.ext || "js|ts").split("|").map((e) => "." + e) ); - let files: string[] = []; - for await (let file of filesItr) { - const relPath = Path.posix.relative(bucketPath, file.key || ""); + const files: string[] = []; + for await (const file of filesItr) { + const relPath = Path.posix.relative(bucketPath, file.path || ""); const ext = Path.extname(relPath); if (allowedExts.has(ext)) files.push(relPath); } @@ -100,7 +98,7 @@ export default function api(g: ABC.Group) { // } async function uploadPackage(ctx: ABC.Context) { - const reqId = v4.generate(); + const reqId = crypto.randomUUID(); const filename = "./tmp/" + reqId + ".tar"; const folder = "./tmp/" + reqId; @@ -119,6 +117,7 @@ async function uploadPackage(ctx: ABC.Context) { write: true, create: true, }); + // ctx.request.body.pipeTo(file); //TODO: Do this, once web framework is updated await Deno.copy(ctx.request.body, file); file.close(); @@ -156,7 +155,6 @@ async function uploadPackage(ctx: ABC.Context) { success: false, message: "Invalid version. Version must be in format: 0.0.0", }; - return; } console.log("Checking for previous uploads"); @@ -187,7 +185,7 @@ async function uploadPackage(ctx: ABC.Context) { }; } - const bucketBase = "packages/" + packageName + "/" + packageVersion + "/"; + const storageBase = packageName + "/" + packageVersion + "/"; console.log("Uploading files to S3"); @@ -201,11 +199,12 @@ async function uploadPackage(ctx: ABC.Context) { console.log("Normalised path:", relative.replace("\\", "/")); - const bucketPath = (bucketBase + relative).replace(/@/g, "§"); + const bucketPath = (storageBase + relative).replace(/@/g, "§"); const body = await Deno.readAll(await Deno.open(file.path)); console.log("Put Object", bucketPath, body.byteLength); - await bucket.putObject(bucketPath, body, {}); + + await Storage.writeFile(bucketPath, body); } console.log("Setting new live version"); @@ -230,7 +229,6 @@ async function uploadPackage(ctx: ABC.Context) { Colors.red("Error while processing newly uploaded package") ); console.error(err); - if (err instanceof S3Error) console.log(err.response); return { success: false, message: err.message, diff --git a/registry/src/http/intellisense.ts b/registry/src/http/intellisense.ts index 6e4fdb0..177b362 100644 --- a/registry/src/http/intellisense.ts +++ b/registry/src/http/intellisense.ts @@ -3,7 +3,7 @@ import { ABC } from "../deps.ts"; import config from "../config.ts"; export default function raw(g: ABC.Group) { - g.get("/deno-import-intellisense.json", (ctx) => { + g.get("/deno-import-intellisense.json", (_ctx) => { return { version: 1, registries: [ diff --git a/registry/src/http/raw.ts b/registry/src/http/raw.ts index 7835b5c..c281d3c 100644 --- a/registry/src/http/raw.ts +++ b/registry/src/http/raw.ts @@ -30,7 +30,7 @@ export default function raw(g: ABC.Group) { const result = await getFile(packageName, packageVersion, filepath); if (filepath.endsWith(".js")) { - const tsFile = filepath.substr(0, filepath.length - 3) + ".d.ts"; + const tsFile = filepath.slice(0, filepath.length - 3) + ".d.ts"; const tsResult = await getFile(packageName, packageVersion, tsFile); if (tsResult) { ctx.response.headers.set( diff --git a/registry/src/http/views.ts b/registry/src/http/views.ts index 3ac9346..f479fe0 100644 --- a/registry/src/http/views.ts +++ b/registry/src/http/views.ts @@ -1,16 +1,16 @@ import type { ABC } from "../deps.ts"; import { - basicauth, extractPackagePath, - getBucketFilePath, + getFilePath, getFile, + getOneOf, getAbsolutePackageVersion, sortVersions, } from "../utils.ts"; import { Hash, Path } from "../deps.ts"; import db, { IPackage } from "../db.ts"; -import bucket from "../s3.ts"; +import * as Storage from "../storage.ts"; const MAX_CACHE_AGE = 60 * 30; // 30 Minutes @@ -31,6 +31,7 @@ export default function views(g: ABC.Application) { packages = await db.package.find({}); } + await ctx.render("index", { packages: packages.reverse(), search, @@ -54,19 +55,36 @@ export default function views(g: ABC.Application) { }); g.get("/package/:package", async (ctx) => { - let [packageName, packageVersion] = extractPackagePath( + const [packageName, packageVersion] = extractPackagePath( ctx.params.package ); const pkg = await db.package.findOne({ name: packageName }); + if (!pkg) { + ctx.response.status = 404; + ctx.response.body = "// Package not found!"; + return; + } + + + const readmeContentRaw = (await getOneOf( + pkg.name, + packageVersion || pkg.versions.sort(sortVersions).reverse()[0], + [pkg.readme, "README.md", "readme.md", "Readme.md"] + ))?.data; + + const readmeContent = readmeContentRaw + ? new TextDecoder().decode(readmeContentRaw) + : ""; + const etag = "W/" + Hash.createHash("sha3-256") .update(`${packageName}:${packageVersion}`) .toString("base64"); - await ctx.render("package", { pkg, version: packageVersion }); + await ctx.render("package", { pkg, version: packageVersion, readmeContent }); ctx.response.headers.set("cache-control", CACHE_CONTROL); ctx.response.headers.set("E-Tag", etag); }); @@ -98,32 +116,29 @@ export default function views(g: ABC.Application) { path: `${packageName}@${packageVersion}/${path}`, }); } else { - const bucketPath = await getBucketFilePath( + const filesPath = getFilePath( packageName, packageVersion, path ); - if (!bucketPath) return E404(); + if (!filesPath) return E404(); - console.log(bucketPath); + console.log(filesPath); - const filesItr = bucket.listAllObjects({ - batchSize: 100, - prefix: bucketPath, - // delimiter: "/", - }); + const filesItr = Storage.walkFiles(filesPath); - let files: { name: string; size: number }[] = []; - let directories: Set = new Set(); + const files: { name: string; size: number }[] = []; + const directories: Set = new Set(); let readme: string | null = null; - for await (let file of filesItr) { - const relPath = Path.posix.relative(bucketPath, file.key || ""); + for await (const file of filesItr) { + const relPath = Path.posix.relative(filesPath, file.path || ""); + console.log({ file, relPath, filesPath }); if (relPath.indexOf("/") >= 0) { directories.add(relPath.split("/")[0]); } else { - files.push({ name: relPath, size: file.size || -1 }); + files.push({ name: relPath, size: -1 }); //TODO: Size is not implemented yet if (relPath.toLowerCase() === "readme.md") { - let readmeCont = await getFile( + const readmeCont = await getFile( packageName, packageVersion, Path.posix.join(path, relPath) diff --git a/registry/src/react.ts b/registry/src/react.ts new file mode 100644 index 0000000..e69de29 diff --git a/registry/src/renderer.tsx b/registry/src/renderer.tsx index 072ad81..ec6dc68 100644 --- a/registry/src/renderer.tsx +++ b/registry/src/renderer.tsx @@ -1,11 +1,9 @@ -// / -import { Pico } from "./deps.ts"; +import { Nano } from "./deps.ts"; +const { h, renderSSR } = Nano; import config from "./config.ts"; -const React = { - createElement: Pico.h.bind(Pico), -}; + class StringReader implements Deno.Reader { private data: Uint8Array; @@ -70,8 +68,9 @@ export default async function render( ): Promise { const Component = await loadComponent(name); - //@ts-ignore - const res = await Pico.renderSSR(); + // // @ts-ignore + // const res = await Pico.renderSSR(); + const res = await renderSSR(); return new StringReader("\n" + res); } diff --git a/registry/src/s3.ts b/registry/src/s3.ts deleted file mode 100644 index b4ab203..0000000 --- a/registry/src/s3.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { S3 } from "./deps.ts"; -import config from "./config.ts"; - -if (!config.s3) { - throw new Error("Config is missing [s3] section!"); -} - -if (!config.s3.endpoint) { - throw new Error("Config is missing s3.endpoint!"); -} - -if (!config.s3.accessKey) { - throw new Error("Config is missing s3.accessKey!"); -} - -if (!config.s3.secretKey) { - throw new Error("Config is missing s3.secretKey!"); -} - -const s3config: S3.S3BucketConfig = { - bucket: config.s3.bucket || "deno-registry", - endpointURL: config.s3.endpoint, - accessKeyID: config.s3.accessKey, - secretKey: config.s3.secretKey, - region: config?.s3?.region || "us-east-1", -}; - -const bucket = new S3.S3Bucket(s3config); - -export default bucket; diff --git a/registry/src/storage.ts b/registry/src/storage.ts new file mode 100644 index 0000000..bdad6d2 --- /dev/null +++ b/registry/src/storage.ts @@ -0,0 +1,40 @@ +import { FS, Path } from "./deps.ts"; + +const STORAGE_ROOT = Path.resolve("./data/files"); + + + +export function walkFiles(path: string) { + const norm = Path.normalize(path); + const p = Path.join(STORAGE_ROOT, norm); + + const walker = FS.walk(p, { includeFiles: true, includeDirs: false }) + + // Make path of entry relative to the root and return an async iterator + return (async function* () { + for await (const entry of walker) { + const rel = Path.relative(STORAGE_ROOT, entry.path); + yield { ...entry, path: rel }; + } + })(); +} + +export async function writeFile(path: string, content: Uint8Array) { + const norm = Path.normalize(path); + const p = Path.join(STORAGE_ROOT, norm); + + await FS.ensureFile(p); + await Deno.writeFile(p, content); +} + +export async function readFile(path: string) { + const norm = Path.normalize(path); + const p = Path.join(STORAGE_ROOT, norm); + + if (!await FS.exists(p)) return undefined; + + const s = await Deno.stat(p); + if (!s.isFile) return undefined; + + return await Deno.readFile(p); +} \ No newline at end of file diff --git a/registry/src/utils.ts b/registry/src/utils.ts index 4773bca..a6b95c2 100644 --- a/registry/src/utils.ts +++ b/registry/src/utils.ts @@ -1,15 +1,13 @@ import { ABC, Base64, Path } from "./deps.ts"; import config from "./config.ts"; +import * as Storage from "./storage.ts"; -const packageNameRegex = /^[@]?[a-zA-Z][\d\w\-\_]*$/g.compile(); -const packageVersionRegex = /^\d(\.\d)?(\.\d)?$/g.compile(); -const packageFullVersionRegex = /^\d(\.\d)(\.\d)$/g.compile(); -export const isValidPackageName = (name: string) => packageNameRegex.test(name); +export const isValidPackageName = (name: string) => /^[@]?[a-zA-Z][\d\w\-\_]*$/g.test(name); export const isValidVersion = (version: string) => - packageVersionRegex.test(version); + /^\d+(\.\d+)?(\.\d+)?$/g.test(version); export const isValidFullVersion = (version: string) => - packageFullVersionRegex.test(version); + /^\d+(\.\d+)(\.\d+)$/g.test(version); const ALg = 1; const ASm = -ALg; @@ -70,16 +68,18 @@ export function extractPackagePath(path: string): [string, string | undefined] { path = path.slice(1); } - let parts = path.split("@"); + + const parts = path.split("@"); if (parts.length > 2) throw new Error("Invalid package name!"); packageName += parts[0]; - let packageVersion: string | undefined = parts[1]; + const packageVersion: string | undefined = parts[1]; + console.log({ path, parts, packageName, packageVersion }); if (!isValidPackageName(packageName)) throw new Error("Invalid package name!"); - if (packageVersion !== "") { + if (packageVersion && packageVersion !== "") { if (!isValidVersion(packageVersion)) throw new Error("Invalid package version!"); } @@ -89,8 +89,6 @@ export function extractPackagePath(path: string): [string, string | undefined] { import type { IPackage } from "./db.ts"; -import bucket from "./s3.ts"; - export function getAbsolutePackageVersion( pkg?: IPackage | null, version?: string @@ -110,7 +108,7 @@ export function getAbsolutePackageVersion( return version; } -export async function getBucketFilePath( +export function getFilePath( pkgName: string, version: string, file: string @@ -120,7 +118,6 @@ export async function getBucketFilePath( } const bucketPath = ( - "packages/" + pkgName + "/" + version + @@ -131,24 +128,33 @@ export async function getBucketFilePath( return bucketPath; } +export async function getOneOf(pkgName: string, version: string, files: (string | undefined)[]) { + for (const file of files) { + if (!file) continue; + const res = await getFile(pkgName, version, file); + if (res) return res; + } + return undefined; +} + export async function getFile( pkgName: string, version: string | undefined, file: string ): Promise<{ etag: string; data: Uint8Array } | null | undefined> { if (!version) return undefined; - const bucketPath = await getBucketFilePath(pkgName, version, file); + const bucketPath = await getFilePath(pkgName, version, file); if (!bucketPath) return null; console.log("Getting file from:", bucketPath); try { - const res = await bucket.getObject(bucketPath); - if (!res || res.body.byteLength === 0) return undefined; + const res = await Storage.readFile(bucketPath); + if (!res) return undefined; return { - etag: res.etag, - data: res.body, + etag: Base64.encodeBase64(await crypto.subtle.digest("sha-1", res)), + data: res, }; } catch (err) { const msg = err.message as string; diff --git a/registry/src/views/_base.tsx b/registry/src/views/_base.tsx index af83b77..4e91f8c 100644 --- a/registry/src/views/_base.tsx +++ b/registry/src/views/_base.tsx @@ -1,4 +1,6 @@ -import { Pico } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h } = Nano; + import config from "../config.ts"; const styles = new TextDecoder().decode( @@ -6,12 +8,13 @@ const styles = new TextDecoder().decode( ); // href="https://unpkg.com/papercss@1.6.1/dist/paper.min.css" -export default function Base(p: any, children: any[]) { +export default function Base(p: any) { const title = p.title || "DenReg"; return ( + + {title} {config.web.tracking && ( - + )} - {children} + {p.children} ); diff --git a/registry/src/views/_browse.tsx b/registry/src/views/_browse.tsx index e83e19c..68c77e8 100644 --- a/registry/src/views/_browse.tsx +++ b/registry/src/views/_browse.tsx @@ -1,4 +1,6 @@ -import { Pico, Marked } from "../deps.ts"; +import { Marked } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h, Fragment } = Nano; import type { IPackage } from "../db.ts"; import { sortVersions } from "../utils.ts"; @@ -67,7 +69,7 @@ export function RenderFile({ content, ext }: IRenderFileInterface) {
); } else { @@ -77,7 +79,7 @@ export function RenderFile({ content, ext }: IRenderFileInterface) { content = Prism.highlight(content, Prism.languages[lang], lang); } - return
;
+      return 
 
; } } diff --git a/registry/src/views/_default.tsx b/registry/src/views/_default.tsx index 8dacdda..87cf3ae 100644 --- a/registry/src/views/_default.tsx +++ b/registry/src/views/_default.tsx @@ -1,14 +1,15 @@ -import { Pico } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h } = Nano; -export function Main(a: any, children: any) { +export function Main(a: any) { return (
-
{children}
+
{a.children}
); } -export function Menu({}: any, children: any) { +export function Menu(a: any) { return (
@@ -22,7 +23,7 @@ export function Menu({}: any, children: any) { - {children} + {a.children}
); diff --git a/registry/src/views/_pkgheader.tsx b/registry/src/views/_pkgheader.tsx index c2859da..162ab9a 100644 --- a/registry/src/views/_pkgheader.tsx +++ b/registry/src/views/_pkgheader.tsx @@ -1,8 +1,10 @@ // /// -import { Pico, Marked } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h, Fragment } = Nano; + import type { IPackage } from "../db.ts"; -export default async function index({ +export default function index({ pkg, version, }: { diff --git a/registry/src/views/browse_file.tsx b/registry/src/views/browse_file.tsx index 4a4212b..5a3f24c 100644 --- a/registry/src/views/browse_file.tsx +++ b/registry/src/views/browse_file.tsx @@ -1,11 +1,12 @@ -import { Pico } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h } = Nano; import Base from "./_base.tsx"; import type { IPackage } from "../db.ts"; import { Main, Menu } from "./_default.tsx"; import { RenderFile, EntryList, BrowseHeader } from "./_browse.tsx"; -export default async function index({ +export default function index({ pkg, version, content, diff --git a/registry/src/views/browse_folder.tsx b/registry/src/views/browse_folder.tsx index 4da7a7a..9d16594 100644 --- a/registry/src/views/browse_folder.tsx +++ b/registry/src/views/browse_folder.tsx @@ -1,11 +1,12 @@ -import { Pico } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h } = Nano; import Base from "./_base.tsx"; import type { IPackage } from "../db.ts"; import { Main, Menu } from "./_default.tsx"; import { RenderFile, EntryList, BrowseHeader } from "./_browse.tsx"; -export default async function index({ +export default function index({ pkg, version, files, diff --git a/registry/src/views/index.tsx b/registry/src/views/index.tsx index 5743cbb..9cf61fc 100644 --- a/registry/src/views/index.tsx +++ b/registry/src/views/index.tsx @@ -1,4 +1,5 @@ -import { Pico } from "../deps.ts"; +import { Nano } from "../deps.ts"; +const { h } = Nano; import Base from "./_base.tsx"; import type { IPackage } from "../db.ts"; import { sortVersions } from "../utils.ts"; @@ -9,9 +10,11 @@ function Package({ pkg }: { pkg: IPackage }) { const sorted = versions.sort(sortVersions).reverse(); return ( -

@@ -26,13 +29,13 @@ function Package({ pkg }: { pkg: IPackage }) { {description}

-
+ ); } import { Main, Menu } from "./_default.tsx"; -export default async function index({ +export default function index({ packages, search, }: { diff --git a/registry/src/views/package.tsx b/registry/src/views/package.tsx index ae70242..e44e3f9 100644 --- a/registry/src/views/package.tsx +++ b/registry/src/views/package.tsx @@ -1,4 +1,5 @@ -import { Pico, Marked } from "../deps.ts"; +import { Nano, Marked } from "../deps.ts"; +const { h, Suspense } = Nano; import Base from "./_base.tsx"; import type { IPackage } from "../db.ts"; import { sortVersions, getFile, getAbsolutePackageVersion } from "../utils.ts"; @@ -29,12 +30,14 @@ import PkgHeader from "./_pkgheader.tsx"; import { Main, Menu } from "./_default.tsx"; -export default async function index({ +export default function index({ pkg, version, + readmeContent }: { pkg: IPackage; version?: string; + readmeContent: string | undefined; }) { if (!pkg) return ( @@ -44,16 +47,6 @@ export default async function index({ ); version = getAbsolutePackageVersion(pkg, version); - const readmeContent = await getFile( - pkg.name, - version, - pkg.readme || "README.md" - ).then((res) => { - if (res) - return Marked.parse(new TextDecoder().decode(res.data)) - .content as string; - else return undefined; - }); return ( @@ -69,7 +62,7 @@ export default async function index({ {readmeContent !== undefined ? (
) : (
No README.md found!
@@ -94,4 +87,4 @@ export default async function index({ ); -} +} \ No newline at end of file diff --git a/registry/tsconfig.json b/registry/tsconfig.json deleted file mode 100644 index 2b20d27..0000000 --- a/registry/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext", "deno.ns", "deno.unstable"], - "jsx": "react", - "jsxFactory": "Pico.h", - "jsxFragmentFactory": "Pico.Fragment", - "noImplicitAny": true, - "strictPropertyInitialization": false - } -}