This commit is contained in:
Endeavorance 2025-06-06 09:50:52 -04:00
parent 85b2d5cad7
commit ebe67781aa
3 changed files with 79 additions and 20 deletions

View file

@ -1,6 +1,11 @@
# EMDY # EMDY
Parse and serialize Markdown files with optional frontmatter Enhanced Markdown with YAML
EMDY makes it easy to work with markdown files like data. It provides a simple
JSON-like API for parsing and serializing objects to and from a markdown + YAML
frontmatter format.
## Install ## Install
@ -19,33 +24,87 @@ bun add @endeavorance/emdy
``` ```
## Usage ## Usage
EMDY exports a top level `EMDY` constant which has two functions:
- `EMDY.parse(md: string, markdownKey = "content")`
- `EMDY.stringify(data: Object, markdownKey = "content")`
```typescript ```typescript
import EMDY from "@endeavorance/emdy"; import EMDY from "@endeavorance/emdy";
EMDY.parse(/* ... */);
const myMDFile = ` // -- or --
import { parse, stringify, parseAll } from "@endeavorance/emdy";
parse(/* ... */);
```
## Functions
EMDY provides three main functions for working with markdown files.
### `parse(content: string, markdownKey?: string): Record<string, unknown>`
Parses a single EMDY document. Frontmatter keys become top level properties
in the return value. The markdown content is loaded as-is into a key based
on the provided `markdownKey`. If no `markdownKey` is provided, it will default
to `content`.
```typescript
const emdyDoc = `
--- ---
tags: ["fancy", "stuff"] key: value
anotherKey: anotherValue
--- ---
This is my markdown document! This is my markdown content.
`.trim(); `.trim();
const parsed = EMDY.parse(myMDFile); console.log(EMDY.parse(emdyDoc));
console.log(parsed);
/* /*
Output:
{ {
content: "This is my markdown document!", "key": "value",
tags: ["fancy", "stuff"] "anotherKey": "anotherValue",
"content": "This is my markdown content."
} }
*/ */
const stringified = EMDY.stringify(parsed);
console.log(stringified);
// Prints the original document
``` ```
### `parseAll(content: string, markdownKey?: string): Record<string, unknown>[]`
Similar to `.parse`, but parses multiple EMDY documents from a single string,
returning an array of objects.
Documents are separated by a line containing only three equals signs:
```md
---
property: value
---
This is the first document
===
This is the second document
```
### `stringify(data: Record<string, unknown>, markdownKey?: string): Record<string, unknown>`
Given an object, serializes it to a string in EMDY format. Uses the `markdownKey`
to identify which property in the object holds the markdown content. If no
`markdownKey` is provided, it will default to `content`.
```typescript
const emdyObj = {
key: "value",
anotherKey: "anotherValue",
content: "This is my markdown content."
};
console.log(EMDY.stringify(emdyObj));
/*
Output:
---
key: value
anotherKey: anotherValue
---
This is my markdown content.
*/
```

View file

@ -1,6 +1,6 @@
{ {
"name": "@endeavorance/emdy", "name": "@endeavorance/emdy",
"version": "1.0.0", "version": "1.1.0",
"module": "dist/index.js", "module": "dist/index.js",
"exports": { "exports": {
".": { ".": {