From 8b7f4451a37ed8d453a228fbdf5993e042dee3ac Mon Sep 17 00:00:00 2001 From: v1rtl Date: Wed, 8 Nov 2023 02:10:15 +0200 Subject: [PATCH 01/15] bump deps --- .vscode/settings.json | 3 +- deno.lock | 559 ++++-------------------------------------- deps.ts | 2 +- examples/oak.ts | 2 +- examples/opine.ts | 2 +- graphiql/render.ts | 4 +- mod_test.ts | 6 +- 7 files changed, 61 insertions(+), 517 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9f7ed62..67257cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,6 @@ "deno.lint": true, "deno.unstable": false, "editor.formatOnSave": true, - "[typescript]": { "editor.defaultFormatter": "denoland.vscode-deno" } + "[typescript]": { "editor.defaultFormatter": "denoland.vscode-deno" }, + "eslint.enable": false } diff --git a/deno.lock b/deno.lock index 271a094..dd07caf 100644 --- a/deno.lock +++ b/deno.lock @@ -1,62 +1,17 @@ { - "version": "2", + "version": "3", + "packages": { + "specifiers": { + "npm:graphql@16.6": "npm:graphql@16.6.0" + }, + "npm": { + "graphql@16.6.0": { + "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", + "dependencies": {} + } + } + }, "remote": { - "https://cdn.skypack.dev/-/call-bind@v1.0.2-aQhc5rw7D717dqak1kKd/dist=es2019,mode=imports/optimized/call-bind/callBound.js": "1c071462cf0f8435ec0128420b848962c98a02bba04b9a66d487c6c2dedc8c75", - "https://cdn.skypack.dev/-/call-bind@v1.0.2-aQhc5rw7D717dqak1kKd/dist=es2019,mode=imports/optimized/common/index-46ba46fb.js": "375f19372451f01406891804e68e5297427ffd2cc1dc414ba2acc570657633fd", - "https://cdn.skypack.dev/-/function-bind@v1.1.1-I2U4xSizU1p8sDZSqt3X/dist=es2019,mode=imports/optimized/function-bind.js": "dc4acf0cf579ae4cc3fc41693f0fba305dd435afd17fa8429dc612dec09eba9c", - "https://cdn.skypack.dev/-/get-intrinsic@v1.1.1-vDQgt4R7li5Q5aDeDi2i/dist=es2019,mode=imports/optimized/get-intrinsic.js": "6610feb6c01b4a3e5e266f36f84a5580f053dc1fa66445c95a25b28e2579cc30", - "https://cdn.skypack.dev/-/has-symbols@v1.0.2-E56JBEeOw5quDp1CshX2/dist=es2019,mode=imports/optimized/has-symbols.js": "d769f197bc2a5cff49ad3563ee27070ddf0917e6adbbb2a27689a259169abba3", - "https://cdn.skypack.dev/-/has@v1.0.3-Od4aggPz2zCm2qUbOWra/dist=es2019,mode=imports/optimized/has.js": "6f59b5492b4aecf279f2a91596f17dbab033766d75fe21fc5a1331f1c09a38e8", - "https://cdn.skypack.dev/-/ipaddr.js@v2.0.1-Gb4sD7xwOvS6n7C0Ihjk/dist=es2019,mode=imports/optimized/ipaddrjs.js": "2ea5f2a8d42f3cd57a9db523d2ac8c8b2c44c608b63557cdc81544dd84b4291a", - "https://cdn.skypack.dev/-/ms@v2.1.3-dWyghJmVCt8Lp5D9h2ww/dist=es2019,mode=imports/optimized/ms.js": "fd88e2d51900437011f1ad232f3393ce97db1b87a7844b3c58dd6d65562c1276", - "https://cdn.skypack.dev/-/object-inspect@v1.12.0-IB76S71JAEzSjyyJcpt5/dist=es2019,mode=imports/optimized/object-inspect.js": "8add1649c03dd45e6786bc30a14ca6ff1c049de807e40d82a93722cb1472d190", - "https://cdn.skypack.dev/-/qs@v6.10.3-0x8AMvLfDH7LkDtFNvn3/dist=es2019,mode=imports/optimized/qs.js": "7423b5b56a80979708a3d8965e2ac7b343279b68e116d2fe3e494d7194a54099", - "https://cdn.skypack.dev/-/range-parser@v1.2.1-fjgeOUVylppNnKWgNZKr/dist=es2019,mode=imports/optimized/range-parser.js": "26d5600561a1e09a1e6ed6125d859e4534e5b836b6345dc9b95b634e226e32be", - "https://cdn.skypack.dev/-/side-channel@v1.0.4-QnzQgoiRxXqT15V2FuQ6/dist=es2019,mode=imports/optimized/side-channel.js": "963a11dd09ee824a1a149d6163d007ddad62fb91066479f59cc8a3f1e481ee35", - "https://cdn.skypack.dev/ipaddr.js@2.0.1?dts": "a19aefda212e3e4c1c987f8bec2eaac6c83f5a11577668f080a50201c32be66b", - "https://cdn.skypack.dev/ms@2.1.3?dts": "b25ea14638586db05a6892c5683bbbbb08f03dacfefcf6a7ef452560fa2b333c", - "https://cdn.skypack.dev/qs@6.10.3?dts": "d4343891946af4262cb1e3f39d2be0fc1f5176a5f38d5212733863df27307544", - "https://cdn.skypack.dev/range-parser@1.2.1?dts": "6dea9478ac79a0060945d3c1233cca648a2408e884cdac8027ca8c5289141e24", - "https://deno.land/std@0.106.0/fmt/colors.ts": "d2f8355f00a74404668fc5a1e4a92983ce1a9b0a6ac1d40efbd681cb8f519586", - "https://deno.land/std@0.108.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58", - "https://deno.land/std@0.108.0/_util/os.ts": "dfb186cc4e968c770ab6cc3288bd65f4871be03b93beecae57d657232ecffcac", - "https://deno.land/std@0.108.0/archive/tar.ts": "ec86fe4a11478616c50d1f9bd5f322fde5fe56a17f95fc9d76c126df3b6a03ac", - "https://deno.land/std@0.108.0/async/deadline.ts": "1d6ac7aeaee22f75eb86e4e105d6161118aad7b41ae2dd14f4cfd3bf97472b93", - "https://deno.land/std@0.108.0/async/debounce.ts": "b2f693e4baa16b62793fd618de6c003b63228db50ecfe3bd51fc5f6dc0bc264b", - "https://deno.land/std@0.108.0/async/deferred.ts": "ab60d46ba561abb3b13c0c8085d05797a384b9f182935f051dc67136817acdee", - "https://deno.land/std@0.108.0/async/delay.ts": "db68b7c22518ea9805be110cdc914017d741894d2bececf4d78607fd2f0548e7", - "https://deno.land/std@0.108.0/async/mod.ts": "78425176fabea7bd1046ce3819fd69ce40da85c83e0f174d17e8e224a91f7d10", - "https://deno.land/std@0.108.0/async/mux_async_iterator.ts": "62abff3af9ff619e8f2adc96fc70d4ca020fa48a50c23c13f12d02ed2b760dbe", - "https://deno.land/std@0.108.0/async/pool.ts": "353ce4f91865da203a097aa6f33de8966340c91b6f4a055611c8c5d534afd12f", - "https://deno.land/std@0.108.0/async/tee.ts": "63811ea47268825db2b15e973dc5c37bab37b749ffa00d2b7bbb6c6f568412cb", - "https://deno.land/std@0.108.0/bytes/bytes_list.ts": "3bff6a09c72b2e0b1e92e29bd3b135053894196cca07a2bba842901073efe5cb", - "https://deno.land/std@0.108.0/bytes/mod.ts": "440684e07e8f57a19a43b34d57eb63af0b36fc92b6657b6dcdbf9d5612d62e29", - "https://deno.land/std@0.108.0/fmt/colors.ts": "8368ddf2d48dfe413ffd04cdbb7ae6a1009cf0dccc9c7ff1d76259d9c61a0621", - "https://deno.land/std@0.108.0/fs/_util.ts": "f2ce811350236ea8c28450ed822a5f42a0892316515b1cd61321dec13569c56b", - "https://deno.land/std@0.108.0/fs/ensure_dir.ts": "b7c103dc41a3d1dbbb522bf183c519c37065fdc234831a4a0f7d671b1ed5fea7", - "https://deno.land/std@0.108.0/fs/ensure_file.ts": "c06031af24368e80c330897e4b8e9109efc8602ffabc8f3e2306be07529e1d13", - "https://deno.land/std@0.108.0/io/buffer.ts": "3ead6bb11276ebcf093c403f74f67fd2205a515dbbb9061862c468ca56f37cd8", - "https://deno.land/std@0.108.0/io/bufio.ts": "988237679157f1331a1e81afeac42f8364ab8dc583380d67db7e4cbad3e22e81", - "https://deno.land/std@0.108.0/io/readers.ts": "17403919724fef2f343c88555606368868a5c752a1099ad801f6a381c170f62d", - "https://deno.land/std@0.108.0/io/util.ts": "85c33d61b20fd706acc094fe80d4c8ae618b04abcf3a96ca2b47071842c1c8ac", - "https://deno.land/std@0.108.0/node/_errors.ts": "74d1e7c7aad0f4a04df20be1f25f8a0a1d39483a75daabefa2cb285b0090e6e5", - "https://deno.land/std@0.108.0/node/_util/_util_callbackify.ts": "f2ac50a47572dde37612a52c7b337afeefb6faafdb849184487e06436334a5ab", - "https://deno.land/std@0.108.0/node/_util/_util_promisify.ts": "2ad6efe685f73443d5ed6ae009999789a8de4a0f01e6d2afdf242b4515477ee2", - "https://deno.land/std@0.108.0/node/_util/_util_types.ts": "ae3d21e07c975f06590ab80bbde8173670d70ff40546267c0c1df869fc2ff00c", - "https://deno.land/std@0.108.0/node/_utils.ts": "c32d3491e380488728d65ad471698ed0aadff7fe35bde0a26ba4dd8f434ed0e7", - "https://deno.land/std@0.108.0/node/events.ts": "d99b2b5fdce543b537ff5f2204067fe545c556f7d391063c6187bcdcf8145513", - "https://deno.land/std@0.108.0/node/util.ts": "23878bd3ee67a52e67cfe5acb78c7ccce9c54735c6d280b069577605e8679935", - "https://deno.land/std@0.108.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853", - "https://deno.land/std@0.108.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4", - "https://deno.land/std@0.108.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b", - "https://deno.land/std@0.108.0/path/common.ts": "f41a38a0719a1e85aa11c6ba3bea5e37c15dd009d705bd8873f94c833568cbc4", - "https://deno.land/std@0.108.0/path/glob.ts": "46708a3249cb5dc4a116cae3055114d6339bd5f0c1f412db6a4e0cb44c828a7d", - "https://deno.land/std@0.108.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12", - "https://deno.land/std@0.108.0/path/posix.ts": "34349174b9cd121625a2810837a82dd8b986bbaaad5ade690d1de75bbb4555b2", - "https://deno.land/std@0.108.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c", - "https://deno.land/std@0.108.0/path/win32.ts": "2edb2f71f10578ee1168de01a8cbd3c65483e45a46bc2fa3156a0c6bfbd2720d", - "https://deno.land/std@0.108.0/testing/_diff.ts": "ccd6c3af6e44c74bf1591acb1361995f5f50df64323a6e7fb3f16c8ea792c940", - "https://deno.land/std@0.108.0/testing/asserts.ts": "6b0d6ba564bdff807bd0f0e93e02c48aa3177acf19416bf84a7f420191ef74cd", "https://deno.land/std@0.129.0/async/abortable.ts": "a896ac6b0d4237bd2d2d248217cfa1f0d85ccda93cb25ebda55e33850e526be6", "https://deno.land/std@0.129.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0", "https://deno.land/std@0.129.0/async/debounce.ts": "564273ef242bcfcda19a439132f940db8694173abffc159ea34f07d18fc42620", @@ -71,317 +26,18 @@ "https://deno.land/std@0.129.0/http/server.ts": "10c3a7814666cdbabd6f9c18acdcc4593e222275a628280a4868881445fbb5bc", "https://deno.land/std@0.129.0/testing/_diff.ts": "9d849cd6877694152e01775b2d93f9d6b7aef7e24bfe3bfafc4d7a1ac8e9f392", "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", - "https://deno.land/std@0.140.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74", - "https://deno.land/std@0.140.0/_util/os.ts": "3b4c6e27febd119d36a416d7a97bd3b0251b77c88942c8f16ee5953ea13e2e49", - "https://deno.land/std@0.140.0/path/_constants.ts": "df1db3ffa6dd6d1252cc9617e5d72165cd2483df90e93833e13580687b6083c3", - "https://deno.land/std@0.140.0/path/_interface.ts": "ee3b431a336b80cf445441109d089b70d87d5e248f4f90ff906820889ecf8d09", - "https://deno.land/std@0.140.0/path/_util.ts": "c1e9686d0164e29f7d880b2158971d805b6e0efc3110d0b3e24e4b8af2190d2b", - "https://deno.land/std@0.140.0/path/common.ts": "bee563630abd2d97f99d83c96c2fa0cca7cee103e8cb4e7699ec4d5db7bd2633", - "https://deno.land/std@0.140.0/path/glob.ts": "cb5255638de1048973c3e69e420c77dc04f75755524cb3b2e160fe9277d939ee", - "https://deno.land/std@0.140.0/path/mod.ts": "d3e68d0abb393fb0bf94a6d07c46ec31dc755b544b13144dee931d8d5f06a52d", - "https://deno.land/std@0.140.0/path/posix.ts": "293cdaec3ecccec0a9cc2b534302dfe308adb6f10861fa183275d6695faace44", - "https://deno.land/std@0.140.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", - "https://deno.land/std@0.140.0/path/win32.ts": "31811536855e19ba37a999cd8d1b62078235548d67902ece4aa6b814596dd757", - "https://deno.land/std@0.160.0/hash/sha1.ts": "5dc389f8180210d0c23cd31e9a8acf23a80ec755bf660f655bed52608571cea1", - "https://deno.land/std@0.172.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", - "https://deno.land/std@0.172.0/bytes/bytes_list.ts": "b4cbdfd2c263a13e8a904b12d082f6177ea97d9297274a4be134e989450dfa6a", - "https://deno.land/std@0.172.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2", - "https://deno.land/std@0.172.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", - "https://deno.land/std@0.172.0/io/buf_reader.ts": "90a7adcb3638d8e1361695cdf844d58bcd97c41711dc6f9f8acc0626ebe097f5", - "https://deno.land/std@0.172.0/io/buf_writer.ts": "759c69d304b04d2909976f2a03a24a107276fbd81ed13593c5c2d43d104b52f3", - "https://deno.land/std@0.172.0/io/buffer.ts": "24abd4a65403ca3fdffcb6d3f985b0285adfd785f1311ce681708a21126776ad", - "https://deno.land/std@0.172.0/io/read_delim.ts": "7e102c66f00a118fa1e1ccd4abb080496f43766686907fd8b9522fdf85443586", - "https://deno.land/std@0.172.0/io/read_lines.ts": "baee9e35034f2fdfccf63bc24b7e3cb45aa1c1c5de26d178f7bcbc572e87772f", - "https://deno.land/std@0.172.0/io/read_string_delim.ts": "46eb0c9db3547caf8c759631effa200bbe48924f9b34f41edc627bde36cee52d", - "https://deno.land/std@0.172.0/streams/_common.ts": "f45cba84f0d813de3326466095539602364a9ba521f804cc758f7a475cda692d", - "https://deno.land/std@0.172.0/streams/conversion.ts": "ab01a03e772e29d50fbff3d09f2b04e89eb3db8e7a282e01a9353f29fbb36486", - "https://deno.land/std@0.172.0/streams/copy.ts": "de0de21701d8cceba84ca01d9731c77f4b3597bb9de6a1b08f32250353feeae8", - "https://deno.land/std@0.172.0/streams/iterate_reader.ts": "4ae7556e6769fb03b23361de58d27d46f8cba2c16a59e9f285d34f2a3c7744d8", - "https://deno.land/std@0.172.0/streams/read_all.ts": "bfa220b0e1d06fa4d0cb5178baba8f8b466019a7411511982bfa2320ca292815", - "https://deno.land/std@0.172.0/streams/readable_stream_from_iterable.ts": "cae337ddafd2abc5e3df699ef2af888ac04091f12732ae658448fba2c7b187e8", - "https://deno.land/std@0.172.0/streams/readable_stream_from_reader.ts": "9aceaeefa9e04b08f56b2d07272baedc3b6432840b66198d72fa2ada3e6608ea", - "https://deno.land/std@0.172.0/streams/reader_from_iterable.ts": "05f7759b9336fd4c233d9daadf92aec9a7d2c07a05986da466a935cec2dd79d9", - "https://deno.land/std@0.172.0/streams/reader_from_stream_reader.ts": "3fda9390ec8520c8a9ea2aba2579208b18880a7663d7a9feec8f193b7af14e41", - "https://deno.land/std@0.172.0/streams/to_transform_stream.ts": "31c8cce967a2f602be5f164973a5c6cedd4c76e1d2fbc22ae0081b084f73fb0e", - "https://deno.land/std@0.172.0/streams/writable_stream_from_writer.ts": "0320b759aa343f9f4f58b014fe301d9a7abcbfb8413d260502a885995e6a0776", - "https://deno.land/std@0.172.0/streams/write_all.ts": "3b2e1ce44913f966348ce353d02fa5369e94115181037cd8b602510853ec3033", - "https://deno.land/std@0.172.0/streams/writer_from_stream_writer.ts": "31126a6bf2e678c5a718011d4831dbe75dbdbd885965d3dbd5dd105e6f20f976", - "https://deno.land/std@0.177.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", - "https://deno.land/std@0.177.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", - "https://deno.land/std@0.177.0/async/abortable.ts": "73acfb3ed7261ce0d930dbe89e43db8d34e017b063cf0eaa7d215477bf53442e", - "https://deno.land/std@0.177.0/async/deadline.ts": "c5facb0b404eede83e38bd2717ea8ab34faa2ffb20ef87fd261fcba32ba307aa", - "https://deno.land/std@0.177.0/async/debounce.ts": "adab11d04ca38d699444ac8a9d9856b4155e8dda2afd07ce78276c01ea5a4332", - "https://deno.land/std@0.177.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", - "https://deno.land/std@0.177.0/async/delay.ts": "73aa04cec034c84fc748c7be49bb15cac3dd43a57174bfdb7a4aec22c248f0dd", - "https://deno.land/std@0.177.0/async/mod.ts": "f04344fa21738e5ad6bea37a6bfffd57c617c2d372bb9f9dcfd118a1b622e576", - "https://deno.land/std@0.177.0/async/mux_async_iterator.ts": "70c7f2ee4e9466161350473ad61cac0b9f115cff4c552eaa7ef9d50c4cbb4cc9", - "https://deno.land/std@0.177.0/async/pool.ts": "fd082bd4aaf26445909889435a5c74334c017847842ec035739b4ae637ae8260", - "https://deno.land/std@0.177.0/async/retry.ts": "5efa3ba450ac0c07a40a82e2df296287b5013755d232049efd7ea2244f15b20f", - "https://deno.land/std@0.177.0/async/tee.ts": "47e42d35f622650b02234d43803d0383a89eb4387e1b83b5a40106d18ae36757", - "https://deno.land/std@0.177.0/bytes/index_of_needle.ts": "65c939607df609374c4415598fa4dad04a2f14c4d98cd15775216f0aaf597f24", - "https://deno.land/std@0.177.0/crypto/timing_safe_equal.ts": "8d69ab611c67fe51b6127d97fcfb4d8e7d0e1b6b4f3e0cc4ab86744c3691f965", - "https://deno.land/std@0.177.0/encoding/base64.ts": "7de04c2f8aeeb41453b09b186480be90f2ff357613b988e99fabb91d2eeceba1", - "https://deno.land/std@0.177.0/encoding/base64url.ts": "3f1178f6446834457b16bfde8b559c1cd3481727fe384d3385e4a9995dc2d851", - "https://deno.land/std@0.177.0/flags/mod.ts": "d1cdefa18472ef69858a17df5cf7c98445ed27ac10e1460183081303b0ebc270", - "https://deno.land/std@0.177.0/node/_core.ts": "9a58c0ef98ee77e9b8fcc405511d1b37a003a705eb6a9b6e95f75434d8009adc", - "https://deno.land/std@0.177.0/node/_events.mjs": "d4ba4e629abe3db9f1b14659fd5c282b7da8b2b95eaf13238eee4ebb142a2448", - "https://deno.land/std@0.177.0/node/_next_tick.ts": "9a3cf107d59b019a355d3cf32275b4c6157282e4b68ea85b46a799cb1d379305", - "https://deno.land/std@0.177.0/node/_process/exiting.ts": "6e336180aaabd1192bf99ffeb0d14b689116a3dec1dfb34a2afbacd6766e98ab", - "https://deno.land/std@0.177.0/node/_process/process.ts": "c96bb1f6253824c372f4866ee006dcefda02b7050d46759736e403f862d91051", - "https://deno.land/std@0.177.0/node/_process/stdio.mjs": "cf17727eac8da3a665851df700b5aca6a12bacc3ebbf33e63e4b919f80ba44a6", - "https://deno.land/std@0.177.0/node/_process/streams.mjs": "408777fba99580567f3ee82ee584ca79012cc550f8dacb8c5ec633b58cd0c1ca", - "https://deno.land/std@0.177.0/node/_stream.mjs": "d6e2c86c1158ac65b4c2ca4fa019d7e84374ff12e21e2175345fe68c0823efe3", - "https://deno.land/std@0.177.0/node/_utils.ts": "7fd55872a0cf9275e3c080a60e2fa6d45b8de9e956ebcde9053e72a344185884", - "https://deno.land/std@0.177.0/node/buffer.ts": "85617be2063eccaf177dbb84c7580d1e32023724ed14bd9df4e453b152a26167", - "https://deno.land/std@0.177.0/node/events.ts": "d2de352d509de11a375e2cb397d6b98f5fed4e562fc1d41be33214903a38e6b0", - "https://deno.land/std@0.177.0/node/internal/buffer.mjs": "e92303a3cc6d9aaabcd270a937ad9319825d9ba08cb332650944df4562029b27", - "https://deno.land/std@0.177.0/node/internal/crypto/_keys.ts": "8f3c3b5a141aa0331a53c205e9338655f1b3b307a08085fd6ff6dda6f7c4190b", - "https://deno.land/std@0.177.0/node/internal/crypto/constants.ts": "544d605703053218499b08214f2e25cf4310651d535b7ab995891c4b7a217693", - "https://deno.land/std@0.177.0/node/internal/error_codes.ts": "8495e33f448a484518d76fa3d41d34fc20fe03c14b30130ad8e936b0035d4b8b", - "https://deno.land/std@0.177.0/node/internal/errors.ts": "1c699b8a3cb93174f697a348c004b1c6d576b66688eac8a48ebb78e65c720aae", - "https://deno.land/std@0.177.0/node/internal/fixed_queue.ts": "62bb119afa5b5ae8fc0c7048b50502347bec82e2588017d0b250c4671d6eff8f", - "https://deno.land/std@0.177.0/node/internal/hide_stack_frames.ts": "9dd1bad0a6e62a1042ce3a51eb1b1ecee2f246907bff44835f86e8f021de679a", - "https://deno.land/std@0.177.0/node/internal/net.ts": "5538d31b595ac63d4b3e90393168bc65ace2f332c3317cffa2fd780070b2d86c", - "https://deno.land/std@0.177.0/node/internal/normalize_encoding.mjs": "fd1d9df61c44d7196432f6e8244621468715131d18cc79cd299fc78ac549f707", - "https://deno.land/std@0.177.0/node/internal/options.ts": "888f267c3fe8f18dc7b2f2fbdbe7e4a0fd3302ff3e99f5d6645601e924f3e3fb", - "https://deno.land/std@0.177.0/node/internal/primordials.mjs": "a72d86b5aa55d3d50b8e916b6a59b7cc0dc5a31da8937114b4a113ad5aa08c74", - "https://deno.land/std@0.177.0/node/internal/process/per_thread.mjs": "10142bbb13978c2f8f79778ad90f3a67a8ea6d8d2970f3dfc6bf2c6fff0162a2", - "https://deno.land/std@0.177.0/node/internal/querystring.ts": "479f30c136555dc3b6f09af7d0de8a70c753035c1d5b57acc696722028788323", - "https://deno.land/std@0.177.0/node/internal/readline/callbacks.mjs": "bdb129b140c3b21b5e08cdc3d8e43517ad818ac03f75197338d665cca1cbaed3", - "https://deno.land/std@0.177.0/node/internal/readline/utils.mjs": "c3dbf3a97c01ed14052cca3848f09e2fc24818c1822ceed57c33b9f0840f3b87", - "https://deno.land/std@0.177.0/node/internal/streams/destroy.mjs": "b665fc71178919a34ddeac8389d162a81b4bc693ff7dc2557fa41b3a91011967", - "https://deno.land/std@0.177.0/node/internal/streams/end-of-stream.mjs": "a4fb1c2e32d58dff440d4e716e2c4daaa403b3095304a028bb428575cfeed716", - "https://deno.land/std@0.177.0/node/internal/streams/utils.mjs": "f2fe2e6bdc506da24c758970890cc2a21642045b129dee618bd3827c60dd9e33", - "https://deno.land/std@0.177.0/node/internal/timers.mjs": "f174a7a5c24c22460672b30e696d134bb1a37eed40ffc4d24c567c3f5624478b", - "https://deno.land/std@0.177.0/node/internal/util.mjs": "f7fe2e1ca5e66f550ad0856b9f5ee4d666f0c071fe212ea7fc7f37cfa81f97a5", - "https://deno.land/std@0.177.0/node/internal/util/inspect.mjs": "11d7c9cab514b8e485acc3978c74b837263ff9c08ae4537fa18ad56bae633259", - "https://deno.land/std@0.177.0/node/internal/util/types.ts": "0e587b44ec5e017cf228589fc5ce9983b75beece6c39409c34170cfad49d6417", - "https://deno.land/std@0.177.0/node/internal/validators.mjs": "e02f2b02dd072a5d623970292588d541204dc82207b4c58985d933a5f4b382e6", - "https://deno.land/std@0.177.0/node/internal_binding/_libuv_winerror.ts": "30c9569603d4b97a1f1a034d88a3f74800d5ea1f12fcc3d225c9899d4e1a518b", - "https://deno.land/std@0.177.0/node/internal_binding/_listen.ts": "c6038be47116f7755c01fd98340a0d1e8e66ef874710ab59ed3f5607d50d7a25", - "https://deno.land/std@0.177.0/node/internal_binding/_node.ts": "cb2389b0eab121df99853eb6a5e3a684e4537e065fb8bf2cca0cbf219ce4e32e", - "https://deno.land/std@0.177.0/node/internal_binding/_timingSafeEqual.ts": "7d9732464d3c669ff07713868ce5d25bc974a06112edbfb5f017fc3c70c0853e", - "https://deno.land/std@0.177.0/node/internal_binding/_utils.ts": "7c58a2fbb031a204dee9583ba211cf9c67922112fe77e7f0b3226112469e9fe1", - "https://deno.land/std@0.177.0/node/internal_binding/_winerror.ts": "3e8cfdfe22e89f13d2b28529bab35155e6b1730c0221ec5a6fc7077dc037be13", - "https://deno.land/std@0.177.0/node/internal_binding/ares.ts": "bdd34c679265a6c115a8cfdde000656837a0a0dcdb0e4c258e622e136e9c31b8", - "https://deno.land/std@0.177.0/node/internal_binding/async_wrap.ts": "0dc5ae64eea2c9e57ab17887ef1573922245167ffe38e3685c28d636f487f1b7", - "https://deno.land/std@0.177.0/node/internal_binding/buffer.ts": "31729e0537921d6c730ad0afea44a7e8a0a1044d070ade8368226cb6f7390c8b", - "https://deno.land/std@0.177.0/node/internal_binding/cares_wrap.ts": "9b7247772167f8ed56acd0244a232d9d50e8d7c9cfc379f77f3d54cecc2f32ab", - "https://deno.land/std@0.177.0/node/internal_binding/config.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/connection_wrap.ts": "7dd089ea46de38e4992d0f43a09b586e4cf04878fb06863c1cb8cb2ece7da521", - "https://deno.land/std@0.177.0/node/internal_binding/constants.ts": "21ff9d1ee71d0a2086541083a7711842fc6ae25e264dbf45c73815aadce06f4c", - "https://deno.land/std@0.177.0/node/internal_binding/contextify.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/credentials.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/crypto.ts": "29e8f94f283a2e7d4229d3551369c6a40c2af9737fad948cb9be56bef6c468cd", - "https://deno.land/std@0.177.0/node/internal_binding/errors.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/fs.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/fs_dir.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/fs_event_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/handle_wrap.ts": "adf0b8063da2c54f26edd5e8ec50296a4d38e42716a70a229f14654b17a071d9", - "https://deno.land/std@0.177.0/node/internal_binding/heap_utils.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/http_parser.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/icu.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/inspector.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/js_stream.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/messaging.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/mod.ts": "9fc65f7af1d35e2d3557539a558ea9ad7a9954eefafe614ad82d94bddfe25845", - "https://deno.land/std@0.177.0/node/internal_binding/module_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/native_module.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/natives.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/node_file.ts": "21edbbc95653e45514aff252b6cae7bf127a4338cbc5f090557d258aa205d8a5", - "https://deno.land/std@0.177.0/node/internal_binding/node_options.ts": "0b5cb0bf4379a39278d7b7bb6bb2c2751baf428fe437abe5ed3e8441fae1f18b", - "https://deno.land/std@0.177.0/node/internal_binding/options.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/os.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/performance.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/pipe_wrap.ts": "30e3a63954313f9d5bbc2ac02c7f9be4b1204c493e47f6e1b9c7366994e6ea6d", - "https://deno.land/std@0.177.0/node/internal_binding/process_methods.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/report.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/serdes.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/signal_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/spawn_sync.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/stream_wrap.ts": "452bff74d1db280a0cd78c75a95bb6d163e849e06e9638c4af405d40296bd050", - "https://deno.land/std@0.177.0/node/internal_binding/string_decoder.ts": "54c3c1cbd5a9254881be58bf22637965dc69535483014dab60487e299cb95445", - "https://deno.land/std@0.177.0/node/internal_binding/symbols.ts": "4dee2f3a400d711fd57fa3430b8de1fdb011e08e260b81fef5b81cc06ed77129", - "https://deno.land/std@0.177.0/node/internal_binding/task_queue.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/tcp_wrap.ts": "d298d855e862fc9a5c94e13ad982fde99f6d8a56620a4772681b7226f5a15c91", - "https://deno.land/std@0.177.0/node/internal_binding/timers.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/tls_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/trace_events.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/tty_wrap.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/types.ts": "2187595a58d2cf0134f4db6cc2a12bf777f452f52b15b6c3aed73fa072aa5fc3", - "https://deno.land/std@0.177.0/node/internal_binding/udp_wrap.ts": "b77d7024aef1282b9fe6e1f6c8064ab8a7b9ecbae0bc08a36f2b30dcbb1d2752", - "https://deno.land/std@0.177.0/node/internal_binding/url.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/util.ts": "808ff3b92740284184ab824adfc420e75398c88c8bccf5111f0c24ac18c48f10", - "https://deno.land/std@0.177.0/node/internal_binding/uv.ts": "eb0048e30af4db407fb3f95563e30d70efd6187051c033713b0a5b768593a3a3", - "https://deno.land/std@0.177.0/node/internal_binding/v8.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/worker.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/internal_binding/zlib.ts": "37d293009d1718205bf28e878e54a9f1ca24c1c320cee2416c20dc054104c6ea", - "https://deno.land/std@0.177.0/node/process.ts": "6608012d6d51a17a7346f36079c574b9b9f81f1b5c35436489ad089f39757466", - "https://deno.land/std@0.177.0/node/querystring.ts": "2dce8068cb80ce2bf503aecd888be1b89827288352b6581e0fc401886d56cd86", - "https://deno.land/std@0.177.0/node/stream.ts": "09e348302af40dcc7dc58aa5e40fdff868d11d8d6b0cfb85cbb9c75b9fe450c7", - "https://deno.land/std@0.177.0/node/string_decoder.ts": "1a17e3572037c512cc5fc4b29076613e90f225474362d18da908cb7e5ccb7e88", - "https://deno.land/std@0.177.0/node/timers.ts": "36992313d4fc894b43f80a12fd35acc4614256fb910d8902d5fc969c1c47cb50", - "https://deno.land/std@0.177.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", - "https://deno.land/std@0.177.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", - "https://deno.land/std@0.177.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", - "https://deno.land/std@0.177.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", - "https://deno.land/std@0.177.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", - "https://deno.land/std@0.177.0/path/mod.ts": "4b83694ac500d7d31b0cdafc927080a53dc0c3027eb2895790fb155082b0d232", - "https://deno.land/std@0.177.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", - "https://deno.land/std@0.177.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", - "https://deno.land/std@0.177.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba", - "https://deno.land/std@0.177.0/streams/write_all.ts": "3b2e1ce44913f966348ce353d02fa5369e94115181037cd8b602510853ec3033", - "https://deno.land/std@0.183.0/_util/asserts.ts": "178dfc49a464aee693a7e285567b3d0b555dc805ff490505a8aae34f9cfb1462", - "https://deno.land/std@0.183.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", - "https://deno.land/std@0.183.0/async/abortable.ts": "fd682fa46f3b7b16b4606a5ab52a7ce309434b76f820d3221bdfb862719a15d7", - "https://deno.land/std@0.183.0/async/deadline.ts": "c5facb0b404eede83e38bd2717ea8ab34faa2ffb20ef87fd261fcba32ba307aa", - "https://deno.land/std@0.183.0/async/debounce.ts": "adab11d04ca38d699444ac8a9d9856b4155e8dda2afd07ce78276c01ea5a4332", - "https://deno.land/std@0.183.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", - "https://deno.land/std@0.183.0/async/delay.ts": "73aa04cec034c84fc748c7be49bb15cac3dd43a57174bfdb7a4aec22c248f0dd", - "https://deno.land/std@0.183.0/async/mod.ts": "f04344fa21738e5ad6bea37a6bfffd57c617c2d372bb9f9dcfd118a1b622e576", - "https://deno.land/std@0.183.0/async/mux_async_iterator.ts": "70c7f2ee4e9466161350473ad61cac0b9f115cff4c552eaa7ef9d50c4cbb4cc9", - "https://deno.land/std@0.183.0/async/pool.ts": "fd082bd4aaf26445909889435a5c74334c017847842ec035739b4ae637ae8260", - "https://deno.land/std@0.183.0/async/retry.ts": "dd19d93033d8eaddbfcb7654c0366e9d3b0a21448bdb06eba4a7d8a8cf936a92", - "https://deno.land/std@0.183.0/async/tee.ts": "47e42d35f622650b02234d43803d0383a89eb4387e1b83b5a40106d18ae36757", - "https://deno.land/std@0.183.0/datetime/to_imf.ts": "8f9c0af8b167031ffe2e03da01a12a3b0672cc7562f89c61942a0ab0129771b2", - "https://deno.land/std@0.183.0/http/cookie.ts": "934f92d871d50852dbd7a836d721df5a9527b14381db16001b40991d30174ee4", - "https://deno.land/std@0.183.0/http/http_status.ts": "8a7bcfe3ac025199ad804075385e57f63d055b2aed539d943ccc277616d6f932", - "https://deno.land/std@0.183.0/http/server.ts": "cbb17b594651215ba95c01a395700684e569c165a567e4e04bba327f41197433", - "https://deno.land/std@0.183.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", - "https://deno.land/std@0.183.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", - "https://deno.land/std@0.183.0/path/_util.ts": "d7abb1e0dea065f427b89156e28cdeb32b045870acdf865833ba808a73b576d0", - "https://deno.land/std@0.183.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", - "https://deno.land/std@0.183.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", - "https://deno.land/std@0.183.0/path/mod.ts": "bf718f19a4fdd545aee1b06409ca0805bd1b68ecf876605ce632e932fe54510c", - "https://deno.land/std@0.183.0/path/posix.ts": "8b7c67ac338714b30c816079303d0285dd24af6b284f7ad63da5b27372a2c94d", - "https://deno.land/std@0.183.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", - "https://deno.land/std@0.183.0/path/win32.ts": "d186344e5583bcbf8b18af416d13d82b35a317116e6460a5a3953508c3de5bba", - "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/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be", - "https://deno.land/std@0.93.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58", - "https://deno.land/std@0.93.0/_util/os.ts": "e282950a0eaa96760c0cf11e7463e66babd15ec9157d4c9ed49cc0925686f6a7", - "https://deno.land/std@0.93.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853", - "https://deno.land/std@0.93.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4", - "https://deno.land/std@0.93.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b", - "https://deno.land/std@0.93.0/path/common.ts": "eaf03d08b569e8a87e674e4e265e099f237472b6fd135b3cbeae5827035ea14a", - "https://deno.land/std@0.93.0/path/glob.ts": "4a524c1c9da3e79a9fdabdc6e850cd9e41bdf31e442856ffa19c5b123268ca95", - "https://deno.land/std@0.93.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12", - "https://deno.land/std@0.93.0/path/posix.ts": "f56c3c99feb47f30a40ce9d252ef6f00296fa7c0fcb6dd81211bdb3b8b99ca3b", - "https://deno.land/std@0.93.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c", - "https://deno.land/std@0.93.0/path/win32.ts": "77f7b3604e0de40f3a7c698e8a79e7f601dc187035a1c21cb1e596666ce112f8", + "https://deno.land/std@0.197.0/fmt/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", "https://deno.land/std@0.97.0/fmt/colors.ts": "db22b314a2ae9430ae7460ce005e0a7130e23ae1c999157e3bb77cf55800f7e4", "https://deno.land/std@0.97.0/testing/_diff.ts": "961eaf6d9f5b0a8556c9d835bbc6fa74f5addd7d3b02728ba7936ff93364f7a3", "https://deno.land/std@0.97.0/testing/asserts.ts": "341292d12eebc44be4c3c2ca101ba8b6b5859cef2fa69d50c217f9d0bfbcfd1f", - "https://deno.land/std@0.99.0/_util/assert.ts": "2f868145a042a11d5ad0a3c748dcf580add8a0dbc0e876eaa0026303a5488f58", - "https://deno.land/std@0.99.0/_util/os.ts": "e282950a0eaa96760c0cf11e7463e66babd15ec9157d4c9ed49cc0925686f6a7", - "https://deno.land/std@0.99.0/path/_constants.ts": "1247fee4a79b70c89f23499691ef169b41b6ccf01887a0abd131009c5581b853", - "https://deno.land/std@0.99.0/path/_interface.ts": "1fa73b02aaa24867e481a48492b44f2598cd9dfa513c7b34001437007d3642e4", - "https://deno.land/std@0.99.0/path/_util.ts": "2e06a3b9e79beaf62687196bd4b60a4c391d862cfa007a20fc3a39f778ba073b", - "https://deno.land/std@0.99.0/path/common.ts": "eaf03d08b569e8a87e674e4e265e099f237472b6fd135b3cbeae5827035ea14a", - "https://deno.land/std@0.99.0/path/glob.ts": "314ad9ff263b895795208cdd4d5e35a44618ca3c6dd155e226fb15d065008652", - "https://deno.land/std@0.99.0/path/mod.ts": "4465dc494f271b02569edbb4a18d727063b5dbd6ed84283ff906260970a15d12", - "https://deno.land/std@0.99.0/path/posix.ts": "f56c3c99feb47f30a40ce9d252ef6f00296fa7c0fcb6dd81211bdb3b8b99ca3b", - "https://deno.land/std@0.99.0/path/separator.ts": "8fdcf289b1b76fd726a508f57d3370ca029ae6976fcde5044007f062e643ff1c", - "https://deno.land/std@0.99.0/path/win32.ts": "77f7b3604e0de40f3a7c698e8a79e7f601dc187035a1c21cb1e596666ce112f8", - "https://deno.land/x/accepts@2.1.1/deps.ts": "ede05e17882d2e064ecfdfc407c95692cee7b49afe59e31d5f385ff74d262756", - "https://deno.land/x/accepts@2.1.1/mod.ts": "ae058b80ba4e560ca9bd1eb4a488f5d6aeed9437fa192bc4903764fa653032cf", - "https://deno.land/x/compress@v0.4.1/deps.ts": "b23619920334f637497a5a236e40ec259707463fdc3692fdb375b6399fc0280a", - "https://deno.land/x/compress@v0.4.1/gzip/gzip.ts": "4bf22e9cd3368332928324dd9443ef72cabd05e9234e5a37dd7b3517d50e945e", - "https://deno.land/x/compress@v0.4.1/gzip/gzip_file.ts": "b044ec0df4266c084baa033a4ab5394882e44a86d09d5616636467dcb39c671d", - "https://deno.land/x/compress@v0.4.1/gzip/gzip_stream.ts": "6781cf0e47648e3e5631cba4cc2cd018a24935ce09fdaa86e0cabcf78b5012df", - "https://deno.land/x/compress@v0.4.1/gzip/mod.ts": "4ade8edbe01b54a84f289351e137ebdfc040a74cd616636770cf1724fbf522d1", - "https://deno.land/x/compress@v0.4.1/gzip/writer_gunzip.ts": "5aba34394820b835c414048ac2e15f52d443f1f773ebe61fd2517c938572d616", - "https://deno.land/x/compress@v0.4.1/gzip/writer_gzip.ts": "c7aad0c51ab4f5952c068088186339cfc79a2ee1e057d6e16731b1175f342645", - "https://deno.land/x/compress@v0.4.1/mod.ts": "ae8b15826334021583a5bd1978c63840f85156ea3635f5941bfc6733aad247e5", - "https://deno.land/x/compress@v0.4.1/tar/mod.ts": "0f228fb67ef5e908dafbefd3e81890f6ca7b3dc6dd3245f88c5d22fde1ce7e2e", - "https://deno.land/x/compress@v0.4.1/tgz/mod.ts": "397620ab5228b8df53a44f2ba1228bcac61e5ded44cbd89b7d4a3e2220583fae", - "https://deno.land/x/compress@v0.4.1/utils/uint8.ts": "9c82e09c065f1f4bc648e3b14df441b43a7960fc7bdb29e9fb8d3a69c7e9d425", - "https://deno.land/x/compress@v0.4.1/zlib/deflate.ts": "e1e3b406dcc3e20021e53cde427b4b9ced752b72df820de73fec17c6e5ba999e", - "https://deno.land/x/compress@v0.4.1/zlib/inflate.ts": "618cc3dd25d202bf6b89d92f3ab2865e7495884cafce950638c77cbc1537aeb1", - "https://deno.land/x/compress@v0.4.1/zlib/mod.ts": "4dca9c1e934b7ab27f31c318abd7bfd39b09be96fd76ba27bd46f3a4e73b4ad0", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/adler32.ts": "e34c7596d63a655755c4b0a44a40d4f9c1d1c4d3b891e5c1f3f840f8939e1940", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/crc32.ts": "b9bc4adaf327d32585205d1176bd52f6453c06dd1040544611d4c869e638119c", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/deflate.ts": "8d1dd88630279313e50deed4fe5feefe8128307cc48fa560e659b5234ab09d83", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/gzheader.ts": "11e6da7383447aae9791308dc2350a809fa341a876a2da396b03a2a31408c20c", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/inffast.ts": "282daf5ea16bb876d26e342f3c24fe1a8ec84640e713a970b02232955a853f86", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/inflate.ts": "76751c1a5b18d70a929fa31ce4959db0bde1b9097bfa1b5ea3b4d1fba2ab92fa", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/inftrees.ts": "8a6d765a5c42bf3b6990060cabbe52e88493f8ce6d082e6e35d97756914cfb8e", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/messages.ts": "c82229bd67ccc3b6162f3aca1c5e7f936e546aa91ac9a9ac4fcfefc3a9dc5ac8", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/status.ts": "5987864d2d43d59bbbfa2e6ef4d5a07284c1d10489cc5843ddf41ac547957ac3", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/trees.ts": "6b65a767646e031e87e7b725ffad0c511fe701f393a01652e1e7ee8884f60fee", - "https://deno.land/x/compress@v0.4.1/zlib/zlib/zstream.ts": "c110fd5919235e317d64933852e24a1bba0126202be592e90e58f7b19315ad93", - "https://deno.land/x/content_type@1.0.1/mod.ts": "5dc435e84b665c2968d6845c573569ddeef65a41baa9a04c51e1c5e927806583", - "https://deno.land/x/crc32@v0.2.0/mod.ts": "de7a3fa2d4ef24b96fc21e1cc4d2d65d1d2b1dcea92f63960e3e11bfa82df0fa", - "https://deno.land/x/encodeurl@1.0.0/mod.ts": "b797af240fd3c4b3876b3f32b8c2404601e5503c4a10afa719e54815056685d8", - "https://deno.land/x/escape_html@1.0.0/mod.ts": "fd6671533b7f8bbf267047e3d1a20786837b3285c31552fa5f82f1e34f6e37c3", - "https://deno.land/x/expect@v0.2.9/expect.ts": "128c60f94ff3f977e2a649463238e403f9bdb8e6ab77e65214c0236bd61b0111", - "https://deno.land/x/expect@v0.2.9/matchers.ts": "ba7360b73c5031a22449fa98eb4d5dbe7f256a88dd4c22ccae96dc6c01f0b19c", - "https://deno.land/x/expect@v0.2.9/mock.ts": "562d4b1d735d15b0b8e935f342679096b64fe452f86e96714fe8616c0c884914", - "https://deno.land/x/expect@v0.2.9/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", - "https://deno.land/x/graphql_tag@0.1.2/deps.ts": "5696461c8bb42db7c83486db452e125f7cfdc62a2c628bb470a4447d934b90b3", - "https://deno.land/x/graphql_tag@0.1.2/mod.ts": "57fd56de5f7cbc66e23ce896cc8e99521d286e89969d83e09d960642b0a9d652", - "https://deno.land/x/isIP@1.0.0/mod.ts": "bd55c2180f7275930d9b1ef0b8f031108625ae3f9b87a1fa75cc8ee15d485ff8", - "https://deno.land/x/media_typer@1.0.1/mod.ts": "01aebf79f0ecf43897a663dca9730d2dbd2a698eac9d297a6ac26b4b647bb7cc", - "https://deno.land/x/media_types@v2.8.1/db.ts": "22db9bd6eb24934105098e9fce27d2746ef3861cd2668edef749c83c60acd60b", - "https://deno.land/x/media_types@v2.8.1/deps.ts": "971505827c247d612cb8ad3b2e658d2a2383a3540b8bd4482d94b101368d1a2f", - "https://deno.land/x/media_types@v2.8.1/mod.ts": "d63583b978d32eff8b76e1ae5d83cba2fb27baa90cc1bcb0ad15a06122ea8c19", - "https://deno.land/x/media_types@v2.9.1/db.ts": "ba39cddbcefce47d577c0529066787a3a7b39d27750a6d32b5ad53ed487e7b7b", - "https://deno.land/x/media_types@v2.9.1/deps.ts": "364b24c35845cfd5c6903ab22b8ba9873bf1022bbbf6bf3d001695332d4bbb4f", - "https://deno.land/x/media_types@v2.9.1/mod.ts": "d63583b978d32eff8b76e1ae5d83cba2fb27baa90cc1bcb0ad15a06122ea8c19", - "https://deno.land/x/media_types@v3.0.3/mod.ts": "c12ebcac562696c5679fc8d4f16531ec16349c2e7e9211108b27f0baa534eb62", - "https://deno.land/x/negotiator@1.0.1/mod.ts": "d8b28a0a7b2d75c944cebef8f87a58eeb344974d432fe0dea85e2d98e03daf24", - "https://deno.land/x/negotiator@1.0.1/src/charset.ts": "ca9e78c774c59fed90e31eed9901b6ac78348cbba1adbba71364abdf56dce7e0", - "https://deno.land/x/negotiator@1.0.1/src/encoding.ts": "bd3e980c10de08798192cd56f1913e0c9f9be2b56391d7b4213f448cc94a0140", - "https://deno.land/x/negotiator@1.0.1/src/language.ts": "bd822581a7621bbe8c3157d38b4f1ec5a35d75eb58bf6be927d477d929e689a2", - "https://deno.land/x/negotiator@1.0.1/src/media_type.ts": "bde7a0f6a276fdb3b72569832ca6050ce5bcacad9d493029239af768bd06149f", + "https://deno.land/x/expect@v0.4.0/expect.ts": "1d1856758a750f440d0b65d74f19e5d4829bb76d8e576d05546abd8e7b1dfb9e", + "https://deno.land/x/expect@v0.4.0/matchers.ts": "55acf74a3c4a308d079798930f05ab11da2080ec7acd53517193ca90d1296bf7", + "https://deno.land/x/expect@v0.4.0/mock.ts": "562d4b1d735d15b0b8e935f342679096b64fe452f86e96714fe8616c0c884914", + "https://deno.land/x/expect@v0.4.0/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", "https://deno.land/x/opine@2.1.2/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", "https://deno.land/x/opine@2.1.2/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", - "https://deno.land/x/opine@2.3.4/deps.ts": "c0ff0a9aee37c3395dbdb9f2e346488e342f3056ea9b8c41206a2d50696193d7", - "https://deno.land/x/opine@2.3.4/mod.ts": "4a86c9efd9f0f556578b396fee87657be7f705da057442ed46722cd6c4ac7180", - "https://deno.land/x/opine@2.3.4/src/application.ts": "4f3ef3f0cecaff8ce70e9aff2f53914da84dbe7c0a0603181f422214c4117172", - "https://deno.land/x/opine@2.3.4/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/getCharset.ts": "5a0ac69973fb6909ccda52347d028fe8b86639866eb459f7e2ff05a9d8a2664f", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/json.ts": "5af12f4bd1ad864895364e620347de6e937d10c0ec4aa982c1b1055cebc506f9", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/raw.ts": "379b852627177e091ab6530ccca6955cdb43704b41b0c608c2231a8b9f793c3e", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/read.ts": "e939fff6e9926603ab6ebed84b0a95ad6a0893af20608345bd183839a3739050", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/text.ts": "f330eb0a55fe92696677c95ced30da42ccea684f1e9fc43881648a2b294b10cc", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/typeChecker.ts": "62377001d24d0e5f88e66b41ae2dba407e3b4a88e6f6529bd6d2c9e03d561585", - "https://deno.land/x/opine@2.3.4/src/middleware/bodyParser/urlencoded.ts": "9fa24bf9ab08353c3b09792474af845d833162219f082c999a62815d838f2354", - "https://deno.land/x/opine@2.3.4/src/middleware/init.ts": "7242c0743ddc3242a6e0a44b7575e7f5744e88576b0ac3d9a9aad20e54b2e62f", - "https://deno.land/x/opine@2.3.4/src/middleware/query.ts": "0a6d1597b503c871d7bf261b7cdb97897c1555d4cd8a4d4366007ff535f1ea8b", - "https://deno.land/x/opine@2.3.4/src/middleware/serveStatic.ts": "fb8568c46bc0a9ceafb5f93ff3aa5e5a19bf1e5e7f013cef7487d5df8c0ba4c7", - "https://deno.land/x/opine@2.3.4/src/opine.ts": "ece65e9441ec6b2d20a9a60d2316bdd855bb591602d4c710dde0caa7c0866ea6", - "https://deno.land/x/opine@2.3.4/src/request.ts": "99aecdbe2176ccba46c8269a50884851fa23c5e14d3109492bd60e4d66920039", - "https://deno.land/x/opine@2.3.4/src/response.ts": "82d63ea27e7cdd3dc1672e9b4a090e1536fc0a64853ca974ae6b2a6d0865e12d", - "https://deno.land/x/opine@2.3.4/src/router/index.ts": "cdb11e3f07a948372172fd21ba28fc2aad491e3c09b27587287bd3a91beb16fc", - "https://deno.land/x/opine@2.3.4/src/router/layer.ts": "bd9f29aff6ffe7e0f972c82b871dff8b0be81d3edc9b40717dca5dae9eca88a6", - "https://deno.land/x/opine@2.3.4/src/router/route.ts": "4d7b0932279f18f7b3e89c57e7332d425c20b36eac8b6b0dbacfa9a67dceae7e", - "https://deno.land/x/opine@2.3.4/src/types.ts": "e2d6b6e8c5df4e90c12a2d083d6e81115379ca64fe1d181961575b07a1af80c1", - "https://deno.land/x/opine@2.3.4/src/utils/compileETag.ts": "32edd6a8158a65389b99e6b24bba6c3933b509f21687f2ef39a838212cfb153d", - "https://deno.land/x/opine@2.3.4/src/utils/compileQueryParser.ts": "cdd85227c9bea6384047d3b0c4796381a2966f4737d289c548bd377596f5f0d1", - "https://deno.land/x/opine@2.3.4/src/utils/compileTrust.ts": "61213a22ae9afe12364a3a0442a5e2b1be1fd7053eeab91e7e5d46223916bf4e", - "https://deno.land/x/opine@2.3.4/src/utils/contentDisposition.ts": "1ccc8230b27eef2357afd5993d63df4eaee7a9ea8b066f04190074fcd52f982e", - "https://deno.land/x/opine@2.3.4/src/utils/cookies.ts": "241d5ae610d8a21748b8dfa5b2b94771b43906f8f4a1a2281d1f4698ce6c0a9f", - "https://deno.land/x/opine@2.3.4/src/utils/createError.ts": "355e08824a878da57564f8a4751b90b97d7189833f0c3a75cf1422e4506af548", - "https://deno.land/x/opine@2.3.4/src/utils/etag.ts": "4e9786ad27842ffb37f4bd114e7fdf3bee332c55b43085fcd82fe4f1b9d3be2c", - "https://deno.land/x/opine@2.3.4/src/utils/finalHandler.ts": "37b5a86df347e1bb2e9ca878d8d1110aec1ca2854b94c59559a1423a39ef09b9", - "https://deno.land/x/opine@2.3.4/src/utils/forwarded.ts": "29477915915abcd1d1ccd5520ec1bf0d8bfa4e7723bb0aa4155b99b7d6c4c497", - "https://deno.land/x/opine@2.3.4/src/utils/fresh.ts": "943e81198a6a03716a510c6779e59bff4a7b988f0c71ab443f74ccdb3cd59b1c", - "https://deno.land/x/opine@2.3.4/src/utils/merge.ts": "c9cb64fff1d2691d74fd37a3649a74c87a7f6431dc5ea982f3ec49dd90372388", - "https://deno.land/x/opine@2.3.4/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", - "https://deno.land/x/opine@2.3.4/src/utils/normalizeType.ts": "16d6375e16de85a04ae9c661e51375542b389a6fe8f64669601828ad83d5af2e", - "https://deno.land/x/opine@2.3.4/src/utils/parseUrl.ts": "1cefbc2729abc71dd07dd85aadfd04cf4d91fd355a510581bc89a6070f0b2879", - "https://deno.land/x/opine@2.3.4/src/utils/pathToRegex.ts": "fcd9a2d03dd70a08a024743175cbaa6e20f99d51160c55012e66e348bfe88637", - "https://deno.land/x/opine@2.3.4/src/utils/proxyAddr.ts": "aae687e4649f43dc1b3cf4334af5ce232769811cde0db07fe09cebc7e499b549", - "https://deno.land/x/opine@2.3.4/src/utils/send.ts": "f735a2c44b0d1a108f88433a12033f02d16baaa4bfd13f676c5fde87d667f81f", - "https://deno.land/x/opine@2.3.4/src/utils/stringify.ts": "4a935cd6c5a7d3a9fe1a786a71d2ec92c55120c8c551a3ef642a808ee5209b4c", - "https://deno.land/x/opine@2.3.4/src/view.ts": "9a11f6f65cf86c5f9d716f2b7e5bbba8c968e469eb0850e92127f7ffc613fa63", - "https://deno.land/x/opine@2.3.4/version.ts": "821999933bb2fa0390661350a7baa03e3e8d87fac0a36e70146dff2ffb1cc29c", "https://deno.land/x/superdeno@4.8.0/deps.ts": "e2cf96d1129c38e1daf87a405878fa51d5771a0ba9b1c250baa75db0a8cb99df", - "https://deno.land/x/superdeno@4.8.0/mod.ts?target=deno#=": "fa91c501867a4302a4bc92d63cbf934fe5475ebb7bf58335338e001147263c87", + "https://deno.land/x/superdeno@4.8.0/mod.ts?target=deno": "fa91c501867a4302a4bc92d63cbf934fe5475ebb7bf58335338e001147263c87", "https://deno.land/x/superdeno@4.8.0/src/close.ts": "8bd4ab602ebbb048d06697d0c48c30be5f78ab9ad673850965e8014d78cca7a8", "https://deno.land/x/superdeno@4.8.0/src/superagent.ts": "8f60187f9278b154ef6bccf09a5ff7d45f81103ad0ce02d45518a6bbe63ce764", "https://deno.land/x/superdeno@4.8.0/src/superdeno.ts": "2e2cd4898961ac7688f0c2a4b210bf560a338f6601bd231d74bf8a0956880311", @@ -390,65 +46,52 @@ "https://deno.land/x/superdeno@4.8.0/src/utils.ts": "458c1699f73e348745b9b4d081e005dbc12d050fd2899ebf4f919515823ba1c0", "https://deno.land/x/superdeno@4.8.0/src/xhrSham.js": "91f28215c07af47155c7abe711a097d67d89916a80d666ef6d26fab3e5179af2", "https://deno.land/x/superdeno@4.8.0/version.ts": "c84185c6cf0c198d406ae8892cc56a981002cce5d09e9b6293718bf02ad1d2c4", - "https://deno.land/x/tincan@1.0.1/mod.ts": "9473507398048cb24dbb37b3a220777106c69c28d573898648deb2bb84a7e131", - "https://deno.land/x/tincan@1.0.1/src/deps.ts": "b02ae57b7ab5035b903f2526b278c26a301e05242668a77eb9e2e82011b651aa", - "https://deno.land/x/tincan@1.0.1/src/environment.ts": "1096dc35b77ee070bba03584489f71c446574d3a7676936ab0bb4aed507d7e27", - "https://deno.land/x/tincan@1.0.1/src/mod.ts": "faf52271dbf61ff40b29d60e1d4f8d80f4ad167beebc40905d16779617d07463", - "https://deno.land/x/tincan@1.0.1/src/nodes/mod.ts": "c22f058dd205d10c3b261c9afdbcd95a8eb807401e822f9c899cca2ab0f16473", - "https://deno.land/x/tincan@1.0.1/src/nodes/nodes.ts": "a8b8b3178868c8b13a6d4d0c96cb41e4c1df48719a8cd2977495af9f9352ab04", - "https://deno.land/x/tincan@1.0.1/src/nodes/tree.ts": "c119fb6a2ee1fe9833b70111382cc8d9a3f5b875b4bb65a0e8774d919193faa3", - "https://deno.land/x/tincan@1.0.1/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", - "https://deno.land/x/tincan@1.0.1/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", - "https://deno.land/x/tincan@1.0.1/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", - "https://deno.land/x/type_is@1.0.3/deps.ts": "018e8c9293f5682fa29986104dafc640509c3e21f23824d44f3ced4856dc1c11", - "https://deno.land/x/type_is@1.0.3/mod.ts": "3e471cf55f7ca9ec137ddb5feacb0d33b26e6b5b61bf7b2e2a4337b6939b8fd8", - "https://deno.land/x/vary@1.0.0/mod.ts": "e7c452694b21336419f16e0891f8ea503adaafc7bde956fb29e1a86f450a68e6", - "https://esm.sh/graphql@16.6.0/execution/execute?#=": "4bf1909f5341b521accc68c775eb5c6e74d1271c849bd205f5753d20b1da6733", - "https://esm.sh/graphql@16.6.0/graphql?#=": "1f4d9312ed9fb98fba27ac0dff68c6e6203a7c38c54082343f6a59d754cd3565", - "https://esm.sh/graphql@16.6.0/language/parser#=": "ddc5101156cc396d09926e83d88dca774c7f74950f1c27a1bebf4707ea78703d", - "https://esm.sh/graphql@16.6.0/type/schema?#=": "822e2238b560701a742d95795daba7afe9188d7b448c3764702671b1adf9ab6f", - "https://esm.sh/graphql@16.6.0/type?#=": "c19315793f8a7bc97b4a11e87f2f8b0753a9e48cd628481631a1aa6f025ab187", - "https://esm.sh/graphql@16.6.0/utilities?#=": "73a5ed468a474a26f174d6735f1959885abb96db1357e3db029ea0f7f5341c5b", - "https://esm.sh/graphql@16.7.1/execution/execute?#=": "24c3e02a4e59e6141dee5b5ce40f52f5e65540e8cf6197b90e27cbc80005f536", - "https://esm.sh/graphql@16.7.1/graphql?#=": "c425db731e11b777f00406a8997850c149482b600bc20841b0ec1d4593bd10c9", - "https://esm.sh/graphql@16.7.1/type/schema?#=": "23383e194eb279069bdf1801cbeb33b9b5e7fdca96fd4afbbd9c57bb1f9525e9", - "https://esm.sh/v128/graphql@16.7.1/denonext/execution/execute.js": "a7e5fa07610fcea77ebfb6fe34bc19f0dae8cd4390f4716e6946b3a33902ea15", - "https://esm.sh/v128/graphql@16.7.1/denonext/graphql.js": "9f14566a5c2723aaa602a1e7aa783075a25d01d5b69326f9b9f33f9b6c59293a", - "https://esm.sh/v128/graphql@16.7.1/denonext/type/schema.js": "337d85d5e149bcccca89c010aad955e89a496dbbda2be1b883ab0b3ac4f38619", - "https://esm.sh/v129/graphql@16.6.0/denonext/execution/execute.js": "ae6e53adadf243dc650a48a59eb16b6194d727b7aea2016441cfbca1f510c708", - "https://esm.sh/v129/graphql@16.6.0/denonext/type/schema.js": "2fa4dfbfe24fd6388667676fae1e6aa0d030facc9c10288e18792534191a2b9f", - "https://esm.sh/v130/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", - "https://esm.sh/v130/graphql@16.6.0/denonext/graphql.js": "f939186315483e5e2cda836c178e6691946759a44c831f6c97f0ba0c6521df5b", - "https://esm.sh/v130/graphql@16.6.0/denonext/language/parser.js": "82063e5ee234089909652e04ccd9f0e1c0670c04ac6db896099a638ae759b182", - "https://esm.sh/v130/graphql@16.6.0/denonext/type.js": "b2db850d0339274e376ce26e15a41e2ed89f08696677fccddbb1fe249bcb7263", - "https://esm.sh/v130/graphql@16.6.0/denonext/utilities.js": "4de290da642a5b7cd3cf341e62bbebaee48a956b1595b02c092a67a13a69d881", - "https://esm.sh/v130/xss@1.0.14/denonext/xss.mjs": "7252a9b5e08cb7b8193e635a4c677578d2066221956cb3769f4036723fe9bbfb", - "https://esm.sh/xss@1.0.14": "44282c44674b7b3f6b9e792ede0574487de9daa1940d9030e78ca1afa5f9a2fb", - "https://esm.sh/xss@1.0.14?no-check": "44282c44674b7b3f6b9e792ede0574487de9daa1940d9030e78ca1afa5f9a2fb", - "https://jspm.dev/npm:call-bind@1.0.2!cjs": "24c188f9241fbc82c6ac2ae1b63bf3a0574885e3fa739ef09b3a476a3a571634", - "https://jspm.dev/npm:call-bind@1.0.2/callBound!cjs": "a1586c35033398887376229b84f861c77cb686b034ea8a29d0be41bf46623071", - "https://jspm.dev/npm:call-bind@1/callBound!cjs": "3ff4779595db6e915ae7d9926ba3338b8777ea7af06560bd254c84840faab169", + "https://deno.land/x/tincan@1.0.2/mod.ts": "9473507398048cb24dbb37b3a220777106c69c28d573898648deb2bb84a7e131", + "https://deno.land/x/tincan@1.0.2/src/deps.ts": "cd4b02330db12f33c208706fc90626320152d9ea45f8370a135d69dd94818c49", + "https://deno.land/x/tincan@1.0.2/src/environment.ts": "1096dc35b77ee070bba03584489f71c446574d3a7676936ab0bb4aed507d7e27", + "https://deno.land/x/tincan@1.0.2/src/mod.ts": "a105a5d14ec3d40f1b240517eaa92eeeec1c70be331a12877d6bea25c07e3bd7", + "https://deno.land/x/tincan@1.0.2/src/nodes/mod.ts": "c22f058dd205d10c3b261c9afdbcd95a8eb807401e822f9c899cca2ab0f16473", + "https://deno.land/x/tincan@1.0.2/src/nodes/nodes.ts": "a8b8b3178868c8b13a6d4d0c96cb41e4c1df48719a8cd2977495af9f9352ab04", + "https://deno.land/x/tincan@1.0.2/src/nodes/tree.ts": "c119fb6a2ee1fe9833b70111382cc8d9a3f5b875b4bb65a0e8774d919193faa3", + "https://deno.land/x/tincan@1.0.2/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", + "https://deno.land/x/tincan@1.0.2/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", + "https://deno.land/x/tincan@1.0.2/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", + "https://esm.sh/v133/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", + "https://esm.sh/v133/xss@1.0.14/denonext/xss.mjs": "d3093ce2e72808314a367efb26a944fe0a83761efd7fec308c1636e6b9934cfb", + "https://esm.sh/xss@1.0.14": "e12dc644496b685f0af21df487889bd39825a269bc0b10c79c80f02e6accf582", + "https://jspm.dev/npm:call-bind@1.0.5!cjs": "09f8399c727fc1e9d58fdafc0a729b45bf37b7ee0c11d9d0b39abe37ac42ccf5", + "https://jspm.dev/npm:call-bind@1.0.5/callBound!cjs": "55fa05e2b115eeaef9ff684e3df12de253e6644a40ad09b5722f3a9a8df8f645", + "https://jspm.dev/npm:call-bind@1/callBound!cjs": "9cf2ef160025d392767618c2f0cb72d32cf14caa3fbeb493c6df9bde9d7fca8d", "https://jspm.dev/npm:component-emitter@1!cjs": "26c2994a5fcac1cd9156b00be96c5e2f006dd76338095a96006ac3a47c6c327d", "https://jspm.dev/npm:component-emitter@1.3.0!cjs": "757cafefb0bf5639f3f90b2267a7d168e03631e731c2a79fca847b735695e196", + "https://jspm.dev/npm:define-data-property@1!cjs": "37b65cb06c826730306a5f766de69da37b96076c96ea11a47667e9429623f937", + "https://jspm.dev/npm:define-data-property@1.1.1!cjs": "4ac6fa4b9d7ba7ccc83ffa350c58112ee878a450a97375217f66508d5673c822", "https://jspm.dev/npm:fast-safe-stringify@2!cjs": "d8dd0803af23f037ffb44c13e18333131af27ebe582f55fd498b6e3c8f6d5a9d", "https://jspm.dev/npm:fast-safe-stringify@2.1.1!cjs": "8a14a2de8a07a719c74aa63ffa5ff635fc55e9ee5d5a79fbc2e087dc4aa1940e", - "https://jspm.dev/npm:function-bind@1!cjs": "c06b352224fa5e98b331aef38c540a409ed7ef1e6515a38f1a737a8e4f42118a", - "https://jspm.dev/npm:function-bind@1.1.1!cjs": "4fb6903c972da5bcebe751a5b498ec4599987fc1e7157c15d08f388f2986c0f6", - "https://jspm.dev/npm:get-intrinsic@1!cjs": "bb4d028dfea8a820b9679f360f92ab875ffc5e17c7a972a95bd191df12f07de1", - "https://jspm.dev/npm:get-intrinsic@1.2.1!cjs": "6b9b1c6dd25fcf7ca2b9d6b5c3a61114cf4784cf8c87a26a4ea211da5f808fb3", + "https://jspm.dev/npm:function-bind@1!cjs": "73fbc50bf85e8a6ca150609e98c396301c1ae5a1603e50ce8c64e95f646e0ce0", + "https://jspm.dev/npm:function-bind@1.1.2!cjs": "bbb663bc4e50f400a8ca0de9e0bfdaaa7022695f86b2806a48dc1afc5b4195a8", + "https://jspm.dev/npm:function-bind@1.1.2/implementation!cjs": "ebdc0ec85854db19d7e21081b368891394f86e21c6d786273c327762cb46ea6a", + "https://jspm.dev/npm:get-intrinsic@1!cjs": "f6d9266edc586632e8f6d8d6c5ca28fb2c0d5ee9c9d9252df9aafd57eda9fcea", + "https://jspm.dev/npm:get-intrinsic@1.2.2!cjs": "723fcebc493a45d5af8ecb366020a6cc2ce9bd4759bad699c1172015cb193f65", + "https://jspm.dev/npm:gopd@1!cjs": "c220469947b77de2c5e4b115beda16397bf6133c5b873b8e24e85b902ee6dc82", + "https://jspm.dev/npm:gopd@1.0.1!cjs": "b38da4f4b49cfef31e3aa8d62fdd136cf0fe99a5df6c603a426f97248f3cf4ab", + "https://jspm.dev/npm:has-property-descriptors@1!cjs": "b1a828f75a22a5614b136dd3da1be98cc744a2cd6bfed9bd8c338a8d51a570d1", + "https://jspm.dev/npm:has-property-descriptors@1.0.1!cjs": "f8da64823507f597f3cb44a2f3576e350df72e1033ef5e7a5b30d771e81c0819", "https://jspm.dev/npm:has-proto@1!cjs": "78a2914e5525d531426c5d69fd5aa23671ec359c6c527b9791327f60ad1b6682", "https://jspm.dev/npm:has-proto@1.0.1!cjs": "0a9d605f1d310f859265780011d6343a7869cadf3a9e02fd6cc949c2924b528c", "https://jspm.dev/npm:has-symbols@1!cjs": "48faf647d225b64fa235ccc3e5a848e72221b0230935e421066a5de39aa89c3a", "https://jspm.dev/npm:has-symbols@1.0.3!cjs": "36965f84e4e0ea1abeddb6928d0719a2648e61ceb9825df185b40d05cddb64df", "https://jspm.dev/npm:has-symbols@1.0.3/shams!cjs": "669673e1dc7691c0b397580760121d57f3a5c5101dd70be2e8dd7d2a044de2e9", - "https://jspm.dev/npm:has@1!cjs": "79286edf0358a403240ee04be7814df009af2ed8a0f76e7df54b614da4b0ac95", - "https://jspm.dev/npm:has@1.0.3!cjs": "ecbdcfeef29b4da5a5b3e7e388c08998e1b52e0cca905bd3a06ec457fe0a568a", - "https://jspm.dev/npm:object-inspect@1!cjs": "0e46f0d93f114fa586e70f479752d46b2d639b3c89707e232caf7affffb58439", - "https://jspm.dev/npm:object-inspect@1.12.3!cjs": "a16facbf5ee180ef25b54592f1d1f23328dae7c89bf74c11b2459b93621cf981", + "https://jspm.dev/npm:hasown@2!cjs": "9a39af846b167cae93b7a40f1ba4c97255bb5b07a1481da853a29bb68d24e603", + "https://jspm.dev/npm:hasown@2.0.0!cjs": "f52fd2477e345530f759465a984023f23d8261c4a54970e619daf1da6a2e85f5", + "https://jspm.dev/npm:object-inspect@1!cjs": "dc197b471ed55ecf2eabeb8da9aaee277e97831e65192531432a4ec2346211d9", + "https://jspm.dev/npm:object-inspect@1.13.1!cjs": "cec116e5c2b7d6b75e178d2541d70475d716ad912e3d5599e5c2d97284a9cb3e", "https://jspm.dev/npm:qs@6!cjs": "210de1e090ac836c2495c19dfea88fc74b49de1b308241f8c9490d27ab6e0195", "https://jspm.dev/npm:qs@6.11.2!cjs": "5da52fff60f7b1a6b1c73cdea2d9fc5d5588fa6c551b2a0ea2a1ebbb2a5e559f", "https://jspm.dev/npm:qs@6.11.2/_/e71c21de.js": "cfe49eb949fb7291803f1ed2f4c0a244b8fca3b6936f5082fc97581a0663e427", "https://jspm.dev/npm:qs@6.11.2/lib/stringify!cjs": "35d39c5871af151efe9ccca8e4ebecbf0282f97287b5fad56ebac369f69c2581", + "https://jspm.dev/npm:set-function-length@1!cjs": "b4c766d874ba261ff0c11aa18a6bf4510ecf8da09a7219da83a62772e0bc1b41", + "https://jspm.dev/npm:set-function-length@1.1.1!cjs": "f52607660d1f50e19e645ab49e6a4adf27fa4ae909867ec9950e993c430e4ca1", "https://jspm.dev/npm:side-channel@1!cjs": "a07dfe7165af0d7f916d089490c38839397abcd8b218e4566b270858c9a0ea04", "https://jspm.dev/npm:side-channel@1.0.4!cjs": "db65b31b6f9e67d57f04e26d71eb5b376306f5a89ab46fae1278c3ffefb19663", "https://jspm.dev/npm:superagent@6.1.0!cjs": "fcf1c0b17cb3ff899b59ae178fc4ab74ad3b592d7fa8b44b16394001758e3176", @@ -457,104 +100,6 @@ "https://jspm.dev/npm:superagent@6.1.0/lib/request-base!cjs": "e361c341aa75d7417c918bc8fb697d0ccf96101e039dd2f00e5e45c01c534caa", "https://jspm.dev/npm:superagent@6.1.0/lib/response-base!cjs": "00ac549f34d73c2753caa798aa7eb781051179013e3418ff0868a1e1904a8913", "https://jspm.dev/npm:superagent@6.1.0/lib/utils!cjs": "ea706523553983c96ef4ab2f191c61c53fb8b78ad8ff2472b48f1385e896c030", - "https://jspm.dev/superagent@6.1.0": "4b3082d71252c42abd3930d85d1f3c4b2e937e0fab2b5f1c9d19eac20dea89a9", - "https://raw.githubusercontent.com/jshttp/mime-db/v1.52.0/db.json": "85c8e1ba609079947c8df83c092900ab0226e1d7b60e5e7105fb7dd701833263" - }, - "npm": { - "specifiers": { - "@graphql-tools/schema@10.0.0": "@graphql-tools/schema@10.0.0_graphql@16.6.0", - "@graphql-tools/schema@9.0.17": "@graphql-tools/schema@9.0.17_graphql@16.6.0", - "graphql-tag@2.12.6": "graphql-tag@2.12.6_graphql@16.6.0", - "graphql@16.6.0": "graphql@16.6.0", - "graphql@16.7.1": "graphql@16.7.1" - }, - "packages": { - "@graphql-tools/merge@8.4.0_graphql@16.6.0": { - "integrity": "sha512-3XYCWe0d3I4F1azNj1CdShlbHfTIfiDgj00R9uvFH8tHKh7i1IWN3F7QQYovcHKhayaR6zPok3YYMESYQcBoaA==", - "dependencies": { - "@graphql-tools/utils": "@graphql-tools/utils@9.2.1_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1" - } - }, - "@graphql-tools/merge@9.0.0_graphql@16.6.0": { - "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", - "dependencies": { - "@graphql-tools/utils": "@graphql-tools/utils@10.0.4_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1" - } - }, - "@graphql-tools/schema@10.0.0_graphql@16.6.0": { - "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", - "dependencies": { - "@graphql-tools/merge": "@graphql-tools/merge@9.0.0_graphql@16.6.0", - "@graphql-tools/utils": "@graphql-tools/utils@10.0.4_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1", - "value-or-promise": "value-or-promise@1.0.12" - } - }, - "@graphql-tools/schema@9.0.17_graphql@16.6.0": { - "integrity": "sha512-HVLq0ecbkuXhJlpZ50IHP5nlISqH2GbNgjBJhhRzHeXhfwlUOT4ISXGquWTmuq61K0xSaO0aCjMpxe4QYbKTng==", - "dependencies": { - "@graphql-tools/merge": "@graphql-tools/merge@8.4.0_graphql@16.6.0", - "@graphql-tools/utils": "@graphql-tools/utils@9.2.1_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1", - "value-or-promise": "value-or-promise@1.0.12" - } - }, - "@graphql-tools/utils@10.0.4_graphql@16.6.0": { - "integrity": "sha512-MF+nZgGROSnFgyOYWhrl2PuJMlIBvaCH48vtnlnDQKSeDc2fUfOzUVloBAQvnYmK9JBmHHks4Pxv25Ybg3r45Q==", - "dependencies": { - "@graphql-typed-document-node/core": "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0", - "dset": "dset@3.1.2", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1" - } - }, - "@graphql-tools/utils@9.2.1_graphql@16.6.0": { - "integrity": "sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==", - "dependencies": { - "@graphql-typed-document-node/core": "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1" - } - }, - "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0": { - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dependencies": { - "graphql": "graphql@16.6.0" - } - }, - "dset@3.1.2": { - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", - "dependencies": {} - }, - "graphql-tag@2.12.6_graphql@16.6.0": { - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "dependencies": { - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.1" - } - }, - "graphql@16.6.0": { - "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", - "dependencies": {} - }, - "graphql@16.7.1": { - "integrity": "sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==", - "dependencies": {} - }, - "tslib@2.6.1": { - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dependencies": {} - }, - "value-or-promise@1.0.12": { - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", - "dependencies": {} - } - } + "https://jspm.dev/superagent@6.1.0": "4b3082d71252c42abd3930d85d1f3c4b2e937e0fab2b5f1c9d19eac20dea89a9" } } diff --git a/deps.ts b/deps.ts index 7a397b7..acb025d 100644 --- a/deps.ts +++ b/deps.ts @@ -3,4 +3,4 @@ export { graphql, type GraphQLArgs, type GraphQLSchema, -} from 'npm:graphql@16.6.0' +} from 'npm:graphql@16.6' diff --git a/examples/oak.ts b/examples/oak.ts index 65984f3..c2188ff 100644 --- a/examples/oak.ts +++ b/examples/oak.ts @@ -2,7 +2,7 @@ import { Application, Middleware, Router, -} from 'https://deno.land/x/oak@v12.6.0/mod.ts' +} from 'https://deno.land/x/oak@v12.6.1/mod.ts' import { GraphQLHTTP } from '../mod.ts' import { makeExecutableSchema } from 'npm:@graphql-tools/schema@10.0.0' import { gql } from 'https://deno.land/x/graphql_tag@0.1.2/mod.ts' diff --git a/examples/opine.ts b/examples/opine.ts index cc04d4c..9e43e82 100644 --- a/examples/opine.ts +++ b/examples/opine.ts @@ -2,7 +2,7 @@ import { opine, OpineRequest } from 'https://deno.land/x/opine@2.3.4/mod.ts' import { GraphQLHTTP } from '../mod.ts' import { makeExecutableSchema } from 'npm:@graphql-tools/schema@10.0.0' import { gql } from 'https://deno.land/x/graphql_tag@0.1.2/mod.ts' -import { readAll } from 'https://deno.land/std@0.196.0/streams/read_all.ts' +import { readAll } from 'https://deno.land/std@0.205.0/streams/read_all.ts' import type { GraphQLParams } from '../types.ts' type Request = OpineRequest & { json: () => Promise } diff --git a/graphiql/render.ts b/graphiql/render.ts index c52ce46..e724e34 100644 --- a/graphiql/render.ts +++ b/graphiql/render.ts @@ -1,8 +1,6 @@ -import * as xss from 'https://esm.sh/xss' +import { filterXSS } from 'https://esm.sh/xss@1.0.14' import { getLoadingMarkup } from './markup.ts' -const { filterXSS } = xss.default as any - export interface MiddlewareOptions { endpoint?: string subscriptionEndpoint?: string diff --git a/mod_test.ts b/mod_test.ts index 3905206..c227457 100644 --- a/mod_test.ts +++ b/mod_test.ts @@ -4,9 +4,9 @@ import { expect, it, run, -} from 'https://deno.land/x/tincan@1.0.1/mod.ts' -import type { GraphQLResolveInfo } from 'npm:graphql@16.6.0/type' -import { buildSchema } from 'npm:graphql@16.6.0' +} from 'https://deno.land/x/tincan@1.0.2/mod.ts' +import type { GraphQLResolveInfo } from 'npm:graphql@16.6/type' +import { buildSchema } from 'npm:graphql@16.6' import { runHttpQuery } from './common.ts' import { GraphQLHTTP } from './http.ts' From 52c1d232ed70fe35ba7d8f182045a973a4a40c67 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Wed, 8 Nov 2023 14:50:21 +0200 Subject: [PATCH 02/15] move to graphql-http --- common.ts | 35 --------------- deno.lock | 70 ++++++++++++++++++++++++++++++ deps.ts | 7 +++ http.ts | 122 ---------------------------------------------------- mod.ts | 80 +++++++++++++++++++++++++++++++++- mod_test.ts | 55 +---------------------- types.ts | 13 ++---- 7 files changed, 160 insertions(+), 222 deletions(-) delete mode 100644 common.ts delete mode 100644 http.ts diff --git a/common.ts b/common.ts deleted file mode 100644 index d89348e..0000000 --- a/common.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ExecutionResult, graphql } from './deps.ts' -import type { GQLOptions, GQLRequest, GraphQLParams } from './types.ts' - -/** - * Execute a GraphQL query - * @param {GraphQLParams} params - * @param {GQLOptions} options - * @param context GraphQL context to use inside resolvers - * - * @example - * ```ts - * const { errors, data } = await runHttpQuery({ query: `{ hello }` }, { schema } }, context) - * ``` - */ -export async function runHttpQuery< - Req extends GQLRequest = GQLRequest, - Context = { request?: Req }, ->( - params: GraphQLParams, - options: GQLOptions, - context?: Context | any, -): Promise { - const contextValue = options.context && context?.request - ? await options.context?.(context?.request) - : context - const source = params.query! || params.mutation! - - return await graphql({ - source, - ...options, - contextValue, - variableValues: params.variables, - operationName: params.operationName, - }) -} diff --git a/deno.lock b/deno.lock index dd07caf..8d692e1 100644 --- a/deno.lock +++ b/deno.lock @@ -2,15 +2,78 @@ "version": "3", "packages": { "specifiers": { + "npm:@graphql-tools/schema@10.0.0": "npm:@graphql-tools/schema@10.0.0_graphql@16.6.0", + "npm:graphql-http@1.22.0": "npm:graphql-http@1.22.0_graphql@16.6.0", "npm:graphql@16.6": "npm:graphql@16.6.0" }, "npm": { + "@graphql-tools/merge@9.0.0_graphql@16.6.0": { + "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", + "dependencies": { + "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2" + } + }, + "@graphql-tools/schema@10.0.0_graphql@16.6.0": { + "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", + "dependencies": { + "@graphql-tools/merge": "@graphql-tools/merge@9.0.0_graphql@16.6.0", + "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2", + "value-or-promise": "value-or-promise@1.0.12" + } + }, + "@graphql-tools/utils@10.0.8_graphql@16.6.0": { + "integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==", + "dependencies": { + "@graphql-typed-document-node/core": "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0", + "cross-inspect": "cross-inspect@1.0.0", + "dset": "dset@3.1.3", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2" + } + }, + "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0": { + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dependencies": { + "graphql": "graphql@16.6.0" + } + }, + "cross-inspect@1.0.0": { + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "tslib@2.6.2" + } + }, + "dset@3.1.3": { + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "dependencies": {} + }, + "graphql-http@1.22.0_graphql@16.6.0": { + "integrity": "sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==", + "dependencies": { + "graphql": "graphql@16.6.0" + } + }, "graphql@16.6.0": { "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", "dependencies": {} + }, + "tslib@2.6.2": { + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dependencies": {} + }, + "value-or-promise@1.0.12": { + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dependencies": {} } } }, + "redirects": { + "https://esm.sh/graphql-http": "https://esm.sh/graphql-http@1.22.0" + }, "remote": { "https://deno.land/std@0.129.0/async/abortable.ts": "a896ac6b0d4237bd2d2d248217cfa1f0d85ccda93cb25ebda55e33850e526be6", "https://deno.land/std@0.129.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0", @@ -34,6 +97,8 @@ "https://deno.land/x/expect@v0.4.0/matchers.ts": "55acf74a3c4a308d079798930f05ab11da2080ec7acd53517193ca90d1296bf7", "https://deno.land/x/expect@v0.4.0/mock.ts": "562d4b1d735d15b0b8e935f342679096b64fe452f86e96714fe8616c0c884914", "https://deno.land/x/expect@v0.4.0/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", + "https://deno.land/x/graphql_tag@0.1.2/deps.ts": "5696461c8bb42db7c83486db452e125f7cfdc62a2c628bb470a4447d934b90b3", + "https://deno.land/x/graphql_tag@0.1.2/mod.ts": "57fd56de5f7cbc66e23ce896cc8e99521d286e89969d83e09d960642b0a9d652", "https://deno.land/x/opine@2.1.2/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", "https://deno.land/x/opine@2.1.2/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", "https://deno.land/x/superdeno@4.8.0/deps.ts": "e2cf96d1129c38e1daf87a405878fa51d5771a0ba9b1c250baa75db0a8cb99df", @@ -56,7 +121,12 @@ "https://deno.land/x/tincan@1.0.2/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", "https://deno.land/x/tincan@1.0.2/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", "https://deno.land/x/tincan@1.0.2/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", + "https://esm.sh/graphql-http@1.22.0": "ad393a29882d884cedd353fd602ea181158a834c018c14b9bf1e8aacf82be7f6", + "https://esm.sh/graphql@16.6.0/language/parser#=": "d2136c12ba1c7ac94b6f298bd2f81433cd0df9b874b9e08e512bda768a5ea8ae", "https://esm.sh/v133/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", + "https://esm.sh/v133/graphql-http@1.22.0/denonext/graphql-http.mjs": "b612e25d2a62a714203ac4123cdc3be3d152ee49f5d93a76298d43e88d3d580a", + "https://esm.sh/v133/graphql@16.6.0/denonext/language/parser.js": "82063e5ee234089909652e04ccd9f0e1c0670c04ac6db896099a638ae759b182", + "https://esm.sh/v133/graphql@16.8.1/denonext/graphql.mjs": "585b84022623b931e27a7a8134cd24ec50b33ea12fd18b43254527628a0fddac", "https://esm.sh/v133/xss@1.0.14/denonext/xss.mjs": "d3093ce2e72808314a367efb26a944fe0a83761efd7fec308c1636e6b9934cfb", "https://esm.sh/xss@1.0.14": "e12dc644496b685f0af21df487889bd39825a269bc0b10c79c80f02e6accf582", "https://jspm.dev/npm:call-bind@1.0.5!cjs": "09f8399c727fc1e9d58fdafc0a729b45bf37b7ee0c11d9d0b39abe37ac42ccf5", diff --git a/deps.ts b/deps.ts index acb025d..6b9f1b4 100644 --- a/deps.ts +++ b/deps.ts @@ -4,3 +4,10 @@ export { type GraphQLArgs, type GraphQLSchema, } from 'npm:graphql@16.6' +export { + createHandler, + type HandlerOptions, + parseRequestParams as rawParseRequestParams, + type Request as RawRequest, + type RequestParams, +} from 'npm:graphql-http@1.22.0' diff --git a/http.ts b/http.ts deleted file mode 100644 index ad10bfa..0000000 --- a/http.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { runHttpQuery } from './common.ts' -import type { GQLOptions, GQLRequest, GraphQLParams } from './types.ts' - -/** - * Create a new GraphQL HTTP middleware with schema, context etc - * @param {GQLOptions} options - * - * @example - * ```ts - * const graphql = await GraphQLHTTP({ schema }) - * - * for await (const req of s) graphql(req) - * ``` - */ -export function GraphQLHTTP< - Req extends GQLRequest = GQLRequest, - Ctx extends { request: Req } = { request: Req }, ->({ - playgroundOptions = {}, - headers = {}, - ...options -}: GQLOptions) { - return async (request: Req) => { - const accept = request.headers.get('Accept') || '' - - const typeList = ['text/html', 'text/plain', 'application/json', '*/*'] - .map((contentType) => ({ - contentType, - index: accept.indexOf(contentType), - })) - .filter(({ index }) => index >= 0) - .sort((a, b) => a.index - b.index) - .map(({ contentType }) => contentType) - - if (accept && !typeList.length) { - return new Response('Not Acceptable', { - status: 406, - headers: new Headers(headers), - }) - } else if (!['GET', 'PUT', 'POST', 'PATCH'].includes(request.method)) { - return new Response('Method Not Allowed', { - status: 405, - headers: new Headers(headers), - }) - } - - let params: Promise - - if (request.method === 'GET') { - const urlQuery = request.url.substring(request.url.indexOf('?')) - const queryParams = new URLSearchParams(urlQuery) - - if ( - options.graphiql && typeList[0] === 'text/html' && - !queryParams.has('raw') - ) { - const { renderPlaygroundPage } = await import('./graphiql/render.ts') - const playground = renderPlaygroundPage({ - ...playgroundOptions, - endpoint: '/graphql', - }) - - return new Response(playground, { - headers: new Headers({ - 'Content-Type': 'text/html', - ...headers, - }), - }) - } else if (typeList.length === 1 && typeList[0] === 'text/html') { - return new Response('Not Acceptable', { - status: 406, - headers: new Headers(headers), - }) - } else if (queryParams.has('query')) { - params = Promise.resolve( - { query: queryParams.get('query') } as GraphQLParams, - ) - } else { - params = Promise.reject(new Error('No query given!')) - } - } else if (typeList.length === 1 && typeList[0] === 'text/html') { - return new Response('Not Acceptable', { - status: 406, - headers: new Headers(headers), - }) - } else { - params = request.json() - } - - try { - const result = await runHttpQuery(await params, options, { - request, - }) - - let contentType = 'text/plain' - - if ( - !typeList.length || typeList.includes('application/json') || - typeList.includes('*/*') - ) { - contentType = 'application/json' - } - - return new Response(JSON.stringify(result, null, 2), { - status: 200, - headers: new Headers({ - 'Content-Type': contentType, - ...headers, - }), - }) - } catch (e) { - console.error(e) - return new Response( - 'Malformed Request ' + (request.method === 'GET' ? 'Query' : 'Body'), - { - status: 400, - headers: new Headers(headers), - }, - ) - } - } -} diff --git a/mod.ts b/mod.ts index 36b090c..09de227 100644 --- a/mod.ts +++ b/mod.ts @@ -1,2 +1,78 @@ -export * from './http.ts' -export * from './common.ts' +import { createHandler, RawRequest } from './deps.ts' +import { GQLOptions } from './types.ts' + +function toRequest( + req: Request, +): RawRequest { + return { + method: req.method, + url: req.url, + headers: req.headers, + body: () => req.text(), + raw: req as Req, + context: {}, + } +} + +export function GraphQLHTTP( + { schema, context, headers = {}, graphiql, playgroundOptions, ...options }: + GQLOptions, +) { + const handler = createHandler({ + schema, + context, + ...options, + }) + + return async function handleRequest(req: Request): Promise { + try { + const accept = req.headers.get('Accept') || '' + + const typeList = ['text/html', 'text/plain', 'application/json', '*/*'] + .map((contentType) => ({ + contentType, + index: accept.indexOf(contentType), + })) + .filter(({ index }) => index >= 0) + .sort((a, b) => a.index - b.index) + .map(({ contentType }) => contentType) + + if ( + req.method === 'GET' && graphiql && typeList[0] === 'text/html' + ) { + const urlQuery = req.url.substring(req.url.indexOf('?')) + const queryParams = new URLSearchParams(urlQuery) + + if (!queryParams.has('raw')) { + const { renderPlaygroundPage } = await import('./graphiql/render.ts') + const playground = renderPlaygroundPage({ + ...playgroundOptions, + endpoint: '/graphql', + }) + + return new Response(playground, { + headers: new Headers({ + 'Content-Type': 'text/html', + ...headers, + }), + }) + } + } + const [body, init] = await handler(toRequest(req)) + + return new Response(body, { + ...init, + headers: new Headers({ ...init.headers, ...headers }), + }) + } catch (e) { + console.error(e) + return new Response( + 'Malformed Request ' + (req.method === 'GET' ? 'Query' : 'Body'), + { + status: 400, + headers: new Headers(headers), + }, + ) + } + } +} diff --git a/mod_test.ts b/mod_test.ts index c227457..58fa72a 100644 --- a/mod_test.ts +++ b/mod_test.ts @@ -7,8 +7,7 @@ import { } from 'https://deno.land/x/tincan@1.0.2/mod.ts' import type { GraphQLResolveInfo } from 'npm:graphql@16.6/type' import { buildSchema } from 'npm:graphql@16.6' -import { runHttpQuery } from './common.ts' -import { GraphQLHTTP } from './http.ts' +import { GraphQLHTTP } from './mod.ts' const schema = buildSchema(` type Query { @@ -260,56 +259,4 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { }) }) -describe('runHttpQuery(params, options, context)', () => { - it('should resolve GraphQL query', async () => { - const result = await runHttpQuery( - { - query: '{ hello }', - }, - { schema, rootValue }, - ) - - expect(result.data).toEqual({ hello: 'Hello World!' }) - - expect(result.errors).toEqual(undefined) - }) - it('should send errors on incorrect query', async () => { - const result = await runHttpQuery( - { - query: '{ world }', - }, - { schema }, - ) - - expect(result.data).toEqual(undefined) - - expect(result.errors?.[0].message).toBe( - 'Cannot query field "world" on type "Query".', - ) - }) - it('should use properties passed to context', async () => { - const obj = { a: 'Context prop' } - - const result = await runHttpQuery( - { query: '{ hello }' }, - { - schema, - fieldResolver: ( - _: unknown, - __: unknown, - ctx: typeof obj, - info: GraphQLResolveInfo, - ) => { - if (info.fieldName === 'hello') { - return ctx.a - } - }, - }, - obj, - ) - - expect(result.data).toEqual({ hello: 'Context prop' }) - }) -}) - run() diff --git a/types.ts b/types.ts index 7789c95..da93fe2 100644 --- a/types.ts +++ b/types.ts @@ -1,13 +1,11 @@ -import type { GraphQLArgs, GraphQLSchema } from './deps.ts' +import type { HandlerOptions } from './deps.ts' import type { RenderPageOptions } from './graphiql/render.ts' /** * gql options */ -export interface GQLOptions - extends Omit { - schema: GraphQLSchema - context?: (val: Req) => Context | Promise +export interface GQLOptions + extends HandlerOptions { /** * GraphQL playground */ @@ -39,9 +37,6 @@ interface MutationParams extends Params { export type GraphQLParams = QueryParams | MutationParams -export type GQLRequest = { - url: string - method: string - headers: Headers +export type GQLRequest = Request & { json: () => Promise } From 7fc7351a0d8c27fe6ae8b93007ae331c14e42984 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Wed, 8 Nov 2023 16:18:47 +0200 Subject: [PATCH 03/15] finish transition and fix tests --- deno.lock | 145 ++++++++++++++++++++++++++++++++++++++++++++++ deps.ts | 5 ++ examples/oak.ts | 26 +++------ examples/opine.ts | 56 ------------------ mod.ts | 70 ++++++++++++---------- mod_test.ts | 106 +++++++++++++++++---------------- types.ts | 9 ++- 7 files changed, 259 insertions(+), 158 deletions(-) delete mode 100644 examples/opine.ts diff --git a/deno.lock b/deno.lock index 8d692e1..e85c12f 100644 --- a/deno.lock +++ b/deno.lock @@ -90,6 +90,124 @@ "https://deno.land/std@0.129.0/testing/_diff.ts": "9d849cd6877694152e01775b2d93f9d6b7aef7e24bfe3bfafc4d7a1ac8e9f392", "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", "https://deno.land/std@0.197.0/fmt/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", + "https://deno.land/std@0.200.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", + "https://deno.land/std@0.200.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", + "https://deno.land/std@0.200.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", + "https://deno.land/std@0.200.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", + "https://deno.land/std@0.200.0/bytes/bytes_list.ts": "31d664f4d42fa922066405d0e421c56da89d751886ee77bbe25a88bf0310c9d0", + "https://deno.land/std@0.200.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2", + "https://deno.land/std@0.200.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", + "https://deno.land/std@0.200.0/bytes/ends_with.ts": "4228811ebc71615d27f065c54b5e815ec1972538772b0f413c0efe05245b472e", + "https://deno.land/std@0.200.0/bytes/equals.ts": "fc190cce412b2136979181b163ec7e05f7e7a947e39102eee4b8c0d62519ddf9", + "https://deno.land/std@0.200.0/bytes/includes_needle.ts": "76a8163126fb2f8bf86fd7f22192c3bb04bf6a20b987a095127c2ca08adf3ba6", + "https://deno.land/std@0.200.0/bytes/index_of_needle.ts": "9c06610e9611b5647ac25952e71a22e09227c9f1b8cbeeb33399bf8bf8a7f649", + "https://deno.land/std@0.200.0/bytes/last_index_of_needle.ts": "f1602f221c3b678bc4f1e1c88a70a15ab7da32c21751dbbc6c957c956951d784", + "https://deno.land/std@0.200.0/bytes/mod.ts": "e869bba1e7a2e3a9cc6c2d55471888429a544e70a840c087672e656e7ba21815", + "https://deno.land/std@0.200.0/bytes/repeat.ts": "6f5e490d8d72bcbf8d84a6bb04690b9b3eb5822c5a11687bca73a2318a842294", + "https://deno.land/std@0.200.0/bytes/starts_with.ts": "3e607a70c9c09f5140b7a7f17a695221abcc7244d20af3eb47ccbb63f5885135", + "https://deno.land/std@0.200.0/crypto/keystack.ts": "877ab0f19eb7d37ad6495190d3c3e39f58e9c52e0b6a966f82fd6df67ca55f90", + "https://deno.land/std@0.200.0/crypto/timing_safe_equal.ts": "7b0a4d2ef1c17590e0ad6c0cb1776369d2ba80cd99e945005e117851690507fe", + "https://deno.land/std@0.200.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d", + "https://deno.land/std@0.200.0/encoding/base64url.ts": "2ed4ba122b20fedf226c5d337cf22ee2024fa73a8f85d915d442af7e9ce1fae1", + "https://deno.land/std@0.200.0/http/_negotiation/common.ts": "14d1a52427ab258a4b7161cd80e1d8a207b7cc64b46e911780f57ead5f4323c6", + "https://deno.land/std@0.200.0/http/_negotiation/encoding.ts": "ff747d107277c88cb7a6a62a08eeb8d56dad91564cbcccb30694d5dc126dcc53", + "https://deno.land/std@0.200.0/http/_negotiation/language.ts": "7bcddd8db3330bdb7ce4fc00a213c5547c1968139864201efd67ef2d0d51887d", + "https://deno.land/std@0.200.0/http/_negotiation/media_type.ts": "58847517cd549384ad677c0fe89e0a4815be36fe7a303ea63cee5f6a1d7e1692", + "https://deno.land/std@0.200.0/http/cookie_map.ts": "64601025a7d24c3ebd80a169ccc99145bdbfc60606935348e1d4366d0bf9010d", + "https://deno.land/std@0.200.0/http/etag.ts": "807382795850cde5c437c74bcc09392bc0fc56de348fc1271f383f4b28935b9f", + "https://deno.land/std@0.200.0/http/http_errors.ts": "bbda34819060af86537cecc9dc8e045f877130808b7e7acde4197c5328e852d0", + "https://deno.land/std@0.200.0/http/http_status.ts": "8a7bcfe3ac025199ad804075385e57f63d055b2aed539d943ccc277616d6f932", + "https://deno.land/std@0.200.0/http/method.ts": "e66c2a015cb46c21ab0bb3589aa4fca43143a506cb324ffdfd42d2edef7bc0c4", + "https://deno.land/std@0.200.0/http/negotiation.ts": "46e74a6bad4b857333a58dc5b50fe8e5a4d5267e97292293ea65f980bd918086", + "https://deno.land/std@0.200.0/http/server_sent_event.ts": "29f707c1afa5278ac0315ac115ee679d6b93596d5af3fad5ef33f04254ca76c1", + "https://deno.land/std@0.200.0/http/user_agent.ts": "35d3c70d0926b0e121b8c1bbc324b3522479158acaa4f0c43928362b7bf4e6f4", + "https://deno.land/std@0.200.0/io/buf_reader.ts": "2bccff0878537ef201c5051fc0db0ce8196388c5ea69d2be6be1900fe48c5f4b", + "https://deno.land/std@0.200.0/io/buf_writer.ts": "48c33c8f00b61dcbc7958706741cec8e59810bd307bc6a326cbd474fe8346dfd", + "https://deno.land/std@0.200.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793", + "https://deno.land/std@0.200.0/io/copy_n.ts": "c055296297b9d4897d90d1ac056b072dc02614e60c67f438e23fbce052ea4c69", + "https://deno.land/std@0.200.0/io/limited_reader.ts": "6c9a216f8eef39c1ee2a6b37a29372c8fc63455b2eeb91f06d9646f8f759fc8b", + "https://deno.land/std@0.200.0/io/mod.ts": "2665bcccc1fd6e8627cca167c3e92aaecbd9897556b6f69e6d258070ef63fd9b", + "https://deno.land/std@0.200.0/io/multi_reader.ts": "9c2a0a31686c44b277e16da1d97b4686a986edcee48409b84be25eedbc39b271", + "https://deno.land/std@0.200.0/io/read_delim.ts": "c02b93cc546ae8caad8682ae270863e7ace6daec24c1eddd6faabc95a9d876a3", + "https://deno.land/std@0.200.0/io/read_int.ts": "7cb8bcdfaf1107586c3bacc583d11c64c060196cb070bb13ae8c2061404f911f", + "https://deno.land/std@0.200.0/io/read_lines.ts": "c526c12a20a9386dc910d500f9cdea43cba974e853397790bd146817a7eef8cc", + "https://deno.land/std@0.200.0/io/read_long.ts": "f0aaa420e3da1261c5d33c5e729f09922f3d9fa49f046258d4ff7a00d800c71e", + "https://deno.land/std@0.200.0/io/read_range.ts": "46a2263d0f8369b6d9abb0b25d99ceb65ff08d621fc57bcc53832e6979295043", + "https://deno.land/std@0.200.0/io/read_short.ts": "805cb329574b850b84bf14a92c052c59b5977a492cd780c41df8ad40826c1a20", + "https://deno.land/std@0.200.0/io/read_string_delim.ts": "5dc9f53bdf78e7d4ee1e56b9b60352238ab236a71c3e3b2a713c3d78472a53ce", + "https://deno.land/std@0.200.0/io/slice_long_to_bytes.ts": "48d9bace92684e880e46aa4a2520fc3867f9d7ce212055f76ecc11b22f9644b7", + "https://deno.land/std@0.200.0/io/string_reader.ts": "da0f68251b3d5b5112485dfd4d1b1936135c9b4d921182a7edaf47f74c25cc8f", + "https://deno.land/std@0.200.0/io/string_writer.ts": "8a03c5858c24965a54c6538bed15f32a7c72f5704a12bda56f83a40e28e5433e", + "https://deno.land/std@0.200.0/media_types/_db.ts": "7606d83e31f23ce1a7968cbaee852810c2cf477903a095696cdc62eaab7ce570", + "https://deno.land/std@0.200.0/media_types/_util.ts": "916efbd30b6148a716f110e67a4db29d6949bf4048997b754415dd7e42c52378", + "https://deno.land/std@0.200.0/media_types/content_type.ts": "ad98a5aa2d95f5965b2796072284258710a25e520952376ed432b0937ce743bc", + "https://deno.land/std@0.200.0/media_types/extension.ts": "a7cd28c9417143387cdfed27d4e8607ebcf5b1ec27eb8473d5b000144689fe65", + "https://deno.land/std@0.200.0/media_types/extensions_by_type.ts": "43806d6a52a0d6d965ada9d20e60a982feb40bc7a82268178d94edb764694fed", + "https://deno.land/std@0.200.0/media_types/format_media_type.ts": "f5e1073c05526a6f5a516ac5c5587a1abd043bf1039c71cde1166aa4328c8baf", + "https://deno.land/std@0.200.0/media_types/get_charset.ts": "18b88274796fda5d353806bf409eb1d2ddb3f004eb4bd311662c4cdd8ac173db", + "https://deno.land/std@0.200.0/media_types/mod.ts": "d3f0b99f85053bc0b98ecc24eaa3546dfa09b856dc0bbaf60d8956d2cdd710c8", + "https://deno.land/std@0.200.0/media_types/parse_media_type.ts": "8cb0144385c555c9ce81881b7cee3fbb746f23b4af988fecdb7bd01ef8cc35b1", + "https://deno.land/std@0.200.0/media_types/type_by_extension.ts": "daa801eb0f11cdf199445d0f1b656cf116d47dcf9e5b85cc1e6b4469f5ee0432", + "https://deno.land/std@0.200.0/media_types/vendor/mime-db.v1.52.0.ts": "6925bbcae81ca37241e3f55908d0505724358cda3384eaea707773b2c7e99586", + "https://deno.land/std@0.200.0/path/_basename.ts": "057d420c9049821f983f784fd87fa73ac471901fb628920b67972b0f44319343", + "https://deno.land/std@0.200.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", + "https://deno.land/std@0.200.0/path/_dirname.ts": "355e297236b2218600aee7a5301b937204c62e12da9db4b0b044993d9e658395", + "https://deno.land/std@0.200.0/path/_extname.ts": "eaaa5aae1acf1f03254d681bd6a8ce42a9cb5b7ff2213a9d4740e8ab31283664", + "https://deno.land/std@0.200.0/path/_format.ts": "4a99270d6810f082e614309164fad75d6f1a483b68eed97c830a506cc589f8b4", + "https://deno.land/std@0.200.0/path/_from_file_url.ts": "7e4e5626089785adddb061f1b9f4932d6b21c7df778e7449531a11e32048245c", + "https://deno.land/std@0.200.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", + "https://deno.land/std@0.200.0/path/_is_absolute.ts": "05dac10b5e93c63198b92e3687baa2be178df5321c527dc555266c0f4f51558c", + "https://deno.land/std@0.200.0/path/_join.ts": "fd78555bc34d5f188918fc7018dfe8fe2df5bbad94a3b30a433666c03934d77f", + "https://deno.land/std@0.200.0/path/_normalize.ts": "a19ec8706b2707f9dd974662a5cd89fad438e62ab1857e08b314a8eb49a34d81", + "https://deno.land/std@0.200.0/path/_parse.ts": "0f9b0ff43682dd9964eb1c4398610c4e165d8db9d3ac9d594220217adf480cfa", + "https://deno.land/std@0.200.0/path/_relative.ts": "27bdeffb5311a47d85be26d37ad1969979359f7636c5cd9fcf05dcd0d5099dc5", + "https://deno.land/std@0.200.0/path/_resolve.ts": "7a3616f1093735ed327e758313b79c3c04ea921808ca5f19ddf240cb68d0adf6", + "https://deno.land/std@0.200.0/path/_to_file_url.ts": "739bfda583598790b2e77ce227f2bb618f6ebdb939788cea47555b43970ec58c", + "https://deno.land/std@0.200.0/path/_to_namespaced_path.ts": "0d5f4caa2ed98ef7a8786286df6af804b50e38859ae897b5b5b4c8c5930a75c8", + "https://deno.land/std@0.200.0/path/_util.ts": "4e191b1bac6b3bf0c31aab42e5ca2e01a86ab5a0d2e08b75acf8585047a86221", + "https://deno.land/std@0.200.0/path/basename.ts": "6f08fbb90dbfcf320765b3abb01f995b1723f75e2534acfd5380e202c802a3aa", + "https://deno.land/std@0.200.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", + "https://deno.land/std@0.200.0/path/dirname.ts": "098996822a31b4c46e1eb52a19540d3c6f9f54b772fc8a197939eeabc29fca2f", + "https://deno.land/std@0.200.0/path/extname.ts": "9b83c62fd16505739541f7a3ab447d8972da39dbf668d47af2f93206c2480893", + "https://deno.land/std@0.200.0/path/format.ts": "cb22f95cc7853d590b87708cc9441785e760d711188facff3d225305a8213aca", + "https://deno.land/std@0.200.0/path/from_file_url.ts": "a6221cfc928928ec4d9786d767dfac98fa2ab746af0786446c9834a07b98817e", + "https://deno.land/std@0.200.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", + "https://deno.land/std@0.200.0/path/is_absolute.ts": "6b3d36352eb7fa29edb53f9e7b09b1aeb022a3c5465764f6cc5b8c41f9736197", + "https://deno.land/std@0.200.0/path/join.ts": "4a2867ff2f3c81ffc9eb3d56dade16db6f8bd3854f269306d23dad4115089c84", + "https://deno.land/std@0.200.0/path/mod.ts": "7765507696cb321994cdacfc19ee3ba61e8e3ebf4bd98fa75a276cf5dc18ce2a", + "https://deno.land/std@0.200.0/path/normalize.ts": "7d992cd262b2deefa842d93a8ba2ed51f3949ba595b1d07f627ac2cddbc74808", + "https://deno.land/std@0.200.0/path/parse.ts": "031fe488b3497fb8312fc1dc3c3d6c2d80707edd9c661e18ee9fd20f95edf322", + "https://deno.land/std@0.200.0/path/posix.ts": "0a1c1952d132323a88736d03e92bd236f3ed5f9f079e5823fae07c8d978ee61b", + "https://deno.land/std@0.200.0/path/relative.ts": "7db80c5035016174267da16321a742d76e875215c317859a383b12f413c6f5d6", + "https://deno.land/std@0.200.0/path/resolve.ts": "103b62207726a27f28177f397008545804ecb20aaf00623af1f622b18cd80b9f", + "https://deno.land/std@0.200.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", + "https://deno.land/std@0.200.0/path/to_file_url.ts": "dd32f7a01bbf3b15b5df46796659984b372973d9b2d7d59bcf0eb990763a0cb5", + "https://deno.land/std@0.200.0/path/to_namespaced_path.ts": "4e643ab729bf49ccdc166ad48d2de262ff462938fcf2a44a4425588f4a0bd690", + "https://deno.land/std@0.200.0/path/win32.ts": "8b3f80ef7a462511d5e8020ff490edcaa0a0d118f1b1e9da50e2916bdd73f9dd", + "https://deno.land/std@0.200.0/streams/_common.ts": "f45cba84f0d813de3326466095539602364a9ba521f804cc758f7a475cda692d", + "https://deno.land/std@0.200.0/streams/buffer.ts": "6cd773d22cf21bb988a98cc551b5abfc4c3b03516f93eaa3fb6f2f6e16032deb", + "https://deno.land/std@0.200.0/streams/byte_slice_stream.ts": "c46d7c74836fc8c1a9acd9fe211cbe1bbaaee1b36087c834fb03af4991135c3a", + "https://deno.land/std@0.200.0/streams/copy.ts": "75cbc795ff89291df22ddca5252de88b2e16d40c85d02840593386a8a1454f71", + "https://deno.land/std@0.200.0/streams/delimiter_stream.ts": "f69e849b3d1f59f02424497273f411105a6f76a9f13da92aeeb9a2d554236814", + "https://deno.land/std@0.200.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1", + "https://deno.land/std@0.200.0/streams/iterate_reader.ts": "bbec1d45c2df2c0c5920bad0549351446fdc8e0886d99e95959b259dbcdb6072", + "https://deno.land/std@0.200.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048", + "https://deno.land/std@0.200.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38", + "https://deno.land/std@0.200.0/streams/merge_readable_streams.ts": "dc2db0cbf1b14d999aa2aa2a2a1ba24ce58953878f29845ed9319321d0a01fab", + "https://deno.land/std@0.200.0/streams/mod.ts": "c07ec010e700b9ea887dc36ca08729828bc7912f711e4054e24d33fd46282252", + "https://deno.land/std@0.200.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be", + "https://deno.land/std@0.200.0/streams/readable_stream_from_iterable.ts": "a355e97ba8671a4611ae9671c1f33c4a7e6a1b42fbdc9a399338ac3d6f875364", + "https://deno.land/std@0.200.0/streams/readable_stream_from_reader.ts": "bfc416c4576a30aac6b9af22c9dc292c20c6742141ee7c55b5e85460beb0c54e", + "https://deno.land/std@0.200.0/streams/reader_from_iterable.ts": "55f68110dce3f8f2c87b834d95f153bc904257fc65175f9f2abe78455cb8047c", + "https://deno.land/std@0.200.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73", + "https://deno.land/std@0.200.0/streams/text_delimiter_stream.ts": "20e680ab8b751390e359288ce764f9c47d164af11a263870746eeca4bc7d976b", + "https://deno.land/std@0.200.0/streams/text_line_stream.ts": "0f2c4b33a5fdb2476f2e060974cba1347cefe99a4af33c28a57524b1a34750fa", + "https://deno.land/std@0.200.0/streams/to_transform_stream.ts": "89fd367cafb3b6d80d61e2f4f1fcf66cc75723ecee8d474b495f022264ec6c3b", + "https://deno.land/std@0.200.0/streams/writable_stream_from_writer.ts": "56fff5c82fb736fdd669b567cc0b2bbbe0351002cd13254eae26c366e2bed89a", + "https://deno.land/std@0.200.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998", + "https://deno.land/std@0.200.0/streams/writer_from_stream_writer.ts": "07c7ee025151a190f37fc42cbb01ff93afc949119ebddc6e0d0df14df1bf6950", + "https://deno.land/std@0.200.0/streams/zip_readable_streams.ts": "a9d81aa451240f79230add674809dbee038d93aabe286e2d9671e66591fc86ca", + "https://deno.land/std@0.205.0/http/status.ts": "1353e82e27996ef123dc625e5fcc9d66b94d92e5175879fa5e9f0dc39330206a", "https://deno.land/std@0.97.0/fmt/colors.ts": "db22b314a2ae9430ae7460ce005e0a7130e23ae1c999157e3bb77cf55800f7e4", "https://deno.land/std@0.97.0/testing/_diff.ts": "961eaf6d9f5b0a8556c9d835bbc6fa74f5addd7d3b02728ba7936ff93364f7a3", "https://deno.land/std@0.97.0/testing/asserts.ts": "341292d12eebc44be4c3c2ca101ba8b6b5859cef2fa69d50c217f9d0bfbcfd1f", @@ -99,8 +217,35 @@ "https://deno.land/x/expect@v0.4.0/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", "https://deno.land/x/graphql_tag@0.1.2/deps.ts": "5696461c8bb42db7c83486db452e125f7cfdc62a2c628bb470a4447d934b90b3", "https://deno.land/x/graphql_tag@0.1.2/mod.ts": "57fd56de5f7cbc66e23ce896cc8e99521d286e89969d83e09d960642b0a9d652", + "https://deno.land/x/oak@v12.6.1/application.ts": "3028d3f6fa5ee743de013881550d054372c11d83c45099c2d794033786d27008", + "https://deno.land/x/oak@v12.6.1/body.ts": "1899761b97fc9d776f3710b2637fb047ba29b968609afc6c0e5219b1108e703c", + "https://deno.land/x/oak@v12.6.1/buf_reader.ts": "26640736541598dbd9f2b84a9d0595756afff03c9ca55b66eef1911f7798b56d", + "https://deno.land/x/oak@v12.6.1/content_disposition.ts": "8b8c3cb2fba7138cd5b7f82fc3b5ea39b33db924a824b28261659db7e164621e", + "https://deno.land/x/oak@v12.6.1/context.ts": "895a2d40186b89c28ba3947bf08a9335f1a11fc33133f760082536b74c53d1ca", + "https://deno.land/x/oak@v12.6.1/deps.ts": "267ef76c25592101fe1f6c6d7730664015a9179c974da4f7441297d9367a9514", + "https://deno.land/x/oak@v12.6.1/etag.ts": "32e47726b41698aefdd71faac5aaf2907c9bdd41ef18a7693863be4f8fee115d", + "https://deno.land/x/oak@v12.6.1/forwarded.ts": "e656f96a85574e2a6ee54dc35efc9f72d543c9ae0923760ef426ee7369eef01c", + "https://deno.land/x/oak@v12.6.1/headers.ts": "769fd042d34fbcd5667cbd745b5c65d335cc8430e822dbf1f87d65313cab4b47", + "https://deno.land/x/oak@v12.6.1/helpers.ts": "6b03c6a2be06ec775d54449e442a2bac234aa952948ca758356eab6dc87af618", + "https://deno.land/x/oak@v12.6.1/http_server_native.ts": "98e12c50a959553cfc144bc00999c969fa69ca781cbd96bec563f55691ab82db", + "https://deno.land/x/oak@v12.6.1/http_server_native_request.ts": "552b174b5e13e92de8897d5b6f716b1e5a53543115481d65a651a41e4ca29ec9", + "https://deno.land/x/oak@v12.6.1/isMediaType.ts": "62d638abcf837ece3a8f07a4b7ca59794135cb0d4b73194c7d5837efd4161005", + "https://deno.land/x/oak@v12.6.1/mediaTyper.ts": "042b853fc8e9c3f6c628dd389e03ef481552bf07242efc3f8a1af042102a6105", + "https://deno.land/x/oak@v12.6.1/middleware.ts": "c7f7a0424a6dd99a00e4b8d7d6e131efc0facc8dea781845d713b63df8ef1862", + "https://deno.land/x/oak@v12.6.1/middleware/proxy.ts": "6f2799cf60d926e7a8d13ff757a59d7f0f930407db7ee9b81e7c064138eb89ff", + "https://deno.land/x/oak@v12.6.1/mod.ts": "f6aa47ad1b6099470c9a884cccad9d3ac0fd242ba940896291ab76cd26cf554b", + "https://deno.land/x/oak@v12.6.1/multipart.ts": "1484e01b98f5135f2aa09f7d0ce1e7be39109bf9f045ac660e941619d04e3d29", + "https://deno.land/x/oak@v12.6.1/range.ts": "1ca15fc1ac21c650c34e6997a75af2af9d9d8eb6fe2d5d1dadeac3dfd4a9c152", + "https://deno.land/x/oak@v12.6.1/request.ts": "32409827e285ee65889b22bbaaea5d6b280258124c2e9a4f724baa8e6d6375b7", + "https://deno.land/x/oak@v12.6.1/response.ts": "094d950a5158f5b3446ca8a7b6e975dd23afb42b38c38517cc2f41dc75b16b4c", + "https://deno.land/x/oak@v12.6.1/router.ts": "0f53d6249f9e8f89f2522b2b810b9302d0f22593c184b16b24b03bf2b7d42ea1", + "https://deno.land/x/oak@v12.6.1/send.ts": "5ec49f106294593f468317a0c885da4f3274bf6d0fe9e16a7304391730b4f4fb", + "https://deno.land/x/oak@v12.6.1/structured_clone.ts": "c3888b14d1eec558345bfbf13d0993d59bd45aaa8588444e35dd558c3a921cd8", + "https://deno.land/x/oak@v12.6.1/testing.ts": "37d684d57bb8e5150fb5eb2677e66b04dcb422709cf2c5a74c1df94d52aa02e2", + "https://deno.land/x/oak@v12.6.1/util.ts": "0a3fdffb114859c2de84e1783efa3a544af4d2af8c6f08e0d25655de9d3e69bb", "https://deno.land/x/opine@2.1.2/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", "https://deno.land/x/opine@2.1.2/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", + "https://deno.land/x/path_to_regexp@v6.2.1/index.ts": "894060567837bae8fc9c5cbd4d0a05e9024672083d5883b525c031eea940e556", "https://deno.land/x/superdeno@4.8.0/deps.ts": "e2cf96d1129c38e1daf87a405878fa51d5771a0ba9b1c250baa75db0a8cb99df", "https://deno.land/x/superdeno@4.8.0/mod.ts?target=deno": "fa91c501867a4302a4bc92d63cbf934fe5475ebb7bf58335338e001147263c87", "https://deno.land/x/superdeno@4.8.0/src/close.ts": "8bd4ab602ebbb048d06697d0c48c30be5f78ab9ad673850965e8014d78cca7a8", diff --git a/deps.ts b/deps.ts index 6b9f1b4..5845170 100644 --- a/deps.ts +++ b/deps.ts @@ -7,7 +7,12 @@ export { export { createHandler, type HandlerOptions, + type OperationContext, parseRequestParams as rawParseRequestParams, type Request as RawRequest, type RequestParams, } from 'npm:graphql-http@1.22.0' +export { + Status, + STATUS_TEXT, +} from 'https://deno.land/std@0.205.0/http/status.ts' diff --git a/examples/oak.ts b/examples/oak.ts index c2188ff..3dfe570 100644 --- a/examples/oak.ts +++ b/examples/oak.ts @@ -1,6 +1,7 @@ import { Application, Middleware, + Request as OakRequest, Router, } from 'https://deno.land/x/oak@v12.6.1/mod.ts' import { GraphQLHTTP } from '../mod.ts' @@ -15,19 +16,13 @@ const typeDefs = gql` const resolvers = { Query: { - hello: (_root: undefined, _args: unknown, ctx: { request: Request }) => { - return `Hello World! from ${ctx.request.url}` + hello: (_root: undefined, _args: unknown, ctx: { request: OakRequest }) => { + return `Hello from ${ctx.request.url}` }, }, } -const schema = makeExecutableSchema({ resolvers, typeDefs }) - -const resolve = GraphQLHTTP({ - schema, - graphiql: true, - context: (request) => ({ request }), -}) +const schema = makeExecutableSchema({ typeDefs, resolvers }) const handleGraphQL: Middleware = async (ctx) => { // cast Oak request into a normal Request @@ -37,7 +32,11 @@ const handleGraphQL: Middleware = async (ctx) => { method: ctx.request.method, }) - const res = await resolve(req) + const res = await GraphQLHTTP({ + schema, + graphiql: true, + context: () => ({ request: ctx.request }), + })(req) for (const [k, v] of res.headers.entries()) ctx.response.headers.append(k, v) @@ -45,16 +44,9 @@ const handleGraphQL: Middleware = async (ctx) => { ctx.response.body = res.body } -// Allow CORS: -// const cors: Middleware = (ctx) => { -// ctx.response.headers.append('access-control-allow-origin', '*') -// ctx.response.headers.append('access-control-allow-headers', 'Origin, Host, Content-Type, Accept') -// } - const graphqlRouter = new Router().all('/graphql', handleGraphQL) const app = new Application().use( - // cors, graphqlRouter.routes(), graphqlRouter.allowedMethods(), ) diff --git a/examples/opine.ts b/examples/opine.ts deleted file mode 100644 index 9e43e82..0000000 --- a/examples/opine.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { opine, OpineRequest } from 'https://deno.land/x/opine@2.3.4/mod.ts' -import { GraphQLHTTP } from '../mod.ts' -import { makeExecutableSchema } from 'npm:@graphql-tools/schema@10.0.0' -import { gql } from 'https://deno.land/x/graphql_tag@0.1.2/mod.ts' -import { readAll } from 'https://deno.land/std@0.205.0/streams/read_all.ts' -import type { GraphQLParams } from '../types.ts' - -type Request = OpineRequest & { json: () => Promise } - -const typeDefs = gql` - type Query { - hello: String - } -` - -const resolvers = { - Query: { - hello: ( - _root: undefined, - _args: unknown, - ctx: { request: Request }, - info: { fieldName: string }, - ) => { - return `Hello World from ${ctx.request.originalUrl}!. You have called ${info.fieldName}` - }, - }, -} - -const dec = new TextDecoder() - -const schema = makeExecutableSchema({ resolvers, typeDefs }) - -const app = opine() - -app - .use('/graphql', async (req, res) => { - const request = req as Request - - request.json = async () => { - const rawBody = await readAll(req.raw) - return JSON.parse(dec.decode(rawBody)) - } - - const resp = await GraphQLHTTP({ - schema, - context: (request) => ({ request }), - graphiql: true, - })(request) - - for (const [k, v] of resp.headers.entries()) res.headers?.append(k, v) - - res.status = resp.status - - res.send(await resp.text()) - }) - .listen(3000, () => console.log(`☁ Started on http://localhost:3000`)) diff --git a/mod.ts b/mod.ts index 09de227..6a2a76d 100644 --- a/mod.ts +++ b/mod.ts @@ -1,44 +1,47 @@ -import { createHandler, RawRequest } from './deps.ts' +import { + createHandler, + OperationContext, + RawRequest, + Status, + STATUS_TEXT, +} from './deps.ts' import { GQLOptions } from './types.ts' -function toRequest( - req: Request, -): RawRequest { +function toRequest( + req: Pick, + context: Ctx, +): RawRequest { return { method: req.method, url: req.url, headers: req.headers, body: () => req.text(), raw: req as Req, - context: {}, + context, } } -export function GraphQLHTTP( - { schema, context, headers = {}, graphiql, playgroundOptions, ...options }: - GQLOptions, +export function GraphQLHTTP< + Req = Request, + Context extends OperationContext = { request: Req }, + ReqCtx extends { request: Req } = { request: Req }, +>( + { + headers = {}, + graphiql, + playgroundOptions = {}, + ...options + }: GQLOptions, + reqCtx?: (req: Req) => ReqCtx, ) { - const handler = createHandler({ - schema, - context, - ...options, - }) + const handler = createHandler(options) return async function handleRequest(req: Request): Promise { try { const accept = req.headers.get('Accept') || '' - const typeList = ['text/html', 'text/plain', 'application/json', '*/*'] - .map((contentType) => ({ - contentType, - index: accept.indexOf(contentType), - })) - .filter(({ index }) => index >= 0) - .sort((a, b) => a.index - b.index) - .map(({ contentType }) => contentType) - if ( - req.method === 'GET' && graphiql && typeList[0] === 'text/html' + req.method === 'GET' && graphiql && accept.split(';')[0] === 'text/html' ) { const urlQuery = req.url.substring(req.url.indexOf('?')) const queryParams = new URLSearchParams(urlQuery) @@ -58,21 +61,24 @@ export function GraphQLHTTP( }) } } - const [body, init] = await handler(toRequest(req)) + const [body, init] = await handler( + toRequest( + req, + reqCtx ? reqCtx(req as Req) : { request: req } as ReqCtx, + ), + ) - return new Response(body, { + return new Response(body || STATUS_TEXT[init.status as Status], { ...init, headers: new Headers({ ...init.headers, ...headers }), }) } catch (e) { - console.error(e) - return new Response( - 'Malformed Request ' + (req.method === 'GET' ? 'Query' : 'Body'), - { - status: 400, - headers: new Headers(headers), - }, + console.error( + 'Internal error occurred during request handling. ' + + 'Please check your implementation.', + e, ) + return new Response(null, { status: 500 }) } } } diff --git a/mod_test.ts b/mod_test.ts index 58fa72a..75ded94 100644 --- a/mod_test.ts +++ b/mod_test.ts @@ -1,18 +1,17 @@ import { superdeno } from 'https://deno.land/x/superdeno@4.8.0/mod.ts?target=deno' +import { describe, it, run } from 'https://deno.land/x/tincan@1.0.2/mod.ts' import { - describe, - expect, - it, - run, -} from 'https://deno.land/x/tincan@1.0.2/mod.ts' -import type { GraphQLResolveInfo } from 'npm:graphql@16.6/type' -import { buildSchema } from 'npm:graphql@16.6' + buildSchema, + GraphQLObjectType, + GraphQLSchema, + GraphQLString, +} from 'npm:graphql@16.6' import { GraphQLHTTP } from './mod.ts' const schema = buildSchema(` -type Query { - hello: String -} + type Query { + hello: String + } `) const rootValue = { @@ -25,27 +24,31 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { it('should send 400 on malformed request query', async () => { const request = superdeno(app) - await request.get('/').expect(400, 'Malformed Request Query') + await request.get('/').expect(400, { + 'errors': [{ 'message': 'Missing query' }], + }) }) - it('should send 400 on malformed request body', async () => { + it('should send unsupported media type on empty request body', async () => { const request = superdeno(app) - await request.post('/').expect(400, 'Malformed Request Body') + await request.post('/').expect(415) }) it('should send resolved POST GraphQL query', async () => { const request = superdeno(app) await request .post('/') - .send('{ "query": "{ hello }" }') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') + .send({ + 'query': '\n{\n hello\n}', + }) + .expect(200, { data: { hello: 'Hello World!' } }) }) it('should send resolved GET GraphQL query', async () => { const request = superdeno(app) await request.get('/?query={hello}').expect( 200, - '{\n "data": {\n "hello": "Hello World!"\n }\n}', + { data: { hello: 'Hello World!' } }, ) }) it('should send resolved GET GraphQL query when Accept is application/json', async () => { @@ -54,8 +57,8 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request .get('/?query={hello}') .set('Accept', 'application/json') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') - .expect('Content-Type', 'application/json') + .expect(200, { data: { hello: 'Hello World!' } }) + .expect('Content-Type', 'application/json; charset=utf-8') }) it('should send resolved GET GraphQL query when Accept is */*', async () => { const request = superdeno(app) @@ -63,18 +66,8 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request .get('/?query={hello}') .set('Accept', '*/*') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') - .expect('Content-Type', 'application/json') - }) - - it('should send resolved GET GraphQL query when Accept is text/plain', async () => { - const request = superdeno(app) - - await request - .get('/?query={hello}') - .set('Accept', 'text/plain') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') - .expect('Content-Type', 'text/plain') + .expect(200, { data: { hello: 'Hello World!' } }) + .expect('Content-Type', 'application/json; charset=utf-8') }) it('should send 406 not acceptable when Accept is other (text/html)', async () => { const request = superdeno(app) @@ -96,26 +89,31 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { type Context = { request: Request } const app = GraphQLHTTP({ - schema, - fieldResolver: ( - _: any, - __: any, - { request: { url } }: Context, - info: any, - ) => { - if (info.fieldName === 'hello') { - return `Request from ${url.slice(url.lastIndexOf('/'))}` - } - }, - context: (request) => ({ request }), + schema: new GraphQLSchema({ + query: new GraphQLObjectType({ + name: 'Query', + fields: { + 'hello': { + type: GraphQLString, + resolve: (_root, _args, { request: { url } }: Context) => + `Request from ${url.slice(url.lastIndexOf('/'))}`, + }, + }, + }), + }), + context: (req) => ({ request: req.raw }), }) const request = superdeno(app) await request .post('/') - .send('{ "query": "{ hello }" }') - .expect(200, '{\n "data": {\n "hello": "Request from /"\n }\n}') + .send({ + 'query': '\n{\n hello\n}', + 'variables': {}, + 'operationName': null, + }) + .expect(200, { data: { hello: 'Request from /' } }) }) describe('graphiql', () => { @@ -126,7 +124,7 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request.get('/?query={hello}').expect( 200, - '{\n "data": {\n "hello": "Hello World!"\n }\n}', + { data: { hello: 'Hello World!' } }, ) }) it('should allow query GET requests when set to true', async () => { @@ -136,7 +134,7 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request.get('/?query={hello}').expect( 200, - '{\n "data": {\n "hello": "Hello World!"\n }\n}', + { data: { hello: 'Hello World!' } }, ) }) it('should send 406 when Accept is only text/html when set to false', async () => { @@ -242,8 +240,12 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request .post('/') - .send('{ "query": "{ hello }" }') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') + .send({ + 'query': '\n{\n hello\n}', + 'variables': {}, + 'operationName': null, + }) + .expect(200, { data: { hello: 'Hello World!' } }) .expect('Key', 'Value') }) it('does not error with empty header object', async () => { @@ -253,8 +255,12 @@ describe('GraphQLHTTP({ schema, rootValue })', () => { await request .post('/') - .send('{ "query": "{ hello }" }') - .expect(200, '{\n "data": {\n "hello": "Hello World!"\n }\n}') + .send({ + 'query': '\n{\n hello\n}', + 'variables': {}, + 'operationName': null, + }) + .expect(200, { data: { hello: 'Hello World!' } }) }) }) }) diff --git a/types.ts b/types.ts index da93fe2..6b8efcd 100644 --- a/types.ts +++ b/types.ts @@ -1,11 +1,14 @@ -import type { HandlerOptions } from './deps.ts' +import type { HandlerOptions, OperationContext } from './deps.ts' import type { RenderPageOptions } from './graphiql/render.ts' /** * gql options */ -export interface GQLOptions - extends HandlerOptions { +export interface GQLOptions< + Req = Request, + ReqCtx = unknown, + Context extends OperationContext = OperationContext, +> extends HandlerOptions { /** * GraphQL playground */ From a85ad2ee1eb1aa3ca59e6d53acbc333164f202a1 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Wed, 8 Nov 2023 16:27:30 +0200 Subject: [PATCH 04/15] add audit to fix issues --- README.md | 12 ++++-------- audit_test.ts | 22 ++++++++++++++++++++++ deno.lock | 1 + 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 audit_test.ts diff --git a/README.md b/README.md index 4cf13bf..f5f25f3 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,12 @@ # gql -> I'm building [Stauro](https://flash-dev.vercel.app) - a service to deploy web apps on the new decentralized stack. -> -> If you'd like to try or collab, [dm](https://t.me/v_1rtl) or [email](mailto:yo@v1rtl.site) - -Universal [GraphQL](https://www.graphql.com/) HTTP middleware for Deno. +Universal [GraphQL](https://www.graphql.com/) HTTP middleware for Deno. Based on +[graphql-http](https://github.com/graphql/graphql-http). ## Features -- ✨ Works with `Deno.serve`, [Opine](https://github.com/asos-craigmorten/opine) - and [oak](https://github.com/oakserver/oak) +- ✨ Works with `Deno.serve` and [oak](https://github.com/oakserver/oak) - ⚡ [GraphQL Playground](https://github.com/graphql/graphql-playground/tree/master/packages/graphql-playground-html) integration (via `graphiql: true`) @@ -67,7 +63,7 @@ Deno.serve({ Then run: ```sh -$ curl -X POST localhost:3000/graphql -d '{ "query": "{ hello }" }' +$ curl -X POST localhost:3000/graphql -d '{ "query": "{ hello }" }' -H "Content-Type: application/json" { "data": { "hello": "Hello World!" diff --git a/audit_test.ts b/audit_test.ts new file mode 100644 index 0000000..63a5990 --- /dev/null +++ b/audit_test.ts @@ -0,0 +1,22 @@ +import { serverAudits } from 'npm:graphql-http' + +for ( + const audit of serverAudits({ + url: 'http://localhost:3000/graphql', + fetchFn: fetch, + }) +) { + Deno.test(audit.name, async () => { + const result = await audit.fn() + if (result.status === 'error') { + throw result.reason + } + if (result.status === 'warn') { + console.warn(result.reason) // or throw if you want full compliance (warnings are not requirements) + } + // Avoid leaking resources + if ('body' in result && result.body instanceof ReadableStream) { + await result.body.cancel() + } + }) +} diff --git a/deno.lock b/deno.lock index e85c12f..fe11c81 100644 --- a/deno.lock +++ b/deno.lock @@ -3,6 +3,7 @@ "packages": { "specifiers": { "npm:@graphql-tools/schema@10.0.0": "npm:@graphql-tools/schema@10.0.0_graphql@16.6.0", + "npm:graphql-http": "npm:graphql-http@1.22.0_graphql@16.6.0", "npm:graphql-http@1.22.0": "npm:graphql-http@1.22.0_graphql@16.6.0", "npm:graphql@16.6": "npm:graphql@16.6.0" }, From 3d0139093de81e7db01439f023c7932bb956f75e Mon Sep 17 00:00:00 2001 From: v1rtl Date: Wed, 8 Nov 2023 23:57:40 +0200 Subject: [PATCH 05/15] fix audit tests failing and remove uneeded args in ci --- .github/workflows/main.yml | 2 +- audit_test.ts | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 58ceaac..d609a51 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,7 +17,7 @@ jobs: with: deno-version: v1.x - name: Run tests - run: deno test -A --location "http://127.0.0.1" --coverage=coverage + run: deno test --allow-net --coverage=coverage - name: Create coverage report run: deno coverage ./coverage --lcov > coverage.lcov - name: Coveralls diff --git a/audit_test.ts b/audit_test.ts index 63a5990..1fbb395 100644 --- a/audit_test.ts +++ b/audit_test.ts @@ -1,12 +1,11 @@ -import { serverAudits } from 'npm:graphql-http' +import { serverAudits } from 'npm:graphql-http@1.22.0' for ( const audit of serverAudits({ url: 'http://localhost:3000/graphql', - fetchFn: fetch, }) ) { - Deno.test(audit.name, async () => { + Deno.test(audit.name, { sanitizeResources: false }, async () => { const result = await audit.fn() if (result.status === 'error') { throw result.reason From ae2d88bd4165505e4905ffd323d102042e8f597b Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 00:00:17 +0200 Subject: [PATCH 06/15] bump graphql version --- deno.lock | 211 ++---------------------------------------------------- deps.ts | 2 +- 2 files changed, 5 insertions(+), 208 deletions(-) diff --git a/deno.lock b/deno.lock index fe11c81..7650094 100644 --- a/deno.lock +++ b/deno.lock @@ -2,56 +2,11 @@ "version": "3", "packages": { "specifiers": { - "npm:@graphql-tools/schema@10.0.0": "npm:@graphql-tools/schema@10.0.0_graphql@16.6.0", - "npm:graphql-http": "npm:graphql-http@1.22.0_graphql@16.6.0", "npm:graphql-http@1.22.0": "npm:graphql-http@1.22.0_graphql@16.6.0", - "npm:graphql@16.6": "npm:graphql@16.6.0" + "npm:graphql@16.6": "npm:graphql@16.6.0", + "npm:graphql@16.8.1": "npm:graphql@16.8.1" }, "npm": { - "@graphql-tools/merge@9.0.0_graphql@16.6.0": { - "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", - "dependencies": { - "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.2" - } - }, - "@graphql-tools/schema@10.0.0_graphql@16.6.0": { - "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", - "dependencies": { - "@graphql-tools/merge": "@graphql-tools/merge@9.0.0_graphql@16.6.0", - "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.2", - "value-or-promise": "value-or-promise@1.0.12" - } - }, - "@graphql-tools/utils@10.0.8_graphql@16.6.0": { - "integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==", - "dependencies": { - "@graphql-typed-document-node/core": "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0", - "cross-inspect": "cross-inspect@1.0.0", - "dset": "dset@3.1.3", - "graphql": "graphql@16.6.0", - "tslib": "tslib@2.6.2" - } - }, - "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0": { - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "dependencies": { - "graphql": "graphql@16.6.0" - } - }, - "cross-inspect@1.0.0": { - "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", - "dependencies": { - "tslib": "tslib@2.6.2" - } - }, - "dset@3.1.3": { - "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", - "dependencies": {} - }, "graphql-http@1.22.0_graphql@16.6.0": { "integrity": "sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==", "dependencies": { @@ -62,19 +17,12 @@ "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==", "dependencies": {} }, - "tslib@2.6.2": { - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dependencies": {} - }, - "value-or-promise@1.0.12": { - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "graphql@16.8.1": { + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "dependencies": {} } } }, - "redirects": { - "https://esm.sh/graphql-http": "https://esm.sh/graphql-http@1.22.0" - }, "remote": { "https://deno.land/std@0.129.0/async/abortable.ts": "a896ac6b0d4237bd2d2d248217cfa1f0d85ccda93cb25ebda55e33850e526be6", "https://deno.land/std@0.129.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0", @@ -91,123 +39,6 @@ "https://deno.land/std@0.129.0/testing/_diff.ts": "9d849cd6877694152e01775b2d93f9d6b7aef7e24bfe3bfafc4d7a1ac8e9f392", "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", "https://deno.land/std@0.197.0/fmt/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", - "https://deno.land/std@0.200.0/_util/os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3", - "https://deno.land/std@0.200.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", - "https://deno.land/std@0.200.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", - "https://deno.land/std@0.200.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8", - "https://deno.land/std@0.200.0/bytes/bytes_list.ts": "31d664f4d42fa922066405d0e421c56da89d751886ee77bbe25a88bf0310c9d0", - "https://deno.land/std@0.200.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2", - "https://deno.land/std@0.200.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219", - "https://deno.land/std@0.200.0/bytes/ends_with.ts": "4228811ebc71615d27f065c54b5e815ec1972538772b0f413c0efe05245b472e", - "https://deno.land/std@0.200.0/bytes/equals.ts": "fc190cce412b2136979181b163ec7e05f7e7a947e39102eee4b8c0d62519ddf9", - "https://deno.land/std@0.200.0/bytes/includes_needle.ts": "76a8163126fb2f8bf86fd7f22192c3bb04bf6a20b987a095127c2ca08adf3ba6", - "https://deno.land/std@0.200.0/bytes/index_of_needle.ts": "9c06610e9611b5647ac25952e71a22e09227c9f1b8cbeeb33399bf8bf8a7f649", - "https://deno.land/std@0.200.0/bytes/last_index_of_needle.ts": "f1602f221c3b678bc4f1e1c88a70a15ab7da32c21751dbbc6c957c956951d784", - "https://deno.land/std@0.200.0/bytes/mod.ts": "e869bba1e7a2e3a9cc6c2d55471888429a544e70a840c087672e656e7ba21815", - "https://deno.land/std@0.200.0/bytes/repeat.ts": "6f5e490d8d72bcbf8d84a6bb04690b9b3eb5822c5a11687bca73a2318a842294", - "https://deno.land/std@0.200.0/bytes/starts_with.ts": "3e607a70c9c09f5140b7a7f17a695221abcc7244d20af3eb47ccbb63f5885135", - "https://deno.land/std@0.200.0/crypto/keystack.ts": "877ab0f19eb7d37ad6495190d3c3e39f58e9c52e0b6a966f82fd6df67ca55f90", - "https://deno.land/std@0.200.0/crypto/timing_safe_equal.ts": "7b0a4d2ef1c17590e0ad6c0cb1776369d2ba80cd99e945005e117851690507fe", - "https://deno.land/std@0.200.0/encoding/base64.ts": "144ae6234c1fbe5b68666c711dc15b1e9ee2aef6d42b3b4345bf9a6c91d70d0d", - "https://deno.land/std@0.200.0/encoding/base64url.ts": "2ed4ba122b20fedf226c5d337cf22ee2024fa73a8f85d915d442af7e9ce1fae1", - "https://deno.land/std@0.200.0/http/_negotiation/common.ts": "14d1a52427ab258a4b7161cd80e1d8a207b7cc64b46e911780f57ead5f4323c6", - "https://deno.land/std@0.200.0/http/_negotiation/encoding.ts": "ff747d107277c88cb7a6a62a08eeb8d56dad91564cbcccb30694d5dc126dcc53", - "https://deno.land/std@0.200.0/http/_negotiation/language.ts": "7bcddd8db3330bdb7ce4fc00a213c5547c1968139864201efd67ef2d0d51887d", - "https://deno.land/std@0.200.0/http/_negotiation/media_type.ts": "58847517cd549384ad677c0fe89e0a4815be36fe7a303ea63cee5f6a1d7e1692", - "https://deno.land/std@0.200.0/http/cookie_map.ts": "64601025a7d24c3ebd80a169ccc99145bdbfc60606935348e1d4366d0bf9010d", - "https://deno.land/std@0.200.0/http/etag.ts": "807382795850cde5c437c74bcc09392bc0fc56de348fc1271f383f4b28935b9f", - "https://deno.land/std@0.200.0/http/http_errors.ts": "bbda34819060af86537cecc9dc8e045f877130808b7e7acde4197c5328e852d0", - "https://deno.land/std@0.200.0/http/http_status.ts": "8a7bcfe3ac025199ad804075385e57f63d055b2aed539d943ccc277616d6f932", - "https://deno.land/std@0.200.0/http/method.ts": "e66c2a015cb46c21ab0bb3589aa4fca43143a506cb324ffdfd42d2edef7bc0c4", - "https://deno.land/std@0.200.0/http/negotiation.ts": "46e74a6bad4b857333a58dc5b50fe8e5a4d5267e97292293ea65f980bd918086", - "https://deno.land/std@0.200.0/http/server_sent_event.ts": "29f707c1afa5278ac0315ac115ee679d6b93596d5af3fad5ef33f04254ca76c1", - "https://deno.land/std@0.200.0/http/user_agent.ts": "35d3c70d0926b0e121b8c1bbc324b3522479158acaa4f0c43928362b7bf4e6f4", - "https://deno.land/std@0.200.0/io/buf_reader.ts": "2bccff0878537ef201c5051fc0db0ce8196388c5ea69d2be6be1900fe48c5f4b", - "https://deno.land/std@0.200.0/io/buf_writer.ts": "48c33c8f00b61dcbc7958706741cec8e59810bd307bc6a326cbd474fe8346dfd", - "https://deno.land/std@0.200.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793", - "https://deno.land/std@0.200.0/io/copy_n.ts": "c055296297b9d4897d90d1ac056b072dc02614e60c67f438e23fbce052ea4c69", - "https://deno.land/std@0.200.0/io/limited_reader.ts": "6c9a216f8eef39c1ee2a6b37a29372c8fc63455b2eeb91f06d9646f8f759fc8b", - "https://deno.land/std@0.200.0/io/mod.ts": "2665bcccc1fd6e8627cca167c3e92aaecbd9897556b6f69e6d258070ef63fd9b", - "https://deno.land/std@0.200.0/io/multi_reader.ts": "9c2a0a31686c44b277e16da1d97b4686a986edcee48409b84be25eedbc39b271", - "https://deno.land/std@0.200.0/io/read_delim.ts": "c02b93cc546ae8caad8682ae270863e7ace6daec24c1eddd6faabc95a9d876a3", - "https://deno.land/std@0.200.0/io/read_int.ts": "7cb8bcdfaf1107586c3bacc583d11c64c060196cb070bb13ae8c2061404f911f", - "https://deno.land/std@0.200.0/io/read_lines.ts": "c526c12a20a9386dc910d500f9cdea43cba974e853397790bd146817a7eef8cc", - "https://deno.land/std@0.200.0/io/read_long.ts": "f0aaa420e3da1261c5d33c5e729f09922f3d9fa49f046258d4ff7a00d800c71e", - "https://deno.land/std@0.200.0/io/read_range.ts": "46a2263d0f8369b6d9abb0b25d99ceb65ff08d621fc57bcc53832e6979295043", - "https://deno.land/std@0.200.0/io/read_short.ts": "805cb329574b850b84bf14a92c052c59b5977a492cd780c41df8ad40826c1a20", - "https://deno.land/std@0.200.0/io/read_string_delim.ts": "5dc9f53bdf78e7d4ee1e56b9b60352238ab236a71c3e3b2a713c3d78472a53ce", - "https://deno.land/std@0.200.0/io/slice_long_to_bytes.ts": "48d9bace92684e880e46aa4a2520fc3867f9d7ce212055f76ecc11b22f9644b7", - "https://deno.land/std@0.200.0/io/string_reader.ts": "da0f68251b3d5b5112485dfd4d1b1936135c9b4d921182a7edaf47f74c25cc8f", - "https://deno.land/std@0.200.0/io/string_writer.ts": "8a03c5858c24965a54c6538bed15f32a7c72f5704a12bda56f83a40e28e5433e", - "https://deno.land/std@0.200.0/media_types/_db.ts": "7606d83e31f23ce1a7968cbaee852810c2cf477903a095696cdc62eaab7ce570", - "https://deno.land/std@0.200.0/media_types/_util.ts": "916efbd30b6148a716f110e67a4db29d6949bf4048997b754415dd7e42c52378", - "https://deno.land/std@0.200.0/media_types/content_type.ts": "ad98a5aa2d95f5965b2796072284258710a25e520952376ed432b0937ce743bc", - "https://deno.land/std@0.200.0/media_types/extension.ts": "a7cd28c9417143387cdfed27d4e8607ebcf5b1ec27eb8473d5b000144689fe65", - "https://deno.land/std@0.200.0/media_types/extensions_by_type.ts": "43806d6a52a0d6d965ada9d20e60a982feb40bc7a82268178d94edb764694fed", - "https://deno.land/std@0.200.0/media_types/format_media_type.ts": "f5e1073c05526a6f5a516ac5c5587a1abd043bf1039c71cde1166aa4328c8baf", - "https://deno.land/std@0.200.0/media_types/get_charset.ts": "18b88274796fda5d353806bf409eb1d2ddb3f004eb4bd311662c4cdd8ac173db", - "https://deno.land/std@0.200.0/media_types/mod.ts": "d3f0b99f85053bc0b98ecc24eaa3546dfa09b856dc0bbaf60d8956d2cdd710c8", - "https://deno.land/std@0.200.0/media_types/parse_media_type.ts": "8cb0144385c555c9ce81881b7cee3fbb746f23b4af988fecdb7bd01ef8cc35b1", - "https://deno.land/std@0.200.0/media_types/type_by_extension.ts": "daa801eb0f11cdf199445d0f1b656cf116d47dcf9e5b85cc1e6b4469f5ee0432", - "https://deno.land/std@0.200.0/media_types/vendor/mime-db.v1.52.0.ts": "6925bbcae81ca37241e3f55908d0505724358cda3384eaea707773b2c7e99586", - "https://deno.land/std@0.200.0/path/_basename.ts": "057d420c9049821f983f784fd87fa73ac471901fb628920b67972b0f44319343", - "https://deno.land/std@0.200.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0", - "https://deno.land/std@0.200.0/path/_dirname.ts": "355e297236b2218600aee7a5301b937204c62e12da9db4b0b044993d9e658395", - "https://deno.land/std@0.200.0/path/_extname.ts": "eaaa5aae1acf1f03254d681bd6a8ce42a9cb5b7ff2213a9d4740e8ab31283664", - "https://deno.land/std@0.200.0/path/_format.ts": "4a99270d6810f082e614309164fad75d6f1a483b68eed97c830a506cc589f8b4", - "https://deno.land/std@0.200.0/path/_from_file_url.ts": "7e4e5626089785adddb061f1b9f4932d6b21c7df778e7449531a11e32048245c", - "https://deno.land/std@0.200.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b", - "https://deno.land/std@0.200.0/path/_is_absolute.ts": "05dac10b5e93c63198b92e3687baa2be178df5321c527dc555266c0f4f51558c", - "https://deno.land/std@0.200.0/path/_join.ts": "fd78555bc34d5f188918fc7018dfe8fe2df5bbad94a3b30a433666c03934d77f", - "https://deno.land/std@0.200.0/path/_normalize.ts": "a19ec8706b2707f9dd974662a5cd89fad438e62ab1857e08b314a8eb49a34d81", - "https://deno.land/std@0.200.0/path/_parse.ts": "0f9b0ff43682dd9964eb1c4398610c4e165d8db9d3ac9d594220217adf480cfa", - "https://deno.land/std@0.200.0/path/_relative.ts": "27bdeffb5311a47d85be26d37ad1969979359f7636c5cd9fcf05dcd0d5099dc5", - "https://deno.land/std@0.200.0/path/_resolve.ts": "7a3616f1093735ed327e758313b79c3c04ea921808ca5f19ddf240cb68d0adf6", - "https://deno.land/std@0.200.0/path/_to_file_url.ts": "739bfda583598790b2e77ce227f2bb618f6ebdb939788cea47555b43970ec58c", - "https://deno.land/std@0.200.0/path/_to_namespaced_path.ts": "0d5f4caa2ed98ef7a8786286df6af804b50e38859ae897b5b5b4c8c5930a75c8", - "https://deno.land/std@0.200.0/path/_util.ts": "4e191b1bac6b3bf0c31aab42e5ca2e01a86ab5a0d2e08b75acf8585047a86221", - "https://deno.land/std@0.200.0/path/basename.ts": "6f08fbb90dbfcf320765b3abb01f995b1723f75e2534acfd5380e202c802a3aa", - "https://deno.land/std@0.200.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000", - "https://deno.land/std@0.200.0/path/dirname.ts": "098996822a31b4c46e1eb52a19540d3c6f9f54b772fc8a197939eeabc29fca2f", - "https://deno.land/std@0.200.0/path/extname.ts": "9b83c62fd16505739541f7a3ab447d8972da39dbf668d47af2f93206c2480893", - "https://deno.land/std@0.200.0/path/format.ts": "cb22f95cc7853d590b87708cc9441785e760d711188facff3d225305a8213aca", - "https://deno.land/std@0.200.0/path/from_file_url.ts": "a6221cfc928928ec4d9786d767dfac98fa2ab746af0786446c9834a07b98817e", - "https://deno.land/std@0.200.0/path/glob.ts": "d479e0a695621c94d3fd7fe7abd4f9499caf32a8de13f25073451c6ef420a4e1", - "https://deno.land/std@0.200.0/path/is_absolute.ts": "6b3d36352eb7fa29edb53f9e7b09b1aeb022a3c5465764f6cc5b8c41f9736197", - "https://deno.land/std@0.200.0/path/join.ts": "4a2867ff2f3c81ffc9eb3d56dade16db6f8bd3854f269306d23dad4115089c84", - "https://deno.land/std@0.200.0/path/mod.ts": "7765507696cb321994cdacfc19ee3ba61e8e3ebf4bd98fa75a276cf5dc18ce2a", - "https://deno.land/std@0.200.0/path/normalize.ts": "7d992cd262b2deefa842d93a8ba2ed51f3949ba595b1d07f627ac2cddbc74808", - "https://deno.land/std@0.200.0/path/parse.ts": "031fe488b3497fb8312fc1dc3c3d6c2d80707edd9c661e18ee9fd20f95edf322", - "https://deno.land/std@0.200.0/path/posix.ts": "0a1c1952d132323a88736d03e92bd236f3ed5f9f079e5823fae07c8d978ee61b", - "https://deno.land/std@0.200.0/path/relative.ts": "7db80c5035016174267da16321a742d76e875215c317859a383b12f413c6f5d6", - "https://deno.land/std@0.200.0/path/resolve.ts": "103b62207726a27f28177f397008545804ecb20aaf00623af1f622b18cd80b9f", - "https://deno.land/std@0.200.0/path/separator.ts": "0fb679739d0d1d7bf45b68dacfb4ec7563597a902edbaf3c59b50d5bcadd93b1", - "https://deno.land/std@0.200.0/path/to_file_url.ts": "dd32f7a01bbf3b15b5df46796659984b372973d9b2d7d59bcf0eb990763a0cb5", - "https://deno.land/std@0.200.0/path/to_namespaced_path.ts": "4e643ab729bf49ccdc166ad48d2de262ff462938fcf2a44a4425588f4a0bd690", - "https://deno.land/std@0.200.0/path/win32.ts": "8b3f80ef7a462511d5e8020ff490edcaa0a0d118f1b1e9da50e2916bdd73f9dd", - "https://deno.land/std@0.200.0/streams/_common.ts": "f45cba84f0d813de3326466095539602364a9ba521f804cc758f7a475cda692d", - "https://deno.land/std@0.200.0/streams/buffer.ts": "6cd773d22cf21bb988a98cc551b5abfc4c3b03516f93eaa3fb6f2f6e16032deb", - "https://deno.land/std@0.200.0/streams/byte_slice_stream.ts": "c46d7c74836fc8c1a9acd9fe211cbe1bbaaee1b36087c834fb03af4991135c3a", - "https://deno.land/std@0.200.0/streams/copy.ts": "75cbc795ff89291df22ddca5252de88b2e16d40c85d02840593386a8a1454f71", - "https://deno.land/std@0.200.0/streams/delimiter_stream.ts": "f69e849b3d1f59f02424497273f411105a6f76a9f13da92aeeb9a2d554236814", - "https://deno.land/std@0.200.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1", - "https://deno.land/std@0.200.0/streams/iterate_reader.ts": "bbec1d45c2df2c0c5920bad0549351446fdc8e0886d99e95959b259dbcdb6072", - "https://deno.land/std@0.200.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048", - "https://deno.land/std@0.200.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38", - "https://deno.land/std@0.200.0/streams/merge_readable_streams.ts": "dc2db0cbf1b14d999aa2aa2a2a1ba24ce58953878f29845ed9319321d0a01fab", - "https://deno.land/std@0.200.0/streams/mod.ts": "c07ec010e700b9ea887dc36ca08729828bc7912f711e4054e24d33fd46282252", - "https://deno.land/std@0.200.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be", - "https://deno.land/std@0.200.0/streams/readable_stream_from_iterable.ts": "a355e97ba8671a4611ae9671c1f33c4a7e6a1b42fbdc9a399338ac3d6f875364", - "https://deno.land/std@0.200.0/streams/readable_stream_from_reader.ts": "bfc416c4576a30aac6b9af22c9dc292c20c6742141ee7c55b5e85460beb0c54e", - "https://deno.land/std@0.200.0/streams/reader_from_iterable.ts": "55f68110dce3f8f2c87b834d95f153bc904257fc65175f9f2abe78455cb8047c", - "https://deno.land/std@0.200.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73", - "https://deno.land/std@0.200.0/streams/text_delimiter_stream.ts": "20e680ab8b751390e359288ce764f9c47d164af11a263870746eeca4bc7d976b", - "https://deno.land/std@0.200.0/streams/text_line_stream.ts": "0f2c4b33a5fdb2476f2e060974cba1347cefe99a4af33c28a57524b1a34750fa", - "https://deno.land/std@0.200.0/streams/to_transform_stream.ts": "89fd367cafb3b6d80d61e2f4f1fcf66cc75723ecee8d474b495f022264ec6c3b", - "https://deno.land/std@0.200.0/streams/writable_stream_from_writer.ts": "56fff5c82fb736fdd669b567cc0b2bbbe0351002cd13254eae26c366e2bed89a", - "https://deno.land/std@0.200.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998", - "https://deno.land/std@0.200.0/streams/writer_from_stream_writer.ts": "07c7ee025151a190f37fc42cbb01ff93afc949119ebddc6e0d0df14df1bf6950", - "https://deno.land/std@0.200.0/streams/zip_readable_streams.ts": "a9d81aa451240f79230add674809dbee038d93aabe286e2d9671e66591fc86ca", "https://deno.land/std@0.205.0/http/status.ts": "1353e82e27996ef123dc625e5fcc9d66b94d92e5175879fa5e9f0dc39330206a", "https://deno.land/std@0.97.0/fmt/colors.ts": "db22b314a2ae9430ae7460ce005e0a7130e23ae1c999157e3bb77cf55800f7e4", "https://deno.land/std@0.97.0/testing/_diff.ts": "961eaf6d9f5b0a8556c9d835bbc6fa74f5addd7d3b02728ba7936ff93364f7a3", @@ -216,37 +47,8 @@ "https://deno.land/x/expect@v0.4.0/matchers.ts": "55acf74a3c4a308d079798930f05ab11da2080ec7acd53517193ca90d1296bf7", "https://deno.land/x/expect@v0.4.0/mock.ts": "562d4b1d735d15b0b8e935f342679096b64fe452f86e96714fe8616c0c884914", "https://deno.land/x/expect@v0.4.0/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", - "https://deno.land/x/graphql_tag@0.1.2/deps.ts": "5696461c8bb42db7c83486db452e125f7cfdc62a2c628bb470a4447d934b90b3", - "https://deno.land/x/graphql_tag@0.1.2/mod.ts": "57fd56de5f7cbc66e23ce896cc8e99521d286e89969d83e09d960642b0a9d652", - "https://deno.land/x/oak@v12.6.1/application.ts": "3028d3f6fa5ee743de013881550d054372c11d83c45099c2d794033786d27008", - "https://deno.land/x/oak@v12.6.1/body.ts": "1899761b97fc9d776f3710b2637fb047ba29b968609afc6c0e5219b1108e703c", - "https://deno.land/x/oak@v12.6.1/buf_reader.ts": "26640736541598dbd9f2b84a9d0595756afff03c9ca55b66eef1911f7798b56d", - "https://deno.land/x/oak@v12.6.1/content_disposition.ts": "8b8c3cb2fba7138cd5b7f82fc3b5ea39b33db924a824b28261659db7e164621e", - "https://deno.land/x/oak@v12.6.1/context.ts": "895a2d40186b89c28ba3947bf08a9335f1a11fc33133f760082536b74c53d1ca", - "https://deno.land/x/oak@v12.6.1/deps.ts": "267ef76c25592101fe1f6c6d7730664015a9179c974da4f7441297d9367a9514", - "https://deno.land/x/oak@v12.6.1/etag.ts": "32e47726b41698aefdd71faac5aaf2907c9bdd41ef18a7693863be4f8fee115d", - "https://deno.land/x/oak@v12.6.1/forwarded.ts": "e656f96a85574e2a6ee54dc35efc9f72d543c9ae0923760ef426ee7369eef01c", - "https://deno.land/x/oak@v12.6.1/headers.ts": "769fd042d34fbcd5667cbd745b5c65d335cc8430e822dbf1f87d65313cab4b47", - "https://deno.land/x/oak@v12.6.1/helpers.ts": "6b03c6a2be06ec775d54449e442a2bac234aa952948ca758356eab6dc87af618", - "https://deno.land/x/oak@v12.6.1/http_server_native.ts": "98e12c50a959553cfc144bc00999c969fa69ca781cbd96bec563f55691ab82db", - "https://deno.land/x/oak@v12.6.1/http_server_native_request.ts": "552b174b5e13e92de8897d5b6f716b1e5a53543115481d65a651a41e4ca29ec9", - "https://deno.land/x/oak@v12.6.1/isMediaType.ts": "62d638abcf837ece3a8f07a4b7ca59794135cb0d4b73194c7d5837efd4161005", - "https://deno.land/x/oak@v12.6.1/mediaTyper.ts": "042b853fc8e9c3f6c628dd389e03ef481552bf07242efc3f8a1af042102a6105", - "https://deno.land/x/oak@v12.6.1/middleware.ts": "c7f7a0424a6dd99a00e4b8d7d6e131efc0facc8dea781845d713b63df8ef1862", - "https://deno.land/x/oak@v12.6.1/middleware/proxy.ts": "6f2799cf60d926e7a8d13ff757a59d7f0f930407db7ee9b81e7c064138eb89ff", - "https://deno.land/x/oak@v12.6.1/mod.ts": "f6aa47ad1b6099470c9a884cccad9d3ac0fd242ba940896291ab76cd26cf554b", - "https://deno.land/x/oak@v12.6.1/multipart.ts": "1484e01b98f5135f2aa09f7d0ce1e7be39109bf9f045ac660e941619d04e3d29", - "https://deno.land/x/oak@v12.6.1/range.ts": "1ca15fc1ac21c650c34e6997a75af2af9d9d8eb6fe2d5d1dadeac3dfd4a9c152", - "https://deno.land/x/oak@v12.6.1/request.ts": "32409827e285ee65889b22bbaaea5d6b280258124c2e9a4f724baa8e6d6375b7", - "https://deno.land/x/oak@v12.6.1/response.ts": "094d950a5158f5b3446ca8a7b6e975dd23afb42b38c38517cc2f41dc75b16b4c", - "https://deno.land/x/oak@v12.6.1/router.ts": "0f53d6249f9e8f89f2522b2b810b9302d0f22593c184b16b24b03bf2b7d42ea1", - "https://deno.land/x/oak@v12.6.1/send.ts": "5ec49f106294593f468317a0c885da4f3274bf6d0fe9e16a7304391730b4f4fb", - "https://deno.land/x/oak@v12.6.1/structured_clone.ts": "c3888b14d1eec558345bfbf13d0993d59bd45aaa8588444e35dd558c3a921cd8", - "https://deno.land/x/oak@v12.6.1/testing.ts": "37d684d57bb8e5150fb5eb2677e66b04dcb422709cf2c5a74c1df94d52aa02e2", - "https://deno.land/x/oak@v12.6.1/util.ts": "0a3fdffb114859c2de84e1783efa3a544af4d2af8c6f08e0d25655de9d3e69bb", "https://deno.land/x/opine@2.1.2/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", "https://deno.land/x/opine@2.1.2/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", - "https://deno.land/x/path_to_regexp@v6.2.1/index.ts": "894060567837bae8fc9c5cbd4d0a05e9024672083d5883b525c031eea940e556", "https://deno.land/x/superdeno@4.8.0/deps.ts": "e2cf96d1129c38e1daf87a405878fa51d5771a0ba9b1c250baa75db0a8cb99df", "https://deno.land/x/superdeno@4.8.0/mod.ts?target=deno": "fa91c501867a4302a4bc92d63cbf934fe5475ebb7bf58335338e001147263c87", "https://deno.land/x/superdeno@4.8.0/src/close.ts": "8bd4ab602ebbb048d06697d0c48c30be5f78ab9ad673850965e8014d78cca7a8", @@ -267,12 +69,7 @@ "https://deno.land/x/tincan@1.0.2/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", "https://deno.land/x/tincan@1.0.2/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", "https://deno.land/x/tincan@1.0.2/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", - "https://esm.sh/graphql-http@1.22.0": "ad393a29882d884cedd353fd602ea181158a834c018c14b9bf1e8aacf82be7f6", - "https://esm.sh/graphql@16.6.0/language/parser#=": "d2136c12ba1c7ac94b6f298bd2f81433cd0df9b874b9e08e512bda768a5ea8ae", "https://esm.sh/v133/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", - "https://esm.sh/v133/graphql-http@1.22.0/denonext/graphql-http.mjs": "b612e25d2a62a714203ac4123cdc3be3d152ee49f5d93a76298d43e88d3d580a", - "https://esm.sh/v133/graphql@16.6.0/denonext/language/parser.js": "82063e5ee234089909652e04ccd9f0e1c0670c04ac6db896099a638ae759b182", - "https://esm.sh/v133/graphql@16.8.1/denonext/graphql.mjs": "585b84022623b931e27a7a8134cd24ec50b33ea12fd18b43254527628a0fddac", "https://esm.sh/v133/xss@1.0.14/denonext/xss.mjs": "d3093ce2e72808314a367efb26a944fe0a83761efd7fec308c1636e6b9934cfb", "https://esm.sh/xss@1.0.14": "e12dc644496b685f0af21df487889bd39825a269bc0b10c79c80f02e6accf582", "https://jspm.dev/npm:call-bind@1.0.5!cjs": "09f8399c727fc1e9d58fdafc0a729b45bf37b7ee0c11d9d0b39abe37ac42ccf5", diff --git a/deps.ts b/deps.ts index 5845170..a50929d 100644 --- a/deps.ts +++ b/deps.ts @@ -3,7 +3,7 @@ export { graphql, type GraphQLArgs, type GraphQLSchema, -} from 'npm:graphql@16.6' +} from 'npm:graphql@16.8.1' export { createHandler, type HandlerOptions, From a4ba076761264345a263d5d73c7b375252cd93ee Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 00:13:31 +0200 Subject: [PATCH 07/15] add example using `reqCtx` --- deno.lock | 57 +++++++++++++++++++++++++++++++++++++++++++++ examples/req-ctx.ts | 46 ++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 examples/req-ctx.ts diff --git a/deno.lock b/deno.lock index 7650094..db609ae 100644 --- a/deno.lock +++ b/deno.lock @@ -2,11 +2,56 @@ "version": "3", "packages": { "specifiers": { + "npm:@graphql-tools/schema@10.0.0": "npm:@graphql-tools/schema@10.0.0_graphql@16.6.0", "npm:graphql-http@1.22.0": "npm:graphql-http@1.22.0_graphql@16.6.0", "npm:graphql@16.6": "npm:graphql@16.6.0", "npm:graphql@16.8.1": "npm:graphql@16.8.1" }, "npm": { + "@graphql-tools/merge@9.0.0_graphql@16.6.0": { + "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", + "dependencies": { + "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2" + } + }, + "@graphql-tools/schema@10.0.0_graphql@16.6.0": { + "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", + "dependencies": { + "@graphql-tools/merge": "@graphql-tools/merge@9.0.0_graphql@16.6.0", + "@graphql-tools/utils": "@graphql-tools/utils@10.0.8_graphql@16.6.0", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2", + "value-or-promise": "value-or-promise@1.0.12" + } + }, + "@graphql-tools/utils@10.0.8_graphql@16.6.0": { + "integrity": "sha512-yjyA8ycSa1WRlJqyX/aLqXeE5DvF/H02+zXMUFnCzIDrj0UvLMUrxhmVFnMK0Q2n3bh4uuTeY3621m5za9ovXw==", + "dependencies": { + "@graphql-typed-document-node/core": "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0", + "cross-inspect": "cross-inspect@1.0.0", + "dset": "dset@3.1.3", + "graphql": "graphql@16.6.0", + "tslib": "tslib@2.6.2" + } + }, + "@graphql-typed-document-node/core@3.2.0_graphql@16.6.0": { + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "dependencies": { + "graphql": "graphql@16.6.0" + } + }, + "cross-inspect@1.0.0": { + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "tslib@2.6.2" + } + }, + "dset@3.1.3": { + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "dependencies": {} + }, "graphql-http@1.22.0_graphql@16.6.0": { "integrity": "sha512-9RBUlGJWBFqz9LwfpmAbjJL/8j/HCNkZwPBU5+Bfmwez+1Ay43DocMNQYpIWsWqH0Ftv6PTNAh2aRnnMCBJgLw==", "dependencies": { @@ -20,6 +65,14 @@ "graphql@16.8.1": { "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "dependencies": {} + }, + "tslib@2.6.2": { + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dependencies": {} + }, + "value-or-promise@1.0.12": { + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "dependencies": {} } } }, @@ -47,6 +100,8 @@ "https://deno.land/x/expect@v0.4.0/matchers.ts": "55acf74a3c4a308d079798930f05ab11da2080ec7acd53517193ca90d1296bf7", "https://deno.land/x/expect@v0.4.0/mock.ts": "562d4b1d735d15b0b8e935f342679096b64fe452f86e96714fe8616c0c884914", "https://deno.land/x/expect@v0.4.0/mod.ts": "0304d2430e1e96ba669a8495e24ba606dcc3d152e1f81aaa8da898cea24e36c2", + "https://deno.land/x/graphql_tag@0.1.2/deps.ts": "5696461c8bb42db7c83486db452e125f7cfdc62a2c628bb470a4447d934b90b3", + "https://deno.land/x/graphql_tag@0.1.2/mod.ts": "57fd56de5f7cbc66e23ce896cc8e99521d286e89969d83e09d960642b0a9d652", "https://deno.land/x/opine@2.1.2/src/methods.ts": "0481daecc6068d24e9e5391818baddf555ab803d39a465dcd259161f8bd8ee49", "https://deno.land/x/opine@2.1.2/src/utils/mergeDescriptors.ts": "1fe498d4a1a8dcfd3570f9ca5e0647590d86d029b3c340bfcfdb57002851e41b", "https://deno.land/x/superdeno@4.8.0/deps.ts": "e2cf96d1129c38e1daf87a405878fa51d5771a0ba9b1c250baa75db0a8cb99df", @@ -69,7 +124,9 @@ "https://deno.land/x/tincan@1.0.2/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", "https://deno.land/x/tincan@1.0.2/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", "https://deno.land/x/tincan@1.0.2/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", + "https://esm.sh/graphql@16.6.0/language/parser#=": "d2136c12ba1c7ac94b6f298bd2f81433cd0df9b874b9e08e512bda768a5ea8ae", "https://esm.sh/v133/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", + "https://esm.sh/v133/graphql@16.6.0/denonext/language/parser.js": "82063e5ee234089909652e04ccd9f0e1c0670c04ac6db896099a638ae759b182", "https://esm.sh/v133/xss@1.0.14/denonext/xss.mjs": "d3093ce2e72808314a367efb26a944fe0a83761efd7fec308c1636e6b9934cfb", "https://esm.sh/xss@1.0.14": "e12dc644496b685f0af21df487889bd39825a269bc0b10c79c80f02e6accf582", "https://jspm.dev/npm:call-bind@1.0.5!cjs": "09f8399c727fc1e9d58fdafc0a729b45bf37b7ee0c11d9d0b39abe37ac42ccf5", diff --git a/examples/req-ctx.ts b/examples/req-ctx.ts new file mode 100644 index 0000000..9844a31 --- /dev/null +++ b/examples/req-ctx.ts @@ -0,0 +1,46 @@ +import { GraphQLHTTP } from '../mod.ts' +import { makeExecutableSchema } from 'npm:@graphql-tools/schema@10.0.0' +import { gql } from 'https://deno.land/x/graphql_tag@0.1.2/mod.ts' +import type { Request as GQLRequest } from 'npm:graphql-http@1.22.0' + +const typeDefs = gql` + type Query { + hello: String + } +` + +type ReqContext = { + request: Request + isRequestContext: boolean +} + +type Context = { + request: Request + originalReq: GQLRequest +} + +const resolvers = { + Query: { + hello: (_root: unknown, _args: unknown, ctx: Context) => { + return `Hello from request context: ${ctx.originalReq.context.isRequestContext}` + }, + }, +} + +const schema = makeExecutableSchema({ resolvers, typeDefs }) + +Deno.serve({ + port: 3000, + onListen({ hostname, port }) { + console.log(`☁ Started on http://${hostname}:${port}`) + }, +}, async (req) => { + const { pathname } = new URL(req.url) + return pathname === '/graphql' + ? await GraphQLHTTP({ + schema, + graphiql: true, + context: (request) => ({ request: req, originalReq: request }), + }, () => ({ request: req, isRequestContext: true }))(req) + : new Response('Not Found', { status: 404 }) +}) From c8d6d000d3599db38293ebb1702fbdf93a6eafc9 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 00:38:23 +0200 Subject: [PATCH 08/15] remove `GQLRequest` --- types.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/types.ts b/types.ts index 6b8efcd..366825c 100644 --- a/types.ts +++ b/types.ts @@ -39,7 +39,3 @@ interface MutationParams extends Params { } export type GraphQLParams = QueryParams | MutationParams - -export type GQLRequest = Request & { - json: () => Promise -} From 8768128f68bb26ccabe2d2d3bf7eb1e7b5d057d2 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 13:32:07 +0200 Subject: [PATCH 09/15] don't run audit tests cuz can't figure out how to run in parallel --- audit_test.ts | 3 +-- deno.json | 4 ++++ deno.lock | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/audit_test.ts b/audit_test.ts index 1fbb395..90eb7d9 100644 --- a/audit_test.ts +++ b/audit_test.ts @@ -11,9 +11,8 @@ for ( throw result.reason } if (result.status === 'warn') { - console.warn(result.reason) // or throw if you want full compliance (warnings are not requirements) + console.warn(result.reason) } - // Avoid leaking resources if ('body' in result && result.body instanceof ReadableStream) { await result.body.cancel() } diff --git a/deno.json b/deno.json index b83d061..4593a84 100644 --- a/deno.json +++ b/deno.json @@ -7,5 +7,9 @@ "singleQuote": true, "semiColons": false } + }, + "tasks": { + "test": "deno test --allow-net mod_test.ts", + "test:audit": "deno test --allow-net audit_test.ts" } } diff --git a/deno.lock b/deno.lock index db609ae..337a03b 100644 --- a/deno.lock +++ b/deno.lock @@ -76,6 +76,9 @@ } } }, + "redirects": { + "https://deno.land/std/testing/bdd.ts": "https://deno.land/std@0.205.0/testing/bdd.ts" + }, "remote": { "https://deno.land/std@0.129.0/async/abortable.ts": "a896ac6b0d4237bd2d2d248217cfa1f0d85ccda93cb25ebda55e33850e526be6", "https://deno.land/std@0.129.0/async/deadline.ts": "48ac998d7564969f3e6ec6b6f9bf0217ebd00239b1b2292feba61272d5dd58d0", @@ -93,6 +96,8 @@ "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", "https://deno.land/std@0.197.0/fmt/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", "https://deno.land/std@0.205.0/http/status.ts": "1353e82e27996ef123dc625e5fcc9d66b94d92e5175879fa5e9f0dc39330206a", + "https://deno.land/std@0.205.0/testing/_test_suite.ts": "30f018feeb3835f12ab198d8a518f9089b1bcb2e8c838a8b615ab10d5005465c", + "https://deno.land/std@0.205.0/testing/bdd.ts": "3f446df5ef8e856a869e8eec54c8482590415741ff0b6358a00c43486cc15769", "https://deno.land/std@0.97.0/fmt/colors.ts": "db22b314a2ae9430ae7460ce005e0a7130e23ae1c999157e3bb77cf55800f7e4", "https://deno.land/std@0.97.0/testing/_diff.ts": "961eaf6d9f5b0a8556c9d835bbc6fa74f5addd7d3b02728ba7936ff93364f7a3", "https://deno.land/std@0.97.0/testing/asserts.ts": "341292d12eebc44be4c3c2ca101ba8b6b5859cef2fa69d50c217f9d0bfbcfd1f", @@ -124,8 +129,10 @@ "https://deno.land/x/tincan@1.0.2/src/nodes/utilities.ts": "5e6a6f0e2650df4e10f7dfde889ef88a588fe9c3b3618aca2acd47e80b3ee3d8", "https://deno.land/x/tincan@1.0.2/src/reporter.ts": "84e09297da18c840076be951c02c749678b75dc89b2575f34db1378cbb509939", "https://deno.land/x/tincan@1.0.2/src/runner.ts": "54e1a0934a52469437bd4655df51f0c9148327d94a2b0d6c175f6f992a697b86", + "https://esm.sh/graphql@16.6.0/language/ast#=": "e247e9d338dda824713c8b77dea7b638c7e13d4f9bdfe880e77b93d013e9db32", "https://esm.sh/graphql@16.6.0/language/parser#=": "d2136c12ba1c7ac94b6f298bd2f81433cd0df9b874b9e08e512bda768a5ea8ae", "https://esm.sh/v133/cssfilter@0.0.10/denonext/cssfilter.mjs": "b2dec5f4b51c7574509f04305aa54e33f9de336d66eade79f05552312f18f40b", + "https://esm.sh/v133/graphql@16.6.0/denonext/language/ast.js": "1c8cc697db4ec96d354496fa69a2d6552ec5801a6c3bdbe5505f369d872d594c", "https://esm.sh/v133/graphql@16.6.0/denonext/language/parser.js": "82063e5ee234089909652e04ccd9f0e1c0670c04ac6db896099a638ae759b182", "https://esm.sh/v133/xss@1.0.14/denonext/xss.mjs": "d3093ce2e72808314a367efb26a944fe0a83761efd7fec308c1636e6b9934cfb", "https://esm.sh/xss@1.0.14": "e12dc644496b685f0af21df487889bd39825a269bc0b10c79c80f02e6accf582", From 5614d6c16adaf1c5ebf580cb5d032dc9bd4fc620 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 13:40:22 +0200 Subject: [PATCH 10/15] fix ci --- .github/workflows/main.yml | 2 +- deno.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d609a51..0e41ce2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,7 +17,7 @@ jobs: with: deno-version: v1.x - name: Run tests - run: deno test --allow-net --coverage=coverage + run: deno task test - name: Create coverage report run: deno coverage ./coverage --lcov > coverage.lcov - name: Coveralls diff --git a/deno.json b/deno.json index 4593a84..3575d6f 100644 --- a/deno.json +++ b/deno.json @@ -9,7 +9,7 @@ } }, "tasks": { - "test": "deno test --allow-net mod_test.ts", + "test": "deno test --allow-net mod_test.ts --coverage=coverage", "test:audit": "deno test --allow-net audit_test.ts" } } From c475a6e8ee88b13e8e7562db3bc345c6a4513c48 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 13:41:35 +0200 Subject: [PATCH 11/15] update readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f5f25f3..a7b4975 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ # gql -Universal [GraphQL](https://www.graphql.com/) HTTP middleware for Deno. Based on -[graphql-http](https://github.com/graphql/graphql-http). +Universal and spec-compliant [GraphQL](https://www.graphql.com/) HTTP middleware +for Deno. Based on [graphql-http](https://github.com/graphql/graphql-http). ## Features @@ -71,7 +71,7 @@ $ curl -X POST localhost:3000/graphql -d '{ "query": "{ hello }" }' -H "Content- } ``` -Or in [GraphQL Playground](https://localhost:3000/graphql): +Or in the GraphQL Playground: ![image](https://user-images.githubusercontent.com/35937217/112218821-4133c800-8c35-11eb-984a-5c21fa71c229.png) From 790d275be10f9fc6aa61146ccec7dc1ddd79b405 Mon Sep 17 00:00:00 2001 From: v1rtl Date: Thu, 9 Nov 2023 14:24:51 +0200 Subject: [PATCH 12/15] add tests for graphql playground and areadme --- deno.lock | 5 +++++ graphiql/README.md | 26 ++++++++++++++++++++++++++ graphiql/render.ts | 13 ++----------- graphiql/render_test.ts | 34 ++++++++++++++++++++++++++++++++++ mod.ts | 5 ++--- mod_test.ts | 6 ++---- 6 files changed, 71 insertions(+), 18 deletions(-) create mode 100644 graphiql/README.md create mode 100644 graphiql/render_test.ts diff --git a/deno.lock b/deno.lock index 337a03b..395af6b 100644 --- a/deno.lock +++ b/deno.lock @@ -95,6 +95,11 @@ "https://deno.land/std@0.129.0/testing/_diff.ts": "9d849cd6877694152e01775b2d93f9d6b7aef7e24bfe3bfafc4d7a1ac8e9f392", "https://deno.land/std@0.129.0/testing/asserts.ts": "0a95d9e8076dd3e7f0eeb605a67c148078b4b11f4abcd5eef115b0361b0736a2", "https://deno.land/std@0.197.0/fmt/colors.ts": "a7eecffdf3d1d54db890723b303847b6e0a1ab4b528ba6958b8f2e754cf1b3bc", + "https://deno.land/std@0.205.0/http/_negotiation/common.ts": "14d1a52427ab258a4b7161cd80e1d8a207b7cc64b46e911780f57ead5f4323c6", + "https://deno.land/std@0.205.0/http/_negotiation/encoding.ts": "ff747d107277c88cb7a6a62a08eeb8d56dad91564cbcccb30694d5dc126dcc53", + "https://deno.land/std@0.205.0/http/_negotiation/language.ts": "7bcddd8db3330bdb7ce4fc00a213c5547c1968139864201efd67ef2d0d51887d", + "https://deno.land/std@0.205.0/http/_negotiation/media_type.ts": "58847517cd549384ad677c0fe89e0a4815be36fe7a303ea63cee5f6a1d7e1692", + "https://deno.land/std@0.205.0/http/negotiation.ts": "46e74a6bad4b857333a58dc5b50fe8e5a4d5267e97292293ea65f980bd918086", "https://deno.land/std@0.205.0/http/status.ts": "1353e82e27996ef123dc625e5fcc9d66b94d92e5175879fa5e9f0dc39330206a", "https://deno.land/std@0.205.0/testing/_test_suite.ts": "30f018feeb3835f12ab198d8a518f9089b1bcb2e8c838a8b615ab10d5005465c", "https://deno.land/std@0.205.0/testing/bdd.ts": "3f446df5ef8e856a869e8eec54c8482590415741ff0b6358a00c43486cc15769", diff --git a/graphiql/README.md b/graphiql/README.md new file mode 100644 index 0000000..c282749 --- /dev/null +++ b/graphiql/README.md @@ -0,0 +1,26 @@ +# gql/graphiql + +[![][docs-badge]][docs] + +Tweaked version of +[graphql-playground-html](https://github.com/graphql/graphql-playground/tree/main/packages/graphql-playground-html) +without Electron and React environments. + +## Get Started + +```ts +import { renderPlaygroundPage } from 'https://deno.land/x/gql@2.0.0/graphiql/render.ts' + +const playground = renderPlaygroundPage({ + endpoint: '/graphql', +}) + +return new Response(playground, { + headers: new Headers({ + 'Content-Type': 'text/html', + }), +}) +``` + +[docs-badge]: https://img.shields.io/github/v/release/deno-libs/gql?label=Docs&logo=deno&style=for-the-badge&color=DD3FAA +[docs]: https://doc.deno.land/https/deno.land/x/gql/graphiql/render.ts diff --git a/graphiql/render.ts b/graphiql/render.ts index e724e34..cd45e65 100644 --- a/graphiql/render.ts +++ b/graphiql/render.ts @@ -5,8 +5,7 @@ export interface MiddlewareOptions { endpoint?: string subscriptionEndpoint?: string workspaceName?: string - env?: any - config?: any + config?: unknown settings?: ISettings schema?: IntrospectionResult tabs?: Tab[] @@ -63,7 +62,6 @@ export interface IntrospectionResult { export interface RenderPageOptions extends MiddlewareOptions { version?: string cdnUrl?: string - env?: any title?: string faviconUrl?: string | null } @@ -83,8 +81,6 @@ const CONFIG_ID = 'playground-config' const filter = (val: string) => { return filterXSS(val, { - // @ts-ignore - whiteList: [], stripIgnoreTag: true, stripIgnoreTagBody: ['script'], }) @@ -151,7 +147,6 @@ export function renderPlaygroundPage(options: RenderPageOptions) { extendedOptions.configString = JSON.stringify(options.config, null, 2) } if (!extendedOptions.endpoint && !extendedOptions.configString) { - /* tslint:disable-next-line */ console.warn( `WARNING: You didn't provide an endpoint and don't have a .graphqlconfig. Make sure you have at least one of them.`, ) @@ -167,11 +162,7 @@ export function renderPlaygroundPage(options: RenderPageOptions) { ${extendedOptions.title || 'GraphQL Playground'} - ${ - extendedOptions.env === 'react' || extendedOptions.env === 'electron' - ? '' - : getCdnMarkup(extendedOptions) - } + ${getCdnMarkup(extendedOptions)}