@@ -33,62 +33,96 @@ const removeChildPaths = (paths: string[]): string[] =>
33
33
( p1 ) => ! paths . some ( ( p2 ) => p1 !== p2 && relative ( p2 , p1 ) && ! relative ( p2 , p1 ) . startsWith ( '..' ) )
34
34
) ;
35
35
36
- const mapDeps = async ( files : BuildTempatesResult [ ] ) => {
37
- const depPaths : string [ ] = [ ] ;
38
- const metaReads = files . map ( async ( { metaPath } ) => {
36
+ const getEntrypoints = async ( files : BuildTempatesResult [ ] ) => {
37
+ const entrypoints : Set < string > = new Set ( ) ;
38
+ const promises = files . map ( async ( { metaPath } ) => {
39
39
log . debug ( { exists : await exists ( metaPath ?? '' ) , metaPath } ) ;
40
40
41
41
if ( ! metaPath || ! ( await exists ( metaPath ) ) ) return null ;
42
42
const contents = await readFile ( metaPath , 'utf-8' ) ;
43
43
const metafile = JSON . parse ( contents ) as Metafile ;
44
- const { outputs } = metafile ;
45
- const result = new Map < string , Set < string > > ( ) ;
46
-
47
- Object . entries ( outputs ) . forEach ( ( [ _ , meat ] ) => {
48
- const { entryPoint, inputs } = meat ;
49
- const resolvedEntry = resolve ( originalCwd , entryPoint ! ) ;
50
- depPaths . push ( resolvedEntry ) ;
51
-
52
- for ( const dep of Object . keys ( inputs ) ) {
53
- const resolvedDepPath = resolve ( originalCwd , dep ) ;
54
- const set = result . get ( resolvedDepPath ) ?? new Set ( ) ;
55
-
56
- depPaths . push ( resolvedDepPath ) ;
57
- set . add ( resolvedEntry ) ;
58
- result . set ( resolvedDepPath , set ) ;
59
- }
44
+
45
+ Object . entries ( metafile . outputs ) . forEach ( ( [ _ , { entryPoint } ] ) => {
46
+ entrypoints . add ( resolve ( originalCwd , entryPoint ! ) ) ;
60
47
} ) ;
61
48
62
- return result ;
49
+ return null ;
63
50
} ) ;
64
- const deps = ( await Promise . all ( metaReads ) ) . filter ( Boolean ) ;
65
51
66
- return { depPaths, deps } ;
52
+ await Promise . all ( promises ) ;
53
+
54
+ log . debug ( { entrypoints } ) ;
55
+
56
+ return Array . from ( entrypoints ) . filter ( Boolean ) ;
57
+ } ;
58
+
59
+ const getWatchPaths = async ( files : BuildTempatesResult [ ] ) => {
60
+ const entrypoints = await getEntrypoints ( files ) ;
61
+ const paths = entrypoints . map ( ( path ) => dirname ( path ) ) ;
62
+ const uniquePaths = Array . from ( new Set ( paths ) ) ;
63
+ const watchPaths = removeChildPaths ( uniquePaths ) ;
64
+
65
+ log . debug ( { watchPaths } ) ;
66
+
67
+ return watchPaths ;
67
68
} ;
68
69
70
+ // const mapDeps = async (files: BuildTempatesResult[]) => {
71
+ // const depPaths: string[] = [];
72
+ // const metaReads = files.map(async ({ metaPath }) => {
73
+ // log.debug({ exists: await exists(metaPath ?? ''), metaPath });
74
+
75
+ // if (!metaPath || !(await exists(metaPath))) return null;
76
+ // const contents = await readFile(metaPath, 'utf-8');
77
+ // const metafile = JSON.parse(contents) as Metafile;
78
+ // const { outputs } = metafile;
79
+ // const result = new Map<string, Set<string>>();
80
+
81
+ // Object.entries(outputs).forEach(([_, meat]) => {
82
+ // const { entryPoint, inputs } = meat;
83
+ // const resolvedEntry = resolve(originalCwd, entryPoint!);
84
+ // depPaths.push(resolvedEntry);
85
+
86
+ // for (const dep of Object.keys(inputs)) {
87
+ // const resolvedDepPath = resolve(originalCwd, dep);
88
+ // const set = result.get(resolvedDepPath) ?? new Set();
89
+
90
+ // depPaths.push(resolvedDepPath);
91
+ // set.add(resolvedEntry);
92
+ // result.set(resolvedDepPath, set);
93
+ // }
94
+ // });
95
+
96
+ // return result;
97
+ // });
98
+ // const deps = (await Promise.all(metaReads)).filter(Boolean);
99
+
100
+ // return { depPaths, deps };
101
+ // };
102
+
69
103
export const watch = async ( args : WatchArgs ) => {
70
104
newline ( ) ;
71
105
log . info ( chalk `{blue Starting watcher...}\n` ) ;
72
106
73
107
const { common, files, server } = args ;
74
108
const { argv } = common ;
75
109
const extensions = [ '.css' , '.js' , '.jsx' , '.ts' , '.tsx' ] ;
110
+ const watchPaths = await getWatchPaths ( files ) ;
76
111
77
- const { depPaths, deps : metaDeps } = await mapDeps ( files ) ;
78
- const templateDeps = new Map < string , Set < string > > ( ) ;
112
+ // const { depPaths, deps: metaDeps } = await mapDeps(files);
113
+ // const templateDeps = new Map<string, Set<string>>();
79
114
80
- for ( const map of metaDeps ) {
81
- map ! . forEach ( ( value , key ) => templateDeps . set ( key , value ) ) ;
82
- }
115
+ // for (const map of metaDeps) {
116
+ // map!.forEach((value, key) => templateDeps.set(key, value));
117
+ // }
83
118
84
119
const handler : watcher . SubscribeCallback = async ( _ , events ) => {
85
120
const changedFiles = events
86
121
. filter ( ( event ) => event . type !== 'create' && event . type !== 'delete' )
87
122
. map ( ( e ) => e . path )
88
123
. filter ( ( path ) => extensions . includes ( extname ( path ) ) ) ;
89
- const changedTemplates = changedFiles
90
- . flatMap ( ( file ) => [ ...( templateDeps . get ( file ) || [ ] ) ] )
91
- . filter ( Boolean ) ;
124
+ const templateFileNames = files . map ( ( file ) => file . fileName ) ;
125
+ const changedTemplates = changedFiles . filter ( ( file ) => templateFileNames . includes ( file ) ) ;
92
126
const createdFiles = events
93
127
. filter ( ( event ) => event . type === 'create' )
94
128
. map ( ( e ) => e . path )
@@ -129,7 +163,7 @@ export const watch = async (args: WatchArgs) => {
129
163
log . info (
130
164
chalk `{cyan Building}` ,
131
165
createdFiles . length ,
132
- `file${ changedTemplates . length === 1 ? '' : 's' } :\n ` ,
166
+ `file${ createdFiles . length === 1 ? '' : 's' } :\n ` ,
133
167
createdFiles . join ( '\n ' ) ,
134
168
'\n'
135
169
) ;
@@ -166,10 +200,10 @@ export const watch = async (args: WatchArgs) => {
166
200
} ) ;
167
201
} ;
168
202
169
- const watchPathSet = new Set ( [
170
- ...depPaths . filter ( ( path ) => ! path . includes ( '/node_modules/' ) ) . map ( ( path ) => dirname ( path ) )
171
- ] ) ;
172
- const watchPaths = removeChildPaths ( [ ...watchPathSet ] ) ;
203
+ // const watchPathSet = new Set([
204
+ // ...depPaths.filter((path) => !path.includes('/node_modules/')).map((path) => dirname(path))
205
+ // ]);
206
+ // const watchPaths = removeChildPaths([...watchPathSet]);
173
207
174
208
log . debug ( 'Watching Paths:' , watchPaths . sort ( ) ) ;
175
209
0 commit comments