vite-plugin-sinwan
v0.2.8
Published
Vite plugin for sinwan
Maintainers
Readme
vite-plugin-sinwan
Vite plugin for Sinwan — JSX transformation with template hoisting, reactive expression wrapping, and plugin-free Fast Refresh powered by sinwan-compiler.
Install
bun add -d vite-plugin-sinwanCompiler updates
The plugin depends on sinwan-compiler with >=0.2.5 <1.0.0 and does not bundle it. Publishing a new 0.x compiler does not require a plugin release.
- New installs resolve the newest compatible compiler automatically.
- Existing apps keep a lockfile pin until they run
bun update sinwan-compiler. - Republish this plugin only when the plugin API itself changes, or when
sinwan-compilerreaches 1.0.
Usage
// vite.config.ts
import { defineConfig } from "vite";
import { sinwan } from "vite-plugin-sinwan";
export default defineConfig({
plugins: [sinwan()],
});Options
sinwan({
// Enable template hoisting (default: true)
hoist: true,
// Warn when hoisting is skipped (default: Vite mode !== "production")
dev: true,
// Emit explicit binding descriptors (default: false)
explicitBindings: false,
// Path to reactive-props metadata from `sinwan analyze`
analyze: "./.sinwan/props.json",
// Incremental cross-file analysis for dev/HMR
cache: {
root: process.cwd(),
tsConfigPath: "./tsconfig.json",
cachePath: "./.sinwan/cache.json",
bunfigPath: "./bunfig.toml",
},
// Plugin-free Fast Refresh (default: true, dev server only)
fastRefresh: true,
});| Option | Type | Default | Description |
| ------------------ | ------------------------------- | ---------------------------- | ----------------------------------------------------- |
| hoist | boolean | true | Hoist static DOM to module-level templates |
| dev | boolean | Vite mode !== "production" | Warn when template hoisting is skipped |
| explicitBindings | boolean | false | Emit compiler-driven binding descriptors |
| analyze | string | undefined | Path to reactive-props metadata from sinwan analyze |
| cache | boolean \| SinwanCacheOptions | false | Enable incremental in-memory cross-file analysis |
| fastRefresh | boolean | true | Inject per-component HMR boundaries (dev server only) |
Enable sinwan({ derivedLocals: true }) to promote eligible reactive const derivations inside component setup. This defaults to false; use compiler and runtime builds containing derived-local promotion and getter-attribute hydration support. /* sinwan-snapshot */ preserves an intentional one-shot read. In development, the compiler diagnoses eligible JSX snapshots and setup if reads. Imported functions annotated with /** @sinwan-pure */ JSDoc are also promoted; see the @sinwan-pure JSDoc contract in the compiler docs.
How it works
- Runs with
enforce: "pre"so it executes before any other transform - Static DOM elements are hoisted to module-level template objects
- Dynamic expressions are wrapped in zero-arity functions for fine-grained reactivity
- Component calls (capitalised tags) are left for the runtime
- Fast Refresh injects per-component HMR boundaries in
vite serve— no extra plugin needed
License
MIT © Mohammed Ben Cheikh
