diff --git a/.reassure/current.perf b/.reassure/current.perf
new file mode 100644
index 00000000000..7604caafb8c
--- /dev/null
+++ b/.reassure/current.perf
@@ -0,0 +1,2 @@
+{"metadata":{"creationDate":"2024-07-04T00:10:12.126Z","branch":"main","commitHash":"8db254ad21c577e266eeebeb10bb3f64dae02947"}}
+{"name":"RN CLI - WalletActions 10 runs","type":"render","runs":10,"meanDuration":3.5,"stdevDuration":0.5270462766947299,"durations":[3,4,4,3,3,4,3,4,4,3],"warmupDurations":[102],"meanCount":1,"stdevCount":0,"counts":[1,1,1,1,1,1,1,1,1,1],"issues":{"initialUpdateCount":0,"redundantUpdates":[]}}
diff --git a/app/components/Views/Wallet/ignore.tsx b/app/components/Views/Wallet/ignore.tsx
new file mode 100644
index 00000000000..f572f125d05
--- /dev/null
+++ b/app/components/Views/Wallet/ignore.tsx
@@ -0,0 +1,117 @@
+/* import React from 'react';
+import { measureRenders } from 'reassure';
+import Wallet from './'; // Adjust the import path if necessary
+import { Provider } from 'react-redux';
+import configureMockStore from 'redux-mock-store';
+import { mockInitialState } from './index.test';
+import { createMockAccountsControllerState } from '../../../util/test/accountsControllerTestUtils';
+
+import Engine from '../../../core/Engine';
+const mockEngine = Engine;
+const MOCK_ADDRESS = '0xc4955c0d639d99699bfd7ec54d9fafee40e4d272';
+
+const MOCK_ACCOUNTS_CONTROLLER_STATE = createMockAccountsControllerState([
+ MOCK_ADDRESS,
+]);
+jest.mock('../../../core/Engine', () => ({
+ init: () => mockEngine.init({}),
+ getTotalFiatAccountBalance: jest.fn(),
+ context: {
+ PreferencesController: {
+ selectedAddress: MOCK_ADDRESS,
+ identities: {
+ [MOCK_ADDRESS]: {
+ name: 'Account 1',
+ address: MOCK_ADDRESS,
+ },
+ },
+ },
+ NftController: {
+ allNfts: {
+ [MOCK_ADDRESS]: {
+ [MOCK_ADDRESS]: [],
+ },
+ },
+ allNftContracts: {
+ [MOCK_ADDRESS]: {
+ [MOCK_ADDRESS]: [],
+ },
+ },
+ },
+ TokenRatesController: {
+ poll: jest.fn(),
+ },
+ TokenDetectionController: {
+ detectTokens: jest.fn(),
+ },
+ NftDetectionController: {
+ detectNfts: jest.fn(),
+ },
+ AccountTrackerController: {
+ refresh: jest.fn(),
+ },
+ KeyringController: {
+ state: {
+ keyrings: [
+ {
+ accounts: ['0xC4955C0d639D99699Bfd7Ec54d9FaFEe40e4D272'],
+ },
+ ],
+ },
+ },
+ AccountsController: {
+ ...MOCK_ACCOUNTS_CONTROLLER_STATE,
+ },
+ },
+}));
+
+jest.mock('react-redux', () => ({
+ ...jest.requireActual('react-redux'),
+ useSelector: jest
+ .fn()
+ .mockImplementation((callback) => callback(mockInitialState)),
+}));
+
+jest.mock('@react-navigation/native', () => {
+ const actualNav = jest.requireActual('@react-navigation/native');
+ return {
+ ...actualNav,
+ useNavigation: () => ({
+ navigate: jest.fn(),
+ setOptions: jest.fn(),
+ goBack: jest.fn(),
+ reset: jest.fn(),
+ dangerouslyGetParent: () => ({
+ pop: jest.fn(),
+ }),
+ }),
+ };
+});
+
+jest.mock('react-native-scrollable-tab-view', () => {
+ const ScrollableTabViewMock = jest
+ .fn()
+ .mockImplementation(() => ScrollableTabViewMock);
+ // TODO - Clean up mock.
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ // @ts-ignore
+ ScrollableTabViewMock.defaultProps = {
+ onChangeTab: jest.fn(),
+ renderTabBar: jest.fn(),
+ };
+ return ScrollableTabViewMock;
+});
+
+// Mock store setup
+const mockStore = configureMockStore();
+const store = mockStore(mockInitialState);
+
+test('Simple test', async () => {
+ const test = await measureRenders(
+
+
+ ,
+ );
+ console.log('ENTER test', test);
+});
+ */
diff --git a/app/components/Views/Wallet/index.test.tsx b/app/components/Views/Wallet/index.test.tsx
index ad0765d26c4..556b655853b 100644
--- a/app/components/Views/Wallet/index.test.tsx
+++ b/app/components/Views/Wallet/index.test.tsx
@@ -71,7 +71,16 @@ jest.mock('../../../core/Engine', () => ({
},
}));
-const mockInitialState = {
+// eslint-disable-next-line import/prefer-default-export
+export const mockInitialState = {
+ navigation: {
+ currentRoute: 'WalletView',
+ currentBottomNavRoute: 'Wallet',
+ },
+ legalNotices: {
+ newPrivacyPolicyToastShownDate: null,
+ newPrivacyPolicyToastClickedOrClosed: false,
+ },
networkOnboarded: {
networkOnboardedState: {
'0x1': true,
diff --git a/app/components/Views/WalletActions/WalletActions.perf-test.tsx b/app/components/Views/WalletActions/WalletActions.perf-test.tsx
new file mode 100644
index 00000000000..659e3ea8a30
--- /dev/null
+++ b/app/components/Views/WalletActions/WalletActions.perf-test.tsx
@@ -0,0 +1,132 @@
+import React from 'react';
+import { measureRenders } from 'reassure';
+import WalletActions from './WalletActions';
+import { fireEvent, screen } from '@testing-library/react-native';
+import { WalletActionsModalSelectorsIDs } from '../../../../e2e/selectors/Modals/WalletActionsModal.selectors';
+import { createMockAccountsControllerState } from '../../../util/test/accountsControllerTestUtils';
+import initialBackgroundState from '../../../util/test/initial-background-state.json';
+jest.setTimeout(600_000);
+const MOCK_ADDRESS = '0xc4955c0d639d99699bfd7ec54d9fafee40e4d272';
+
+const MOCK_ACCOUNTS_CONTROLLER_STATE = createMockAccountsControllerState([
+ MOCK_ADDRESS,
+]);
+const mockInitialState = {
+ fiatOrders: {
+ networks: [],
+ },
+ browser: {
+ tabs: [],
+ },
+ navigation: {
+ currentRoute: 'WalletView',
+ currentBottomNavRoute: 'Wallet',
+ },
+ legalNotices: {
+ newPrivacyPolicyToastShownDate: null,
+ newPrivacyPolicyToastClickedOrClosed: false,
+ },
+ networkOnboarded: {
+ networkOnboardedState: {
+ '0x1': true,
+ },
+ },
+ security: {
+ dataCollectionForMarketing: true,
+ },
+ swaps: {
+ [MOCK_ADDRESS]: { isLive: true },
+ hasOnboarded: false,
+ isLive: true,
+ },
+ wizard: {
+ step: 0,
+ },
+ settings: {
+ primaryCurrency: 'usd',
+ },
+ engine: {
+ backgroundState: {
+ ...initialBackgroundState,
+ PreferencesController: {
+ selectedAddress: MOCK_ADDRESS,
+ identities: {
+ [MOCK_ADDRESS]: {
+ name: 'Account 1',
+ address: MOCK_ADDRESS,
+ },
+ },
+ },
+ AccountsController: {
+ ...MOCK_ACCOUNTS_CONTROLLER_STATE,
+ },
+ },
+ },
+};
+
+jest.mock('react-native-safe-area-context', () => {
+ // using disting digits for mock rects to make sure they are not mixed up
+ const inset = { top: 1, right: 2, bottom: 3, left: 4 };
+ const frame = { width: 5, height: 6, x: 7, y: 8 };
+ return {
+ SafeAreaProvider: jest.fn().mockImplementation(({ children }) => children),
+ SafeAreaConsumer: jest
+ .fn()
+ .mockImplementation(({ children }) => children(inset)),
+ useSafeAreaInsets: jest.fn().mockImplementation(() => inset),
+ useSafeAreaFrame: jest.fn().mockImplementation(() => frame),
+ };
+});
+jest.mock('@react-navigation/native', () => {
+ const actualNav = jest.requireActual('@react-navigation/native');
+ return {
+ ...actualNav,
+ useNavigation: () => ({
+ navigate: jest.fn(),
+ setOptions: jest.fn(),
+ goBack: jest.fn(),
+ reset: jest.fn(),
+ dangerouslyGetParent: () => ({
+ pop: jest.fn(),
+ }),
+ }),
+ };
+});
+
+const mockDispatch = jest.fn();
+
+jest.mock('react-redux', () => ({
+ ...jest.requireActual('react-redux'),
+ useDispatch: jest.fn().mockImplementation(() => mockDispatch),
+ useSelector: jest
+ .fn()
+ .mockImplementation((callback) => callback(mockInitialState)),
+}));
+
+test('RN CLI - WalletActions 10 runs', async () => {
+ const scenario = async () => {
+ const button = screen.getByTestId(
+ WalletActionsModalSelectorsIDs.SEND_BUTTON,
+ );
+
+ /* fireEvent.press(button);
+
+ await screen.findByText('Cancel'); */
+ };
+
+ await measureRenders( /* , { scenario, runs: 1 } */);
+});
+
+/* test('RN CLI - WalletActions 50 runs', async () => {
+ const scenario = async () => {
+ const button = screen.getByTestId(
+ WalletActionsModalSelectorsIDs.SEND_BUTTON,
+ );
+
+ /* fireEvent.press(button);
+
+ await screen.findByText('Cancel');
+ };
+
+ await measureRenders(, { scenario, runs: 50 });
+}); */
diff --git a/package.json b/package.json
index 4fe7634522e..03835c591d6 100644
--- a/package.json
+++ b/package.json
@@ -472,6 +472,7 @@
"react-native-svg-asset-plugin": "^0.5.0",
"react-native-svg-transformer": "^1.0.0",
"react-test-renderer": "18.2.0",
+ "reassure": "^1.0.0",
"regenerator-runtime": "0.13.9",
"rn-nodeify": "10.3.0",
"serve-handler": "^6.1.5",
@@ -571,4 +572,4 @@
}
},
"packageManager": "yarn@1.22.22"
-}
\ No newline at end of file
+}
diff --git a/yarn.lock b/yarn.lock
index 30a497d0534..d04966a9f65 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1261,6 +1261,13 @@
dependencies:
regenerator-runtime "^0.14.0"
+"@babel/runtime@^7.24.4":
+ version "7.24.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12"
+ integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==
+ dependencies:
+ regenerator-runtime "^0.14.0"
+
"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3":
version "7.24.0"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
@@ -1300,6 +1307,48 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@callstack/reassure-cli@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@callstack/reassure-cli/-/reassure-cli-1.0.0.tgz#e7ca13c5fab18bab3121c5fd42789470deb33a03"
+ integrity sha512-Yhej/XmB1mFAwBYHYZacj98U1+9fDZqrBxsA82Elk+omnEG0zWI4/9TFKKgMzOz72hb8Y7eKLIDZx6NJyWGqKg==
+ dependencies:
+ "@callstack/reassure-compare" "1.0.0"
+ "@callstack/reassure-logger" "1.0.0"
+ chalk "4.1.2"
+ simple-git "^3.24.0"
+ yargs "^17.7.2"
+
+"@callstack/reassure-compare@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@callstack/reassure-compare/-/reassure-compare-1.0.0.tgz#4f02471934b4166db331c5abefb907ac69ab4d7c"
+ integrity sha512-kezQ24tzQjjxCKuLzob4Bz6ZhQ5nTLXAeuvwf+FV3jlZ2LSJDaURiNqq7m5NrHYWL5XhZ7zZOATtlVjFwHBfrA==
+ dependencies:
+ "@callstack/reassure-logger" "1.0.0"
+ markdown-table "^2.0.0"
+ ts-regex-builder "^1.7.1"
+ zod "^3.23.8"
+
+"@callstack/reassure-danger@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@callstack/reassure-danger/-/reassure-danger-1.0.0.tgz#ad53a2c6fee797c854e0513d7c82dadce1251a04"
+ integrity sha512-0Abokqoed4vCG9AySjENTTLqsjaIWZ1q3WGiR5C4Dyz2CYSpdlpOFkIl4iHux/egL1GDkPsh0kIV2Y/aNbfnmg==
+
+"@callstack/reassure-logger@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@callstack/reassure-logger/-/reassure-logger-1.0.0.tgz#b6c7543bbf6800ad37ad633c3455a380648010d4"
+ integrity sha512-xFZU2mIesDZWnKh1fjfQ3nffjxi+m/W9vt+EruNdJcxpe0yfxrIs3R/fN0PElpb9TRtY7dE4GpvOKwjIIAsRUA==
+ dependencies:
+ chalk "4.1.2"
+
+"@callstack/reassure-measure@1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@callstack/reassure-measure/-/reassure-measure-1.0.0.tgz#1e86212fac46a176bfe79cf9be59a8df6a70ab1f"
+ integrity sha512-OpR/s4igz2y6y9P3SdHuCG2Q2Xsb/04+bfEtFxvLwQgdf+jBqPlo6k5Gh/bd0Mqr8eKw8sd5Xm18NFhYRHr46g==
+ dependencies:
+ "@callstack/reassure-logger" "1.0.0"
+ mathjs "^12.4.2"
+ pretty-format "^29.7.0"
+
"@colors/colors@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
@@ -3434,6 +3483,18 @@
"@keystonehq/bc-ur-registry-eth" "^0.6.12"
"@ngraveio/bc-ur" "^1.1.6"
+"@kwsites/file-exists@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
+ integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
+ dependencies:
+ debug "^4.1.1"
+
+"@kwsites/promise-deferred@^1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
+ integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
+
"@lavamoat/aa@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@lavamoat/aa/-/aa-4.2.0.tgz#1262589c77386b1741fe904ebdfe97b959bc8fa4"
@@ -13031,6 +13092,14 @@ chai@^4.3.4:
pathval "^1.1.1"
type-detect "^4.0.5"
+chalk@4.1.2, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -13059,14 +13128,6 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
char-regex@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
@@ -13638,6 +13699,11 @@ compare-versions@^6.1.0:
resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a"
integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==
+complex.js@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.1.1.tgz#0675dac8e464ec431fb2ab7d30f41d889fb25c31"
+ integrity sha512-8njCHOTtFFLtegk6zQo0kkVX1rngygb/KQI6z1qZxlFI3scluC+LVTCFbrkWjBv4vvLlbQ9t88IPMC6k95VTTg==
+
compress-brotli@^1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db"
@@ -14362,7 +14428,7 @@ debug@3.1.0:
dependencies:
ms "2.0.0"
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2:
+debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@~4.3.1, debug@~4.3.2:
version "4.3.5"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
@@ -14414,6 +14480,11 @@ decamelize@^4.0.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+decimal.js@^10.4.3:
+ version "10.4.3"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
+ integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
+
decode-uri-component@^0.2.0, decode-uri-component@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
@@ -15621,6 +15692,11 @@ escape-html@^1.0.3, escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
+escape-latex@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1"
+ integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==
+
escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
@@ -17340,6 +17416,11 @@ forwarded@0.2.0:
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
+fraction.js@4.3.4:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.4.tgz#b2bac8249a610c3396106da97c5a71da75b94b1c"
+ integrity sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==
+
fresh@0.5.2, fresh@~0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
@@ -18552,6 +18633,14 @@ import-local@^3.0.2:
pkg-dir "^4.2.0"
resolve-cwd "^3.0.0"
+import-local@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
improved-yarn-audit@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/improved-yarn-audit/-/improved-yarn-audit-3.0.0.tgz#dfb09cea1a3a92c790ea2b4056431f6fb1b99bfa"
@@ -19302,6 +19391,11 @@ jake@^10.8.5:
filelist "^1.0.1"
minimatch "^3.0.4"
+javascript-natural-sort@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59"
+ integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==
+
jest-changed-files@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
@@ -21073,6 +21167,13 @@ map-stream@~0.1.0:
resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==
+markdown-table@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b"
+ integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==
+ dependencies:
+ repeat-string "^1.0.0"
+
markdown-to-jsx@^6.11.4:
version "6.11.4"
resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5"
@@ -21101,6 +21202,21 @@ material-colors@^1.2.1:
resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46"
integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==
+mathjs@^12.4.2:
+ version "12.4.3"
+ resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-12.4.3.tgz#eef86baf8ee4c2467fc8c4619107bf4a650b9954"
+ integrity sha512-oHdGPDbp7gO873xxG90RLq36IuicuKvbpr/bBG5g9c8Obm/VsKVrK9uoRZZHUodohzlnmCEqfDzbR3LH6m+aAQ==
+ dependencies:
+ "@babel/runtime" "^7.24.4"
+ complex.js "^2.1.1"
+ decimal.js "^10.4.3"
+ escape-latex "^1.2.0"
+ fraction.js "4.3.4"
+ javascript-natural-sort "^0.7.1"
+ seedrandom "^3.0.5"
+ tiny-emitter "^2.1.0"
+ typed-function "^4.1.1"
+
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -25233,6 +25349,17 @@ real-require@^0.1.0:
resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381"
integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==
+reassure@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/reassure/-/reassure-1.0.0.tgz#4f55863dfa43f0f3c5a32d274dc95c396bf30ba1"
+ integrity sha512-TmROMqr20rUZP1WVep6UY5eSAXG1Zr877Zy5Is1KLUV+zFahgSpqqhAkEY9wvzTUeG8/VMcK5mRlzoLGUPw8kw==
+ dependencies:
+ "@callstack/reassure-cli" "1.0.0"
+ "@callstack/reassure-compare" "1.0.0"
+ "@callstack/reassure-danger" "1.0.0"
+ "@callstack/reassure-measure" "1.0.0"
+ import-local "^3.1.0"
+
recast@^0.21.0:
version "0.21.5"
resolved "https://registry.yarnpkg.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495"
@@ -25440,7 +25567,7 @@ renderkid@^3.0.0:
lodash "^4.17.21"
strip-ansi "^6.0.1"
-repeat-string@^1.5.2, repeat-string@^1.6.1:
+repeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -25939,6 +26066,11 @@ seed-random@~2.2.0:
resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54"
integrity sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==
+seedrandom@^3.0.5:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7"
+ integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==
+
select@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
@@ -26276,6 +26408,15 @@ simple-get@^4.0.0, simple-get@^4.0.1:
once "^1.3.1"
simple-concat "^1.0.0"
+simple-git@^3.24.0:
+ version "3.25.0"
+ resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.25.0.tgz#3666e76d6831f0583dc380645945b97e0ac4aab6"
+ integrity sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==
+ dependencies:
+ "@kwsites/file-exists" "^1.1.1"
+ "@kwsites/promise-deferred" "^1.1.1"
+ debug "^4.3.5"
+
simple-plist@^1.1.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017"
@@ -27345,7 +27486,7 @@ timm@^1.6.1:
resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f"
integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==
-tiny-emitter@^2.0.0:
+tiny-emitter@^2.0.0, tiny-emitter@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423"
integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
@@ -27509,6 +27650,11 @@ ts-node@^10.5.0:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
+ts-regex-builder@^1.7.1:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/ts-regex-builder/-/ts-regex-builder-1.7.1.tgz#26b657b71169a577fef9f0484442f225d2b5fba3"
+ integrity sha512-FaxtsuQ9jLT+p0Uefmi8WCjRcCQ64kHyzfAD0MO2BjYXV92qpnEFgdT1TIetUj4WiucuYCEjCq+n6xGxp7DkNQ==
+
tsconfig-paths@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
@@ -27677,6 +27823,11 @@ typed-array-length@^1.0.4:
for-each "^0.3.3"
is-typed-array "^1.1.9"
+typed-function@^4.1.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-4.2.1.tgz#19aa51847aa2dea9ef5e7fb7641c060179a74426"
+ integrity sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==
+
typed-styles@^0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9"
@@ -29277,7 +29428,7 @@ yargs@17.7.1:
y18n "^5.0.5"
yargs-parser "^21.1.1"
-yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.5.1:
+yargs@17.7.2, yargs@^17.0.0, yargs@^17.3.1, yargs@^17.5.1, yargs@^17.7.2:
version "17.7.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
@@ -29432,7 +29583,7 @@ zip-stream@^4.1.0:
compress-commons "^4.1.0"
readable-stream "^3.6.0"
-zod@^3.21.4, zod@^3.22.4:
+zod@^3.21.4, zod@^3.22.4, zod@^3.23.8:
version "3.23.8"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==