Skip to content

Commit 0af0afc

Browse files
snitin315alexander-akait
authored andcommitted
feat: improve static.serveIndex defaults (#4968)
1 parent 888939d commit 0af0afc

File tree

3 files changed

+83
-4
lines changed

3 files changed

+83
-4
lines changed

lib/Server.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -863,13 +863,20 @@ class Server {
863863
? optionsForStatic.publicPath
864864
: [optionsForStatic.publicPath]
865865
: def.publicPath,
866-
// TODO: do merge in the next major release
867866
serveIndex:
867+
// Check if 'serveIndex' property is defined in 'optionsForStatic'
868+
// If 'serveIndex' is a boolean and true, use default 'serveIndex'
869+
// If 'serveIndex' is an object, merge its properties with default 'serveIndex'
870+
// If 'serveIndex' is neither a boolean true nor an object, use it as-is
871+
// If 'serveIndex' is not defined in 'optionsForStatic', use default 'serveIndex'
868872
// eslint-disable-next-line no-nested-ternary
869873
typeof optionsForStatic.serveIndex !== "undefined"
870-
? typeof optionsForStatic.serveIndex === "boolean" &&
874+
? // eslint-disable-next-line no-nested-ternary
875+
typeof optionsForStatic.serveIndex === "boolean" &&
871876
optionsForStatic.serveIndex
872877
? def.serveIndex
878+
: typeof optionsForStatic.serveIndex === "object"
879+
? { ...def.serveIndex, ...optionsForStatic.serveIndex }
873880
: optionsForStatic.serveIndex
874881
: def.serveIndex,
875882
watch:

test/__snapshots__/normalize-options.test.js.snap.webpack5

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2363,7 +2363,66 @@ exports[`normalize options static publicPath is an array 1`] = `
23632363
}
23642364
`;
23652365

2366-
exports[`normalize options static serveIndex is an object 1`] = `
2366+
exports[`normalize options static serveIndex is an object more options 1`] = `
2367+
{
2368+
"allowedHosts": "auto",
2369+
"bonjour": false,
2370+
"client": {
2371+
"logging": "info",
2372+
"overlay": true,
2373+
"reconnect": 10,
2374+
"webSocketURL": {},
2375+
},
2376+
"compress": true,
2377+
"devMiddleware": {},
2378+
"historyApiFallback": false,
2379+
"host": undefined,
2380+
"hot": true,
2381+
"liveReload": true,
2382+
"open": [],
2383+
"port": "<auto>",
2384+
"server": {
2385+
"options": {},
2386+
"type": "http",
2387+
},
2388+
"setupExitSignals": true,
2389+
"static": [
2390+
{
2391+
"directory": "<cwd>/public",
2392+
"publicPath": [
2393+
"/",
2394+
],
2395+
"serveIndex": {
2396+
"hidden": true,
2397+
"icons": true,
2398+
"stylesheet": "https://example.com/style.css",
2399+
"view": "details",
2400+
},
2401+
"staticOptions": {},
2402+
"watch": {
2403+
"alwaysStat": true,
2404+
"atomic": false,
2405+
"followSymlinks": false,
2406+
"ignoreInitial": true,
2407+
"ignorePermissionErrors": true,
2408+
"ignored": undefined,
2409+
"interval": undefined,
2410+
"persistent": true,
2411+
"usePolling": false,
2412+
},
2413+
},
2414+
],
2415+
"watchFiles": [],
2416+
"webSocketServer": {
2417+
"options": {
2418+
"path": "/ws",
2419+
},
2420+
"type": "ws",
2421+
},
2422+
}
2423+
`;
2424+
2425+
exports[`normalize options static serveIndex is an object with icons false 1`] = `
23672426
{
23682427
"allowedHosts": "auto",
23692428
"bonjour": false,

test/normalize-options.test.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ describe("normalize options", () => {
469469
},
470470
},
471471
{
472-
title: "static serveIndex is an object",
472+
title: "static serveIndex is an object with icons false",
473473
multiCompiler: false,
474474
options: {
475475
static: {
@@ -479,6 +479,19 @@ describe("normalize options", () => {
479479
},
480480
},
481481
},
482+
{
483+
title: "static serveIndex is an object more options",
484+
multiCompiler: false,
485+
options: {
486+
static: {
487+
serveIndex: {
488+
hidden: true,
489+
stylesheet: "https://example.com/style.css",
490+
view: "details",
491+
},
492+
},
493+
},
494+
},
482495

483496
{
484497
title: "single compiler watchOptions is object",

0 commit comments

Comments
 (0)