-
Notifications
You must be signed in to change notification settings - Fork 434
Expand file tree
/
Copy pathbuild-css.js
More file actions
91 lines (77 loc) · 2.33 KB
/
build-css.js
File metadata and controls
91 lines (77 loc) · 2.33 KB
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
/* eslint-disable @typescript-eslint/no-var-requires */
/* eslint-disable import/no-commonjs, import/no-extraneous-dependencies */
const { execSync } = require('child_process');
const fs = require('fs');
const util = require('util');
const cssnano = require('cssnano');
const postcss = require('postcss');
const pkg = require('./package.json');
const readFile = util.promisify(fs.readFile);
function getBundleBanner(_pkg) {
const lastCommitHash = execSync('git rev-parse --short HEAD')
.toString()
.trim();
const version = process.env.SHIPJS
? _pkg.version
: `${_pkg.version} (UNRELEASED ${lastCommitHash})`;
const authors = '© Algolia, Inc. and contributors';
return `/*! ${_pkg.name} ${version} | MIT License | ${authors} | ${_pkg.homepage} */`;
}
function build({ input, output, banner }) {
fs.readFile(input, (error, css) => {
if (error) {
throw error;
}
postcss([cssnano])
.process(css, { from: input, to: output })
.then((result) => {
fs.writeFile(output, [banner, result.css].join('\n'), () => true);
});
});
}
build({
input: 'src/_variables.css',
output: 'dist/_variables.css',
banner: getBundleBanner({ ...pkg, name: `${pkg.name} Variables` }),
});
build({
input: 'src/button.css',
output: 'dist/button.css',
banner: getBundleBanner({ ...pkg, name: `${pkg.name} Button` }),
});
build({
input: 'src/modal.css',
output: 'dist/modal.css',
banner: getBundleBanner({ ...pkg, name: `${pkg.name} Modal` }),
});
async function buildStyle() {
const variablesCss = await readFile('src/_variables.css');
const buttonCss = await readFile('src/button.css');
const modalCss = await readFile('src/modal.css');
const variablesOutput = await postcss([cssnano]).process(variablesCss, {
from: undefined,
});
const buttonOutput = await postcss([cssnano]).process(buttonCss, {
from: undefined,
});
const modalOutput = await postcss([cssnano]).process(modalCss, {
from: undefined,
});
fs.writeFile(
'dist/style.css',
[
getBundleBanner(pkg),
[variablesOutput.css, buttonOutput.css, modalOutput.css].join(''),
].join('\n'),
() => true
);
fs.writeFile(
'dist/style.scss',
[
getBundleBanner(pkg),
[variablesOutput.css, buttonOutput.css, modalOutput.css].join(''),
].join('\n'),
() => true
);
}
buildStyle();