UNPKG

@typescript-package/queue

Version:

A lightweight TypeScript library for managing various queue and stack structures.

1 lines 41.6 kB
{"version":3,"file":"typescript-package-queue.mjs","sources":["../../../package/queue/src/lib/elements.class.ts","../../../package/queue/src/lib/processing.class.ts","../../../package/queue/src/lib/queue.abstract.ts","../../../package/queue/src/lib/tasks.class.ts","../../../package/queue/src/lib/task-queue.class.ts","../../../package/queue/src/lib/stack.abstract.ts","../../../package/queue/src/lib/index.ts","../../../package/queue/src/public-api.ts","../../../package/queue/src/typescript-package-queue.ts"],"sourcesContent":["// Abstract.\nimport { ArrayState } from \"@typescript-package/state\";\n/**\n * @description Array state elements in data structures such as Stack and Queue.\n * @export\n * @class Elements\n * @template Type \n * @extends {ArrayState<Type>}\n */\nexport class Elements<Type, Size extends number = number> extends ArrayState<Type>{\n /**\n * @description The maximum size of the `Elements`.\n * @public\n * @readonly\n * @type {Size}\n */\n public get size(): Size {\n return this.#size;\n }\n\n /**\n * @description Privately stored maximum elements size.\n * @type {Size}\n */\n #size: Size;\n\n /**\n * Creates an instance of `Elements`.\n * @constructor\n * @param {Type[]} elements \n * @param {Size} [size=Infinity as Size] \n */\n constructor(elements: Type[], size: Size = Infinity as Size) {\n super(elements.length <= size ? elements : []);\n // Sets the size.\n this.#size = size;\n // Throws an error if the elements exceeds the maximum size.\n if (elements.length > size) {\n throw new Error(`The \\`elements\\` size exceeds the maximum size ${size} by ${elements.length - size}.`);\n }\n }\n\n /**\n * @inheritdoc\n * @public\n * @param {Type} element The element of `Type` to append.\n * @returns {this} \n */\n public override append(element: Type): this {\n this.#checkFull();\n super.append(element);\n return this;\n }\n\n /**\n * @inheritdoc\n * @public\n * @param {number} index The index under which the specified `element` is inserted.\n * @param {Type} element The element of `Type` to insert at specified `index`.\n * @returns {this} \n */\n public override insert(index: number, element: Type): this {\n this.#checkFull();\n super.insert(index, element);\n return this;\n }\n\n /**\n * @description Checks whether the `Elements` state is full, equal to size.\n * @public\n * @returns {boolean} \n */\n public isFull(): boolean {\n return this.#size === this.length;\n }\n\n /**\n * @description Add the element at the beginning of `array` state.\n * @public\n * @param {Type} element The element of `Type` to prepend.\n * @returns {this} \n */\n public override prepend(element: Type): this {\n this.#checkFull();\n super.prepend(element);\n return this;\n }\n\n /**\n * @inheritdoc\n * @public\n * @param {number} index The index to update update element.\n * @param {Type} element The element of `Type` to update under the specified `index`.\n * @returns {this} \n */\n public override update(index: number, element: Type): this {\n super.update(index, element);\n return this;\n }\n\n /** \n * @description Checks whether length of the array is equal to maximum size.\n * @returns {this} \n */\n #checkFull(): this {\n if (this.isFull()) {\n throw new Error(`Elements array state is full of size ${super.length}.`);\n }\n return this;\n }\n};\n","// Class.\nimport { Boolean as Debug, State } from \"@typescript-package/state\";\n/**\n * @description Class designed for asynchronous processing the promises of `void`.\n * @export\n * @class Processing\n * @extends {State<Set<Promise<void>>>} The state for active processing promises, tracking the status of asynchronous operations.\n */\nexport class Processing extends State<Set<Promise<void>>> {\n /**\n * @description Tracks whether there are actively processed promises.\n * @public\n * @readonly\n * @type {boolean}\n */\n public get active(): boolean {\n return super.state.size > 0;\n }\n\n /**\n * @description A current number of promises being processed.\n * @public\n * @readonly\n * @type {number}\n */\n public get activeCount(): number {\n return super.state.size;\n }\n\n /**\n * @description Returns the first promise from processing.\n * @public\n * @readonly\n * @type {Promise<void>}\n */\n public get first(): Promise<void> {\n return Array.from(super.state)[0];\n }\n\n /**\n * @description Returns the last promise from processing.\n * @public\n * @readonly\n * @type {Promise<void>}\n */\n public get last(): Promise<void> {\n return Array.from(super.state)[super.state.size - 1];\n }\n\n /**\n * @description\n * @type {*}\n */\n #debug = new Debug(false);\n\n /**\n * Creates a `Processing` object.\n * @constructor\n */\n constructor() {\n super(new Set());\n }\n\n /**\n * @description Adds the promise to the processing state.\n * @public\n * @param {Promise<void>} promise The promise of `void` to add.\n * @returns {this} \n */\n public add(promise: Promise<void>, remove: boolean = true): this {\n super.state.add(promise);\n this.#consoleDebug(\"`Promise` added to processing state\", { active: this.active, activeCount: this.activeCount });\n remove === true && promise.finally(() => this.delete(promise));\n return this;\n }\n\n /**\n * @description Returns `Promise` that waits for the processing completion.\n * @public\n * @async\n * @returns {Promise<void>} \n */\n public async complete(): Promise<void> {\n this.#consoleDebug(\"Invoked `Processing.complete()` to wait for all processes from the state \", { activeCount: this.activeCount })\n const promise = Promise.all(super.state);\n await promise;\n if (this.#debug.isTrue()) {\n promise.finally(() => \n this.#consoleDebug(\"`Processing.complete()` finally method invoked.\", { activeCount: this.activeCount })\n );\n }\n }\n\n /**\n * @description Sets the `Processing` to debug state.\n * @public\n */\n public debug(): this {\n this.#debug.true();\n return this;\n }\n\n /**\n * @description Removes the specified promise from the processing state.\n * @public\n * @param {Promise<void>} promise \n * @returns {this} \n */\n public delete(promise: Promise<void> = this.first): this {\n this.#consoleDebug(\"`activeCount` state before removing the `Promise`\", { activeCount: this.activeCount })\n super.state.delete(promise);\n this.#consoleDebug(\"`Promise` removed from processing state\", { activeCount: this.activeCount });\n return this;\n }\n\n /**\n * @description Checks whether the `Processing` is active.\n * @public\n * @param {?boolean} [expected] An optional `boolean` type value to check the active state.\n * @returns {boolean} \n */\n public isActive(expected?: boolean): boolean {\n return typeof expected === 'boolean' ? this.active === expected : this.active;\n }\n\n /**\n * @description Unset the `Processing` from the debug state.\n * @public\n */\n public unDebug(): this {\n this.#debug.false();\n return this;\n }\n\n /**\n * @description Display the console debug on debug state `true`.\n * @param {string} message \n * @param {?*} [data] \n * @returns {this} \n */\n #consoleDebug(message: string, data?: any): this {\n this.#debug.isTrue() && console.debug(message, data || '');\n return this;\n }\n}\n","// Class.\nimport { Elements } from \"./elements.class\";\n/**\n * @description A standard FIFO (First In, First Out) queue.\n * @export\n * @abstract\n * @class Queue\n * @template Type\n */\nexport abstract class Queue<Type, Size extends number = number> {\n /**\n * @description The `Elements` state holder.\n * @public\n * @readonly\n * @type {Elements<Type>}\n */\n public get elements(): Elements<Type> {\n return this.#elements;\n }\n\n /**\n * @description The actual queue length.\n * @public\n * @readonly\n * @type {number}\n */\n public get length(): number {\n return this.#elements.length;\n }\n\n /**\n * @description The maximum queue size.\n * @public\n * @readonly\n * @type {Size}\n */\n public get size(): Size {\n return this.#size;\n }\n\n /**\n * @description The actual queue `Elements` state - raw `array` state of the queue.\n * @public\n * @readonly\n * @type {readonly Type[]}\n */\n public get state(): readonly Type[] {\n return this.#elements.state;\n }\n\n /**\n * @description Privately stored maximum queue size of generic type variable `Size`.\n * @type {Size}\n */\n #size: Size;\n\n /**\n * @description Privately stored `Array` queue elements state of `Elements`.\n * @type {Elements<Type>}\n */\n #elements: Elements<Type>;\n\n /**\n * Creates an instance of child class.\n * @constructor\n * @param {Size} [size=Infinity as Size] The maximum size of the `Queue`.\n * @param {...Type[]} elements The arbitrary parameters of elements of `Type` to add.\n */\n constructor(size: Size = Infinity as Size, ...elements: Type[]) {\n this.#size = size;\n this.#elements = new Elements(elements, size);\n }\n\n /**\n * @description Clears the queue.\n * @public\n * @returns {this}\n */\n public clear(): this {\n this.#elements.clear();\n return this;\n }\n\n /**\n * @description Removes and returns the first (front) element from the queue.\n * @public\n * @returns {(Type | undefined)}\n */\n public dequeue(): Type | undefined {\n const first = this.#elements.first();\n this.#elements.remove(0);\n return first;\n }\n\n /**\n * @description Adds a new element to the queue.\n * @public\n * @param {Type} element The element of `Type` to add.\n * @returns {this}\n */\n public enqueue(element: Type): this {\n if (this.isFull()) {\n throw new Error(`Queue is full.`);\n }\n this.#elements.append(element);\n return this;\n }\n\n /**\n * @description Checks if the queue is empty.\n * @public\n * @returns {boolean}\n */\n public isEmpty(): boolean {\n return this.length === 0;\n }\n\n /**\n * @description Checks if the queue is full.\n * @public\n * @returns {boolean}\n */\n public isFull(): boolean {\n return this.#elements.isFull();\n }\n\n /**\n * @description Returns the first element in the queue.\n * @public\n * @returns {Type}\n */\n public peek(): Type {\n return this.#elements.first();\n }\n}\n","// Class.\nimport { Ability as Processable, Boolean as Active, Boolean as Debug } from \"@typescript-package/state\";\nimport { Processing } from \"./processing.class\";\n// Type.\nimport { ErrorCallback, ProcessCallback } from \"../type\";\n/**\n * @description A class designed to manage and execute a collection of asynchronous tasks with concurrently control or synchronous tasks.\n * @export\n * @class Tasks\n * @template Type \n * @extends {Processable}\n */\nexport class Tasks<Type = any, Concurrency extends number = number> extends Processable {\n /**\n * @description The maximum number of elements that can be processed concurrently.\n * @public\n * @readonly\n * @type {Concurrency}\n */\n public get concurrency(): Concurrency {\n return this.#concurrency;\n }\n\n /**\n * @description Returns the processed elements.\n * @public\n * @readonly\n * @type {Set<Type>}\n */\n public get processed(): Set<Type> {\n return this.#processed;\n }\n\n /**\n * @description Returns the `Processing` object that contains active tasks.\n * @public\n * @readonly\n * @type {Processing<Type, Concurrency>}\n */\n public get processing(): Processing {\n return this.#processing;\n }\n\n /**\n * @description Active state for synchronous processing.\n * @type {Active}\n */\n #active = new Active(false);\n\n /**\n * @description Privately stored maximum number of elements that can be processed concurrently.\n * @type {Concurrency}\n */\n #concurrency: Concurrency;\n\n /**\n * @description Privately stored debug state.\n * @type {Debug}\n */\n #debug = new Debug(false);\n\n /**\n * @description A set of processed elements.\n * @type {Set<Type>}\n */\n #processed: Set<Type> = new Set();\n\n /**\n * @description Privately stored `Processing` object that contains active tasks.\n * @type {Processing}\n */\n #processing;\n\n /**\n * Creates an instance of `Tasks`.\n * @constructor\n * @param {Concurrency} concurrency \n */\n \n /**\n * Creates an instance of `Tasks`.\n * @constructor\n * @param {boolean} enabled Enable initially `Tasks` functionality.\n * @param {Concurrency} concurrency The maximum number of elements that can be processed concurrently.\n */\n constructor(enabled: boolean, concurrency: Concurrency) {\n super(enabled);\n this.#processing = new Processing();\n this.#concurrency = concurrency;\n }\n\n /**\n * @description Set the `Tasks` to debug state.\n * @public\n */\n public debug(): this {\n this.#debug.true();\n this.#processing.debug();\n return this;\n }\n\n /**\n * @description Runs asynchronous single processing on the `element`.\n * @public\n * @async\n * @param {Type} element The element to process.\n * @param {ProcessCallback<Type>} callbackFn The callback function to process the element.\n * @param {ErrorCallback<Type>} [onError] An optional error handler.\n * @returns {Promise<void>}\n */\n public async asyncProcess(\n element: Type,\n callbackFn: ProcessCallback<Type>,\n onError?: ErrorCallback<Type>,\n onProcessed?: ProcessCallback<Type>\n ): Promise<void> {\n if (this.isDisabled()) {\n throw new Error(`Enable the functionality to use the \\`asyncProcess()\\` method.`);\n }\n this.#consoleDebug(\"asyncProcess started\", { element });\n // Create a promise.\n const task = (async () => {\n try {\n this.#consoleDebug(\"Processing element:\", element);\n await callbackFn(element);\n } catch (error) {\n this.#consoleDebug(\"Error occurred during processing:\", { element, error });\n onError?.(element, error);\n } finally {\n onProcessed?.(element); // What to do with the processed\n this.#processed.add(element);\n this.#consoleDebug(\"Element processed:\", { element, processed: this.#processed.size });\n }\n })();\n // Add the task to the processing state.\n await this.#processing.add(task);\n }\n\n /**\n * @description Starts asynchronous processing elements with concurrency control.\n * @public\n * @async\n * @param {Iterable<Type>} elements The elements to process.\n * @param {ProcessCallback<Type>} callbackFn The function to process each element.\n * @param {?ErrorCallback<Type>} [onError] An optional error handler.\n * @param {('default' | 'race')} [method='default'] \n * @returns {Promise<void>} \n */\n public async asyncRun(\n elements: Iterable<Type>,\n callbackFn: ProcessCallback<Type>,\n onError?: ErrorCallback<Type>,\n onProcessed?: ProcessCallback<Type>,\n method: 'all' | 'default' | 'race' = 'default'\n ): Promise<Set<Type>> {\n if (this.isDisabled()) {\n throw new Error(`Enable the functionality to use the \\`asyncRun()\\` method.`);\n }\n this.#consoleDebug(\"asyncRun started\", { method, concurrency: this.#concurrency });\n switch(method) {\n case 'race':\n this.#consoleDebug(\"Using 'race' method\");\n for (const element of elements) {\n this.#consoleDebug(\"Processing element with 'race'\", { element, activeCount: this.#processing.activeCount });\n this.#processing.activeCount >= this.#concurrency && await Promise.race(this.#processing.state);\n this.asyncProcess(element, callbackFn, onError, onProcessed);\n }\n break\n case 'all':\n default:\n this.#consoleDebug(\"Using the 'default' / 'all' method\");\n const iterator = elements[Symbol.iterator]();\n // Create the async process for the task.\n const process = async (): Promise<void> => {\n while (this.#processing.activeCount < this.#concurrency) {\n const { value: element, done } = iterator.next();\n if (done) break;\n this.#consoleDebug(\"Processing element with default\", { element, concurrency: this.#concurrency, activeCount: this.#processing.activeCount });\n const task = this\n .asyncProcess(element, callbackFn, onError, onProcessed)\n .finally(() => (this.#processing.delete(task), process()));\n this.#consoleDebug(\"Add the processed task to the processing.\", {element, task});\n this.#processing.add(task, false);\n }\n // Wait for the tasks to finish.\n await Promise.all(this.#processing.state)\n };\n await process();\n break;\n }\n this.#consoleDebug(\"asyncRun completed\");\n await this.#processing.complete();\n return this.#processed;\n }\n\n /**\n * @description Runs a synchronous processing on the provided `element` using the `callbackFn`.\n * If an `onError` callback is provided, it will handle any errors encountered during processing.\n * @param {(Type | undefined)} element The element to be processed.\n * @param {ProcessCallback<Type>} callbackFn A function that processes the element synchronously.\n * @param {?ErrorCallback<Type>} [onError] An optional callback function to handle errors during processing.\n * @returns {this} The current instance for method chaining.\n */\n public process(\n element: Type | undefined,\n callbackFn: ProcessCallback<Type>,\n onError?: ErrorCallback<Type>,\n onProcessed?: ProcessCallback<Type>\n ): this {\n if (this.isDisabled()) {\n throw new Error(`Enable the functionality to use the \\`process()\\` method.`);\n }\n this.#consoleDebug(\"process started\", { element });\n this.#active.isFalse() && this.#active.true();\n this.#consoleDebug(\"Processing state activated\", { active: this.#active.state });\n if (element) {\n try {\n this.#consoleDebug(\"Processing element\", { element });\n callbackFn(element);\n } catch(error) {\n this.#consoleDebug(\"Error during processing\", { error, element });\n onError?.(element, error);\n } finally {\n onProcessed?.(element);\n // Add to the processed.\n this.#processed.add(element);\n this.#consoleDebug(\"Element processed\", { element, processedCount: this.#processed.size });\n this.#active.false();\n this.#consoleDebug(\"Processing state deactivated\", { active: this.#active.state });\n } \n }\n return this;\n }\n\n /**\n * @description Runs the provided `callbackFn` synchronously on each element in the `elements` iterable.\n * If an `onError` callback is provided, it will handle errors encountered during processing.\n * @public\n * @param {Iterable<Type>} elements An iterable collection of elements to be processed.\n * @param {ProcessCallback<Type>} callbackFn A function that will process each element synchronously.\n * @param {?ErrorCallback<Type>} [onError] Optional callback for handling errors that occur during processing.\n */\n public run(\n elements: Iterable<Type>,\n callbackFn: ProcessCallback<Type>,\n onError?: ErrorCallback<Type>,\n onProcessed?: ProcessCallback<Type>\n ) {\n if (this.isDisabled()) {\n throw new Error(`Enable the functionality to use the \\`run()\\` method.`);\n }\n this.#consoleDebug(\"run started\", { elements });\n for (const element of elements) {\n this.#consoleDebug(\"Processing element synchronously\", { element });\n this.process(element, callbackFn, onError, onProcessed);\n }\n this.#consoleDebug(\"run completed\");\n }\n\n /**\n * @description Unset the `Tasks` from debug state.\n * @public\n */\n public unDebug(): this {\n this.#debug.false();\n this.#processing.unDebug();\n return this;\n }\n\n /**\n * @description Console debug the important steps of the `Tasks` functionality on debug state `true`.\n * @param {string} message \n * @param {?*} [data] \n * @returns {this} \n */\n #consoleDebug(message: string, data?: any): this {\n this.#debug.isTrue() && console.debug(message, data || '');\n return this;\n }\n}\n","// Abstract.\nimport { Queue } from \"./queue.abstract\";\n// Class.\nimport { Processing } from \"./processing.class\";\nimport { Tasks } from \"./tasks.class\";\n// Type.\nimport { ErrorCallback, ProcessCallback } from \"../type\";\n/**\n * @description A task queue that processes elements concurrently with a specified concurrency limit.\n * @export\n * @class TaskQueue\n * @template Type \n * @template {number} [Concurrency=number] \n * @template {number} [Size=number] \n * @extends {Queue<Type, Size>}\n */\nexport class TaskQueue<\n Type,\n Concurrency extends number = number,\n Size extends number = number\n> extends Queue<Type, Size> {\n /**\n * @description The maximum number of elements that can be processed concurrently.\n * @public\n * @readonly\n * @type {Concurrency}\n */\n public get concurrency() {\n return this.#tasks.concurrency;\n }\n\n /**\n * @description Returns the processed elements.\n * @public\n * @readonly\n * @type {Set<Type>}\n */\n public get processed(): Set<Type> {\n return this.#tasks.processed;\n }\n\n /**\n * @description Returns the `Processing` object that contains active tasks.\n * @public\n * @readonly\n * @type {Processing<Type, Concurrency>}\n */\n public get processing(): Processing {\n return this.#tasks.processing;\n }\n\n /**\n * @description The `Tasks` object to handle the processing.\n * @type {Tasks<Type, Concurrency>}\n */\n #tasks;\n \n /**\n * Creates an instance of child class.\n * @constructor\n * @param {Concurrency} [concurrency=1 as Concurrency] \n * @param {Size} [size=Infinity as Size] \n * @param {...Type[]} elements \n */\n constructor(\n concurrency: Concurrency = 1 as Concurrency,\n size: Size = Infinity as Size,\n ...elements: Type[]\n ) {\n super(size, ...elements);\n this.#tasks = new Tasks<Type, Concurrency>(true, concurrency);\n }\n\n /**\n * @description Checks whether the queue processing is completed.\n * @public\n * @returns {boolean} \n */\n public isCompleted(): boolean {\n return super.length === 0 && this.#tasks.processing.activeCount === 0 && this.#tasks.processing.isActive(false);\n } \n \n //#region Public async\n /**\n * @description Waits for all elements in the queue to be processed and returns the set of processed elements.\n * @public\n * @async\n * @returns {Promise<Set<Type>>}\n */\n public async onCompleted(): Promise<Set<Type>> {\n return new Promise<Set<Type>>((resolve, reject) => {\n const interval = setInterval(() => \n this.#tasks.processing.isActive()\n ? super.length === 0 && resolve([] as any) // TODO: this.#tasks.processed\n : clearInterval(interval)\n , 50);\n });\n }\n\n /**\n * @description Starts asynchronous processing queue elements with concurrency control.\n * @public\n * @async\n * @param {ProcessCallback<Type>} callbackFn The function to process each element.\n * @param {?ErrorCallback<Type>} [onError] An optional error handler.\n * @returns {Promise<Set<Type>>} \n */\n public async asyncRun(\n callbackFn: ProcessCallback<Type>,\n onError?: ErrorCallback<Type>,\n ): Promise<Set<Type>> {\n const process = async () => {\n while (this.#tasks.processing.activeCount < this.#tasks.concurrency && super.length > 0) {\n const element = this.dequeue();\n if (element) {\n const task = this.#tasks\n .asyncProcess(element, callbackFn, onError)\n .finally(() => (this.#tasks.processing.delete(task), process()));\n this.#tasks.processing.add(task, false);\n }\n }\n this.#tasks.processing.activeCount > 0 && await Promise.all(this.#tasks.processing.state);\n }\n await process();\n await this.#tasks.processing.complete();\n return this.#tasks.processed;\n }\n // #endregion Public async\n\n /**\n * @description Starts processing elements in the queue using the provided callback function.\n * @public\n * @param {(element: Type) => void} callbackFn A function to process each element in the queue.\n * @param {?(element: Type, error: unknown) => void} [onError] An optional function to handle the error.\n * @returns {void) => void}\n */\n public run(callbackFn: (element: Type) => void, onError?: (element: Type, error: unknown) => void) {\n while (super.length > 0) {\n this.#tasks.process(this.dequeue(), callbackFn, onError);\n }\n }\n}\n","import { Elements } from \"./elements.class\";\nimport { Queue as AbstractQueue } from \"./queue.abstract\";\n/**\n * @description A standard LIFO (Last In, First Out) queue.\n * @export\n * @abstract\n * @class Stack\n * @template Type\n */\nexport abstract class Stack<Type, Size extends number> {\n /**\n * @description The `Elements` of array state type.\n * @public\n * @readonly\n * @type {Elements<Type>}\n */\n public get elements(): Elements<Type> {\n return this.#stack.elements;\n }\n\n /**\n * @description The actual stack length.\n * @public\n * @readonly\n * @type {number}\n */\n public get length() {\n return this.#stack.length;\n }\n\n /**\n * @description The maximum stack size.\n * @public\n * @readonly\n * @type {number}\n */\n public get size(): number {\n return this.#size;\n }\n\n /**\n * @description The actual stack `Elements` state.\n * @public\n * @readonly\n * @type {readonly Type[]}\n */\n public get state(): readonly Type[] {\n return this.#stack.elements.state;\n }\n\n /**\n * @description Privately stored maximum stack size.\n * @type {number}\n */\n #size;\n\n /**\n * @description Privately stored `Array` stack state.\n * @type {ArrayState<Type>}\n */\n #stack;\n\n /**\n * Creates an instance of `Stack`.\n * @constructor\n * @param {number} [size=Infinity]\n * @param {...Type[]} elements\n */\n constructor(size: Size = Infinity as Size, ...elements: Type[]) {\n this.#size = size;\n this.#stack = new (class Stack<Type, Size extends number> extends AbstractQueue<Type, Size> {})(size, ...elements);\n }\n\n /**\n * @description Clears the queue.\n * @public\n * @returns {this}\n */\n public clear(): this {\n this.#stack.clear();\n return this;\n }\n\n /**\n * @description Checks whether the stack is empty.\n * @public\n * @returns {boolean}\n */\n public isEmpty(): boolean {\n return this.#stack.isEmpty();\n }\n\n /**\n * @description Checks if the stack is full.\n * @public\n * @returns {boolean}\n */\n public isFull(): boolean {\n return this.#stack.isFull();\n }\n\n /**\n * @description Returns the top element on the stack.\n * @public\n * @returns {(Type | undefined)}\n */\n public peek(): Type | undefined {\n return this.#stack.elements.last();\n }\n\n /**\n * @description Removes and returns the top element from the stack.\n * @public\n * @returns {(Type | undefined)} \n */\n public pop(): Type | undefined {\n const last = this.peek();\n this.#stack.length > 0 && this.#stack.elements.remove(this.#stack.length - 1);\n return last;\n }\n\n /**\n * @description Adds a new element on the stack.\n * @public\n * @param {Type} element\n * @returns {this}\n */\n public push(element: Type): this {\n this.#stack.elements.append(element);\n return this;\n }\n}\n","// Class.\nexport { Elements } from './elements.class';\nexport { Processing } from './processing.class';\nexport { TaskQueue } from './task-queue.class';\nexport { Tasks } from './tasks.class';\n// Abstract.\nexport { Queue } from './queue.abstract';\nexport { Stack } from './stack.abstract';","/*\n * Public API Surface of queue\n */\nexport {\n // Class.\n Elements,\n Processing,\n TaskQueue,\n Tasks,\n // Abstract.\n Queue,\n Stack\n} from './lib';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Debug","Processable","Active","AbstractQueue"],"mappings":"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"}