@@ -146,7 +146,7 @@ const patternlab_module = function (config) {
146146 }
147147 }
148148
149- function buildPatterns ( deletePatternDir ) {
149+ function buildPatterns ( deletePatternDir , additionalData ) {
150150 patternlab . events . emit ( 'patternlab-build-pattern-start' , patternlab ) ;
151151
152152 //
@@ -170,9 +170,8 @@ const patternlab_module = function (config) {
170170 //
171171 cleanBuildDirectory ( patternlab . incrementalBuildsEnabled ) ;
172172
173- patternlab . buildGlobalData ( ) ;
173+ patternlab . buildGlobalData ( additionalData ) ;
174174
175- // diveSync once to perform iterative populating of patternlab object
176175 return patternlab . processAllPatternsIterative ( paths . source . patterns ) . then ( ( ) => {
177176
178177 patternlab . events . emit ( 'patternlab-pattern-iteration-end' , patternlab ) ;
@@ -181,90 +180,94 @@ const patternlab_module = function (config) {
181180 //we need to do this before expanding patterns & partials into extendedTemplates, otherwise we could lose the data -> partial reference
182181 parseAllLinks ( patternlab ) ;
183182
184- //diveSync again to recursively include partials, filling out the
183+ //dive again to recursively include partials, filling out the
185184 //extendedTemplate property of the patternlab.patterns elements
186- // TODO we can reduce the time needed by only processing changed patterns and their partials
187- patternlab . processAllPatternsRecursive ( paths . source . patterns , patternlab ) ;
188-
189- //take the user defined head and foot and process any data and patterns that apply
190- const headPatternPromise = processMetaPattern ( `_00-head.${ patternlab . config . patternExtension } ` , 'userHead' , patternlab ) ;
191- const footPatternPromise = processMetaPattern ( `_01-foot.${ patternlab . config . patternExtension } ` , 'userFoot' , patternlab ) ;
192-
193- return Promise . all ( [ headPatternPromise , footPatternPromise ] ) . then ( ( ) => {
194-
195- //cascade any patternStates
196- lineage_hunter . cascade_pattern_states ( patternlab ) ;
197-
198- //set pattern-specific header if necessary
199- let head ;
200- if ( patternlab . userHead ) {
201- head = patternlab . userHead ;
202- } else {
203- head = patternlab . header ;
204- }
205-
206- //set the pattern-specific header by compiling the general-header with data, and then adding it to the meta header
207- return render ( Pattern . createEmpty ( { extendedTemplate : patternlab . header } ) , {
208- cacheBuster : patternlab . cacheBuster
209- } ) . then ( ( results ) => {
210- patternlab . data . patternLabHead = results ;
211-
212- // If deletePatternDir == true or graph needs to be updated
213- // rebuild all patterns
214- let patternsToBuild = null ;
215-
216- // If deletePatternDir == true or graph needs to be updated
217- // rebuild all patterns
218- patternsToBuild = null ;
219-
220- if ( patternlab . incrementalBuildsEnabled ) {
221- // When the graph was loaded from file, some patterns might have been moved/deleted between runs
222- // so the graph data become out of sync
223- patternlab . graph . sync ( ) . forEach ( n => {
224- logger . info ( "[Deleted/Moved] " + n ) ;
225- } ) ;
226-
227- // TODO Find created or deleted files
228- const now = new Date ( ) . getTime ( ) ;
229- markModifiedPatterns ( now , patternlab ) ;
230- patternsToBuild = patternlab . graph . compileOrder ( ) ;
185+ return patternlab . processAllPatternsRecursive ( paths . source . patterns ) . then ( ( ) => {
186+
187+ //take the user defined head and foot and process any data and patterns that apply
188+ const headPatternPromise = processMetaPattern ( `_00-head.${ patternlab . config . patternExtension } ` , 'userHead' , patternlab ) ;
189+ const footPatternPromise = processMetaPattern ( `_01-foot.${ patternlab . config . patternExtension } ` , 'userFoot' , patternlab ) ;
190+
191+ return Promise . all ( [ headPatternPromise , footPatternPromise ] ) . then ( ( ) => {
192+
193+ //cascade any patternStates
194+ lineage_hunter . cascade_pattern_states ( patternlab ) ;
195+
196+ //set pattern-specific header if necessary
197+ let head ;
198+ if ( patternlab . userHead ) {
199+ head = patternlab . userHead ;
231200 } else {
232- // build all patterns, mark all to be rebuilt
233- patternsToBuild = patternlab . patterns ;
234- for ( const p of patternsToBuild ) {
235- p . compileState = CompileState . NEEDS_REBUILD ;
236- }
201+ head = patternlab . header ;
237202 }
238203
239- //render all patterns last, so lineageR works
240- return patternsToBuild
241- . reduce ( ( previousPromise , pattern ) => {
242- return previousPromise . then ( ( ) => patternlab . renderSinglePattern ( pattern , head ) ) ;
243- } , Promise . resolve ( ) )
244- . then ( ( ) => {
245- // Saves the pattern graph when all files have been compiled
246- PatternGraph . storeToFile ( patternlab ) ;
247- if ( patternlab . config . exportToGraphViz ) {
248- PatternGraph . exportToDot ( patternlab , "dependencyGraph.dot" ) ;
249- logger . info ( `Exported pattern graph to ${ path . join ( config . paths . public . root , "dependencyGraph.dot" ) } ` ) ;
204+ //set the pattern-specific header by compiling the general-header with data, and then adding it to the meta header
205+ return render ( Pattern . createEmpty ( { extendedTemplate : patternlab . header } ) , {
206+ cacheBuster : patternlab . cacheBuster
207+ } ) . then ( ( results ) => {
208+ patternlab . data . patternLabHead = results ;
209+
210+ // If deletePatternDir == true or graph needs to be updated
211+ // rebuild all patterns
212+ let patternsToBuild = null ;
213+
214+ // If deletePatternDir == true or graph needs to be updated
215+ // rebuild all patterns
216+ patternsToBuild = null ;
217+
218+ if ( patternlab . incrementalBuildsEnabled ) {
219+ // When the graph was loaded from file, some patterns might have been moved/deleted between runs
220+ // so the graph data become out of sync
221+ patternlab . graph . sync ( ) . forEach ( n => {
222+ logger . info ( "[Deleted/Moved] " + n ) ;
223+ } ) ;
224+
225+ // TODO Find created or deleted files
226+ const now = new Date ( ) . getTime ( ) ;
227+ markModifiedPatterns ( now , patternlab ) ;
228+ patternsToBuild = patternlab . graph . compileOrder ( ) ;
229+ } else {
230+ // build all patterns, mark all to be rebuilt
231+ patternsToBuild = patternlab . patterns ;
232+ for ( const p of patternsToBuild ) {
233+ p . compileState = CompileState . NEEDS_REBUILD ;
250234 }
235+ }
251236
252- //export patterns if necessary
253- pattern_exporter . export_patterns ( patternlab ) ;
254-
255- } ) . catch ( reason => {
256- console . log ( reason ) ;
257- logger . error ( 'Error rendering patterns' ) ;
258- } ) ;
237+ //render all patterns last, so lineageR works
238+ return patternsToBuild
239+ . reduce ( ( previousPromise , pattern ) => {
240+ return previousPromise . then ( ( ) => patternlab . renderSinglePattern ( pattern , head ) ) ;
241+ } , Promise . resolve ( ) )
242+ . then ( ( ) => {
243+ // Saves the pattern graph when all files have been compiled
244+ PatternGraph . storeToFile ( patternlab ) ;
245+ if ( patternlab . config . exportToGraphViz ) {
246+ PatternGraph . exportToDot ( patternlab , "dependencyGraph.dot" ) ;
247+ logger . info ( `Exported pattern graph to ${ path . join ( config . paths . public . root , "dependencyGraph.dot" ) } ` ) ;
248+ }
249+
250+ //export patterns if necessary
251+ pattern_exporter . export_patterns ( patternlab ) ;
252+
253+ } ) . catch ( reason => {
254+ console . log ( reason ) ;
255+ logger . error ( 'Error rendering patterns' ) ;
256+ } ) ;
257+
258+ } ) . catch ( reason => {
259+ console . log ( reason ) ;
260+ logger . error ( 'Error rendering pattern lab header' ) ;
261+ } ) ;
259262
260263 } ) . catch ( reason => {
261264 console . log ( reason ) ;
262- logger . error ( 'Error rendering pattern lab header ' ) ;
265+ logger . error ( 'Error processing meta patterns ' ) ;
263266 } ) ;
264267
265268 } ) . catch ( reason => {
266269 console . log ( reason ) ;
267- logger . error ( 'Error processing meta patterns' ) ;
270+ logger . error ( 'Error processing patterns recursively ' ) ;
268271 } ) ;
269272
270273 } ) . catch ( reason => {
@@ -304,7 +307,7 @@ const patternlab_module = function (config) {
304307 return Promise . resolve ( ) ;
305308 }
306309 patternlab . isBusy = true ;
307- return buildPatterns ( options . cleanPublic ) . then ( ( ) => {
310+ return buildPatterns ( options . cleanPublic , options . data ) . then ( ( ) => {
308311
309312 return new ui_builder ( ) . buildFrontend ( patternlab ) . then ( ( ) => {
310313
@@ -352,7 +355,7 @@ const patternlab_module = function (config) {
352355 return Promise . resolve ( ) ;
353356 }
354357 patternlab . isBusy = true ;
355- return buildPatterns ( options . cleanPublic ) . then ( ( ) => {
358+ return buildPatterns ( options . cleanPublic , options . data ) . then ( ( ) => {
356359 patternlab . isBusy = false ;
357360 } ) ;
358361 } ,
0 commit comments