UNPKG

comptime.ts

Version:

<div align="center"> <img src="https://raw.githubusercontent.com/feathers-studio/comptime.ts/master/docs/comptime.ts.svg" alt="Hyperactive"> </div>

38 lines 1.64 kB
import { createFilter } from "vite"; import MagicString from "magic-string"; import { getComptimeReplacements } from "./comptime.js"; import { readFile } from "node:fs/promises"; export async function comptime(opts) { const filter = createFilter(opts?.include, opts?.exclude); let resolver; let replacements; return { name: "vite-plugin-comptime", async buildStart() { resolver = (specifier, importer) => this.resolve(specifier, importer).then(res => res?.id); replacements = await getComptimeReplacements({ ...opts, resolver, filter }); }, async load(id) { const replacement = replacements[id]; if (!replacement) return null; const mod = await readFile(id, "utf-8"); const s = new MagicString(mod); for (const r of replacement) { s.overwrite(r.start, r.end, r.replacement); } return { code: s.toString(), map: s.generateMap({ source: id, includeContent: true }) }; }, async handleHotUpdate({ modules, file }) { if (!filter(file)) return; // find new replacements for *only* the affected file const newReplacements = await getComptimeReplacements({ ...opts, resolver, filter: id => id === file }); // TODO: maybe diff the replacements to avoid unnecessary updates Object.assign(replacements, newReplacements); // fault all modules that depend on the affected file return modules; }, }; } //# sourceMappingURL=vite.js.map