From 5b6e1b798b029407450493ed5559dc14fa82da96 Mon Sep 17 00:00:00 2001 From: Mohamad Mohebifar Date: Sat, 2 Mar 2024 14:47:24 -0500 Subject: [PATCH] tests: Add UI tests for transformed codes --- packages/compiler/jest.config.ts | 25 +- packages/compiler/package.json | 6 + .../src/classes/tests/Component-basic.test.ts | 56 - packages/compiler/src/fixtures/fixture_1.js | 3 - .../__snapshots__/full-snapshot.test.ts.snap} | 194 ++-- .../compiler/src/tests/fixtures/fixture_1.jsx | 5 + .../fixtures/fixture_10.jsx} | 0 .../fixtures/fixture_11.jsx} | 4 +- .../fixtures/fixture_12.jsx} | 2 +- .../fixtures/fixture_13.jsx} | 11 +- .../fixtures/fixture_2.jsx} | 2 + .../fixtures/fixture_3.jsx} | 2 + .../fixtures/fixture_4.jsx} | 4 +- .../fixtures/fixture_5.jsx} | 4 +- .../fixtures/fixture_6.jsx} | 4 +- .../fixtures/fixture_7.jsx} | 2 +- .../fixtures/fixture_8.jsx} | 6 +- .../fixtures/fixture_9.jsx} | 2 +- .../full-snapshot.test.ts} | 0 .../src/tests/render-tests/fixture-1.test.tsx | 12 + .../tests/render-tests/fixture-11.test.tsx | 16 + .../tests/render-tests/fixture-12.test.tsx | 27 + .../tests/render-tests/fixture-13.test.tsx | 30 + .../src/tests/render-tests/fixture-2.test.tsx | 12 + .../src/tests/render-tests/fixture-3.test.tsx | 12 + .../src/tests/render-tests/fixture-4.test.tsx | 32 + .../src/tests/render-tests/fixture-5.test.tsx | 40 + .../src/tests/render-tests/fixture-6.test.tsx | 40 + .../src/tests/render-tests/fixture-7.test.tsx | 45 + .../src/tests/render-tests/fixture-8.test.tsx | 29 + .../src/tests/render-tests/fixture-9.test.tsx | 30 + packages/compiler/src/utils/ast-tools.ts | 1 + .../compiler/src/utils/find-components.ts | 8 +- .../utils/get-declared-identifiers-in-lval.ts | 1 - packages/compiler/src/utils/testing.ts | 4 +- packages/compiler/test-babel-plugin.cjs | 12 + packages/jest-config/package.json | 2 +- yarn.lock | 1026 ++++++++++++++++- 38 files changed, 1495 insertions(+), 216 deletions(-) delete mode 100644 packages/compiler/src/classes/tests/Component-basic.test.ts delete mode 100644 packages/compiler/src/fixtures/fixture_1.js rename packages/compiler/src/{classes/tests/__snapshots__/Component-fixtures.test.ts.snap => tests/__snapshots__/full-snapshot.test.ts.snap} (91%) create mode 100644 packages/compiler/src/tests/fixtures/fixture_1.jsx rename packages/compiler/src/{fixtures/fixture_10.js => tests/fixtures/fixture_10.jsx} (100%) rename packages/compiler/src/{fixtures/fixture_11.js => tests/fixtures/fixture_11.jsx} (62%) rename packages/compiler/src/{fixtures/fixture_12.js => tests/fixtures/fixture_12.jsx} (89%) rename packages/compiler/src/{fixtures/fixture_13.js => tests/fixtures/fixture_13.jsx} (64%) rename packages/compiler/src/{fixtures/fixture_2.js => tests/fixtures/fixture_2.jsx} (81%) rename packages/compiler/src/{fixtures/fixture_3.js => tests/fixtures/fixture_3.jsx} (83%) rename packages/compiler/src/{fixtures/fixture_4.js => tests/fixtures/fixture_4.jsx} (66%) rename packages/compiler/src/{fixtures/fixture_5.js => tests/fixtures/fixture_5.jsx} (82%) rename packages/compiler/src/{fixtures/fixture_6.js => tests/fixtures/fixture_6.jsx} (86%) rename packages/compiler/src/{fixtures/fixture_7.js => tests/fixtures/fixture_7.jsx} (91%) rename packages/compiler/src/{fixtures/fixture_8.js => tests/fixtures/fixture_8.jsx} (75%) rename packages/compiler/src/{fixtures/fixture_9.js => tests/fixtures/fixture_9.jsx} (94%) rename packages/compiler/src/{classes/tests/Component-fixtures.test.ts => tests/full-snapshot.test.ts} (100%) create mode 100644 packages/compiler/src/tests/render-tests/fixture-1.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-11.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-12.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-13.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-2.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-3.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-4.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-5.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-6.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-7.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-8.test.tsx create mode 100644 packages/compiler/src/tests/render-tests/fixture-9.test.tsx create mode 100644 packages/compiler/test-babel-plugin.cjs diff --git a/packages/compiler/jest.config.ts b/packages/compiler/jest.config.ts index 0ac6380..8ef8bb4 100644 --- a/packages/compiler/jest.config.ts +++ b/packages/compiler/jest.config.ts @@ -78,20 +78,12 @@ const config: Config = { // ], // An array of file extensions your modules use - // moduleFileExtensions: [ - // "js", - // "mjs", - // "cjs", - // "jsx", - // "ts", - // "tsx", - // "json", - // "node" - // ], + moduleFileExtensions: ["js", "jsx", "ts", "tsx"], // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module moduleNameMapper: { "^~/(.*)$": "/src/$1", + "@react-unforget/runtime": "/../runtime/dist/index.cjs" }, // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader @@ -175,7 +167,18 @@ const config: Config = { // testRunner: "jest-circus/runner", // A map from regular expressions to paths to transformers - // transform: undefined, + transform: { + "fixture_\\d+\\.jsx?$": [ + "babel-jest", + { + presets: [ + ["@babel/preset-env", { targets: { node: "current" } }], + "@babel/preset-react", + ], + plugins: ["./test-babel-plugin.cjs"], + }, + ], + }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation // transformIgnorePatterns: [ diff --git a/packages/compiler/package.json b/packages/compiler/package.json index 67c2b78..07435f8 100644 --- a/packages/compiler/package.json +++ b/packages/compiler/package.json @@ -25,12 +25,18 @@ }, "devDependencies": { "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/preset-env": "^7.24.0", + "@babel/preset-react": "^7.23.3", "@babel/standalone": "^7.24.0", "@react-unforget/eslint-config": "*", "@react-unforget/jest-config": "*", "@react-unforget/typescript-config": "*", + "@testing-library/react": "^14.2.1", + "@testing-library/user-event": "^14.5.2", "@types/babel__standalone": "^7.1.7", "@types/babel__traverse": "^7.20.5", + "react": "^18.2.0", + "react-dom": "^18.2.0", "tsup": "^8.0.2" }, "dependencies": { diff --git a/packages/compiler/src/classes/tests/Component-basic.test.ts b/packages/compiler/src/classes/tests/Component-basic.test.ts deleted file mode 100644 index a39858e..0000000 --- a/packages/compiler/src/classes/tests/Component-basic.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { findComponents } from "~/utils/find-components"; -import { parseFixture } from "~/utils/testing"; - -const parseCodeAndRun = (fixtureName: string) => { - const programPath = parseFixture(fixtureName); - const [component] = findComponents(programPath); - - return [component!, programPath] as const; -}; - -// TODO: Re-enable these tests -// Due to frequent changes in the compiler, these tests are disabled for now -describe.skip("ComponentVariable", () => { - describe("computeDependencyGraph", () => { - it("basic example", () => { - const [component] = parseCodeAndRun("fixture_1"); - component.computeComponentSegments(); - - const componentVariables = component.__debug_getComponentVariables(); - - expect(componentVariables.size).toStrictEqual(4); - expect([...componentVariables.keys()]).toStrictEqual([ - "myDerivedVariable", - "state", - "_unwrapped", - "setState", - ]); - - // // state depends on nothing - // expect([ - // ...componentVariables.get("state")!.getDependencies().keys(), - // ]).toStrictEqual(["_unwrapped"]); - - // // myDerivedVariable depends on state - // expect([ - // ...componentVariables - // .get("myDerivedVariable")! - // .getDependencies() - // .keys(), - // ]).toStrictEqual(["state"]); - }); - - describe("getRootComponentVariables", () => { - it("returns all root component variables", () => { - const [component] = parseCodeAndRun("fixture_2"); - component.computeComponentSegments(); - - const rootComponentVariables = component.getComponentVariables(); - - expect( - rootComponentVariables.map((v) => v.binding.identifier.name) - ).toEqual(["_unwrapped", "_props"]); - }); - }); - }); -}); diff --git a/packages/compiler/src/fixtures/fixture_1.js b/packages/compiler/src/fixtures/fixture_1.js deleted file mode 100644 index 5f08b85..0000000 --- a/packages/compiler/src/fixtures/fixture_1.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function SimpleJSX() { - return
Hello world!
; -} diff --git a/packages/compiler/src/classes/tests/__snapshots__/Component-fixtures.test.ts.snap b/packages/compiler/src/tests/__snapshots__/full-snapshot.test.ts.snap similarity index 91% rename from packages/compiler/src/classes/tests/__snapshots__/Component-fixtures.test.ts.snap rename to packages/compiler/src/tests/__snapshots__/full-snapshot.test.ts.snap index b2a568b..ed69c60 100644 --- a/packages/compiler/src/classes/tests/__snapshots__/Component-fixtures.test.ts.snap +++ b/packages/compiler/src/tests/__snapshots__/full-snapshot.test.ts.snap @@ -2,6 +2,7 @@ exports[`Component fixtures applyModification fixture_1 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; +import React from "react"; export default function SimpleJSX() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -10,7 +11,7 @@ export default function SimpleJSX() { 1); let _unwrappedJsxEl = _$unforgetCache[0].v; const _segment = () => { - _unwrappedJsxEl =
Hello world!
; + _unwrappedJsxEl =

Hello world!

; }; if (_$unforgetCache[0].n) { _segment(); @@ -23,6 +24,7 @@ export default function SimpleJSX() { exports[`Component fixtures applyModification fixture_2 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; +import React from "react"; const SimpleJSXWithArrowFunction = () => { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -45,6 +47,7 @@ export default SimpleJSXWithArrowFunction;" exports[`Component fixtures applyModification fixture_3 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; +import React from "react"; const SimpleJSXWithFunctionExpression = function () { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -67,7 +70,7 @@ export default SimpleJSXWithFunctionExpression;" exports[`Component fixtures applyModification fixture_4 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; export default function Counter() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -98,7 +101,7 @@ export default function Counter() { }; let _unwrappedJsxEl2 = _$unforgetCache[5].v; const _segment5 = () => { - _unwrappedJsxEl2 = Count: {state}; + _unwrappedJsxEl2 = Count: {state}; }; let _unwrappedJsxEl3 = _$unforgetCache[6].v; const _segment6 = () => { @@ -146,7 +149,7 @@ export default function Counter() { exports[`Component fixtures applyModification fixture_5 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithMutationTracking() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -199,7 +202,7 @@ export default function CounterWithMutationTracking() { }; let _unwrappedJsxEl3 = _$unforgetCache[6].v; const _segment10 = () => { - _unwrappedJsxEl3 =
+ _unwrappedJsxEl3 =
{_unwrappedJsxEl2} {text}
; }; @@ -250,7 +253,7 @@ export default function CounterWithMutationTracking() { exports[`Component fixtures applyModification fixture_6 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; function InnerComponentWithProps(_props) { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -275,7 +278,7 @@ function InnerComponentWithProps(_props) { }; let _unwrappedJsxEl2 = _$unforgetCache[0].v; const _segment4 = () => { - _unwrappedJsxEl2 =
+ _unwrappedJsxEl2 =
{_unwrappedJsxEl} {text}
; }; @@ -390,7 +393,7 @@ export default function CounterWithInnerComponents() { exports[`Component fixtures applyModification fixture_7 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithEarlyReturn() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -503,25 +506,26 @@ export default function CounterWithEarlyReturn() { exports[`Component fixtures applyModification fixture_8 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJSX() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* 0 => _unwrappedJsxEl5 1 => state - 2 => _unwrapped - 3 => setState - 4 => _unwrappedJsxEl4 - 5 => _unwrappedJsxEl - 6 => _unwrappedJsxEl3 - 7 => _unwrappedJsxEl2 + 2 => newValue + 3 => _unwrapped + 4 => setState + 5 => _unwrappedJsxEl4 + 6 => _unwrappedJsxEl + 7 => _unwrappedJsxEl3 + 8 => _unwrappedJsxEl2 */ - 8); - let _unwrapped = _$unforgetCache[2].v; + 9); + let _unwrapped = _$unforgetCache[3].v; const _segment = () => { _unwrapped = useState(0); }; - let setState = _$unforgetCache[3].v; + let setState = _$unforgetCache[4].v; const _segment2 = () => { setState = _unwrapped[1]; }; @@ -544,34 +548,38 @@ export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJ } return _$unforgetNull; }; - let _unwrappedJsxEl = _$unforgetCache[5].v; + let newValue = _$unforgetCache[2].v; const _segment7 = () => { - _unwrappedJsxEl = ; + newValue = state + 1; }; - let _unwrappedJsxEl2 = _$unforgetCache[7].v; + let _unwrappedJsxEl = _$unforgetCache[6].v; const _segment8 = () => { - _unwrappedJsxEl2 = Count: {state}; + _unwrappedJsxEl = ; }; - let _unwrappedJsxEl3 = _$unforgetCache[6].v; + let _unwrappedJsxEl2 = _$unforgetCache[8].v; const _segment9 = () => { + _unwrappedJsxEl2 = Count: {newValue}; + }; + let _unwrappedJsxEl3 = _$unforgetCache[7].v; + const _segment10 = () => { _unwrappedJsxEl3 =
{_unwrappedJsxEl2}
; }; - let _unwrappedJsxEl4 = _$unforgetCache[4].v; - const _segment10 = () => { + let _unwrappedJsxEl4 = _$unforgetCache[5].v; + const _segment11 = () => { _unwrappedJsxEl4 =
{_unwrappedJsxEl} {_unwrappedJsxEl3}
; }; _segment(); - _$unforgetCache[2].e(_unwrapped); - if (_$unforgetCache[3].n || _unwrapped[1] !== _$unforgetCache[2].v[1] || _unwrapped !== _$unforgetCache[2].v) { + _$unforgetCache[3].e(_unwrapped); + if (_$unforgetCache[4].n || _unwrapped[1] !== _$unforgetCache[3].v[1] || _unwrapped !== _$unforgetCache[3].v) { _segment2(); - _$unforgetCache[3].e(setState); + _$unforgetCache[4].e(setState); } - if (_$unforgetCache[1].n || _unwrapped !== _$unforgetCache[2].v || _unwrapped[0] !== _$unforgetCache[2].v[0]) { + if (_$unforgetCache[1].n || _unwrapped !== _$unforgetCache[3].v || _unwrapped[0] !== _$unforgetCache[3].v[0]) { _segment3(); _$unforgetCache[1].e(state); } @@ -581,21 +589,25 @@ export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJ return _temp; } } - if (_$unforgetCache[5].n || setState !== _$unforgetCache[3].v || state !== _$unforgetCache[1].v) { + if (_$unforgetCache[2].n || state !== _$unforgetCache[1].v) { _segment7(); - _$unforgetCache[5].e(_unwrappedJsxEl); + _$unforgetCache[2].e(newValue); } - if (_$unforgetCache[7].n || state !== _$unforgetCache[1].v) { + if (_$unforgetCache[6].n || setState !== _$unforgetCache[4].v || state !== _$unforgetCache[1].v) { _segment8(); - _$unforgetCache[7].e(_unwrappedJsxEl2); + _$unforgetCache[6].e(_unwrappedJsxEl); } - if (_$unforgetCache[6].n || _unwrappedJsxEl2 !== _$unforgetCache[7].v) { + if (_$unforgetCache[8].n || newValue !== _$unforgetCache[2].v) { _segment9(); - _$unforgetCache[6].e(_unwrappedJsxEl3); + _$unforgetCache[8].e(_unwrappedJsxEl2); } - if (_$unforgetCache[4].n || _unwrappedJsxEl !== _$unforgetCache[5].v || _unwrappedJsxEl3 !== _$unforgetCache[6].v) { + if (_$unforgetCache[7].n || _unwrappedJsxEl2 !== _$unforgetCache[8].v) { _segment10(); - _$unforgetCache[4].e(_unwrappedJsxEl4); + _$unforgetCache[7].e(_unwrappedJsxEl3); + } + if (_$unforgetCache[5].n || _unwrappedJsxEl !== _$unforgetCache[6].v || _unwrappedJsxEl3 !== _$unforgetCache[7].v) { + _segment11(); + _$unforgetCache[5].e(_unwrappedJsxEl4); } _$unforgetCommit(); return _unwrappedJsxEl4; @@ -604,7 +616,7 @@ export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJ exports[`Component fixtures applyModification fixture_9 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; const numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const numbers2 = numbers1.filter(number => number % 2 === 0); export default function UserList() { @@ -1213,6 +1225,7 @@ export default UserList;" exports[`Component fixtures applyModification fixture_11 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; +import React from "react"; export default function App() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -1238,7 +1251,7 @@ export default function App() { }; let _unwrappedJsxExp = _$unforgetCache[1].v; const _segment5 = () => { - _unwrappedJsxExp = a[0]; + _unwrappedJsxExp = a[1]; }; let _unwrappedJsxEl = _$unforgetCache[0].v; const _segment6 = () => { @@ -1258,7 +1271,7 @@ export default function App() { if (b !== _$unforgetCache[3].v) { _segment4(); } - if (_$unforgetCache[1].n || a[0] !== _$unforgetCache[2].v[0]) { + if (_$unforgetCache[1].n || a[1] !== _$unforgetCache[2].v[1]) { _segment5(); _$unforgetCache[1].e(_unwrappedJsxExp); } @@ -1273,7 +1286,7 @@ export default function App() { exports[`Component fixtures applyModification fixture_12 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; function Comp(_props) { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -1416,7 +1429,7 @@ export default function App() { exports[`Component fixtures applyModification fixture_13 1`] = ` "import { useCreateCache$unforget } from "@react-unforget/runtime"; -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithMutationTracking() { const [_$unforgetCache, _$unforgetCommit, _$unforgetNull] = useCreateCache$unforget( /* @@ -1426,24 +1439,24 @@ export default function CounterWithMutationTracking() { 3 => _unwrapped 4 => state 5 => y - 6 => x - 7 => z - 8 => _unwrappedJsxExp + 6 => _unwrappedJsxEl3 + 7 => _unwrappedJsxExp2 + 8 => x 9 => _unwrappedJsxEl2 - 10 => _unwrappedJsxExp2 - 11 => _unwrappedJsxEl3 - 12 => _unwrappedJsxExp3 + 10 => _unwrappedJsxExp3 + 11 => z + 12 => _unwrappedJsxExp */ 13); let _unwrapped = _$unforgetCache[3].v; const _segment = () => { _unwrapped = useState(0); }; - let x = _$unforgetCache[6].v; + let x = _$unforgetCache[8].v; const _segment2 = () => { x = []; }; - let z = _$unforgetCache[7].v; + let z = _$unforgetCache[11].v; const _segment3 = () => { z = []; }; @@ -1451,102 +1464,103 @@ export default function CounterWithMutationTracking() { const _segment4 = () => { _unwrappedJsxEl2 =
; }; - let _unwrappedJsxEl3 = _$unforgetCache[11].v; - const _segment5 = () => { - _unwrappedJsxEl3 =
; - }; let setState = _$unforgetCache[2].v; - const _segment6 = () => { + const _segment5 = () => { setState = _unwrapped[1]; }; let state = _$unforgetCache[4].v; - const _segment7 = () => { + const _segment6 = () => { state = _unwrapped[0]; }; let y = _$unforgetCache[5].v; - const _segment8 = () => { + const _segment7 = () => { y = state % 2 === 0 ? x : z; }; - const _segment9 = () => { + const _segment8 = () => { y.push(state); }; - let _unwrappedJsxExp = _$unforgetCache[8].v; - const _segment10 = () => { + let _unwrappedJsxExp = _$unforgetCache[12].v; + const _segment9 = () => { _unwrappedJsxExp = y[0]; }; - let _unwrappedJsxExp2 = _$unforgetCache[10].v; - const _segment11 = () => { + let _unwrappedJsxExp2 = _$unforgetCache[7].v; + const _segment10 = () => { _unwrappedJsxExp2 = JSON.stringify(x); }; - let _unwrappedJsxExp3 = _$unforgetCache[12].v; - const _segment12 = () => { + let _unwrappedJsxExp3 = _$unforgetCache[10].v; + const _segment11 = () => { _unwrappedJsxExp3 = JSON.stringify(y); }; let _unwrappedJsxEl = _$unforgetCache[1].v; - const _segment13 = () => { + const _segment12 = () => { _unwrappedJsxEl = ; }; + let _unwrappedJsxEl3 = _$unforgetCache[6].v; + const _segment13 = () => { + _unwrappedJsxEl3 =

+ x: {_unwrappedJsxExp2} + {_unwrappedJsxEl2} + y: {_unwrappedJsxExp3} +

; + }; let _unwrappedJsxEl4 = _$unforgetCache[0].v; const _segment14 = () => { _unwrappedJsxEl4 =
{_unwrappedJsxEl} {_unwrappedJsxExp} - {_unwrappedJsxEl2} - x: {_unwrappedJsxExp2} {_unwrappedJsxEl3} - y: {_unwrappedJsxExp3}
; }; _segment(); _$unforgetCache[3].e(_unwrapped); - if (_$unforgetCache[6].n || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || state !== _$unforgetCache[4].v || z !== _$unforgetCache[7].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { + if (_$unforgetCache[8].n || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || state !== _$unforgetCache[4].v || z !== _$unforgetCache[11].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { _segment2(); - _$unforgetCache[6].e(x); + _$unforgetCache[8].e(x); } - if (_$unforgetCache[7].n || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || state !== _$unforgetCache[4].v || x !== _$unforgetCache[6].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { + if (_$unforgetCache[11].n || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || x !== _$unforgetCache[8].v || state !== _$unforgetCache[4].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { _segment3(); - _$unforgetCache[7].e(z); + _$unforgetCache[11].e(z); } if (_$unforgetCache[9].n) { _segment4(); _$unforgetCache[9].e(_unwrappedJsxEl2); } - if (_$unforgetCache[11].n) { - _segment5(); - _$unforgetCache[11].e(_unwrappedJsxEl3); - } if (_$unforgetCache[2].n || _unwrapped !== _$unforgetCache[3].v || _unwrapped[1] !== _$unforgetCache[3].v[1]) { - _segment6(); + _segment5(); _$unforgetCache[2].e(setState); } - if (_$unforgetCache[4].n || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v || y !== _$unforgetCache[5].v || x !== _$unforgetCache[6].v || z !== _$unforgetCache[7].v) { - _segment7(); + if (_$unforgetCache[4].n || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v || y !== _$unforgetCache[5].v || x !== _$unforgetCache[8].v || z !== _$unforgetCache[11].v) { + _segment6(); _$unforgetCache[4].e(state); } - if (_$unforgetCache[5].n || state !== _$unforgetCache[4].v || x !== _$unforgetCache[6].v || z !== _$unforgetCache[7].v || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { - _segment8(); + if (_$unforgetCache[5].n || x !== _$unforgetCache[8].v || state !== _$unforgetCache[4].v || z !== _$unforgetCache[11].v || y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v || _unwrapped[0] !== _$unforgetCache[3].v[0] || _unwrapped !== _$unforgetCache[3].v) { + _segment7(); _$unforgetCache[5].e(y); } if (y !== _$unforgetCache[5].v || state !== _$unforgetCache[4].v) { + _segment8(); + } + if (_$unforgetCache[12].n || y[0] !== _$unforgetCache[5].v[0]) { _segment9(); + _$unforgetCache[12].e(_unwrappedJsxExp); } - if (_$unforgetCache[8].n || y[0] !== _$unforgetCache[5].v[0]) { + if (_$unforgetCache[7].n || x !== _$unforgetCache[8].v) { _segment10(); - _$unforgetCache[8].e(_unwrappedJsxExp); + _$unforgetCache[7].e(_unwrappedJsxExp2); } - if (_$unforgetCache[10].n || x !== _$unforgetCache[6].v) { + if (_$unforgetCache[10].n || y !== _$unforgetCache[5].v) { _segment11(); - _$unforgetCache[10].e(_unwrappedJsxExp2); + _$unforgetCache[10].e(_unwrappedJsxExp3); } - if (_$unforgetCache[12].n || y !== _$unforgetCache[5].v) { + if (_$unforgetCache[1].n || setState !== _$unforgetCache[2].v || state !== _$unforgetCache[4].v) { _segment12(); - _$unforgetCache[12].e(_unwrappedJsxExp3); + _$unforgetCache[1].e(_unwrappedJsxEl); } - if (_$unforgetCache[1].n || setState !== _$unforgetCache[2].v || state !== _$unforgetCache[4].v) { + if (_$unforgetCache[6].n || _unwrappedJsxExp2 !== _$unforgetCache[7].v || _unwrappedJsxEl2 !== _$unforgetCache[9].v || _unwrappedJsxExp3 !== _$unforgetCache[10].v || y !== _$unforgetCache[5].v) { _segment13(); - _$unforgetCache[1].e(_unwrappedJsxEl); + _$unforgetCache[6].e(_unwrappedJsxEl3); } - if (_$unforgetCache[0].n || _unwrappedJsxEl !== _$unforgetCache[1].v || y !== _$unforgetCache[5].v || x !== _$unforgetCache[6].v || _unwrappedJsxExp !== _$unforgetCache[8].v || _unwrappedJsxEl2 !== _$unforgetCache[9].v || _unwrappedJsxExp2 !== _$unforgetCache[10].v || _unwrappedJsxEl3 !== _$unforgetCache[11].v || _unwrappedJsxExp3 !== _$unforgetCache[12].v) { + if (_$unforgetCache[0].n || _unwrappedJsxEl !== _$unforgetCache[1].v || y !== _$unforgetCache[5].v || _unwrappedJsxEl3 !== _$unforgetCache[6].v || _unwrappedJsxExp !== _$unforgetCache[12].v) { _segment14(); _$unforgetCache[0].e(_unwrappedJsxEl4); } diff --git a/packages/compiler/src/tests/fixtures/fixture_1.jsx b/packages/compiler/src/tests/fixtures/fixture_1.jsx new file mode 100644 index 0000000..3cf6c47 --- /dev/null +++ b/packages/compiler/src/tests/fixtures/fixture_1.jsx @@ -0,0 +1,5 @@ +import React from "react"; + +export default function SimpleJSX() { + return

Hello world!

; +} diff --git a/packages/compiler/src/fixtures/fixture_10.js b/packages/compiler/src/tests/fixtures/fixture_10.jsx similarity index 100% rename from packages/compiler/src/fixtures/fixture_10.js rename to packages/compiler/src/tests/fixtures/fixture_10.jsx diff --git a/packages/compiler/src/fixtures/fixture_11.js b/packages/compiler/src/tests/fixtures/fixture_11.jsx similarity index 62% rename from packages/compiler/src/fixtures/fixture_11.js rename to packages/compiler/src/tests/fixtures/fixture_11.jsx index c25ae20..b4dbf62 100644 --- a/packages/compiler/src/fixtures/fixture_11.js +++ b/packages/compiler/src/tests/fixtures/fixture_11.jsx @@ -1,3 +1,5 @@ +import React from "react"; + export default function App() { const a = []; a.push(1); @@ -5,5 +7,5 @@ export default function App() { const b = a; b.push(2); - return
{a[0]}
; + return
{a[1]}
; } diff --git a/packages/compiler/src/fixtures/fixture_12.js b/packages/compiler/src/tests/fixtures/fixture_12.jsx similarity index 89% rename from packages/compiler/src/fixtures/fixture_12.js rename to packages/compiler/src/tests/fixtures/fixture_12.jsx index fe6d0ff..e8a1eb1 100644 --- a/packages/compiler/src/fixtures/fixture_12.js +++ b/packages/compiler/src/tests/fixtures/fixture_12.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; function Comp({ a, b }) { const x = []; diff --git a/packages/compiler/src/fixtures/fixture_13.js b/packages/compiler/src/tests/fixtures/fixture_13.jsx similarity index 64% rename from packages/compiler/src/fixtures/fixture_13.js rename to packages/compiler/src/tests/fixtures/fixture_13.jsx index 8121532..20f8912 100644 --- a/packages/compiler/src/fixtures/fixture_13.js +++ b/packages/compiler/src/tests/fixtures/fixture_13.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithMutationTracking() { const [state, setState] = useState(0); @@ -12,10 +12,11 @@ export default function CounterWithMutationTracking() {
{y[0]} -
- x: {JSON.stringify(x)} -
- y: {JSON.stringify(y)} +

+ x: {JSON.stringify(x)} +
+ y: {JSON.stringify(y)} +

); } diff --git a/packages/compiler/src/fixtures/fixture_2.js b/packages/compiler/src/tests/fixtures/fixture_2.jsx similarity index 81% rename from packages/compiler/src/fixtures/fixture_2.js rename to packages/compiler/src/tests/fixtures/fixture_2.jsx index bf7ea94..3c766bb 100644 --- a/packages/compiler/src/fixtures/fixture_2.js +++ b/packages/compiler/src/tests/fixtures/fixture_2.jsx @@ -1,3 +1,5 @@ +import React from "react"; + const SimpleJSXWithArrowFunction = () => { return
Hello world!
; }; diff --git a/packages/compiler/src/fixtures/fixture_3.js b/packages/compiler/src/tests/fixtures/fixture_3.jsx similarity index 83% rename from packages/compiler/src/fixtures/fixture_3.js rename to packages/compiler/src/tests/fixtures/fixture_3.jsx index 72c4c74..2d8f16a 100644 --- a/packages/compiler/src/fixtures/fixture_3.js +++ b/packages/compiler/src/tests/fixtures/fixture_3.jsx @@ -1,3 +1,5 @@ +import React from "react"; + const SimpleJSXWithFunctionExpression = function () { return
Hello world!
; }; diff --git a/packages/compiler/src/fixtures/fixture_4.js b/packages/compiler/src/tests/fixtures/fixture_4.jsx similarity index 66% rename from packages/compiler/src/fixtures/fixture_4.js rename to packages/compiler/src/tests/fixtures/fixture_4.jsx index f90120f..ccfe353 100644 --- a/packages/compiler/src/fixtures/fixture_4.js +++ b/packages/compiler/src/tests/fixtures/fixture_4.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; export default function Counter() { const [state, setState] = useState(0); @@ -7,7 +7,7 @@ export default function Counter() {
- Count: {state} + Count: {state}
); diff --git a/packages/compiler/src/fixtures/fixture_5.js b/packages/compiler/src/tests/fixtures/fixture_5.jsx similarity index 82% rename from packages/compiler/src/fixtures/fixture_5.js rename to packages/compiler/src/tests/fixtures/fixture_5.jsx index 4329e95..c8e3db7 100644 --- a/packages/compiler/src/fixtures/fixture_5.js +++ b/packages/compiler/src/tests/fixtures/fixture_5.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithMutationTracking() { const [state, setState] = useState(0); @@ -14,7 +14,7 @@ export default function CounterWithMutationTracking() { return (
-
+
Count: {state} {text}
diff --git a/packages/compiler/src/fixtures/fixture_6.js b/packages/compiler/src/tests/fixtures/fixture_6.jsx similarity index 86% rename from packages/compiler/src/fixtures/fixture_6.js rename to packages/compiler/src/tests/fixtures/fixture_6.jsx index a6cafcf..bcfcf10 100644 --- a/packages/compiler/src/fixtures/fixture_6.js +++ b/packages/compiler/src/tests/fixtures/fixture_6.jsx @@ -1,8 +1,8 @@ -import { useState } from "react"; +import React, { useState } from "react"; function InnerComponentWithProps({ count, text }) { return ( -
+
Count: {count} {text}
); diff --git a/packages/compiler/src/fixtures/fixture_7.js b/packages/compiler/src/tests/fixtures/fixture_7.jsx similarity index 91% rename from packages/compiler/src/fixtures/fixture_7.js rename to packages/compiler/src/tests/fixtures/fixture_7.jsx index ac58a8a..4d5943f 100644 --- a/packages/compiler/src/fixtures/fixture_7.js +++ b/packages/compiler/src/tests/fixtures/fixture_7.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithEarlyReturn() { const [state, setState] = useState(0); diff --git a/packages/compiler/src/fixtures/fixture_8.js b/packages/compiler/src/tests/fixtures/fixture_8.jsx similarity index 75% rename from packages/compiler/src/fixtures/fixture_8.js rename to packages/compiler/src/tests/fixtures/fixture_8.jsx index 82a637f..9bff2af 100644 --- a/packages/compiler/src/fixtures/fixture_8.js +++ b/packages/compiler/src/tests/fixtures/fixture_8.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJSX() { const [state, setState] = useState(0); @@ -7,11 +7,13 @@ export default function CounterWithEarlyReturnWithoutDirectlyUsingTheVariableInJ return
We're inside the early return
; } + const newValue = state + 1; + return (
- Count: {state} + Count: {newValue}
); diff --git a/packages/compiler/src/fixtures/fixture_9.js b/packages/compiler/src/tests/fixtures/fixture_9.jsx similarity index 94% rename from packages/compiler/src/fixtures/fixture_9.js rename to packages/compiler/src/tests/fixtures/fixture_9.jsx index 874e796..2792626 100644 --- a/packages/compiler/src/fixtures/fixture_9.js +++ b/packages/compiler/src/tests/fixtures/fixture_9.jsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import React, { useState } from "react"; const numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const numbers2 = numbers1.filter((number) => number % 2 === 0); diff --git a/packages/compiler/src/classes/tests/Component-fixtures.test.ts b/packages/compiler/src/tests/full-snapshot.test.ts similarity index 100% rename from packages/compiler/src/classes/tests/Component-fixtures.test.ts rename to packages/compiler/src/tests/full-snapshot.test.ts diff --git a/packages/compiler/src/tests/render-tests/fixture-1.test.tsx b/packages/compiler/src/tests/render-tests/fixture-1.test.tsx new file mode 100644 index 0000000..7b783a6 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-1.test.tsx @@ -0,0 +1,12 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_1"; + +describe("Fixture 1", () => { + test("renders without errors", async () => { + render(); + + expect(screen.getByText("Hello world!")).toBeTruthy(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-11.test.tsx b/packages/compiler/src/tests/render-tests/fixture-11.test.tsx new file mode 100644 index 0000000..f068144 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-11.test.tsx @@ -0,0 +1,16 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_11"; + +describe("Fixture 11 - Simple alias analysis problem", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + expect(screen.getByText("2")).toBeInTheDocument(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-12.test.tsx b/packages/compiler/src/tests/render-tests/fixture-12.test.tsx new file mode 100644 index 0000000..eea7760 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-12.test.tsx @@ -0,0 +1,27 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_12"; + +describe("Fixture 12 - Alias analysis", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const button = screen.getByRole("button"); + + expect(screen.getByText("n: 3,2")).toBeInTheDocument(); + + await userEvent.click(button); + + expect(screen.getByText("n: 3,3")).toBeInTheDocument(); + + await userEvent.click(button); + + expect(screen.getByText("n: 3,4")).toBeInTheDocument(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-13.test.tsx b/packages/compiler/src/tests/render-tests/fixture-13.test.tsx new file mode 100644 index 0000000..4744de0 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-13.test.tsx @@ -0,0 +1,30 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_13"; + +describe("Fixture 13 - Alias analysis", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const button = screen.getByRole("button"); + + const outputPrinter = screen.getByTestId("output-printer"); + + expect(outputPrinter).toHaveTextContent("x: [0]y: [0]"); + + await userEvent.click(button); + expect(outputPrinter).toHaveTextContent("x: []y: [1]"); + + await userEvent.click(button); + expect(outputPrinter).toHaveTextContent("x: [2]y: [2]"); + + await userEvent.click(button); + expect(outputPrinter).toHaveTextContent("x: []y: [3]"); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-2.test.tsx b/packages/compiler/src/tests/render-tests/fixture-2.test.tsx new file mode 100644 index 0000000..a4d7d42 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-2.test.tsx @@ -0,0 +1,12 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_2"; + +describe("Fixture 2", () => { + test("renders without errors", async () => { + render(); + + expect(screen.getByText("Hello world!")).toBeTruthy(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-3.test.tsx b/packages/compiler/src/tests/render-tests/fixture-3.test.tsx new file mode 100644 index 0000000..90b03a5 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-3.test.tsx @@ -0,0 +1,12 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_3"; + +describe("Fixture 3", () => { + test("renders without errors", async () => { + render(); + + expect(screen.getByText("Hello world!")).toBeTruthy(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-4.test.tsx b/packages/compiler/src/tests/render-tests/fixture-4.test.tsx new file mode 100644 index 0000000..ef1c575 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-4.test.tsx @@ -0,0 +1,32 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_4"; + +describe("Fixture 4 - Simple counter", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const incrementButton = screen.getByRole("button", { + name: "Increment", + }); + + const statePrinterElement = screen.getByTestId("state-printer"); + + expect(statePrinterElement).toHaveTextContent("Count: 0"); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent("Count: 1"); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent("Count: 2"); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent("Count: 3"); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-5.test.tsx b/packages/compiler/src/tests/render-tests/fixture-5.test.tsx new file mode 100644 index 0000000..822cb2d --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-5.test.tsx @@ -0,0 +1,40 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_5"; + +describe("Fixture 5 - Simple counter with mutating value", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const incrementButton = screen.getByRole("button", { + name: "Increment", + }); + + const statePrinterElement = screen.getByTestId("state-printer"); + + expect(statePrinterElement).toHaveTextContent( + "Count: 0 The number is: even" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 1 The number is: odd" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 2 The number is: even" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 3 The number is: odd" + ); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-6.test.tsx b/packages/compiler/src/tests/render-tests/fixture-6.test.tsx new file mode 100644 index 0000000..0806407 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-6.test.tsx @@ -0,0 +1,40 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_6"; + +describe("Fixture 6 - Counter with extra component and mutation tracking", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const incrementButton = screen.getByRole("button", { + name: "Increment", + }); + + const statePrinterElement = screen.getByTestId("state-printer"); + + expect(statePrinterElement).toHaveTextContent( + "Count: 0 The number is: even" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 1 The number is: odd" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 2 The number is: even" + ); + + await userEvent.click(incrementButton); + expect(statePrinterElement).toHaveTextContent( + "Count: 3 The number is: odd" + ); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-7.test.tsx b/packages/compiler/src/tests/render-tests/fixture-7.test.tsx new file mode 100644 index 0000000..6cba5d3 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-7.test.tsx @@ -0,0 +1,45 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_7"; + +describe("Fixture 7 - Counter with early return", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + expect( + screen.getByText("We're inside the early return") + ).toBeInTheDocument(); + + await userEvent.click( + screen.getByRole("button", { + name: "Increment", + }) + ); + + expect(screen.getByText("Count: 1")).toBeInTheDocument(); + + await userEvent.click( + screen.getByRole("button", { + name: "Increment", + }) + ); + + expect( + screen.getByText("We're inside the early return") + ).toBeInTheDocument(); + + await userEvent.click( + screen.getByRole("button", { + name: "Increment", + }) + ); + + expect(screen.getByText("Count: 3")).toBeInTheDocument(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-8.test.tsx b/packages/compiler/src/tests/render-tests/fixture-8.test.tsx new file mode 100644 index 0000000..9779bc3 --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-8.test.tsx @@ -0,0 +1,29 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_8"; + +describe("Fixture 8 - Simple counter with mutating value", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + expect(screen.getByText("Count: 1")).toBeInTheDocument(); + + await userEvent.click( + screen.getByRole("button", { + name: "Increment", + }) + ); + + expect( + screen.getByText("We're inside the early return") + ).toBeInTheDocument(); + + expect(screen.queryByRole("button")).not.toBeInTheDocument(); + }); +}); diff --git a/packages/compiler/src/tests/render-tests/fixture-9.test.tsx b/packages/compiler/src/tests/render-tests/fixture-9.test.tsx new file mode 100644 index 0000000..644a7bd --- /dev/null +++ b/packages/compiler/src/tests/render-tests/fixture-9.test.tsx @@ -0,0 +1,30 @@ +import "@testing-library/jest-dom"; +import { render, screen } from "@testing-library/react"; +import { userEvent } from "@testing-library/user-event"; +// @ts-expect-error No type declaration +import TestComponent from "../fixtures/fixture_9"; + +describe("Fixture 9 - Filtering values in for loops", () => { + test("renders without errors", () => { + expect(() => render()).not.toThrow(); + }); + + test("increment button works", async () => { + render(); + + const toggleButton = screen.getByRole("button", { + name: "Toggle even ones", + }); + + expect(screen.getByRole("list")).toHaveTextContent("13579"); + + await userEvent.click(toggleButton); + expect(screen.getByRole("list")).toHaveTextContent("26"); + + await userEvent.click(toggleButton); + expect(screen.getByRole("list")).toHaveTextContent("13579"); + + await userEvent.click(toggleButton); + expect(screen.getByRole("list")).toHaveTextContent("26"); + }); +}); diff --git a/packages/compiler/src/utils/ast-tools.ts b/packages/compiler/src/utils/ast-tools.ts index b6faa8e..19d8d5c 100644 --- a/packages/compiler/src/utils/ast-tools.ts +++ b/packages/compiler/src/utils/ast-tools.ts @@ -134,6 +134,7 @@ export function isChildOfScope(parent: Scope, child: Scope) { return false; } + export function getParentBlockStatement(path: babel.NodePath) { return path.findParent((p) => p.isBlockStatement() diff --git a/packages/compiler/src/utils/find-components.ts b/packages/compiler/src/utils/find-components.ts index ba47991..de809b3 100644 --- a/packages/compiler/src/utils/find-components.ts +++ b/packages/compiler/src/utils/find-components.ts @@ -5,10 +5,6 @@ import { Component } from "../classes/Component"; import { doesMatchHookName } from "./is-hook-call"; import { expandArrowFunctionToBlockStatement } from "./expand-arrow-function-to-block-statement"; -function doesIdMatchComponentName(name: string) { - return /^_?[A-Z]/.test(name); -} - export function findComponents(program: babel.NodePath) { const components: Component[] = []; @@ -83,6 +79,10 @@ export function findComponents(program: babel.NodePath) { return components; } +function doesIdMatchComponentName(name: string) { + return /^_?[A-Z]/.test(name); +} + function isComponentReturnType(node: babel.types.Node | null | undefined) { return t.isJSXElement(node) || t.isJSXFragment(node) || t.isNullLiteral(node); } diff --git a/packages/compiler/src/utils/get-declared-identifiers-in-lval.ts b/packages/compiler/src/utils/get-declared-identifiers-in-lval.ts index 6b9a3d9..fed4204 100644 --- a/packages/compiler/src/utils/get-declared-identifiers-in-lval.ts +++ b/packages/compiler/src/utils/get-declared-identifiers-in-lval.ts @@ -29,7 +29,6 @@ export function getDeclaredIdentifiersInLVal( getDeclaredIdentifiersInLVal(lval.get("left"), identifiers); } else { console.warn("Unknown LVal type"); - lval.debug(() => "Unknown LVal type."); } return Array.from(identifiers); diff --git a/packages/compiler/src/utils/testing.ts b/packages/compiler/src/utils/testing.ts index 948efd6..d220938 100644 --- a/packages/compiler/src/utils/testing.ts +++ b/packages/compiler/src/utils/testing.ts @@ -6,7 +6,7 @@ import type * as t from "@babel/types"; import * as fs from "fs"; import * as path from "path"; import { visitProgram } from "~/visit-program"; -// @ts-expect-error +// @ts-expect-error The module has no types import babelJsxPlugin from "@babel/plugin-syntax-jsx"; export function transformWithStandalone(input: string) { @@ -70,7 +70,7 @@ export function parse(input: string, extraPlugins: babel.PluginItem[] = []) { } export function loadFixture(fixturePath: string) { - const fixture = path.resolve(__dirname, "../fixtures", fixturePath + ".js"); + const fixture = path.resolve(__dirname, "../tests/fixtures", fixturePath + ".jsx"); const fileContent = fs.readFileSync(fixture, "utf-8"); diff --git a/packages/compiler/test-babel-plugin.cjs b/packages/compiler/test-babel-plugin.cjs new file mode 100644 index 0000000..6b0ea5e --- /dev/null +++ b/packages/compiler/test-babel-plugin.cjs @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const { visitProgram } = require("./dist/main.cjs"); + +module.exports = function asyncBabelPlugin() { + return { + visitor: { + Program(path) { + visitProgram(path); + }, + }, + }; +}; diff --git a/packages/jest-config/package.json b/packages/jest-config/package.json index 6443747..18b2c80 100644 --- a/packages/jest-config/package.json +++ b/packages/jest-config/package.json @@ -10,7 +10,7 @@ "lint": "echo 'Add lint script here'" }, "dependencies": { - "@jest/globals": "^29.7.0", + "@testing-library/jest-dom": "^6.4.2", "@types/jest": "^29.5.12", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", diff --git a/yarn.lock b/yarn.lock index cd42a76..50b7939 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adobe/css-tools@^4.3.2": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" + integrity sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ== + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" @@ -20,7 +25,7 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== @@ -28,7 +33,7 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.23.5": +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== @@ -73,7 +78,21 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.23.6": +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" + integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== @@ -84,12 +103,47 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.22.15": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158" + integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" + integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b" + integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + "@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== @@ -104,6 +158,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" + integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== + dependencies: + "@babel/types" "^7.23.0" + "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" @@ -122,11 +183,41 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + +"@babel/helper-remap-async-to-generator@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" + integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" + integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" @@ -134,6 +225,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" @@ -151,11 +249,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/helper-validator-option@^7.23.5": +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== +"@babel/helper-wrap-function@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" + integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + "@babel/helpers@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" @@ -184,6 +291,35 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b" + integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -198,14 +334,49 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -226,7 +397,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -240,7 +411,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -268,7 +439,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -282,20 +460,561 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/runtime@^7.20.1", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5": +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-generator-functions@^7.23.9": version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce" + integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== dependencies: - regenerator-runtime "^0.14.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== + dependencies: + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/runtime@^7.23.8": +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" + integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" + integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.23.8": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92" + integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" + +"@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dynamic-import@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" + integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-export-namespace-from@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" + integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e" + integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-json-strings@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" + integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-logical-assignment-operators@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" + integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.23.9": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be" + integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" + integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" + integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1" + integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.23.3" + +"@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + +"@babel/plugin-transform-optional-catch-binding@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" + integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" + integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" + integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-display-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.22.5" + +"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" + integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/types" "^7.23.4" + +"@babel/plugin-transform-react-pure-annotations@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" + integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc" + integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-validator-option" "^7.23.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.9" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.4" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.4" + "@babel/plugin-transform-classes" "^7.23.8" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.4" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.4" + "@babel/plugin-transform-for-of" "^7.23.6" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.4" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.9" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" + "@babel/plugin-transform-numeric-separator" "^7.23.4" + "@babel/plugin-transform-object-rest-spread" "^7.24.0" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.4" + "@babel/plugin-transform-optional-chaining" "^7.23.4" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.4" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.8" + babel-plugin-polyfill-corejs3 "^0.9.0" + babel-plugin-polyfill-regenerator "^0.5.5" + core-js-compat "^3.31.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" + integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-react-display-name" "^7.23.3" + "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.23.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.23.8", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.20.1", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/standalone@^7.24.0": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.24.0.tgz#f18fe69246f8329c0b36a8cf6757a6a2f57d9067" @@ -351,7 +1070,7 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.24.0": +"@babel/types@^7.22.19", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.4.4": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== @@ -1565,6 +2284,48 @@ resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.1.3.tgz#77ced625f19ec9350f6e460f142b3be9bff03866" integrity sha512-Y5B4EYyv1j9V8LzeAoOVeTg0LI7Fo5InYKgAjkY1Pu9GjtUwX/EKxNcU7ng3sKr99WEf+bPTcktAeybyMOYo+g== +"@testing-library/dom@^9.0.0": + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^6.4.2": + version "6.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.4.2.tgz#38949f6b63722900e2d75ba3c6d9bf8cffb3300e" + integrity sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw== + dependencies: + "@adobe/css-tools" "^4.3.2" + "@babel/runtime" "^7.9.2" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^14.2.1": + version "14.2.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.1.tgz#bf69aa3f71c36133349976a4a2da3687561d8310" + integrity sha512-sGdjws32ai5TLerhvzThYFbpnF9XtL65Cjf+gB0Dhr29BGqK+mAeN7SURSdu+eqgET4ANcWoC7FQpkaiGvBr+A== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + "@theguild/remark-mermaid@^0.0.5": version "0.0.5" resolved "https://registry.yarnpkg.com/@theguild/remark-mermaid/-/remark-mermaid-0.0.5.tgz#0f95671d247381f416e528e937be08bb7a695224" @@ -1613,6 +2374,11 @@ dependencies: "@types/estree" "*" +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.14": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -1832,7 +2598,7 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/react-dom@^18.2.18": +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.18": version "18.2.19" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== @@ -2302,14 +3068,21 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.3.0: +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +aria-query@^5.0.0, aria-query@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: dequal "^2.0.3" -array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2492,6 +3265,30 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" +babel-plugin-polyfill-corejs2@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz#dbcc3c8ca758a290d47c3c6a490d59429b0d2269" + integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.5.0" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81" + integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + core-js-compat "^3.34.0" + +babel-plugin-polyfill-regenerator@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a" + integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.5.0" + babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -2574,7 +3371,7 @@ breakword@^1.0.5: dependencies: wcwidth "^1.0.1" -browserslist@^4.22.2: +browserslist@^4.22.2, browserslist@^4.22.3: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -2708,7 +3505,15 @@ chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.2: +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2905,6 +3710,13 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +core-js-compat@^3.31.0, core-js-compat@^3.34.0: + version "3.36.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190" + integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== + dependencies: + browserslist "^4.22.3" + cose-base@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" @@ -2961,6 +3773,11 @@ css-selector-tokenizer@^0.8: cssesc "^3.0.0" fastparse "^1.1.2" +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3393,6 +4210,30 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -3518,6 +4359,16 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + domexception@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" @@ -3662,6 +4513,21 @@ es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + es-iterator-helpers@^1.0.12, es-iterator-helpers@^1.0.15: version "1.0.17" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" @@ -4953,7 +5819,7 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.5, internal-slot@^1.0.7: +internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -4995,7 +5861,15 @@ is-alphanumerical@^2.0.0: is-alphabetical "^2.0.0" is-decimal "^2.0.0" -is-array-buffer@^3.0.4: +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5119,7 +5993,7 @@ is-hexadecimal@^2.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== -is-map@^2.0.1: +is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== @@ -5186,7 +6060,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.1: +is-set@^2.0.1, is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== @@ -5972,6 +6846,11 @@ lodash-es@^4.17.21: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -5997,7 +6876,7 @@ lodash.startcase@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== -lodash@^4.17.21: +lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -6046,7 +6925,7 @@ lucide-react@^0.343.0: resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.343.0.tgz#2fa2345cc831f1442e475b8ee2ab571b928f496d" integrity sha512-zDjzr5OlS86DJZNSy5igMx18T423LfEyZ6lxo82KpjCi8m5DPddl/OPLRDHyfs/TqZPh7C1ySPw4D6matfm6bQ== -lz-string@^1.4.4: +lz-string@^1.4.4, lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== @@ -7050,6 +7929,14 @@ object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -7448,6 +8335,15 @@ prettier@^3.1.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" @@ -7539,7 +8435,7 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.2: +react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -7625,17 +8521,36 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + regexp-tree@^0.1.27: version "0.1.27" resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -7645,6 +8560,18 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.2: es-errors "^1.3.0" set-function-name "^2.0.1" +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + regjsparser@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" @@ -7652,6 +8579,13 @@ regjsparser@^0.10.0: dependencies: jsesc "~0.5.0" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + rehype-katex@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/rehype-katex/-/rehype-katex-7.0.0.tgz#f5e9e2825981175a7b0a4d58ed9816c33576dfed" @@ -7787,7 +8721,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -8170,6 +9104,13 @@ static-browser-server@1.0.3: mime-db "^1.52.0" outvariant "^1.3.0" +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + stream-transform@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" @@ -8812,6 +9753,29 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + unified@^10.0.0: version "10.1.2" resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" @@ -9227,7 +10191,7 @@ which-pm@2.0.0: load-yaml-file "^0.2.0" path-exists "^4.0.0" -which-typed-array@^1.1.14, which-typed-array@^1.1.9: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.9: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==