-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgulpfile.js
155 lines (130 loc) · 3.99 KB
/
gulpfile.js
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/// <binding AfterBuild='build:dev' ProjectOpened='tsd, watch:dev' />
/*
This file in the main entry point for defining Gulp tasks and using Gulp plugins.
Click here to learn more. http://go.microsoft.com/fwlink/?LinkId=518007
*/
var gulp = require('gulp');
var del = require('del');
var rename = require('gulp-rename');
var gutil = require('gulp-util');
var assign = require('object-assign');
var uglify = require('gulp-uglify');
var ts = require('gulp-typescript');
var tsd = require('gulp-tsd');
var sourcemaps = require('gulp-sourcemaps');
// Helpers
var ObjToArray = function (obj) {
return Object.keys(obj).map(function (key) {
return obj[key]
})
};
/*
* p = path
*/
var p = function () {
return arguments != null ? ObjToArray(arguments).join('/') : undefined;
};
var deleteFileOnDeletedEvent = function (watcher) {
watcher.on('change', function (event) {
// added, deleted or changed
if (event.type === 'deleted') {
console.log('Deleted file ' + event.path);
var pathToDelete = p(paths.wwwroot, paths.content.base);
var indexOfContentPath = event.path.indexOf(paths.content.base);
var lengthOfContentPath = paths.content.base.length;
pathToDelete += event.path.substr(indexOfContentPath + lengthOfContentPath, event.path.length);
del(pathToDelete);
} else if (event.type === 'added') {
console.log('Added file ' + event.path);
} else {
console.log('Changed file ' + event.path);
}
});
}
var paths = {
base: "./src",
dest: "./dist",
sample: "./samples"
};
var config = {
ts: {
src: p(paths.base, '**/*.ts'),
dest: paths.dest,
sample: {
src: p(paths.sample, '**/*.ts'),
dest: paths.sample
},
base: {
module: 'system',
target: "es5",
noImplicitAny: true,
typescript: require('typescript')
},
dev: {},
prod: {
removeComments: true
}
}
};
gulp.task('default', function () {
// place code for your default task here
});
// Main tasks
gulp.task('default', ['watch:dev']);
gulp.task('build', ['scripts']);
gulp.task('build:dev', ['scripts:dev']);
gulp.task('clean', function () {
del([
'!' + paths.dest,
p(paths.dest, '**')
]);
});
gulp.task('watch:sample', function () {
var tsSampleWatcher = gulp.watch(config.ts.sample.src, ['build:sample']);
deleteFileOnDeletedEvent(tsSampleWatcher);
});
gulp.task('build:sample', function () {
var tsConfig = assign(config.ts.base, config.ts.dev);
gulp.src(config.ts.sample.src)
.pipe(sourcemaps.init())
.pipe(ts(tsConfig))
.pipe(rename({ext: 'js'}))
.pipe(sourcemaps.write())
.pipe(gulp.dest(config.ts.sample.dest));
});
// Scripts
gulp.task('scripts', ['ts']);
gulp.task('scripts:dev', ['ts:dev']);
// TypeScript
gulp.task('ts', function () {
var tsConfig = assign(config.ts.base, config.ts.prod);
gulp.src(config.ts.src)
.pipe(ts(tsConfig))
.pipe(rename({ext: 'js'}))
.pipe(uglify({
mangle: false
}))
.pipe(gulp.dest(config.ts.dest));
});
gulp.task('ts:dev', function () {
var tsConfig = assign(config.ts.base, config.ts.dev);
gulp.src(config.ts.src)
.pipe(sourcemaps.init())
.pipe(ts(tsConfig))
.pipe(rename({ext: 'js'}))
.pipe(sourcemaps.write())
.pipe(gulp.dest(config.ts.dest));
});
gulp.task('tsd', function (callback) {
tsd({
command: 'reinstall',
config: './tsd.json'
}, callback);
});
gulp.task('watch', function () {
gulp.watch(config.ts.src, ['ts']);
});
gulp.task('watch:dev', function () {
var tsWatcher = gulp.watch(config.ts.src, ['ts:dev']);
deleteFileOnDeletedEvent(tsWatcher);
});