diff --git a/deno.jsonc b/deno.jsonc new file mode 100644 index 0000000..3058694 --- /dev/null +++ b/deno.jsonc @@ -0,0 +1,7 @@ +{ + "tasks": { + "build": "deno run -A script/build.ts", + "start": "deno run -A --unstable mod.ts", + "dev": "deno run -A --unstable --watch mod.ts", + } +} \ No newline at end of file diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..ecd5f14 --- /dev/null +++ b/deno.lock @@ -0,0 +1,298 @@ +{ + "version": "2", + "remote": { + "https://deno.land/std@0.193.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", + "https://deno.land/std@0.193.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", + "https://deno.land/std@0.193.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", + "https://deno.land/std@0.193.0/bytes/bytes_list.ts": "31d664f4d42fa922066405d0e421c56da89d751886ee77bbe25a88bf0310c9d0", + "https://deno.land/std@0.193.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2", + "https://deno.land/std@0.193.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", + "https://deno.land/std@0.193.0/bytes/ends_with.ts": "4228811ebc71615d27f065c54b5e815ec1972538772b0f413c0efe05245b472e", + "https://deno.land/std@0.193.0/bytes/equals.ts": "fc190cce412b2136979181b163ec7e05f7e7a947e39102eee4b8c0d62519ddf9", + "https://deno.land/std@0.193.0/bytes/includes_needle.ts": "76a8163126fb2f8bf86fd7f22192c3bb04bf6a20b987a095127c2ca08adf3ba6", + "https://deno.land/std@0.193.0/bytes/index_of_needle.ts": "9c06610e9611b5647ac25952e71a22e09227c9f1b8cbeeb33399bf8bf8a7f649", + "https://deno.land/std@0.193.0/bytes/last_index_of_needle.ts": "f1602f221c3b678bc4f1e1c88a70a15ab7da32c21751dbbc6c957c956951d784", + "https://deno.land/std@0.193.0/bytes/mod.ts": "e869bba1e7a2e3a9cc6c2d55471888429a544e70a840c087672e656e7ba21815", + "https://deno.land/std@0.193.0/bytes/repeat.ts": "6f5e490d8d72bcbf8d84a6bb04690b9b3eb5822c5a11687bca73a2318a842294", + "https://deno.land/std@0.193.0/bytes/starts_with.ts": "3e607a70c9c09f5140b7a7f17a695221abcc7244d20af3eb47ccbb63f5885135", + "https://deno.land/std@0.193.0/crypto/keystack.ts": "877ab0f19eb7d37ad6495190d3c3e39f58e9c52e0b6a966f82fd6df67ca55f90", + "https://deno.land/std@0.193.0/crypto/timing_safe_equal.ts": "0fae34ee02264f309ae0b6e54e9746a7aba3996e5454903ed106967a7a9ef665", + "https://deno.land/std@0.193.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d", + "https://deno.land/std@0.193.0/encoding/base64url.ts": "2ed4ba122b20fedf226c5d337cf22ee2024fa73a8f85d915d442af7e9ce1fae1", + "https://deno.land/std@0.193.0/http/_negotiation/common.ts": "14d1a52427ab258a4b7161cd80e1d8a207b7cc64b46e911780f57ead5f4323c6", + "https://deno.land/std@0.193.0/http/_negotiation/encoding.ts": "ff747d107277c88cb7a6a62a08eeb8d56dad91564cbcccb30694d5dc126dcc53", + "https://deno.land/std@0.193.0/http/_negotiation/language.ts": "7bcddd8db3330bdb7ce4fc00a213c5547c1968139864201efd67ef2d0d51887d", + "https://deno.land/std@0.193.0/http/_negotiation/media_type.ts": "58847517cd549384ad677c0fe89e0a4815be36fe7a303ea63cee5f6a1d7e1692", + "https://deno.land/std@0.193.0/http/cookie_map.ts": "d148a5eaf35f19905dd5104126fa47ac71105306dd42f129732365e43108b28a", + "https://deno.land/std@0.193.0/http/etag.ts": "6ad8abbbb1045aabf2307959a2c5565054a8bf01c9824ddee836b1ff22706a58", + "https://deno.land/std@0.193.0/http/http_errors.ts": "bbda34819060af86537cecc9dc8e045f877130808b7e7acde4197c5328e852d0", + "https://deno.land/std@0.193.0/http/http_status.ts": "8a7bcfe3ac025199ad804075385e57f63d055b2aed539d943ccc277616d6f932", + "https://deno.land/std@0.193.0/http/method.ts": "e66c2a015cb46c21ab0bb3589aa4fca43143a506cb324ffdfd42d2edef7bc0c4", + "https://deno.land/std@0.193.0/http/negotiation.ts": "46e74a6bad4b857333a58dc5b50fe8e5a4d5267e97292293ea65f980bd918086", + "https://deno.land/std@0.193.0/http/server_sent_event.ts": "1f3597d175e8935123306a24d7f4423a463667a70953d17b4115af1880459d55", + "https://deno.land/std@0.193.0/http/user_agent.ts": "6f4308670f261118cc6a1518bf37431a5b4f21322b4a4edf0963e182264ce404", + "https://deno.land/std@0.193.0/io/buf_reader.ts": "06fff3337091c49e99ebd2dd790c9a90364c087a2953ea081667400fd6c6cebb", + "https://deno.land/std@0.193.0/io/buf_writer.ts": "48c33c8f00b61dcbc7958706741cec8e59810bd307bc6a326cbd474fe8346dfd", + "https://deno.land/std@0.193.0/io/buffer.ts": "17f4410eaaa60a8a85733e8891349a619eadfbbe42e2f319283ce2b8f29723ab", + "https://deno.land/std@0.193.0/io/copy_n.ts": "0cc7ce07c75130f6fc18621ec1911c36e147eb9570664fee0ea12b1988167590", + "https://deno.land/std@0.193.0/io/limited_reader.ts": "6c9a216f8eef39c1ee2a6b37a29372c8fc63455b2eeb91f06d9646f8f759fc8b", + "https://deno.land/std@0.193.0/io/mod.ts": "2665bcccc1fd6e8627cca167c3e92aaecbd9897556b6f69e6d258070ef63fd9b", + "https://deno.land/std@0.193.0/io/multi_reader.ts": "9c2a0a31686c44b277e16da1d97b4686a986edcee48409b84be25eedbc39b271", + "https://deno.land/std@0.193.0/io/read_delim.ts": "c02b93cc546ae8caad8682ae270863e7ace6daec24c1eddd6faabc95a9d876a3", + "https://deno.land/std@0.193.0/io/read_int.ts": "7cb8bcdfaf1107586c3bacc583d11c64c060196cb070bb13ae8c2061404f911f", + "https://deno.land/std@0.193.0/io/read_lines.ts": "c526c12a20a9386dc910d500f9cdea43cba974e853397790bd146817a7eef8cc", + "https://deno.land/std@0.193.0/io/read_long.ts": "f0aaa420e3da1261c5d33c5e729f09922f3d9fa49f046258d4ff7a00d800c71e", + "https://deno.land/std@0.193.0/io/read_range.ts": "28152daf32e43dd9f7d41d8466852b0d18ad766cd5c4334c91fef6e1b3a74eb5", + "https://deno.land/std@0.193.0/io/read_short.ts": "805cb329574b850b84bf14a92c052c59b5977a492cd780c41df8ad40826c1a20", + "https://deno.land/std@0.193.0/io/read_string_delim.ts": "5dc9f53bdf78e7d4ee1e56b9b60352238ab236a71c3e3b2a713c3d78472a53ce", + "https://deno.land/std@0.193.0/io/slice_long_to_bytes.ts": "48d9bace92684e880e46aa4a2520fc3867f9d7ce212055f76ecc11b22f9644b7", + "https://deno.land/std@0.193.0/io/string_reader.ts": "da0f68251b3d5b5112485dfd4d1b1936135c9b4d921182a7edaf47f74c25cc8f", + "https://deno.land/std@0.193.0/io/string_writer.ts": "8a03c5858c24965a54c6538bed15f32a7c72f5704a12bda56f83a40e28e5433e", + "https://deno.land/std@0.193.0/media_types/_db.ts": "7606d83e31f23ce1a7968cbaee852810c2cf477903a095696cdc62eaab7ce570", + "https://deno.land/std@0.193.0/media_types/_util.ts": "916efbd30b6148a716f110e67a4db29d6949bf4048997b754415dd7e42c52378", + "https://deno.land/std@0.193.0/media_types/content_type.ts": "ad98a5aa2d95f5965b2796072284258710a25e520952376ed432b0937ce743bc", + "https://deno.land/std@0.193.0/media_types/extension.ts": "a7cd28c9417143387cdfed27d4e8607ebcf5b1ec27eb8473d5b000144689fe65", + "https://deno.land/std@0.193.0/media_types/extensions_by_type.ts": "43806d6a52a0d6d965ada9d20e60a982feb40bc7a82268178d94edb764694fed", + "https://deno.land/std@0.193.0/media_types/format_media_type.ts": "f5e1073c05526a6f5a516ac5c5587a1abd043bf1039c71cde1166aa4328c8baf", + "https://deno.land/std@0.193.0/media_types/get_charset.ts": "18b88274796fda5d353806bf409eb1d2ddb3f004eb4bd311662c4cdd8ac173db", + "https://deno.land/std@0.193.0/media_types/mod.ts": "d3f0b99f85053bc0b98ecc24eaa3546dfa09b856dc0bbaf60d8956d2cdd710c8", + "https://deno.land/std@0.193.0/media_types/parse_media_type.ts": "835c4112e1357e95b4f10d7cdea5ae1801967e444f48673ff8f1cb4d32af9920", + "https://deno.land/std@0.193.0/media_types/type_by_extension.ts": "daa801eb0f11cdf199445d0f1b656cf116d47dcf9e5b85cc1e6b4469f5ee0432", + "https://deno.land/std@0.193.0/media_types/vendor/mime-db.v1.52.0.ts": "6925bbcae81ca37241e3f55908d0505724358cda3384eaea707773b2c7e99586", + "https://deno.land/std@0.193.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", + "https://deno.land/std@0.193.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", + "https://deno.land/std@0.193.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", + "https://deno.land/std@0.193.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", + "https://deno.land/std@0.193.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", + "https://deno.land/std@0.193.0/path/mod.ts": "f065032a7189404fdac3ad1a1551a9ac84751d2f25c431e101787846c86c79ef", + "https://deno.land/std@0.193.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", + "https://deno.land/std@0.193.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", + "https://deno.land/std@0.193.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba", + "https://deno.land/std@0.193.0/streams/_common.ts": "f45cba84f0d813de3326466095539602364a9ba521f804cc758f7a475cda692d", + "https://deno.land/std@0.193.0/streams/buffer.ts": "d5b3d7d0299114e5b2ea895a8bf202a687fd915c5282f8096c7bae23b5a04407", + "https://deno.land/std@0.193.0/streams/byte_slice_stream.ts": "225d57263a34325d7c96cb3dafeb478eec0e6fd05cd0458d678752eadd132bb4", + "https://deno.land/std@0.193.0/streams/copy.ts": "75cbc795ff89291df22ddca5252de88b2e16d40c85d02840593386a8a1454f71", + "https://deno.land/std@0.193.0/streams/delimiter_stream.ts": "f69e849b3d1f59f02424497273f411105a6f76a9f13da92aeeb9a2d554236814", + "https://deno.land/std@0.193.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1", + "https://deno.land/std@0.193.0/streams/iterate_reader.ts": "bbec1d45c2df2c0c5920bad0549351446fdc8e0886d99e95959b259dbcdb6072", + "https://deno.land/std@0.193.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048", + "https://deno.land/std@0.193.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38", + "https://deno.land/std@0.193.0/streams/merge_readable_streams.ts": "dc2db0cbf1b14d999aa2aa2a2a1ba24ce58953878f29845ed9319321d0a01fab", + "https://deno.land/std@0.193.0/streams/mod.ts": "c07ec010e700b9ea887dc36ca08729828bc7912f711e4054e24d33fd46282252", + "https://deno.land/std@0.193.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be", + "https://deno.land/std@0.193.0/streams/readable_stream_from_iterable.ts": "cd4bb9e9bf6dbe84c213beb1f5085c326624421671473e410cfaecad15f01865", + "https://deno.land/std@0.193.0/streams/readable_stream_from_reader.ts": "bfc416c4576a30aac6b9af22c9dc292c20c6742141ee7c55b5e85460beb0c54e", + "https://deno.land/std@0.193.0/streams/reader_from_iterable.ts": "55f68110dce3f8f2c87b834d95f153bc904257fc65175f9f2abe78455cb8047c", + "https://deno.land/std@0.193.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73", + "https://deno.land/std@0.193.0/streams/text_delimiter_stream.ts": "20e680ab8b751390e359288ce764f9c47d164af11a263870746eeca4bc7d976b", + "https://deno.land/std@0.193.0/streams/text_line_stream.ts": "0f2c4b33a5fdb2476f2e060974cba1347cefe99a4af33c28a57524b1a34750fa", + "https://deno.land/std@0.193.0/streams/to_transform_stream.ts": "7f55fc0b14cf3ed0f8d10d8f41d05bdc40726e44a65c37f58705d10a615f0159", + "https://deno.land/std@0.193.0/streams/writable_stream_from_writer.ts": "56fff5c82fb736fdd669b567cc0b2bbbe0351002cd13254eae26c366e2bed89a", + "https://deno.land/std@0.193.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998", + "https://deno.land/std@0.193.0/streams/writer_from_stream_writer.ts": "07c7ee025151a190f37fc42cbb01ff93afc949119ebddc6e0d0df14df1bf6950", + "https://deno.land/std@0.193.0/streams/zip_readable_streams.ts": "a9d81aa451240f79230add674809dbee038d93aabe286e2d9671e66591fc86ca", + "https://deno.land/std@0.196.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", + "https://deno.land/std@0.196.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", + "https://deno.land/std@0.196.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", + "https://deno.land/std@0.196.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", + "https://deno.land/std@0.196.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793", + "https://deno.land/std@0.196.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", + "https://deno.land/std@0.196.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", + "https://deno.land/std@0.196.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", + "https://deno.land/std@0.196.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", + "https://deno.land/std@0.196.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", + "https://deno.land/std@0.196.0/path/mod.ts": "f065032a7189404fdac3ad1a1551a9ac84751d2f25c431e101787846c86c79ef", + "https://deno.land/std@0.196.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", + "https://deno.land/std@0.196.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", + "https://deno.land/std@0.196.0/path/win32.ts": "4fca292f8d116fd6d62f243b8a61bd3d6835a9f0ede762ba5c01afe7c3c0aa12", + "https://deno.land/std@0.196.0/yaml/_error.ts": "b59e2c76ce5a47b1b9fa0ff9f96c1dd92ea1e1b17ce4347ece5944a95c3c1a84", + "https://deno.land/std@0.196.0/yaml/_loader/loader.ts": "47b9592efcb390b58b1903cc471bfdf1fc71a0d2d2b31e37b5cae7d8804c7aed", + "https://deno.land/std@0.196.0/yaml/_loader/loader_state.ts": "0841870b467169269d7c2dfa75cd288c319bc06f65edd9e42c29e5fced91c7a4", + "https://deno.land/std@0.196.0/yaml/_mark.ts": "dcd8585dee585e024475e9f3fe27d29740670fb64ebb970388094cad0fc11d5d", + "https://deno.land/std@0.196.0/yaml/_state.ts": "ef03d55ec235d48dcfbecc0ab3ade90bfae69a61094846e08003421c2cf5cfc6", + "https://deno.land/std@0.196.0/yaml/_type/binary.ts": "d34d8c8d8ed521e270cfede3401c425b971af4f6c69da1e2cb32b172d42c7da7", + "https://deno.land/std@0.196.0/yaml/_type/bool.ts": "5bfa75da84343d45347b521ba4e5aeace9fe6f53447405290d53315a3fc20e66", + "https://deno.land/std@0.196.0/yaml/_type/float.ts": "056bd3cb9c5586238b20517511014fb24b0e36f98f9f6073e12da308b6b9808a", + "https://deno.land/std@0.196.0/yaml/_type/function.ts": "ff574fe84a750695302864e1c31b93f12d14ada4bde79a5f93197fc33ad17471", + "https://deno.land/std@0.196.0/yaml/_type/int.ts": "563ad074f0fa7aecf6b6c3d84135bcc95a8269dcc15de878de20ce868fd773fa", + "https://deno.land/std@0.196.0/yaml/_type/map.ts": "7b105e4ab03a361c61e7e335a0baf4d40f06460b13920e5af3fb2783a1464000", + "https://deno.land/std@0.196.0/yaml/_type/merge.ts": "8192bf3e4d637f32567917f48bb276043da9cf729cf594e5ec191f7cd229337e", + "https://deno.land/std@0.196.0/yaml/_type/mod.ts": "060e2b3d38725094b77ea3a3f05fc7e671fced8e67ca18e525be98c4aa8f4bbb", + "https://deno.land/std@0.196.0/yaml/_type/nil.ts": "606e8f0c44d73117c81abec822f89ef81e40f712258c74f186baa1af659b8887", + "https://deno.land/std@0.196.0/yaml/_type/omap.ts": "cfe59a294726f5cea705c39a61fd2b08199cf48f4ccd6b040cb550ec0f38d0a1", + "https://deno.land/std@0.196.0/yaml/_type/pairs.ts": "0032fdfe57558d21696a4f8cf5b5cfd1f698743177080affc18629685c905666", + "https://deno.land/std@0.196.0/yaml/_type/regexp.ts": "1ce118de15b2da43b4bd8e4395f42d448b731acf3bdaf7c888f40789f9a95f8b", + "https://deno.land/std@0.196.0/yaml/_type/seq.ts": "95333abeec8a7e4d967b8c8328b269e342a4bbdd2585395549b9c4f58c8533a2", + "https://deno.land/std@0.196.0/yaml/_type/set.ts": "f28ba44e632ef2a6eb580486fd47a460445eeddbdf1dbc739c3e62486f566092", + "https://deno.land/std@0.196.0/yaml/_type/str.ts": "a67a3c6e429d95041399e964015511779b1130ea5889fa257c48457bd3446e31", + "https://deno.land/std@0.196.0/yaml/_type/timestamp.ts": "706ea80a76a73e48efaeb400ace087da1f927647b53ad6f754f4e06d51af087f", + "https://deno.land/std@0.196.0/yaml/_type/undefined.ts": "94a316ca450597ccbc6750cbd79097ad0d5f3a019797eed3c841a040c29540ba", + "https://deno.land/std@0.196.0/yaml/_utils.ts": "26b311f0d42a7ce025060bd6320a68b50e52fd24a839581eb31734cd48e20393", + "https://deno.land/std@0.196.0/yaml/parse.ts": "1fbbda572bf3fff578b6482c0d8b85097a38de3176bf3ab2ca70c25fb0c960ef", + "https://deno.land/std@0.196.0/yaml/schema.ts": "96908b78dc50c340074b93fc1598d5e7e2fe59103f89ff81e5a49b2dedf77a67", + "https://deno.land/std@0.196.0/yaml/schema/core.ts": "fa406f18ceedc87a50e28bb90ec7a4c09eebb337f94ef17468349794fa828639", + "https://deno.land/std@0.196.0/yaml/schema/default.ts": "0047e80ae8a4a93293bc4c557ae8a546aabd46bb7165b9d9b940d57b4d88bde9", + "https://deno.land/std@0.196.0/yaml/schema/extended.ts": "0784416bf062d20a1626b53c03380e265b3e39b9409afb9f4cb7d659fd71e60d", + "https://deno.land/std@0.196.0/yaml/schema/failsafe.ts": "d219ab5febc43f770917d8ec37735a4b1ad671149846cbdcade767832b42b92b", + "https://deno.land/std@0.196.0/yaml/schema/json.ts": "5f41dd7c2f1ad545ef6238633ce9ee3d444dfc5a18101e1768bd5504bf90e5e5", + "https://deno.land/std@0.196.0/yaml/schema/mod.ts": "4472e827bab5025e92bc2eb2eeefa70ecbefc64b2799b765c69af84822efef32", + "https://deno.land/std@0.196.0/yaml/type.ts": "1aabb8e0a3f4229ce0a3526256f68826d9bdf65a36c8a3890ead8011fcba7670", + "https://deno.land/x/cors@v1.2.2/abcCors.ts": "cdf83a7eaa69a1bf3ab910d18b9422217902fac47601adcaf0afac5a61845d48", + "https://deno.land/x/cors@v1.2.2/attainCors.ts": "7d6aba0f942495cc31119604e0895c9bb8edd8f8baa7fe78e6c655bd0b4cbf59", + "https://deno.land/x/cors@v1.2.2/cors.ts": "0e2d9167e3685f9bcf48f565e312b6e1883fa458f7337e5ce7bc2e3b29767980", + "https://deno.land/x/cors@v1.2.2/mithCors.ts": "3a359d6e716e0410ede278ab54d875b293a2d66d838aaa7cfbf9ddc1e9e990d3", + "https://deno.land/x/cors@v1.2.2/mod.ts": "2b351913f56d77ad80cb3b8633d4539c9eeddb426dae79437ada0e6a9cb4f1a6", + "https://deno.land/x/cors@v1.2.2/oakCors.ts": "1348dc7673c61b85d2e80559a7b44f8e0246eaa6bcc6ec744fafe5d9b13b5c71", + "https://deno.land/x/cors@v1.2.2/opineCors.ts": "fb5790115c26b7061d84b8d6c17d258a1e241bcab75b0bc3ca1fdb2e57bc5072", + "https://deno.land/x/cors@v1.2.2/types.ts": "97546633ccc7f0df7a29bacba5d91dc6f61decdd1b65258300244dba905d34b8", + "https://deno.land/x/htm@0.2.1/html.tsx": "afcf0500d9199e8efe6877d9e7bf4f7907d0bba09906b6036cfe5e90458083b3", + "https://deno.land/x/htm@0.2.1/jsx.ts": "2dfbc2b208981b9348aee02494ba064eac72f686d2e5ecc19d7f3fcdb9734e3d", + "https://deno.land/x/htm@0.2.1/mod.ts": "d930056a7c8c645bea5f9c116d65bc309d12cfebafa8db98f7c406e1984caaec", + "https://deno.land/x/htm@0.2.1/plugins/color-scheme.ts": "e6aae324f7d28e2ad3a9c9dfa5665ba0e4cec2e05fabb04989dc124c0b5f6e36", + "https://deno.land/x/oak@v12.6.0/application.ts": "3028d3f6fa5ee743de013881550d054372c11d83c45099c2d794033786d27008", + "https://deno.land/x/oak@v12.6.0/body.ts": "1899761b97fc9d776f3710b2637fb047ba29b968609afc6c0e5219b1108e703c", + "https://deno.land/x/oak@v12.6.0/buf_reader.ts": "26640736541598dbd9f2b84a9d0595756afff03c9ca55b66eef1911f7798b56d", + "https://deno.land/x/oak@v12.6.0/content_disposition.ts": "8b8c3cb2fba7138cd5b7f82fc3b5ea39b33db924a824b28261659db7e164621e", + "https://deno.land/x/oak@v12.6.0/context.ts": "895a2d40186b89c28ba3947bf08a9335f1a11fc33133f760082536b74c53d1ca", + "https://deno.land/x/oak@v12.6.0/deps.ts": "6c601cd79f39489ad37d87587ad0c6fe53d838946ffa5a3e7e9600e7a01dc6d9", + "https://deno.land/x/oak@v12.6.0/etag.ts": "32e47726b41698aefdd71faac5aaf2907c9bdd41ef18a7693863be4f8fee115d", + "https://deno.land/x/oak@v12.6.0/forwarded.ts": "e656f96a85574e2a6ee54dc35efc9f72d543c9ae0923760ef426ee7369eef01c", + "https://deno.land/x/oak@v12.6.0/headers.ts": "769fd042d34fbcd5667cbd745b5c65d335cc8430e822dbf1f87d65313cab4b47", + "https://deno.land/x/oak@v12.6.0/helpers.ts": "6b03c6a2be06ec775d54449e442a2bac234aa952948ca758356eab6dc87af618", + "https://deno.land/x/oak@v12.6.0/http_server_native.ts": "6232bed3d7bc17136d1a7f7685a6f8a79c943694463f71cf743eac58e75ec34c", + "https://deno.land/x/oak@v12.6.0/http_server_native_request.ts": "552b174b5e13e92de8897d5b6f716b1e5a53543115481d65a651a41e4ca29ec9", + "https://deno.land/x/oak@v12.6.0/isMediaType.ts": "62d638abcf837ece3a8f07a4b7ca59794135cb0d4b73194c7d5837efd4161005", + "https://deno.land/x/oak@v12.6.0/mediaTyper.ts": "042b853fc8e9c3f6c628dd389e03ef481552bf07242efc3f8a1af042102a6105", + "https://deno.land/x/oak@v12.6.0/middleware.ts": "c7f7a0424a6dd99a00e4b8d7d6e131efc0facc8dea781845d713b63df8ef1862", + "https://deno.land/x/oak@v12.6.0/middleware/proxy.ts": "6f2799cf60d926e7a8d13ff757a59d7f0f930407db7ee9b81e7c064138eb89ff", + "https://deno.land/x/oak@v12.6.0/mod.ts": "f6aa47ad1b6099470c9a884cccad9d3ac0fd242ba940896291ab76cd26cf554b", + "https://deno.land/x/oak@v12.6.0/multipart.ts": "1484e01b98f5135f2aa09f7d0ce1e7be39109bf9f045ac660e941619d04e3d29", + "https://deno.land/x/oak@v12.6.0/range.ts": "1ca15fc1ac21c650c34e6997a75af2af9d9d8eb6fe2d5d1dadeac3dfd4a9c152", + "https://deno.land/x/oak@v12.6.0/request.ts": "794e5e12c2d369c2b8a6c998be5ca96c6e0315cae73069b85bc537901811073c", + "https://deno.land/x/oak@v12.6.0/response.ts": "7172285e58947057f36d6536b52a9cdffbdb03616555fa8e94b87f469a105f8a", + "https://deno.land/x/oak@v12.6.0/router.ts": "0f53d6249f9e8f89f2522b2b810b9302d0f22593c184b16b24b03bf2b7d42ea1", + "https://deno.land/x/oak@v12.6.0/send.ts": "5ec49f106294593f468317a0c885da4f3274bf6d0fe9e16a7304391730b4f4fb", + "https://deno.land/x/oak@v12.6.0/structured_clone.ts": "c3888b14d1eec558345bfbf13d0993d59bd45aaa8588444e35dd558c3a921cd8", + "https://deno.land/x/oak@v12.6.0/testing.ts": "37d684d57bb8e5150fb5eb2677e66b04dcb422709cf2c5a74c1df94d52aa02e2", + "https://deno.land/x/oak@v12.6.0/util.ts": "0a3fdffb114859c2de84e1783efa3a544af4d2af8c6f08e0d25655de9d3e69bb", + "https://deno.land/x/path_to_regexp@v6.2.1/index.ts": "894060567837bae8fc9c5cbd4d0a05e9024672083d5883b525c031eea940e556", + "https://esm.sh/@amoutonbrady/lz-string@0.1.0": "fe80913334aa57bb64d5127a855f90f5527e7bbf64c5b627304a55fc6b5c3ee2", + "https://esm.sh/@stefanprobst/remark-shiki@2.2.1": "2ce9cb0918b0e75cb456603169de2abe57cefc683d0fd47d3a1bb7baf6df2fe5", + "https://esm.sh/rehype-raw@6.1.1": "3d47f840027aaec6187c13222e0cd34b0e2503f31f3949ad3e719fd6d94fd527", + "https://esm.sh/rehype-stringify@9.0.3": "ac99c749744048282d25689fd7d896958b4206456bc37b53bc85cfce1286c34e", + "https://esm.sh/remark-gfm@3.0.1": "665786707831e17f9f14e6a029c3cd00491d76c0d9bfae7a53978de3e6e9ebfb", + "https://esm.sh/remark-parse@10.0.2": "74ae3bfb72d8d19c210e68d6f34f243a7d82403db99c14e67c63e45aba61ae85", + "https://esm.sh/remark-rehype@10.1.0": "f76689dc1ac61b3908e8cd9d33548d870d894b8b68a94ef24ff9dece781d7fdc", + "https://esm.sh/typescript@5.1.6": "9401d2b334bac752a28f8df2a1e5255e1ab32f550db48d7f73746a56c67dcef8", + "https://esm.sh/unified@10.1.2": "9742c7de1dd3c0b17a1024bbd122ccd9655330ed8c7f634d9bffda8e48531718", + "https://esm.sh/v129/buffer-from@1.1.2/denonext/buffer-from.mjs": "078451542b62cb4261c01a01ff7e9bc0f94bef4eb710831d40e1f92c4dfe3883", + "https://esm.sh/v129/comma-separated-tokens@2.0.3/denonext/comma-separated-tokens.mjs": "ad5df8a36487e0a63d15bbbb6bab8b153e08583d0d5eb6d0058cd0fc619252e0", + "https://esm.sh/v129/hast-util-from-parse5@7.1.2/denonext/hast-util-from-parse5.mjs": "217d345c03b943692facd299a948bcab4a74a9275b142cab1985a40de4e05c05", + "https://esm.sh/v129/hast-util-parse-selector@3.1.1/denonext/hast-util-parse-selector.mjs": "df576c8298a048d9aad89506f5884db91bc249bb6e221b9fd3b228eb40980a62", + "https://esm.sh/v129/hast-util-raw@7.2.3/denonext/hast-util-raw.mjs": "c3ce13860ae7bb5bf7e56ec03160a077452f7ad2165191656afe39e535c24849", + "https://esm.sh/v129/hast-util-to-parse5@7.1.0/denonext/hast-util-to-parse5.mjs": "321b6af153c81e5c5221c87cf0427ae8101ac91de0c0c3347d1c5daad9c59b17", + "https://esm.sh/v129/hastscript@7.2.0/denonext/hastscript.mjs": "8998b04df73b0edcefcf44b2676446e7b296525dc2ab26b39d2cdc450c932765", + "https://esm.sh/v129/html-void-elements@2.0.1/denonext/html-void-elements.mjs": "10f57d4f9d680bf2de32538d6aaf879f20d4ee02dd57879aa232319d6c984f54", + "https://esm.sh/v129/node_inspector.js": "c45566d90f93c4a12cc70cb4de9b8c926fa6250ca63e1483c71d62237d78777c", + "https://esm.sh/v129/parse5@6.0.1/denonext/lib/parser.js": "7b1d88ec671395f2523e0e2ddec282bdc78bbca43835416c6bca5fc079bb317e", + "https://esm.sh/v129/property-information@6.2.0/denonext/property-information.mjs": "c36042799161605d2ba2af318abf697a41e77e7ef5c80f5740de470db7776b9c", + "https://esm.sh/v129/rehype-raw@6.1.1/denonext/rehype-raw.mjs": "392939841f18281830f86d427c71bc6bba890ac98d605f711ecd73aff1948f6f", + "https://esm.sh/v129/source-map-support@0.5.21/denonext/source-map-support.mjs": "0e8f4e6a007c1b74c4f23d6e84d514cc5662f181cf38b822a3786d0ba1033d64", + "https://esm.sh/v129/source-map@0.6.1/denonext/source-map.mjs": "ccff3bb06dea7c01a2c83cf12113697592e418fd06b55ae2bb4cb0a4e51a98b8", + "https://esm.sh/v129/space-separated-tokens@2.0.2/denonext/space-separated-tokens.mjs": "f30773a9959cacfe7511c250e5d125a9f88ee00d3aef6e87b4d17fe49806b276", + "https://esm.sh/v129/typescript@5.1.6/denonext/typescript.mjs": "c77f6ade017f0c3e5826d44fe3f05c9b56298e9e2a3977d175708dedc2982dae", + "https://esm.sh/v129/unist-util-is@5.2.1/denonext/unist-util-is.mjs": "771abea65db57c71e2a3d98200242c362337617e63881fc9954e891dde32277c", + "https://esm.sh/v129/unist-util-position@4.0.4/denonext/unist-util-position.mjs": "be87a00f3663c09267443ef900692719014d966ef84969cb9ad7b9cfc4cd6157", + "https://esm.sh/v129/unist-util-visit-parents@5.1.3/denonext/unist-util-visit-parents.mjs": "27c8ec6b5e26c8a87d811eb79028478547bea53327ecf30f31d1e7e3911b0784", + "https://esm.sh/v129/unist-util-visit@4.1.2/denonext/unist-util-visit.mjs": "b42a79d035f9afff975a0c302185386cfc7dd0f4fc30db055a84a8296bff39ee", + "https://esm.sh/v129/vfile-location@4.1.0/denonext/vfile-location.mjs": "aa64a017e8059406f649f12a564162b61f1fa6ac0e4498c250e4309a9bc617bf", + "https://esm.sh/v129/web-namespaces@2.0.1/denonext/web-namespaces.mjs": "bc6ee363bbe40abddca68678e849584981176d9bde3728b4c5d47a5241dac7bf", + "https://esm.sh/v129/zwitch@2.0.4/denonext/zwitch.mjs": "c0e8c246a1f38b425335ea78cc366a7801d3ef89701229a35f85a51310e6e49f", + "https://esm.sh/v130/@amoutonbrady/lz-string@0.1.0/denonext/lz-string.mjs": "159ca261a05b2cc2a7e16f959bed07e9f5200dffb8a61eb2273c25870249c5f7", + "https://esm.sh/v130/@stefanprobst/remark-shiki@2.2.1/denonext/remark-shiki.mjs": "cda892ea52d3cf91654115c3486f9e4be247555ee6c75061f17282432353069e", + "https://esm.sh/v130/bail@2.0.2/denonext/bail.mjs": "cab740cf24417dfad8567cbb78a49ae7e492ecca299f2b3185520805aba4d073", + "https://esm.sh/v130/ccount@2.0.1/denonext/ccount.mjs": "7b32092651a866fcc992c028982ce5e911356da7653baa3febb1a8ccb93e30f8", + "https://esm.sh/v130/character-entities-html4@2.1.0/denonext/character-entities-html4.mjs": "0b4e64d1b0152acbeec6d854eadce6ceb2de05b0f459ad47485afa206f745f10", + "https://esm.sh/v130/character-entities-legacy@3.0.0/denonext/character-entities-legacy.mjs": "5da76ada1554e4956dc6b702ba92b56a3faf158b24bf45279c522e85f5d9cd21", + "https://esm.sh/v130/character-entities@2.0.2/denonext/character-entities.mjs": "9e8657f056310ac3ca8058eaf96cef695ee13a4bf6c302674796a882464f305c", + "https://esm.sh/v130/comma-separated-tokens@2.0.3/denonext/comma-separated-tokens.mjs": "ad5df8a36487e0a63d15bbbb6bab8b153e08583d0d5eb6d0058cd0fc619252e0", + "https://esm.sh/v130/decode-named-character-reference@1.0.2/denonext/decode-named-character-reference.mjs": "b1394c7ef994f6f25cf1e6b9c5606921a1d63b30fb4a5c677130096ff01a88ef", + "https://esm.sh/v130/escape-string-regexp@5.0.0/denonext/escape-string-regexp.mjs": "6080dd39c43a11f999a41172a27b8c58572d747d8276c039d93d4be8b21747a5", + "https://esm.sh/v130/extend@3.0.2/denonext/extend.mjs": "6ab9e4890dfa54ec88fa326fca525c211141d6da72188f54e9610d1281219c9e", + "https://esm.sh/v130/hast-util-to-html@8.0.4/denonext/hast-util-to-html.mjs": "4fab7c60e26520389f1f4f3ab96c294b91f519181938004c4326cb09c1f1d389", + "https://esm.sh/v130/hast-util-whitespace@2.0.1/denonext/hast-util-whitespace.mjs": "0d45cf1a1b1d7ba26d5a3f2fda8c929b02ef701786e656ade327d8c3f7b390bb", + "https://esm.sh/v130/html-void-elements@2.0.1/denonext/html-void-elements.mjs": "10f57d4f9d680bf2de32538d6aaf879f20d4ee02dd57879aa232319d6c984f54", + "https://esm.sh/v130/is-buffer@2.0.5/denonext/is-buffer.mjs": "87d027d2c668d773b7037bd49fc1c12ed6af26b9f176aacf338c7901237b8867", + "https://esm.sh/v130/is-plain-obj@4.1.0/denonext/is-plain-obj.mjs": "d3d86a7174ad7935de7b00f904b6424c103bce530c502efb7f42114cbb1a555f", + "https://esm.sh/v130/json5@2.2.3/denonext/json5.mjs": "2124ca68e182d9de859a72e9415bbc4702b8f0bb002a7a22ea06d6684a3e562b", + "https://esm.sh/v130/markdown-table@3.0.3/denonext/markdown-table.mjs": "1dd9cb2d2d95fc440cc10489ac77bf979c944e76070997d962e05f627f45df0e", + "https://esm.sh/v130/mdast-util-definitions@5.1.2/denonext/mdast-util-definitions.mjs": "f7b9e06dd9879cb3a5b9789606978141129ac19100011275cb989b13050d9ff5", + "https://esm.sh/v130/mdast-util-find-and-replace@2.2.2/denonext/mdast-util-find-and-replace.mjs": "8c4246bd8a61a842b9ef4797f655c3746a9c93bf2c3007b3a0013d79b7ada112", + "https://esm.sh/v130/mdast-util-from-markdown@1.3.1/denonext/mdast-util-from-markdown.mjs": "3db239e24c04aa54ff1a902607091e75ceabf742957495832c86105ac2e02f34", + "https://esm.sh/v130/mdast-util-gfm-autolink-literal@1.0.3/denonext/mdast-util-gfm-autolink-literal.mjs": "8579137ae11989e5a2913a7ce1f75cac6c0dfca07888dd8c23d17572b6f1ec21", + "https://esm.sh/v130/mdast-util-gfm-footnote@1.0.2/denonext/mdast-util-gfm-footnote.mjs": "fe0b64d54002a2bb508a44359e701fb241f5ae27619f30244848316df3ce4682", + "https://esm.sh/v130/mdast-util-gfm-strikethrough@1.0.3/denonext/mdast-util-gfm-strikethrough.mjs": "e62da64b6687c9312b05e0aedadc17bfa60929a950667360d91670c509599be2", + "https://esm.sh/v130/mdast-util-gfm-table@1.0.7/denonext/mdast-util-gfm-table.mjs": "94028829acad28830096b41cdcc32400cc6b56684edb3acd371c2667cffa473a", + "https://esm.sh/v130/mdast-util-gfm-task-list-item@1.0.2/denonext/mdast-util-gfm-task-list-item.mjs": "c977846c6da61edebe3cb85e9e410a0d7db08e6bb2880d4d9edb560d61896269", + "https://esm.sh/v130/mdast-util-gfm@2.0.2/denonext/mdast-util-gfm.mjs": "267f43e9c5027b10e0b3f2dee22212efc4a85710d83ec31e5557c3b364351a92", + "https://esm.sh/v130/mdast-util-to-hast@12.3.0/denonext/mdast-util-to-hast.mjs": "b8b9484e4ddb8159d6ae6203dfd7a9b2dff385b4cf9c54d2cdc7f9eb14ffe457", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/handle/inline-code.js": "3422bf53f674376874415f159bf7a07e938c4d0d5b8b7542c98748009075be7d", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/handle/list-item.js": "3db183cad97c344db70eebf0ea5df747739e022ff4f56b9d4037619f2db09698", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/association.js": "d7179407d756d55a9a7f9181ea8cffbbe480d0d54692f802a7b181926f7df7da", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/container-flow.js": "3735de16d58105c485c3eb304a700407b6108d81812c7623c50803dc68fa9498", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/container-phrasing.js": "d37cbf5f47656c0dca1c974e7438383f1ad0d2f376ec8351d25a89ee46ff050f", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/indent-lines.js": "f0c00ce02a330300bc74968470617e408bcdf48dd85e640e79aab57ed443bf4f", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/safe.js": "ce43e3a9f314dbf8ac8536857f81ae7ff1a8b15a78caa91a2ca07cb53d4d843b", + "https://esm.sh/v130/mdast-util-to-markdown@1.5.0/denonext/lib/util/track.js": "a91cdbfc1a4aed4b623ec3a5a553745b55fa8554722304ce31a4b6b98645d33d", + "https://esm.sh/v130/mdast-util-to-string@3.2.0/denonext/mdast-util-to-string.mjs": "64fef8fd2a9fdb8abcff4ff6c086c273123c0833c13e465d6c9f82332d1e239c", + "https://esm.sh/v130/micromark-core-commonmark@1.1.0/denonext/micromark-core-commonmark.mjs": "3812985f18babd446cb8b7a68f266388977a0a19bf6fc9b439da230fdd0b05bf", + "https://esm.sh/v130/micromark-extension-gfm-autolink-literal@1.0.5/denonext/micromark-extension-gfm-autolink-literal.mjs": "38655b57bd3d2070c44c16fa3ab49027001c7a06dcabd52f4f3c2019f5e21fb7", + "https://esm.sh/v130/micromark-extension-gfm-footnote@1.1.2/denonext/micromark-extension-gfm-footnote.mjs": "d69e09b68de0a5c6469fb1cc25dca999c84f619861480e95426140c92e733d80", + "https://esm.sh/v130/micromark-extension-gfm-strikethrough@1.0.7/denonext/micromark-extension-gfm-strikethrough.mjs": "b143cc13e6c89ed2a78f647cfe5a2232eb4c09d66faa4fc98c4c82455456b8b6", + "https://esm.sh/v130/micromark-extension-gfm-table@1.0.7/denonext/micromark-extension-gfm-table.mjs": "3d08e3d1e1e38f18b7a4b0fc0f30eeba711c51bb3713e85fa984235c604fa041", + "https://esm.sh/v130/micromark-extension-gfm-tagfilter@1.0.2/denonext/micromark-extension-gfm-tagfilter.mjs": "b5d2226cdadb016da79889a312bdd56561f7dd8c1a444efe92d79bba635ae119", + "https://esm.sh/v130/micromark-extension-gfm-task-list-item@1.0.5/denonext/micromark-extension-gfm-task-list-item.mjs": "50e952779ba21f625b8a5c6cf49a7af91ce80371d0e5268410899f832c9748b1", + "https://esm.sh/v130/micromark-extension-gfm@2.0.3/denonext/micromark-extension-gfm.mjs": "72cdf1ae0151ee4885ce4153bf11cd81a5a3093b7076b7ff4855fac08585d7bb", + "https://esm.sh/v130/micromark-factory-destination@1.1.0/denonext/micromark-factory-destination.mjs": "b3ceb4309ad8d8330925a7c6edebcfa4c0ddc7c84ed489d94e96a5c3e093511a", + "https://esm.sh/v130/micromark-factory-label@1.1.0/denonext/micromark-factory-label.mjs": "4f9bf7eff9d1eec92ab4e0712ed260e85d58dc8ae5f993f224f8271f6028cdca", + "https://esm.sh/v130/micromark-factory-space@1.1.0/denonext/micromark-factory-space.mjs": "5393b2277e50dcdff86d4587382172b9e521e2ae30e069b6435355fe7080c430", + "https://esm.sh/v130/micromark-factory-title@1.1.0/denonext/micromark-factory-title.mjs": "b9841cafb1462f2882579f01b0e3b9aa76b7eef72d30c01f3e9ba684b4d553d1", + "https://esm.sh/v130/micromark-factory-whitespace@1.1.0/denonext/micromark-factory-whitespace.mjs": "e0ef57848a03b21a7b8fb1ec8ddfb265daf86a55457118d9335cb3133fe2701a", + "https://esm.sh/v130/micromark-util-character@1.2.0/denonext/micromark-util-character.mjs": "be2f95646c829378e2f33d0e8b03e7e057f2387cd54f9c18c3d48a87fbc909c9", + "https://esm.sh/v130/micromark-util-chunked@1.1.0/denonext/micromark-util-chunked.mjs": "896f816c52b791283f998076bcea3ff9a4bbd2bf858d96be6079400939ae8c9d", + "https://esm.sh/v130/micromark-util-classify-character@1.1.0/denonext/micromark-util-classify-character.mjs": "874e90c60a044ca592c1c0f0ea525d4d5f33bf0f66564ad4ec72f6e89b298f9e", + "https://esm.sh/v130/micromark-util-combine-extensions@1.1.0/denonext/micromark-util-combine-extensions.mjs": "59c02a19ca424380e735a81835598ce0b71aab347b4e3276efc87f3ba3f2d7c5", + "https://esm.sh/v130/micromark-util-decode-numeric-character-reference@1.1.0/denonext/micromark-util-decode-numeric-character-reference.mjs": "d9d2a8fc3648db44a49c0284d088db354b39c5623e1497c4127ad103594a7948", + "https://esm.sh/v130/micromark-util-decode-string@1.1.0/denonext/micromark-util-decode-string.mjs": "850b60e967dc0f1e17d54d1b4a81e9e6a71bb822d4c00da073e45b425d4c6374", + "https://esm.sh/v130/micromark-util-encode@1.1.0/denonext/micromark-util-encode.mjs": "e9c399d8913ebe2b736a8259fb061740fd8ad632e7f933e27fb67f442c7e48e3", + "https://esm.sh/v130/micromark-util-html-tag-name@1.2.0/denonext/micromark-util-html-tag-name.mjs": "81ed9b1fe3f6dd5290991b4bf39d034ddfd6cdbb4f5352ab61769e4c2eb3fbd3", + "https://esm.sh/v130/micromark-util-normalize-identifier@1.1.0/denonext/micromark-util-normalize-identifier.mjs": "27b873a22954a139d8215b722b0a867b4f1f718cd261ea3f884f997a0d3e0e08", + "https://esm.sh/v130/micromark-util-resolve-all@1.1.0/denonext/micromark-util-resolve-all.mjs": "ee8f55a86b2bfcc1be3d15bbd8b106755a51916ae4c75c962cc044f6b2a22d46", + "https://esm.sh/v130/micromark-util-sanitize-uri@1.2.0/denonext/micromark-util-sanitize-uri.mjs": "c2dc3925ffe931d1c2c37784e382fca717d1ad4f807471629bde6e8b6338d5f4", + "https://esm.sh/v130/micromark-util-subtokenize@1.1.0/denonext/micromark-util-subtokenize.mjs": "5fdbca9aa001299b9ab13fc35d8d5f47fee55793703bfd914bce03246b887212", + "https://esm.sh/v130/micromark@3.2.0/denonext/lib/parse.js": "06948bf2586f66f4f96c12a10386a3cb20d8b72a0d738953cf5913e55ce06d16", + "https://esm.sh/v130/micromark@3.2.0/denonext/lib/postprocess.js": "bc1177cff416aa55b6dfd44b7341cda767b6fee28842782f20bc50ff4cad4b88", + "https://esm.sh/v130/micromark@3.2.0/denonext/lib/preprocess.js": "786db83c43e9d21f14bc37b6c05f061ca4a1db862ffed10c07ca1e6843f73fae", + "https://esm.sh/v130/parse-numeric-range@1.3.0/denonext/parse-numeric-range.mjs": "3653264a361cd54f32acf63c3f21f2e171626e13534393574cfb51b7fccfa552", + "https://esm.sh/v130/property-information@6.2.0/denonext/property-information.mjs": "c36042799161605d2ba2af318abf697a41e77e7ef5c80f5740de470db7776b9c", + "https://esm.sh/v130/rehype-stringify@9.0.3/denonext/rehype-stringify.mjs": "37513e88865941a6cf52e39507e3f73c97caf7e39aea230de6ca26d64616340e", + "https://esm.sh/v130/remark-gfm@3.0.1/denonext/remark-gfm.mjs": "cf0544949eb6b88f7d2dfcf6219b0fdfc33ccb8ae4e8bb173eb9a59aff61d42b", + "https://esm.sh/v130/remark-parse@10.0.2/denonext/remark-parse.mjs": "5ae8f0ed28dca030e5c3226cbd0f24ab23c01813d1ee3dc0929880b99817a32b", + "https://esm.sh/v130/remark-rehype@10.1.0/denonext/remark-rehype.mjs": "e744f1ccdf3a6bbbd8d7ae916149c4989edae9fa65e2a90bb1c3a636b18e1935", + "https://esm.sh/v130/space-separated-tokens@2.0.2/denonext/space-separated-tokens.mjs": "f30773a9959cacfe7511c250e5d125a9f88ee00d3aef6e87b4d17fe49806b276", + "https://esm.sh/v130/stringify-entities@4.0.3/denonext/stringify-entities.mjs": "86bd540c7d057b4907424f9848969af84d635ff5e187b57c18d015c0d96c91dc", + "https://esm.sh/v130/trim-lines@3.0.1/denonext/trim-lines.mjs": "f01a20253341eb2554f307ab05bc9cd93d6f33bcbb24fde2fc9fcd857564283e", + "https://esm.sh/v130/trough@2.1.0/denonext/trough.mjs": "d7c1b66bf8739a28bcc6bbf17919f6b54b7b25cceabfb0e694d192232c83f1fd", + "https://esm.sh/v130/unified@10.1.2/denonext/unified.mjs": "9051f93376e2b1c427c065813ee1185103c0d60a4c42c546534f970fbe91199f", + "https://esm.sh/v130/unist-util-generated@2.0.1/denonext/unist-util-generated.mjs": "ff9c54405f6aedb39847fd975a3f528129089e74dd61e9408d5b1b09d8a13dc1", + "https://esm.sh/v130/unist-util-is@5.2.1/denonext/unist-util-is.mjs": "771abea65db57c71e2a3d98200242c362337617e63881fc9954e891dde32277c", + "https://esm.sh/v130/unist-util-position@4.0.4/denonext/unist-util-position.mjs": "be87a00f3663c09267443ef900692719014d966ef84969cb9ad7b9cfc4cd6157", + "https://esm.sh/v130/unist-util-stringify-position@3.0.3/denonext/unist-util-stringify-position.mjs": "e3b2256d68ec8d5ceeb204afe84492e69182ad264a876309a33def43aa34111d", + "https://esm.sh/v130/unist-util-visit-parents@5.1.3/denonext/unist-util-visit-parents.mjs": "0b767f059a8111c7a5ae52050a7eb6d7ac4a90ef0223d5a049bf177f1b1c9992", + "https://esm.sh/v130/unist-util-visit@4.1.2/denonext/unist-util-visit.mjs": "b77a640889c989aa87d92c75d5ce2735553e036784a00900f2f5ac2a7094b008", + "https://esm.sh/v130/vfile-message@3.1.4/denonext/vfile-message.mjs": "76abbcd2afa0e61d3511799e5118c9471c4bce770e85fae04c4c0b4c74d5447f", + "https://esm.sh/v130/vfile@5.3.7/denonext/vfile.mjs": "165e0f0d2c0a5db9cc1347175c75ee88bff56b143cd21216b625a3141cccbe0d", + "https://esm.sh/v130/zwitch@2.0.4/denonext/zwitch.mjs": "c0e8c246a1f38b425335ea78cc366a7801d3ef89701229a35f85a51310e6e49f", + "https://unpkg.com/shiki@0.14.3/dist/index.browser.mjs": "e701176f99cb93cfb15f0ebbdafcc996b89fc11ade576470b2f6a3feeef22b78" + } +} diff --git a/mod.ts b/mod.ts index c0710d4..6997eed 100644 --- a/mod.ts +++ b/mod.ts @@ -1,9 +1,10 @@ // Import necessary modules from dependencies import { cors, oak, parse, path, } from "./deps.ts"; -import { getDocs } from "./docs.tsx"; import { twoslasher } from "./vendor/twoslash.ts"; import type { TwoSlashOptions } from "./vendor/twoslash.ts"; +import "./script/build.ts" + // Destructure necessary components from oak (similar to Express.js in Node.js) const { Application, Router, send, isHttpError, Status } = oak; @@ -27,9 +28,12 @@ const router = new Router(); // Define routes router // Root route - .get("/", (context) => { - // Respond with a JSON object - context.response.body = getDocs; + .get("/", async (context) => { + // Use the send function from oak to serve static files + // This is similar to express.static in Express.js + await send(context, "/index.html", { + root: join(__dirname, `./static`), + }); context.response.headers.set("Content-Type", "text/html"); }) // Root static route @@ -49,7 +53,7 @@ router // Route openapi.json for a future swagger ui docs route .get("/.well-known/openapi.json", async (context) => { const uint8arr = await Deno.readFile( - join(__dirname, `./.well-known/openapi.yaml`), + join(__dirname, `./static/.well-known/openapi.yaml`), ); context.response.body = await parse( new TextDecoder().decode(uint8arr), @@ -61,7 +65,7 @@ router // Use the send function from oak to serve static files // This is similar to express.static in Express.js await send(context, fileName, { - root: join(__dirname, `./${staticPath}`), + root: join(__dirname, `./static/${staticPath}`), }); }) // Route for handling OPTIONS requests to /twoslash diff --git a/script/build.ts b/script/build.ts new file mode 100644 index 0000000..9749c31 --- /dev/null +++ b/script/build.ts @@ -0,0 +1,12 @@ +import { getDocs } from "../docs.tsx"; +import { path } from "../deps.ts"; + + // Destructure necessary path utilities from path (similar to path in Node.js) +const { dirname, fromFileUrl, join } = path; + +// Get the directory of the current module file +// This is similar to __dirname in Node.js, but Deno uses URLs for modules, so we need to convert from a file URL to a path +const __dirname = dirname(fromFileUrl(import.meta.url)); + +const stream = (await getDocs())!; +await Deno.writeFile(join(__dirname, `../static/index.html`), stream); \ No newline at end of file diff --git a/.well-known/ai-plugin.json b/static/.well-known/ai-plugin.json similarity index 100% rename from .well-known/ai-plugin.json rename to static/.well-known/ai-plugin.json diff --git a/.well-known/logo.png b/static/.well-known/logo.png similarity index 100% rename from .well-known/logo.png rename to static/.well-known/logo.png diff --git a/.well-known/openapi.yaml b/static/.well-known/openapi.yaml similarity index 100% rename from .well-known/openapi.yaml rename to static/.well-known/openapi.yaml diff --git a/favicon/favicon.ico b/static/favicon/favicon.ico similarity index 100% rename from favicon/favicon.ico rename to static/favicon/favicon.ico diff --git a/favicon/favicon.svg b/static/favicon/favicon.svg similarity index 100% rename from favicon/favicon.svg rename to static/favicon/favicon.svg diff --git a/static/index.html b/static/index.html new file mode 100644 index 0000000..7e33cee --- /dev/null +++ b/static/index.html @@ -0,0 +1,154 @@ +
ai-typescript-check is a ChatGPT plugin and API that provides linting, auto-completion, error checking, and type checking for TypeScript, JSX/TSX, and JavaScript files. It uses a modified version of @typescript/twoslash. Meaning all the typescript twoslash tips and tricks all work out of the box.
While primarily designed as a ChatGPT plugin for type checking TypeScript code, ai-typescript-check can also be used as a standalone API for type checking in any coding environment. We welcome your feedback and suggestions. You can check out the OpenAPI Spec to learn more about the API .well-known/open-api.yaml or using the website at ts-check.okikio.dev/.well-known/openapi.yaml
ts-check.okikio.dev and click "Find Plugin".++Type check transferables
++import { hasTransferables } from "transferables"
++The TypeScript code:
++import { hasTransferables } from "transferables"imports a function named
+hasTransferablesfrom a module named "transferables". The functionhasTransferablestakes up to three parameters:+
+- +
obj: unknown- The object to check for transferables.- +
streams?: boolean- An optional parameter that, if true, includes streams in the check for transferables.- +
maxCount?: number- An optional parameter that limits the number of iterations the function will perform when checking for transferables.The function returns a boolean value indicating whether the input contains at least one transferable object, up to a maximum number of iterations.
+Please note that the function
+hasTransferablesis imported but not used in your code, which is why the TypeScript compiler is giving a warning.Here is the type information for
+hasTransferables:+(alias) function hasTransferables(obj: unknown, streams?: boolean, maxCount?: number): booleanAnd here is the documentation for the function:
++Quickly checks to see if input contains at least one transferable object, up to a max number of iterationsYou can see the code in the TypeScript playground here.
+
Here's this exmaple on ChatGPT: https://chat.openai.com/share/a94731fb-b599-4896-b754-e9771c2b1e99
+To utilize ai-typescript-check, please follow the steps below:
// Instantiate a new FormData object
+const formData = new FormData();
+formData.append("code", "import { hasTransferables } from \"transferables\"");
+formData.append("extension", "ts");
+
+// Initiate a POST request to the API
+const res = await fetch("https://ts-check.okikio.dev/twoslash", {
+ method: "POST",
+ body: formData
+})
+
+// Output the response
+console.log({
+ json: await res.json()
+})
+Alternatively, you can pass the options as a query parameter:
+// Define the options
+const options = JSON.stringify({
+ "code": `import { hasTransferables } from "transferables"`,
+ "extension": "ts"
+});
+
+// Initiate a GET request to the API
+const res = await fetch(`https://ts-check.okikio.dev/twoslash?options=${options}`)
+
+// Output the response
+console.log({
+ json: await res.json()
+})
+The API will return a JSON object containing the following information:
+code: The original code that was sent to the API.extension: The file extension of the code.highlights: An array of highlights from the code.queries: An array of queries from the code. This is particularly useful for understanding how the code interacts with the TypeScript system.staticQuickInfos: An array of quick info objects, each containing details about a specific part of the code.errors: An array of errors found in the code.warnings: An array of warnings about the code.playgroundURL: A URL to the TypeScript playground with the code pre-loaded.tags: An array of tags associated with the code.Here's an example response:
+{
+ "code": "import { hasTransferables } from \"transferables\"",
+ "extension": "ts",
+ "highlights": [],
+ "queries": [],
+ "staticQuickInfos": [
+ {
+ "text": "(alias) function hasTransferables(obj: unknown, streams?: boolean, maxCount?: number): boolean\nimport hasTransferables",
+ "docs": "Quickly checks to see if input contains at least one transferable object, up to a max number of iterations\nThanks @aaorris for the help optimizing perf.",
+ "start": 9,
+ "length": 16,
+ "line": 0,
+ "character": 9,
+ "targetString": "hasTransferables"
+ }
+ ],
+ "errors": [],
+ "warnings": [
+ {
+ "category": 2,
+ "code": 6133,
+ "length": 48,
+ "line": 0,
+ "character": 0,
+ "renderedMessage": "'hasTransferables' is declared but its value is never read.",
+ "id": "warn-6133-0-48"
+ }
+ ],
+ "playgroundURL": "https://www.typescriptlang.org/play/#code/JYWwDg9gTgLgBAbzgCwIYGcAqVUDt0BmApjgEYA2R6cAvnAVBCHAEQw77FmXotA",
+ "tags": []
+}
+ai-typescript-check provides two main API endpoints: POST /twoslash and GET /twoslash. Both endpoints accept TwoSlashOptions as input and return TwoSlashReturn as output.
/twoslashThis endpoint is designed for processing larger code inputs. It accepts TwoSlashOptions as JSON/FormData and returns TwoSlashReturn JSON. It supports ts, js, tsx, jsx.
The request body should be a JSON object or FormData with the following properties:
+code (required): The TypeScript, JavaScript, TSX, or JSX code to run twoslash over.extension (required): The extension of the code file. Can be 'typescript', 'javascript', 'json', 'jsn', 'ts', 'js', 'tsx', or 'jsx'.defaultOptions: Default options for twoslash.defaultCompilerOptions: Default compiler options for TypeScript. This can include any valid tsconfig options as per the official TypeScript documentation.fsMap: A map of filenames to their content for the virtual file system.customTags: An array of custom tags.The response is a TwoSlashReturn JSON object with details about the code.
/twoslashThis endpoint is designed for processing smaller amounts of code that are 254 characters in length or less. It accepts TwoSlashOptions as JSON/FormData and returns TwoSlashReturn JSON. It supports ts, js, tsx, jsx.
The query parameters should include the options parameter with the same properties as the request body for the POST endpoint.
The response is a TwoSlashReturn JSON object with details about the code.
In the event of an error during the processing of your code, the API will return a TwoslashError JSON object with details about the error. This object includes the following properties:
error: A string describing the error.message: A detailed message about the error.errors: An array of error codes.compilerErrors: A string with the compiler errors.ai-typescript-check is licensed under the MIT License.