Files
ServiceManager/frontend/node_modules/vite-plugin-pwa/dist/vite-build-BGK4YAIU.js
2026-01-01 17:40:53 +01:00

140 lines
4.0 KiB
JavaScript

import {
logSWViteBuild,
logWorkboxResult,
normalizePath
} from "./chunk-G4TAN34B.js";
import "./chunk-LKBIOQSP.js";
// src/vite-build.ts
import { promises as fs } from "node:fs";
import { basename, dirname, relative, resolve } from "node:path";
async function buildSW(version, options, viteOptions, workboxPromise) {
await options.integration?.beforeBuildServiceWorker?.(options);
const { build } = await import("vite");
const {
inlineConfig,
format,
swName,
swMjsName
} = prepareViteBuild(options, viteOptions);
logSWViteBuild(version, normalizePath(relative(viteOptions.root, options.swSrc)), viteOptions, format);
await options.integration?.configureCustomSWViteBuild?.(inlineConfig);
await build(inlineConfig);
if (format !== "iife") {
const swDestDir = dirname(options.swDest);
const mjsPath = resolve(swDestDir, swMjsName);
const jsPath = resolve(swDestDir, swName);
await fs.rename(mjsPath, jsPath);
const mjsMapPath = `${mjsPath}.map`;
const sourceMap = await fs.lstat(mjsMapPath).then((s) => s.isFile()).catch(() => false);
if (sourceMap) {
await Promise.all([
fs.readFile(jsPath, "utf-8").then((content) => fs.writeFile(
jsPath,
content.replace(`${swMjsName}.map`, `${swName}.map`),
"utf-8"
)),
fs.rename(mjsMapPath, `${jsPath}.map`)
]);
}
}
if (!options.injectManifest.injectionPoint)
return;
const injectManifestOptions = {
...options.injectManifest,
// this will not fail since there is an injectionPoint
swSrc: options.injectManifest.swDest
};
const { injectManifest } = await workboxPromise;
const buildResult = await injectManifest(injectManifestOptions);
logWorkboxResult(
version,
options.throwMaximumFileSizeToCacheInBytes,
"injectManifest",
buildResult,
viteOptions,
format
);
}
function prepareViteBuild(options, viteOptions) {
const define = { ...viteOptions.define ?? {} };
const nodeEnv = options.injectManifestBuildOptions.enableWorkboxModulesLogs ? "development" : process["env"]["NODE_ENV"] || "production";
define["process.env.NODE_ENV"] = JSON.stringify(nodeEnv);
const buildPlugins = options.buildPlugins;
const {
format,
plugins,
rollupOptions
} = options.injectManifestRollupOptions;
const inlineConfig = {
root: viteOptions.root,
base: viteOptions.base,
resolve: viteOptions.resolve,
mode: viteOptions.mode,
envDir: options.injectManifestEnvOptions.envDir,
envPrefix: options.injectManifestEnvOptions.envPrefix,
// don't copy anything from public folder
publicDir: false,
build: {
target: options.injectManifestBuildOptions.target,
minify: options.injectManifestBuildOptions.minify,
sourcemap: options.injectManifestBuildOptions.sourcemap,
outDir: options.outDir,
emptyOutDir: false
},
configFile: false,
define,
plugins: buildPlugins?.vite
};
const swName = basename(options.swDest);
const swMjsName = swName.replace(/\.js$/, ".mjs");
if (format !== "iife") {
if (viteOptions.build.sourcemap) {
Object.assign(inlineConfig, {
...inlineConfig,
esbuild: {
sourcemap: viteOptions.build.sourcemap === "hidden" ? true : viteOptions.build.sourcemap
}
});
}
Object.assign(inlineConfig.build, {
...inlineConfig.build,
modulePreload: false,
rollupOptions: {
...rollupOptions,
plugins: buildPlugins?.rollup ?? plugins,
input: options.swSrc,
output: {
entryFileNames: swMjsName,
inlineDynamicImports: true
}
}
});
} else {
Object.assign(inlineConfig.build, {
...inlineConfig.build,
lib: {
entry: options.swSrc,
name: "app",
formats: [format]
},
rollupOptions: {
...rollupOptions,
plugins: buildPlugins?.rollup ?? plugins,
output: {
entryFileNames: swName
}
}
});
}
return {
inlineConfig,
swName,
swMjsName,
format
};
}
export {
buildSW
};