ID:WORK-094Status:readyPriority:highComplexity:moderateMilestone:v1.0.0
Create @refrakt-md/vite plugin — Level 1 static transform
Build the core Vite plugin that intercepts .md files and emits JS modules with rendered HTML, frontmatter, SEO data, and serialized tree. This is the Level 1 (static, per-file) integration — no cross-page awareness.
Acceptance Criteria
- New package
packages/vite/withpackage.json,tsconfig.json, build config - Plugin entry (
src/index.ts) exportsrefrakt()function returning a Vite plugin - Config accepts
packages,theme,extensions,injectCSS,level,contentDir - Per-file transform pipeline: Markdoc parse → rune schema transforms → serialize → identity transform → renderToHtml
- Each
.mdfile emits a JS module exportinghtml,tree,frontmatter,seo,meta seoexport includesjsonLdarray andogobject viaextractSeo()from@refrakt-md/runesmetaexport includesrunes(list of rune names used) andpackages(list of package names)- Community packages loaded via
loadRunePackage()and merged viamergePackages() - Runes requiring Level 2 (breadcrumb, nav, glossary auto-linking) render as static content with build warning
- Plugin sets
ssr.noExternalfor refrakt packages (sameCORE_NO_EXTERNALpattern as sveltekit) viteis a peer dependency (^5.0.0 || ^6.0.0)- Package builds successfully in monorepo dependency order
- Basic integration test: transform a
.mdfile with runes, verify module exports
Approach
- Scaffold
packages/vite/— package.json, tsconfig extending root, tsup build config - Implement config parsing and validation in
src/index.ts - Implement per-file transform in
src/transform.ts— reusesMarkdoc.parse(), rune schemas from@refrakt-md/runes,serialize()from@refrakt-md/transform(requires WORK-088),createTransform(), andrenderToHtml() - Wire up Vite's
transformhook to intercept configured extensions - Emit JS module string with named exports
- Add
resolveId/loadhooks for virtual module support (used by WORK-095)
Dependencies
- WORK-088 —
serialize()must be available from@refrakt-md/transform
References
- SPEC-031 (Architecture, Configuration, Level 1 sections)
packages/sveltekit/src/plugin.ts— existing Vite plugin to referencepackages/transform/src/engine.ts— identity transformpackages/transform/src/html.ts—renderToHtml()