Skip to content

Commit 5e986db

Browse files
refactor: code
1 parent 6a5ca64 commit 5e986db

File tree

1 file changed

+21
-20
lines changed

1 file changed

+21
-20
lines changed

src/middleware.js

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ const {
2525
} = require("./utils/compatibleAPI");
2626
const getFilenameFromUrl = require("./utils/getFilenameFromUrl");
2727
const memorize = require("./utils/memorize");
28-
const parseTokenList = require("./utils/parseTokenList");
2928
const ready = require("./utils/ready");
3029

3130
/** @typedef {import("./index.js").NextFunction} NextFunction */
@@ -116,6 +115,10 @@ const parseRangeHeaders = memorize(
116115
},
117116
);
118117

118+
const getETag = memorize(() => require("./utils/etag"));
119+
const getEscapeHtml = memorize(() => require("./utils/escapeHtml"));
120+
const getParseTokenList = memorize(() => require("./utils/parseTokenList"));
121+
119122
const MAX_MAX_AGE = 31536000000;
120123

121124
/**
@@ -184,7 +187,7 @@ function wrapper(context) {
184187
await goNext(error);
185188
}
186189

187-
const escapeHtml = require("./utils/escapeHtml");
190+
const escapeHtml = getEscapeHtml();
188191

189192
const content = statuses[status] || String(status);
190193
let document = Buffer.from(
@@ -291,7 +294,7 @@ function wrapper(context) {
291294
return (
292295
!etag ||
293296
(ifMatch !== "*" &&
294-
parseTokenList(ifMatch).every(
297+
getParseTokenList()(ifMatch).every(
295298
(match) =>
296299
match !== etag &&
297300
match !== `W/${etag}` &&
@@ -369,7 +372,7 @@ function wrapper(context) {
369372
return false;
370373
}
371374

372-
const matches = parseTokenList(noneMatch);
375+
const matches = getParseTokenList()(noneMatch);
373376

374377
let etagStale = true;
375378

@@ -632,13 +635,10 @@ function wrapper(context) {
632635
const rangeHeader = getRangeHeader();
633636

634637
if (context.options.etag && !getResponseHeader(res, "ETag")) {
635-
/** @type {import("fs").Stats | Buffer | ReadStream | undefined} */
636-
let value;
638+
const isStrongETag = context.options.etag === "strong";
637639

638-
// TODO cache etag generation?
639-
if (context.options.etag === "weak") {
640-
value = /** @type {import("fs").Stats} */ (extra.stats);
641-
} else {
640+
// TODO cache strong etag generation?
641+
if (isStrongETag) {
642642
if (rangeHeader) {
643643
const parsedRanges =
644644
/** @type {import("range-parser").Ranges | import("range-parser").Result} */
@@ -663,32 +663,33 @@ function wrapper(context) {
663663
end,
664664
);
665665

666-
value = result.bufferOrStream;
667666
({ bufferOrStream, byteLength } = result);
668667
} catch (error) {
669668
await errorHandler(/** @type {NodeJS.ErrnoException} */ (error));
670669
return;
671670
}
672671
}
673672

674-
if (value) {
675-
const result = await require("./utils/etag")(value);
676-
677-
// Because we already read stream, we can cache buffer to avoid extra read from fs
678-
if (result.buffer) {
679-
bufferOrStream = result.buffer;
680-
}
673+
const result = await getETag()(
674+
isStrongETag
675+
? /** @type {Buffer | ReadStream} */ (bufferOrStream)
676+
: /** @type {import("fs").Stats} */ (extra.stats),
677+
);
681678

682-
setResponseHeader(res, "ETag", result.hash);
679+
// Because we already read stream, we can cache buffer to avoid extra read from fs
680+
if (result.buffer) {
681+
bufferOrStream = result.buffer;
683682
}
683+
684+
setResponseHeader(res, "ETag", result.hash);
684685
}
685686

686687
if (
687688
!getResponseHeader(res, "Content-Type") ||
688689
getStatusCode(res) === 404
689690
) {
690691
removeResponseHeader(res, "Content-Type");
691-
// content-type name(like application/javascript; charset=utf-8) or false
692+
// content-type name (like application/javascript; charset=utf-8) or false
692693
const contentType = mime.contentType(path.extname(filename));
693694

694695
// Only set content-type header if media type is known

0 commit comments

Comments
 (0)