npm.io
0.2.0 • Published 15h ago

@matfire/astro-directives

Licence
MIT
Version
0.2.0
Deps
0
Size
29 kB
Vulns
0
Weekly
0

@matfire/astro-directives

Open on npmx.dev Open on npmx.dev

Use ordinary .md content collection entries with Sätteri directives backed by Astro components. Container, leaf, and inline directive children are rendered as the component's default slot.

Install

npm install @matfire/astro-directives

Astro 7.1 or newer is required. The package uses Astro's default Sätteri Markdown processor.

Configure

// astro.config.mjs
import { defineConfig } from "astro/config";
import { satteri } from "@astrojs/markdown-satteri";
import astroDirectives from "@matfire/astro-directives";

export default defineConfig({
  markdown: {
    processor: satteri({
      features: { directive: true },
    }),
  },
  integrations: [
    astroDirectives({
      // throwOnUnknownDirectives: false, // Leave unknown directives untouched.
      components: {
        callout: "./src/components/Callout.astro",
        youtube: "./src/components/Youtube.astro",
      },
    }),
  ],
});

The integration validates this setting but does not modify the configured Markdown processor. Existing Sätteri plugins and features remain under your control.

Relative component paths resolve from the Astro project root. Absolute paths, URL values, and package specifiers are passed through.

Use the registered names in content collection Markdown:

:::callout{type="warning" #permissions .wide}
This **Markdown** becomes the component's default slot.
:::

::youtube{id="dQw4w9WgXcQ"}

Text with an :badge[inline component]{tone="positive"}.

Attribute values remain strings. Bare attributes become true, and {#id} / {.class} shorthand is passed as id / class props.

Unregistered directive names fail the build with their Markdown location by default. Set throwOnUnknownDirectives: false to leave unknown directive nodes untouched. This integration does not render unknown directives itself.

This initial release supports deferred .md content collection rendering. Markdown pages and direct .md imports are not part of the supported API.

Standalone Sätteri plugin

The directive-to-sentinel plugin is available separately for custom Sätteri pipelines:

import { markdownToHtml } from "satteri";
import createAstroDirectivesPlugin from "@matfire/astro-directives/satteri";

const result = await markdownToHtml(source, {
  features: { directive: true },
  mdastPlugins: [
    createAstroDirectivesPlugin({
      directives: ["callout", "youtube"],
      throwOnUnknownDirectives: false,
    }),
  ],
});

The emitted elements are internal transport markers intended for the main Astro integration to consume.

Keywords