Module

std/front_matter/mod.ts

Deno standard library
Go to Latest
import * as mod from "https://dotland.deno.dev/std@0.201.0/front_matter/mod.ts";

Extracts front matter from strings.

createExtractor, {@link recognize} and test functions to handle many forms of front matter.

Adapted from jxson/front-matter.

Supported formats:

Basic usage

example.md

---
module: front_matter
tags:
  - yaml
  - toml
  - json
---

deno is awesome

example.ts

import {
  extract,
  test,
} from "https://deno.land/std@0.201.0/front_matter/any.ts";

const str = await Deno.readTextFile("./example.md");

if (test(str)) {
  console.log(extract(str));
} else {
  console.log("document doesn't contain front matter");
}
$ deno run ./example.ts
{
  frontMatter: "module: front_matter\ntags:\n  - yaml\n  - toml\n  - json",
  body: "deno is awesome",
  attrs: { module: "front_matter", tags: [ "yaml", "toml", "json" ] }
}

The above example recognizes any of the supported formats, extracts metadata and parses accordingly. Please note that in this case both the YAML and TOML parsers will be imported as dependencies.

If you need only one specific format then you can import the file named respectively from here.

Advanced usage

import {
  createExtractor,
  Format,
  Parser,
  test as _test,
} from "https://deno.land/std@0.201.0/front_matter/mod.ts";
import { parse } from "https://deno.land/std@0.201.0/toml/parse.ts";

const extract = createExtractor({
  [Format.TOML]: parse as Parser,
  [Format.JSON]: JSON.parse as Parser,
});

export function test(str: string): boolean {
  return _test(str, [Format.TOML, Format.JSON]);
}

In this setup extract() and test() will work with TOML and JSON and only. This way the YAML parser is not loaded if not needed. You can cherry-pick which combination of formats are you supporting based on your needs.

Delimiters

YAML

---
these: are
---
---yaml
all: recognized
---
= yaml =
as: yaml
= yaml =

TOML

---toml
this = 'is'
---
= toml =
parsed = 'as'
toml = 'data'
= toml =
+++
is = 'that'
not = 'cool?'
+++

JSON

---json
{
  "and": "this"
}
---
{
  "is": "JSON"
}

Functions

Factory that creates a function that extracts front matter from a string with the given parsers. Supports YAML, TOML and JSON.

Tests if a string has valid front matter. Supports YAML, TOML and JSON.