Skip to content
This repository was archived by the owner on Aug 4, 2021. It is now read-only.

Commit ace202a

Browse files
committed
Merge pull request #16 from rollup/report-diagnostics
Report diagnostics
2 parents eef0991 + 15d4961 commit ace202a

File tree

5 files changed

+58
-25
lines changed

5 files changed

+58
-25
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# rollup-plugin-typescript changelog
22

3+
## 0.2.1
4+
* Enable source maps per default
5+
36
## 0.2.0
47
* Use (_prerelease version of_) TypeScript 1.7.0 to generate ES5 while preserving ES2015 imports for efficient bundling.
58

index.js

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var typescript = require( 'typescript' );
1+
var ts = require( 'typescript' );
22
var createFilter = require( 'rollup-pluginutils' ).createFilter;
33

44
var assign = Object.assign || function ( target, source ) {
@@ -9,25 +9,57 @@ var assign = Object.assign || function ( target, source ) {
99
return target;
1010
};
1111

12-
module.exports = function ( options ) {
12+
function goodErrors ( diagnostic ) {
13+
// All errors except `Cannot compile modules into 'es6' when targeting 'ES5' or lower.`
14+
return diagnostic.code !== 1204;
15+
}
16+
17+
module.exports = function typescript ( options ) {
1318
options = assign( {}, options || {} );
1419

15-
var filter = createFilter( options.include, options.exclude );
20+
var filter = createFilter( options.include || [ '*.ts+(|x)', '**/*.ts+(|x)' ], options.exclude );
1621
delete options.include;
1722
delete options.exclude;
1823

24+
options = assign( {
25+
target: ts.ScriptTarget.ES5,
26+
module: ts.ModuleKind.ES6,
27+
sourceMap: true
28+
}, options );
29+
1930
return {
2031
transform: function ( code, id ) {
2132
if ( !filter( id ) ) return null;
2233

23-
var transformed = typescript.transpileModule( code, {
24-
compilerOptions: assign( {
25-
target: typescript.ScriptTarget.ES5,
26-
module: typescript.ModuleKind.ES6,
27-
sourceMap: true
28-
}, options )
34+
var transformed = ts.transpileModule( code, {
35+
reportDiagnostics: true,
36+
compilerOptions: options
37+
});
38+
39+
var diagnostics = transformed.diagnostics.filter( goodErrors );
40+
var fatalError = false;
41+
42+
diagnostics.forEach(function ( diagnostic ) {
43+
var message = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
44+
45+
if ( diagnostic.file ) {
46+
var pos = diagnostic.file.getLineAndCharacterOfPosition( diagnostic.start );
47+
48+
console.error( diagnostic.file.fileName +
49+
'(' + (pos.line + 1) + ',' + (pos.character + 1) + '): error ES' +
50+
diagnostic.code + ': ' + message );
51+
} else {
52+
console.error( 'Error: ' + message );
53+
}
54+
55+
if ( diagnostic.category === ts.DiagnosticCategory.Error ) {
56+
fatalError = true;
57+
}
2958
});
3059

60+
if ( fatalError ) {
61+
throw new Error( 'There were TypeScript errors transpiling "' + id + '"' );
62+
}
3163

3264
return {
3365
code: transformed.outputText,

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rollup-plugin-typescript",
3-
"version": "0.2.0",
3+
"version": "0.2.1",
44
"description": "Seamless integration between Rollup and TypeScript.",
55
"keywords": [
66
"rollup-plugin",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
var a: ;

test/test.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,44 @@ describe( 'rollup-plugin-typescript', function () {
88
this.timeout( 5000 );
99

1010
it( 'runs code through typescript', function () {
11-
var start = Date.now();
12-
1311
return rollup.rollup({
1412
entry: 'sample/basic/main.ts',
1513
plugins: [
1614
typescript()
1715
]
1816
}).then( function ( bundle ) {
19-
console.log( 'bundled in %s ms', Date.now() - start );
20-
21-
start = Date.now();
2217
const generated = bundle.generate();
23-
console.log( 'generated in %s ms', Date.now() - start );
24-
2518
const code = generated.code;
2619

2720
assert.ok( code.indexOf( 'number' ) === -1, code );
2821
assert.ok( code.indexOf( 'const' ) === -1, code );
2922
});
3023
});
3124

32-
it( 'transpiles ES6 features to ES5', function () {
33-
var start = Date.now();
34-
25+
it( 'transpiles ES6 features to ES5 with source maps', function () {
3526
return rollup.rollup({
3627
entry: 'sample/import-class/main.ts',
3728
plugins: [
3829
typescript()
3930
]
4031
}).then( function ( bundle ) {
41-
console.log( 'bundled in %s ms', Date.now() - start );
42-
43-
start = Date.now();
4432
const generated = bundle.generate();
45-
console.log( 'generated in %s ms', Date.now() - start );
46-
4733
const code = generated.code;
4834

4935
assert.ok( code.indexOf( 'class' ) === -1, code );
5036
assert.ok( code.indexOf( '...' ) === -1, code );
5137
assert.ok( code.indexOf( '=>' ) === -1, code );
5238
});
5339
});
40+
41+
it( 'reports diagnostics and throws if errors occur during transpilation', function () {
42+
return rollup.rollup({
43+
entry: 'sample/syntax-error/missing-type.ts',
44+
plugins: [
45+
typescript()
46+
]
47+
}).catch( function ( error ) {
48+
assert.ok( error.message.indexOf( 'There were TypeScript errors' ) === 0, 'Should reject erroneous code.' );
49+
});
50+
});
5451
});

0 commit comments

Comments
 (0)