-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathGulpFile.js
115 lines (108 loc) · 3.37 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
const { src, dest, task, series } = require('gulp')
const filter = require('gulp-filter')
const babel = require('gulp-babel')
const jeditor = require('gulp-json-editor')
const rimraf = require('gulp-rimraf')
const shell = require('gulp-shell')
const tsc = require('gulp-typescript')
const transform = require('gulp-transform')
const env = require('gulp-env')
const tsconfig = require('./tsconfig.json')
const babelConfig = require('./babel.config')
const path = require('path')
const envs = env.set({
NODE_ENV: 'production'
})
task('release', shell.task(`standard-version --no-verify && gulp build`))
task('clean', () =>
src([tsconfig.compilerOptions.outDir], {
read: false,
allowEmpty: true
}).pipe(rimraf())
)
task('copy:package', () => {
const deps = [
'@material-ui',
'@lingui',
'lodash',
'formik',
'@loadable',
'clsx',
'yup',
'material-ui',
'multimatch',
'react-color',
'use-debounce',
'sortablejs'
]
const exactDeps = ['react', 'react-dom']
return src('./package.json')
.pipe(
jeditor((json) => {
const packages = Object.keys(json.dependencies || {}).filter(
(k) => deps.some((d) => k.startsWith(d)) || exactDeps.some((d) => d === k)
)
if (packages.length) {
json.peerDependencies = json.peerDependencies || {}
packages.forEach((p) => {
delete json.dependencies[p]
json.peerDependencies[p] = '*'
})
}
delete json.private
delete json.devDependencies
delete json.scripts
delete json.husky
return json
})
)
.pipe(dest(tsconfig.compilerOptions.outDir))
})
task('dts', () => {
return src(['./src/lib/**/*'])
.pipe(envs)
.pipe(
filter([
'**/*.ts',
'**/*.tsx',
'**/*.js',
'**/*.jsx',
'!**/stories/**',
'!**/stories',
'!**/setupTests.*',
'!**/react-app-env.*'
])
)
.pipe(tsc({ ...tsconfig.compilerOptions, noEmit: false, isolatedModules: false }))
.dts.pipe(dest(tsconfig.compilerOptions.outDir))
})
task(
'build',
series('clean', 'copy:package', 'dts', () =>
src(['./src/lib/**/*'])
.pipe(
filter([
'**',
'!**/stories/**',
'!**/stories',
'!**/setupTests.*',
'!**/react-app-env.*'
])
)
.pipe(babel(babelConfig))
.pipe(
transform('utf8', (content, file) => {
switch (path.extname(file.path)) {
case '.js':
const find = 'Trans, {'
const re = new RegExp(find, 'g')
content = content.replace(re, 'Trans, /*i18n*/ {')
return content
default:
return content
}
})
)
.pipe(dest(tsconfig.compilerOptions.outDir))
)
)