-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgulpfile.js
More file actions
108 lines (98 loc) · 3.65 KB
/
gulpfile.js
File metadata and controls
108 lines (98 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
var gulp = require('gulp')
// , autoprefixer = require('gulp-autoprefixer')
// , cleanCSS = require('gulp-clean-css')
//, gzip = require('gulp-gzip')
, through2 = require( "through2" )
, upath = require("upath")
, tsc = require('gulp-typescript')
, tslint = require("gulp-tslint")
, stylish = require('gulp-tslint-stylish')
, sourcemaps = require('gulp-sourcemaps')
;
var typescriptInputs= [ {config: "./tsconfig.json", dest: "./js"}
];
var filesToLint = [ "ts/**/*.ts"
];
var problemFiles = filesToLint.slice();
function appendProblemFiles(fName) {
console.log( "appendProblemFiles", fName );
if(problemFiles.indexOf(fName) === -1) {
problemFiles.push(fName);
}
}
function removeProblemFiles(fName) {
console.log("removeProblemFiles", fName);
var pos = problemFiles.indexOf(fName);
if(pos !== -1) {
problemFiles.splice(problemFiles.indexOf(fName), 1);
}
}
function listLinted() {
return through2.obj( function(file, encoding, callback) {// stream = through(function(file, encoding, callback) {
this.push(file);
var parsedFile = upath.parse( upath.normalizeSafe( file.path ) );
var fName = parsedFile.dir + "/" + parsedFile.name + parsedFile.ext;
if(file.tslint) {
if ( file.tslint.failureCount ) {
appendProblemFiles(fName);
} else {
removeProblemFiles(fName);
}
} else {
removeProblemFiles(fName);
}
callback();
}, function(callback) {callback();});
}
function linterPipeline() {
console.log( "linterPipeline", problemFiles );
var src = gulp.src ( problemFiles );
src .pipe(tslint( {formatter: "stylish", configuration: "./tslint.json"} ))
.pipe( listLinted() )
.pipe( tslint.report( {
emitError: false,
sort: true,
bell: true,
fullPath: true
}));
return src;
}
gulp.task('lint' , function () {return linterPipeline ();});
gulp.task('watch', ['lint'], function () {
// console.log("Task lint")
problemFiles.splice(0, filesToLint.length);
// console.log( "problemFiles:", problemFiles);
gulp.watch( filesToLint, ['tsc']);
gulp.watch( filesToLint, function(event) {
var fName = upath.normalizeSafe( event.path );
// console.log( event );
if (event.type !== 'deleted') {
appendProblemFiles(fName);
console.log( "__________________________________________________________________________" );
console.log( "------------------------------- CODE LINT --------------------------------" );
console.log( "--------------------------------------------------------------------------" );
return linterPipeline();
}
});
});
gulp.task( 'tsc', function() {
typescriptInputs.forEach( function(def) {
var tsProject = tsc.createProject( def.config, {typescript: require("typescript")} );
var tsresult = tsProject.src()
.pipe(sourcemaps.init( {sourceRoot: ""} ))
.pipe( tsProject() );// .;
tsresult.js.pipe(sourcemaps.write({
// Return relative source map root directories per file.
sourceRoot: ""
/*sourceRoot: function (file) {
var sourceFile = upath.join(file.cwd, file.sourceMap.file ),
relativeFile = upath.relative(upath.dirname(sourceFile), file.cwd);
console.log( "source map", "\n\t", sourceFile, "\n\t", relativeFile );
return relativeFile;
}*/
})).pipe( gulp.dest( def.dest ) );
});
});
gulp.task('default', ['watch', 'tsc'], function() {
console.log("Done ???");
});