diff --git a/karma.conf.js b/karma.conf.js index 5bcb7cb9d..be918fc38 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -226,10 +226,7 @@ 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", }; module.exports = function (config) { 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..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}\"", - "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": "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", @@ -60,40 +54,25 @@ "@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", "@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-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/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/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..d3df9b033 100644 --- a/packages/react/test/shared/updates.tsx +++ b/packages/react/test/shared/updates.tsx @@ -21,6 +21,15 @@ import { } from "react"; import type { FunctionComponent } from "react"; import { renderToStaticMarkup } from "react-dom/server"; +import { + beforeEach, + afterEach, + describe, + it, + expect, + vi, + MockInstance, +} from "vitest"; import { act, @@ -50,7 +59,7 @@ export function updateSignalsTests(usingTransform = false) { render = root.render.bind(root); - getConsoleErrorSpy().resetHistory(); + getConsoleErrorSpy().mockClear(); }); afterEach(async () => { @@ -249,7 +258,7 @@ export function updateSignalsTests(usingTransform = false) { return

{value}

; } - const spy = sinon.spy(); + const spy = vi.fn(); function App() { spy(); return ; @@ -261,7 +270,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 () => { @@ -523,8 +532,8 @@ export function updateSignalsTests(usingTransform = false) { it("should minimize rerenders when passing signals through context", async () => { function spyOn

( c: FunctionComponent

- ) { - return sinon.spy(c); + ): FunctionComponent

& MockInstance> { + return vi.fn(c); } // Manually read signal value below so we can watch whether components rerender @@ -609,26 +618,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 +652,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 +676,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 +724,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 +745,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 +763,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 +774,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 +794,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 +807,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 +821,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 +838,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..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 sinon from "sinon"; +import { vi, expect, 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/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 72064a842..f2acb78cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,24 +55,15 @@ 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 - '@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) @@ -88,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 @@ -103,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 @@ -136,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 @@ -151,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 @@ -287,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) @@ -295,6 +250,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 @@ -341,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': @@ -1166,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} @@ -1636,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==} @@ -1689,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==} @@ -1716,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==} @@ -1755,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: @@ -1823,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'} @@ -1848,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'} @@ -1880,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==} @@ -1908,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'} @@ -1982,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==} @@ -2018,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} @@ -2046,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'} @@ -2085,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'} @@ -2112,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'} @@ -2188,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'} @@ -2293,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'} @@ -2337,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'} @@ -2364,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'} @@ -2398,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==} @@ -2427,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'} @@ -2450,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==} @@ -2758,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'} @@ -2804,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==} @@ -2844,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'} @@ -2871,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==} @@ -2946,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==} @@ -2972,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 @@ -3057,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==} @@ -3151,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'} @@ -3225,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'} @@ -3263,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==} @@ -3278,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==} @@ -3304,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'} @@ -3350,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 @@ -3387,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'} @@ -3493,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==} @@ -3509,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==} @@ -3592,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'} @@ -3615,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'} @@ -3643,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'} @@ -3670,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'} @@ -3687,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==} @@ -3701,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} @@ -3736,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'} @@ -3778,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==} @@ -3868,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'} @@ -3899,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'} @@ -3912,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'} @@ -4253,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==} @@ -4271,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: @@ -4316,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'} @@ -4378,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'} @@ -4413,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==} @@ -4502,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'} @@ -4554,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'} @@ -4581,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'} @@ -4640,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'} @@ -4686,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'} @@ -4710,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==} @@ -4738,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'} @@ -4797,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'} @@ -4809,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'} @@ -4832,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'} @@ -4852,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'} @@ -4866,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==} @@ -4899,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 @@ -4935,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} @@ -5044,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==} @@ -5085,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'} @@ -5103,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'} @@ -5155,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'} @@ -5228,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: @@ -5247,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 @@ -6156,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 @@ -6168,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 @@ -6355,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 @@ -6574,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) @@ -6716,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 @@ -6790,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 @@ -6812,8 +6239,6 @@ snapshots: '@types/minimist@1.2.2': {} - '@types/mocha@9.1.1': {} - '@types/ms@0.7.34': {} '@types/node@12.20.55': {} @@ -6848,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 @@ -6945,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: @@ -6962,8 +6367,6 @@ snapshots: ansi-regex@2.1.1: {} - ansi-regex@3.0.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -6982,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 @@ -7015,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: @@ -7100,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: @@ -7148,8 +6521,6 @@ snapshots: dependencies: duplexer: 0.1.1 - browser-stdout@1.3.1: {} - browserslist@4.21.9: dependencies: caniuse-lite: 1.0.30001543 @@ -7180,8 +6551,6 @@ snapshots: builtin-modules@3.3.0: {} - bytes@3.1.2: {} - cac@6.7.14: {} call-bind@1.0.2: @@ -7214,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 @@ -7255,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: @@ -7332,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 @@ -7474,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: @@ -7501,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: {} @@ -7522,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 @@ -7575,8 +6869,6 @@ snapshots: eastasianwidth@0.2.0: {} - ee-first@1.1.1: {} - ejs@3.1.8: dependencies: jake: 10.8.5 @@ -7591,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: @@ -7867,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: {} @@ -7905,8 +7172,6 @@ snapshots: expect-type@1.2.1: {} - extend@3.0.2: {} - extendable-error@0.1.7: {} external-editor@3.1.0: @@ -7946,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 @@ -7989,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 @@ -8053,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 @@ -8084,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 @@ -8169,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: {} @@ -8254,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 @@ -8314,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 @@ -8355,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 @@ -8367,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: {} @@ -8389,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 @@ -8417,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 @@ -8455,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: {} @@ -8481,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: {} @@ -8575,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) @@ -8624,8 +7729,6 @@ snapshots: lodash.debounce@4.0.8: {} - lodash.get@4.4.2: {} - lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -8634,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 @@ -8653,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: {} @@ -8730,8 +7808,6 @@ snapshots: mdn-data@2.0.14: {} - media-typer@0.3.0: {} - meow@6.1.1: dependencies: '@types/minimist': 1.2.2 @@ -8804,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: {} @@ -8822,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 @@ -8846,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 @@ -8916,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: {} @@ -8950,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 @@ -9043,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: {} @@ -9062,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: @@ -9075,8 +8080,6 @@ snapshots: pathe@2.0.3: {} - pathval@1.1.1: {} - pathval@2.0.1: {} picocolors@1.0.0: {} @@ -9374,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: {} @@ -9388,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 @@ -9441,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 @@ -9510,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: {} @@ -9543,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 @@ -9667,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 @@ -9714,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 @@ -9750,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: {} @@ -9818,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: {} @@ -9879,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 @@ -9899,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 @@ -9923,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: @@ -9984,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: {} @@ -10014,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: {} @@ -10024,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 @@ -10059,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 @@ -10097,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 @@ -10193,8 +9080,6 @@ snapshots: - tsx - yaml - void-elements@2.0.1: {} - wcwidth@1.0.1: dependencies: defaults: 1.0.3 @@ -10243,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 @@ -10265,8 +9148,6 @@ snapshots: wrappy@1.0.2: {} - ws@8.11.0: {} - ws@8.18.3: {} y18n@4.0.3: {} @@ -10288,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 @@ -10315,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/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 new file mode 100644 index 000000000..20c3afde1 --- /dev/null +++ b/scripts/transform-plugin.mjs @@ -0,0 +1,95 @@ +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; + let map = null; + + 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: true, + presets: [ts, jsx], + plugins: [ + signalsTransform, + ], + }); + result = (tmp && tmp.code) || result; + map = (tmp && tmp.map) || map; + cache.set(id, { input: code, result, map }); + + const waited = pending.get(id); + pending.delete(id); + waited.forEach(fn => fn()); + } else { + await new Promise(r => { + pending.get(id).push(r); + }); + const cached = cache.get(id); + result = cached.result; + map = cached.map; + } + + return { + code: result, + map, + }; + } + }; +} 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 d9d74a8e5..fab7391f2 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'; @@ -11,28 +12,50 @@ 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.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.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' ), } : {} }, plugins: [ - manglePlugin + 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 + // tests in browser + define: { + IS_REACT_ACT_ENVIRONMENT: true, + process: { + env: {} + } + }, test: { coverage: { enabled: COVERAGE, @@ -49,15 +72,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/**/test/**/*.test.tsx', + '!./packages/**/test/browser/**/*.test.tsx' ], } }, { extends: true, test: { - include: ['./packages/{,preact/utils,preact,core}/test/browser/**/*.test.tsx'], + include: ['./packages/**/test/browser/**/*.test.tsx'], browser: { provider: 'playwright', enabled: true,