diff --git a/deno.lock b/deno.lock
index 2be7588..29deffd 100644
--- a/deno.lock
+++ b/deno.lock
@@ -321,6 +321,124 @@
"https://deno.land/std@0.200.0/yaml/schema/json.ts": "5f41dd7c2f1ad545ef6238633ce9ee3d444dfc5a18101e1768bd5504bf90e5e5",
"https://deno.land/std@0.200.0/yaml/schema/mod.ts": "4472e827bab5025e92bc2eb2eeefa70ecbefc64b2799b765c69af84822efef32",
"https://deno.land/std@0.200.0/yaml/type.ts": "1aabb8e0a3f4229ce0a3526256f68826d9bdf65a36c8a3890ead8011fcba7670",
+ "https://deno.land/std@0.201.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee",
+ "https://deno.land/std@0.201.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56",
+ "https://deno.land/std@0.201.0/async/deferred.ts": "42790112f36a75a57db4a96d33974a936deb7b04d25c6084a9fa8a49f135def8",
+ "https://deno.land/std@0.201.0/async/delay.ts": "a6142eb44cdd856b645086af2b811b1fcce08ec06bb7d50969e6a872ee9b8659",
+ "https://deno.land/std@0.201.0/bytes/concat.ts": "d26d6f3d7922e6d663dacfcd357563b7bf4a380ce5b9c2bbe0c8586662f25ce2",
+ "https://deno.land/std@0.201.0/bytes/copy.ts": "939d89e302a9761dcf1d9c937c7711174ed74c59eef40a1e4569a05c9de88219",
+ "https://deno.land/std@0.201.0/collections/_utils.ts": "5114abc026ddef71207a79609b984614e66a63a4bda17d819d56b0e72c51527e",
+ "https://deno.land/std@0.201.0/collections/deep_merge.ts": "9db788ba56cb05b65c77166b789e58e125dff159b7f41bf4d19dc1cba19ecb8b",
+ "https://deno.land/std@0.201.0/flags/mod.ts": "0948466fc437f017f00c0b972a422b3dc3317a790bcf326429d23182977eaf9f",
+ "https://deno.land/std@0.201.0/front_matter/any.ts": "e69b749d9690d0c914af607e46c816f7389c35df7a8990f1c230874628e97b38",
+ "https://deno.land/std@0.201.0/front_matter/mod.ts": "f4a40ed1d5c41af2e664a661879c9dc0c9ca49199f6406da8b62c0aa2a2fb640",
+ "https://deno.land/std@0.201.0/fs/_util.ts": "fbf57dcdc9f7bc8128d60301eece608246971a7836a3bb1e78da75314f08b978",
+ "https://deno.land/std@0.201.0/fs/copy.ts": "23cc1c465babe5ca4d69778821e2f8addc44593e30a5ca0b902b3784eed75bb6",
+ "https://deno.land/std@0.201.0/fs/empty_dir.ts": "2e52cd4674d18e2e007175c80449fc3d263786a1361e858d9dfa9360a6581b47",
+ "https://deno.land/std@0.201.0/fs/ensure_dir.ts": "dc64c4c75c64721d4e3fb681f1382f803ff3d2868f08563ff923fdd20d071c40",
+ "https://deno.land/std@0.201.0/fs/ensure_file.ts": "39ac83cc283a20ec2735e956adf5de3e8a3334e0b6820547b5772f71c49ae083",
+ "https://deno.land/std@0.201.0/fs/ensure_link.ts": "c15e69c48556d78aae31b83e0c0ece04b7b8bc0951412f5b759aceb6fde7f0ac",
+ "https://deno.land/std@0.201.0/fs/ensure_symlink.ts": "b389c8568f0656d145ac7ece472afe710815cccbb2ebfd19da7978379ae143fe",
+ "https://deno.land/std@0.201.0/fs/eol.ts": "f1f2eb348a750c34500741987b21d65607f352cf7205f48f4319d417fff42842",
+ "https://deno.land/std@0.201.0/fs/exists.ts": "cb59a853d84871d87acab0e7936a4dac11282957f8e195102c5a7acb42546bb8",
+ "https://deno.land/std@0.201.0/fs/expand_glob.ts": "52b8b6f5b1fa585c348250da1c80ce5d820746cb4a75d874b3599646f677d3a7",
+ "https://deno.land/std@0.201.0/fs/mod.ts": "bc3d0acd488cc7b42627044caf47d72019846d459279544e1934418955ba4898",
+ "https://deno.land/std@0.201.0/fs/move.ts": "b4f8f46730b40c32ea3c0bc8eb0fd0e8139249a698883c7b3756424cf19785c9",
+ "https://deno.land/std@0.201.0/fs/walk.ts": "a16146724a6aaf9efdb92023a74e9805195c3469900744ce5de4113b07b29779",
+ "https://deno.land/std@0.201.0/http/server.ts": "1b2403b3c544c0624ad23e8ca4e05877e65380d9e0d75d04957432d65c3d5f41",
+ "https://deno.land/std@0.201.0/io/buffer.ts": "4d6883daeb2e698579c4064170515683d69f40f3de019bfe46c5cf31e74ae793",
+ "https://deno.land/std@0.201.0/path/_basename.ts": "057d420c9049821f983f784fd87fa73ac471901fb628920b67972b0f44319343",
+ "https://deno.land/std@0.201.0/path/_constants.ts": "e49961f6f4f48039c0dfed3c3f93e963ca3d92791c9d478ac5b43183413136e0",
+ "https://deno.land/std@0.201.0/path/_dirname.ts": "355e297236b2218600aee7a5301b937204c62e12da9db4b0b044993d9e658395",
+ "https://deno.land/std@0.201.0/path/_extname.ts": "eaaa5aae1acf1f03254d681bd6a8ce42a9cb5b7ff2213a9d4740e8ab31283664",
+ "https://deno.land/std@0.201.0/path/_format.ts": "4a99270d6810f082e614309164fad75d6f1a483b68eed97c830a506cc589f8b4",
+ "https://deno.land/std@0.201.0/path/_from_file_url.ts": "6eadfae2e6f63ad9ee46b26db4a1b16583055c0392acedfb50ed2fc694b6f581",
+ "https://deno.land/std@0.201.0/path/_interface.ts": "6471159dfbbc357e03882c2266d21ef9afdb1e4aa771b0545e90db58a0ba314b",
+ "https://deno.land/std@0.201.0/path/_is_absolute.ts": "05dac10b5e93c63198b92e3687baa2be178df5321c527dc555266c0f4f51558c",
+ "https://deno.land/std@0.201.0/path/_join.ts": "815f5e85b042285175b1492dd5781240ce126c23bd97bad6b8211fe7129c538e",
+ "https://deno.land/std@0.201.0/path/_normalize.ts": "a19ec8706b2707f9dd974662a5cd89fad438e62ab1857e08b314a8eb49a34d81",
+ "https://deno.land/std@0.201.0/path/_os.ts": "d932f56d41e4f6a6093d56044e29ce637f8dcc43c5a90af43504a889cf1775e3",
+ "https://deno.land/std@0.201.0/path/_parse.ts": "0f9b0ff43682dd9964eb1c4398610c4e165d8db9d3ac9d594220217adf480cfa",
+ "https://deno.land/std@0.201.0/path/_relative.ts": "27bdeffb5311a47d85be26d37ad1969979359f7636c5cd9fcf05dcd0d5099dc5",
+ "https://deno.land/std@0.201.0/path/_resolve.ts": "7a3616f1093735ed327e758313b79c3c04ea921808ca5f19ddf240cb68d0adf6",
+ "https://deno.land/std@0.201.0/path/_to_file_url.ts": "a141e4a525303e1a3a0c0571fd024552b5f3553a2af7d75d1ff3a503dcbb66d8",
+ "https://deno.land/std@0.201.0/path/_to_namespaced_path.ts": "0d5f4caa2ed98ef7a8786286df6af804b50e38859ae897b5b5b4c8c5930a75c8",
+ "https://deno.land/std@0.201.0/path/_util.ts": "4e191b1bac6b3bf0c31aab42e5ca2e01a86ab5a0d2e08b75acf8585047a86221",
+ "https://deno.land/std@0.201.0/path/basename.ts": "bdfa5a624c6a45564dc6758ef2077f2822978a6dbe77b0a3514f7d1f81362930",
+ "https://deno.land/std@0.201.0/path/common.ts": "ee7505ab01fd22de3963b64e46cff31f40de34f9f8de1fff6a1bd2fe79380000",
+ "https://deno.land/std@0.201.0/path/dirname.ts": "b6533f4ee4174a526dec50c279534df5345836dfdc15318400b08c62a62a39dd",
+ "https://deno.land/std@0.201.0/path/extname.ts": "62c4b376300795342fe1e4746c0de518b4dc9c4b0b4617bfee62a2973a9555cf",
+ "https://deno.land/std@0.201.0/path/format.ts": "110270b238514dd68455a4c54956215a1aff7e37e22e4427b7771cefe1920aa5",
+ "https://deno.land/std@0.201.0/path/from_file_url.ts": "9f5cb58d58be14c775ec2e57fc70029ac8b17ed3bd7fe93e475b07280adde0ac",
+ "https://deno.land/std@0.201.0/path/glob.ts": "593e2c3573883225c25c5a21aaa8e9382a696b8e175ea20a3b6a1471ad17aaed",
+ "https://deno.land/std@0.201.0/path/is_absolute.ts": "0b92eb35a0a8780e9f16f16bb23655b67dace6a8e0d92d42039e518ee38103c1",
+ "https://deno.land/std@0.201.0/path/join.ts": "31c5419f23d91655b08ec7aec403f4e4cd1a63d39e28f6e42642ea207c2734f8",
+ "https://deno.land/std@0.201.0/path/mod.ts": "6e1efb0b13121463aedb53ea51dabf5639a3172ab58c89900bbb72b486872532",
+ "https://deno.land/std@0.201.0/path/normalize.ts": "6ea523e0040979dd7ae2f1be5bf2083941881a252554c0f32566a18b03021955",
+ "https://deno.land/std@0.201.0/path/parse.ts": "be8de342bb9e1924d78dc4d93c45215c152db7bf738ec32475560424b119b394",
+ "https://deno.land/std@0.201.0/path/posix.ts": "0a1c1952d132323a88736d03e92bd236f3ed5f9f079e5823fae07c8d978ee61b",
+ "https://deno.land/std@0.201.0/path/relative.ts": "8bedac226afd360afc45d451a6c29fabceaf32978526bcb38e0c852661f66c61",
+ "https://deno.land/std@0.201.0/path/resolve.ts": "133161e4949fc97f9ca67988d51376b0f5eef8968a6372325ab84d39d30b80dc",
+ "https://deno.land/std@0.201.0/path/separator.ts": "40a3e9a4ad10bef23bc2cd6c610291b6c502a06237c2c4cd034a15ca78dedc1f",
+ "https://deno.land/std@0.201.0/path/to_file_url.ts": "00e6322373dd51ad109956b775e4e72e5f9fa68ce2c6b04e4af2a6eed3825d31",
+ "https://deno.land/std@0.201.0/path/to_namespaced_path.ts": "1b1db3055c343ab389901adfbda34e82b7386bcd1c744d54f9c1496ee0fd0c3d",
+ "https://deno.land/std@0.201.0/path/win32.ts": "8b3f80ef7a462511d5e8020ff490edcaa0a0d118f1b1e9da50e2916bdd73f9dd",
+ "https://deno.land/std@0.201.0/streams/_common.ts": "3b2c1f0287ce2ad51fff4091a7d0f48375c85b0ec341468e76d5ac13bb0014dd",
+ "https://deno.land/std@0.201.0/streams/buffer.ts": "6cd773d22cf21bb988a98cc551b5abfc4c3b03516f93eaa3fb6f2f6e16032deb",
+ "https://deno.land/std@0.201.0/streams/byte_slice_stream.ts": "c46d7c74836fc8c1a9acd9fe211cbe1bbaaee1b36087c834fb03af4991135c3a",
+ "https://deno.land/std@0.201.0/streams/copy.ts": "75cbc795ff89291df22ddca5252de88b2e16d40c85d02840593386a8a1454f71",
+ "https://deno.land/std@0.201.0/streams/delimiter_stream.ts": "a676837e8bdaa94502fe3d8cae57fbf54697801ae61cefbaf39fb7ab64169d2a",
+ "https://deno.land/std@0.201.0/streams/early_zip_readable_streams.ts": "4005fa74162b943f79899e5d7cb96adcbc0a6b867f9144974ed12d30e0a556e1",
+ "https://deno.land/std@0.201.0/streams/iterate_reader.ts": "bbec1d45c2df2c0c5920bad0549351446fdc8e0886d99e95959b259dbcdb6072",
+ "https://deno.land/std@0.201.0/streams/limited_bytes_transform_stream.ts": "05dc592ffaab83257494d22dd53917e56243c26e5e3129b3f13ddbbbc4785048",
+ "https://deno.land/std@0.201.0/streams/limited_transform_stream.ts": "d69ab790232c1b86f53621ad41ef03c235f2abb4b7a1cd51960ad6e12ee55e38",
+ "https://deno.land/std@0.201.0/streams/merge_readable_streams.ts": "dc2db0cbf1b14d999aa2aa2a2a1ba24ce58953878f29845ed9319321d0a01fab",
+ "https://deno.land/std@0.201.0/streams/mod.ts": "206c718cebeba0ea690be032f6095a8fd079d4168ad7eb3d6e1b6d35b8ee4f42",
+ "https://deno.land/std@0.201.0/streams/read_all.ts": "ee319772fb0fd28302f97343cc48dfcf948f154fd0d755d8efe65814b70533be",
+ "https://deno.land/std@0.201.0/streams/readable_stream_from_reader.ts": "9bc9e71f0ddad557daa7035daca052ca840e0a45e9d1d467d40afcf2c78933fb",
+ "https://deno.land/std@0.201.0/streams/reader_from_iterable.ts": "c2d655262d1f6593b49b494430815c273a272b4804e4d07f11987813fbbb9ef1",
+ "https://deno.land/std@0.201.0/streams/reader_from_stream_reader.ts": "fa4971e5615a010e49492c5d1688ca1a4d17472a41e98b498ab89a64ebd7ac73",
+ "https://deno.land/std@0.201.0/streams/text_delimiter_stream.ts": "f0dc8ff953a8a77f0d1fa8db1fee62de817f36e20d79b00b1362847e30fbdd90",
+ "https://deno.land/std@0.201.0/streams/text_line_stream.ts": "0f2c4b33a5fdb2476f2e060974cba1347cefe99a4af33c28a57524b1a34750fa",
+ "https://deno.land/std@0.201.0/streams/to_transform_stream.ts": "50af06140c414090df8c3879f46bed4043a5d73caa60352c0c9682a88ec7a8c9",
+ "https://deno.land/std@0.201.0/streams/writable_stream_from_writer.ts": "c8f6b8525089c7db5a94cffe30d2be11f77ec9a92492644461c736ffc29f68f1",
+ "https://deno.land/std@0.201.0/streams/write_all.ts": "aec90152978581ea62d56bb53a5cbf487e6a89c902f87c5969681ffbdf32b998",
+ "https://deno.land/std@0.201.0/streams/writer_from_stream_writer.ts": "07c7ee025151a190f37fc42cbb01ff93afc949119ebddc6e0d0df14df1bf6950",
+ "https://deno.land/std@0.201.0/streams/zip_readable_streams.ts": "5639c8fea8c21d7dab6f34edcf3d08218b7e548a197f7fd79a3a995305a81e9f",
+ "https://deno.land/std@0.201.0/toml/_parser.ts": "63d68503fc4e22dcc6b677126765e67fe570e62c86199874efd8b6c976dc2679",
+ "https://deno.land/std@0.201.0/toml/parse.ts": "e900bafdf35d802519842a303e07a62ea5282186960b3474e8083509ab1c7f0d",
+ "https://deno.land/std@0.201.0/yaml/_error.ts": "b59e2c76ce5a47b1b9fa0ff9f96c1dd92ea1e1b17ce4347ece5944a95c3c1a84",
+ "https://deno.land/std@0.201.0/yaml/_loader/loader.ts": "63ec7f0a265dbbabc54b25a4beefff7650e205160a2d75c7d8f8363b5f84851a",
+ "https://deno.land/std@0.201.0/yaml/_loader/loader_state.ts": "0841870b467169269d7c2dfa75cd288c319bc06f65edd9e42c29e5fced91c7a4",
+ "https://deno.land/std@0.201.0/yaml/_mark.ts": "dcd8585dee585e024475e9f3fe27d29740670fb64ebb970388094cad0fc11d5d",
+ "https://deno.land/std@0.201.0/yaml/_state.ts": "ef03d55ec235d48dcfbecc0ab3ade90bfae69a61094846e08003421c2cf5cfc6",
+ "https://deno.land/std@0.201.0/yaml/_type/binary.ts": "24d49614463a7339a8a16d894919c2ec18a10588ae360ec352093b60e2cc8b0d",
+ "https://deno.land/std@0.201.0/yaml/_type/bool.ts": "5bfa75da84343d45347b521ba4e5aeace9fe6f53447405290d53315a3fc20e66",
+ "https://deno.land/std@0.201.0/yaml/_type/float.ts": "056bd3cb9c5586238b20517511014fb24b0e36f98f9f6073e12da308b6b9808a",
+ "https://deno.land/std@0.201.0/yaml/_type/function.ts": "ff574fe84a750695302864e1c31b93f12d14ada4bde79a5f93197fc33ad17471",
+ "https://deno.land/std@0.201.0/yaml/_type/int.ts": "563ad074f0fa7aecf6b6c3d84135bcc95a8269dcc15de878de20ce868fd773fa",
+ "https://deno.land/std@0.201.0/yaml/_type/map.ts": "7b105e4ab03a361c61e7e335a0baf4d40f06460b13920e5af3fb2783a1464000",
+ "https://deno.land/std@0.201.0/yaml/_type/merge.ts": "8192bf3e4d637f32567917f48bb276043da9cf729cf594e5ec191f7cd229337e",
+ "https://deno.land/std@0.201.0/yaml/_type/mod.ts": "060e2b3d38725094b77ea3a3f05fc7e671fced8e67ca18e525be98c4aa8f4bbb",
+ "https://deno.land/std@0.201.0/yaml/_type/nil.ts": "606e8f0c44d73117c81abec822f89ef81e40f712258c74f186baa1af659b8887",
+ "https://deno.land/std@0.201.0/yaml/_type/omap.ts": "cfe59a294726f5cea705c39a61fd2b08199cf48f4ccd6b040cb550ec0f38d0a1",
+ "https://deno.land/std@0.201.0/yaml/_type/pairs.ts": "0032fdfe57558d21696a4f8cf5b5cfd1f698743177080affc18629685c905666",
+ "https://deno.land/std@0.201.0/yaml/_type/regexp.ts": "1ce118de15b2da43b4bd8e4395f42d448b731acf3bdaf7c888f40789f9a95f8b",
+ "https://deno.land/std@0.201.0/yaml/_type/seq.ts": "95333abeec8a7e4d967b8c8328b269e342a4bbdd2585395549b9c4f58c8533a2",
+ "https://deno.land/std@0.201.0/yaml/_type/set.ts": "f28ba44e632ef2a6eb580486fd47a460445eeddbdf1dbc739c3e62486f566092",
+ "https://deno.land/std@0.201.0/yaml/_type/str.ts": "a67a3c6e429d95041399e964015511779b1130ea5889fa257c48457bd3446e31",
+ "https://deno.land/std@0.201.0/yaml/_type/timestamp.ts": "706ea80a76a73e48efaeb400ace087da1f927647b53ad6f754f4e06d51af087f",
+ "https://deno.land/std@0.201.0/yaml/_type/undefined.ts": "94a316ca450597ccbc6750cbd79097ad0d5f3a019797eed3c841a040c29540ba",
+ "https://deno.land/std@0.201.0/yaml/_utils.ts": "26b311f0d42a7ce025060bd6320a68b50e52fd24a839581eb31734cd48e20393",
+ "https://deno.land/std@0.201.0/yaml/parse.ts": "1fbbda572bf3fff578b6482c0d8b85097a38de3176bf3ab2ca70c25fb0c960ef",
+ "https://deno.land/std@0.201.0/yaml/schema.ts": "96908b78dc50c340074b93fc1598d5e7e2fe59103f89ff81e5a49b2dedf77a67",
+ "https://deno.land/std@0.201.0/yaml/schema/core.ts": "fa406f18ceedc87a50e28bb90ec7a4c09eebb337f94ef17468349794fa828639",
+ "https://deno.land/std@0.201.0/yaml/schema/default.ts": "0047e80ae8a4a93293bc4c557ae8a546aabd46bb7165b9d9b940d57b4d88bde9",
+ "https://deno.land/std@0.201.0/yaml/schema/extended.ts": "0784416bf062d20a1626b53c03380e265b3e39b9409afb9f4cb7d659fd71e60d",
+ "https://deno.land/std@0.201.0/yaml/schema/failsafe.ts": "d219ab5febc43f770917d8ec37735a4b1ad671149846cbdcade767832b42b92b",
+ "https://deno.land/std@0.201.0/yaml/schema/json.ts": "5f41dd7c2f1ad545ef6238633ce9ee3d444dfc5a18101e1768bd5504bf90e5e5",
+ "https://deno.land/std@0.201.0/yaml/schema/mod.ts": "4472e827bab5025e92bc2eb2eeefa70ecbefc64b2799b765c69af84822efef32",
+ "https://deno.land/std@0.201.0/yaml/type.ts": "1aabb8e0a3f4229ce0a3526256f68826d9bdf65a36c8a3890ead8011fcba7670",
"https://deno.land/x/deepmergets@v5.1.0/dist/deno/actions.ts": "fb4c0cb491c1dda0fedce332ed8dc6e3a15d7ad3cdc27a41b691b5ce28d7b77e",
"https://deno.land/x/deepmergets@v5.1.0/dist/deno/deepmerge-into.ts": "10f1c8699ab753ddfec2c38b95e8d9963b1c55654481d317882e27b707fa950d",
"https://deno.land/x/deepmergets@v5.1.0/dist/deno/deepmerge.ts": "b63c61a97b619dafed8e8c4824d3dca30ca0d818be74d0a12d3e5aa222f3ae47",
@@ -350,10 +468,12 @@
"@twind/preset-typography@1.0.7": "@twind/preset-typography@1.0.7_@twind+core@1.1.3",
"feed@4.2.2": "feed@4.2.2",
"highlight.js@11.8.0": "highlight.js@11.8.0",
+ "marked-gfm-heading-id": "marked-gfm-heading-id@3.0.7_marked@5.1.0",
"marked@5.1.0": "marked@5.1.0",
"marked@6.0.0": "marked@6.0.0",
"marked@7.0.4": "marked@7.0.4",
"marked@7.0.5": "marked@7.0.5",
+ "marked@8.0.1": "marked@8.0.1",
"preact": "preact@10.16.0",
"preact-render-to-string": "preact-render-to-string@6.1.0_preact@10.15.1",
"preact-render-to-string@6.1.0": "preact-render-to-string@6.1.0_preact@10.15.1",
@@ -411,10 +531,21 @@
"xml-js": "xml-js@1.6.11"
}
},
+ "github-slugger@2.0.0": {
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+ "dependencies": {}
+ },
"highlight.js@11.8.0": {
"integrity": "sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==",
"dependencies": {}
},
+ "marked-gfm-heading-id@3.0.7_marked@5.1.0": {
+ "integrity": "sha512-8JtFnp8/50qwpwwt446Uv4Ohy0jDLNGnAB7sWln7SLQcQQV7+K3qlMMwYupELz9cZvKKiRqXHEGNopcEvxM2ew==",
+ "dependencies": {
+ "github-slugger": "github-slugger@2.0.0",
+ "marked": "marked@5.1.0"
+ }
+ },
"marked@5.1.0": {
"integrity": "sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ==",
"dependencies": {}
@@ -431,6 +562,10 @@
"integrity": "sha512-lwNAFTfXgqpt/XvK17a/8wY9/q6fcSPZT1aP6QW0u74VwaJF/Z9KbRcX23sWE4tODM+AolJNcUtErTkgOeFP/Q==",
"dependencies": {}
},
+ "marked@8.0.1": {
+ "integrity": "sha512-eEbeEb/mJwh+sNLEhHOWtxMgjN/NEwZUBs1nkiIH2sTQTq07KmPMQ48ihyvo5+Ya56spVOPhunfGr6406crCVA==",
+ "dependencies": {}
+ },
"preact-render-to-string@6.1.0_preact@10.15.1": {
"integrity": "sha512-/AsKU4Q4R8r4aKwwNQrkQQNUVEDmTeZr6IwesDffobFRPcTk4dSQrfo1VOcXjtlcUss6QYEe7JShUGbQIhaw+A==",
"dependencies": {
diff --git a/deps/marked.ts b/deps/marked.ts
index 7c95854..6225dd2 100644
--- a/deps/marked.ts
+++ b/deps/marked.ts
@@ -1 +1 @@
-export { marked } from "npm:marked@7.0.5";
+export { marked } from "npm:marked@8.0.1";
diff --git a/deps/std.ts b/deps/std.ts
index 393b15c..0ecbfe2 100644
--- a/deps/std.ts
+++ b/deps/std.ts
@@ -1,9 +1,9 @@
-export { parse as flagsParse } from "https://deno.land/std@0.200.0/flags/mod.ts";
+export { parse as flagsParse } from "https://deno.land/std@0.201.0/flags/mod.ts";
export {
extract as fmExtract,
test as fmTest,
-} from "https://deno.land/std@0.200.0/front_matter/any.ts";
+} from "https://deno.land/std@0.201.0/front_matter/any.ts";
export {
emptyDirSync,
@@ -11,9 +11,9 @@ export {
ensureDirSync,
walk,
type WalkEntry,
-} from "https://deno.land/std@0.200.0/fs/mod.ts";
+} from "https://deno.land/std@0.201.0/fs/mod.ts";
-export { serve as httpServe } from "https://deno.land/std@0.200.0/http/server.ts";
+export { serve as httpServe } from "https://deno.land/std@0.201.0/http/server.ts";
export {
basename,
@@ -23,6 +23,6 @@ export {
isAbsolute,
join,
relative,
-} from "https://deno.land/std@0.200.0/path/mod.ts";
+} from "https://deno.land/std@0.201.0/path/mod.ts";
-export { readableStreamFromReader } from "https://deno.land/std@0.200.0/streams/mod.ts";
+export { readableStreamFromReader } from "https://deno.land/std@0.201.0/streams/mod.ts";
diff --git a/docs/gfm.md b/docs/gfm.md
index 36086e9..cc50cbb 100644
--- a/docs/gfm.md
+++ b/docs/gfm.md
@@ -202,11 +202,11 @@ Inline code inside table cells should still be distinguishable.
Small images should be shown at their actual size.
-![Bridge](img/img-small.jpg)
+![Bridge](/img/img-small.jpg)
Large images should always scale down and fit in the content container.
diff --git a/markdown.ts b/markdown.ts
index 15bb9eb..648ce3c 100644
--- a/markdown.ts
+++ b/markdown.ts
@@ -1,5 +1,6 @@
import { hljs } from "./deps/hljs.ts";
import { marked } from "./deps/marked.ts";
+import { slug as slugify } from "./deps/slug.ts";
import { dirname, extname, isAbsolute, join } from "./deps/std.ts";
import {
@@ -34,12 +35,9 @@ const toInternalLink = (opts: {
currentPath: string;
isDirIndex?: boolean;
}): string => {
- const cleanPathname =
- opts.parsed.pathname === ""
- ? ""
- : withoutTrailingSlash(
- opts.parsed.pathname.replace(extname(opts.parsed.pathname), "")
- );
+ const cleanPathname = opts.parsed.pathname === "" ? "" : withoutTrailingSlash(
+ opts.parsed.pathname.replace(extname(opts.parsed.pathname), ""),
+ );
let internalHref: string;
if (isAbsolute(cleanPathname)) {
@@ -57,14 +55,13 @@ const toInternalLink = (opts: {
resolved = withoutTrailingSlash(joined.replace(/\/index$/i, ""));
}
- internalHref =
- resolved === ""
- ? resolved + opts.parsed.hash
- : withLeadingSlash(resolved) + opts.parsed.hash;
+ internalHref = resolved === ""
+ ? resolved + opts.parsed.hash
+ : withLeadingSlash(resolved) + opts.parsed.hash;
if (resolved !== "") {
opts.internalLinks.add(
- new URL(withoutLeadingSlash(internalHref), opts.baseUrl)
+ new URL(withoutLeadingSlash(internalHref), opts.baseUrl),
);
}
}
@@ -76,9 +73,9 @@ const toInternalLink = (opts: {
// console.log(prefixedHref);
- return `${
- opts.text
- }`;
+ return `${opts.text}`;
};
export const parseMarkdown = ({
@@ -96,14 +93,13 @@ export const parseMarkdown = ({
const headings: Array = [];
const renderer = new marked.Renderer();
const tokens = marked.lexer(text);
- const slugger = new marked.Slugger();
for (const [_index, token] of tokens.entries()) {
if (token.type === "heading") {
headings.push({
text: token.text,
level: token.depth,
- slug: slugger.slug(token.text),
+ slug: slugify(token.text),
});
}
}
@@ -125,23 +121,22 @@ export const parseMarkdown = ({
return parsed.protocol !== undefined || parsed.pathname.startsWith("mailto")
? toExternalLink(href, title, text)
: toInternalLink({
- title,
- text,
- parsed,
- baseUrl,
- internalLinks,
- currentPath,
- isDirIndex,
- });
+ title,
+ text,
+ parsed,
+ baseUrl,
+ internalLinks,
+ currentPath,
+ isDirIndex,
+ });
};
renderer.heading = (
text: string,
level: 1 | 2 | 3 | 4 | 5 | 6,
_raw: string,
- slugger: marked.Slugger
): string => {
- const slug = slugger.slug(text);
+ const slug = slugify(text);
return `#${text}`;
};
@@ -155,7 +150,7 @@ export const parseMarkdown = ({
} else {
const href = isDirIndex
? join(dirname(`${currentPath}/index`), parsed.pathname)
- : join(dirname(currentPath), parsed.pathname);
+ : join(dirname(currentPath).replace(/\./, "/"), parsed.pathname);
return ``;
}
};
@@ -170,11 +165,6 @@ export const parseMarkdown = ({
marked.use({
renderer,
- pedantic: false,
- gfm: true,
- breaks: false,
- smartLists: true,
- xhtml: false,
});
const html = marked.parser(tokens);
diff --git a/pages.ts b/pages.ts
index cb42cd3..524c6c7 100644
--- a/pages.ts
+++ b/pages.ts
@@ -106,7 +106,7 @@ function getTags(pages: Page[]): string[] {
function getPagesWithTag(pages: Page[], tag: string, exclude?: Page[]): Page[] {
return pages.filter(
- (page) => page.tags?.includes(tag) && !exclude?.includes(page)
+ (page) => page.tags?.includes(tag) && !exclude?.includes(page),
);
}
@@ -114,13 +114,13 @@ function getRelatedPages(pages: Page[], current: Page): Page[] {
return pages.filter(
(page) =>
page.url.pathname !== current.url.pathname &&
- page?.tags?.some((tag) => current?.tags?.includes(tag))
+ page?.tags?.some((tag) => current?.tags?.includes(tag)),
);
}
function getChildPages(
pages: Page[],
- current: Page
+ current: Page,
): { childPages: Page[]; allChildPages: Page[] } {
const childPages: Page[] = [];
const allChildPages: Page[] = [];
@@ -139,7 +139,7 @@ function getChildPages(
function getPagesByTags(
pages: Page[],
tags: string[],
- exclude?: Page[]
+ exclude?: Page[],
): Record {
const pageMap: Record = {};
tags.forEach((tag) => {
@@ -160,7 +160,7 @@ function sortPages(pages: Page[]): Page[] {
}
function sortTaggedPages(
- taggedPages: Record
+ taggedPages: Record,
): Record {
return Object.keys(taggedPages)
.sort((a, b) => taggedPages[b].length - taggedPages[a].length)
@@ -253,6 +253,7 @@ function generateContentPage({
const raw = decoder.decode(Deno.readFileSync(entry.path));
const slug = slugify(entry.name.replace(/\.md$/i, ""), { lower: true });
const pageUrl = new URL(join(dirname(relPath), slug), url);
+ console.log(relPath);
let page: Page = {
url: pageUrl,
@@ -280,8 +281,8 @@ function generateContentPage({
page = { ...page, html, links, headings };
- page.title ??=
- getTitleFromHeadings(headings) || getTitleFromFilename(relPath);
+ page.title ??= getTitleFromHeadings(headings) ||
+ getTitleFromFilename(relPath);
return page;
}
@@ -325,8 +326,8 @@ function generateIndexPageFromFile({
page = { ...page, html, links, headings };
- page.title ??=
- getTitleFromHeadings(headings) || getTitleFromFilename(dirName);
+ page.title ??= getTitleFromHeadings(headings) ||
+ getTitleFromFilename(dirName);
return page;
}