webpack-dev-middleware
Version:
A development middleware for webpack
45 lines (42 loc) • 1.67 kB
JavaScript
"use strict";
/** @typedef {import("webpack").Compiler} Compiler */
/** @typedef {import("webpack").Stats} Stats */
/** @typedef {import("webpack").MultiStats} MultiStats */
/** @typedef {import("webpack").Asset} Asset */
/** @typedef {import("../index.js").IncomingMessage} IncomingMessage */
/** @typedef {import("../index.js").ServerResponse} ServerResponse */
/**
* @template {IncomingMessage} Request
* @template {ServerResponse} Response
* @param {import("../index.js").FilledContext<Request, Response>} context context
* @returns {{ outputPath: string, publicPath: string, assetsInfo: Asset["info"] }[]} paths
*/
function getPaths(context) {
const {
stats,
options
} = context;
/* eslint-disable unicorn/prefer-logical-operator-over-ternary */
/** @type {Stats[]} */
const childStats = /** @type {MultiStats} */
stats.stats ? /** @type {MultiStats} */stats.stats : [(/** @type {Stats} */stats)];
/** @type {{ outputPath: string, publicPath: string, assetsInfo: Asset["info"] }[]} */
const publicPaths = [];
for (const {
compilation
} of childStats) {
if (compilation.options.devServer === false) {
continue;
}
// The `output.path` is always present and always absolute
const outputPath = compilation.getPath(compilation.outputOptions.path || "");
const publicPath = options.publicPath ? compilation.getPath(options.publicPath) : compilation.outputOptions.publicPath ? compilation.getPath(compilation.outputOptions.publicPath) : "";
publicPaths.push({
outputPath,
publicPath,
assetsInfo: compilation.assetsInfo
});
}
return publicPaths;
}
module.exports = getPaths;