UNPKG

prettier-plugin-slidev

Version:

A prettier plugin for Slidev

112 lines (111 loc) 2.54 kB
import { parse as l } from "@slidev/parser"; import { doc as c } from "prettier"; const d = "slidev-ast", p = { astFormat: d, locStart(t) { if (t.type !== "markdown") throw new Error("not implemented"); return 0; }, locEnd(t) { if (t.type !== "markdown") throw new Error("not implemented"); return t.raw.length; }, async parse(t) { const { slides: e, raw: n } = await l(t); return { type: "markdown", raw: n, slides: e.map((s, i) => ({ type: "slide", info: Object.assign(s, { isFirstSlide: i === 0 }) })) }; } }, { join: u, line: a, hardline: r } = c.builders, w = { print(t, e, n, s) { const i = t.getNode(); if (!i) throw new Error("Node is null"); if (i.type === "markdown") return u([r, "---", r], t.map(n, "slides")); if (i.type === "slide") return S(i.info); throw new Error(`Unknown node type: ${i}`); }, embed(t) { const e = t.getNode(); return e.type === "slide" ? (n) => y(e.info, n) : null; } }; async function y(t, e) { return [ ...await f(t, e), ...await g(t, e), ...m(t) ]; } async function f(t, e) { var o; const n = ((o = t.frontmatterRaw) == null ? void 0 : o.trim()) ?? ""; if (n.length === 0) return t.isFirstSlide ? [] : [r]; const s = await e(n, { parser: "yaml" }), i = t.content.trim() ? [r] : []; return t.frontmatterStyle === "yaml" ? [r, "```yaml", r, s, r, "```", r, i] : [t.isFirstSlide ? ["---", r] : [], s, r, "---", r, i]; } async function g(t, e) { return t.content.trim().length === 0 ? [] : [ await e(t.content, { parser: "markdown" }), r ]; } function m(t) { return t.note ? [r, "<!--", a, t.note.trim(), a, "-->", r] : []; } function S(t) { return [ ...h(t), ...E(t), ...m(t) ]; } function h(t) { var s; const e = ((s = t.frontmatterRaw) == null ? void 0 : s.trim()) ?? ""; if (e.length === 0) return t.isFirstSlide ? [] : [r]; const n = t.content.trim() ? [r] : []; return t.frontmatterStyle === "yaml" ? [r, "```yaml", r, e, r, "```", r, n] : [t.isFirstSlide ? ["---", r] : [], e, r, "---", r, n]; } function E(t) { return t.content.trim().length === 0 ? [] : [ t.content, r ]; } const N = { languages: [ { name: "slidev", parsers: ["slidev"], extensions: [".md"], vscodeLanguageIds: ["markdown"] } ], parsers: { slidev: p }, printers: { [d]: w } }; export { N as default };