Transform Hast (Hypertext Abstract Syntax Tree) into Svelte components.
This library provides Hast-specific component implementations that work with @typematter/svelte-unist
, enabling you to render HTML ASTs as Svelte components.
npm install @typematter/svelte-hast @typematter/svelte-unist
# or
yarn add @typematter/svelte-hast @typematter/svelte-unist
# or
pnpm add @typematter/svelte-hast @typematter/svelte-unist
<script lang="ts">
import { components } from '@typematter/svelte-hast';
import { Unist } from '@typematter/svelte-unist';
import { u } from 'unist-builder';
const ast = u('root', [
u('element', { tagName: 'h1' }, [u('text', 'Hello, World!')]),
u('element', { tagName: 'p' }, [
u('text', 'This is a '),
u('element', { tagName: 'strong' }, [u('text', 'paragraph')]),
u('text', '.')
])
]);
</script>
<Unist {ast} {components} />
<script lang="ts">
import { Element, Text } from '@typematter/svelte-hast';
import { Unist } from '@typematter/svelte-unist';
import { u } from 'unist-builder';
const ast = u('root', [
u('element', { tagName: 'div', properties: { className: 'container' } }, [u('text', 'Content')])
]);
const myComponents = {
element: Element,
text: Text
};
</script>
<Unist {ast} components={myComponents} />
<script lang="ts">
import { components } from '@typematter/svelte-hast';
import { Unist } from '@typematter/svelte-unist';
import { u } from 'unist-builder';
const ast = u('root', [
u(
'element',
{
tagName: 'a',
properties: {
href: 'https://example.com',
target: '_blank',
rel: 'noopener noreferrer',
className: 'link-primary'
}
},
[u('text', 'Visit Example')]
)
]);
</script>
<Unist {ast} {components} />
The library exports the following components that map to Hast node types:
Comment
- Renders HTML comments (with XSS protection)Doctype
- Handles DOCTYPE declarations (renders nothing, included for completeness)Element
- Renders HTML elements with properties and attributesRoot
- Renders the root node's childrenText
- Renders text nodes (with automatic escaping)All components are also available as a convenient components
object that can be passed directly to <Unist>
.
components
A pre-configured object mapping all Hast node types to their corresponding Svelte components:
import { components } from '@typematter/svelte-hast';
// {
// comment: Comment,
// doctype: Doctype,
// element: Element,
// root: Root,
// text: Text
// }
import { Comment, Doctype, Element, Root, Text } from '@typematter/svelte-hast';
This library includes built-in security features:
-->
sequences to prevent breaking out of HTML commentspnpm install
pnpm test
pnpm check
pnpm build
Copyright © 2025 Matthew Gibbons