mirror of
https://github.com/hanzo-docs/docs.git
synced 2026-10-25 04:20:02 +00:00
* feat(satteri): add @fumadocs/satteri package and compiler discriminator Introduce @fumadocs/satteri with Sätteri-native ports of Fumadocs MDX plugins (remark-heading, structure, image, code-tab, npm, rehype-toc, rehype-code, and others), plus applySatteriPreset and compileMdx. In fumadocs-mdx, add compiler: 'satteri' on doc collections with satteriOptions typing, getSatteriOptions(), and a buildSatteriMDX path that uses mdxToJs instead of @mdx-js/mdx. Co-authored-by: Fuma Nama <[email protected]> * Port native rehype-code and isolate Satteri as optional peer - Rewrite @fumadocs/satteri rehype-code as a Satteri hast plugin using fumadocs-core Shiki (no unified/vfile deps in the package) - Unwrap Shiki root fragments before ctx.replaceNode - Move getSatteriOptions to fumadocs-mdx/config/build-satteri and expose fumadocs-mdx/satteri and fumadocs-mdx/config/satteri entry points - Make @fumadocs/satteri and satteri optional peerDependencies - Dynamic-import the satteri build path only when compiler is satteri - Add rehype-code and fumadocs-mdx satteri pipeline tests Co-authored-by: Fuma Nama <[email protected]> * Port official docs app to Satteri compiler - Switch apps/docs docs and blog collections to compiler: satteri - Replace mdxOptions/applyMdxPreset with applySatteriPreset and Satteri plugins - Add @fumadocs/satteri plugins: rehypeKatex, remarkElementIds, remarkLlms - Port remarkAutoTypeTableSatteri and remarkTypeScriptToJavaScriptSatteri - Enhance remark-structure stringify and satteri postprocess pipeline - Drop remark-math/rehype-katex/unified from docs deps (math via features.math) Co-authored-by: Fuma Nama <[email protected]> * Remove custom rehypeKatex; use Satteri features.math Satteri natively parses inline ($...$) and display ($$...$$) math via features.math. Drop the redundant KaTeX hast plugin, katex peer dependency, and hast-util-from-html-isomorphic from @fumadocs/satteri. Co-authored-by: Fuma Nama <[email protected]> * Use structuredClone for Satteri node snapshots; fix build blockers - Replace custom materialize() with structuredClone in remark-llms and remark-structure (snapshot nodes during visitor, stringify after pass) - Add GFM/math stringifiers for structured data and LLM markdown export - Fix remark-include cwd attribute, section extraction, and node replacement - Fix remarkAutoTypeTableSatteri cwd resolution via collection _cwd - Restore remark deps for apps/docs markdown.tsx Co-authored-by: Fuma Nama <[email protected]> * docs: add AGENTS.md with Cursor Cloud setup instructions Co-authored-by: god63820869 <[email protected]> * Fix Satteri plugin patterns per upstream API docs Plugins were fighting Satteri's Rust-backed AST model: - Export once at compile end via ctx.data, not queueDataExport per visit (rehype-toc, remark-llms, valueExportPlugin) — avoids 1600+ duplicate exports - Use ctx.replaceNode / insertChildAt instead of splicing parent.children (remark-npm, remark-code-tab, remark-auto-type-table) - Return { raw: string } for includes instead of inserting external mdast - Skip Shiki on math code blocks; flatten toc titles for appendExports - Sync remark-llms _markdown writes; guard get-llm-text processed fallback Adds satteri-toc-count test. Docs build passes. Co-authored-by: Fuma Nama <[email protected]> * Use Satteri exported types instead of duplicating context shapes Centralize ctx.data keys in @fumadocs/satteri/data-map via DataMap augmentation. Plugins use MdastVisitorContext, HastVisitorContext, and Data from satteri rather than inline { data: Record<...> } or Parameters<typeof queueDataExport> hacks. Re-export visitor context types from @fumadocs/satteri. MDX loader adds _compiler to satteri DataMap separately. Co-authored-by: Fuma Nama <[email protected]> * Move remarkElementIds to docs; optimize Satteri plugin hot paths - remarkElementIds is docs-only (apps/docs/lib) for lint link validation, removed from @fumadocs/satteri exports - remark-llms: stringify once after all root children collected (was O(n²)) - remark-structure: attach structuredData once instead of every visit - rehype-toc: store textContent title strings, not hast element refs - preset: drop valueExportPlugin; compile.ts already handles _valueToExport Co-authored-by: Fuma Nama <[email protected]> * reduce deps * Further Satteri plugin perf: defer clones, use textContent - remark-llms: collect root indices during visit, structuredClone batch at end - remark-structure: ctx.textContent instead of flattenNode when no custom stringify; single shared visitor per type; attach structuredData on first visit only - remark-heading/postprocess: ctx.textContent for slug/title (no double tree walk) - rehype-toc: assign export object once, mutate items array in place - rehype-code: skip elements already highlighted by shiki - Add remark-llms tests; vitest @ path alias Co-authored-by: Fuma Nama <[email protected]> * Move remark-ts2js Satteri plugin to @fumadocs/satteri - Add remarkTs2js to @fumadocs/satteri (oxc-transform dep) - doc-gen keeps unified remarkTypeScriptToJavaScript only; drop satteri peer - Docs source.config imports remarkTs2js from @fumadocs/satteri - Document Satteri usage tab in remark-ts2js docs page Co-authored-by: Fuma Nama <[email protected]> * Move remarkAutoTypeTable Satteri plugin to @fumadocs/satteri Extract shared generation into fumadocs-typescript/auto-type-table-generate. fumadocs-typescript keeps unified remarkAutoTypeTable only; no satteri dep. Satteri remarkAutoTypeTable uses createAutoTypeTableGenerator from fumadocs-typescript. Docs imports plugin from @fumadocs/satteri. Co-authored-by: Fuma Nama <[email protected]> * refactor(satteri): remove barrel export, use subpath imports Drop src/index.ts and the package root export. Each plugin, preset, compile, utils, and data-map module is now a separate subpath export. Consumers import from paths like @fumadocs/satteri/preset and @fumadocs/satteri/remark-ts2js. Satteri core APIs are imported from the satteri package directly. Co-authored-by: Fuma Nama <[email protected]> * fix(satteri): keep auto-type-table logic local, use markdownToHast Revert all fumadocs-typescript changes. Move auto-type-table generation into @fumadocs/satteri with duplicated parse-tags helper. Render JSDoc markdown via Satteri's markdownToHast (no remark/unified deps); sanitize raw hast nodes for hast-util-to-estree compatibility. Co-authored-by: Fuma Nama <[email protected]> * refactor(satteri): consolidate remark-auto-type-table into one file Merge auto-type-table-generate, markdown-renderer, and parse-tags into remark-auto-type-table.ts. Drop factory/helpers; inline prop parsing and table generation in the Satteri plugin visitor. Co-authored-by: Fuma Nama <[email protected]> * improve performance * Merge branch 'pr-3398' into cursor/satteri-package-b279 --------- Co-authored-by: Fuma Nama <[email protected]>