v2.0.0 Release Notes
Released
1.11.6 -> v2.0.0
Summary
Rebuilds NanoMD as a parser-only package: a single-pass TypeScript parser that emits a renderer-agnostic AST and sanitized HTML, with diagrams, math and charts rendered on demand. The legacy editor and viewer retire together with the bundled desktop app and website. Documentation is rewritten around the new API with a migration guide.
翻譯
NanoMD 改為純解析器套件:以單趟 TypeScript 解析器輸出與渲染無關的 AST 與安全的 HTML,圖表、數學式與流程圖依需求載入渲染。舊版編輯器與檢視器連同桌面 App 與網站一併移除。文件依新 API 全面改寫並附遷移指引。
⚠️ Breaking Changes
MDEditor, MDViewer and the MDParser class removed
Before:
- <script src="https://cdn.jsdelivr.net/npm/@pardnchiu/nanomd@1.11.6/dist/NanoMD.js"></script>
- <script>
- const editor = new MDEditor({ id: "editor", defaultContent: "# Hello" });
- const viewer = new MDViewer({ id: "viewer", sync: { editor: editor } });
- const html = new MDParser({ standard: false }).parse("# Hello");
- </script>
After:
- <script src="https://cdn.jsdelivr.net/npm/@pardnchiu/nanomd@2.0.0/dist/parser.js"></script>
- <script>
- const viewer = document.getElementById("viewer");
- viewer.innerHTML = MDParser.Parse("# Hello").html();
- MDParser.Refresh(viewer);
- </script>
Migration:
- // Old: editor + viewer kept in sync by NanoMD
- const viewer = new MDViewer({ id: "viewer", sync: { editor: editor, delay: 300 } });
- // New: use any editor (textarea, CodeMirror...) and render on input
- let timer;
- input.addEventListener("input", () => {
- clearTimeout(timer);
- timer = setTimeout(() => {
- viewer.innerHTML = MDParser.Parse(input.value).html();
- MDParser.Refresh(viewer).catch((err) => console.error(err.message));
- }, 300);
- });
- // Old: new MDParser({ standard }).parse(text)
- // New: MDParser.Parse(text).html() // the full syntax is always on
Projects that need the editor pin
@pardnchiu/nanomd@1.11.6; window.PDMarkdownEditor and the ESM exports editor, viewer, MDViewer, MDEditor are gone.翻譯
MDEditor、MDViewer 與 MDParser 類別移除。檢視改為 container.innerHTML = MDParser.Parse(text).html() 後呼叫 MDParser.Refresh(container);編輯器改用 <textarea>、CodeMirror 等並自行防抖渲染;new MDParser({ standard }).parse(text) 改為 MDParser.Parse(text).html()。需要編輯器的專案請固定使用 1.11.6;window.PDMarkdownEditor 與 ESM 的 editor、viewer、MDViewer、MDEditor 匯出已移除。Bundle files and stylesheet renamed
Before:
- <script src=".../dist/NanoMD.js"></script>
- <link rel="stylesheet" href=".../dist/NanoMD.css" />
- <section class="pd-md-viewer">...</section>
After:
- <script src=".../dist/parser.js"></script>
- <div class="nanomd">...</div>
Migration:
- // Old files -> New files
- // dist/NanoMD.js -> dist/parser.js (global MDParser)
- // dist/NanoMD.esm.js -> dist/parser.esm.js
- // dist/NanoMD.css, NanoMD-output.css -> dist/parser.css (auto-loaded next to parser.js)
- // .pd-md-viewer container -> .nanomd
- // data-mode / data-fill on the container keep working
- import { MDParser } from "@pardnchiu/nanomd";
- import "@pardnchiu/nanomd/parser.css"; // only when a bundler moves parser.esm.js away from parser.css
Material Symbols, Mermaid and code-prettify are no longer injected on load; call
MDParser.Init({ enable: { mermaid: true, latex: true, highlight: true, chartjs: true } }) to load what you need.翻譯
輸出檔改名:
NanoMD.js → parser.js(全域 MDParser)、NanoMD.esm.js → parser.esm.js、NanoMD.css/NanoMD-output.css → parser.css(由 parser.js 自動從同目錄載入);容器 class .pd-md-viewer → .nanomd,data-mode/data-fill 照常可用。載入時不再自動插入 Material Symbols、Mermaid、code-prettify,改以 MDParser.Init({ enable }) 按需載入。Changes
FEAT
- Add a single-pass TypeScript Markdown parser that returns a JSON AST, covering ATX/Setext headings, tables with alignment, blockquotes with GitHub alerts, nested/ordered/task lists, nested fences, footnotes, reference and relative links, inline math, image sizing and video embeds (@pardnchiu) [fb9fef3, bb62a02, c2b67ea, 20ffaf9, ae2ca8e, 544e9c7, 906c285, f03596e, 1cbffb8, 4331a14, 746188c, fe12174, d29c06e, f41b850, dcb121b]
- Add
AST.html()with output-time escaping and raw HTML sanitization (@pardnchiu) [a46e2a1] - Add
Init()on-demand dependency loading andRefresh()rendering for Mermaid, KaTeX, Chart.js and prettify, keeping the code block until a diagram, formula or chart renders (@pardnchiu) [5b89c3a, f03596e, a46e2a1, a1ecfa0, 99bb1be] - Auto-load
parser.cssfrom the directory of the loaded script (@pardnchiu) [a1ecfa0] - Add
fileEndpointto open file paths through a configurable URL andOnCopyClickfor copy-button feedback (@pardnchiu) [99bb1be, a46e2a1]
翻譯
- 新增單趟 TypeScript Markdown 解析器,回傳 JSON AST,支援 ATX/Setext 標題、對齊表格、含 GitHub 提示框的引言、巢狀/有序/任務清單、巢狀程式碼區塊、註腳、參照式與相對路徑連結、行內數學式、圖片尺寸與影片嵌入
- 新增
AST.html(),輸出時跳脫並清洗 raw HTML - 新增
Init()按需載入依賴與Refresh()渲染 Mermaid、KaTeX、Chart.js、prettify;渲染成功前保留程式碼區塊 - 從載入腳本的同目錄自動載入
parser.css - 新增
fileEndpoint以設定網址開啟檔案路徑,以及複製按鈕回呼OnCopyClick
UPDATE
- Switch the license from the proprietary usage agreement to MIT (@pardnchiu) [74c8c1b]
翻譯
- 授權由專有使用協議改為 MIT
REMOVE
- Remove the macOS app, now maintained in a separate repository (@pardnchiu) [86f581c]
- Remove the legacy website pages and static assets (@pardnchiu) [e9cfb04, a1b0dda]
- Remove git-crypt encryption; sources are stored as plaintext (@pardnchiu) [74c8c1b, 6c7e702]
翻譯
- 移除 macOS App,改由獨立 repo 維護
- 移除舊版網站頁面與靜態資源
- 移除 git-crypt 加密,原始碼改為明文
CHORE
- Build ESM, IIFE, type declarations and CSS with esbuild, tsc and sass; drop terser (@pardnchiu) [c2b67ea, 655e074, 8a56c1a]
翻譯
- 改以 esbuild、tsc、sass 產出 ESM、IIFE、型別宣告與 CSS,移除 terser
Scope
src/parser/— FEAT, BREAKING (index.ts,html.ts,refresh.ts,types.ts, multiple parsers)src/model/,src/function/,src/data.js— BREAKINGsrc/sass/— FEAT, BREAKING (parser.scss)dist/— BREAKING, CHORE (parser.js,parser.esm.js,parser.css,types/)package.json— BREAKING, CHOREmacOS/— REMOVEpage/,static/,index.html— REMOVE.git-crypt/,.gitattributes— REMOVELICENSE— UPDATEREADME.md,doc/— DOC.gitignore,terser.config.json— CHORE
Generated by SKILL