ixfx
Version:
A framework for programming interactivity
124 lines (120 loc) • 2.72 kB
JavaScript
import {
PriorityMutable,
manual,
priority
} from "./chunk-R4JIRHLR.js";
import {
debug,
dequeue,
enqueue,
isEmpty,
isFull,
mutable,
peek,
trimQueue
} from "./chunk-VYCNRTDD.js";
import {
__export
} from "./chunk-L5EJU35C.js";
// src/collections/queue/index.ts
var queue_exports = {};
__export(queue_exports, {
PriorityMutable: () => PriorityMutable,
asResponsive: () => asResponsive,
debug: () => debug,
dequeue: () => dequeue,
enqueue: () => enqueue,
immutable: () => immutable,
isEmpty: () => isEmpty,
isFull: () => isFull,
mutable: () => mutable,
peek: () => peek,
priority: () => priority,
trimQueue: () => trimQueue
});
// src/collections/queue/QueueImmutable.ts
var QueueImmutable = class _QueueImmutable {
#data;
/**
* Creates an instance of Queue.
* @param {QueueOpts} opts Options foor queue
* @param {V[]} data Initial data. Index 0 is front of queue
*/
constructor(opts = {}, data = []) {
if (opts === void 0) throw new Error(`opts parameter undefined`);
this.opts = opts;
this.#data = data;
}
forEach(fn) {
for (let index = this.#data.length - 1; index >= 0; index--) {
fn(this.#data[index]);
}
}
forEachFromFront(fn) {
this.#data.forEach((item) => {
fn(item);
});
}
enqueue(...toAdd) {
return new _QueueImmutable(
this.opts,
enqueue(this.opts, this.#data, ...toAdd)
);
}
dequeue() {
return new _QueueImmutable(this.opts, dequeue(this.opts, this.#data));
}
get isEmpty() {
return isEmpty(this.opts, this.#data);
}
get isFull() {
return isFull(this.opts, this.#data);
}
get length() {
return this.#data.length;
}
get peek() {
return peek(this.opts, this.#data);
}
toArray() {
return [...this.#data];
}
};
var immutable = (options = {}, ...startingItems) => {
options = { ...options };
return new QueueImmutable(options, [...startingItems]);
};
// src/collections/queue/Responsive.ts
function asResponsive(queue) {
const events = manual({
onNoSubscribers() {
queue.removeEventListener(`removed`, onRemoved);
queue.removeEventListener(`enqueue`, onEnqueue);
},
onFirstSubscribe() {
queue.addEventListener(`removed`, onRemoved);
queue.addEventListener(`enqueue`, onEnqueue);
events.set(queue.toArray());
}
});
const onRemoved = (event) => {
events.set(event.finalData);
};
const onEnqueue = (event) => {
events.set(event.finalData);
};
const set = (data) => {
queue.enqueue(...data);
};
return {
...events,
set
};
}
export {
QueueImmutable,
immutable,
asResponsive,
queue_exports
};
//# sourceMappingURL=chunk-QNOJ4POP.js.map