optimizely-oui
Version:
Optimizely's Component Library.
78 lines (66 loc) • 2.27 kB
JavaScript
const _ = require("lodash");
const path = require("path");
const glob = require("glob");
const fse = require("fs-extra");
const formatToES = require("./formatters/javascript-es");
const formatToCJS = require("./formatters/javascript-cjs");
const formatToScss = require("./formatters/scss");
const clean = (outputDir = "./forimport") => {
// Clean `dist` directory before starting.
fse.removeSync(outputDir);
};
const processFiles = (globPath = path.resolve(__dirname, "./src/*.json")) => {
const files = glob.sync(globPath);
if (files.length === 0) {
throw new Error(`No files were found in ${globPath}…`);
} else {
// eslint-disable-next-line no-console
console.log(`Processing (${files.length}) files...`);
}
const contents = {
cjs: [],
es: [],
scss: [],
};
_.forEach(files, file => {
const fileText = fse.readFileSync(file).toString();
const fileJSON = JSON.parse(fileText);
const cjs = _.trim(_.reduce(fileJSON.tokens, formatToCJS, ""));
const es = _.trim(_.reduce(fileJSON.tokens, formatToES, ""));
const scss = _.trim(_.reduce(fileJSON.tokens, formatToScss, ""));
contents.cjs.push(cjs);
contents.es.push(es);
contents.scss.push(scss);
});
return {
cjs: contents.cjs.join("\n"),
es: contents.es.join("\n"),
scss: contents.scss.join("\n"),
};
};
const saveFiles = (contents, dist = path.resolve(__dirname, "./forimport")) => {
if (process.env.NODE_ENV !== "test") {
/* eslint-disable no-console */
let file = `${dist}/index.cjs.js`;
fse.outputFileSync(file, contents.cjs + "\n");
console.log(`Saved: ${file}.`);
file = `${dist}/index.es.js`;
fse.outputFileSync(file, contents.es + "\n");
console.log(`Saved: ${file}.`);
file = `${dist}/_index.scss`;
fse.outputFileSync(file, contents.scss);
console.log(`Saved: ${file}.`);
/* eslint-enable no-console */
}
};
// Execute the code here.
clean();
const contents = processFiles();
saveFiles(contents);
// Export functions for testing.
module.exports = {
clean,
processFiles,
saveFiles,
};