|
| 1 | +/* eslint-env node */ |
| 2 | +const path = require('path'); |
| 3 | +const {task, src, dest, series, parallel} = require('gulp'); |
| 4 | +const rimraf = require('rimraf'); |
| 5 | +const replace = require('gulp-replace'); |
| 6 | +const ts = require('gulp-typescript'); |
| 7 | +const babel = require('gulp-babel'); |
| 8 | +const sass = require('gulp-dart-sass'); |
| 9 | + |
| 10 | +const BUILD_DIR = path.resolve('build'); |
| 11 | + |
| 12 | +task('clean', (done) => { |
| 13 | + rimraf.sync(BUILD_DIR); |
| 14 | + rimraf.sync('styles/**/*.css'); |
| 15 | + done(); |
| 16 | +}); |
| 17 | + |
| 18 | +task('ts-compile', () => { |
| 19 | + return src(['src/**/*.{ts,tsx}', '!src/**/__stories__/**/*.{ts,tsx}']) |
| 20 | + .pipe(replace(/import '.+\.scss';/g, (match) => match.replace('.scss', '.css'))) |
| 21 | + .pipe( |
| 22 | + babel({ |
| 23 | + presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'], |
| 24 | + }), |
| 25 | + ) |
| 26 | + .pipe(dest(path.resolve(BUILD_DIR))); |
| 27 | +}); |
| 28 | + |
| 29 | +task('ts-declaration', () => { |
| 30 | + const tsProject = ts.createProject('tsconfig.json', { |
| 31 | + declaration: true, |
| 32 | + emitDeclarationOnly: true, |
| 33 | + isolatedModules: false, |
| 34 | + }); |
| 35 | + |
| 36 | + return src(['src/**/*.{ts,tsx}', '!src/**/__stories__/**/*.{ts,tsx}']) |
| 37 | + .pipe(tsProject()) |
| 38 | + .pipe(dest(path.resolve(BUILD_DIR))); |
| 39 | +}); |
| 40 | + |
| 41 | +task('styles', () => { |
| 42 | + return src(['src/**/*.scss', '!src/**/__stories__/**/*.scss']) |
| 43 | + .pipe(sass().on('error', sass.logError)) |
| 44 | + .pipe(dest(path.resolve(BUILD_DIR))); |
| 45 | +}); |
| 46 | + |
| 47 | +task('build', series(['clean', parallel(['ts-compile', 'ts-declaration']), 'styles'])); |
| 48 | + |
| 49 | +task('default', series(['build'])); |
0 commit comments