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"
}