1
0
Fork 0
docsearch/packages/docsearch-css/build-css.js
renovate[bot] 10c5b2ea14
chore(deps): update lint dependency (#1120)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Samuel Bodin <1637651+bodinsamuel@users.noreply.github.com>
Co-authored-by: Clément Vannicatte <vannicattec@gmail.com>
2021-11-02 12:06:22 +01:00

82 lines
2.2 KiB
JavaScript

/* 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
);
}
buildStyle();