From 78041f4349b1e2c8727e0cd69566f4445d14983f Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Thu, 3 Jul 2025 15:51:05 +0100
Subject: [PATCH 01/11] test: migrate react tests to vitest
---
karma.conf.js | 1 -
mangle.json | 6 +-
package.json | 4 +-
packages/react/test/browser/exports.test.tsx | 1 +
.../react/test/browser/react-router.test.tsx | 1 +
.../test/node/renderToStaticMarkup.test.tsx | 5 +-
packages/react/test/shared/mounting.tsx | 2 +-
packages/react/test/shared/updates.tsx | 99 +++++++++----------
packages/react/test/shared/utils.ts | 18 ++--
vitest.config.mjs | 6 +-
10 files changed, 70 insertions(+), 73 deletions(-)
diff --git a/karma.conf.js b/karma.conf.js
index 5bcb7cb9d..813fd4783 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -226,7 +226,6 @@ function createEsbuildPlugin(filteredPkgList) {
}
const pkgList = {
- react: "@preact/signals-react",
"react/utils": "@preact/signals-react/utils",
"react/runtime": "@preact/signals-react/runtime",
"react-transform": "@preact/signals-react-transform",
diff --git a/mangle.json b/mangle.json
index 457ded971..b5127c0b6 100644
--- a/mangle.json
+++ b/mangle.json
@@ -5,11 +5,7 @@
},
"minify": {
"mangle": {
- "reserved": [
- "useSignal",
- "useComputed",
- "useSignalEffect"
- ],
+ "reserved": ["useSignal", "useComputed", "useSignalEffect"],
"keep_classnames": true,
"properties": {
"regex": "^_[^_]",
diff --git a/package.json b/package.json
index 4a8b1a149..d7d80e03f 100644
--- a/package.json
+++ b/package.json
@@ -30,8 +30,8 @@
"test:karma:watch": "karma start karma.conf.js --no-single-run",
"test:karma:prod": "cross-env MINIFY=true NODE_ENV=production karma start karma.conf.js --single-run",
"test:karma:prod:watch": "cross-env NODE_ENV=production karma start karma.conf.js --no-single-run",
- "test:mocha": "cross-env COVERAGE=true mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core}\"",
- "test:mocha:prod": "cross-env COVERAGE=true NODE_ENV=production mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core}\"",
+ "test:mocha": "cross-env COVERAGE=true mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core,react}\"",
+ "test:mocha:prod": "cross-env COVERAGE=true NODE_ENV=production mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core,react}\"",
"test:vitest": "cross-env COVERAGE=true vitest run",
"docs:start": "cd docs && pnpm start",
"docs:build": "cd docs && pnpm build",
diff --git a/packages/react/test/browser/exports.test.tsx b/packages/react/test/browser/exports.test.tsx
index a36d0241c..0c8e01a37 100644
--- a/packages/react/test/browser/exports.test.tsx
+++ b/packages/react/test/browser/exports.test.tsx
@@ -1,5 +1,6 @@
import * as core from "@preact/signals-core";
import * as adapter from "@preact/signals-react";
+import { describe, it, expect } from "vitest";
describe("@preact/signals-react", () => {
describe("exports", () => {
diff --git a/packages/react/test/browser/react-router.test.tsx b/packages/react/test/browser/react-router.test.tsx
index fb6bc6622..0a4c02cb3 100644
--- a/packages/react/test/browser/react-router.test.tsx
+++ b/packages/react/test/browser/react-router.test.tsx
@@ -4,6 +4,7 @@ globalThis.IS_REACT_ACT_ENVIRONMENT = true;
import { signal } from "@preact/signals-react";
import { createElement } from "react";
import * as ReactRouter from "react-router-dom";
+import { describe, it, beforeEach, afterEach, expect } from "vitest";
import { act, checkHangingAct, createRoot, Root } from "../shared/utils";
diff --git a/packages/react/test/node/renderToStaticMarkup.test.tsx b/packages/react/test/node/renderToStaticMarkup.test.tsx
index 60ef93268..f1f352814 100644
--- a/packages/react/test/node/renderToStaticMarkup.test.tsx
+++ b/packages/react/test/node/renderToStaticMarkup.test.tsx
@@ -3,12 +3,13 @@ import { useSignals } from "@preact/signals-react/runtime";
import { createElement } from "react";
import { renderToStaticMarkup } from "react-dom/server";
import { mountSignalsTests } from "../shared/mounting";
+import { describe, it, expect, vi } from "vitest";
describe("renderToStaticMarkup", () => {
mountSignalsTests(el => Promise.resolve(renderToStaticMarkup(el)));
it("should not invoke useSignalEffect", async () => {
- const spy = sinon.spy();
+ const spy = vi.fn();
const sig = signal("foo");
function App() {
@@ -18,7 +19,7 @@ describe("renderToStaticMarkup", () => {
const html = await renderToStaticMarkup();
expect(html).to.equal("
foo
");
- expect(spy.called).to.be.false;
+ expect(spy).not.toHaveBeenCalled();
});
it("should clean up signal dependencies after executing", async () => {
diff --git a/packages/react/test/shared/mounting.tsx b/packages/react/test/shared/mounting.tsx
index 2ca9ad473..198bdce44 100644
--- a/packages/react/test/shared/mounting.tsx
+++ b/packages/react/test/shared/mounting.tsx
@@ -1,6 +1,6 @@
import { signal, computed } from "@preact/signals-core";
import { useComputed, useSignal } from "@preact/signals-react/runtime";
-import { expect } from "chai";
+import { describe, it, expect } from "vitest";
import { createElement, useReducer, StrictMode, useState } from "react";
export function mountSignalsTests(
diff --git a/packages/react/test/shared/updates.tsx b/packages/react/test/shared/updates.tsx
index 2e90f6b54..e9c1d9bdd 100644
--- a/packages/react/test/shared/updates.tsx
+++ b/packages/react/test/shared/updates.tsx
@@ -21,6 +21,7 @@ import {
} from "react";
import type { FunctionComponent } from "react";
import { renderToStaticMarkup } from "react-dom/server";
+import { beforeEach, afterEach, describe, it, expect, vi } from "vitest";
import {
act,
@@ -50,7 +51,7 @@ export function updateSignalsTests(usingTransform = false) {
render = root.render.bind(root);
- getConsoleErrorSpy().resetHistory();
+ getConsoleErrorSpy().mockClear();
});
afterEach(async () => {
@@ -249,7 +250,7 @@ export function updateSignalsTests(usingTransform = false) {
return {value}
;
}
- const spy = sinon.spy();
+ const spy = vi.fn();
function App() {
spy();
return ;
@@ -261,7 +262,7 @@ export function updateSignalsTests(usingTransform = false) {
await act(() => {
sig.value = "bar";
});
- expect(spy).to.be.calledOnce;
+ expect(spy).toHaveBeenCalledOnce();
});
it("should update memo'ed component via signals", async () => {
@@ -524,7 +525,7 @@ export function updateSignalsTests(usingTransform = false) {
function spyOn(
c: FunctionComponent
) {
- return sinon.spy(c);
+ return vi.fn(c);
}
// Manually read signal value below so we can watch whether components rerender
@@ -609,26 +610,26 @@ export function updateSignalsTests(usingTransform = false) {
const url = scratch.querySelector("p")!;
expect(url.textContent).to.equal("https://domain.com/test?a=1");
- expect(URLModelProvider).to.be.calledOnce;
- expect(Origin).to.be.calledOnce;
- expect(Pathname).to.be.calledOnce;
- expect(Search).to.be.calledOnce;
+ expect(URLModelProvider).toHaveBeenCalledOnce();
+ expect(Origin).toHaveBeenCalledOnce();
+ expect(Pathname).toHaveBeenCalledOnce();
+ expect(Search).toHaveBeenCalledOnce();
await act(() => {
scratch.querySelector("button")!.click();
});
expect(url.textContent).to.equal("https://domain.com/test?a=2");
- expect(URLModelProvider).to.be.calledOnce;
- expect(Origin).to.be.calledOnce;
- expect(Pathname).to.be.calledOnce;
- expect(Search).to.be.calledTwice;
+ expect(URLModelProvider).toHaveBeenCalledOnce();
+ expect(Origin).toHaveBeenCalledOnce();
+ expect(Pathname).toHaveBeenCalledOnce();
+ expect(Search).toHaveBeenCalledTimes(2);
});
it("should not subscribe to computed signals only created and not used", async () => {
const sig = signal(0);
- const childSpy = sinon.spy();
- const parentSpy = sinon.spy();
+ const childSpy = vi.fn();
+ const parentSpy = vi.fn();
function Child({ num }: { num: ReadonlySignal }) {
childSpy();
@@ -643,21 +644,21 @@ export function updateSignalsTests(usingTransform = false) {
await render();
expect(scratch.innerHTML).to.equal("1
");
- expect(parentSpy).to.be.calledOnce;
- expect(childSpy).to.be.calledOnce;
+ expect(parentSpy).toHaveBeenCalledOnce();
+ expect(childSpy).toHaveBeenCalledOnce();
await act(() => {
sig.value += 1;
});
expect(scratch.innerHTML).to.equal("2
");
- expect(parentSpy).to.be.calledOnce;
- expect(childSpy).to.be.calledTwice;
+ expect(parentSpy).toHaveBeenCalledOnce();
+ expect(childSpy).toHaveBeenCalledTimes(2);
});
it("should properly subscribe and unsubscribe to conditionally rendered computed signals ", async () => {
const computedDep = signal(0);
const renderComputed = signal(true);
- const renderSpy = sinon.spy();
+ const renderSpy = vi.fn();
function App() {
renderSpy();
@@ -667,25 +668,25 @@ export function updateSignalsTests(usingTransform = false) {
await render();
expect(scratch.innerHTML).to.equal("1
");
- expect(renderSpy).to.be.calledOnce;
+ expect(renderSpy).toHaveBeenCalledOnce();
await act(() => {
computedDep.value += 1;
});
expect(scratch.innerHTML).to.equal("2
");
- expect(renderSpy).to.be.calledTwice;
+ expect(renderSpy).toHaveBeenCalledTimes(2);
await act(() => {
renderComputed.value = false;
});
expect(scratch.innerHTML).to.equal("");
- expect(renderSpy).to.be.calledThrice;
+ expect(renderSpy).toHaveBeenCalledTimes(3);
await act(() => {
computedDep.value += 1;
});
expect(scratch.innerHTML).to.equal("");
- expect(renderSpy).to.be.calledThrice; // Should not be called again
+ expect(renderSpy).toHaveBeenCalledTimes(3); // Should not be called again
});
});
@@ -715,7 +716,7 @@ export function updateSignalsTests(usingTransform = false) {
it("should be invoked after commit", async () => {
const ref = createRef();
const sig = signal("foo");
- const spy = sinon.spy();
+ const spy = vi.fn();
let count = 0;
function App() {
@@ -736,13 +737,10 @@ export function updateSignalsTests(usingTransform = false) {
await render();
expect(scratch.textContent).to.equal("foo");
- expect(spy).to.have.been.calledOnceWith(
- "foo",
- scratch.firstElementChild,
- "0"
- );
+ expect(spy).toHaveBeenCalledOnce();
+ expect(spy).toHaveBeenCalledWith("foo", scratch.firstElementChild, "0");
- spy.resetHistory();
+ spy.mockClear();
await act(() => {
sig.value = "bar";
@@ -757,7 +755,8 @@ export function updateSignalsTests(usingTransform = false) {
// when it coincides with a render? In React 16 when running in production
// however, we do see "1" as expected, likely because we are using a fake
// act() implementation which completes after the DOM has been updated.
- expect(spy).to.have.been.calledOnceWith(
+ expect(spy).toHaveBeenCalledOnce();
+ expect(spy).toHaveBeenCalledWith(
"bar",
scratch.firstElementChild,
isReact16 && isProd ? "1" : "0" // ideally always "1" - update if we find a nice way to do so!
@@ -767,8 +766,8 @@ export function updateSignalsTests(usingTransform = false) {
it("should invoke any returned cleanup function for updates", async () => {
const ref = createRef();
const sig = signal("foo");
- const spy = sinon.spy();
- const cleanup = sinon.spy();
+ const spy = vi.fn();
+ const cleanup = vi.fn();
let count = 0;
function App() {
@@ -787,13 +786,10 @@ export function updateSignalsTests(usingTransform = false) {
await render();
- expect(cleanup).not.to.have.been.called;
- expect(spy).to.have.been.calledOnceWith(
- "foo",
- scratch.firstElementChild,
- "0"
- );
- spy.resetHistory();
+ expect(cleanup).not.toHaveBeenCalled();
+ expect(spy).toHaveBeenCalledOnce();
+ expect(spy).toHaveBeenCalledWith("foo", scratch.firstElementChild, "0");
+ spy.mockClear();
await act(() => {
sig.value = "bar";
@@ -803,9 +799,11 @@ export function updateSignalsTests(usingTransform = false) {
const child = scratch.firstElementChild;
- expect(cleanup).to.have.been.calledOnceWith("foo", child, "0");
+ expect(cleanup).toHaveBeenCalledOnce();
+ expect(cleanup).toHaveBeenCalledWith("foo", child, "0");
- expect(spy).to.have.been.calledOnceWith(
+ expect(spy).toHaveBeenCalledOnce();
+ expect(spy).toHaveBeenCalledWith(
"bar",
child,
isReact16 && isProd ? "1" : "0" // ideally always "1" - update if we find a nice way to do so!
@@ -815,8 +813,8 @@ export function updateSignalsTests(usingTransform = false) {
it("should invoke any returned cleanup function for unmounts", async () => {
const ref = createRef();
const sig = signal("foo");
- const spy = sinon.spy();
- const cleanup = sinon.spy();
+ const spy = vi.fn();
+ const cleanup = vi.fn();
function App() {
useSignalEffect(() => {
@@ -832,20 +830,21 @@ export function updateSignalsTests(usingTransform = false) {
const child = scratch.firstElementChild;
expect(scratch.innerHTML).to.equal("foo
");
- expect(cleanup).not.to.have.been.called;
- expect(spy).to.have.been.calledOnceWith("foo", child);
- spy.resetHistory();
+ expect(cleanup).not.toHaveBeenCalled();
+ expect(spy).toHaveBeenCalledOnce();
+ expect(spy).toHaveBeenCalledWith("foo", child);
+ spy.mockClear();
await act(() => {
root.unmount();
});
expect(scratch.innerHTML).to.equal("");
- expect(spy).not.to.have.been.called;
- expect(cleanup).to.have.been.calledOnce;
+ expect(spy).not.toHaveBeenCalled();
+ expect(cleanup).toHaveBeenCalledOnce();
// @note: React v18 cleans up the ref eagerly, so it's already null by the
// time the callback runs. this is probably worth fixing at some point.
- expect(cleanup).to.have.been.calledWith("foo", isReact16 ? child : null);
+ expect(cleanup).toHaveBeenCalledWith("foo", isReact16 ? child : null);
});
});
}
diff --git a/packages/react/test/shared/utils.ts b/packages/react/test/shared/utils.ts
index 9ad51d052..2f5bce2fa 100644
--- a/packages/react/test/shared/utils.ts
+++ b/packages/react/test/shared/utils.ts
@@ -1,5 +1,5 @@
import React from "react";
-import sinon from "sinon";
+import { vi, type MockInstance } from "vitest";
import { act as realAct } from "react-dom/test-utils";
export interface Root {
@@ -96,15 +96,15 @@ export function consoleFormat(str: string, ...values: unknown[]): string {
}
declare global {
- let errorSpy: sinon.SinonSpy | undefined;
+ let errorSpy: MockInstance | undefined;
}
// Only one spy can be active on an object at a time and since all tests share
// the same console object we need to make sure we're only spying on it once.
// We'll use this method to share the spy across all tests.
-export function getConsoleErrorSpy(): sinon.SinonSpy {
+export function getConsoleErrorSpy(): MockInstance {
if (typeof errorSpy === "undefined") {
- (globalThis as any).errorSpy = sinon.spy(console, "error");
+ (globalThis as any).errorSpy = vi.spyOn(console, "error");
}
return errorSpy!;
@@ -127,13 +127,13 @@ if (isReact16) {
export function checkConsoleErrorLogs(): void {
const errorSpy = getConsoleErrorSpy();
- if (errorSpy.called) {
+ if (errorSpy.mock.calls.length > 0) {
let message: string;
- if (errorSpy.firstCall.args[0].toString().includes("%s")) {
- const firstArg = errorSpy.firstCall.args[0];
- message = consoleFormat(firstArg, ...errorSpy.firstCall.args.slice(1));
+ if (errorSpy.mock.calls[0][0].toString().includes("%s")) {
+ const firstArg = errorSpy.mock.calls[0][0];
+ message = consoleFormat(firstArg, ...errorSpy.mock.calls[0].slice(1));
} else {
- message = errorSpy.firstCall.args.join(" ");
+ message = errorSpy.mock.calls[0].join(" ");
}
if (messagesToIgnore.every(re => re.test(message) === false)) {
diff --git a/vitest.config.mjs b/vitest.config.mjs
index d9d74a8e5..ac9745b31 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -49,15 +49,15 @@ export default defineConfig({
extends: true,
test: {
include: [
- './packages/{,preact/utils,preact,core}/test/**/*.test.tsx',
- '!./packages/{,preact/utils,preact,core}/test/browser/**/*.test.tsx'
+ './packages/{,preact/utils,preact,core,react}/test/**/*.test.tsx',
+ '!./packages/{,preact/utils,preact,core,react}/test/browser/**/*.test.tsx'
],
}
},
{
extends: true,
test: {
- include: ['./packages/{,preact/utils,preact,core}/test/browser/**/*.test.tsx'],
+ include: ['./packages/{,preact/utils,preact,core,react}/test/browser/**/*.test.tsx'],
browser: {
provider: 'playwright',
enabled: true,
From 4cbba2d59a84beb1e8db0b588c283680efbd1d2b Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Thu, 3 Jul 2025 16:55:22 +0100
Subject: [PATCH 02/11] test: migrate react-transform to vitest
---
package.json | 1 +
packages/react-transform/package.json | 1 +
.../react-transform/test/browser/e2e.test.tsx | 6 +++---
packages/react-transform/test/node/index.test.tsx | 1 +
packages/react/test/shared/utils.ts | 2 +-
pnpm-lock.yaml | 6 ++++++
vitest.config.mjs | 15 ++++++++++++---
7 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index d7d80e03f..2923a2b15 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
"@babel/standalone": "^7.27.7",
"@changesets/changelog-github": "^0.5.0",
"@changesets/cli": "^2.27.1",
+ "@preact/signals-react-transform": "workspace:*",
"@types/babel__traverse": "^7.18.5",
"@types/chai": "^4.3.3",
"@types/mocha": "^9.1.1",
diff --git a/packages/react-transform/package.json b/packages/react-transform/package.json
index 7a66713da..aa7d526fe 100644
--- a/packages/react-transform/package.json
+++ b/packages/react-transform/package.json
@@ -57,6 +57,7 @@
},
"devDependencies": {
"@babel/core": "^7.22.8",
+ "@preact/signals-core": "workspace:*",
"@types/babel__core": "^7.20.1",
"@types/babel__helper-module-imports": "^7.18.0",
"@types/babel__helper-plugin-utils": "^7.10.0",
diff --git a/packages/react-transform/test/browser/e2e.test.tsx b/packages/react-transform/test/browser/e2e.test.tsx
index 0042403ae..f04699856 100644
--- a/packages/react-transform/test/browser/e2e.test.tsx
+++ b/packages/react-transform/test/browser/e2e.test.tsx
@@ -13,6 +13,8 @@ import {
createRoot,
getConsoleErrorSpy,
} from "../../../react/test/shared/utils";
+import { describe, beforeEach, afterEach, expect, it } from "vitest";
+import "../../../../test/browser/babel.js";
const customSource = "useSignals-custom-source";
const modules: Record = {
@@ -32,8 +34,6 @@ function testRequire(name: string) {
}
async function createComponent(code: string, options?: PluginOptions) {
- // `transformSignalCode` is a global helper function added to the global
- // namespace by a test helper we've included in the Karma config.
const cjsCode = transformSignalCode(code, options);
// console.log(cjsCode); // Useful when debugging tests.
@@ -55,7 +55,7 @@ describe("React Signals babel transfrom - browser E2E tests", () => {
scratch = document.createElement("div");
document.body.appendChild(scratch);
root = await createRoot(scratch);
- getConsoleErrorSpy().resetHistory();
+ getConsoleErrorSpy().mockClear();
});
afterEach(async () => {
diff --git a/packages/react-transform/test/node/index.test.tsx b/packages/react-transform/test/node/index.test.tsx
index 3ef2343a7..b20415265 100644
--- a/packages/react-transform/test/node/index.test.tsx
+++ b/packages/react-transform/test/node/index.test.tsx
@@ -19,6 +19,7 @@ import {
objMethodComp,
variableHooks,
} from "./helpers";
+import { it, describe, expect } from "vitest";
// To help interactively debug a specific test case, add the test ids of the
// test cases you want to debug to the `debugTestIds` array, e.g. (["258",
diff --git a/packages/react/test/shared/utils.ts b/packages/react/test/shared/utils.ts
index 2f5bce2fa..d24858ba8 100644
--- a/packages/react/test/shared/utils.ts
+++ b/packages/react/test/shared/utils.ts
@@ -1,5 +1,5 @@
import React from "react";
-import { vi, type MockInstance } from "vitest";
+import { vi, expect, type MockInstance } from "vitest";
import { act as realAct } from "react-dom/test-utils";
export interface Root {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72064a842..4c82baec8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -55,6 +55,9 @@ importers:
'@changesets/cli':
specifier: ^2.27.1
version: 2.27.1
+ '@preact/signals-react-transform':
+ specifier: workspace:*
+ version: link:packages/react-transform
'@types/babel__traverse':
specifier: ^7.18.5
version: 7.18.5
@@ -295,6 +298,9 @@ importers:
'@babel/core':
specifier: ^7.22.8
version: 7.22.8
+ '@preact/signals-core':
+ specifier: workspace:*
+ version: link:../core
'@types/babel__core':
specifier: ^7.20.1
version: 7.20.1
diff --git a/vitest.config.mjs b/vitest.config.mjs
index ac9745b31..b4534a52e 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -33,6 +33,15 @@ export default defineConfig({
plugins: [
manglePlugin
],
+ // TODO (43081j): stop faking node globals and sort out the transform
+ // tests. Either run them in node, or somehow run babel in node but the
+ // tests in browser
+ define: {
+ IS_REACT_ACT_ENVIRONMENT: true,
+ process: {
+ env: {}
+ }
+ },
test: {
coverage: {
enabled: COVERAGE,
@@ -49,15 +58,15 @@ export default defineConfig({
extends: true,
test: {
include: [
- './packages/{,preact/utils,preact,core,react}/test/**/*.test.tsx',
- '!./packages/{,preact/utils,preact,core,react}/test/browser/**/*.test.tsx'
+ './packages/{,preact/utils,preact,core,react,react-transform}/test/**/*.test.tsx',
+ '!./packages/{,preact/utils,preact,core,react,react-transform}/test/browser/**/*.test.tsx'
],
}
},
{
extends: true,
test: {
- include: ['./packages/{,preact/utils,preact,core,react}/test/browser/**/*.test.tsx'],
+ include: ['./packages/{,preact/utils,preact,core,react,react-transform}/test/browser/**/*.test.tsx'],
browser: {
provider: 'playwright',
enabled: true,
From 0e2f613aed4bc9635e32b2d3495e838a0d99401b Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sat, 5 Jul 2025 10:24:26 +0100
Subject: [PATCH 03/11] chore: remove mocha/sinon/chai/karma
---
karma.conf.js | 2 -
package.json | 30 +-
packages/react/runtime/package.json | 3 +
.../runtime/test/browser/mounts.test.tsx | 3 +-
.../runtime/test/browser/suspense.test.tsx | 3 +-
.../runtime/test/browser/updates.test.tsx | 1 +
.../runtime/test/browser/useSignals.test.tsx | 73 +-
.../test/node/renderToStaticMarkup.test.tsx | 5 +-
.../react/utils/test/browser/index.test.tsx | 1 +
pnpm-lock.yaml | 1218 +----------------
pnpm-workspace.yaml | 2 +
test/node/setup.js | 60 -
vitest.config.mjs | 6 +-
13 files changed, 94 insertions(+), 1313 deletions(-)
delete mode 100644 test/node/setup.js
diff --git a/karma.conf.js b/karma.conf.js
index 813fd4783..be918fc38 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -226,9 +226,7 @@ function createEsbuildPlugin(filteredPkgList) {
}
const pkgList = {
- "react/utils": "@preact/signals-react/utils",
"react/runtime": "@preact/signals-react/runtime",
- "react-transform": "@preact/signals-react-transform",
};
module.exports = function (config) {
diff --git a/package.json b/package.json
index 2923a2b15..bcb78a15f 100644
--- a/package.json
+++ b/package.json
@@ -22,17 +22,11 @@
"lint:oxlint": "oxlint 'packages/**/*.{ts,tsx,js,jsx}'",
"lint:tsc": "tsc -p tsconfig.json --noEmit",
"lint-staged": "lint-staged",
- "test": "pnpm test:karma && pnpm test:mocha && pnpm test:vitest",
- "test:minify": "pnpm test:karma:minify && pnpm test:mocha",
- "test:prod": "pnpm test:karma:prod && pnpm test:mocha:prod",
- "test:karma": "cross-env COVERAGE=true karma start karma.conf.js --single-run",
- "test:karma:minify": "cross-env COVERAGE=true MINIFY=true karma start karma.conf.js --single-run",
- "test:karma:watch": "karma start karma.conf.js --no-single-run",
- "test:karma:prod": "cross-env MINIFY=true NODE_ENV=production karma start karma.conf.js --single-run",
- "test:karma:prod:watch": "cross-env NODE_ENV=production karma start karma.conf.js --no-single-run",
- "test:mocha": "cross-env COVERAGE=true mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core,react}\"",
- "test:mocha:prod": "cross-env COVERAGE=true NODE_ENV=production mocha --require test/node/setup.js --recursive packages/*/test/node/**.test.tsx --ignore \"packages/{preact/utils,preact,core,react}\"",
+ "test": "pnpm test:vitest",
+ "test:minify": "pnpm test:vitest:prod",
+ "test:prod": "pnpm test:vitest:prod",
"test:vitest": "cross-env COVERAGE=true vitest run",
+ "test:vitest:prod": "cross-env COVERAGE=true MINIFY=true vitest run",
"docs:start": "cd docs && pnpm start",
"docs:build": "cd docs && pnpm build",
"docs:preview": "cd docs && pnpm preview",
@@ -62,39 +56,23 @@
"@changesets/cli": "^2.27.1",
"@preact/signals-react-transform": "workspace:*",
"@types/babel__traverse": "^7.18.5",
- "@types/chai": "^4.3.3",
- "@types/mocha": "^9.1.1",
"@types/node": "^18.19.103",
- "@types/sinon": "^10.0.13",
- "@types/sinon-chai": "^3.2.8",
"@vitest/browser": "^3.2.4",
"@vitest/coverage-v8": "^3.2.4",
"babel-plugin-istanbul": "^6.1.1",
"babel-plugin-transform-rename-properties": "^0.1.0",
"buffer": "^6.0.3",
- "chai": "^4.3.6",
"cross-env": "^7.0.3",
"errorstacks": "^2.4.0",
"esbuild": "^0.14.54",
"husky": "^8.0.1",
- "karma": "6.4.2",
- "karma-chai-sinon": "^0.1.5",
- "karma-chrome-launcher": "^3.1.1",
- "karma-coverage": "^2.2.0",
- "karma-esbuild": "^2.2.5",
- "karma-mocha": "^2.0.1",
- "karma-mocha-reporter": "^2.2.5",
- "karma-sinon": "^1.0.5",
"kolorist": "^1.5.1",
"lint-staged": "^14.0.1",
"microbundle": "^0.15.1",
- "mocha": "^10.0.0",
"oxlint": "^1.3.0",
"playwright": "^1.53.1",
"prettier": "^3.6.2",
"shx": "^0.3.4",
- "sinon": "^14.0.0",
- "sinon-chai": "^3.7.0",
"typescript": "~5.8.3",
"vitest": "^3.2.4",
"vite": "^6.3.5"
diff --git a/packages/react/runtime/package.json b/packages/react/runtime/package.json
index de98164a0..78e9360a3 100644
--- a/packages/react/runtime/package.json
+++ b/packages/react/runtime/package.json
@@ -21,6 +21,9 @@
"@preact/signals-core": "workspace:^1.3.0",
"use-sync-external-store": "^1.2.0"
},
+ "devDependencies": {
+ "@preact/signals-react": "workspace:*"
+ },
"peerDependencies": {
"react": "^16.14.0 || 17.x || 18.x"
}
diff --git a/packages/react/runtime/test/browser/mounts.test.tsx b/packages/react/runtime/test/browser/mounts.test.tsx
index 76ff7aa9d..ff401244b 100644
--- a/packages/react/runtime/test/browser/mounts.test.tsx
+++ b/packages/react/runtime/test/browser/mounts.test.tsx
@@ -9,6 +9,7 @@ import {
createRoot,
type Root,
} from "../../../test/shared/utils.js";
+import { describe, beforeEach, afterEach } from "vitest";
describe("@preact/signals-react/runtime", () => {
describe("mounting", () => {
@@ -25,7 +26,7 @@ describe("@preact/signals-react/runtime", () => {
beforeEach(async () => {
scratch = document.createElement("div");
document.body.appendChild(scratch);
- getConsoleErrorSpy().resetHistory();
+ getConsoleErrorSpy().mockClear();
root = await createRoot(scratch);
});
diff --git a/packages/react/runtime/test/browser/suspense.test.tsx b/packages/react/runtime/test/browser/suspense.test.tsx
index 5142ada70..458d5d26e 100644
--- a/packages/react/runtime/test/browser/suspense.test.tsx
+++ b/packages/react/runtime/test/browser/suspense.test.tsx
@@ -15,6 +15,7 @@ import {
checkHangingAct,
getConsoleErrorSpy,
} from "../../../test/shared/utils";
+import { beforeEach, afterEach, describe, it, expect } from "vitest";
describe("Suspense", () => {
let scratch: HTMLDivElement;
@@ -28,7 +29,7 @@ describe("Suspense", () => {
scratch = document.createElement("div");
document.body.appendChild(scratch);
root = await createRoot(scratch);
- getConsoleErrorSpy().resetHistory();
+ getConsoleErrorSpy().mockClear();
});
afterEach(async () => {
diff --git a/packages/react/runtime/test/browser/updates.test.tsx b/packages/react/runtime/test/browser/updates.test.tsx
index 762081f7e..422a7f5ec 100644
--- a/packages/react/runtime/test/browser/updates.test.tsx
+++ b/packages/react/runtime/test/browser/updates.test.tsx
@@ -2,6 +2,7 @@
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
import { updateSignalsTests } from "../../../test/shared/updates";
+import { describe } from "vitest";
describe("@preact/signals-react/runtime", () => {
describe("updating", () => {
diff --git a/packages/react/runtime/test/browser/useSignals.test.tsx b/packages/react/runtime/test/browser/useSignals.test.tsx
index 987faec9c..a720aa370 100644
--- a/packages/react/runtime/test/browser/useSignals.test.tsx
+++ b/packages/react/runtime/test/browser/useSignals.test.tsx
@@ -8,6 +8,7 @@ import {
checkHangingAct,
getConsoleErrorSpy,
} from "../../../test/shared/utils";
+import { describe, expect, beforeEach, afterEach, vi, it } from "vitest";
const MANAGED_COMPONENT = 1;
const MANAGED_HOOK = 2;
@@ -52,7 +53,7 @@ describe("useSignals", () => {
scratch = document.createElement("div");
document.body.appendChild(scratch);
root = await createRoot(scratch);
- getConsoleErrorSpy().resetHistory();
+ getConsoleErrorSpy().mockClear();
});
afterEach(async () => {
@@ -142,7 +143,7 @@ describe("useSignals", () => {
});
it("should not rerender components when signals they use do not change", async () => {
- const child1Spy = sinon.spy();
+ const child1Spy = vi.fn();
const signal1 = signal(0);
function Child1() {
child1Spy();
@@ -150,7 +151,7 @@ describe("useSignals", () => {
return {signal1.value}
;
}
- const child2Spy = sinon.spy();
+ const child2Spy = vi.fn();
const signal2 = signal(0);
function Child2() {
child2Spy();
@@ -158,7 +159,7 @@ describe("useSignals", () => {
return {signal2.value}
;
}
- const parentSpy = sinon.spy();
+ const parentSpy = vi.fn();
function Parent() {
parentSpy();
return (
@@ -170,39 +171,39 @@ describe("useSignals", () => {
}
function resetSpies() {
- child1Spy.resetHistory();
- child2Spy.resetHistory();
- parentSpy.resetHistory();
+ child1Spy.mockClear();
+ child2Spy.mockClear();
+ parentSpy.mockClear();
}
resetSpies();
await render();
expect(scratch.innerHTML).to.equal("0
0
");
- expect(child1Spy).to.have.been.calledOnce;
- expect(child2Spy).to.have.been.calledOnce;
- expect(parentSpy).to.have.been.calledOnce;
+ expect(child1Spy).toHaveBeenCalledOnce();
+ expect(child2Spy).toHaveBeenCalledOnce();
+ expect(parentSpy).toHaveBeenCalledOnce();
resetSpies();
await act(() => {
signal1.value += 1;
});
expect(scratch.innerHTML).to.equal("1
0
");
- expect(child1Spy).to.have.been.calledOnce;
- expect(child2Spy).to.not.have.been.called;
- expect(parentSpy).to.not.have.been.called;
+ expect(child1Spy).toHaveBeenCalledOnce();
+ expect(child2Spy).not.toHaveBeenCalled();
+ expect(parentSpy).not.toHaveBeenCalled();
resetSpies();
await act(() => {
signal2.value += 1;
});
expect(scratch.innerHTML).to.equal("1
1
");
- expect(child1Spy).to.not.have.been.called;
- expect(child2Spy).to.have.been.calledOnce;
- expect(parentSpy).to.not.have.been.called;
+ expect(child1Spy).not.toHaveBeenCalled();
+ expect(child2Spy).toHaveBeenCalledOnce();
+ expect(parentSpy).not.toHaveBeenCalled();
});
it("should not rerender components when signals they use change but they are not mounted", async () => {
- const child1Spy = sinon.spy();
+ const child1Spy = vi.fn();
const signal1 = signal(0);
function Child() {
child1Spy();
@@ -231,11 +232,11 @@ describe("useSignals", () => {
await act(() => {
signal1.value += 1;
});
- expect(child1Spy).to.have.been.calledTwice;
+ expect(child1Spy).toHaveBeenCalledTimes(2);
});
it("should not rerender components that only update signals in event handlers", async () => {
- const buttonSpy = sinon.spy();
+ const buttonSpy = vi.fn();
function AddOneButton({ num }: { num: Signal }) {
useSignals();
buttonSpy();
@@ -250,7 +251,7 @@ describe("useSignals", () => {
);
}
- const displaySpy = sinon.spy();
+ const displaySpy = vi.fn();
function DisplayNumber({ num }: { num: Signal }) {
useSignals();
displaySpy();
@@ -269,20 +270,20 @@ describe("useSignals", () => {
await render();
expect(scratch.innerHTML).to.equal("0
");
- expect(buttonSpy).to.have.been.calledOnce;
- expect(displaySpy).to.have.been.calledOnce;
+ expect(buttonSpy).toHaveBeenCalledOnce();
+ expect(displaySpy).toHaveBeenCalledOnce();
await act(() => {
scratch.querySelector("button")!.click();
});
expect(scratch.innerHTML).to.equal("1
");
- expect(buttonSpy).to.have.been.calledOnce;
- expect(displaySpy).to.have.been.calledTwice;
+ expect(buttonSpy).toHaveBeenCalledOnce();
+ expect(displaySpy).toHaveBeenCalledTimes(2);
});
it("should not rerender components that only read signals in event handlers", async () => {
- const buttonSpy = sinon.spy();
+ const buttonSpy = vi.fn();
function AddOneButton({ num }: { num: Signal }) {
useSignals();
buttonSpy();
@@ -297,7 +298,7 @@ describe("useSignals", () => {
);
}
- const displaySpy = sinon.spy();
+ const displaySpy = vi.fn();
function DisplayNumber({ num }: { num: Signal }) {
useSignals();
displaySpy();
@@ -316,15 +317,15 @@ describe("useSignals", () => {
}
function resetSpies() {
- buttonSpy.resetHistory();
- displaySpy.resetHistory();
+ buttonSpy.mockClear();
+ displaySpy.mockClear();
}
resetSpies();
await render();
expect(scratch.innerHTML).to.equal("0
");
- expect(buttonSpy).to.have.been.calledOnce;
- expect(displaySpy).to.have.been.calledOnce;
+ expect(buttonSpy).toHaveBeenCalledOnce();
+ expect(displaySpy).toHaveBeenCalledOnce();
resetSpies();
await act(() => {
@@ -332,8 +333,8 @@ describe("useSignals", () => {
});
expect(scratch.innerHTML).to.equal("2
");
- expect(buttonSpy).to.not.have.been.called;
- expect(displaySpy).to.have.been.calledOnce;
+ expect(buttonSpy).not.toHaveBeenCalled();
+ expect(displaySpy).toHaveBeenCalledOnce();
resetSpies();
await act(() => {
@@ -341,8 +342,8 @@ describe("useSignals", () => {
});
expect(scratch.innerHTML).to.equal("2
");
- expect(buttonSpy).to.not.have.been.called;
- expect(displaySpy).to.not.have.been.called;
+ expect(buttonSpy).not.toHaveBeenCalled();
+ expect(displaySpy).not.toHaveBeenCalled();
resetSpies();
await act(() => {
@@ -350,8 +351,8 @@ describe("useSignals", () => {
});
expect(scratch.innerHTML).to.equal("5
");
- expect(buttonSpy).to.not.have.been.called;
- expect(displaySpy).to.have.been.calledOnce;
+ expect(buttonSpy).not.toHaveBeenCalled();
+ expect(displaySpy).toHaveBeenCalledOnce();
});
it("should properly rerender components that use custom hooks", async () => {
diff --git a/packages/react/runtime/test/node/renderToStaticMarkup.test.tsx b/packages/react/runtime/test/node/renderToStaticMarkup.test.tsx
index 25c86dc93..86bd09ea1 100644
--- a/packages/react/runtime/test/node/renderToStaticMarkup.test.tsx
+++ b/packages/react/runtime/test/node/renderToStaticMarkup.test.tsx
@@ -2,13 +2,14 @@ import { signal, useSignalEffect } from "@preact/signals-react";
import { createElement } from "react";
import { renderToStaticMarkup } from "react-dom/server";
import { mountSignalsTests } from "../../../test/shared/mounting";
+import { describe, it, expect, vi } from "vitest";
describe("@preact/signals-react/runtime", () => {
describe("renderToStaticMarkup", () => {
mountSignalsTests(el => Promise.resolve(renderToStaticMarkup(el)));
it("should not invoke useSignalEffect", async () => {
- const spy = sinon.spy();
+ const spy = vi.fn();
const sig = signal("foo");
function App() {
@@ -18,7 +19,7 @@ describe("@preact/signals-react/runtime", () => {
const html = await renderToStaticMarkup();
expect(html).to.equal("foo
");
- expect(spy.called).to.be.false;
+ expect(spy).not.toHaveBeenCalled();
});
});
});
diff --git a/packages/react/utils/test/browser/index.test.tsx b/packages/react/utils/test/browser/index.test.tsx
index 4aa007aa4..2c2158a88 100644
--- a/packages/react/utils/test/browser/index.test.tsx
+++ b/packages/react/utils/test/browser/index.test.tsx
@@ -7,6 +7,7 @@ import {
} from "../../../test/shared/utils";
import { signal } from "@preact/signals-react";
import { createElement } from "react";
+import { describe, beforeEach, afterEach, it, expect } from "vitest";
describe("@preact/signals-react-utils", () => {
let scratch: HTMLDivElement;
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4c82baec8..f2acb78cc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -61,21 +61,9 @@ importers:
'@types/babel__traverse':
specifier: ^7.18.5
version: 7.18.5
- '@types/chai':
- specifier: ^4.3.3
- version: 4.3.3
- '@types/mocha':
- specifier: ^9.1.1
- version: 9.1.1
'@types/node':
specifier: ^18.19.103
version: 18.19.103
- '@types/sinon':
- specifier: ^10.0.13
- version: 10.0.13
- '@types/sinon-chai':
- specifier: ^3.2.8
- version: 3.2.8
'@vitest/browser':
specifier: ^3.2.4
version: 3.2.4(playwright@1.53.1)(vite@6.3.5(@types/node@18.19.103))(vitest@3.2.4)
@@ -91,9 +79,6 @@ importers:
buffer:
specifier: ^6.0.3
version: 6.0.3
- chai:
- specifier: ^4.3.6
- version: 4.3.6
cross-env:
specifier: ^7.0.3
version: 7.0.3
@@ -106,30 +91,6 @@ importers:
husky:
specifier: ^8.0.1
version: 8.0.1
- karma:
- specifier: 6.4.2
- version: 6.4.2
- karma-chai-sinon:
- specifier: ^0.1.5
- version: 0.1.5(chai@4.3.6)(karma@6.4.2)(sinon-chai@3.7.0(chai@4.3.6)(sinon@14.0.0))(sinon@14.0.0)
- karma-chrome-launcher:
- specifier: ^3.1.1
- version: 3.1.1
- karma-coverage:
- specifier: ^2.2.0
- version: 2.2.0
- karma-esbuild:
- specifier: ^2.2.5
- version: 2.2.5(esbuild@0.14.54)
- karma-mocha:
- specifier: ^2.0.1
- version: 2.0.1
- karma-mocha-reporter:
- specifier: ^2.2.5
- version: 2.2.5(karma@6.4.2)
- karma-sinon:
- specifier: ^1.0.5
- version: 1.0.5(karma@6.4.2)(sinon@14.0.0)
kolorist:
specifier: ^1.5.1
version: 1.5.1
@@ -139,9 +100,6 @@ importers:
microbundle:
specifier: ^0.15.1
version: 0.15.1(patch_hash=191ddb4c75616fbd059c0f22ba3000be648ce78c33a2f5286f6d1ff43f9ea6b8)(@types/babel__core@7.20.1)
- mocha:
- specifier: ^10.0.0
- version: 10.0.0
oxlint:
specifier: ^1.3.0
version: 1.3.0
@@ -154,12 +112,6 @@ importers:
shx:
specifier: ^0.3.4
version: 0.3.4
- sinon:
- specifier: ^14.0.0
- version: 14.0.0
- sinon-chai:
- specifier: ^3.7.0
- version: 3.7.0(chai@4.3.6)(sinon@14.0.0)
typescript:
specifier: ~5.8.3
version: 5.8.3
@@ -290,7 +242,7 @@ importers:
version: link:../react
debug:
specifier: ^4.3.4
- version: 4.3.4(supports-color@8.1.1)
+ version: 4.3.4
use-sync-external-store:
specifier: ^1.2.0
version: 1.2.0(react@18.2.0)
@@ -347,6 +299,34 @@ importers:
specifier: ^6.9.0
version: 6.10.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ packages/react/runtime:
+ dependencies:
+ '@preact/signals-core':
+ specifier: workspace:^1.3.0
+ version: link:../../core
+ react:
+ specifier: ^16.14.0 || 17.x || 18.x
+ version: 18.2.0
+ use-sync-external-store:
+ specifier: ^1.2.0
+ version: 1.2.0(react@18.2.0)
+ devDependencies:
+ '@preact/signals-react':
+ specifier: workspace:*
+ version: link:..
+
+ packages/react/utils:
+ dependencies:
+ '@preact/signals-core':
+ specifier: workspace:^1.3.0
+ version: link:../../core
+ '@preact/signals-react':
+ specifier: workspace:*
+ version: link:..
+ react:
+ specifier: ^16.14.0 || 17.x || 18.x || 19.x
+ version: 18.2.0
+
packages:
'@ampproject/remapping@2.2.0':
@@ -1172,10 +1152,6 @@ packages:
'@changesets/write@0.3.0':
resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==}
- '@colors/colors@1.5.0':
- resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
- engines: {node: '>=0.1.90'}
-
'@csstools/selector-specificity@2.0.2':
resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
engines: {node: ^12 || ^14 || >=16}
@@ -1642,21 +1618,6 @@ packages:
cpu: [x64]
os: [win32]
- '@sinonjs/commons@1.8.3':
- resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==}
-
- '@sinonjs/fake-timers@9.1.2':
- resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==}
-
- '@sinonjs/samsam@6.1.1':
- resolution: {integrity: sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==}
-
- '@sinonjs/text-encoding@0.7.2':
- resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==}
-
- '@socket.io/component-emitter@3.1.0':
- resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==}
-
'@surma/rollup-plugin-off-main-thread@2.2.3':
resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
@@ -1695,18 +1656,9 @@ packages:
'@types/babel__traverse@7.18.5':
resolution: {integrity: sha512-enCvTL8m/EHS/zIvJno9nE+ndYPh1/oNFzRYRmtUqJICG2VnCSBzMLW5VN2KCQU91f23tsNKR8v7VJJQMatl7Q==}
- '@types/chai@4.3.3':
- resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==}
-
'@types/chai@5.2.2':
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
- '@types/cookie@0.4.1':
- resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
-
- '@types/cors@2.8.12':
- resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==}
-
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
@@ -1722,9 +1674,6 @@ packages:
'@types/minimist@1.2.2':
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
- '@types/mocha@9.1.1':
- resolution: {integrity: sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==}
-
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
@@ -1761,21 +1710,9 @@ packages:
'@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
- '@types/sinon-chai@3.2.8':
- resolution: {integrity: sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==}
-
- '@types/sinon@10.0.13':
- resolution: {integrity: sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==}
-
- '@types/sinonjs__fake-timers@8.1.2':
- resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==}
-
'@types/use-sync-external-store@0.0.3':
resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==}
- '@ungap/promise-all-settled@1.1.2':
- resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==}
-
'@vitest/browser@3.2.4':
resolution: {integrity: sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==}
peerDependencies:
@@ -1829,19 +1766,11 @@ packages:
'@vitest/utils@3.2.4':
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
- accepts@1.3.8:
- resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
- engines: {node: '>= 0.6'}
-
acorn@8.8.0:
resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==}
engines: {node: '>=0.4.0'}
hasBin: true
- ansi-colors@4.1.1:
- resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
- engines: {node: '>=6'}
-
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
@@ -1854,10 +1783,6 @@ packages:
resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==}
engines: {node: '>=0.10.0'}
- ansi-regex@3.0.1:
- resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
- engines: {node: '>=4'}
-
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -1886,16 +1811,9 @@ packages:
resolution: {integrity: sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==}
engines: {node: '>=12'}
- anymatch@3.1.2:
- resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
- engines: {node: '>= 8'}
-
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
@@ -1914,9 +1832,6 @@ packages:
assert@2.0.0:
resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==}
- assertion-error@1.1.0:
- resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
-
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
@@ -1988,22 +1903,10 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- base64id@2.0.0:
- resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
- engines: {node: ^4.5.0 || >= 5.9}
-
better-path-resolve@1.0.0:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
- binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
- engines: {node: '>=8'}
-
- body-parser@1.20.0:
- resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -2024,9 +1927,6 @@ packages:
resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==}
engines: {node: '>= 10.16.0'}
- browser-stdout@1.3.1:
- resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==}
-
browserslist@4.21.9:
resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -2052,10 +1952,6 @@ packages:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
- bytes@3.1.2:
- resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
- engines: {node: '>= 0.8'}
-
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
@@ -2091,10 +1987,6 @@ packages:
caniuse-lite@1.0.30001726:
resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
- chai@4.3.6:
- resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==}
- engines: {node: '>=4'}
-
chai@5.2.0:
resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
engines: {node: '>=12'}
@@ -2118,17 +2010,10 @@ packages:
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
- check-error@1.0.2:
- resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
-
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
- chokidar@3.5.3:
- resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
- engines: {node: '>= 8.10.0'}
-
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
@@ -2194,31 +2079,15 @@ packages:
concat-with-sourcemaps@1.1.0:
resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==}
- connect@3.7.0:
- resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
- engines: {node: '>= 0.10.0'}
-
- content-type@1.0.4:
- resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
- engines: {node: '>= 0.6'}
-
convert-source-map@1.8.0:
resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie@0.4.2:
- resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
- engines: {node: '>= 0.6'}
-
core-js-compat@3.43.0:
resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
- cors@2.8.5:
- resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
- engines: {node: '>= 0.10'}
-
cosmiconfig@7.0.1:
resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
engines: {node: '>=10'}
@@ -2299,24 +2168,9 @@ packages:
resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==}
engines: {node: '>= 0.1.90'}
- custom-event@1.0.1:
- resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==}
-
dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
- date-format@4.0.13:
- resolution: {integrity: sha512-bnYCwf8Emc3pTD8pXnre+wfnjGtfi5ncMDKy7+cWZXbmRAsdWkOQHrfC1yz/KiwP5thDp2kCHWYWKBX4HP1hoQ==}
- engines: {node: '>=4.0'}
-
- debug@2.6.9:
- resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
@@ -2343,14 +2197,6 @@ packages:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
- decamelize@4.0.0:
- resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
- engines: {node: '>=10'}
-
- deep-eql@3.0.1:
- resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==}
- engines: {node: '>=0.12'}
-
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
@@ -2370,33 +2216,14 @@ packages:
resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
engines: {node: '>= 0.4'}
- depd@2.0.0:
- resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
- engines: {node: '>= 0.8'}
-
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- destroy@1.2.0:
- resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
-
detect-indent@6.1.0:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
- di@0.0.1:
- resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==}
-
- diff@5.0.0:
- resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
- engines: {node: '>=0.3.1'}
-
- diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
- engines: {node: '>=0.3.1'}
-
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -2404,9 +2231,6 @@ packages:
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
- dom-serialize@2.2.1:
- resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==}
-
dom-serializer@1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
@@ -2433,9 +2257,6 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
ejs@3.1.8:
resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
engines: {node: '>=0.10.0'}
@@ -2456,25 +2277,10 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- encodeurl@1.0.2:
- resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
- engines: {node: '>= 0.8'}
-
- engine.io-parser@5.2.1:
- resolution: {integrity: sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==}
- engines: {node: '>=10.0.0'}
-
- engine.io@6.5.4:
- resolution: {integrity: sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==}
- engines: {node: '>=10.2.0'}
-
enquirer@2.3.6:
resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
engines: {node: '>=8.6'}
- ent@2.2.0:
- resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==}
-
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@@ -2764,9 +2570,6 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
- escape-html@1.0.3:
- resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
@@ -2810,9 +2613,6 @@ packages:
resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
engines: {node: '>=12.0.0'}
- extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
-
extendable-error@0.1.7:
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
@@ -2850,10 +2650,6 @@ packages:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
- finalhandler@1.1.2:
- resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
- engines: {node: '>= 0.8'}
-
find-cache-dir@2.1.0:
resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
engines: {node: '>=6'}
@@ -2877,22 +2673,6 @@ packages:
find-yarn-workspace-root2@1.2.16:
resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
- flat@5.0.2:
- resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
- hasBin: true
-
- flatted@3.2.6:
- resolution: {integrity: sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==}
-
- follow-redirects@1.15.1:
- resolution: {integrity: sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
-
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -2952,9 +2732,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-func-name@2.0.2:
- resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
-
get-intrinsic@1.2.1:
resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
@@ -2978,10 +2755,6 @@ packages:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
- glob@7.2.0:
- resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -3063,24 +2836,12 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- he@1.2.0:
- resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
- hasBin: true
-
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- http-errors@2.0.0:
- resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
- engines: {node: '>= 0.8'}
-
- http-proxy@1.18.1:
- resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
- engines: {node: '>=8.0.0'}
-
human-id@1.0.2:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
@@ -3157,10 +2918,6 @@ packages:
is-bigint@1.0.4:
resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
is-boolean-object@1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
@@ -3231,10 +2988,6 @@ packages:
resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
engines: {node: '>=0.10.0'}
- is-plain-obj@2.1.0:
- resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
- engines: {node: '>=8'}
-
is-plain-object@2.0.4:
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
engines: {node: '>=0.10.0'}
@@ -3269,10 +3022,6 @@ packages:
resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
engines: {node: '>= 0.4'}
- is-unicode-supported@0.1.0:
- resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
- engines: {node: '>=10'}
-
is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
@@ -3284,13 +3033,6 @@ packages:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
- isarray@0.0.1:
- resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
-
- isbinaryfile@4.0.10:
- resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
- engines: {node: '>= 8.0.0'}
-
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -3310,26 +3052,14 @@ packages:
resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==}
engines: {node: '>=8'}
- istanbul-lib-report@3.0.0:
- resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==}
- engines: {node: '>=8'}
-
istanbul-lib-report@3.0.1:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
- istanbul-lib-source-maps@4.0.1:
- resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
- engines: {node: '>=10'}
-
istanbul-lib-source-maps@5.0.6:
resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
engines: {node: '>=10'}
- istanbul-reports@3.1.5:
- resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==}
- engines: {node: '>=8'}
-
istanbul-reports@3.1.7:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
engines: {node: '>=8'}
@@ -3356,10 +3086,6 @@ packages:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
hasBin: true
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
- hasBin: true
-
jsesc@0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
@@ -3393,50 +3119,6 @@ packages:
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
- just-extend@4.2.1:
- resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==}
-
- karma-chai-sinon@0.1.5:
- resolution: {integrity: sha512-J/ecbp1h3Qr6cr+XgK1Q5LOf/JlqO44hbvILcdM8Md4jxnXClhA2jzOExhKaSezziNu1ue40Q6e1OC07epqVmA==}
- engines: {node: '>=0.8'}
- peerDependencies:
- chai: '*'
- karma: '>=0.6'
- sinon: '*'
- sinon-chai: '*'
-
- karma-chrome-launcher@3.1.1:
- resolution: {integrity: sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==}
-
- karma-coverage@2.2.0:
- resolution: {integrity: sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==}
- engines: {node: '>=10.0.0'}
-
- karma-esbuild@2.2.5:
- resolution: {integrity: sha512-+NiRmZhUm/MqOsL1cAu8+RmiOMvIxWDaeYDLBB5upxHF9Hh3Og8YH43EAmDan40pxt2FKDcOjupgqIe4Tx2szQ==}
- peerDependencies:
- esbuild: '>=0.8.45'
-
- karma-mocha-reporter@2.2.5:
- resolution: {integrity: sha512-Hr6nhkIp0GIJJrvzY8JFeHpQZNseuIakGac4bpw8K1+5F0tLb6l7uvXRa8mt2Z+NVwYgCct4QAfp2R2QP6o00w==}
- peerDependencies:
- karma: '>=0.13'
-
- karma-mocha@2.0.1:
- resolution: {integrity: sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==}
-
- karma-sinon@1.0.5:
- resolution: {integrity: sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==}
- engines: {node: '>= 0.10.0'}
- peerDependencies:
- karma: '>=0.10'
- sinon: '*'
-
- karma@6.4.2:
- resolution: {integrity: sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==}
- engines: {node: '>= 10'}
- hasBin: true
-
kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
@@ -3499,10 +3181,6 @@ packages:
lodash.debounce@4.0.8:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
- lodash.get@4.4.2:
- resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
- deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
-
lodash.memoize@4.1.2:
resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
@@ -3515,33 +3193,14 @@ packages:
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
- lodash@4.17.21:
- resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-
- log-symbols@2.2.0:
- resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==}
- engines: {node: '>=4'}
-
- log-symbols@4.1.0:
- resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
- engines: {node: '>=10'}
-
log-update@5.0.1:
resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- log4js@6.6.1:
- resolution: {integrity: sha512-J8VYFH2UQq/xucdNu71io4Fo+purYYudyErgBbswWKO0MC6QVOERRomt5su/z6d3RJSmLyTGmXl3Q/XjKCf+/A==}
- engines: {node: '>=8.0'}
-
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- loupe@2.3.4:
- resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==}
- deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5
-
loupe@3.1.4:
resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
@@ -3598,10 +3257,6 @@ packages:
mdn-data@2.0.14:
resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
- media-typer@0.3.0:
- resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
- engines: {node: '>= 0.6'}
-
meow@6.1.1:
resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==}
engines: {node: '>=8'}
@@ -3621,19 +3276,6 @@ packages:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
- mime-db@1.52.0:
- resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
- engines: {node: '>= 0.6'}
-
- mime-types@2.1.35:
- resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
- engines: {node: '>= 0.6'}
-
- mime@2.6.0:
- resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
- engines: {node: '>=4.0.0'}
- hasBin: true
-
mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
@@ -3649,10 +3291,6 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- minimatch@5.0.1:
- resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==}
- engines: {node: '>=10'}
-
minimatch@5.1.0:
resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==}
engines: {node: '>=10'}
@@ -3676,15 +3314,6 @@ packages:
resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==}
engines: {node: '>= 8.0.0'}
- mkdirp@0.5.6:
- resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
- hasBin: true
-
- mocha@10.0.0:
- resolution: {integrity: sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==}
- engines: {node: '>= 14.0.0'}
- hasBin: true
-
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -3693,9 +3322,6 @@ packages:
resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
engines: {node: '>=10'}
- ms@2.0.0:
- resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
-
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -3707,23 +3333,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@3.3.3:
- resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- negotiator@0.6.3:
- resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
- engines: {node: '>= 0.6'}
-
- nise@5.1.1:
- resolution: {integrity: sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==}
-
node-fetch@2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
@@ -3742,10 +3356,6 @@ packages:
normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
normalize-range@0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
@@ -3784,14 +3394,6 @@ packages:
resolution: {integrity: sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==}
engines: {node: '>= 0.4'}
- on-finished@2.3.0:
- resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
- engines: {node: '>= 0.8'}
-
- on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
-
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -3874,10 +3476,6 @@ packages:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
- parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
-
path-exists@3.0.0:
resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
engines: {node: '>=4'}
@@ -3905,9 +3503,6 @@ packages:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
- path-to-regexp@1.8.0:
- resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==}
-
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -3918,9 +3513,6 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathval@1.1.1:
- resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
-
pathval@2.0.1:
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
engines: {node: '>= 14.16'}
@@ -4259,14 +3851,6 @@ packages:
pseudomap@1.0.2:
resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==}
- qjobs@1.2.0:
- resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==}
- engines: {node: '>=0.9'}
-
- qs@6.10.3:
- resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
- engines: {node: '>=0.6'}
-
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -4277,14 +3861,6 @@ packages:
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- raw-body@2.5.1:
- resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
- engines: {node: '>= 0.8'}
-
react-dom@18.2.0:
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
@@ -4322,10 +3898,6 @@ packages:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
rechoir@0.6.2:
resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==}
engines: {node: '>= 0.10'}
@@ -4384,9 +3956,6 @@ packages:
require-main-filename@2.0.0:
resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
- requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -4419,11 +3988,6 @@ packages:
rfdc@1.3.0:
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
rollup-plugin-bundle-size@1.0.3:
resolution: {integrity: sha512-aWj0Pvzq90fqbI5vN1IvUrlf4utOqy+AERYxwWjegH1G8PzheMnrRIgQ5tkwKVtQMDP0bHZEACW/zLDF+XgfXQ==}
@@ -4508,15 +4072,9 @@ packages:
serialize-javascript@4.0.0:
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
- serialize-javascript@6.0.0:
- resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==}
-
set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- setprototypeof@1.2.0:
- resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
shallow-clone@3.0.1:
resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
engines: {node: '>=8'}
@@ -4560,16 +4118,6 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
- sinon-chai@3.7.0:
- resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==}
- peerDependencies:
- chai: ^4.0.0
- sinon: '>=4.0.0'
-
- sinon@14.0.0:
- resolution: {integrity: sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==}
- deprecated: 16.1.1
-
sirv@3.0.1:
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
engines: {node: '>=18'}
@@ -4587,17 +4135,6 @@ packages:
engines: {node: '>=6'}
hasBin: true
- socket.io-adapter@2.5.2:
- resolution: {integrity: sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==}
-
- socket.io-parser@4.2.4:
- resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==}
- engines: {node: '>=10.0.0'}
-
- socket.io@4.7.2:
- resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==}
- engines: {node: '>=10.2.0'}
-
source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@@ -4646,24 +4183,12 @@ packages:
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- statuses@1.5.0:
- resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
- engines: {node: '>= 0.6'}
-
- statuses@2.0.1:
- resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
- engines: {node: '>= 0.8'}
-
std-env@3.9.0:
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
stream-transform@2.1.3:
resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==}
- streamroller@3.1.2:
- resolution: {integrity: sha512-wZswqzbgGGsXYIrBYhOE0yP+nQ6XRk7xDcYwuQAGTYXdyAUmvgVFE0YU1g5pvQT0m7GBaQfYcSnlHbapuK0H0A==}
- engines: {node: '>=8.0'}
-
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@@ -4692,10 +4217,6 @@ packages:
resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
engines: {node: '>=0.10.0'}
- strip-ansi@4.0.0:
- resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
- engines: {node: '>=4'}
-
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -4716,10 +4237,6 @@ packages:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
-
strip-literal@3.0.0:
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
@@ -4744,10 +4261,6 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- supports-color@8.1.1:
- resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
- engines: {node: '>=10'}
-
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -4803,10 +4316,6 @@ packages:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
- tmp@0.2.1:
- resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
- engines: {node: '>=8.17.0'}
-
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@@ -4815,10 +4324,6 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- toidentifier@1.0.1:
- resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
- engines: {node: '>=0.6'}
-
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -4838,10 +4343,6 @@ packages:
engines: {node: '>=8.0.0'}
hasBin: true
- type-detect@4.0.8:
- resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
- engines: {node: '>=4'}
-
type-fest@0.13.1:
resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
engines: {node: '>=10'}
@@ -4858,10 +4359,6 @@ packages:
resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
engines: {node: '>=10'}
- type-is@1.6.18:
- resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
- engines: {node: '>= 0.6'}
-
typescript@4.9.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
engines: {node: '>=4.2.0'}
@@ -4872,9 +4369,6 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- ua-parser-js@0.7.37:
- resolution: {integrity: sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==}
-
unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
@@ -4905,10 +4399,6 @@ packages:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
- unpipe@1.0.0:
- resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
- engines: {node: '>= 0.8'}
-
update-browserslist-db@1.0.11:
resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
hasBin: true
@@ -4941,17 +4431,9 @@ packages:
util@0.12.5:
resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
- utils-merge@1.0.1:
- resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
- engines: {node: '>= 0.4.0'}
-
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
- vary@1.1.2:
- resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
- engines: {node: '>= 0.8'}
-
vite-node@3.2.4:
resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -5050,10 +4532,6 @@ packages:
jsdom:
optional: true
- void-elements@2.0.1:
- resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==}
- engines: {node: '>=0.10.0'}
-
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
@@ -5091,9 +4569,6 @@ packages:
engines: {node: '>=8'}
hasBin: true
- workerpool@6.2.1:
- resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==}
-
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -5109,18 +4584,6 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- ws@8.11.0:
- resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -5161,30 +4624,14 @@ packages:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
- yargs-parser@20.2.4:
- resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==}
- engines: {node: '>=10'}
-
- yargs-parser@20.2.9:
- resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
- engines: {node: '>=10'}
-
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- yargs-unparser@2.0.0:
- resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==}
- engines: {node: '>=10'}
-
yargs@15.4.1:
resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
engines: {node: '>=8'}
- yargs@16.2.0:
- resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
- engines: {node: '>=10'}
-
yargs@17.5.1:
resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==}
engines: {node: '>=12'}
@@ -5234,7 +4681,7 @@ snapshots:
'@babel/types': 7.23.4
'@nicolo-ribaudo/semver-v6': 6.3.3
convert-source-map: 1.8.0
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
transitivePeerDependencies:
@@ -5253,7 +4700,7 @@ snapshots:
'@babel/traverse': 7.27.7
'@babel/types': 7.27.7
convert-source-map: 2.0.0
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -6162,7 +5609,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.23.4
'@babel/types': 7.23.4
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -6174,7 +5621,7 @@ snapshots:
'@babel/parser': 7.27.7
'@babel/template': 7.27.2
'@babel/types': 7.27.7
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -6361,8 +5808,6 @@ snapshots:
human-id: 1.0.2
prettier: 2.7.1
- '@colors/colors@1.5.0': {}
-
'@csstools/selector-specificity@2.0.2(postcss-selector-parser@6.0.10)(postcss@8.4.31)':
dependencies:
postcss: 8.4.31
@@ -6580,7 +6025,7 @@ snapshots:
'@prefresh/vite': 2.2.8(preact@10.9.0)(vite@3.2.7(@types/node@18.19.103)(terser@5.14.2))
'@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.22.8)
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
kolorist: 1.5.1
resolve: 1.22.1
vite: 3.2.7(@types/node@18.19.103)(terser@5.14.2)
@@ -6722,24 +6167,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.44.1':
optional: true
- '@sinonjs/commons@1.8.3':
- dependencies:
- type-detect: 4.0.8
-
- '@sinonjs/fake-timers@9.1.2':
- dependencies:
- '@sinonjs/commons': 1.8.3
-
- '@sinonjs/samsam@6.1.1':
- dependencies:
- '@sinonjs/commons': 1.8.3
- lodash.get: 4.4.2
- type-detect: 4.0.8
-
- '@sinonjs/text-encoding@0.7.2': {}
-
- '@socket.io/component-emitter@3.1.0': {}
-
'@surma/rollup-plugin-off-main-thread@2.2.3':
dependencies:
ejs: 3.1.8
@@ -6796,16 +6223,10 @@ snapshots:
dependencies:
'@babel/types': 7.22.5
- '@types/chai@4.3.3': {}
-
'@types/chai@5.2.2':
dependencies:
'@types/deep-eql': 4.0.2
- '@types/cookie@0.4.1': {}
-
- '@types/cors@2.8.12': {}
-
'@types/debug@4.1.12':
dependencies:
'@types/ms': 0.7.34
@@ -6818,8 +6239,6 @@ snapshots:
'@types/minimist@1.2.2': {}
- '@types/mocha@9.1.1': {}
-
'@types/ms@0.7.34': {}
'@types/node@12.20.55': {}
@@ -6854,21 +6273,8 @@ snapshots:
'@types/semver@7.5.8': {}
- '@types/sinon-chai@3.2.8':
- dependencies:
- '@types/chai': 4.3.3
- '@types/sinon': 10.0.13
-
- '@types/sinon@10.0.13':
- dependencies:
- '@types/sinonjs__fake-timers': 8.1.2
-
- '@types/sinonjs__fake-timers@8.1.2': {}
-
'@types/use-sync-external-store@0.0.3': {}
- '@ungap/promise-all-settled@1.1.2': {}
-
'@vitest/browser@3.2.4(playwright@1.53.1)(vite@6.3.5(@types/node@18.19.103))(vitest@3.2.4)':
dependencies:
'@testing-library/dom': 10.4.0
@@ -6951,15 +6357,8 @@ snapshots:
loupe: 3.1.4
tinyrainbow: 2.0.0
- accepts@1.3.8:
- dependencies:
- mime-types: 2.1.35
- negotiator: 0.6.3
-
acorn@8.8.0: {}
- ansi-colors@4.1.1: {}
-
ansi-colors@4.1.3: {}
ansi-escapes@5.0.0:
@@ -6968,8 +6367,6 @@ snapshots:
ansi-regex@2.1.1: {}
- ansi-regex@3.0.1: {}
-
ansi-regex@5.0.1: {}
ansi-regex@6.0.1: {}
@@ -6988,17 +6385,10 @@ snapshots:
ansi-styles@6.1.0: {}
- anymatch@3.1.2:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
-
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
- argparse@2.0.1: {}
-
aria-query@5.3.0:
dependencies:
dequal: 2.0.3
@@ -7021,8 +6411,6 @@ snapshots:
object-is: 1.1.5
util: 0.12.5
- assertion-error@1.1.0: {}
-
assertion-error@2.0.1: {}
ast-v8-to-istanbul@0.3.3:
@@ -7106,31 +6494,10 @@ snapshots:
base64-js@1.5.1: {}
- base64id@2.0.0: {}
-
better-path-resolve@1.0.0:
dependencies:
is-windows: 1.0.2
- binary-extensions@2.2.0: {}
-
- body-parser@1.20.0:
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.4
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.10.3
- raw-body: 2.5.1
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
boolbase@1.0.0: {}
brace-expansion@1.1.11:
@@ -7154,8 +6521,6 @@ snapshots:
dependencies:
duplexer: 0.1.1
- browser-stdout@1.3.1: {}
-
browserslist@4.21.9:
dependencies:
caniuse-lite: 1.0.30001543
@@ -7186,8 +6551,6 @@ snapshots:
builtin-modules@3.3.0: {}
- bytes@3.1.2: {}
-
cac@6.7.14: {}
call-bind@1.0.2:
@@ -7220,16 +6583,6 @@ snapshots:
caniuse-lite@1.0.30001726: {}
- chai@4.3.6:
- dependencies:
- assertion-error: 1.1.0
- check-error: 1.0.2
- deep-eql: 3.0.1
- get-func-name: 2.0.2
- loupe: 2.3.4
- pathval: 1.1.1
- type-detect: 4.0.8
-
chai@5.2.0:
dependencies:
assertion-error: 2.0.1
@@ -7261,22 +6614,8 @@ snapshots:
chardet@0.7.0: {}
- check-error@1.0.2: {}
-
check-error@2.1.1: {}
- chokidar@3.5.3:
- dependencies:
- anymatch: 3.1.2
- braces: 3.0.2
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
-
ci-info@3.9.0: {}
cli-cursor@4.0.0:
@@ -7338,34 +6677,16 @@ snapshots:
dependencies:
source-map: 0.6.1
- connect@3.7.0:
- dependencies:
- debug: 2.6.9
- finalhandler: 1.1.2
- parseurl: 1.3.3
- utils-merge: 1.0.1
- transitivePeerDependencies:
- - supports-color
-
- content-type@1.0.4: {}
-
convert-source-map@1.8.0:
dependencies:
safe-buffer: 5.1.2
convert-source-map@2.0.0: {}
- cookie@0.4.2: {}
-
core-js-compat@3.43.0:
dependencies:
browserslist: 4.25.1
- cors@2.8.5:
- dependencies:
- object-assign: 4.1.1
- vary: 1.1.2
-
cosmiconfig@7.0.1:
dependencies:
'@types/parse-json': 4.0.0
@@ -7480,21 +6801,11 @@ snapshots:
csv-stringify: 5.6.5
stream-transform: 2.1.3
- custom-event@1.0.1: {}
-
dataloader@1.4.0: {}
- date-format@4.0.13: {}
-
- debug@2.6.9:
- dependencies:
- ms: 2.0.0
-
- debug@4.3.4(supports-color@8.1.1):
+ debug@4.3.4:
dependencies:
ms: 2.1.2
- optionalDependencies:
- supports-color: 8.1.1
debug@4.4.1:
dependencies:
@@ -7507,12 +6818,6 @@ snapshots:
decamelize@1.2.0: {}
- decamelize@4.0.0: {}
-
- deep-eql@3.0.1:
- dependencies:
- type-detect: 4.0.8
-
deep-eql@5.0.2: {}
deepmerge@4.2.2: {}
@@ -7528,33 +6833,16 @@ snapshots:
has-property-descriptors: 1.0.0
object-keys: 1.1.1
- depd@2.0.0: {}
-
dequal@2.0.3: {}
- destroy@1.2.0: {}
-
detect-indent@6.1.0: {}
- di@0.0.1: {}
-
- diff@5.0.0: {}
-
- diff@5.1.0: {}
-
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
dom-accessibility-api@0.5.16: {}
- dom-serialize@2.2.1:
- dependencies:
- custom-event: 1.0.1
- ent: 2.2.0
- extend: 3.0.2
- void-elements: 2.0.1
-
dom-serializer@1.4.1:
dependencies:
domelementtype: 2.3.0
@@ -7581,8 +6869,6 @@ snapshots:
eastasianwidth@0.2.0: {}
- ee-first@1.1.1: {}
-
ejs@3.1.8:
dependencies:
jake: 10.8.5
@@ -7597,33 +6883,10 @@ snapshots:
emoji-regex@9.2.2: {}
- encodeurl@1.0.2: {}
-
- engine.io-parser@5.2.1: {}
-
- engine.io@6.5.4:
- dependencies:
- '@types/cookie': 0.4.1
- '@types/cors': 2.8.12
- '@types/node': 18.19.103
- accepts: 1.3.8
- base64id: 2.0.0
- cookie: 0.4.2
- cors: 2.8.5
- debug: 4.3.4(supports-color@8.1.1)
- engine.io-parser: 5.2.1
- ws: 8.11.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
enquirer@2.3.6:
dependencies:
ansi-colors: 4.1.3
- ent@2.2.0: {}
-
entities@2.2.0: {}
error-ex@1.3.2:
@@ -7873,8 +7136,6 @@ snapshots:
escalade@3.2.0: {}
- escape-html@1.0.3: {}
-
escape-string-regexp@1.0.5: {}
escape-string-regexp@4.0.0: {}
@@ -7911,8 +7172,6 @@ snapshots:
expect-type@1.2.1: {}
- extend@3.0.2: {}
-
extendable-error@0.1.7: {}
external-editor@3.1.0:
@@ -7952,18 +7211,6 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
- finalhandler@1.1.2:
- dependencies:
- debug: 2.6.9
- encodeurl: 1.0.2
- escape-html: 1.0.3
- on-finished: 2.3.0
- parseurl: 1.3.3
- statuses: 1.5.0
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
find-cache-dir@2.1.0:
dependencies:
commondir: 1.0.1
@@ -7995,12 +7242,6 @@ snapshots:
micromatch: 4.0.5
pkg-dir: 4.2.0
- flat@5.0.2: {}
-
- flatted@3.2.6: {}
-
- follow-redirects@1.15.1: {}
-
for-each@0.3.3:
dependencies:
is-callable: 1.2.4
@@ -8059,8 +7300,6 @@ snapshots:
get-caller-file@2.0.5: {}
- get-func-name@2.0.2: {}
-
get-intrinsic@1.2.1:
dependencies:
function-bind: 1.1.1
@@ -8090,15 +7329,6 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@7.2.0:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -8175,28 +7405,10 @@ snapshots:
dependencies:
function-bind: 1.1.2
- he@1.2.0: {}
-
hosted-git-info@2.8.9: {}
html-escaper@2.0.2: {}
- http-errors@2.0.0:
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
-
- http-proxy@1.18.1:
- dependencies:
- eventemitter3: 4.0.7
- follow-redirects: 1.15.1
- requires-port: 1.0.0
- transitivePeerDependencies:
- - debug
-
human-id@1.0.2: {}
human-signals@4.3.1: {}
@@ -8260,10 +7472,6 @@ snapshots:
dependencies:
has-bigints: 1.0.2
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.2.0
-
is-boolean-object@1.1.2:
dependencies:
call-bind: 1.0.2
@@ -8320,8 +7528,6 @@ snapshots:
is-plain-obj@1.1.0: {}
- is-plain-obj@2.1.0: {}
-
is-plain-object@2.0.4:
dependencies:
isobject: 3.0.1
@@ -8361,8 +7567,6 @@ snapshots:
gopd: 1.0.1
has-tostringtag: 1.0.0
- is-unicode-supported@0.1.0: {}
-
is-weakref@1.0.2:
dependencies:
call-bind: 1.0.2
@@ -8373,10 +7577,6 @@ snapshots:
dependencies:
is-docker: 2.2.1
- isarray@0.0.1: {}
-
- isbinaryfile@4.0.10: {}
-
isexe@2.0.0: {}
isobject@3.0.1: {}
@@ -8395,26 +7595,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- istanbul-lib-report@3.0.0:
- dependencies:
- istanbul-lib-coverage: 3.2.0
- make-dir: 3.1.0
- supports-color: 7.2.0
-
istanbul-lib-report@3.0.1:
dependencies:
istanbul-lib-coverage: 3.2.2
make-dir: 4.0.0
supports-color: 7.2.0
- istanbul-lib-source-maps@4.0.1:
- dependencies:
- debug: 4.3.4(supports-color@8.1.1)
- istanbul-lib-coverage: 3.2.0
- source-map: 0.6.1
- transitivePeerDependencies:
- - supports-color
-
istanbul-lib-source-maps@5.0.6:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
@@ -8423,11 +7609,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- istanbul-reports@3.1.5:
- dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.0
-
istanbul-reports@3.1.7:
dependencies:
html-escaper: 2.0.2
@@ -8461,10 +7642,6 @@ snapshots:
argparse: 1.0.10
esprima: 4.0.1
- js-yaml@4.1.0:
- dependencies:
- argparse: 2.0.1
-
jsesc@0.5.0: {}
jsesc@2.5.2: {}
@@ -8487,84 +7664,6 @@ snapshots:
optionalDependencies:
graceful-fs: 4.2.10
- just-extend@4.2.1: {}
-
- karma-chai-sinon@0.1.5(chai@4.3.6)(karma@6.4.2)(sinon-chai@3.7.0(chai@4.3.6)(sinon@14.0.0))(sinon@14.0.0):
- dependencies:
- chai: 4.3.6
- karma: 6.4.2
- sinon: 14.0.0
- sinon-chai: 3.7.0(chai@4.3.6)(sinon@14.0.0)
-
- karma-chrome-launcher@3.1.1:
- dependencies:
- which: 1.3.1
-
- karma-coverage@2.2.0:
- dependencies:
- istanbul-lib-coverage: 3.2.0
- istanbul-lib-instrument: 5.2.0
- istanbul-lib-report: 3.0.0
- istanbul-lib-source-maps: 4.0.1
- istanbul-reports: 3.1.5
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- karma-esbuild@2.2.5(esbuild@0.14.54):
- dependencies:
- chokidar: 3.5.3
- esbuild: 0.14.54
- source-map: 0.6.1
-
- karma-mocha-reporter@2.2.5(karma@6.4.2):
- dependencies:
- chalk: 2.4.2
- karma: 6.4.2
- log-symbols: 2.2.0
- strip-ansi: 4.0.0
-
- karma-mocha@2.0.1:
- dependencies:
- minimist: 1.2.6
-
- karma-sinon@1.0.5(karma@6.4.2)(sinon@14.0.0):
- dependencies:
- karma: 6.4.2
- sinon: 14.0.0
-
- karma@6.4.2:
- dependencies:
- '@colors/colors': 1.5.0
- body-parser: 1.20.0
- braces: 3.0.2
- chokidar: 3.5.3
- connect: 3.7.0
- di: 0.0.1
- dom-serialize: 2.2.1
- glob: 7.2.3
- graceful-fs: 4.2.10
- http-proxy: 1.18.1
- isbinaryfile: 4.0.10
- lodash: 4.17.21
- log4js: 6.6.1
- mime: 2.6.0
- minimatch: 3.1.2
- mkdirp: 0.5.6
- qjobs: 1.2.0
- range-parser: 1.2.1
- rimraf: 3.0.2
- socket.io: 4.7.2
- source-map: 0.6.1
- tmp: 0.2.1
- ua-parser-js: 0.7.37
- yargs: 16.2.0
- transitivePeerDependencies:
- - bufferutil
- - debug
- - supports-color
- - utf-8-validate
-
kind-of@6.0.3: {}
kleur@4.1.5: {}
@@ -8581,7 +7680,7 @@ snapshots:
dependencies:
chalk: 5.3.0
commander: 11.0.0
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.4
execa: 7.2.0
lilconfig: 2.1.0
listr2: 6.6.1(enquirer@2.3.6)
@@ -8630,8 +7729,6 @@ snapshots:
lodash.debounce@4.0.8: {}
- lodash.get@4.4.2: {}
-
lodash.memoize@4.1.2: {}
lodash.merge@4.6.2: {}
@@ -8640,17 +7737,6 @@ snapshots:
lodash.uniq@4.5.0: {}
- lodash@4.17.21: {}
-
- log-symbols@2.2.0:
- dependencies:
- chalk: 2.4.2
-
- log-symbols@4.1.0:
- dependencies:
- chalk: 4.1.2
- is-unicode-supported: 0.1.0
-
log-update@5.0.1:
dependencies:
ansi-escapes: 5.0.0
@@ -8659,24 +7745,10 @@ snapshots:
strip-ansi: 7.0.1
wrap-ansi: 8.1.0
- log4js@6.6.1:
- dependencies:
- date-format: 4.0.13
- debug: 4.3.4(supports-color@8.1.1)
- flatted: 3.2.6
- rfdc: 1.3.0
- streamroller: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
- loupe@2.3.4:
- dependencies:
- get-func-name: 2.0.2
-
loupe@3.1.4: {}
lru-cache@10.4.3: {}
@@ -8736,8 +7808,6 @@ snapshots:
mdn-data@2.0.14: {}
- media-typer@0.3.0: {}
-
meow@6.1.1:
dependencies:
'@types/minimist': 1.2.2
@@ -8810,14 +7880,6 @@ snapshots:
braces: 3.0.2
picomatch: 2.3.1
- mime-db@1.52.0: {}
-
- mime-types@2.1.35:
- dependencies:
- mime-db: 1.52.0
-
- mime@2.6.0: {}
-
mimic-fn@2.1.0: {}
mimic-fn@4.0.0: {}
@@ -8828,10 +7890,6 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
- minimatch@5.0.1:
- dependencies:
- brace-expansion: 2.0.1
-
minimatch@5.1.0:
dependencies:
brace-expansion: 2.0.1
@@ -8852,61 +7910,18 @@ snapshots:
mixme@0.5.4: {}
- mkdirp@0.5.6:
- dependencies:
- minimist: 1.2.6
-
- mocha@10.0.0:
- dependencies:
- '@ungap/promise-all-settled': 1.1.2
- ansi-colors: 4.1.1
- browser-stdout: 1.3.1
- chokidar: 3.5.3
- debug: 4.3.4(supports-color@8.1.1)
- diff: 5.0.0
- escape-string-regexp: 4.0.0
- find-up: 5.0.0
- glob: 7.2.0
- he: 1.2.0
- js-yaml: 4.1.0
- log-symbols: 4.1.0
- minimatch: 5.0.1
- ms: 2.1.3
- nanoid: 3.3.3
- serialize-javascript: 6.0.0
- strip-json-comments: 3.1.1
- supports-color: 8.1.1
- workerpool: 6.2.1
- yargs: 16.2.0
- yargs-parser: 20.2.4
- yargs-unparser: 2.0.0
-
mri@1.2.0: {}
mrmime@2.0.1: {}
- ms@2.0.0: {}
-
ms@2.1.2: {}
ms@2.1.3: {}
nanoid@3.3.11: {}
- nanoid@3.3.3: {}
-
nanoid@3.3.7: {}
- negotiator@0.6.3: {}
-
- nise@5.1.1:
- dependencies:
- '@sinonjs/commons': 1.8.3
- '@sinonjs/fake-timers': 9.1.2
- '@sinonjs/text-encoding': 0.7.2
- just-extend: 4.2.1
- path-to-regexp: 1.8.0
-
node-fetch@2.6.7:
dependencies:
whatwg-url: 5.0.0
@@ -8922,8 +7937,6 @@ snapshots:
semver: 5.7.2
validate-npm-package-license: 3.0.4
- normalize-path@3.0.0: {}
-
normalize-range@0.1.2: {}
normalize-url@6.1.0: {}
@@ -8956,14 +7969,6 @@ snapshots:
has-symbols: 1.0.3
object-keys: 1.1.1
- on-finished@2.3.0:
- dependencies:
- ee-first: 1.1.1
-
- on-finished@2.4.1:
- dependencies:
- ee-first: 1.1.1
-
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -9049,8 +8054,6 @@ snapshots:
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
- parseurl@1.3.3: {}
-
path-exists@3.0.0: {}
path-exists@4.0.0: {}
@@ -9068,10 +8071,6 @@ snapshots:
lru-cache: 10.4.3
minipass: 7.1.2
- path-to-regexp@1.8.0:
- dependencies:
- isarray: 0.0.1
-
path-type@4.0.0: {}
path@0.12.7:
@@ -9081,8 +8080,6 @@ snapshots:
pathe@2.0.3: {}
- pathval@1.1.1: {}
-
pathval@2.0.1: {}
picocolors@1.0.0: {}
@@ -9380,12 +8377,6 @@ snapshots:
pseudomap@1.0.2: {}
- qjobs@1.2.0: {}
-
- qs@6.10.3:
- dependencies:
- side-channel: 1.0.4
-
queue-microtask@1.2.3: {}
quick-lru@4.0.1: {}
@@ -9394,15 +8385,6 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
- range-parser@1.2.1: {}
-
- raw-body@2.5.1:
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
-
react-dom@18.2.0(react@18.2.0):
dependencies:
loose-envify: 1.4.0
@@ -9447,10 +8429,6 @@ snapshots:
pify: 4.0.1
strip-bom: 3.0.0
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
rechoir@0.6.2:
dependencies:
resolve: 1.22.8
@@ -9516,8 +8494,6 @@ snapshots:
require-main-filename@2.0.0: {}
- requires-port@1.0.0: {}
-
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@@ -9549,10 +8525,6 @@ snapshots:
rfdc@1.3.0: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
rollup-plugin-bundle-size@1.0.3:
dependencies:
chalk: 1.1.3
@@ -9673,14 +8645,8 @@ snapshots:
dependencies:
randombytes: 2.1.0
- serialize-javascript@6.0.0:
- dependencies:
- randombytes: 2.1.0
-
set-blocking@2.0.0: {}
- setprototypeof@1.2.0: {}
-
shallow-clone@3.0.1:
dependencies:
kind-of: 6.0.3
@@ -9720,20 +8686,6 @@ snapshots:
signal-exit@4.1.0: {}
- sinon-chai@3.7.0(chai@4.3.6)(sinon@14.0.0):
- dependencies:
- chai: 4.3.6
- sinon: 14.0.0
-
- sinon@14.0.0:
- dependencies:
- '@sinonjs/commons': 1.8.3
- '@sinonjs/fake-timers': 9.1.2
- '@sinonjs/samsam': 6.1.1
- diff: 5.1.0
- nise: 5.1.1
- supports-color: 7.2.0
-
sirv@3.0.1:
dependencies:
'@polka/url': 1.0.0-next.29
@@ -9756,34 +8708,6 @@ snapshots:
wcwidth: 1.0.1
yargs: 15.4.1
- socket.io-adapter@2.5.2:
- dependencies:
- ws: 8.11.0
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
-
- socket.io-parser@4.2.4:
- dependencies:
- '@socket.io/component-emitter': 3.1.0
- debug: 4.3.4(supports-color@8.1.1)
- transitivePeerDependencies:
- - supports-color
-
- socket.io@4.7.2:
- dependencies:
- accepts: 1.3.8
- base64id: 2.0.0
- cors: 2.8.5
- debug: 4.3.4(supports-color@8.1.1)
- engine.io: 6.5.4
- socket.io-adapter: 2.5.2
- socket.io-parser: 4.2.4
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
source-map-js@1.0.2: {}
source-map-js@1.2.1: {}
@@ -9824,24 +8748,12 @@ snapshots:
stackback@0.0.2: {}
- statuses@1.5.0: {}
-
- statuses@2.0.1: {}
-
std-env@3.9.0: {}
stream-transform@2.1.3:
dependencies:
mixme: 0.5.4
- streamroller@3.1.2:
- dependencies:
- date-format: 4.0.13
- debug: 4.4.1
- fs-extra: 8.1.0
- transitivePeerDependencies:
- - supports-color
-
string-argv@0.3.2: {}
string-hash@1.1.3: {}
@@ -9885,10 +8797,6 @@ snapshots:
dependencies:
ansi-regex: 2.1.1
- strip-ansi@4.0.0:
- dependencies:
- ansi-regex: 3.0.1
-
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
@@ -9905,8 +8813,6 @@ snapshots:
dependencies:
min-indent: 1.0.1
- strip-json-comments@3.1.1: {}
-
strip-literal@3.0.0:
dependencies:
js-tokens: 9.0.1
@@ -9929,10 +8835,6 @@ snapshots:
dependencies:
has-flag: 4.0.0
- supports-color@8.1.1:
- dependencies:
- has-flag: 4.0.0
-
supports-preserve-symlinks-flag@1.0.0: {}
svgo@2.8.0:
@@ -9990,18 +8892,12 @@ snapshots:
dependencies:
os-tmpdir: 1.0.2
- tmp@0.2.1:
- dependencies:
- rimraf: 3.0.2
-
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- toidentifier@1.0.1: {}
-
totalist@3.0.1: {}
tr46@0.0.3: {}
@@ -10020,8 +8916,6 @@ snapshots:
wcwidth: 1.0.1
yargs: 17.5.1
- type-detect@4.0.8: {}
-
type-fest@0.13.1: {}
type-fest@0.6.0: {}
@@ -10030,17 +8924,10 @@ snapshots:
type-fest@1.4.0: {}
- type-is@1.6.18:
- dependencies:
- media-typer: 0.3.0
- mime-types: 2.1.35
-
typescript@4.9.5: {}
typescript@5.8.3: {}
- ua-parser-js@0.7.37: {}
-
unbox-primitive@1.0.2:
dependencies:
call-bind: 1.0.2
@@ -10065,8 +8952,6 @@ snapshots:
universalify@2.0.0: {}
- unpipe@1.0.0: {}
-
update-browserslist-db@1.0.11(browserslist@4.21.9):
dependencies:
browserslist: 4.21.9
@@ -10103,15 +8988,11 @@ snapshots:
is-typed-array: 1.1.10
which-typed-array: 1.1.9
- utils-merge@1.0.1: {}
-
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.1.1
spdx-expression-parse: 3.0.1
- vary@1.1.2: {}
-
vite-node@3.2.4(@types/node@18.19.103):
dependencies:
cac: 6.7.14
@@ -10199,8 +9080,6 @@ snapshots:
- tsx
- yaml
- void-elements@2.0.1: {}
-
wcwidth@1.0.1:
dependencies:
defaults: 1.0.3
@@ -10249,8 +9128,6 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
- workerpool@6.2.1: {}
-
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
@@ -10271,8 +9148,6 @@ snapshots:
wrappy@1.0.2: {}
- ws@8.11.0: {}
-
ws@8.18.3: {}
y18n@4.0.3: {}
@@ -10294,19 +9169,8 @@ snapshots:
camelcase: 5.3.1
decamelize: 1.2.0
- yargs-parser@20.2.4: {}
-
- yargs-parser@20.2.9: {}
-
yargs-parser@21.1.1: {}
- yargs-unparser@2.0.0:
- dependencies:
- camelcase: 6.3.0
- decamelize: 4.0.0
- flat: 5.0.2
- is-plain-obj: 2.1.0
-
yargs@15.4.1:
dependencies:
cliui: 6.0.0
@@ -10321,16 +9185,6 @@ snapshots:
y18n: 4.0.3
yargs-parser: 18.1.3
- yargs@16.2.0:
- dependencies:
- cliui: 7.0.4
- escalade: 3.1.1
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 20.2.9
-
yargs@17.5.1:
dependencies:
cliui: 7.0.4
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 765b513b9..cdcde6aa5 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -2,6 +2,8 @@ packages:
# all packages in direct subdirs of packages/
- "packages/*"
- "packages/preact/utils"
+ - "packages/react/utils"
+ - "packages/react/runtime"
# all packages in subdirs of components/
- "docs/**"
# exclude packages that are inside test directories
diff --git a/test/node/setup.js b/test/node/setup.js
deleted file mode 100644
index 8c08f848c..000000000
--- a/test/node/setup.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// import register from "@babel/register";
-const register = require("@babel/register").default;
-const chai = require("chai");
-const sinon = require("sinon");
-const sinonChai = require("sinon-chai");
-
-globalThis.expect = chai.expect;
-// @ts-expect-error Not sure why TS isn't picking up the declared sinon global from karma-chai-sinon
-globalThis.sinon = sinon;
-chai.use(sinonChai);
-
-const coverage = String(process.env.COVERAGE) === "true";
-
-// @babel/register doesn't hook into the experimental NodeJS ESM loader API so
-// we need all test files to run as CommonJS modules in Node
-const env = [
- "@babel/preset-env",
- {
- targets: {
- node: "current",
- },
- loose: true,
- modules: "commonjs",
- },
-];
-
-const jsx = [
- "@babel/preset-react",
- {
- runtime: "classic",
- pragma: "createElement",
- pragmaFrag: "Fragment",
- },
-];
-
-const ts = [
- "@babel/preset-typescript",
- {
- jsxPragma: "createElement",
- jsxPragmaFrag: "Fragment",
- },
-];
-
-register({
- extensions: [".js", ".mjs", ".ts", ".tsx", ".mts", ".mtsx"],
- cache: true,
-
- sourceMaps: "inline",
- presets: [ts, jsx, env],
- plugins: [
- coverage && [
- "istanbul",
- {
- // TODO: Currently NodeJS tests always run against dist files. Should we
- // change this?
- // include: minify ? "**/dist/**/*.js" : "**/src/**/*.{js,jsx,ts,tsx}",
- },
- ],
- ].filter(Boolean),
-});
diff --git a/vitest.config.mjs b/vitest.config.mjs
index b4534a52e..39781fe3a 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -58,15 +58,15 @@ export default defineConfig({
extends: true,
test: {
include: [
- './packages/{,preact/utils,preact,core,react,react-transform}/test/**/*.test.tsx',
- '!./packages/{,preact/utils,preact,core,react,react-transform}/test/browser/**/*.test.tsx'
+ './packages/**/test/**/*.test.tsx',
+ '!./packages/**/test/browser/**/*.test.tsx'
],
}
},
{
extends: true,
test: {
- include: ['./packages/{,preact/utils,preact,core,react,react-transform}/test/browser/**/*.test.tsx'],
+ include: ['./packages/**/test/browser/**/*.test.tsx'],
browser: {
provider: 'playwright',
enabled: true,
From bd1a4e812274fa8a5d5d7e345c67428ad9cd9d99 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 11:26:46 +0100
Subject: [PATCH 04/11] fix: add exact import
---
vitest.config.mjs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/vitest.config.mjs b/vitest.config.mjs
index 39781fe3a..a6452ad9a 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -19,6 +19,9 @@ export default defineConfig({
'@preact/signals-react': path.join(
dirname, './packages/react/dist/signals.min.js'
),
+ '@preact/signals-react-runtime': path.join(
+ dirname, './packages/react/runtime/dist/runtime.min.js'
+ ),
'@preact/signals-react-utils': path.join(
dirname, './packages/react/utils/utils.min.js'
),
@@ -31,7 +34,7 @@ export default defineConfig({
} : {}
},
plugins: [
- manglePlugin
+ manglePlugin,
],
// TODO (43081j): stop faking node globals and sort out the transform
// tests. Either run them in node, or somehow run babel in node but the
From 0ba8477ce5d3b9b08ee8227b98369700ffcfef1c Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 12:00:16 +0100
Subject: [PATCH 05/11] fix: strongly type mocked components
---
packages/react/test/shared/updates.tsx | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/packages/react/test/shared/updates.tsx b/packages/react/test/shared/updates.tsx
index e9c1d9bdd..d3df9b033 100644
--- a/packages/react/test/shared/updates.tsx
+++ b/packages/react/test/shared/updates.tsx
@@ -21,7 +21,15 @@ import {
} from "react";
import type { FunctionComponent } from "react";
import { renderToStaticMarkup } from "react-dom/server";
-import { beforeEach, afterEach, describe, it, expect, vi } from "vitest";
+import {
+ beforeEach,
+ afterEach,
+ describe,
+ it,
+ expect,
+ vi,
+ MockInstance,
+} from "vitest";
import {
act,
@@ -524,7 +532,7 @@ export function updateSignalsTests(usingTransform = false) {
it("should minimize rerenders when passing signals through context", async () => {
function spyOn(
c: FunctionComponent
- ) {
+ ): FunctionComponent
& MockInstance> {
return vi.fn(c);
}
From 02fcba8fbdff96fe5df9c8c382df51f89619f069 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 14:06:39 +0100
Subject: [PATCH 06/11] test: add the sketchy transform back
---
scripts/transform-plugin.mjs | 92 ++++++++++++++++++++++++++++++++++++
vitest.config.mjs | 2 +
2 files changed, 94 insertions(+)
create mode 100644 scripts/transform-plugin.mjs
diff --git a/scripts/transform-plugin.mjs b/scripts/transform-plugin.mjs
new file mode 100644
index 000000000..4540b5bbd
--- /dev/null
+++ b/scripts/transform-plugin.mjs
@@ -0,0 +1,92 @@
+import { fileURLToPath } from 'node:url';
+import path from 'node:path';
+import { transformAsync } from '@babel/core';
+
+export function createEsbuildPlugin() {
+ const pending = new Map();
+ const cache = new Map();
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
+ const projectRoot = path.resolve(__dirname, '..');
+
+ return {
+ name: 'react-transform',
+ enforce: 'pre',
+ async transform(code, id) {
+ if (id.includes("node_modules") ||
+ (!id.includes("packages/react/test/shared") &&
+ !id.includes("packages/react/runtime/test"))) {
+ return null;
+ }
+
+ if (!id.endsWith('.js') && !id.endsWith('.ts') && !id.endsWith('.jsx') && !id.endsWith('.tsx')) {
+ return null;
+ }
+
+ const cached = cache.get(id);
+
+ if (cached && cached.input === code) {
+ return {
+ code: cached.result,
+ map: null,
+ };
+ }
+
+ let result = code;
+
+ if (!pending.has(id)) {
+ pending.set(id, []);
+
+ const jsx = [
+ "@babel/preset-react",
+ {
+ runtime: "classic",
+ pragma: "createElement",
+ pragmaFrag: "Fragment",
+ },
+ ];
+
+ const ts = [
+ "@babel/preset-typescript",
+ {
+ jsxPragma: "createElement",
+ jsxPragmaFrag: "Fragment",
+ },
+ ];
+
+ const transformPath = path.join(projectRoot, "packages/react-transform");
+ const signalsTransform = [
+ transformPath,
+ {
+ mode: "auto",
+ },
+ ];
+
+ const tmp = await transformAsync(result, {
+ filename: id,
+ sourceMaps: "inline",
+ presets: [ts, jsx],
+ plugins: [
+ signalsTransform,
+ ],
+ });
+ result = (tmp && tmp.code) || result;
+ cache.set(id, { input: code, result });
+
+ const waited = pending.get(id);
+ pending.delete(id);
+ waited.forEach(fn => fn());
+ } else {
+ await new Promise(r => {
+ pending.get(id).push(r);
+ });
+ result = cache.get(id).result;
+ }
+
+ return {
+ code: result,
+ // TODO (43081j): will this mess sourcemaps up in tests?
+ map: null,
+ };
+ }
+ };
+}
diff --git a/vitest.config.mjs b/vitest.config.mjs
index a6452ad9a..08dc7dc90 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -1,5 +1,6 @@
import { defineConfig } from 'vitest/config';
import { manglePlugin } from './scripts/mangle-plugin.mjs';
+import { createEsbuildPlugin } from './scripts/transform-plugin.mjs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
@@ -35,6 +36,7 @@ export default defineConfig({
},
plugins: [
manglePlugin,
+ createEsbuildPlugin()
],
// TODO (43081j): stop faking node globals and sort out the transform
// tests. Either run them in node, or somehow run babel in node but the
From cf92aac048864efbe69019059de7ccadd9695137 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 14:09:47 +0100
Subject: [PATCH 07/11] fix: funky runtime path
---
vitest.config.mjs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/vitest.config.mjs b/vitest.config.mjs
index 08dc7dc90..a686f515a 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -20,6 +20,9 @@ export default defineConfig({
'@preact/signals-react': path.join(
dirname, './packages/react/dist/signals.min.js'
),
+ '@preact/signals-react/runtime': path.join(
+ dirname, './packages/react/runtime/dist/runtime.min.js'
+ ),
'@preact/signals-react-runtime': path.join(
dirname, './packages/react/runtime/dist/runtime.min.js'
),
From 76711f733f74b63e841f3743bae4f5487020ed9d Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 15:41:43 +0100
Subject: [PATCH 08/11] fix: resolve signals after runtime
---
vitest.config.mjs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/vitest.config.mjs b/vitest.config.mjs
index a686f515a..a9f1c0d65 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -17,12 +17,12 @@ export default defineConfig({
'@preact/signals': path.join(
dirname, './packages/preact/dist/signals.min.js'
),
- '@preact/signals-react': path.join(
- dirname, './packages/react/dist/signals.min.js'
- ),
'@preact/signals-react/runtime': path.join(
dirname, './packages/react/runtime/dist/runtime.min.js'
),
+ '@preact/signals-react': path.join(
+ dirname, './packages/react/dist/signals.min.js'
+ ),
'@preact/signals-react-runtime': path.join(
dirname, './packages/react/runtime/dist/runtime.min.js'
),
From 19395f1f43bcea3410183a3008d391f1dad0cb0f Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Tue, 29 Jul 2025 16:27:03 +0100
Subject: [PATCH 09/11] test: map things to places
---
scripts/mangle-plugin.mjs | 5 -----
scripts/transform-plugin.mjs | 13 ++++++++-----
vitest.config.mjs | 20 +++++++++++++-------
3 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/scripts/mangle-plugin.mjs b/scripts/mangle-plugin.mjs
index dfd482941..02315b5d2 100644
--- a/scripts/mangle-plugin.mjs
+++ b/scripts/mangle-plugin.mjs
@@ -18,11 +18,6 @@ export const manglePlugin = {
return null;
}
- const shouldTransform = id.includes('src') || id.includes('test');
- if (!shouldTransform) {
- return null;
- }
-
const transformed = await transformAsync(code, {
filename: id,
configFile: false,
diff --git a/scripts/transform-plugin.mjs b/scripts/transform-plugin.mjs
index 4540b5bbd..20c3afde1 100644
--- a/scripts/transform-plugin.mjs
+++ b/scripts/transform-plugin.mjs
@@ -32,6 +32,7 @@ export function createEsbuildPlugin() {
}
let result = code;
+ let map = null;
if (!pending.has(id)) {
pending.set(id, []);
@@ -63,14 +64,15 @@ export function createEsbuildPlugin() {
const tmp = await transformAsync(result, {
filename: id,
- sourceMaps: "inline",
+ sourceMaps: true,
presets: [ts, jsx],
plugins: [
signalsTransform,
],
});
result = (tmp && tmp.code) || result;
- cache.set(id, { input: code, result });
+ map = (tmp && tmp.map) || map;
+ cache.set(id, { input: code, result, map });
const waited = pending.get(id);
pending.delete(id);
@@ -79,13 +81,14 @@ export function createEsbuildPlugin() {
await new Promise(r => {
pending.get(id).push(r);
});
- result = cache.get(id).result;
+ const cached = cache.get(id);
+ result = cached.result;
+ map = cached.map;
}
return {
code: result,
- // TODO (43081j): will this mess sourcemaps up in tests?
- map: null,
+ map,
};
}
};
diff --git a/vitest.config.mjs b/vitest.config.mjs
index a9f1c0d65..fab7391f2 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -12,28 +12,34 @@ export default defineConfig({
resolve: {
alias: MINIFY ? {
'@preact/signals-core': path.join(
- dirname, './packages/core/dist/signals-core.min.js'
+ dirname, './packages/core/dist/signals-core.module.js'
+ ),
+ '@preact/signals/utils': path.join(
+ dirname, './packages/preact/utils/dist/utils.module.js'
),
'@preact/signals': path.join(
- dirname, './packages/preact/dist/signals.min.js'
+ dirname, './packages/preact/dist/signals.module.js'
),
'@preact/signals-react/runtime': path.join(
- dirname, './packages/react/runtime/dist/runtime.min.js'
+ dirname, './packages/react/runtime/dist/runtime.module.js'
+ ),
+ '@preact/signals-react/utils': path.join(
+ dirname, './packages/react/utils/dist/utils.module.js'
),
'@preact/signals-react': path.join(
- dirname, './packages/react/dist/signals.min.js'
+ dirname, './packages/react/dist/signals.module.js'
),
'@preact/signals-react-runtime': path.join(
- dirname, './packages/react/runtime/dist/runtime.min.js'
+ dirname, './packages/react/runtime/dist/runtime.module.js'
),
'@preact/signals-react-utils': path.join(
- dirname, './packages/react/utils/utils.min.js'
+ dirname, './packages/react/utils/dist/utils.module.js'
),
'@preact/signals-react-transform': path.join(
dirname ,'./packages/react-transform/dist/signals-transform.mjs'
),
'@preact/signals-utils': path.join(
- dirname, './packages/preact/utils/dist/utils.min.js'
+ dirname, './packages/preact/utils/dist/utils.module.js'
),
} : {}
},
From 142ff783dd32410ffc0161720a2c855c934ce82e Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sun, 19 Oct 2025 12:01:15 +0100
Subject: [PATCH 10/11] test: use vitest aliases
THIS MAY ACTUALLY WORK!
---
.../react/test/shared/create-root-legacy.ts | 22 ++++++++++++++
packages/react/test/shared/create-root.ts | 3 ++
packages/react/test/shared/utils.ts | 30 +------------------
vitest.config.mjs | 24 ++++++++++++++-
4 files changed, 49 insertions(+), 30 deletions(-)
create mode 100644 packages/react/test/shared/create-root-legacy.ts
create mode 100644 packages/react/test/shared/create-root.ts
diff --git a/packages/react/test/shared/create-root-legacy.ts b/packages/react/test/shared/create-root-legacy.ts
new file mode 100644
index 000000000..c377c7e56
--- /dev/null
+++ b/packages/react/test/shared/create-root-legacy.ts
@@ -0,0 +1,22 @@
+import { render, unmountComponentAtNode } from "react-dom";
+
+export interface Root {
+ render(element: JSX.Element | null): void;
+ unmount(): void;
+}
+
+let createRootCache: ((container: Element) => Root) | undefined;
+export function createRoot(container: Element): Root {
+ if (!createRootCache) {
+ createRootCache = (container: Element) => ({
+ render(element: JSX.Element) {
+ render(element, container);
+ },
+ unmount() {
+ unmountComponentAtNode(container);
+ },
+ });
+ }
+
+ return createRootCache(container);
+}
diff --git a/packages/react/test/shared/create-root.ts b/packages/react/test/shared/create-root.ts
new file mode 100644
index 000000000..f615e8fe2
--- /dev/null
+++ b/packages/react/test/shared/create-root.ts
@@ -0,0 +1,3 @@
+import { createRoot } from "react-dom/client";
+
+export { createRoot };
diff --git a/packages/react/test/shared/utils.ts b/packages/react/test/shared/utils.ts
index d24858ba8..ff35e9629 100644
--- a/packages/react/test/shared/utils.ts
+++ b/packages/react/test/shared/utils.ts
@@ -10,35 +10,7 @@ export interface Root {
export const isProd = process.env.NODE_ENV === "production";
export const isReact16 = React.version.startsWith("16.");
-// We need to use createRoot() if it's available, but it's only available in
-// React 18. To enable local testing with React 16 & 17, we'll create a fake
-// createRoot() that uses render() and unmountComponentAtNode() instead.
-let createRootCache: ((container: Element) => Root) | undefined;
-export async function createRoot(container: Element): Promise {
- if (!createRootCache) {
- try {
- // @ts-expect-error ESBuild will replace this import with a require() call
- // if it resolves react-dom/client. If it doesn't, it will leave the
- // import untouched causing a runtime error we'll handle below.
- const { createRoot } = await import("react-dom/client");
- createRootCache = createRoot;
- } catch (e) {
- // @ts-expect-error ESBuild will replace this import with a require() call
- // if it resolves react-dom.
- const { render, unmountComponentAtNode } = await import("react-dom");
- createRootCache = (container: Element) => ({
- render(element: JSX.Element) {
- render(element, container);
- },
- unmount() {
- unmountComponentAtNode(container);
- },
- });
- }
- }
-
- return createRootCache(container);
-}
+export { createRoot } from "./create-root";
// When testing using react's production build, we can't use act (React
// explicitly throws an error in this situation). So instead we'll fake act by
diff --git a/vitest.config.mjs b/vitest.config.mjs
index fab7391f2..5b5e8d6a7 100644
--- a/vitest.config.mjs
+++ b/vitest.config.mjs
@@ -45,7 +45,29 @@ export default defineConfig({
},
plugins: [
manglePlugin,
- createEsbuildPlugin()
+ createEsbuildPlugin(),
+ {
+ name: 'react-create-root-legacy-fallback',
+ enforce: 'pre',
+ async resolveId(source, importer) {
+ if (!importer.startsWith(path.join(dirname, 'packages/react/'))) {
+ return null;
+ }
+ const resolved = await this.resolve(source, importer);
+ if (!resolved || resolved.id !== path.join(dirname, 'packages/react/test/shared/create-root.ts')) {
+ return null;
+ }
+ const hasClient = await this.resolve('react-dom/client', importer);
+ if (!hasClient) {
+ return this.resolve(path.join(
+ dirname,
+ 'packages/react/test/shared/create-root-legacy.ts'
+ ), importer);
+ }
+ return null;
+ },
+ },
+
],
// TODO (43081j): stop faking node globals and sort out the transform
// tests. Either run them in node, or somehow run babel in node but the
From d35f61275404d2a52a6482e8184f6d7773ed0645 Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sun, 19 Oct 2025 12:05:17 +0100
Subject: [PATCH 11/11] chore: use react 16 in runtime too
---
.github/workflows/main.yml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index c26096792..54f499173 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -46,6 +46,11 @@ jobs:
- name: Test react production build
run: pnpm test:prod
+ - name: Prepare runtime with React 16
+ working-directory: packages/react/runtime
+ run: |
+ pnpm i react@16 react-dom@16 react-router-dom@5
+
- name: Test React 16
working-directory: packages/react
run: |