mirror of
https://github.com/vercel/workflow.git
synced 2026-09-14 19:59:43 +08:00
3c19e909f2
* test: make dev e2e sequential * test: increase timeout between tests in dev test * add logs * feat: add queue for builds * refactor: cleanup vite hmr * chore: cleanup comments * fix: regex base builder * test: reduce sleep time between test suites in dev test * refactor: naming conventions and remove builder value check * refactor: sveltekit builder queue * changeset * fix: regex on base builder workflow code * test: increase sleep * format * fix: make writeFile atomic on workflow entrypoint * refactor: move build queue to @workflow/builders * revert: regex stuff with workflow code * add console log for workflow file changed
27 lines
746 B
TypeScript
27 lines
746 B
TypeScript
/**
|
|
* Creates a build queue that serializes async tasks to prevent race conditions.
|
|
*
|
|
* When rapid file changes trigger multiple builds, this ensures they run
|
|
* sequentially rather than concurrently, avoiding issues like:
|
|
* - Partial file reads during writes
|
|
* - Corrupted merge operations
|
|
* - Duplicate/conflicting builds
|
|
*
|
|
* @example
|
|
* const enqueue = createBuildQueue();
|
|
*
|
|
* // These will run sequentially, not concurrently
|
|
* enqueue(() => builder.build());
|
|
* enqueue(() => builder.build());
|
|
*/
|
|
export function createBuildQueue() {
|
|
let queue = Promise.resolve();
|
|
|
|
return (task: () => Promise<void>): Promise<void> => {
|
|
queue = queue.then(task).catch((err) => {
|
|
console.error(err);
|
|
});
|
|
return queue;
|
|
};
|
|
}
|