Skip to content

Commit

Permalink
feat: cli progress
Browse files Browse the repository at this point in the history
  • Loading branch information
medikoo committed Nov 9, 2018
1 parent 0eca533 commit 559719a
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 6 deletions.
43 changes: 41 additions & 2 deletions bin/dev-package.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Error.stackTraceLimit = Infinity;

process.on("unhandledRejection", reason => { throw reason; });

require("log4-nodejs")();
require("log4-nodejs")({ defaultNamespace: "dev-package" });

const meta = require("../package")
, argv = require("minimist")(process.argv.slice(2));
Expand Down Expand Up @@ -52,13 +52,52 @@ if (!packageName) {
process.exit(1);
}

const clc = require("cli-color")
const log = require("log4").get("dev-package")
, clc = require("cli-color")
, format = require("cli-sprintf-format")
, cliFooter = require("cli-progress-footer")()
, DevPackageError = require("../lib/dev-package-error")
, installPackage = require("../lib/install-package")
, resolveUserConfiguration = require("../lib/resolve-user-configuration");

const installsInProgress = new Set();

let progressLines = ["resolving user configuration"];
const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
let frameIndex = 0;
let frame = frames[frameIndex++ % frames.length];

const updateProgress = () => {
cliFooter.updateProgress(
progressLines.map(progressLine => `${ frame } ${ progressLine }`).join("\n")
);
};
const interval = setInterval(() => {
frame = frames[frameIndex++ % frames.length];
updateProgress();
}, 80);
const updateInstallProgressLines = () => {
progressLines = Array.from(installsInProgress, inProgressPackageName =>
format("installing %s", inProgressPackageName)
);
updateProgress();
};

installPackage.on("start", startedPackageName => {
installsInProgress.add(startedPackageName);
updateInstallProgressLines();
});
installPackage.on("end", endedPackageName => {
installsInProgress.delete(endedPackageName);
log.notice("installed %s", endedPackageName);
updateInstallProgressLines();
});
resolveUserConfiguration()
.then(configuration => installPackage(packageName, configuration))
.finally(() => {
clearInterval(interval);
updateProgress();
})
.catch(error => {
if (error instanceof DevPackageError) {
process.stdout.write(`\n${ clc.red(error.message) }\n`);
Expand Down
10 changes: 6 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,20 @@
"child-process-es6-promise": "^1.2",
"cjs-module": "^1.4",
"cli-color": "^1.3",
"cli-progress-footer": "1",
"cli-sprintf-format": "^1.1",
"es5-ext": "^0.10.46",
"event-emitter": "^0.3.5",
"fs2": "^0.2.10",
"log4": "^3.0.1",
"log4-nodejs": "^2.3.1",
"log4": "^3.1",
"log4-nodejs": "^3.1.1",
"memoizee": "^0.4.14",
"minimist": "^1.2",
"split": "^1.0.1"
},
"devDependencies": {
"eslint": "^5.5",
"eslint-config-medikoo": "^1.41"
"eslint": "^5.6.1",
"eslint-config-medikoo": "^1.43"
},
"eslintConfig": {
"extends": "medikoo",
Expand Down

0 comments on commit 559719a

Please sign in to comment.