-
Notifications
You must be signed in to change notification settings - Fork 66
/
executeBuildCommand.js
107 lines (101 loc) · 3.06 KB
/
executeBuildCommand.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
const svgrPlugin = require('esbuild-plugin-svgr');
const esbuild = require('esbuild');
const glob = require('glob');
const { replace } = require('esbuild-plugin-replace');
const plugin = require('node-stdlib-browser/helpers/esbuild/plugin');
const stdLibBrowser = require('node-stdlib-browser');
const { nodeExternalsPlugin } = require('esbuild-node-externals');
const { sassPlugin, postcssModules } = require('esbuild-sass-plugin');
const basedir = 'src';
const buildTypes = {
cjs: {
splitting: false,
format: 'cjs',
tsconfig: './tsconfig.cjs.json',
destination: '/__commonjs',
replacements: {
__sdkWalletconnectProvider: '__mocks__/sdkWalletconnectProvider',
__sdkDappVersion: process.env.npm_package_version
}
},
esm: {
splitting: true,
format: 'esm',
tsconfig: './tsconfig.json',
destination: '',
replacements: {
__sdkDappVersion: process.env.npm_package_version
}
}
};
module.exports = function esbuildWrapper(
buildType = 'esm',
options = {
outDir: 'dist'
}
) {
const { format, splitting, tsconfig, destination, replacements } =
buildTypes[buildType];
return function executeBuildCommand(customOptions = {}) {
glob(
'{./src/**/*.tsx,./src/**/*.ts,./src/**/*.scss}',
function (err, allFiles) {
if (err) {
console.log('error reading files', err);
}
const files = allFiles.filter((file) => {
const hasTestFiles =
file.includes('/tests/') || file.includes('/stories/');
return !hasTestFiles;
});
esbuild
.build({
entryPoints: files,
splitting,
format,
outdir: `${options.outDir}${destination}`,
treeShaking: true,
minify: true,
bundle: true,
sourcemap: true,
chunkNames: '__chunks__/[name]-[hash]',
target: ['es2015'],
tsconfig,
platform: 'node',
inject: [
require.resolve('node-stdlib-browser/helpers/esbuild/shim')
],
define: {
global: 'global',
process: 'process',
Buffer: 'Buffer',
'process.env.NODE_ENV': `"production"`
},
plugins: [
svgrPlugin(),
plugin(stdLibBrowser),
nodeExternalsPlugin(),
sassPlugin({
loadPaths: [`./${basedir}`, 'node_modules'],
basedir,
transform: postcssModules({
basedir,
localsConvention: 'dashes',
generateScopedName: 'dapp-core-component__[name]__[local]'
})
}),
replace(replacements)
],
...customOptions
})
.then(() => {
console.log(
'\x1b[36m%s\x1b[0m',
`[${new Date().toLocaleTimeString()}] sdk-dapp build succeeded for ${format} types`
);
})
.catch(() => process.exit(1));
}
);
};
};