diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..c58969d --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "semi": false +} \ No newline at end of file diff --git a/index.js b/index.js index 64c6ca4..2228e70 100644 --- a/index.js +++ b/index.js @@ -207,6 +207,16 @@ module.exports.transform = function(src, filename, options) { } if (filename.endsWith('.ts') || filename.endsWith('.tsx')) { + if (compilerOptions.noEmitOnError) { + const program = ts.createProgram([filename], compilerOptions) + + const preErrors = ts + .getPreEmitDiagnostics(program) + .filter(({ category }) => category === ts.DiagnosticCategory.Error) + + reportErrors(preErrors, filename, options) + } + const tsCompileResult = ts.transpileModule(src, { compilerOptions, fileName: filename, @@ -217,28 +227,7 @@ module.exports.transform = function(src, filename, options) { ({ category }) => category === ts.DiagnosticCategory.Error ) - if (errors.length) { - // report first error - const error = errors[0] - const message = ts.flattenDiagnosticMessageText(error.messageText, '\n') - if (error.file) { - let { line, character } = error.file.getLineAndCharacterOfPosition( - error.start - ) - if (error.file.fileName === 'module.ts') { - console.error({ - error, - filename, - options, - }) - } - throw new Error( - `${error.file.fileName} (${line + 1},${character + 1}): ${message}` - ) - } else { - throw new Error(message) - } - } + reportErrors(errors, filename, options) const babelCompileResult = upstreamTransformer.transform({ src: tsCompileResult.outputText, @@ -275,3 +264,28 @@ module.exports.transform = function(src, filename, options) { }) } } + +function reportErrors(errors, filename, options) { + if (errors.length) { + // report first error + const error = errors[0] + const message = ts.flattenDiagnosticMessageText(error.messageText, '\n') + if (error.file) { + let { line, character } = error.file.getLineAndCharacterOfPosition( + error.start + ) + if (error.file.fileName === 'module.ts') { + console.error({ + error, + filename, + options, + }) + } + throw new Error( + `${error.file.fileName} (${line + 1},${character + 1}): ${message}` + ) + } else { + throw new Error(message) + } + } +}