@@ -146,7 +146,7 @@ export function parse(filename: string, data: string, factory: BlockFactory, opt
146
146
147
147
return Promise . resolve ( ) . then ( ( ) => {
148
148
return parseWith ( template , metaAnalysis , factory , resolvedOpts ) . then ( analysis => {
149
- return Promise . all ( metaAnalysis . analysisPromises ) . then ( ( analyses ) => {
149
+ return resolveAllRecursively ( metaAnalysis . analysisPromises ) . then ( ( analyses ) => {
150
150
for ( let analysis of ( new Set ( analyses ) ) ) {
151
151
traverse ( analysis . template . ast , analyzer ( analysis ) ) ;
152
152
metaAnalysis . addAnalysis ( analysis ) ;
@@ -160,6 +160,25 @@ export function parse(filename: string, data: string, factory: BlockFactory, opt
160
160
} ) ;
161
161
}
162
162
163
+ function resolveAllRecursively < T > ( promiseArray : Array < Promise < T > > ) : Promise < Array < T > > {
164
+ return new Promise < Array < T > > ( ( resolve , reject ) => {
165
+ let currentLength = promiseArray . length ;
166
+ let waitAgain = ( promise : Promise < Array < T > > ) : void => {
167
+ promise . then ( ( values ) => {
168
+ if ( promiseArray . length === currentLength ) {
169
+ resolve ( values ) ;
170
+ } else {
171
+ currentLength = promiseArray . length ;
172
+ waitAgain ( Promise . all ( promiseArray ) ) ;
173
+ }
174
+ } , ( error ) => {
175
+ reject ( error ) ;
176
+ } ) ;
177
+ } ;
178
+ waitAgain ( Promise . all ( promiseArray ) ) ;
179
+ } ) ;
180
+ }
181
+
163
182
/**
164
183
* Provided a file path, return a promise for the fully parsed analytics object.
165
184
* // TODO: Make streaming?
0 commit comments