Skip to content

Commit 7e85965

Browse files
refactor: reuse output file system from compilation
1 parent 20c2628 commit 7e85965

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

src/middleware.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const {
3737
/** @typedef {import("./index.js").IncomingMessage} IncomingMessage */
3838
/** @typedef {import("./index.js").ServerResponse} ServerResponse */
3939
/** @typedef {import("./index.js").NormalizedHeaders} NormalizedHeaders */
40+
/** @typedef {import("./index.js").OutputFileSystem} OutputFileSystem */
4041

4142
const BYTES_RANGE_REGEXP = /^ *bytes/i;
4243

@@ -61,6 +62,7 @@ const UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
6162
* @typedef {object} Extra
6263
* @property {import("fs").Stats} stats stats
6364
* @property {boolean=} immutable true when immutable, otherwise false
65+
* @property {OutputFileSystem} outputFileSystem outputFileSystem
6466
*/
6567

6668
/**
@@ -83,13 +85,15 @@ class FilenameError extends Error {
8385
}
8486
}
8587

88+
/** @typedef {{ filename: string, extra: Extra }} FilenameWithExtra */
89+
8690
// TODO fix redirect logic when `/` at the end, like https://github.com/pillarjs/send/blob/master/index.js#L586
8791
/**
8892
* @template {IncomingMessage} Request
8993
* @template {ServerResponse} Response
9094
* @param {import("./index.js").FilledContext<Request, Response>} context context
9195
* @param {string} url url
92-
* @returns {{ filename: string, extra: Extra } | undefined} result of get filename from url
96+
* @returns {FilenameWithExtra | undefined} result of get filename from url
9397
*/
9498
function getFilenameFromUrl(context, url) {
9599
/** @type {URL} */
@@ -168,8 +172,12 @@ function getFilenameFromUrl(context, url) {
168172
pathname.slice(publicPathPathname.length),
169173
);
170174

175+
const { outputFileSystem } =
176+
/** @type {Compiler & { outputFileSystem: OutputFileSystem }} */
177+
(compilation.compiler);
178+
171179
try {
172-
extra.stats = context.outputFileSystem.statSync(filename);
180+
extra.stats = outputFileSystem.statSync(filename);
173181
} catch {
174182
continue;
175183
}
@@ -188,6 +196,8 @@ function getFilenameFromUrl(context, url) {
188196
extra.immutable = assetInfo ? assetInfo.immutable : false;
189197
}
190198

199+
extra.outputFileSystem = outputFileSystem;
200+
191201
break;
192202
} else if (
193203
extra.stats.isDirectory() &&
@@ -202,13 +212,14 @@ function getFilenameFromUrl(context, url) {
202212
filename = path.join(filename, indexValue);
203213

204214
try {
205-
extra.stats = context.outputFileSystem.statSync(filename);
215+
extra.stats = outputFileSystem.statSync(filename);
206216
} catch {
207217
continue;
208218
}
209219

210220
if (extra.stats.isFile()) {
211221
foundFilename = filename;
222+
extra.outputFileSystem = outputFileSystem;
212223

213224
break;
214225
}
@@ -710,7 +721,7 @@ function wrapper(context) {
710721
*/
711722
async function processRequest() {
712723
// Pipe and SendFile
713-
/** @type {{ filename: string, extra: Extra } | undefined} */
724+
/** @type {FilenameWithExtra | undefined} */
714725
let resolved;
715726

716727
const requestUrl = /** @type {string} */ (getRequestURL(req));
@@ -870,7 +881,7 @@ function wrapper(context) {
870881
try {
871882
const result = createReadStreamOrReadFileSync(
872883
filename,
873-
context.outputFileSystem,
884+
extra.outputFileSystem,
874885
start,
875886
end,
876887
);
@@ -1015,7 +1026,7 @@ function wrapper(context) {
10151026
try {
10161027
({ bufferOrStream, byteLength } = createReadStreamOrReadFileSync(
10171028
filename,
1018-
context.outputFileSystem,
1029+
extra.outputFileSystem,
10191030
start,
10201031
end,
10211032
));

0 commit comments

Comments
 (0)