···
28
+
let lastMessages = new Set();
29
+
/** @type {import("esbuild").Plugin} */
30
+
const deduplicatedLogging = {
31
+
name: "deduplicated-logging",
33
+
build.onStart(() => {
34
+
lastMessages.clear();
37
+
build.onEnd(async (result) => {
38
+
const formatted = await Promise.all([
39
+
esbuild.formatMessages(result.warnings, { kind: "warning", color: true }),
40
+
esbuild.formatMessages(result.errors, { kind: "error", color: true })
41
+
]).then((a) => a.flat());
43
+
// console.log(formatted);
44
+
for (const message of formatted) {
45
+
if (lastMessages.has(message)) continue;
46
+
lastMessages.add(message);
47
+
console.log(message.trim());
53
+
const timeFormatter = new Intl.DateTimeFormat(undefined, {
59
+
/** @type {import("esbuild").Plugin} */
60
+
const taggedBuildLog = (tag) => ({
63
+
build.onEnd((result) => {
64
+
console.log(`[${timeFormatter.format(new Date())}] [${tag}] build finished`);
async function build(name, entry) {
const outfile = path.join("./dist", name + ".js");
···
const nodeDependencies = ["glob"];
const ignoredExternal = name === "web-preload" ? nodeDependencies : [];
90
+
/** @type {import("esbuild").BuildOptions} */
···
external: [...ignoredExternal, ...external],
108
+
logLevel: "silent",
110
+
deduplicatedLogging,
111
+
taggedBuildLog(name)
···
121
-
plugins: copyManifest
124
-
src: `./packages/core-extensions/src/${ext}/manifest.json`,
125
-
dest: `./dist/core-extensions/${ext}/manifest.json`
129
-
: [wpImportPlugin],
"commonjs-variable-in-esm": "verbose"
172
+
logLevel: "silent",
174
+
...copyManifest ? [copyStaticFiles({
175
+
src: `./packages/core-extensions/src/${ext}/manifest.json`,
176
+
dest: `./dist/core-extensions/${ext}/manifest.json`
179
+
deduplicatedLogging,
180
+
taggedBuildLog(`ext/${ext}`)