UNPKG

vite-plugin-singlefile-compression

Version:

Compress all assets and embeds them into `dist/index.html`, making it convenient to share as a single HTML file.

46 lines (45 loc) 1.33 kB
import fs from 'fs'; import { fileURLToPath } from 'url'; import { compress } from './compress.js'; function r(name) { return fs.readFileSync(fileURLToPath(import.meta.resolve(`./template/${name}.js`))).toString(); } function rt(name, template) { const s = r(name).split(template, 2); if (s.length !== 2) throw "s.length!==2"; return s; } const files = { base64: r('base64'), base128: r('base128'), assets: rt('assets', '{"":""}'), css: rt('css', '"<style>"'), icon: rt('icon', '"<icon>"'), importmeta: rt('importmeta', '"<path>"'), }; export const template = { base(script, format, useBase128) { script = compress(format, script, useBase128); if (useBase128) { return files.base128 .replace("<format>", format) .split('"<script>"', 2).join(script); } return files.base64 .replace("<format>", format) .split("<script>", 2).join(script); }, assets(assetsJSON) { return files.assets.join(assetsJSON); }, css(cssSource) { return files.css.join(JSON.stringify(cssSource)); }, icon(dataURL) { return files.icon.join(JSON.stringify(dataURL)); }, importmeta(p) { return files.importmeta.join(JSON.stringify(p)); }, };