forked from nolimits4web/swiper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-js-core.js
58 lines (51 loc) · 1.66 KB
/
build-js-core.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
/* eslint import/no-extraneous-dependencies: ["error", {"devDependencies": true}] */
/* eslint no-console: "off" */
const exec = require('exec-sh').promise;
const fs = require('fs-extra');
const chalk = require('chalk');
const elapsed = require('elapsed-time-logger');
const config = require('./build-config');
const { outputDir } = require('./utils/output-dir');
const { banner } = require('./utils/banner');
async function buildCore(modules) {
const filename = `swiper.esm`;
const coreContent = [
banner(),
`export { default as Swiper, default } from './core/core.js';`,
...modules.map(
({ name, capitalized }) =>
`export { default as ${capitalized} } from './modules/${name}/${name}.js';`,
),
].join('\n');
await Promise.all([
fs.writeFile(`./${outputDir}/${filename}.js`, coreContent),
exec(`npx babel src --out-dir ${outputDir} --config-file ./scripts/babel/babel.config.core.js`),
]);
await fs.unlink(`./${outputDir}/swiper.js`);
}
async function build() {
elapsed.start('core');
const modules = [];
config.modules.forEach((name) => {
// eslint-disable-next-line
const capitalized = name
.split('-')
.map((word) => {
return word
.split('')
.map((char, index) => {
if (index === 0) return char.toUpperCase();
return char;
})
.join('');
})
.join('');
const jsFilePath = `./src/modules/${name}/${name}.js`;
if (fs.existsSync(jsFilePath)) {
modules.push({ name, capitalized });
}
});
await buildCore(modules, 'esm');
elapsed.end('core', chalk.green('Core build completed!'));
}
module.exports = build;