diff --git a/packages/libraries/core/jest.setup.js b/packages/libraries/core/jest.setup.js deleted file mode 100644 index f7c454f890..0000000000 --- a/packages/libraries/core/jest.setup.js +++ /dev/null @@ -1,6 +0,0 @@ -// @ts-check - -const enzyme = require('enzyme'); -const Adapter = require('@wojtekmaj/enzyme-adapter-react-17'); - -enzyme.configure({ adapter: new Adapter() }); diff --git a/packages/utils/test-tools/README.md b/packages/utils/test-tools/README.md index 878c3fc69d..5b9f9416a5 100644 --- a/packages/utils/test-tools/README.md +++ b/packages/utils/test-tools/README.md @@ -1,3 +1,3 @@ # Test-tools -This is a dev environment only private package designed to aid in testing components via jest and enzyme +This is a dev environment only private package designed to aid in testing components via jest diff --git a/packages/utils/test-tools/package.json b/packages/utils/test-tools/package.json index 354d741881..e8122c85b9 100644 --- a/packages/utils/test-tools/package.json +++ b/packages/utils/test-tools/package.json @@ -1,7 +1,7 @@ { "name": "@fluentui-react-native/test-tools", "version": "0.1.1", - "description": "Tools and mocks for testing components using jest and enzyme", + "description": "Tools and mocks for testing components using jest", "main": "lib-commonjs/index.js", "module": "src/index.ts", "typings": "lib/index.d.ts", @@ -12,7 +12,6 @@ "clean": "fluentui-scripts clean", "depcheck": "fluentui-scripts depcheck", "lint": "fluentui-scripts eslint", - "test": "fluentui-scripts jest", "update-snapshots": "fluentui-scripts jest -u", "prettier": "fluentui-scripts prettier", "prettier-fix": "fluentui-scripts prettier --fix true" diff --git a/packages/utils/test-tools/src/baseTests.tsx b/packages/utils/test-tools/src/baseTests.tsx new file mode 100644 index 0000000000..32d6744321 --- /dev/null +++ b/packages/utils/test-tools/src/baseTests.tsx @@ -0,0 +1,43 @@ +import * as React from 'react'; + +import * as renderer from 'react-test-renderer'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function validateHookValueNotChanged[]>( + testDescription: string, + useHook: () => TValues, + useHookAgain?: () => TValues, +) { + it(testDescription || 'returns the same value(s) each time', () => { + let latestValues: TValues | undefined; + let callCount = 0; + + const TestComponent: React.FunctionComponent = () => { + callCount++; + // eslint-disable-next-line react-hooks/rules-of-hooks + latestValues = callCount === 1 ? useHook() : (useHookAgain || useHook)(); + return ; + }; + + const wrapper = renderer.create(); + expect(callCount).toBe(1); + const firstValues = latestValues; + expect(firstValues).toBeDefined(); + latestValues = undefined; + + wrapper.update(); + expect(callCount).toBe(2); + expect(latestValues).toBeDefined(); + expect(latestValues.length).toEqual(firstValues!.length); + + for (let i = 0; i < latestValues!.length; i++) { + try { + expect(latestValues![i]).toBe(firstValues![i]); + } catch (err) { + // Make a more informative error message + const valueText = latestValues![i].toString(); + expect('').toBe(`Identity of value at index ${i} has changed. This might help identify it:\n${valueText}`); + } + } + }); +} diff --git a/packages/utils/test-tools/src/enzymeTests.test.tsx b/packages/utils/test-tools/src/enzymeTests.test.tsx deleted file mode 100644 index 7a903ccc63..0000000000 --- a/packages/utils/test-tools/src/enzymeTests.test.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import * as React from 'react'; - -import { checkRenderConsistency, checkReRender } from './enzymeTests'; - -const fixedStyle = { - backgroundColor: 'blue', - color: 'red', -}; - -const subStyle = { - color: 'blue', -}; - -const Simple = (props) => { - const { children, ...rest } = props; - return ( - - {children} - - ); -}; - -const MultiLevel = (props) => { - const { children, style, color, ...rest } = props; - return ( -
- {children} - {color} -
- ); -}; - -const MultiLevelBroken = (props) => { - const { children, style, color, ...rest } = props; - return ( -
- {children} - {color} -
- ); -}; - -let renderCount = 0; - -const SimpleWithHook = (props) => { - const { children, ...rest } = props; - const onKeyUp = React.useMemo(() => { - console.log('something'); - }, []); - renderCount++; - return ( - - {children} - - ); -}; - -describe('enzyme component test validation', () => { - it('renders the simple control twice', () => { - checkRenderConsistency(() => Hello); - }); - - it('recurses into multi-level control correctly', () => { - checkRenderConsistency(() => World, 2); - }); - - it('handles memoed functions', () => { - const initialCount = renderCount; - checkReRender(() => ReRender); - expect(renderCount).toEqual(initialCount + 2); - }); - - it('catches a deep error for a broken multi-level component', () => { - try { - checkRenderConsistency(() => Broken, 2); - expect('This should have detected an error').toBeFalse(); - } catch (e) { - expect(e).toBeInstanceOf(Error); - expect((e as Error).message).toContain('Shallow compare'); - } - }); -}); diff --git a/packages/utils/test-tools/src/enzymeTests.tsx b/packages/utils/test-tools/src/enzymeTests.tsx deleted file mode 100644 index b26e7c0cf0..0000000000 --- a/packages/utils/test-tools/src/enzymeTests.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import * as React from 'react'; - -import type { ReactWrapper } from 'enzyme'; -import { mount } from 'enzyme'; - -export type JSXProducer = () => JSX.Element; - -export interface PropTreeFilter { - children?: boolean; - functions?: boolean; -} - -export type PropTreeSnapshot = { - name: string; - // eslint-disable-next-line @typescript-eslint/ban-types - props: object; - children: PropTreeSnapshot[]; -}; - -export function snapshotPropTree(node: ReactWrapper, recurse: number, filter: PropTreeFilter = {}): PropTreeSnapshot { - // get a potentially filtered copy of the props - const nodeProps = node.props(); - const props = {}; - Object.keys(nodeProps).forEach((key) => { - if (!(filter.children && key === 'children') && !(filter.functions && typeof nodeProps[key] === 'function')) { - props[key] = nodeProps[key]; - } - }); - - // then build the base result - const result: PropTreeSnapshot = { name: node.name(), props, children: [] }; - - // if children are requested add children - if (recurse > 0) { - node.children().forEach((child) => { - result.children.push(snapshotPropTree(child, recurse - 1, filter)); - }); - } - return result; -} - -export function compareTrees(a: PropTreeSnapshot, b: PropTreeSnapshot, paths: string[]): void { - const newPaths = paths.concat(a.name); - if (a.name !== b.name) { - throw new Error(`Shallow compare found two nodes with different names at ${paths.join(': ')}`); - } - if (a.children.length !== b.children.length) { - throw new Error(`Shallow compare found two nodes at ${paths.join(': ')} with different children counts`); - } - if (Object.keys(a.props).length !== Object.keys(b.props).length) { - throw new Error(`Shallow compare found props at ${paths.join(': ')} with different property counts`); - } - Object.keys(a.props).forEach((key) => { - if (a.props[key] !== b.props[key]) { - // react-native's Pressable creates a new accessibilityState and accessibilityValue value on every render - // to avoid having to disable a bunch of tests adding this exception for now - if (key === 'accessibilityState') { - if (a.props[key].accessibilityState || b.props[key].accessibilityState) { - compareTrees(a.props[key].accessibilityState, b.props[key].accessibilityState, paths.concat('accessibilityState')); - } - } else if (key === 'accessibilityValue') { - if (a.props[key].accessibilityValue || b.props[key].accessibilityValue) { - compareTrees(a.props[key].accessibilityValue, b.props[key].accessibilityValue, paths.concat('accessibilityValue')); - } - } else { - throw new Error(`Shallow compare failed for ${paths.join(': ')}, key: ${key}`); - } - } - }); - for (let i = 0; i < a.children.length; i++) { - compareTrees(a.children[i], b.children[i], newPaths); - } -} - -export function checkRenderConsistency(render: JSXProducer, depth: number = 1) { - const filter = { children: true, functions: true }; - const t1 = snapshotPropTree(mount(render()), depth, filter); - const t2 = snapshotPropTree(mount(render()), depth, filter); - compareTrees(t1, t2, []); -} - -export function checkReRender(render: JSXProducer, depth: number = 1) { - const filter = { children: true }; - const w1 = mount(render()); - const t1 = snapshotPropTree(w1, depth, filter); - w1.setProps({}); - const w2 = w1.update(); - const t2 = snapshotPropTree(w2, depth, filter); - compareTrees(t1, t2, []); -} - -/** - * Validate that value(s) returned by a hook do not change in identity. - * @param testDescription - Custom test description - * @param useHook - Function to invoke the hook and return an array of return values which - * should not change - * @param useHookAgain - If you want to verify that the return value doesn't change when hook - * parameters change, you can pass this second callback which calls the hook differently. - */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function validateHookValueNotChanged[]>( - testDescription: string, - useHook: () => TValues, - useHookAgain?: () => TValues, -) { - it(testDescription || 'returns the same value(s) each time', () => { - let latestValues: TValues | undefined; - let callCount = 0; - - const TestComponent: React.FunctionComponent = () => { - callCount++; - // eslint-disable-next-line react-hooks/rules-of-hooks - latestValues = callCount === 1 ? useHook() : (useHookAgain || useHook)(); - return ; - }; - - const wrapper = mount(); - expect(callCount).toBe(1); - const firstValues = latestValues; - expect(firstValues).toBeDefined(); - latestValues = undefined; - - wrapper.setProps({}); - expect(callCount).toBe(2); - expect(latestValues).toBeDefined(); - expect(latestValues.length).toEqual(firstValues!.length); - - for (let i = 0; i < latestValues!.length; i++) { - try { - expect(latestValues![i]).toBe(firstValues![i]); - } catch (err) { - // Make a more informative error message - const valueText = latestValues![i].toString(); - expect('').toBe(`Identity of value at index ${i} has changed. This might help identify it:\n${valueText}`); - } - } - }); -} diff --git a/packages/utils/test-tools/src/index.ts b/packages/utils/test-tools/src/index.ts index 17fa129e93..8d3a7aca25 100644 --- a/packages/utils/test-tools/src/index.ts +++ b/packages/utils/test-tools/src/index.ts @@ -1,3 +1,2 @@ -export { checkReRender, checkRenderConsistency, compareTrees, snapshotPropTree, validateHookValueNotChanged } from './enzymeTests'; -export type { JSXProducer, PropTreeFilter, PropTreeSnapshot } from './enzymeTests'; +export { validateHookValueNotChanged } from './baseTests'; export { mockTheme } from './mockTheme'; diff --git a/scripts/package.json b/scripts/package.json index 758bab83e6..c23266cae1 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -28,17 +28,13 @@ "@react-native-community/cli-platform-ios": "^12.1.1", "@react-native/metro-babel-transformer": "^0.73.0", "@rnx-kit/jest-preset": "^0.1.14", - "@types/enzyme": "^3.10.5", "@types/es6-collections": "^0.5.29", "@types/es6-promise": "0.0.32", "@types/jest": "^29.0.0", "@types/node": "^12.11.2", "@types/react-test-renderer": "16.9.0", "@uifabric/prettier-rules": "^7.0.3", - "@wojtekmaj/enzyme-adapter-react-17": "^0.6.5", "depcheck": "^1.0.0", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.5.0", "find-up": "^5.0.0", "fs-extra": "^7.0.1", "jest": "^29.2.1", diff --git a/scripts/src/configs/configureJest.ts b/scripts/src/configs/configureJest.ts index d6de72e82a..d50b1d581e 100644 --- a/scripts/src/configs/configureJest.ts +++ b/scripts/src/configs/configureJest.ts @@ -20,13 +20,11 @@ export function configureJest(customConfig?: object): object { KeyCodes: path.resolve(__dirname, 'jest/jest-mock.js'), // Jest is picking up the hoisted version of lru-cache, which is // incompatible from the version required by semver - 'lru-cache': require.resolve('lru-cache', {paths:[require.resolve('semver')]}), + 'lru-cache': require.resolve('lru-cache', { paths: [require.resolve('semver')] }), }, moduleFileExtensions, moduleDirectories: nodeModulesToRoot(), - snapshotSerializers: ['enzyme-to-json/serializer'], - // use babel-jest to transform files including typescript transform: { '^.+\\.(js|ts|tsx)?$': 'babel-jest', @@ -49,7 +47,6 @@ export function configureReactNativeJest(platform?: PlatformValue, customConfig? return jestPreset(ensurePlatform(platform, 'ios'), { roots: ['/src'], verbose: false, - setupFilesAfterEnv: [path.join(__dirname, 'jest', 'setupEnzyme.js')], ...customConfig, }); } diff --git a/scripts/src/configs/jest/setupEnzyme.js b/scripts/src/configs/jest/setupEnzyme.js deleted file mode 100644 index 808d060ef0..0000000000 --- a/scripts/src/configs/jest/setupEnzyme.js +++ /dev/null @@ -1,49 +0,0 @@ -// setup-tests.js -import 'react-native'; -import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; -import Enzyme from 'enzyme'; - -/** - * Set up DOM in node.js environment for Enzyme to mount to - */ -const { JSDOM } = require('jsdom'); - -const jsdom = new JSDOM('', { - // Fixes "SecurityError: localStorage is not available for opaque origins". - // See https://github.com/jsdom/jsdom/issues/2304#issuecomment-408320484 - url: 'https://localhost', -}); -const { window } = jsdom; - -function copyProps(src, target) { - Object.defineProperties(target, { - ...Object.getOwnPropertyDescriptors(src), - ...Object.getOwnPropertyDescriptors(target), - }); -} - -global.window = window; -global.document = window.document; -global.navigator = { - userAgent: 'node.js', -}; -copyProps(window, global); - -/** - * Hook console warnings because enzyme with react-native will generate some bogus warnings such as: - * Warning: is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements. - * Warning: The tag is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter - */ -const consoleErrorHandler = console.error; -console.error = (message, ...args) => { - const blockExpr = /.*(react-dom.development.js|Use PascalCase for React|is unrecognized in this browser)/i; - if (!blockExpr.test(message)) { - consoleErrorHandler(message, ...args); - } -}; - -/** - * Set up Enzyme to mount to DOM, simulate events, - * and inspect the DOM in tests. - */ -Enzyme.configure({ adapter: new Adapter() }); diff --git a/yarn.lock b/yarn.lock index 6183a0c109..8e251fa86c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4522,17 +4522,13 @@ __metadata: "@react-native-community/cli-platform-ios": "npm:^12.1.1" "@react-native/metro-babel-transformer": "npm:^0.73.0" "@rnx-kit/jest-preset": "npm:^0.1.14" - "@types/enzyme": "npm:^3.10.5" "@types/es6-collections": "npm:^0.5.29" "@types/es6-promise": "npm:0.0.32" "@types/jest": "npm:^29.0.0" "@types/node": "npm:^12.11.2" "@types/react-test-renderer": "npm:16.9.0" "@uifabric/prettier-rules": "npm:^7.0.3" - "@wojtekmaj/enzyme-adapter-react-17": "npm:^0.6.5" depcheck: "npm:^1.0.0" - enzyme: "npm:^3.11.0" - enzyme-to-json: "npm:^3.5.0" find-up: "npm:^5.0.0" fs-extra: "npm:^7.0.1" jest: "npm:^29.2.1" @@ -7479,15 +7475,6 @@ __metadata: languageName: node linkType: hard -"@types/cheerio@npm:*, @types/cheerio@npm:^0.22.22": - version: 0.22.31 - resolution: "@types/cheerio@npm:0.22.31" - dependencies: - "@types/node": "npm:*" - checksum: 10c0/f16e9e67e3af530c3603b4b9f7651b9223ca72944afccaa31dd39be858a90bd48d5206d36b05998a0389fedca158f22430f96796007000f34b2dd8dd6b193f6e - languageName: node - linkType: hard - "@types/chokidar@npm:^2.1.3": version: 2.1.3 resolution: "@types/chokidar@npm:2.1.3" @@ -7506,16 +7493,6 @@ __metadata: languageName: node linkType: hard -"@types/enzyme@npm:^3.10.5": - version: 3.10.18 - resolution: "@types/enzyme@npm:3.10.18" - dependencies: - "@types/cheerio": "npm:*" - "@types/react": "npm:^16" - checksum: 10c0/c156d04e87dc4b01b5a8516bbcc2d127040506cf4d75efc2bb6ac9d4babc7db2895af207a6e95b68ff0f1f593bf84a6499417423b89294c1f0468d3809652dd2 - languageName: node - linkType: hard - "@types/es6-collections@npm:^0.5.29": version: 0.5.36 resolution: "@types/es6-collections@npm:0.5.36" @@ -8775,38 +8752,6 @@ __metadata: languageName: node linkType: hard -"@wojtekmaj/enzyme-adapter-react-17@npm:^0.6.5": - version: 0.6.7 - resolution: "@wojtekmaj/enzyme-adapter-react-17@npm:0.6.7" - dependencies: - "@wojtekmaj/enzyme-adapter-utils": "npm:^0.1.4" - enzyme-shallow-equal: "npm:^1.0.0" - has: "npm:^1.0.0" - prop-types: "npm:^15.7.0" - react-is: "npm:^17.0.0" - react-test-renderer: "npm:^17.0.0" - peerDependencies: - enzyme: ^3.0.0 - react: ^17.0.0-0 - react-dom: ^17.0.0-0 - checksum: 10c0/f05493ee9aee235781a7f7447c21f580629dc86662af3167c2131b869aa138aaeafeeb41d2e6fe6616c68eed49a416baba2ef23aa40e9b781bce0d3a64d35be1 - languageName: node - linkType: hard - -"@wojtekmaj/enzyme-adapter-utils@npm:^0.1.4": - version: 0.1.4 - resolution: "@wojtekmaj/enzyme-adapter-utils@npm:0.1.4" - dependencies: - function.prototype.name: "npm:^1.1.0" - has: "npm:^1.0.0" - object.fromentries: "npm:^2.0.0" - prop-types: "npm:^15.7.0" - peerDependencies: - react: ^17.0.0-0 - checksum: 10c0/3d192b914e296fab89b35b9c0b7f0ba3181dbfa71181a5748c232de4e4089e41bb6048e71c6708921c83001530a91e4e124860a2d5f1f2cdd875c59555ce7f34 - languageName: node - linkType: hard - "@xmldom/xmldom@npm:^0.7.7": version: 0.7.9 resolution: "@xmldom/xmldom@npm:0.7.9" @@ -9578,19 +9523,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.filter@npm:^1.0.0": - version: 1.0.2 - resolution: "array.prototype.filter@npm:1.0.2" - dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-array-method-boxes-properly: "npm:^1.0.0" - is-string: "npm:^1.0.7" - checksum: 10c0/f49da13cb9110c7caede682e22b32208aaaea3b5d9760e5b417e3d62d72b5a092f0c26ad648879900cd9694371fc75e47f80a08b6a1eb5e3cc15976e8f4bc0c7 - languageName: node - linkType: hard - "array.prototype.findlastindex@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlastindex@npm:1.2.5" @@ -9605,7 +9537,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.3.2": +"array.prototype.flat@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flat@npm:1.3.2" dependencies: @@ -10550,7 +10482,7 @@ __metadata: languageName: node linkType: hard -"cheerio@npm:^1.0.0-rc.10, cheerio@npm:^1.0.0-rc.3": +"cheerio@npm:^1.0.0-rc.10": version: 1.0.0-rc.12 resolution: "cheerio@npm:1.0.0-rc.12" dependencies: @@ -10909,7 +10841,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.19.0, commander@npm:^2.20.0": +"commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 @@ -11784,13 +11716,6 @@ __metadata: languageName: node linkType: hard -"discontinuous-range@npm:1.0.0": - version: 1.0.0 - resolution: "discontinuous-range@npm:1.0.0" - checksum: 10c0/487b105f83c1cc528e25e65d3c4b73958ec79769b7bd0e264414702a23a7e2b282c72982b4bef4af29fcab53f47816c3f0a5c40d85a99a490f4bc35b83dc00f8 - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -12061,59 +11986,6 @@ __metadata: languageName: node linkType: hard -"enzyme-shallow-equal@npm:^1.0.0, enzyme-shallow-equal@npm:^1.0.1": - version: 1.0.5 - resolution: "enzyme-shallow-equal@npm:1.0.5" - dependencies: - has: "npm:^1.0.3" - object-is: "npm:^1.1.5" - checksum: 10c0/30ace0c5be2d454fb001a50dd30791c18e1f86b3b7238456b464921017f6add73ea6b2a2527f1e96958d8bfe84d0afcba30b0c9e4087ebda2feb42b7800419c4 - languageName: node - linkType: hard - -"enzyme-to-json@npm:^3.5.0": - version: 3.6.2 - resolution: "enzyme-to-json@npm:3.6.2" - dependencies: - "@types/cheerio": "npm:^0.22.22" - lodash: "npm:^4.17.21" - react-is: "npm:^16.12.0" - peerDependencies: - enzyme: ^3.4.0 - checksum: 10c0/90fba5bbcfda37f456d483a46d7a077123fb65f74e59bab1e137e30c84f5b3149114efae7f9736f7ea49dd9171299645816bc5f6649b16a19d47c8bd1d6d8065 - languageName: node - linkType: hard - -"enzyme@npm:^3.11.0": - version: 3.11.0 - resolution: "enzyme@npm:3.11.0" - dependencies: - array.prototype.flat: "npm:^1.2.3" - cheerio: "npm:^1.0.0-rc.3" - enzyme-shallow-equal: "npm:^1.0.1" - function.prototype.name: "npm:^1.1.2" - has: "npm:^1.0.3" - html-element-map: "npm:^1.2.0" - is-boolean-object: "npm:^1.0.1" - is-callable: "npm:^1.1.5" - is-number-object: "npm:^1.0.4" - is-regex: "npm:^1.0.5" - is-string: "npm:^1.0.5" - is-subset: "npm:^0.1.1" - lodash.escape: "npm:^4.0.1" - lodash.isequal: "npm:^4.5.0" - object-inspect: "npm:^1.7.0" - object-is: "npm:^1.0.2" - object.assign: "npm:^4.1.0" - object.entries: "npm:^1.1.1" - object.values: "npm:^1.1.1" - raf: "npm:^3.4.1" - rst-selector-parser: "npm:^2.2.3" - string.prototype.trim: "npm:^1.2.1" - checksum: 10c0/14081671ed77924026036ed4edb1168cdac826aadd1ab2c77a5b7fdda625589dc5a4062cd0c65ec88add3ea3f7c0ebcbf3178bcf84b43335a175d8c71a016809 - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -12203,13 +12075,6 @@ __metadata: languageName: node linkType: hard -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 10c0/4b7617d3fbd460d6f051f684ceca6cf7e88e6724671d9480388d3ecdd72119ddaa46ca31f2c69c5426a82e4b3091c1e81867c71dcdc453565cd90005ff2c382d - languageName: node - linkType: hard - "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -13398,14 +13263,14 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": +"function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 languageName: node linkType: hard -"function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.6": +"function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: @@ -13948,15 +13813,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.0, has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: "npm:^1.1.1" - checksum: 10c0/e1da0d2bd109f116b632f27782cf23182b42f14972ca9540e4c5aa7e52647407a0a4a76937334fddcb56befe94a3494825ec22b19b51f5e5507c3153fd1a5e1b - languageName: node - linkType: hard - "hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -14060,16 +13916,6 @@ __metadata: languageName: node linkType: hard -"html-element-map@npm:^1.2.0": - version: 1.3.1 - resolution: "html-element-map@npm:1.3.1" - dependencies: - array.prototype.filter: "npm:^1.0.0" - call-bind: "npm:^1.0.2" - checksum: 10c0/5ae8b37546601864eb41363a05871a896df36e59714607b1386a114d45f1c6b6cd1633d6fb09e09e5ee0f1c909d6b9c1bbca831333b8eef936312f61b1b5ecb8 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^4.0.0": version: 4.0.0 resolution: "html-encoding-sniffer@npm:4.0.0" @@ -14547,7 +14393,7 @@ __metadata: languageName: node linkType: hard -"is-boolean-object@npm:^1.0.1, is-boolean-object@npm:^1.1.0": +"is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" dependencies: @@ -14557,7 +14403,7 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.1.5, is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f @@ -14727,7 +14573,7 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.0.5, is-regex@npm:^1.1.4": +"is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -14801,13 +14647,6 @@ __metadata: languageName: node linkType: hard -"is-subset@npm:^0.1.1": - version: 0.1.1 - resolution: "is-subset@npm:0.1.1" - checksum: 10c0/d8125598ab9077a76684e18726fb915f5cea7a7358ed0c6ff723f4484d71a0a9981ee5aae06c44de99cfdef0fefce37438c6257ab129e53c82045ea0c2acdebf - languageName: node - linkType: hard - "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" @@ -16162,13 +16001,6 @@ __metadata: languageName: node linkType: hard -"lodash.escape@npm:^4.0.1": - version: 4.0.1 - resolution: "lodash.escape@npm:4.0.1" - checksum: 10c0/90ade409cec05b6869090476952fdfb84d4d87b1ff4a0e03ebd590f980d9a1248d93ba14579f10d80c6429e4d6af13ba137c28db64cae6dadb71442e54a3ad2b - languageName: node - linkType: hard - "lodash.flattendeep@npm:^4.4.0": version: 4.4.0 resolution: "lodash.flattendeep@npm:4.4.0" @@ -17158,13 +16990,6 @@ __metadata: languageName: node linkType: hard -"moo@npm:^0.5.0": - version: 0.5.2 - resolution: "moo@npm:0.5.2" - checksum: 10c0/a9d9ad8198a51fe35d297f6e9fdd718298ca0b39a412e868a0ebd92286379ab4533cfc1f1f34516177f5129988ab25fe598f78e77c84e3bfe0d4a877b56525a8 - languageName: node - linkType: hard - "morgan@npm:1.10.0": version: 1.10.0 resolution: "morgan@npm:1.10.0" @@ -17285,23 +17110,6 @@ __metadata: languageName: node linkType: hard -"nearley@npm:^2.7.10": - version: 2.20.1 - resolution: "nearley@npm:2.20.1" - dependencies: - commander: "npm:^2.19.0" - moo: "npm:^0.5.0" - railroad-diagrams: "npm:^1.0.0" - randexp: "npm:0.4.6" - bin: - nearley-railroad: bin/nearley-railroad.js - nearley-test: bin/nearley-test.js - nearley-unparse: bin/nearley-unparse.js - nearleyc: bin/nearleyc.js - checksum: 10c0/d25e1fd40b19c53a0ada6a688670f4a39063fd9553ab62885e81a82927d51572ce47193b946afa3d85efa608ba2c68f433c421f69b854bfb7f599eacb5fae37e - languageName: node - linkType: hard - "needle@npm:^3.3.1": version: 3.3.1 resolution: "needle@npm:3.3.1" @@ -17610,14 +17418,14 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.13.1, object-inspect@npm:^1.7.0": +"object-inspect@npm:^1.12.0, object-inspect@npm:^1.13.1": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" checksum: 10c0/fad603f408e345c82e946abdf4bfd774260a5ed3e5997a0b057c44153ac32c7271ff19e3a5ae39c858da683ba045ccac2f65245c12763ce4e8594f818f4a648d languageName: node linkType: hard -"object-is@npm:^1.0.2, object-is@npm:^1.1.5": +"object-is@npm:^1.1.5": version: 1.1.5 resolution: "object-is@npm:1.1.5" dependencies: @@ -17634,7 +17442,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": +"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" dependencies: @@ -17646,7 +17454,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.1, object.entries@npm:^1.1.6": +"object.entries@npm:^1.1.6": version: 1.1.6 resolution: "object.entries@npm:1.1.6" dependencies: @@ -17657,7 +17465,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.0, object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.8": +"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -17690,7 +17498,7 @@ __metadata: languageName: node linkType: hard -"object.values@npm:^1.1.1, object.values@npm:^1.1.6, object.values@npm:^1.2.0": +"object.values@npm:^1.1.6, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -18260,13 +18068,6 @@ __metadata: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 10c0/22c54de06f269e29f640e0e075207af57de5052a3d15e360c09b9a8663f393f6f45902006c1e71aa8a5a1cdfb1a47fe268826f8496d6425c362f00f5bc3e85d9 - languageName: node - linkType: hard - "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": version: 1.0.1 resolution: "picocolors@npm:1.0.1" @@ -18500,7 +18301,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.7.0, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -18665,32 +18466,6 @@ __metadata: languageName: node linkType: hard -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: "npm:^2.1.0" - checksum: 10c0/337f0853c9e6a77647b0f499beedafea5d6facfb9f2d488a624f88b03df2be72b8a0e7f9118a3ff811377d534912039a3311815700d2b6d2313f82f736f9eb6e - languageName: node - linkType: hard - -"railroad-diagrams@npm:^1.0.0": - version: 1.0.0 - resolution: "railroad-diagrams@npm:1.0.0" - checksum: 10c0/81bf8f86870a69fb9ed243102db9ad6416d09c4cb83964490d44717690e07dd982f671503236a1f8af28f4cb79d5d7a87613930f10ac08defa845ceb6764e364 - languageName: node - linkType: hard - -"randexp@npm:0.4.6": - version: 0.4.6 - resolution: "randexp@npm:0.4.6" - dependencies: - discontinuous-range: "npm:1.0.0" - ret: "npm:~0.1.10" - checksum: 10c0/14ee14b6d7f5ce69609b51cc914fb7a7c82ad337820a141c5f762c5ad1fe868f5191ea6e82359aee019b625ee1359486628fa833909d12c3b5dd9571908c3345 - languageName: node - linkType: hard - "range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -18746,14 +18521,14 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.1": +"react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 languageName: node linkType: hard -"react-is@npm:^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": +"react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 10c0/2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 @@ -18990,7 +18765,7 @@ __metadata: languageName: node linkType: hard -"react-shallow-renderer@npm:^16.13.1, react-shallow-renderer@npm:^16.15.0": +"react-shallow-renderer@npm:^16.15.0": version: 16.15.0 resolution: "react-shallow-renderer@npm:16.15.0" dependencies: @@ -19015,20 +18790,6 @@ __metadata: languageName: node linkType: hard -"react-test-renderer@npm:^17.0.0": - version: 17.0.2 - resolution: "react-test-renderer@npm:17.0.2" - dependencies: - object-assign: "npm:^4.1.1" - react-is: "npm:^17.0.2" - react-shallow-renderer: "npm:^16.13.1" - scheduler: "npm:^0.20.2" - peerDependencies: - react: 17.0.2 - checksum: 10c0/a4ea1e745a87bb9015540d96a3077b614bf88e306a0edd639f8fb849a393fa5104e84eca4349bc4b026f2f0b115a4172d58950d7076316115795266557659276 - languageName: node - linkType: hard - "react@npm:18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" @@ -19494,13 +19255,6 @@ __metadata: languageName: node linkType: hard -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: 10c0/01f77cad0f7ea4f955852c03d66982609893edc1240c0c964b4c9251d0f9fb6705150634060d169939b096d3b77f4c84d6b6098a5b5d340160898c8581f1f63f - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -19584,16 +19338,6 @@ __metadata: languageName: node linkType: hard -"rst-selector-parser@npm:^2.2.3": - version: 2.2.3 - resolution: "rst-selector-parser@npm:2.2.3" - dependencies: - lodash.flattendeep: "npm:^4.4.0" - nearley: "npm:^2.7.10" - checksum: 10c0/b631aca2cb451fbde8d78dbc9a9479f20f1f40565cd8eb63773cb6e2a395ed87b392291986b84c2c7da68b70084e3469fbe958261300a10dff41c87fa3bc58aa - languageName: node - linkType: hard - "rtl-css-js@npm:^1.16.0": version: 1.16.1 resolution: "rtl-css-js@npm:1.16.1" @@ -19736,16 +19480,6 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.20.2": - version: 0.20.2 - resolution: "scheduler@npm:0.20.2" - dependencies: - loose-envify: "npm:^1.1.0" - object-assign: "npm:^4.1.1" - checksum: 10c0/b0982e4b0f34f4ffa4f2f486161c0fd9ce9b88680b045dccbf250eb1aa4fd27413570645455187a83535e2370f5c667a251045547765408492bd883cbe95fcdb - languageName: node - linkType: hard - "scheduler@npm:^0.23.0, scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" @@ -20443,7 +20177,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.1, string.prototype.trim@npm:^1.2.9": +"string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" dependencies: