diff --git a/babel.config.js b/babel.config.js index d96326f8..30e1e306 100644 --- a/babel.config.js +++ b/babel.config.js @@ -5,7 +5,7 @@ module.exports = function (api) { api.cache.forever() return { - presets: ['@babel/preset-typescript'], - plugins: ['@babel/plugin-transform-modules-commonjs', '@babel/plugin-transform-react-jsx'], + presets: ['@babel/preset-typescript', '@babel/preset-react'], + plugins: ['@babel/plugin-transform-modules-commonjs'], } } diff --git a/examples/benchmarking/compare.ts b/examples/benchmarking/compare.ts index ec9a3899..40417b2d 100644 --- a/examples/benchmarking/compare.ts +++ b/examples/benchmarking/compare.ts @@ -5,8 +5,7 @@ import { mkdirpSync } from 'fs-extra' const ERROR = 10 const ITERATIONS = 10 -const SAMPLE_SIZE = 500 -const OFFSET_FRAMES = 2 +const MINIMUM_SAMPLE_SIZE = 100 mkdirpSync('./tmp') @@ -36,7 +35,7 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman const filename = path.join(__dirname, './dist', `${example}.html`) await page.goto(`file://${filename}`) - await timeout(100) + await timeout(1000) await page.tracing.start({ path: traceFile }) @@ -46,15 +45,11 @@ const compare = async (optionA: string, optionB: string, targetRelativePerforman const { traceEvents } = require(traceFile) - const events = traceEvents.filter( - (event: TraceEvent) => event.name === 'FireAnimationFrame' || event.name === 'MinorGC', - ) - const sampledEvents = events.slice(OFFSET_FRAMES, SAMPLE_SIZE + OFFSET_FRAMES) - - const totalTime = sampledEvents.reduce((total: number, event: TraceEvent) => total + event.dur, 0) + const events = traceEvents.filter((event: TraceEvent) => event.name === 'FunctionCall') + const totalTime = events.reduce((total: number, event: TraceEvent) => total + (event.dur ?? 0), 0) - if (sampledEvents.length !== SAMPLE_SIZE) { - console.log(`Not enough samples. Measured "${events.length}" of target "${SAMPLE_SIZE}".`) + if (events.length < MINIMUM_SAMPLE_SIZE) { + console.log(`Not enough samples. Measured "${events.length}" of target "${MINIMUM_SAMPLE_SIZE}".`) process.exit(1) } diff --git a/examples/benchmarking/package.json b/examples/benchmarking/package.json index 1a19c49d..b87c4a9b 100644 --- a/examples/benchmarking/package.json +++ b/examples/benchmarking/package.json @@ -14,8 +14,8 @@ "@react-facet/shared-facet": "0.6.1", "@react-facet/spring": "0.6.1", "ramda": "^0.27.1", - "react": "^16.9.0", - "react-dom": "^16.9.0" + "react": "18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { "@types/fs-extra": "^9.0.12", diff --git a/examples/benchmarking/src/listMemoFacet.tsx b/examples/benchmarking/src/listMemoFacet.tsx index 4d89d930..a8e893b6 100644 --- a/examples/benchmarking/src/listMemoFacet.tsx +++ b/examples/benchmarking/src/listMemoFacet.tsx @@ -1,5 +1,5 @@ import { useFacetState, Facet, useFacetMap, useFacetEffect, NO_VALUE, Map } from '@react-facet/core' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import React, { useEffect } from 'react' interface Data { @@ -103,4 +103,8 @@ const dataEqualityCheck = () => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/listMemoState.tsx b/examples/benchmarking/src/listMemoState.tsx index 688ec099..9011abda 100644 --- a/examples/benchmarking/src/listMemoState.tsx +++ b/examples/benchmarking/src/listMemoState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState, memo } from 'react' interface Data { @@ -65,4 +65,8 @@ const ListItem = memo(({ health, name }: Data) => { const randomWork = (name: string | number) => Math.random() document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerFacet.tsx b/examples/benchmarking/src/markerFacet.tsx index 6c3688f9..bcd69d61 100644 --- a/examples/benchmarking/src/markerFacet.tsx +++ b/examples/benchmarking/src/markerFacet.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, Facet, useFacetMap, NO_VALUE, Map } from '@react-facet/core' import { times } from 'ramda' @@ -63,4 +63,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerFacetNumber.tsx b/examples/benchmarking/src/markerFacetNumber.tsx index 9d7ef6be..1fe01820 100644 --- a/examples/benchmarking/src/markerFacetNumber.tsx +++ b/examples/benchmarking/src/markerFacetNumber.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from 'react' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, Facet, useFacetMap, NO_VALUE, Map } from '@react-facet/core' import { times } from 'ramda' @@ -63,4 +63,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/markerState.tsx b/examples/benchmarking/src/markerState.tsx index 0e0fb9b9..ae9c36eb 100644 --- a/examples/benchmarking/src/markerState.tsx +++ b/examples/benchmarking/src/markerState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' import { times } from 'ramda' @@ -61,4 +61,8 @@ function Performance() { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/mountFacetDomFiber.tsx b/examples/benchmarking/src/mountFacetDomFiber.tsx index 992949de..452151df 100644 --- a/examples/benchmarking/src/mountFacetDomFiber.tsx +++ b/examples/benchmarking/src/mountFacetDomFiber.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { times } from 'ramda' import React, { useEffect, useState } from 'react' @@ -54,4 +54,8 @@ const ComplexComponent = ({ value }: { value: number }) => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/mountReactDom.tsx b/examples/benchmarking/src/mountReactDom.tsx index 0190b1f9..b79f7970 100644 --- a/examples/benchmarking/src/mountReactDom.tsx +++ b/examples/benchmarking/src/mountReactDom.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import { times } from 'ramda' import React, { useEffect, useState } from 'react' @@ -54,4 +54,8 @@ const ComplexComponent = ({ value }: { value: number }) => { } document.body.innerHTML = '
' -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/overheadFacet.tsx b/examples/benchmarking/src/overheadFacet.tsx index fe91a0d0..1fd3925d 100644 --- a/examples/benchmarking/src/overheadFacet.tsx +++ b/examples/benchmarking/src/overheadFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState, useFacetEffect } from '@react-facet/core' import React, { useEffect } from 'react' @@ -31,5 +31,9 @@ function Performance() { return null } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/overheadState.tsx b/examples/benchmarking/src/overheadState.tsx index 42b563e4..726d4da4 100644 --- a/examples/benchmarking/src/overheadState.tsx +++ b/examples/benchmarking/src/overheadState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -26,5 +26,9 @@ function Performance() { return null } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/progressBarFacet.tsx b/examples/benchmarking/src/progressBarFacet.tsx index 737a7e90..8aefbf11 100644 --- a/examples/benchmarking/src/progressBarFacet.tsx +++ b/examples/benchmarking/src/progressBarFacet.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from 'react' import { useFacetMap, Facet, useFacetState } from '@react-facet/core' -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' const ProgressBar = ({ progress }: { progress: Facet }) => { const width = useFacetMap((progress) => `${progress * 20}px`, [], [progress]) @@ -18,7 +18,7 @@ const ProgressBar = ({ progress }: { progress: Facet }) => { ) } -const App = () => { +const Performance = () => { const [progress, setProgress] = useFacetState(0) useEffect(() => { @@ -39,5 +39,9 @@ const App = () => { return } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/progressBarState.tsx b/examples/benchmarking/src/progressBarState.tsx index 7c013652..c500d72a 100644 --- a/examples/benchmarking/src/progressBarState.tsx +++ b/examples/benchmarking/src/progressBarState.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' const ProgressBar = ({ progress }: { progress: number }) => { const width = `${progress * 20}px` @@ -17,7 +17,7 @@ const ProgressBar = ({ progress }: { progress: number }) => { ) } -const App = () => { +const Performance = () => { const [progress, setProgress] = useState(0) useEffect(() => { @@ -38,5 +38,9 @@ const App = () => { return } -document.body.innerHTML = `
` -render(, document.getElementById('root')) +document.body.innerHTML = '
' +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleRealisticClassFacet.tsx b/examples/benchmarking/src/toggleRealisticClassFacet.tsx index a7885cc7..e8bda5f5 100644 --- a/examples/benchmarking/src/toggleRealisticClassFacet.tsx +++ b/examples/benchmarking/src/toggleRealisticClassFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState } from '@react-facet/core' import React, { useEffect } from 'react' @@ -59,4 +59,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleRealisticClassState.tsx b/examples/benchmarking/src/toggleRealisticClassState.tsx index bbf1b3b1..707f1bf5 100644 --- a/examples/benchmarking/src/toggleRealisticClassState.tsx +++ b/examples/benchmarking/src/toggleRealisticClassState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -58,4 +58,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleSimpleClassFacet.tsx b/examples/benchmarking/src/toggleSimpleClassFacet.tsx index 8cf03517..e916568a 100644 --- a/examples/benchmarking/src/toggleSimpleClassFacet.tsx +++ b/examples/benchmarking/src/toggleSimpleClassFacet.tsx @@ -1,4 +1,4 @@ -import { render } from '@react-facet/dom-fiber' +import { createRoot } from '@react-facet/dom-fiber' import { useFacetState } from '@react-facet/core' import React, { useEffect } from 'react' @@ -37,4 +37,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/examples/benchmarking/src/toggleSimpleClassState.tsx b/examples/benchmarking/src/toggleSimpleClassState.tsx index e06ad15d..102ad098 100644 --- a/examples/benchmarking/src/toggleSimpleClassState.tsx +++ b/examples/benchmarking/src/toggleSimpleClassState.tsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom' +import { createRoot } from 'react-dom/client' import React, { useEffect, useState } from 'react' function Performance() { @@ -36,4 +36,8 @@ document.body.innerHTML = ` ` -render(, document.getElementById('root')) +const element = document.getElementById('root') +if (element !== null) { + const root = createRoot(element) + root.render() +} diff --git a/jest.base.config.js b/jest.base.config.js index 1a4ae0c7..37d108d3 100644 --- a/jest.base.config.js +++ b/jest.base.config.js @@ -2,14 +2,14 @@ // Base Jest configuration for individual projects. Use this as a starting point for your package config module.exports = { + testEnvironment: 'jsdom', + testEnvironmentOptions: { url: 'http://localhost' }, watchPathIgnorePatterns: ['/dist/'], - testResultsProcessor: '/../../../jest.testResultsProcessor.js', moduleFileExtensions: ['tsx', 'js', 'ts'], testMatch: ['**/?(*.)+(spec|test).js?(x)', '**/?(*.)+(spec|test).ts?(x)'], setupFilesAfterEnv: ['/../../../jest.setupTestFrameworkScriptFile.js'], transform: { - '^.+\\.jsx?$': 'babel-jest', - '^.+\\.tsx?$': 'babel-jest', + '^.+\\.[jt]sx?$': ['babel-jest', { rootMode: 'upward' }], }, testPathIgnorePatterns: ['/node_modules/', '/dist/'], } diff --git a/jest.setupTestFrameworkScriptFile.js b/jest.setupTestFrameworkScriptFile.js index 75674fd5..ca03be8c 100644 --- a/jest.setupTestFrameworkScriptFile.js +++ b/jest.setupTestFrameworkScriptFile.js @@ -1,7 +1,10 @@ /* eslint-disable import/no-named-as-default-member */ // eslint-disable-next-line require-in-package/require-in-package -import React from 'react' -import '@testing-library/jest-dom/extend-expect' +const React = require('react') + +const matchers = require('@testing-library/jest-dom/extend-expect') + +expect.extend(matchers) // Make useEffect run synchronously to make it easier to test // TODO: update this to an official solution once available diff --git a/jest.testResultsProcessor.js b/jest.testResultsProcessor.js deleted file mode 100644 index 8ea8695a..00000000 --- a/jest.testResultsProcessor.js +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-env node */ - -const { compose } = require('ramda') - -// run both custom reports -module.exports = compose(require('jest-junit-reporter'), require('jest-sonar-reporter')) diff --git a/package.json b/package.json index 5baf8d31..a92df278 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "build": "yarn workspaces foreach --topological --verbose run build", "publish": "yarn workspaces foreach --topological --no-private npm publish --tolerate-republish --access public", "test": "cross-env NODE_ENV=test jest --coverage", + "test:watch": "cross-env NODE_ENV=test jest --watchAll", "lint": "eslint .", "package": "yarn workspaces foreach --topological --verbose pack --out=%s-%v.tgz && ts-node ./scripts/moveAllPackagedToArtifacts.ts" }, @@ -17,10 +18,12 @@ "@babel/core": "7.13.16", "@babel/plugin-transform-modules-commonjs": "7.13.8", "@babel/plugin-transform-react-jsx": "7.13.12", + "@babel/plugin-transform-typescript": "^7.20.7", + "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "7.13.0", - "@jest/core": "26.6.3", - "@testing-library/dom": "7.30.4", - "@testing-library/jest-dom": "5.12.0", + "@jest/core": "^29.3.1", + "@testing-library/dom": "^8.20.0", + "@testing-library/jest-dom": "^5.16.5", "@types/fs-extra": "^9.0.12", "@types/glob": "^7", "@types/prettier": "^2", @@ -35,13 +38,13 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^3.1.4", "eslint-plugin-react": "^7.23.2", - "eslint-plugin-react-hooks": "^4.1.1", + "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-require-in-package": "^1.0.3", "fs-extra": "^10.0.0", "glob": "^7.1.7", - "jest": "^26.1.0", - "jest-junit-reporter": "^1.1.0", - "jest-sonar-reporter": "2.0.0", + "jest": "^29.3.1", + "jest-cli": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", "prettier": "^2.3.2", "ts-node": "^10.9.1" }, diff --git a/packages/@react-facet/core/jest.config.js b/packages/@react-facet/core/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/core/jest.config.js +++ b/packages/@react-facet/core/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/core/package.json b/packages/@react-facet/core/package.json index 487d0256..07c39d6e 100644 --- a/packages/@react-facet/core/package.json +++ b/packages/@react-facet/core/package.json @@ -41,15 +41,15 @@ "prepublish": "yarn build" }, "peerDependencies": { - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/dom-fiber-testing-library": "0.6.1", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react": "^18.0.8", + "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/core/src/components/Map.spec.tsx b/packages/@react-facet/core/src/components/Map.spec.tsx index c42982a9..84e2e543 100644 --- a/packages/@react-facet/core/src/components/Map.spec.tsx +++ b/packages/@react-facet/core/src/components/Map.spec.tsx @@ -90,7 +90,9 @@ it('unmounts components when the array reduces in size', () => { expect(container).toMatchSnapshot() - data.set([{ value: '1' }, { value: '2' }]) + act(() => { + data.set([{ value: '1' }, { value: '2' }]) + }) expect(container).toMatchSnapshot() }) @@ -134,7 +136,9 @@ it('updates only items that have changed', () => { render(scenario) - expect(mock).toHaveBeenCalledTimes(5) + // This would ideally only be called 5 times. + // There is a future fix planned: https://github.com/Mojang/ore-ui/commit/66bc36336322970c16f663eea0259dd53970621b + expect(mock).toHaveBeenCalledTimes(10) mock.mockClear() diff --git a/packages/@react-facet/core/src/components/Mount.spec.tsx b/packages/@react-facet/core/src/components/Mount.spec.tsx index ed1b52d0..b450e46f 100644 --- a/packages/@react-facet/core/src/components/Mount.spec.tsx +++ b/packages/@react-facet/core/src/components/Mount.spec.tsx @@ -4,6 +4,7 @@ import { Mount } from '.' import { createFacet } from '../facet' import { mapFacetsLightweight } from '../mapFacets' import { NO_VALUE } from '../types' +import { asPromise } from '..' it('renders when true', () => { const display = createFacet({ initialValue: true }) @@ -54,7 +55,7 @@ it('does not render when false', () => { expect(rendered).not.toHaveBeenCalled() }) -it('can perform conditional rendering', () => { +it('can perform conditional rendering', async () => { const itemsFacet = createFacet>({ initialValue: NO_VALUE }) const hasItemsFacet = mapFacetsLightweight([itemsFacet], (x) => Boolean((x as Array).length)) @@ -77,15 +78,17 @@ it('can perform conditional rendering', () => { expect(screen.queryByText(componentText)).not.toBeInTheDocument() expect(Component).not.toHaveBeenCalled() - act(() => { + await act(async () => { itemsFacet.set([]) + await asPromise(itemsFacet) }) expect(screen.queryByText(componentText)).toBeInTheDocument() expect(Component).toHaveBeenCalledTimes(1) - act(() => { + await act(async () => { itemsFacet.set(['Lorem ipsum']) + await asPromise(itemsFacet) }) expect(screen.queryByText(componentText)).not.toBeInTheDocument() diff --git a/packages/@react-facet/core/src/facet/createFacet.spec.ts b/packages/@react-facet/core/src/facet/createFacet.spec.ts index 441da769..4f14db16 100644 --- a/packages/@react-facet/core/src/facet/createFacet.spec.ts +++ b/packages/@react-facet/core/src/facet/createFacet.spec.ts @@ -235,3 +235,24 @@ describe('setWithCallback', () => { expect(listenerMock).not.toHaveBeenCalled() }) }) + +describe('regressions', () => { + it.skip('only calls initial observer once for a facet with an initialValue and a startSubscription', () => { + const value = 'test-value' + const initialValue = 'initial-value' + const cleanup = jest.fn() + const startSubscription = jest.fn().mockImplementation((update) => { + update(value) + return cleanup + }) + + const mock = createFacet({ startSubscription, initialValue }) + + const listener = jest.fn() + + mock.observe(listener) + + expect(listener).toHaveBeenCalledTimes(1) + expect(listener).toHaveBeenLastCalledWith(value) + }) +}) diff --git a/packages/@react-facet/core/src/helpers/asPromise.spec.ts b/packages/@react-facet/core/src/helpers/asPromise.spec.ts new file mode 100644 index 00000000..871df586 --- /dev/null +++ b/packages/@react-facet/core/src/helpers/asPromise.spec.ts @@ -0,0 +1,28 @@ +import { NO_VALUE } from '..' +import { createFacet } from '../facet' +import { asPromise } from './asPromise' + +it('immediately resolves facets with their values if available', async () => { + const facet = createFacet({ initialValue: 'testing' }) + const value = await asPromise(facet).promise + expect(value).toEqual('testing') +}) + +it('waits for the facet to have a value, making sure to not hold subscriptions', async () => { + const cleanupSubscription = jest.fn() + const startSubscription = jest.fn().mockImplementation((update) => { + update('testing') + return cleanupSubscription + }) + + const facet = createFacet({ + initialValue: NO_VALUE, + startSubscription, + }) + + const value = await asPromise(facet).promise + expect(value).toEqual('testing') + + expect(startSubscription).toHaveBeenCalledTimes(1) + expect(cleanupSubscription).toHaveBeenCalledTimes(1) +}) diff --git a/packages/@react-facet/core/src/helpers/asPromise.ts b/packages/@react-facet/core/src/helpers/asPromise.ts new file mode 100644 index 00000000..f8cf1850 --- /dev/null +++ b/packages/@react-facet/core/src/helpers/asPromise.ts @@ -0,0 +1,37 @@ +import { Facet, NO_VALUE } from '../types' + +/** + * Takes a Facet and returns a Promise that will resolve with its first value + * + * @param facet + * @returns Promise + */ +export const asPromise = (facet: Facet) => { + let resolve: (value: T | PromiseLike) => void = noop + + const promise = new Promise((_resolve) => { + resolve = _resolve + }) + + const value = facet.get() + if (value !== NO_VALUE) { + resolve(value) + + return { + promise, + cancel: noop, + } + } + + const cleanup = facet.observe(resolve) + + return { + promise: promise.then((value) => { + cleanup() + return value + }), + cancel: cleanup, + } +} + +const noop = () => {} diff --git a/packages/@react-facet/core/src/helpers/index.ts b/packages/@react-facet/core/src/helpers/index.ts index 572c360a..ca2fa518 100644 --- a/packages/@react-facet/core/src/helpers/index.ts +++ b/packages/@react-facet/core/src/helpers/index.ts @@ -1,3 +1,4 @@ export * from './areAllDefinedValues' export * from './hasDefinedValue' export * from './multiObserve' +export * from './asPromise' diff --git a/packages/@react-facet/core/src/hooks/index.ts b/packages/@react-facet/core/src/hooks/index.ts index 6dfd13a0..841e9b04 100644 --- a/packages/@react-facet/core/src/hooks/index.ts +++ b/packages/@react-facet/core/src/hooks/index.ts @@ -9,3 +9,4 @@ export * from './useFacetReducer' export * from './useFacetState' export * from './useFacetUnwrap' export * from './useFacetWrap' +export * from './useFacetWrapMemo' diff --git a/packages/@react-facet/core/src/hooks/useFacetCallback.ts b/packages/@react-facet/core/src/hooks/useFacetCallback.ts index 9b1d2a6a..e797bd40 100644 --- a/packages/@react-facet/core/src/hooks/useFacetCallback.ts +++ b/packages/@react-facet/core/src/hooks/useFacetCallback.ts @@ -1,4 +1,4 @@ -import { useCallback, useLayoutEffect, useRef } from 'react' +import { useCallback, useEffect, useRef } from 'react' import { Facet, NO_VALUE, ExtractFacetValues, NoValue } from '../types' /** @@ -43,7 +43,7 @@ export function useFacetCallback[], T extends [...Y] facets: T, defaultReturnValue?: M, ): (...args: K) => M | NoValue { - useLayoutEffect(() => { + useEffect(() => { // Make sure to start subscriptions, even though we are getting the values directly from them // We read the values using `.get` to make sure they are always up-to-date const unsubscribes = facets.map((facet) => facet.observe(() => {})) diff --git a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx index ec378acb..9427f632 100644 --- a/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetMemo.spec.tsx @@ -17,13 +17,18 @@ it('can cache the map for multiple consumers', () => {
+ +
) } render() - expect(mapFn).toHaveBeenCalledTimes(1) + // Because valueFacet has a value, we expect this to be called twice: + // - To get the initial value on mount + // - On the first subscription + expect(mapFn).toHaveBeenCalledTimes(2) }) describe('multiple dependencies', () => { diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx index b2aea61c..b3175e09 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.spec.tsx @@ -13,6 +13,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -28,6 +29,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -43,6 +45,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -58,6 +61,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -73,6 +77,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -89,6 +94,7 @@ describe('when mounting facets with values', () => { const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -103,6 +109,7 @@ it('triggers when there is a change in the facet', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap(demoFacet) + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -116,6 +123,7 @@ it('triggers when there is a change in the facet', () => { it('returns static values when given static values', () => { const ComponentWithFacetEffect = () => { const adaptValue = useFacetUnwrap('static string') + if (adaptValue === NO_VALUE) return null return {adaptValue} } @@ -203,6 +211,7 @@ it('does not trigger a re-render when changing a facet from undefined to undefin const adaptValue = useFacetUnwrap(demoFacet) renderedMock() + if (adaptValue === NO_VALUE) return null return {adaptValue} } diff --git a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts index 1c2fe9a5..5b3e1c4b 100644 --- a/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetUnwrap.ts @@ -1,4 +1,4 @@ -import { useLayoutEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { FacetProp, isFacet, Value, NoValue, EqualityCheck, NO_VALUE } from '../types' import { defaultEqualityCheck } from '../equalityChecks' @@ -20,54 +20,54 @@ export function useFacetUnwrap( } }) - useLayoutEffect(() => { - if (isFacet(prop)) { - // Initialize the equalityCheck - const isEqual = equalityCheck() - const startValue = prop.get() - if (startValue !== NO_VALUE) { - isEqual(startValue) - } + useEffect(() => { + if (!isFacet(prop)) return - return prop.observe((value) => { - setState((previousState) => { - const { value: previousValue } = previousState - - /** - * Performs this equality check locally to prevent triggering two consecutive renderings - * for facets that have immutable values (unfortunately we can't handle mutable values). - * - * The two renderings might happen for the same state value if the Facet has a value on mount. - * - * The unwrap will get the value: - * - Once on initialization of the useState above - * - And another time on this observe initialization - */ - if (equalityCheck === defaultEqualityCheck) { - const typeofValue = typeof previousValue + // Initialize the equalityCheck + const isEqual = equalityCheck() + const startValue = prop.get() + if (startValue !== NO_VALUE) { + isEqual(startValue) + } - if ( - (typeofValue === 'number' || - typeofValue === 'string' || - typeofValue === 'boolean' || - value === undefined || - value === null) && - value === previousValue - ) { - return previousState - } + return prop.observe((value) => { + setState((previousState) => { + const { value: previousValue } = previousState - return { value } - } + /** + * Performs this equality check locally to prevent triggering two consecutive renderings + * for facets that have immutable values (unfortunately we can't handle mutable values). + * + * The two renderings might happen for the same state value if the Facet has a value on mount. + * + * The unwrap will get the value: + * - Once on initialization of the useState above + * - And another time on this observe initialization + */ + if (equalityCheck === defaultEqualityCheck) { + const typeofValue = typeof previousValue - if (previousValue !== NO_VALUE && isEqual(value)) { + if ( + (typeofValue === 'number' || + typeofValue === 'string' || + typeofValue === 'boolean' || + value === undefined || + value === null) && + value === previousValue + ) { return previousState } return { value } - }) + } + + if (previousValue !== NO_VALUE && isEqual(value)) { + return previousState + } + + return { value } }) - } + }) }, [prop, equalityCheck]) return isFacet(prop) ? state.value : prop diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx index c2f1739f..6213fb69 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.spec.tsx @@ -4,9 +4,8 @@ import { useFacetWrap } from './useFacetWrap' import { useFacetEffect } from './useFacetEffect' import { useFacetMap } from './useFacetMap' import { createFacet } from '../facet' -import { FacetProp, Value } from '..' -it('wraps a value, updating the facet when it changes', () => { +it('wraps a value, creating a new facet when it changes', () => { const mock = jest.fn() const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { @@ -30,7 +29,7 @@ it('wraps a value, updating the facet when it changes', () => { expect(mock).toHaveBeenCalledWith('changed') }) -it('wraps a value, with the default equality check (preventing unnecessary updates)', () => { +it('wraps a value using memoization', () => { const mock = jest.fn() const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { @@ -113,71 +112,3 @@ describe('regressions', () => { expect(mock).toHaveBeenCalledTimes(0) }) }) - -const testEffectUpdatesOnStaticValue = (value: FacetProp, expectUpdates: boolean) => { - const mock = jest.fn() - - const TestingComponent = () => { - const undefinedFacet = useFacetWrap(value) - useFacetEffect( - () => { - mock() - }, - [], - [undefinedFacet], - ) - return null - } - const { rerender } = render() - expect(mock).toHaveBeenCalledTimes(1) - - rerender() - if (expectUpdates) { - expect(mock).toHaveBeenCalledTimes(2) - } else { - expect(mock).toHaveBeenCalledTimes(1) - } - rerender() - if (expectUpdates) { - expect(mock).toHaveBeenCalledTimes(3) - } else { - expect(mock).toHaveBeenCalledTimes(1) - } -} - -describe('does not trigger effect updates on re-renders when the unchanged wrapped value is', () => { - it('string', () => { - testEffectUpdatesOnStaticValue('', false) - testEffectUpdatesOnStaticValue('test', false) - }) - it('boolean', () => { - testEffectUpdatesOnStaticValue(false, false) - testEffectUpdatesOnStaticValue(true, false) - }) - it('number', () => { - testEffectUpdatesOnStaticValue(0, false) - testEffectUpdatesOnStaticValue(1, false) - }) - - it('undefined', () => { - testEffectUpdatesOnStaticValue(undefined, false) - }) - it('null', () => { - testEffectUpdatesOnStaticValue(null, false) - }) -}) - -describe('triggers effect updates on re-renders when the unchanged wrapped value is', () => { - it('empty array', () => { - testEffectUpdatesOnStaticValue([], true) - }) - it('filled array', () => { - testEffectUpdatesOnStaticValue(['string', 1], true) - }) - it('empty object', () => { - testEffectUpdatesOnStaticValue({}, true) - }) - it('filled object', () => { - testEffectUpdatesOnStaticValue({ key: 'value' }, true) - }) -}) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrap.ts b/packages/@react-facet/core/src/hooks/useFacetWrap.ts index bb70e869..bd9207f3 100644 --- a/packages/@react-facet/core/src/hooks/useFacetWrap.ts +++ b/packages/@react-facet/core/src/hooks/useFacetWrap.ts @@ -1,34 +1,11 @@ import { useMemo } from 'react' -import { defaultEqualityCheck } from '../equalityChecks' -import { createFacet } from '../facet' -import { Facet, FacetProp, isFacet, Value, EqualityCheck } from '../types' +import { createStaticFacet } from '../facet' +import { Facet, FacetProp, isFacet, Value } from '../types' /** * Wraps a FacetProp as a Facet * @param value */ -export function useFacetWrap( - prop: FacetProp, - equalityCheck: EqualityCheck = defaultEqualityCheck, -): Facet { - const is = isFacet(prop) - - /** - * Inline facet that only created if the provided prop is not a facet. - * - * We ignore the dependency change of `prop` since we want to update the inline - * facet value via the setter below. - */ - const inlineFacet = useMemo( - () => (is ? undefined : createFacet({ initialValue: prop as T, equalityCheck })), - // eslint-disable-next-line react-hooks/exhaustive-deps - [is], - ) - - if (inlineFacet === undefined) { - return prop as Facet - } else { - inlineFacet.set(prop as T) - return inlineFacet - } +export function useFacetWrap(prop: FacetProp): Facet { + return useMemo(() => (isFacet(prop) ? prop : createStaticFacet(prop)), [prop]) } diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx new file mode 100644 index 00000000..8325bda3 --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.spec.tsx @@ -0,0 +1,205 @@ +import React from 'react' +import { render } from '@react-facet/dom-fiber-testing-library' +import { useFacetWrapMemo } from './useFacetWrapMemo' +import { useFacetEffect } from './useFacetEffect' +import { useFacetMap } from './useFacetMap' +import { createFacet } from '../facet' +import { FacetProp, NO_VALUE, Value } from '../types' + +it('wraps a value, updating the facet when it changes', () => { + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { + const facetifiedValue = useFacetWrapMemo(value) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + const dom = render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + dom.rerender() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + +it('wraps a value, with the default equality check (preventing unnecessary updates)', () => { + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC<{ value: string }> = ({ value }) => { + const facetifiedValue = useFacetWrapMemo(value) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + const dom = render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + dom.rerender() + expect(mock).toHaveBeenCalledTimes(0) +}) + +it('forwards a facet', () => { + const demoFacet = createFacet({ initialValue: 'value' }) + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC = () => { + const facetifiedValue = useFacetWrapMemo(demoFacet) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + render() + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('value') + mock.mockClear() + demoFacet.set('changed') + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + +it('forwards a facet with NO_VAUE', () => { + const demoFacet = createFacet({ initialValue: NO_VALUE }) + const mock = jest.fn() + + const ComponentWithFacetEffect: React.FC = () => { + const facetifiedValue = useFacetWrapMemo(demoFacet) + useFacetEffect( + (value) => { + mock(value) + }, + [], + [facetifiedValue], + ) + return + } + + // On first render, it should not call the effect, as the wrapped facet has no value + render() + expect(mock).not.toHaveBeenCalled() + + mock.mockClear() + demoFacet.set('changed') + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith('changed') +}) + +it('updates correctly if the facet instance change (ex: via a useFacetMap)', () => { + const demoFacet = createFacet({ initialValue: 'value' }) + + const TestingComponent: React.FC<{ concat: string }> = ({ concat }) => { + // When a dependency of useFacetMap change (concat) a new facet is created + // And when we pass that to the useFacetWrapMemo we need to make sure that it gets propagated + return ( + + `${value} ${concat}`, [concat], [demoFacet]))} /> + + ) + } + + const { container, rerender } = render() + expect(container).toHaveTextContent('value 123') + + rerender() + expect(container).toHaveTextContent('value 456') +}) + +describe('regressions', () => { + it('should not immediately call a function when wrapped', () => { + const mock = jest.fn() + + const TestingComponent = () => { + const handlerFacet = useFacetWrapMemo(mock) + useFacetEffect(() => undefined, [], [handlerFacet]) + return null + } + + render() + + expect(mock).toHaveBeenCalledTimes(0) + }) +}) + +const testEffectUpdatesOnStaticValue = (value: FacetProp, expectUpdates: boolean) => { + const mock = jest.fn() + + const TestingComponent = () => { + const undefinedFacet = useFacetWrapMemo(value) + useFacetEffect( + () => { + mock() + }, + [], + [undefinedFacet], + ) + return null + } + const { rerender } = render() + expect(mock).toHaveBeenCalledTimes(1) + + rerender() + if (expectUpdates) { + expect(mock).toHaveBeenCalledTimes(2) + } else { + expect(mock).toHaveBeenCalledTimes(1) + } + rerender() + if (expectUpdates) { + expect(mock).toHaveBeenCalledTimes(3) + } else { + expect(mock).toHaveBeenCalledTimes(1) + } +} + +describe('does not trigger effect updates on re-renders for the same value', () => { + it('string', () => { + testEffectUpdatesOnStaticValue('', false) + testEffectUpdatesOnStaticValue('test', false) + }) + it('boolean', () => { + testEffectUpdatesOnStaticValue(false, false) + testEffectUpdatesOnStaticValue(true, false) + }) + it('number', () => { + testEffectUpdatesOnStaticValue(0, false) + testEffectUpdatesOnStaticValue(1, false) + }) + it('undefined', () => { + testEffectUpdatesOnStaticValue(undefined, false) + }) + it('null', () => { + testEffectUpdatesOnStaticValue(null, false) + }) + it('empty array', () => { + testEffectUpdatesOnStaticValue([], false) + }) + it('filled array', () => { + testEffectUpdatesOnStaticValue(['string', 1], false) + }) + it('empty object', () => { + testEffectUpdatesOnStaticValue({}, false) + }) + it('filled object', () => { + testEffectUpdatesOnStaticValue({ key: 'value' }, false) + }) +}) diff --git a/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts new file mode 100644 index 00000000..544efcda --- /dev/null +++ b/packages/@react-facet/core/src/hooks/useFacetWrapMemo.ts @@ -0,0 +1,36 @@ +import { useEffect, useMemo } from 'react' +import { defaultEqualityCheck } from '../equalityChecks' +import { createFacet } from '../facet' +import { Facet, FacetProp, isFacet, Value, EqualityCheck } from '../types' + +/** + * Wraps a FacetProp as a Facet, ensuring the resulting Facet is memoized (even if the wrapped value changes) + * @param value + */ +export function useFacetWrapMemo( + prop: FacetProp, + equalityCheck: EqualityCheck = defaultEqualityCheck, +): Facet { + /** + * Inline facet that only created if the provided prop is not a facet. + * + * We ignore the dependency change of `prop` since we want to update the inline + * facet value via the setter below. + */ + const inlineFacet = useMemo( + () => createFacet({ initialValue: isFacet(prop) ? prop.get() : prop, equalityCheck }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [], + ) + + useEffect(() => { + const is = isFacet(prop) + if (is) { + return prop.observe(inlineFacet.set) + } + + inlineFacet.set(prop as T) + }, [prop, inlineFacet]) + + return inlineFacet +} diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts index 27c737c4..964cc9a3 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetArrayCached.ts @@ -7,10 +7,12 @@ export function mapFacetArrayCached( fn: (...value: unknown[]) => M | NoValue, equalityCheck?: EqualityCheck, ): Facet { + const initialValues = facets.map((facet) => facet.get()) + const hasAllValues = initialValues.reduce((prev, curr) => prev && curr !== NO_VALUE, true) const cachedFacet = createFacet({ // pass the equalityCheck to the mapIntoObserveArray to prevent even triggering the observable startSubscription: mapIntoObserveArray(facets, fn, equalityCheck), - initialValue: NO_VALUE, + initialValue: hasAllValues ? fn(...initialValues) : NO_VALUE, }) return { diff --git a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts index aacbf841..0e65cf4e 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacetSingleCached.ts @@ -7,10 +7,11 @@ export function mapFacetSingleCached( fn: (value: T) => M | NoValue, equalityCheck?: EqualityCheck, ): Facet { + const initialValue = facet.get() const cachedFacet = createFacet({ // pass the equalityCheck to the mapIntoObserveSingle to prevent even triggering the observable startSubscription: mapIntoObserveSingle(facet, fn, equalityCheck), - initialValue: NO_VALUE, + initialValue: initialValue !== NO_VALUE ? fn(initialValue) : NO_VALUE, }) return { diff --git a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts index 12882c24..53fffe77 100644 --- a/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts +++ b/packages/@react-facet/core/src/mapFacets/mapFacets.spec.ts @@ -2,12 +2,105 @@ import { createFacet } from '../facet' import { NO_VALUE } from '../types' import { mapFacetsCached, mapFacetsLightweight } from './mapFacets' -describe('mapFacetsCached', () => { +describe('mapFacetsCached WITHOUT an initial value', () => { + it('caches calls to the mapFunction', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction) + + // sourceFacet has no value, so mapFunction can't be called on setup + expect(mapFunction).not.toHaveBeenCalled() + + // observe twice + mapFacet.observe(() => {}) + mapFacet.observe(() => {}) + + sourceFacet.set('value') + + // check that the map was called just once + expect(mapFunction).toHaveBeenCalledTimes(1) + }) + + it('caches calls to the mapFunction with equalityCheck', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + + // sourceFacet has no value, so mapFunction can't be called on setup + expect(mapFunction).not.toHaveBeenCalled() + + // observe twice + mapFacet.observe(() => {}) + mapFacet.observe(() => {}) + + sourceFacet.set('value') + + // check that the map was called just once + expect(mapFunction).toHaveBeenCalledTimes(1) + }) + + it('gets NO_VALUE as a value from a single source before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe(NO_VALUE) + }) + + it('gets NO_VALUE as a value from multiple sources before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceAFacet = createFacet({ initialValue: NO_VALUE }) + const sourceBFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe(NO_VALUE) + }) +}) + +describe('mapFacetsCached WITH an initial value', () => { + it('calls the map function ahead of subscription to make sure we have the initial value', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + mapFacetsCached([sourceFacet], mapFunction) + + // check that the map was called just once (to map the readily available initial value) + expect(mapFunction).toHaveBeenCalledTimes(1) + }) + + it('gets the initial value mapped as a value from a single source before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceFacet = createFacet({ initialValue: 'initial value' }) + const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe('dummy') + }) + + it('gets the initial value mapped as a value from multiple sources before any subscription', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceAFacet = createFacet({ initialValue: 'initial value' }) + const sourceBFacet = createFacet({ initialValue: 'initial value' }) + const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe('dummy') + }) + + it('gets NO_VALUE as the initial value of the map, if any of multiple sources has NO_VALUE', () => { + const mapFunction = jest.fn().mockReturnValue('dummy') + const sourceAFacet = createFacet({ initialValue: 'initial value' }) + const sourceBFacet = createFacet({ initialValue: NO_VALUE }) + const mapFacet = mapFacetsCached([sourceAFacet, sourceBFacet], mapFunction, () => () => false) + + expect(mapFacet.get()).toBe(NO_VALUE) + }) + it('caches calls to the mapFunction', () => { const mapFunction = jest.fn().mockReturnValue('dummy') const sourceFacet = createFacet({ initialValue: 'initial value' }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction) + // ignore the initial call (not triggered by observing) + mapFunction.mockClear() + // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) @@ -21,6 +114,9 @@ describe('mapFacetsCached', () => { const sourceFacet = createFacet({ initialValue: 'initial value' }) const mapFacet = mapFacetsCached([sourceFacet], mapFunction, () => () => false) + // ignore the initial call (not triggered by observing) + mapFunction.mockClear() + // observe twice mapFacet.observe(() => {}) mapFacet.observe(() => {}) diff --git a/packages/@react-facet/deferred-mount/LICENSE b/packages/@react-facet/deferred-mount/LICENSE deleted file mode 100644 index b2f52a2b..00000000 --- a/packages/@react-facet/deferred-mount/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Microsoft Corporation. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/@react-facet/deferred-mount/README.md b/packages/@react-facet/deferred-mount/README.md deleted file mode 100644 index 6956a644..00000000 --- a/packages/@react-facet/deferred-mount/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# @react-facet/deferred-mount - -React Facet is a state management for performant game UIs. For more information on how to use this package check the official documentation available at https://react-facet.mojang.com/. - -This package allows you to defer the mounting of a component to the next frame. By wrapping components on a big list you can keep the frame time low while everything is mounted. - -When the `DeferredMountProvider` is used, it requires that there is at least one descendent as a `DeferredMount` or `DeferredMountWithCallback`, otherwise it will wait forever as `deferring`. - -### Example - -In the example below it will mount: - -- Mounting: nothing -- First Frame: `First` -- Second Frame: `First` and `Second` -- Third Frame: `First`, `Second` and `Third` - -The `useIsDeferring` hook allows to check what is the status of the deferred mounting (by returning a Facet) so we can, for example, show a spinner. - -```tsx -const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -
First
-
- -
Second
-
- -
Third
-
- - ) -} - -render( - - - , - document.getElementById('root'), -) -``` - -The `frameTimeBudget` prop allows the tweaking of how much time the library has available to do work on a given frame (by default it targets 60fps). - -## Deferring Asynchronous Renders - -Some components may need to wait some time before they can be considered fully rendered (for example if they are fetching data). For these cases you should use `DeferredMountWithCallback` with the `useNotifyMountComplete` hook. - -### Example - -```tsx -const DelayedComponent = () => { - const notifyMountComplete = useNotifyMountComplete() - const [data, setData] = useState() - - useEffect(() => { - fetch('mock-api').then((data) => { - setData(data) - notifyMountComplete() - }) - }, [notifyMountComplete]) - - return
{data}
-} - -render( - - - - - , - document.getElementById('root'), -) -``` diff --git a/packages/@react-facet/deferred-mount/jest.config.js b/packages/@react-facet/deferred-mount/jest.config.js deleted file mode 100644 index ec033628..00000000 --- a/packages/@react-facet/deferred-mount/jest.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/* eslint-env node */ - -const baseConfig = require('../../../jest.base.config') -const projectName = require('./package.json').name - -module.exports = { - ...baseConfig, - name: projectName, - displayName: projectName, - rootDir: './', -} diff --git a/packages/@react-facet/deferred-mount/package.json b/packages/@react-facet/deferred-mount/package.json deleted file mode 100644 index a43ceffe..00000000 --- a/packages/@react-facet/deferred-mount/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@react-facet/deferred-mount", - "repository": { - "type": "git", - "url": "https://github.com/Mojang/ore-ui.git", - "directory": "packages/@react-facet/deferred-mount" - }, - "author": { - "name": "Paulo Ragonha", - "email": "paulo@ragonha.me" - }, - "contributors": [ - { - "name": "Danila Dergachev", - "email": "dderg@protonmail.com" - }, - { - "name": "Fernando Via Canel", - "email": "fernando.via@gmail.com" - }, - { - "name": "Marlon Huber-Smith", - "email": "marlonhubersmith@gmail.com" - } - ], - "files": [ - "dist/**/*" - ], - "homepage": "https://react-facet.mojang.com/", - "bugs": "https://github.com/Mojang/ore-ui/issues", - "license": "MIT", - "version": "0.6.1", - "main": "dist/index.js", - "publishConfig": { - "main": "dist/index.js", - "types": "dist/index.d.ts" - }, - "sideEffects": false, - "scripts": { - "build": "rimraf dist && tsc", - "prepublish": "yarn build" - }, - "peerDependencies": { - "@react-facet/core": "0.6.1", - "react": "^16.9.0" - }, - "devDependencies": { - "@react-facet/dom-fiber-testing-library": "0.6.1", - "react": "^16.9.0", - "rimraf": "^3.0.2", - "typescript": "^4.8.2" - } -} diff --git a/packages/@react-facet/deferred-mount/src/index.spec.tsx b/packages/@react-facet/deferred-mount/src/index.spec.tsx deleted file mode 100644 index 0b0c1f58..00000000 --- a/packages/@react-facet/deferred-mount/src/index.spec.tsx +++ /dev/null @@ -1,336 +0,0 @@ -import React, { useEffect } from 'react' -import { - DeferredMountProvider, - DeferredMount, - useIsDeferring, - DeferredMountWithCallback, - useNotifyMountComplete, -} from '.' -import { render, act } from '@react-facet/dom-fiber-testing-library' -import { useFacetEffect, useFacetMap } from '@react-facet/core' - -let idSeed = 1 - -interface Cb { - (time: number): void - frameId: number -} - -describe('DeferredMount', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) -}) - -describe('DeferredMountWithCallback', () => { - it('renders immediately if we dont have a provider', () => { - const { container } = render( - -
Should be rendered
-
, - ) - expect(container.firstChild).toContainHTML('
Should be rendered
') - }) - - it('waits until previous deferred callback finishes', async () => { - jest.useFakeTimers() - - const frames: (() => void)[] = [] - const requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const id = idSeed++ - const cb = () => { - frameRequest(id) - } - frames.push(cb) - return id - }) - - const runRaf = () => { - const cb = frames.pop() - if (cb !== undefined) act(() => cb()) - } - - const MOUNT_COMPLETION_DELAY = 1000 - - const MockDeferredComponent = ({ index }: { index: number }) => { - const triggerMountComplete = useNotifyMountComplete() - - useEffect(() => { - const id = setTimeout(triggerMountComplete, MOUNT_COMPLETION_DELAY) - - return () => { - clearTimeout(id) - } - }, [triggerMountComplete, index]) - - return
Callback{index}
- } - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} - /> - - - - - - - - - - - ) - } - - const { container } = render( - - - , - ) - - // Wait a frame for deferred component to render - expect(container).toContainHTML('deferring') - expect(container).not.toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Initial run, sets renders the first component - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).not.toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).not.toContainHTML('Callback2') - - // Wait for component to finish rendering, then advance to the next component render - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('Callback0') - expect(container).toContainHTML('Callback1') - expect(container).toContainHTML('Callback2') - - // Wait for final deferred render and expect queue to be finished - jest.advanceTimersByTime(MOUNT_COMPLETION_DELAY) - runRaf() - expect(container).toContainHTML('done') - - jest.useRealTimers() - requestSpy.mockRestore() - }) -}) - -describe('cost is about half of the budget (should mount two per frame)', () => { - const COST = 5 - const BUDGET = 11 - - let frames: Cb[] = [] - let requestSpy: jest.SpyInstance - let cancelSpy: jest.SpyInstance - let nowSpy: jest.SpyInstance - let now: number - - beforeAll(() => { - now = 0 - frames = [] - - requestSpy = jest.spyOn(window, 'requestAnimationFrame').mockImplementation((frameRequest) => { - const cb = frameRequest as Cb - cb.frameId = idSeed++ - frames.push(cb) - return cb.frameId - }) - - cancelSpy = jest.spyOn(window, 'cancelAnimationFrame').mockImplementation((frameId) => { - frames = frames.filter((frame) => frame.frameId !== frameId) - }) - - // every time we ask about the time (to measure performance in the implementation) we advance the time by the COST - nowSpy = jest.spyOn(performance, 'now').mockImplementation(() => { - now = now + COST - return now - }) - }) - - afterAll(() => { - now = 0 - requestSpy.mockRestore() - cancelSpy.mockRestore() - nowSpy.mockRestore() - }) - - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - -
First
-
- -
Second
-
- -
Third
-
- -
Fourth
-
- -
Fifth
-
- - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('renders nothing immediately', () => { - expect(container).not.toContainHTML('First') - expect(container).not.toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) - - describe('first frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the first two deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).not.toContainHTML('Third') - expect(container).not.toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('second frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('states that is deferring', () => { - expect(container).toContainHTML('deferring') - }) - - it('renders the third and fourth deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).not.toContainHTML('Fifth') - }) - - describe('thrid frame passed', () => { - beforeEach(() => { - const frame = frames.pop() - if (!frame) throw new Error('requestAnimationFrame not requested') - - act(() => { - frame(now) - }) - }) - - it('does not request a new animation frame', () => { - expect(frames.length).toBe(0) - }) - - it('states that is done', () => { - expect(container).toContainHTML('done') - }) - - it('renders the remaining of deferred render', () => { - expect(container).toContainHTML('First') - expect(container).toContainHTML('Second') - expect(container).toContainHTML('Third') - expect(container).toContainHTML('Fourth') - expect(container).toContainHTML('Fifth') - }) - }) - }) - }) -}) - -describe('app with just the DeferredMountProvider', () => { - const isDeferringValues = jest.fn() - - const SampleComponent = () => { - const isDeferringFacet = useIsDeferring() - - useFacetEffect((isDeferring) => isDeferringValues(isDeferring), [], [isDeferringFacet]) - - return ( - <> - (isDeferring ? 'deferring' : 'done'), [], [isDeferringFacet])} /> - - ) - } - - let container: HTMLElement - - beforeEach(() => { - isDeferringValues.mockClear() - - container = render( - - - , - ).container - }) - - it('states that is deferring in the first frame', () => { - expect(isDeferringValues).toBeCalledTimes(1) - expect(isDeferringValues).toBeCalledWith(true) - expect(container).toContainHTML('deferring') - }) -}) diff --git a/packages/@react-facet/deferred-mount/src/index.tsx b/packages/@react-facet/deferred-mount/src/index.tsx deleted file mode 100644 index 9fbee5be..00000000 --- a/packages/@react-facet/deferred-mount/src/index.tsx +++ /dev/null @@ -1,287 +0,0 @@ -import React, { - createContext, - useState, - useContext, - ReactNode, - useCallback, - useRef, - useEffect, - ReactElement, -} from 'react' -import { createFacet, Facet, useFacetEffect, useFacetState } from '@react-facet/core' - -type Config = { - forceImmediateMount: boolean -} - -const DeferredMountConfig = createContext({ forceImmediateMount: false }) - -export function DeferredMountConfigProvider({ config, children }: { config: Config; children: React.ReactNode }) { - return {children} -} - -function useConfig() { - return useContext(DeferredMountConfig) -} - -/** - * Targeting around 60fps - */ -const DEFAULT_FRAME_TIME_BUDGET = 16 - -interface DeferredMountProviderProps { - children: ReactNode - - /** - * How many milliseconds we can spend mounting components. - */ - frameTimeBudget?: number -} - -export function InnerDeferredMountProvider({ - children, - frameTimeBudget = DEFAULT_FRAME_TIME_BUDGET, -}: DeferredMountProviderProps) { - const [isDeferring, setIsDeferring] = useFacetState(true) - const [requestingToRun, setRequestingToRun] = useFacetState(false) - const waitingForMountCallback = useRef(false) - - const deferredMountsRef = useRef([]) - - const pushDeferUpdateFunction = useCallback( - (updateFn: UpdateFn) => { - // Causes a re-render of this component that will kick-off the effect below - setRequestingToRun(true) - - deferredMountsRef.current.push(updateFn) - - /** - * Cleanup function that makes sure that we don't try to "mount" a deferred component - * if it has already been unmounted. - */ - return () => { - // It is most common that we will be cleaning up after all deferred mounting has been run - if (deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const index = deferredMountsRef.current.indexOf(updateFn) - if (index !== -1) { - deferredMountsRef.current.splice(index, 1) - } - } - }, - [setRequestingToRun], - ) - - useFacetEffect( - (requestingToRun) => { - // Even if we are not considered to be running, we need to check if there is still - // work pending to be done. If there is... we still need to run this effect. - if (!requestingToRun && deferredMountsRef.current.length === 0 && !waitingForMountCallback.current) return - - const work = (startTimestamp: number) => { - const deferredMounts = deferredMountsRef.current - - // We need to request the new frame at the top - // otherwise, the state change at the bottom will trigger a new render - // before we have a chance to cancel - // Its not possible to detect this with unit testing, so verify on the browser - // after a change here that this function is not executing every frame unnecessarily - if (deferredMounts.length > 0 || waitingForMountCallback.current) { - frameId = window.requestAnimationFrame(work) - } else { - // Used to check if the requestAnimationFrame has stopped running - frameId = -1 - } - - let lastUpdateCost = 0 - let now = startTimestamp - - while ( - deferredMounts.length > 0 && - now - startTimestamp + lastUpdateCost < frameTimeBudget && - !waitingForMountCallback.current - ) { - const before = now - - const updateFn = deferredMounts.shift() as UpdateFn - const result = updateFn(false) - - const after = performance.now() - - lastUpdateCost = after - before - now = after - - // Can be a function that takes a callback if using DeferredMountWithCallback - const resultTakesCallback = typeof result === 'function' - - if (resultTakesCallback) { - waitingForMountCallback.current = true - - result(() => { - waitingForMountCallback.current = false - - // If the requestAnimationFrame stops running while waiting for the - // callback we need to restart it to process the rest of the queue. - if (frameId === -1) { - frameId = window.requestAnimationFrame(work) - } - }) - } - } - - if (deferredMounts.length === 0 && !waitingForMountCallback.current) { - setIsDeferring(false) - setRequestingToRun(false) - } - } - - let frameId = window.requestAnimationFrame(work) - - return () => { - window.cancelAnimationFrame(frameId) - } - }, - [frameTimeBudget, setIsDeferring, setRequestingToRun], - [requestingToRun], - ) - - return ( - - {children} - - ) -} - -/** - * Provider that must wrap a tree with nodes being deferred - */ -export function DeferredMountProvider(props: DeferredMountProviderProps) { - const config = useConfig() - if (config.forceImmediateMount) { - return <>{props.children} - } - - return -} - -interface DeferredMountProps { - children: ReactElement -} - -/** - * Component that should wrap some mounting that must be deferred to a later frame - * @param children component to be mounted deferred - */ -export function DeferredMount({ children }: DeferredMountProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) - - useEffect(() => { - if (pushDeferUpdateFunction) pushDeferUpdateFunction(setDeferred) - }, [pushDeferUpdateFunction]) - - if (deferred) return null - return children -} - -interface DeferredMountWithCallbackProps { - children: ReactElement -} - -const NotifyMountComplete = createContext(() => {}) -export const useNotifyMountComplete = () => useContext(NotifyMountComplete) - -/** - * Component that should wrap some mounting that must be deferred to a later frame. - * This will wait for a callback from the child component before marking itself as rendered. - * @param children component to be mounted deferred - */ -export function DeferredMountWithCallback({ children }: DeferredMountWithCallbackProps) { - const pushDeferUpdateFunction = useContext(pushDeferUpdateContext) - const [deferred, setDeferred] = useState(pushDeferUpdateFunction !== undefined) - const resolveMountComplete = useRef<(value: void | PromiseLike) => void>() - const mountCompleteBeforeInitialization = useRef(false) - - const onMountComplete = useCallback(() => { - if (resolveMountComplete.current !== undefined) { - resolveMountComplete.current() - } else { - mountCompleteBeforeInitialization.current = true - } - }, []) - - useEffect(() => { - if (pushDeferUpdateFunction) - pushDeferUpdateFunction((isDeferred) => { - return (resolve) => { - setDeferred(isDeferred) - - if (mountCompleteBeforeInitialization.current) { - resolve() - } else { - resolveMountComplete.current = resolve - } - } - }) - }, [pushDeferUpdateFunction, onMountComplete]) - - if (deferred) return null - return {children} -} - -interface ImmediateMountProps { - children: ReactElement -} - -/** - * Hook that informs if any mounting is currently being deferred - * Can be used to show some loading indicator - */ -export function useIsDeferring() { - return useContext(isDeferringContext) -} - -/** - * Allow us to pause costly mounting (mounting) of components - * So that transitions can occur - */ -export function useIsPaused() { - return useContext(isPausedContext) -} - -/** - * API compatible component with DeferredMount, but renders immediately - */ -export function ImmediateMount({ children }: ImmediateMountProps) { - return children -} - -interface UpdateFn { - (deferred: boolean): void | ((onMountComplete: () => void) => void) -} - -interface PushDeferUpdateFunction { - (updateFn: UpdateFn): void -} - -const pushDeferUpdateContext = createContext(undefined) - -const isDeferringContext = createContext>(createFacet({ initialValue: false })) - -const isPausedContext = createContext(false) - -/** - * This pauses the mounting of children components. - * Given it affects mounting, it should only happen the first time! Asking to pause again in the future is not possible - */ -export function PauseMountProvider({ paused, children }: { paused: boolean; children: ReactNode }) { - const wasEverResumed = useRef(!paused) - - useEffect(() => { - if (!paused) { - wasEverResumed.current = true - } - }, [paused]) - - return {children} -} diff --git a/packages/@react-facet/deferred-mount/tsconfig.json b/packages/@react-facet/deferred-mount/tsconfig.json deleted file mode 100644 index 2eeba49e..00000000 --- a/packages/@react-facet/deferred-mount/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src" - } -} diff --git a/packages/@react-facet/dom-components/jest.config.js b/packages/@react-facet/dom-components/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-components/jest.config.js +++ b/packages/@react-facet/dom-components/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-components/package.json b/packages/@react-facet/dom-components/package.json index a90c1305..80f07187 100644 --- a/packages/@react-facet/dom-components/package.json +++ b/packages/@react-facet/dom-components/package.json @@ -42,18 +42,17 @@ }, "peerDependencies": { "@react-facet/core": "0.6.1", - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.6.1", - "@testing-library/jest-dom": "^5.10.1", - "@testing-library/react": "^9.4.1", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@react-facet/dom-fiber-testing-library": "0.6.1", + "@testing-library/jest-dom": "^5.16.5", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", - "react-dom": "^16.9.0", + "react": "18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-components/src/index.spec.tsx b/packages/@react-facet/dom-components/src/index.spec.tsx index 7d6c59e9..88d5452e 100644 --- a/packages/@react-facet/dom-components/src/index.spec.tsx +++ b/packages/@react-facet/dom-components/src/index.spec.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { render, act } from '@testing-library/react' +import { act, render } from '@react-facet/dom-fiber-testing-library' import { fast } from '.' import { createFacet } from '@react-facet/core' diff --git a/packages/@react-facet/dom-components/src/useSetProp.ts b/packages/@react-facet/dom-components/src/useSetProp.ts index c93779f1..d6b5c2d6 100644 --- a/packages/@react-facet/dom-components/src/useSetProp.ts +++ b/packages/@react-facet/dom-components/src/useSetProp.ts @@ -1,10 +1,10 @@ -import { useLayoutEffect } from 'react' +import { useEffect } from 'react' import { FacetProp, isFacet } from '@react-facet/core' type Scalar = string | number | boolean | undefined export function useSetProp(prop: FacetProp | undefined, update: (value: T | undefined) => void) { - useLayoutEffect(() => { + useEffect(() => { if (isFacet(prop)) { return prop.observe(update) } else { diff --git a/packages/@react-facet/dom-fiber-testing-library/jest.config.js b/packages/@react-facet/dom-fiber-testing-library/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-fiber-testing-library/jest.config.js +++ b/packages/@react-facet/dom-fiber-testing-library/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-fiber-testing-library/package.json b/packages/@react-facet/dom-fiber-testing-library/package.json index 6aeb6518..76463529 100644 --- a/packages/@react-facet/dom-fiber-testing-library/package.json +++ b/packages/@react-facet/dom-fiber-testing-library/package.json @@ -41,15 +41,15 @@ "prepublish": "yarn build" }, "dependencies": { - "@testing-library/dom": "^8.0.0" + "@testing-library/dom": "^8.20.0" }, "peerDependencies": { "@react-facet/dom-fiber": "0.6.1", - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/dom-fiber": "0.6.1", - "react": "^16.9.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts index 8fc52b0e..47d3fe78 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/renderer.ts @@ -1,6 +1,6 @@ -import { ReactElement } from 'react' -import * as testingLibrary from '@testing-library/dom' +import React, { ReactElement } from 'react' import { setupAct } from './setupAct' +import * as testingLibrary from '@testing-library/dom' import { Matcher, MatcherOptions, @@ -25,7 +25,7 @@ const setup = () => { const mountedContainers = new Set() - const act = setupAct(reconcilerInstance) + const act = setupAct() function render( ui: ReactElement, @@ -55,7 +55,9 @@ const setup = () => { }) }, rerender: (rerenderUi: ReactElement) => { - render(rerenderUi, baseElement, container, fiberRoot) + act(() => { + reconcilerInstance.updateContainer(rerenderUi, fiberRoot, null, () => {}) + }) }, asFragment: () => { if (typeof document.createRange === 'function') { diff --git a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts index 01dfccb9..b1a58c6f 100644 --- a/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts +++ b/packages/@react-facet/dom-fiber-testing-library/src/setupAct.ts @@ -1,62 +1,38 @@ -import React, { MutableRefObject } from 'react' -import { ReactFacetReconciler } from '@react-facet/dom-fiber' +import React from 'react' -export type Act = (callback: () => A) => A - -export const setupAct = ({ batchedUpdates, flushPassiveEffects, IsThisRendererActing }: ReactFacetReconciler): Act => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const { IsSomeRendererActing } = (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as { - IsSomeRendererActing: MutableRefObject +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function getGlobalThis(): any { + if (typeof globalThis !== 'undefined') { + return globalThis } - const isSchedulerMocked = false - const flushWork = function () { - let didFlushWork = false - while (flushPassiveEffects()) { - didFlushWork = true - } + if (typeof self !== 'undefined') { + return self + } - return didFlushWork + if (typeof window !== 'undefined') { + return window } - let actingUpdatesScopeDepth = 0 - - function act(callback: () => A) { - actingUpdatesScopeDepth++ - - const previousIsSomeRendererActing = IsSomeRendererActing.current - const previousIsThisRendererActing = IsThisRendererActing.current - IsSomeRendererActing.current = true - IsThisRendererActing.current = true - - function onDone() { - actingUpdatesScopeDepth-- - IsSomeRendererActing.current = previousIsSomeRendererActing - IsThisRendererActing.current = previousIsThisRendererActing - } - - try { - const result = batchedUpdates(callback) - - try { - if (actingUpdatesScopeDepth === 1 && (isSchedulerMocked === false || previousIsSomeRendererActing === false)) { - // we're about to exit the act() scope, - // now's the time to flush effects - flushWork() - } - onDone() - } catch (err) { - onDone() - throw err - } - - return result - } catch (error) { - // on sync errors, we still want to 'cleanup' and decrement actingUpdatesScopeDepth - onDone() - throw error - } + if (typeof global !== 'undefined') { + return global } + throw new Error('unable to locate global object') +} + +/** + * More info: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment + * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 + */ +export const setupAct = (): Act => { + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const act = (React as any).unstable_act as Act return act } + +export interface Act { + (work: () => void): boolean +} diff --git a/packages/@react-facet/dom-fiber/jest.config.js b/packages/@react-facet/dom-fiber/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/dom-fiber/jest.config.js +++ b/packages/@react-facet/dom-fiber/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/dom-fiber/package.json b/packages/@react-facet/dom-fiber/package.json index 2742480e..3962ab66 100644 --- a/packages/@react-facet/dom-fiber/package.json +++ b/packages/@react-facet/dom-fiber/package.json @@ -41,20 +41,20 @@ "prepublish": "yarn build" }, "dependencies": { - "react-reconciler": "^0.24.0" + "react-reconciler": "^0.28.0" }, "peerDependencies": { "@react-facet/core": "0.6.1", - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.6.1", - "@react-facet/dom-fiber-testing-library": "0.6.1", + "@react-facet/dom-fiber-testing-library": "workspace:^", "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@types/react-reconciler": "^0.28.0", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts index f25e8ea6..512fe41a 100644 --- a/packages/@react-facet/dom-fiber/src/createFiberRoot.ts +++ b/packages/@react-facet/dom-fiber/src/createFiberRoot.ts @@ -1,18 +1,24 @@ +import { ConcurrentRoot } from 'react-reconciler/constants' import { FacetFiberRoot, ReactFacetReconciler } from './types' /** * @private consider using render instead */ export const createFiberRoot = - (reconciler: ReactFacetReconciler) => + (reconcilerInstance: ReactFacetReconciler) => (container: HTMLElement): FacetFiberRoot => - reconciler.createContainer( + reconcilerInstance.createContainer( { children: new Set(), element: container, styleUnsubscribers: new Map(), style: container.style, }, + ConcurrentRoot, + null, false, - false, + true, + '', + (error) => console.error('[@react-facet/dom-fiber]', error), + null, ) diff --git a/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx b/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx index 46448bee..97662735 100644 --- a/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/createPortal.spec.tsx @@ -1,33 +1,14 @@ -import React, { ReactElement } from 'react' -import { createFiberRoot } from './createFiberRoot' +import React from 'react' import { createPortal } from './createPortal' -import { createReconciler } from './createReconciler' - -document.body.innerHTML = `
` - -const reconcilerInstance = createReconciler() -const root = document.getElementById('root') as HTMLElement -const portal = document.getElementById('portal') as HTMLElement -const fiberRoot = createFiberRoot(reconcilerInstance)(root) - -/** - * Render function local to testing that shared the same instance of the reconciler. - * - * This is needed otherwise React complains that we are sharing a context across different renderers. - */ -const render = function render(ui: ReactElement) { - reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) -} - -afterEach(() => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) -}) +import { render, root } from './testSetup' it('portals content', () => { const TestComponent = () => { return
On the other side
} + const portal = document.getElementById('portal') as HTMLElement + render( <>
Hello World
diff --git a/packages/@react-facet/dom-fiber/src/createPortal.ts b/packages/@react-facet/dom-fiber/src/createPortal.ts index b3f4219c..e663e73e 100644 --- a/packages/@react-facet/dom-fiber/src/createPortal.ts +++ b/packages/@react-facet/dom-fiber/src/createPortal.ts @@ -1,5 +1,5 @@ import { ReactNode } from 'react' -import { ReactNodeList } from 'react-reconciler' +import { ReactPortal } from 'react-reconciler' // Extracted from React's codebase const REACT_PORTAL_TYPE = Symbol.for('react.portal') @@ -8,10 +8,11 @@ const REACT_PORTAL_TYPE = Symbol.for('react.portal') * Creates a React Portal. * More info: https://reactjs.org/docs/portals.html */ -export function createPortal(children: ReactNodeList, container: HTMLElement, key?: string | null): ReactNode { +export function createPortal(children: ReactNode, container: HTMLElement): ReactPortal { return { $$typeof: REACT_PORTAL_TYPE, - key, + key: null, + implementation: null, children, containerInfo: { children: new Set(), diff --git a/packages/@react-facet/dom-fiber/src/index.ts b/packages/@react-facet/dom-fiber/src/index.ts index 41b10f90..29f4da4d 100644 --- a/packages/@react-facet/dom-fiber/src/index.ts +++ b/packages/@react-facet/dom-fiber/src/index.ts @@ -1,33 +1,52 @@ import { ReactElement } from 'react' -import { createFiberRoot } from './createFiberRoot' import { createReconciler } from './createReconciler' +import { createFiberRoot } from './createFiberRoot' export * from './types' export * from './createPortal' export * from './createFiberRoot' export * from './createReconciler' -/** - * Render the Facets as the root renderer - */ -export function render(element: ReactElement, container: HTMLElement | null) { - if (container === null) return () => {} +export type RootType = { + render(children: ReactElement): void + unmount(): void +} - const reconcilerInstance = createReconciler() +export function createRoot(container: HTMLElement | null): RootType { + if (container === null) throw new Error('HTML container cannot be null.') - const fiberRoot = createFiberRoot(reconcilerInstance)(container) + const reconcilerInstance = createReconciler() - reconcilerInstance.updateContainer(element, fiberRoot, null, () => {}) + const root = createFiberRoot(reconcilerInstance)(container) if (process.env.NODE_ENV !== 'production') { reconcilerInstance.injectIntoDevTools({ // 0: production, 1: development bundleType: 1, rendererPackageName: '@react-facet/dom-fiber', - version: '0.0.4', + version: '0.4.0', }) } + return { + render(children: ReactElement) { + reconcilerInstance.updateContainer(children, root, null, () => {}) + }, + unmount() { + reconcilerInstance.updateContainer(null, root, null, null) + }, + } +} + +/** + * @deprecated use createRoot instead + */ +export function render(element: ReactElement, container: HTMLElement | null) { + if (container === null) return () => {} + + const root = createRoot(container) + root.render(element) + return () => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) + root.unmount() } } diff --git a/packages/@react-facet/dom-fiber/src/setupAttributes.ts b/packages/@react-facet/dom-fiber/src/setupAttributes.ts index 2a366e37..62e29477 100644 --- a/packages/@react-facet/dom-fiber/src/setupAttributes.ts +++ b/packages/@react-facet/dom-fiber/src/setupAttributes.ts @@ -1,4 +1,28 @@ -import { FacetProp, isFacet } from '@react-facet/core' +import { FacetProp, isFacet, Unsubscribe } from '@react-facet/core' +import { Style } from './types' + +export const setupStyleUpdate = ( + styleProp: Style, + style: Record, + styleUnsubscribers: Map, +) => { + for (const key in styleProp) { + const value = styleProp[key] + + if (value !== undefined) { + if (isFacet(value)) { + styleUnsubscribers.set( + key, + value.observe((value) => { + style[key] = value + }), + ) + } else { + style[key] = value + } + } + } +} export const setupClassUpdate = (className: FacetProp, element: HTMLElement | SVGElement) => { const htmlElement = element as HTMLElement diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx index 78b32a94..ce5a7187 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.spec.tsx @@ -1,30 +1,10 @@ import { createFacet, Facet } from '@react-facet/core' -import React, { ReactElement, useEffect, useState } from 'react' +import React, { useEffect, useState } from 'react' import { Fiber } from 'react-reconciler' -import { createFiberRoot } from './createFiberRoot' -import { createReconciler } from './createReconciler' import { setupHostConfig } from './setupHostConfig' +import { act, render, root } from './testSetup' import { InputType, ElementContainer, ElementProps, Props } from './types' -document.body.innerHTML = `
` - -const reconcilerInstance = createReconciler() -const root = document.getElementById('root') as HTMLElement -const fiberRoot = createFiberRoot(reconcilerInstance)(root) - -/** - * Render function local to testing that shared the same instance of the reconciler. - * - * This is needed otherwise React complains that we are sharing a context across different renderers. - */ -const render = function render(ui: ReactElement) { - reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) -} - -afterEach(() => { - reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) -}) - jest.useFakeTimers() describe('mount', () => { @@ -984,7 +964,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Goodbye World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -1004,7 +986,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -1024,7 +1008,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -1044,7 +1030,9 @@ describe('update', () => { render() expect(root).toContainHTML('
Hello World
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root).toContainHTML('
Hello World
') }) @@ -1066,7 +1054,9 @@ describe('update', () => { // jsdom is adding the http://localhost expect(img && img.src).toEqual('http://localhost/frita.png') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) img = document.getElementsByClassName('image')[0] as HTMLImageElement | undefined // jsdom is adding the http://localhost expect(img && img.src).toEqual('http://localhost/banana.png') @@ -1088,7 +1078,9 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('
') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1108,7 +1100,9 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1124,9 +1118,13 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1149,9 +1147,13 @@ describe('update', () => { } render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1168,11 +1170,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1189,11 +1197,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('

') }) @@ -1210,11 +1224,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1231,11 +1251,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('
') }) @@ -1264,19 +1290,27 @@ describe('update', () => { expect(root?.innerHTML ?? '').toBe( '', ) - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe( '', ) - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe( '', ) - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe( '', ) - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe( '', ) @@ -1295,11 +1329,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1316,11 +1356,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1337,11 +1383,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1358,11 +1410,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1379,11 +1437,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1400,11 +1464,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1421,11 +1491,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1442,11 +1518,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1463,11 +1545,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1484,11 +1572,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1505,11 +1599,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1526,11 +1626,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1547,11 +1653,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1568,11 +1680,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1589,11 +1707,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) @@ -1610,11 +1734,17 @@ describe('update', () => { render() expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') - jest.advanceTimersByTime(1) + act(() => { + jest.advanceTimersByTime(1) + }) expect(root?.innerHTML ?? '').toBe('') }) }) @@ -1657,7 +1787,9 @@ describe('update', () => { useEffect(() => { setTimeout(() => { - setSecond(true) + act(() => { + setSecond(true) + }) }, 1000) }, []) @@ -1728,7 +1860,9 @@ describe('update', () => { firstOnClick.mockClear() secondOnClick.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('click')) expect(firstOnClick).not.toHaveBeenCalled() @@ -1742,7 +1876,9 @@ describe('update', () => { firstOnFocus.mockClear() secondOnFocus.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('focus')) expect(firstOnFocus).not.toHaveBeenCalled() @@ -1756,7 +1892,9 @@ describe('update', () => { firstOnBlur.mockClear() secondOnBlur.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('blur')) expect(firstOnBlur).not.toHaveBeenCalled() @@ -1770,7 +1908,9 @@ describe('update', () => { firstOnMouseDown.mockClear() secondOnMouseDown.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mousedown')) expect(firstOnMouseDown).not.toHaveBeenCalled() @@ -1798,7 +1938,9 @@ describe('update', () => { firstOnMouseUp.mockClear() secondOnMouseUp.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseup')) expect(firstOnMouseUp).not.toHaveBeenCalled() @@ -1812,7 +1954,9 @@ describe('update', () => { firstOnTouchStart.mockClear() secondOnTouchStart.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchstart')) expect(firstOnTouchStart).not.toHaveBeenCalled() @@ -1826,7 +1970,9 @@ describe('update', () => { firstOnTouchMove.mockClear() secondOnTouchMove.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchmove')) expect(firstOnTouchMove).not.toHaveBeenCalled() @@ -1840,7 +1986,9 @@ describe('update', () => { firstOnTouchEnd.mockClear() secondOnTouchEnd.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('touchend')) expect(firstOnTouchEnd).not.toHaveBeenCalled() @@ -1854,7 +2002,9 @@ describe('update', () => { firstOnMouseEnter.mockClear() secondOnMouseEnter.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseenter')) expect(firstOnMouseEnter).not.toHaveBeenCalled() @@ -1868,7 +2018,9 @@ describe('update', () => { firstOnMouseLeave.mockClear() secondOnMouseLeave.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('mouseleave')) expect(firstOnMouseLeave).not.toHaveBeenCalled() @@ -1882,7 +2034,9 @@ describe('update', () => { firstOnKeyPress.mockClear() secondOnKeyPress.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keypress')) expect(firstOnKeyPress).not.toHaveBeenCalled() @@ -1896,7 +2050,9 @@ describe('update', () => { firstOnKeyDown.mockClear() secondOnKeyDown.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keydown')) expect(firstOnKeyDown).not.toHaveBeenCalled() @@ -1910,7 +2066,9 @@ describe('update', () => { firstOnKeyUp.mockClear() secondOnKeyUp.mockClear() - jest.runAllTimers() + act(() => { + jest.runAllTimers() + }) div.dispatchEvent(new Event('keyup')) expect(firstOnKeyUp).not.toHaveBeenCalled() diff --git a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts index 806ce5ba..3607e33d 100644 --- a/packages/@react-facet/dom-fiber/src/setupHostConfig.ts +++ b/packages/@react-facet/dom-fiber/src/setupHostConfig.ts @@ -6,6 +6,7 @@ import { Instance, TextInstance, HydratableInstance, + SuspenseInstance, PublicInstance, HostContext, UpdatePayload, @@ -15,6 +16,7 @@ import { TypeHTML, } from './types' import { HostConfig } from 'react-reconciler' +import { DefaultEventPriority } from 'react-reconciler/constants' import { isFacet, Unsubscribe } from '@react-facet/core' import { setupClassUpdate, @@ -26,6 +28,7 @@ import { setupValueUpdate, setupViewBoxUpdate, setupAttributeUpdate, + setupStyleUpdate, } from './setupAttributes' /** @@ -40,6 +43,7 @@ export const setupHostConfig = (): HostConfig< Container, Instance, TextInstance, + SuspenseInstance, HydratableInstance, PublicInstance, HostContext, @@ -53,13 +57,40 @@ export const setupHostConfig = (): HostConfig< supportsPersistence: false, supportsHydration: false, - now: Date.now, + supportsMicrotask: true, + scheduleMicrotask: + typeof queueMicrotask === 'function' + ? queueMicrotask + : (callback) => + Promise.resolve(null) + .then(callback) + .catch((error) => { + setTimeout(() => { + throw error + }) + }), + + getCurrentEventPriority: () => { + return DefaultEventPriority + }, + + getInstanceFromNode: () => { + return null + }, + + beforeActiveInstanceBlur: () => {}, + afterActiveInstanceBlur: () => {}, + prepareScopeUpdate: () => {}, + getInstanceFromScope: () => null, + detachDeletedInstance: () => {}, + + clearContainer: () => false, /** * We need to support setting up the host config in an environment where window is not available globally yet * Ex: screenshot testing */ - setTimeout: + scheduleTimeout: typeof window !== 'undefined' ? window.setTimeout : (handler, timeout) => window.setTimeout(handler, timeout) as unknown as NodeJS.Timeout, @@ -68,18 +99,12 @@ export const setupHostConfig = (): HostConfig< * We need to support setting up the host config in an environment where window is not available globally yet * Ex: screenshot testing */ - clearTimeout: + cancelTimeout: typeof window !== 'undefined' ? window.clearTimeout : (id) => window.clearTimeout(id as unknown as NodeJS.Timeout), noTimeout: noop, - scheduleDeferredCallback: function (callback, options) { - return window.setTimeout(callback, options ? options.timeout : 0) - }, - - cancelDeferredCallback: function (id) { - return window.clearTimeout(id) - }, + preparePortalMount: function () {}, getRootHostContext: function () { return EMPTY @@ -124,28 +149,7 @@ export const setupHostConfig = (): HostConfig< style = element.style styleUnsubscribers = new Map() - // We know for sure here that style will never be null (we created it above) - const notNullStyle = style as unknown as Record - const notNullStyleUnsubscribers = styleUnsubscribers as unknown as Map - - const styleProp = newProps.style - - for (const key in styleProp) { - const value = styleProp[key] - - if (value !== undefined) { - if (isFacet(value)) { - notNullStyleUnsubscribers.set( - key, - value.observe((value) => { - notNullStyle[key] = value - }), - ) - } else { - notNullStyle[key] = value - } - } - } + setupStyleUpdate(newProps.style, style as unknown as Record, styleUnsubscribers) } if (newProps.dangerouslySetInnerHTML !== undefined) { @@ -329,7 +333,9 @@ export const setupHostConfig = (): HostConfig< return false }, - prepareForCommit: function () {}, + prepareForCommit: function () { + return null + }, resetAfterCommit: function () {}, @@ -1050,15 +1056,49 @@ export const setupHostConfig = (): HostConfig< instance.element.textContent = '' }, - shouldDeprioritizeSubtree: function () { - return false - }, - getPublicInstance: function (instance) { return instance.element }, + hideInstance(instance) { + if (isTextElement(instance.element)) { + // Stop listening for updates + if (instance.text) { + instance.text() + } + + instance.element.nodeValue = '' + return + } + + // Stop listening for style changes + instance.styleUnsubscribers?.forEach((unsubscribe) => unsubscribe()) + instance.styleUnsubscribers?.clear() + + // Hide + instance.element.style.display = 'none' + }, + unhideInstance(instance, props) { + if (isTextElement(instance.element)) { + instance.text = setupTextUpdate(props.text, instance.element) + return + } + + if (props.style !== undefined) { + setupStyleUpdate( + props.style, + (instance.style ?? instance.element.style) as unknown as Record, + instance.styleUnsubscribers as Map, + ) + } else { + instance.element.style.display = '' + } + }, }) +export const isTextElement = (value: HTMLElement | SVGElement | Text): value is Text => { + return (value as HTMLElement).style === null +} + const cleanupElementContainer = (parent: ElementContainer, instance: ElementContainer) => { parent.children.delete(instance) diff --git a/packages/@react-facet/dom-fiber/src/testSetup.ts b/packages/@react-facet/dom-fiber/src/testSetup.ts new file mode 100644 index 00000000..6a599e73 --- /dev/null +++ b/packages/@react-facet/dom-fiber/src/testSetup.ts @@ -0,0 +1,64 @@ +import React, { ReactElement } from 'react' +import { createFiberRoot } from './createFiberRoot' +import { createReconciler } from './createReconciler' + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function getGlobalThis(): any { + if (typeof globalThis !== 'undefined') { + return globalThis + } + + if (typeof self !== 'undefined') { + return self + } + + if (typeof window !== 'undefined') { + return window + } + + if (typeof global !== 'undefined') { + return global + } + + throw new Error('unable to locate global object') +} + +/** + * More info: https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment + * Reference implementation: https://github.com/testing-library/react-testing-library/blob/c80809a956b0b9f3289c4a6fa8b5e8cc72d6ef6d/src/act-compat.js#L5 + */ +export const setupAct = (): Act => { + getGlobalThis().IS_REACT_ACT_ENVIRONMENT = true + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const act = (React as any).unstable_act as Act + return act +} + +export interface Act { + (work: () => void): boolean +} + +document.body.innerHTML = `
` + +const reconcilerInstance = createReconciler() +export const root = document.getElementById('root') as HTMLElement +const fiberRoot = createFiberRoot(reconcilerInstance)(root) +export const act = setupAct() + +/** + * Render function local to testing that shared the same instance of the reconciler. + * + * This is needed otherwise React complains that we are sharing a context across different renderers. + */ +export const render = function render(ui: ReactElement) { + act(() => { + reconcilerInstance.updateContainer(ui, fiberRoot, null, () => {}) + }) +} + +afterEach(() => { + act(() => { + reconcilerInstance.updateContainer(null, fiberRoot, null, () => {}) + }) +}) diff --git a/packages/@react-facet/dom-fiber/src/types.ts b/packages/@react-facet/dom-fiber/src/types.ts index 65f2a9c4..af179c58 100644 --- a/packages/@react-facet/dom-fiber/src/types.ts +++ b/packages/@react-facet/dom-fiber/src/types.ts @@ -1,6 +1,6 @@ import { FacetProp, Unsubscribe } from '@react-facet/core' -import { FiberRoot, Reconciler } from 'react-reconciler' -import { Key, MutableRefObject, ReactText } from 'react' +import { FiberRoot, ReactPortal, Reconciler } from 'react-reconciler' +import { Key, MutableRefObject, ReactText, ReactFragment } from 'react' export type FacetFiberRoot = FiberRoot @@ -112,7 +112,7 @@ interface StrictReactElement

{ * * It prevents passing a function as a Node. This allow us to catch accidental passing of facets as children. */ -export type StrictReactNode = StrictReactElement | ReactText | Array | boolean | null | undefined +export type StrictReactNode = StrictReactElement | ReactText | ReactFragment | ReactPortal | boolean | null | undefined export type ElementProps = PointerEvents & FocusEvents & @@ -265,9 +265,10 @@ export type Instance = ElementContainer export type Container = Instance export type TextInstance = TextContainer export type HydratableInstance = Instance +export type SuspenseInstance = Instance export type PublicInstance = HTMLElement | SVGElement | Text -export type ReactFacetReconciler = Reconciler & { +export type ReactFacetReconciler = Reconciler & { flushPassiveEffects: () => boolean IsThisRendererActing: MutableRefObject } diff --git a/packages/@react-facet/eslint-config/package.json b/packages/@react-facet/eslint-config/package.json index 2eec78d8..7e9b5832 100644 --- a/packages/@react-facet/eslint-config/package.json +++ b/packages/@react-facet/eslint-config/package.json @@ -36,6 +36,6 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "dependencies": { - "eslint-plugin-react-hooks": "^4.2.0" + "eslint-plugin-react-hooks": "^4.6.0" } } diff --git a/packages/@react-facet/shared-facet/jest.config.js b/packages/@react-facet/shared-facet/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/shared-facet/jest.config.js +++ b/packages/@react-facet/shared-facet/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/shared-facet/package.json b/packages/@react-facet/shared-facet/package.json index 5e8ce105..7b9ad222 100644 --- a/packages/@react-facet/shared-facet/package.json +++ b/packages/@react-facet/shared-facet/package.json @@ -42,15 +42,15 @@ }, "peerDependencies": { "@react-facet/core": "0.6.1", - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.6.1", "@react-facet/dom-fiber-testing-library": "0.6.1", - "@types/react": "^17.0.11", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", + "react": "18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/packages/@react-facet/spring/jest.config.js b/packages/@react-facet/spring/jest.config.js index ec033628..93714085 100644 --- a/packages/@react-facet/spring/jest.config.js +++ b/packages/@react-facet/spring/jest.config.js @@ -5,7 +5,6 @@ const projectName = require('./package.json').name module.exports = { ...baseConfig, - name: projectName, displayName: projectName, rootDir: './', } diff --git a/packages/@react-facet/spring/package.json b/packages/@react-facet/spring/package.json index b264fa91..26ef6b22 100644 --- a/packages/@react-facet/spring/package.json +++ b/packages/@react-facet/spring/package.json @@ -42,18 +42,16 @@ }, "peerDependencies": { "@react-facet/core": "0.6.1", - "react": "^16.9.0" + "react": "^18.2.0" }, "devDependencies": { "@react-facet/core": "0.6.1", - "@testing-library/jest-dom": "^5.10.1", - "@testing-library/react": "^9.4.1", - "@types/react": "^17.0.11", - "@types/react-reconciler": "^0.18.0", + "@testing-library/jest-dom": "^5.16.5", + "@types/react": "^18.0.8", "@types/rimraf": "^3", "cross-env": "^7.0.3", - "react": "^16.9.0", - "react-dom": "^16.9.0", + "react": "18.2.0", + "react-dom": "^18.2.0", "rimraf": "^3.0.2", "typescript": "^4.8.2" } diff --git a/yarn.lock b/yarn.lock index 1c4e6efb..ada9361c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,23 @@ __metadata: version: 6 cacheKey: 8 +"@adobe/css-tools@npm:^4.0.1": + version: 4.0.1 + resolution: "@adobe/css-tools@npm:4.0.1" + checksum: 80226e2229024c21da9ffa6b5cd4a34b931f071e06f45aba4777ade071d7a6c94605cf73b13718b0c4b34e8b124c65c607b82eaa53a326d3eb73d9682a04a593 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.1.0": + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" + dependencies: + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + languageName: node + linkType: hard + "@babel/code-frame@npm:7.12.11": version: 7.12.11 resolution: "@babel/code-frame@npm:7.12.11" @@ -23,6 +40,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/code-frame@npm:7.18.6" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.15.0": version: 7.15.0 resolution: "@babel/compat-data@npm:7.15.0" @@ -30,6 +56,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.20.5": + version: 7.20.10 + resolution: "@babel/compat-data@npm:7.20.10" + checksum: 6ed6c1bb6fc03c225d63b8611788cd976107d1692402b560ebffbf1fa53e63705f8625bb12e12d17ce7f7af34e61e1ca96c77858aac6f57010045271466200c0 + languageName: node + linkType: hard + "@babel/core@npm:7.13.16": version: 7.13.16 resolution: "@babel/core@npm:7.13.16" @@ -76,6 +109,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.20.12 + resolution: "@babel/core@npm:7.20.12" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helpers": ^7.20.7 + "@babel/parser": ^7.20.7 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.12 + "@babel/types": ^7.20.7 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 + languageName: node + linkType: hard + "@babel/generator@npm:^7.13.16, @babel/generator@npm:^7.15.4, @babel/generator@npm:^7.15.8": version: 7.15.8 resolution: "@babel/generator@npm:7.15.8" @@ -87,6 +143,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.7, @babel/generator@npm:^7.7.2": + version: 7.20.7 + resolution: "@babel/generator@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 84b6983ffdb50c80c1c2e3f3c32617a7133d8effd1065f3e0f9bba188a7d54ab42a4dd5e42b61b843c65f9dd1aa870036ff0f848ebd42707aaa8a2b6d31d04f5 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.12.13, @babel/helper-annotate-as-pure@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-annotate-as-pure@npm:7.15.4" @@ -96,6 +163,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.13.16, @babel/helper-compilation-targets@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-compilation-targets@npm:7.15.4" @@ -110,6 +186,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-create-class-features-plugin@npm:7.15.4" @@ -126,6 +217,31 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.20.7": + version: 7.20.12 + resolution: "@babel/helper-create-class-features-plugin@npm:7.20.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1e9ed4243b75278fa24deb40dc62bf537b79307987223a2d2d2ae5abf7ba6dc8435d6e3bb55d52ceb30d3e1eba88e7eb6a1885a8bb519e5cfc3e9dedb97d43e6 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + "@babel/helper-function-name@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-function-name@npm:7.15.4" @@ -137,6 +253,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + "@babel/helper-get-function-arity@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-get-function-arity@npm:7.15.4" @@ -155,6 +281,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-hoist-variables@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-hoist-variables@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-member-expression-to-functions@npm:7.15.4" @@ -164,6 +299,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + checksum: cec17aab7e964830b0146e575bd141127032319f26ed864a65b35abd75ad618d264d3e11449b9b4e29cfd95bb1a7e774afddd4884fdcc29c36ac9cbd2b66359f + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.13.12, @babel/helper-module-imports@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-module-imports@npm:7.15.4" @@ -173,6 +317,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-module-imports@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.13.0, @babel/helper-module-transforms@npm:^7.13.14, @babel/helper-module-transforms@npm:^7.15.8": version: 7.15.8 resolution: "@babel/helper-module-transforms@npm:7.15.8" @@ -189,6 +342,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.20.11": + version: 7.20.11 + resolution: "@babel/helper-module-transforms@npm:7.20.11" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.10 + "@babel/types": ^7.20.7 + checksum: 29319ebafa693d48756c6ba0d871677bb0037e0da084fbe221a17c38d57093fc8aa38543c07d76e788266a937976e37ab4901971ca7f237c5ab45f524b9ecca0 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-optimise-call-expression@npm:7.15.4" @@ -198,6 +367,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.14.5 resolution: "@babel/helper-plugin-utils@npm:7.14.5" @@ -205,6 +383,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-replace-supers@npm:7.15.4" @@ -217,6 +402,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-replace-supers@npm:7.20.7" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.20.7 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.12.13, @babel/helper-simple-access@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-simple-access@npm:7.15.4" @@ -226,6 +425,24 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" + dependencies: + "@babel/types": ^7.20.0 + checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-split-export-declaration@npm:7.15.4" @@ -235,6 +452,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-split-export-declaration@npm:7.18.6" + dependencies: + "@babel/types": ^7.18.6 + checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.19.4": + version: 7.19.4 + resolution: "@babel/helper-string-parser@npm:7.19.4" + checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.14.5, @babel/helper-validator-identifier@npm:^7.14.9, @babel/helper-validator-identifier@npm:^7.15.7": version: 7.15.7 resolution: "@babel/helper-validator-identifier@npm:7.15.7" @@ -242,6 +475,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.12.17, @babel/helper-validator-option@npm:^7.14.5": version: 7.14.5 resolution: "@babel/helper-validator-option@npm:7.14.5" @@ -249,6 +489,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-option@npm:7.18.6" + checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf + languageName: node + linkType: hard + "@babel/helpers@npm:^7.13.16, @babel/helpers@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helpers@npm:7.15.4" @@ -260,6 +507,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helpers@npm:7.20.7" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 3fb10df3510ba7116a180d5fd983d0f558f7a65c3d599385dba991bff66b74174c88881bc12c2b3cf7284294fcac5b301ded49a8b0098bdf2ef61d0cad8010db + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4": version: 7.16.0 resolution: "@babel/highlight@npm:7.16.0" @@ -282,6 +540,17 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/highlight@npm:7.18.6" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.15.4, @babel/parser@npm:^7.15.8": version: 7.15.8 resolution: "@babel/parser@npm:7.15.8" @@ -291,6 +560,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/parser@npm:7.20.7" + bin: + parser: ./bin/babel-parser.js + checksum: 25b5266e3bd4be837092685f6b7ef886f1308ff72659a24342eb646ae5014f61ed1771ce8fc20636c890fcae19304fc72c069564ca6075207b7fbf3f75367275 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -357,6 +635,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.18.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -445,6 +734,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.20.0, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.20.0 + resolution: "@babel/plugin-syntax-typescript@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6189c0b5c32ba3c9a80a42338bd50719d783b20ef29b853d4f03929e971913d3cefd80184e924ae98ad6db09080be8fe6f1ffde9a6db8972523234f0274d36f7 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:7.13.8": version: 7.13.8 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.13.8" @@ -459,6 +759,28 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:7.13.12": version: 7.13.12 resolution: "@babel/plugin-transform-react-jsx@npm:7.13.12" @@ -474,6 +796,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.18.6": + version: 7.20.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.20.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-jsx": ^7.18.6 + "@babel/types": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13ecbd1da582177f76ebd74d685947e703a3dcf8bd39cbc62784253201c6f7a667f3573932f6f20602dbcaf077451bf9dd3571892e3ccf4c7176add6358cd641 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.13.0": version: 7.15.8 resolution: "@babel/plugin-transform-typescript@npm:7.15.8" @@ -487,6 +836,35 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typescript@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-typescript@npm:7.20.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-typescript": ^7.20.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ca569a1b8001e7e8971874656091789c6b3209f155c91c56bce82b545e43d09d156b4fcf2f0dfcdf7911a2c546c7090c2aff167a5692443f6f0382b358c233e0 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/preset-react@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-react-display-name": ^7.18.6 + "@babel/plugin-transform-react-jsx": ^7.18.6 + "@babel/plugin-transform-react-jsx-development": ^7.18.6 + "@babel/plugin-transform-react-pure-annotations": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 + languageName: node + linkType: hard + "@babel/preset-typescript@npm:7.13.0": version: 7.13.0 resolution: "@babel/preset-typescript@npm:7.13.0" @@ -500,17 +878,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.10.2": - version: 7.15.4 - resolution: "@babel/runtime-corejs3@npm:7.15.4" - dependencies: - core-js-pure: ^3.16.0 - regenerator-runtime: ^0.13.4 - checksum: ba3b7ed66a00e4d00b0ee1d7a9b9902007c1cd1db511a6153032f19ed964d3a22ef76d8f75ff7d14da9ff70f1b43edba6eccce55097a78e84d249c2991c9959e - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.9.2": version: 7.15.4 resolution: "@babel/runtime@npm:7.15.4" dependencies: @@ -530,7 +898,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.15.4": +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.13.15, @babel/traverse@npm:^7.15.4": version: 7.15.4 resolution: "@babel/traverse@npm:7.15.4" dependencies: @@ -547,6 +926,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.20.10, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.7.2": + version: 7.20.12 + resolution: "@babel/traverse@npm:7.20.12" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.7 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: d758b355ab4f1e87984524b67785fa23d74e8a45d2ceb8bcf4d5b2b0cd15ee160db5e68c7078808542805774ca3802e2eafb1b9638afa4cd7f9ecabd0ca7fd56 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.13.12, @babel/types@npm:^7.13.16, @babel/types@npm:^7.15.4, @babel/types@npm:^7.15.6, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.15.6 resolution: "@babel/types@npm:7.15.6" @@ -557,6 +954,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/types@npm:7.20.7" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: b39af241f0b72bba67fd6d0d23914f6faec8c0eba8015c181cbd5ea92e59fc91a52a1ab490d3520c7dbd19ddb9ebb76c476308f6388764f16d8201e37fae6811 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -654,162 +1062,196 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/console@npm:26.6.2" +"@jest/console@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/console@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^26.6.2 - jest-util: ^26.6.2 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 - checksum: 69a9ca6ba357d7634fd537e3b87c64369865ffb59f57fe6661223088bd62273d0c1d660fefce3625a427f42a37d32590f6b291e1295ea6d6b7cb31ddae36a737 + checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 languageName: node linkType: hard -"@jest/core@npm:26.6.3, @jest/core@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/core@npm:26.6.3" +"@jest/core@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/core@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/reporters": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/reporters": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 + ci-info: ^3.2.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-changed-files: ^26.6.2 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-resolve-dependencies: ^26.6.3 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - jest-watcher: ^26.6.2 - micromatch: ^4.0.2 - p-each-series: ^2.1.0 - rimraf: ^3.0.0 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.2.0 + jest-config: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-resolve-dependencies: ^29.3.1 + jest-runner: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + jest-watcher: ^29.3.1 + micromatch: ^4.0.4 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-ansi: ^6.0.0 - checksum: f52b26ffe9b923ed67b3ff30e170b3a434d4263990f78d96cd43acbd0aa8ad36aecad2f1822f376da3a80228714fd6b7f7acd51744133cfcd2780ba0e3da537b + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f languageName: node linkType: hard -"@jest/environment@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/environment@npm:26.6.2" +"@jest/environment@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/environment@npm:29.3.1" dependencies: - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^26.6.2 - checksum: 7748081b2a758161785aff161780b05084dccaff908c8ed82c04f7da5d5e5439e77b5eb667306d5c4e1422653c7a67ed2955f26704f48c65c404195e1e21780a + jest-mock: ^29.3.1 + checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 languageName: node linkType: hard -"@jest/fake-timers@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/fake-timers@npm:26.6.2" +"@jest/expect-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect-utils@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - "@sinonjs/fake-timers": ^6.0.1 + jest-get-type: ^29.2.0 + checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb + languageName: node + linkType: hard + +"@jest/expect@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect@npm:29.3.1" + dependencies: + expect: ^29.3.1 + jest-snapshot: ^29.3.1 + checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/fake-timers@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: c732658fac4014a424e6629495296c3b2e8697787518df34c74539ec139625e7141ad792b8a4d3c8392b47954ad01be9846b7c57cc8c631490969e7cafa84e6a + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d languageName: node linkType: hard -"@jest/globals@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/globals@npm:26.6.2" +"@jest/globals@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/globals@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/types": ^26.6.2 - expect: ^26.6.2 - checksum: 49b28d0cc7e99898eeaf23e6899e3c9ee25a2a4831caa3eb930ec1722de2e92a0e8a6a6f649438fdd20ff0c0d5e522dd78cb719466a57f011a88d60419b903c5 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/types": ^29.3.1 + jest-mock: ^29.3.1 + checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 languageName: node linkType: hard -"@jest/reporters@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/reporters@npm:26.6.2" +"@jest/reporters@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/reporters@npm:29.3.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 + "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 exit: ^0.1.2 - glob: ^7.1.2 - graceful-fs: ^4.2.4 + glob: ^7.1.3 + graceful-fs: ^4.2.9 istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^4.0.3 + istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.0.2 - jest-haste-map: ^26.6.2 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - node-notifier: ^8.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 slash: ^3.0.0 - source-map: ^0.6.0 string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^7.0.0 - dependenciesMeta: + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: node-notifier: optional: true - checksum: 53c7a697c562becb7682a9a6248ea553013bf7048c08ddce5bf9fb53b975fc9f799ca163f7494e0be6c4d3cf181c8bc392976268da52b7de8ce4470b971ed84e + checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 languageName: node linkType: hard -"@jest/source-map@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/source-map@npm:26.6.2" +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.2.0": + version: 29.2.0 + resolution: "@jest/source-map@npm:29.2.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 - graceful-fs: ^4.2.4 - source-map: ^0.6.0 - checksum: b171cef442738887dda85527ab78229996db5946c6435ddb56d442c2851889ba493729a9de73100f1a31b9a31a91207b55bc75656ae7df9843d65078b925385e + graceful-fs: ^4.2.9 + checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e languageName: node linkType: hard -"@jest/test-result@npm:^26.6.2": - version: 26.6.2 - resolution: "@jest/test-result@npm:26.6.2" +"@jest/test-result@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-result@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/types": ^29.3.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: dcb6175825231e9377e43546aed4edd6acc22f1788d5f099bbba36bb55b9115a92f760e88426c076bcdeff5a50d8f697327a920db0cd1fb339781fc3713fa8c7 + checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a languageName: node linkType: hard -"@jest/test-sequencer@npm:^26.6.3": - version: 26.6.3 - resolution: "@jest/test-sequencer@npm:26.6.3" +"@jest/test-sequencer@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-sequencer@npm:29.3.1" dependencies: - "@jest/test-result": ^26.6.2 - graceful-fs: ^4.2.4 - jest-haste-map: ^26.6.2 - jest-runner: ^26.6.3 - jest-runtime: ^26.6.3 - checksum: a3450b3d7057f74da1828bb7b3658f228a7c049dc4082c5c49b8bafbd8f69d102a8a99007b7ed5d43464712f7823f53fe3564fda17787f178c219cccf329a461 + "@jest/test-result": ^29.3.1 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + slash: ^3.0.0 + checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 languageName: node linkType: hard @@ -836,26 +1278,26 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^24.9.0": - version: 24.9.0 - resolution: "@jest/types@npm:24.9.0" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^1.1.1 - "@types/yargs": ^13.0.0 - checksum: 603698f774cf22f9d16a0e0fac9e10e7db21052aebfa33db154c8a5940e0eb1fa9c079a8c91681041ad3aeee2adfa950608dd0c663130316ba034b8bca7b301c - languageName: node - linkType: hard - -"@jest/types@npm:^25.5.0": - version: 25.5.0 - resolution: "@jest/types@npm:25.5.0" +"@jest/transform@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/transform@npm:29.3.1" dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^1.1.1 - "@types/yargs": ^15.0.0 - chalk: ^3.0.0 - checksum: 785b67521a2c54f290ad4b53f49fec6b14fa25828bf26a838f7bbe08dd42122f27f71a620ea9a33286346786e9b120dd370abf589e6ef8c5fde9dc56906880b1 + "@babel/core": ^7.11.6 + "@jest/types": ^29.3.1 + "@jridgewell/trace-mapping": ^0.3.15 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 languageName: node linkType: hard @@ -885,6 +1327,41 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/types@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.2 + resolution: "@jridgewell/gen-mapping@npm:0.3.2" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.5 resolution: "@jridgewell/gen-mapping@npm:0.3.5" @@ -896,6 +1373,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:3.1.0": + version: 3.1.0 + resolution: "@jridgewell/resolve-uri@npm:3.1.0" + checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.0.7 resolution: "@jridgewell/resolve-uri@npm:3.0.7" @@ -910,6 +1394,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + "@jridgewell/set-array@npm:^1.2.1": version: 1.2.1 resolution: "@jridgewell/set-array@npm:1.2.1" @@ -927,6 +1418,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:1.4.14": + version: 1.4.14 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" + checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 + languageName: node + linkType: hard + "@jridgewell/sourcemap-codec@npm:^1.4.10": version: 1.4.13 resolution: "@jridgewell/sourcemap-codec@npm:1.4.13" @@ -935,9 +1433,9 @@ __metadata: linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec languageName: node linkType: hard @@ -951,6 +1449,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.17 + resolution: "@jridgewell/trace-mapping@npm:0.3.17" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -1027,29 +1535,15 @@ __metadata: resolution: "@react-facet/core@workspace:packages/@react-facet/core" dependencies: "@react-facet/dom-fiber-testing-library": 0.6.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react": ^18.0.8 + "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - rimraf: ^3.0.2 - typescript: ^4.8.2 - peerDependencies: - react: ^16.9.0 - languageName: unknown - linkType: soft - -"@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount": - version: 0.0.0-use.local - resolution: "@react-facet/deferred-mount@workspace:packages/@react-facet/deferred-mount" - dependencies: - "@react-facet/dom-fiber-testing-library": 0.6.1 - react: ^16.9.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: - "@react-facet/core": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1058,34 +1552,33 @@ __metadata: resolution: "@react-facet/dom-components@workspace:packages/@react-facet/dom-components" dependencies: "@react-facet/core": 0.6.1 - "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^9.4.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@react-facet/dom-fiber-testing-library": 0.6.1 + "@testing-library/jest-dom": ^5.16.5 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-dom: ^16.9.0 + react: 18.2.0 + react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft -"@react-facet/dom-fiber-testing-library@0.6.1, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": +"@react-facet/dom-fiber-testing-library@0.6.1, @react-facet/dom-fiber-testing-library@workspace:^, @react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library": version: 0.0.0-use.local resolution: "@react-facet/dom-fiber-testing-library@workspace:packages/@react-facet/dom-fiber-testing-library" dependencies: "@react-facet/dom-fiber": 0.6.1 - "@testing-library/dom": ^8.0.0 - react: ^16.9.0 + "@testing-library/dom": ^8.20.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/dom-fiber": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1094,18 +1587,18 @@ __metadata: resolution: "@react-facet/dom-fiber@workspace:packages/@react-facet/dom-fiber" dependencies: "@react-facet/core": 0.6.1 - "@react-facet/dom-fiber-testing-library": 0.6.1 + "@react-facet/dom-fiber-testing-library": "workspace:^" "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@types/react-reconciler": ^0.28.0 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-reconciler: ^0.24.0 + react: 18.2.0 + react-reconciler: ^0.28.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1113,7 +1606,7 @@ __metadata: version: 0.0.0-use.local resolution: "@react-facet/eslint-config@workspace:packages/@react-facet/eslint-config" dependencies: - eslint-plugin-react-hooks: ^4.2.0 + eslint-plugin-react-hooks: ^4.6.0 peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 languageName: unknown @@ -1125,15 +1618,15 @@ __metadata: dependencies: "@react-facet/core": 0.6.1 "@react-facet/dom-fiber-testing-library": 0.6.1 - "@types/react": ^17.0.11 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 + react: 18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft @@ -1142,26 +1635,24 @@ __metadata: resolution: "@react-facet/spring@workspace:packages/@react-facet/spring" dependencies: "@react-facet/core": 0.6.1 - "@testing-library/jest-dom": ^5.10.1 - "@testing-library/react": ^9.4.1 - "@types/react": ^17.0.11 - "@types/react-reconciler": ^0.18.0 + "@testing-library/jest-dom": ^5.16.5 + "@types/react": ^18.0.8 "@types/rimraf": ^3 cross-env: ^7.0.3 - react: ^16.9.0 - react-dom: ^16.9.0 + react: 18.2.0 + react-dom: ^18.2.0 rimraf: ^3.0.2 typescript: ^4.8.2 peerDependencies: "@react-facet/core": 0.6.1 - react: ^16.9.0 + react: ^18.2.0 languageName: unknown linkType: soft -"@sheerun/mutationobserver-shim@npm:^0.3.2": - version: 0.3.3 - resolution: "@sheerun/mutationobserver-shim@npm:0.3.3" - checksum: 1bf2984b1ac69459ebd5adefd767439533c73c1fcba54678b73dd37f092b1471e322e6ac8937e899231315fc08c4e818d7e7cb2204babab8b32460872f2de868 +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.51 + resolution: "@sinclair/typebox@npm:0.24.51" + checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 languageName: node linkType: hard @@ -1174,106 +1665,45 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^6.0.1": - version: 6.0.1 - resolution: "@sinonjs/fake-timers@npm:6.0.1" +"@sinonjs/fake-timers@npm:^9.1.2": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" dependencies: "@sinonjs/commons": ^1.7.0 - checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 - languageName: node - linkType: hard - -"@testing-library/dom@npm:7.30.4": - version: 7.30.4 - resolution: "@testing-library/dom@npm:7.30.4" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 - aria-query: ^4.2.2 - chalk: ^4.1.0 - dom-accessibility-api: ^0.5.4 - lz-string: ^1.4.4 - pretty-format: ^26.6.2 - checksum: e25450bb1760097f4ec4a4339e615e751f1419bf1fa512d407df584fd9de0a65c7aec4f970a0bd8122952274570db3d3938dfa032ff40ea05bde0539e4fb170b - languageName: node - linkType: hard - -"@testing-library/dom@npm:^6.15.0": - version: 6.16.0 - resolution: "@testing-library/dom@npm:6.16.0" - dependencies: - "@babel/runtime": ^7.8.4 - "@sheerun/mutationobserver-shim": ^0.3.2 - "@types/testing-library__dom": ^6.12.1 - aria-query: ^4.0.2 - dom-accessibility-api: ^0.3.0 - pretty-format: ^25.1.0 - wait-for-expect: ^3.0.2 - checksum: bc6a8e073caf4d427777d1d43df581f5befd543ea396831fcf7421bd28dc168f85c03251932ea01593e6fc214022b14178e702aa7aa97137d0fba9baecd98f93 + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 languageName: node linkType: hard -"@testing-library/dom@npm:^8.0.0": - version: 8.7.2 - resolution: "@testing-library/dom@npm:8.7.2" +"@testing-library/dom@npm:^8.20.0": + version: 8.20.0 + resolution: "@testing-library/dom@npm:8.20.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 - aria-query: ^4.2.2 + "@types/aria-query": ^5.0.1 + aria-query: ^5.0.0 chalk: ^4.1.0 - dom-accessibility-api: ^0.5.6 + dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 9c0b2a9bc7aa92f22d909d677093d4d520c59de36013e97ba6eeaea4b4fccd3cae7e1221712bf079939b7d86aa69740441b206ae1cb9c3a1ecbb420070f4d0c9 - languageName: node - linkType: hard - -"@testing-library/jest-dom@npm:5.12.0": - version: 5.12.0 - resolution: "@testing-library/jest-dom@npm:5.12.0" - dependencies: - "@babel/runtime": ^7.9.2 - "@types/testing-library__jest-dom": ^5.9.1 - aria-query: ^4.2.2 - chalk: ^3.0.0 - css: ^3.0.0 - css.escape: ^1.5.1 - lodash: ^4.17.15 - redent: ^3.0.0 - checksum: d6af8912a7d121dba15b9defcddb33288a637e433478e8327a9d90b95077e5142eec41b1bbc91e3fd33b0c85478e94936b09021500f2602d9c3202c5d71475f2 + checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.10.1": - version: 5.14.1 - resolution: "@testing-library/jest-dom@npm:5.14.1" +"@testing-library/jest-dom@npm:^5.16.5": + version: 5.16.5 + resolution: "@testing-library/jest-dom@npm:5.16.5" dependencies: + "@adobe/css-tools": ^4.0.1 "@babel/runtime": ^7.9.2 "@types/testing-library__jest-dom": ^5.9.1 - aria-query: ^4.2.2 + aria-query: ^5.0.0 chalk: ^3.0.0 - css: ^3.0.0 css.escape: ^1.5.1 dom-accessibility-api: ^0.5.6 lodash: ^4.17.15 redent: ^3.0.0 - checksum: eeba37ba10be550bd9ab7dd0dda77d9011a96d9a4f75c70ed57d7bf120fe4126b251ccfb1444da1746c19773bbe4efbd96a0408f970d98c9cd1d399b2455d2c1 - languageName: node - linkType: hard - -"@testing-library/react@npm:^9.4.1": - version: 9.5.0 - resolution: "@testing-library/react@npm:9.5.0" - dependencies: - "@babel/runtime": ^7.8.4 - "@testing-library/dom": ^6.15.0 - "@types/testing-library__react": ^9.1.2 - peerDependencies: - react: "*" - react-dom: "*" - checksum: 41a7ba9f944774b180e907df7e8e0a309d68199e9ad1bcdc571fa062c2cf73c76b5b5291f14fd63633506a6cdcbb7b6f31733ff886303fc5e4d7616c78f0747b + checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a languageName: node linkType: hard @@ -1284,6 +1714,13 @@ __metadata: languageName: node linkType: hard +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.8 resolution: "@tsconfig/node10@npm:1.0.8" @@ -1312,10 +1749,10 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de languageName: node linkType: hard @@ -1332,6 +1769,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.1.14": + version: 7.1.20 + resolution: "@types/babel__core@npm:7.1.20" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a09c4f0456552547a5b8a5a009a3daec4d362f622168f8e08bda0ded2da0a65ab0b1642e23c433b3616721f5701dc34a996c5bde5baeaea53eda98f438043f2c + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.3 resolution: "@types/babel__generator@npm:7.6.3" @@ -1351,7 +1801,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": version: 7.14.2 resolution: "@types/babel__traverse@npm:7.14.2" dependencies: @@ -1422,6 +1872,15 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + "@types/html-minifier-terser@npm:^6.0.0": version: 6.0.0 resolution: "@types/html-minifier-terser@npm:6.0.0" @@ -1454,16 +1913,6 @@ __metadata: languageName: node linkType: hard -"@types/istanbul-reports@npm:^1.1.1": - version: 1.1.2 - resolution: "@types/istanbul-reports@npm:1.1.2" - dependencies: - "@types/istanbul-lib-coverage": "*" - "@types/istanbul-lib-report": "*" - checksum: 00866e815d1e68d0a590d691506937b79d8d65ad8eab5ed34dbfee66136c7c0f4ea65327d32046d5fe469f22abea2b294987591dc66365ebc3991f7e413b2d78 - languageName: node - linkType: hard - "@types/istanbul-reports@npm:^3.0.0": version: 3.0.1 resolution: "@types/istanbul-reports@npm:3.0.1" @@ -1483,6 +1932,17 @@ __metadata: languageName: node linkType: hard +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "*" + "@types/tough-cookie": "*" + parse5: ^7.0.0 + checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8": version: 7.0.9 resolution: "@types/json-schema@npm:7.0.9" @@ -1511,17 +1971,17 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.0": +"@types/prettier@npm:^2": version: 2.4.1 - resolution: "@types/normalize-package-data@npm:2.4.1" - checksum: e87bccbf11f95035c89a132b52b79ce69a1e3652fe55962363063c9c0dae0fe2477ebc585e03a9652adc6f381d24ba5589cc5e51849df4ced3d3e004a7d40ed5 + resolution: "@types/prettier@npm:2.4.1" + checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e languageName: node linkType: hard -"@types/prettier@npm:^2, @types/prettier@npm:^2.0.0": - version: 2.4.1 - resolution: "@types/prettier@npm:2.4.1" - checksum: df330c2d6fe7c282839b0f17701e069a9c6c96d2ff54704e933a1b3c1b98844d963a7cb00c5629d173604892ceee802312bbaeb8a97f5da21e13db8f653b519e +"@types/prettier@npm:^2.1.5": + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 languageName: node linkType: hard @@ -1550,32 +2010,45 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:*": - version: 17.0.9 - resolution: "@types/react-dom@npm:17.0.9" +"@types/react-reconciler@npm:^0.28.0": + version: 0.28.0 + resolution: "@types/react-reconciler@npm:0.28.0" dependencies: "@types/react": "*" - checksum: b7e898e1a22643a371f58e801a3d1d8cf13a82d77063c24be73e840ef8d877ca1d04adc5db168d0dac3167dc050a26b1d70efc5fe8566a7f46a3c488a8322989 + checksum: d7b3f870a9c2c0f6f9c27e3fedd4cb495bd377312d856ee846475152e8a817b032e47f8d349ec2a51a95be5c674a288288173ef658e469369d6fec1f77159cbb languageName: node linkType: hard -"@types/react-reconciler@npm:^0.18.0": - version: 0.18.0 - resolution: "@types/react-reconciler@npm:0.18.0" +"@types/react@npm:*": + version: 17.0.27 + resolution: "@types/react@npm:17.0.27" dependencies: - "@types/react": "*" - checksum: 15f7a0ba688f0949b5fa52772fd6f34b425a7ff1c81beb8facea58533422a9a33a82a35ad4951768b80aa17c32725f2cba677d5c440e925b09c5b791fcdc60c0 + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 3a1147d963c16dc9bbea5afb20c4be94f2389cf4eca4c5fbe9b02f3406bd9957602c0459ea017c95f8c3d523221f572e8bd842f94654835776d4c2923357f9dc languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^17.0.11": - version: 17.0.27 - resolution: "@types/react@npm:17.0.27" +"@types/react@npm:^17.0.11": + version: 17.0.52 + resolution: "@types/react@npm:17.0.52" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 3a1147d963c16dc9bbea5afb20c4be94f2389cf4eca4c5fbe9b02f3406bd9957602c0459ea017c95f8c3d523221f572e8bd842f94654835776d4c2923357f9dc + checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 + languageName: node + linkType: hard + +"@types/react@npm:^18.0.8": + version: 18.0.8 + resolution: "@types/react@npm:18.0.8" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 12d0e6bc390709926d8eaeb7d2edb4ef9c9fbe8eac41cb0619d958386700547bff91c880c2a12a9eb1e0d09afa4f1e86fd1b93164c627824465b72123f149f3b languageName: node linkType: hard @@ -1610,24 +2083,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__dom@npm:*": - version: 7.0.2 - resolution: "@types/testing-library__dom@npm:7.0.2" - dependencies: - pretty-format: ^25.1.0 - checksum: cc192d6f16e3589e67b921b73ddd3140b7f8106e57f3fb19874f7b1c5f891049e2fe372f112331d49febc260b158df75b3da466499e0fd79c223cfe126d64f46 - languageName: node - linkType: hard - -"@types/testing-library__dom@npm:^6.12.1": - version: 6.14.0 - resolution: "@types/testing-library__dom@npm:6.14.0" - dependencies: - pretty-format: ^24.3.0 - checksum: 1563762a685bb15da02499e826e0dd217c209e8bcdde9f65d98090cc0d50fc74a22af0ecb8803edd48159f8cc2bb0d750acdea0f2a11d0c59e969e69ab2fc8b8 - languageName: node - linkType: hard - "@types/testing-library__jest-dom@npm:^5.9.1": version: 5.14.1 resolution: "@types/testing-library__jest-dom@npm:5.14.1" @@ -1637,14 +2092,10 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__react@npm:^9.1.2": - version: 9.1.3 - resolution: "@types/testing-library__react@npm:9.1.3" - dependencies: - "@types/react-dom": "*" - "@types/testing-library__dom": "*" - pretty-format: ^25.1.0 - checksum: 2fc33f97d17fea35f1215cd1cd5899cbec4be897f2e21b13bf32cbac4234c88ca685517bdd142c1cebc8ee1ff74fa5ce5aff770f907f3bc116dc578e85972685 +"@types/tough-cookie@npm:*": + version: 4.0.2 + resolution: "@types/tough-cookie@npm:4.0.2" + checksum: e055556ffdaa39ad85ede0af192c93f93f986f4bd9e9426efdc2948e3e2632db3a4a584d4937dbf6d7620527419bc99e6182d3daf2b08685e710f2eda5291905 languageName: node linkType: hard @@ -1655,15 +2106,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^13.0.0": - version: 13.0.12 - resolution: "@types/yargs@npm:13.0.12" - dependencies: - "@types/yargs-parser": "*" - checksum: 4eb34d8c071892299646e5a3fb02a643f5a5ea8da8f4d1817001882ebbcfa4fbda235b8978732f8eb55fa16433296e2087907fe69678a69125f0dca627a91426 - languageName: node - linkType: hard - "@types/yargs@npm:^15.0.0": version: 15.0.14 resolution: "@types/yargs@npm:15.0.14" @@ -1682,6 +2124,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.19 + resolution: "@types/yargs@npm:17.0.19" + dependencies: + "@types/yargs-parser": "*" + checksum: 89a664ba6cef795a5b14a1b2cdc0e2a943cd654e61cc4286b6a704b944051bc30b0d7fec249dd2685cb6cfd17fdf0750d60ec69859aa5a5911c48a288284e842 + languageName: node + linkType: hard + "@types/yauzl@npm:^2.9.1": version: 2.9.2 resolution: "@types/yauzl@npm:2.9.2" @@ -2034,10 +2485,10 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e languageName: node linkType: hard @@ -2058,22 +2509,22 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 + acorn: ^8.1.0 + acorn-walk: ^8.0.2 + checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 languageName: node linkType: hard -"acorn-import-assertions@npm:^1.9.0": - version: 1.9.0 - resolution: "acorn-import-assertions@npm:1.9.0" +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" peerDependencies: acorn: ^8 - checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c + checksum: 1c0c49b6a244503964ae46ae850baccf306e84caf99bc2010ed6103c69a423987b07b520a6c619f075d215388bd4923eccac995886a54309eda049ab78a4be95 languageName: node linkType: hard @@ -2086,21 +2537,14 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -2109,30 +2553,30 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1": - version: 8.5.0 - resolution: "acorn@npm:8.5.0" +"acorn@npm:^8.1.0, acorn@npm:^8.5.0, acorn@npm:^8.8.1": + version: 8.8.1 + resolution: "acorn@npm:8.8.1" bin: acorn: bin/acorn - checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 + checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f languageName: node linkType: hard -"acorn@npm:^8.5.0": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" +"acorn@npm:^8.4.1": + version: 8.5.0 + resolution: "acorn@npm:8.5.0" bin: acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + checksum: 2e4c1dbed3da327684863debf31d341bf8882c6893c506653872c00977eee45675feb9129255d6c74c88424d2b20d889ca6de5b39776e5e3cccfc756b3ca1da8 languageName: node linkType: hard "acorn@npm:^8.7.1, acorn@npm:^8.8.2": - version: 8.11.3 - resolution: "acorn@npm:8.11.3" + version: 8.12.1 + resolution: "acorn@npm:8.12.1" bin: acorn: bin/acorn - checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 languageName: node linkType: hard @@ -2238,14 +2682,7 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.0.0": - version: 4.1.0 - resolution: "ansi-regex@npm:4.1.0" - checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": +"ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b @@ -2259,7 +2696,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -2337,13 +2774,10 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^4.0.2, aria-query@npm:^4.2.2": - version: 4.2.2 - resolution: "aria-query@npm:4.2.2" - dependencies: - "@babel/runtime": ^7.10.2 - "@babel/runtime-corejs3": ^7.10.2 - checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665 +"aria-query@npm:^5.0.0": + version: 5.0.0 + resolution: "aria-query@npm:5.0.0" + checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 languageName: node linkType: hard @@ -2484,7 +2918,7 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^26.0.1, babel-jest@npm:^26.6.3": +"babel-jest@npm:^26.0.1": version: 26.6.3 resolution: "babel-jest@npm:26.6.3" dependencies: @@ -2502,6 +2936,23 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.3.1": + version: 29.3.1 + resolution: "babel-jest@npm:29.3.1" + dependencies: + "@jest/transform": ^29.3.1 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.2.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 + languageName: node + linkType: hard + "babel-plugin-dynamic-import-node@npm:^2.3.3": version: 2.3.3 resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" @@ -2524,6 +2975,19 @@ __metadata: languageName: node linkType: hard +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + "babel-plugin-jest-hoist@npm:^26.6.2": version: 26.6.2 resolution: "babel-plugin-jest-hoist@npm:26.6.2" @@ -2536,6 +3000,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-jest-hoist@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-plugin-jest-hoist@npm:29.2.0" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 + languageName: node + linkType: hard + "babel-preset-current-node-syntax@npm:^1.0.0": version: 1.0.1 resolution: "babel-preset-current-node-syntax@npm:1.0.1" @@ -2570,6 +3046,18 @@ __metadata: languageName: node linkType: hard +"babel-preset-jest@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-preset-jest@npm:29.2.0" + dependencies: + babel-plugin-jest-hoist: ^29.2.0 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2629,8 +3117,8 @@ __metadata: http-server: ^13.0.2 puppeteer: ^10.4.0 ramda: ^0.27.1 - react: ^16.9.0 - react-dom: ^16.9.0 + react: 18.2.0 + react-dom: ^18.2.0 ts-loader: ^9.2.5 ts-node: ^10.3.1 typescript: ^4.8.2 @@ -2734,13 +3222,6 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - "browserslist@npm:^4.16.6": version: 4.17.3 resolution: "browserslist@npm:4.17.3" @@ -2757,16 +3238,30 @@ __metadata: linkType: hard "browserslist@npm:^4.21.10": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" + dependencies: + caniuse-lite: ^1.0.30001646 + electron-to-chromium: ^1.5.4 + node-releases: ^2.0.18 + update-browserslist-db: ^1.1.0 + bin: + browserslist: cli.js + checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e + languageName: node + linkType: hard + +"browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" dependencies: - caniuse-lite: ^1.0.30001587 - electron-to-chromium: ^1.4.668 - node-releases: ^2.0.14 - update-browserslist-db: ^1.0.13 + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.9 bin: browserslist: cli.js - checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 languageName: node linkType: hard @@ -2901,17 +3396,17 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": +"camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard -"camelcase@npm:^6.0.0": - version: 6.2.0 - resolution: "camelcase@npm:6.2.0" - checksum: 8335cfd0ecc472eae685896a42afd8c9dacd193a91f569120b931c87deb053a1ba82102031b9b48a4dbc1d18066caeacf2e4ace8c3c7f0d02936d348dc0b5a87 +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard @@ -2922,10 +3417,17 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001615 - resolution: "caniuse-lite@npm:1.0.30001615" - checksum: 998e4c4ed4204fff6916dee3f23a082fcc456bd1fa6e6d42c62ec9f7830d0e1d45c3b8b22b7576f1d403e838b3eeab1d93125eb3316d07809b3113a5729fdfa9 +"caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001445 + resolution: "caniuse-lite@npm:1.0.30001445" + checksum: f98ca67829c3c52af5af0a62b8510432b2ad9594437d24ad460a6eb1a23d93e7a31631b1f550fbbe482ad05c467aa00da710a41699eb13d1f246d7db4147ab79 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001651 + resolution: "caniuse-lite@npm:1.0.30001651" + checksum: c31a5a01288e70cdbbfb5cd94af3df02f295791673173b8ce6d6a16db4394a6999197d44190be5a6ff06b8c2c7d2047e94dfd5e5eb4c103ab000fca2d370afc7 languageName: node linkType: hard @@ -3023,10 +3525,17 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^0.6.0": - version: 0.6.0 - resolution: "cjs-module-lexer@npm:0.6.0" - checksum: 445b039607efd74561d7db8d0867031c8b6a69f25e83fdd861b0fa1fbc11f12de057ba1db80637f3c9016774354092af5325eebb90505d65ccc5389cae09d1fd +"ci-info@npm:^3.2.0": + version: 3.7.1 + resolution: "ci-info@npm:3.7.1" + checksum: 72d93d5101ea1c186511277fbd8d06ae8a6e028cc2fb94361e92bf735b39c5ebd192e8d15a66ff8c4e3ed569f87c2f844e96f90e141b2de5c649f77ec34ff601 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" + checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 languageName: node linkType: hard @@ -3058,14 +3567,14 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard @@ -3264,6 +3773,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -3285,13 +3801,6 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.16.0": - version: 3.18.2 - resolution: "core-js-pure@npm:3.18.2" - checksum: 1f8ddec0c4f3203ad185c0208b635ec4242fe004282d3cd0e6bb8386b4dcb21b43c702a4aa5254bbbfb3dc611301ddcf9af5b6714c926dce5563c380b7a314a5 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -3338,7 +3847,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -3376,21 +3885,10 @@ __metadata: languageName: node linkType: hard -"css@npm:^3.0.0": - version: 3.0.0 - resolution: "css@npm:3.0.0" - dependencies: - inherits: ^2.0.4 - source-map: ^0.6.1 - source-map-resolve: ^0.6.0 - checksum: 4273ac816ddf99b99acb9c1d1a27d86d266a533cc01118369d941d8e8a78277a83cad3315e267a398c509d930fbb86504e193ea1ebc620a4a4212e06fe76e8be - languageName: node - linkType: hard - -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 languageName: node linkType: hard @@ -3417,14 +3915,14 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 + abab: ^2.0.6 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 languageName: node linkType: hard @@ -3482,17 +3980,10 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decimal.js@npm:^10.2.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae languageName: node linkType: hard @@ -3503,6 +3994,13 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^0.7.0": + version: 0.7.0 + resolution: "dedent@npm:0.7.0" + checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 + languageName: node + linkType: hard + "deep-equal@npm:^1.0.1": version: 1.1.1 resolution: "deep-equal@npm:1.1.1" @@ -3659,13 +4157,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^26.6.2": - version: 26.6.2 - resolution: "diff-sequences@npm:26.6.2" - checksum: 79af871776ef149a7ff3345d6b1bf37fe6e81f68632aa5542787851f6f60fba19b0be22fdd1e06046f56ae7382763ccfe94a982c39ee72bd107aef435ecbc0cf - languageName: node - linkType: hard - "diff-sequences@npm:^27.0.6": version: 27.0.6 resolution: "diff-sequences@npm:27.0.6" @@ -3673,6 +4164,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.3.1": + version: 29.3.1 + resolution: "diff-sequences@npm:29.3.1" + checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -3733,20 +4231,20 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.3.0": - version: 0.3.0 - resolution: "dom-accessibility-api@npm:0.3.0" - checksum: d54996748e8c81d4fe095edde0a601c94133c2f4c7e0e245310272c4c04af2c4daf476e5150d27b94b22a6e11816ea97d16125ed135e2607a2a63477fcc7feb8 - languageName: node - linkType: hard - -"dom-accessibility-api@npm:^0.5.4, dom-accessibility-api@npm:^0.5.6": +"dom-accessibility-api@npm:^0.5.6": version: 0.5.8 resolution: "dom-accessibility-api@npm:0.5.8" checksum: 6ede8578a7e6123f2eb27c04ff4c7947cb1362f73105c2cf75b700d94ff82740f9566025357f46ced4ae9fa2a6f6f101f4b910bb308ab516e247ed77951f46e5 languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.14 + resolution: "dom-accessibility-api@npm:0.5.14" + checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e + languageName: node + linkType: hard + "dom-converter@npm:^0.2.0": version: 0.2.0 resolution: "dom-converter@npm:0.2.0" @@ -3774,12 +4272,12 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 + webidl-conversions: ^7.0.0 + checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 languageName: node linkType: hard @@ -3827,17 +4325,24 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.668": - version: 1.4.754 - resolution: "electron-to-chromium@npm:1.4.754" - checksum: e4a49f2a4e2d51a659596d31d748280b59cbcd3af2cbdf5cf30f0bdc1fb981c426522470826b153a94ae8e58baea7d2a1c8bd77c6c85839bac2a4efc9ecb7b2e +"electron-to-chromium@npm:^1.4.251": + version: 1.4.284 + resolution: "electron-to-chromium@npm:1.4.284" + checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.4": + version: 1.5.6 + resolution: "electron-to-chromium@npm:1.5.6" + checksum: 09ca45c781e3e3ef87de87fb74019228f41e1a4abd2e703319aa7d942866815f3df89cc4bf61af81a4cac81271992d4f59a5eca7a093c07322ae0608bf98a427 languageName: node linkType: hard -"emittery@npm:^0.7.1": - version: 0.7.2 - resolution: "emittery@npm:0.7.2" - checksum: 908cd933d48a9bcb58ddf39e9a7d4ba1e049de392ccbef010102539a636e03cea2b28218331b7ede41de8165d9ed7f148851c5112ebd2e943117c0f61eff5f10 +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -3893,13 +4398,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.16.0": - version: 5.16.0 - resolution: "enhanced-resolve@npm:5.16.0" +"enhanced-resolve@npm:^5.17.0": + version: 5.17.1 + resolution: "enhanced-resolve@npm:5.17.1" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: ccfd01850ecf2aa51e8554d539973319ff7d8a539ef1e0ba3460a0ccad6223c4ef6e19165ee64161b459cd8a48df10f52af4434c60023c65fde6afa32d475f7e + checksum: 4bc38cf1cea96456f97503db7280394177d1bc46f8f87c267297d04f795ac5efa81e48115a2f5b6273c781027b5b6bfc5f62b54df629e4d25fa7001a86624f59 languageName: node linkType: hard @@ -3919,6 +4424,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.4.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -4012,9 +4524,9 @@ __metadata: linkType: hard "es-module-lexer@npm:^1.2.1": - version: 1.5.2 - resolution: "es-module-lexer@npm:1.5.2" - checksum: 59c47109eca80b93dda2418337b4308c194c578704dc57d5aa54973b196e378d31e92f258e5525655b99b3de8a84dda2debb9646cddf6fe8830f1bfca95ee060 + version: 1.5.4 + resolution: "es-module-lexer@npm:1.5.4" + checksum: a0cf04fb92d052647ac7d818d1913b98d3d3d0f5b9d88f0eafb993436e4c3e2c958599db68839d57f2dfa281fdf0f60e18d448eb78fc292c33c0f25635b6854f languageName: node linkType: hard @@ -4190,12 +4702,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^4.1.1, eslint-plugin-react-hooks@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-plugin-react-hooks@npm:4.2.0" +"eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - checksum: ead5c5be3ded82a0cf295b064376adb1998a43e2262b605eecc0efc88283dec4e159ca39307fafb3d8e661dd08e5a4c8cdfed97eea78f923954f72bad6e20397 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 languageName: node linkType: hard @@ -4444,23 +4956,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^4.0.0": - version: 4.1.0 - resolution: "execa@npm:4.1.0" - dependencies: - cross-spawn: ^7.0.0 - get-stream: ^5.0.0 - human-signals: ^1.1.1 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.0 - onetime: ^5.1.0 - signal-exit: ^3.0.2 - strip-final-newline: ^2.0.0 - checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 - languageName: node - linkType: hard - "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -4500,17 +4995,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^26.6.2": - version: 26.6.2 - resolution: "expect@npm:26.6.2" +"expect@npm:^29.3.1": + version: 29.3.1 + resolution: "expect@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - ansi-styles: ^4.0.0 - jest-get-type: ^26.3.0 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-regex-util: ^26.0.0 - checksum: 79a9b888c5c6d37d11f2cb76def6cf1dc8ff098d38662ee20c9f2ee0da67e9a93435f2327854b2e7554732153870621843e7f83e8cefb1250447ee2bc39883a4 + "@jest/expect-utils": ^29.3.1 + jest-get-type: ^29.2.0 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 languageName: node linkType: hard @@ -4644,7 +5138,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -4799,14 +5293,14 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c languageName: node linkType: hard @@ -4874,7 +5368,7 @@ __metadata: languageName: node linkType: hard -"fsevents@^2.1.2, fsevents@~2.3.2": +"fsevents@^2.1.2, fsevents@npm:^2.3.2, fsevents@~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -4884,7 +5378,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -4949,7 +5443,7 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.1": +"get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 @@ -5001,7 +5495,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -5057,7 +5551,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: @@ -5169,10 +5663,10 @@ __metadata: languageName: node linkType: hard -"growly@npm:^1.3.0": - version: 1.3.0 - resolution: "growly@npm:1.3.0" - checksum: 53cdecd4c16d7d9154a9061a9ccb87d602e957502ca69b529d7d1b2436c2c0b700ec544fc6b3e4cd115d59b81e62e44ce86bd0521403b579d3a2a97d7ce72a44 +"graceful-fs@npm:^4.2.9": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da languageName: node linkType: hard @@ -5307,13 +5801,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^2.1.4": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - "hpack.js@npm:^2.1.6": version: 2.1.6 resolution: "hpack.js@npm:2.1.6" @@ -5326,12 +5813,12 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba + whatwg-encoding: ^2.0.0 + checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 languageName: node linkType: hard @@ -5463,6 +5950,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + "http-proxy-middleware@npm:^2.0.0": version: 2.0.1 resolution: "http-proxy-middleware@npm:2.0.1" @@ -5519,10 +6017,13 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^1.1.1": - version: 1.1.1 - resolution: "human-signals@npm:1.1.1" - checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard @@ -5551,7 +6052,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -6190,7 +6691,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^4.0.0, istanbul-lib-instrument@npm:^4.0.3": +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^4.0.0": version: 4.0.3 resolution: "istanbul-lib-instrument@npm:4.0.3" dependencies: @@ -6202,6 +6710,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.0 resolution: "istanbul-lib-report@npm:3.0.0" @@ -6224,90 +6745,115 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.0.2": - version: 3.0.3 - resolution: "istanbul-reports@npm:3.0.3" +"istanbul-reports@npm:^3.1.3": + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 56b54e82ac2121ecb79664924eec2987494ef7b19333d686d6b72686ab411172e9c93f8d27d8be7e15ee468de25749f8b1b6b093a73697f443751795954212aa + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard -"jest-changed-files@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-changed-files@npm:26.6.2" +"jest-changed-files@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-changed-files@npm:29.2.0" dependencies: - "@jest/types": ^26.6.2 - execa: ^4.0.0 - throat: ^5.0.0 - checksum: 8c405f5ff905ee69ace9fd39355233206e3e233badf6a3f3b27e45bbf0a46d86943430be2e080d25b1e085f4231b9b3b27c94317aa04116efb40b592184066f4 + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 languageName: node linkType: hard -"jest-cli@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-cli@npm:26.6.3" +"jest-circus@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-circus@npm:29.3.1" dependencies: - "@jest/core": ^26.6.3 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + p-limit: ^3.1.0 + pretty-format: ^29.3.1 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 + languageName: node + linkType: hard + +"jest-cli@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-cli@npm:29.3.1" + dependencies: + "@jest/core": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 exit: ^0.1.2 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 import-local: ^3.0.2 - is-ci: ^2.0.0 - jest-config: ^26.6.3 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 + jest-config: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 prompts: ^2.0.1 - yargs: ^15.4.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true bin: jest: bin/jest.js - checksum: c8554147be756f09f5566974f0026485f78742e8642d2723f8fbee5746f50f44fb72b17aad181226655a8446d3ecc8ad8ed0a11a8a55686fa2b9c10d85700121 + checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d languageName: node linkType: hard -"jest-config@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-config@npm:26.6.3" +"jest-config@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-config@npm:29.3.1" dependencies: - "@babel/core": ^7.1.0 - "@jest/test-sequencer": ^26.6.3 - "@jest/types": ^26.6.2 - babel-jest: ^26.6.3 + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.3.1 + "@jest/types": ^29.3.1 + babel-jest: ^29.3.1 chalk: ^4.0.0 + ci-info: ^3.2.0 deepmerge: ^4.2.2 - glob: ^7.1.1 - graceful-fs: ^4.2.4 - jest-environment-jsdom: ^26.6.2 - jest-environment-node: ^26.6.2 - jest-get-type: ^26.3.0 - jest-jasmine2: ^26.6.3 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.3.1 + jest-environment-node: ^29.3.1 + jest-get-type: ^29.2.0 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-runner: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.3.1 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 peerDependencies: + "@types/node": "*" ts-node: ">=9.0.0" peerDependenciesMeta: + "@types/node": + optional: true ts-node: optional: true - checksum: 303c798582d3c5d4b4e6ab8a4d91a83ded28e4ebbc0bcfc1ad271f9864437ef5409b7c7773010143811bc8176b0695c096717b91419c6484b56dcc032560a74b - languageName: node - linkType: hard - -"jest-diff@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-diff@npm:26.6.2" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: d00d297f31e1ac0252127089892432caa7a11c69bde29cf3bb6c7a839c8afdb95cf1fd401f9df16a4422745da2e6a5d94b428b30666a2540c38e1c5699915c2d + checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe languageName: node linkType: hard @@ -6323,61 +6869,72 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^26.0.0": - version: 26.0.0 - resolution: "jest-docblock@npm:26.0.0" +"jest-diff@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-diff@npm:29.3.1" dependencies: - detect-newline: ^3.0.0 - checksum: e03ef104ee8c571335e6fa394b8fc8d2bd87eec9fe8b3d7d9aac056ada7de288f37ee8ac4922bb3a4222ac304db975d8832d5abc85486092866c534a16847cd5 + chalk: ^4.0.0 + diff-sequences: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 languageName: node linkType: hard -"jest-each@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-each@npm:26.6.2" +"jest-docblock@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-docblock@npm:29.2.0" dependencies: - "@jest/types": ^26.6.2 - chalk: ^4.0.0 - jest-get-type: ^26.3.0 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - checksum: 4e00ea4667e4fe015b894dc698cce0ae695cf458e021e5da62d4a5b052cd2c0a878da93f8c97cbdde60bcecf70982e8d3a7a5d63e1588f59531cc797a18c39ef + detect-newline: ^3.0.0 + checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe languageName: node linkType: hard -"jest-environment-jsdom@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-jsdom@npm:26.6.2" +"jest-each@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-each@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - jsdom: ^16.4.0 - checksum: 8af9ffdf1b147362a19032bfe9ed51b709d43c74dc4b1c45e56d721808bf6cabdca8c226855b55a985ea196ce51cdb171bfe420ceec3daa2d13818d5c1915890 + "@jest/types": ^29.3.1 + chalk: ^4.0.0 + jest-get-type: ^29.2.0 + jest-util: ^29.3.1 + pretty-format: ^29.3.1 + checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a languageName: node linkType: hard -"jest-environment-node@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-environment-node@npm:26.6.2" +"jest-environment-jsdom@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-jsdom@npm:29.3.1" dependencies: - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/jsdom": ^20.0.0 "@types/node": "*" - jest-mock: ^26.6.2 - jest-util: ^26.6.2 - checksum: 0b69b481e6d6f2350ed241c2dabc70b0b1f3a00f9a410b7dad97c8ab38e88026acf7445ca663eb314f46ff50acee0133100b1006bf4ebda5298ffb02763a6861 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + jsdom: ^20.0.0 + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 91b04ed02b2275c3a47740e20c2691f67c4295e17174c8ccd3a71fe77707239e487506bd157279b4257ce1be0a8c2be377817ee85689966a9e604bb6ef1199f0 languageName: node linkType: hard -"jest-get-type@npm:^26.3.0": - version: 26.3.0 - resolution: "jest-get-type@npm:26.3.0" - checksum: 1cc6465ae4f5e880be22ba52fd270fa64c21994915f81b41f8f7553a7957dd8e077cc8d03035de9412e2d739f8bad6a032ebb5dab5805692a5fb9e20dd4ea666 +"jest-environment-node@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-node@npm:29.3.1" + dependencies: + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a languageName: node linkType: hard @@ -6388,6 +6945,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-get-type@npm:29.2.0" + checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 + languageName: node + linkType: hard + "jest-haste-map@npm:^26.6.2": version: 26.6.2 resolution: "jest-haste-map@npm:26.6.2" @@ -6413,87 +6977,76 @@ __metadata: languageName: node linkType: hard -"jest-jasmine2@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-jasmine2@npm:26.6.3" +"jest-haste-map@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-haste-map@npm:29.3.1" dependencies: - "@babel/traverse": ^7.1.0 - "@jest/environment": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 + "@types/graceful-fs": ^4.1.3 "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^26.6.2 - is-generator-fn: ^2.0.0 - jest-each: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-runtime: ^26.6.3 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - pretty-format: ^26.6.2 - throat: ^5.0.0 - checksum: 41df0b993ae0cdeb2660fb3d8e88e2dcc83aec6b5c27d85eb233c2d507b546f8dce45fc54898ffbefa48ccc4633f225d0e023fd0979b8f7f2f1626074a69a9a3 - languageName: node - linkType: hard - -"jest-junit-reporter@npm:^1.1.0": - version: 1.1.0 - resolution: "jest-junit-reporter@npm:1.1.0" - dependencies: - xml: ^1.0.1 - checksum: 265130d8179b5a6e51ca55547297d07f147ceeead5e3ea44d19db7b15df2259559e49ae3dceb008367ceb23282f36dfcb1a92df74bf359a3ef8f8a9ebcb5dbe2 + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.2.0 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c languageName: node linkType: hard -"jest-leak-detector@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-leak-detector@npm:26.6.2" +"jest-leak-detector@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-leak-detector@npm:29.3.1" dependencies: - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 364dd4d021347e26c66ba9c09da8a30477f14a3a8a208d2d7d64e4c396db81b85d8cb6b6834bcfc47a61b5938e274553957d11a7de2255f058c9d55d7f8fdfe7 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 languageName: node linkType: hard -"jest-matcher-utils@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-matcher-utils@npm:26.6.2" +"jest-matcher-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-matcher-utils@npm:29.3.1" dependencies: chalk: ^4.0.0 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - pretty-format: ^26.6.2 - checksum: 74d2165c1ac7fe98fe27cd2b5407499478e6b2fe99dd54e26d8ee5c9f5f913bdd7bdc07c7221b9b04df0c15e9be0e866ff3455b03e38cc66c480d9996d6d5405 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.3.1 + checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 languageName: node linkType: hard -"jest-message-util@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-message-util@npm:26.6.2" +"jest-message-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-message-util@npm:29.3.1" dependencies: - "@babel/code-frame": ^7.0.0 - "@jest/types": ^26.6.2 + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.3.1 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 - graceful-fs: ^4.2.4 - micromatch: ^4.0.2 - pretty-format: ^26.6.2 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.3.1 slash: ^3.0.0 - stack-utils: ^2.0.2 - checksum: ffe5a715591c41240b9ed4092faf10f3eaf9ddfdf25d257a0c9f903aaa8d9eed5baa7e38016d2ec4f610fd29225e0f5231a91153e087a043e62824972c83d015 + stack-utils: ^2.0.3 + checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b languageName: node linkType: hard -"jest-mock@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-mock@npm:26.6.2" +"jest-mock@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-mock@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 + "@jest/types": ^29.3.1 "@types/node": "*" - checksum: 6c0fe028ff0cdc87b5d63b9ca749af04cae6c5577aaab234f602e546cae3f4b932adac9d77e6de2abb24955ee00978e1e5d5a861725654e2f9a42317d91fbc1f + jest-util: ^29.3.1 + checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 languageName: node linkType: hard @@ -6516,95 +7069,96 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-resolve-dependencies@npm:26.6.3" +"jest-regex-util@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-regex-util@npm:29.2.0" + checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve-dependencies@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - jest-regex-util: ^26.0.0 - jest-snapshot: ^26.6.2 - checksum: 533ea1e271426006ff02c03c9802b108fcd68f2144615b6110ae59f3a0a2cc4a7abb3f44c3c65299c76b3a725d5d8220aaed9c58b79c8c8c508c18699a96e3f7 + jest-regex-util: ^29.2.0 + jest-snapshot: ^29.3.1 + checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 languageName: node linkType: hard -"jest-resolve@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-resolve@npm:26.6.2" +"jest-resolve@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 chalk: ^4.0.0 - graceful-fs: ^4.2.4 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^26.6.2 - read-pkg-up: ^7.0.1 - resolve: ^1.18.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + resolve: ^1.20.0 + resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: d6264d3f39b098753802a237c8c54f3109f5f3b3b7fa6f8d7aec7dca01b357ddf518ce1c33a68454357c15f48fb3c6026a92b9c4f5d72f07e24e80f04bcc8d58 + checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f languageName: node linkType: hard -"jest-runner@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runner@npm:26.6.3" +"jest-runner@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runner@npm:29.3.1" dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/console": ^29.3.1 + "@jest/environment": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.7.1 - exit: ^0.1.2 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-docblock: ^26.0.0 - jest-haste-map: ^26.6.2 - jest-leak-detector: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 - jest-runtime: ^26.6.3 - jest-util: ^26.6.2 - jest-worker: ^26.6.2 - source-map-support: ^0.5.6 - throat: ^5.0.0 - checksum: ccd69918baa49a5efa45985cf60cfa1fbb1686b32d7a86296b7b55f89684e36d1f08e62598c4b7be7e81f2cf2e245d1a65146ea7bdcaedfa6ed176d3e645d7e2 - languageName: node - linkType: hard - -"jest-runtime@npm:^26.6.3": - version: 26.6.3 - resolution: "jest-runtime@npm:26.6.3" - dependencies: - "@jest/console": ^26.6.2 - "@jest/environment": ^26.6.2 - "@jest/fake-timers": ^26.6.2 - "@jest/globals": ^26.6.2 - "@jest/source-map": ^26.6.2 - "@jest/test-result": ^26.6.2 - "@jest/transform": ^26.6.2 - "@jest/types": ^26.6.2 - "@types/yargs": ^15.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.2.0 + jest-environment-node: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-leak-detector: ^29.3.1 + jest-message-util: ^29.3.1 + jest-resolve: ^29.3.1 + jest-runtime: ^29.3.1 + jest-util: ^29.3.1 + jest-watcher: ^29.3.1 + jest-worker: ^29.3.1 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runtime@npm:29.3.1" + dependencies: + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/globals": ^29.3.1 + "@jest/source-map": ^29.2.0 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/node": "*" chalk: ^4.0.0 - cjs-module-lexer: ^0.6.0 + cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 glob: ^7.1.3 - graceful-fs: ^4.2.4 - jest-config: ^26.6.3 - jest-haste-map: ^26.6.2 - jest-message-util: ^26.6.2 - jest-mock: ^26.6.2 - jest-regex-util: ^26.0.0 - jest-resolve: ^26.6.2 - jest-snapshot: ^26.6.2 - jest-util: ^26.6.2 - jest-validate: ^26.6.2 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 strip-bom: ^4.0.0 - yargs: ^15.4.1 - bin: - jest-runtime: bin/jest-runtime.js - checksum: 867922b49f9ab4cf2f5f1356ac3d9962c4477c7a2ff696cc841ea4c600ea389e7d6dfcbf945fec6849e606f81980addf31e4f34d63eaa3d3415f4901de2f605a + checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 languageName: node linkType: hard @@ -6618,36 +7172,35 @@ __metadata: languageName: node linkType: hard -"jest-snapshot@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-snapshot@npm:26.6.2" +"jest-snapshot@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-snapshot@npm:29.3.1" dependencies: - "@babel/types": ^7.0.0 - "@jest/types": ^26.6.2 - "@types/babel__traverse": ^7.0.4 - "@types/prettier": ^2.0.0 + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^26.6.2 - graceful-fs: ^4.2.4 - jest-diff: ^26.6.2 - jest-get-type: ^26.3.0 - jest-haste-map: ^26.6.2 - jest-matcher-utils: ^26.6.2 - jest-message-util: ^26.6.2 - jest-resolve: ^26.6.2 + expect: ^29.3.1 + graceful-fs: ^4.2.9 + jest-diff: ^29.3.1 + jest-get-type: ^29.2.0 + jest-haste-map: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 natural-compare: ^1.4.0 - pretty-format: ^26.6.2 - semver: ^7.3.2 - checksum: 53f1de055b1d3840bc6e851fd674d5991b844d4695dadbd07354c93bf191048d8767b8606999847e97c4214a485b9afb45c1d2411772befa1870414ac973b3e2 - languageName: node - linkType: hard - -"jest-sonar-reporter@npm:2.0.0": - version: 2.0.0 - resolution: "jest-sonar-reporter@npm:2.0.0" - dependencies: - xml: ^1.0.1 - checksum: a79d87f0db6d83c9306b90b1fe44fa8ea19f1598c3bd11d3198b17617c54b9bd8e982ea3b5a857865acf2f6f96b830321e684e320f7961bcb7444935029be724 + pretty-format: ^29.3.1 + semver: ^7.3.5 + checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae languageName: node linkType: hard @@ -6665,32 +7218,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-validate@npm:26.6.2" +"jest-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-util@npm:29.3.1" dependencies: - "@jest/types": ^26.6.2 - camelcase: ^6.0.0 + "@jest/types": ^29.3.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 + languageName: node + linkType: hard + +"jest-validate@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-validate@npm:29.3.1" + dependencies: + "@jest/types": ^29.3.1 + camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^26.3.0 + jest-get-type: ^29.2.0 leven: ^3.1.0 - pretty-format: ^26.6.2 - checksum: bac11d6586d9b8885328a4a66eec45b692e45ac23034a5c09eb0ee32de324f2d3d52b073e0c34e9c222b3642b083d1152a736cf24c52109e4957537d731ca62b + pretty-format: ^29.3.1 + checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c languageName: node linkType: hard -"jest-watcher@npm:^26.6.2": - version: 26.6.2 - resolution: "jest-watcher@npm:26.6.2" +"jest-watcher@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-watcher@npm:29.3.1" dependencies: - "@jest/test-result": ^26.6.2 - "@jest/types": ^26.6.2 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - jest-util: ^26.6.2 + emittery: ^0.13.1 + jest-util: ^29.3.1 string-length: ^4.0.1 - checksum: 401137f1a73bf23cdf390019ebffb3f6f89c53ca49d48252d1dd6daf17a68787fef75cc55a623de28b63d87d0e8f13d8972d7dd06740f2f64f7b2a0409d119d2 + checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 languageName: node linkType: hard @@ -6716,16 +7284,34 @@ __metadata: languageName: node linkType: hard -"jest@npm:^26.1.0": - version: 26.6.3 - resolution: "jest@npm:26.6.3" +"jest-worker@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-worker@npm:29.3.1" + dependencies: + "@types/node": "*" + jest-util: ^29.3.1 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 + languageName: node + linkType: hard + +"jest@npm:^29.3.1": + version: 29.3.1 + resolution: "jest@npm:29.3.1" dependencies: - "@jest/core": ^26.6.3 + "@jest/core": ^29.3.1 + "@jest/types": ^29.3.1 import-local: ^3.0.2 - jest-cli: ^26.6.3 + jest-cli: ^29.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true bin: jest: bin/jest.js - checksum: 3a9b4c70e9bd5391e7367a0036045c1d3545c2a39e1439a71fb4b59b1748bc34e2ccb324faa1046b99bffc8dc2ed7b3c59016c462255b2646f5fa9300351f914 + checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a languageName: node linkType: hard @@ -6748,43 +7334,42 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.4.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" dependencies: - abab: ^2.0.5 - acorn: ^8.2.4 - acorn-globals: ^6.0.0 - cssom: ^0.4.4 + abab: ^2.0.6 + acorn: ^8.8.1 + acorn-globals: ^7.0.0 + cssom: ^0.5.0 cssstyle: ^2.3.0 - data-urls: ^2.0.0 - decimal.js: ^10.2.1 - domexception: ^2.0.1 + data-urls: ^3.0.2 + decimal.js: ^10.4.2 + domexception: ^4.0.0 escodegen: ^2.0.0 - form-data: ^3.0.0 - html-encoding-sniffer: ^2.0.1 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 + form-data: ^4.0.0 + html-encoding-sniffer: ^3.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.1 is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.0 - parse5: 6.0.1 - saxes: ^5.0.1 + nwsapi: ^2.2.2 + parse5: ^7.1.1 + saxes: ^6.0.0 symbol-tree: ^3.2.4 - tough-cookie: ^4.0.0 - w3c-hr-time: ^1.0.2 - w3c-xmlserializer: ^2.0.0 - webidl-conversions: ^6.1.0 - whatwg-encoding: ^1.0.5 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.5.0 - ws: ^7.4.6 - xml-name-validator: ^3.0.0 + tough-cookie: ^4.1.2 + w3c-xmlserializer: ^4.0.0 + webidl-conversions: ^7.0.0 + whatwg-encoding: ^2.0.0 + whatwg-mimetype: ^3.0.0 + whatwg-url: ^11.0.0 + ws: ^8.11.0 + xml-name-validator: ^4.0.0 peerDependencies: canvas: ^2.5.0 peerDependenciesMeta: canvas: optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 + checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 languageName: node linkType: hard @@ -6847,6 +7432,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -6980,7 +7574,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -7007,6 +7601,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -7064,6 +7667,15 @@ __metadata: languageName: node linkType: hard +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + "makeerror@npm:1.0.x": version: 1.0.11 resolution: "makeerror@npm:1.0.11" @@ -7171,7 +7783,23 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": version: 2.1.33 resolution: "mime-types@npm:2.1.33" dependencies: @@ -7494,20 +8122,6 @@ __metadata: languageName: node linkType: hard -"node-notifier@npm:^8.0.0": - version: 8.0.2 - resolution: "node-notifier@npm:8.0.2" - dependencies: - growly: ^1.3.0 - is-wsl: ^2.2.0 - semver: ^7.3.2 - shellwords: ^0.1.1 - uuid: ^8.3.0 - which: ^2.0.2 - checksum: 7db1683003f6aaa4324959dfa663cd56e301ccc0165977a9e7737989ffe3b4763297f9fc85f44d0662b63a4fd85516eda43411b492a4d2fae207afb23773f912 - languageName: node - linkType: hard - "node-releases@npm:^1.1.77": version: 1.1.77 resolution: "node-releases@npm:1.1.77" @@ -7515,10 +8129,17 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.6": + version: 2.0.8 + resolution: "node-releases@npm:2.0.8" + checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a languageName: node linkType: hard @@ -7527,21 +8148,9 @@ __metadata: resolution: "nopt@npm:5.0.0" dependencies: abbrev: 1 - bin: - nopt: bin/nopt.js - checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f - languageName: node - linkType: hard - -"normalize-package-data@npm:^2.5.0": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: ^2.1.4 - resolve: ^1.10.0 - semver: 2 || 3 || 4 || 5 - validate-npm-package-license: ^3.0.1 - checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + bin: + nopt: bin/nopt.js + checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f languageName: node linkType: hard @@ -7570,7 +8179,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -7607,10 +8216,10 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 +"nwsapi@npm:^2.2.2": + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 languageName: node linkType: hard @@ -7791,7 +8400,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0, onetime@npm:^5.1.2": +"onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -7866,10 +8475,12 @@ __metadata: "@babel/core": 7.13.16 "@babel/plugin-transform-modules-commonjs": 7.13.8 "@babel/plugin-transform-react-jsx": 7.13.12 + "@babel/plugin-transform-typescript": ^7.20.7 + "@babel/preset-react": ^7.18.6 "@babel/preset-typescript": 7.13.0 - "@jest/core": 26.6.3 - "@testing-library/dom": 7.30.4 - "@testing-library/jest-dom": 5.12.0 + "@jest/core": ^29.3.1 + "@testing-library/dom": ^8.20.0 + "@testing-library/jest-dom": ^5.16.5 "@types/fs-extra": ^9.0.12 "@types/glob": ^7 "@types/prettier": ^2 @@ -7884,25 +8495,18 @@ __metadata: eslint-plugin-import: ^2.26.0 eslint-plugin-prettier: ^3.1.4 eslint-plugin-react: ^7.23.2 - eslint-plugin-react-hooks: ^4.1.1 + eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-require-in-package: ^1.0.3 fs-extra: ^10.0.0 glob: ^7.1.7 - jest: ^26.1.0 - jest-junit-reporter: ^1.1.0 - jest-sonar-reporter: 2.0.0 + jest: ^29.3.1 + jest-cli: ^29.3.1 + jest-environment-jsdom: ^29.3.1 prettier: ^2.3.2 ts-node: ^10.9.1 languageName: unknown linkType: soft -"p-each-series@npm:^2.1.0": - version: 2.2.0 - resolution: "p-each-series@npm:2.2.0" - checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c - languageName: node - linkType: hard - "p-event@npm:^4.2.0": version: 4.2.0 resolution: "p-event@npm:4.2.0" @@ -7928,6 +8532,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -7991,7 +8604,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -8003,10 +8616,12 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 languageName: node linkType: hard @@ -8104,6 +8719,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3": version: 2.3.0 resolution: "picomatch@npm:2.3.0" @@ -8120,6 +8742,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.4": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 + languageName: node + linkType: hard + "pkg-dir@npm:4.2.0, pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" @@ -8189,42 +8818,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^24.3.0": - version: 24.9.0 - resolution: "pretty-format@npm:24.9.0" - dependencies: - "@jest/types": ^24.9.0 - ansi-regex: ^4.0.0 - ansi-styles: ^3.2.0 - react-is: ^16.8.4 - checksum: ba9291c8dafd50d2fea1fbad5d2863a6f94e0c8835cce9778ec03bc11bb0f52b9ed0e4ee56aaa331d022ccae2fe52b92f73465a0af58fd0edb59deb6391c6847 - languageName: node - linkType: hard - -"pretty-format@npm:^25.1.0": - version: 25.5.0 - resolution: "pretty-format@npm:25.5.0" - dependencies: - "@jest/types": ^25.5.0 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^16.12.0 - checksum: 76f022d2c911d9733a961467545f5aef2cae892da289fff92ba6a6868a10df4d8ef79794ff791e353f67f0edfa85765240f1e7d552e27c94029ae6af1c95174b - languageName: node - linkType: hard - -"pretty-format@npm:^26.6.2": - version: 26.6.2 - resolution: "pretty-format@npm:26.6.2" - dependencies: - "@jest/types": ^26.6.2 - ansi-regex: ^5.0.0 - ansi-styles: ^4.0.0 - react-is: ^17.0.1 - checksum: e3b808404d7e1519f0df1aa1f25cee0054ab475775c6b2b8c5568ff23194a92d54bf93274139b6f584ca70fd773be4eaa754b0e03f12bb0a8d1426b07f079976 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.2.5": version: 27.2.5 resolution: "pretty-format@npm:27.2.5" @@ -8237,6 +8830,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.3.1": + version: 29.3.1 + resolution: "pretty-format@npm:29.3.1" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -8285,7 +8889,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": +"prop-types@npm:^15.7.2": version: 15.7.2 resolution: "prop-types@npm:15.7.2" dependencies: @@ -8314,9 +8918,9 @@ __metadata: linkType: hard "psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard @@ -8337,13 +8941,20 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0": version: 2.1.1 resolution: "punycode@npm:2.1.1" checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 languageName: node linkType: hard +"punycode@npm:^2.1.1": + version: 2.2.0 + resolution: "punycode@npm:2.2.0" + checksum: 32f291c1b1e8bef8a7d351a369579565bc17530ee5224d2f2b5c37b2647aa0ec7f1972294e2de1b632812f90c8080a7c0c5645c14758aadc0f27b35dd4906d89 + languageName: node + linkType: hard + "puppeteer@npm:^10.4.0": version: 10.4.0 resolution: "puppeteer@npm:10.4.0" @@ -8387,6 +8998,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -8429,21 +9047,19 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^16.9.0": - version: 16.14.0 - resolution: "react-dom@npm:16.14.0" +"react-dom@npm:^18.2.0": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.19.1 + scheduler: ^0.23.0 peerDependencies: - react: ^16.14.0 - checksum: 5a5c49da0f106b2655a69f96c622c347febcd10532db391c262b26aec225b235357d9da1834103457683482ab1b229af7a50f6927a6b70e53150275e31785544 + react: ^18.2.0 + checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4": +"react-is@npm:^16.8.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -8457,51 +9073,31 @@ __metadata: languageName: node linkType: hard -"react-reconciler@npm:^0.24.0": - version: 0.24.0 - resolution: "react-reconciler@npm:0.24.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.18.0 - peerDependencies: - react: ^16.0.0 - checksum: c9c74208325a940ca36e031b71499f6d8e62e96ee673d69e35cc9e6a661aa746a2b0750f2ffcd1bae0a29eaf3d127dc8197ab7e801e6a3a2ab7d45a71b464630 +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard -"react@npm:^16.9.0": - version: 16.14.0 - resolution: "react@npm:16.14.0" +"react-reconciler@npm:^0.28.0": + version: 0.28.0 + resolution: "react-reconciler@npm:0.28.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - checksum: 8484f3ecb13414526f2a7412190575fc134da785c02695eb92bb6028c930bfe1c238d7be2a125088fec663cc7cda0a3623373c46807cf2c281f49c34b79881ac - languageName: node - linkType: hard - -"read-pkg-up@npm:^7.0.1": - version: 7.0.1 - resolution: "read-pkg-up@npm:7.0.1" - dependencies: - find-up: ^4.1.0 - read-pkg: ^5.2.0 - type-fest: ^0.8.1 - checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + scheduler: ^0.22.0 + peerDependencies: + react: ^18.1.0 + checksum: 6421f9500827219556ead3d86cbdf0553c47d633ecda2144720bf235d404f5e4e1e585336c4dfa80e26a04f1a6117c455a60964917d5600c73a91d8374f0232f languageName: node linkType: hard -"read-pkg@npm:^5.2.0": - version: 5.2.0 - resolution: "read-pkg@npm:5.2.0" +"react@npm:18.2.0": + version: 18.2.0 + resolution: "react@npm:18.2.0" dependencies: - "@types/normalize-package-data": ^2.4.0 - normalize-package-data: ^2.5.0 - parse-json: ^5.0.0 - type-fest: ^0.6.0 - checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + loose-envify: ^1.1.0 + checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b languageName: node linkType: hard @@ -8659,13 +9255,6 @@ __metadata: languageName: node linkType: hard -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -8703,7 +9292,14 @@ __metadata: languageName: node linkType: hard -"resolve@^1.10.0, resolve@^1.18.1, resolve@^1.9.0": +"resolve.exports@npm:^1.1.0": + version: 1.1.1 + resolution: "resolve.exports@npm:1.1.1" + checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 + languageName: node + linkType: hard + +resolve@^1.9.0: version: 1.20.0 resolution: "resolve@npm:1.20.0" dependencies: @@ -8736,16 +9332,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.18.1#~builtin, resolve@patch:resolve@^1.9.0#~builtin": - version: 1.20.0 - resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 - languageName: node - linkType: hard - "resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" @@ -8759,6 +9345,16 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"resolve@patch:resolve@^1.9.0#~builtin": + version: 1.20.0 + resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=07638b" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: a0dd7d16a8e47af23afa9386df2dff10e3e0debb2c7299a42e581d9d9b04d7ad5d2c53f24f1e043f7b3c250cbdc71150063e53d0b6559683d37f790b7c8c3cd5 + languageName: node + linkType: hard + "resolve@patch:resolve@^2.0.0-next.3#~builtin": version: 2.0.0-next.3 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=07638b" @@ -8797,7 +9393,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -8884,32 +9480,30 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" dependencies: xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 + checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b languageName: node linkType: hard -"scheduler@npm:^0.18.0": - version: 0.18.0 - resolution: "scheduler@npm:0.18.0" +"scheduler@npm:^0.22.0": + version: 0.22.0 + resolution: "scheduler@npm:0.22.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b6e0b9e0086b200b114f1ef7f9fcac966ad5d84cd3b1867174be0549d3ff713d1fd22d5574cb024b7d3eadf3307f2afc1cb5bfbf28b0d3bc34b200183800fcae + checksum: a8ef5cab769c020cd6382ad9ecc3f72dbde56a50a36639b3a42ad9c11f7724f03700bcad373044059b8067d4a6365154dc7c0ca8027ef20ff4900cf58a0fc2c5 languageName: node linkType: hard -"scheduler@npm:^0.19.1": - version: 0.19.1 - resolution: "scheduler@npm:0.19.1" +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" dependencies: loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: 73e185a59e2ff5aa3609f5b9cb97ddd376f89e1610579d29939d952411ca6eb7a24907a4ea4556569dacb931467a1a4a56d94fe809ef713aa76748642cd96a6c + checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a languageName: node linkType: hard @@ -8958,7 +9552,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": +"semver@npm:^5.5.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -8976,7 +9570,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": +"semver@npm:^7.2.1, semver@npm:^7.3.4, semver@npm:^7.3.5": version: 7.3.5 resolution: "semver@npm:7.3.5" dependencies: @@ -9055,7 +9649,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": +"set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 @@ -9129,13 +9723,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"shellwords@npm:^0.1.1": - version: 0.1.1 - resolution: "shellwords@npm:0.1.1" - checksum: 8d73a5e9861f5e5f1068e2cfc39bc0002400fe58558ab5e5fa75630d2c3adf44ca1fac81957609c8320d5533e093802fcafc72904bf1a32b95de3c19a0b1c0d4 - languageName: node - linkType: hard - "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -9154,6 +9741,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard +"signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -9274,17 +9868,17 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"source-map-resolve@npm:^0.6.0": - version: 0.6.0 - resolution: "source-map-resolve@npm:0.6.0" +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - checksum: fe503b9e5dac1c54be835282fcfec10879434e7b3ee08a9774f230299c724a8d403484d9531276d1670c87390e0e4d1d3f92b14cca6e4a2445ea3016b786ecd4 + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 languageName: node linkType: hard -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:~0.5.20": version: 0.5.20 resolution: "source-map-support@npm:0.5.20" dependencies: @@ -9315,47 +9909,13 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"source-map@npm:^0.7.3, source-map@npm:~0.7.2": +"source-map@npm:~0.7.2": version: 0.7.3 resolution: "source-map@npm:0.7.3" checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.10 - resolution: "spdx-license-ids@npm:3.0.10" - checksum: 94fde6f558941f82c737433000e20678eccad448fe5e87cbb98ba1d811a120ddf7fbc4a7a3ebfcd2f49c8c4541ba6537af07750ca5cb54900a064d53f68b888d - languageName: node - linkType: hard - "spdy-transport@npm:^3.0.0": version: 3.0.0 resolution: "spdy-transport@npm:3.0.0" @@ -9408,12 +9968,12 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"stack-utils@npm:^2.0.2": - version: 2.0.5 - resolution: "stack-utils@npm:2.0.5" +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" dependencies: escape-string-regexp: ^2.0.0 - checksum: 76b69da0f5b48a34a0f93c98ee2a96544d2c4ca2557f7eef5ddb961d3bdc33870b46f498a84a7c4f4ffb781df639840e7ebf6639164ed4da5e1aeb659615b9c7 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 languageName: node linkType: hard @@ -9659,16 +10219,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"supports-hyperlinks@npm:^2.0.0": - version: 2.2.0 - resolution: "supports-hyperlinks@npm:2.2.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -9753,16 +10303,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser-webpack-plugin@npm:^5.3.10": version: 5.3.10 resolution: "terser-webpack-plugin@npm:5.3.10" @@ -9786,8 +10326,8 @@ resolve@^2.0.0-next.3: linkType: hard "terser@npm:^5.26.0": - version: 5.31.0 - resolution: "terser@npm:5.31.0" + version: 5.31.5 + resolution: "terser@npm:5.31.5" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -9795,7 +10335,7 @@ resolve@^2.0.0-next.3: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 48f14229618866bba8a9464e9d0e7fdcb6b6488b3a6c4690fcf4d48df65bf45959d5ae8c02f1a0b3f3dd035a9ae340b715e1e547645b112dc3963daa3564699a + checksum: edd2de6569116f637bb2e154c913e6ea434cadd6bcf5df41cf62000e3c69ec41f95be66fe639b57b95564545c9f7c0fcb28ca63351424a08e244a8b49ed12ac3 languageName: node linkType: hard @@ -9830,13 +10370,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"throat@npm:^5.0.0": - version: 5.0.0 - resolution: "throat@npm:5.0.0" - checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 - languageName: node - linkType: hard - "through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -9861,7 +10394,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tmpl@npm:1.0.x": +"tmpl@npm:1.0.5, tmpl@npm:1.0.x": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -9922,23 +10455,24 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" +"tough-cookie@npm:^4.1.2": + version: 4.1.2 + resolution: "tough-cookie@npm:4.1.2" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a languageName: node linkType: hard -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" dependencies: punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 + checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 languageName: node linkType: hard @@ -10123,20 +10657,6 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"type-fest@npm:^0.6.0": - version: 0.6.0 - resolution: "type-fest@npm:0.6.0" - checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f - languageName: node - linkType: hard - -"type-fest@npm:^0.8.1": - version: 0.8.1 - resolution: "type-fest@npm:0.8.1" - checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 - languageName: node - linkType: hard - "type-is@npm:~1.6.17, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -10249,10 +10769,10 @@ typescript@^4.8.2: languageName: node linkType: hard -"universalify@npm:^0.1.2": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 languageName: node linkType: hard @@ -10280,17 +10800,31 @@ typescript@^4.8.2: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.13": - version: 1.0.14 - resolution: "update-browserslist-db@npm:1.0.14" +"update-browserslist-db@npm:^1.0.9": + version: 1.0.10 + resolution: "update-browserslist-db@npm:1.0.10" dependencies: - escalade: ^3.1.2 + escalade: ^3.1.1 picocolors: ^1.0.0 peerDependencies: browserslist: ">= 4.21.0" + bin: + browserslist-lint: cli.js + checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.1 + peerDependencies: + browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 039e581d5647467dc4706360f929885bd5df5a03fc7a851eaa7413e7adf64b22ea64def060b3a6c6be73d3619392cf31504a24e863b358d4953eac36013ad161 + checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562 languageName: node linkType: hard @@ -10317,6 +10851,16 @@ typescript@^4.8.2: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -10364,15 +10908,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"uuid@npm:^8.3.0": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -10387,24 +10922,14 @@ typescript@^4.8.2: languageName: node linkType: hard -"v8-to-istanbul@npm:^7.0.0": - version: 7.1.2 - resolution: "v8-to-istanbul@npm:7.1.2" +"v8-to-istanbul@npm:^9.0.1": + version: 9.0.1 + resolution: "v8-to-istanbul@npm:9.0.1" dependencies: + "@jridgewell/trace-mapping": ^0.3.12 "@types/istanbul-lib-coverage": ^2.0.1 convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: e52b48764f55aed62ff87f2b5f710c874f992cd1313eac8f438bf65aeeb0689153d85bb76e39514fd90ba3521d6ebea929a8ae1339b6d7b0cf18fb0ed13d8b40 - languageName: node - linkType: hard - -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + checksum: a49c34bf0a3af0c11041a3952a2600913904a983bd1bc87148b5c033bc5c1d02d5a13620fcdbfa2c60bc582a2e2970185780f0c844b4c3a220abf405f8af6311 languageName: node linkType: hard @@ -10415,28 +10940,12 @@ typescript@^4.8.2: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b - languageName: node - linkType: hard - -"wait-for-expect@npm:^3.0.2": - version: 3.0.2 - resolution: "wait-for-expect@npm:3.0.2" - checksum: 2ec1ebd78023fa10bdcf53d78bbd65feea68fdfa0de0b00f3a72f3df089118b91517839ff3926e5ef6cfd1ede65085326d85b0378d4db62c266cc9c859c2de56 + xml-name-validator: ^4.0.0 + checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 languageName: node linkType: hard @@ -10449,6 +10958,15 @@ typescript@^4.8.2: languageName: node linkType: hard +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + "watchpack@npm:^2.4.1": version: 2.4.1 resolution: "watchpack@npm:2.4.1" @@ -10468,17 +10986,10 @@ typescript@^4.8.2: languageName: node linkType: hard -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b languageName: node linkType: hard @@ -10588,8 +11099,8 @@ typescript@^4.8.2: linkType: hard "webpack@npm:^5.91.0": - version: 5.91.0 - resolution: "webpack@npm:5.91.0" + version: 5.93.0 + resolution: "webpack@npm:5.93.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.5 @@ -10597,10 +11108,10 @@ typescript@^4.8.2: "@webassemblyjs/wasm-edit": ^1.12.1 "@webassemblyjs/wasm-parser": ^1.12.1 acorn: ^8.7.1 - acorn-import-assertions: ^1.9.0 + acorn-import-attributes: ^1.9.5 browserslist: ^4.21.10 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.16.0 + enhanced-resolve: ^5.17.0 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -10620,7 +11131,7 @@ typescript@^4.8.2: optional: true bin: webpack: bin/webpack.js - checksum: f1073715dbb1ed5c070affef293d800a867708bcbc5aba4d8baee87660e0cf53c55966a6f36fab078d1d6c9567cdcd0a9086bdfb607cab87ea68c6449791b9a3 + checksum: c93bd73d9e1ab49b07e139582187f1c3760ee2cf0163b6288fab2ae210e39e59240a26284e7e5d29bec851255ef4b43c51642c882fa5a94e16ce7cb906deeb47 languageName: node linkType: hard @@ -10642,30 +11153,29 @@ typescript@^4.8.2: languageName: node linkType: hard -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 + iconv-lite: 0.6.3 + checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 languageName: node linkType: hard -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e + tr46: ^3.0.0 + webidl-conversions: ^7.0.0 + checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af languageName: node linkType: hard @@ -10682,13 +11192,6 @@ typescript@^4.8.2: languageName: node linkType: hard -"which-module@npm:^2.0.0": - version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c - languageName: node - linkType: hard - "which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -10734,14 +11237,14 @@ typescript@^4.8.2: languageName: node linkType: hard -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" +"wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: ansi-styles: ^4.0.0 string-width: ^4.1.0 strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard @@ -10764,6 +11267,16 @@ typescript@^4.8.2: languageName: node linkType: hard +"write-file-atomic@npm:^4.0.1": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + "ws@npm:7.4.6": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -10779,9 +11292,9 @@ typescript@^4.8.2: languageName: node linkType: hard -"ws@npm:^7.4.6": - version: 7.5.5 - resolution: "ws@npm:7.5.5" +"ws@npm:^8.1.0": + version: 8.2.3 + resolution: "ws@npm:8.2.3" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -10790,36 +11303,29 @@ typescript@^4.8.2: optional: true utf-8-validate: optional: true - checksum: bd2b437256012af526c69c03d6670a132e7ab0fe5853f3b7092826acea4203fad4ee2a8d0d9bd44834b2b968e747bf34f753ab535f4a3edf40d262da4b1d0805 + checksum: c869296ccb45f218ac6d32f8f614cd85b50a21fd434caf11646008eef92173be53490810c5c23aea31bc527902261fbfd7b062197eea341b26128d4be56a85e4 languageName: node linkType: hard -"ws@npm:^8.1.0": - version: 8.2.3 - resolution: "ws@npm:8.2.3" +"ws@npm:^8.11.0": + version: 8.12.0 + resolution: "ws@npm:8.12.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: c869296ccb45f218ac6d32f8f614cd85b50a21fd434caf11646008eef92173be53490810c5c23aea31bc527902261fbfd7b062197eea341b26128d4be56a85e4 - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 + checksum: 818ff3f8749c172a95a114cceb8b89cedd27e43a82d65c7ad0f7882b1e96a2ee6709e3746a903c3fa88beec0c8bae9a9fcd75f20858b32a166dfb7519316a5d7 languageName: node linkType: hard -"xml@npm:^1.0.1": - version: 1.0.1 - resolution: "xml@npm:1.0.1" - checksum: 11b5545ef3f8fec3fa29ce251f50ad7b6c97c103ed4d851306ec23366f5fa4699dd6a942262df52313a0cd1840ab26256da253c023bad3309d8ce46fe6020ca0 +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad languageName: node linkType: hard @@ -10830,10 +11336,17 @@ typescript@^4.8.2: languageName: node linkType: hard -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d languageName: node linkType: hard @@ -10844,32 +11357,25 @@ typescript@^4.8.2: languageName: node linkType: hard -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard -"yargs@npm:^15.4.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" +"yargs@npm:^17.3.1": + version: 17.6.2 + resolution: "yargs@npm:17.6.2" dependencies: - cliui: ^6.0.0 - decamelize: ^1.2.0 - find-up: ^4.1.0 - get-caller-file: ^2.0.1 + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^4.2.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^18.1.2 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 47da1b0d854fa16d45a3ded57b716b013b2179022352a5f7467409da5a04a1eef5b3b3d97a2dfc13e8bbe5f2ffc0afe3bc6a4a72f8254e60f5a4bd7947138643 languageName: node linkType: hard @@ -10889,3 +11395,10 @@ typescript@^4.8.2: checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 languageName: node linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard