UNPKG

vite-plugin-inline

Version:
69 lines (63 loc) 2.24 kB
'use strict'; const fs = require('node:fs'); const path = require('node:path'); const vite = require('vite'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; } const fs__default = /*#__PURE__*/_interopDefaultCompat(fs); const path__default = /*#__PURE__*/_interopDefaultCompat(path); function Inline() { let config; const inlines = /* @__PURE__ */ new Map(); return { name: "vite-plugin-inline", enforce: "pre", configResolved(c) { config = c; }, async load(id) { if (id.endsWith("?inline&raw") || id.endsWith("?raw&inline") || id.endsWith("?inline-ts")) { const filename = id.slice(0, id.lastIndexOf("?")); const ext = path__default.extname(filename).slice(1); if (!["ts", "tsx", "mts", "js", "jsx", "mjs", "cjs"].includes(ext)) { return; } const code = await fs__default.promises.readFile(filename, "utf-8"); this.addWatchFile(filename); if (inlines.has(filename)) { inlines.get(filename).add(id); } else { inlines.set(filename, /* @__PURE__ */ new Set([id])); } const result = await vite.transformWithEsbuild(code, filename, { loader: ext === "ts" || ext === "mts" ? "ts" : ext === "tsx" ? "tsx" : ext === "jsx" ? "jsx" : "js", minify: config.command === "serve" ? false : typeof config.build.minify === "boolean" ? config.build.minify : true, target: config.build.target || void 0 }); return { code: `export default ${JSON.stringify(result.code.trimEnd())}`, map: null }; } }, handleHotUpdate({ file, server }) { const related = inlines.get(file); if (related && related.size > 0) { let changed = false; for (const id of related) { const module = server.moduleGraph.getModuleById(id); console.log(module); if (module) { server.moduleGraph.invalidateModule(module); changed = true; } } if (changed) { server.ws.send({ type: "full-reload" }); } } } }; } module.exports = Inline;