Only crash when not watching after everything is pre-compiled

This commit is contained in:
Alice Gaudon 2021-05-11 15:14:36 +02:00
parent 076cda8008
commit 423f19de68
1 changed files with 20 additions and 4 deletions

View File

@ -11,6 +11,8 @@ export default abstract class AssetPreCompiler {
private afterPreCompileHandlers: ((watch: boolean) => Promise<void>)[] = [];
private inputChangeHandler?: (restart: boolean) => Promise<void>;
private hadError: boolean = false;
/**
* @param targetDir The directory to put pre-compiled assets into.
* @param assetType This must be the assets sub-directory name of the asset type this pre-compiler will handle.
@ -71,6 +73,10 @@ export default abstract class AssetPreCompiler {
}
public async preCompileAll(watch: boolean): Promise<void> {
if (watch) {
await this.watch();
}
logger.info(`Pre-compiling ${this.extension} views...`);
// List all views
@ -84,16 +90,26 @@ export default abstract class AssetPreCompiler {
}
// Deduplicate and pre-compile
const hasInputChanged = this.hadError;
this.hadError = false;
for (const canonicalName of [...new Set<string>(views)]) {
await this.preCompile(canonicalName, false);
try {
await this.preCompile(canonicalName, false);
} catch (e) {
logger.error(e);
this.hadError = true;
}
}
// If previous preCompileAll had errors, not all output files were generated.
if (hasInputChanged) {
await this.inputChangeHandler?.(false);
}
await this.afterPreCompile(watch);
if (watch) {
await this.watch();
if (this.hadError && !watch) throw new Error('Errors while precompiling assets.');
}
}
public async watch(): Promise<void> {
const watchedPaths = this.assetPaths.map(p => `${p}/**/*.${this.getExtension()}`);