astro/packages/integrations/markdoc/README.md
Ben Holmes fec583909a
@astrojs/markdoc (#6209)
* chore: integration setup

* feat: get markdoc contents

* wip: expose Markdoc from integration

* feat: basic Astro renderer in with-markdoc

* fix: component render bug

* deps: stringify-attributes

* fix: render attributes to html

* wip: play with separate markdoc config

* wip: get dream API for file loader working

* chore: unit tests

* deps: graymatter

* feat: addContentEntryType integration hook

* deps: move to @astrojs/markdoc

* feat: move Renderer to markdoc, get Content component!

* wip: scaffold content types

* deps: mdx

* wip: move mdx to collection type API

* refactor: move plain md to content entry type

* refactor: pass file contents

* oops, forgot to commit untracked

* fix: markdoc.config loading

* refactor: remove fallback loader

* chore: remove unused dream file

* deps: devalue, test fixture

* test: entry and collections parse

* play: make sure md also works

* deps: add shiki for Code comp error

* fix: remove "components" from tsconfig

* chore: ignore `.astro` type error

* fix: avoid import if no config present (prod build error)

* fix: stop bundling markdoc for isTag

* test: prod builds

* test: content component dev and build

* chore: Markdoc working! log

* fix: ContentEntryType import

* chore: remove content-types. Too early!

* chore: remove unused options object

* play: add docs example with Aside and Since ported

* chore: with-markdoc strictNullChecks

* chore: unused file

* feat: allow Render type injection

* feat: content prop types for markdoc!

* chore: clean up Markdoc starter to essentials

* chore: unused style tag

* chore: remove unused deps

* fix: glob for single content extension

* chore: remove unused fixture dep

* chore: remove markdoc.config loader

* docs: update example README

* docs: @astrojs/markdoc README intro

* fix: line endings in test

* docs: add usage and examples to Markdoc README

* docs: change with-markdoc title

* docs: README edits

* refactor: clean up astroNode

* nit: reorder type import

* docs: add note on Aside src

* chore: changeset

* nit: 0.0.0 to avoid version bump

* fix: lock

* refactor: remove unneeded async

* fix: import types from @astrojs/markdoc

* fix: type inferencing in preview

* fix: remove unneeded html-escaper

* deps: remove html-escaper

* feat: support `.md` overrides for content collections

* chore: mdoc -> md

* feat: generate `.md` types override

* Revert "feat: support `.md` overrides for content collections"

This reverts commit c06f83ef85.

* Squashed commit of `markdoc-poc`

commit bd0dd9d71938da22f596ddd1662d9b91707f80c7
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 15 09:43:04 2023 -0500

    Revert "feat: support `.md` overrides for content collections"

    This reverts commit c06f83ef85.

commit 5b9a1f33f4d0ffd4a63a81a86652fee032b75d76
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 13:48:56 2023 -0500

    feat: generate `.md` types override

commit e464ae894ed69cf492de1d3e8018d9a17c00d7a3
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:56:11 2023 -0500

    chore: mdoc -> md

commit b74fd6a7d6b973b2bfd9b2ab9567801ff4d7fec1
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:56:01 2023 -0500

    feat: support `.md` overrides for content collections

commit bdcc18a7c03e3524927ba7c1b18ad2fd80a2e994
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:30:48 2023 -0500

    deps: remove html-escaper

commit f44b57f0fa2ac923a3f2a46471fda710e92d5824
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:30:42 2023 -0500

    fix: remove unneeded html-escaper

commit fb7919498aca6beded444ed5922f3598d244d30c
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:08:04 2023 -0500

    fix: type inferencing in preview

commit 0c05034b321a82f2f054b527538d57f45f096822
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 11:32:19 2023 -0500

    fix: import types from @astrojs/markdoc

commit 57e741a6306b801ac4ce47f20f7664518359611d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 11:28:33 2023 -0500

    refactor: remove unneeded async

commit b19d85451e60da281bc32a2a180452987a049479
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 10:26:20 2023 -0500

    fix: lock

commit b1083a14f9fefe5e7a9f2a8c7c31626a7430c851
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 10:19:50 2023 -0500

    nit: 0.0.0 to avoid version bump

commit 71891ebe9dd54b495e965bf064ee78aaca9dfede
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:33:27 2023 -0500

    chore: changeset

commit 444752a5e27c4f5bda54ac024eca9a7ab1c4563f
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:30:10 2023 -0500

    docs: add note on Aside src

commit 619d4b3fdf02cc34ea3f8f9a0b4d93db273bb0a1
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:25:56 2023 -0500

    nit: reorder type import

commit e914da05706382b17e1b8f3404fc2852002a5dc7
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:25:38 2023 -0500

    refactor: clean up astroNode

commit 2dfc226f56dc6a9e3e3ace72d4c3889a1fde4e6d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:08:56 2023 -0500

    docs: README edits

commit 3c7b85c7d9e3c75d551baf33aba9a646d0d61cba
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:07:29 2023 -0500

    docs: change with-markdoc title

commit 29cdea9a0be439b631389cbc906751185489cbe9
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:29:10 2023 -0500

    docs: add usage and examples to Markdoc README

commit e397a80179e9bd934ef8875155d7491b1d4e077a
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:18:54 2023 -0500

    fix: line endings in test

commit f9ebf59982fa7dc1202368da344897f54de7f259
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:09:15 2023 -0500

    docs: @astrojs/markdoc README intro

commit 7800e9c9dac946f89e139b200a0083b53942118d
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:08:07 2023 -0500

    docs: update example README

commit f0b900a6fa7f0775dfab7600c4fb04c9b64e7439
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:04:34 2023 -0500

    chore: remove markdoc.config loader

commit 3f040e44d0c639dc51976abe75f46c57f0be60fc
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 17:58:52 2023 -0500

    chore: remove unused fixture dep

commit b2ea6c26df6acf1df8f06d2feb9c91da8c8eafae
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 17:58:25 2023 -0500

    fix: glob for single content extension

commit f4e171c05c421f8696ebc406c9d4d28967f80690
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:10:39 2023 -0500

    chore: remove unused deps

commit d9095d0284b0fc22d5da367771bc5286eb8f1926
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:10:31 2023 -0500

    chore: unused style tag

commit a5435f13575577bf6a954c68eef9e883959568dc
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:08:52 2023 -0500

    chore: clean up Markdoc starter to essentials

commit 815e2f2bad5617ab077d278d7c751f34c22dd0d9
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:13:02 2023 -0500

    feat: content prop types for markdoc!

commit 8bcd23c4e70b4900b16ebf5a30dad6ec998f4092
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:05:40 2023 -0500

    feat: allow Render type injection

commit cdb7e9e4878888c0883d4082d2415f4d85050389
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:04:37 2023 -0500

    chore: unused file

commit 0df33ea37d4ca9bd933be54d7f8b455fce174679
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:04:31 2023 -0500

    chore: with-markdoc strictNullChecks

commit 377c6d766bd51469f09e1f946a1c2b77affe6620
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 17:39:35 2023 -0500

    play: add docs example with Aside and Since ported

commit f9f811257167da7a5e05a7de3a12b58e7b3568b1
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:22:47 2023 -0500

    chore: remove unused options object

commit c9a66bfeb0ce55ef0a1c0c6ed2da746d5250c795
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:18:27 2023 -0500

    chore: remove content-types. Too early!

commit 67f49e86a980c5d858ad0e384bdc67fad5e096e6
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:18:20 2023 -0500

    fix: ContentEntryType import

commit 9b93d8189213a12346520fa8a71eae824386ad3e
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:10:06 2023 -0500

    chore: Markdoc working! log

commit 90f77645ef3985fbba1badeb4413759626290b1a
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:09:58 2023 -0500

    test: content component dev and build

commit 14559f6a40af63106cebeba210e73392d5d1c37d
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:01:10 2023 -0500

    test: prod builds

commit a0dcbff73cf8b3cf9b55434a8fb2b0b683903c5f
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:01:04 2023 -0500

    fix: stop bundling markdoc for isTag

commit cb1904876f074c50c206131e9588878230bbab47
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:53 2023 -0500

    fix: avoid import if no config present (prod build error)

commit bda8295e7920638c013875ab9fe31ce87743c95f
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:33 2023 -0500

    chore: ignore `.astro` type error

commit 28a6d7993a227c68aeca747661254ff68883244a
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:12 2023 -0500

    fix: remove "components" from tsconfig

commit 0297bb749599aa8063e685a7ece738afe3ae77cc
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:01 2023 -0500

    deps: add shiki for Code comp error

commit e4f141e558b3d76b761bec69e694eaa40cdf250d
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 08:45:37 2023 -0500

    play: make sure md also works

commit dfdb35f0888ee83457ee825172f7d8485b7d2a43
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:25:18 2023 -0500

    test: entry and collections parse

commit eaf4994bf309955209f406d7db0863775fdf4fe0
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:25:07 2023 -0500

    deps: devalue, test fixture

commit 3f71932c04f8064cfe74b7f4b02409c681925e4a
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:24:47 2023 -0500

    chore: remove unused dream file

commit b182686f88878cdf003efba798edb69372872b21
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:29:32 2023 -0500

    refactor: remove fallback loader

commit 0540d701ccb33db7a82be861c36dcafec0dbbb81
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:26:21 2023 -0500

    fix: markdoc.config loading

commit 575dadf70e7b5aa263e30c8b496a1cceebd31bb4
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:16:18 2023 -0500

    oops, forgot to commit untracked

commit 9746a97bc2dfcf63bfd685f541ffbd229ea134ca
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:16:02 2023 -0500

    refactor: pass file contents

commit 534a658325cbddbb153bea1c1338d13011eb0e4f
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:13:38 2023 -0500

    refactor: move plain md to content entry type

commit 24df79b1475c12ccefaadb2392e9d5911c491872
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 15:51:44 2023 -0500

    wip: move mdx to collection type API

commit cc44e4fa3453353041fdbe9424d96040f93f28a7
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 15:50:52 2023 -0500

    deps: mdx

commit c30c1b3dcf6da3a075c1f07260ae893ef93e07e2
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 10:10:39 2023 -0500

    wip: scaffold content types

commit 2487aedf9deb74a5725ba8393766b68f60b74af8
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 09:53:35 2023 -0500

    feat: move Renderer to markdoc, get Content component!

commit 44faff911b8de6f6da45f195dad0a56a426b076e
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 09:53:06 2023 -0500

    deps: move to @astrojs/markdoc

commit bef26906f3f2f1104b88332778ee219cf062fe88
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 16:01:34 2023 -0500

    feat: addContentEntryType integration hook

commit 508568f5117a56fc4ef14db9d0482cdfcfe5007d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 16:00:42 2023 -0500

    deps: graymatter

commit cb706020391b4b61f3854b3e9a9d9190a94785c9
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 14:00:27 2023 -0500

    chore: unit tests

commit 545246d15362b8f981f8c315d3b7d0341626eeb8
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 14:00:23 2023 -0500

    wip: get dream API for file loader working

commit 97664e0f862f7f6e0c9ce8478b3bed58432f6426
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 18:09:23 2023 -0500

    wip: play with separate markdoc config

commit c5d8a3336cc9f5dd7b4115b7f86fdb86474ca462
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 17:04:22 2023 -0500

    fix: render attributes to html

commit 82e30a0083b20c85307726027ee7e74df7378632
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 17:04:14 2023 -0500

    deps: stringify-attributes

commit b72ba6167db88d5042eee51d5912d4270417bca5
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:33:27 2023 -0500

    fix: component render bug

commit 59f1e5c6f89d2c7457a0b0e0acb838bf945d39bf
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:11:15 2023 -0500

    feat: basic Astro renderer in with-markdoc

commit de15a7213d9afbc94dd0e50f713c9a02dc8e90e5
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:11:01 2023 -0500

    wip: expose Markdoc from integration

commit 83bfe4441b652a7eb880486785dc2c5eda08e3b3
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 11:21:17 2023 -0500

    feat: get markdoc contents

commit 6f500689a00b8f8c2151254930fda24e0b3e4207
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 11:13:57 2023 -0500

    chore: integration setup

* Squashed commit of `markdoc-poc`

commit bd0dd9d71938da22f596ddd1662d9b91707f80c7
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 15 09:43:04 2023 -0500

    Revert "feat: support `.md` overrides for content collections"

    This reverts commit c06f83ef85.

commit 5b9a1f33f4d0ffd4a63a81a86652fee032b75d76
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 13:48:56 2023 -0500

    feat: generate `.md` types override

commit e464ae894ed69cf492de1d3e8018d9a17c00d7a3
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:56:11 2023 -0500

    chore: mdoc -> md

commit b74fd6a7d6b973b2bfd9b2ab9567801ff4d7fec1
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:56:01 2023 -0500

    feat: support `.md` overrides for content collections

commit bdcc18a7c03e3524927ba7c1b18ad2fd80a2e994
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:30:48 2023 -0500

    deps: remove html-escaper

commit f44b57f0fa2ac923a3f2a46471fda710e92d5824
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:30:42 2023 -0500

    fix: remove unneeded html-escaper

commit fb7919498aca6beded444ed5922f3598d244d30c
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 12:08:04 2023 -0500

    fix: type inferencing in preview

commit 0c05034b321a82f2f054b527538d57f45f096822
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 11:32:19 2023 -0500

    fix: import types from @astrojs/markdoc

commit 57e741a6306b801ac4ce47f20f7664518359611d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 11:28:33 2023 -0500

    refactor: remove unneeded async

commit b19d85451e60da281bc32a2a180452987a049479
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 10:26:20 2023 -0500

    fix: lock

commit b1083a14f9fefe5e7a9f2a8c7c31626a7430c851
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 10:19:50 2023 -0500

    nit: 0.0.0 to avoid version bump

commit 71891ebe9dd54b495e965bf064ee78aaca9dfede
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:33:27 2023 -0500

    chore: changeset

commit 444752a5e27c4f5bda54ac024eca9a7ab1c4563f
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:30:10 2023 -0500

    docs: add note on Aside src

commit 619d4b3fdf02cc34ea3f8f9a0b4d93db273bb0a1
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:25:56 2023 -0500

    nit: reorder type import

commit e914da05706382b17e1b8f3404fc2852002a5dc7
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:25:38 2023 -0500

    refactor: clean up astroNode

commit 2dfc226f56dc6a9e3e3ace72d4c3889a1fde4e6d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:08:56 2023 -0500

    docs: README edits

commit 3c7b85c7d9e3c75d551baf33aba9a646d0d61cba
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 14 09:07:29 2023 -0500

    docs: change with-markdoc title

commit 29cdea9a0be439b631389cbc906751185489cbe9
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:29:10 2023 -0500

    docs: add usage and examples to Markdoc README

commit e397a80179e9bd934ef8875155d7491b1d4e077a
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:18:54 2023 -0500

    fix: line endings in test

commit f9ebf59982fa7dc1202368da344897f54de7f259
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:09:15 2023 -0500

    docs: @astrojs/markdoc README intro

commit 7800e9c9dac946f89e139b200a0083b53942118d
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:08:07 2023 -0500

    docs: update example README

commit f0b900a6fa7f0775dfab7600c4fb04c9b64e7439
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 18:04:34 2023 -0500

    chore: remove markdoc.config loader

commit 3f040e44d0c639dc51976abe75f46c57f0be60fc
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 17:58:52 2023 -0500

    chore: remove unused fixture dep

commit b2ea6c26df6acf1df8f06d2feb9c91da8c8eafae
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 17:58:25 2023 -0500

    fix: glob for single content extension

commit f4e171c05c421f8696ebc406c9d4d28967f80690
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:10:39 2023 -0500

    chore: remove unused deps

commit d9095d0284b0fc22d5da367771bc5286eb8f1926
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:10:31 2023 -0500

    chore: unused style tag

commit a5435f13575577bf6a954c68eef9e883959568dc
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 15:08:52 2023 -0500

    chore: clean up Markdoc starter to essentials

commit 815e2f2bad5617ab077d278d7c751f34c22dd0d9
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:13:02 2023 -0500

    feat: content prop types for markdoc!

commit 8bcd23c4e70b4900b16ebf5a30dad6ec998f4092
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:05:40 2023 -0500

    feat: allow Render type injection

commit cdb7e9e4878888c0883d4082d2415f4d85050389
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:04:37 2023 -0500

    chore: unused file

commit 0df33ea37d4ca9bd933be54d7f8b455fce174679
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 13 14:04:31 2023 -0500

    chore: with-markdoc strictNullChecks

commit 377c6d766bd51469f09e1f946a1c2b77affe6620
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 17:39:35 2023 -0500

    play: add docs example with Aside and Since ported

commit f9f811257167da7a5e05a7de3a12b58e7b3568b1
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:22:47 2023 -0500

    chore: remove unused options object

commit c9a66bfeb0ce55ef0a1c0c6ed2da746d5250c795
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:18:27 2023 -0500

    chore: remove content-types. Too early!

commit 67f49e86a980c5d858ad0e384bdc67fad5e096e6
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:18:20 2023 -0500

    fix: ContentEntryType import

commit 9b93d8189213a12346520fa8a71eae824386ad3e
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:10:06 2023 -0500

    chore: Markdoc working! log

commit 90f77645ef3985fbba1badeb4413759626290b1a
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:09:58 2023 -0500

    test: content component dev and build

commit 14559f6a40af63106cebeba210e73392d5d1c37d
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:01:10 2023 -0500

    test: prod builds

commit a0dcbff73cf8b3cf9b55434a8fb2b0b683903c5f
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:01:04 2023 -0500

    fix: stop bundling markdoc for isTag

commit cb1904876f074c50c206131e9588878230bbab47
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:53 2023 -0500

    fix: avoid import if no config present (prod build error)

commit bda8295e7920638c013875ab9fe31ce87743c95f
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:33 2023 -0500

    chore: ignore `.astro` type error

commit 28a6d7993a227c68aeca747661254ff68883244a
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:12 2023 -0500

    fix: remove "components" from tsconfig

commit 0297bb749599aa8063e685a7ece738afe3ae77cc
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 09:00:01 2023 -0500

    deps: add shiki for Code comp error

commit e4f141e558b3d76b761bec69e694eaa40cdf250d
Author: bholmesdev <hey@bholmes.dev>
Date:   Fri Feb 10 08:45:37 2023 -0500

    play: make sure md also works

commit dfdb35f0888ee83457ee825172f7d8485b7d2a43
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:25:18 2023 -0500

    test: entry and collections parse

commit eaf4994bf309955209f406d7db0863775fdf4fe0
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:25:07 2023 -0500

    deps: devalue, test fixture

commit 3f71932c04f8064cfe74b7f4b02409c681925e4a
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 13:24:47 2023 -0500

    chore: remove unused dream file

commit b182686f88878cdf003efba798edb69372872b21
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:29:32 2023 -0500

    refactor: remove fallback loader

commit 0540d701ccb33db7a82be861c36dcafec0dbbb81
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:26:21 2023 -0500

    fix: markdoc.config loading

commit 575dadf70e7b5aa263e30c8b496a1cceebd31bb4
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:16:18 2023 -0500

    oops, forgot to commit untracked

commit 9746a97bc2dfcf63bfd685f541ffbd229ea134ca
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:16:02 2023 -0500

    refactor: pass file contents

commit 534a658325cbddbb153bea1c1338d13011eb0e4f
Author: bholmesdev <hey@bholmes.dev>
Date:   Thu Feb 9 12:13:38 2023 -0500

    refactor: move plain md to content entry type

commit 24df79b1475c12ccefaadb2392e9d5911c491872
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 15:51:44 2023 -0500

    wip: move mdx to collection type API

commit cc44e4fa3453353041fdbe9424d96040f93f28a7
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 15:50:52 2023 -0500

    deps: mdx

commit c30c1b3dcf6da3a075c1f07260ae893ef93e07e2
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 10:10:39 2023 -0500

    wip: scaffold content types

commit 2487aedf9deb74a5725ba8393766b68f60b74af8
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 09:53:35 2023 -0500

    feat: move Renderer to markdoc, get Content component!

commit 44faff911b8de6f6da45f195dad0a56a426b076e
Author: bholmesdev <hey@bholmes.dev>
Date:   Wed Feb 8 09:53:06 2023 -0500

    deps: move to @astrojs/markdoc

commit bef26906f3f2f1104b88332778ee219cf062fe88
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 16:01:34 2023 -0500

    feat: addContentEntryType integration hook

commit 508568f5117a56fc4ef14db9d0482cdfcfe5007d
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 16:00:42 2023 -0500

    deps: graymatter

commit cb706020391b4b61f3854b3e9a9d9190a94785c9
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 14:00:27 2023 -0500

    chore: unit tests

commit 545246d15362b8f981f8c315d3b7d0341626eeb8
Author: bholmesdev <hey@bholmes.dev>
Date:   Tue Feb 7 14:00:23 2023 -0500

    wip: get dream API for file loader working

commit 97664e0f862f7f6e0c9ce8478b3bed58432f6426
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 18:09:23 2023 -0500

    wip: play with separate markdoc config

commit c5d8a3336cc9f5dd7b4115b7f86fdb86474ca462
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 17:04:22 2023 -0500

    fix: render attributes to html

commit 82e30a0083b20c85307726027ee7e74df7378632
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 17:04:14 2023 -0500

    deps: stringify-attributes

commit b72ba6167db88d5042eee51d5912d4270417bca5
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:33:27 2023 -0500

    fix: component render bug

commit 59f1e5c6f89d2c7457a0b0e0acb838bf945d39bf
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:11:15 2023 -0500

    feat: basic Astro renderer in with-markdoc

commit de15a7213d9afbc94dd0e50f713c9a02dc8e90e5
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 16:11:01 2023 -0500

    wip: expose Markdoc from integration

commit 83bfe4441b652a7eb880486785dc2c5eda08e3b3
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 11:21:17 2023 -0500

    feat: get markdoc contents

commit 6f500689a00b8f8c2151254930fda24e0b3e4207
Author: bholmesdev <hey@bholmes.dev>
Date:   Mon Feb 6 11:13:57 2023 -0500

    chore: integration setup

* feat: add `--perf` flag to skip md plugins

* wip: performance pkg with md fixture

* refactor: move rendering to util

* refactor: generate posts instead of commiting

* deps: npm-run-all

* chore: mdoc and mdx fixtures

* chore: remove generated files from git

* chore: lockfile

* chore: remove .astro types from remote

* refactor: --perf -> --internal-ci-perf

* chore: log ext and directory on write

* refactor: --perf -> env var

* feat: add perf benchmark check to mdx

* refactor: isPerfBenchmark

* chore: refine generated ignore

* feat: test simple and with-components cases

* chore: remove old --internal-ci reference

* refactor: ASTRO_CI_PERFORMANCE_RUN -> ASTRO_PERFORMANCE_BENCHMARK

* chore: remove accidental file

* feat: add react-component render benchmark

* chore: add `--format` flag to benchmark

* refactor: move markdoc transform to build time

* docs: only used in content collections

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* chore: use Markdoc terms for transform

* refactor: remove Markdoc export

* refactor: remove advanced component API

* test: update fixture to match new config

* chore: with-markdoc filetree

* docs: add "exclusively" to README

* docs: query for -> query your collection

* docs: update config to new Markdoc options

* docs: astro-ui-frameworks -> astro-components

* edit: add client component instructions

* nit: add "today" to imply future support

* docs: add separate HTML and component examples

* fix: inconsistent tabs v spaces

* fix: indentation

* deps: zod

* chore: check components are capitalized names

* chore: raise error if no matching component found

* chore: hand `mjs` highlighting in error overlay

* chore: validate tags and nodes

* refactor: use MarkdocError on render errors

* fix: handle possible cache miss

* chore: use error hint

* test: update Markdoc node config test

* chore: clarify Markdoc config

* docs: reshuffle note

* chore: update to `nodes` rec

* docs: clarify Markdoc attributes

* docs: add editor integration

* chore: update example coding challenge

* chore: update DocsContent comments

* fix: cant find zod for some reason

* fix: potentially unreliable cache

* chore: remove revealSecret from ex

* wip: forward slash??

* fix: forward slash.

* chore: lint

* chore: ignore statements

* chore: clarify semi-private hooks

* docs: with-mdx -> with-markdoc

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* nit: don't capitalize cc

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* docs: :::

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* nit: remove IFFE

* chore: remove accidental changelog

* nit: attempt pathToFileURL

* nit: tested if

* fix: smartypants should be avoided in benchmark!

* nit: remove `any`

* nit: extract component zod obj

* fix: move validateComponents to render comp

* nit: remove unused return

* nit: move shiki highlighter consts to outer scope

* nit: remove `any` from mdx

* refactor: add type defs for private integration hooks

* fix: type error in mdx defaults

* fix: broke extendMarkdownConfig, oops!

* Revert "nit: attempt pathToFileURL"

This reverts commit 45fac9922d.

* fix: only validate when components is defined

* fix: remove types from git

* fix: migrate mdoc perf benchmark to new config

* chore: delete more sneaky types

* docs: add usage to changeset

* docs: update config example in README

* docs: add manual rendering instructions

* Update examples/with-markdoc/README.md

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

* docs: reorder configuration options

* docs: "see the next section"

* chore: add numPosts as a benchmark flag

* chore: bump to minor changesets for MDX

* chore: update TODO docs links

* docs: update component key naming and node instr

* docs: redraft markdoc runtime config intro

* Squashed commit of the following:

commit fbab73c96e
Author: matthewp <matthewp@users.noreply.github.com>
Date:   Tue Mar 7 16:38:11 2023 +0000

    [ci] format

commit a206106098
Author: Matthew Phillips <matthew@skypack.dev>
Date:   Tue Mar 7 11:35:54 2023 -0500

    Expose the ssr manifest (#6435)

    * Expose the ssr manifest

    * Add changeset

    * Add types for virtual mod

commit 2751584387
Author: Princesseuh <Princesseuh@users.noreply.github.com>
Date:   Tue Mar 7 15:14:15 2023 +0000

    [ci] format

commit 694918a56b
Author: Erika <3019731+Princesseuh@users.noreply.github.com>
Date:   Tue Mar 7 16:12:21 2023 +0100

    Implement RFC "A core story for images" (#6344)

    * feat(assets): Add Vite plugin

    * feat(images): Set up Image component

    * fix(types): Attempt to fix type generation

    * Revert "fix(types): Attempt to fix type generation"

    This reverts commit 063aa276e2.

    * fix(image): Fix image types causing build to fail

    * feat(image): Implement client side part

    * feat(services): Allow arbitrary transforms parameters

    * fix(image): Fix paths and types

    * config(types): Update config types to provide completions for available services

    * feat(image): Add serving in dev

    * feat(image): Improve type error messages

    * refactor(image): Move sharp's parseParams to baseService

    * refactor(image): Skip work in dev for remote servies

    * feat(image): Add support for remote images

    * feat(image): Add squoosh service

    * chore: update export map

    * refactor(image): Abstract attributes handling by services

    * config(vercel): Remove test image service

    * feat(image): Support for relative images in Markdown (WIP)

    * feat(images): Add support for relative images in Markdown

    * feat(image): Update with RFC feedback

    * fix(image): Fix alt error on getImage

    * feat(image): Add support for assets validation through content collections

    * feat(image): Remove validateTransform

    * feat(image): Move to assets folder

    * fix(image): Fix package exports

    * feat(image): Add static imports references to virtual moduel

    * fix(image): Fix images from content collections not working when embedded

    * chore: lockfile

    * fix(markdown): Fix type

    * fix(images): Flag enhanced images behing an experimental flag

    * config(example): Update images example conifg

    * fix(image): Fix types

    * fix(image): Fix asset type for strict, allow arbritary input and output formats

    * chore: fix example check

    * feat(image): Emit assets for ESM imported images

    * Add initial core image tests (#6381)

    * feat(images): Make frontmatter extraction more generic than images for future

    * feat(image): Add support for building

    * fix(image): Fix types

    * fix(images): Fix compatibility with image integration

    * feat(images): Cuter generation stats

    * fix(images): Globals are unsafe, it turns out

    * fix(images): Only generate images if flag is enabled

    * fix(images): Only create `addStaticImage` in build

    * feat(images): Add SSR endpoint

    * fix(images): Only inject route in SSR

    * Add tests for SSR

    * Remove console.log

    * Updated lockfile

    * rename to satisfy the link gods

    * skip build tests for now

    * fix(images): Fix WASM files not being copied in dev

    * feat(images): Add quality presets

    * fix build tests running

    * Remove console.log

    * Add tests for getImage

    * Test local services

    * Test the content collections API

    * Add tests for quality

    * Skipping content collections test

    * feat(image): Add support for `~/assets` alias

    * test(image): Add tests for aliases in dev

    * Fix windows + content collections

    * test(image): Add tests for aliased images and images in Markdown

    * Fix markdown images being built

    * Should be posix join

    * Use the optimized image

    * fix test

    * Fixes windows smoke

    * fix(image): Nits

    * feat(images): Add automatic update for `env.d.ts` when experimental images are enabled

    * fix(images): Revert env.d.ts change if the user opted-out of the experimental image support

    * chore: remove bad image example project

    * feat(image): Rename `experimental.images` to `experimental.assets`

    * fix(images): Remove unused code in MDX integration

    * chore: Remove unrelated change

    * fix(images): Remove export from astro/components

    * Fix, esm import on Win

    * test(images): Add test for format

    * fix(images): Add `client-image.d.ts` to export map

    * chore: changeset

    * fix(images): Adjust with feedback, no more automatic refine, asset() -> image()

    * fix(images): Fix types

    * fix(images): Remove unnecessary spread

    * fix(images): Better types for parseUrl and transform

    * fix(images): Fix types

    * fix(images): Adjust from feedback

    * fix(images): Pass width and height through getHTMLAttributes even if they're not added by the uesr

    * fix(images): Recusirsively extract frontmatter assets

    * fix(images): Use a reduce instead

    * feat(images): Add support for data: URIs

    * chore: changeset

    * docs(images): Misc docs fixes

    * Update .changeset/gold-rocks-cry.md

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update .changeset/gold-rocks-cry.md

    Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

    * Update packages/astro/src/@types/astro.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update packages/astro/src/assets/services/service.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update packages/astro/src/assets/services/service.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update packages/astro/src/assets/services/service.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update packages/astro/src/assets/types.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    * Update packages/astro/src/assets/types.ts

    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>

    ---------

    Co-authored-by: Matthew Phillips <matthew@skypack.dev>
    Co-authored-by: Matthew Phillips <matthew@matthewphillips.info>
    Co-authored-by: Chris Swithinbank <swithinbank@gmail.com>
    Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>

commit 377530a810
Author: ematipico <ematipico@users.noreply.github.com>
Date:   Tue Mar 7 13:43:21 2023 +0000

    [ci] format

commit fe88f89512
Author: Emanuele Stoppa <my.burning@gmail.com>
Date:   Tue Mar 7 13:41:24 2023 +0000

    chore: use directive `@ts-expect-error` instead of `@ts-ignore` (#6429)

commit e1858e6334
Author: ematipico <ematipico@users.noreply.github.com>
Date:   Tue Mar 7 06:57:52 2023 +0000

    [ci] format

commit 75921b3cd9
Author: Emanuele Stoppa <my.burning@gmail.com>
Date:   Tue Mar 7 06:55:41 2023 +0000

    feat(cli): add `--watch` to `astro check` command (#6356)

    * feat(cli): add `--watch` to `astro check` command

    * chore: refactor in a leaner way, logic not changed

    * chore: lint

    * chore: revert changes in sync command

    * chore: tweak server settings

    * test: add one test case

    * chore: increase timeout

    * test: predictable testing

    * chore: add changeset

    * chore: code suggestions

    * code suggestions

    * chore: use directly `chokidar`

    * chore: tweak code

    * fix: open documents first

    * chore: disable test

    * chore: code suggestions

    * chore: code suggestions

    * Apply suggestions from code review

    Co-authored-by: Erika <3019731+Princesseuh@users.noreply.github.com>

    * code suggestions

    * chore: rebase

    ---------

    Co-authored-by: Erika <3019731+Princesseuh@users.noreply.github.com>

commit 1291afc09d
Author: Bjorn Lu <bjornlu.dev@gmail.com>
Date:   Tue Mar 7 14:50:34 2023 +0800

    Fix changeset run (#6442)

commit 00a0af7ed4
Author: Bjorn Lu <bjornlu.dev@gmail.com>
Date:   Tue Mar 7 10:52:47 2023 +0800

    Move benchmark package and update changeset config (#6433)

commit af05a4fa46
Author: Nate Moore <natemoo-re@users.noreply.github.com>
Date:   Mon Mar 6 14:06:33 2023 -0600

    Update README.md (#6437)

    * Update README.md

    * Update README.md

commit 8ebf4b7481
Author: Nate Moore <natemoo-re@users.noreply.github.com>
Date:   Mon Mar 6 14:03:33 2023 -0600

    chore: update branding assets (#6436)

commit afbbc4d5bf
Author: Erika <3019731+Princesseuh@users.noreply.github.com>
Date:   Mon Mar 6 19:57:16 2023 +0100

    Update compilation target for Node 16 (#6213)

    * config(esbuild): Update esbuild target to node16

    * config(package): Update root package.json node engine

    * config(tsconfig): Update all the tsconfigs module and targets

    * chore: changeset

    * chore: remove unneeded file

commit 18acae3edc
Author: Sarah Rainsberger <sarah@rainsberger.ca>
Date:   Mon Mar 6 14:36:40 2023 -0400

    [error docs] update link for client-side scripts (#6423)

commit 8b49d1781d
Author: ematipico <ematipico@users.noreply.github.com>
Date:   Mon Mar 6 17:03:18 2023 +0000

    [ci] format

commit a4a74ab70c
Author: Emanuele Stoppa <my.burning@gmail.com>
Date:   Mon Mar 6 16:58:56 2023 +0000

    feat(cli): add help flags to various commands (#6394)

    Co-authored-by: Happydev <81974850+MoustaphaDev@users.noreply.github.com>

commit b087b83fe2
Author: Dennis Morello <dennismorello@gmail.com>
Date:   Mon Mar 6 17:38:42 2023 +0100

    Add getStaticPaths type helpers to infer params and props (#6150)

    * feat(astro): add InferGetStaticParamsType and InferGetStaticPropsType type helpers

    * chore(astro): added changeset

commit 19fe4cb629
Author: Houston (Bot) <108291165+astrobot-houston@users.noreply.github.com>
Date:   Mon Mar 6 08:30:38 2023 -0800

    [ci] release (#6414)

    Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>

* Revert "Squashed commit of the following:"

This reverts commit fbe129bf95.

* feat: add mdx backwards compat to make nonbreaking

* chore: add comment on error code

* Revert "chore: bump to minor changesets for MDX"

This reverts commit 3e997837bb.

---------

Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
2023-03-07 14:05:19 -05:00

348 lines
11 KiB
Markdown

# @astrojs/markdoc (experimental) 📝
This **[Astro integration][astro-integration]** enables the usage of [Markdoc](https://markdoc.dev/) to create components, pages, and content collection entries.
- <strong>[Why Markdoc?](#why-markdoc)</strong>
- <strong>[Installation](#installation)</strong>
- <strong>[Usage](#usage)</strong>
- <strong>[Configuration](#configuration)</strong>
- <strong>[Examples](#examples)</strong>
- <strong>[Troubleshooting](#troubleshooting)</strong>
- <strong>[Contributing](#contributing)</strong>
- <strong>[Changelog](#changelog)</strong>
## Why Markdoc?
Markdoc allows you to enhance your Markdown with [Astro components][astro-components]. If you have existing content authored in Markdoc, this integration allows you to bring those files to your Astro project using content collections.
## Installation
### Quick Install
The `astro add` command-line tool automates the installation for you. Run one of the following commands in a new terminal window. (If you aren't sure which package manager you're using, run the first command.) Then, follow the prompts, and type "y" in the terminal (meaning "yes") for each one.
```sh
# Using NPM
npx astro add markdoc
# Using Yarn
yarn astro add markdoc
# Using PNPM
pnpm astro add markdoc
```
If you run into any issues, [feel free to report them to us on GitHub](https://github.com/withastro/astro/issues) and try the manual installation steps below.
### Manual Install
First, install the `@astrojs/markdoc` package using your package manager. If you're using npm or aren't sure, run this in the terminal:
```sh
npm install @astrojs/markdoc
```
Then, apply this integration to your `astro.config.*` file using the `integrations` property:
__`astro.config.mjs`__
```js ins={2} "markdoc()"
import { defineConfig } from 'astro/config';
import markdoc from '@astrojs/markdoc';
export default defineConfig({
// ...
integrations: [markdoc()],
});
```
### Editor Integration
[VS Code](https://code.visualstudio.com/) supports Markdown by default. However, for Markdoc editor support, you may wish to add the following setting in your VSCode config. This ensures authoring Markdoc files provides a Markdown-like editor experience.
```json title=".vscode/settings.json"
"files.associations": {
"*.mdoc": "markdown"
}
```
## Usage
Markdoc files can only be used within content collections. Add entries to any content collection using the `.mdoc` extension:
```sh
src/content/docs/
why-markdoc.mdoc
quick-start.mdoc
```
Then, query your collection using the [Content Collection APIs](https://docs.astro.build/en/guides/content-collections/#querying-collections):
```astro
---
import { getEntryBySlug } from 'astro:content';
const entry = await getEntryBySlug('docs', 'why-markdoc');
const { Content } = await entry.render();
---
<!--Access frontmatter properties with `data`-->
<h1>{entry.data.title}</h1>
<!--Render Markdoc contents with the Content component-->
<Content />
```
📚 See the [Astro Content Collection docs][astro-content-collections] for more information.
## Configuration
`@astrojs/markdoc` offers configuration options to use all of Markdoc's features and connect UI components to your content.
### Using components
You can add Astro and UI framework components (React, Vue, Svelte, etc.) to your Markdoc using both [Markdoc tags][markdoc-tags] and HTML element [nodes][markdoc-nodes].
#### Render Markdoc tags as Astro components
You may configure [Markdoc tags][markdoc-tags] that map to components. You can configure a new tag from your `astro.config` using the `tags` attribute.
```js
// astro.config.mjs
import { defineConfig } from 'astro/config';
import markdoc from '@astrojs/markdoc';
// https://astro.build/config
export default defineConfig({
integrations: [
markdoc({
tags: {
aside: {
render: 'Aside',
attributes: {
// Component props as attribute definitions
// See Markdoc's documentation on defining attributes
// https://markdoc.dev/docs/attributes#defining-attributes
type: { type: String },
}
},
},
}),
],
});
```
Then, you can wire this render name (`'Aside'`) to a component from the `components` prop via the `<Content />` component. Note the object key name (`Aside` in this case) should match the render name:
```astro
---
import { getEntryBySlug } from 'astro:content';
import Aside from '../components/Aside.astro';
const entry = await getEntryBySlug('docs', 'why-markdoc');
const { Content } = await entry.render();
---
<Content
components={{ Aside }}
/>
```
#### Render Markdoc nodes / HTML elements as Astro components
You may also want to map standard HTML elements like headings and paragraphs to components. For this, you can configure a custom [Markdoc node][markdoc-nodes]. This example overrides Markdoc's `heading` node to render a `Heading` component, passing the built-in `level` attribute as a prop:
```js
// astro.config.mjs
import { defineConfig } from 'astro/config';
import markdoc from '@astrojs/markdoc';
// https://astro.build/config
export default defineConfig({
integrations: [
markdoc({
nodes: {
heading: {
render: 'Heading',
// Markdoc requires type defs for each attribute.
// These should mirror the `Props` type of the component
// you are rendering.
// See Markdoc's documentation on defining attributes
// https://markdoc.dev/docs/attributes#defining-attributes
attributes: {
level: { type: String },
}
},
},
}),
],
});
```
Now, you can map the string passed to render (`'Heading'` in this example) to a component import. This is configured from the `<Content />` component used to render your Markdoc using the `components` prop:
```astro
---
import { getEntryBySlug } from 'astro:content';
import Heading from '../components/Heading.astro';
const entry = await getEntryBySlug('docs', 'why-markdoc');
const { Content } = await entry.render();
---
<Content
components={{ Heading }}
/>
```
Now, all Markdown headings will render with the `Heading.astro` component. This example uses a level 3 heading, automatically passing `level: 3` as the component prop:
```md
### I'm a level 3 heading!
```
📚 [Find all of Markdoc's built-in nodes and node attributes on their documentation.](https://markdoc.dev/docs/nodes#built-in-nodes)
#### Use client-side UI components
Today, the `components` prop does not support the `client:` directive for hydrating components. To embed client-side components, create a wrapper `.astro` file to import your component and apply a `client:` directive manually.
This example wraps a `Aside.tsx` component with a `ClientAside.astro` wrapper:
```astro
---
// src/components/ClientAside.astro
import Aside from './Aside';
---
<Aside client:load />
```
This component [can be applied via the `components` prop](#render-html-elements-as-astro-components):
```astro
---
// src/pages/why-markdoc.astro
import { getEntryBySlug } from 'astro:content';
import ClientAside from '../components/ClientAside.astro';
const entry = await getEntryBySlug('docs', 'why-markdoc');
const { Content } = await entry.render();
---
<Content
components={{
Aside: ClientAside,
}}
/>
```
### Markdoc config
The Markdoc integration accepts [all Markdoc configuration options](https://markdoc.dev/docs/config), including [tags](https://markdoc.dev/docs/tags) and [functions](https://markdoc.dev/docs/functions).
You can pass these options from the `markdoc()` integration in your `astro.config`. This example adds a global `getCountryEmoji` function:
```js
// astro.config.mjs
import { defineConfig } from 'astro/config';
import markdoc from '@astrojs/markdoc';
// https://astro.build/config
export default defineConfig({
integrations: [
markdoc({
functions: {
getCountryEmoji: {
transform(parameters) {
const [country] = Object.values(parameters);
const countryToEmojiMap = {
japan: '🇯🇵',
spain: '🇪🇸',
france: '🇫🇷',
}
return countryToEmojiMap[country] ?? '🏳'
},
},
},
}),
],
});
```
Now, you can call this function from any Markdoc content entry:
```md
¡Hola {% getCountryEmoji("spain") %}!
```
:::note
These options will be applied during [the Markdoc "transform" phase](https://markdoc.dev/docs/render#transform). This is run **at build time** (rather than server request time) both for static and SSR Astro projects. If you need to define configuration at runtime (ex. SSR variables), [see the next section](#Define-markdoc-configuration-at-runtime).
:::
📚 [See the Markdoc documentation](https://markdoc.dev/docs/functions#creating-a-custom-function) for more on using variables or functions in your content.
### Define Markdoc configuration at runtime
You may need to define Markdoc configuration at the component level, rather than the `astro.config.mjs` level. This is useful when mapping props and SSR parameters to [Markdoc variables](https://markdoc.dev/docs/variables).
Astro recommends running the Markdoc transform step manually. This allows you to define your configuration and call Markdoc's rendering functions in a `.astro` file directly, ignoring any Markdoc config in your `astro.config.mjs`.
You will need to install the `@markdoc/markdoc` package into your project first:
```sh
# Using NPM
npx astro add @markdoc/markdoc
# Using Yarn
yarn astro add @markdoc/markdoc
# Using PNPM
pnpm astro add @markdoc/markdoc
```
Now, you can define Markdoc configuration options using `Markdock.transform()`.
This example defines an `abTestGroup` Markdoc variable based on an SSR param, transforming the raw entry `body`. The result is rendered using the `Renderer` component provided by `@astrojs/markdoc`:
```astro
---
import Markdoc from '@markdoc/markdoc';
import { Renderer } from '@astrojs/markdoc/components';
import { getEntryBySlug } from 'astro:content';
const { body } = await getEntryBySlug('docs', 'with-ab-test');
const ast = Markdoc.parse(body);
const content = Markdoc.transform({
variables: { abTestGroup: Astro.params.abTestGroup },
}, ast);
---
<Renderer {content} components={{ /* same `components` prop used by the `Content` component */ }} />
```
## Examples
* The [Astro Markdoc starter template](https://github.com/withastro/astro/tree/latest/examples/with-markdoc) shows how to use Markdoc files in your Astro project.
## Troubleshooting
For help, check out the `#support` channel on [Discord](https://astro.build/chat). Our friendly Support Squad members are here to help!
You can also check our [Astro Integration Documentation][astro-integration] for more on integrations.
## Contributing
This package is maintained by Astro's Core team. You're welcome to submit an issue or PR!
## Changelog
See [CHANGELOG.md](https://github.com/withastro/astro/tree/main/packages/integrations/markdoc/CHANGELOG.md) for a history of changes to this integration.
[astro-integration]: https://docs.astro.build/en/guides/integrations-guide/
[astro-components]: https://docs.astro.build/en/core-concepts/astro-components/
[astro-content-collections]: https://docs.astro.build/en/guides/content-collections/
[markdoc-tags]: https://markdoc.dev/docs/tags
[markdoc-nodes]: https://markdoc.dev/docs/nodes