JF2 is a simpler JSON serialization of microformats2 intended to be easier to consume than the standard microformats JSON representation.
- Node.js v18.18+
import { mf2tojf2 } from "mf2tojf2";
const mf2 = {
items: [
{
type: ["h-card"],
properties: {
name: ["Paul Robert Lloyd"],
url: ["https://paulrobertlloyd.com"],
},
},
],
};
const jf2 = mf2tojf2(mf2);
console.log(jf2);
Returns:
{
type: "card",
name: "Paul Robert Lloyd",
url: "https://paulrobertlloyd.com"
}
JF2 can include a references
property to exclude any non-authoritative data from the defined object.
import { mf2tojf2referenced } from "mf2tojf2";
const mf2 = {
items: [
{
type: ["h-entry"],
properties: {
name: ["What my friend ate for lunch yesterday"],
published: ["2019-02-12T10:00:00.000+00:00"],
url: ["https://my-website.example/bookmarks/lunch"],
"bookmark-of": ["https://their-website.example/notes/lunch"],
"mp-syndicate-to": "https://example.social/@username",
},
},
],
};
const jf2WithReferences = await mf2tojf2referenced(mf2);
console.log(jf2WithReferences);
Returns:
{
type: "entry",
name: "What my friend ate for lunch yesterday",
published: "2019-02-12T10:00:00.000+00:00",
url: "https://my-website.example/bookmarks/lunch",
"bookmark-of": "https://their-website.example/notes/lunch",
"mp-syndicate-to": "https://example.social/@username",
references: {
"https://their-website.example/notes/lunch": {
type: "entry",
name: "What I ate for lunch",
published: "2019-01-12T15:55:00.000+00:00",
url: "https://their-website.example/notes/lunch",
content: {
text: "I ate a cheese sandwich, which was nice.",
html: "<p>I ate a cheese sandwich, which was nice.</p>"
},
category: ["Food", "Lunch", "Sandwiches"]
}
}
}
Note
Values for url
, and any property prefixed with mp-
, are excluded from referencing.
npm test
npm run release
Based on mf2tojf2.py.