diff options
author | 2023-04-03 11:27:51 -0400 | |
---|---|---|
committer | 2023-04-03 11:27:51 -0400 | |
commit | 73fcc7627e27a001d3ed2f4d046999d91f1aef85 (patch) | |
tree | adffd143bcf3374bd9d6262a2543347a9d32ecd5 /packages/integrations/markdoc/components/TreeNode.ts | |
parent | ad80d830a2bfcb460f5ab19568382d40074e6e56 (diff) | |
download | astro-73fcc7627e27a001d3ed2f4d046999d91f1aef85.tar.gz astro-73fcc7627e27a001d3ed2f4d046999d91f1aef85.tar.zst astro-73fcc7627e27a001d3ed2f4d046999d91f1aef85.zip |
[Markdoc] Fix: Support `render: null` (#6723)
* fix: handle array of tree nodes
* test: render null in document node
* chore: lock
* refactor: consolidate render test logic
* chore: changeset
Diffstat (limited to 'packages/integrations/markdoc/components/TreeNode.ts')
-rw-r--r-- | packages/integrations/markdoc/components/TreeNode.ts | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/packages/integrations/markdoc/components/TreeNode.ts b/packages/integrations/markdoc/components/TreeNode.ts index 8a3158589..a60597a0d 100644 --- a/packages/integrations/markdoc/components/TreeNode.ts +++ b/packages/integrations/markdoc/components/TreeNode.ts @@ -1,4 +1,5 @@ import type { AstroInstance } from 'astro'; +import { Fragment } from 'astro/jsx-runtime'; import type { RenderableTreeNode } from '@markdoc/markdoc'; import Markdoc from '@markdoc/markdoc'; import { createComponent, renderComponent, render } from 'astro/runtime/server/index.js'; @@ -44,9 +45,16 @@ export const ComponentNode = createComponent({ propagation: 'none', }); -export function createTreeNode(node: RenderableTreeNode): TreeNode { +export function createTreeNode(node: RenderableTreeNode | RenderableTreeNode[]): TreeNode { if (typeof node === 'string' || typeof node === 'number') { return { type: 'text', content: String(node) }; + } else if (Array.isArray(node)) { + return { + type: 'component', + component: Fragment, + props: {}, + children: node.map((child) => createTreeNode(child)), + }; } else if (node === null || typeof node !== 'object' || !Markdoc.Tag.isTag(node)) { return { type: 'text', content: '' }; } |