diff --git a/src/app/compiler.js b/src/app/compiler.js index 338f0ce324..5ad6c71fc8 100644 --- a/src/app/compiler.js +++ b/src/app/compiler.js @@ -30,7 +30,8 @@ function Compiler (editor, queryParams, handleGithubCall, updateFiles) { files[utils.fileNameFromKey(editor.getCacheFile())] = input; gatherImports(files, missingInputs, function (input, error) { if (input === null) { - self.event.trigger('compilationFinished', [false, [error], files]); + self.lastCompilationResult = null; + self.event.trigger('compilationFinished', [false, { 'error': error }, files]); } else { var optimize = queryParams.get().optimize; compileJSON(input, optimize ? 1 : 0); @@ -82,20 +83,34 @@ function Compiler (editor, queryParams, handleGithubCall, updateFiles) { function compilationFinished (data, missingInputs, source) { var noFatalErrors = true; // ie warnings are ok + function isValidError (error) { + // The deferred import is not a real error + // FIXME: maybe have a better check? + if (/Deferred import/.exec(error)) { + return false; + } + + return utils.errortype(error) !== 'warning'; + } + if (data['error'] !== undefined) { - if (utils.errortype(data['error']) !== 'warning') { + // Ignore warnings (and the 'Deferred import' error as those are generated by us as a workaround + if (isValidError(data['error'])) { noFatalErrors = false; } } if (data['errors'] !== undefined) { data['errors'].forEach(function (err) { - if (utils.errortype(err) !== 'warning') { + // Ignore warnings and the 'Deferred import' error as those are generated by us as a workaround + if (isValidError(err)) { noFatalErrors = false; } }); } if (!noFatalErrors) { + // There are fatal errors - abort here + self.lastCompilationResult = null; self.event.trigger('compilationFinished', [false, data, source]); } else if (missingInputs !== undefined && missingInputs.length > 0) { compile(missingInputs);