From ca748344cd6af59522b303f48e7e6c37f54b042d Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 29 Jun 2021 12:22:20 +0200 Subject: [PATCH] address Vlad's comment --- .../gatsby-worker/src/__tests__/task-queue.ts | 37 +++++++++++++++++++ packages/gatsby-worker/src/task-queue.ts | 3 ++ 2 files changed, 40 insertions(+) diff --git a/packages/gatsby-worker/src/__tests__/task-queue.ts b/packages/gatsby-worker/src/__tests__/task-queue.ts index 66caa5048b1cd..fd8dc3d7e2d8d 100644 --- a/packages/gatsby-worker/src/__tests__/task-queue.ts +++ b/packages/gatsby-worker/src/__tests__/task-queue.ts @@ -198,4 +198,41 @@ describe(`Task Queue`, () => { ] `) }) + + describe(`Removed node is not referenced in .next or .prev`, () => { + let taskQueue: TaskQueue + beforeEach(() => { + taskQueue = new TaskQueue() + + taskQueue.enqueue(1) + taskQueue.enqueue(2) + taskQueue.enqueue(3) + }) + + it.each([ + [`removed from head`, 1], + [`removed from middle`, 2], + [`removed from tail`, 3], + ])(`%s`, (_label, itemToRemove) => { + for (const item of taskQueue) { + if (item.value === itemToRemove) { + taskQueue.remove(item) + } + } + + for (const item of taskQueue) { + if (item.value === itemToRemove) { + fail(`"${itemToRemove}" found as value`) + } + + if (item?.prev?.value === itemToRemove) { + fail(`"${itemToRemove}" found as value of previous node`) + } + + if (item?.next?.value === itemToRemove) { + fail(`"${itemToRemove}" found as value of next node`) + } + } + }) + }) }) diff --git a/packages/gatsby-worker/src/task-queue.ts b/packages/gatsby-worker/src/task-queue.ts index ee390148484c8..42945763e3952 100644 --- a/packages/gatsby-worker/src/task-queue.ts +++ b/packages/gatsby-worker/src/task-queue.ts @@ -41,6 +41,9 @@ export class TaskQueue { } else { if (taskNode === this.tail) { this.tail = taskNode.prev + } else { + // if node is not the tail then it will have .next + taskNode.next!.prev = taskNode.prev } // if node is not the head then it will have .prev taskNode.prev!.next = taskNode.next