Skip to content

Commit 8d423dc

Browse files
author
Angular Builds
committed
1278112 fix(@angular-devkit/build-angular): serve assets
1 parent 27d89ce commit 8d423dc

File tree

4 files changed

+76
-16
lines changed

4 files changed

+76
-16
lines changed

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
{
22
"name": "@angular-devkit/build-angular",
3-
"version": "19.1.0-next.0+sha-faabbbf",
3+
"version": "19.1.0-next.0+sha-1278112",
44
"description": "Angular Webpack Build Facade",
55
"main": "src/index.js",
66
"typings": "src/index.d.ts",
77
"builders": "builders.json",
88
"dependencies": {
99
"@ampproject/remapping": "2.3.0",
10-
"@angular-devkit/architect": "github:angular/angular-devkit-architect-builds#faabbbf",
11-
"@angular-devkit/build-webpack": "github:angular/angular-devkit-build-webpack-builds#faabbbf",
12-
"@angular-devkit/core": "github:angular/angular-devkit-core-builds#faabbbf",
13-
"@angular/build": "github:angular/angular-build-builds#faabbbf",
10+
"@angular-devkit/architect": "github:angular/angular-devkit-architect-builds#1278112",
11+
"@angular-devkit/build-webpack": "github:angular/angular-devkit-build-webpack-builds#1278112",
12+
"@angular-devkit/core": "github:angular/angular-devkit-core-builds#1278112",
13+
"@angular/build": "github:angular/angular-build-builds#1278112",
1414
"@babel/core": "7.26.0",
1515
"@babel/generator": "7.26.2",
1616
"@babel/helper-annotate-as-pure": "7.25.9",
@@ -21,7 +21,7 @@
2121
"@babel/preset-env": "7.26.0",
2222
"@babel/runtime": "7.26.0",
2323
"@discoveryjs/json-ext": "0.6.3",
24-
"@ngtools/webpack": "github:angular/ngtools-webpack-builds#faabbbf",
24+
"@ngtools/webpack": "github:angular/ngtools-webpack-builds#1278112",
2525
"@vitejs/plugin-basic-ssl": "1.1.0",
2626
"ansi-colors": "4.1.3",
2727
"autoprefixer": "10.4.20",
@@ -70,7 +70,7 @@
7070
"@angular/localize": "^19.0.0-next.0",
7171
"@angular/platform-server": "^19.0.0-next.0",
7272
"@angular/service-worker": "^19.0.0-next.0",
73-
"@angular/ssr": "github:angular/angular-ssr-builds#faabbbf",
73+
"@angular/ssr": "github:angular/angular-ssr-builds#1278112",
7474
"@web/test-runner": "^0.19.0",
7575
"browser-sync": "^3.0.2",
7676
"jest": "^29.5.0",
@@ -91,7 +91,7 @@
9191
"@angular/service-worker": {
9292
"optional": true
9393
},
94-
"@angular/ssr": "github:angular/angular-ssr-builds#faabbbf",
94+
"@angular/ssr": "github:angular/angular-ssr-builds#1278112",
9595
"@web/test-runner": {
9696
"optional": true
9797
},

src/builders/karma/application_builder.js

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,58 @@ class ApplicationBuildError extends Error {
5050
this.name = 'ApplicationBuildError';
5151
}
5252
}
53+
const LATEST_BUILD_FILES_TOKEN = 'angularLatestBuildFiles';
54+
class AngularAssetsMiddleware {
55+
serveFile;
56+
latestBuildFiles;
57+
static $inject = ['serveFile', LATEST_BUILD_FILES_TOKEN];
58+
static NAME = 'angular-test-assets';
59+
constructor(serveFile, latestBuildFiles) {
60+
this.serveFile = serveFile;
61+
this.latestBuildFiles = latestBuildFiles;
62+
}
63+
handle(req, res, next) {
64+
let err = null;
65+
try {
66+
const url = new URL(`http://${req.headers['host']}${req.url}`);
67+
const file = this.latestBuildFiles.files[url.pathname.slice(1)];
68+
if (file?.origin === 'disk') {
69+
this.serveFile(file.inputPath, undefined, res);
70+
return;
71+
}
72+
else if (file?.origin === 'memory') {
73+
// Include pathname to help with Content-Type headers.
74+
this.serveFile(`/unused/${url.pathname}`, undefined, res, undefined, file.contents, true);
75+
return;
76+
}
77+
}
78+
catch (e) {
79+
err = e;
80+
}
81+
next(err);
82+
}
83+
static createPlugin(initialFiles) {
84+
return {
85+
[LATEST_BUILD_FILES_TOKEN]: ['value', { files: { ...initialFiles.files } }],
86+
[`middleware:${AngularAssetsMiddleware.NAME}`]: [
87+
'factory',
88+
Object.assign((...args) => {
89+
const inst = new AngularAssetsMiddleware(...args);
90+
return inst.handle.bind(inst);
91+
}, AngularAssetsMiddleware),
92+
],
93+
};
94+
}
95+
}
5396
function injectKarmaReporter(context, buildOptions, buildIterator, karmaConfig, subscriber) {
5497
const reporterName = 'angular-progress-notifier';
5598
class ProgressNotifierReporter {
5699
emitter;
57-
static $inject = ['emitter'];
58-
constructor(emitter) {
100+
latestBuildFiles;
101+
static $inject = ['emitter', LATEST_BUILD_FILES_TOKEN];
102+
constructor(emitter, latestBuildFiles) {
59103
this.emitter = emitter;
104+
this.latestBuildFiles = latestBuildFiles;
60105
this.startWatchingBuild();
61106
}
62107
startWatchingBuild() {
@@ -74,6 +119,15 @@ function injectKarmaReporter(context, buildOptions, buildIterator, karmaConfig,
74119
}
75120
else if (buildOutput.kind === private_1.ResultKind.Incremental ||
76121
buildOutput.kind === private_1.ResultKind.Full) {
122+
if (buildOutput.kind === private_1.ResultKind.Full) {
123+
this.latestBuildFiles.files = buildOutput.files;
124+
}
125+
else {
126+
this.latestBuildFiles.files = {
127+
...this.latestBuildFiles.files,
128+
...buildOutput.files,
129+
};
130+
}
77131
await writeTestFiles(buildOutput.files, buildOptions.outputPath);
78132
this.emitter.refreshFiles();
79133
}
@@ -167,6 +221,7 @@ async function initializeApplication(options, context, karmaOptions, transforms
167221
? createInstrumentationFilter(projectSourceRoot, getInstrumentationExcludedPaths(context.workspaceRoot, options.codeCoverageExclude ?? []))
168222
: undefined;
169223
const buildOptions = {
224+
assets: options.assets,
170225
entryPoints,
171226
tsConfig: options.tsConfig,
172227
outputPath,
@@ -224,18 +279,23 @@ async function initializeApplication(options, context, karmaOptions, transforms
224279
// Remove the webpack plugin/framework:
225280
// Alternative would be to make the Karma plugin "smart" but that's a tall order
226281
// with managing unneeded imports etc..
227-
const pluginLengthBefore = (parsedKarmaConfig.plugins ?? []).length;
228-
parsedKarmaConfig.plugins = (parsedKarmaConfig.plugins ?? []).filter((plugin) => {
282+
parsedKarmaConfig.plugins ??= [];
283+
const pluginLengthBefore = parsedKarmaConfig.plugins.length;
284+
parsedKarmaConfig.plugins = parsedKarmaConfig.plugins.filter((plugin) => {
229285
if (typeof plugin === 'string') {
230286
return plugin !== 'framework:@angular-devkit/build-angular';
231287
}
232288
return !plugin['framework:@angular-devkit/build-angular'];
233289
});
234-
parsedKarmaConfig.frameworks = parsedKarmaConfig.frameworks?.filter((framework) => framework !== '@angular-devkit/build-angular');
235-
const pluginLengthAfter = (parsedKarmaConfig.plugins ?? []).length;
290+
parsedKarmaConfig.frameworks ??= [];
291+
parsedKarmaConfig.frameworks = parsedKarmaConfig.frameworks.filter((framework) => framework !== '@angular-devkit/build-angular');
292+
const pluginLengthAfter = parsedKarmaConfig.plugins.length;
236293
if (pluginLengthBefore !== pluginLengthAfter) {
237294
context.logger.warn(`Ignoring framework "@angular-devkit/build-angular" from karma config file because it's not compatible with the application builder.`);
238295
}
296+
parsedKarmaConfig.plugins.push(AngularAssetsMiddleware.createPlugin(buildOutput));
297+
parsedKarmaConfig.middleware ??= [];
298+
parsedKarmaConfig.middleware.push(AngularAssetsMiddleware.NAME);
239299
// When using code-coverage, auto-add karma-coverage.
240300
// This was done as part of the karma plugin for webpack.
241301
if (options.codeCoverage &&

src/utils/normalize-cache.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
1010
exports.normalizeCacheOptions = normalizeCacheOptions;
1111
const node_path_1 = require("node:path");
1212
/** Version placeholder is replaced during the build process with actual package version */
13-
const VERSION = '19.1.0-next.0+sha-faabbbf';
13+
const VERSION = '19.1.0-next.0+sha-1278112';
1414
function hasCacheMetadata(value) {
1515
return (!!value &&
1616
typeof value === 'object' &&

uniqueId

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Tue Nov 05 2024 22:40:41 GMT+0000 (Coordinated Universal Time)
1+
Wed Nov 06 2024 00:03:49 GMT+0000 (Coordinated Universal Time)

0 commit comments

Comments
 (0)