Skip to content

Commit 740c648

Browse files
committed
refactor(@angular/build): implement custom middleware for header appending
Replaced multiple `appendServerConfiguredHeaders` calls with a single custom middleware to append headers to all responses, simplifying the code and ensuring consistency.
1 parent 62b2c6c commit 740c648

File tree

7 files changed

+43
-33
lines changed

7 files changed

+43
-33
lines changed

packages/angular/build/src/tools/vite/angular-memory-plugin.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type { Connect, Plugin } from 'vite';
1414
import {
1515
angularHtmlFallbackMiddleware,
1616
createAngularAssetsMiddleware,
17+
createAngularHeadersMiddleware,
1718
createAngularIndexHtmlMiddleware,
1819
createAngularSSRMiddleware,
1920
} from './middlewares';
@@ -114,6 +115,8 @@ export function createAngularMemoryPlugin(options: AngularMemoryPluginOptions):
114115
};
115116
};
116117

118+
server.middlewares.use(createAngularHeadersMiddleware(server));
119+
117120
// Assets and resources get handled first
118121
server.middlewares.use(
119122
createAngularAssetsMiddleware(server, assets, outputFiles, usedComponentStyles),

packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@ import { lookup as lookupMimeType } from 'mrmime';
1010
import { extname } from 'node:path';
1111
import type { Connect, ViteDevServer } from 'vite';
1212
import { loadEsmModule } from '../../../utils/load-esm';
13-
import {
14-
AngularMemoryOutputFiles,
15-
appendServerConfiguredHeaders,
16-
pathnameWithoutBasePath,
17-
} from '../utils';
13+
import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils';
1814

1915
const COMPONENT_REGEX = /%COMP%/g;
2016

@@ -97,7 +93,6 @@ export function createAngularAssetsMiddleware(
9793

9894
res.setHeader('Content-Type', 'text/css');
9995
res.setHeader('Cache-Control', 'no-cache');
100-
appendServerConfiguredHeaders(server, res);
10196
res.end(encapsulatedData);
10297
})
10398
.catch((e) => next(e));
@@ -116,7 +111,6 @@ export function createAngularAssetsMiddleware(
116111
res.setHeader('Content-Type', mimeType);
117112
}
118113
res.setHeader('Cache-Control', 'no-cache');
119-
appendServerConfiguredHeaders(server, res);
120114
res.end(data);
121115

122116
return;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @license
3+
* Copyright Google LLC All Rights Reserved.
4+
*
5+
* Use of this source code is governed by an MIT-style license that can be
6+
* found in the LICENSE file at https://angular.dev/license
7+
*/
8+
9+
import type { ServerResponse } from 'node:http';
10+
import type { Connect, ViteDevServer } from 'vite';
11+
12+
/**
13+
* Creates a middleware for adding custom headers.
14+
*
15+
* This middleware is responsible for setting HTTP headers as configured in the Vite server options.
16+
* If headers are defined in the server configuration, they are applied to the server response.
17+
*
18+
* @param server - The instance of `ViteDevServer` containing the configuration, including custom headers.
19+
* @returns A middleware function that processes the incoming request, sets headers if available,
20+
* and passes control to the next middleware in the chain.
21+
*/
22+
export function createAngularHeadersMiddleware(server: ViteDevServer): Connect.NextHandleFunction {
23+
return function (_req: Connect.IncomingMessage, res: ServerResponse, next: Connect.NextFunction) {
24+
const headers = server.config.server.headers;
25+
if (!headers) {
26+
return next();
27+
}
28+
29+
for (const [name, value] of Object.entries(headers)) {
30+
if (value !== undefined) {
31+
res.setHeader(name, value);
32+
}
33+
}
34+
35+
next();
36+
};
37+
}

packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@
88

99
import { extname } from 'node:path';
1010
import type { Connect, ViteDevServer } from 'vite';
11-
import {
12-
AngularMemoryOutputFiles,
13-
appendServerConfiguredHeaders,
14-
pathnameWithoutBasePath,
15-
} from '../utils';
11+
import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils';
1612

1713
export function createAngularIndexHtmlMiddleware(
1814
server: ViteDevServer,
@@ -52,7 +48,6 @@ export function createAngularIndexHtmlMiddleware(
5248

5349
res.setHeader('Content-Type', 'text/html');
5450
res.setHeader('Cache-Control', 'no-cache');
55-
appendServerConfiguredHeaders(server, res);
5651
res.end(processedHtml);
5752
})
5853
.catch((error) => next(error));

packages/angular/build/src/tools/vite/middlewares/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ export { createAngularAssetsMiddleware } from './assets-middleware';
1010
export { angularHtmlFallbackMiddleware } from './html-fallback-middleware';
1111
export { createAngularIndexHtmlMiddleware } from './index-html-middleware';
1212
export { createAngularSSRMiddleware } from './ssr-middleware';
13+
export { createAngularHeadersMiddleware } from './headers-middleware';

packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import type { ɵgetOrCreateAngularServerApp as getOrCreateAngularServerApp } from '@angular/ssr';
1010
import type { ServerResponse } from 'node:http';
1111
import type { Connect, ViteDevServer } from 'vite';
12-
import { appendServerConfiguredHeaders } from '../utils';
1312

1413
export function createAngularSSRMiddleware(
1514
server: ViteDevServer,
@@ -55,7 +54,6 @@ export function createAngularSSRMiddleware(
5554
return next();
5655
}
5756

58-
appendServerConfiguredHeaders(server, res);
5957
res.end(content);
6058
})
6159
.catch((error) => next(error));

packages/angular/build/src/tools/vite/utils.ts

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@
77
*/
88

99
import { lookup as lookupMimeType } from 'mrmime';
10-
import type { IncomingMessage, ServerResponse } from 'node:http';
1110
import { extname } from 'node:path';
12-
import type { ViteDevServer } from 'vite';
1311

1412
export type AngularMemoryOutputFiles = Map<string, { contents: Uint8Array; servable: boolean }>;
1513

@@ -32,19 +30,3 @@ export function lookupMimeTypeFromRequest(url: string): string | undefined {
3230

3331
return extension && lookupMimeType(extension);
3432
}
35-
36-
export function appendServerConfiguredHeaders(
37-
server: ViteDevServer,
38-
res: ServerResponse<IncomingMessage>,
39-
): void {
40-
const headers = server.config.server.headers;
41-
if (!headers) {
42-
return;
43-
}
44-
45-
for (const [name, value] of Object.entries(headers)) {
46-
if (value !== undefined) {
47-
res.setHeader(name, value);
48-
}
49-
}
50-
}

0 commit comments

Comments
 (0)