std/front_matter/mod.ts

131 lines
2.6 KiB
TypeScript
Raw Normal View History

// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
// Copyright (c) Jason Campbell. MIT license
/**
* Extracts
* {@link https://daily-dev-tips.com/posts/what-exactly-is-frontmatter/ | front matter}
* from strings. Adapted from
* {@link https://github.com/jxson/front-matter/blob/36f139ef797bd9e5196a9ede03ef481d7fbca18e/index.js | jxson/front-matter}.
*
* ## Supported formats
*
* ### JSON
*
* ```ts
* import { test, extractJson } from "@std/front-matter";
* import { assertEquals } from "@std/assert";
*
* const str = "---json\n{\"and\": \"this\"}\n---\ndeno is awesome";
*
* assertEquals(test(str), true);
* assertEquals(extractJson(str), {
* frontMatter: "{\"and\": \"this\"}",
* body: "deno is awesome",
* attrs: { and: "this" }
* });
* ```
*
* {@linkcode extractJson | extract} and {@linkcode test} support the following
* delimiters.
*
* ```markdown
* ---json
* {
* "and": "this"
* }
* ---
* ```
*
* ```markdown
* {
* "is": "JSON"
* }
* ```
*
* ### TOML
*
* ```ts
* import { test, extractToml } from "@std/front-matter";
* import { assertEquals } from "@std/assert";
*
* const str = "---toml\nmodule = 'front_matter'\n---\ndeno is awesome";
*
* assertEquals(test(str), true);
* assertEquals(extractToml(str), {
* frontMatter: "module = 'front_matter'",
* body: "deno is awesome",
* attrs: { module: "front_matter" }
* });
* ```
*
* {@linkcode extractToml | extract} and {@linkcode test} support the following
* delimiters.
*
* ```markdown
* ---toml
* this = 'is'
* ---
* ```
*
* ```markdown
* = toml =
* parsed = 'as'
* toml = 'data'
* = toml =
* ```
*
* ```markdown
* +++
* is = 'that'
* not = 'cool?'
* +++
* ```
*
* ### YAML
*
* ```ts
* import { test, extractYaml } from "@std/front-matter";
* import { assertEquals } from "@std/assert";
*
* const str = "---yaml\nmodule: front_matter\n---\ndeno is awesome";
*
* assertEquals(test(str), true);
* assertEquals(extractYaml(str), {
* frontMatter: "module: front_matter",
* body: "deno is awesome",
* attrs: { module: "front_matter" }
* });
* ```
*
* {@linkcode extractYaml | extract} and {@linkcode test} support the following
* delimiters.
*
* ```front_matter
* ---
* these: are
* ---
* ```
*
* ```markdown
* ---yaml
* all: recognized
* ---
* ```
*
* ```markdown
* = yaml =
* as: yaml
* = yaml =
* ```
*
* @module
*/
import { extract as extractJson } from "./json.ts";
import { extract as extractToml } from "./toml.ts";
import { extract as extractYaml } from "./yaml.ts";
export * from "./test.ts";
export * from "./types.ts";
export { extractJson, extractToml, extractYaml };