//! SPDX-License-Identifier: GPL-3.0-or-later
export { env } from '../env.mjs'
-import { Queue } from './QUEUE.mjs'
-const queue = new Queue()
+/**
+ * Serially executes asynchronous functions.
+ */
+const queue = {
+ isIdle: true,
+ tasks: [{}],
+
+ process: function () {
+ const next = queue.tasks.shift()
+ if (next == null) return
+ const { task, resolve, reject, args } = next
+ queue.isIdle = !task
+ task?.(...args).then(resolve).catch(reject).finally(queue.process)
+ },
+
+ add: async function (task, ...args) {
+ if (typeof task !== 'function') throw new TypeError('task is not a function')
+ return new Promise((resolve, reject) => {
+ queue.tasks.push({ task, resolve, reject, args })
+ if (queue.isIdle) queue.process()
+ })
+ },
+
+ prioritize: async function (task, ...args) {
+ if (typeof task !== 'function') throw new TypeError('task is not a function')
+ return new Promise((resolve, reject) => {
+ if (typeof task !== 'function') reject('task is not a function')
+ queue.tasks.unshift({ task, resolve, reject, args })
+ if (queue.isIdle) queue.process()
+ })
+ }
+}
export const isNode = globalThis !== globalThis.window
+++ /dev/null
-//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
-//! SPDX-License-Identifier: GPL-3.0-or-later
-
-/**
- * Serially executes asynchronous functions.
- */
-export class Queue {
- #isIdle
- #queue
-
- constructor () {
- this.#isIdle = true
- this.#queue = []
- }
-
- #process = () => {
- const { task, resolve, reject, args } = this.#queue.shift() ?? {}
- this.#isIdle = !task
- task?.(...args).then(resolve).catch(reject).finally(this.#process)
- }
-
- async add (task, ...args) {
- if (typeof task !== 'function') throw new TypeError('task is not a function')
- return new Promise((resolve, reject) => {
- this.#queue.push({ task, resolve, reject, args })
- if (this.#isIdle) this.#process()
- })
- }
-
- async prioritize (task, ...args) {
- if (typeof task !== 'function') throw new TypeError('task is not a function')
- return new Promise((resolve, reject) => {
- if (typeof task !== 'function') reject('task is not a function')
- this.#queue.unshift({ task, resolve, reject, args })
- if (this.#isIdle) this.#process()
- })
- }
-}