UNPKG

@storm-software/esbuild

Version:

A package containing `esbuild` utilities for building Storm Software libraries and applications

105 lines (101 loc) 2.47 kB
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 };