Skip to content

Commit fd37bca

Browse files
committed
Use new ConsoleLogger and EleventyErrorHandler classes (not gross static things) to handle output.
1 parent cf4342a commit fd37bca

14 files changed

+263
-114
lines changed

cmd.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ try {
7171
quietMode: argv.quiet,
7272
});
7373

74+
if (argv.to === "json" || argv.to === "ndjson") {
75+
// override logging output
76+
elev.setIsVerbose(false);
77+
}
78+
7479
elev.setConfigPathOverride(argv.config);
7580
elev.setPathPrefix(argv.pathprefix);
7681
elev.setDryRun(argv.dryrun);

src/BenchmarkGroup.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
const chalk = require("chalk");
2-
1+
const ConsoleLogger = require("./Util/ConsoleLogger");
32
const Benchmark = require("./Benchmark");
43
const debugBenchmark = require("debug")("Eleventy:Benchmark");
54

@@ -8,12 +7,14 @@ class BenchmarkGroup {
87
this.benchmarks = {};
98
// Warning: aggregate benchmarks automatically default to false via BenchmarkManager->getBenchmarkGroup
109
this.isVerbose = true;
10+
this.logger = new ConsoleLogger(this.isVerbose);
1111
this.minimumThresholdMs = 0;
1212
this.minimumThresholdPercent = 8;
1313
}
1414

1515
setIsVerbose(isVerbose) {
1616
this.isVerbose = isVerbose;
17+
this.logger.isVerbose = isVerbose;
1718
}
1819

1920
reset() {
@@ -91,20 +92,16 @@ class BenchmarkGroup {
9192
);
9293
}
9394

94-
let str = chalk.yellow(
95-
`Benchmark (${label}): ${type} took ${totalForBenchmark.toFixed(0)}ms ${
96-
extraOutput.length ? `(${extraOutput.join(", ")})` : ""
97-
}`
98-
);
95+
let str = `Benchmark (${label}): ${type} took ${totalForBenchmark.toFixed(
96+
0
97+
)}ms ${extraOutput.length ? `(${extraOutput.join(", ")})` : ""}`;
9998

10099
if (
101100
(isAbsoluteMinimumComparison &&
102101
totalForBenchmark >= this.minimumThresholdMs) ||
103102
percent > this.minimumThresholdPercent
104103
) {
105-
if (this.isVerbose) {
106-
console.log(str);
107-
}
104+
this.logger.warn(str);
108105
}
109106

110107
if (totalForBenchmark.toFixed(0) > 0) {

src/Eleventy.js

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const EleventyServe = require("./EleventyServe");
1010
const EleventyWatch = require("./EleventyWatch");
1111
const EleventyWatchTargets = require("./EleventyWatchTargets");
1212
const EleventyFiles = require("./EleventyFiles");
13+
const ConsoleLogger = require("./Util/ConsoleLogger");
1314
const { performance } = require("perf_hooks");
1415

1516
const templateCache = require("./TemplateCache");
@@ -334,13 +335,41 @@ Verbose Output: ${this.verboseMode}`);
334335
if (bench) {
335336
bench.setVerboseOutput(this._isVerboseMode);
336337
}
338+
339+
if (this.logger) {
340+
this.logger.isVerbose = this._isVerboseMode;
341+
}
342+
343+
if (this.errorHandler) {
344+
this.errorHandler.isVerbose = this._isVerboseMode;
345+
}
337346
}
338347

339348
/* Getter for verbose mode */
340349
get verboseMode() {
341350
return this._isVerboseMode;
342351
}
343352

353+
/* Getter for logger */
354+
get logger() {
355+
if (!this._logger) {
356+
this._logger = new ConsoleLogger();
357+
this._logger.isVerbose = this.verboseMode;
358+
}
359+
360+
return this._logger;
361+
}
362+
363+
/* Getter for error handler */
364+
get errorHandler() {
365+
if (!this._errorHandler) {
366+
this._errorHandler = new EleventyErrorHandler();
367+
this._errorHandler.isVerbose = this.verboseMode;
368+
}
369+
370+
return this._errorHandler;
371+
}
372+
344373
/**
345374
* Updates the verbose mode of Eleventy.
346375
*
@@ -521,12 +550,12 @@ Arguments:
521550
this.watchManager.setBuildFinished();
522551

523552
if (this.watchManager.getPendingQueueSize() > 0) {
524-
console.log(
553+
this.logger.log(
525554
`You saved while Eleventy was running, let’s run again. (${this.watchManager.getPendingQueueSize()} remain)`
526555
);
527556
await this._watch();
528557
} else {
529-
console.log("Watching…");
558+
this.logger.log("Watching…");
530559
}
531560
}
532561

@@ -666,7 +695,7 @@ Arguments:
666695

667696
this.watcherBench.finish("Watch");
668697

669-
console.log("Watching…");
698+
this.logger.log("Watching…");
670699

671700
this.watcher = watcher;
672701

@@ -683,22 +712,22 @@ Arguments:
683712
});
684713
} catch (e) {
685714
if (e instanceof EleventyBaseError) {
686-
EleventyErrorHandler.error(e, "Eleventy watch error");
715+
this.errorHandler.error(e, "Eleventy watch error");
687716
this.watchManager.setBuildFinished();
688717
} else {
689-
EleventyErrorHandler.fatal(e, "Eleventy fatal watch error");
718+
this.errorHandler.fatal(e, "Eleventy fatal watch error");
690719
this.stopWatch();
691720
}
692721
}
693722
};
694723

695724
watcher.on("change", async (path) => {
696-
console.log("File changed:", path);
725+
this.logger.log(`File changed: ${path}`);
697726
await watchRun(path);
698727
});
699728

700729
watcher.on("add", async (path) => {
701-
console.log("File added:", path);
730+
this.logger.log(`File added: ${path}`);
702731
await watchRun(path);
703732
});
704733

@@ -773,9 +802,6 @@ Arguments:
773802
*/
774803
async executeBuild(to = "fs") {
775804
let ret;
776-
if (this.logger) {
777-
EleventyErrorHandler.logger = this.logger;
778-
}
779805

780806
await this.config.events.emit("beforeBuild");
781807

@@ -794,30 +820,30 @@ Arguments:
794820
}
795821

796822
ret = await promise;
823+
if (to === "ndjson") {
824+
ret = ret.join("\n");
825+
}
797826
await this.config.events.emit("afterBuild");
798827
} catch (e) {
799-
EleventyErrorHandler.initialMessage(
828+
this.errorHandler.initialMessage(
800829
"Problem writing Eleventy templates",
801830
"error",
802831
"red"
803832
);
804-
EleventyErrorHandler.fatal(e);
833+
this.errorHandler.fatal(e);
805834
}
806835

807836
bench.finish();
808837

809838
if (to === "fs") {
810-
(this.logger || console).log(this.logFinished());
839+
this.logger.log(this.logFinished());
811840
}
812841
debug("Finished writing templates.");
813842

814843
debug(`
815844
Getting frustrated? Have a suggestion/feature request/feedback?
816845
I want to hear it! Open an issue: https://github.com/11ty/eleventy/issues/new`);
817846

818-
// unset the logger
819-
EleventyErrorHandler.logger = undefined;
820-
821847
return ret;
822848
}
823849
}

src/EleventyErrorHandler.js

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,64 @@
11
const chalk = require("chalk");
2+
const ConsoleLogger = require("./Util/ConsoleLogger");
23
const EleventyErrorUtil = require("./EleventyErrorUtil");
34
const debug = require("debug")("Eleventy:EleventyErrorHandler");
45

56
class EleventyErrorHandler {
6-
static get isChalkEnabled() {
7-
if (this._isChalkEnabled !== undefined) {
8-
return this._isChalkEnabled;
7+
constructor() {
8+
this._isVerbose = true;
9+
}
10+
11+
get isVerbose() {
12+
return this._isVerbose;
13+
}
14+
15+
set isVerbose(verbose) {
16+
this._isVerbose = !!verbose;
17+
this.logger = !!verbose;
18+
}
19+
20+
get logger() {
21+
if (!this._logger) {
22+
this._logger = new ConsoleLogger();
23+
this._logger.isVerbose = this.isVerbose;
924
}
10-
return true;
25+
26+
return this._logger;
1127
}
1228

13-
static set isChalkEnabled(enabled) {
14-
this._isChalkEnabled = !!enabled;
29+
set logger(logger) {
30+
this._logger = logger;
1531
}
1632

17-
static warn(e, msg) {
33+
warn(e, msg) {
1834
if (msg) {
19-
EleventyErrorHandler.initialMessage(msg, "warn", "yellow");
35+
this.initialMessage(msg, "warn", "yellow");
2036
}
21-
EleventyErrorHandler.log(e, "warn");
37+
this.log(e, "warn");
2238
}
2339

24-
static fatal(e, msg) {
25-
EleventyErrorHandler.error(e, msg);
40+
fatal(e, msg) {
41+
this.error(e, msg);
2642
process.exitCode = 1;
2743
}
2844

29-
static error(e, msg) {
45+
error(e, msg) {
3046
if (msg) {
31-
EleventyErrorHandler.initialMessage(msg, "error", "red");
47+
this.initialMessage(msg, "error", "red");
3248
}
33-
EleventyErrorHandler.log(e, "error");
49+
this.log(e, "error");
3450
}
3551

3652
//https://nodejs.org/api/process.html
37-
static log(e, type = "log", prefix = ">") {
53+
log(e, type = "log", prefix = ">") {
3854
let ref = e;
3955
while (ref) {
4056
let nextRef = ref.originalError;
4157
if (!nextRef && EleventyErrorUtil.hasEmbeddedError(ref.message)) {
4258
nextRef = EleventyErrorUtil.deconvertErrorToObject(ref);
4359
}
4460

45-
EleventyErrorHandler.message(
61+
this.logger.message(
4662
(process.env.DEBUG ? "" : `${prefix} `) +
4763
`${(
4864
EleventyErrorUtil.cleanMessage(ref.message) ||
@@ -67,36 +83,21 @@ class EleventyErrorHandler {
6783
"(Repeated output has been truncated…)"
6884
);
6985
}
70-
EleventyErrorHandler.message(
71-
prefix + stackStr.split("\n").join("\n" + prefix)
72-
);
86+
this.logger.message(prefix + stackStr.split("\n").join("\n" + prefix));
7387
}
7488
ref = nextRef;
7589
}
7690
}
7791

78-
static initialMessage(message, type = "log", chalkColor = "blue") {
92+
initialMessage(message, type = "log", chalkColor = "blue") {
7993
if (message) {
80-
EleventyErrorHandler.message(
94+
this.logger.message(
8195
message + ":" + (process.env.DEBUG ? "" : " (more in DEBUG output)"),
8296
type,
8397
chalkColor
8498
);
8599
}
86100
}
87-
88-
static message(message, type = "log", chalkColor) {
89-
if (process.env.DEBUG) {
90-
debug(message);
91-
} else {
92-
let logger = EleventyErrorHandler.logger || console;
93-
if (chalkColor && EleventyErrorHandler.isChalkEnabled) {
94-
logger[type](chalk[chalkColor](message));
95-
} else {
96-
logger[type](message);
97-
}
98-
}
99-
}
100101
}
101102

102103
module.exports = EleventyErrorHandler;

src/Engines/Nunjucks.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,6 @@ class Nunjucks extends TemplateEngine {
148148
});
149149
} else {
150150
try {
151-
// console.log( shortcodeFn.toString() );
152151
return new NunjucksLib.runtime.SafeString(
153152
shortcodeFn.call(
154153
Nunjucks._normalizeShortcodeContext(context),

0 commit comments

Comments
 (0)