Files
vercel__workflow/packages/builders/src/build-queue.ts
Adrian 3c19e909f2 fix: nitro build race conditions (#444)
* 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
2025-12-01 19:55:28 -08:00

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;
};
}