diff --git a/Cargo.lock b/Cargo.lock
index f5d8fa5..2d72736 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -514,6 +514,18 @@ dependencies = [
"web-sys",
]
+[[package]]
+name = "react-noop"
+version = "0.1.0"
+dependencies = [
+ "console_error_panic_hook",
+ "react-reconciler",
+ "shared",
+ "wasm-bindgen",
+ "wasm-bindgen-test",
+ "web-sys",
+]
+
[[package]]
name = "react-reconciler"
version = "0.1.0"
@@ -588,9 +600,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.116"
+version = "1.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
+checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
dependencies = [
"itoa",
"ryu",
diff --git a/Cargo.toml b/Cargo.toml
index 9253f16..c33003f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -2,6 +2,7 @@
members = [
"packages/react",
"packages/react-dom",
+ "packages/react-noop",
"packages/react-reconciler",
"packages/scheduler",
"packages/shared"
diff --git a/__tests__/react-dom/ReactFunctionComponent-test.js b/__tests__/react-dom/ReactFunctionComponent-test.js
index 70ae515..0533fec 100644
--- a/__tests__/react-dom/ReactFunctionComponent-test.js
+++ b/__tests__/react-dom/ReactFunctionComponent-test.js
@@ -7,326 +7,328 @@
* @emails react-core
*/
-'use strict';
+'use strict'
-let React;
-let ReactDOM;
-let ReactTestUtils;
+let React
+let ReactDOM
+let ReactTestUtils
function FunctionComponent(props) {
- return
{props.name}
;
+ return {props.name}
}
function sleep(ms) {
- return new Promise((resolve) => {
- setTimeout(resolve, ms)
- })
+ return new Promise((resolve) => {
+ setTimeout(resolve, ms)
+ })
}
describe('ReactFunctionComponent', () => {
- beforeEach(() => {
- jest.resetModules();
- React = require('../../dist/react')
- ReactDOM = require('../../dist/react-dom')
- ReactTestUtils = require('../utils/test-utils')
- });
-
- it('should render stateless component', async () => {
- const el = document.createElement('div');
- // console.log(FunctionComponent.toString())
- ReactDOM.createRoot(el).render();
- await sleep(10)
- expect(el.textContent).toBe('A');
- });
-
- // it('should update stateless component', () => {
- // function Parent(props) {
- // return ;
- // }
-
- // const el = document.createElement('div');
- // ReactDOM.createRoot(el).render();
- // expect(el.textContent).toBe('A');
-
- // ReactDOM.createRoot(el).render();
- // expect(el.textContent).toBe('B');
- // });
-
- it('should not throw when stateless component returns undefined', () => {
- function NotAComponent() {
- }
-
- expect(function () {
- ReactTestUtils.renderIntoDocument(
-
-
-
- );
- }).not.toThrowError();
- });
-
- // it('should throw on string refs in pure functions', () => {
- // function Child() {
- // return ;
- // }
-
- // expect(function() {
- // ReactTestUtils.renderIntoDocument();
- // }).toThrowError(
- // __LOG__
- // ? 'Function components cannot have string refs. We recommend using useRef() instead.'
- // : // It happens because we don't save _owner in production for
- // // function components.
- // 'Element ref was specified as a string (me) but no owner was set. This could happen for one of' +
- // ' the following reasons:\n' +
- // '1. You may be adding a ref to a function component\n' +
- // "2. You may be adding a ref to a component that was not created inside a component's render method\n" +
- // '3. You have multiple copies of React loaded\n' +
- // 'See https://reactjs.org/link/refs-must-have-owner for more information.',
- // );
- // });
-
- // it('should warn when given a string ref', () => {
- // function Indirection(props) {
- // return {props.children}
;
- // }
-
- // class ParentUsingStringRef extends React.Component {
- // render() {
- // return (
- //
- //
- //
- // );
- // }
- // }
-
- // expect(() =>
- // ReactTestUtils.renderIntoDocument(),
- // ).toErrorDev(
- // 'Warning: Function components cannot be given refs. ' +
- // 'Attempts to access this ref will fail. ' +
- // 'Did you mean to use React.forwardRef()?\n\n' +
- // 'Check the render method ' +
- // 'of `ParentUsingStringRef`.\n' +
- // ' in FunctionComponent (at **)\n' +
- // ' in div (at **)\n' +
- // ' in Indirection (at **)\n' +
- // ' in ParentUsingStringRef (at **)',
- // );
-
- // // No additional warnings should be logged
- // ReactTestUtils.renderIntoDocument();
- // });
-
- // it('should warn when given a function ref', () => {
- // function Indirection(props) {
- // return {props.children}
;
- // }
-
- // class ParentUsingFunctionRef extends React.Component {
- // render() {
- // return (
- //
- // {
- // expect(arg).toBe(null);
- // }}
- // />
- //
- // );
- // }
- // }
-
- // expect(() =>
- // ReactTestUtils.renderIntoDocument(),
- // ).toErrorDev(
- // 'Warning: Function components cannot be given refs. ' +
- // 'Attempts to access this ref will fail. ' +
- // 'Did you mean to use React.forwardRef()?\n\n' +
- // 'Check the render method ' +
- // 'of `ParentUsingFunctionRef`.\n' +
- // ' in FunctionComponent (at **)\n' +
- // ' in div (at **)\n' +
- // ' in Indirection (at **)\n' +
- // ' in ParentUsingFunctionRef (at **)',
- // );
-
- // // No additional warnings should be logged
- // ReactTestUtils.renderIntoDocument();
- // });
-
- // it('deduplicates ref warnings based on element or owner', () => {
- // // When owner uses JSX, we can use exact line location to dedupe warnings
- // class AnonymousParentUsingJSX extends React.Component {
- // render() {
- // return {}} />;
- // }
- // }
- // Object.defineProperty(AnonymousParentUsingJSX, 'name', {value: undefined});
-
- // let instance1;
-
- // expect(() => {
- // instance1 = ReactTestUtils.renderIntoDocument(
- // ,
- // );
- // }).toErrorDev('Warning: Function components cannot be given refs.');
- // // Should be deduped (offending element is on the same line):
- // instance1.forceUpdate();
- // // Should also be deduped (offending element is on the same line):
- // ReactTestUtils.renderIntoDocument();
-
- // // When owner doesn't use JSX, and is anonymous, we warn once per internal instance.
- // class AnonymousParentNotUsingJSX extends React.Component {
- // render() {
- // return React.createElement(FunctionComponent, {
- // name: 'A',
- // ref: () => {},
- // });
- // }
- // }
- // Object.defineProperty(AnonymousParentNotUsingJSX, 'name', {
- // value: undefined,
- // });
-
- // let instance2;
- // expect(() => {
- // instance2 = ReactTestUtils.renderIntoDocument(
- // ,
- // );
- // }).toErrorDev('Warning: Function components cannot be given refs.');
- // // Should be deduped (same internal instance, no additional warnings)
- // instance2.forceUpdate();
- // // Could not be differentiated (since owner is anonymous and no source location)
- // ReactTestUtils.renderIntoDocument();
-
- // // When owner doesn't use JSX, but is named, we warn once per owner name
- // class NamedParentNotUsingJSX extends React.Component {
- // render() {
- // return React.createElement(FunctionComponent, {
- // name: 'A',
- // ref: () => {},
- // });
- // }
- // }
- // let instance3;
- // expect(() => {
- // instance3 = ReactTestUtils.renderIntoDocument();
- // }).toErrorDev('Warning: Function components cannot be given refs.');
- // // Should be deduped (same owner name, no additional warnings):
- // instance3.forceUpdate();
- // // Should also be deduped (same owner name, no additional warnings):
- // ReactTestUtils.renderIntoDocument();
- // });
-
- // // This guards against a regression caused by clearing the current debug fiber.
- // // https://github.com/facebook/react/issues/10831
- // it('should warn when giving a function ref with context', () => {
- // function Child() {
- // return null;
- // }
- // Child.contextTypes = {
- // foo: PropTypes.string,
- // };
-
- // class Parent extends React.Component {
- // static childContextTypes = {
- // foo: PropTypes.string,
- // };
- // getChildContext() {
- // return {
- // foo: 'bar',
- // };
- // }
- // render() {
- // return ;
- // }
- // }
-
- // expect(() => ReactTestUtils.renderIntoDocument()).toErrorDev(
- // 'Warning: Function components cannot be given refs. ' +
- // 'Attempts to access this ref will fail. ' +
- // 'Did you mean to use React.forwardRef()?\n\n' +
- // 'Check the render method ' +
- // 'of `Parent`.\n' +
- // ' in Child (at **)\n' +
- // ' in Parent (at **)',
- // );
- // });
-
- // it('should provide a null ref', () => {
- // function Child() {
- // return ;
- // }
-
- // const comp = ReactTestUtils.renderIntoDocument();
- // expect(comp).toBe(null);
- // });
-
- // it('should use correct name in key warning', () => {
- // function Child() {
- // return {[]}
;
- // }
-
- // expect(() => ReactTestUtils.renderIntoDocument()).toErrorDev(
- // 'Each child in a list should have a unique "key" prop.\n\n' +
- // 'Check the render method of `Child`.',
- // );
- // });
-
- // // TODO: change this test after we deprecate default props support
- // // for function components
-
- // it('should receive context', () => {
- // class Parent extends React.Component {
- // static childContextTypes = {
- // lang: PropTypes.string,
- // };
-
- // getChildContext() {
- // return {lang: 'en'};
- // }
-
- // render() {
- // return ;
- // }
- // }
-
- // function Child(props, context) {
- // return {context.lang}
;
- // }
- // Child.contextTypes = {lang: PropTypes.string};
-
- // const el = document.createElement('div');
- // ReactDOM.render(, el);
- // expect(el.textContent).toBe('en');
- // });
-
- it('should work with arrow functions', () => {
- let Child = function () {
- return ;
- };
- // Will create a new bound function without a prototype, much like a native
- // arrow function.
- Child = Child.bind(this);
-
- expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow();
- });
-
- it('should allow simple functions to return null', () => {
- const Child = function () {
- return null;
- };
- expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow();
- });
-
- it('should allow simple functions to return false', () => {
- function Child() {
- return false;
- }
-
- expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow();
- });
-});
+ beforeEach(() => {
+ jest.resetModules()
+ React = require('../../dist/react')
+ ReactDOM = require('../../dist/react-dom')
+ ReactTestUtils = require('../utils/test-utils')
+ console.log('useEffect', React.useEffect)
+ })
+
+ it('should render stateless component', async () => {
+ const el = document.createElement('div')
+ ReactDOM.createRoot(el).render()
+ await sleep(10)
+ expect(el.textContent).toBe('A')
+ })
+
+ it('should update stateless component', async () => {
+ function Parent(props) {
+ return
+ }
+
+ let el = document.createElement('div')
+ ReactDOM.createRoot(el).render()
+ await sleep(10)
+ expect(el.textContent).toBe('A')
+
+ el = document.createElement('div')
+ ReactDOM.createRoot(el).render()
+ await sleep(10)
+ expect(el.textContent).toBe('B')
+ })
+
+ it('should not throw when stateless component returns undefined', () => {
+ function NotAComponent() {}
+
+ expect(function () {
+ ReactTestUtils.renderIntoDocument(
+
+
+
+ )
+ }).not.toThrowError()
+ })
+
+ // it('should throw on string refs in pure functions', () => {
+ // function Child() {
+ // return ;
+ // }
+
+ // expect(function() {
+ // ReactTestUtils.renderIntoDocument();
+ // }).toThrowError(
+ // __LOG__
+ // ? 'Function components cannot have string refs. We recommend using useRef() instead.'
+ // : // It happens because we don't save _owner in production for
+ // // function components.
+ // 'Element ref was specified as a string (me) but no owner was set. This could happen for one of' +
+ // ' the following reasons:\n' +
+ // '1. You may be adding a ref to a function component\n' +
+ // "2. You may be adding a ref to a component that was not created inside a component's render method\n" +
+ // '3. You have multiple copies of React loaded\n' +
+ // 'See https://reactjs.org/link/refs-must-have-owner for more information.',
+ // );
+ // });
+
+ // it('should warn when given a string ref', () => {
+ // function Indirection(props) {
+ // return {props.children}
;
+ // }
+
+ // class ParentUsingStringRef extends React.Component {
+ // render() {
+ // return (
+ //
+ //
+ //
+ // );
+ // }
+ // }
+
+ // expect(() =>
+ // ReactTestUtils.renderIntoDocument(),
+ // ).toErrorDev(
+ // 'Warning: Function components cannot be given refs. ' +
+ // 'Attempts to access this ref will fail. ' +
+ // 'Did you mean to use React.forwardRef()?\n\n' +
+ // 'Check the render method ' +
+ // 'of `ParentUsingStringRef`.\n' +
+ // ' in FunctionComponent (at **)\n' +
+ // ' in div (at **)\n' +
+ // ' in Indirection (at **)\n' +
+ // ' in ParentUsingStringRef (at **)',
+ // );
+
+ // // No additional warnings should be logged
+ // ReactTestUtils.renderIntoDocument();
+ // });
+
+ // it('should warn when given a function ref', () => {
+ // function Indirection(props) {
+ // return {props.children}
;
+ // }
+
+ // class ParentUsingFunctionRef extends React.Component {
+ // render() {
+ // return (
+ //
+ // {
+ // expect(arg).toBe(null);
+ // }}
+ // />
+ //
+ // );
+ // }
+ // }
+
+ // expect(() =>
+ // ReactTestUtils.renderIntoDocument(),
+ // ).toErrorDev(
+ // 'Warning: Function components cannot be given refs. ' +
+ // 'Attempts to access this ref will fail. ' +
+ // 'Did you mean to use React.forwardRef()?\n\n' +
+ // 'Check the render method ' +
+ // 'of `ParentUsingFunctionRef`.\n' +
+ // ' in FunctionComponent (at **)\n' +
+ // ' in div (at **)\n' +
+ // ' in Indirection (at **)\n' +
+ // ' in ParentUsingFunctionRef (at **)',
+ // );
+
+ // // No additional warnings should be logged
+ // ReactTestUtils.renderIntoDocument();
+ // });
+
+ // it('deduplicates ref warnings based on element or owner', () => {
+ // // When owner uses JSX, we can use exact line location to dedupe warnings
+ // class AnonymousParentUsingJSX extends React.Component {
+ // render() {
+ // return {}} />;
+ // }
+ // }
+ // Object.defineProperty(AnonymousParentUsingJSX, 'name', {value: undefined});
+
+ // let instance1;
+
+ // expect(() => {
+ // instance1 = ReactTestUtils.renderIntoDocument(
+ // ,
+ // );
+ // }).toErrorDev('Warning: Function components cannot be given refs.');
+ // // Should be deduped (offending element is on the same line):
+ // instance1.forceUpdate();
+ // // Should also be deduped (offending element is on the same line):
+ // ReactTestUtils.renderIntoDocument();
+
+ // // When owner doesn't use JSX, and is anonymous, we warn once per internal instance.
+ // class AnonymousParentNotUsingJSX extends React.Component {
+ // render() {
+ // return React.createElement(FunctionComponent, {
+ // name: 'A',
+ // ref: () => {},
+ // });
+ // }
+ // }
+ // Object.defineProperty(AnonymousParentNotUsingJSX, 'name', {
+ // value: undefined,
+ // });
+
+ // let instance2;
+ // expect(() => {
+ // instance2 = ReactTestUtils.renderIntoDocument(
+ // ,
+ // );
+ // }).toErrorDev('Warning: Function components cannot be given refs.');
+ // // Should be deduped (same internal instance, no additional warnings)
+ // instance2.forceUpdate();
+ // // Could not be differentiated (since owner is anonymous and no source location)
+ // ReactTestUtils.renderIntoDocument();
+
+ // // When owner doesn't use JSX, but is named, we warn once per owner name
+ // class NamedParentNotUsingJSX extends React.Component {
+ // render() {
+ // return React.createElement(FunctionComponent, {
+ // name: 'A',
+ // ref: () => {},
+ // });
+ // }
+ // }
+ // let instance3;
+ // expect(() => {
+ // instance3 = ReactTestUtils.renderIntoDocument();
+ // }).toErrorDev('Warning: Function components cannot be given refs.');
+ // // Should be deduped (same owner name, no additional warnings):
+ // instance3.forceUpdate();
+ // // Should also be deduped (same owner name, no additional warnings):
+ // ReactTestUtils.renderIntoDocument();
+ // });
+
+ // // This guards against a regression caused by clearing the current debug fiber.
+ // // https://github.com/facebook/react/issues/10831
+ // it('should warn when giving a function ref with context', () => {
+ // function Child() {
+ // return null;
+ // }
+ // Child.contextTypes = {
+ // foo: PropTypes.string,
+ // };
+
+ // class Parent extends React.Component {
+ // static childContextTypes = {
+ // foo: PropTypes.string,
+ // };
+ // getChildContext() {
+ // return {
+ // foo: 'bar',
+ // };
+ // }
+ // render() {
+ // return ;
+ // }
+ // }
+
+ // expect(() => ReactTestUtils.renderIntoDocument()).toErrorDev(
+ // 'Warning: Function components cannot be given refs. ' +
+ // 'Attempts to access this ref will fail. ' +
+ // 'Did you mean to use React.forwardRef()?\n\n' +
+ // 'Check the render method ' +
+ // 'of `Parent`.\n' +
+ // ' in Child (at **)\n' +
+ // ' in Parent (at **)',
+ // );
+ // });
+
+ // it('should provide a null ref', () => {
+ // function Child() {
+ // return ;
+ // }
+
+ // const comp = ReactTestUtils.renderIntoDocument();
+ // expect(comp).toBe(null);
+ // });
+
+ // it('should use correct name in key warning', () => {
+ // function Child() {
+ // return {[]}
;
+ // }
+
+ // expect(() => ReactTestUtils.renderIntoDocument()).toErrorDev(
+ // 'Each child in a list should have a unique "key" prop.\n\n' +
+ // 'Check the render method of `Child`.',
+ // );
+ // });
+
+ // // TODO: change this test after we deprecate default props support
+ // // for function components
+
+ // it('should receive context', () => {
+ // class Parent extends React.Component {
+ // static childContextTypes = {
+ // lang: PropTypes.string,
+ // };
+
+ // getChildContext() {
+ // return {lang: 'en'};
+ // }
+
+ // render() {
+ // return ;
+ // }
+ // }
+
+ // function Child(props, context) {
+ // return {context.lang}
;
+ // }
+ // Child.contextTypes = {lang: PropTypes.string};
+
+ // const el = document.createElement('div');
+ // ReactDOM.render(, el);
+ // expect(el.textContent).toBe('en');
+ // });
+
+ it('should work with arrow functions', () => {
+ let Child = function () {
+ return
+ }
+ // Will create a new bound function without a prototype, much like a native
+ // arrow function.
+ Child = Child.bind(this)
+
+ expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow()
+ })
+
+ it('should allow simple functions to return null', () => {
+ const Child = function () {
+ return null
+ }
+ expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow()
+ })
+
+ it('should allow simple functions to return false', () => {
+ function Child() {
+ return false
+ }
+
+ expect(() => ReactTestUtils.renderIntoDocument()).not.toThrow()
+ })
+})
diff --git a/__tests__/react-reconciler/ReactEffectOrdering-test.js.bak b/__tests__/react-reconciler/ReactEffectOrdering-test.js.bak
new file mode 100644
index 0000000..aff2c0d
--- /dev/null
+++ b/__tests__/react-reconciler/ReactEffectOrdering-test.js.bak
@@ -0,0 +1,56 @@
+let React
+let ReactNoop
+let act
+let useEffect
+
+function sleep(ms) {
+ return new Promise((resolve) => {
+ setTimeout(resolve, ms)
+ })
+}
+
+describe('ReactHooksWithNoopRenderer', () => {
+ beforeEach(() => {
+ jest.resetModules()
+
+ React = require('../../dist/react')
+ // act = require('jest-react').act
+ // Scheduler = require('scheduler/unstable_mock');
+ ReactNoop = require('../../dist/react-noop')
+
+ useEffect = React.useEffect
+ })
+
+ it.only('passive unmounts on deletion are fired in parent -> child order', async () => {
+ console.log(queueMicrotask)
+ const root = ReactNoop.createRoot()
+
+ function Parent() {
+ useEffect(() => {
+ return () => console.log('Unmount parent')
+ })
+ return
+ }
+
+ function Child() {
+ useEffect(() => {
+ return () => console.log('Unmount child')
+ })
+ return 'Child'
+ }
+
+ console.log()
+ root.render()
+ await sleep(1000)
+ console.log(root.getChildrenAsJSX())
+ expect(root).toMatchRenderedOutput('Child')
+ // expect(1).toBe(1)
+ // await act(async () => {
+ // });
+ //
+ //
+ // await act(async () => {
+ // root.render(null);
+ // });
+ })
+})
diff --git a/babel.config.js b/babel.config.js
index 45f1e36..599e64d 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,11 +1,19 @@
module.exports = {
- presets: ['@babel/preset-env'],
- plugins: [
- [
- '@babel/plugin-transform-react-jsx',
- {
- throwIfNamespace: false
- }
- ]
- ]
-};
+ presets: [
+ '@babel/preset-env',
+ [
+ '@babel/preset-react',
+ {
+ development: 'true',
+ },
+ ],
+ ],
+ plugins: [
+ [
+ '@babel/plugin-transform-react-jsx',
+ {
+ throwIfNamespace: false,
+ },
+ ],
+ ],
+}
diff --git a/examples/hello-world/src/main.tsx b/examples/hello-world/src/main.tsx
index 14cf094..775168b 100644
--- a/examples/hello-world/src/main.tsx
+++ b/examples/hello-world/src/main.tsx
@@ -1,8 +1,21 @@
-import App from './App.tsx'
import {createRoot} from 'react-dom'
+import {useEffect} from 'react'
-const root = createRoot(document.getElementById("root"))
-root.render()
+const root = createRoot(document.getElementById('root'))
+function Parent() {
+ useEffect(() => {
+ return () => console.log('Unmount parent')
+ })
+ return
+}
+function Child() {
+ useEffect(() => {
+ return () => console.log('Unmount child')
+ })
+ return 'Child'
+}
+root.render()
+// console.log(root.getChildrenAsJSX())
diff --git a/examples/node-demo/.babelrc b/examples/node-demo/.babelrc
new file mode 100644
index 0000000..ec862c2
--- /dev/null
+++ b/examples/node-demo/.babelrc
@@ -0,0 +1,10 @@
+{
+ "presets": [
+ [
+ "@babel/preset-react",
+ {
+ "development": "true"
+ }
+ ]
+ ]
+}
diff --git a/examples/node-demo/index.js b/examples/node-demo/index.js
new file mode 100644
index 0000000..cc395ad
--- /dev/null
+++ b/examples/node-demo/index.js
@@ -0,0 +1,47 @@
+const ReactNoop = require('react-noop')
+const React = require('react')
+
+const root = ReactNoop.createRoot()
+const useEffect = React.useEffect
+
+function sleep(ms) {
+ return new Promise((resolve) => {
+ setTimeout(resolve, ms)
+ })
+}
+
+async function test1() {
+ const arr = []
+
+ function Parent() {
+ useEffect(() => {
+ return () => {
+ arr.push('Unmount parent')
+ }
+ })
+ return
+ }
+
+ function Child() {
+ useEffect(() => {
+ return () => {
+ arr.push('Unmount child')
+ }
+ })
+ return 'Child'
+ }
+
+ root.render()
+ await sleep(10)
+ if (root.getChildrenAsJSX() !== 'Child') {
+ throw new Error('test1 failed')
+ }
+
+ root.render(null)
+ await sleep(10)
+ if (arr.join(',') !== 'Unmount parent,Unmount child') {
+ throw new Error('test1 failed')
+ }
+}
+
+test1()
diff --git a/examples/node-demo/package.json b/examples/node-demo/package.json
new file mode 100644
index 0000000..7506a66
--- /dev/null
+++ b/examples/node-demo/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "demo",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "start": "NODE_ENV=development babel-node index.js"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "@babel/core": "^7.24.6",
+ "@babel/node": "^7.24.6",
+ "@babel/preset-react": "^7.24.6",
+ "react": "file://../../dist/react",
+ "react-noop": "file://../../dist/react-noop"
+ }
+}
diff --git a/examples/node-demo/pnpm-lock.yaml b/examples/node-demo/pnpm-lock.yaml
new file mode 100644
index 0000000..121e4f9
--- /dev/null
+++ b/examples/node-demo/pnpm-lock.yaml
@@ -0,0 +1,1286 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@babel/core':
+ specifier: ^7.24.6
+ version: 7.24.6
+ '@babel/node':
+ specifier: ^7.24.6
+ version: 7.24.6(@babel/core@7.24.6)
+ '@babel/preset-react':
+ specifier: ^7.24.6
+ version: 7.24.6(@babel/core@7.24.6)
+ react:
+ specifier: file://../../dist/react
+ version: file:../../dist/react
+ react-noop:
+ specifier: file://../../dist/react-noop
+ version: file:../../dist/react-noop
+
+packages:
+
+ /@ampproject/remapping@2.3.0:
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: false
+
+ /@babel/code-frame@7.24.6:
+ resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.24.6
+ picocolors: 1.0.1
+ dev: false
+
+ /@babel/compat-data@7.24.6:
+ resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/core@7.24.6:
+ resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.24.6
+ '@babel/generator': 7.24.6
+ '@babel/helper-compilation-targets': 7.24.6
+ '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6)
+ '@babel/helpers': 7.24.6
+ '@babel/parser': 7.24.6
+ '@babel/template': 7.24.6
+ '@babel/traverse': 7.24.6
+ '@babel/types': 7.24.6
+ convert-source-map: 2.0.0
+ debug: 4.3.5
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/generator@7.24.6:
+ resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ '@jridgewell/gen-mapping': 0.3.5
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 2.5.2
+ dev: false
+
+ /@babel/helper-annotate-as-pure@7.24.6:
+ resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-compilation-targets@7.24.6:
+ resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.24.6
+ '@babel/helper-validator-option': 7.24.6
+ browserslist: 4.23.0
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: false
+
+ /@babel/helper-environment-visitor@7.24.6:
+ resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-function-name@7.24.6:
+ resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.24.6
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-hoist-variables@7.24.6:
+ resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-module-imports@7.24.6:
+ resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-environment-visitor': 7.24.6
+ '@babel/helper-module-imports': 7.24.6
+ '@babel/helper-simple-access': 7.24.6
+ '@babel/helper-split-export-declaration': 7.24.6
+ '@babel/helper-validator-identifier': 7.24.6
+ dev: false
+
+ /@babel/helper-plugin-utils@7.24.6:
+ resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-simple-access@7.24.6:
+ resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-split-export-declaration@7.24.6:
+ resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/helper-string-parser@7.24.6:
+ resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-validator-identifier@7.24.6:
+ resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helper-validator-option@7.24.6:
+ resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /@babel/helpers@7.24.6:
+ resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.24.6
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/highlight@7.24.6:
+ resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.24.6
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.0.1
+ dev: false
+
+ /@babel/node@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-63bD/Kbh1Vl6HapTZLSsyaGlQhhpF1/GpyS1oJotroJKoamOgKKEEKk3iHZAkicjcr+n4V4zdB0V+8siv6AZ5Q==}
+ engines: {node: '>=6.9.0'}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/register': 7.24.6(@babel/core@7.24.6)
+ commander: 6.2.1
+ core-js: 3.37.1
+ node-environment-flags: 1.0.6
+ regenerator-runtime: 0.14.1
+ v8flags: 3.2.0
+ dev: false
+
+ /@babel/parser@7.24.6:
+ resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-plugin-utils': 7.24.6
+ dev: false
+
+ /@babel/plugin-transform-react-display-name@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-plugin-utils': 7.24.6
+ dev: false
+
+ /@babel/plugin-transform-react-jsx-development@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6)
+ dev: false
+
+ /@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-annotate-as-pure': 7.24.6
+ '@babel/helper-module-imports': 7.24.6
+ '@babel/helper-plugin-utils': 7.24.6
+ '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6)
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/plugin-transform-react-pure-annotations@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-annotate-as-pure': 7.24.6
+ '@babel/helper-plugin-utils': 7.24.6
+ dev: false
+
+ /@babel/preset-react@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ '@babel/helper-plugin-utils': 7.24.6
+ '@babel/helper-validator-option': 7.24.6
+ '@babel/plugin-transform-react-display-name': 7.24.6(@babel/core@7.24.6)
+ '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6)
+ '@babel/plugin-transform-react-jsx-development': 7.24.6(@babel/core@7.24.6)
+ '@babel/plugin-transform-react-pure-annotations': 7.24.6(@babel/core@7.24.6)
+ dev: false
+
+ /@babel/register@7.24.6(@babel/core@7.24.6):
+ resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.24.6
+ clone-deep: 4.0.1
+ find-cache-dir: 2.1.0
+ make-dir: 2.1.0
+ pirates: 4.0.6
+ source-map-support: 0.5.21
+ dev: false
+
+ /@babel/template@7.24.6:
+ resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.24.6
+ '@babel/parser': 7.24.6
+ '@babel/types': 7.24.6
+ dev: false
+
+ /@babel/traverse@7.24.6:
+ resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.24.6
+ '@babel/generator': 7.24.6
+ '@babel/helper-environment-visitor': 7.24.6
+ '@babel/helper-function-name': 7.24.6
+ '@babel/helper-hoist-variables': 7.24.6
+ '@babel/helper-split-export-declaration': 7.24.6
+ '@babel/parser': 7.24.6
+ '@babel/types': 7.24.6
+ debug: 4.3.5
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /@babel/types@7.24.6:
+ resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.24.6
+ '@babel/helper-validator-identifier': 7.24.6
+ to-fast-properties: 2.0.0
+ dev: false
+
+ /@jridgewell/gen-mapping@0.3.5:
+ resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.25
+ dev: false
+
+ /@jridgewell/resolve-uri@3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
+ /@jridgewell/set-array@1.2.1:
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ dev: false
+
+ /@jridgewell/trace-mapping@0.3.25:
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: false
+
+ /ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: false
+
+ /array-buffer-byte-length@1.0.1:
+ resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ is-array-buffer: 3.0.4
+ dev: false
+
+ /array.prototype.reduce@1.0.7:
+ resolution: {integrity: sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-array-method-boxes-properly: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ is-string: 1.0.7
+ dev: false
+
+ /arraybuffer.prototype.slice@1.0.3:
+ resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ is-array-buffer: 3.0.4
+ is-shared-array-buffer: 1.0.3
+ dev: false
+
+ /available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ possible-typed-array-names: 1.0.0
+ dev: false
+
+ /browserslist@4.23.0:
+ resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001627
+ electron-to-chromium: 1.4.788
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.16(browserslist@4.23.0)
+ dev: false
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: false
+
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ set-function-length: 1.2.2
+ dev: false
+
+ /caniuse-lite@1.0.30001627:
+ resolution: {integrity: sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==}
+ dev: false
+
+ /chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: false
+
+ /clone-deep@4.0.1:
+ resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ is-plain-object: 2.0.4
+ kind-of: 6.0.3
+ shallow-clone: 3.0.1
+ dev: false
+
+ /color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: false
+
+ /color-name@1.1.3:
+ resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
+ dev: false
+
+ /commander@6.2.1:
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /commondir@1.0.1:
+ resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=}
+ dev: false
+
+ /convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ dev: false
+
+ /core-js@3.37.1:
+ resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==}
+ requiresBuild: true
+ dev: false
+
+ /data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: false
+
+ /data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: false
+
+ /data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+ dev: false
+
+ /debug@4.3.5:
+ resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: false
+
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ gopd: 1.0.1
+ dev: false
+
+ /define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+ dev: false
+
+ /electron-to-chromium@1.4.788:
+ resolution: {integrity: sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==}
+ dev: false
+
+ /es-abstract@1.23.3:
+ resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ arraybuffer.prototype.slice: 1.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ data-view-buffer: 1.0.1
+ data-view-byte-length: 1.0.1
+ data-view-byte-offset: 1.0.0
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-set-tostringtag: 2.0.3
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.4
+ get-symbol-description: 1.0.2
+ globalthis: 1.0.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ internal-slot: 1.0.7
+ is-array-buffer: 3.0.4
+ is-callable: 1.2.7
+ is-data-view: 1.0.1
+ is-negative-zero: 2.0.3
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.3
+ is-string: 1.0.7
+ is-typed-array: 1.1.13
+ is-weakref: 1.0.2
+ object-inspect: 1.13.1
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ safe-array-concat: 1.1.2
+ safe-regex-test: 1.0.3
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.2
+ typed-array-byte-length: 1.0.1
+ typed-array-byte-offset: 1.0.2
+ typed-array-length: 1.0.6
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.15
+ dev: false
+
+ /es-array-method-boxes-properly@1.0.0:
+ resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
+ dev: false
+
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: false
+
+ /es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ dev: false
+
+ /es-set-tostringtag@2.0.3:
+ resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+ dev: false
+
+ /es-to-primitive@1.2.1:
+ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.0.5
+ is-symbol: 1.0.4
+ dev: false
+
+ /escalade@3.1.2:
+ resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
+ engines: {node: '>=0.8.0'}
+ dev: false
+
+ /find-cache-dir@2.1.0:
+ resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ commondir: 1.0.1
+ make-dir: 2.1.0
+ pkg-dir: 3.0.0
+ dev: false
+
+ /find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+ dependencies:
+ locate-path: 3.0.0
+ dev: false
+
+ /for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ dependencies:
+ is-callable: 1.2.7
+ dev: false
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ dev: false
+
+ /function.prototype.name@1.1.6:
+ resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ functions-have-names: 1.2.3
+ dev: false
+
+ /functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ dev: false
+
+ /gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: false
+
+ /get-intrinsic@1.2.4:
+ resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ dev: false
+
+ /get-symbol-description@1.0.2:
+ resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ dev: false
+
+ /globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: false
+
+ /globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.0.1
+ dev: false
+
+ /gopd@1.0.1:
+ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+ dependencies:
+ get-intrinsic: 1.2.4
+ dev: false
+
+ /has-bigints@1.0.2:
+ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+ dev: false
+
+ /has-flag@3.0.0:
+ resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
+ engines: {node: '>=4'}
+ dev: false
+
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ dependencies:
+ es-define-property: 1.0.0
+ dev: false
+
+ /has-proto@1.0.3:
+ resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /has-symbols@1.0.3:
+ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: false
+
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+ dev: false
+
+ /homedir-polyfill@1.0.3:
+ resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ parse-passwd: 1.0.0
+ dev: false
+
+ /internal-slot@1.0.7:
+ resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.0.6
+ dev: false
+
+ /is-array-buffer@3.0.4:
+ resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ dev: false
+
+ /is-bigint@1.0.4:
+ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+ dependencies:
+ has-bigints: 1.0.2
+ dev: false
+
+ /is-boolean-object@1.1.2:
+ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-typed-array: 1.1.13
+ dev: false
+
+ /is-date-object@1.0.5:
+ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /is-number-object@1.0.7:
+ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: false
+
+ /is-regex@1.1.4:
+ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-shared-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ dev: false
+
+ /is-string@1.0.7:
+ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /is-symbol@1.0.4:
+ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ has-symbols: 1.0.3
+ dev: false
+
+ /is-typed-array@1.1.13:
+ resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ which-typed-array: 1.1.15
+ dev: false
+
+ /is-weakref@1.0.2:
+ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+ dependencies:
+ call-bind: 1.0.7
+ dev: false
+
+ /isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+ dev: false
+
+ /isobject@3.0.1:
+ resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: false
+
+ /jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: false
+
+ /json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: false
+
+ /kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+ dev: false
+
+ /lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: false
+
+ /make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.2
+ dev: false
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ dev: false
+
+ /node-environment-flags@1.0.6:
+ resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==}
+ dependencies:
+ object.getownpropertydescriptors: 2.1.8
+ semver: 5.7.2
+ dev: false
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ dev: false
+
+ /object-inspect@1.13.1:
+ resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+ dev: false
+
+ /object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /object.assign@4.1.5:
+ resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ has-symbols: 1.0.3
+ object-keys: 1.1.1
+ dev: false
+
+ /object.getownpropertydescriptors@2.1.8:
+ resolution: {integrity: sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ array.prototype.reduce: 1.0.7
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ gopd: 1.0.1
+ safe-array-concat: 1.1.2
+ dev: false
+
+ /p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-try: 2.2.0
+ dev: false
+
+ /p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+ dependencies:
+ p-limit: 2.3.0
+ dev: false
+
+ /p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /parse-passwd@1.0.0:
+ resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /path-exists@3.0.0:
+ resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=}
+ engines: {node: '>=4'}
+ dev: false
+
+ /picocolors@1.0.1:
+ resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+ dev: false
+
+ /pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+ dev: false
+
+ /pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+ dev: false
+
+ /pkg-dir@3.0.0:
+ resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
+ engines: {node: '>=6'}
+ dependencies:
+ find-up: 3.0.0
+ dev: false
+
+ /possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+ dev: false
+
+ /regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+ dev: false
+
+ /regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ set-function-name: 2.0.2
+ dev: false
+
+ /safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
+ engines: {node: '>=0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ get-intrinsic: 1.2.4
+ has-symbols: 1.0.3
+ isarray: 2.0.5
+ dev: false
+
+ /safe-regex-test@1.0.3:
+ resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-regex: 1.1.4
+ dev: false
+
+ /semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+ dev: false
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: false
+
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.4
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ dev: false
+
+ /set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+ dev: false
+
+ /shallow-clone@3.0.1:
+ resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+ engines: {node: '>=8'}
+ dependencies:
+ kind-of: 6.0.3
+ dev: false
+
+ /side-channel@1.0.6:
+ resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.4
+ object-inspect: 1.13.1
+ dev: false
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: false
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-abstract: 1.23.3
+ es-object-atoms: 1.0.0
+ dev: false
+
+ /string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: false
+
+ /string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ define-properties: 1.2.1
+ es-object-atoms: 1.0.0
+ dev: false
+
+ /supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: false
+
+ /to-fast-properties@2.0.0:
+ resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
+ engines: {node: '>=4'}
+ dev: false
+
+ /typed-array-buffer@1.0.2:
+ resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-typed-array: 1.1.13
+ dev: false
+
+ /typed-array-byte-length@1.0.1:
+ resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ dev: false
+
+ /typed-array-byte-offset@1.0.2:
+ resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ dev: false
+
+ /typed-array-length@1.0.6:
+ resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-proto: 1.0.3
+ is-typed-array: 1.1.13
+ possible-typed-array-names: 1.0.0
+ dev: false
+
+ /unbox-primitive@1.0.2:
+ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ dependencies:
+ call-bind: 1.0.7
+ has-bigints: 1.0.2
+ has-symbols: 1.0.3
+ which-boxed-primitive: 1.0.2
+ dev: false
+
+ /update-browserslist-db@1.0.16(browserslist@4.23.0):
+ resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.23.0
+ escalade: 3.1.2
+ picocolors: 1.0.1
+ dev: false
+
+ /v8flags@3.2.0:
+ resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ homedir-polyfill: 1.0.3
+ dev: false
+
+ /which-boxed-primitive@1.0.2:
+ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+ dependencies:
+ is-bigint: 1.0.4
+ is-boolean-object: 1.1.2
+ is-number-object: 1.0.7
+ is-string: 1.0.7
+ is-symbol: 1.0.4
+ dev: false
+
+ /which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ for-each: 0.3.3
+ gopd: 1.0.1
+ has-tostringtag: 1.0.2
+ dev: false
+
+ /yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: false
+
+ file:../../dist/react:
+ resolution: {directory: ../../dist/react, type: directory}
+ name: react
+ dev: false
+
+ file:../../dist/react-noop:
+ resolution: {directory: ../../dist/react-noop, type: directory}
+ name: react-noop
+ dev: false
diff --git a/jest.config.js b/jest.config.js
index 7811a58..45f43b9 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,9 +1,9 @@
-const {defaults} = require('jest-config');
+const {defaults} = require('jest-config')
module.exports = {
- ...defaults,
- moduleDirectories: [...defaults.moduleDirectories, 'dist'],
- modulePathIgnorePatterns: ["__tests__/utils"],
- testEnvironment: 'jsdom',
- setupFilesAfterEnv: ['/setup-jest.js'],
-};
+ // ...defaults,
+ // moduleDirectories: [...defaults.moduleDirectories, 'dist'],
+ modulePathIgnorePatterns: ['__tests__/utils'],
+ testEnvironment: 'jsdom',
+ setupFilesAfterEnv: ['/jest/setupJest.js'],
+}
diff --git a/jest/reactTestMatchers.js b/jest/reactTestMatchers.js
new file mode 100644
index 0000000..dc4f859
--- /dev/null
+++ b/jest/reactTestMatchers.js
@@ -0,0 +1,46 @@
+'use strict';
+
+const JestReact = require('jest-react');
+const SchedulerMatchers = require('./schedulerTestMatchers');
+
+function captureAssertion(fn) {
+ // Trick to use a Jest matcher inside another Jest matcher. `fn` contains an
+ // assertion; if it throws, we capture the error and return it, so the stack
+ // trace presented to the user points to the original assertion in the
+ // test file.
+ try {
+ fn();
+ } catch (error) {
+ return {
+ pass: false,
+ message: () => error.message
+ };
+ }
+ return { pass: true };
+}
+
+function assertYieldsWereCleared(Scheduler) {
+ const actualYields = Scheduler.unstable_clearYields();
+ if (actualYields.length !== 0) {
+ throw new Error(
+ 'Log of yielded values is not empty. ' +
+ 'Call expect(Scheduler).toHaveYielded(...) first.'
+ );
+ }
+}
+
+function toMatchRenderedOutput(ReactNoop, expectedJSX) {
+ if (typeof ReactNoop.getChildrenAsJSX === 'function') {
+ const Scheduler = ReactNoop._Scheduler;
+ assertYieldsWereCleared(Scheduler);
+ return captureAssertion(() => {
+ expect(ReactNoop.getChildrenAsJSX()).toEqual(expectedJSX);
+ });
+ }
+ return JestReact.unstable_toMatchRenderedOutput(ReactNoop, expectedJSX);
+}
+
+module.exports = {
+ ...SchedulerMatchers,
+ toMatchRenderedOutput
+};
diff --git a/jest/schedulerTestMatchers.js b/jest/schedulerTestMatchers.js
new file mode 100644
index 0000000..a195255
--- /dev/null
+++ b/jest/schedulerTestMatchers.js
@@ -0,0 +1,93 @@
+'use strict';
+
+function captureAssertion(fn) {
+ // Trick to use a Jest matcher inside another Jest matcher. `fn` contains an
+ // assertion; if it throws, we capture the error and return it, so the stack
+ // trace presented to the user points to the original assertion in the
+ // test file.
+ try {
+ fn();
+ } catch (error) {
+ return {
+ pass: false,
+ message: () => error.message
+ };
+ }
+ return { pass: true };
+}
+
+function assertYieldsWereCleared(Scheduler) {
+ const actualYields = Scheduler.unstable_clearYields();
+ if (actualYields.length !== 0) {
+ throw new Error(
+ 'Log of yielded values is not empty. ' +
+ 'Call expect(Scheduler).toHaveYielded(...) first.'
+ );
+ }
+}
+
+function toFlushAndYield(Scheduler, expectedYields) {
+ assertYieldsWereCleared(Scheduler);
+ Scheduler.unstable_flushAllWithoutAsserting();
+ const actualYields = Scheduler.unstable_clearYields();
+ return captureAssertion(() => {
+ expect(actualYields).toEqual(expectedYields);
+ });
+}
+
+function toFlushAndYieldThrough(Scheduler, expectedYields) {
+ assertYieldsWereCleared(Scheduler);
+ Scheduler.unstable_flushNumberOfYields(expectedYields.length);
+ const actualYields = Scheduler.unstable_clearYields();
+ return captureAssertion(() => {
+ expect(actualYields).toEqual(expectedYields);
+ });
+}
+
+function toFlushUntilNextPaint(Scheduler, expectedYields) {
+ assertYieldsWereCleared(Scheduler);
+ Scheduler.unstable_flushUntilNextPaint();
+ const actualYields = Scheduler.unstable_clearYields();
+ return captureAssertion(() => {
+ expect(actualYields).toEqual(expectedYields);
+ });
+}
+
+function toFlushWithoutYielding(Scheduler) {
+ return toFlushAndYield(Scheduler, []);
+}
+
+function toFlushExpired(Scheduler, expectedYields) {
+ assertYieldsWereCleared(Scheduler);
+ Scheduler.unstable_flushExpired();
+ const actualYields = Scheduler.unstable_clearYields();
+ return captureAssertion(() => {
+ expect(actualYields).toEqual(expectedYields);
+ });
+}
+
+function toHaveYielded(Scheduler, expectedYields) {
+ return captureAssertion(() => {
+ const actualYields = Scheduler.unstable_clearYields();
+ expect(actualYields).toEqual(expectedYields);
+ });
+}
+
+function toFlushAndThrow(Scheduler, ...rest) {
+ assertYieldsWereCleared(Scheduler);
+ return captureAssertion(() => {
+ expect(() => {
+ Scheduler.unstable_flushAllWithoutAsserting();
+ }).toThrow(...rest);
+ });
+}
+
+module.exports = {
+ toFlushAndYield,
+ toFlushAndYieldThrough,
+ toFlushUntilNextPaint,
+ toFlushWithoutYielding,
+ toFlushExpired,
+ toHaveYielded,
+ toFlushAndThrow
+};
diff --git a/jest/setupJest.js b/jest/setupJest.js
new file mode 100644
index 0000000..3eb96a7
--- /dev/null
+++ b/jest/setupJest.js
@@ -0,0 +1,5 @@
+Object.setPrototypeOf(window, Window.prototype)
+
+expect.extend({
+ ...require('./reactTestMatchers')
+});
diff --git a/package.json b/package.json
index 055f53c..21f7f2f 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,8 @@
"scripts": {
"build:dev": "ENV=dev node scripts/build.js",
"build:test": "ENV=test node scripts/build.js --test",
- "test": "npm run build:test && jest"
+ "test": "npm run build:test && jest",
+ "jest": "jest --watch"
},
"author": "",
"license": "ISC",
@@ -23,5 +24,8 @@
"jest-environment-jsdom": "^29.7.0",
"react": "file://./dist/react",
"react-dom": "file://./dist/react-dom"
+ },
+ "dependencies": {
+ "jest-react": "^0.14.2"
}
}
diff --git a/packages/react-dom/src/lib.rs b/packages/react-dom/src/lib.rs
index 474cfcb..243bd6a 100644
--- a/packages/react-dom/src/lib.rs
+++ b/packages/react-dom/src/lib.rs
@@ -1,13 +1,17 @@
+use gloo::console::log;
+use js_sys::{Array, Function, Object, Reflect};
+use react_reconciler::fiber::FiberRootNode;
+use std::cell::RefCell;
+use std::collections::HashMap;
+use std::hash::{Hash, Hasher};
use std::rc::Rc;
-
-use js_sys::{Array, Function};
use wasm_bindgen::prelude::*;
use web_sys::Node;
use react_reconciler::Reconciler;
use scheduler::{
- Priority, unstable_cancel_callback,
- unstable_schedule_callback as origin_unstable_schedule_callback, unstable_should_yield_to_host,
+ unstable_cancel_callback, unstable_schedule_callback as origin_unstable_schedule_callback,
+ unstable_should_yield_to_host, Priority,
};
use crate::host_config::ReactDomHostConfig;
@@ -19,6 +23,8 @@ mod renderer;
mod synthetic_event;
mod utils;
+// static mut CONTAINER_TO_ROOT: Option>>> = None;
+
#[wasm_bindgen(js_name = createRoot)]
pub fn create_root(container: &JsValue) -> Renderer {
set_panic_hook();
@@ -29,28 +35,22 @@ pub fn create_root(container: &JsValue) -> Renderer {
panic!("container should be Node")
}
};
+
+ // let mut root;
+ // unsafe {
+ // if CONTAINER_TO_ROOT.is_none() {
+ // CONTAINER_TO_ROOT = Some(HashMap::new());
+ // }
+ // };
+ // log!(
+ // "ptr {:?}",
+ // Reflect::get(container, &JsValue::from_str("ptr")).unwrap()
+ // );
+ // unsafe {
+ // CONTAINER_TO_ROOT.unwrap().insert(container.clone(), root);
+ // }
+
let root = reconciler.create_container(Rc::new(node));
let renderer = Renderer::new(root, reconciler, container);
renderer
}
-
-#[wasm_bindgen(js_name = scheduleCallback, variadic)]
-pub fn unstable_schedule_callback(
- priority_level: Priority,
- callback: Function,
- delay: &JsValue,
-) -> u32 {
- let delay = delay.dyn_ref::().unwrap();
- let d = delay.get(0).as_f64().unwrap_or_else(|| 0.0);
- origin_unstable_schedule_callback(priority_level, callback, d)
-}
-
-#[wasm_bindgen(js_name = cancelCallback)]
-pub fn cancel_callback(id: u32) {
- unstable_cancel_callback(id)
-}
-
-#[wasm_bindgen(js_name = shouldYieldToHost)]
-pub fn should_yield_to_host() -> bool {
- unstable_should_yield_to_host()
-}
diff --git a/packages/react-noop/.appveyor.yml b/packages/react-noop/.appveyor.yml
new file mode 100644
index 0000000..50910bd
--- /dev/null
+++ b/packages/react-noop/.appveyor.yml
@@ -0,0 +1,11 @@
+install:
+ - appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
+ - if not defined RUSTFLAGS rustup-init.exe -y --default-host x86_64-pc-windows-msvc --default-toolchain nightly
+ - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
+ - rustc -V
+ - cargo -V
+
+build: false
+
+test_script:
+ - cargo test --locked
diff --git a/packages/react-noop/.gitignore b/packages/react-noop/.gitignore
new file mode 100644
index 0000000..4e30131
--- /dev/null
+++ b/packages/react-noop/.gitignore
@@ -0,0 +1,6 @@
+/target
+**/*.rs.bk
+Cargo.lock
+bin/
+pkg/
+wasm-pack.log
diff --git a/packages/react-noop/.travis.yml b/packages/react-noop/.travis.yml
new file mode 100644
index 0000000..7a91325
--- /dev/null
+++ b/packages/react-noop/.travis.yml
@@ -0,0 +1,69 @@
+language: rust
+sudo: false
+
+cache: cargo
+
+matrix:
+ include:
+
+ # Builds with wasm-pack.
+ - rust: beta
+ env: RUST_BACKTRACE=1
+ addons:
+ firefox: latest
+ chrome: stable
+ before_script:
+ - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
+ - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
+ - cargo install-update -a
+ - curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -s -- -f
+ script:
+ - cargo generate --git . --name testing
+ # Having a broken Cargo.toml (in that it has curlies in fields) anywhere
+ # in any of our parent dirs is problematic.
+ - mv Cargo.toml Cargo.toml.tmpl
+ - cd testing
+ - wasm-pack build
+ - wasm-pack test --chrome --firefox --headless
+
+ # Builds on nightly.
+ - rust: nightly
+ env: RUST_BACKTRACE=1
+ before_script:
+ - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
+ - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
+ - cargo install-update -a
+ - rustup target add wasm32-unknown-unknown
+ script:
+ - cargo generate --git . --name testing
+ - mv Cargo.toml Cargo.toml.tmpl
+ - cd testing
+ - cargo check
+ - cargo check --target wasm32-unknown-unknown
+ - cargo check --no-default-features
+ - cargo check --target wasm32-unknown-unknown --no-default-features
+ - cargo check --no-default-features --features console_error_panic_hook
+ - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook
+ - cargo check --no-default-features --features "console_error_panic_hook wee_alloc"
+ - cargo check --target wasm32-unknown-unknown --no-default-features --features "console_error_panic_hook wee_alloc"
+
+ # Builds on beta.
+ - rust: beta
+ env: RUST_BACKTRACE=1
+ before_script:
+ - (test -x $HOME/.cargo/bin/cargo-install-update || cargo install cargo-update)
+ - (test -x $HOME/.cargo/bin/cargo-generate || cargo install --vers "^0.2" cargo-generate)
+ - cargo install-update -a
+ - rustup target add wasm32-unknown-unknown
+ script:
+ - cargo generate --git . --name testing
+ - mv Cargo.toml Cargo.toml.tmpl
+ - cd testing
+ - cargo check
+ - cargo check --target wasm32-unknown-unknown
+ - cargo check --no-default-features
+ - cargo check --target wasm32-unknown-unknown --no-default-features
+ - cargo check --no-default-features --features console_error_panic_hook
+ - cargo check --target wasm32-unknown-unknown --no-default-features --features console_error_panic_hook
+ # Note: no enabling the `wee_alloc` feature here because it requires
+ # nightly for now.
diff --git a/packages/react-noop/Cargo.toml b/packages/react-noop/Cargo.toml
new file mode 100644
index 0000000..93c8606
--- /dev/null
+++ b/packages/react-noop/Cargo.toml
@@ -0,0 +1,31 @@
+[package]
+name = "react-noop"
+version = "0.1.0"
+authors = ["youxingzhi "]
+edition = "2018"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[features]
+default = ["console_error_panic_hook"]
+
+[dependencies]
+wasm-bindgen = "0.2.84"
+react-reconciler = { path = "../react-reconciler" }
+web-sys = { version = "0.3.69" }
+
+# The `console_error_panic_hook` crate provides better debugging of panics by
+# logging them with `console.error`. This is great for development, but requires
+# all the `std::fmt` and `std::panicking` infrastructure, so isn't great for
+# code size when deploying.
+console_error_panic_hook = { version = "0.1.7", optional = true }
+
+shared = { path = "../shared" }
+
+[dev-dependencies]
+wasm-bindgen-test = "0.3.34"
+
+[profile.release]
+# Tell `rustc` to optimize for small code size.
+opt-level = "s"
diff --git a/packages/react-noop/LICENSE_APACHE b/packages/react-noop/LICENSE_APACHE
new file mode 100644
index 0000000..11069ed
--- /dev/null
+++ b/packages/react-noop/LICENSE_APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/packages/react-noop/LICENSE_MIT b/packages/react-noop/LICENSE_MIT
new file mode 100644
index 0000000..89cb97a
--- /dev/null
+++ b/packages/react-noop/LICENSE_MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2018 youxingzhi
+
+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-noop/README.md b/packages/react-noop/README.md
new file mode 100644
index 0000000..6b68408
--- /dev/null
+++ b/packages/react-noop/README.md
@@ -0,0 +1,84 @@
+
+
+## About
+
+[**📚 Read this template tutorial! 📚**][template-docs]
+
+This template is designed for compiling Rust libraries into WebAssembly and
+publishing the resulting package to NPM.
+
+Be sure to check out [other `wasm-pack` tutorials online][tutorials] for other
+templates and usages of `wasm-pack`.
+
+[tutorials]: https://rustwasm.github.io/docs/wasm-pack/tutorials/index.html
+[template-docs]: https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html
+
+## 🚴 Usage
+
+### 🐑 Use `cargo generate` to Clone this Template
+
+[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate)
+
+```
+cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project
+cd my-project
+```
+
+### 🛠️ Build with `wasm-pack build`
+
+```
+wasm-pack build
+```
+
+### 🔬 Test in Headless Browsers with `wasm-pack test`
+
+```
+wasm-pack test --headless --firefox
+```
+
+### 🎁 Publish to NPM with `wasm-pack publish`
+
+```
+wasm-pack publish
+```
+
+## 🔋 Batteries Included
+
+* [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating
+ between WebAssembly and JavaScript.
+* [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook)
+ for logging panic messages to the developer console.
+* `LICENSE-APACHE` and `LICENSE-MIT`: most Rust projects are licensed this way, so these are included for you
+
+## License
+
+Licensed under either of
+
+* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
+* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
+
+at your option.
+
+### Contribution
+
+Unless you explicitly state otherwise, any contribution intentionally
+submitted for inclusion in the work by you, as defined in the Apache-2.0
+license, shall be dual licensed as above, without any additional terms or
+conditions.
diff --git a/packages/react-noop/src/host_config.rs b/packages/react-noop/src/host_config.rs
new file mode 100644
index 0000000..e238515
--- /dev/null
+++ b/packages/react-noop/src/host_config.rs
@@ -0,0 +1,212 @@
+use std::any::Any;
+use std::cell::RefCell;
+use std::rc::Rc;
+
+use wasm_bindgen::prelude::*;
+use wasm_bindgen::JsValue;
+use web_sys::js_sys;
+use web_sys::js_sys::JSON::stringify;
+use web_sys::js_sys::{global, Array, Function, Object, Promise, Reflect};
+
+use react_reconciler::HostConfig;
+use shared::{derive_from_js_value, log};
+
+static mut INSTANCE_COUNTER: u32 = 0;
+
+pub struct ReactNoopHostConfig;
+
+#[wasm_bindgen]
+extern "C" {
+ type Global;
+
+ #[wasm_bindgen]
+ fn queueMicrotask(closure: &JsValue);
+
+ #[wasm_bindgen]
+ fn setTimeout(closure: &JsValue, timeout: i32);
+
+ #[wasm_bindgen(method, getter, js_name = queueMicrotask)]
+ fn hasQueueMicrotask(this: &Global) -> JsValue;
+}
+
+pub fn to_string(js_value: &JsValue) -> String {
+ js_value.as_string().unwrap_or_else(|| {
+ if js_value.is_undefined() {
+ "undefined".to_owned()
+ } else if js_value.is_null() {
+ "null".to_owned()
+ } else if type_of(js_value, "boolean") {
+ let bool_value = js_value.as_bool().unwrap();
+ bool_value.to_string()
+ } else if js_value.as_f64().is_some() {
+ let num_value = js_value.as_f64().unwrap();
+ num_value.to_string()
+ } else {
+ let js_string = stringify(&js_value).unwrap();
+ js_string.into()
+ }
+ })
+}
+
+fn type_of(p0: &JsValue, p1: &str) -> bool {
+ todo!()
+}
+
+fn getCounter() -> u32 {
+ let mut counter;
+ unsafe {
+ counter = INSTANCE_COUNTER;
+ INSTANCE_COUNTER += 1;
+ }
+ counter
+}
+
+pub fn create_container() -> JsValue {
+ let container = Object::new();
+ Reflect::set(&container, &"rootId".into(), &JsValue::from(getCounter()));
+ Reflect::set(&container, &"pendingChildren".into(), &**Array::new());
+ Reflect::set(&container, &"children".into(), &**Array::new());
+ container.into()
+}
+
+impl HostConfig for ReactNoopHostConfig {
+ fn create_text_instance(&self, content: &JsValue) -> Rc {
+ let obj = Object::new();
+ Reflect::set(&obj, &"id".into(), &getCounter().into());
+ Reflect::set(&obj, &"text".into(), &content);
+ Reflect::set(&obj, &"parent".into(), &JsValue::from(-1.0));
+ Rc::new(JsValue::from(obj))
+ }
+
+ fn create_instance(&self, _type: String, props: Rc) -> Rc {
+ let obj = Object::new();
+ Reflect::set(&obj, &"id".into(), &getCounter().into());
+ Reflect::set(&obj, &"type".into(), &_type.into());
+ Reflect::set(&obj, &"children".into(), &**Array::new());
+ Reflect::set(&obj, &"parent".into(), &JsValue::from(-1.0));
+ Reflect::set(
+ &obj,
+ &"props".into(),
+ &*props.clone().downcast::().unwrap(),
+ );
+ Rc::new(JsValue::from(obj))
+ }
+
+ fn append_initial_child(&self, parent: Rc, child: Rc) {
+ let p = parent.clone().downcast::().unwrap();
+ let c = child.clone().downcast::().unwrap();
+ let prev_parent = derive_from_js_value(&c, "parent").as_f64().unwrap();
+ let parent_id = derive_from_js_value(&p, "id").as_f64().unwrap();
+ if prev_parent != -1.0 && prev_parent != parent_id {
+ panic!("Cannot mount child repeatedly")
+ }
+ Reflect::set(&c, &"parent".into(), &parent_id.into());
+ let children_js_value = derive_from_js_value(&p, "children");
+ let children = children_js_value.dyn_ref::().unwrap();
+ children.push(&c);
+ }
+
+ fn append_child_to_container(&self, child: Rc, container: Rc) {
+ let container = container.clone().downcast::().unwrap();
+ let c = child.clone().downcast::().unwrap();
+ let prev_parent = derive_from_js_value(&c, "parent").as_f64().unwrap();
+ let root_id = derive_from_js_value(&container, "rootId").as_f64().unwrap();
+ if prev_parent != -1.0 && prev_parent != root_id {
+ panic!("Cannot mount child repeatedly")
+ }
+ Reflect::set(&c, &"parent".into(), &JsValue::from(root_id));
+ let children_js_value = derive_from_js_value(&container, "children");
+ let children = children_js_value.dyn_ref::().unwrap();
+ let index = children.index_of(&c, 0);
+ if index != -1 {
+ children.splice(index as u32, 1, &JsValue::undefined());
+ }
+ children.push(&c);
+ }
+
+ fn remove_child(&self, child: Rc, container: Rc) {
+ let container = container.clone().downcast::().unwrap();
+ let children_js_value = derive_from_js_value(&container, "children");
+ let children = children_js_value.dyn_ref::().unwrap();
+ let child = child.clone().downcast::().unwrap();
+ let index = children.index_of(&child, 0);
+ if index == -1 {
+ panic!("Child does not exist")
+ }
+ children.splice(index as u32, 1, &JsValue::undefined());
+ }
+
+ fn commit_text_update(&self, text_instance: Rc, content: &JsValue) {
+ let text_instance = text_instance.clone().downcast::().unwrap();
+ Reflect::set(&text_instance, &"text".into(), content);
+ }
+
+ fn insert_child_to_container(
+ &self,
+ child: Rc,
+ container: Rc,
+ before: Rc,
+ ) {
+ let container = container.clone().downcast::().unwrap();
+ let child = child.clone().downcast::().unwrap();
+ let children_js_value = derive_from_js_value(&container, "children");
+ let children = children_js_value.dyn_ref::().unwrap();
+ let index = children.index_of(&child, 0);
+ if index != -1 {
+ children.splice(index as u32, 1, &JsValue::undefined());
+ }
+ let before = before.clone().downcast::().unwrap();
+ let before_index = children.index_of(&before, 0);
+ if before_index != -1 {
+ panic!("Before does not exist")
+ }
+
+ children.splice(before_index as u32, 0, &child);
+ }
+
+ fn schedule_microtask(&self, callback: Box) {
+ let closure = Rc::new(RefCell::new(Some(Closure::wrap(callback))));
+
+ if global()
+ .unchecked_into::()
+ .hasQueueMicrotask()
+ .is_function()
+ {
+ let closure_clone = closure.clone();
+ queueMicrotask(
+ &closure_clone
+ .borrow_mut()
+ .as_ref()
+ .unwrap()
+ .as_ref()
+ .unchecked_ref::(),
+ );
+ closure_clone.borrow_mut().take().unwrap_throw().forget();
+ } else if js_sys::Reflect::get(&*global(), &JsValue::from_str("Promise"))
+ .map(|value| value.is_function())
+ .unwrap_or(false)
+ {
+ let promise = Promise::resolve(&JsValue::NULL);
+ let closure_clone = closure.clone();
+ let c = Closure::wrap(Box::new(move |_v| {
+ let b = closure_clone.borrow_mut();
+ let function = b.as_ref().unwrap().as_ref().unchecked_ref::();
+ let _ = function.call0(&JsValue::NULL);
+ }) as Box);
+ let _ = promise.then(&c);
+ c.forget();
+ } else {
+ let closure_clone = closure.clone();
+ setTimeout(
+ &closure_clone
+ .borrow_mut()
+ .as_ref()
+ .unwrap()
+ .as_ref()
+ .unchecked_ref::(),
+ 0,
+ );
+ closure_clone.borrow_mut().take().unwrap_throw().forget();
+ }
+ }
+}
diff --git a/packages/react-noop/src/lib.rs b/packages/react-noop/src/lib.rs
new file mode 100644
index 0000000..dcbbfdf
--- /dev/null
+++ b/packages/react-noop/src/lib.rs
@@ -0,0 +1,24 @@
+use std::rc::Rc;
+
+use wasm_bindgen::prelude::*;
+
+use react_reconciler::Reconciler;
+
+use crate::host_config::{create_container, ReactNoopHostConfig};
+use crate::renderer::Renderer;
+use crate::utils::set_panic_hook;
+
+mod utils;
+mod renderer;
+mod host_config;
+
+
+#[wasm_bindgen(js_name = createRoot)]
+pub fn create_root() -> Renderer {
+ set_panic_hook();
+ let container = create_container();
+ let reconciler = Reconciler::new(Rc::new(ReactNoopHostConfig));
+ let root = reconciler.create_container(Rc::new(container.clone()));
+ let renderer = Renderer::new(root, reconciler, container);
+ renderer
+}
\ No newline at end of file
diff --git a/packages/react-noop/src/renderer.rs b/packages/react-noop/src/renderer.rs
new file mode 100644
index 0000000..b7d1f0b
--- /dev/null
+++ b/packages/react-noop/src/renderer.rs
@@ -0,0 +1,118 @@
+use std::cell::RefCell;
+use std::rc::Rc;
+
+use shared::REACT_ELEMENT_TYPE;
+use wasm_bindgen::prelude::*;
+use wasm_bindgen::JsValue;
+use web_sys::js_sys::Array;
+
+use react_reconciler::fiber::FiberRootNode;
+use react_reconciler::Reconciler;
+use shared::{derive_from_js_value, to_string, type_of};
+use web_sys::js_sys::Object;
+use web_sys::js_sys::Reflect;
+
+#[wasm_bindgen]
+pub struct Renderer {
+ container: JsValue,
+ root: Rc>,
+ reconciler: Reconciler,
+}
+
+impl Renderer {
+ pub fn new(
+ root: Rc>,
+ reconciler: Reconciler,
+ container: JsValue,
+ ) -> Self {
+ Self {
+ root,
+ reconciler,
+ container,
+ }
+ }
+}
+
+fn child_to_jsx(child: JsValue) -> JsValue {
+ if child.is_null() {
+ return JsValue::null();
+ }
+
+ if type_of(&child, "string") || type_of(&child, "number") {
+ return child.clone();
+ }
+
+ if child.is_array() {
+ let child = child.dyn_ref::().unwrap();
+ if child.length() == 0 {
+ return JsValue::null();
+ }
+
+ if child.length() == 1 {
+ return child_to_jsx(child.get(0));
+ }
+
+ let children: Array = child
+ .iter()
+ .map(|child_value| child_to_jsx(child_value))
+ .collect::()
+ .into();
+
+ if children
+ .iter()
+ .all(|c| type_of(&child, "string") || type_of(&child, "number"))
+ {
+ let joined_children = children
+ .iter()
+ .map(|c| to_string(&c))
+ .collect::>()
+ .join("");
+ return JsValue::from_str(&joined_children);
+ }
+
+ return children.into();
+ }
+
+ let children = derive_from_js_value(&child, "children");
+ if children.is_array() {
+ let childrenChildren = child_to_jsx(children);
+ let props = derive_from_js_value(&child, "props");
+ if (!childrenChildren.is_null()) {
+ Reflect::set(&props, &"children".into(), &childrenChildren);
+ }
+
+ let obj = Object::new();
+ Reflect::set(&obj, &"$$typeof".into(), &REACT_ELEMENT_TYPE.into());
+ Reflect::set(&obj, &"type".into(), &derive_from_js_value(&child, "type"));
+ Reflect::set(&obj, &"key".into(), &JsValue::null());
+ Reflect::set(&obj, &"ref".into(), &JsValue::null());
+ Reflect::set(&obj, &"props".into(), &props);
+ return obj.into();
+ }
+
+ derive_from_js_value(&child, "text")
+}
+
+#[wasm_bindgen]
+impl Renderer {
+ pub fn render(&self, element: &JsValue) -> JsValue {
+ self.reconciler
+ .update_container(element.clone(), self.root.clone())
+ }
+
+ pub fn getChildrenAsJSX(&self) -> JsValue {
+ let mut children = derive_from_js_value(&self.container, "children");
+ if children.is_undefined() {
+ children = JsValue::null();
+ }
+ children = child_to_jsx(children);
+
+ if children.is_null() {
+ return JsValue::null();
+ }
+ if children.is_array() {
+ todo!("Fragment")
+ }
+ return children;
+ }
+}
diff --git a/packages/react-noop/src/utils.rs b/packages/react-noop/src/utils.rs
new file mode 100644
index 0000000..b1d7929
--- /dev/null
+++ b/packages/react-noop/src/utils.rs
@@ -0,0 +1,10 @@
+pub fn set_panic_hook() {
+ // When the `console_error_panic_hook` feature is enabled, we can call the
+ // `set_panic_hook` function at least once during initialization, and then
+ // we will get better error messages if our code ever panics.
+ //
+ // For more details see
+ // https://github.com/rustwasm/console_error_panic_hook#readme
+ #[cfg(feature = "console_error_panic_hook")]
+ console_error_panic_hook::set_once();
+}
diff --git a/packages/react-noop/tests/web.rs b/packages/react-noop/tests/web.rs
new file mode 100644
index 0000000..de5c1da
--- /dev/null
+++ b/packages/react-noop/tests/web.rs
@@ -0,0 +1,13 @@
+//! Test suite for the Web and headless browsers.
+
+#![cfg(target_arch = "wasm32")]
+
+extern crate wasm_bindgen_test;
+use wasm_bindgen_test::*;
+
+wasm_bindgen_test_configure!(run_in_browser);
+
+#[wasm_bindgen_test]
+fn pass() {
+ assert_eq!(1 + 1, 2);
+}
diff --git a/packages/react-reconciler/src/child_fiber.rs b/packages/react-reconciler/src/child_fiber.rs
index 5bb4585..0c653c2 100644
--- a/packages/react-reconciler/src/child_fiber.rs
+++ b/packages/react-reconciler/src/child_fiber.rs
@@ -6,7 +6,7 @@ use std::rc::Rc;
use wasm_bindgen::{JsCast, JsValue};
use web_sys::js_sys::{Array, Object, Reflect};
-use shared::{derive_from_js_value, log, REACT_ELEMENT_TYPE, type_of};
+use shared::{derive_from_js_value, log, type_of, REACT_ELEMENT_TYPE};
use crate::fiber::FiberNode;
use crate::fiber_flags::Flags;
@@ -49,7 +49,7 @@ fn delete_child(
return_fiber.borrow_mut().deletions = vec![child_to_delete.clone()];
return_fiber.borrow_mut().flags |= Flags::ChildDeletion;
} else {
- let mut del = &mut return_fiber.borrow_mut().deletions;
+ let del = &mut return_fiber.borrow_mut().deletions;
del.push(child_to_delete.clone());
}
}
@@ -58,9 +58,9 @@ fn delete_remaining_children(
return_fiber: Rc>,
current_first_child: Option>>,
should_track_effects: bool,
-) {
+) -> Option>> {
if !should_track_effects {
- return;
+ return None;
}
let mut child_to_delete = current_first_child;
@@ -78,6 +78,8 @@ fn delete_remaining_children(
.sibling
.clone();
}
+
+ return None;
}
fn reconcile_single_element(
@@ -226,7 +228,9 @@ fn update_from_map(
delete_child(return_fiber, before, should_track_effects);
}
}
- return if type_of(element, "null") { None } else {
+ return if type_of(element, "null") {
+ None
+ } else {
Some(Rc::new(RefCell::new(FiberNode::new(
WorkTag::HostText,
props.clone(),
@@ -245,13 +249,18 @@ fn update_from_map(
&before.borrow()._type,
&derive_from_js_value(&(*element).clone(), "type"),
) {
- return Some(use_fiber(before.clone(), derive_from_js_value(element, "props")));
+ return Some(use_fiber(
+ before.clone(),
+ derive_from_js_value(element, "props"),
+ ));
} else {
delete_child(return_fiber, before, should_track_effects);
}
}
- return Some(Rc::new(RefCell::new(FiberNode::create_fiber_from_element(element))));
+ return Some(Rc::new(RefCell::new(FiberNode::create_fiber_from_element(
+ element,
+ ))));
}
// panic!("update_from_map unsupported");
None
@@ -379,8 +388,8 @@ fn _reconcile_child_fibers(
}
}
}
- log!("Unsupported child type when reconcile");
- None
+
+ delete_remaining_children(return_fiber, current_first_child, should_track_effects)
}
pub fn reconcile_child_fibers(
diff --git a/packages/react-reconciler/src/commit_work.rs b/packages/react-reconciler/src/commit_work.rs
index 278754f..b5a609d 100644
--- a/packages/react-reconciler/src/commit_work.rs
+++ b/packages/react-reconciler/src/commit_work.rs
@@ -43,7 +43,7 @@ impl CommitWork {
let update_queue = &finished_work_b.update_queue;
if update_queue.is_some() {
let update_queue = update_queue.clone().unwrap();
- if (update_queue.borrow().last_effect.is_none()) {
+ if update_queue.borrow().last_effect.is_none() {
log!("When FC has PassiveEffect, the effect should exist.")
}
if _type == "unmount" {
diff --git a/packages/react-reconciler/src/complete_work.rs b/packages/react-reconciler/src/complete_work.rs
index f474759..455a3bb 100644
--- a/packages/react-reconciler/src/complete_work.rs
+++ b/packages/react-reconciler/src/complete_work.rs
@@ -87,7 +87,7 @@ impl CompleteWork {
._return = _return;
}
- node = { node.clone().unwrap().borrow().sibling.clone() };
+ node = node.clone().unwrap().borrow().sibling.clone();
}
}
diff --git a/packages/react-reconciler/src/update_queue.rs b/packages/react-reconciler/src/update_queue.rs
index ca161fc..708394c 100644
--- a/packages/react-reconciler/src/update_queue.rs
+++ b/packages/react-reconciler/src/update_queue.rs
@@ -48,7 +48,7 @@ pub fn enqueue_update(update_queue: Rc>, mut update: Update
update_rc.borrow_mut().next = update_option.clone();
} else {
let pending = pending.clone().unwrap();
- update_rc.borrow_mut().next = { pending.borrow().next.clone() };
+ update_rc.borrow_mut().next = pending.borrow().next.clone();
pending.borrow_mut().next = update_option.clone();
}
update_queue.borrow_mut().shared.pending = update_option.clone();
diff --git a/packages/shared/src/lib.rs b/packages/shared/src/lib.rs
index 77fe2d4..3366641 100644
--- a/packages/shared/src/lib.rs
+++ b/packages/shared/src/lib.rs
@@ -1,3 +1,4 @@
+use web_sys::js_sys::JSON::stringify;
use web_sys::js_sys::Reflect;
use web_sys::wasm_bindgen::JsValue;
@@ -45,3 +46,22 @@ pub fn type_of(val: &JsValue, _type: &str) -> bool {
};
t == _type
}
+
+pub fn to_string(js_value: &JsValue) -> String {
+ js_value.as_string().unwrap_or_else(|| {
+ if js_value.is_undefined() {
+ "undefined".to_owned()
+ } else if js_value.is_null() {
+ "null".to_owned()
+ } else if type_of(js_value, "boolean") {
+ let bool_value = js_value.as_bool().unwrap();
+ bool_value.to_string()
+ } else if js_value.as_f64().is_some() {
+ let num_value = js_value.as_f64().unwrap();
+ num_value.to_string()
+ } else {
+ let js_string = stringify(&js_value).unwrap();
+ js_string.into()
+ }
+ })
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index aaa0018..283139b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,6 +4,11 @@ settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
+dependencies:
+ jest-react:
+ specifier: ^0.14.2
+ version: 0.14.2(jest@29.7.0)(react-test-renderer@18.3.1)(react@0.1.0)
+
devDependencies:
'@babel/core':
specifier: ^7.18.6
@@ -41,7 +46,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
- dev: true
/@babel/code-frame@7.24.2:
resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==}
@@ -49,12 +53,10 @@ packages:
dependencies:
'@babel/highlight': 7.24.2
picocolors: 1.0.0
- dev: true
/@babel/compat-data@7.24.4:
resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/core@7.24.4:
resolution: {integrity: sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==}
@@ -77,7 +79,6 @@ packages:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/generator@7.24.4:
resolution: {integrity: sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==}
@@ -87,7 +88,6 @@ packages:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
- dev: true
/@babel/helper-annotate-as-pure@7.22.5:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
@@ -112,7 +112,6 @@ packages:
browserslist: 4.23.0
lru-cache: 5.1.1
semver: 6.3.1
- dev: true
/@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.4):
resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==}
@@ -162,7 +161,6 @@ packages:
/@babel/helper-environment-visitor@7.22.20:
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-function-name@7.23.0:
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
@@ -170,14 +168,12 @@ packages:
dependencies:
'@babel/template': 7.24.0
'@babel/types': 7.24.0
- dev: true
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/helper-member-expression-to-functions@7.23.0:
resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
@@ -191,7 +187,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/helper-module-transforms@7.23.3(@babel/core@7.24.4):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
@@ -205,7 +200,6 @@ packages:
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
- dev: true
/@babel/helper-optimise-call-expression@7.22.5:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
@@ -217,7 +211,6 @@ packages:
/@babel/helper-plugin-utils@7.24.0:
resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.4):
resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
@@ -248,7 +241,6 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
@@ -262,22 +254,18 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/helper-string-parser@7.24.1:
resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-identifier@7.22.20:
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-option@7.23.5:
resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-wrap-function@7.22.20:
resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
@@ -297,7 +285,6 @@ packages:
'@babel/types': 7.24.0
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/highlight@7.24.2:
resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==}
@@ -307,7 +294,6 @@ packages:
chalk: 2.4.2
js-tokens: 4.0.0
picocolors: 1.0.0
- dev: true
/@babel/parser@7.24.4:
resolution: {integrity: sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==}
@@ -315,7 +301,6 @@ packages:
hasBin: true
dependencies:
'@babel/types': 7.24.0
- dev: true
/@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.4(@babel/core@7.24.4):
resolution: {integrity: sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA==}
@@ -377,7 +362,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
@@ -386,7 +370,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.4):
resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
@@ -395,7 +378,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.4):
resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
@@ -452,7 +434,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
@@ -461,7 +442,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.4):
resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==}
@@ -471,7 +451,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.4):
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
@@ -480,7 +459,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
@@ -489,7 +467,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.4):
resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
@@ -498,7 +475,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
@@ -507,7 +483,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
@@ -516,7 +491,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.4):
resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
@@ -525,7 +499,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.4):
resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
@@ -545,7 +518,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.4):
resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==}
@@ -555,7 +527,6 @@ packages:
dependencies:
'@babel/core': 7.24.4
'@babel/helper-plugin-utils': 7.24.0
- dev: true
/@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.4):
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
@@ -1280,7 +1251,6 @@ packages:
'@babel/code-frame': 7.24.2
'@babel/parser': 7.24.4
'@babel/types': 7.24.0
- dev: true
/@babel/traverse@7.24.1:
resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==}
@@ -1298,7 +1268,6 @@ packages:
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/types@7.24.0:
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
@@ -1307,11 +1276,9 @@ packages:
'@babel/helper-string-parser': 7.24.1
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- dev: true
/@bcoe/v8-coverage@0.2.3:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
- dev: true
/@istanbuljs/load-nyc-config@1.1.0:
resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
@@ -1322,12 +1289,10 @@ packages:
get-package-type: 0.1.0
js-yaml: 3.14.1
resolve-from: 5.0.0
- dev: true
/@istanbuljs/schema@0.1.3:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
- dev: true
/@jest/console@29.7.0:
resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==}
@@ -1339,7 +1304,6 @@ packages:
jest-message-util: 29.7.0
jest-util: 29.7.0
slash: 3.0.0
- dev: true
/@jest/core@29.7.0:
resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==}
@@ -1382,7 +1346,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
- dev: true
/@jest/environment@29.7.0:
resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
@@ -1392,14 +1355,12 @@ packages:
'@jest/types': 29.6.3
'@types/node': 20.12.7
jest-mock: 29.7.0
- dev: true
/@jest/expect-utils@29.7.0:
resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
jest-get-type: 29.6.3
- dev: true
/@jest/expect@29.7.0:
resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==}
@@ -1409,7 +1370,6 @@ packages:
jest-snapshot: 29.7.0
transitivePeerDependencies:
- supports-color
- dev: true
/@jest/fake-timers@29.7.0:
resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
@@ -1421,7 +1381,6 @@ packages:
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
- dev: true
/@jest/globals@29.7.0:
resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==}
@@ -1433,7 +1392,6 @@ packages:
jest-mock: 29.7.0
transitivePeerDependencies:
- supports-color
- dev: true
/@jest/reporters@29.7.0:
resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==}
@@ -1470,14 +1428,12 @@ packages:
v8-to-istanbul: 9.2.0
transitivePeerDependencies:
- supports-color
- dev: true
/@jest/schemas@29.6.3:
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
- dev: true
/@jest/source-map@29.6.3:
resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==}
@@ -1486,7 +1442,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.25
callsites: 3.1.0
graceful-fs: 4.2.11
- dev: true
/@jest/test-result@29.7.0:
resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==}
@@ -1496,7 +1451,6 @@ packages:
'@jest/types': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
collect-v8-coverage: 1.0.2
- dev: true
/@jest/test-sequencer@29.7.0:
resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==}
@@ -1506,7 +1460,6 @@ packages:
graceful-fs: 4.2.11
jest-haste-map: 29.7.0
slash: 3.0.0
- dev: true
/@jest/transform@29.7.0:
resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
@@ -1529,7 +1482,6 @@ packages:
write-file-atomic: 4.0.2
transitivePeerDependencies:
- supports-color
- dev: true
/@jest/types@29.6.3:
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
@@ -1541,7 +1493,6 @@ packages:
'@types/node': 20.12.7
'@types/yargs': 17.0.32
chalk: 4.1.2
- dev: true
/@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
@@ -1550,44 +1501,36 @@ packages:
'@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.25
- dev: true
/@jridgewell/resolve-uri@3.1.2:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/set-array@1.2.1:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.25:
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- dev: true
/@sinonjs/commons@3.0.1:
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
dependencies:
type-detect: 4.0.8
- dev: true
/@sinonjs/fake-timers@10.3.0:
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
dependencies:
'@sinonjs/commons': 3.0.1
- dev: true
/@tootallnate/once@2.0.0:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
@@ -1602,48 +1545,40 @@ packages:
'@types/babel__generator': 7.6.8
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.5
- dev: true
/@types/babel__generator@7.6.8:
resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@types/babel__template@7.4.4:
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
dependencies:
'@babel/parser': 7.24.4
'@babel/types': 7.24.0
- dev: true
/@types/babel__traverse@7.20.5:
resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
dependencies:
'@babel/types': 7.24.0
- dev: true
/@types/graceful-fs@4.1.9:
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
dependencies:
'@types/node': 20.12.7
- dev: true
/@types/istanbul-lib-coverage@2.0.6:
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
- dev: true
/@types/istanbul-lib-report@3.0.3:
resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
- dev: true
/@types/istanbul-reports@3.0.4:
resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
dependencies:
'@types/istanbul-lib-report': 3.0.3
- dev: true
/@types/jsdom@20.0.1:
resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==}
@@ -1657,11 +1592,9 @@ packages:
resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
dependencies:
undici-types: 5.26.5
- dev: true
/@types/stack-utils@2.0.3:
resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
- dev: true
/@types/tough-cookie@4.0.5:
resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
@@ -1669,13 +1602,11 @@ packages:
/@types/yargs-parser@21.0.3:
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- dev: true
/@types/yargs@17.0.32:
resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
dependencies:
'@types/yargs-parser': 21.0.3
- dev: true
/abab@2.0.6:
resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==}
@@ -1713,31 +1644,26 @@ packages:
engines: {node: '>=8'}
dependencies:
type-fest: 0.21.3
- dev: true
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- dev: true
/ansi-styles@3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
- dev: true
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
dependencies:
color-convert: 2.0.1
- dev: true
/ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- dev: true
/anymatch@3.1.3:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
@@ -1745,13 +1671,11 @@ packages:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
- dev: true
/argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
dependencies:
sprintf-js: 1.0.3
- dev: true
/asynckit@0.4.0:
resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
@@ -1773,7 +1697,6 @@ packages:
slash: 3.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/babel-plugin-istanbul@6.1.1:
resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
@@ -1786,7 +1709,6 @@ packages:
test-exclude: 6.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/babel-plugin-jest-hoist@29.6.3:
resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
@@ -1796,7 +1718,6 @@ packages:
'@babel/types': 7.24.0
'@types/babel__core': 7.20.5
'@types/babel__traverse': 7.20.5
- dev: true
/babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.4):
resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==}
@@ -1852,7 +1773,6 @@ packages:
'@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.4)
'@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.4)
'@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.4)
- dev: true
/babel-preset-jest@29.6.3(@babel/core@7.24.4):
resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
@@ -1863,25 +1783,21 @@ packages:
'@babel/core': 7.24.4
babel-plugin-jest-hoist: 29.6.3
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.4)
- dev: true
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- dev: true
/brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- dev: true
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
- dev: true
/browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
@@ -1892,36 +1808,29 @@ packages:
electron-to-chromium: 1.4.745
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
- dev: true
/bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
dependencies:
node-int64: 0.4.0
- dev: true
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- dev: true
/callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- dev: true
/camelcase@5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
- dev: true
/camelcase@6.3.0:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
- dev: true
/caniuse-lite@1.0.30001612:
resolution: {integrity: sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g==}
- dev: true
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -1930,7 +1839,6 @@ packages:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- dev: true
/chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1938,21 +1846,17 @@ packages:
dependencies:
ansi-styles: 4.3.0
supports-color: 7.2.0
- dev: true
/char-regex@1.0.2:
resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
engines: {node: '>=10'}
- dev: true
/ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
- dev: true
/cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
- dev: true
/cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
@@ -1961,37 +1865,30 @@ packages:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
- dev: true
/co@4.6.0:
resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=}
engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
- dev: true
/collect-v8-coverage@1.0.2:
resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==}
- dev: true
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
- dev: true
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
dependencies:
color-name: 1.1.4
- dev: true
/color-name@1.1.3:
resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
- dev: true
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- dev: true
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
@@ -2002,11 +1899,9 @@ packages:
/concat-map@0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
- dev: true
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- dev: true
/core-js-compat@3.37.0:
resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==}
@@ -2031,7 +1926,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
- dev: true
/cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
@@ -2040,7 +1934,6 @@ packages:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
- dev: true
/cssom@0.3.8:
resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==}
@@ -2076,7 +1969,6 @@ packages:
optional: true
dependencies:
ms: 2.1.2
- dev: true
/decimal.js@10.4.3:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
@@ -2089,12 +1981,10 @@ packages:
peerDependenciesMeta:
babel-plugin-macros:
optional: true
- dev: true
/deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- dev: true
/delayed-stream@1.0.0:
resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
@@ -2104,12 +1994,10 @@ packages:
/detect-newline@3.1.0:
resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
engines: {node: '>=8'}
- dev: true
/diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
/domexception@4.0.0:
resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==}
@@ -2120,16 +2008,13 @@ packages:
/electron-to-chromium@1.4.745:
resolution: {integrity: sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==}
- dev: true
/emittery@0.13.1:
resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
engines: {node: '>=12'}
- dev: true
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
- dev: true
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
@@ -2140,22 +2025,18 @@ packages:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
is-arrayish: 0.2.1
- dev: true
/escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
- dev: true
/escape-string-regexp@1.0.5:
resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
engines: {node: '>=0.8.0'}
- dev: true
/escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
engines: {node: '>=8'}
- dev: true
/escodegen@2.1.0:
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
@@ -2173,7 +2054,6 @@ packages:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
@@ -2198,12 +2078,10 @@ packages:
onetime: 5.1.2
signal-exit: 3.0.7
strip-final-newline: 2.0.0
- dev: true
/exit@0.1.2:
resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=}
engines: {node: '>= 0.8.0'}
- dev: true
/expect@29.7.0:
resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==}
@@ -2214,24 +2092,20 @@ packages:
jest-matcher-utils: 29.7.0
jest-message-util: 29.7.0
jest-util: 29.7.0
- dev: true
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- dev: true
/fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
dependencies:
bser: 2.1.1
- dev: true
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
- dev: true
/find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
@@ -2239,7 +2113,6 @@ packages:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
- dev: true
/form-data@4.0.0:
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
@@ -2252,39 +2125,32 @@ packages:
/fs.realpath@1.0.0:
resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
- dev: true
/fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
- dev: true
optional: true
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- dev: true
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- dev: true
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- dev: true
/get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
- dev: true
/get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- dev: true
/glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@@ -2295,33 +2161,27 @@ packages:
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
- dev: true
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- dev: true
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- dev: true
/has-flag@3.0.0:
resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
engines: {node: '>=4'}
- dev: true
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- dev: true
/hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
- dev: true
/html-encoding-sniffer@3.0.0:
resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==}
@@ -2332,7 +2192,6 @@ packages:
/html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- dev: true
/http-proxy-agent@5.0.0:
resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
@@ -2358,7 +2217,6 @@ packages:
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
- dev: true
/iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
@@ -2374,48 +2232,39 @@ packages:
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
- dev: true
/imurmurhash@0.1.4:
resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
engines: {node: '>=0.8.19'}
- dev: true
/inflight@1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
once: 1.4.0
wrappy: 1.0.2
- dev: true
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- dev: true
/is-arrayish@0.2.1:
resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
- dev: true
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
hasown: 2.0.2
- dev: true
/is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- dev: true
/is-generator-fn@2.1.0:
resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
engines: {node: '>=6'}
- dev: true
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- dev: true
/is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -2424,16 +2273,13 @@ packages:
/is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
- dev: true
/isexe@2.0.0:
resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
- dev: true
/istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
- dev: true
/istanbul-lib-instrument@5.2.1:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
@@ -2446,7 +2292,6 @@ packages:
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- dev: true
/istanbul-lib-instrument@6.0.2:
resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==}
@@ -2459,7 +2304,6 @@ packages:
semver: 7.6.0
transitivePeerDependencies:
- supports-color
- dev: true
/istanbul-lib-report@3.0.1:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
@@ -2468,7 +2312,6 @@ packages:
istanbul-lib-coverage: 3.2.2
make-dir: 4.0.0
supports-color: 7.2.0
- dev: true
/istanbul-lib-source-maps@4.0.1:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
@@ -2479,7 +2322,6 @@ packages:
source-map: 0.6.1
transitivePeerDependencies:
- supports-color
- dev: true
/istanbul-reports@3.1.7:
resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
@@ -2487,7 +2329,6 @@ packages:
dependencies:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
- dev: true
/jest-changed-files@29.7.0:
resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==}
@@ -2496,7 +2337,6 @@ packages:
execa: 5.1.1
jest-util: 29.7.0
p-limit: 3.1.0
- dev: true
/jest-circus@29.7.0:
resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==}
@@ -2525,7 +2365,6 @@ packages:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- dev: true
/jest-cli@29.7.0:
resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
@@ -2553,7 +2392,6 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
- dev: true
/jest-config@29.7.0(@types/node@20.12.7):
resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
@@ -2593,7 +2431,6 @@ packages:
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- dev: true
/jest-diff@29.7.0:
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
@@ -2603,14 +2440,12 @@ packages:
diff-sequences: 29.6.3
jest-get-type: 29.6.3
pretty-format: 29.7.0
- dev: true
/jest-docblock@29.7.0:
resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
detect-newline: 3.1.0
- dev: true
/jest-each@29.7.0:
resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==}
@@ -2621,7 +2456,6 @@ packages:
jest-get-type: 29.6.3
jest-util: 29.7.0
pretty-format: 29.7.0
- dev: true
/jest-environment-jsdom@29.7.0:
resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==}
@@ -2656,12 +2490,10 @@ packages:
'@types/node': 20.12.7
jest-mock: 29.7.0
jest-util: 29.7.0
- dev: true
/jest-get-type@29.6.3:
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
/jest-haste-map@29.7.0:
resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
@@ -2680,7 +2512,6 @@ packages:
walker: 1.0.8
optionalDependencies:
fsevents: 2.3.3
- dev: true
/jest-leak-detector@29.7.0:
resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==}
@@ -2688,7 +2519,6 @@ packages:
dependencies:
jest-get-type: 29.6.3
pretty-format: 29.7.0
- dev: true
/jest-matcher-utils@29.7.0:
resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==}
@@ -2698,7 +2528,6 @@ packages:
jest-diff: 29.7.0
jest-get-type: 29.6.3
pretty-format: 29.7.0
- dev: true
/jest-message-util@29.7.0:
resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
@@ -2713,7 +2542,6 @@ packages:
pretty-format: 29.7.0
slash: 3.0.0
stack-utils: 2.0.6
- dev: true
/jest-mock@29.7.0:
resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
@@ -2722,7 +2550,6 @@ packages:
'@jest/types': 29.6.3
'@types/node': 20.12.7
jest-util: 29.7.0
- dev: true
/jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
@@ -2734,12 +2561,22 @@ packages:
optional: true
dependencies:
jest-resolve: 29.7.0
- dev: true
+
+ /jest-react@0.14.2(jest@29.7.0)(react-test-renderer@18.3.1)(react@0.1.0):
+ resolution: {integrity: sha512-ZyGPtm+ZmIsVaMVQwMNm23w2E18zuVLOv6ZpzLaWCKC5goxFPxZ0IjB1PrehtG/rd5oNm4kuzuc1U3qjyWQLbQ==}
+ peerDependencies:
+ jest: ^23.0.1 || ^24.0.0 || ^25.1.0
+ react: ^18.3.1
+ react-test-renderer: ^18.3.1
+ dependencies:
+ jest: 29.7.0
+ react: file:dist/react
+ react-test-renderer: 18.3.1(react@0.1.0)
+ dev: false
/jest-regex-util@29.6.3:
resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
/jest-resolve-dependencies@29.7.0:
resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==}
@@ -2749,7 +2586,6 @@ packages:
jest-snapshot: 29.7.0
transitivePeerDependencies:
- supports-color
- dev: true
/jest-resolve@29.7.0:
resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==}
@@ -2764,7 +2600,6 @@ packages:
resolve: 1.22.8
resolve.exports: 2.0.2
slash: 3.0.0
- dev: true
/jest-runner@29.7.0:
resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==}
@@ -2793,7 +2628,6 @@ packages:
source-map-support: 0.5.13
transitivePeerDependencies:
- supports-color
- dev: true
/jest-runtime@29.7.0:
resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==}
@@ -2823,7 +2657,6 @@ packages:
strip-bom: 4.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/jest-snapshot@29.7.0:
resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==}
@@ -2851,7 +2684,6 @@ packages:
semver: 7.6.0
transitivePeerDependencies:
- supports-color
- dev: true
/jest-util@29.7.0:
resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
@@ -2863,7 +2695,6 @@ packages:
ci-info: 3.9.0
graceful-fs: 4.2.11
picomatch: 2.3.1
- dev: true
/jest-validate@29.7.0:
resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
@@ -2875,7 +2706,6 @@ packages:
jest-get-type: 29.6.3
leven: 3.1.0
pretty-format: 29.7.0
- dev: true
/jest-watcher@29.7.0:
resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==}
@@ -2889,7 +2719,6 @@ packages:
emittery: 0.13.1
jest-util: 29.7.0
string-length: 4.0.2
- dev: true
/jest-worker@29.7.0:
resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
@@ -2899,7 +2728,6 @@ packages:
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
- dev: true
/jest@29.7.0:
resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
@@ -2920,11 +2748,9 @@ packages:
- babel-plugin-macros
- supports-color
- ts-node
- dev: true
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- dev: true
/js-yaml@3.14.1:
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
@@ -2932,7 +2758,6 @@ packages:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
- dev: true
/jsdom@20.0.3:
resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==}
@@ -2984,72 +2809,67 @@ packages:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
- dev: true
/kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
- dev: true
/leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
- dev: true
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- dev: true
/locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
dependencies:
p-locate: 4.1.0
- dev: true
/lodash.debounce@4.0.8:
resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
dev: true
+ /loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+ dependencies:
+ js-tokens: 4.0.0
+ dev: false
+
/lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
yallist: 3.1.1
- dev: true
/lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
dependencies:
yallist: 4.0.0
- dev: true
/make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
dependencies:
semver: 7.6.0
- dev: true
/makeerror@1.0.12:
resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
dependencies:
tmpl: 1.0.5
- dev: true
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: true
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
@@ -3057,7 +2877,6 @@ packages:
dependencies:
braces: 3.0.2
picomatch: 2.3.1
- dev: true
/mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
@@ -3074,84 +2893,75 @@ packages:
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
- dev: true
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
- dev: true
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
- dev: true
/natural-compare@1.4.0:
resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
- dev: true
/node-int64@0.4.0:
resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=}
- dev: true
/node-releases@2.0.14:
resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
- dev: true
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
- dev: true
/npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
dependencies:
path-key: 3.1.1
- dev: true
/nwsapi@2.2.9:
resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==}
dev: true
+ /object-assign@4.1.1:
+ resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/once@1.4.0:
resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
dependencies:
wrappy: 1.0.2
- dev: true
/onetime@5.1.2:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
dependencies:
mimic-fn: 2.1.0
- dev: true
/p-limit@2.3.0:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
dependencies:
p-try: 2.2.0
- dev: true
/p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
dependencies:
yocto-queue: 0.1.0
- dev: true
/p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
dependencies:
p-limit: 2.3.0
- dev: true
/p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
- dev: true
/parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
@@ -3161,7 +2971,6 @@ packages:
error-ex: 1.3.2
json-parse-even-better-errors: 2.3.1
lines-and-columns: 1.2.4
- dev: true
/parse5@7.1.2:
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
@@ -3172,42 +2981,34 @@ packages:
/path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
- dev: true
/path-is-absolute@1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
- dev: true
/path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- dev: true
/path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- dev: true
/picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
- dev: true
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- dev: true
/pirates@4.0.6:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
- dev: true
/pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
dependencies:
find-up: 4.1.0
- dev: true
/pretty-format@29.7.0:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
@@ -3216,7 +3017,6 @@ packages:
'@jest/schemas': 29.6.3
ansi-styles: 5.2.0
react-is: 18.2.0
- dev: true
/prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
@@ -3224,7 +3024,6 @@ packages:
dependencies:
kleur: 3.0.3
sisteransi: 1.0.5
- dev: true
/psl@1.9.0:
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
@@ -3237,7 +3036,6 @@ packages:
/pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
- dev: true
/querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -3245,7 +3043,31 @@ packages:
/react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
- dev: true
+
+ /react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+ dev: false
+
+ /react-shallow-renderer@16.15.0(react@0.1.0):
+ resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==}
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ object-assign: 4.1.1
+ react: file:dist/react
+ react-is: 18.3.1
+ dev: false
+
+ /react-test-renderer@18.3.1(react@0.1.0):
+ resolution: {integrity: sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==}
+ peerDependencies:
+ react: ^18.3.1
+ dependencies:
+ react: file:dist/react
+ react-is: 18.3.1
+ react-shallow-renderer: 16.15.0(react@0.1.0)
+ scheduler: 0.23.2
+ dev: false
/regenerate-unicode-properties@10.1.1:
resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
@@ -3290,7 +3112,6 @@ packages:
/require-directory@2.1.1:
resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
engines: {node: '>=0.10.0'}
- dev: true
/requires-port@1.0.0:
resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=}
@@ -3301,17 +3122,14 @@ packages:
engines: {node: '>=8'}
dependencies:
resolve-from: 5.0.0
- dev: true
/resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
- dev: true
/resolve.exports@2.0.2:
resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==}
engines: {node: '>=10'}
- dev: true
/resolve@1.22.8:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
@@ -3320,7 +3138,6 @@ packages:
is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- dev: true
/safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -3333,10 +3150,15 @@ packages:
xmlchars: 2.2.0
dev: true
+ /scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ dependencies:
+ loose-envify: 1.4.0
+ dev: false
+
/semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- dev: true
/semver@7.6.0:
resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
@@ -3344,55 +3166,45 @@ packages:
hasBin: true
dependencies:
lru-cache: 6.0.0
- dev: true
/shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
dependencies:
shebang-regex: 3.0.0
- dev: true
/shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- dev: true
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: true
/sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
- dev: true
/slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
- dev: true
/source-map-support@0.5.13:
resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
- dev: true
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- dev: true
/sprintf-js@1.0.3:
resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=}
- dev: true
/stack-utils@2.0.6:
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
engines: {node: '>=10'}
dependencies:
escape-string-regexp: 2.0.0
- dev: true
/string-length@4.0.2:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
@@ -3400,7 +3212,6 @@ packages:
dependencies:
char-regex: 1.0.2
strip-ansi: 6.0.1
- dev: true
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -3409,55 +3220,46 @@ packages:
emoji-regex: 8.0.0
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
- dev: true
/strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
dependencies:
ansi-regex: 5.0.1
- dev: true
/strip-bom@4.0.0:
resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
engines: {node: '>=8'}
- dev: true
/strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
- dev: true
/strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- dev: true
/supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
- dev: true
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
dependencies:
has-flag: 4.0.0
- dev: true
/supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
dependencies:
has-flag: 4.0.0
- dev: true
/supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
- dev: true
/symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -3470,23 +3272,19 @@ packages:
'@istanbuljs/schema': 0.1.3
glob: 7.2.3
minimatch: 3.1.2
- dev: true
/tmpl@1.0.5:
resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- dev: true
/to-fast-properties@2.0.0:
resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
engines: {node: '>=4'}
- dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
- dev: true
/tough-cookie@4.1.3:
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
@@ -3508,16 +3306,13 @@ packages:
/type-detect@4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
- dev: true
/type-fest@0.21.3:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
- dev: true
/undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
- dev: true
/unicode-canonical-property-names-ecmascript@2.0.0:
resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
@@ -3556,7 +3351,6 @@ packages:
browserslist: 4.23.0
escalade: 3.1.2
picocolors: 1.0.0
- dev: true
/url-parse@1.5.10:
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
@@ -3572,7 +3366,6 @@ packages:
'@jridgewell/trace-mapping': 0.3.25
'@types/istanbul-lib-coverage': 2.0.6
convert-source-map: 2.0.0
- dev: true
/w3c-xmlserializer@4.0.0:
resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==}
@@ -3585,7 +3378,6 @@ packages:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
dependencies:
makeerror: 1.0.12
- dev: true
/webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
@@ -3618,7 +3410,6 @@ packages:
hasBin: true
dependencies:
isexe: 2.0.0
- dev: true
/wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
@@ -3627,11 +3418,9 @@ packages:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- dev: true
/wrappy@1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
- dev: true
/write-file-atomic@4.0.2:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
@@ -3639,7 +3428,6 @@ packages:
dependencies:
imurmurhash: 0.1.4
signal-exit: 3.0.7
- dev: true
/ws@8.16.0:
resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
@@ -3666,20 +3454,16 @@ packages:
/y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- dev: true
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- dev: true
/yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
- dev: true
/yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
@@ -3692,17 +3476,14 @@ packages:
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
- dev: true
/yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- dev: true
file:dist/react:
resolution: {directory: dist/react, type: directory}
name: react
- dev: true
file:dist/react-dom:
resolution: {directory: dist/react-dom, type: directory}
diff --git a/scripts/build.js b/scripts/build.js
index 44a5b7b..5d231d0 100644
--- a/scripts/build.js
+++ b/scripts/build.js
@@ -12,11 +12,20 @@ execSync(
isTest ? '--target nodejs' : ''
}`
)
+
execSync(
`wasm-pack build packages/react --out-dir ${cwd}/dist/react --out-name index ${
isTest ? '--target nodejs' : ''
}`
)
+
+if (isTest) {
+ execSync(
+ `wasm-pack build packages/react-noop --out-dir ${cwd}/dist/react-noop --out-name index ${
+ isTest ? '--target nodejs' : ''
+ }`
+ )
+}
execSync(
`wasm-pack build packages/react-dom --out-dir ${cwd}/dist/react-dom --out-name index ${
isTest ? '--target nodejs' : ''
@@ -36,6 +45,20 @@ packageJson.files.push(
)
fs.writeFileSync(packageJsonFilename, JSON.stringify(packageJson))
+if (isTest) {
+ // modify react-noop/index_bg.js
+ const reactNoopIndexFilename = isTest
+ ? `${cwd}/dist/react-noop/index.js`
+ : `${cwd}/dist/react-noop/index_bg.js`
+ const reactNoopIndexBgData = fs.readFileSync(reactNoopIndexFilename)
+ fs.writeFileSync(
+ reactNoopIndexFilename,
+ (isTest
+ ? 'const {updateDispatcher} = require("react");\n'
+ : 'import {updateDispatcher} from "react";\n') + reactNoopIndexBgData
+ )
+}
+
// modify react-dom/index_bg.js
const reactDomIndexFilename = isTest
? `${cwd}/dist/react-dom/index.js`
diff --git a/setup-jest.js b/setup-jest.js
deleted file mode 100644
index 09084cc..0000000
--- a/setup-jest.js
+++ /dev/null
@@ -1 +0,0 @@
-Object.setPrototypeOf(window, Window.prototype)