From 3ca1d435b543965bf1bcabe8487a2c7fc0e047a6 Mon Sep 17 00:00:00 2001 From: Sandro <16229645+rothsandro@users.noreply.github.com> Date: Thu, 29 Feb 2024 04:51:26 +0100 Subject: [PATCH 01/33] fix(website): hide menu overlay properly (#2426) --- website/src/components/menu.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/website/src/components/menu.js b/website/src/components/menu.js index 9449fa0ef2..14a95fa7c7 100644 --- a/website/src/components/menu.js +++ b/website/src/components/menu.js @@ -46,10 +46,8 @@ export const Menu = () => {
From c974d15fa651c540b74a2e569d6b33e40b3a8bf5 Mon Sep 17 00:00:00 2001 From: Sophia Michelle Andren <20441876+sandren@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:24:45 -0800 Subject: [PATCH 02/33] fix(website): add scroll overflow (#2436) --- website/src/components/modal.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/website/src/components/modal.js b/website/src/components/modal.js index 5485bee7b7..d5bf2315e5 100644 --- a/website/src/components/modal.js +++ b/website/src/components/modal.js @@ -8,9 +8,11 @@ export const Modal = ({ isOpen, onClose, children, ...rest }) => { className="z-100 fixed top-0 right-0 bottom-0 h-full w-8 bg-white dark:bg-gray-950" aria-hidden="true" /> -
+
- {children} + + {children} +
From 8307f848541f444c840c31bd7909ff11c65ecb12 Mon Sep 17 00:00:00 2001 From: Nehal Damania Date: Fri, 8 Mar 2024 05:18:49 +0530 Subject: [PATCH 03/33] Update atom-with-toggle.mdx (#2441) Update the documentation as per the new V2 API --- docs/recipes/atom-with-toggle.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/recipes/atom-with-toggle.mdx b/docs/recipes/atom-with-toggle.mdx index 12dc68dda0..3c5bda9917 100644 --- a/docs/recipes/atom-with-toggle.mdx +++ b/docs/recipes/atom-with-toggle.mdx @@ -13,13 +13,13 @@ import { WritableAtom, atom } from 'jotai' export function atomWithToggle( initialValue?: boolean, -): WritableAtom { +): WritableAtom { const anAtom = atom(initialValue, (get, set, nextValue?: boolean) => { const update = nextValue ?? !get(anAtom) set(anAtom, update) }) - return anAtom as WritableAtom + return anAtom as WritableAtom } ``` From e4c4faabb471b74e67c019d1790d33c63797767e Mon Sep 17 00:00:00 2001 From: Nehal Damania Date: Fri, 8 Mar 2024 05:19:14 +0530 Subject: [PATCH 04/33] Update atom-with-toggle-and-storage.mdx (#2442) Updating recipe example with Typescript error fixes --- docs/recipes/atom-with-toggle-and-storage.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/recipes/atom-with-toggle-and-storage.mdx b/docs/recipes/atom-with-toggle-and-storage.mdx index db096c8624..7b3554aed1 100644 --- a/docs/recipes/atom-with-toggle-and-storage.mdx +++ b/docs/recipes/atom-with-toggle-and-storage.mdx @@ -16,17 +16,17 @@ export function atomWithToggleAndStorage( key: string, initialValue?: boolean, storage?: any, -): WritableAtom { +): WritableAtom { const anAtom = atomWithStorage(key, initialValue, storage) const derivedAtom = atom( (get) => get(anAtom), (get, set, nextValue?: boolean) => { const update = nextValue ?? !get(anAtom) - set(anAtom, update) + void set(anAtom, update) }, ) - return derivedAtom + return derivedAtom as WritableAtom } ``` From 02f55843f6fbbeea5d1dadce692bad210871eb52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ti=E1=BA=BFn=20Nguy=E1=BB=85n=20Kh=E1=BA=AFc?= Date: Mon, 11 Mar 2024 15:21:35 +1300 Subject: [PATCH 05/33] docs: add refreshing functionality to tRPC code example (#2446) --- docs/extensions/trpc.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/extensions/trpc.mdx b/docs/extensions/trpc.mdx index 5995539eb0..d8c56f0ada 100644 --- a/docs/extensions/trpc.mdx +++ b/docs/extensions/trpc.mdx @@ -68,12 +68,13 @@ const nameAtom = atom(NAMES[0]) const pokemonAtom = trpc.pokemon.byId.atomWithQuery((get) => get(nameAtom)) const Pokemon = () => { - const [data] = useAtom(pokemonAtom) + const [data, refresh] = useAtom(pokemonAtom) return (
ID: {data.id}
Height: {data.height}
Weight: {data.weight}
+
) } From bae472500dea29ba876d80b8c066c54816970862 Mon Sep 17 00:00:00 2001 From: Ashutosh Khanduala Date: Mon, 11 Mar 2024 19:09:03 +0530 Subject: [PATCH 06/33] docs: using createStore to interact with atoms outside React (#2445) * docs: using store outside react * docs: address suggested changes * fix: prettier formatting --------- Co-authored-by: Daishi Kato --- docs/guides/using-store-outside-react.mdx | 45 +++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/guides/using-store-outside-react.mdx diff --git a/docs/guides/using-store-outside-react.mdx b/docs/guides/using-store-outside-react.mdx new file mode 100644 index 0000000000..559ae05771 --- /dev/null +++ b/docs/guides/using-store-outside-react.mdx @@ -0,0 +1,45 @@ +--- +title: Using store outside React +description: Using store outside React +nav: 4.98 +keywords: state, outside, react +published: false +--- + +Jotai's state resides in React, but sometimes it would be nice +to interact with the world outside React. + +## createStore + +[`createStore`](../core/store.mdx#createstore) provides a store interface that can be used to store your atoms. Using the store, you can access and mutate the state of your stored atoms from outside React. + +```jsx +import { atom, useAtomValue, createStore, Provider } from 'jotai' + +const timeAtom = atom(0) +const store = createStore() + +store.set(timeAtom, (prev) => prev + 1) // Update atom's value +store.get(timeAtom) // Read atom's value + +function Component() { + const time = useAtomValue(timeAtom) // Inside React + return ( +
+

{time}

+
+ ) +} + +export default function App() { + return ( + + + + ) +} +``` + +### Examples + + From 99526496d8eb91d9d16b6aa1d16308d69861b5a8 Mon Sep 17 00:00:00 2001 From: Iwo Plaza Date: Fri, 15 Mar 2024 04:58:59 +0100 Subject: [PATCH 07/33] fix(vanilla): store should flush pending write triggered asynchronously and indirectly (#2451) * fix(vanilla): store should flush pending write triggered asynchronously and indirectly * add PR number to the test case * an alternative way to flush async writes --- src/vanilla/store.ts | 8 +++++--- tests/vanilla/store.test.tsx | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index b20722e92d..7a55ba30b8 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -560,12 +560,15 @@ export const createStore = () => { atom: WritableAtom, ...args: Args ): Result => { - let isSync = true const getter: Getter = (a: Atom) => returnAtomValue(readAtomState(a)) const setter: Setter = ( a: WritableAtom, ...args: As ) => { + const isSync = pendingStack.length > 0 + if (!isSync) { + pendingStack.push(new Set([a])) + } let r: R | undefined if (isSelfAtom(atom, a)) { if (!hasInitialValue(a)) { @@ -581,7 +584,7 @@ export const createStore = () => { r = writeAtomState(a as AnyWritableAtom, ...args) as R } if (!isSync) { - const flushed = flushPending([a]) + const flushed = flushPending(pendingStack.pop()!) if (import.meta.env?.MODE !== 'production') { storeListenersRev2.forEach((l) => l({ type: 'async-write', flushed: flushed! }), @@ -591,7 +594,6 @@ export const createStore = () => { return r as R } const result = atom.write(getter, setter, ...args) - isSync = false return result } diff --git a/tests/vanilla/store.test.tsx b/tests/vanilla/store.test.tsx index 9da188df8f..8c6d6f7873 100644 --- a/tests/vanilla/store.test.tsx +++ b/tests/vanilla/store.test.tsx @@ -502,3 +502,29 @@ it('should mount once with atom creator atom (#2314)', async () => { store.sub(atomCreatorAtom, () => {}) expect(countAtom.onMount).toHaveBeenCalledTimes(1) }) + +it('should flush pending write triggered asynchronously and indirectly (#2451)', async () => { + const store = createStore() + const anAtom = atom('initial') + + const callbackFn = vi.fn((_value: string) => {}) + const unsub = store.sub(anAtom, () => { + callbackFn(store.get(anAtom)) + }) + + const actionAtom = atom(null, async (_get, set) => { + await Promise.resolve() // waiting a microtask + set(indirectSetAtom) + }) + + const indirectSetAtom = atom(null, (_get, set) => { + set(anAtom, 'next') + }) + + // executing the chain reaction + await store.set(actionAtom) + + expect(callbackFn).toHaveBeenCalledOnce() + expect(callbackFn).toHaveBeenCalledWith('next') + unsub() +}) From 09fc0e24d6433104e8463d42c9ba3f6d1a2804f7 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 15 Mar 2024 13:25:02 +0900 Subject: [PATCH 08/33] fix(utils): atomWithStorage to always run onMount (#2455) --- src/vanilla/utils/atomWithStorage.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/vanilla/utils/atomWithStorage.ts b/src/vanilla/utils/atomWithStorage.ts index 74a176d743..7b044f41dc 100644 --- a/src/vanilla/utils/atomWithStorage.ts +++ b/src/vanilla/utils/atomWithStorage.ts @@ -210,9 +210,7 @@ export function atomWithStorage( } baseAtom.onMount = (setAtom) => { - if (!getOnInit) { - setAtom(storage.getItem(key, initialValue) as Value | Promise) - } + setAtom(storage.getItem(key, initialValue) as Value | Promise) let unsub: Unsubscribe | undefined if (storage.subscribe) { unsub = storage.subscribe(key, setAtom, initialValue) From 1b699bcebd508d9d51517a719cdac0fd73758ba9 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 15 Mar 2024 14:30:50 +0900 Subject: [PATCH 09/33] chore(deps): update dependencies (#2456) * chore(deps): update dependencies * revert types/react * downgrade react canary&experimental --- .github/workflows/test-multiple-versions.yml | 4 +- package.json | 26 +- yarn.lock | 1030 +++++++++--------- 3 files changed, 523 insertions(+), 537 deletions(-) diff --git a/.github/workflows/test-multiple-versions.yml b/.github/workflows/test-multiple-versions.yml index 603313b930..c0e368a0ae 100644 --- a/.github/workflows/test-multiple-versions.yml +++ b/.github/workflows/test-multiple-versions.yml @@ -33,8 +33,8 @@ jobs: - 18.0.0 - 18.1.0 - 18.2.0 - - 18.3.0-canary-3bcd2de01-20240227 - - 0.0.0-experimental-3bcd2de01-20240227 + - 18.3.0-canary-56e20051c-20240311 + - 0.0.0-experimental-56e20051c-20240311 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 diff --git a/package.json b/package.json index 5197626c15..5aad93b536 100644 --- a/package.json +++ b/package.json @@ -113,12 +113,12 @@ }, "homepage": "https://github.com/pmndrs/jotai", "devDependencies": { - "@babel/core": "^7.23.9", + "@babel/core": "^7.24.0", "@babel/plugin-transform-react-jsx": "^7.23.4", "@babel/plugin-transform-typescript": "^7.23.6", - "@babel/preset-env": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/preset-env": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/types": "^7.24.0", "@redux-devtools/extension": "^3.3.0", "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-babel": "^6.0.4", @@ -130,32 +130,32 @@ "@testing-library/react": "^14.2.1", "@testing-library/user-event": "14.4.3", "@types/babel__core": "^7.20.5", - "@types/node": "^20.11.21", + "@types/node": "^20.11.27", "@types/react": "18.2.56", - "@types/react-dom": "^18.2.19", - "@typescript-eslint/eslint-plugin": "^7.1.0", - "@typescript-eslint/parser": "^7.1.0", + "@types/react-dom": "^18.2.22", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", "@vitest/coverage-v8": "0.33.0", "@vitest/ui": "0.33.0", "benny": "^3.7.1", "concurrently": "^8.2.2", "downlevel-dts": "^0.11.0", - "esbuild": "^0.20.1", + "esbuild": "^0.20.2", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.0", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-vitest": "^0.3.22", + "eslint-plugin-vitest": "^0.3.26", "jsdom": "^24.0.0", "json": "^11.0.0", "prettier": "^3.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "redux": "^5.0.1", - "rollup": "^4.12.0", + "rollup": "^4.13.0", "rollup-plugin-banner2": "^1.2.2", "rollup-plugin-esbuild": "^6.1.1", "rxjs": "^7.8.1", @@ -163,7 +163,7 @@ "ts-expect": "^1.3.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.3.3", + "typescript": "^5.4.2", "vitest": "0.33.0", "wonka": "^6.3.4" }, diff --git a/yarn.lock b/yarn.lock index ab50d0d127..83c65f662b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8,12 +8,12 @@ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" "@arrows/array@^1.4.1": version "1.4.1" @@ -57,26 +57,26 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@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== -"@babel/core@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" - integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== +"@babel/core@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" + integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.9" - "@babel/parser" "^7.23.9" - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/helpers" "^7.24.0" + "@babel/parser" "^7.24.0" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -119,9 +119,9 @@ semver "^6.3.1" "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" - integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== + 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" @@ -153,6 +153,17 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" +"@babel/helper-define-polyfill-provider@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" + integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== + 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" @@ -205,10 +216,10 @@ 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.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - 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.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.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.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" @@ -273,14 +284,14 @@ "@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" - integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== +"@babel/helpers@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" + integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== dependencies: - "@babel/template" "^7.23.9" - "@babel/traverse" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.0" + "@babel/types" "^7.24.0" "@babel/highlight@^7.23.4": version "7.23.4" @@ -291,10 +302,10 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" - integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": + version "7.24.0" + 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" @@ -704,14 +715,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@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.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@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" @@ -875,14 +886,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.9.tgz#beace3b7994560ed6bf78e4ae2073dff45387669" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== +"@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.22.5" + "@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" @@ -935,7 +946,7 @@ "@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.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" @@ -976,25 +987,25 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.12.5", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + 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/template@^7.22.15", "@babel/template@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" - integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.9": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" - integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== +"@babel/traverse@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" + integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== dependencies: "@babel/code-frame" "^7.23.5" "@babel/generator" "^7.23.6" @@ -1002,15 +1013,15 @@ "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.9" - "@babel/types" "^7.23.9" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9", "@babel/types@^7.4.4": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" - integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@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== dependencies: "@babel/helper-string-parser" "^7.23.4" "@babel/helper-validator-identifier" "^7.22.20" @@ -1028,230 +1039,230 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/aix-ppc64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz#eafa8775019b3650a77e8310ba4dbd17ca7af6d5" - integrity sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA== +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz#68791afa389550736f682c15b963a4f37ec2f5f6" - integrity sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A== +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-arm@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.1.tgz#38c91d8ee8d5196f7fbbdf4f0061415dde3a473a" - integrity sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw== +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/android-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.1.tgz#93f6190ce997b313669c20edbf3645fc6c8d8f22" - integrity sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA== +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-arm64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz#0d391f2e81fda833fe609182cc2fbb65e03a3c46" - integrity sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA== +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/darwin-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz#92504077424584684862f483a2242cfde4055ba2" - integrity sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA== +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-arm64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz#a1646fa6ba87029c67ac8a102bb34384b9290774" - integrity sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw== +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/freebsd-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz#41c9243ab2b3254ea7fb512f71ffdb341562e951" - integrity sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg== +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz#f3c1e1269fbc9eedd9591a5bdd32bf707a883156" - integrity sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w== +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-arm@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz#4503ca7001a8ee99589c072801ce9d7540717a21" - integrity sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw== +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-ia32@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz#98c474e3e0cbb5bcbdd8561a6e65d18f5767ce48" - integrity sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw== +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-loong64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz#a8097d28d14b9165c725fe58fc438f80decd2f33" - integrity sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA== +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-mips64el@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz#c44f6f0d7d017c41ad3bb15bfdb69b690656b5ea" - integrity sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA== +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-ppc64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz#0765a55389a99237b3c84227948c6e47eba96f0d" - integrity sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw== +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-riscv64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz#e4153b032288e3095ddf4c8be07893781b309a7e" - integrity sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg== +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-s390x@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz#b9ab8af6e4b73b26d63c1c426d7669a5d53eb5a7" - integrity sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ== +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/linux-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz#0b25da17ac38c3e11cdd06ca3691d4d6bef2755f" - integrity sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA== +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/netbsd-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz#3148e48406cd0d4f7ba1e0bf3f4d77d548c98407" - integrity sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg== +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/openbsd-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz#7b73e852986a9750192626d377ac96ac2b749b76" - integrity sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw== +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/sunos-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz#402a441cdac2eee98d8be378c7bc23e00c1861c5" - integrity sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q== +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-arm64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz#36c4e311085806a6a0c5fc54d1ac4d7b27e94d7b" - integrity sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A== +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-ia32@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz#0cf933be3fb9dc58b45d149559fe03e9e22b54fe" - integrity sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw== +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@esbuild/win32-x64@0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz#77583b6ea54cee7c1410ebbd54051b6a3fcbd8ba" - integrity sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA== +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -1316,32 +1327,32 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz#9b18145d26cf33d08576cf4c7665b28554480ed7" - integrity sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw== +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" @@ -1356,10 +1367,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.23" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz#afc96847f3f07841477f303eed687707a5aacd80" - integrity sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -1391,9 +1402,9 @@ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== "@polka/url@^1.0.0-next.24": - version "1.0.0-next.24" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.24.tgz#58601079e11784d20f82d0585865bb42305c4df3" - integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== + version "1.0.0-next.25" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.25.tgz#f077fdc0b5d0078d30893396ff4827a13f99e817" + integrity sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ== "@redux-devtools/extension@^3.3.0": version "3.3.0" @@ -1464,70 +1475,70 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6" - integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w== - -"@rollup/rollup-android-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2" - integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ== - -"@rollup/rollup-darwin-arm64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69" - integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ== - -"@rollup/rollup-darwin-x64@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8" - integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg== - -"@rollup/rollup-linux-arm-gnueabihf@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d" - integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA== - -"@rollup/rollup-linux-arm64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68" - integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA== - -"@rollup/rollup-linux-arm64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7" - integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ== - -"@rollup/rollup-linux-riscv64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7" - integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw== - -"@rollup/rollup-linux-x64-gnu@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3" - integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA== - -"@rollup/rollup-linux-x64-musl@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05" - integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw== - -"@rollup/rollup-win32-arm64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e" - integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw== - -"@rollup/rollup-win32-ia32-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40" - integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA== - -"@rollup/rollup-win32-x64-msvc@4.12.0": - version "4.12.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235" - integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg== +"@rollup/rollup-android-arm-eabi@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" + integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg== + +"@rollup/rollup-android-arm64@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e" + integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q== + +"@rollup/rollup-darwin-arm64@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b" + integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g== + +"@rollup/rollup-darwin-x64@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455" + integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg== + +"@rollup/rollup-linux-arm-gnueabihf@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4" + integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ== + +"@rollup/rollup-linux-arm64-gnu@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143" + integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w== + +"@rollup/rollup-linux-arm64-musl@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef" + integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw== + +"@rollup/rollup-linux-riscv64-gnu@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6" + integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA== + +"@rollup/rollup-linux-x64-gnu@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778" + integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA== + +"@rollup/rollup-linux-x64-musl@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89" + integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw== + +"@rollup/rollup-win32-arm64-msvc@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b" + integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA== + +"@rollup/rollup-win32-ia32-msvc@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2" + integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw== + +"@rollup/rollup-win32-x64-msvc@4.13.0": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" + integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1652,10 +1663,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@^20.11.21": - version "20.11.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.21.tgz#ad67e65652f7be15686e2df87a38076a81c5e9c5" - integrity sha512-/ySDLGscFPNasfqStUuWWPfL78jompfIoVzLJPVVAHBh6rpG68+pI2Gk+fNLeI8/f1yPYL4s46EleVIc20F1Ow== +"@types/node@*", "@types/node@^20.11.27": + version "20.11.27" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.27.tgz#debe5cfc8a507dd60fe2a3b4875b1604f215c2ac" + integrity sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg== dependencies: undici-types "~5.26.4" @@ -1664,10 +1675,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== -"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.19": - version "18.2.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.19.tgz#b84b7c30c635a6c26c6a6dfbb599b2da9788be58" - integrity sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA== +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.22": + version "18.2.22" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.22.tgz#d332febf0815403de6da8a97e5fe282cbe609bae" + integrity sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ== dependencies: "@types/react" "*" @@ -1695,16 +1706,16 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@typescript-eslint/eslint-plugin@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.0.tgz#22bb999a8d59893c0ea07923e8a21f9d985ad740" - integrity sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w== +"@typescript-eslint/eslint-plugin@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" + integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "7.1.0" - "@typescript-eslint/type-utils" "7.1.0" - "@typescript-eslint/utils" "7.1.0" - "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/type-utils" "7.2.0" + "@typescript-eslint/utils" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -1712,74 +1723,47 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.0.tgz#b89dab90840f7d2a926bf4c23b519576e8c31970" - integrity sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w== +"@typescript-eslint/parser@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== dependencies: - "@typescript-eslint/scope-manager" "7.1.0" - "@typescript-eslint/types" "7.1.0" - "@typescript-eslint/typescript-estree" "7.1.0" - "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - -"@typescript-eslint/scope-manager@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.0.tgz#e4babaa39a3d612eff0e3559f3e99c720a2b4a54" - integrity sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A== +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== dependencies: - "@typescript-eslint/types" "7.1.0" - "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" -"@typescript-eslint/type-utils@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.0.tgz#372dfa470df181bcee0072db464dc778b75ed722" - integrity sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew== +"@typescript-eslint/type-utils@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz#7be5c30e9b4d49971b79095a1181324ef6089a19" + integrity sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA== dependencies: - "@typescript-eslint/typescript-estree" "7.1.0" - "@typescript-eslint/utils" "7.1.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/utils" "7.2.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - -"@typescript-eslint/types@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.0.tgz#52a86d6236fda646e7e5fe61154991dc0dc433ef" - integrity sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA== - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== -"@typescript-eslint/typescript-estree@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.0.tgz#419b1310f061feee6df676c5bed460537310c593" - integrity sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ== +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== dependencies: - "@typescript-eslint/types" "7.1.0" - "@typescript-eslint/visitor-keys" "7.1.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1787,46 +1771,25 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.0.tgz#710ecda62aff4a3c8140edabf3c5292d31111ddd" - integrity sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "7.1.0" - "@typescript-eslint/types" "7.1.0" - "@typescript-eslint/typescript-estree" "7.1.0" - semver "^7.5.4" - -"@typescript-eslint/utils@^6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== +"@typescript-eslint/utils@7.2.0", "@typescript-eslint/utils@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" + integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - -"@typescript-eslint/visitor-keys@7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.0.tgz#576c4ad462ca1378135a55e2857d7aced96ce0a0" - integrity sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA== +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== dependencies: - "@typescript-eslint/types" "7.1.0" + "@typescript-eslint/types" "7.2.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -2022,6 +1985,17 @@ array.prototype.filter@^1.0.3: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" +array.prototype.findlast@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" + integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + array.prototype.findlastindex@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" @@ -2043,7 +2017,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -2053,7 +2027,17 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== @@ -2100,7 +2084,7 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: +available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== @@ -2108,12 +2092,12 @@ available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" 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== + version "0.4.10" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" + integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.9.0: @@ -2223,9 +2207,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001587: - version "1.0.30001591" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz#16745e50263edc9f395895a7cd468b9f3767cf33" - integrity sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ== + version "1.0.30001597" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" + integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== chai@^4.3.7: version "4.4.1" @@ -2459,7 +2443,7 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -2528,9 +2512,9 @@ downlevel-dts@^0.11.0: typescript next electron-to-chromium@^1.4.668: - version "1.4.685" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.685.tgz#3ce988e4dfbb3aa984840394b1d7064c01ad74c1" - integrity sha512-yDYeobbTEe4TNooEzOQO6xFqg9XnAkVy2Lod1C1B2it8u47JNLYvl9nLDWBamqUakWB8Jc1hhS1uHUNYTNQdfw== + version "1.4.707" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.707.tgz#77904f87432b8b50b8b8b654ba3940d2bef48d63" + integrity sha512-qRq74Mo7ChePOU6GHdfAJ0NREXU8vQTlVlfWz3wNygFay6xrd/fY2J7oGHwrhFeU30OVctGLdTh/FcnokTWpng== emoji-regex@^8.0.0: version "8.0.0" @@ -2543,17 +2527,17 @@ entities@^4.4.0: integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" + available-typed-arrays "^1.0.7" call-bind "^1.0.7" es-define-property "^1.0.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" get-intrinsic "^1.2.4" @@ -2561,15 +2545,15 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: globalthis "^1.0.3" gopd "^1.0.1" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" hasown "^2.0.1" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" is-typed-array "^1.1.13" is-weakref "^1.0.2" @@ -2582,10 +2566,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" unbox-primitive "^1.0.2" which-typed-array "^1.1.14" @@ -2621,7 +2605,7 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-iterator-helpers@^1.0.12: +es-iterator-helpers@^1.0.17: version "1.0.17" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== @@ -2647,7 +2631,7 @@ es-module-lexer@^1.3.1: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== -es-set-tostringtag@^2.0.2: +es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -2700,34 +2684,34 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" -esbuild@^0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.1.tgz#1e4cbb380ad1959db7609cb9573ee77257724a3e" - integrity sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA== +esbuild@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.1" - "@esbuild/android-arm" "0.20.1" - "@esbuild/android-arm64" "0.20.1" - "@esbuild/android-x64" "0.20.1" - "@esbuild/darwin-arm64" "0.20.1" - "@esbuild/darwin-x64" "0.20.1" - "@esbuild/freebsd-arm64" "0.20.1" - "@esbuild/freebsd-x64" "0.20.1" - "@esbuild/linux-arm" "0.20.1" - "@esbuild/linux-arm64" "0.20.1" - "@esbuild/linux-ia32" "0.20.1" - "@esbuild/linux-loong64" "0.20.1" - "@esbuild/linux-mips64el" "0.20.1" - "@esbuild/linux-ppc64" "0.20.1" - "@esbuild/linux-riscv64" "0.20.1" - "@esbuild/linux-s390x" "0.20.1" - "@esbuild/linux-x64" "0.20.1" - "@esbuild/netbsd-x64" "0.20.1" - "@esbuild/openbsd-x64" "0.20.1" - "@esbuild/sunos-x64" "0.20.1" - "@esbuild/win32-arm64" "0.20.1" - "@esbuild/win32-ia32" "0.20.1" - "@esbuild/win32-x64" "0.20.1" + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" escalade@^3.1.1: version "3.1.2" @@ -2806,34 +2790,36 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-react@^7.34.0: + version "7.34.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" + integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" + es-iterator-helpers "^1.0.17" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.6" - object.fromentries "^2.0.6" - object.hasown "^1.1.2" - object.values "^1.1.6" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" prop-types "^15.8.1" - resolve "^2.0.0-next.4" + resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.8" + string.prototype.matchall "^4.0.10" -eslint-plugin-vitest@^0.3.22: - version "0.3.22" - resolved "https://registry.yarnpkg.com/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.22.tgz#207eb4630768f6400cd91a6df23688e8a1fd0898" - integrity sha512-atkFGQ7aVgcuSeSMDqnyevIyUpfBPMnosksgEPrKE7Y8xQlqG/5z2IQ6UDau05zXaaFv7Iz8uzqvIuKshjZ0Zw== +eslint-plugin-vitest@^0.3.26: + version "0.3.26" + resolved "https://registry.yarnpkg.com/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz#0906893c1f8f7094614fc6ff255c0a369cfbf427" + integrity sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg== dependencies: - "@typescript-eslint/utils" "^6.21.0" + "@typescript-eslint/utils" "^7.1.1" eslint-scope@^7.2.2: version "7.2.2" @@ -3079,7 +3065,7 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -3100,9 +3086,9 @@ get-symbol-description@^1.0.2: get-intrinsic "^1.2.4" get-tsconfig@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + version "4.7.3" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" + integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== dependencies: resolve-pkg-maps "^1.0.0" @@ -3195,7 +3181,7 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== @@ -3212,7 +3198,7 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== @@ -3220,9 +3206,9 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: has-symbols "^1.0.3" hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -3406,17 +3392,17 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.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== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== @@ -3451,12 +3437,12 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -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== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== @@ -3484,10 +3470,10 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" @@ -3496,13 +3482,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" isarray@^2.0.5: version "2.0.5" @@ -3778,9 +3764,9 @@ magic-string@^0.25.7: sourcemap-codec "^1.4.8" magic-string@^0.30.1, magic-string@^0.30.3: - version "0.30.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505" - integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA== + version "0.30.8" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" @@ -3923,7 +3909,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: +object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -3932,7 +3918,7 @@ object.entries@^1.1.6: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.6, object.fromentries@^2.0.7: +object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -3952,7 +3938,7 @@ object.groupby@^1.0.1: es-abstract "^1.22.3" es-errors "^1.0.0" -object.hasown@^1.1.2: +object.hasown@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== @@ -4311,7 +4297,7 @@ resolve@^1.1.6, resolve@^1.14.2, resolve@^1.22.1, resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: +resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -4364,26 +4350,26 @@ rollup@^3.27.1: optionalDependencies: fsevents "~2.3.2" -rollup@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5" - integrity sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q== +rollup@^4.13.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" + integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.12.0" - "@rollup/rollup-android-arm64" "4.12.0" - "@rollup/rollup-darwin-arm64" "4.12.0" - "@rollup/rollup-darwin-x64" "4.12.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.12.0" - "@rollup/rollup-linux-arm64-gnu" "4.12.0" - "@rollup/rollup-linux-arm64-musl" "4.12.0" - "@rollup/rollup-linux-riscv64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-gnu" "4.12.0" - "@rollup/rollup-linux-x64-musl" "4.12.0" - "@rollup/rollup-win32-arm64-msvc" "4.12.0" - "@rollup/rollup-win32-ia32-msvc" "4.12.0" - "@rollup/rollup-win32-x64-msvc" "4.12.0" + "@rollup/rollup-android-arm-eabi" "4.13.0" + "@rollup/rollup-android-arm64" "4.13.0" + "@rollup/rollup-darwin-arm64" "4.13.0" + "@rollup/rollup-darwin-x64" "4.13.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.13.0" + "@rollup/rollup-linux-arm64-gnu" "4.13.0" + "@rollup/rollup-linux-arm64-musl" "4.13.0" + "@rollup/rollup-linux-riscv64-gnu" "4.13.0" + "@rollup/rollup-linux-x64-gnu" "4.13.0" + "@rollup/rollup-linux-x64-musl" "4.13.0" + "@rollup/rollup-win32-arm64-msvc" "4.13.0" + "@rollup/rollup-win32-ia32-msvc" "4.13.0" + "@rollup/rollup-win32-x64-msvc" "4.13.0" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -4406,12 +4392,12 @@ rxjs@^7.8.1: tslib "^2.1.0" safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" @@ -4468,16 +4454,16 @@ serialize-javascript@^6.0.1: randombytes "^2.1.0" set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.2" + define-data-property "^1.1.4" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.3" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.2" @@ -4524,11 +4510,11 @@ shx@^0.3.4: shelljs "^0.8.5" side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" es-errors "^1.3.0" get-intrinsic "^1.2.4" object-inspect "^1.13.1" @@ -4630,7 +4616,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.8: +string.prototype.matchall@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== @@ -4736,9 +4722,9 @@ synckit@^0.8.6: tslib "^2.6.2" terser@^5.17.4: - version "5.28.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.28.1.tgz#bf00f7537fd3a798c352c2d67d67d65c915d1b28" - integrity sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA== + version "5.29.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.2.tgz#c17d573ce1da1b30f21a877bffd5655dd86fdb35" + integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -4814,9 +4800,9 @@ tree-kill@^1.2.2: integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-api-utils@^1.0.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" - integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== ts-expect@^1.3.0: version "1.3.0" @@ -4879,7 +4865,7 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typed-array-buffer@^1.0.1: +typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== @@ -4888,7 +4874,7 @@ typed-array-buffer@^1.0.1: es-errors "^1.3.0" is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: +typed-array-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== @@ -4899,7 +4885,7 @@ typed-array-byte-length@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: +typed-array-byte-offset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== @@ -4911,7 +4897,7 @@ typed-array-byte-offset@^1.0.0: has-proto "^1.0.3" is-typed-array "^1.1.13" -typed-array-length@^1.0.4: +typed-array-length@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== @@ -4923,15 +4909,15 @@ typed-array-length@^1.0.4: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^5.4.2: + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== typescript@next: - version "5.5.0-dev.20240227" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.0-dev.20240227.tgz#ae8a02186ac1c76628d530c4a6954d2fc9620b69" - integrity sha512-cPljzopUqWPey1Yh7KAE78JSTjoOZUqm8csCGLiu+Hl12xZxGUZFLQRS74IwoDvM+lzoOBwnM528UbYITO9ouA== + version "5.5.0-dev.20240314" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.0-dev.20240314.tgz#c75938db2cdc677891a880964c4ee8919b1065ca" + integrity sha512-8yyAVbLSgGrydN7CZWeP+GZ5zkEBh45r0LswVPgxNDjBuDx9VuKtp+ws+Ri122iwfy8vGr5b486IjeeVM49Crw== ufo@^1.3.2: version "1.4.0" @@ -5138,25 +5124,25 @@ which-builtin-type@^1.1.3: which-typed-array "^1.1.9" which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" 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== + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.1" + has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" From 419ab5cda3503e70463dc340076e21e438db89b6 Mon Sep 17 00:00:00 2001 From: daishi Date: Fri, 15 Mar 2024 14:32:52 +0900 Subject: [PATCH 10/33] 2.7.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5aad93b536..d864da018a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jotai", "private": true, - "version": "2.7.0", + "version": "2.7.1", "description": "👻 Primitive and flexible state management for React", "main": "./index.js", "types": "./index.d.ts", From b74d6d18f93155e73aae4beb31729ae06f7ddc24 Mon Sep 17 00:00:00 2001 From: Iwo Plaza Date: Fri, 29 Mar 2024 09:47:09 +0100 Subject: [PATCH 11/33] refactor(vanilla): moved (un)mount guards into their respective functions. (suggestion) (#2457) --- src/vanilla/store.ts | 77 +++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 48 deletions(-) diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 7a55ba30b8..b7131a7baa 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -473,26 +473,6 @@ export const createStore = () => { const readAtom = (atom: Atom): Value => returnAtomValue(readAtomState(atom)) - const addAtom = (atom: AnyAtom): Mounted => { - let mounted = mountedMap.get(atom) - if (!mounted) { - mounted = mountAtom(atom) - } - return mounted - } - - // FIXME doesn't work with mutually dependent atoms - const canUnmountAtom = (atom: AnyAtom, mounted: Mounted) => - !mounted.l.size && - (!mounted.t.size || (mounted.t.size === 1 && mounted.t.has(atom))) - - const delAtom = (atom: AnyAtom): void => { - const mounted = mountedMap.get(atom) - if (mounted && canUnmountAtom(atom, mounted)) { - unmountAtom(atom) - } - } - const recomputeDependents = (atom: AnyAtom): void => { const getDependents = (a: AnyAtom): Dependents => { const dependents = new Set(mountedMap.get(a)?.t) @@ -615,16 +595,19 @@ export const createStore = () => { initialDependent?: AnyAtom, onMountQueue?: (() => void)[], ): Mounted => { + const existingMount = mountedMap.get(atom) + if (existingMount) { + if (initialDependent) { + existingMount.t.add(initialDependent) + } + return existingMount + } + const queue = onMountQueue || [] // mount dependencies before mounting self getAtomState(atom)?.d.forEach((_, a) => { - const aMounted = mountedMap.get(a) - if (aMounted) { - aMounted.t.add(atom) // add dependent - } else { - if (a !== atom) { - mountAtom(a, atom, queue) - } + if (a !== atom) { + mountAtom(a, atom, queue) } }) // recompute atom state @@ -654,9 +637,17 @@ export const createStore = () => { return mounted } - const unmountAtom = (atom: Atom): void => { + // FIXME doesn't work with mutually dependent atoms + const canUnmountAtom = (atom: AnyAtom, mounted: Mounted) => + !mounted.l.size && + (!mounted.t.size || (mounted.t.size === 1 && mounted.t.has(atom))) + + const tryUnmountAtom = (atom: Atom, mounted: Mounted): void => { + if (!canUnmountAtom(atom, mounted)) { + return + } // unmount self - const onUnmount = mountedMap.get(atom)?.u + const onUnmount = mounted.u if (onUnmount) { onUnmount() } @@ -673,12 +664,10 @@ export const createStore = () => { } atomState.d.forEach((_, a) => { if (a !== atom) { - const mounted = mountedMap.get(a) - if (mounted) { - mounted.t.delete(atom) - if (canUnmountAtom(a, mounted)) { - unmountAtom(a) - } + const mountedDep = mountedMap.get(a) + if (mountedDep) { + mountedDep.t.delete(atom) + tryUnmountAtom(a, mountedDep) } } }) @@ -707,20 +696,12 @@ export const createStore = () => { } }) depSet.forEach((a) => { - const mounted = mountedMap.get(a) - if (mounted) { - mounted.t.add(atom) // add to dependents - } else if (mountedMap.has(atom)) { - // we mount dependencies only when atom is already mounted - // Note: we should revisit this when you find other issues - // https://github.com/pmndrs/jotai/issues/942 - mountAtom(a, atom) - } + mountAtom(a, atom) }) maybeUnmountAtomSet.forEach((a) => { const mounted = mountedMap.get(a) - if (mounted && canUnmountAtom(a, mounted)) { - unmountAtom(a) + if (mounted) { + tryUnmountAtom(a, mounted) } }) } @@ -784,7 +765,7 @@ export const createStore = () => { } const subscribeAtom = (atom: AnyAtom, listener: () => void) => { - const mounted = addAtom(atom) + const mounted = mountAtom(atom) const flushed = flushPending([atom]) const listeners = mounted.l listeners.add(listener) @@ -795,7 +776,7 @@ export const createStore = () => { } return () => { listeners.delete(listener) - delAtom(atom) + tryUnmountAtom(atom, mounted) if (import.meta.env?.MODE !== 'production') { // devtools uses this to detect if it _can_ unmount or not storeListenersRev2.forEach((l) => l({ type: 'unsub' })) From dbed0aa277313e346dd2015cc65b10baeea7e7e4 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 29 Mar 2024 17:47:41 +0900 Subject: [PATCH 12/33] fix(store): improve dual instance warning in DEV (#2462) --- src/vanilla/store.ts | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index b7131a7baa..432bf485b6 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -828,25 +828,17 @@ type Store = ReturnType let defaultStore: Store | undefined -if (import.meta.env?.MODE !== 'production') { - if (typeof (globalThis as any).__NUMBER_OF_JOTAI_INSTANCES__ === 'number') { - ++(globalThis as any).__NUMBER_OF_JOTAI_INSTANCES__ - } else { - ;(globalThis as any).__NUMBER_OF_JOTAI_INSTANCES__ = 1 - } -} - export const getDefaultStore = () => { if (!defaultStore) { - if ( - import.meta.env?.MODE !== 'production' && - (globalThis as any).__NUMBER_OF_JOTAI_INSTANCES__ !== 1 - ) { - console.warn( - 'Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044', - ) - } defaultStore = createStore() + if (import.meta.env?.MODE !== 'production') { + ;(globalThis as any).__JOTAI_DEFAULT_STORE__ ||= defaultStore + if ((globalThis as any).__JOTAI_DEFAULT_STORE__ !== defaultStore) { + console.warn( + 'Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044', + ) + } + } } return defaultStore } From 42f324c3b7a4e71181074540015c3068aee05153 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 29 Mar 2024 17:56:26 +0900 Subject: [PATCH 13/33] refactor: no-any (#2471) --- src/react/useAtom.ts | 6 ++++-- src/react/useAtomValue.ts | 2 +- src/react/useSetAtom.ts | 4 +++- src/react/utils/useHydrateAtoms.ts | 6 +++--- src/vanilla/store.ts | 2 +- src/vanilla/typeUtils.ts | 8 ++++++-- src/vanilla/utils/atomWithReducer.ts | 2 +- src/vanilla/utils/atomWithRefresh.ts | 2 +- src/vanilla/utils/atomWithStorage.ts | 12 ++++++------ src/vanilla/utils/freezeAtom.ts | 16 ++++++++-------- src/vanilla/utils/splitAtom.ts | 10 +++++----- src/vanilla/utils/unwrap.ts | 2 +- 12 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/react/useAtom.ts b/src/react/useAtom.ts index a504a079c8..29784db288 100644 --- a/src/react/useAtom.ts +++ b/src/react/useAtom.ts @@ -29,7 +29,9 @@ export function useAtom( options?: Options, ): [Awaited, never] -export function useAtom>( +export function useAtom< + AtomType extends WritableAtom, +>( atom: AtomType, options?: Options, ): [ @@ -37,7 +39,7 @@ export function useAtom>( SetAtom, ExtractAtomResult>, ] -export function useAtom>( +export function useAtom>( atom: AtomType, options?: Options, ): [Awaited>, never] diff --git a/src/react/useAtomValue.ts b/src/react/useAtomValue.ts index 0e3baa1297..8c28b62ebd 100644 --- a/src/react/useAtomValue.ts +++ b/src/react/useAtomValue.ts @@ -50,7 +50,7 @@ export function useAtomValue( options?: Options, ): Awaited -export function useAtomValue>( +export function useAtomValue>( atom: AtomType, options?: Options, ): Awaited> diff --git a/src/react/useSetAtom.ts b/src/react/useSetAtom.ts index 47a20747cd..167fa068a4 100644 --- a/src/react/useSetAtom.ts +++ b/src/react/useSetAtom.ts @@ -14,7 +14,9 @@ export function useSetAtom( options?: Options, ): SetAtom -export function useSetAtom>( +export function useSetAtom< + AtomType extends WritableAtom, +>( atom: AtomType, options?: Options, ): SetAtom, ExtractAtomResult> diff --git a/src/react/utils/useHydrateAtoms.ts b/src/react/utils/useHydrateAtoms.ts index a703caa759..dad27cfc28 100644 --- a/src/react/utils/useHydrateAtoms.ts +++ b/src/react/utils/useHydrateAtoms.ts @@ -5,11 +5,11 @@ type Store = ReturnType type Options = Parameters[0] & { dangerouslyForceHydrate?: boolean } -type AnyWritableAtom = WritableAtom +type AnyWritableAtom = WritableAtom type InferAtomTuples = { [K in keyof T]: T[K] extends readonly [infer A, unknown] - ? A extends WritableAtom + ? A extends WritableAtom ? readonly [A, Args[0]] : T[K] : never @@ -43,7 +43,7 @@ export function useHydrateAtoms< for (const [atom, value] of values) { if (!hydratedSet.has(atom) || options?.dangerouslyForceHydrate) { hydratedSet.add(atom) - store.set(atom, value) + store.set(atom, value as never) } } } diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 432bf485b6..36fa46cf22 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -459,7 +459,7 @@ export const createStore = () => { }, } try { - const valueOrPromise = atom.read(getter, options as any) + const valueOrPromise = atom.read(getter, options as never) return setAtomValueOrPromise(atom, valueOrPromise, nextDependencies, () => controller?.abort(), ) diff --git a/src/vanilla/typeUtils.ts b/src/vanilla/typeUtils.ts index 96344e3925..dbec0c1887 100644 --- a/src/vanilla/typeUtils.ts +++ b/src/vanilla/typeUtils.ts @@ -9,9 +9,13 @@ export type ExtractAtomValue = AtomType extends Atom ? Value : never export type ExtractAtomArgs = - AtomType extends WritableAtom ? Args : never + AtomType extends WritableAtom + ? Args + : never export type ExtractAtomResult = - AtomType extends WritableAtom ? Result : never + AtomType extends WritableAtom + ? Result + : never export type SetStateAction = ExtractAtomArgs>[0] diff --git a/src/vanilla/utils/atomWithReducer.ts b/src/vanilla/utils/atomWithReducer.ts index 5799fb2f2a..d7c1ee478f 100644 --- a/src/vanilla/utils/atomWithReducer.ts +++ b/src/vanilla/utils/atomWithReducer.ts @@ -15,7 +15,7 @@ export function atomWithReducer( initialValue: Value, reducer: (value: Value, action: Action) => Value, ) { - return atom(initialValue, function (this: any, get, set, action: Action) { + return atom(initialValue, function (this: never, get, set, action: Action) { set(this, reducer(get(this), action)) }) } diff --git a/src/vanilla/utils/atomWithRefresh.ts b/src/vanilla/utils/atomWithRefresh.ts index 679d7208b7..626f1a4034 100644 --- a/src/vanilla/utils/atomWithRefresh.ts +++ b/src/vanilla/utils/atomWithRefresh.ts @@ -32,7 +32,7 @@ export function atomWithRefresh( return atom( (get, options) => { get(refreshAtom) - return read(get, options as any) + return read(get, options as never) }, (get, set, ...args: Args) => { if (args.length === 0) { diff --git a/src/vanilla/utils/atomWithStorage.ts b/src/vanilla/utils/atomWithStorage.ts index 7b044f41dc..038c76feaf 100644 --- a/src/vanilla/utils/atomWithStorage.ts +++ b/src/vanilla/utils/atomWithStorage.ts @@ -73,7 +73,7 @@ export function withStorageValidator( return validate(value) }, } - return storage as any // FIXME better way to type this? + return storage } } @@ -113,7 +113,7 @@ export function createJSONStorage( options?: JsonStorageOptions, ): AsyncStorage | SyncStorage { let lastStr: string | undefined - let lastValue: any + let lastValue: Value const storage: AsyncStorage | SyncStorage = { getItem: (key, initialValue) => { const parse = (str: string | null) => { @@ -130,9 +130,9 @@ export function createJSONStorage( } const str = getStringStorage()?.getItem(key) ?? null if (isPromiseLike(str)) { - return str.then(parse) + return str.then(parse) as never } - return parse(str) + return parse(str) as never }, setItem: (key, newValue) => getStringStorage()?.setItem( @@ -197,7 +197,7 @@ export function atomWithStorage( | SyncStorage | AsyncStorage = defaultStorage as SyncStorage, options?: { getOnInit?: boolean }, -): any { +) { const getOnInit = options?.getOnInit const baseAtom = atom( getOnInit @@ -244,5 +244,5 @@ export function atomWithStorage( }, ) - return anAtom + return anAtom as never } diff --git a/src/vanilla/utils/freezeAtom.ts b/src/vanilla/utils/freezeAtom.ts index b5c0d05001..6918045760 100644 --- a/src/vanilla/utils/freezeAtom.ts +++ b/src/vanilla/utils/freezeAtom.ts @@ -5,33 +5,33 @@ const cache1 = new WeakMap() const memo1 = (create: () => T, dep1: object): T => (cache1.has(dep1) ? cache1 : cache1.set(dep1, create())).get(dep1) -const deepFreeze = (obj: any) => { +const deepFreeze = (obj: unknown) => { if (typeof obj !== 'object' || obj === null) return Object.freeze(obj) const propNames = Object.getOwnPropertyNames(obj) for (const name of propNames) { - const value = obj[name] + const value = (obj as never)[name] deepFreeze(value) } return obj } -export function freezeAtom>( +export function freezeAtom>( anAtom: AtomType, ): AtomType { return memo1(() => { - const frozenAtom: any = atom( + const frozenAtom = atom( (get) => deepFreeze(get(anAtom)), - (_get, set, arg) => set(anAtom as any, arg), + (_get, set, arg) => set(anAtom as never, arg), ) - return frozenAtom + return frozenAtom as never }, anAtom) } export function freezeAtomCreator< - CreateAtom extends (...params: any[]) => Atom, + CreateAtom extends (...params: never[]) => Atom, >(createAtom: CreateAtom) { - return ((...params: any[]) => { + return ((...params: never[]) => { const anAtom = createAtom(...params) const origRead = anAtom.read anAtom.read = function (get, options) { diff --git a/src/vanilla/utils/splitAtom.ts b/src/vanilla/utils/splitAtom.ts index 69bcca4c89..7eec2d4ff3 100644 --- a/src/vanilla/utils/splitAtom.ts +++ b/src/vanilla/utils/splitAtom.ts @@ -22,7 +22,7 @@ const isWritable = ( ): atom is WritableAtom => !!(atom as WritableAtom).write -const isFunction = (x: T): x is T & ((...args: any[]) => any) => +const isFunction = (x: T): x is T & ((...args: never[]) => unknown) => typeof x === 'function' type SplitAtomAction = @@ -94,7 +94,7 @@ export function splitAtom( } throw new Error('splitAtom: index out of bounds for read') } - return currArr[index] as Item + return currArr[index]! } const write = ( get: Getter, @@ -109,7 +109,7 @@ export function splitAtom( throw new Error('splitAtom: index out of bounds for write') } const nextItem = isFunction(update) - ? update(arr[index] as Item) + ? (update as (prev: Item) => Item)(arr[index]!) : update if (!Object.is(arr[index], nextItem)) { set(arrAtom as WritableAtom, [ @@ -190,13 +190,13 @@ export function splitAtom( set(arrAtom as WritableAtom, [ ...arr.slice(0, index1), ...arr.slice(index1 + 1, index2), - arr[index1] as Item, + arr[index1]!, ...arr.slice(index2), ]) } else { set(arrAtom as WritableAtom, [ ...arr.slice(0, index2), - arr[index1] as Item, + arr[index1]!, ...arr.slice(index2, index1), ...arr.slice(index1 + 1), ]) diff --git a/src/vanilla/utils/unwrap.ts b/src/vanilla/utils/unwrap.ts index c83e4a6f50..fe6269636d 100644 --- a/src/vanilla/utils/unwrap.ts +++ b/src/vanilla/utils/unwrap.ts @@ -39,7 +39,7 @@ export function unwrap( export function unwrap( anAtom: WritableAtom | Atom, - fallback: (prev?: Awaited) => PendingValue = defaultFallback as any, + fallback: (prev?: Awaited) => PendingValue = defaultFallback as never, ) { return memo2( () => { From 3aec3475962852c0a9518a61489a07d411e60a1c Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 29 Mar 2024 18:12:58 +0900 Subject: [PATCH 14/33] fix: avoid slow types (#2472) --- src/react/Provider.ts | 5 ++++- src/react/utils/useResetAtom.ts | 6 +++--- src/vanilla/store.ts | 26 ++++++++++++++++++------- src/vanilla/utils/atomWithObservable.ts | 6 ------ src/vanilla/utils/atomWithReset.ts | 5 ++++- src/vanilla/utils/freezeAtom.ts | 4 ++-- 6 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/react/Provider.ts b/src/react/Provider.ts index 5819561dea..3c57cee40c 100644 --- a/src/react/Provider.ts +++ b/src/react/Provider.ts @@ -4,7 +4,10 @@ import { createStore, getDefaultStore } from '../vanilla.ts' type Store = ReturnType -const StoreContext = createContext(undefined) +type StoreContextType = ReturnType> +const StoreContext: StoreContextType = createContext( + undefined, +) type Options = { store?: Store diff --git a/src/react/utils/useResetAtom.ts b/src/react/utils/useResetAtom.ts index baa7a77639..1d13125350 100644 --- a/src/react/utils/useResetAtom.ts +++ b/src/react/utils/useResetAtom.ts @@ -5,10 +5,10 @@ import type { WritableAtom } from '../../vanilla.ts' type Options = Parameters[1] -export function useResetAtom( - anAtom: WritableAtom, +export function useResetAtom( + anAtom: WritableAtom, options?: Options, -) { +): () => T { const setAtom = useSetAtom(anAtom, options) const resetAtom = useCallback(() => setAtom(RESET), [setAtom]) return resetAtom diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 36fa46cf22..453e682c2a 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -8,7 +8,7 @@ type OnUnmount = () => void type Getter = Parameters[0] type Setter = Parameters[1] -const isSelfAtom = (atom: AnyAtom, a: AnyAtom) => +const isSelfAtom = (atom: AnyAtom, a: AnyAtom): boolean => atom.unstable_is ? atom.unstable_is(a) : a === atom const hasInitialValue = >( @@ -20,7 +20,7 @@ const isActuallyWritableAtom = (atom: AnyAtom): atom is AnyWritableAtom => !!(atom as AnyWritableAtom).write type CancelPromise = (next?: Promise) => void -const cancelPromiseMap = new WeakMap, CancelPromise>() +const cancelPromiseMap: WeakMap, CancelPromise> = new WeakMap() const registerCancelPromise = ( promise: Promise, @@ -124,6 +124,8 @@ type Mounted = { u?: OnUnmount } +type MountedAtoms = Set + // for debugging purpose only type StoreListenerRev2 = ( action: @@ -134,7 +136,19 @@ type StoreListenerRev2 = ( | { type: 'restore'; flushed: Set }, ) => void -type MountedAtoms = Set +type Store = { + get: (atom: Atom) => Value + set: ( + atom: WritableAtom, + ...args: Args + ) => Result + sub: (atom: AnyAtom, listener: () => void) => () => void + dev_subscribe_store?: (l: StoreListenerRev2, rev: 2) => () => void + dev_get_mounted_atoms?: () => IterableIterator + dev_get_atom_state?: (a: AnyAtom) => AtomState | undefined + dev_get_mounted?: (a: AnyAtom) => Mounted | undefined + dev_restore_atoms?: (values: Iterable) => void +} /** * Create a new store. Each store is an independent, isolated universe of atom @@ -152,7 +166,7 @@ type MountedAtoms = Set * * @returns A store. */ -export const createStore = () => { +export const createStore = (): Store => { const atomStateMap = new WeakMap() const mountedMap = new WeakMap() const pendingStack: Set[] = [] @@ -824,11 +838,9 @@ export const createStore = () => { } } -type Store = ReturnType - let defaultStore: Store | undefined -export const getDefaultStore = () => { +export const getDefaultStore = (): Store => { if (!defaultStore) { defaultStore = createStore() if (import.meta.env?.MODE !== 'production') { diff --git a/src/vanilla/utils/atomWithObservable.ts b/src/vanilla/utils/atomWithObservable.ts index fa24605456..6c2c8f2293 100644 --- a/src/vanilla/utils/atomWithObservable.ts +++ b/src/vanilla/utils/atomWithObservable.ts @@ -4,12 +4,6 @@ import type { Atom, Getter, WritableAtom } from '../../vanilla.ts' type Timeout = ReturnType type AnyError = unknown -declare global { - interface SymbolConstructor { - readonly observable: symbol - } -} - type Subscription = { unsubscribe: () => void } diff --git a/src/vanilla/utils/atomWithReset.ts b/src/vanilla/utils/atomWithReset.ts index 8dff76b7e5..2d9ae5929c 100644 --- a/src/vanilla/utils/atomWithReset.ts +++ b/src/vanilla/utils/atomWithReset.ts @@ -13,7 +13,10 @@ type WithInitialValue = { init: Value } -export function atomWithReset(initialValue: Value) { +export function atomWithReset( + initialValue: Value, +): WritableAtom], void> & + WithInitialValue { type Update = SetStateActionWithReset const anAtom = atom( initialValue, diff --git a/src/vanilla/utils/freezeAtom.ts b/src/vanilla/utils/freezeAtom.ts index 6918045760..e779c2d4aa 100644 --- a/src/vanilla/utils/freezeAtom.ts +++ b/src/vanilla/utils/freezeAtom.ts @@ -30,7 +30,7 @@ export function freezeAtom>( export function freezeAtomCreator< CreateAtom extends (...params: never[]) => Atom, ->(createAtom: CreateAtom) { +>(createAtom: CreateAtom): CreateAtom { return ((...params: never[]) => { const anAtom = createAtom(...params) const origRead = anAtom.read @@ -38,5 +38,5 @@ export function freezeAtomCreator< return deepFreeze(origRead.call(this, get, options)) } return anAtom - }) as CreateAtom + }) as never } From fb9d2f0fc0faa6d8789c10c8de2e171ffa8ef0e3 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 29 Mar 2024 21:06:40 +0900 Subject: [PATCH 15/33] chore(deps): update dev dependencies (#2473) * chore(deps): update dev dependencies * revert types/react * downgrade react canary/exp * revert more * revert more * downgrade react canary/exp * downgrade react canary/exp * downgrade react canary/exp --- .github/workflows/test-multiple-versions.yml | 4 +- package.json | 29 +- yarn.lock | 1508 +++++++++--------- 3 files changed, 786 insertions(+), 755 deletions(-) diff --git a/.github/workflows/test-multiple-versions.yml b/.github/workflows/test-multiple-versions.yml index c0e368a0ae..7a7d74cd72 100644 --- a/.github/workflows/test-multiple-versions.yml +++ b/.github/workflows/test-multiple-versions.yml @@ -33,8 +33,8 @@ jobs: - 18.0.0 - 18.1.0 - 18.2.0 - - 18.3.0-canary-56e20051c-20240311 - - 0.0.0-experimental-56e20051c-20240311 + - 18.3.0-canary-4b84f1161-20240318 + - 0.0.0-experimental-4b84f1161-20240318 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 diff --git a/package.json b/package.json index d864da018a..6c60764178 100644 --- a/package.json +++ b/package.json @@ -113,10 +113,10 @@ }, "homepage": "https://github.com/pmndrs/jotai", "devDependencies": { - "@babel/core": "^7.24.0", + "@babel/core": "^7.24.3", "@babel/plugin-transform-react-jsx": "^7.23.4", - "@babel/plugin-transform-typescript": "^7.23.6", - "@babel/preset-env": "^7.24.0", + "@babel/plugin-transform-typescript": "^7.24.1", + "@babel/preset-env": "^7.24.3", "@babel/template": "^7.24.0", "@babel/types": "^7.24.0", "@redux-devtools/extension": "^3.3.0", @@ -127,14 +127,14 @@ "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", "@testing-library/dom": "^9.3.4", - "@testing-library/react": "^14.2.1", + "@testing-library/react": "^14.2.2", "@testing-library/user-event": "14.4.3", "@types/babel__core": "^7.20.5", - "@types/node": "^20.11.27", + "@types/node": "^20.11.30", "@types/react": "18.2.56", - "@types/react-dom": "^18.2.22", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", + "@types/react-dom": "^18.2.23", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", "@vitest/coverage-v8": "0.33.0", "@vitest/ui": "0.33.0", "benny": "^3.7.1", @@ -146,29 +146,30 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-vitest": "^0.3.26", + "eslint-plugin-vitest": "^0.4.0", "jsdom": "^24.0.0", "json": "^11.0.0", "prettier": "^3.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "redux": "^5.0.1", - "rollup": "^4.13.0", - "rollup-plugin-banner2": "^1.2.2", + "rollup": "^4.13.2", + "rollup-plugin-banner2": "^1.2.3", "rollup-plugin-esbuild": "^6.1.1", "rxjs": "^7.8.1", "shx": "^0.3.4", "ts-expect": "^1.3.0", "ts-node": "^10.9.2", "tslib": "^2.6.2", - "typescript": "^5.4.2", + "typescript": "^5.4.3", "vitest": "0.33.0", "wonka": "^6.3.4" }, "resolutions": { - "@types/react": "18.2.56" + "@types/react": "18.2.56", + "@typescript-eslint/utils": "7.2.0" }, "peerDependencies": { "@types/react": ">=17.0.0", diff --git a/yarn.lock b/yarn.lock index 83c65f662b..d66f881ed1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -49,33 +49,33 @@ "@arrows/error" "^1.0.2" fast-deep-equal "^3.1.3" -"@babel/code-frame@^7.10.4", "@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== +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@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== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.1.tgz#31c1f66435f2a9c329bb5716a6d6186c516c3742" + integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA== -"@babel/core@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b" - integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw== +"@babel/core@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.3.tgz#568864247ea10fbd4eff04dda1e05f9e2ea985c3" + integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.1" "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.0" - "@babel/parser" "^7.24.0" + "@babel/helpers" "^7.24.1" + "@babel/parser" "^7.24.1" "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" convert-source-map "^2.0.0" debug "^4.1.0" @@ -83,14 +83,14 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== +"@babel/generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.1.tgz#e67e06f68568a4ebf194d1c6014235344f0476d0" + integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A== dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" "@babel/helper-annotate-as-pure@^7.22.5": @@ -107,7 +107,7 @@ 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": +"@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== @@ -118,17 +118,17 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - 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== +"@babel/helper-create-class-features-plugin@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz#db58bf57137b623b916e24874ab7188d93d7f68f" + integrity sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA== 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-replace-supers" "^7.24.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" @@ -142,17 +142,6 @@ 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-define-polyfill-provider@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" @@ -184,19 +173,19 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": +"@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.18.6", "@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" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.0" "@babel/helper-module-transforms@^7.23.3": version "7.23.3" @@ -230,13 +219,13 @@ "@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== +"@babel/helper-replace-supers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" + integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-member-expression-to-functions" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-simple-access@^7.22.5": @@ -261,9 +250,9 @@ "@babel/types" "^7.22.5" "@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" @@ -284,52 +273,53 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b" - integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA== +"@babel/helpers@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.1.tgz#183e44714b9eba36c3038e442516587b1e0a1a94" + integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg== dependencies: "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.0" + "@babel/traverse" "^7.24.1" "@babel/types" "^7.24.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: "@babel/helper-validator-identifier" "^7.22.20" chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac" - integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.1.tgz#1e416d3627393fab1cb5b0f2f1796a100ae9133a" + integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg== -"@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== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": + version "7.24.1" + 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.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" + integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" + integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.24.1" -"@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== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" + integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -371,19 +361,19 @@ 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== +"@babel/plugin-syntax-import-assertions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" + integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-syntax-import-attributes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" + integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -400,11 +390,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" + integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -462,12 +452,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -477,212 +467,212 @@ "@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== +"@babel/plugin-transform-arrow-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" + integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - 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== +"@babel/plugin-transform-async-generator-functions@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" + integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== dependencies: "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-async-to-generator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" + integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-imports" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/helper-remap-async-to-generator" "^7.22.20" -"@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== +"@babel/plugin-transform-block-scoped-functions@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" + integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-block-scoping@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.1.tgz#27af183d7f6dad890531256c7a45019df768ac1f" + integrity sha512-h71T2QQvDgM2SmT29UYU6ozjMlAt7s7CSs5Hvy8f8cf/GM/Z4a2zMfN+fjVGaieeCrXR3EdQl6C4gQG+OgmbKw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-class-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" + integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-class-static-block@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.1.tgz#4e37efcca1d9f2fcb908d1bae8b56b4b6e9e1cb6" + integrity sha512-FUHlKCn6J3ERiu8Dv+4eoz7w8+kFLSyeVG4vDAikwADGjUCoHw/JHokyGtr8OR4UjpwPVivyF+h8Q5iv/JmrtA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-classes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" + integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== 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-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" "@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== +"@babel/plugin-transform-computed-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" + integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template" "^7.24.0" -"@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== +"@babel/plugin-transform-destructuring@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" + integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-dotall-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" + integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-duplicate-keys@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" + integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-dynamic-import@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" + integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-exponentiation-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" + integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-export-namespace-from@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" + integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-for-of@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" + integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-function-name@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" + integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-compilation-targets" "^7.23.6" "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-json-strings@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" + integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" + integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-logical-assignment-operators@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" + integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-member-expression-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" + integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-modules-amd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" + integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-modules-commonjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" + integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-modules-systemjs@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" + integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== dependencies: "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-modules-umd@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" + integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== dependencies: "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": version "7.22.5" @@ -692,96 +682,95 @@ "@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== +"@babel/plugin-transform-new-target@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" + integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" + integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-numeric-separator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" + integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-object-rest-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" + integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== 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-parameters" "^7.24.1" -"@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== +"@babel/plugin-transform-object-super@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" + integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-replace-supers" "^7.24.1" -"@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== +"@babel/plugin-transform-optional-catch-binding@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" + integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-optional-chaining@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" + integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-parameters@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" + integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-private-methods@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" + integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-private-property-in-object@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" + integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== 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/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-property-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" + integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@babel/plugin-transform-react-jsx@^7.23.4": version "7.23.4" @@ -794,118 +783,118 @@ "@babel/plugin-syntax-jsx" "^7.23.3" "@babel/types" "^7.23.4" -"@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== +"@babel/plugin-transform-regenerator@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" + integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" 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== +"@babel/plugin-transform-reserved-words@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" + integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-shorthand-properties@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" + integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-spread@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" + integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" "@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== +"@babel/plugin-transform-sticky-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" + integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-template-literals@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" + integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-typeof-symbol@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" + integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-typescript@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz#aa36a94e5da8d94339ae3a4e22d40ed287feb34c" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== +"@babel/plugin-transform-typescript@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz#5c05e28bb76c7dfe7d6c5bed9951324fd2d3ab07" + integrity sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-create-class-features-plugin" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/plugin-syntax-typescript" "^7.24.1" -"@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== +"@babel/plugin-transform-unicode-escapes@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" + integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-unicode-property-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" + integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-unicode-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" + integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/plugin-transform-unicode-sets-regex@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" + integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.0" -"@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== +"@babel/preset-env@^7.24.3": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.3.tgz#f3f138c844ffeeac372597b29c51b5259e8323a3" + integrity sha512-fSk430k5c2ff8536JcPvPWK4tZDwehWLGlBp0wrsBUjZVdeQV6lePbwKWZaZfK2vnh/1kQX1PzAJWsnBmVgGJA== dependencies: - "@babel/compat-data" "^7.23.5" + "@babel/compat-data" "^7.24.1" "@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-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" "@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-assertions" "^7.24.1" + "@babel/plugin-syntax-import-attributes" "^7.24.1" "@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" @@ -917,58 +906,58 @@ "@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-arrow-functions" "^7.24.1" + "@babel/plugin-transform-async-generator-functions" "^7.24.3" + "@babel/plugin-transform-async-to-generator" "^7.24.1" + "@babel/plugin-transform-block-scoped-functions" "^7.24.1" + "@babel/plugin-transform-block-scoping" "^7.24.1" + "@babel/plugin-transform-class-properties" "^7.24.1" + "@babel/plugin-transform-class-static-block" "^7.24.1" + "@babel/plugin-transform-classes" "^7.24.1" + "@babel/plugin-transform-computed-properties" "^7.24.1" + "@babel/plugin-transform-destructuring" "^7.24.1" + "@babel/plugin-transform-dotall-regex" "^7.24.1" + "@babel/plugin-transform-duplicate-keys" "^7.24.1" + "@babel/plugin-transform-dynamic-import" "^7.24.1" + "@babel/plugin-transform-exponentiation-operator" "^7.24.1" + "@babel/plugin-transform-export-namespace-from" "^7.24.1" + "@babel/plugin-transform-for-of" "^7.24.1" + "@babel/plugin-transform-function-name" "^7.24.1" + "@babel/plugin-transform-json-strings" "^7.24.1" + "@babel/plugin-transform-literals" "^7.24.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" + "@babel/plugin-transform-member-expression-literals" "^7.24.1" + "@babel/plugin-transform-modules-amd" "^7.24.1" + "@babel/plugin-transform-modules-commonjs" "^7.24.1" + "@babel/plugin-transform-modules-systemjs" "^7.24.1" + "@babel/plugin-transform-modules-umd" "^7.24.1" "@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/plugin-transform-new-target" "^7.24.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" + "@babel/plugin-transform-numeric-separator" "^7.24.1" + "@babel/plugin-transform-object-rest-spread" "^7.24.1" + "@babel/plugin-transform-object-super" "^7.24.1" + "@babel/plugin-transform-optional-catch-binding" "^7.24.1" + "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-private-methods" "^7.24.1" + "@babel/plugin-transform-private-property-in-object" "^7.24.1" + "@babel/plugin-transform-property-literals" "^7.24.1" + "@babel/plugin-transform-regenerator" "^7.24.1" + "@babel/plugin-transform-reserved-words" "^7.24.1" + "@babel/plugin-transform-shorthand-properties" "^7.24.1" + "@babel/plugin-transform-spread" "^7.24.1" + "@babel/plugin-transform-sticky-regex" "^7.24.1" + "@babel/plugin-transform-template-literals" "^7.24.1" + "@babel/plugin-transform-typeof-symbol" "^7.24.1" + "@babel/plugin-transform-unicode-escapes" "^7.24.1" + "@babel/plugin-transform-unicode-property-regex" "^7.24.1" + "@babel/plugin-transform-unicode-regex" "^7.24.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" "@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" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" core-js-compat "^3.31.0" semver "^6.3.1" @@ -987,9 +976,9 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.12.5", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.8.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57" + integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ== dependencies: regenerator-runtime "^0.14.0" @@ -1002,23 +991,23 @@ "@babel/parser" "^7.24.0" "@babel/types" "^7.24.0" -"@babel/traverse@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e" - integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw== +"@babel/traverse@^7.24.1": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.0" + "@babel/parser" "^7.24.1" "@babel/types" "^7.24.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@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== @@ -1327,7 +1316,7 @@ dependencies: "@sinclair/typebox" "^0.27.8" -"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": +"@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== @@ -1367,7 +1356,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1475,70 +1464,80 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz#b98786c1304b4ff8db3a873180b778649b5dff2b" - integrity sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg== - -"@rollup/rollup-android-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz#8833679af11172b1bf1ab7cb3bad84df4caf0c9e" - integrity sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q== - -"@rollup/rollup-darwin-arm64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz#ef02d73e0a95d406e0eb4fd61a53d5d17775659b" - integrity sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g== - -"@rollup/rollup-darwin-x64@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz#3ce5b9bcf92b3341a5c1c58a3e6bcce0ea9e7455" - integrity sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg== - -"@rollup/rollup-linux-arm-gnueabihf@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz#3d3d2c018bdd8e037c6bfedd52acfff1c97e4be4" - integrity sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ== - -"@rollup/rollup-linux-arm64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz#5fc8cc978ff396eaa136d7bfe05b5b9138064143" - integrity sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w== - -"@rollup/rollup-linux-arm64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz#f2ae7d7bed416ffa26d6b948ac5772b520700eef" - integrity sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw== - -"@rollup/rollup-linux-riscv64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz#303d57a328ee9a50c85385936f31cf62306d30b6" - integrity sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA== - -"@rollup/rollup-linux-x64-gnu@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz#f672f6508f090fc73f08ba40ff76c20b57424778" - integrity sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA== - -"@rollup/rollup-linux-x64-musl@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz#d2f34b1b157f3e7f13925bca3288192a66755a89" - integrity sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw== - -"@rollup/rollup-win32-arm64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz#8ffecc980ae4d9899eb2f9c4ae471a8d58d2da6b" - integrity sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA== - -"@rollup/rollup-win32-ia32-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz#a7505884f415662e088365b9218b2b03a88fc6f2" - integrity sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw== - -"@rollup/rollup-win32-x64-msvc@4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz#6abd79db7ff8d01a58865ba20a63cfd23d9e2a10" - integrity sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw== +"@rollup/rollup-android-arm-eabi@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz#fbf098f49d96a8cac9056f22f5fd80906ef3af85" + integrity sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g== + +"@rollup/rollup-android-arm64@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz#0d2448251040fce19a98eee505dff5b3c8ec9b98" + integrity sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ== + +"@rollup/rollup-darwin-arm64@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz#78db4d4da5b1b84c22adbe25c8a4961b3f22d3af" + integrity sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA== + +"@rollup/rollup-darwin-x64@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz#fcc05af54379f8ee5c7e954987d4514c6fd0fb42" + integrity sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A== + +"@rollup/rollup-linux-arm-gnueabihf@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz#2ce200efa1ef4a56ee2af7b453edc74a259d7d31" + integrity sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ== + +"@rollup/rollup-linux-arm64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz#5a24aac882bff9abfda3f45f6f1db2166c342a4a" + integrity sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ== + +"@rollup/rollup-linux-arm64-musl@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz#f1fb4c6f961d3f3397231a99e621d199200e4ea9" + integrity sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz#46b2463d94ac3af3e0f7a2947b695397bc13b755" + integrity sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ== + +"@rollup/rollup-linux-riscv64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz#47b932ee59a5395a3a341b0493e361d9e6032cf2" + integrity sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw== + +"@rollup/rollup-linux-s390x-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz#8e14a1b3c3b9a4440c70a9c1ba12d32aa21f9712" + integrity sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg== + +"@rollup/rollup-linux-x64-gnu@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz#270e939194b66df77bcb33dd9a5ddf7784bd7997" + integrity sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A== + +"@rollup/rollup-linux-x64-musl@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz#e8dd0f3c2046acbda2934490b36552e856a3bc6a" + integrity sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA== + +"@rollup/rollup-win32-arm64-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz#f8b65a4a7e7a6b383e7b14439129b2f474ff123c" + integrity sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA== + +"@rollup/rollup-win32-ia32-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz#bc1c5a4fbc4337d6cb15da80a4de95fd53ab3573" + integrity sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw== + +"@rollup/rollup-win32-x64-msvc@4.13.2": + version "4.13.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz#851959c4c1c3c6647aba1f388198c8243aed6917" + integrity sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1559,10 +1558,10 @@ lz-string "^1.5.0" pretty-format "^27.0.2" -"@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== +"@testing-library/react@^14.2.2": + version "14.2.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.2.2.tgz#74f855215c57d423282486a395a4348a837d3c5a" + integrity sha512-SOUuM2ysCvjUWBXTNfQ/ztmnKDmqaiPV3SvoIuyxMUca45rbSWWAT/qB8CUs/JQ/ux/8JFs9DNdFQ3f6jH3crA== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^9.0.0" @@ -1574,9 +1573,9 @@ integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" @@ -1639,9 +1638,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.5": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.12.tgz#b192fe1c553b54f45d20543adc2ab88455a07d5e" - integrity sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw== + version "4.3.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6" + integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w== "@types/estree@1.0.5", "@types/estree@^1.0.0": version "1.0.5" @@ -1663,22 +1662,22 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@*", "@types/node@^20.11.27": - version "20.11.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.27.tgz#debe5cfc8a507dd60fe2a3b4875b1604f215c2ac" - integrity sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg== +"@types/node@*", "@types/node@^20.11.30": + version "20.11.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.30.tgz#9c33467fc23167a347e73834f788f4b9f399d66f" + integrity sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw== dependencies: undici-types "~5.26.4" "@types/prop-types@*": - version "15.7.11" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.22": - version "18.2.22" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.22.tgz#d332febf0815403de6da8a97e5fe282cbe609bae" - integrity sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ== +"@types/react-dom@^18.0.0", "@types/react-dom@^18.2.23": + version "18.2.23" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.23.tgz#112338760f622a16d64271b408355f2f27f6302c" + integrity sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A== dependencies: "@types/react" "*" @@ -1697,16 +1696,16 @@ integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== "@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@typescript-eslint/eslint-plugin@^7.2.0": +"@typescript-eslint/eslint-plugin@7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== @@ -1723,7 +1722,7 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^7.2.0": +"@typescript-eslint/parser@7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== @@ -1771,7 +1770,7 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@7.2.0", "@typescript-eslint/utils@^7.1.1": +"@typescript-eslint/utils@7.2.0", "@typescript-eslint/utils@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== @@ -1959,14 +1958,15 @@ array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: is-array-buffer "^3.0.4" array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -1974,37 +1974,28 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - array.prototype.findlast@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz#eeb9e45fc894055c82e5675c463e8077b827ad36" - integrity sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" + es-abstract "^1.23.2" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: @@ -2072,13 +2063,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2091,7 +2075,7 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -babel-plugin-polyfill-corejs2@^0.4.8: +babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.10" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== @@ -2100,20 +2084,20 @@ babel-plugin-polyfill-corejs2@^0.4.8: "@babel/helper-define-polyfill-provider" "^0.6.1" 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== +babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" -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== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" + integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" + "@babel/helper-define-polyfill-provider" "^0.6.1" balanced-match@^1.0.0: version "1.0.2" @@ -2165,7 +2149,7 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.22.2, browserslist@^4.22.3: +browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== @@ -2207,9 +2191,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001587: - version "1.0.30001597" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz#8be94a8c1d679de23b22fbd944232aa1321639e6" - integrity sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w== + version "1.0.30001600" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079" + integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ== chai@^4.3.7: version "4.4.1" @@ -2335,12 +2319,12 @@ 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== +core-js-compat@^3.31.0, core-js-compat@^3.36.1: + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" + integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== dependencies: - browserslist "^4.22.3" + browserslist "^4.23.0" create-require@^1.1.0: version "1.1.1" @@ -2376,6 +2360,33 @@ data-urls@^5.0.0: whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + date-fns@^2.30.0: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -2512,9 +2523,9 @@ downlevel-dts@^0.11.0: typescript next electron-to-chromium@^1.4.668: - version "1.4.707" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.707.tgz#77904f87432b8b50b8b8b654ba3940d2bef48d63" - integrity sha512-qRq74Mo7ChePOU6GHdfAJ0NREXU8vQTlVlfWz3wNygFay6xrd/fY2J7oGHwrhFeU30OVctGLdTh/FcnokTWpng== + version "1.4.721" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.721.tgz#a9ee55ba7e54d9ecbcc19825116f3752e7d60ef2" + integrity sha512-k1x2r6foI8iJOp+1qTxbbrrWMsOiHkzGBYwYigaq+apO1FSqtn44KTo3Sy69qt7CRr7149zTcsDvH7MUKsOuIQ== emoji-regex@^8.0.0: version "8.0.0" @@ -2526,17 +2537,21 @@ entities@^4.4.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: - version "1.22.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" - integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: + version "1.23.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.2.tgz#693312f3940f967b8dd3eebacb590b01712622e0" + integrity sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w== dependencies: array-buffer-byte-length "^1.0.1" arraybuffer.prototype.slice "^1.0.3" available-typed-arrays "^1.0.7" call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" es-define-property "^1.0.0" es-errors "^1.3.0" + es-object-atoms "^1.0.0" es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" @@ -2547,10 +2562,11 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: has-property-descriptors "^1.0.2" has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.1" + hasown "^2.0.2" internal-slot "^1.0.7" is-array-buffer "^3.0.4" is-callable "^1.2.7" + is-data-view "^1.0.1" is-negative-zero "^2.0.3" is-regex "^1.1.4" is-shared-array-buffer "^1.0.3" @@ -2561,22 +2577,17 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.22.4: object-keys "^1.1.1" object.assign "^4.1.5" regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" string.prototype.trimstart "^1.0.7" typed-array-buffer "^1.0.2" typed-array-byte-length "^1.0.1" typed-array-byte-offset "^1.0.2" typed-array-length "^1.0.5" unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + which-typed-array "^1.1.15" es-define-property@^1.0.0: version "1.0.0" @@ -2585,7 +2596,7 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.0.0, es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== @@ -2606,32 +2617,38 @@ es-get-iterator@^1.1.3: stop-iteration-iterator "^1.0.0" es-iterator-helpers@^1.0.17: - version "1.0.17" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz#123d1315780df15b34eb181022da43e734388bb8" - integrity sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ== + version "1.0.18" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" + integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== dependencies: - asynciterator.prototype "^1.0.0" call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.4" + es-abstract "^1.23.0" es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" + es-set-tostringtag "^2.0.3" function-bind "^1.1.2" get-intrinsic "^1.2.4" globalthis "^1.0.3" has-property-descriptors "^1.0.2" - has-proto "^1.0.1" + has-proto "^1.0.3" has-symbols "^1.0.3" internal-slot "^1.0.7" iterator.prototype "^1.1.2" - safe-array-concat "^1.1.0" + safe-array-concat "^1.1.2" es-module-lexer@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== + version "1.5.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.5.0.tgz#4878fee3789ad99e065f975fdd3c645529ff0236" + integrity sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" -es-set-tostringtag@^2.0.2, es-set-tostringtag@^2.0.3: +es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== @@ -2790,10 +2807,10 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.34.0: - version "7.34.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz#ab71484d54fc409c37025c5eca00eb4177a5e88c" - integrity sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ== +eslint-plugin-react@^7.34.1: + version "7.34.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== dependencies: array-includes "^3.1.7" array.prototype.findlast "^1.2.4" @@ -2814,12 +2831,12 @@ eslint-plugin-react@^7.34.0: semver "^6.3.1" string.prototype.matchall "^4.0.10" -eslint-plugin-vitest@^0.3.26: - version "0.3.26" - resolved "https://registry.yarnpkg.com/eslint-plugin-vitest/-/eslint-plugin-vitest-0.3.26.tgz#0906893c1f8f7094614fc6ff255c0a369cfbf427" - integrity sha512-oxe5JSPgRjco8caVLTh7Ti8PxpwJdhSV0hTQAmkFcNcmy/9DnqLB/oNVRA11RmVRP//2+jIIT6JuBEcpW3obYg== +eslint-plugin-vitest@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vitest/-/eslint-plugin-vitest-0.4.0.tgz#845ca6abf7e95513162f2adb9ab5ea0043c03648" + integrity sha512-3oWgZIwdWVBQ5plvkmOBjreIGLQRdYb7x54OP8uIRHeZyRVJIdOn9o/qWVb9292fDMC8jn7H7d9TSFBZqhrykQ== dependencies: - "@typescript-eslint/utils" "^7.1.1" + "@typescript-eslint/utils" "^7.2.0" eslint-scope@^7.2.2: version "7.2.2" @@ -3205,7 +3222,7 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -3283,7 +3300,7 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.4, internal-slot@^1.0.5, internal-slot@^1.0.7: +internal-slot@^1.0.4, 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== @@ -3354,6 +3371,13 @@ is-core-module@^2.13.0, is-core-module@^2.13.1: dependencies: hasown "^2.0.0" +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" @@ -3910,50 +3934,50 @@ object.assign@^4.1.4, object.assign@^4.1.5: object-keys "^1.1.1" object.entries@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" + es-abstract "^1.23.2" object.hasown@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" once@^1.3.0: version "1.4.0" @@ -4081,13 +4105,13 @@ possible-typed-array-names@^1.0.0: integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== postcss@^8.4.27: - version "8.4.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== + version "8.4.38" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== dependencies: nanoid "^3.3.7" picocolors "^1.0.0" - source-map-js "^1.0.2" + source-map-js "^1.2.0" prelude-ls@^1.2.1: version "1.2.1" @@ -4203,15 +4227,15 @@ redux@^5.0.1: integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== reflect.getprototypeof@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz#e0bd28b597518f16edaf9c0e292c631eb13e0674" - integrity sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - get-intrinsic "^1.2.3" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" globalthis "^1.0.3" which-builtin-type "^1.1.3" @@ -4239,7 +4263,7 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +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== @@ -4326,10 +4350,10 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-banner2@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-banner2/-/rollup-plugin-banner2-1.2.2.tgz#a73323035800c7af11c34514f1a55298684bff47" - integrity sha512-ShlyRFlJfh7fxHT0rkmIxBv+lIWfdvaWcZmra7xAQFGAHHnd7f93zoa0wdDWHrguR9vR+BxWKToabR6DJQHC9g== +rollup-plugin-banner2@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-banner2/-/rollup-plugin-banner2-1.2.3.tgz#4aa454e41a80623180164625368ec0321641a0ef" + integrity sha512-lhpPoDTRZMIvSK1AppGNDIZ4fnQuW4WuENuswSUzvXhTR596zWNOmCaCYoqD15QixnjnG+wT+jauLEK5qGRPZg== dependencies: magic-string "^0.25.7" @@ -4350,26 +4374,28 @@ rollup@^3.27.1: optionalDependencies: fsevents "~2.3.2" -rollup@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.0.tgz#dd2ae144b4cdc2ea25420477f68d4937a721237a" - integrity sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg== +rollup@^4.13.2: + version "4.13.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.13.2.tgz#ac57d2dc48e8f5562f5a6daadb9caee590069262" + integrity sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.13.0" - "@rollup/rollup-android-arm64" "4.13.0" - "@rollup/rollup-darwin-arm64" "4.13.0" - "@rollup/rollup-darwin-x64" "4.13.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.13.0" - "@rollup/rollup-linux-arm64-gnu" "4.13.0" - "@rollup/rollup-linux-arm64-musl" "4.13.0" - "@rollup/rollup-linux-riscv64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-gnu" "4.13.0" - "@rollup/rollup-linux-x64-musl" "4.13.0" - "@rollup/rollup-win32-arm64-msvc" "4.13.0" - "@rollup/rollup-win32-ia32-msvc" "4.13.0" - "@rollup/rollup-win32-x64-msvc" "4.13.0" + "@rollup/rollup-android-arm-eabi" "4.13.2" + "@rollup/rollup-android-arm64" "4.13.2" + "@rollup/rollup-darwin-arm64" "4.13.2" + "@rollup/rollup-darwin-x64" "4.13.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.13.2" + "@rollup/rollup-linux-arm64-gnu" "4.13.2" + "@rollup/rollup-linux-arm64-musl" "4.13.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.13.2" + "@rollup/rollup-linux-riscv64-gnu" "4.13.2" + "@rollup/rollup-linux-s390x-gnu" "4.13.2" + "@rollup/rollup-linux-x64-gnu" "4.13.2" + "@rollup/rollup-linux-x64-musl" "4.13.2" + "@rollup/rollup-win32-arm64-msvc" "4.13.2" + "@rollup/rollup-win32-ia32-msvc" "4.13.2" + "@rollup/rollup-win32-x64-msvc" "4.13.2" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -4391,7 +4417,7 @@ rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-array-concat@^1.1.0: +safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== @@ -4465,7 +4491,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: +set-function-name@^2.0.1, set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -4509,7 +4535,7 @@ shx@^0.3.4: minimist "^1.2.3" shelljs "^0.8.5" -side-channel@^1.0.4: +side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== @@ -4562,10 +4588,10 @@ smob@^1.0.0: resolved "https://registry.yarnpkg.com/smob/-/smob-1.4.1.tgz#66270e7df6a7527664816c5b577a23f17ba6f5b5" integrity sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ== -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== source-map-support@~0.5.20: version "0.5.21" @@ -4617,46 +4643,50 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: strip-ansi "^6.0.1" string.prototype.matchall@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== + version "4.0.11" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" @@ -4722,9 +4752,9 @@ synckit@^0.8.6: tslib "^2.6.2" terser@^5.17.4: - version "5.29.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.2.tgz#c17d573ce1da1b30f21a877bffd5655dd86fdb35" - integrity sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw== + version "5.30.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.0.tgz#64cb2af71e16ea3d32153f84d990f9be0cdc22bf" + integrity sha512-Y/SblUl5kEyEFzhMAQdsxVHh+utAxd4IuRNJzKywY/4uzSogh3G219jqbDDxYu4MXO9CzY3tSEqmZvW6AoEDJw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -4898,9 +4928,9 @@ typed-array-byte-offset@^1.0.2: is-typed-array "^1.1.13" typed-array-length@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" - integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" for-each "^0.3.3" @@ -4909,20 +4939,20 @@ typed-array-length@^1.0.5: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" - integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== +typescript@^5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== typescript@next: - version "5.5.0-dev.20240314" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.0-dev.20240314.tgz#c75938db2cdc677891a880964c4ee8919b1065ca" - integrity sha512-8yyAVbLSgGrydN7CZWeP+GZ5zkEBh45r0LswVPgxNDjBuDx9VuKtp+ws+Ri122iwfy8vGr5b486IjeeVM49Crw== + version "5.5.0-dev.20240329" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.0-dev.20240329.tgz#88f97713822c730cf2d281964536abfaba06afc0" + integrity sha512-T1vHxyzRt1MeCLzQdY8JYOM1K9XRs4YgTOzMjlw8m5K19P9264rc22CyvUB9lA0vBIcMSDjObfh+/GVHMOXhkg== ufo@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" - integrity sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ== + version "1.5.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.3.tgz#3325bd3c977b6c6cd3160bf4ff52989adc9d3344" + integrity sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw== unbox-primitive@^1.0.2: version "1.0.2" @@ -5022,9 +5052,9 @@ vite-node@0.33.0: vite "^3.0.0 || ^4.0.0" "vite@^3.0.0 || ^4.0.0": - version "4.5.2" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.2.tgz#d6ea8610e099851dad8c7371599969e0f8b97e82" - integrity sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w== + version "4.5.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a" + integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== dependencies: esbuild "^0.18.10" postcss "^8.4.27" @@ -5133,7 +5163,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, 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.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== From ee631fa244562092ae0ed17f0edd3e50f2d638ed Mon Sep 17 00:00:00 2001 From: daishi Date: Fri, 29 Mar 2024 21:11:23 +0900 Subject: [PATCH 16/33] 2.7.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6c60764178..cb793935d3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jotai", "private": true, - "version": "2.7.1", + "version": "2.7.2", "description": "👻 Primitive and flexible state management for React", "main": "./index.js", "types": "./index.d.ts", From 8847084aa651851d50bff1ae548ef5e5fc2ad6b8 Mon Sep 17 00:00:00 2001 From: David Maskasky Date: Wed, 3 Apr 2024 19:01:26 -0700 Subject: [PATCH 17/33] [BREAKING] selectAtom does not resolve promises internally (#2435) * test: selectAtom should not return async value when the base atom curr and prev values are synchronous * selectAtom replaces promise with fulfilled value when promise resolves * replace refAtom with weakMap implementation * partition state by store * BREAKING: selectAtom does not internally resolve promises --------- Co-authored-by: David Maskasky Co-authored-by: Daishi Kato --- src/vanilla/utils/selectAtom.ts | 17 ++- tests/react/vanilla-utils/selectAtom.test.tsx | 106 +----------------- tests/vanilla/utils/types.test.tsx | 10 -- 3 files changed, 9 insertions(+), 124 deletions(-) diff --git a/src/vanilla/utils/selectAtom.ts b/src/vanilla/utils/selectAtom.ts index 1e705839d2..e759f5879f 100644 --- a/src/vanilla/utils/selectAtom.ts +++ b/src/vanilla/utils/selectAtom.ts @@ -17,20 +17,20 @@ const memo3 = ( export function selectAtom( anAtom: Atom, - selector: (v: Awaited, prevSlice?: Slice) => Slice, + selector: (v: Value, prevSlice?: Slice) => Slice, equalityFn?: (a: Slice, b: Slice) => boolean, -): Atom ? Promise : Slice> +): Atom export function selectAtom( anAtom: Atom, - selector: (v: Awaited, prevSlice?: Slice) => Slice, - equalityFn: (a: Slice, b: Slice) => boolean = Object.is, + selector: (v: Value, prevSlice?: Slice) => Slice, + equalityFn: (prevSlice: Slice, slice: Slice) => boolean = Object.is, ) { return memo3( () => { const EMPTY = Symbol() const selectValue = ([value, prevSlice]: readonly [ - Awaited, + Value, Slice | typeof EMPTY, ]) => { if (prevSlice === EMPTY) { @@ -39,15 +39,12 @@ export function selectAtom( const slice = selector(value, prevSlice) return equalityFn(prevSlice, slice) ? prevSlice : slice } - const derivedAtom: Atom | typeof EMPTY> & { + const derivedAtom: Atom & { init?: typeof EMPTY } = atom((get) => { const prev = get(derivedAtom) const value = get(anAtom) - if (value instanceof Promise || prev instanceof Promise) { - return Promise.all([value, prev] as const).then(selectValue) - } - return selectValue([value as Awaited, prev] as const) + return selectValue([value, prev] as const) }) // HACK to read derived atom before initialization derivedAtom.init = EMPTY diff --git a/tests/react/vanilla-utils/selectAtom.test.tsx b/tests/react/vanilla-utils/selectAtom.test.tsx index 9dcf10c498..cbd26cde15 100644 --- a/tests/react/vanilla-utils/selectAtom.test.tsx +++ b/tests/react/vanilla-utils/selectAtom.test.tsx @@ -1,7 +1,7 @@ -import { StrictMode, Suspense, useEffect, useRef } from 'react' +import { StrictMode, useEffect, useRef } from 'react' import { fireEvent, render } from '@testing-library/react' import { it } from 'vitest' -import { useAtom, useAtomValue, useSetAtom } from 'jotai/react' +import { useAtomValue, useSetAtom } from 'jotai/react' import { atom } from 'jotai/vanilla' import { selectAtom } from 'jotai/vanilla/utils' @@ -58,54 +58,6 @@ it('selectAtom works as expected', async () => { await findByText('a: 3') }) -it('selectAtom works with async atom', async () => { - const bigAtom = atom({ a: 0, b: 'othervalue' }) - const bigAtomAsync = atom((get) => Promise.resolve(get(bigAtom))) - const littleAtom = selectAtom(bigAtomAsync, (v) => v.a) - - const Parent = () => { - const setValue = useSetAtom(bigAtom) - return ( - <> - - - ) - } - - const Selector = () => { - const a = useAtomValue(littleAtom) - return ( - <> -
a: {a}
- - ) - } - - const { findByText, getByText } = render( - - - - - - , - ) - - await findByText('a: 0') - - fireEvent.click(getByText('increment')) - await findByText('a: 1') - fireEvent.click(getByText('increment')) - await findByText('a: 2') - fireEvent.click(getByText('increment')) - await findByText('a: 3') -}) - it('do not update unless equality function says value has changed', async () => { const bigAtom = atom({ a: 0 }) const littleAtom = selectAtom( @@ -177,57 +129,3 @@ it('do not update unless equality function says value has changed', async () => await findByText('value: {"a":3}') await findByText('commits: 4') }) - -it('equality function works even if suspend', async () => { - const bigAtom = atom({ a: 0 }) - const bigAtomAsync = atom((get) => Promise.resolve(get(bigAtom))) - const littleAtom = selectAtom( - bigAtomAsync, - (value) => value, - (left, right) => left.a === right.a, - ) - - const Controls = () => { - const [value, setValue] = useAtom(bigAtom) - return ( - <> -
bigValue: {JSON.stringify(value)}
- - - - ) - } - - const Selector = () => { - const value = useAtomValue(littleAtom) - return
littleValue: {JSON.stringify(value)}
- } - - const { findByText, getByText } = render( - - - - - - , - ) - - await findByText('bigValue: {"a":0}') - await findByText('littleValue: {"a":0}') - - fireEvent.click(getByText('increment')) - await findByText('bigValue: {"a":1}') - await findByText('littleValue: {"a":1}') - - fireEvent.click(getByText('other')) - await findByText('bigValue: {"a":1,"b":2}') - await findByText('littleValue: {"a":1}') -}) diff --git a/tests/vanilla/utils/types.test.tsx b/tests/vanilla/utils/types.test.tsx index 76db62a09a..8a2a07dd8b 100644 --- a/tests/vanilla/utils/types.test.tsx +++ b/tests/vanilla/utils/types.test.tsx @@ -10,16 +10,6 @@ it('selectAtom() should return the correct types', () => { const syncAtom = atom(0) const syncSelectedAtom = selectAtom(syncAtom, doubleCount) expectType, typeof syncSelectedAtom>>(true) - - const asyncAtom = atom(Promise.resolve(0)) - const asyncSelectedAtom = selectAtom(asyncAtom, doubleCount) - expectType>, typeof asyncSelectedAtom>>(true) - - const maybeAsyncAtom = atom(Promise.resolve(0) as number | Promise) - const maybeAsyncSelectedAtom = selectAtom(maybeAsyncAtom, doubleCount) - expectType< - TypeEqual>, typeof maybeAsyncSelectedAtom> - >(true) }) it('unwrap() should return the correct types', () => { From bf075ef8439daae9cc0dc3b5f504902cbcdc5f3e Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Thu, 4 Apr 2024 11:13:36 +0900 Subject: [PATCH 18/33] New store implementation as `store2.ts` (#2463) * wip * wip * wip * wip * wip * wip * wip * wip * wip * cherry-pick #2462 * wip * wip * wip * wip * wip * wip * wip * wip * wip * wip * follow #2471 * expose store2 so that we can experiment it * follow #2472 * separate experimental export * Update src/vanilla/store2.ts Co-authored-by: Iwo Plaza * refactor --------- Co-authored-by: Iwo Plaza --- package.json | 3 +- rollup.config.js | 4 + src/experimental.ts | 11 + src/types.d.ts | 1 + src/vanilla.ts | 14 +- src/vanilla/store2.ts | 724 +++++++++++++++++++++++++++++++++++ tests/vanilla/store.test.tsx | 6 +- 7 files changed, 760 insertions(+), 3 deletions(-) create mode 100644 src/experimental.ts create mode 100644 src/vanilla/store2.ts diff --git a/package.json b/package.json index cb793935d3..9005b55916 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "build:vanilla:utils": "rollup -c --config-vanilla_utils", "build:react": "rollup -c --config-react --client-only", "build:react:utils": "rollup -c --config-react_utils --client-only", + "build:experimental": "rollup -c --config-experimental", "postbuild": "yarn patch-d-ts && yarn copy && yarn patch-ts3.8 && yarn patch-old-ts && yarn patch-esm-ts && yarn patch-readme", "prettier": "prettier '*.{js,json,md}' '{src,tests,benchmarks,docs}/**/*.{ts,tsx,md,mdx}' --write", "prettier:ci": "prettier '*.{js,json,md}' '{src,tests,benchmarks,docs}/**/*.{ts,tsx,md,mdx}' --list-different", @@ -78,7 +79,7 @@ "eslint:ci": "eslint --no-eslintrc --c .eslintrc.json '*.{js,json,ts}' '{src,tests,benchmarks}/**/*.{ts,tsx}'", "pretest": "tsc", "test": "vitest --ui --coverage", - "test:ci": "vitest", + "test:ci": "vitest && USE_STORE2=true vitest", "patch-d-ts": "node -e \"var {entries}=require('./rollup.config.js');require('shelljs').find('dist/**/*.d.ts').forEach(f=>{entries.forEach(({find,replacement})=>require('shelljs').sed('-i',new RegExp(' from \\''+find.source.slice(0,-1)+'\\';$'),' from \\''+replacement+'\\';',f));require('shelljs').sed('-i',/ from '(\\.[^']+)\\.ts';$/,' from \\'\\$1\\';',f)})\"", "copy": "shx cp -r dist/src/* dist/esm && shx cp -r dist/src/* dist && shx rm -rf dist/src && shx rm -rf dist/{src,tests} && downlevel-dts dist dist/ts3.8 --to=3.8 && shx cp package.json readme.md LICENSE dist && json -I -f dist/package.json -e \"this.private=false; this.devDependencies=undefined; this.optionalDependencies=undefined; this.scripts=undefined; this.prettier=undefined;\"", "patch-ts3.8": "node -e \"require('shelljs').find('dist/ts3.8/**/*.d.ts').forEach(f=>require('fs').appendFileSync(f,'declare type Awaited = T extends Promise ? V : T;'))\"", diff --git a/rollup.config.js b/rollup.config.js index afd185f7a6..f7e9368155 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -76,6 +76,7 @@ function createESMConfig(input, output, clientOnly) { 'import.meta.env?.MODE': '(import.meta.env ? import.meta.env.MODE : undefined)', }), + 'import.meta.env?.USE_STORE2': 'false', delimiters: ['\\b', '\\b(?!(\\.|/))'], preventAssignment: true, }), @@ -95,6 +96,7 @@ function createCommonJSConfig(input, output, clientOnly) { resolve({ extensions }), replace({ 'import.meta.env?.MODE': 'process.env.NODE_ENV', + 'import.meta.env?.USE_STORE2': 'false', delimiters: ['\\b', '\\b(?!(\\.|/))'], preventAssignment: true, }), @@ -132,6 +134,7 @@ function createUMDConfig(input, output, env, clientOnly) { resolve({ extensions }), replace({ 'import.meta.env?.MODE': JSON.stringify(env), + 'import.meta.env?.USE_STORE2': 'false', delimiters: ['\\b', '\\b(?!(\\.|/))'], preventAssignment: true, }), @@ -155,6 +158,7 @@ function createSystemConfig(input, output, env, clientOnly) { resolve({ extensions }), replace({ 'import.meta.env?.MODE': JSON.stringify(env), + 'import.meta.env?.USE_STORE2': 'false', delimiters: ['\\b', '\\b(?!(\\.|/))'], preventAssignment: true, }), diff --git a/src/experimental.ts b/src/experimental.ts new file mode 100644 index 0000000000..3b17070f81 --- /dev/null +++ b/src/experimental.ts @@ -0,0 +1,11 @@ +export { atom } from './vanilla/atom.ts' +export type { Atom, WritableAtom, PrimitiveAtom } from './vanilla/atom.ts' +export { createStore, getDefaultStore } from './vanilla/store2.ts' +export type { + Getter, + Setter, + ExtractAtomValue, + ExtractAtomArgs, + ExtractAtomResult, + SetStateAction, +} from './vanilla/typeUtils.ts' diff --git a/src/types.d.ts b/src/types.d.ts index f10fd4e38b..e099c12ad6 100644 --- a/src/types.d.ts +++ b/src/types.d.ts @@ -1,5 +1,6 @@ declare interface ImportMeta { env?: { MODE: string + USE_STORE2?: string } } diff --git a/src/vanilla.ts b/src/vanilla.ts index 3918c93f6e..5169a4c30d 100644 --- a/src/vanilla.ts +++ b/src/vanilla.ts @@ -1,6 +1,18 @@ export { atom } from './vanilla/atom.ts' export type { Atom, WritableAtom, PrimitiveAtom } from './vanilla/atom.ts' -export { createStore, getDefaultStore } from './vanilla/store.ts' + +// export { createStore, getDefaultStore } from './vanilla/store.ts' +import * as store from './vanilla/store.ts' +import * as store2 from './vanilla/store2.ts' +type CreateStore = typeof store.createStore +type GetDefaultStore = typeof store.getDefaultStore +export const createStore: CreateStore = import.meta.env?.USE_STORE2 + ? store2.createStore + : store.createStore +export const getDefaultStore: GetDefaultStore = import.meta.env?.USE_STORE2 + ? store2.getDefaultStore + : store.getDefaultStore + export type { Getter, Setter, diff --git a/src/vanilla/store2.ts b/src/vanilla/store2.ts new file mode 100644 index 0000000000..d3084248e1 --- /dev/null +++ b/src/vanilla/store2.ts @@ -0,0 +1,724 @@ +import type { Atom, WritableAtom } from './atom.ts' + +type AnyValue = unknown +type AnyError = unknown +type AnyAtom = Atom +type AnyWritableAtom = WritableAtom +type OnUnmount = () => void +type Getter = Parameters[0] +type Setter = Parameters[1] + +const isSelfAtom = (atom: AnyAtom, a: AnyAtom): boolean => + atom.unstable_is ? atom.unstable_is(a) : a === atom + +const hasInitialValue = >( + atom: T, +): atom is T & (T extends Atom ? { init: Value } : never) => + 'init' in atom + +const isActuallyWritableAtom = (atom: AnyAtom): atom is AnyWritableAtom => + !!(atom as AnyWritableAtom).write + +// +// Pending Set +// + +type PendingPair = [ + // TODO We should probably separate queues to notify and (un)mount + pendingForSync: Set void)> | undefined, + pendingForAsync: Set void)>, +] + +const createPendingPair = (): PendingPair => [new Set(), new Set()] + +const addPending = ( + pendingPair: PendingPair, + pending: readonly [AnyAtom, AtomState] | (() => void), +) => { + ;(pendingPair[0] || pendingPair[1]).add(pending) +} + +const flushPending = (pendingPair: PendingPair, isAsync?: true) => { + let pendingSet: Set void)> + if (isAsync) { + if (pendingPair[0]) { + // sync flush hasn't been called yet + return + } + pendingSet = pendingPair[1] + } else { + if (!pendingPair[0]) { + throw new Error('[Bug] cannot sync flush twice') + } + pendingSet = pendingPair[0] + } + const flushed = new Set() + while (pendingSet.size) { + const copy = new Set(pendingSet) + pendingSet.clear() + copy.forEach((pending) => { + if (typeof pending === 'function') { + pending() + } else { + const [atom, atomState] = pending + if (!flushed.has(atom) && atomState.m) { + atomState.m.l.forEach((listener) => listener()) + flushed.add(atom) + } + } + }) + } + pendingPair[0] = undefined + return flushed +} + +// +// Continuable Promise +// + +const CONTINUE_PROMISE = Symbol( + import.meta.env?.MODE !== 'production' ? 'CONTINUE_PROMISE' : '', +) + +const PENDING = 'pending' +const FULFILLED = 'fulfilled' +const REJECTED = 'rejected' + +type ContinuePromise = ( + nextPromise: PromiseLike | undefined, + nextAbort: () => void, +) => void + +type ContinuablePromise = Promise & + ( + | { status: typeof PENDING } + | { status: typeof FULFILLED; value?: T } + | { status: typeof REJECTED; reason?: AnyError } + ) & { + [CONTINUE_PROMISE]: ContinuePromise + } + +const isContinuablePromise = ( + promise: unknown, +): promise is ContinuablePromise => + typeof promise === 'object' && promise !== null && CONTINUE_PROMISE in promise + +const continuablePromiseMap: WeakMap< + PromiseLike, + ContinuablePromise +> = new WeakMap() + +/** + * Create a continuable promise from a regular promise. + */ +const createContinuablePromise = ( + promise: PromiseLike, + abort: () => void, + complete: () => void, +): ContinuablePromise => { + if (!continuablePromiseMap.has(promise)) { + let continuePromise: ContinuePromise + const p: any = new Promise((resolve, reject) => { + let curr = promise + const onFullfilled = (me: PromiseLike) => (v: T) => { + if (curr === me) { + p.status = FULFILLED + p.value = v + resolve(v) + complete() + } + } + const onRejected = (me: PromiseLike) => (e: AnyError) => { + if (curr === me) { + p.status = REJECTED + p.reason = e + reject(e) + complete() + } + } + promise.then(onFullfilled(promise), onRejected(promise)) + continuePromise = (nextPromise, nextAbort) => { + if (nextPromise) { + continuablePromiseMap.set(nextPromise, p) + curr = nextPromise + nextPromise.then(onFullfilled(nextPromise), onRejected(nextPromise)) + } + abort() + abort = nextAbort + } + }) + p.status = PENDING + p[CONTINUE_PROMISE] = continuePromise! + continuablePromiseMap.set(promise, p) + } + return continuablePromiseMap.get(promise) as ContinuablePromise +} + +const isPromiseLike = (x: unknown): x is PromiseLike => + typeof (x as any)?.then === 'function' + +const getPendingContinuablePromise = (atomState: AtomState) => { + const value: unknown = (atomState as any).s?.v + if (isContinuablePromise(value) && value.status === PENDING) { + return value + } + return null +} + +/** + * State tracked for mounted atoms. An atom is considered "mounted" if it has a + * subscriber, or is a transitive dependency of another atom that has a + * subscriber. + * + * The mounted state of an atom is freed once it is no longer mounted. + */ +type Mounted = { + /** Set of listeners to notify when the atom value changes. */ + readonly l: Set<() => void> + /** Set of mounted atoms that the atom depends on. */ + readonly d: Set + /** Function to run when the atom is unmounted. */ + u?: OnUnmount +} + +/** + * Mutable atom state, + * tracked for both mounted and unmounted atoms in a store. + */ +type AtomState = { + /** + * Map of atoms that the atom depends on. + * The map value is value/error of the dependency. + */ + readonly d: Map + /** Set of atoms that depends on the atom. */ + readonly t: Set + /** Object to store mounted state of the atom. */ + m?: Mounted // only available if the atom is mounted + /** Atom value, atom error or empty. */ + s?: { readonly v: Value } | { readonly e: AnyError } +} + +type WithS = T & { s: NonNullable } + +const returnAtomValue = (atomState: WithS>): Value => { + if ('e' in atomState.s) { + throw atomState.s.e + } + return atomState.s.v +} + +const setAtomStateValueOrPromise = ( + atomState: AtomState, + valueOrPromise: unknown, + abortPromise = () => {}, + completePromise = () => {}, +) => { + const pendingPromise = getPendingContinuablePromise(atomState) + if (isPromiseLike(valueOrPromise)) { + if (pendingPromise) { + if (pendingPromise !== valueOrPromise) { + pendingPromise[CONTINUE_PROMISE](valueOrPromise, abortPromise) + } + } else { + const continuablePromise = createContinuablePromise( + valueOrPromise, + abortPromise, + completePromise, + ) + atomState.s = { v: continuablePromise } + } + } else { + if (pendingPromise) { + pendingPromise[CONTINUE_PROMISE]( + Promise.resolve(valueOrPromise), + abortPromise, + ) + } + atomState.s = { v: valueOrPromise } + } +} + +// for debugging purpose only +type StoreListenerRev2 = ( + action: + | { type: 'write'; flushed: Set } + | { type: 'async-write'; flushed: Set } + | { type: 'sub'; flushed: Set } + | { type: 'unsub' } + | { type: 'restore'; flushed: Set }, +) => void + +type OldAtomState = { d: Map } & ( + | { e: AnyError } + | { v: AnyValue } +) +type OldMounted = { l: Set<() => void>; t: Set; u?: OnUnmount } + +export type Store = { + get: (atom: Atom) => Value + set: ( + atom: WritableAtom, + ...args: Args + ) => Result + sub: (atom: AnyAtom, listener: () => void) => () => void + dev_subscribe_store?: (l: StoreListenerRev2, rev: 2) => () => void + dev_get_mounted_atoms?: () => IterableIterator + dev_get_atom_state?: (a: AnyAtom) => OldAtomState | undefined + dev_get_mounted?: (a: AnyAtom) => OldMounted | undefined + dev_restore_atoms?: (values: Iterable) => void +} + +export const createStore = (): Store => { + const atomStateMap = new WeakMap() + + const getAtomState = (atom: Atom) => { + let atomState = atomStateMap.get(atom) as AtomState | undefined + if (!atomState) { + atomState = { d: new Map(), t: new Set() } + atomStateMap.set(atom, atomState) + } + return atomState + } + + let storeListenersRev2: Set + let mountedAtoms: Set + if (import.meta.env?.MODE !== 'production') { + storeListenersRev2 = new Set() + mountedAtoms = new Set() + } + + const clearDependencies = (atom: Atom) => { + const atomState = getAtomState(atom) + for (const a of atomState.d.keys()) { + getAtomState(a).t.delete(atom) + } + atomState.d.clear() + } + + const addDependency = ( + atom: Atom, + a: AnyAtom, + aState: WithS, + isSync: boolean, + ) => { + if (import.meta.env?.MODE !== 'production' && a === atom) { + throw new Error('[Bug] atom cannot depend on itself') + } + const atomState = getAtomState(atom) + atomState.d.set(a, aState.s) + aState.t.add(atom) + if (!isSync && atomState.m) { + const pendingPair = createPendingPair() + mountDependencies(pendingPair, atomState) + flushPending(pendingPair) + } + } + + const readAtomState = ( + atom: Atom, + force?: true, + ): WithS> => { + // See if we can skip recomputing this atom. + const atomState = getAtomState(atom) + if (!force && 's' in atomState) { + // If the atom is mounted, we can use the cache. + // because it should have been updated by dependencies. + if (atomState.m) { + return atomState as WithS + } + // Otherwise, check if the dependencies have changed. + // If all dependencies haven't changed, we can use the cache. + if ( + Array.from(atomState.d).every(([a, s]) => { + // Recursively, read the atom state of the dependency, and + const aState = readAtomState(a) + // Check if the atom value is unchanged + return 'v' in s && 'v' in aState.s && Object.is(s.v, aState.s.v) + }) + ) { + return atomState as WithS + } + } + // Compute a new state for this atom. + clearDependencies(atom) + let isSync = true + const getter: Getter = (a: Atom) => { + if (isSelfAtom(atom, a)) { + const aState = getAtomState(a) + if (!aState.s) { + if (hasInitialValue(a)) { + setAtomStateValueOrPromise(aState, a.init) + } else { + // NOTE invalid derived atoms can reach here + throw new Error('no atom init') + } + } + return returnAtomValue(aState as WithS) + } + // a !== atom + const aState = readAtomState(a) + addDependency(atom, a, aState, isSync) + return returnAtomValue(aState) + } + let controller: AbortController | undefined + let setSelf: ((...args: unknown[]) => unknown) | undefined + const options = { + get signal() { + if (!controller) { + controller = new AbortController() + } + return controller.signal + }, + get setSelf() { + if ( + import.meta.env?.MODE !== 'production' && + !isActuallyWritableAtom(atom) + ) { + console.warn('setSelf function cannot be used with read-only atom') + } + if (!setSelf && isActuallyWritableAtom(atom)) { + setSelf = (...args) => { + if (import.meta.env?.MODE !== 'production' && isSync) { + console.warn('setSelf function cannot be called in sync') + } + if (!isSync) { + return writeAtom(atom, ...args) + } + } + } + return setSelf + }, + } + try { + const valueOrPromise = atom.read(getter, options as never) + setAtomStateValueOrPromise( + atomState, + valueOrPromise, + () => controller?.abort(), + () => { + if (atomState.m) { + const pendingPair = createPendingPair() + mountDependencies(pendingPair, atomState) + flushPending(pendingPair) + } + }, + ) + return atomState as WithS + } catch (error) { + atomState.s = { e: error } + return atomState as WithS + } finally { + isSync = false + } + } + + const readAtom = (atom: Atom): Value => + returnAtomValue(readAtomState(atom)) + + const recomputeDependents = (pendingPair: PendingPair, atom: AnyAtom) => { + // This is a topological sort via depth-first search, slightly modified from + // what's described here for simplicity and performance reasons: + // https://en.wikipedia.org/wiki/Topological_sorting#Depth-first_search + + // Step 1: traverse the dependency graph to build the topsorted atom list + // We don't bother to check for cycles, which simplifies the algorithm. + const topsortedAtoms: AnyAtom[] = [] + const markedAtoms = new Set() + const visit = (n: AnyAtom) => { + if (markedAtoms.has(n)) { + return + } + markedAtoms.add(n) + for (const m of getAtomState(n).t) { + // we shouldn't use isSelfAtom here. + if (n !== m) { + visit(m) + } + } + // The algorithm calls for pushing onto the front of the list. For + // performance, we will simply push onto the end, and then will iterate in + // reverse order later. + topsortedAtoms.push(n) + } + // Visit the root atom. This is the only atom in the dependency graph + // without incoming edges, which is one reason we can simplify the algorithm + visit(atom) + // Step 2: use the topsorted atom list to recompute all affected atoms + // Track what's changed, so that we can short circuit when possible + const changedAtoms = new Set([atom]) + for (let i = topsortedAtoms.length - 1; i >= 0; --i) { + const a = topsortedAtoms[i]! + const aState = getAtomState(a) + const prev = aState.s + let hasChangedDeps = false + for (const dep of aState.d.keys()) { + if (dep !== a && changedAtoms.has(dep)) { + hasChangedDeps = true + break + } + } + if (hasChangedDeps) { + // only recompute if it is mounted or it has a pending promise + if (aState.m || getPendingContinuablePromise(aState)) { + readAtomState(a, true) + mountDependencies(pendingPair, aState) + if ( + !prev || + !('v' in prev) || + !('v' in aState.s!) || + !Object.is(prev.v, aState.s.v) + ) { + addPending(pendingPair, [a, aState]) + changedAtoms.add(a) + } + } + } + } + } + + const writeAtomState = ( + pendingPair: PendingPair, + atom: WritableAtom, + ...args: Args + ): Result => { + const getter: Getter = (a: Atom) => returnAtomValue(readAtomState(a)) + const setter: Setter = ( + a: WritableAtom, + ...args: As + ) => { + let r: R | undefined + if (isSelfAtom(atom, a)) { + if (!hasInitialValue(a)) { + // NOTE technically possible but restricted as it may cause bugs + throw new Error('atom not writable') + } + const aState = getAtomState(a) + const prev = aState.s + const v = args[0] as V + setAtomStateValueOrPromise(aState, v) + mountDependencies(pendingPair, aState) + const curr = (aState as WithS).s + if ( + !prev || + !('v' in prev) || + !('v' in curr) || + !Object.is(prev.v, curr.v) + ) { + addPending(pendingPair, [a, aState]) + recomputeDependents(pendingPair, a) + } + } else { + r = writeAtomState(pendingPair, a as AnyWritableAtom, ...args) as R + } + const flushed = flushPending(pendingPair, true) + if (import.meta.env?.MODE !== 'production' && flushed) { + storeListenersRev2.forEach((l) => l({ type: 'async-write', flushed })) + } + return r as R + } + const result = atom.write(getter, setter, ...args) + return result + } + + const writeAtom = ( + atom: WritableAtom, + ...args: Args + ): Result => { + const pendingPair = createPendingPair() + const result = writeAtomState(pendingPair, atom, ...args) + const flushed = flushPending(pendingPair) + if (import.meta.env?.MODE !== 'production') { + storeListenersRev2.forEach((l) => l({ type: 'write', flushed: flushed! })) + } + return result + } + + const mountDependencies = ( + pendingPair: PendingPair, + atomState: AtomState, + ) => { + if (atomState.m && !getPendingContinuablePromise(atomState)) { + for (const a of atomState.d.keys()) { + if (!atomState.m.d.has(a)) { + mountAtom(pendingPair, a) + atomState.m.d.add(a) + } + } + for (const a of atomState.m.d || []) { + if (!atomState.d.has(a)) { + unmountAtom(pendingPair, a) + atomState.m.d.delete(a) + } + } + } + } + + const mountAtom = (pendingPair: PendingPair, atom: AnyAtom): Mounted => { + const atomState = getAtomState(atom) + if (!atomState.m) { + // recompute atom state + readAtomState(atom) + // mount dependents first + for (const a of atomState.d.keys()) { + mountAtom(pendingPair, a) + } + // mount self + atomState.m = { l: new Set(), d: new Set(atomState.d.keys()) } + if (import.meta.env?.MODE !== 'production') { + mountedAtoms.add(atom) + } + if (isActuallyWritableAtom(atom) && atom.onMount) { + const mounted = atomState.m + const { onMount } = atom + addPending(pendingPair, () => { + const onUnmount = onMount((...args) => + writeAtomState(pendingPair, atom, ...args), + ) + if (onUnmount) { + mounted.u = onUnmount + } + }) + } + } + return atomState.m + } + + const unmountAtom = (pendingPair: PendingPair, atom: AnyAtom) => { + const atomState = getAtomState(atom) + if ( + atomState.m && + !atomState.m.l.size && + !Array.from(atomState.t).some((a) => getAtomState(a).m) + ) { + // unmount self + const onUnmount = atomState.m.u + if (onUnmount) { + addPending(pendingPair, onUnmount) + } + delete atomState.m + if (import.meta.env?.MODE !== 'production') { + mountedAtoms.delete(atom) + } + // unmount dependencies + for (const a of atomState.d.keys()) { + unmountAtom(pendingPair, a) + } + // abort pending promise + const pendingPromise = getPendingContinuablePromise(atomState) + if (pendingPromise) { + // FIXME using `undefined` is kind of a hack. + pendingPromise[CONTINUE_PROMISE](undefined, () => {}) + } + } + } + + const subscribeAtom = (atom: AnyAtom, listener: () => void) => { + let prevMounted: Mounted | undefined + if (import.meta.env?.MODE !== 'production') { + prevMounted = atomStateMap.get(atom)?.m + } + const pendingPair = createPendingPair() + const mounted = mountAtom(pendingPair, atom) + const flushed = flushPending(pendingPair) + const listeners = mounted.l + listeners.add(listener) + if (import.meta.env?.MODE !== 'production') { + if (!prevMounted) { + flushed!.add(atom) // HACK to include self + } + storeListenersRev2.forEach((l) => l({ type: 'sub', flushed: flushed! })) + } + return () => { + listeners.delete(listener) + const pendingPair = createPendingPair() + unmountAtom(pendingPair, atom) + flushPending(pendingPair) + if (import.meta.env?.MODE !== 'production') { + // devtools uses this to detect if it _can_ unmount or not + storeListenersRev2.forEach((l) => l({ type: 'unsub' })) + } + } + } + + if (import.meta.env?.MODE !== 'production') { + return { + get: readAtom, + set: writeAtom, + sub: subscribeAtom, + // store dev methods (these are tentative and subject to change without notice) + dev_subscribe_store: (l: StoreListenerRev2, rev: 2) => { + if (rev !== 2) { + throw new Error('The current StoreListener revision is 2.') + } + storeListenersRev2.add(l as StoreListenerRev2) + return () => { + storeListenersRev2.delete(l as StoreListenerRev2) + } + }, + dev_get_mounted_atoms: () => mountedAtoms.values(), + dev_get_atom_state: (a: AnyAtom) => { + const getOldAtomState = (a: AnyAtom): OldAtomState | undefined => { + const aState = atomStateMap.get(a) + return ( + aState && + aState.s && { + d: new Map( + Array.from(aState.d.keys()).flatMap((a) => { + const s = getOldAtomState(a) + return s ? [[a, s]] : [] + }), + ), + ...aState.s, + } + ) + } + return getOldAtomState(a) + }, + dev_get_mounted: (a: AnyAtom) => { + const aState = atomStateMap.get(a) + return ( + aState && + aState.m && { + l: aState.m.l, + t: new Set([...aState.t, a]), // HACK to include self + ...(aState.m.u ? { u: aState.m.u } : {}), + } + ) + }, + dev_restore_atoms: (values: Iterable) => { + const pendingPair = createPendingPair() + for (const [atom, value] of values) { + setAtomStateValueOrPromise(getAtomState(atom), value) + recomputeDependents(pendingPair, atom) + } + const flushed = flushPending(pendingPair) + storeListenersRev2.forEach((l) => + l({ type: 'restore', flushed: flushed! }), + ) + }, + } + } + return { + get: readAtom, + set: writeAtom, + sub: subscribeAtom, + } +} + +let defaultStore: Store | undefined + +export const getDefaultStore = (): Store => { + if (!defaultStore) { + defaultStore = createStore() + if (import.meta.env?.MODE !== 'production') { + ;(globalThis as any).__JOTAI_DEFAULT_STORE__ ||= defaultStore + if ((globalThis as any).__JOTAI_DEFAULT_STORE__ !== defaultStore) { + console.warn( + 'Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044', + ) + } + } + } + return defaultStore +} diff --git a/tests/vanilla/store.test.tsx b/tests/vanilla/store.test.tsx index 8c6d6f7873..a38ee11cd0 100644 --- a/tests/vanilla/store.test.tsx +++ b/tests/vanilla/store.test.tsx @@ -45,7 +45,11 @@ describe('[DEV-ONLY] dev-only methods', () => { store.set(countAtom, 1) const result = store.dev_get_mounted_atoms?.() || [] - expect(Array.from(result)).toStrictEqual([ + expect( + Array.from(result).sort( + (a, b) => Object.keys(a).length - Object.keys(b).length, + ), + ).toStrictEqual([ { toString: expect.any(Function), read: expect.any(Function) }, { toString: expect.any(Function), From c81246e04057f1735b3a5708bc56a00b670302f5 Mon Sep 17 00:00:00 2001 From: Iwo Plaza Date: Thu, 4 Apr 2024 04:41:45 +0200 Subject: [PATCH 19/33] feat(utils): atomWithLazy for lazily initialized primitive atoms. (#2465) * feat(utils): atomWithLazy for lazily initialized primitive atoms. * tweak test for older ts versions * add `unstable_is` hack for use in `jotai-store` * add documentation for atomWithLazy * update lazy docs * remove semicolons in lazy docs * add more elegant implementation for atomWithLazy * clear type declarations --------- Co-authored-by: Daishi Kato --- docs/utilities/lazy.mdx | 96 ++++++++++++++++++++++++ src/vanilla/utils.ts | 1 + src/vanilla/utils/atomWithLazy.ts | 12 +++ tests/vanilla/utils/atomWithLazy.test.ts | 41 ++++++++++ 4 files changed, 150 insertions(+) create mode 100644 docs/utilities/lazy.mdx create mode 100644 src/vanilla/utils/atomWithLazy.ts create mode 100644 tests/vanilla/utils/atomWithLazy.test.ts diff --git a/docs/utilities/lazy.mdx b/docs/utilities/lazy.mdx new file mode 100644 index 0000000000..8ff33440d9 --- /dev/null +++ b/docs/utilities/lazy.mdx @@ -0,0 +1,96 @@ +--- +title: Lazy +nav: 3.03 +keywords: lazy,initialize,init,loading +--- + +When defining primitive atoms, their initial value has to be bound at definition time. +If creating that initial value is computationally expensive, or the value is not accessible during definition, +it would be best to postpone the atom's initialization until its [first use in the store](#using-multiple-stores). + +```jsx +const imageDataAtom = atom(initializeExpensiveImage()) // 1) has to be computed here + +function Home() { + ... +} + +function ImageEditor() { + // 2) used only in this route + const [imageData, setImageData] = useAtom(imageDataAtom); + ... +} + +function App() { + return ( + + + + + ) +} +``` + +## atomWithLazy + +Ref: https://github.com/pmndrs/jotai/pull/2465 + +We can use `atomWithLazy` to create a primitive atom whose initial value will be computed at [first use in the store](#using-multiple-stores). +After initialization, it will behave like a regular primitive atom (can be written to). + +### Usage + +```jsx +import { atomWithLazy } from 'jotai/utils' + +// passing the initialization function +const imageDataAtom = atomWithLazy(initializeExpensiveImage) + +function Home() { + ... +} + +function ImageEditor() { + // only gets initialized if user goes to `/edit`. + const [imageData, setImageData] = useAtom(imageDataAtom); + ... +} + +function App() { + return ( + + + + + ) +} +``` + +### Using multiple stores + +Since each store is its separate universe, the initial value will be recreated exactly once per store (unless using something like `jotai-scope`, which fractures a store into smaller universes). + +```ts +type RGB = [number, number, number]; + +function randomRGB(): RGB { + ... +} + +const lift = (value: number) => ([r, g, b]: RGB) => { + return [r + value, g + value, b + value] +} + +const colorAtom = lazyAtom(randomRGB) + +let store = createStore() + +console.log(store.get(colorAtom)) // [0, 36, 128] +store.set(colorAtom, lift(8)) +console.log(store.get(colorAtom)) // [8, 44, 136] + +// recreating store, sometimes done when logging out or resetting the app in some way +store = createStore() + +console.log(store.get(colorAtom)) // [255, 12, 46] -- a new random color +``` diff --git a/src/vanilla/utils.ts b/src/vanilla/utils.ts index 290e01f61b..f24e5535a3 100644 --- a/src/vanilla/utils.ts +++ b/src/vanilla/utils.ts @@ -15,3 +15,4 @@ export { atomWithObservable } from './utils/atomWithObservable.ts' export { loadable } from './utils/loadable.ts' export { unwrap } from './utils/unwrap.ts' export { atomWithRefresh } from './utils/atomWithRefresh.ts' +export { atomWithLazy } from './utils/atomWithLazy.ts' diff --git a/src/vanilla/utils/atomWithLazy.ts b/src/vanilla/utils/atomWithLazy.ts new file mode 100644 index 0000000000..208be7e547 --- /dev/null +++ b/src/vanilla/utils/atomWithLazy.ts @@ -0,0 +1,12 @@ +import { PrimitiveAtom, atom } from '../../vanilla.ts' + +export function atomWithLazy( + makeInitial: () => Value, +): PrimitiveAtom { + return { + ...atom(undefined as unknown as Value), + get init() { + return makeInitial() + }, + } +} diff --git a/tests/vanilla/utils/atomWithLazy.test.ts b/tests/vanilla/utils/atomWithLazy.test.ts new file mode 100644 index 0000000000..43d53b895e --- /dev/null +++ b/tests/vanilla/utils/atomWithLazy.test.ts @@ -0,0 +1,41 @@ +import { expect, it, vi } from 'vitest' +import { createStore } from 'jotai/vanilla' +import { atomWithLazy } from 'jotai/vanilla/utils' + +it('initializes on first store get', async () => { + const storeA = createStore() + const storeB = createStore() + + let externalState = 'first' + const initializer = vi.fn(() => externalState) + const anAtom = atomWithLazy(initializer) + + expect(initializer).not.toHaveBeenCalled() + expect(storeA.get(anAtom)).toEqual('first') + expect(initializer).toHaveBeenCalledOnce() + + externalState = 'second' + + expect(storeA.get(anAtom)).toEqual('first') + expect(initializer).toHaveBeenCalledOnce() + expect(storeB.get(anAtom)).toEqual('second') + expect(initializer).toHaveBeenCalledTimes(2) +}) + +it('is writable', async () => { + const store = createStore() + const anAtom = atomWithLazy(() => 0) + + store.set(anAtom, 123) + + expect(store.get(anAtom)).toEqual(123) +}) + +it('should work with a set state action', async () => { + const store = createStore() + const anAtom = atomWithLazy(() => 4) + + store.set(anAtom, (prev: number) => prev * prev) + + expect(store.get(anAtom)).toEqual(16) +}) From 13b515e4dc0914d68d850af03976201863b8ceec Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Thu, 4 Apr 2024 11:45:09 +0900 Subject: [PATCH 20/33] deprecate useReducerAtom (#2467) * deprecate useReducerAtom * add deprecation warnings * fix the recipe --- docs/recipes/use-reducer-atom.mdx | 56 +++++++++++++++++++++++ docs/utilities/reducer.mdx | 26 +---------- src/react/utils/useReducerAtom.ts | 13 ++++++ tests/react/utils/useReducerAtom.test.tsx | 11 ++++- 4 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 docs/recipes/use-reducer-atom.mdx diff --git a/docs/recipes/use-reducer-atom.mdx b/docs/recipes/use-reducer-atom.mdx new file mode 100644 index 0000000000..1d1d3566df --- /dev/null +++ b/docs/recipes/use-reducer-atom.mdx @@ -0,0 +1,56 @@ +--- +title: useReduerAtom +nav: 8.11 +keywords: reducer, hook, useReducerAtom +--- + +`useReducerAtom` is a custom hook to apply a reducer to a primitive atom. + +It's useful to change the update behavior temporarily. +Also, consider [atomWithReducer](../utilities/reducer.mdx) +for the atom-level solution. + +```ts +import { useCallback } from 'react' +import { useAtom } from 'jotai' +import type { PrimitiveAtom } from 'jotai' + +export function useReducerAtom( + anAtom: PrimitiveAtom, + reducer: (v: Value, a: Action) => Value, +) { + const [state, setState] = useAtom(anAtom) + const dispatch = useCallback( + (action: Action) => setState((prev) => reducer(prev, action)), + [setState, reducer], + ) + return [state, dispatch] as const +} +``` + +### Example Usage + +```jsx +import { atom } from 'jotai' + +const countReducer = (prev, action) => { + if (action.type === 'inc') return prev + 1 + if (action.type === 'dec') return prev - 1 + throw new Error('unknown action type') +} + +const countAtom = atom(0) + +const Counter = () => { + const [count, dispatch] = useReducerAtom(countAtom, countReducer) + return ( +
+ {count} + + +
+ ) +} +``` + + diff --git a/docs/utilities/reducer.mdx b/docs/utilities/reducer.mdx index 4fb521997d..2c010a381e 100644 --- a/docs/utilities/reducer.mdx +++ b/docs/utilities/reducer.mdx @@ -25,28 +25,4 @@ const countReducerAtom = atomWithReducer(0, countReducer) ## useReducerAtom -```jsx -import { atom } from 'jotai' -import { useReducerAtom } from 'jotai/utils' - -const countReducer = (prev, action) => { - if (action.type === 'inc') return prev + 1 - if (action.type === 'dec') return prev - 1 - throw new Error('unknown action type') -} - -const countAtom = atom(0) - -const Counter = () => { - const [count, dispatch] = useReducerAtom(countAtom, countReducer) - return ( -
- {count} - - -
- ) -} -``` - - +See [useReducerAtom](../recipes/use-reducer-atom.mdx) recipe. diff --git a/src/react/utils/useReducerAtom.ts b/src/react/utils/useReducerAtom.ts index afe7cc6dc9..bccfe9ddc2 100644 --- a/src/react/utils/useReducerAtom.ts +++ b/src/react/utils/useReducerAtom.ts @@ -4,12 +4,20 @@ import type { PrimitiveAtom } from '../../vanilla.ts' type Options = Parameters[1] +/** + * @deprecated please use a recipe instead + * https://github.com/pmndrs/jotai/pull/2467 + */ export function useReducerAtom( anAtom: PrimitiveAtom, reducer: (v: Value, a?: Action) => Value, options?: Options, ): [Value, (action?: Action) => void] +/** + * @deprecated please use a recipe instead + * https://github.com/pmndrs/jotai/pull/2467 + */ export function useReducerAtom( anAtom: PrimitiveAtom, reducer: (v: Value, a: Action) => Value, @@ -21,6 +29,11 @@ export function useReducerAtom( reducer: (v: Value, a: Action) => Value, options?: Options, ) { + if (import.meta.env?.MODE !== 'production') { + console.warn( + '[DEPRECATED] useReducerAtom is deprecated and will be removed in the future. Please create your own version using the recipe. https://github.com/pmndrs/jotai/pull/2467', + ) + } const [state, setState] = useAtom(anAtom, options) const dispatch = useCallback( (action: Action) => { diff --git a/tests/react/utils/useReducerAtom.test.tsx b/tests/react/utils/useReducerAtom.test.tsx index 50cbf2cb44..0654fdfeb7 100644 --- a/tests/react/utils/useReducerAtom.test.tsx +++ b/tests/react/utils/useReducerAtom.test.tsx @@ -1,9 +1,18 @@ import { StrictMode } from 'react' import { fireEvent, render } from '@testing-library/react' -import { it } from 'vitest' +import { afterEach, beforeEach, it, vi } from 'vitest' import { useReducerAtom } from 'jotai/react/utils' import { atom } from 'jotai/vanilla' +let savedConsoleWarn: any +beforeEach(() => { + savedConsoleWarn = console.warn + console.warn = vi.fn() +}) +afterEach(() => { + console.warn = savedConsoleWarn +}) + it('useReducerAtom with no action argument', async () => { const countAtom = atom(0) const reducer = (state: number) => state + 2 From d625f322facc84b3dd9b2a7bb97457e988d91a0f Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Thu, 4 Apr 2024 21:47:00 +0900 Subject: [PATCH 21/33] new store dev methods (rev3) (#2474) * refactor types * rev3 methods * implement dev3 methods * exclude self * fix lint * dev3 methods in store2 * test for dev3_* --- src/vanilla/store.ts | 109 ++++++++++--- src/vanilla/store2.ts | 121 +++++++++++---- tests/vanilla/store.test.tsx | 125 +-------------- tests/vanilla/storedev.test.tsx | 265 ++++++++++++++++++++++++++++++++ 4 files changed, 442 insertions(+), 178 deletions(-) create mode 100644 tests/vanilla/storedev.test.tsx diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 453e682c2a..8999b484a1 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -127,7 +127,7 @@ type Mounted = { type MountedAtoms = Set // for debugging purpose only -type StoreListenerRev2 = ( +type DevListenerRev2 = ( action: | { type: 'write'; flushed: Set } | { type: 'async-write'; flushed: Set } @@ -135,20 +135,38 @@ type StoreListenerRev2 = ( | { type: 'unsub' } | { type: 'restore'; flushed: Set }, ) => void +type DevStoreRev2 = { + dev_subscribe_store: (l: DevListenerRev2, rev: 2) => () => void + dev_get_mounted_atoms: () => IterableIterator + dev_get_atom_state: (a: AnyAtom) => AtomState | undefined + dev_get_mounted: (a: AnyAtom) => Mounted | undefined + dev_restore_atoms: (values: Iterable) => void +} +type DevListenerRev3 = ( + action: { type: 'set'; atom: AnyAtom } | { type: 'unsub' }, +) => void +type DevStoreRev3 = { + dev3_subscribe_store: (l: DevListenerRev3) => () => void + dev3_get_mounted_atoms: () => Iterable + dev3_get_atom_state: ( + a: AnyAtom, + ) => { readonly v: AnyValue } | { readonly e: AnyError } | undefined + // deps are atoms that specified atom depends on (not including self) + dev3_get_atom_deps: (a: AnyAtom) => Iterable | undefined + dev3_restore_atoms: (values: Iterable) => void +} -type Store = { +type PrdStore = { get: (atom: Atom) => Value set: ( atom: WritableAtom, ...args: Args ) => Result sub: (atom: AnyAtom, listener: () => void) => () => void - dev_subscribe_store?: (l: StoreListenerRev2, rev: 2) => () => void - dev_get_mounted_atoms?: () => IterableIterator - dev_get_atom_state?: (a: AnyAtom) => AtomState | undefined - dev_get_mounted?: (a: AnyAtom) => Mounted | undefined - dev_restore_atoms?: (values: Iterable) => void } +type Store = + | (PrdStore & Partial) + | (PrdStore & DevStoreRev2 & DevStoreRev3) /** * Create a new store. Each store is an independent, isolated universe of atom @@ -174,10 +192,10 @@ export const createStore = (): Store => { AnyAtom, [prevAtomState: AtomState | undefined, dependents: Dependents] >() - let storeListenersRev2: Set + let devListenersRev3: Set let mountedAtoms: MountedAtoms if (import.meta.env?.MODE !== 'production') { - storeListenersRev2 = new Set() + devListenersRev3 = new Set() mountedAtoms = new Set() } @@ -580,7 +598,7 @@ export const createStore = (): Store => { if (!isSync) { const flushed = flushPending(pendingStack.pop()!) if (import.meta.env?.MODE !== 'production') { - storeListenersRev2.forEach((l) => + devListenersRev3.forEach((l) => l({ type: 'async-write', flushed: flushed! }), ) } @@ -599,7 +617,7 @@ export const createStore = (): Store => { const result = writeAtomState(atom, ...args) const flushed = flushPending(pendingStack.pop()!) if (import.meta.env?.MODE !== 'production') { - storeListenersRev2.forEach((l) => l({ type: 'write', flushed: flushed! })) + devListenersRev3.forEach((l) => l({ type: 'write', flushed: flushed! })) } return result } @@ -784,7 +802,7 @@ export const createStore = (): Store => { const listeners = mounted.l listeners.add(listener) if (import.meta.env?.MODE !== 'production') { - storeListenersRev2.forEach((l) => + devListenersRev3.forEach((l) => l({ type: 'sub', flushed: flushed as Set }), ) } @@ -793,7 +811,7 @@ export const createStore = (): Store => { tryUnmountAtom(atom, mounted) if (import.meta.env?.MODE !== 'production') { // devtools uses this to detect if it _can_ unmount or not - storeListenersRev2.forEach((l) => l({ type: 'unsub' })) + devListenersRev3.forEach((l) => l({ type: 'unsub' })) } } } @@ -804,19 +822,64 @@ export const createStore = (): Store => { set: writeAtom, sub: subscribeAtom, // store dev methods (these are tentative and subject to change without notice) - dev_subscribe_store: (l: StoreListenerRev2, rev: 2) => { - if (rev !== 2) { - throw new Error('The current StoreListener revision is 2.') - } - storeListenersRev2.add(l as StoreListenerRev2) + dev_subscribe_store: (l) => { + devListenersRev3.add(l) return () => { - storeListenersRev2.delete(l as StoreListenerRev2) + devListenersRev3.delete(l) } }, dev_get_mounted_atoms: () => mountedAtoms.values(), - dev_get_atom_state: (a: AnyAtom) => atomStateMap.get(a), - dev_get_mounted: (a: AnyAtom) => mountedMap.get(a), - dev_restore_atoms: (values: Iterable) => { + dev_get_atom_state: (a) => atomStateMap.get(a), + dev_get_mounted: (a) => mountedMap.get(a), + dev_restore_atoms: (values) => { + pendingStack.push(new Set()) + for (const [atom, valueOrPromise] of values) { + if (hasInitialValue(atom)) { + setAtomValueOrPromise(atom, valueOrPromise) + recomputeDependents(atom) + } + } + const flushed = flushPending(pendingStack.pop()!) + devListenersRev3.forEach((l) => + l({ type: 'restore', flushed: flushed! }), + ) + }, + dev3_subscribe_store: (l) => { + const l2: DevListenerRev2 = (action) => { + if (action.type === 'unsub') { + l(action) + } else if (action.type !== 'sub' && 'flushed' in action) { + for (const a of action.flushed) { + l({ type: 'set', atom: a }) + } + } + } + devListenersRev3.add(l2) + return () => { + devListenersRev3.delete(l2) + } + }, + dev3_get_mounted_atoms: () => mountedAtoms.values(), + dev3_get_atom_state: (a) => { + const aState = atomStateMap.get(a) + if (aState && 'v' in aState) { + return { v: aState.v } + } + if (aState && 'e' in aState) { + return { e: aState.e } + } + return undefined + }, + dev3_get_atom_deps: (a) => { + const aState = atomStateMap.get(a) + if (!aState) { + return undefined + } + const deps = new Set(aState.d.keys()) + deps.delete(a) + return deps + }, + dev3_restore_atoms: (values) => { pendingStack.push(new Set()) for (const [atom, valueOrPromise] of values) { if (hasInitialValue(atom)) { @@ -825,7 +888,7 @@ export const createStore = (): Store => { } } const flushed = flushPending(pendingStack.pop()!) - storeListenersRev2.forEach((l) => + devListenersRev3.forEach((l) => l({ type: 'restore', flushed: flushed! }), ) }, diff --git a/src/vanilla/store2.ts b/src/vanilla/store2.ts index d3084248e1..3d3cf67081 100644 --- a/src/vanilla/store2.ts +++ b/src/vanilla/store2.ts @@ -240,7 +240,12 @@ const setAtomStateValueOrPromise = ( } // for debugging purpose only -type StoreListenerRev2 = ( +type OldAtomState = { d: Map } & ( + | { e: AnyError } + | { v: AnyValue } +) +type OldMounted = { l: Set<() => void>; t: Set; u?: OnUnmount } +type DevListenerRev2 = ( action: | { type: 'write'; flushed: Set } | { type: 'async-write'; flushed: Set } @@ -248,26 +253,38 @@ type StoreListenerRev2 = ( | { type: 'unsub' } | { type: 'restore'; flushed: Set }, ) => void +type DevStoreRev2 = { + dev_subscribe_store: (l: DevListenerRev2, rev: 2) => () => void + dev_get_mounted_atoms: () => IterableIterator + dev_get_atom_state: (a: AnyAtom) => OldAtomState | undefined + dev_get_mounted: (a: AnyAtom) => OldMounted | undefined + dev_restore_atoms: (values: Iterable) => void +} +type DevListenerRev3 = ( + action: { type: 'set'; atom: AnyAtom } | { type: 'unsub' }, +) => void +type DevStoreRev3 = { + dev3_subscribe_store: (l: DevListenerRev3) => () => void + dev3_get_mounted_atoms: () => Iterable + dev3_get_atom_state: ( + a: AnyAtom, + ) => { readonly v: AnyValue } | { readonly e: AnyError } | undefined + // deps are atoms that specified atom depends on (not including self) + dev3_get_atom_deps: (a: AnyAtom) => Iterable | undefined + dev3_restore_atoms: (values: Iterable) => void +} -type OldAtomState = { d: Map } & ( - | { e: AnyError } - | { v: AnyValue } -) -type OldMounted = { l: Set<() => void>; t: Set; u?: OnUnmount } - -export type Store = { +type PrdStore = { get: (atom: Atom) => Value set: ( atom: WritableAtom, ...args: Args ) => Result sub: (atom: AnyAtom, listener: () => void) => () => void - dev_subscribe_store?: (l: StoreListenerRev2, rev: 2) => () => void - dev_get_mounted_atoms?: () => IterableIterator - dev_get_atom_state?: (a: AnyAtom) => OldAtomState | undefined - dev_get_mounted?: (a: AnyAtom) => OldMounted | undefined - dev_restore_atoms?: (values: Iterable) => void } +type Store = + | (PrdStore & Partial) + | (PrdStore & DevStoreRev2 & DevStoreRev3) export const createStore = (): Store => { const atomStateMap = new WeakMap() @@ -281,10 +298,12 @@ export const createStore = (): Store => { return atomState } - let storeListenersRev2: Set + let devListenersRev2: Set + let devListenersRev3: Set let mountedAtoms: Set if (import.meta.env?.MODE !== 'production') { - storeListenersRev2 = new Set() + devListenersRev2 = new Set() + devListenersRev3 = new Set() mountedAtoms = new Set() } @@ -311,7 +330,12 @@ export const createStore = (): Store => { if (!isSync && atomState.m) { const pendingPair = createPendingPair() mountDependencies(pendingPair, atomState) - flushPending(pendingPair) + const flushed = flushPending(pendingPair) + if (import.meta.env?.MODE !== 'production' && flushed) { + flushed.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) + } } } @@ -400,7 +424,12 @@ export const createStore = (): Store => { if (atomState.m) { const pendingPair = createPendingPair() mountDependencies(pendingPair, atomState) - flushPending(pendingPair) + const flushed = flushPending(pendingPair) + if (import.meta.env?.MODE !== 'production' && flushed) { + flushed.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) + } } }, ) @@ -513,7 +542,10 @@ export const createStore = (): Store => { } const flushed = flushPending(pendingPair, true) if (import.meta.env?.MODE !== 'production' && flushed) { - storeListenersRev2.forEach((l) => l({ type: 'async-write', flushed })) + flushed.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) + devListenersRev2.forEach((l) => l({ type: 'async-write', flushed })) } return r as R } @@ -528,8 +560,11 @@ export const createStore = (): Store => { const pendingPair = createPendingPair() const result = writeAtomState(pendingPair, atom, ...args) const flushed = flushPending(pendingPair) - if (import.meta.env?.MODE !== 'production') { - storeListenersRev2.forEach((l) => l({ type: 'write', flushed: flushed! })) + if (import.meta.env?.MODE !== 'production' && flushed) { + flushed.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) + devListenersRev2.forEach((l) => l({ type: 'write', flushed })) } return result } @@ -623,11 +658,14 @@ export const createStore = (): Store => { const flushed = flushPending(pendingPair) const listeners = mounted.l listeners.add(listener) - if (import.meta.env?.MODE !== 'production') { + if (import.meta.env?.MODE !== 'production' && flushed) { + flushed.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) if (!prevMounted) { - flushed!.add(atom) // HACK to include self + flushed.add(atom) // HACK to include self } - storeListenersRev2.forEach((l) => l({ type: 'sub', flushed: flushed! })) + devListenersRev2.forEach((l) => l({ type: 'sub', flushed })) } return () => { listeners.delete(listener) @@ -636,7 +674,8 @@ export const createStore = (): Store => { flushPending(pendingPair) if (import.meta.env?.MODE !== 'production') { // devtools uses this to detect if it _can_ unmount or not - storeListenersRev2.forEach((l) => l({ type: 'unsub' })) + devListenersRev2.forEach((l) => l({ type: 'unsub' })) + devListenersRev3.forEach((l) => l({ type: 'unsub' })) } } } @@ -647,13 +686,10 @@ export const createStore = (): Store => { set: writeAtom, sub: subscribeAtom, // store dev methods (these are tentative and subject to change without notice) - dev_subscribe_store: (l: StoreListenerRev2, rev: 2) => { - if (rev !== 2) { - throw new Error('The current StoreListener revision is 2.') - } - storeListenersRev2.add(l as StoreListenerRev2) + dev_subscribe_store: (l) => { + devListenersRev2.add(l) return () => { - storeListenersRev2.delete(l as StoreListenerRev2) + devListenersRev2.delete(l) } }, dev_get_mounted_atoms: () => mountedAtoms.values(), @@ -693,10 +729,33 @@ export const createStore = (): Store => { recomputeDependents(pendingPair, atom) } const flushed = flushPending(pendingPair) - storeListenersRev2.forEach((l) => + devListenersRev2.forEach((l) => l({ type: 'restore', flushed: flushed! }), ) }, + dev3_subscribe_store: (l) => { + devListenersRev3.add(l) + return () => { + devListenersRev3.delete(l) + } + }, + dev3_get_mounted_atoms: () => mountedAtoms.values(), + dev3_get_atom_state: (a) => atomStateMap.get(a)?.s, + dev3_get_atom_deps: (a) => { + const aState = atomStateMap.get(a) + return aState ? new Set(aState.d.keys()) : undefined + }, + dev3_restore_atoms: (values) => { + const pendingPair = createPendingPair() + for (const [atom, value] of values) { + setAtomStateValueOrPromise(getAtomState(atom), value) + recomputeDependents(pendingPair, atom) + } + const flushed = flushPending(pendingPair) + flushed?.forEach((a) => { + devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) + }) + }, } } return { diff --git a/tests/vanilla/store.test.tsx b/tests/vanilla/store.test.tsx index a38ee11cd0..3aaccded6a 100644 --- a/tests/vanilla/store.test.tsx +++ b/tests/vanilla/store.test.tsx @@ -1,5 +1,5 @@ import { waitFor } from '@testing-library/dom' -import { assert, describe, expect, it, vi } from 'vitest' +import { assert, expect, it, vi } from 'vitest' import { atom, createStore } from 'jotai/vanilla' import type { Getter } from 'jotai/vanilla' @@ -35,129 +35,6 @@ it('should not fire subscription if derived atom value is the same', async () => expect(callback).toHaveBeenCalledTimes(calledTimes) }) -describe('[DEV-ONLY] dev-only methods', () => { - it('should return the values of all mounted atoms', () => { - const store = createStore() - const countAtom = atom(0) - countAtom.debugLabel = 'countAtom' - const derivedAtom = atom((get) => get(countAtom) * 0) - const unsub = store.sub(derivedAtom, vi.fn()) - store.set(countAtom, 1) - - const result = store.dev_get_mounted_atoms?.() || [] - expect( - Array.from(result).sort( - (a, b) => Object.keys(a).length - Object.keys(b).length, - ), - ).toStrictEqual([ - { toString: expect.any(Function), read: expect.any(Function) }, - { - toString: expect.any(Function), - init: 0, - read: expect.any(Function), - write: expect.any(Function), - debugLabel: 'countAtom', - }, - ]) - unsub() - }) - - it('should get atom state of a given atom', () => { - const store = createStore() - const countAtom = atom(0) - countAtom.debugLabel = 'countAtom' - const unsub = store.sub(countAtom, vi.fn()) - store.set(countAtom, 1) - const result = store.dev_get_atom_state?.(countAtom) - expect(result).toHaveProperty('v', 1) - unsub() - }) - - it('should get mounted atom from mounted map', () => { - const store = createStore() - const countAtom = atom(0) - countAtom.debugLabel = 'countAtom' - const cb = vi.fn() - const unsub = store.sub(countAtom, cb) - store.set(countAtom, 1) - const result = store.dev_get_mounted?.(countAtom) - expect(result).toStrictEqual({ l: new Set([cb]), t: new Set([countAtom]) }) - unsub() - }) - - it('should restore atoms and its dependencies correctly', () => { - const store = createStore() - const countAtom = atom(0) - countAtom.debugLabel = 'countAtom' - const derivedAtom = atom((get) => get(countAtom) * 2) - store.set(countAtom, 1) - store.dev_restore_atoms?.([[countAtom, 2]]) - expect(store.get(countAtom)).toBe(2) - expect(store.get?.(derivedAtom)).toBe(4) - }) - - describe('dev_subscribe_store rev2', () => { - it('should call the callback when state changes', () => { - const store = createStore() - const callback = vi.fn() - const unsub = store.dev_subscribe_store?.(callback, 2) - const countAtom = atom(0) - const unsubAtom = store.sub(countAtom, vi.fn()) - store.set(countAtom, 1) - expect(callback).toHaveBeenNthCalledWith(1, { - type: 'sub', - flushed: new Set([countAtom]), - }) - expect(callback).toHaveBeenNthCalledWith(2, { - type: 'write', - flushed: new Set([countAtom]), - }) - expect(callback).toHaveBeenCalledTimes(2) - unsub?.() - unsubAtom?.() - }) - - it('should call unsub only when atom is unsubscribed', () => { - const store = createStore() - const callback = vi.fn() - const unsub = store.dev_subscribe_store?.(callback, 2) - const countAtom = atom(0) - const unsubAtom = store.sub(countAtom, vi.fn()) - const unsubAtomSecond = store.sub(countAtom, vi.fn()) - unsubAtom?.() - expect(callback).toHaveBeenNthCalledWith(1, { - type: 'sub', - flushed: new Set([countAtom]), - }) - expect(callback).toHaveBeenNthCalledWith(2, { - type: 'sub', - flushed: new Set(), - }) - expect(callback).toHaveBeenNthCalledWith(3, { type: 'unsub' }) - expect(callback).toHaveBeenCalledTimes(3) - unsub?.() - unsubAtomSecond?.() - }) - }) - - it('should unmount tree dependencies with store.get', async () => { - const store = createStore() - const countAtom = atom(0) - const derivedAtom = atom((get) => get(countAtom) * 2) - const anotherDerivedAtom = atom((get) => get(countAtom) * 3) - const callback = vi.fn() - const unsubStore = store.dev_subscribe_store?.(() => { - // Comment this line to make the test pass - store.get(derivedAtom) - }, 2) - const unsub = store.sub(anotherDerivedAtom, callback) - unsub() - unsubStore?.() - const result = Array.from(store.dev_get_mounted_atoms?.() ?? []) - expect(result).toEqual([]) - }) -}) - it('should unmount with store.get', async () => { const store = createStore() const countAtom = atom(0) diff --git a/tests/vanilla/storedev.test.tsx b/tests/vanilla/storedev.test.tsx new file mode 100644 index 0000000000..a950ea417a --- /dev/null +++ b/tests/vanilla/storedev.test.tsx @@ -0,0 +1,265 @@ +import { describe, expect, it, vi } from 'vitest' +import { atom, createStore } from 'jotai/vanilla' + +describe('[DEV-ONLY] dev-only methods rev2', () => { + it('should return the values of all mounted atoms', () => { + const store = createStore() + const countAtom = atom(0) + countAtom.debugLabel = 'countAtom' + const derivedAtom = atom((get) => get(countAtom) * 0) + const unsub = store.sub(derivedAtom, vi.fn()) + store.set(countAtom, 1) + + const result = store.dev_get_mounted_atoms?.() || [] + expect( + Array.from(result).sort( + (a, b) => Object.keys(a).length - Object.keys(b).length, + ), + ).toStrictEqual([ + { toString: expect.any(Function), read: expect.any(Function) }, + { + toString: expect.any(Function), + init: 0, + read: expect.any(Function), + write: expect.any(Function), + debugLabel: 'countAtom', + }, + ]) + unsub() + }) + + it('should get atom state of a given atom', () => { + const store = createStore() + const countAtom = atom(0) + const unsub = store.sub(countAtom, vi.fn()) + store.set(countAtom, 1) + const result = store.dev_get_atom_state?.(countAtom) + expect(result).toHaveProperty('v', 1) + unsub() + }) + + it('should get mounted atom from mounted map', () => { + const store = createStore() + const countAtom = atom(0) + const cb = vi.fn() + const unsub = store.sub(countAtom, cb) + store.set(countAtom, 1) + const result = store.dev_get_mounted?.(countAtom) + expect(result).toStrictEqual({ l: new Set([cb]), t: new Set([countAtom]) }) + unsub() + }) + + it('should restore atoms and its dependencies correctly', () => { + const store = createStore() + const countAtom = atom(0) + const derivedAtom = atom((get) => get(countAtom) * 2) + store.set(countAtom, 1) + store.dev_restore_atoms?.([[countAtom, 2]]) + expect(store.get(countAtom)).toBe(2) + expect(store.get?.(derivedAtom)).toBe(4) + }) + + describe('dev_subscribe_store rev2', () => { + it('should call the callback when state changes', () => { + const store = createStore() + const callback = vi.fn() + const unsub = store.dev_subscribe_store?.(callback, 2) + const countAtom = atom(0) + const unsubAtom = store.sub(countAtom, vi.fn()) + store.set(countAtom, 1) + expect(callback).toHaveBeenNthCalledWith(1, { + type: 'sub', + flushed: new Set([countAtom]), + }) + expect(callback).toHaveBeenNthCalledWith(2, { + type: 'write', + flushed: new Set([countAtom]), + }) + expect(callback).toHaveBeenCalledTimes(2) + unsub?.() + unsubAtom?.() + }) + + it('should call unsub only when atom is unsubscribed', () => { + const store = createStore() + const callback = vi.fn() + const unsub = store.dev_subscribe_store?.(callback, 2) + const countAtom = atom(0) + const unsubAtom = store.sub(countAtom, vi.fn()) + const unsubAtomSecond = store.sub(countAtom, vi.fn()) + unsubAtom?.() + expect(callback).toHaveBeenNthCalledWith(1, { + type: 'sub', + flushed: new Set([countAtom]), + }) + expect(callback).toHaveBeenNthCalledWith(2, { + type: 'sub', + flushed: new Set(), + }) + expect(callback).toHaveBeenNthCalledWith(3, { type: 'unsub' }) + expect(callback).toHaveBeenCalledTimes(3) + unsub?.() + unsubAtomSecond?.() + }) + }) + + it('should unmount tree dependencies with store.get', async () => { + const store = createStore() + const countAtom = atom(0) + const derivedAtom = atom((get) => get(countAtom) * 2) + const anotherDerivedAtom = atom((get) => get(countAtom) * 3) + const callback = vi.fn() + const unsubStore = store.dev_subscribe_store?.(() => { + // Comment this line to make the test pass + store.get(derivedAtom) + }, 2) + const unsub = store.sub(anotherDerivedAtom, callback) + unsub() + unsubStore?.() + const result = Array.from(store.dev_get_mounted_atoms?.() ?? []) + expect(result).toEqual([]) + }) +}) + +describe('[DEV-ONLY] dev-only methods rev3', () => { + it('should return the values of all mounted atoms', () => { + const store = createStore() + if (!('dev3_get_mounted_atoms' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + countAtom.debugLabel = 'countAtom' + const derivedAtom = atom((get) => get(countAtom) * 0) + const unsub = store.sub(derivedAtom, vi.fn()) + store.set(countAtom, 1) + const result = store.dev3_get_mounted_atoms() || [] + expect( + Array.from(result).sort( + (a, b) => Object.keys(a).length - Object.keys(b).length, + ), + ).toStrictEqual([ + { toString: expect.any(Function), read: expect.any(Function) }, + { + toString: expect.any(Function), + init: 0, + read: expect.any(Function), + write: expect.any(Function), + debugLabel: 'countAtom', + }, + ]) + unsub() + }) + + it('should get atom state of a given atom', () => { + const store = createStore() + if (!('dev3_get_atom_state' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + const unsub = store.sub(countAtom, vi.fn()) + store.set(countAtom, 1) + const result = store.dev3_get_atom_state(countAtom) + expect(result).toHaveProperty('v', 1) + unsub() + }) + + it('should get atom deps', () => { + const store = createStore() + if (!('dev3_get_atom_deps' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + const cb = vi.fn() + const unsub = store.sub(countAtom, cb) + store.set(countAtom, 1) + const result = store.dev3_get_atom_deps(countAtom) + expect(result && Array.from(result)).toStrictEqual([]) + unsub() + }) + + it('should get atom deps 2', () => { + const store = createStore() + if (!('dev3_get_atom_deps' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + const doubleAtom = atom((get) => get(countAtom) * 2) + const cb = vi.fn() + const unsub = store.sub(doubleAtom, cb) + store.set(countAtom, 1) + const result = store.dev3_get_atom_deps(doubleAtom) + expect(result && Array.from(result)).toStrictEqual([countAtom]) + unsub() + }) + + it('should restore atoms and its dependencies correctly', () => { + const store = createStore() + if (!('dev3_restore_atoms' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + const derivedAtom = atom((get) => get(countAtom) * 2) + store.set(countAtom, 1) + store.dev3_restore_atoms([[countAtom, 2]]) + expect(store.get(countAtom)).toBe(2) + expect(store.get(derivedAtom)).toBe(4) + }) + + describe('dev3_subscribe_store', () => { + it('should call the callback when state changes', () => { + const store = createStore() + if (!('dev3_subscribe_store' in store)) { + throw new Error('dev methods are not available') + } + const callback = vi.fn() + const unsub = store.dev3_subscribe_store(callback) + const countAtom = atom(0) + const unsubAtom = store.sub(countAtom, vi.fn()) + store.set(countAtom, 1) + expect(callback).toHaveBeenNthCalledWith(1, { + type: 'set', + atom: countAtom, + }) + expect(callback).toHaveBeenCalledTimes(1) + unsub() + unsubAtom() + }) + + it('should call unsub only when atom is unsubscribed', () => { + const store = createStore() + if (!('dev3_subscribe_store' in store)) { + throw new Error('dev methods are not available') + } + const callback = vi.fn() + const unsub = store.dev3_subscribe_store(callback) + const countAtom = atom(0) + const unsubAtom = store.sub(countAtom, vi.fn()) + const unsubAtomSecond = store.sub(countAtom, vi.fn()) + unsubAtom() + expect(callback).toHaveBeenNthCalledWith(1, { type: 'unsub' }) + expect(callback).toHaveBeenCalledTimes(1) + unsub() + unsubAtomSecond() + }) + }) + + it('should unmount tree dependencies with store.get', async () => { + const store = createStore() + if (!('dev3_subscribe_store' in store)) { + throw new Error('dev methods are not available') + } + const countAtom = atom(0) + const derivedAtom = atom((get) => get(countAtom) * 2) + const anotherDerivedAtom = atom((get) => get(countAtom) * 3) + const callback = vi.fn() + const unsubStore = store.dev3_subscribe_store(() => { + // Comment this line to make the test pass + store.get(derivedAtom) + }) + const unsub = store.sub(anotherDerivedAtom, callback) + unsub() + unsubStore() + const result = Array.from(store.dev3_get_mounted_atoms() ?? []) + expect(result).toEqual([]) + }) +}) From bae21079600812042651d965b4dfa526a4e995b4 Mon Sep 17 00:00:00 2001 From: Arjun Vegda <14841132+arjunvegda@users.noreply.github.com> Date: Thu, 4 Apr 2024 23:51:34 -0400 Subject: [PATCH 22/33] fix: expose internal devstore types (#2481) * fix: expose internal devstore types * fix(vanialla.ts): export the store types * fix(vanialla.ts): export the store types * fix: avoid exporting types from `jotai/vanilla` entry point Co-authored-by: Daishi Kato --------- Co-authored-by: Daishi Kato --- src/vanilla/store.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 8999b484a1..6d500efe9b 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -168,6 +168,10 @@ type Store = | (PrdStore & Partial) | (PrdStore & DevStoreRev2 & DevStoreRev3) +export type INTERNAL_DevStoreRev2 = DevStoreRev2 +export type INTERNAL_DevStoreRev3 = DevStoreRev3 +export type INTERNAL_PrdStore = PrdStore + /** * Create a new store. Each store is an independent, isolated universe of atom * states. From 11a798be181cbede6d9bebdd149f8fec58353051 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Fri, 5 Apr 2024 12:52:57 +0900 Subject: [PATCH 23/33] fix(babel): do not depend on path (#2482) --- src/babel/plugin-debug-label.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/babel/plugin-debug-label.ts b/src/babel/plugin-debug-label.ts index 8dfd03c51b..94ae067f63 100644 --- a/src/babel/plugin-debug-label.ts +++ b/src/babel/plugin-debug-label.ts @@ -1,4 +1,3 @@ -import path from 'path' import babel, { PluginObj } from '@babel/core' import _templateBuilder from '@babel/template' import { isAtom } from './utils.ts' @@ -18,13 +17,14 @@ export default function debugLabelPlugin( t.isCallExpression(node.declaration) && isAtom(t, node.declaration.callee, options?.customAtomNames) ) { - const filename = state.filename || 'unknown' + const filename = (state.filename || 'unknown').replace(/\.\w+$/, '') - let displayName = path.basename(filename, path.extname(filename)) + let displayName = filename.split('/').pop()! // ./{module name}/index.js if (displayName === 'index') { - displayName = path.basename(path.dirname(filename)) + displayName = + filename.slice(0, -'/index'.length).split('/').pop() || 'unknown' } // Relies on visiting the variable declaration to add the debugLabel const buildExport = templateBuilder(` From 1049ae135e44992cd3c77a33b76ebe80b70d0233 Mon Sep 17 00:00:00 2001 From: frameflare <166090836+frameflare@users.noreply.github.com> Date: Fri, 5 Apr 2024 13:02:59 +0800 Subject: [PATCH 24/33] docs: fix some typos (#2483) Signed-off-by: frameflare --- docs/extensions/effect.mdx | 4 ++-- docs/guides/migrating-to-v2-api.mdx | 2 +- docs/utilities/storage.mdx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/extensions/effect.mdx b/docs/extensions/effect.mdx index f0d8defb64..8522d295a9 100644 --- a/docs/extensions/effect.mdx +++ b/docs/extensions/effect.mdx @@ -97,7 +97,7 @@ function MyComponent() { -- **Resistent To Infinite Loops:** +- **Resistant To Infinite Loops:** `atomEffect` does not rerun when it changes a value with `set` that it is watching. @@ -370,7 +370,7 @@ This guarantees that a single effect will be used regardless of how many calls t The same guarantee can be achieved with the useEffect hook if you ensure that the useEffect is idempotent. -atomEffects are distinguished from useEffect in a few other ways. They can directly react to atom state changes, are resistent to infinite loops, and can be mounted conditionally. +atomEffects are distinguished from useEffect in a few other ways. They can directly react to atom state changes, are resistant to infinite loops, and can be mounted conditionally. #### It's up to you diff --git a/docs/guides/migrating-to-v2-api.mdx b/docs/guides/migrating-to-v2-api.mdx index 7cb0adbc54..2d872f45d8 100644 --- a/docs/guides/migrating-to-v2-api.mdx +++ b/docs/guides/migrating-to-v2-api.mdx @@ -231,7 +231,7 @@ const splittedAtom = splitAtom(unwrap(asyncArrayAtom, () => [])) ``` As of writing, `unwrap` is unstable and not documented. -You can instead use `loadable`, which gives more controll on loading status. +You can instead use `loadable`, which gives more control on loading status. If you need to use ``, atoms-in-atom pattern would help. For more information, refer the following discussions: diff --git a/docs/utilities/storage.mdx b/docs/utilities/storage.mdx index 0f6ab78ff9..c50adc5285 100644 --- a/docs/utilities/storage.mdx +++ b/docs/utilities/storage.mdx @@ -1,7 +1,7 @@ --- title: Storage nav: 3.01 -keywords: storage,localstorage,sessionstorage,asyncstorage,persist,persistance +keywords: storage,localstorage,sessionstorage,asyncstorage,persist,persistence --- ## atomWithStorage From 93a6fb962d5c488d318ebb9d2b42320fecf47463 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Sat, 6 Apr 2024 12:02:15 +0900 Subject: [PATCH 25/33] refactor atomWithLazy (#2485) --- src/vanilla/utils/atomWithLazy.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vanilla/utils/atomWithLazy.ts b/src/vanilla/utils/atomWithLazy.ts index 208be7e547..7be481d852 100644 --- a/src/vanilla/utils/atomWithLazy.ts +++ b/src/vanilla/utils/atomWithLazy.ts @@ -3,10 +3,12 @@ import { PrimitiveAtom, atom } from '../../vanilla.ts' export function atomWithLazy( makeInitial: () => Value, ): PrimitiveAtom { - return { - ...atom(undefined as unknown as Value), - get init() { + const a = atom(undefined as unknown as Value) + delete (a as { init?: Value }).init + Object.defineProperty(a, 'init', { + get() { return makeInitial() }, - } + }) + return a } From c09843ae88b221053e770916a7e9682eac2195d8 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Sun, 7 Apr 2024 13:39:47 +0900 Subject: [PATCH 26/33] chore(deps): update dev dependencies (#2479) * chore(deps): update dev dependencies * downgrade user-evnet * fix type with vi.fn * for older ts * hack for older ts * hack for older ts 2 * hack for older ts 3 * hack for older ts 4 * hack for older ts 5 * hack for older ts 6 * hack for older ts 7 * hack for older ts 8 * resolve replacement * update snapshots * do not use default export * Revert "do not use default export" This reverts commit 0a646730c7389ea8060191f0331b5432563c94af. * update package.json * wip: fix cjs * wip: for other builds * wip: fix previous commit * wip: esm and system * system cannot be tested * wip: fix esm * wip: RESET * wip: RESET 2 * wip: tsconfig * revert it * wip: patch test * wip: fix regex * wip: patch dist * patch test with require * wip: fix path * fix cjs&umd * skip one test with umd * can we remove this? * Revert "can we remove this?" This reverts commit 1efc0b50b0d99be10b5ffe5e5d62f22d99603468. --- .github/workflows/test-multiple-builds.yml | 13 +- .github/workflows/test-old-typescript.yml | 17 +- package.json | 20 +- tests/babel/plugin-debug-label.test.ts | 58 +- tests/babel/plugin-react-refresh.test.ts | 24 +- tests/babel/preset.test.ts | 36 +- tests/react/dependency.test.tsx | 4 +- tests/react/utils/useResetAtom.test.tsx | 8 +- vitest.config.ts | 5 +- yarn.lock | 914 ++++++++++----------- 10 files changed, 534 insertions(+), 565 deletions(-) diff --git a/.github/workflows/test-multiple-builds.yml b/.github/workflows/test-multiple-builds.yml index f76684107e..9fedaa0f93 100644 --- a/.github/workflows/test-multiple-builds.yml +++ b/.github/workflows/test-multiple-builds.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - build: [cjs, umd] # [cjs, esm, umd, system] + build: [cjs, esm, umd] env: [development, production] steps: - uses: actions/checkout@v2 @@ -40,24 +40,27 @@ jobs: - name: Patch for CJS if: ${{ matrix.build == 'cjs' }} run: | - sed -i~ "s/\/src\(.*\)\.ts/\/dist\1.js/" package.json + sed -i~ "s/resolve('\.\/src\(.*\)\.ts')/resolve('\.\/dist\1.js')/" vitest.config.ts + sed -i~ "s/import { useResetAtom } from 'jotai\/react\/utils'/const { useResetAtom } = require('..\/..\/..\/dist\/react\/utils.js')/" tests/react/utils/useResetAtom.test.tsx + sed -i~ "s/import { RESET, atomWithReducer, atomWithReset } from 'jotai\/vanilla\/utils'/const { RESET, atomWithReducer, atomWithReset } = require('..\/..\/..\/dist\/vanilla\/utils.js')/" tests/react/utils/useResetAtom.test.tsx - name: Patch for ESM if: ${{ matrix.build == 'esm' }} run: | - sed -i~ "s/\/src\(.*\)\.ts/\/dist\/esm\1.js" package.json + sed -i~ "s/resolve('\.\/src\(.*\)\.ts')/resolve('\.\/dist\/esm\1.mjs')/" vitest.config.ts sed -i~ "1s/^/import.meta.env=import.meta.env||{};import.meta.env.MODE='${NODE_ENV}';/" tests/*/*.tsx tests/*/*/*.tsx env: NODE_ENV: ${{ matrix.env }} - name: Patch for UMD if: ${{ matrix.build == 'umd' }} run: | - sed -i~ "s/\/src\(.*\)\.ts/\/dist\/umd\1.${NODE_ENV}.js/" package.json + sed -i~ "s/resolve('\.\/src\(.*\)\.ts')/resolve('\.\/dist\/umd\1.${NODE_ENV}.js')/" vitest.config.ts + rm tests/react/utils/useResetAtom.test.tsx # FIXME we skip this for now. Actually I'm not sure if we really run tests with UMD build env: NODE_ENV: ${{ matrix.env }} - name: Patch for SystemJS if: ${{ matrix.build == 'system' }} run: | - sed -i~ "s/\/src\(.*\)\.ts/\/dist\/system\1.${NODE_ENV}.js/" package.json + sed -i~ "s/resolve('\.\/src\(.*\)\.ts')/resolve('\.\/dist\/system\1.${NODE_ENV}.js')/" vitest.config.ts env: NODE_ENV: ${{ matrix.env }} - name: Test ${{ matrix.build }} ${{ matrix.env }} diff --git a/.github/workflows/test-old-typescript.yml b/.github/workflows/test-old-typescript.yml index 823a1fb3b3..47980a2c97 100644 --- a/.github/workflows/test-old-typescript.yml +++ b/.github/workflows/test-old-typescript.yml @@ -47,7 +47,7 @@ jobs: sed -i~ 's/"jotai\/\*": \["\.\/src\/\*\.ts"\]/"jotai\/*": [".\/dist\/*.d.ts"]/' tsconfig.json sed -i~ 's/"include": .*/"include": ["src\/types.d.ts", "dist\/**\/*", "tests\/**\/*"],/' tsconfig.json - name: Patch for Old TS - if: ${{ matrix.typescript == '4.7.4' || matrix.typescript == '4.6.4' || matrix.typescript == '4.5.5' || matrix.typescript == '4.4.4' || matrix.typescript == '4.3.5' || matrix.typescript == '4.2.3' || matrix.typescript == '4.1.5' || matrix.typescript == '4.0.5' || startsWith(matrix.typescript, '3.') }} + if: ${{ matrix.typescript == '4.7.4' || matrix.typescript == '4.6.4' || matrix.typescript == '4.5.5' || matrix.typescript == '4.4.4' || matrix.typescript == '4.3.5' || matrix.typescript == '4.2.3' || matrix.typescript == '4.1.5' || matrix.typescript == '4.0.5' || startsWith(matrix.typescript, '3.') }} run: | sed -i~ 's/\/\/ @ts-expect-error.*\[LATEST-TS-ONLY\]//' tests/*/*.tsx tests/*/*/*.tsx sed -i~ 's/"target":/"skipLibCheck":true,"target":/' tsconfig.json @@ -70,6 +70,21 @@ jobs: rm -r tests/react/vanilla-utils/atomWithObservable.* - name: Install old TypeScript run: yarn add -D typescript@${{ matrix.typescript }} + - name: Patch testing setup for Old TS + if: ${{ matrix.typescript == '4.4.4' || matrix.typescript == '4.3.5' || matrix.typescript == '4.2.3' || matrix.typescript == '4.1.5' || matrix.typescript == '4.0.5' || startsWith(matrix.typescript, '3.') }} + run: | + rm node_modules/@vitest/expect/dist/*.d.ts + echo "declare module '@vitest/expect'" >> ./src/types.d.ts + rm node_modules/@vitest/runner/dist/*.d.ts + echo "declare module '@vitest/runner'" >> ./src/types.d.ts + rm node_modules/@vitest/spy/dist/*.d.ts + echo "declare module '@vitest/spy'" >> ./src/types.d.ts + rm node_modules/@vitest/utils/dist/*.d.ts + echo "declare module '@vitest/utils'" >> ./src/types.d.ts + rm node_modules/vite-node/dist/*.d.ts + echo "declare module 'vite-node'" >> ./src/types.d.ts + rm node_modules/vitest/dist/*.d.ts + echo "declare module 'vitest'" >> ./src/types.d.ts - name: Patch testing setup for older TS if: ${{ matrix.typescript == '4.0.5' || startsWith(matrix.typescript, '3.') }} run: | diff --git a/package.json b/package.json index 9005b55916..695ad47386 100644 --- a/package.json +++ b/package.json @@ -114,10 +114,10 @@ }, "homepage": "https://github.com/pmndrs/jotai", "devDependencies": { - "@babel/core": "^7.24.3", + "@babel/core": "^7.24.4", "@babel/plugin-transform-react-jsx": "^7.23.4", - "@babel/plugin-transform-typescript": "^7.24.1", - "@babel/preset-env": "^7.24.3", + "@babel/plugin-transform-typescript": "^7.24.4", + "@babel/preset-env": "^7.24.4", "@babel/template": "^7.24.0", "@babel/types": "^7.24.0", "@redux-devtools/extension": "^3.3.0", @@ -131,13 +131,13 @@ "@testing-library/react": "^14.2.2", "@testing-library/user-event": "14.4.3", "@types/babel__core": "^7.20.5", - "@types/node": "^20.11.30", + "@types/node": "^20.12.4", "@types/react": "18.2.56", - "@types/react-dom": "^18.2.23", + "@types/react-dom": "^18.2.24", "@typescript-eslint/eslint-plugin": "7.2.0", "@typescript-eslint/parser": "7.2.0", - "@vitest/coverage-v8": "0.33.0", - "@vitest/ui": "0.33.0", + "@vitest/coverage-v8": "^1.4.0", + "@vitest/ui": "^1.4.0", "benny": "^3.7.1", "concurrently": "^8.2.2", "downlevel-dts": "^0.11.0", @@ -149,14 +149,14 @@ "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-vitest": "^0.4.0", + "eslint-plugin-vitest": "^0.4.1", "jsdom": "^24.0.0", "json": "^11.0.0", "prettier": "^3.2.5", "react": "^18.2.0", "react-dom": "^18.2.0", "redux": "^5.0.1", - "rollup": "^4.13.2", + "rollup": "^4.14.0", "rollup-plugin-banner2": "^1.2.3", "rollup-plugin-esbuild": "^6.1.1", "rxjs": "^7.8.1", @@ -165,7 +165,7 @@ "ts-node": "^10.9.2", "tslib": "^2.6.2", "typescript": "^5.4.3", - "vitest": "0.33.0", + "vitest": "^1.4.0", "wonka": "^6.3.4" }, "resolutions": { diff --git a/tests/babel/plugin-debug-label.test.ts b/tests/babel/plugin-debug-label.test.ts index b7c4dc7e11..9897007bf5 100644 --- a/tests/babel/plugin-debug-label.test.ts +++ b/tests/babel/plugin-debug-label.test.ts @@ -17,21 +17,21 @@ const transform = ( it('Should add a debugLabel to an atom', () => { expect(transform(`const countAtom = atom(0);`)).toMatchInlineSnapshot(` "const countAtom = atom(0); - countAtom.debugLabel = \\"countAtom\\";" + countAtom.debugLabel = "countAtom";" `) }) it('Should handle a atom from a default export', () => { expect(transform(`const countAtom = jotai.atom(0);`)).toMatchInlineSnapshot(` "const countAtom = jotai.atom(0); - countAtom.debugLabel = \\"countAtom\\";" + countAtom.debugLabel = "countAtom";" `) }) it('Should handle a atom being exported', () => { expect(transform(`export const countAtom = atom(0);`)).toMatchInlineSnapshot(` "export const countAtom = atom(0); - countAtom.debugLabel = \\"countAtom\\";" + countAtom.debugLabel = "countAtom";" `) }) @@ -39,7 +39,7 @@ it('Should handle a default exported atom', () => { expect(transform(`export default atom(0);`, 'countAtom.ts')) .toMatchInlineSnapshot(` "const countAtom = atom(0); - countAtom.debugLabel = \\"countAtom\\"; + countAtom.debugLabel = "countAtom"; export default countAtom;" `) }) @@ -48,7 +48,7 @@ it('Should handle a default exported atom in a barrel file', () => { expect(transform(`export default atom(0);`, 'atoms/index.ts')) .toMatchInlineSnapshot(` "const atoms = atom(0); - atoms.debugLabel = \\"atoms\\"; + atoms.debugLabel = "atoms"; export default atoms;" `) }) @@ -64,9 +64,9 @@ it('Should handle all types of exports', () => { ), ).toMatchInlineSnapshot(` "export const countAtom = atom(0); - countAtom.debugLabel = \\"countAtom\\"; + countAtom.debugLabel = "countAtom"; const atoms = atom(0); - atoms.debugLabel = \\"atoms\\"; + atoms.debugLabel = "atoms"; export default atoms;" `) }) @@ -112,52 +112,52 @@ it('Should handle all atom types', () => { ), ).toMatchInlineSnapshot(` "export const countAtom = atom(0); - countAtom.debugLabel = \\"countAtom\\"; + countAtom.debugLabel = "countAtom"; const myFamily = atomFamily(param => atom(param)); - myFamily.debugLabel = \\"myFamily\\"; + myFamily.debugLabel = "myFamily"; const countAtomWithDefault = atomWithDefault(get => get(countAtom) * 2); - countAtomWithDefault.debugLabel = \\"countAtomWithDefault\\"; + countAtomWithDefault.debugLabel = "countAtomWithDefault"; const observableAtom = atomWithObservable(() => {}); - observableAtom.debugLabel = \\"observableAtom\\"; + observableAtom.debugLabel = "observableAtom"; const reducerAtom = atomWithReducer(0, () => {}); - reducerAtom.debugLabel = \\"reducerAtom\\"; + reducerAtom.debugLabel = "reducerAtom"; const resetAtom = atomWithReset(0); - resetAtom.debugLabel = \\"resetAtom\\"; + resetAtom.debugLabel = "resetAtom"; const storageAtom = atomWithStorage('count', 1); - storageAtom.debugLabel = \\"storageAtom\\"; + storageAtom.debugLabel = "storageAtom"; const freezedAtom = freezeAtom(atom({ count: 0 })); - freezedAtom.debugLabel = \\"freezedAtom\\"; + freezedAtom.debugLabel = "freezedAtom"; const loadedAtom = loadable(countAtom); - loadedAtom.debugLabel = \\"loadedAtom\\"; + loadedAtom.debugLabel = "loadedAtom"; const selectedValueAtom = selectAtom(atom({ a: 0, b: 'othervalue' }), v => v.a); - selectedValueAtom.debugLabel = \\"selectedValueAtom\\"; + selectedValueAtom.debugLabel = "selectedValueAtom"; const splittedAtom = splitAtom(atom([])); - splittedAtom.debugLabel = \\"splittedAtom\\"; + splittedAtom.debugLabel = "splittedAtom"; const unwrappedAtom = unwrap(asyncArrayAtom, () => []); - unwrappedAtom.debugLabel = \\"unwrappedAtom\\"; + unwrappedAtom.debugLabel = "unwrappedAtom"; const someatomWithSubscription = atomWithSubscription(() => {}); - someatomWithSubscription.debugLabel = \\"someatomWithSubscription\\"; + someatomWithSubscription.debugLabel = "someatomWithSubscription"; const someAtomWithStore = atomWithStore(() => {}); - someAtomWithStore.debugLabel = \\"someAtomWithStore\\"; + someAtomWithStore.debugLabel = "someAtomWithStore"; const someAtomWithHash = atomWithHash('', ''); - someAtomWithHash.debugLabel = \\"someAtomWithHash\\"; + someAtomWithHash.debugLabel = "someAtomWithHash"; const someAtomWithLocation = atomWithLocation(); - someAtomWithLocation.debugLabel = \\"someAtomWithLocation\\"; + someAtomWithLocation.debugLabel = "someAtomWithLocation"; const someFocusAtom = focusAtom(someAtom, () => {}); - someFocusAtom.debugLabel = \\"someFocusAtom\\"; + someFocusAtom.debugLabel = "someFocusAtom"; const someAtomWithValidate = atomWithValidate('', {}); - someAtomWithValidate.debugLabel = \\"someAtomWithValidate\\"; + someAtomWithValidate.debugLabel = "someAtomWithValidate"; const someValidateAtoms = validateAtoms({}, () => {}); - someValidateAtoms.debugLabel = \\"someValidateAtoms\\"; + someValidateAtoms.debugLabel = "someValidateAtoms"; const someAtomWithCache = atomWithCache(async () => {}); - someAtomWithCache.debugLabel = \\"someAtomWithCache\\"; + someAtomWithCache.debugLabel = "someAtomWithCache"; const someAtomWithRecoilValue = atomWithRecoilValue({}); - someAtomWithRecoilValue.debugLabel = \\"someAtomWithRecoilValue\\";" + someAtomWithRecoilValue.debugLabel = "someAtomWithRecoilValue";" `) }) @@ -168,6 +168,6 @@ it('Handles custom atom names a debugLabel to an atom', () => { ]), ).toMatchInlineSnapshot(` "const mySpecialThing = myCustomAtom(0); - mySpecialThing.debugLabel = \\"mySpecialThing\\";" + mySpecialThing.debugLabel = "mySpecialThing";" `) }) diff --git a/tests/babel/plugin-react-refresh.test.ts b/tests/babel/plugin-react-refresh.test.ts index 352d547b9f..a83dbc2121 100644 --- a/tests/babel/plugin-react-refresh.test.ts +++ b/tests/babel/plugin-react-refresh.test.ts @@ -28,7 +28,7 @@ it('Should add a cache for a single atom', () => { return inst; } }; - const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0));" + const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0));" `) }) @@ -52,8 +52,8 @@ it('Should add a cache for multiple atoms', () => { return inst; } }; - const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/doubleAtom\\", atom(get => get(countAtom) * 2));" + const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/doubleAtom", atom(get => get(countAtom) * 2));" `) }) @@ -77,8 +77,8 @@ it('Should add a cache for multiple exported atoms', () => { return inst; } }; - export const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - export const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/doubleAtom\\", atom(get => get(countAtom) * 2));" + export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + export const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/doubleAtom", atom(get => get(countAtom) * 2));" `) }) @@ -95,7 +95,7 @@ it('Should add a cache for a default exported atom', () => { return inst; } }; - export default globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/defaultExport\\", atom(0));" + export default globalThis.jotaiAtomCache.get("/src/atoms/index.ts/defaultExport", atom(0));" `) }) @@ -119,8 +119,8 @@ it('Should add a cache for mixed exports of atoms', () => { return inst; } }; - export const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - export default globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/defaultExport\\", atom(get => get(countAtom) * 2));" + export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + export default globalThis.jotaiAtomCache.get("/src/atoms/index.ts/defaultExport", atom(get => get(countAtom) * 2));" `) }) @@ -160,9 +160,9 @@ it('Should handle atoms returned from functions (#891)', () => { anAtom.debugLabel = label; return anAtom; } - const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - const countAtom2 = createAtom(\\"countAtom2\\"); - const countAtom3 = createAtom(\\"countAtom3\\");" + const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + const countAtom2 = createAtom("countAtom2"); + const countAtom3 = createAtom("countAtom3");" `) }) @@ -184,6 +184,6 @@ it('Should handle custom atom names', () => { return inst; } }; - const mySpecialThing = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/mySpecialThing\\", myCustomAtom(0));" + const mySpecialThing = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/mySpecialThing", myCustomAtom(0));" `) }) diff --git a/tests/babel/preset.test.ts b/tests/babel/preset.test.ts index df02911cb1..2339b293ea 100644 --- a/tests/babel/preset.test.ts +++ b/tests/babel/preset.test.ts @@ -27,8 +27,8 @@ it('Should add a debugLabel and cache to an atom', () => { return inst; } }; - const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms.ts/countAtom\\", atom(0)); - countAtom.debugLabel = \\"countAtom\\";" + const countAtom = globalThis.jotaiAtomCache.get("/src/atoms.ts/countAtom", atom(0)); + countAtom.debugLabel = "countAtom";" `) }) @@ -51,10 +51,10 @@ it('Should add a debugLabel and cache to multiple atoms', () => { return inst; } }; - const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms.ts/countAtom\\", atom(0)); - countAtom.debugLabel = \\"countAtom\\"; - const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms.ts/doubleAtom\\", atom(get => get(countAtom) * 2)); - doubleAtom.debugLabel = \\"doubleAtom\\";" + const countAtom = globalThis.jotaiAtomCache.get("/src/atoms.ts/countAtom", atom(0)); + countAtom.debugLabel = "countAtom"; + const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms.ts/doubleAtom", atom(get => get(countAtom) * 2)); + doubleAtom.debugLabel = "doubleAtom";" `) }) @@ -78,10 +78,10 @@ it('Should add a cache and debugLabel for multiple exported atoms', () => { return inst; } }; - export const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - countAtom.debugLabel = \\"countAtom\\"; - export const doubleAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/doubleAtom\\", atom(get => get(countAtom) * 2)); - doubleAtom.debugLabel = \\"doubleAtom\\";" + export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + countAtom.debugLabel = "countAtom"; + export const doubleAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/doubleAtom", atom(get => get(countAtom) * 2)); + doubleAtom.debugLabel = "doubleAtom";" `) }) @@ -98,8 +98,8 @@ it('Should add a cache and debugLabel for a default exported atom', () => { return inst; } }; - const atoms = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/atoms\\", atom(0)); - atoms.debugLabel = \\"atoms\\"; + const atoms = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/atoms", atom(0)); + atoms.debugLabel = "atoms"; export default atoms;" `) }) @@ -124,10 +124,10 @@ it('Should add a cache and debugLabel for mixed exports of atoms', () => { return inst; } }; - export const countAtom = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/countAtom\\", atom(0)); - countAtom.debugLabel = \\"countAtom\\"; - const atoms = globalThis.jotaiAtomCache.get(\\"/src/atoms/index.ts/atoms\\", atom(get => get(countAtom) * 2)); - atoms.debugLabel = \\"atoms\\"; + export const countAtom = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/countAtom", atom(0)); + countAtom.debugLabel = "countAtom"; + const atoms = globalThis.jotaiAtomCache.get("/src/atoms/index.ts/atoms", atom(get => get(countAtom) * 2)); + atoms.debugLabel = "atoms"; export default atoms;" `) }) @@ -154,7 +154,7 @@ it('Should handle custom atom names', () => { return inst; } }; - const mySpecialThing = globalThis.jotaiAtomCache.get(\\"/src/atoms.ts/mySpecialThing\\", myCustomAtom(0)); - mySpecialThing.debugLabel = \\"mySpecialThing\\";" + const mySpecialThing = globalThis.jotaiAtomCache.get("/src/atoms.ts/mySpecialThing", myCustomAtom(0)); + mySpecialThing.debugLabel = "mySpecialThing";" `) }) diff --git a/tests/react/dependency.test.tsx b/tests/react/dependency.test.tsx index debe14d747..af72636093 100644 --- a/tests/react/dependency.test.tsx +++ b/tests/react/dependency.test.tsx @@ -908,7 +908,9 @@ describe('glitch free', () => { it('should not call read function for unmounted atoms in StrictMode (#2076)', async () => { const countAtom = atom(1) - let firstDerivedFn: ReturnType | undefined + let firstDerivedFn: + | (((get: Getter) => number) & { mockClear: () => void }) + | undefined const Component = () => { const memoizedAtomRef = useRef | null>(null) diff --git a/tests/react/utils/useResetAtom.test.tsx b/tests/react/utils/useResetAtom.test.tsx index 106ee80b23..703df3ee5d 100644 --- a/tests/react/utils/useResetAtom.test.tsx +++ b/tests/react/utils/useResetAtom.test.tsx @@ -63,7 +63,9 @@ it('atomWithReset reset based on previous value', async () => {
count: {count}
+
+ isFrozen: {`${Object.isFrozen(obj) && Object.isFrozen(obj.deep)}`} +
+ + ) } - const { findByText } = render( + const { getByText, findByText } = render( , ) await findByText('isFrozen: true') + + fireEvent.click(getByText('change')) + + await findByText('isFrozen: true') }) it('freezeAtomCreator basic test', async () => { const createFrozenAtom = freezeAtomCreator(atom) - const objAtom = createFrozenAtom({ count: 0 }) + const objAtom = createFrozenAtom({ deep: {} }, (_get, set, _ignored?) => { + set(objAtom, { deep: {} }) + }) const Component = () => { - const [obj] = useAtom(objAtom) + const [obj, setObj] = useAtom(objAtom) - return
isFrozen: {`${Object.isFrozen(obj)}`}
+ return ( + <> + +
+ isFrozen: {`${Object.isFrozen(obj) && Object.isFrozen(obj.deep)}`} +
+ + ) } - const { findByText } = render( + const { getByText, findByText } = render( , ) await findByText('isFrozen: true') + + fireEvent.click(getByText('change')) + + await findByText('isFrozen: true') }) From 2abd51c466b08cd0cd91303aed127e374998cf18 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Sun, 7 Apr 2024 21:45:24 +0900 Subject: [PATCH 29/33] deprecate freezeAtomCreator (#2490) --- docs/guides/debugging.mdx | 23 +++---- src/vanilla/utils/freezeAtom.ts | 14 +++-- tests/react/vanilla-utils/freezeAtom.test.tsx | 61 +++++++++++-------- 3 files changed, 55 insertions(+), 43 deletions(-) diff --git a/docs/guides/debugging.mdx b/docs/guides/debugging.mdx index 79f8feb0e4..1e3fa6798e 100644 --- a/docs/guides/debugging.mdx +++ b/docs/guides/debugging.mdx @@ -135,8 +135,9 @@ Which returns atoms value that is deeply freezed with `Object.freeze`. freezeAtom(anAtom): AtomType ``` -`freezeAtom` takes an existing atom and returns a new derived "frozen" atom. -The atom will be deeply frozen by `Object.freeze`. +`freezeAtom` takes an existing atom and make it "frozen". +It returns the same atom. +The atom value will be deeply frozen by `Object.freeze`. It is useful to find bugs where you unintentionally tried to change objects (states) which can lead to unexpected behavior. You may use `freezeAtom` with all atoms to prevent this situation. @@ -156,14 +157,14 @@ const objAtom = freezeAtom(atom({ count: 0 })) ### freezeAtomCreator -```js -import { atom } from 'jotai' -import { freezeAtomCreator } from 'jotai/utils' +If you need, you can define a factory for `freezeAtom`. -const createFrozenAtom = freezeAtomCreator(atom) -const objAtom = createFrozenAtom({ count: 0 }) -``` +```ts +import { freezeAtom } from 'jotai/utils' -Instead of create a frozen atom from an existing atom, -`freezeAtomCreator` takes an atom creator function and returns a new function. -You can use this not only for `atom`, but also for other `atomWith*` creators such as `atomWithReduer`. +export function freezeAtomCreator< + CreateAtom extends (...args: unknown[]) => Atom, +>(createAtom: CreateAtom): CreateAtom { + return ((...args: unknown[]) => freezeAtom(createAtom(...args))) as never +} +``` diff --git a/src/vanilla/utils/freezeAtom.ts b/src/vanilla/utils/freezeAtom.ts index 585274bf17..945a3705b2 100644 --- a/src/vanilla/utils/freezeAtom.ts +++ b/src/vanilla/utils/freezeAtom.ts @@ -16,6 +16,7 @@ const deepFreeze = (obj: unknown) => { export function freezeAtom>( anAtom: AtomType, ): AtomType + export function freezeAtom( anAtom: WritableAtom, ): WritableAtom { @@ -48,11 +49,14 @@ export function freezeAtom( return anAtom } +/** + * @deprecated Define it on users end + */ export function freezeAtomCreator< CreateAtom extends (...args: unknown[]) => Atom, ->(createAtom: CreateAtom): CreateAtom -export function freezeAtomCreator( - createAtom: (...args: unknown[]) => WritableAtom, -): (...args: unknown[]) => WritableAtom { - return (...args) => freezeAtom(createAtom(...args)) +>(createAtom: CreateAtom): CreateAtom { + console.warn( + '[DEPRECATED] freezeAtomCreator is deprecated, define it on users end', + ) + return ((...args: unknown[]) => freezeAtom(createAtom(...args))) as never } diff --git a/tests/react/vanilla-utils/freezeAtom.test.tsx b/tests/react/vanilla-utils/freezeAtom.test.tsx index 52541827c2..37f2b74d84 100644 --- a/tests/react/vanilla-utils/freezeAtom.test.tsx +++ b/tests/react/vanilla-utils/freezeAtom.test.tsx @@ -1,6 +1,6 @@ import { StrictMode } from 'react' import { fireEvent, render } from '@testing-library/react' -import { it } from 'vitest' +import { afterEach, beforeEach, describe, it, vi } from 'vitest' import { useAtom } from 'jotai/react' import { atom } from 'jotai/vanilla' import { freezeAtom, freezeAtomCreator } from 'jotai/vanilla/utils' @@ -12,7 +12,6 @@ it('freezeAtom basic test', async () => { const Component = () => { const [obj, setObj] = useAtom(freezeAtom(objAtom)) - return ( <> @@ -32,38 +31,46 @@ it('freezeAtom basic test', async () => { await findByText('isFrozen: true') fireEvent.click(getByText('change')) - await findByText('isFrozen: true') }) -it('freezeAtomCreator basic test', async () => { - const createFrozenAtom = freezeAtomCreator(atom) - const objAtom = createFrozenAtom({ deep: {} }, (_get, set, _ignored?) => { - set(objAtom, { deep: {} }) +describe('freezeAtomCreator', () => { + let savedConsoleWarn: any + beforeEach(() => { + savedConsoleWarn = console.warn + console.warn = vi.fn() + }) + afterEach(() => { + console.warn = savedConsoleWarn }) - const Component = () => { - const [obj, setObj] = useAtom(objAtom) + it('freezeAtomCreator basic test', async () => { + const createFrozenAtom = freezeAtomCreator(atom) + const objAtom = createFrozenAtom({ deep: {} }, (_get, set, _ignored?) => { + set(objAtom, { deep: {} }) + }) - return ( - <> - -
- isFrozen: {`${Object.isFrozen(obj) && Object.isFrozen(obj.deep)}`} -
- - ) - } - - const { getByText, findByText } = render( - - - , - ) + const Component = () => { + const [obj, setObj] = useAtom(objAtom) + return ( + <> + +
+ isFrozen: {`${Object.isFrozen(obj) && Object.isFrozen(obj.deep)}`} +
+ + ) + } - await findByText('isFrozen: true') + const { getByText, findByText } = render( + + + , + ) - fireEvent.click(getByText('change')) + await findByText('isFrozen: true') - await findByText('isFrozen: true') + fireEvent.click(getByText('change')) + await findByText('isFrozen: true') + }) }) From 88303acb990a7b796b0659960df3ba83b6118951 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Sun, 7 Apr 2024 21:56:00 +0900 Subject: [PATCH 30/33] add memory leak test (#2487) --- package.json | 1 + tests/vanilla/memoryleaks.test.ts | 14 ++++++++++++++ yarn.lock | 13 +++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 tests/vanilla/memoryleaks.test.ts diff --git a/package.json b/package.json index 695ad47386..86148f77c8 100644 --- a/package.json +++ b/package.json @@ -150,6 +150,7 @@ "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-vitest": "^0.4.1", + "jest-leak-detector": "^29.7.0", "jsdom": "^24.0.0", "json": "^11.0.0", "prettier": "^3.2.5", diff --git a/tests/vanilla/memoryleaks.test.ts b/tests/vanilla/memoryleaks.test.ts new file mode 100644 index 0000000000..8ea9db249c --- /dev/null +++ b/tests/vanilla/memoryleaks.test.ts @@ -0,0 +1,14 @@ +import LeakDetector from 'jest-leak-detector' +import { expect, it } from 'vitest' +import { atom, createStore } from 'jotai/vanilla' + +it('should not have memory leaks with an atom', async () => { + const store = createStore() + let detector: LeakDetector + ;(() => { + const objAtom = atom({}) + detector = new LeakDetector(store.get(objAtom)) + })() + const isLeaking = await detector.isLeaking() + expect(isLeaking).toBe(false) +}) diff --git a/yarn.lock b/yarn.lock index b2d84a1b28..8e0a4fbb55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3466,6 +3466,19 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" From a3be09ef5a02751881b98b6e9cb49d4515792ae8 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Mon, 8 Apr 2024 10:39:13 +0900 Subject: [PATCH 31/33] fix(store): remove dev3 methods and add dev4 methods only in store2 (#2484) * fix(store): combine dev3 methods * dev methods rev4 * remove rev3 and add rev4 * hack type * hack type 2 * remove unusable types * fix test condition * format * fix dev store * export internal types --- src/vanilla/store.ts | 84 ++------------- src/vanilla/store2.ts | 185 ++++---------------------------- tests/vanilla/storedev.test.tsx | 146 ++----------------------- 3 files changed, 40 insertions(+), 375 deletions(-) diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts index 6d500efe9b..b382bbbb13 100644 --- a/src/vanilla/store.ts +++ b/src/vanilla/store.ts @@ -142,19 +142,6 @@ type DevStoreRev2 = { dev_get_mounted: (a: AnyAtom) => Mounted | undefined dev_restore_atoms: (values: Iterable) => void } -type DevListenerRev3 = ( - action: { type: 'set'; atom: AnyAtom } | { type: 'unsub' }, -) => void -type DevStoreRev3 = { - dev3_subscribe_store: (l: DevListenerRev3) => () => void - dev3_get_mounted_atoms: () => Iterable - dev3_get_atom_state: ( - a: AnyAtom, - ) => { readonly v: AnyValue } | { readonly e: AnyError } | undefined - // deps are atoms that specified atom depends on (not including self) - dev3_get_atom_deps: (a: AnyAtom) => Iterable | undefined - dev3_restore_atoms: (values: Iterable) => void -} type PrdStore = { get: (atom: Atom) => Value @@ -164,12 +151,9 @@ type PrdStore = { ) => Result sub: (atom: AnyAtom, listener: () => void) => () => void } -type Store = - | (PrdStore & Partial) - | (PrdStore & DevStoreRev2 & DevStoreRev3) +type Store = PrdStore & Partial export type INTERNAL_DevStoreRev2 = DevStoreRev2 -export type INTERNAL_DevStoreRev3 = DevStoreRev3 export type INTERNAL_PrdStore = PrdStore /** @@ -196,10 +180,10 @@ export const createStore = (): Store => { AnyAtom, [prevAtomState: AtomState | undefined, dependents: Dependents] >() - let devListenersRev3: Set + let devListenersRev2: Set let mountedAtoms: MountedAtoms if (import.meta.env?.MODE !== 'production') { - devListenersRev3 = new Set() + devListenersRev2 = new Set() mountedAtoms = new Set() } @@ -602,7 +586,7 @@ export const createStore = (): Store => { if (!isSync) { const flushed = flushPending(pendingStack.pop()!) if (import.meta.env?.MODE !== 'production') { - devListenersRev3.forEach((l) => + devListenersRev2.forEach((l) => l({ type: 'async-write', flushed: flushed! }), ) } @@ -621,7 +605,7 @@ export const createStore = (): Store => { const result = writeAtomState(atom, ...args) const flushed = flushPending(pendingStack.pop()!) if (import.meta.env?.MODE !== 'production') { - devListenersRev3.forEach((l) => l({ type: 'write', flushed: flushed! })) + devListenersRev2.forEach((l) => l({ type: 'write', flushed: flushed! })) } return result } @@ -806,7 +790,7 @@ export const createStore = (): Store => { const listeners = mounted.l listeners.add(listener) if (import.meta.env?.MODE !== 'production') { - devListenersRev3.forEach((l) => + devListenersRev2.forEach((l) => l({ type: 'sub', flushed: flushed as Set }), ) } @@ -815,7 +799,7 @@ export const createStore = (): Store => { tryUnmountAtom(atom, mounted) if (import.meta.env?.MODE !== 'production') { // devtools uses this to detect if it _can_ unmount or not - devListenersRev3.forEach((l) => l({ type: 'unsub' })) + devListenersRev2.forEach((l) => l({ type: 'unsub' })) } } } @@ -827,9 +811,9 @@ export const createStore = (): Store => { sub: subscribeAtom, // store dev methods (these are tentative and subject to change without notice) dev_subscribe_store: (l) => { - devListenersRev3.add(l) + devListenersRev2.add(l) return () => { - devListenersRev3.delete(l) + devListenersRev2.delete(l) } }, dev_get_mounted_atoms: () => mountedAtoms.values(), @@ -844,55 +828,7 @@ export const createStore = (): Store => { } } const flushed = flushPending(pendingStack.pop()!) - devListenersRev3.forEach((l) => - l({ type: 'restore', flushed: flushed! }), - ) - }, - dev3_subscribe_store: (l) => { - const l2: DevListenerRev2 = (action) => { - if (action.type === 'unsub') { - l(action) - } else if (action.type !== 'sub' && 'flushed' in action) { - for (const a of action.flushed) { - l({ type: 'set', atom: a }) - } - } - } - devListenersRev3.add(l2) - return () => { - devListenersRev3.delete(l2) - } - }, - dev3_get_mounted_atoms: () => mountedAtoms.values(), - dev3_get_atom_state: (a) => { - const aState = atomStateMap.get(a) - if (aState && 'v' in aState) { - return { v: aState.v } - } - if (aState && 'e' in aState) { - return { e: aState.e } - } - return undefined - }, - dev3_get_atom_deps: (a) => { - const aState = atomStateMap.get(a) - if (!aState) { - return undefined - } - const deps = new Set(aState.d.keys()) - deps.delete(a) - return deps - }, - dev3_restore_atoms: (values) => { - pendingStack.push(new Set()) - for (const [atom, valueOrPromise] of values) { - if (hasInitialValue(atom)) { - setAtomValueOrPromise(atom, valueOrPromise) - recomputeDependents(atom) - } - } - const flushed = flushPending(pendingStack.pop()!) - devListenersRev3.forEach((l) => + devListenersRev2.forEach((l) => l({ type: 'restore', flushed: flushed! }), ) }, diff --git a/src/vanilla/store2.ts b/src/vanilla/store2.ts index 3d3cf67081..2f3c12e5cd 100644 --- a/src/vanilla/store2.ts +++ b/src/vanilla/store2.ts @@ -240,38 +240,12 @@ const setAtomStateValueOrPromise = ( } // for debugging purpose only -type OldAtomState = { d: Map } & ( - | { e: AnyError } - | { v: AnyValue } -) -type OldMounted = { l: Set<() => void>; t: Set; u?: OnUnmount } -type DevListenerRev2 = ( - action: - | { type: 'write'; flushed: Set } - | { type: 'async-write'; flushed: Set } - | { type: 'sub'; flushed: Set } - | { type: 'unsub' } - | { type: 'restore'; flushed: Set }, -) => void -type DevStoreRev2 = { - dev_subscribe_store: (l: DevListenerRev2, rev: 2) => () => void - dev_get_mounted_atoms: () => IterableIterator - dev_get_atom_state: (a: AnyAtom) => OldAtomState | undefined - dev_get_mounted: (a: AnyAtom) => OldMounted | undefined - dev_restore_atoms: (values: Iterable) => void -} -type DevListenerRev3 = ( - action: { type: 'set'; atom: AnyAtom } | { type: 'unsub' }, -) => void -type DevStoreRev3 = { - dev3_subscribe_store: (l: DevListenerRev3) => () => void - dev3_get_mounted_atoms: () => Iterable - dev3_get_atom_state: ( - a: AnyAtom, - ) => { readonly v: AnyValue } | { readonly e: AnyError } | undefined - // deps are atoms that specified atom depends on (not including self) - dev3_get_atom_deps: (a: AnyAtom) => Iterable | undefined - dev3_restore_atoms: (values: Iterable) => void +type DevStoreRev4 = { + dev4_get_internal_weak_map: () => WeakMap + dev4_override_method: ( + key: K, + fn: PrdStore[K], + ) => void } type PrdStore = { @@ -282,9 +256,10 @@ type PrdStore = { ) => Result sub: (atom: AnyAtom, listener: () => void) => () => void } -type Store = - | (PrdStore & Partial) - | (PrdStore & DevStoreRev2 & DevStoreRev3) +type Store = PrdStore | (PrdStore & DevStoreRev4) + +export type INTERNAL_DevStoreRev4 = DevStoreRev4 +export type INTERNAL_PrdStore = PrdStore export const createStore = (): Store => { const atomStateMap = new WeakMap() @@ -298,15 +273,6 @@ export const createStore = (): Store => { return atomState } - let devListenersRev2: Set - let devListenersRev3: Set - let mountedAtoms: Set - if (import.meta.env?.MODE !== 'production') { - devListenersRev2 = new Set() - devListenersRev3 = new Set() - mountedAtoms = new Set() - } - const clearDependencies = (atom: Atom) => { const atomState = getAtomState(atom) for (const a of atomState.d.keys()) { @@ -330,12 +296,7 @@ export const createStore = (): Store => { if (!isSync && atomState.m) { const pendingPair = createPendingPair() mountDependencies(pendingPair, atomState) - const flushed = flushPending(pendingPair) - if (import.meta.env?.MODE !== 'production' && flushed) { - flushed.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) - } + flushPending(pendingPair) } } @@ -424,12 +385,7 @@ export const createStore = (): Store => { if (atomState.m) { const pendingPair = createPendingPair() mountDependencies(pendingPair, atomState) - const flushed = flushPending(pendingPair) - if (import.meta.env?.MODE !== 'production' && flushed) { - flushed.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) - } + flushPending(pendingPair) } }, ) @@ -540,13 +496,7 @@ export const createStore = (): Store => { } else { r = writeAtomState(pendingPair, a as AnyWritableAtom, ...args) as R } - const flushed = flushPending(pendingPair, true) - if (import.meta.env?.MODE !== 'production' && flushed) { - flushed.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) - devListenersRev2.forEach((l) => l({ type: 'async-write', flushed })) - } + flushPending(pendingPair, true) return r as R } const result = atom.write(getter, setter, ...args) @@ -559,13 +509,7 @@ export const createStore = (): Store => { ): Result => { const pendingPair = createPendingPair() const result = writeAtomState(pendingPair, atom, ...args) - const flushed = flushPending(pendingPair) - if (import.meta.env?.MODE !== 'production' && flushed) { - flushed.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) - devListenersRev2.forEach((l) => l({ type: 'write', flushed })) - } + flushPending(pendingPair) return result } @@ -600,9 +544,6 @@ export const createStore = (): Store => { } // mount self atomState.m = { l: new Set(), d: new Set(atomState.d.keys()) } - if (import.meta.env?.MODE !== 'production') { - mountedAtoms.add(atom) - } if (isActuallyWritableAtom(atom) && atom.onMount) { const mounted = atomState.m const { onMount } = atom @@ -632,9 +573,6 @@ export const createStore = (): Store => { addPending(pendingPair, onUnmount) } delete atomState.m - if (import.meta.env?.MODE !== 'production') { - mountedAtoms.delete(atom) - } // unmount dependencies for (const a of atomState.d.keys()) { unmountAtom(pendingPair, a) @@ -649,114 +587,31 @@ export const createStore = (): Store => { } const subscribeAtom = (atom: AnyAtom, listener: () => void) => { - let prevMounted: Mounted | undefined - if (import.meta.env?.MODE !== 'production') { - prevMounted = atomStateMap.get(atom)?.m - } const pendingPair = createPendingPair() const mounted = mountAtom(pendingPair, atom) - const flushed = flushPending(pendingPair) + flushPending(pendingPair) const listeners = mounted.l listeners.add(listener) - if (import.meta.env?.MODE !== 'production' && flushed) { - flushed.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) - if (!prevMounted) { - flushed.add(atom) // HACK to include self - } - devListenersRev2.forEach((l) => l({ type: 'sub', flushed })) - } return () => { listeners.delete(listener) const pendingPair = createPendingPair() unmountAtom(pendingPair, atom) flushPending(pendingPair) - if (import.meta.env?.MODE !== 'production') { - // devtools uses this to detect if it _can_ unmount or not - devListenersRev2.forEach((l) => l({ type: 'unsub' })) - devListenersRev3.forEach((l) => l({ type: 'unsub' })) - } } } if (import.meta.env?.MODE !== 'production') { - return { + const store: Store = { get: readAtom, set: writeAtom, sub: subscribeAtom, // store dev methods (these are tentative and subject to change without notice) - dev_subscribe_store: (l) => { - devListenersRev2.add(l) - return () => { - devListenersRev2.delete(l) - } - }, - dev_get_mounted_atoms: () => mountedAtoms.values(), - dev_get_atom_state: (a: AnyAtom) => { - const getOldAtomState = (a: AnyAtom): OldAtomState | undefined => { - const aState = atomStateMap.get(a) - return ( - aState && - aState.s && { - d: new Map( - Array.from(aState.d.keys()).flatMap((a) => { - const s = getOldAtomState(a) - return s ? [[a, s]] : [] - }), - ), - ...aState.s, - } - ) - } - return getOldAtomState(a) - }, - dev_get_mounted: (a: AnyAtom) => { - const aState = atomStateMap.get(a) - return ( - aState && - aState.m && { - l: aState.m.l, - t: new Set([...aState.t, a]), // HACK to include self - ...(aState.m.u ? { u: aState.m.u } : {}), - } - ) - }, - dev_restore_atoms: (values: Iterable) => { - const pendingPair = createPendingPair() - for (const [atom, value] of values) { - setAtomStateValueOrPromise(getAtomState(atom), value) - recomputeDependents(pendingPair, atom) - } - const flushed = flushPending(pendingPair) - devListenersRev2.forEach((l) => - l({ type: 'restore', flushed: flushed! }), - ) - }, - dev3_subscribe_store: (l) => { - devListenersRev3.add(l) - return () => { - devListenersRev3.delete(l) - } - }, - dev3_get_mounted_atoms: () => mountedAtoms.values(), - dev3_get_atom_state: (a) => atomStateMap.get(a)?.s, - dev3_get_atom_deps: (a) => { - const aState = atomStateMap.get(a) - return aState ? new Set(aState.d.keys()) : undefined - }, - dev3_restore_atoms: (values) => { - const pendingPair = createPendingPair() - for (const [atom, value] of values) { - setAtomStateValueOrPromise(getAtomState(atom), value) - recomputeDependents(pendingPair, atom) - } - const flushed = flushPending(pendingPair) - flushed?.forEach((a) => { - devListenersRev3.forEach((l) => l({ type: 'set', atom: a })) - }) + dev4_get_internal_weak_map: () => atomStateMap, + dev4_override_method: (key, fn) => { + ;(store as any)[key] = fn }, } + return store } return { get: readAtom, diff --git a/tests/vanilla/storedev.test.tsx b/tests/vanilla/storedev.test.tsx index a950ea417a..6a0d6ee0ca 100644 --- a/tests/vanilla/storedev.test.tsx +++ b/tests/vanilla/storedev.test.tsx @@ -1,7 +1,10 @@ import { describe, expect, it, vi } from 'vitest' import { atom, createStore } from 'jotai/vanilla' -describe('[DEV-ONLY] dev-only methods rev2', () => { +const IS_DEV_STORE = 'dev_subscribe_store' in createStore() +const IS_DEV_STORE2 = 'dev4_get_internal_weak_map' in createStore() + +describe.skipIf(!IS_DEV_STORE)('[DEV-ONLY] dev-only methods rev2', () => { it('should return the values of all mounted atoms', () => { const store = createStore() const countAtom = atom(0) @@ -121,145 +124,16 @@ describe('[DEV-ONLY] dev-only methods rev2', () => { }) }) -describe('[DEV-ONLY] dev-only methods rev3', () => { - it('should return the values of all mounted atoms', () => { - const store = createStore() - if (!('dev3_get_mounted_atoms' in store)) { +describe.skipIf(!IS_DEV_STORE2)('[DEV-ONLY] dev-only methods rev4', () => { + it('should get atom value', () => { + const store = createStore() as any + if (!('dev4_get_internal_weak_map' in store)) { throw new Error('dev methods are not available') } const countAtom = atom(0) countAtom.debugLabel = 'countAtom' - const derivedAtom = atom((get) => get(countAtom) * 0) - const unsub = store.sub(derivedAtom, vi.fn()) - store.set(countAtom, 1) - const result = store.dev3_get_mounted_atoms() || [] - expect( - Array.from(result).sort( - (a, b) => Object.keys(a).length - Object.keys(b).length, - ), - ).toStrictEqual([ - { toString: expect.any(Function), read: expect.any(Function) }, - { - toString: expect.any(Function), - init: 0, - read: expect.any(Function), - write: expect.any(Function), - debugLabel: 'countAtom', - }, - ]) - unsub() - }) - - it('should get atom state of a given atom', () => { - const store = createStore() - if (!('dev3_get_atom_state' in store)) { - throw new Error('dev methods are not available') - } - const countAtom = atom(0) - const unsub = store.sub(countAtom, vi.fn()) - store.set(countAtom, 1) - const result = store.dev3_get_atom_state(countAtom) - expect(result).toHaveProperty('v', 1) - unsub() - }) - - it('should get atom deps', () => { - const store = createStore() - if (!('dev3_get_atom_deps' in store)) { - throw new Error('dev methods are not available') - } - const countAtom = atom(0) - const cb = vi.fn() - const unsub = store.sub(countAtom, cb) store.set(countAtom, 1) - const result = store.dev3_get_atom_deps(countAtom) - expect(result && Array.from(result)).toStrictEqual([]) - unsub() - }) - - it('should get atom deps 2', () => { - const store = createStore() - if (!('dev3_get_atom_deps' in store)) { - throw new Error('dev methods are not available') - } - const countAtom = atom(0) - const doubleAtom = atom((get) => get(countAtom) * 2) - const cb = vi.fn() - const unsub = store.sub(doubleAtom, cb) - store.set(countAtom, 1) - const result = store.dev3_get_atom_deps(doubleAtom) - expect(result && Array.from(result)).toStrictEqual([countAtom]) - unsub() - }) - - it('should restore atoms and its dependencies correctly', () => { - const store = createStore() - if (!('dev3_restore_atoms' in store)) { - throw new Error('dev methods are not available') - } - const countAtom = atom(0) - const derivedAtom = atom((get) => get(countAtom) * 2) - store.set(countAtom, 1) - store.dev3_restore_atoms([[countAtom, 2]]) - expect(store.get(countAtom)).toBe(2) - expect(store.get(derivedAtom)).toBe(4) - }) - - describe('dev3_subscribe_store', () => { - it('should call the callback when state changes', () => { - const store = createStore() - if (!('dev3_subscribe_store' in store)) { - throw new Error('dev methods are not available') - } - const callback = vi.fn() - const unsub = store.dev3_subscribe_store(callback) - const countAtom = atom(0) - const unsubAtom = store.sub(countAtom, vi.fn()) - store.set(countAtom, 1) - expect(callback).toHaveBeenNthCalledWith(1, { - type: 'set', - atom: countAtom, - }) - expect(callback).toHaveBeenCalledTimes(1) - unsub() - unsubAtom() - }) - - it('should call unsub only when atom is unsubscribed', () => { - const store = createStore() - if (!('dev3_subscribe_store' in store)) { - throw new Error('dev methods are not available') - } - const callback = vi.fn() - const unsub = store.dev3_subscribe_store(callback) - const countAtom = atom(0) - const unsubAtom = store.sub(countAtom, vi.fn()) - const unsubAtomSecond = store.sub(countAtom, vi.fn()) - unsubAtom() - expect(callback).toHaveBeenNthCalledWith(1, { type: 'unsub' }) - expect(callback).toHaveBeenCalledTimes(1) - unsub() - unsubAtomSecond() - }) - }) - - it('should unmount tree dependencies with store.get', async () => { - const store = createStore() - if (!('dev3_subscribe_store' in store)) { - throw new Error('dev methods are not available') - } - const countAtom = atom(0) - const derivedAtom = atom((get) => get(countAtom) * 2) - const anotherDerivedAtom = atom((get) => get(countAtom) * 3) - const callback = vi.fn() - const unsubStore = store.dev3_subscribe_store(() => { - // Comment this line to make the test pass - store.get(derivedAtom) - }) - const unsub = store.sub(anotherDerivedAtom, callback) - unsub() - unsubStore() - const result = Array.from(store.dev3_get_mounted_atoms() ?? []) - expect(result).toEqual([]) + const weakMap = store.dev4_get_internal_weak_map() + expect(weakMap.get(countAtom)?.s).toEqual({ v: 1 }) }) }) From 2d2f03a4a3d7455950586c9a32327a75c0d826f7 Mon Sep 17 00:00:00 2001 From: Daishi Kato Date: Mon, 8 Apr 2024 12:51:11 +0900 Subject: [PATCH 32/33] fix(utils): dev-only deprecation message (#2491) --- src/vanilla/utils/freezeAtom.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/vanilla/utils/freezeAtom.ts b/src/vanilla/utils/freezeAtom.ts index 945a3705b2..0c65405490 100644 --- a/src/vanilla/utils/freezeAtom.ts +++ b/src/vanilla/utils/freezeAtom.ts @@ -55,8 +55,10 @@ export function freezeAtom( export function freezeAtomCreator< CreateAtom extends (...args: unknown[]) => Atom, >(createAtom: CreateAtom): CreateAtom { - console.warn( - '[DEPRECATED] freezeAtomCreator is deprecated, define it on users end', - ) + if (import.meta.env?.MODE !== 'production') { + console.warn( + '[DEPRECATED] freezeAtomCreator is deprecated, define it on users end', + ) + } return ((...args: unknown[]) => freezeAtom(createAtom(...args))) as never } From 1b4eb45e23e41b966bef6375e5b72e89741373f0 Mon Sep 17 00:00:00 2001 From: daishi Date: Mon, 8 Apr 2024 12:59:02 +0900 Subject: [PATCH 33/33] 2.8.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 86148f77c8..9f3d0484c1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jotai", "private": true, - "version": "2.7.2", + "version": "2.8.0", "description": "👻 Primitive and flexible state management for React", "main": "./index.js", "types": "./index.d.ts",