From a5c5839336b13bc59785ac37ae801def87bd3013 Mon Sep 17 00:00:00 2001
From: J Holmes <32bitkid@gmail.com>
Date: Sat, 27 Jul 2024 14:35:17 -0600
Subject: [PATCH] Chore: moving @4bitlabs/numeric-deque and @4bitlabs/readers
to 4bitlabs.bits
---
README.md | 8 +-
libs/numeric-deque/CHANGELOG.md | 43 -
libs/numeric-deque/LICENSE.txt | 10 -
libs/numeric-deque/README.md | 58 --
libs/numeric-deque/jest.config.js | 5 -
libs/numeric-deque/package.json | 41 -
libs/numeric-deque/src/index.ts | 1 -
libs/numeric-deque/src/numeric-deque.spec.ts | 135 ---
libs/numeric-deque/src/numeric-deque.ts | 100 ---
libs/numeric-deque/tsconfig.json | 12 -
libs/readers/.gitignore | 2 -
libs/readers/CHANGELOG.md | 75 --
libs/readers/LICENSE.txt | 10 -
libs/readers/README.md | 156 ----
libs/readers/jest.config.js | 5 -
libs/readers/package.json | 30 -
libs/readers/src/async-bit-reader.spec.ts | 125 ---
libs/readers/src/async-bit-reader.ts | 107 ---
libs/readers/src/bit-reader-options.ts | 6 -
libs/readers/src/bit-reader.spec.ts | 219 -----
libs/readers/src/bit-reader.ts | 8 -
libs/readers/src/byte-reader.ts | 67 --
libs/readers/src/create-bit-reader.ts | 19 -
libs/readers/src/fast-lsb-reader.ts | 74 --
libs/readers/src/fast-msb-reader.ts | 74 --
libs/readers/src/index.ts | 5 -
libs/readers/src/lsb-reader.ts | 136 ----
libs/readers/src/msb-reader.ts | 133 ---
libs/readers/src/readonly-data-view.ts | 1 -
libs/readers/src/typed-array.ts | 5 -
libs/readers/src/utils/copy-buffer.ts | 11 -
libs/readers/tsconfig.json | 12 -
package-lock.json | 812 +++++++------------
package.json | 2 -
34 files changed, 309 insertions(+), 2198 deletions(-)
delete mode 100644 libs/numeric-deque/CHANGELOG.md
delete mode 100644 libs/numeric-deque/LICENSE.txt
delete mode 100644 libs/numeric-deque/README.md
delete mode 100644 libs/numeric-deque/jest.config.js
delete mode 100644 libs/numeric-deque/package.json
delete mode 100644 libs/numeric-deque/src/index.ts
delete mode 100644 libs/numeric-deque/src/numeric-deque.spec.ts
delete mode 100644 libs/numeric-deque/src/numeric-deque.ts
delete mode 100644 libs/numeric-deque/tsconfig.json
delete mode 100644 libs/readers/.gitignore
delete mode 100644 libs/readers/CHANGELOG.md
delete mode 100644 libs/readers/LICENSE.txt
delete mode 100644 libs/readers/README.md
delete mode 100644 libs/readers/jest.config.js
delete mode 100644 libs/readers/package.json
delete mode 100644 libs/readers/src/async-bit-reader.spec.ts
delete mode 100644 libs/readers/src/async-bit-reader.ts
delete mode 100644 libs/readers/src/bit-reader-options.ts
delete mode 100644 libs/readers/src/bit-reader.spec.ts
delete mode 100644 libs/readers/src/bit-reader.ts
delete mode 100644 libs/readers/src/byte-reader.ts
delete mode 100644 libs/readers/src/create-bit-reader.ts
delete mode 100644 libs/readers/src/fast-lsb-reader.ts
delete mode 100644 libs/readers/src/fast-msb-reader.ts
delete mode 100644 libs/readers/src/index.ts
delete mode 100644 libs/readers/src/lsb-reader.ts
delete mode 100644 libs/readers/src/msb-reader.ts
delete mode 100644 libs/readers/src/readonly-data-view.ts
delete mode 100644 libs/readers/src/typed-array.ts
delete mode 100644 libs/readers/src/utils/copy-buffer.ts
delete mode 100644 libs/readers/tsconfig.json
diff --git a/README.md b/README.md
index f1d8ba9..3a823be 100644
--- a/README.md
+++ b/README.md
@@ -4,13 +4,6 @@ A collection of packages, utilities and apps for decoding assets from
This monorepo is a work-in-progress.
-## General packages
-
-- [`@4bitlabs/readers`](./libs/readers/README.md): Basic implementations of `BitReader` in JavaScript/TypeScript.
-- [`@4bitlabs/codecs`](./libs/codecs/README.md): Some common decompression algorithms, _e.g._ `Huffman` and `LZW`.
-- [`@4bitlabs/numeric-deque`](./libs/numeric-deque/README.md): A simple, performant, general-purpose
- _deque_, backed by a `TypedArray`.
-
## Image-related packages
- [`@4bitlabs/color-space`](./libs/color-space/README.md): Utility functions for parsing, converting and mixing colors in sRGB, CIE-XYZ, CIELAB, and okLab color spaces
@@ -21,6 +14,7 @@ This monorepo is a work-in-progress.
## SCI packages
+- [`@4bitlabs/codecs`](./libs/codecs/README.md): Some common decompression algorithms, _e.g._ `Huffman` and `LZW`.
- [`@4bitlabs/sci0`](./libs/sci0/README.md): Data-structures and methods for decoding and parsing SCI0/SCI01-engine
resources.
diff --git a/libs/numeric-deque/CHANGELOG.md b/libs/numeric-deque/CHANGELOG.md
deleted file mode 100644
index 70122ca..0000000
--- a/libs/numeric-deque/CHANGELOG.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.1.6](https://github.com/32bitkid/sci.js/compare/@4bitlabs/numeric-deque@1.1.5...@4bitlabs/numeric-deque@1.1.6) (2024-06-16)
-
-### Chore
-
-- Cleaning up package.json repo links ([787872b](https://github.com/32bitkid/sci.js/commit/787872b5c232e9e14112ab3dfe09cde059987b75))
-
-## [1.1.5](https://github.com/32bitkid/sci.js/compare/@4bitlabs/numeric-deque@1.1.4...@4bitlabs/numeric-deque@1.1.5) (2024-05-28)
-
-### Chore
-
-- Code-formatting ([e209540](https://github.com/32bitkid/sci.js/commit/e20954075368b2f53b8cfb7f17896f51bad47baa))
-
-## [1.1.4](https://github.com/32bitkid/sci.js/compare/@4bitlabs/numeric-deque@1.1.3...@4bitlabs/numeric-deque@1.1.4) (2024-05-13)
-
-### Chore
-
-- Ensure numbers are properly stringified before emitting ([3a007ad](https://github.com/32bitkid/sci.js/commit/3a007ad7a200d9b2c11fa50b7287ecf28a81f7b4))
-- Removing "size" badge. Not a very good metric/representation. ([a5fc9f8](https://github.com/32bitkid/sci.js/commit/a5fc9f8a9d65a64a8ce9330c620e359cf2b17ac7))
-- updating README files ([095d19a](https://github.com/32bitkid/sci.js/commit/095d19af411d091c4315da129312e1d063bd2e39))
-- Wrap void predicates in code-blocks ([3a35456](https://github.com/32bitkid/sci.js/commit/3a35456d383e1287e709f86e50b85f76b7bbbc13))
-
-## [1.1.3](https://github.com/32bitkid/sci.js/compare/@4bitlabs/numeric-deque@1.1.2...@4bitlabs/numeric-deque@1.1.3) (2024-04-05)
-
-### Chore
-
-- rely on lerna/nx for build asset better caching ([ae1ae1e](https://github.com/32bitkid/sci.js/commit/ae1ae1eb4ead8e89a4d53ea0bcfcbc8e107b1488))
-
-### Update
-
-- @4bitlabs/bnumeric-deque readme updated ([63e9bef](https://github.com/32bitkid/sci.js/commit/63e9befe88691a34b2f8e6fa3d1b12027a785543))
-
-## 1.1.2 (2024-03-22)
-
-- Chore: update repo and bugs properties in package.json ([d426943](https://github.com/32bitkid/sci.js/commit/d426943))
-
-## 1.0.1 (2024-03-14)
-
-- Chore: add "clean:wipe" script ([016a33f](https://github.com/32bitkid/sci.js/commit/016a33f))
diff --git a/libs/numeric-deque/LICENSE.txt b/libs/numeric-deque/LICENSE.txt
deleted file mode 100644
index 52422ee..0000000
--- a/libs/numeric-deque/LICENSE.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Copyright (c) 2024, J. Holmes
-
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
-provided that the above copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
\ No newline at end of file
diff --git a/libs/numeric-deque/README.md b/libs/numeric-deque/README.md
deleted file mode 100644
index ada03cb..0000000
--- a/libs/numeric-deque/README.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# @4bitlabs/numeric-deque [![License][license]][npm] [![NPM Version][version]][npm] [![NPM Downloads][dl]][npm]
-
-[npm]: https://www.npmjs.com/package/@4bitlabs/numeric-deque
-[version]: https://img.shields.io/npm/v/%404bitlabs%2Fnumeric-deque
-[license]: https://img.shields.io/npm/l/%404bitlabs%2Fnumeric-deque
-[dl]: https://img.shields.io/npm/dy/%404bitlabs%2Fnumeric-deque
-
-A numeric-container backed by a TypedArray ring-buffer. Implements both stack (FILO) and queue (FIFO) methods, a.k.a. _a [deque](https://en.wikipedia.org/wiki/Double-ended_queue)_.
-
-## Basic Usage
-
-```ts
-import { NumericDeque } from '@4bitlabs/numeric-deque';
-
-// Create a numeric deque to hold *atleast* 10 items.
-const deque = new NumericDeque(10);
-
-deque.push(2);
-deque.push(3);
-deque.push(4);
-deque.unshift(1);
-
-while (!deque.isEmpty()) {
- console.log(deque.shift());
-}
-
-// Output: 1, 2, 3, 4
-```
-
-Note, the capacity given to the constructor is the minimum _required_ capacity. The _actual_ capacity of the deque
-_may_ be larger.
-
-### Peek
-
-```ts
-const deque = new NumericDeque(10);
-
-deque.push(1);
-deque.push(2);
-deque.push(3);
-deque.push(4);
-
-console.log(deque.peekHead()); // 1
-console.log(deque.peekTail()); // 4
-```
-
-## `TypedArray` backed deques
-
-By the default, the ring-buffer is backed by `Float64Array`, however, you can any of the numeric `TypedArrays` for your
-backing buffer:
-
-```ts
-import { NumericDeque } from '@4bitlabs/numeric-deque';
-
-const bytes = new NumericDeque(300, Uint8ClampedArray);
-const signedData = new NumericDeque(16, Int16Array);
-const buffer = new NumericDeque(2_000, Uint32Array);
-```
diff --git a/libs/numeric-deque/jest.config.js b/libs/numeric-deque/jest.config.js
deleted file mode 100644
index e86e13b..0000000
--- a/libs/numeric-deque/jest.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-};
diff --git a/libs/numeric-deque/package.json b/libs/numeric-deque/package.json
deleted file mode 100644
index 177cff7..0000000
--- a/libs/numeric-deque/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "name": "@4bitlabs/numeric-deque",
- "version": "1.1.6",
- "description": "A numeric container backed by a TypedArray ring buffer, with both stack (FILO) and queue (FIFO) methods.",
- "keywords": [
- "queue",
- "TypedArray",
- "Uint8Array",
- "Uint8ClampedArray",
- "Uint16Array",
- "Uint32Array",
- "Int8Array",
- "Int16Array",
- "Int32Array",
- "Float32Array",
- "Float64Array",
- "filo",
- "fifo"
- ],
- "main": "./dist/index.js",
- "types": "./dist/index.d.ts",
- "homepage": "https://github.com/32bitkid/sci.js/tree/main/libs/numeric-deque#readme",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/32bitkid/sci.js.git"
- },
- "bugs": {
- "url": "https://github.com/32bitkid/sci.js/issues"
- },
- "files": [
- "./dist/**/*"
- ],
- "scripts": {
- "clean": "tsc --build --clean",
- "clean:wipe": "rimraf ./dist",
- "build": "tsc --build",
- "test": "jest src/"
- },
- "author": "J. Holmes ",
- "license": "ISC"
-}
diff --git a/libs/numeric-deque/src/index.ts b/libs/numeric-deque/src/index.ts
deleted file mode 100644
index 71dfd65..0000000
--- a/libs/numeric-deque/src/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { NumericDeque } from './numeric-deque';
diff --git a/libs/numeric-deque/src/numeric-deque.spec.ts b/libs/numeric-deque/src/numeric-deque.spec.ts
deleted file mode 100644
index 34707fc..0000000
--- a/libs/numeric-deque/src/numeric-deque.spec.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-import { NumericDeque } from './numeric-deque';
-
-describe('NumericDeque', () => {
- it('should pop values off the front of the deque', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.push(2);
- d.push(3);
- d.push(4);
- expect(d.pop()).toBe(4);
- expect(d.pop()).toBe(3);
- expect(d.pop()).toBe(2);
- expect(d.pop()).toBe(1);
- });
-
- it('should shift values off the front of the deque', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.push(2);
- d.push(3);
- d.push(4);
- expect(d.shift()).toBe(1);
- expect(d.shift()).toBe(2);
- expect(d.shift()).toBe(3);
- expect(d.shift()).toBe(4);
- });
-
- it('should unshift values onto the front of the deque', () => {
- const d = new NumericDeque(4);
- d.unshift(1);
- d.unshift(2);
- d.unshift(3);
- d.unshift(4);
- expect(d.pop()).toBe(1);
- expect(d.pop()).toBe(2);
- expect(d.pop()).toBe(3);
- expect(d.pop()).toBe(4);
- });
-
- describe('push', () => {
- it('should throw when full', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.push(2);
- d.push(3);
- d.push(4);
- expect(() => {
- d.push(5);
- }).toThrow();
- });
- });
-
- describe('unshift', () => {
- it('should throw when full', () => {
- const d = new NumericDeque(4);
- d.unshift(1);
- d.unshift(2);
- d.unshift(3);
- d.unshift(4);
- expect(() => {
- d.unshift(5);
- }).toThrow();
- });
- });
-
- describe('shift', () => {
- it('should throw when exhausted', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.shift();
- expect(() => d.shift()).toThrow();
- });
- });
-
- describe('pop', () => {
- it('should throw when exhausted', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.pop();
- expect(() => d.pop()).toThrow();
- });
- });
-
- it('should be able to refill', () => {
- const d = new NumericDeque(4);
-
- d.push(1);
- d.push(2);
- d.push(3);
- expect(d.shift()).toBe(1);
- expect(d.pop()).toBe(3);
- expect(d.shift()).toBe(2);
-
- d.push(4);
- d.push(5);
- d.push(6);
- expect(d.pop()).toBe(6);
- expect(d.shift()).toBe(4);
- expect(d.pop()).toBe(5);
- });
-
- it('should know when its empty', () => {
- const d = new NumericDeque(4);
- expect(d.isEmpty()).toBeTruthy();
- d.push(1);
- expect(d.isEmpty()).toBeFalsy();
- d.shift();
- expect(d.isEmpty()).toBeTruthy();
- d.unshift(1);
- expect(d.isEmpty()).toBeFalsy();
- d.pop();
- expect(d.isEmpty()).toBeTruthy();
- });
-
- it('should be able to peek at the ends', () => {
- const d = new NumericDeque(4);
- d.push(1);
- d.push(2);
- d.push(3);
- d.push(4);
-
- expect(d.peekHead()).toBe(1);
- expect(d.peekTail()).toBe(4);
- });
-
- describe('TypedArray', () => {
- it('should respect other typed-arrays', () => {
- const d = new NumericDeque(10, Uint8ClampedArray);
- d.push(400);
- expect(d.pop()).toBe(255);
- d.push(-50);
- expect(d.pop()).toBe(0);
- });
- });
-});
diff --git a/libs/numeric-deque/src/numeric-deque.ts b/libs/numeric-deque/src/numeric-deque.ts
deleted file mode 100644
index 4f53bd5..0000000
--- a/libs/numeric-deque/src/numeric-deque.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-type TypeArrayConstructor =
- | Uint8ArrayConstructor
- | Uint8ClampedArrayConstructor
- | Uint16ArrayConstructor
- | Uint32ArrayConstructor
- | Int8ArrayConstructor
- | Int16ArrayConstructor
- | Int32ArrayConstructor
- | Float32ArrayConstructor
- | Float64ArrayConstructor;
-
-type BufferType =
- | Uint8Array
- | Uint8ClampedArray
- | Uint16Array
- | Uint32Array
- | Int8Array
- | Int16Array
- | Int32Array
- | Float32Array
- | Float64Array;
-
-const MAX_SAFE_DWORD = ~0 >>> 0;
-
-export class NumericDeque {
- private head = 0;
- private tail = 0;
- private size = 0;
- private readonly mask: number;
- private readonly capacity: number;
- private readonly buffer: BufferType;
-
- constructor(minSize: number, Buffer: TypeArrayConstructor = Float64Array) {
- if (minSize <= 1)
- throw new Error(`Out of bounds: ${minSize.toString(10)} <= 1`);
- if (minSize > MAX_SAFE_DWORD)
- throw new Error(
- `Out of bounds: ${minSize.toString(10)} > ${MAX_SAFE_DWORD.toString(10)}`,
- );
-
- this.capacity = 2 ** (32 - Math.clz32(minSize - 1));
- this.mask = ~0 >>> Math.clz32(minSize - 1);
- this.buffer = new Buffer(this.capacity);
- }
-
- get length() {
- return this.size;
- }
-
- isEmpty(): boolean {
- return this.size === 0;
- }
-
- push(value: number) {
- if (this.size + 1 > this.capacity)
- throw new Error('overflow: queue is full');
-
- this.buffer[this.tail] = value;
- this.tail = (this.tail + 1) & this.mask;
- this.size++;
- }
-
- pop(): number {
- if (this.size === 0) throw new Error('underflow: queue is empty');
- this.tail = (this.tail - 1) & this.mask;
- this.size--;
- return this.buffer[this.tail];
- }
-
- unshift(value: number) {
- if (this.size + 1 > this.capacity)
- throw new Error('overflow: queue is full');
-
- this.head = (this.head - 1) & this.mask;
- this.size++;
- this.buffer[this.head] = value;
- }
-
- shift(): number {
- if (this.size === 0) throw new Error('underflow: queue is empty');
- const value = this.buffer[this.head];
- this.head = (this.head + 1) & this.mask;
- this.size--;
- return value;
- }
-
- peekHead(): number {
- return this.buffer[this.head];
- }
-
- peekTail(): number {
- return this.buffer[(this.tail - 1) & this.mask];
- }
-
- clear(): void {
- this.head = 0;
- this.tail = 0;
- this.size = 0;
- }
-}
diff --git a/libs/numeric-deque/tsconfig.json b/libs/numeric-deque/tsconfig.json
deleted file mode 100644
index d9b2aa3..0000000
--- a/libs/numeric-deque/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist/"
- },
- "include": ["src/**/*"],
- "exclude": [
- "src/**/*.spec.ts",
- "src/**/*.test.ts",
- "src/__tests__/**/*.ts"
- ]
-}
diff --git a/libs/readers/.gitignore b/libs/readers/.gitignore
deleted file mode 100644
index 1e56271..0000000
--- a/libs/readers/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-perf/
-
diff --git a/libs/readers/CHANGELOG.md b/libs/readers/CHANGELOG.md
deleted file mode 100644
index 7fb0d96..0000000
--- a/libs/readers/CHANGELOG.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [2.0.6](https://github.com/32bitkid/sci.js/compare/@4bitlabs/readers@2.0.5...@4bitlabs/readers@2.0.6) (2024-06-16)
-
-### Chore
-
-- Cleaning up package.json repo links ([787872b](https://github.com/32bitkid/sci.js/commit/787872b5c232e9e14112ab3dfe09cde059987b75))
-
-## [2.0.5](https://github.com/32bitkid/sci.js/compare/@4bitlabs/readers@2.0.4...@4bitlabs/readers@2.0.5) (2024-05-13)
-
-### Chore
-
-- Ensure numbers are properly stringified before emitting ([3a007ad](https://github.com/32bitkid/sci.js/commit/3a007ad7a200d9b2c11fa50b7287ecf28a81f7b4))
-- Removing "size" badge. Not a very good metric/representation. ([a5fc9f8](https://github.com/32bitkid/sci.js/commit/a5fc9f8a9d65a64a8ce9330c620e359cf2b17ac7))
-- updating README files ([095d19a](https://github.com/32bitkid/sci.js/commit/095d19af411d091c4315da129312e1d063bd2e39))
-- Use "this" return type for method chaining ([cf350f8](https://github.com/32bitkid/sci.js/commit/cf350f881f29379fd7ed29055c8a63d3708babc3))
-
-## [2.0.4](https://github.com/32bitkid/sci.js/compare/@4bitlabs/readers@2.0.3...@4bitlabs/readers@2.0.4) (2024-04-05)
-
-### Chore
-
-- enable no-shadow rule ([2ea836a](https://github.com/32bitkid/sci.js/commit/2ea836add49b0a30810a2241d400ca38e0b0b1ed))
-- rely on lerna/nx for build asset better caching ([ae1ae1e](https://github.com/32bitkid/sci.js/commit/ae1ae1eb4ead8e89a4d53ea0bcfcbc8e107b1488))
-
-## 2.0.3 (2024-03-22)
-
-- Chore: small tweak to reader CHANGELOG ([5ba6796](https://github.com/32bitkid/sci.js/commit/5ba6796))
-- Chore: update repo and bugs properties in package.json ([d426943](https://github.com/32bitkid/sci.js/commit/d426943))
-
-## 2.0.2 (2024-03-14)
-
-- Chore: add "clean:wipe" script ([016a33f](https://github.com/32bitkid/sci.js/commit/016a33f))
-
-## 2.0.0
-
-### Changed
-
-- `BitReader` class has been replaced with an interface
-- `createBitReader()` method now handles using the proper implementation based on configuration flags
-
-### Added
-
-- `fast` flag when creating a bit-reader. Uses an implementation that is slightly faster, at the cost of memory
- efficiency/duplication.
-
- ```ts
- import { createBitReader } from '@4bitlabs/readers';
-
- const br = createBitReader(data, { fast: true });
- ```
-
-## 1.2.0
-
-### Fixed
-
-- Fixed bug in _least-significant_ byte ordering reads across byte-boundaries.
-
-## 1.1.0
-
-### Changed
-
-- Performance improvements to `BitReader`. Using single DWORD reads when possible.
-- Loosen the `bytes` typescript type to be any _typed-array_ or `DataView`.
-
-## 1.0.0
-
-Initial release.
-
-### Added
-
-- `BitReader` implementation.
-- `AsyncBitReader` implementation.
diff --git a/libs/readers/LICENSE.txt b/libs/readers/LICENSE.txt
deleted file mode 100644
index 6ddc8e3..0000000
--- a/libs/readers/LICENSE.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Copyright (c) 2023, J. Holmes
-
-Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
-provided that the above copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
-THIS SOFTWARE.
\ No newline at end of file
diff --git a/libs/readers/README.md b/libs/readers/README.md
deleted file mode 100644
index af1b20e..0000000
--- a/libs/readers/README.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# @4bitlabs/readers [![License][license]][npm] [![NPM Version][version]][npm] [![NPM Downloads][dl]][npm]
-
-[npm]: https://www.npmjs.com/package/@4bitlabs/readers
-[version]: https://img.shields.io/npm/v/%404bitlabs%2Freaders
-[license]: https://img.shields.io/npm/l/%404bitlabs%2Freaders
-[dl]: https://img.shields.io/npm/dy/%404bitlabs%2Freaders
-
-A collection of bit-readers for javascript and typescript.
-
-## Installation
-
-```sh
-# npm
-❯ npm install --save @4bitlabs/readers
-
-# yarn
-❯ yarn add @4bitlabs/readers
-```
-
-## Usage
-
-```js
-import { createBitReader } from '@4bitlabs/readers';
-const reader = createBitReader(sourceData);
-
-// ...
-
-const firstTenBits = reader.read32(10);
-```
-
-## What is a bit-reader?
-
-A bit-reader allows for bits level access to a sequence of bytes, allowing bit-level reads that easily cross byte-level
-boundaries. You can think of a bit-reader like a long sequence of bits that can be _shifted_ off, providing access to
-later bits. Consider:
-
-```js
-const source = Uint8Array.of(0b1111_0011, 0b1100_1111, 0b1010_1010);
-```
-
-If you wanted the _most-significant_ 4-bits of this byte sequence, you could use a bitmask and a bitwise shifts:
-
-```js
-const value = (source[0] & 0b1111_0000) >>> 4; // 15
-```
-
-This can be useful for simple encoded data, however, can become unweildly when crossing multiple bytes. Let's say you
-wanted to get the bits
-
-```text
- From To
- |-------------|
- v v
-0b1111_0011_1100_1111_1010_1010
-```
-
-With bitwise operators on a `Uint8Array`, you'd have to:
-
-```js
-const value =
- // select and shift the most-significant bits
- ((source[0] & 0b0000_0011) << 10) |
- // select and shift the middle bits
- (source[1] << 2) |
- // select and shift the least-significant bits
- ((source[2] & 0b1100_0000) >>> 6);
-```
-
-With a bit-reader, you can instead say:
-
-```js
-const reader = createBitReader(source);
-reader.skip(6); // skip the first 6 bits
-const value = reader.read(12); // take the next 12 bits
-```
-
-This can be very useful when parsing densely-packed data-structures, especially when they use _variable-length_ encoding.
-
-## `BitReader` API
-
-`BitReader` is the interface that provides a bit-reader that sequentially reads bits from an `Uint8Array` source.
-
-```js
-const source = Uint8Array.of(0b1110_0001);
-const br = createBitReader(source);
-
-br.read32(3); // 0b111
-br.read32(1); // 0b0
-br.read32(3); // 0b000
-br.read32(1); // 0b1
-```
-
-The default behavior to read **most-significant bits** first, however, you can select reading from the
-**least-significant** side:
-
-```js
-const source = Uint8Array.of(0b1110_0001);
-const r = createBitReader(source, { mode: 'lsb' });
-
-br.read32(3); // 0b001
-br.read32(1); // 0b0
-br.read32(3); // 0b110
-br.read32(1); // 0b1
-```
-
-### Instance properties
-
-#### `r.peek32(n: number): number`
-
-Peek `n` bits in the bit-stream.
-
-#### `r.skip(n: number): BitReader`
-
-Skip `n` bits in the bit-stream.
-
-#### `r.read32(n: number): number`
-
-Read `n` bits from the bit-stream. Shorthand for:
-
-```ts
-const value = reader.peek32(n);
-reader.skip(n);
-```
-
-#### `r.seek(offset: number): BitReader`
-
-Seek to an arbitrary _byte_-position in the underlying `ArrayBuffer`, always from the _beginning_ of the byte-array.
-
-#### `r.isByteAligned(): boolean`
-
-Returns `true` if the bit-reader is _currently_ aligned to a byte
-
-#### `r.align(): BitReader`
-
-Re-aligns to the nearest _next_ byte-boundary in the bit-stream.
-
-## `AsyncBitReader`
-
-`AsyncBitReader` provides a bit-reader that sequentially reads bits from an `AsyncIterable`. This allows it to consume
-bytes from a variety of sources, from files and network sources. For instance:
-
-```js
-import fs from 'node:fs';
-import { AsyncBitReader } from '@4bitlabs/readers';
-
-const source = fs.createReadStream(path, { encoding: 'utf-8' });
-const reader = new AsyncBitReader(source);
-/* ...start reading! */
-```
-
-## Limitations
-
-As of the _initial_ version, both `MsbReader` and `AsyncBitReader` only support a maximum of **32-bit** reads at time.
-However, those **32-bits** do not need to be _byte-aligned_ bits, and can occur anywhere in the bitstream. This limitation
-is due to the precision of the bitwise operators in javascript. In the future, this might be addressed to allow for
-53-bit reads, the maximum-safe integer size for double-precision numbers.
diff --git a/libs/readers/jest.config.js b/libs/readers/jest.config.js
deleted file mode 100644
index e86e13b..0000000
--- a/libs/readers/jest.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
-module.exports = {
- preset: 'ts-jest',
- testEnvironment: 'node',
-};
diff --git a/libs/readers/package.json b/libs/readers/package.json
deleted file mode 100644
index ce60200..0000000
--- a/libs/readers/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "@4bitlabs/readers",
- "version": "2.0.6",
- "description": "A collection of low-level bit-readers for byte-arrays",
- "keywords": [
- "bitreader",
- "bits"
- ],
- "main": "./dist/index.js",
- "types": "./dist/index.d.ts",
- "homepage": "https://github.com/32bitkid/sci.js/tree/main/libs/readers#readme",
- "repository": {
- "type": "git",
- "url": "git+https://github.com/32bitkid/sci.js.git"
- },
- "bugs": {
- "url": "https://github.com/32bitkid/sci.js/issues"
- },
- "files": [
- "./dist/**/*"
- ],
- "scripts": {
- "clean": "tsc --build --clean",
- "clean:wipe": "rimraf ./dist",
- "build": "tsc --build",
- "test": "jest src/"
- },
- "author": "J. Holmes ",
- "license": "ISC"
-}
diff --git a/libs/readers/src/async-bit-reader.spec.ts b/libs/readers/src/async-bit-reader.spec.ts
deleted file mode 100644
index 0be3594..0000000
--- a/libs/readers/src/async-bit-reader.spec.ts
+++ /dev/null
@@ -1,125 +0,0 @@
-import { Readable } from 'stream';
-
-import { AsyncBitReader } from './async-bit-reader';
-
-const readerOf = (bytes: Uint8Array | number[], times = 1): Readable => {
- let count = 0;
- return new Readable({
- read() {
- if (count >= times) return null;
- this.push(bytes);
- count += 1;
- },
- });
-};
-
-describe('AsyncBitReader', () => {
- describe('peek', () => {
- describe('with a buffer with all zeroes', () => {
- it.each<[number, number]>(
- Array(32)
- .fill(0)
- .map((_, i) => [0, i]),
- )('should return %s when peeking %s bits', async (expected, n) => {
- const br = new AsyncBitReader(readerOf(Uint8Array.of(0x00), Infinity));
- expect(await br.peek32(n)).toBe(expected);
- });
- });
-
- describe('with a buffer with all ones', () => {
- it.each<[number, number]>(
- Array(32)
- .fill(0)
- .map((_, i) => [2 ** i - 1, i]),
- )('should return %s when peeking %s bits', async (expected, n) => {
- const br = new AsyncBitReader(readerOf(Uint8Array.of(0xff), Infinity));
- expect(await br.peek32(n)).toBe(expected);
- });
- });
-
- it('should peek different lengths into a byte', async () => {
- const bytes = [0b1000_1000];
- const br = new AsyncBitReader(readerOf(Uint8Array.from(bytes)));
- expect(await br.peek32(1)).toBe(0b1);
- expect(await br.peek32(2)).toBe(0b10);
- expect(await br.peek32(3)).toBe(0b100);
- expect(await br.peek32(4)).toBe(0b1000);
- expect(await br.peek32(5)).toBe(0b1000_1);
- expect(await br.peek32(6)).toBe(0b1000_10);
- expect(await br.peek32(7)).toBe(0b1000_100);
- expect(await br.peek32(8)).toBe(0b1000_1000);
- });
- });
-
- describe('skip', () => {
- it.each<[number, number[]]>([
- [0, [0b1000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [3, [0b0001_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [7, [0b0000_0001, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [16, [0b0000_0000, 0b0000_0000, 0b1000_0000, 0b0000_0000]],
- [31, [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0001]],
- ])('should skip %s bits', async (n, data) => {
- const br = new AsyncBitReader(readerOf(Uint8Array.from(data)));
- await br.skip(n);
- expect(await br.peek32(1)).toBe(1);
- });
-
- it('should handle multiple fills', async () => {
- const data = Array(8).fill(0);
- data[4] = 0b0000_1000;
- const br = new AsyncBitReader(readerOf(Uint8Array.from(data)));
- await br.skip(4);
- await br.skip(32);
- expect(await br.peek32(1)).toBe(1);
- });
- });
-
- describe('read', () => {
- it.each<[number, number[]]>([
- [0, [0b1000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [3, [0b0001_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [7, [0b0000_0001, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [12, [0b0000_0000, 0b0000_1000, 0b0000_0000, 0b0000_0000]],
- [31, [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0001]],
- ])('should skip %s bits', async (n, data) => {
- const br = new AsyncBitReader(readerOf(Uint8Array.from(data)));
- expect(await br.read32(n)).toBe(0);
- expect(await br.read32(1)).toBe(1);
- expect(await br.read32(32 - n - 1)).toBe(0);
- });
- });
-
- describe('alignment', () => {
- it('should know when its aligned', async () => {
- const br = new AsyncBitReader(readerOf(new Uint8Array(8)));
- expect(br.isByteAligned()).toBeTruthy();
- await br.skip(10);
- expect(br.isByteAligned()).toBeFalsy();
- await br.skip(6);
- expect(br.isByteAligned()).toBeTruthy();
- await br.skip(32);
- expect(br.isByteAligned()).toBeTruthy();
- await br.skip(3);
- expect(br.isByteAligned()).toBeFalsy();
- });
-
- it('align itself to the next byte', async () => {
- const bytes = Uint8Array.from([
- 0b1000_0000, 0b0000_0000, 0b1000_0000, 0b0000_0000, 0b0000_0000,
- 0b1000_0000,
- ]);
- const br = new AsyncBitReader(readerOf(bytes));
- br.align();
- expect(await br.peek32(1)).toBe(1);
- await br.skip(1);
- br.align();
- expect(await br.peek32(1)).toBe(0);
- await br.skip(8);
- br.align();
- expect(await br.peek32(1)).toBe(1);
- await br.skip(22);
- br.align();
- expect(await br.peek32(1)).toBe(1);
- });
- });
-});
diff --git a/libs/readers/src/async-bit-reader.ts b/libs/readers/src/async-bit-reader.ts
deleted file mode 100644
index c2ac9fd..0000000
--- a/libs/readers/src/async-bit-reader.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-export class AsyncBitReader {
- private readonly r: AsyncIterator;
-
- private bytes: Uint8Array = Uint8Array.of();
- private idx: number = 0;
- private bitsRemaining: number = 0;
-
- private bitBuffer: number = 0;
-
- constructor(r: AsyncIterable) {
- this.r = r[Symbol.asyncIterator]();
- }
-
- isByteAligned(): boolean {
- return (this.bitsRemaining & 0b111) === 0;
- }
-
- align(): this {
- this._trash(this.bitsRemaining & 0b111);
- return this;
- }
-
- async peek32(n: number): Promise {
- if (n > 32 || n < 0) throw new Error('Out of range');
- if (n === 0) return 0;
- await this._fill(n);
- return this.bitBuffer >>> (32 - n);
- }
-
- async skip(n: number): Promise {
- if (n < 0) throw new Error('Out of range');
-
- let bitsToSkip = n;
- if (bitsToSkip > this.bitsRemaining) {
- bitsToSkip -= this.bitsRemaining;
-
- this.bitBuffer = 0;
- this.bitsRemaining = 0;
-
- let bytesToSkip = bitsToSkip >>> 3;
- bitsToSkip &= 0b111;
-
- while (bytesToSkip > 0) {
- if (bytesToSkip < this.bytes.length - this.idx) {
- this.idx += bytesToSkip;
- bytesToSkip = 0;
- } else {
- bytesToSkip -= this.bytes.length - this.idx;
- await this._nextChunk();
- }
- }
- }
-
- if (bitsToSkip > 0) {
- await this._fill(bitsToSkip);
- this._trash(bitsToSkip);
- }
- }
-
- async read32(n: number): Promise {
- const result = await this.peek32(n);
- this._trash(n);
- return result;
- }
-
- private _trash(n: number): void {
- if (n < 0) throw new Error('Out of range');
- if (n > this.bitsRemaining) throw new Error('Out of range');
- if (n === 32) {
- this.bitBuffer = 0;
- this.bitsRemaining = 0;
- } else {
- this.bitBuffer <<= n;
- this.bitsRemaining -= n;
- }
- }
-
- private async _fill(n: number): Promise {
- if (n <= this.bitsRemaining) return;
-
- const total = (32 - this.bitsRemaining) >>> 3;
-
- for (let i = 0; i < total; i++) {
- const pos = 32 - 8 - this.bitsRemaining;
-
- if (this.bytes.length <= this.idx) {
- if (this.bitsRemaining > n) return;
- await this._nextChunk();
- }
-
- this.bitBuffer |= this.bytes[this.idx] << pos;
- this.idx += 1;
- this.bitsRemaining += 8;
- }
- }
-
- private async _nextChunk(): Promise {
- const result = await this.r.next();
- if (result.done) throw new Error('EOF');
- const chunk = result.value;
- this.bytes =
- typeof chunk !== 'string'
- ? chunk
- : Uint8Array.from([...chunk].map((x) => x.charCodeAt(0)));
- this.idx = 0;
- }
-}
diff --git a/libs/readers/src/bit-reader-options.ts b/libs/readers/src/bit-reader-options.ts
deleted file mode 100644
index f2e67da..0000000
--- a/libs/readers/src/bit-reader-options.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export type BitReaderMode = 'msb' | 'lsb';
-
-export interface BitReaderOptions {
- mode?: BitReaderMode;
- fast?: boolean;
-}
diff --git a/libs/readers/src/bit-reader.spec.ts b/libs/readers/src/bit-reader.spec.ts
deleted file mode 100644
index e261054..0000000
--- a/libs/readers/src/bit-reader.spec.ts
+++ /dev/null
@@ -1,219 +0,0 @@
-import { FastLsbReader } from './fast-lsb-reader';
-import { FastMsbReader } from './fast-msb-reader';
-import { LsbReader } from './lsb-reader';
-import { MsbReader } from './msb-reader';
-
-describe.each([
- ['MsbReader', MsbReader],
- ['FastMsbReader', FastMsbReader],
-])('Most-Significant Bit first: %s', (_, BitReader) => {
- describe('peek', () => {
- describe('with a buffer with all zeroes', () => {
- const bytes = new Uint8Array(4);
- it.each<[number, number]>(
- Array(31)
- .fill(0)
- .map((_, i) => [0, i + 1]),
- )('should return %s when peeking %s bits', (expected, n) => {
- const br = new BitReader(bytes);
- expect(br.peek32(n)).toBe(expected);
- });
- });
-
- describe('with a buffer with all ones', () => {
- const bytes = Uint8Array.from(Array(4).fill(0xff));
- it.each<[number, number]>(
- Array(32)
- .fill(0)
- .map((_, i) => [2 ** i - 1, i]),
- )('should return %s when peeking %s bits', (expected, n) => {
- const br = new BitReader(bytes);
- expect(br.peek32(n)).toBe(expected);
- });
- });
-
- it('should peek different lengths into a byte', () => {
- const bytes = [0b1000_1000];
- const br = new BitReader(Uint8Array.from(bytes));
- expect(br.peek32(1)).toBe(0b1);
- expect(br.peek32(2)).toBe(0b10);
- expect(br.peek32(3)).toBe(0b100);
- expect(br.peek32(4)).toBe(0b1000);
- expect(br.peek32(5)).toBe(0b1000_1);
- expect(br.peek32(6)).toBe(0b1000_10);
- expect(br.peek32(7)).toBe(0b1000_100);
- expect(br.peek32(8)).toBe(0b1000_1000);
- });
- });
-
- describe('skip', () => {
- it.each<[number, number[]]>([
- [0, [0b1000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [3, [0b0001_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [7, [0b0000_0001, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [16, [0b0000_0000, 0b0000_0000, 0b1000_0000, 0b0000_0000]],
- [31, [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0001]],
- ])('should skip %s bits', (n, data) => {
- const br = new BitReader(Uint8Array.from(data));
- br.skip(n);
- expect(br.peek32(1)).toBe(1);
- });
-
- it('should handle multiple fills', () => {
- const data = Array(8).fill(0);
- data[4] = 0b0000_1000;
- const br = new BitReader(Uint8Array.from(data));
- br.skip(4);
- br.skip(32);
- expect(br.peek32(1)).toBe(1);
- });
- });
-
- describe('read', () => {
- it.each<[number, number[]]>([
- [0, [0b1000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [3, [0b0001_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [7, [0b0000_0001, 0b0000_0000, 0b0000_0000, 0b0000_0000]],
- [12, [0b0000_0000, 0b0000_1000, 0b0000_0000, 0b0000_0000]],
- [31, [0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0001]],
- ])('should skip %s bits', (n, data) => {
- const br = new BitReader(Uint8Array.from(data));
- expect(br.read32(n)).toBe(0);
- expect(br.read32(1)).toBe(1);
- expect(br.read32(32 - n - 1)).toBe(0);
- });
-
- it('should read 11 bytes without going bonkers', () => {
- const br = new BitReader(
- Uint8Array.of(
- 0b0000_0000,
- 0b1000_0000,
- 0b0100_0000,
- 0b0010_0000,
- 0b0001_0000,
- 0b0000_1000,
- 0b0000_0100,
- 0b0000_0010,
- 0b0000_0001,
- 0b0000_0000,
- 0b1000_0000,
- ),
- );
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- expect(br.read32(9)).toBe(1);
- });
- });
-
- describe('seek', () => {
- it('should move around', () => {
- const data = new Uint8Array(64);
- data[0] = 0b1000_0000;
- data[16] = 0b1000_0000;
- data[22] = 0b0000_1000;
- data[60] = 0b0010_0000;
-
- const br = new BitReader(data);
- expect(br.seek(16).peek32(1)).toBe(1);
- expect(br.seek(22).skip(4).peek32(1)).toBe(1);
- expect(br.seek(60).skip(2).peek32(1)).toBe(1);
- expect(br.seek(0).peek32(1)).toBe(1);
- });
- });
-
- describe('alignment', () => {
- it('should know when its aligned', () => {
- const br = new BitReader(new Uint8Array(8));
- expect(br.isByteAligned()).toBeTruthy();
- expect(br.skip(10).isByteAligned()).toBeFalsy();
- expect(br.skip(6).isByteAligned()).toBeTruthy();
- expect(br.skip(32).isByteAligned()).toBeTruthy();
- expect(br.skip(3).isByteAligned()).toBeFalsy();
- });
-
- it('align itself to the next byte', () => {
- const br = new BitReader(
- Uint8Array.from([
- 0b1000_0000, 0b0000_0000, 0b1000_0000, 0b0000_0000, 0b0000_0000,
- 0b1000_0000,
- ]),
- );
- expect(br.skip(0).align().peek32(1)).toBe(1);
- expect(br.skip(1).align().peek32(1)).toBe(0);
- expect(br.skip(8).align().peek32(1)).toBe(1);
- expect(br.skip(22).align().peek32(1)).toBe(1);
- });
- });
-
- it('should read 32 bits across byte boundaries', () => {
- const br = new BitReader(
- // prettier-ignore
- Uint8Array.from([
- 0b0000_0000, 0b0000_0000, 0b0000_0000, 0b0000_0000,
- 0b1000_0000, 0b0000_0000, 0b0000_0000, 0b1000_0000,
- ]),
- );
-
- br.skip(1);
- expect(br.read32(32)).toBe(1);
- });
-});
-
-describe.each([
- ['LsbReader', LsbReader],
- ['FastLsbReader', FastLsbReader],
-])('Least-Significant Bit First: %s', (_, BitReader) => {
- it('should peek', () => {
- const data = Uint8Array.of(0b1100_1111);
- const r = new BitReader(data);
- expect(r.peek32(4)).toBe(0b1111);
- });
-
- it('should read across bytes', () => {
- const data = Uint8Array.of(0b0000_0011, 0b0000_1100);
- const r = new BitReader(data);
- expect(r.read32(2)).toBe(0b11);
- expect(r.read32(8)).toBe(0b0000_0000);
- expect(r.read32(2)).toBe(0b11);
- expect(r.read32(2)).toBe(0b0000);
- });
-
- it('should read across bytes 2', () => {
- const data = Uint8Array.of(0b0000_0000, 0b0000_0001);
- const r = new BitReader(data);
- expect(r.read32(9)).toBe(0b1_0000_0000);
- });
-
- it('should read across bytes 3', () => {
- const data = Uint8Array.of(0b0000_0000, 0b0000_0001, 0x0, 0x0);
- const r = new BitReader(data);
- expect(r.read32(9)).toBe(0b1_0000_0000);
- });
-
- it('should read across bytes 4', () => {
- const data = Uint8Array.of(0x0, 0x0, 0x0, 0b0000_0000, 0b0000_0001);
- const r = new BitReader(data);
- r.skip(24);
- expect(r.read32(9)).toBe(0b1_0000_0000);
- });
-
- it('should cross multiple dwords if needed', () => {
- const data = Uint8Array.of(
- 0b0001_0000,
- 0x00,
- 0x00,
- 0b0000_1000,
- 0x00,
- 0x00,
- );
- const r = new BitReader(data);
- r.skip(4);
- expect(r.read32(32)).toBe(0x80_00_01);
- });
-});
diff --git a/libs/readers/src/bit-reader.ts b/libs/readers/src/bit-reader.ts
deleted file mode 100644
index a8855ee..0000000
--- a/libs/readers/src/bit-reader.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export interface BitReader {
- align(): BitReader;
- isByteAligned(): boolean;
- peek32(n: number): number;
- read32(n: number): number;
- seek(offset: number): BitReader;
- skip(n: number): BitReader;
-}
diff --git a/libs/readers/src/byte-reader.ts b/libs/readers/src/byte-reader.ts
deleted file mode 100644
index 738c459..0000000
--- a/libs/readers/src/byte-reader.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { FileHandle } from 'fs/promises';
-
-export interface ByteReaderOptions {
- position?: number;
- buffer?: Uint8Array;
- offset?: number;
-}
-
-export interface ByteReader {
- read(
- length: number,
- options?: ByteReaderOptions,
- ): Uint8Array | Promise;
-
- close(): Promise | void;
-}
-
-export class AsyncFileByteReader implements ByteReader {
- private readonly file: FileHandle;
- private offset: number;
-
- constructor(file: FileHandle) {
- this.file = file;
- this.offset = 0;
- }
-
- async read(
- length: number,
- options: ByteReaderOptions = {},
- ): Promise {
- const {
- buffer = new Uint8Array(length),
- position = this.offset,
- offset = 0,
- } = options;
- await this.file.read({ length, position, buffer, offset });
- this.offset += length;
- return buffer;
- }
-
- async close() {
- await this.file.close();
- }
-}
-
-export class SyncByteReader implements ByteReader {
- private readonly bytes: Uint8Array;
- private offset: number;
-
- constructor(bytes: Uint8Array) {
- this.bytes = bytes;
- this.offset = 0;
- }
-
- read(length: number, options: ByteReaderOptions = {}): Uint8Array {
- const {
- buffer = new Uint8Array(length),
- position = this.offset,
- offset = 0,
- } = options;
- buffer.set(this.bytes.subarray(position, position + length), offset);
- this.offset += length;
- return buffer;
- }
-
- close() {}
-}
diff --git a/libs/readers/src/create-bit-reader.ts b/libs/readers/src/create-bit-reader.ts
deleted file mode 100644
index de18852..0000000
--- a/libs/readers/src/create-bit-reader.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { BitReader } from './bit-reader';
-import { BitReaderOptions } from './bit-reader-options';
-import { FastLsbReader } from './fast-lsb-reader';
-import { FastMsbReader } from './fast-msb-reader';
-import { LsbReader } from './lsb-reader';
-import { MsbReader } from './msb-reader';
-import { TypedArray } from './typed-array';
-
-const safeReaders = { msb: MsbReader, lsb: LsbReader } as const;
-const fastReaders = { msb: FastMsbReader, lsb: FastLsbReader } as const;
-
-export function createBitReader(
- source: TypedArray | ArrayBuffer,
- options: BitReaderOptions = {},
-): BitReader {
- const { fast = false, mode = 'msb' } = options;
- const BitReaderImpl = (fast ? fastReaders : safeReaders)[mode];
- return new BitReaderImpl(source);
-}
diff --git a/libs/readers/src/fast-lsb-reader.ts b/libs/readers/src/fast-lsb-reader.ts
deleted file mode 100644
index 9dd2fff..0000000
--- a/libs/readers/src/fast-lsb-reader.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { BitReader } from './bit-reader';
-import { ReadonlyDataView } from './readonly-data-view';
-import { TypedArray } from './typed-array';
-import { copyBuffer } from './utils/copy-buffer';
-
-const ALL_ONES = ~0 >>> 0;
-
-export class FastLsbReader implements BitReader {
- private readonly view: ReadonlyDataView;
- private readonly byteLength: number;
- private bitOffset: number = 0;
-
- // Note: In certain cases this *can* be faster, but its also needs
- // to copy the source array buffer to avoid buffer overruns, making
- // it less memory efficient. Generally, the normal LsbReader is
- // negligibly slower and doesn't incur the memory/copy penalty.
- constructor(source: TypedArray | ArrayBuffer) {
- this.byteLength = source.byteLength;
- const buffer = new ArrayBuffer(this.byteLength + 5);
- copyBuffer(source, buffer);
- this.view = new DataView(buffer);
- }
-
- isByteAligned(): boolean {
- return (this.bitOffset & 0b111) === 0;
- }
-
- align(): this {
- this.bitOffset += (8 - this.bitOffset) & 0b111;
- return this;
- }
-
- seek(offset: number): this {
- this.bitOffset = offset << 3;
- return this;
- }
-
- read32(n: number): number {
- const result = this.peek32(n);
- this.bitOffset += n;
- return result;
- }
-
- peek32(n: number): number {
- if (n === 0) return 0;
-
- const idx = this.bitOffset >>> 3;
- const shift = this.bitOffset & 0b111;
-
- if ((this.bitOffset + n) / 8 > this.byteLength)
- throw new Error('out of bytes');
-
- if (shift + n <= 32) {
- const mask = ALL_ONES >>> (32 - n);
- const bytes = this.view.getUint32(idx, true);
- return (bytes >>> shift) & mask;
- }
-
- const tailBits = 32 - shift;
- const tailMask = ALL_ONES >>> (tailBits + shift);
- const tail = (this.view.getUint32(idx, true) >> shift) & tailMask;
-
- const headBits = n - tailBits;
- const headMask = ALL_ONES >>> headBits;
- const head = this.view.getUint8(idx + 4) & headMask;
-
- return (head << tailBits) | tail;
- }
-
- skip(n: number): this {
- this.bitOffset += n;
- return this;
- }
-}
diff --git a/libs/readers/src/fast-msb-reader.ts b/libs/readers/src/fast-msb-reader.ts
deleted file mode 100644
index e55638c..0000000
--- a/libs/readers/src/fast-msb-reader.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-import { BitReader } from './bit-reader';
-import { ReadonlyDataView } from './readonly-data-view';
-import { TypedArray } from './typed-array';
-import { copyBuffer } from './utils/copy-buffer';
-
-const ALL_ONES = ~0 >>> 0;
-
-export class FastMsbReader implements BitReader {
- private readonly view: ReadonlyDataView;
- private readonly byteLength: number;
- private bitOffset: number = 0;
-
- // Note: In certain cases this *can* be faster, but its also needs
- // to copy the source array buffer to avoid buffer overruns, making
- // it less memory efficient. Generally, the normal MsbReader is
- // negligibly slower and doesn't incur the memory/copy penalty.
- constructor(source: TypedArray | ArrayBuffer) {
- this.byteLength = source.byteLength;
- const buffer = new ArrayBuffer(this.byteLength + 5);
- copyBuffer(source, buffer);
- this.view = new DataView(buffer);
- }
-
- isByteAligned(): boolean {
- return (this.bitOffset & 0b111) === 0;
- }
-
- align(): this {
- this.bitOffset += (8 - this.bitOffset) & 0b111;
- return this;
- }
-
- seek(offset: number): this {
- this.bitOffset = offset << 3;
- return this;
- }
-
- read32(n: number): number {
- const result = this.peek32(n);
- this.bitOffset += n;
- return result;
- }
-
- peek32(n: number): number {
- if (n === 0) return 0;
-
- const idx = this.bitOffset >>> 3;
- const shift = this.bitOffset & 0b111;
-
- if ((this.bitOffset + n) / 8 > this.byteLength)
- throw new Error('out of bytes');
-
- if (shift + n <= 32) {
- const mask = ALL_ONES >>> (32 - n);
- const offset = 32 - (shift + n);
- const bytes = this.view.getUint32(idx);
- return (bytes >>> offset) & mask;
- }
-
- const headBits = 32 - shift;
- const headMask = ALL_ONES >>> shift;
- const head = this.view.getUint32(idx) & headMask;
-
- const tailBits = n - headBits;
- const tail = this.view.getUint8(idx + 4) >>> (8 - tailBits);
-
- return (head << tailBits) | tail;
- }
-
- skip(n: number): this {
- this.bitOffset += n;
- return this;
- }
-}
diff --git a/libs/readers/src/index.ts b/libs/readers/src/index.ts
deleted file mode 100644
index 06b3ed1..0000000
--- a/libs/readers/src/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export { createBitReader } from './create-bit-reader';
-export { AsyncBitReader } from './async-bit-reader';
-export { AsyncFileByteReader, SyncByteReader } from './byte-reader';
-export type { ByteReaderOptions, ByteReader } from './byte-reader';
-export type { BitReader } from './bit-reader';
diff --git a/libs/readers/src/lsb-reader.ts b/libs/readers/src/lsb-reader.ts
deleted file mode 100644
index dbd2b8b..0000000
--- a/libs/readers/src/lsb-reader.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-import { BitReader } from './bit-reader';
-import { ReadonlyDataView } from './readonly-data-view';
-import { TypedArray } from './typed-array';
-
-const ALL_ONES = ~0 >>> 0;
-
-export class LsbReader implements BitReader {
- private readonly view: ReadonlyDataView;
- private idx: number = 0;
- private buffer: number = 0;
- private bitsRemaining: number = 0;
-
- constructor(source: TypedArray | ArrayBuffer) {
- this.view =
- source instanceof ArrayBuffer
- ? new DataView(source)
- : new DataView(source.buffer, source.byteOffset, source.byteLength);
- }
-
- isByteAligned() {
- return (this.bitsRemaining & 0b111) === 0;
- }
-
- align(): this {
- const trashBits = this.bitsRemaining & 0b111;
- this.buffer >>>= trashBits;
- this.bitsRemaining -= trashBits;
- return this;
- }
-
- seek(offset: number): this {
- this.idx = offset;
- this.buffer = 0;
- this.bitsRemaining = 0;
- return this;
- }
-
- read32(n: number): number {
- if (n === 0) return 0;
- if (n > 32 || n < 0)
- throw new Error(
- `out of range: ${n.toString(10)} must be between 0 and 32`,
- );
-
- if (n > this.bitsRemaining) {
- const tailBits = this.bitsRemaining;
-
- // exhaust buffer
- const tail = this.buffer & (ALL_ONES >>> (32 - tailBits));
- this.buffer = 0;
- this.bitsRemaining = 0;
-
- // refill the buffer
- const headBits = n - tailBits;
- this.fill(headBits);
-
- // extract remaining bits from buffer
- const head = this.buffer & (ALL_ONES >>> (32 - headBits));
- this.buffer >>>= headBits;
- this.bitsRemaining -= headBits;
-
- return (head << tailBits) | tail;
- }
-
- const result = this.buffer & (ALL_ONES >>> (32 - n));
- this.buffer >>>= n;
- this.bitsRemaining -= n;
- return result;
- }
-
- peek32(n: number): number {
- if (n === 0) return 0;
- if (n > 32 || n < 0)
- throw new Error(
- `out of range: ${n.toString(10)} must be between 0 and 32`,
- );
-
- this.fill(n);
- return this.buffer & (ALL_ONES >>> (32 - n));
- }
-
- skip(n: number): this {
- if (n < 0) throw new Error('out of range: n < 0');
-
- if (n == 0) return this;
-
- let bitsToSkip = n;
- if (bitsToSkip > this.bitsRemaining) {
- // all cached bits
- bitsToSkip -= this.bitsRemaining;
-
- this.buffer = 0;
- this.bitsRemaining = 0;
- this.idx += bitsToSkip >>> 3;
-
- bitsToSkip &= 0b111;
- }
-
- if (bitsToSkip > 0) {
- this.fill(bitsToSkip);
- this.buffer >>>= bitsToSkip;
- this.bitsRemaining -= bitsToSkip;
- }
-
- return this;
- }
-
- private get bytesLeftToRead() {
- return this.view.byteLength - this.idx;
- }
-
- private fill(n: number): void {
- if (n > 32) throw new Error('unsupported');
- if (n <= this.bitsRemaining) return;
-
- if (this.bitsRemaining === 0 && this.bytesLeftToRead >= 4) {
- // fast: get the next 32-bits
- this.buffer = this.view.getUint32(this.idx, true);
- this.bitsRemaining = 32;
- this.idx += 4;
- return;
- }
-
- while (this.bitsRemaining <= 24 && this.bytesLeftToRead > 0) {
- // slow: fill byte-by-byte
- const byte = this.view.getUint8(this.idx);
- this.idx++;
- this.buffer |= byte << this.bitsRemaining;
- this.bitsRemaining += 8;
- }
-
- if (n > this.bitsRemaining) {
- throw new Error(`unexpected eof`);
- }
- }
-}
diff --git a/libs/readers/src/msb-reader.ts b/libs/readers/src/msb-reader.ts
deleted file mode 100644
index e8ad623..0000000
--- a/libs/readers/src/msb-reader.ts
+++ /dev/null
@@ -1,133 +0,0 @@
-import { BitReader } from './bit-reader';
-import { ReadonlyDataView } from './readonly-data-view';
-import { TypedArray } from './typed-array';
-
-export class MsbReader implements BitReader {
- private readonly view: ReadonlyDataView;
- private idx: number = 0;
- private buffer: number = 0;
- private bitsRemaining: number = 0;
-
- constructor(source: TypedArray | ArrayBuffer) {
- this.view =
- source instanceof ArrayBuffer
- ? new DataView(source)
- : new DataView(source.buffer, source.byteOffset, source.byteLength);
- }
-
- isByteAligned(): boolean {
- return (this.bitsRemaining & 0b111) === 0;
- }
-
- align(): this {
- const trashBits = this.bitsRemaining & 0b111;
- this.buffer <<= trashBits;
- this.bitsRemaining -= trashBits;
- return this;
- }
-
- seek(offset: number): this {
- this.idx = offset;
- this.buffer = 0;
- this.bitsRemaining = 0;
- return this;
- }
-
- read32(n: number): number {
- if (n === 0) return 0;
- if (n > 32 || n < 0)
- throw new Error(
- `out of range: ${n.toString(10)} must be between 0 and 32`,
- );
-
- if (n > this.bitsRemaining) {
- const bitsLeft = n - this.bitsRemaining;
-
- // exhaust buffer
- const head = this.buffer >>> (32 - this.bitsRemaining);
- this.buffer = 0;
- this.bitsRemaining = 0;
-
- // refill the buffer
- this.fill(bitsLeft);
-
- // extract remaining bits from buffer
- const tail = this.buffer >>> (32 - bitsLeft);
- this.buffer <<= bitsLeft;
- this.bitsRemaining -= bitsLeft;
-
- return (head << bitsLeft) | tail;
- }
-
- const result = this.buffer >>> (32 - n);
- this.buffer <<= n;
- this.bitsRemaining -= n;
- return result;
- }
-
- peek32(n: number): number {
- if (n === 0) return 0;
- if (n > 32 || n < 0)
- throw new Error(
- `out of range: ${n.toString(10)} must be between 0 and 32`,
- );
-
- this.fill(n);
- return this.buffer >>> (32 - n);
- }
-
- skip(n: number): this {
- if (n < 0) throw new Error('out of range: n < 0');
-
- if (n == 0) return this;
-
- let bitsToSkip = n;
- if (bitsToSkip > this.bitsRemaining) {
- // all cached bits
- bitsToSkip -= this.bitsRemaining;
-
- this.buffer = 0;
- this.bitsRemaining = 0;
- this.idx += bitsToSkip >>> 3;
-
- bitsToSkip &= 0b111;
- }
-
- if (bitsToSkip > 0) {
- this.fill(bitsToSkip);
- this.buffer <<= bitsToSkip;
- this.bitsRemaining -= bitsToSkip;
- }
-
- return this;
- }
-
- private get bytesLeftToRead() {
- return this.view.byteLength - this.idx;
- }
-
- private fill(n: number): void {
- if (n > 32) throw new Error('unsupported');
- if (n <= this.bitsRemaining) return;
-
- if (this.bitsRemaining === 0 && this.bytesLeftToRead >= 4) {
- // fast: get the next 32-bits
- this.buffer = this.view.getUint32(this.idx);
- this.bitsRemaining = 32;
- this.idx += 4;
- return;
- }
-
- while (this.bitsRemaining <= 24 && this.bytesLeftToRead > 0) {
- // slow: fill byte-by-byte
- const byte = this.view.getUint8(this.idx);
- this.idx++;
- this.buffer |= byte << (32 - 8 - this.bitsRemaining);
- this.bitsRemaining += 8;
- }
-
- if (n > this.bitsRemaining) {
- throw new Error('out of bytes');
- }
- }
-}
diff --git a/libs/readers/src/readonly-data-view.ts b/libs/readers/src/readonly-data-view.ts
deleted file mode 100644
index 914e999..0000000
--- a/libs/readers/src/readonly-data-view.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type ReadonlyDataView = Omit;
diff --git a/libs/readers/src/typed-array.ts b/libs/readers/src/typed-array.ts
deleted file mode 100644
index f6f0ad3..0000000
--- a/libs/readers/src/typed-array.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface TypedArray extends ArrayLike {
- readonly buffer: ArrayBufferLike;
- readonly byteLength: number;
- readonly byteOffset: number;
-}
diff --git a/libs/readers/src/utils/copy-buffer.ts b/libs/readers/src/utils/copy-buffer.ts
deleted file mode 100644
index 3a08503..0000000
--- a/libs/readers/src/utils/copy-buffer.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { TypedArray } from '../typed-array';
-
-export function copyBuffer(
- source: TypedArray | ArrayBuffer,
- dest: ArrayBuffer,
-): void {
- const destBytes = new Uint8Array(dest);
- const sourceBytes =
- source instanceof ArrayBuffer ? new Uint8Array(source) : source;
- destBytes.set(sourceBytes);
-}
diff --git a/libs/readers/tsconfig.json b/libs/readers/tsconfig.json
deleted file mode 100644
index d9b2aa3..0000000
--- a/libs/readers/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "./dist/"
- },
- "include": ["src/**/*"],
- "exclude": [
- "src/**/*.spec.ts",
- "src/**/*.test.ts",
- "src/__tests__/**/*.ts"
- ]
-}
diff --git a/package-lock.json b/package-lock.json
index a1786c7..8449cf0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,9 +14,7 @@
"libs/color-space",
"libs/color",
"libs/image",
- "libs/numeric-deque",
"libs/pmachine",
- "libs/readers",
"libs/resize-filters",
"libs/sci0",
"libs/vec2",
@@ -166,11 +164,6 @@
"@4bitlabs/color-utils": "0.0.0"
}
},
- "libs/numeric-deque": {
- "name": "@4bitlabs/numeric-deque",
- "version": "1.1.6",
- "license": "ISC"
- },
"libs/palettes": {
"name": "@4bitlabs/palettes",
"version": "0.0.0",
@@ -185,11 +178,6 @@
"name": "@4bitlabs/pmachine",
"license": "ISC"
},
- "libs/readers": {
- "name": "@4bitlabs/readers",
- "version": "2.0.6",
- "license": "ISC"
- },
"libs/resize-filters": {
"name": "@4bitlabs/resize-filters",
"version": "1.0.17",
@@ -277,16 +265,18 @@
"link": true
},
"node_modules/@4bitlabs/numeric-deque": {
- "resolved": "libs/numeric-deque",
- "link": true
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@4bitlabs/numeric-deque/-/numeric-deque-1.1.7.tgz",
+ "integrity": "sha512-LtOT/ZrP+eM2SEEH7XCLUqqQjx7lY4hDWUAgfl1zyO5LbySjHEYzo5Daw2Idq/EkTmhR3W765tewf/X3TeAzuQ=="
},
"node_modules/@4bitlabs/pmachine": {
"resolved": "libs/pmachine",
"link": true
},
"node_modules/@4bitlabs/readers": {
- "resolved": "libs/readers",
- "link": true
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@4bitlabs/readers/-/readers-2.0.7.tgz",
+ "integrity": "sha512-djJicKoExWOD5sXScPqj4kGUOiON7lDdm+H738AGJn61e2wgL1h9RHJ7bvK8/rsn+tAFeYA3/4m5MFrfJOFpOw=="
},
"node_modules/@4bitlabs/resize-filters": {
"resolved": "libs/resize-filters",
@@ -1417,9 +1407,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz",
- "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==",
+ "version": "9.8.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz",
+ "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2558,9 +2548,9 @@
}
},
"node_modules/@lerna/create/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2646,13 +2636,10 @@
}
},
"node_modules/@npmcli/agent/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/@npmcli/arborist": {
"version": "7.5.3",
@@ -2722,13 +2709,10 @@
}
},
"node_modules/@npmcli/arborist/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/@npmcli/arborist/node_modules/minimatch": {
"version": "9.0.5",
@@ -2746,9 +2730,9 @@
}
},
"node_modules/@npmcli/arborist/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2770,9 +2754,9 @@
}
},
"node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2810,18 +2794,15 @@
}
},
"node_modules/@npmcli/git/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/@npmcli/git/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2886,9 +2867,9 @@
}
},
"node_modules/@npmcli/map-workspaces/node_modules/glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
@@ -2901,31 +2882,10 @@
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@npmcli/map-workspaces/node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/@npmcli/map-workspaces/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -2967,9 +2927,9 @@
}
},
"node_modules/@npmcli/metavuln-calculator/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -3024,9 +2984,9 @@
}
},
"node_modules/@npmcli/package-json/node_modules/glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
@@ -3039,29 +2999,8 @@
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@npmcli/package-json/node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": {
@@ -3089,9 +3028,9 @@
}
},
"node_modules/@npmcli/package-json/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -3265,9 +3204,9 @@
}
},
"node_modules/@nx/devkit/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -4327,9 +4266,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -5289,9 +5228,9 @@
}
},
"node_modules/cacache/node_modules/glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
@@ -5304,39 +5243,15 @@
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cacache/node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/cacache/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/cacache/node_modules/minimatch": {
"version": "9.0.5",
@@ -5815,9 +5730,9 @@
}
},
"node_modules/conventional-changelog-core/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -5872,9 +5787,9 @@
}
},
"node_modules/conventional-changelog-writer/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -6068,9 +5983,9 @@
"dev": true
},
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
@@ -7760,9 +7675,9 @@
}
},
"node_modules/git-semver-tags/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -8049,13 +7964,10 @@
}
},
"node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/html-escaper": {
"version": "2.0.2",
@@ -8284,9 +8196,9 @@
}
},
"node_modules/init-package-json/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -8782,9 +8694,9 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
- "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"dependencies": {
"@babel/core": "^7.23.9",
@@ -8798,9 +8710,9 @@
}
},
"node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -8851,16 +8763,13 @@
}
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -9347,9 +9256,9 @@
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -9850,9 +9759,9 @@
}
},
"node_modules/lerna/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -9956,9 +9865,9 @@
}
},
"node_modules/libnpmpublish/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10082,9 +9991,9 @@
}
},
"node_modules/make-dir/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10285,9 +10194,9 @@
}
},
"node_modules/meow/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10743,9 +10652,9 @@
}
},
"node_modules/node-gyp/node_modules/glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
@@ -10758,9 +10667,6 @@
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
@@ -10774,24 +10680,6 @@
"node": ">=16"
}
},
- "node_modules/node-gyp/node_modules/jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"node_modules/node-gyp/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -10817,9 +10705,9 @@
}
},
"node_modules/node-gyp/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10891,9 +10779,9 @@
}
},
"node_modules/normalize-package-data/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10936,9 +10824,9 @@
}
},
"node_modules/npm-install-checks/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -10972,9 +10860,9 @@
}
},
"node_modules/npm-package-arg/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -11011,9 +10899,9 @@
}
},
"node_modules/npm-pick-manifest/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -11180,9 +11068,9 @@
}
},
"node_modules/nx/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -11684,13 +11572,10 @@
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -12373,9 +12258,9 @@
}
},
"node_modules/rimraf": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
- "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz",
+ "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==",
"dev": true,
"dependencies": {
"glob": "^10.3.7"
@@ -12384,7 +12269,7 @@
"rimraf": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=14.18"
+ "node": "14 >=14.20 || 16 >=16.20 || >=18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -12400,31 +12285,29 @@
}
},
"node_modules/rimraf/node_modules/glob": {
- "version": "10.3.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
- "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.11.0"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minimatch": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -12537,24 +12420,10 @@
"dev": true
},
"node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"node_modules/safe-regex-test": {
"version": "1.0.3",
@@ -12682,9 +12551,9 @@
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"bin": {
"semver": "bin/semver.js"
},
@@ -12943,12 +12812,12 @@
}
},
"node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"dependencies": {
- "safe-buffer": "~5.2.0"
+ "safe-buffer": "~5.1.0"
}
},
"node_modules/string-length": {
@@ -13285,21 +13154,6 @@
"util-deprecate": "~1.0.1"
}
},
- "node_modules/through2/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/through2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
"node_modules/tmp": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
@@ -13428,9 +13282,9 @@
}
},
"node_modules/ts-jest/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -13915,9 +13769,9 @@
}
},
"node_modules/vue-tsc/node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -14268,13 +14122,17 @@
}
},
"@4bitlabs/numeric-deque": {
- "version": "file:libs/numeric-deque"
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/@4bitlabs/numeric-deque/-/numeric-deque-1.1.7.tgz",
+ "integrity": "sha512-LtOT/ZrP+eM2SEEH7XCLUqqQjx7lY4hDWUAgfl1zyO5LbySjHEYzo5Daw2Idq/EkTmhR3W765tewf/X3TeAzuQ=="
},
"@4bitlabs/pmachine": {
"version": "file:libs/pmachine"
},
"@4bitlabs/readers": {
- "version": "file:libs/readers"
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@4bitlabs/readers/-/readers-2.0.7.tgz",
+ "integrity": "sha512-djJicKoExWOD5sXScPqj4kGUOiON7lDdm+H738AGJn61e2wgL1h9RHJ7bvK8/rsn+tAFeYA3/4m5MFrfJOFpOw=="
},
"@4bitlabs/resize-filters": {
"version": "file:libs/resize-filters",
@@ -15036,9 +14894,9 @@
}
},
"@eslint/js": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz",
- "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==",
+ "version": "9.8.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz",
+ "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==",
"dev": true
},
"@humanwhocodes/config-array": {
@@ -15727,9 +15585,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"write-file-atomic": {
@@ -15792,9 +15650,9 @@
},
"dependencies": {
"lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
}
}
@@ -15858,9 +15716,9 @@
"dev": true
},
"lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"minimatch": {
@@ -15873,9 +15731,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -15890,9 +15748,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -15920,15 +15778,15 @@
"dev": true
},
"lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"which": {
@@ -15974,9 +15832,9 @@
}
},
"glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
@@ -15987,16 +15845,6 @@
"path-scurry": "^1.11.1"
}
},
- "jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -16028,9 +15876,9 @@
"dev": true
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -16072,9 +15920,9 @@
}
},
"glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
@@ -16085,16 +15933,6 @@
"path-scurry": "^1.11.1"
}
},
- "jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"json-parse-even-better-errors": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz",
@@ -16111,9 +15949,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -16245,9 +16083,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -16975,9 +16813,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -17700,9 +17538,9 @@
}
},
"glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
@@ -17713,20 +17551,10 @@
"path-scurry": "^1.11.1"
}
},
- "jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"minimatch": {
@@ -18078,9 +17906,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"yallist": {
@@ -18119,9 +17947,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -18260,9 +18088,9 @@
"dev": true
},
"debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
+ "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"dev": true,
"requires": {
"ms": "2.1.2"
@@ -19524,9 +19352,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -19732,9 +19560,9 @@
},
"dependencies": {
"lru-cache": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz",
- "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
}
}
@@ -19905,9 +19733,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -20253,9 +20081,9 @@
"dev": true
},
"istanbul-lib-instrument": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz",
- "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"requires": {
"@babel/core": "^7.23.9",
@@ -20266,9 +20094,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -20306,9 +20134,9 @@
}
},
"jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"requires": {
"@isaacs/cliui": "^8.0.2",
@@ -20679,9 +20507,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21080,9 +20908,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"write-file-atomic": {
@@ -21154,9 +20982,9 @@
"dev": true
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21257,9 +21085,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21418,9 +21246,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"type-fest": {
@@ -21761,9 +21589,9 @@
}
},
"glob": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
- "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
@@ -21780,16 +21608,6 @@
"integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true
},
- "jackspeak": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
- "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
"minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -21806,9 +21624,9 @@
"dev": true
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
},
"which": {
@@ -21861,9 +21679,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21893,9 +21711,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21919,9 +21737,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -21948,9 +21766,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -22073,9 +21891,9 @@
}
},
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -22436,9 +22254,9 @@
},
"dependencies": {
"lru-cache": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
- "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
}
}
@@ -22921,9 +22739,9 @@
"dev": true
},
"rimraf": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.7.tgz",
- "integrity": "sha512-nV6YcJo5wbLW77m+8KjH8aB/7/rxQy9SZ0HY5shnwULfS+9nmTtVXAJET5NdZmCzA4fPI/Hm1wo/Po/4mopOdg==",
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz",
+ "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==",
"dev": true,
"requires": {
"glob": "^10.3.7"
@@ -22939,22 +22757,23 @@
}
},
"glob": {
- "version": "10.3.15",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
- "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.6",
- "minimatch": "^9.0.1",
- "minipass": "^7.0.4",
- "path-scurry": "^1.11.0"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
}
},
"minimatch": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
@@ -23033,9 +22852,9 @@
}
},
"safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"safe-regex-test": {
@@ -23149,9 +22968,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w=="
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="
}
}
},
@@ -23361,12 +23180,12 @@
}
},
"string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "~5.2.0"
+ "safe-buffer": "~5.1.0"
}
},
"string-length": {
@@ -23623,21 +23442,6 @@
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
}
}
},
@@ -23715,9 +23519,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
@@ -24024,9 +23828,9 @@
},
"dependencies": {
"semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true
}
}
diff --git a/package.json b/package.json
index 80f2aba..2f63d9d 100644
--- a/package.json
+++ b/package.json
@@ -29,9 +29,7 @@
"libs/color-space",
"libs/color",
"libs/image",
- "libs/numeric-deque",
"libs/pmachine",
- "libs/readers",
"libs/resize-filters",
"libs/sci0",
"libs/vec2",