everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
45 lines (43 loc) • 1.22 kB
JavaScript
let effect = require("effect");
let node_events = require("node:events");
//#region src/progress.ts
const pluginEvents = new node_events.EventEmitter();
const emitProgress = (event) => effect.Effect.sync(() => {
pluginEvents.emit("progress", event);
});
const timedPhase = effect.Effect.fn("timedPhase")(function* (timings, name, effect$1) {
yield* emitProgress({
phase: name,
status: "running"
});
const startedAt = yield* effect.Clock.currentTimeMillis;
const exit = yield* effect.Effect.exit(effect$1);
const durationMs = (yield* effect.Clock.currentTimeMillis) - startedAt;
if (effect.Exit.isSuccess(exit)) {
timings.push({
name,
durationMs
});
yield* emitProgress({
phase: name,
status: "done",
durationMs
});
return exit.value;
}
yield* emitProgress({
phase: name,
status: "error",
durationMs
});
return yield* effect.Effect.failCause(exit.cause);
});
function timePhase(timings, name, fn) {
return effect.Effect.runPromise(timedPhase(timings, name, effect.Effect.promise(fn)));
}
//#endregion
exports.emitProgress = emitProgress;
exports.pluginEvents = pluginEvents;
exports.timePhase = timePhase;
exports.timedPhase = timedPhase;
//# sourceMappingURL=progress.cjs.map