@@ -25,6 +25,10 @@ export async function getNxWorkspaceConfig(
2525 workspacePath : string ,
2626 nxVersion : NxVersion ,
2727 logger : Logger ,
28+ projectGraphAndSourceMaps ?: {
29+ projectGraph : ProjectGraph ;
30+ sourceMaps : ConfigurationSourceMaps ;
31+ } | null ,
2832) : Promise < {
2933 projectGraph : ProjectGraph | undefined ;
3034 sourceMaps : ConfigurationSourceMaps | undefined ;
@@ -100,67 +104,88 @@ export async function getNxWorkspaceConfig(
100104 } ) ;
101105 }
102106
103- try {
104- _defaultProcessExit = process . exit ;
105- process . exit = function ( code ?: number ) {
106- console . warn ( 'process.exit called with code' , code ) ;
107- } as ( code ?: number ) => never ;
108-
109- if ( nxOutput !== undefined ) {
110- nxOutput . output . error = ( output ) => {
111- // do nothing
112- } ;
113- nxOutput . output . log = ( output ) => {
114- // do nothing
115- } ;
116- }
107+ if ( ! projectGraphAndSourceMaps ) {
108+ try {
109+ _defaultProcessExit = process . exit ;
110+ process . exit = function ( code ?: number ) {
111+ console . warn ( 'process.exit called with code' , code ) ;
112+ } as ( code ?: number ) => never ;
113+
114+ if ( nxOutput !== undefined ) {
115+ nxOutput . output . error = ( output ) => {
116+ // do nothing
117+ } ;
118+ nxOutput . output . log = ( output ) => {
119+ // do nothing
120+ } ;
121+ }
117122
118- if ( gte ( nxVersion , '17.2.0' ) ) {
119- logger . log ( 'createProjectGraphAndSourceMapsAsync' ) ;
120- try {
121- const projectGraphAndSourceMaps = await (
122- nxProjectGraph as any
123- ) . createProjectGraphAndSourceMapsAsync ( {
123+ if ( gte ( nxVersion , '17.2.0' ) ) {
124+ logger . log ( 'createProjectGraphAndSourceMapsAsync' ) ;
125+ try {
126+ const projectGraphAndSourceMaps = await (
127+ nxProjectGraph as any
128+ ) . createProjectGraphAndSourceMapsAsync ( {
129+ exitOnError : false ,
130+ } ) ;
131+ projectGraph = projectGraphAndSourceMaps . projectGraph ;
132+
133+ sourceMaps = projectGraphAndSourceMaps . sourceMaps ;
134+ } catch ( e ) {
135+ if ( isProjectGraphError ( e ) ) {
136+ logger . log ( 'caught ProjectGraphError, using partial graph' ) ;
137+ projectGraph = e . getPartialProjectGraph ( ) ?? {
138+ nodes : { } ,
139+ dependencies : { } ,
140+ } ;
141+ sourceMaps = e . getPartialSourcemaps ( ) ;
142+ errors = e . getErrors ( ) . map ( ( error ) => ( {
143+ name : error . name ,
144+ message : error . message ,
145+ stack : error . stack ,
146+ file :
147+ ( error as any ) . file ??
148+ ( ( error as any ) . cause as any ) ?. errors ?. [ 0 ] ?. location ?. file ,
149+ pluginName : ( error as any ) . pluginName ,
150+ cause : ( error as any ) . cause ,
151+ } ) ) ;
152+ isPartial = true ;
153+ } else {
154+ throw e ;
155+ }
156+ }
157+ logger . log ( 'createProjectGraphAndSourceMapsAsync successful' ) ;
158+ } else {
159+ logger . log ( 'createProjectGraphAsync' ) ;
160+ projectGraph = await nxProjectGraph . createProjectGraphAsync ( {
124161 exitOnError : false ,
125162 } ) ;
126- projectGraph = projectGraphAndSourceMaps . projectGraph ;
163+ logger . log ( 'createProjectGraphAsync successful' ) ;
164+ }
165+ } catch ( e ) {
166+ logger . log ( 'Unable to get project graph' ) ;
167+ logger . log ( e . stack ) ;
168+ errors = [ { stack : e . stack } ] ;
169+ }
127170
128- sourceMaps = projectGraphAndSourceMaps . sourceMaps ;
171+ // reset the daemon client after getting all required information from the daemon
172+ if (
173+ nxDaemonClientModule &&
174+ nxDaemonClientModule . daemonClient ?. enabled ( )
175+ ) {
176+ try {
177+ logger . log ( 'Resetting daemon client' ) ;
178+ nxDaemonClientModule . daemonClient ?. reset ( ) ;
129179 } catch ( e ) {
130- if ( isProjectGraphError ( e ) ) {
131- logger . log ( 'caught ProjectGraphError, using partial graph' ) ;
132- projectGraph = e . getPartialProjectGraph ( ) ?? {
133- nodes : { } ,
134- dependencies : { } ,
135- } ;
136- sourceMaps = e . getPartialSourcemaps ( ) ;
137- errors = e . getErrors ( ) . map ( ( error ) => ( {
138- name : error . name ,
139- message : error . message ,
140- stack : error . stack ,
141- file :
142- ( error as any ) . file ??
143- ( ( error as any ) . cause as any ) ?. errors ?. [ 0 ] ?. location ?. file ,
144- pluginName : ( error as any ) . pluginName ,
145- cause : ( error as any ) . cause ,
146- } ) ) ;
147- isPartial = true ;
148- } else {
149- throw e ;
150- }
180+ logger . log ( `Error while resetting daemon client, moving on...` ) ;
151181 }
152- logger . log ( 'createProjectGraphAndSourceMapsAsync successful' ) ;
153- } else {
154- logger . log ( 'createProjectGraphAsync' ) ;
155- projectGraph = await nxProjectGraph . createProjectGraphAsync ( {
156- exitOnError : false ,
157- } ) ;
158- logger . log ( 'createProjectGraphAsync successful' ) ;
159182 }
160- } catch ( e ) {
161- logger . log ( 'Unable to get project graph' ) ;
162- logger . log ( e . stack ) ;
163- errors = [ { stack : e . stack } ] ;
183+ } else {
184+ logger . log (
185+ 'received project graph and source maps, skipping recomputation' ,
186+ ) ;
187+ projectGraph = projectGraphAndSourceMaps . projectGraph ;
188+ sourceMaps = projectGraphAndSourceMaps . sourceMaps ;
164189 }
165190
166191 if ( gte ( nxVersion , '16.3.1' ) && projectGraph ) {
@@ -176,16 +201,6 @@ export async function getNxWorkspaceConfig(
176201 } ) ;
177202 }
178203
179- // reset the daemon client after getting all required information from the daemon
180- if ( nxDaemonClientModule && nxDaemonClientModule . daemonClient ?. enabled ( ) ) {
181- try {
182- logger . log ( 'Resetting daemon client' ) ;
183- nxDaemonClientModule . daemonClient ?. reset ( ) ;
184- } catch ( e ) {
185- logger . log ( `Error while resetting daemon client, moving on...` ) ;
186- }
187- }
188-
189204 const end = performance . now ( ) ;
190205 logger . log ( `Retrieved workspace configuration in: ${ end - start } ms` ) ;
191206
0 commit comments