121 lines
2.9 KiB
JavaScript
121 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
const chalk = require("chalk");
|
|
const execa = require("execa");
|
|
const minimist = require("minimist");
|
|
const path = require("path");
|
|
const stringWidth = require("string-width");
|
|
|
|
const bundler = require("./bundler");
|
|
const bundleConfigs = require("./config");
|
|
const util = require("./util");
|
|
const Cache = require("./cache");
|
|
|
|
// Errors in promises should be fatal.
|
|
const loggedErrors = new Set();
|
|
process.on("unhandledRejection", err => {
|
|
// No need to print it twice.
|
|
if (!loggedErrors.has(err)) {
|
|
console.error(err);
|
|
}
|
|
process.exit(1);
|
|
});
|
|
|
|
const CACHED = chalk.bgYellow.black(" CACHED ");
|
|
const OK = chalk.bgGreen.black(" DONE ");
|
|
const FAIL = chalk.bgRed.black(" FAIL ");
|
|
|
|
function fitTerminal(input) {
|
|
const columns = Math.min(process.stdout.columns || 40, 80);
|
|
const WIDTH = columns - stringWidth(OK) + 1;
|
|
if (input.length < WIDTH) {
|
|
input += Array(WIDTH - input.length).join(chalk.dim("."));
|
|
}
|
|
return input;
|
|
}
|
|
|
|
async function createBundle(bundleConfig, cache) {
|
|
const { output } = bundleConfig;
|
|
process.stdout.write(fitTerminal(output));
|
|
|
|
return bundler(bundleConfig, cache)
|
|
.catch(error => {
|
|
console.log(FAIL + "\n");
|
|
handleError(error);
|
|
})
|
|
.then(result => {
|
|
if (result.cached) {
|
|
console.log(CACHED);
|
|
} else {
|
|
console.log(OK);
|
|
}
|
|
});
|
|
}
|
|
|
|
function handleError(error) {
|
|
loggedErrors.add(error);
|
|
console.error(error);
|
|
throw error;
|
|
}
|
|
|
|
async function cacheFiles() {
|
|
// Copy built files to .cache
|
|
try {
|
|
await execa("rm", ["-rf", path.join(".cache", "files")]);
|
|
await execa("mkdir", ["-p", path.join(".cache", "files")]);
|
|
for (const bundleConfig of bundleConfigs) {
|
|
await execa("cp", [
|
|
path.join("dist", bundleConfig.output),
|
|
path.join(".cache", "files")
|
|
]);
|
|
}
|
|
} catch (err) {
|
|
// Don't fail the build
|
|
}
|
|
}
|
|
|
|
async function preparePackage() {
|
|
const pkg = await util.readJson("package.json");
|
|
pkg.bin = "./bin-prettier.js";
|
|
pkg.engines.node = ">=4";
|
|
delete pkg.dependencies;
|
|
delete pkg.devDependencies;
|
|
pkg.scripts = {
|
|
prepublishOnly:
|
|
"node -e \"assert.equal(require('.').version, require('..').version)\""
|
|
};
|
|
pkg.files = ["*.js"];
|
|
await util.writeJson("dist/package.json", pkg);
|
|
|
|
await util.copyFile("./README.md", "./dist/README.md");
|
|
await util.copyFile("./LICENSE", "./dist/LICENSE");
|
|
}
|
|
|
|
async function run(params) {
|
|
await execa("rm", ["-rf", "dist"]);
|
|
await execa("mkdir", ["-p", "dist"]);
|
|
|
|
if (params["purge-cache"]) {
|
|
await execa("rm", ["-rf", ".cache"]);
|
|
}
|
|
|
|
const bundleCache = new Cache(".cache/", "v16");
|
|
await bundleCache.load();
|
|
|
|
console.log(chalk.inverse(" Building packages "));
|
|
for (const bundleConfig of bundleConfigs) {
|
|
await createBundle(bundleConfig, bundleCache);
|
|
}
|
|
|
|
await bundleCache.save();
|
|
await cacheFiles();
|
|
|
|
await preparePackage();
|
|
}
|
|
|
|
run(
|
|
minimist(process.argv.slice(2), {
|
|
boolean: ["purge-cache"]
|
|
})
|
|
);
|