textlint
Version:
The pluggable linting tool for text and markdown.
62 lines • 1.86 kB
JavaScript
export class ExecuteFileBackerManager {
/**
* create MessageProcessManager with backers
* @param {AbstractBacker[]} backers
*/
constructor(backers = []) {
this._backers = backers;
}
/**
* @param {AbstractBacker} backer
*/
add(backer) {
this._backers.push(backer);
}
/**
* @param {AbstractBacker} backer
*/
remove(backer) {
const index = this._backers.indexOf(backer);
if (index !== -1) {
this._backers.splice(index, 1);
}
}
/**
* process `messages` with registered processes
*/
process(files, executeFile) {
const unExecutedResults = [];
const resultPromises = files
.filter((filePath) => {
const shouldExecute = this._backers.every((backer) => {
return backer.shouldExecute({ filePath });
});
// add fake unExecutedResults for un-executed file.
if (!shouldExecute) {
const value = {
filePath,
messages: []
};
unExecutedResults.push(Promise.resolve(value));
}
return shouldExecute;
})
.map((filePath) => {
return executeFile(filePath).then((result) => {
this._backers.forEach((backer) => {
backer.didExecute({ result });
});
return result;
});
})
.concat(unExecutedResults);
// wait all resolved, and call afterAll
return Promise.all(resultPromises).then((results) => {
this._backers.forEach((backer) => {
backer.afterAll();
});
return results;
});
}
}
//# sourceMappingURL=execute-file-backer-manager.js.map