11import { BuilderContext , createBuilder } from '@angular-devkit/architect' ;
22import { JsonObject , workspaces } from '@angular-devkit/core' ;
33import { runWebpack , BuildResult } from '@angular-devkit/build-webpack' ;
4-
54import { Observable , from } from 'rxjs' ;
65import { join , resolve } from 'path' ;
76import { map , concatMap } from 'rxjs/operators' ;
87import { getNodeWebpackConfig } from '../../utils/node.config' ;
98import { OUT_FILENAME } from '../../utils/config' ;
109import { BuildBuilderOptions } from '../../utils/types' ;
11- import { normalizeBuildOptions } from '../../utils/normalize' ;
10+ import {
11+ normalizeBuildOptions ,
12+ normalizeFileReplacements ,
13+ } from '../../utils/normalize' ;
1214import { NodeJsSyncHost } from '@angular-devkit/core/node' ;
13- import { createProjectGraph } from '@nrwl/workspace/src/core/project-graph' ;
15+ import {
16+ createProjectGraph ,
17+ ProjectGraph ,
18+ } from '@nrwl/workspace/src/core/project-graph' ;
1419import {
1520 calculateProjectDependencies ,
1621 createTmpTsConfig ,
@@ -37,6 +42,20 @@ function run(
3742 options : JsonObject & BuildNodeBuilderOptions ,
3843 context : BuilderContext
3944) : Observable < NodeBuildEvent > {
45+ const { configuration } = context . target ;
46+
47+ if ( options . useGlobalFileReplacements ) {
48+ const projGraph = createProjectGraph ( ) ;
49+ const fileReplacements = resolveAllProjectFileReplacements (
50+ projGraph ,
51+ configuration
52+ ) ;
53+ options . fileReplacements = normalizeFileReplacements (
54+ context . workspaceRoot ,
55+ fileReplacements
56+ ) ;
57+ }
58+
4059 if ( ! options . buildLibsFromSource ) {
4160 const projGraph = createProjectGraph ( ) ;
4261 const { target, dependencies } = calculateProjectDependencies (
@@ -60,7 +79,7 @@ function run(
6079 if ( options . webpackConfig ) {
6180 config = require ( options . webpackConfig ) ( config , {
6281 options,
63- configuration : context . target . configuration ,
82+ configuration,
6483 } ) ;
6584 }
6685 return config ;
@@ -99,3 +118,21 @@ async function getSourceRoot(context: BuilderContext) {
99118 throw new Error ( message ) ;
100119 }
101120}
121+
122+ export function resolveAllProjectFileReplacements (
123+ projGraph : ProjectGraph ,
124+ configuration : string
125+ ) {
126+ const projects = Object . values ( projGraph . nodes ) ;
127+ const fileReplacements = projects . reduce ( ( allReplacements , project ) => {
128+ const projectReplacements =
129+ project ?. data ?. architect ?. build ?. configurations ?. [ configuration ]
130+ ?. fileReplacements ;
131+ if ( projectReplacements ) {
132+ allReplacements . push ( ...projectReplacements ) ;
133+ }
134+ return allReplacements ;
135+ } , [ ] ) ;
136+
137+ return fileReplacements ;
138+ }
0 commit comments