Skip to content

Commit d352202

Browse files
committed
switched to ESM, abandoning CommonJS
1 parent c4e5f62 commit d352202

File tree

28 files changed

+137
-199
lines changed

28 files changed

+137
-199
lines changed

bin/faucet

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env node
2-
"use strict";
3-
4-
let { faucetDispatch } = require("../lib");
5-
let { parseCLI } = require("../lib/cli");
2+
import { faucetDispatch } from "../lib/index.js";
3+
import { parseCLI } from "../lib/cli.js";
64

75
parseCLI().
86
then(({ referenceDir, config, options }) => {

lib/cli.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
"use strict";
2-
3-
let { readConfig } = require("./config");
4-
let { abort, repr } = require("./util");
5-
let parseArgs = require("minimist");
1+
import { readConfig } from "./config.js";
2+
import { abort, repr } from "./util/index.js";
3+
import parseArgs from "minimist";
64

75
let HELP = `
86
Usage:
@@ -27,7 +25,7 @@ Options:
2725
serve generated files via HTTP with live reloading
2826
`.trim();
2927

30-
exports.parseCLI = async function parseCLI(argv = process.argv.slice(2), help = HELP) {
28+
export async function parseCLI(argv = process.argv.slice(2), help = HELP) {
3129
argv = parseArgs(argv, {
3230
boolean: ["watch", "fingerprint", "sourcemaps", "compact"],
3331
alias: {
@@ -58,4 +56,4 @@ exports.parseCLI = async function parseCLI(argv = process.argv.slice(2), help =
5856
let rootDir = process.cwd();
5957
let { referenceDir, config } = await readConfig(rootDir, argv.config);
6058
return { referenceDir, config, options };
61-
};
59+
}

lib/config.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
"use strict";
1+
import path from "path";
22

3-
let path = require("path");
4-
5-
exports.readConfig = async function readConfig(rootDir, filepath = "faucet.config.js") {
3+
export async function readConfig(rootDir, filepath = "faucet.config.js") {
64
let configPath = path.resolve(rootDir, filepath);
75
return {
86
referenceDir: path.dirname(configPath),
9-
config: await require(configPath)
7+
config: await import(configPath)
108
};
11-
};
9+
}

lib/index.js

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
"use strict";
1+
import { liveServer, staticServer } from "./server.js";
2+
import { pluginsByBucket } from "./plugins.js";
3+
import { AssetManager } from "./manager.js";
4+
import { resolvePath } from "./util/resolve.js";
5+
import { abort, repr } from "./util/index.js";
6+
import { SerializedRunner } from "./util/runner.js";
7+
import browserslist from "browserslist";
28

3-
let server = require("./server");
4-
let { pluginsByBucket } = require("./plugins");
5-
let { AssetManager } = require("./manager");
6-
let { resolvePath } = require("./util/resolve");
7-
let { abort, repr } = require("./util");
8-
let { SerializedRunner } = require("./util/runner");
9-
let browserslist = require("browserslist");
10-
11-
exports.faucetDispatch = async function faucetDispatch(referenceDir, config,
9+
export async function faucetDispatch(referenceDir, config,
1210
{ watch, fingerprint, sourcemaps, compact, serve, liveserve }) {
1311
config = await config;
1412

@@ -51,19 +49,19 @@ exports.faucetDispatch = async function faucetDispatch(referenceDir, config,
5149
abort("ERROR: serve and liveserve must not be used together");
5250
}
5351
if(serve) {
54-
server.static(serve, assetManager.manifest.webRoot);
52+
staticServer(serve, assetManager.manifest.webRoot);
5553
} else if(liveserve) {
56-
server.live(liveserve, assetManager.manifest.webRoot);
54+
liveServer(liveserve, assetManager.manifest.webRoot);
5755
}
58-
};
56+
}
5957

6058
function buildStep(plugins) {
6159
return files => Promise.all(plugins.map(plugin => plugin(files))).
6260
then(() => files);
6361
}
6462

6563
async function makeWatcher(watchDirs, referenceDir) {
66-
let niteOwl = await require("nite-owl");
64+
let niteOwl = await import("nite-owl");
6765

6866
if(watchDirs) {
6967
watchDirs = watchDirs.map(dir => resolvePath(dir, referenceDir,

lib/manager.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
"use strict";
1+
import { Manifest } from "./manifest.js";
2+
import { createFile } from "./util/files/index.js";
3+
import { resolvePath } from "./util/resolve.js";
4+
import { reportFileStatus, abort, generateFingerprint } from "./util/index.js";
5+
import path from "path";
26

3-
let { Manifest } = require("./manifest");
4-
let { createFile } = require("./util/files");
5-
let { resolvePath } = require("./util/resolve");
6-
let { reportFileStatus, abort, generateFingerprint } = require("./util");
7-
let path = require("path");
8-
9-
exports.AssetManager = class AssetManager {
7+
export class AssetManager {
108
constructor(referenceDir, { manifestConfig, fingerprint, exitOnError } = {}) {
119
this.referenceDir = referenceDir;
1210
this.fingerprint = fingerprint;
@@ -57,4 +55,4 @@ exports.AssetManager = class AssetManager {
5755
actualPath = path.relative(referenceDir, actualPath);
5856
return this.manifest.set(originalPath, actualPath, targetDir);
5957
}
60-
};
58+
}

lib/manifest.js

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
"use strict";
1+
import { createFile } from "./util/files/index.js";
2+
import { resolvePath } from "./util/resolve.js";
3+
import { abort } from "./util/index.js";
4+
import path from "path";
25

3-
let { createFile } = require("./util/files");
4-
let { resolvePath } = require("./util/resolve");
5-
let { abort } = require("./util");
6-
let path = require("path");
7-
8-
exports.Manifest = class Manifest {
6+
export class Manifest {
97
constructor(referenceDir, { target, key, value, baseURI, webRoot } = {}) {
108
if(value && (baseURI || webRoot)) {
119
abort("ERROR: `value` must not be used with `baseURI` and/or `webRoot`");
@@ -52,4 +50,4 @@ exports.Manifest = class Manifest {
5250
return memo;
5351
}, {});
5452
}
55-
};
53+
}

lib/plugins.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
"use strict";
2-
3-
let { loadExtension, abort, repr } = require("./util");
1+
import { loadExtension, abort, repr } from "./util/index.js";
42

53
// common plugins included for convenience
64
let DEFAULTS = [{
@@ -26,15 +24,10 @@ let DEFAULT_KEYS = DEFAULTS.reduce((memo, plugin) => {
2624
}, new Set());
2725
let BUCKETS = new Set(["static", "scripts", "styles", "markup"]);
2826

29-
module.exports = {
30-
pluginsByBucket,
31-
_determinePlugins: determinePlugins
32-
};
33-
3427
// returns plugin functions grouped by bucket and filtered by relevance (based
3528
// on configuration)
36-
async function pluginsByBucket(config, defaults) {
37-
let plugins = await determinePlugins(config.plugins, defaults);
29+
export async function pluginsByBucket(config, defaults) {
30+
let plugins = await _determinePlugins(config.plugins, defaults);
3831
let buckets = [...BUCKETS].reduce((memo, bucket) => {
3932
memo[bucket] = [];
4033
return memo;
@@ -60,7 +53,7 @@ async function pluginsByBucket(config, defaults) {
6053
// `plugins` is an array of plugins, each either a package identifier or a
6154
// `{ key, bucket, plugin }` object`, with `key` being the configuration key and
6255
// `plugin` being either a function or a package identifier
63-
async function determinePlugins(plugins = [], defaults = DEFAULTS) {
56+
export async function _determinePlugins(plugins = [], defaults = DEFAULTS) {
6457
let registry = {};
6558
// NB: default plugins are resolved lazily because eager loading would
6659
// result in them becoming a hard dependency rather than a convenience

lib/server.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
1-
let { loadExtension, abort, repr } = require("./util");
1+
import { loadExtension, abort, repr } from "./util/index.js";
22

33
let DEFAULTS = {
44
host: "localhost",
55
port: 3000
66
};
77

8-
exports.static = async (config, webroot) => {
9-
let donny = await loadExtension("donny", "failed to activate server");
10-
let [host, port] = parseHost(config);
8+
export async function liveServer(config, root) {
9+
let server = await loadExtension("live-server", "failed to activate live-server");
10+
let [host, port] = _parseHost(config);
11+
server.start({ port, host, root, open: false });
12+
}
1113

14+
export async function staticServer(config, webroot) {
15+
let donny = await loadExtension("donny", "failed to activate server");
16+
let [host, port] = _parseHost(config);
1217
await donny({ port, bind: host, webroot });
1318
console.error(`serving ${repr(webroot)} at http://${host}:${port}`);
14-
};
15-
16-
exports.live = async (config, root) => {
17-
let liveServer = await loadExtension("live-server", "failed to activate live-server");
18-
let [host, port] = parseHost(config);
19-
20-
liveServer.start({ port, host, root, open: false });
21-
};
22-
23-
exports._parseHost = parseHost;
19+
}
2420

25-
function parseHost(config) {
21+
export function _parseHost(config) {
2622
let { host, port } = DEFAULTS;
2723
if(config === true) {
2824
return [host, port];

lib/util/files/finder.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
let { readdir, stat } = require("fs/promises");
2-
let path = require("path");
1+
import { readdir, stat } from "fs/promises";
2+
import path from "path";
33

4-
exports.FileFinder = class FileFinder {
4+
export class FileFinder {
55
constructor(directory, { skipDotfiles, filter = () => true } = {}) {
66
this.directory = directory;
77
this.filter = filename => {
@@ -23,7 +23,7 @@ exports.FileFinder = class FileFinder {
2323
return filesWithinDirectory(this.directory, filepaths).
2424
then(filepaths => filepaths.filter(this.filter));
2525
}
26-
};
26+
}
2727

2828
function tree(filepath, referenceDir = filepath) {
2929
return stat(filepath).

lib/util/files/index.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
"use strict";
2-
3-
let { writeFile } = require("fs/promises");
4-
let { mkdirSync } = require("fs");
5-
let path = require("path");
1+
import { writeFile } from "fs/promises";
2+
import { mkdirSync } from "fs";
3+
import path from "path";
64

75
let KNOWN = new Set(); // avoids redundant `mkdir` invocations
86
let LOCKS = new Map();
97

108
// avoids concurrent write operations and creates target directory if necessary
11-
exports.createFile = function createFile(filepath, contents) {
9+
export function createFile(filepath, contents) {
1210
let lock = LOCKS.get(filepath);
1311
if(lock) { // defer
1412
return lock.then(() => createFile(filepath, contents));
@@ -25,4 +23,4 @@ exports.createFile = function createFile(filepath, contents) {
2523
return prom.then(() => {
2624
LOCKS.delete(filepath);
2725
});
28-
};
26+
}

0 commit comments

Comments
 (0)