-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathgulpfile.base.js
58 lines (53 loc) · 1.53 KB
/
gulpfile.base.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
const gulp = require('gulp');
const ts = require('gulp-typescript');
const babel = require('gulp-babel');
const merge = require('merge2');
const path = require('path');
const sourceFiles = {
ts: ['src/**/*.ts'],
};
const tsconfigPath = path.resolve(__dirname, '../tsconfig.json');
const defaultTSConfig = require(tsconfigPath);
function compileTsStream(files, imports, tsconfig) {
const babelOptions = {
presets: [
[
'@babel/preset-env',
{
targets: {
browsers: ['last 2 versions', 'safari >= 7'],
},
modules: false,
},
],
'@babel/preset-react',
],
plugins: [
'@babel/plugin-proposal-class-properties',
[
'@babel/plugin-transform-runtime',
{
corejs: false,
helpers: true,
regenerator: true,
useESModules: false,
},
],
...imports,
],
};
const stream = gulp.src(files, { base: 'src' }).pipe(ts.createProject(tsconfigPath)());
const outDir = path.resolve(process.cwd(), tsconfig.compilerOptions.outDir);
const declarationDir = tsconfig.compilerOptions.declarationDir
? path.resolve(path.dirname(tsconfigPath), tsconfig.compilerOptions.declarationDir)
: outDir;
return merge([
stream.dts.pipe(gulp.dest(declarationDir)),
stream.js.pipe(babel(babelOptions)).pipe(gulp.dest(outDir)),
]);
}
module.exports = (imports = [], tsconfig = defaultTSConfig) => {
gulp.task('ts', () => {
return compileTsStream(sourceFiles.ts, imports, tsconfig);
});
};