Skip to content

Commit f44e99c

Browse files
committed
fix(@angular/cli): add a flag to let assets outside of outDir
On top of angular#7778 Fixes angular#8122
1 parent 28e66f3 commit f44e99c

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

packages/@angular/cli/lib/config/schema.json

+5
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@
7272
"type": "string",
7373
"default": "",
7474
"description": "The output path (relative to the outDir)."
75+
},
76+
"allowOutsideOutDir": {
77+
"type": "boolean",
78+
"description": "Allow assets to be copied outside the outDir.",
79+
"default": false
7580
}
7681
},
7782
"additionalProperties": false

packages/@angular/cli/models/webpack-configs/common.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,20 @@ export function getCommonConfig(wco: WebpackConfigOptions) {
9595
asset.output = asset.output || '';
9696
asset.glob = asset.glob || '';
9797

98-
// Prevent asset configurations from writing outside of the output path
98+
// Prevent asset configurations from writing outside of the output path, except if the user
99+
// specify a configuration flag.
100+
// Also prevent writing outside the project path. That is not overridable.
99101
const fullOutputPath = path.resolve(buildOptions.outputPath, asset.output);
100-
if (!fullOutputPath.startsWith(path.resolve(buildOptions.outputPath))) {
101-
const message = 'An asset cannot be written to a location outside of the output path.';
102+
if (!fullOutputPath.startsWith(projectRoot)) {
103+
const message = 'An asset cannot be written to a location outside the project.';
102104
throw new SilentError(message);
103105
}
106+
if (!fullOutputPath.startsWith(path.resolve(buildOptions.outputPath))) {
107+
if (!asset.allowOutsideOutDir) {
108+
const message = 'An asset cannot be written to a location outside of the output path.';
109+
throw new SilentError(message);
110+
}
111+
}
104112

105113
// Ensure trailing slash.
106114
if (isDirectory(path.resolve(asset.input))) {

packages/@angular/cli/models/webpack-configs/utils.ts

+1
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,5 @@ export interface AssetPattern {
9292
glob: string;
9393
input?: string;
9494
output?: string;
95+
allowOutsideOutDir?: boolean;
9596
}

0 commit comments

Comments
 (0)