summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc/components/TreeNode.ts
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2023-04-03 11:27:51 -0400
committerGravatar GitHub <noreply@github.com> 2023-04-03 11:27:51 -0400
commit73fcc7627e27a001d3ed2f4d046999d91f1aef85 (patch)
treeadffd143bcf3374bd9d6262a2543347a9d32ecd5 /packages/integrations/markdoc/components/TreeNode.ts
parentad80d830a2bfcb460f5ab19568382d40074e6e56 (diff)
downloadastro-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.ts10
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: '' };
}