Make item loop iterative (vs. recursive) to handle synchronous processing of thousands of items.

This commit is contained in:
David Anson 2018-03-19 21:21:22 -07:00
parent f80b61d8b7
commit ff73e822cf

View file

@ -445,14 +445,21 @@ function lintInput(options, synchronous, callback) {
var resultVersion = (options.resultVersion === undefined) ? var resultVersion = (options.resultVersion === undefined) ?
2 : options.resultVersion; 2 : options.resultVersion;
var results = newResults(ruleList); var results = newResults(ruleList);
// Helper to lint the next string or file item // Helper to lint the next string or file
function lintNextItem() {
var iterating = true;
var item = null; var item = null;
function lintNextItem(err, result) { function lintNextItemCallback(err, result) {
if (err) { if (err) {
iterating = false;
return callback(err); return callback(err);
} else if (result) {
results[item] = result;
} }
results[item] = result;
if (!iterating) {
lintNextItem();
}
}
while (iterating) {
if ((item = stringsKeys.shift())) { if ((item = stringsKeys.shift())) {
lintContent( lintContent(
ruleList, ruleList,
@ -461,8 +468,9 @@ function lintInput(options, synchronous, callback) {
frontMatter, frontMatter,
noInlineConfig, noInlineConfig,
resultVersion, resultVersion,
lintNextItem); lintNextItemCallback);
} else if ((item = files.shift())) { } else if ((item = files.shift())) {
iterating = synchronous;
lintFile( lintFile(
ruleList, ruleList,
item, item,
@ -471,9 +479,10 @@ function lintInput(options, synchronous, callback) {
noInlineConfig, noInlineConfig,
resultVersion, resultVersion,
synchronous, synchronous,
lintNextItem); lintNextItemCallback);
} else { } else {
callback(null, results); return callback(null, results);
}
} }
} }
lintNextItem(); lintNextItem();