@serwist/webpack-plugin
Version:
A plugin for your webpack build process, helping you generate a manifest of local files that should be precached.
38 lines (31 loc) • 1.38 kB
text/typescript
/*
Copyright 2019 Google LLC
Use of this source code is governed by an MIT-style
license that can be found in the LICENSE file or at
https://opensource.org/licenses/MIT.
*/
import path from "node:path";
import type { Compilation, WebpackError } from "webpack";
import { resolveWebpackURL } from "./resolve-webpack-url.js";
export const getScriptFilesForChunks = (compilation: Compilation, chunkNames: string[]): string[] => {
const { chunks } = compilation.getStats().toJson({ chunks: true });
const { publicPath } = compilation.options.output;
const scriptFiles = new Set<string>();
for (const chunkName of chunkNames) {
const chunk = chunks!.find((chunk) => chunk.names?.includes(chunkName));
if (chunk) {
for (const file of chunk?.files ?? []) {
// See https://github.com/GoogleChrome/workbox/issues/2161
if (path.extname(file) === ".js") {
scriptFiles.add(resolveWebpackURL(publicPath as string, file));
}
}
} else {
compilation.warnings.push(new Error(`${chunkName} was provided to importScriptsViaChunks, but didn't match any named chunks.`) as WebpackError);
}
}
if (scriptFiles.size === 0) {
compilation.warnings.push(new Error(`There were no assets matching importScriptsViaChunks: [${chunkNames.join(" ")}].`) as WebpackError);
}
return Array.from(scriptFiles);
};