/
cmd.cjs
executable file
·147 lines (133 loc) · 4.22 KB
/
cmd.cjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/env node
// This file intentionally uses older code conventions to be as friendly
// as possible with error messaging to folks on older runtimes.
const pkg = require("./package.json");
require("please-upgrade-node")(pkg, {
message: function (requiredVersion) {
return (
"Eleventy " +
pkg.version +
" requires Node " +
requiredVersion +
". You will need to upgrade Node to use Eleventy!"
);
},
});
const debug = require("debug")("Eleventy:cmd");
(async function () {
const { default: EleventyErrorHandler } = await import("./src/Errors/EleventyErrorHandler.js");
const { default: EleventyBaseError } = await import("./src/Errors/EleventyBaseError.js");
class EleventyCommandCheckError extends EleventyBaseError {}
try {
let errorHandler = new EleventyErrorHandler();
const argv = require("minimist")(process.argv.slice(2), {
string: ["input", "output", "formats", "config", "pathprefix", "port", "to"],
boolean: [
"quiet",
"version",
"watch",
"dryrun",
"help",
"serve",
"incremental",
"ignore-initial",
],
default: {
quiet: null,
"ignore-initial": false,
},
unknown: function (unknownArgument) {
throw new EleventyCommandCheckError(
`We don’t know what '${unknownArgument}' is. Use --help to see the list of supported commands.`,
);
},
});
debug("command: eleventy %o", argv);
const { Eleventy } = await import("./src/Eleventy.js");
process.on("unhandledRejection", (error, promise) => {
errorHandler.fatal(error, "Unhandled rejection in promise");
});
process.on("uncaughtException", (error) => {
errorHandler.fatal(error, "Uncaught exception");
});
process.on("rejectionHandled", (promise) => {
errorHandler.warn(promise, "A promise rejection was handled asynchronously");
});
if (argv.version) {
console.log(Eleventy.getVersion());
} else if (argv.help) {
console.log(Eleventy.getHelp());
} else {
let elev = new Eleventy(argv.input, argv.output, {
source: "cli",
// --quiet and --quiet=true both resolve to true
quietMode: argv.quiet,
configPath: argv.config,
pathPrefix: argv.pathprefix,
runMode: argv.serve ? "serve" : argv.watch ? "watch" : "build",
dryRun: argv.dryrun,
});
// reuse ErrorHandler instance in Eleventy
errorHandler = elev.errorHandler;
// Before init
elev.setFormats(argv.formats);
// careful, we can’t use async/await here to error properly
// with old node versions in `please-upgrade-node` above.
elev
.init()
.then(function () {
if (argv.to === "json" || argv.to === "ndjson") {
// override logging output
elev.setIsVerbose(false);
}
elev.setIgnoreInitial(argv["ignore-initial"]);
elev.setIncrementalBuild(argv.incremental);
try {
if (argv.serve) {
let shouldStartServer = true;
elev
.watch()
.catch((e) => {
// Build failed but error message already displayed.
shouldStartServer = false;
// A build error occurred and we aren’t going to --serve
errorHandler.fatal(e, "Eleventy CLI Error");
})
.then(function () {
if (shouldStartServer) {
elev.serve(argv.port);
}
});
} else if (argv.watch) {
elev.watch().catch((e) => {
// A build error occurred and we aren’t going to --watch
errorHandler.fatal(e, "Eleventy CLI Error");
});
} else {
if (argv.to === "json") {
elev.toJSON().then(function (result) {
console.log(JSON.stringify(result, null, 2));
});
} else if (argv.to === "ndjson") {
elev.toNDJSON().then(function (stream) {
stream.pipe(process.stdout);
});
} else if (!argv.to || argv.to === "fs") {
elev.write();
} else {
throw new EleventyCommandCheckError(
`Invalid --to value: ${argv.to}. Supported values: \`fs\` (default), \`json\`, and \`ndjson\`.`,
);
}
}
} catch (e) {
errorHandler.fatal(e, "Eleventy CLI Error");
}
})
.catch(errorHandler.fatal.bind(errorHandler));
}
} catch (e) {
let errorHandler = new EleventyErrorHandler();
errorHandler.fatal(e, "Eleventy CLI Fatal Error");
}
})();