@storm-software/esbuild
Version:
A package containing `esbuild` utilities for building Storm Software libraries and applications
105 lines (101 loc) • 2.47 kB
JavaScript
import {
writeError,
writeTrace
} from "./chunk-CKFE6AY5.js";
import {
init_esm_shims
} from "./chunk-5OCVL4NC.js";
// src/watch.ts
init_esm_shims();
import { watch as createWatcher } from "chokidar";
import { debounce } from "es-toolkit";
// src/utilities/helpers.ts
init_esm_shims();
function handleSync(fn) {
try {
return fn();
} catch (error_) {
return error_;
}
}
async function handleAsync(fn) {
try {
return await fn();
} catch (error_) {
return error_;
}
}
var handle = handleSync;
handle.async = handleAsync;
var skip = Symbol("skip");
function transduceSync(list, transformer) {
const transduced = [];
for (const [i, element_] of list.entries()) {
const transformed = transformer(element_, i);
if (transformed !== skip) {
transduced[transduced.length] = transformed;
}
}
return transduced;
}
async function transduceAsync(list, transformer) {
const transduced = [];
await Promise.all(
list.entries().map(async ([i, element_]) => {
const transformed = await transformer(element_, i);
if (transformed !== skip) {
transduced[transduced.length] = transformed;
}
})
);
return transduced;
}
var transduce = transduceSync;
transduce.async = transduceAsync;
function pipeSync(fn, ...fns) {
return (...args) => {
let result = fn(...args);
for (let i = 0; result !== skip && i < fns.length; ++i) {
result = fns[i]?.(result);
}
return result;
};
}
function pipeAsync(fn, ...fns) {
return async (...args) => {
let result = await fn(...args);
for (let i = 0; result !== skip && i < fns.length; ++i) {
result = await fns[i]?.(result);
}
return result;
};
}
var pipe = pipeSync;
pipe.async = pipeAsync;
// src/watch.ts
var watch = (context, options) => {
if (!options.watch) {
return context;
}
const config = {
ignoreInitial: true,
useFsEvents: true,
ignored: ["./src/__tests__/**/*", "./package.json"]
};
const changeWatcher = createWatcher(["./src/**/*"], config);
const fastRebuild = debounce(async () => {
const timeBefore = Date.now();
const rebuildResult = await handle.async(() => {
return context.rebuild();
});
if (rebuildResult instanceof Error) {
writeError(rebuildResult.message);
}
writeTrace(`${Date.now() - timeBefore}ms [${options.name ?? ""}]`);
}, 10);
changeWatcher.on("change", fastRebuild);
return void 0;
};
export {
watch
};