FFutureUniantv 0.1.0
703177d9创建于 11 天前历史提交
import fs from "node:fs";
import path from "node:path";
import type { Plugin } from "vite";

const ASSETS_DIR = path.resolve("src/assets");
const LIGHT_FILE = "AppLightSmall.png";
const DARK_FILE = "AppDarkSmall.png";
const INJECT_MARKER = "/*__WORKSHADOW_BOOT_DATA__*/";
const LIGHT_SRC_MARKER = "__WORKSHADOW_BOOT_LIGHT_SRC__";

function readBootDataUris(): { light: string; dark: string } {
  const lightBuf = fs.readFileSync(path.join(ASSETS_DIR, LIGHT_FILE));
  const darkBuf = fs.readFileSync(path.join(ASSETS_DIR, DARK_FILE));
  return {
    light: `data:image/png;base64,${lightBuf.toString("base64")}`,
    dark: `data:image/png;base64,${darkBuf.toString("base64")}`
  };
}

/**
 * 构建/开发时把启动图以 data URI 写入 index.html,首屏零网络请求。
 * (不再使用 dist/boot/ 或 /boot/ 路径。)
 */
export function bootSplashPlugin(): Plugin {
  let cached: { light: string; dark: string } | null = null;

  function getData() {
    cached ??= readBootDataUris();
    return cached;
  }

  return {
    name: "workshadow-boot-splash",
    transformIndexHtml(html) {
      const { light, dark } = getData();
      const dataJson = JSON.stringify({ light, dark });
      return html
        .replace(INJECT_MARKER, `window.__WORKSHADOW_BOOT_DATA__=${dataJson};`)
        .replaceAll(LIGHT_SRC_MARKER, light);
    }
  };
}