mirror of
https://github.com/denoland/std.git
synced 2024-11-22 04:59:05 +00:00
ebf8eeec59
* BREAKING(front-matter): remove `createExtractor()` * work
131 lines
2.6 KiB
TypeScript
131 lines
2.6 KiB
TypeScript
// 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 };
|