refactor: move queueing code into its own directory
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 Jul 2024 10:33:31 +0000 (12:33 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 7 Jul 2024 10:33:31 +0000 (12:33 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
14 files changed:
src/index.ts
src/pools/abstract-pool.ts
src/pools/worker-node.ts
src/queues/abstract-fixed-queue.ts [moved from src/abstract-fixed-queue.ts with 98% similarity]
src/queues/fixed-priority-queue.ts [moved from src/fixed-priority-queue.ts with 95% similarity]
src/queues/fixed-queue.ts [moved from src/fixed-queue.ts with 91% similarity]
src/queues/priority-queue.ts [moved from src/priority-queue.ts with 99% similarity]
src/queues/queue-types.ts [new file with mode: 0644]
src/utility-types.ts
tests/pools/abstract-pool.test.mjs
tests/pools/worker-node.test.mjs
tests/queues/fixed-priority-queue.test.mjs [moved from tests/fixed-priority-queue.test.mjs with 97% similarity]
tests/queues/fixed-queue.test.mjs [moved from tests/fixed-queue.test.mjs with 97% similarity]
tests/queues/priority-queue.test.mjs [moved from tests/priority-queue.test.mjs with 98% similarity]

index 178eeed25d8072c9f353d9040cfff4897a6f2294..8bd6a4d0ae9e62b1a66fca4392e1ef40f8dd83de 100644 (file)
@@ -49,9 +49,9 @@ export type {
   WorkerUsage,
 } from './pools/worker.js'
 export { WorkerTypes } from './pools/worker.js'
-export type { PriorityQueue } from './priority-queue.js'
+export type { PriorityQueue } from './queues/priority-queue.js'
+export type { FixedQueueNode, IFixedQueue } from './queues/queue-types.js'
 export type {
-  IFixedQueue,
   MessageValue,
   PromiseResponseWrapper,
   Task,
index e11a2bbbc2d90d99d8668fbf24b8b063b40aba67..c009f20ac12458a13a354b8d232c9f6c325d2487 100644 (file)
@@ -4,12 +4,12 @@ import { EventEmitterAsyncResource } from 'node:events'
 import { performance } from 'node:perf_hooks'
 import type { TransferListItem } from 'node:worker_threads'
 
-import {
-  defaultBucketSize,
-  type MessageValue,
-  type PromiseResponseWrapper,
-  type Task,
-  type TaskFunctionProperties,
+import { defaultBucketSize } from '../queues/queue-types.js'
+import type {
+  MessageValue,
+  PromiseResponseWrapper,
+  Task,
+  TaskFunctionProperties,
 } from '../utility-types.js'
 import {
   average,
index d29a6e323f35208e22b6f87ca4610fb0af1b3e34..b42d8493407696dfeb6ad81ba00ae4313995bfdb 100644 (file)
@@ -2,7 +2,7 @@ import { EventEmitter } from 'node:events'
 import { MessageChannel } from 'node:worker_threads'
 
 import { CircularBuffer } from '../circular-buffer.js'
-import { PriorityQueue } from '../priority-queue.js'
+import { PriorityQueue } from '../queues/priority-queue.js'
 import type { Task } from '../utility-types.js'
 import { DEFAULT_TASK_NAME } from '../utils.js'
 import {
similarity index 98%
rename from src/abstract-fixed-queue.ts
rename to src/queues/abstract-fixed-queue.ts
index eee066d37d4bb87a8b6080d5bf91a9bd411ffcd6..44cfab9da84b7e53ef357347ece43f7782283282 100644 (file)
@@ -2,7 +2,7 @@ import {
   defaultQueueSize,
   type FixedQueueNode,
   type IFixedQueue,
-} from './utility-types.js'
+} from './queue-types.js'
 
 /**
  * Base fixed queue class
similarity index 95%
rename from src/fixed-priority-queue.ts
rename to src/queues/fixed-priority-queue.ts
index 6c899283005d83be751bcd741890f2a615b51d72..7a3976d76b39bc2dbb677d90235d8e5d862fab46 100644 (file)
@@ -1,5 +1,5 @@
 import { AbstractFixedQueue } from './abstract-fixed-queue.js'
-import type { IFixedQueue } from './utility-types.js'
+import type { IFixedQueue } from './queue-types.js'
 
 /**
  * Fixed priority queue.
similarity index 91%
rename from src/fixed-queue.ts
rename to src/queues/fixed-queue.ts
index e9003f70d8623804877170cb4cd9dc8c690a0163..366e41f1540af021368d6505de33bcb61faca959 100644 (file)
@@ -1,5 +1,5 @@
 import { AbstractFixedQueue } from './abstract-fixed-queue.js'
-import type { IFixedQueue } from './utility-types.js'
+import type { IFixedQueue } from './queue-types.js'
 
 /**
  * Fixed queue.
similarity index 99%
rename from src/priority-queue.ts
rename to src/queues/priority-queue.ts
index 1e15fe2d5152424a49542362dfffd22034dc92f3..dcfd6fb91cdcae8a37c37db6a3f60eea1068461b 100644 (file)
@@ -7,7 +7,7 @@ import {
   type FixedQueueNode,
   type IFixedQueue,
   type PriorityQueueNode,
-} from './utility-types.js'
+} from './queue-types.js'
 
 /**
  * Priority queue.
diff --git a/src/queues/queue-types.ts b/src/queues/queue-types.ts
new file mode 100644 (file)
index 0000000..83d7f7f
--- /dev/null
@@ -0,0 +1,83 @@
+/**
+ * Default queue size.
+ * @internal
+ */
+export const defaultQueueSize = 2048
+
+/**
+ * Fixed queue node.
+ * @typeParam T - Type of fixed queue node data.
+ * @internal
+ */
+export interface FixedQueueNode<T> {
+  data: T
+  priority: number
+}
+
+/**
+ * Fixed queue.
+ * @typeParam T - Type of fixed queue data.
+ * @internal
+ */
+export interface IFixedQueue<T> {
+  /** The fixed queue capacity. */
+  readonly capacity: number
+  /** The fixed queue size. */
+  readonly size: number
+  /** The fixed queue node array. */
+  nodeArray: FixedQueueNode<T>[]
+  /**
+   * Checks if the fixed queue is empty.
+   * @returns `true` if the fixed queue is empty, `false` otherwise.
+   */
+  empty: () => boolean
+  /**
+   * Checks if the fixed queue is full.
+   * @returns `true` if the fixed queue is full, `false` otherwise.
+   */
+  full: () => boolean
+  /**
+   * Enqueue data into the fixed queue.
+   * @param data - Data to enqueue.
+   * @param priority - Priority of the data. Lower values have higher priority.
+   * @returns The new size of the fixed queue.
+   * @throws If the fixed queue is full.
+   */
+  enqueue: (data: T, priority?: number) => number
+  /**
+   * Gets data from the fixed queue.
+   * @param index - The index of the data to get.
+   * @returns The data at the index or `undefined` if the fixed queue is empty or the index is out of bounds.
+   */
+  get: (index: number) => T | undefined
+  /**
+   * Dequeue data from the fixed queue.
+   * @returns The dequeued data or `undefined` if the fixed queue is empty.
+   */
+  dequeue: () => T | undefined
+  /**
+   * Clears the fixed queue.
+   */
+  clear: () => void
+  /**
+   * Returns an iterator for the fixed queue.
+   * @returns An iterator for the fixed queue.
+   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
+   */
+  [Symbol.iterator]: () => Iterator<T>
+}
+
+/**
+ * Default bucket size.
+ * @internal
+ */
+export const defaultBucketSize = 2048
+
+/**
+ * Priority queue node.
+ * @typeParam T - Type of priority queue node data.
+ * @internal
+ */
+export interface PriorityQueueNode<T> extends IFixedQueue<T> {
+  next?: IFixedQueue<T>
+}
index 858dc0e6f0fb256641bc3951d84b76153153f2ec..b29f801298b065f542f3ee981eb7cf3103456e42 100644 (file)
@@ -212,87 +212,3 @@ export interface PromiseResponseWrapper<Response = unknown> {
  * @internal
  */
 export type Writable<T> = { -readonly [P in keyof T]: T[P] }
-
-/**
- * Default queue size.
- * @internal
- */
-export const defaultQueueSize = 2048
-
-/**
- * Fixed queue node.
- * @typeParam T - Type of fixed queue node data.
- * @internal
- */
-export interface FixedQueueNode<T> {
-  data: T
-  priority: number
-}
-
-/**
- * Fixed queue.
- * @typeParam T - Type of fixed queue data.
- * @internal
- */
-export interface IFixedQueue<T> {
-  /** The fixed queue capacity. */
-  readonly capacity: number
-  /** The fixed queue size. */
-  readonly size: number
-  /** The fixed queue node array. */
-  nodeArray: FixedQueueNode<T>[]
-  /**
-   * Checks if the fixed queue is empty.
-   * @returns `true` if the fixed queue is empty, `false` otherwise.
-   */
-  empty: () => boolean
-  /**
-   * Checks if the fixed queue is full.
-   * @returns `true` if the fixed queue is full, `false` otherwise.
-   */
-  full: () => boolean
-  /**
-   * Enqueue data into the fixed queue.
-   * @param data - Data to enqueue.
-   * @param priority - Priority of the data. Lower values have higher priority.
-   * @returns The new size of the fixed queue.
-   * @throws If the fixed queue is full.
-   */
-  enqueue: (data: T, priority?: number) => number
-  /**
-   * Gets data from the fixed queue.
-   * @param index - The index of the data to get.
-   * @returns The data at the index or `undefined` if the fixed queue is empty or the index is out of bounds.
-   */
-  get: (index: number) => T | undefined
-  /**
-   * Dequeue data from the fixed queue.
-   * @returns The dequeued data or `undefined` if the fixed queue is empty.
-   */
-  dequeue: () => T | undefined
-  /**
-   * Clears the fixed queue.
-   */
-  clear: () => void
-  /**
-   * Returns an iterator for the fixed queue.
-   * @returns An iterator for the fixed queue.
-   * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
-   */
-  [Symbol.iterator]: () => Iterator<T>
-}
-
-/**
- * Default bucket size.
- * @internal
- */
-export const defaultBucketSize = 2048
-
-/**
- * Priority queue node.
- * @typeParam T - Type of priority queue node data.
- * @internal
- */
-export interface PriorityQueueNode<T> extends IFixedQueue<T> {
-  next?: IFixedQueue<T>
-}
index 276ecf146ef2c1b2478172c015a14c6ad3009199..1f9213f3a57ae515bd314cf2d6ecf0c877b98a09 100644 (file)
@@ -20,8 +20,8 @@ import {
   WorkerTypes,
 } from '../../lib/index.cjs'
 import { WorkerNode } from '../../lib/pools/worker-node.cjs'
-import { PriorityQueue } from '../../lib/priority-queue.cjs'
-import { defaultBucketSize } from '../../lib/utility-types.cjs'
+import { PriorityQueue } from '../../lib/queues/priority-queue.cjs'
+import { defaultBucketSize } from '../../lib/queues/queue-types.cjs'
 import { DEFAULT_TASK_NAME } from '../../lib/utils.cjs'
 import { waitPoolEvents } from '../test-utils.cjs'
 
index f00b8061b2e085e26f6b742ae2059b5da612c0a5..a541180869cc49c11406c1aed2e0a277d0e938c8 100644 (file)
@@ -6,7 +6,7 @@ import { expect } from 'expect'
 import { CircularBuffer } from '../../lib/circular-buffer.cjs'
 import { WorkerTypes } from '../../lib/index.cjs'
 import { WorkerNode } from '../../lib/pools/worker-node.cjs'
-import { PriorityQueue } from '../../lib/priority-queue.cjs'
+import { PriorityQueue } from '../../lib/queues/priority-queue.cjs'
 import { DEFAULT_TASK_NAME } from '../../lib/utils.cjs'
 
 describe('Worker node test suite', () => {
similarity index 97%
rename from tests/fixed-priority-queue.test.mjs
rename to tests/queues/fixed-priority-queue.test.mjs
index 57947ae8c84756483f5044be7914d23ebcedcc4f..36474b0bbd4c7379a20cc8a05bb9774b4db3dce2 100644 (file)
@@ -1,7 +1,7 @@
 import { expect } from 'expect'
 
-import { FixedPriorityQueue } from '../lib/fixed-priority-queue.cjs'
-import { defaultQueueSize } from '../lib/utility-types.cjs'
+import { FixedPriorityQueue } from '../../lib/queues/fixed-priority-queue.cjs'
+import { defaultQueueSize } from '../../lib/queues/queue-types.cjs'
 
 describe('Fixed priority queue test suite', () => {
   it('Verify constructor() behavior', () => {
similarity index 97%
rename from tests/fixed-queue.test.mjs
rename to tests/queues/fixed-queue.test.mjs
index fc81e128c13e2396cbf38d454d17fd4e59460919..7fa7ac023cf6ad9173810812b9b0fcae13bac63e 100644 (file)
@@ -1,7 +1,7 @@
 import { expect } from 'expect'
 
-import { FixedQueue } from '../lib/fixed-queue.cjs'
-import { defaultQueueSize } from '../lib/utility-types.cjs'
+import { FixedQueue } from '../../lib/queues/fixed-queue.cjs'
+import { defaultQueueSize } from '../../lib/queues/queue-types.cjs'
 
 describe('Fixed queue test suite', () => {
   it('Verify constructor() behavior', () => {
similarity index 98%
rename from tests/priority-queue.test.mjs
rename to tests/queues/priority-queue.test.mjs
index c9b141b2e39e0b16112519896830f0ae7d84cda3..52d18dbf21e3e2372e117f196686304f9fe03844 100644 (file)
@@ -1,9 +1,9 @@
 import { expect } from 'expect'
 
-import { FixedPriorityQueue } from '../lib/fixed-priority-queue.cjs'
-import { FixedQueue } from '../lib/fixed-queue.cjs'
-import { PriorityQueue } from '../lib/priority-queue.cjs'
-import { defaultBucketSize } from '../lib/utility-types.cjs'
+import { FixedPriorityQueue } from '../../lib/queues/fixed-priority-queue.cjs'
+import { FixedQueue } from '../../lib/queues/fixed-queue.cjs'
+import { PriorityQueue } from '../../lib/queues/priority-queue.cjs'
+import { defaultBucketSize } from '../../lib/queues/queue-types.cjs'
 
 describe('Priority queue test suite', () => {
   it('Verify constructor() behavior', () => {