File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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
Original file line number Diff line number Diff 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 ) ) ) {
Original file line number Diff line number Diff line change @@ -92,4 +92,5 @@ export interface AssetPattern {
9292 glob : string ;
9393 input ?: string ;
9494 output ?: string ;
95+ allowOutsideOutDir ?: boolean ;
9596}
You can’t perform that action at this time.
0 commit comments