140 lines
4.0 KiB
JavaScript
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
|
|
};
|