@@ -3,15 +3,21 @@ import { performance } from 'perf_hooks';
33import { workspaceDataDirectoryForWorkspace } from './cache-directory' ;
44import { isOnDaemon } from '../daemon/is-on-daemon' ;
55import { daemonClient } from '../daemon/client/client' ;
6+ import { readNxJson } from '../config/configuration' ;
7+ import { resolve } from 'path' ;
68
79let workspaceContext : WorkspaceContext | undefined ;
810
9- export function setupWorkspaceContext ( workspaceRoot : string ) {
11+ export function setupWorkspaceContext (
12+ workspaceRoot : string ,
13+ additionalProjectDirectories : string [ ]
14+ ) {
1015 const { WorkspaceContext } =
1116 require ( '../native' ) as typeof import ( '../native' ) ;
1217 performance . mark ( 'workspace-context' ) ;
1318 workspaceContext = new WorkspaceContext (
1419 workspaceRoot ,
20+ additionalProjectDirectories . map ( ( p ) => resolve ( workspaceRoot , p ) ) ,
1521 workspaceDataDirectoryForWorkspace ( workspaceRoot )
1622 ) ;
1723 performance . mark ( 'workspace-context:end' ) ;
@@ -27,8 +33,10 @@ export async function getNxWorkspaceFilesFromContext(
2733 projectRootMap : Record < string , string > ,
2834 useDaemonProcess : boolean = true
2935) {
36+ const additionalProjectDirectories =
37+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
3038 if ( ! useDaemonProcess || isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
31- ensureContextAvailable ( workspaceRoot ) ;
39+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
3240 return workspaceContext . getWorkspaceFiles ( projectRootMap ) ;
3341 }
3442 return daemonClient . getWorkspaceFiles ( projectRootMap ) ;
@@ -46,7 +54,9 @@ export function globWithWorkspaceContextSync(
4654 globs : string [ ] ,
4755 exclude ?: string [ ]
4856) {
49- ensureContextAvailable ( workspaceRoot ) ;
57+ const additionalProjectDirectories =
58+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
59+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
5060 return workspaceContext . glob ( globs , exclude ) ;
5161}
5262
@@ -55,8 +65,10 @@ export async function globWithWorkspaceContext(
5565 globs : string [ ] ,
5666 exclude ?: string [ ]
5767) {
68+ const additionalProjectDirectories =
69+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
5870 if ( workspaceRoot === '/virtual' || isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
59- ensureContextAvailable ( workspaceRoot ) ;
71+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
6072 return workspaceContext . glob ( globs , exclude ) ;
6173 } else {
6274 return daemonClient . glob ( globs , exclude ) ;
@@ -68,8 +80,10 @@ export async function multiGlobWithWorkspaceContext(
6880 globs : string [ ] ,
6981 exclude ?: string [ ]
7082) {
83+ const additionalProjectDirectories =
84+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
7185 if ( isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
72- ensureContextAvailable ( workspaceRoot ) ;
86+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
7387 return workspaceContext . multiGlob ( globs , exclude ) ;
7488 }
7589 return daemonClient . multiGlob ( globs , exclude ) ;
@@ -80,8 +94,10 @@ export async function hashWithWorkspaceContext(
8094 globs : string [ ] ,
8195 exclude ?: string [ ]
8296) {
97+ const additionalProjectDirectories =
98+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
8399 if ( isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
84- ensureContextAvailable ( workspaceRoot ) ;
100+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
85101 return workspaceContext . hashFilesMatchingGlob ( globs , exclude ) ;
86102 }
87103 return daemonClient . hashGlob ( globs , exclude ) ;
@@ -91,8 +107,10 @@ export async function hashMultiGlobWithWorkspaceContext(
91107 workspaceRoot : string ,
92108 globGroups : string [ ] [ ]
93109) {
110+ const additionalProjectDirectories =
111+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
94112 if ( isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
95- ensureContextAvailable ( workspaceRoot ) ;
113+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
96114 return workspaceContext . hashFilesMatchingGlobs ( globGroups ) ;
97115 }
98116 return daemonClient . hashMultiGlob ( globGroups ) ;
@@ -132,13 +150,17 @@ export function updateFilesInContext(
132150 updatedFiles : string [ ] ,
133151 deletedFiles : string [ ]
134152) {
135- ensureContextAvailable ( workspaceRoot ) ;
153+ const additionalProjectDirectories =
154+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
155+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
136156 return workspaceContext ?. incrementalUpdate ( updatedFiles , deletedFiles ) ;
137157}
138158
139159export async function getAllFileDataInContext ( workspaceRoot : string ) {
160+ const additionalProjectDirectories =
161+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
140162 if ( isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
141- ensureContextAvailable ( workspaceRoot ) ;
163+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
142164 return workspaceContext . allFileData ( ) ;
143165 }
144166 return daemonClient . getWorkspaceContextFileData ( ) ;
@@ -148,8 +170,10 @@ export async function getFilesInDirectoryUsingContext(
148170 workspaceRoot : string ,
149171 dir : string
150172) {
173+ const additionalProjectDirectories =
174+ readNxJson ( workspaceRoot ) . additionalProjectDirectories ?? [ ] ;
151175 if ( isOnDaemon ( ) || ! daemonClient . enabled ( ) ) {
152- ensureContextAvailable ( workspaceRoot ) ;
176+ ensureContextAvailable ( workspaceRoot , additionalProjectDirectories ) ;
153177 return workspaceContext . getFilesInDirectory ( dir ) ;
154178 }
155179 return daemonClient . getFilesInDirectory ( dir ) ;
@@ -170,9 +194,12 @@ export function updateProjectFiles(
170194 ) ;
171195}
172196
173- function ensureContextAvailable ( workspaceRoot : string ) {
197+ function ensureContextAvailable (
198+ workspaceRoot : string ,
199+ additionalProjectDirectories : string [ ]
200+ ) {
174201 if ( ! workspaceContext || workspaceContext ?. workspaceRoot !== workspaceRoot ) {
175- setupWorkspaceContext ( workspaceRoot ) ;
202+ setupWorkspaceContext ( workspaceRoot , additionalProjectDirectories ) ;
176203 }
177204}
178205
0 commit comments