summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc/components/TreeNode.ts
diff options
context:
space:
mode:
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: '' };
}