From 002442181b8f66da80b97bab5e4f92590093b45f Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 13:22:59 +0530 Subject: [PATCH 01/11] UIPFU-77 - Add 'User assignment status' filter group --- .eslintrc | 25 +- .gitignore | 3 +- CHANGELOG.md | 2 + jest.config.js | 10 + package.json | 4 +- src/UserSearchContainer.js | 45 +- src/UserSearchModal.js | 1 + src/UserSearchView.js | 28 +- src/constants.js | 8 + src/filterConfig.js | 21 + src/utils.js | 87 ++++ src/utils.test.js | 619 +++++++++++++++++++++++ test/jest/setupFiles.js | 4 + translations/ui-plugin-find-user/en.json | 5 +- 14 files changed, 836 insertions(+), 26 deletions(-) create mode 100644 jest.config.js create mode 100644 src/constants.js create mode 100644 src/utils.js create mode 100644 src/utils.test.js create mode 100644 test/jest/setupFiles.js diff --git a/.eslintrc b/.eslintrc index 692c12b..037e2f6 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,4 +1,27 @@ { "parser": "@babel/eslint-parser", - "extends": "@folio/eslint-config-stripes" + "extends": "@folio/eslint-config-stripes", + "overrides": [ + { + "files": [ "src/**/tests/*", "*.test.js", "test/**/*" ], + "rules": { + "react/prop-types": "off", + "import/prefer-default-export": "off" + } + } + ], + "env": { + "jest": true + }, + "settings": { + "import/resolver": { + "alias": { + "map": [ + ["__mock__", "./test/jest/__mock__"], + ["fixtures", "./test/jest/fixtures"], + ["helpers", "./test/jest/helpers"] + ] + } + } + } } diff --git a/.gitignore b/.gitignore index 6131a89..8aae1af 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules -artifacts \ No newline at end of file +artifacts +junit.xml \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f0bb234..e75fb39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 7.1.0 IN PROGRESS +* Add "User assignment status" filter in find-user-plugin. Refs UIPFU-77. + ## [7.0.0](https://github.com/folio-org/ui-plugin-find-user/tree/v7.0.0) (2023-10-12) [Full Changelog](https://github.com/folio-org/ui-plugin-find-user/compare/v6.3.0...v7.0.0) diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..f314d3b --- /dev/null +++ b/jest.config.js @@ -0,0 +1,10 @@ +const path = require('path'); +const config = require('@folio/jest-config-stripes'); + +module.exports = { + ...config, + setupFiles: [ + ...config.setupFiles, + path.join(__dirname, './test/jest/setupFiles.js'), + ], +}; diff --git a/package.json b/package.json index e1ecf10..3bf728a 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "lint": "eslint .", "build-mod-descriptor": "stripes mod descriptor --full --strict | jq '.[]' > module-descriptor.json ", "formatjs-compile": "formatjs compile-folder --ast --format simple ./translations/ui-plugin-find-user ./translations/ui-plugin-find-user/compiled", - "test": "stripes test karma" + "test": "stripes test karma", + "test:jest": "yarn run jest" }, "okapiInterfaces": { "users": "16.0", @@ -37,6 +38,7 @@ "@bigtest/interactor": "^0.9.1", "@bigtest/mocha": "^0.5.2", "@folio/eslint-config-stripes": "^7.0.0", + "@folio/jest-config-stripes": "^2.0.0", "@folio/stripes": "^9.0.0", "@folio/stripes-cli": "^3.0.0", "@folio/stripes-core": "^10.0.0", diff --git a/src/UserSearchContainer.js b/src/UserSearchContainer.js index 55dcbeb..f3abd26 100644 --- a/src/UserSearchContainer.js +++ b/src/UserSearchContainer.js @@ -8,7 +8,9 @@ import { StripesConnectedSource, } from '@folio/stripes/smart-components'; -import filterConfig from './filterConfig'; +import filterConfig, { filterConfigWithUserAssignedStatus } from './filterConfig'; +import { updateResourceData } from './utils'; +import { UAS } from './constants'; const INITIAL_RESULT_COUNT = 30; const RESULT_COUNT_INCREMENT = 30; @@ -32,6 +34,28 @@ const compileQuery = template( { interpolate: /%{([\s\S]+?)}/g } ); +export function buildQuery(queryParams, pathComponents, resourceData, logger, props) { + const filters = props.initialSelectedUsers ? filterConfigWithUserAssignedStatus : filterConfig; + const updatedResourceData = props.initialSelectedUsers && resourceData?.query?.filters?.substring(`${UAS}`) ? updateResourceData(resourceData) : resourceData; + + return makeQueryFunction( + 'cql.allRecords=1', + (parsedQuery, _, localProps) => localProps.query.query.trim().split(/\s+/).map(query => compileQuery({ query })).join(' and '), + { + // the keys in this object must match those passed to + // SearchAndSort's columnMapping prop + 'active': 'active', + 'name': 'personal.lastName personal.firstName', + 'patronGroup': 'patronGroup.group', + 'username': 'username', + 'barcode': 'barcode', + 'email': 'personal.email', + }, + filters, + 2, + )(queryParams, pathComponents, updatedResourceData, logger, props); +} + class UserSearchContainer extends React.Component { static manifest = Object.freeze({ initializedFilterConfig: { initialValue: false }, @@ -46,24 +70,7 @@ class UserSearchContainer extends React.Component { perRequest: 100, path: 'users', GET: { - params: { - query: makeQueryFunction( - 'cql.allRecords=1', - (parsedQuery, props, localProps) => localProps.query.query.trim().split(/\s+/).map(query => compileQuery({ query })).join(' and '), - { - // the keys in this object must match those passed to - // SearchAndSort's columnMapping prop - 'active': 'active', - 'name': 'personal.lastName personal.firstName', - 'patronGroup': 'patronGroup.group', - 'username': 'username', - 'barcode': 'barcode', - 'email': 'personal.email', - }, - filterConfig, - 2, - ), - }, + params: { query: buildQuery }, staticFallback: { params: {} }, }, }, diff --git a/src/UserSearchModal.js b/src/UserSearchModal.js index 3e8217e..4a4f360 100644 --- a/src/UserSearchModal.js +++ b/src/UserSearchModal.js @@ -110,6 +110,7 @@ class UserSearchModal extends Component { {...this.props} onComponentWillUnmount={onCloseModal} tenantId={tenantId || stripes.okapi.tenant} + initialSelectedUsers={initialSelectedUsers} > {(viewProps) => Boolean(this.state.checkedMap[item.id]); + getFilterConfig = () => { + if (this.props.initialSelectedUsers) { + return filterConfigWithUserAssignedStatus; + } + return filterConfig; + } + render() { const { onSelectRow, @@ -286,6 +295,19 @@ class UserSearchView extends React.Component { return true; }; + const getContentData = () => { + const activeFilterState = activeFilters?.state; + const isUasFilterGroupActive = {}.hasOwnProperty.call(activeFilterState, UAS); + const uasFilterValue = activeFilterState.uas; + + if (isUasFilterGroupActive && uasFilterValue.length === 1) { + const filteredUsers = getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users); + return filteredUsers; + } + // when both 'Assigned' and 'Unassigned' filters are applied or both are not applied + return users; + }; + return ( {intl => ( @@ -339,7 +361,7 @@ class UserSearchView extends React.Component { @@ -355,7 +377,7 @@ class UserSearchView extends React.Component { , + name: 'uas', + cql: 'uas', + values: [ + { + name: 'Assigned', + cql: 'true', + displayName: , + }, + { + name: 'Unassigned', + cql: 'false', + displayName: , + }, + ], + }, +]; + export default filterConfig; diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..e352d8c --- /dev/null +++ b/src/utils.js @@ -0,0 +1,87 @@ +import cloneDeep from 'lodash/cloneDeep'; +import { + ASSIGNED_FILTER_KEY, + UNASSIGNED_FILTER_KEY, + ASSIGNED, + UNASSIGNED, + UAS, + ACTIVE, + INACTIVE +} from './constants'; + +// eslint-disable-next-line import/prefer-default-export +export const updateResourceData = (rData) => { + const filterString = rData?.query?.filters; + const newRData = cloneDeep(rData); + if (filterString === `${UNASSIGNED_FILTER_KEY}` || filterString === `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}` || filterString === `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`) { + /* + * When Unassigned filter is selected on 'User assigbment Status' filter group, with no other filter from other groups, + * fetch all the user records. The filter string is adjusted to include both active and inactive status filters. This will result in (cql.allRecords=1) + * + * The same applies when both Assigned and Unassigned are selected in any sequential order. + */ + const alteredfilters = 'active.active,active.inactive'; + newRData.query.filters = alteredfilters; + } else if (filterString.includes(`${UNASSIGNED_FILTER_KEY}`)) { + /* + * When UnAssigned filter is selected incombination with any other filters(in other filter groups), + * filter astring for Unassigned is removed and th erest of the filter string is propagated to makeQueryFunction. + */ + const alteredfilters = newRData.query.filters.split(',').filter(str => !str.startsWith(`${UAS}`)).join(','); + newRData.query.filters = alteredfilters; + } else if (filterString.includes(`${ASSIGNED_FILTER_KEY}`)) { + /* + * When Assigned filter is selected on 'User assigbment Status' filter group, in any combination of filters in other filter groups, + * cql formation is not needed. + * hence remove aus filter before propagating it further to makeQueryFunction + */ + const alteredfilters = ''; + newRData.query.filters = alteredfilters; + } + return newRData; +}; + +// eslint-disable-next-line consistent-return +export const getUsersBasedOnAssignmentStatus = (activeFilterState, uasFilterValue, initialSelectedUsers, users) => { + const condForOneOfTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) || activeFilterState?.pg?.includes(u.patronGroup); + const condForBothTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) && activeFilterState?.pg?.includes(u.patronGroup); + if (uasFilterValue[0] === `${ASSIGNED}`) { + // when ONLY "Assigned" filter is selected + const assignedUsers = Object.values(initialSelectedUsers); + if (Object.keys(activeFilterState).length === 1) { + return assignedUsers; + } + // several filters are selected + // filter users based on the filter group values in place + + // when "Assigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups + if (Object.keys(activeFilterState).length === 2) { + const filteredAssignedUsers = assignedUsers.filter(u => condForOneOfTheFilters(u)); + return filteredAssignedUsers; + } + + // when filters from all the filter groups are selected + const filteredAssignedUsers = assignedUsers.filter(u => condForBothTheFilters(u)); + return filteredAssignedUsers; + } + if (uasFilterValue[0] === `${UNASSIGNED}`) { + // when ONLY "Unassigned" filter is selected + const assignedUserIds = Object.keys(initialSelectedUsers); + if (Object.keys(activeFilterState).length === 1) { + const filteredUsers = users.filter(u => !assignedUserIds.includes(u.id)); + return filteredUsers; + } + // several filters are selected + // filter users based on the filter group values in place + + // when "UnAssigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups + if (Object.keys(activeFilterState).length === 2) { + const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForOneOfTheFilters(u))); + return filteredAssignedUsers; + } + + // when filters from all the filter groups are selected + const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForBothTheFilters(u))); + return filteredAssignedUsers; + } +}; diff --git a/src/utils.test.js b/src/utils.test.js new file mode 100644 index 0000000..c1c6dd3 --- /dev/null +++ b/src/utils.test.js @@ -0,0 +1,619 @@ +import { updateResourceData, getUsersBasedOnAssignmentStatus } from './utils'; +import { UNASSIGNED_FILTER_KEY, ASSIGNED_FILTER_KEY } from './constants'; + +describe('updatedResourceData', () => { + describe('when only UnAssigned filter is selected', () => { + [`${UNASSIGNED_FILTER_KEY}`, `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}`, `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`].forEach(filterStr => ( + it(`should remove ${filterStr} from filter string and add active and inactive filter strings`, () => { + const resourceData = { + query: { + filters: filterStr, + } + }; + const expectedResourceData = { + query: { + ...resourceData.query, + filters: 'active.active,active.inactive', + }, + }; + expect(updateResourceData(resourceData)).toMatchObject(expectedResourceData); + }) + )); + }); + + describe('when Unassigned filter is selected along with filters from other filter groups', () => { + it('should remove Unassigned filter and return the rest', () => { + const resourceData = { + query: { + filters: `${UNASSIGNED_FILTER_KEY},active.active`, + } + }; + const expectedResourceData = { + query: { + ...resourceData.query, + filters: 'active.active', + }, + }; + expect(updateResourceData(resourceData)).toMatchObject(expectedResourceData); + }); + }); + + describe('when Assigned filter is selected with or without combonation of filters from other filter groups', () => { + it('should remove filter string', () => { + const resourceData = { + query: { + filters: `${ASSIGNED_FILTER_KEY},active.active`, + } + }; + const expectedResourceData = { + query: { + ...resourceData.query, + filters: '', + }, + }; + expect(updateResourceData(resourceData)).toMatchObject(expectedResourceData); + }); + }); +}); + +describe('getUsersBasedOnAssignmentStatus', () => { + describe('when ONLY Assigned filter is selected', () => { + it('should return assigned users', () => { + const activeFilterState = { uas: ['Assigned'] }; + const uasFilterValue = ['Assigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = []; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(initialSelectedUsers)); + }); + }); + + describe('when Assigned filter is selected along with other filters from one of the other filter groups', () => { + it('should filter active filters from assigned users', () => { + const activeFilterState = { uas: ['Assigned'], active: ['active'] }; + const uasFilterValue = ['Assigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = []; + const expectedAssignedUsers = [initialSelectedUsers['7daa365a-d8c1-4e5d-90ac-ab38f8230827']]; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedAssignedUsers)); + }); + }); + + describe('when Assigned filter is selected along with filters from other filter groups', () => { + it('should filter assigned user based on the filters from other filter groups - status and patrongroup', () => { + const activeFilterState = { uas: ['Assigned'], active: ['active'], pg: ['3684a786-6671-4268-8ed0-9db82ebca60b'] }; + const uasFilterValue = ['Assigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = []; + const expectedAssignedUsers = [initialSelectedUsers['7daa365a-d8c1-4e5d-90ac-ab38f8230827']]; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedAssignedUsers)); + }); + }); + + describe('when ONLY Unassigned filter is selected', () => { + it('should filter unassigned users from the list of users and return the rest', () => { + const activeFilterState = { uas: ['Unassigned'] }; + const uasFilterValue = ['Unassigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = [ + { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + }, + { + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + } + ]; + const expectedUnAssignedUsers = [{ + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + }]; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); + }); + }); + + describe('when Unassigned filter is selected along with one of the filrers from other filter groups', () => { + it('should filter unassigned users based on the the filter', () => { + const activeFilterState = { uas: ['Unassigned'], active: ['active'] }; + const uasFilterValue = ['Unassigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = [ + { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + }, + { + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + } + ]; + const expectedUnAssignedUsers = [{ + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + }]; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); + }); + }); + + describe('when Unassigned filter is selected along with filters from other filter groups', () => { + it('should filter assigned user based on the filters from other filter groups - status and patrongroup', () => { + const activeFilterState = { uas: ['Unassigned'], active: ['active'], pg: ['ad0bc554-d5bc-463c-85d1-5562127ae91b'] }; + const uasFilterValue = ['Unassigned']; + const initialSelectedUsers = { + '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + } + }; + const users = [ + { + 'username': 'acq-admin', + 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', + 'barcode': '1704852123910366583', + 'active': true, + 'type': 'patron', + 'departments': [], + 'proxyFor': [], + 'createdDate': '2024-01-10T02:02:03.939+00:00', + 'updatedDate': '2024-01-10T02:02:03.939+00:00', + 'metadata': { + 'createdDate': '2024-01-10T02:02:03.936+00:00', + 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', + 'updatedDate': '2024-01-10T02:02:03.936+00:00', + 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' + }, + 'personal': { + 'lastName': 'Admin', + 'firstName': 'acq-admin', + 'addresses': [] + }, + 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', + 'fullName': 'Admin, acq-admin', + 'groupName': 'staff' + }, + { + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + } + ]; + const expectedUnAssignedUsers = [{ + 'username': 'devonte', + 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', + 'barcode': '745758690367580', + 'active': true, + 'type': 'patron', + 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', + 'departments': [], + 'proxyFor': [], + 'personal': { + 'lastName': 'Abbott', + 'firstName': 'Candace', + 'middleName': 'Fanny', + 'email': 'guy@lemke-llc.ok.us', + 'phone': '(136)082-4680 x8231', + 'mobilePhone': '(436)763-7413', + 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', + 'addresses': [ + { + 'countryId': 'US', + 'addressLine1': '43069 Lobby', + 'city': 'Seal Beach', + 'region': 'NC', + 'postalCode': '35848-5877', + 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', + 'primaryAddress': true + } + ], + 'preferredContactTypeId': '002' + }, + 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', + 'expirationDate': '2026-01-01T23:59:59.000+00:00', + 'createdDate': '2024-01-10T07:32:22.263+00:00', + 'updatedDate': '2024-01-10T07:32:22.263+00:00', + 'metadata': { + 'createdDate': '2024-01-10T01:51:44.010+00:00', + 'updatedDate': '2024-01-10T07:32:22.260+00:00', + 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' + }, + 'tags': { + 'tagList': [] + }, + 'customFields': {} + }]; + expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); + }); + }); +}); diff --git a/test/jest/setupFiles.js b/test/jest/setupFiles.js new file mode 100644 index 0000000..b9e1a54 --- /dev/null +++ b/test/jest/setupFiles.js @@ -0,0 +1,4 @@ +// See https://github.com/facebook/jest/issues/335#issuecomment-703691592 +// import './__mock__'; + +import 'regenerator-runtime/runtime'; diff --git a/translations/ui-plugin-find-user/en.json b/translations/ui-plugin-find-user/en.json index f999766..85992f0 100644 --- a/translations/ui-plugin-find-user/en.json +++ b/translations/ui-plugin-find-user/en.json @@ -14,5 +14,8 @@ "information.username": "Username", "contact.email": "Email", "status": "Status", - "inactive": "Inactive" + "inactive": "Inactive", + "userAssignmentStatus": "User Assignment Status", + "assigned": "Assigned", + "unassigned": "Unassigned" } From b2d41d44998298e82d7ff2047888b35a53d159d8 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 13:24:14 +0530 Subject: [PATCH 02/11] UIPFU-77 - Update change log --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e75fb39..5c72bfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 7.1.0 IN PROGRESS -* Add "User assignment status" filter in find-user-plugin. Refs UIPFU-77. +* Add "User assignment status" filter group. Refs UIPFU-77. ## [7.0.0](https://github.com/folio-org/ui-plugin-find-user/tree/v7.0.0) (2023-10-12) [Full Changelog](https://github.com/folio-org/ui-plugin-find-user/compare/v6.3.0...v7.0.0) From 5b390ff3ccabcfe4bd317b987572e0abe7bad280 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 14:41:10 +0530 Subject: [PATCH 03/11] UIPFU-77 - yarn.lock --- yarn.lock | 1780 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1746 insertions(+), 34 deletions(-) diff --git a/yarn.lock b/yarn.lock index 31c1f4d..c536e4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adobe/css-tools@^4.0.1": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11" + integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -49,11 +54,45 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" +"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.6": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/core@^7.12.3", "@babel/core@^7.17.10", "@babel/core@^7.18.13", "@babel/core@^7.21.3", "@babel/core@^7.7.5", "@babel/core@^7.9.0": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" @@ -94,6 +133,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -119,6 +168,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" @@ -199,6 +259,17 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -255,6 +326,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" @@ -265,6 +341,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/helper-wrap-function@^7.22.20", "@babel/helper-wrap-function@^7.22.5": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" @@ -283,6 +364,15 @@ "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" +"@babel/helpers@^7.23.7": + version "7.23.8" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.8.tgz#fc6b2d65b16847fd50adddbd4232c76378959e34" + integrity sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" @@ -292,6 +382,20 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + "@babel/parser@^7.14.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" @@ -353,7 +457,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13": +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -416,7 +527,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-meta@^7.0.0", "@babel/plugin-syntax-import-meta@^7.10.4": +"@babel/plugin-syntax-import-meta@^7.0.0", "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -437,7 +548,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -451,7 +569,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -493,7 +611,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-top-level-await@^7.14.5": +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== @@ -507,6 +625,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" @@ -1119,7 +1244,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.22.5": +"@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -1144,6 +1269,31 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" @@ -1153,6 +1303,11 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@bigtest/convergence@^1.1.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@bigtest/convergence/-/convergence-1.1.2.tgz#1028f28378aae6876b3c07e577a2d4a320ad0acf" @@ -1408,6 +1563,26 @@ typescript "^4.9.4" webpack "^5.80.0" +"@folio/jest-config-stripes@^2.0.0": + version "2.1.10000039" + resolved "https://repository.folio.org/repository/npm-folioci/@folio/jest-config-stripes/-/jest-config-stripes-2.1.10000039.tgz#0958305bc8a50fed237974fa8042f4e1a192881c" + integrity sha512-QUmo0ifJKsYEOcJ7mqmumczQDfElO6Iourc6N9stEGRb6wa3p2UkpFidMVt924r3UcazfjZZup8iMdawLXKoRw== + dependencies: + "@jest/globals" "^29.5.0" + "@testing-library/dom" "^9.3.0" + "@testing-library/jest-dom" "^5.16.5" + "@testing-library/react" "^14.0.0" + "@testing-library/user-event" "^14.4.3" + babel-jest "^29.5.0" + babel-plugin-module-resolver "^5.0.0" + jest "^29.5.0" + jest-canvas-mock "^2.5.1" + jest-css-modules "^2.1.0" + jest-environment-jsdom "^29.5.0" + jest-junit "^16.0.0" + jest-location-mock "^1.0.9" + jsdom "^22.1.0" + "@folio/stripes-cli@^3.0.0": version "3.1.100000379" resolved "https://repository.folio.org/repository/npm-folioci/@folio/stripes-cli/-/stripes-cli-3.1.100000379.tgz#b2fe1c528fc889948a4dc2a2e88f545780a4071a" @@ -1868,6 +2043,203 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== +"@jedmao/location@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@jedmao/location/-/location-3.0.0.tgz#f2b24e937386f95252f3a1fefbf7ca2e0a4b87e9" + integrity sha512-p7mzNlgJbCioUYLUEKds3cQG4CHONVFJNYqMe6ocEtENCL/jYmMo1Q3ApwsMmU+L0ZkaDJEyv4HokaByLoPwlQ== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.5.0", "@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -1900,7 +2272,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": version "0.3.20" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== @@ -2122,11 +2494,30 @@ dependencies: dequal "^2.0.3" +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sindresorhus/is@^5.2.0": version "5.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" @@ -2259,6 +2650,54 @@ lz-string "^1.5.0" pretty-format "^27.0.2" +"@testing-library/dom@^9.0.0", "@testing-library/dom@^9.3.0": + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^5.16.5": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" + integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== + dependencies: + "@adobe/css-tools" "^4.0.1" + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + +"@testing-library/react@^14.0.0": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.1.2.tgz#a2b9e9ee87721ec9ed2d7cfc51cc04e474537c32" + integrity sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@testing-library/user-event@^14.4.3": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" @@ -2269,6 +2708,39 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.3.tgz#07570ebd25f9b516c910a91f7244052c9b58eabc" integrity sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA== +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + "@types/cookie@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.3.tgz#85bc74ba782fb7aa3a514d11767832b0e3bc6803" @@ -2314,6 +2786,13 @@ dependencies: "@types/node" "*" +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + "@types/hoist-non-react-statics@^3.0.1", "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": version "3.3.4" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.4.tgz#cc477ce0283bb9d19ea0cbfa2941fe2c8493a1be" @@ -2332,6 +2811,42 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#a3ff232bf7d5c55f38e4e45693eda2ebb545794d" integrity sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@*": + version "29.5.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" + integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.14" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" @@ -2371,6 +2886,13 @@ dependencies: parchment "^1.1.2" +"@types/react-dom@^18.0.0": + version "18.2.18" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.18.tgz#16946e6cd43971256d874bc3d0a72074bb8571dd" + integrity sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw== + dependencies: + "@types/react" "*" + "@types/react-redux@^7.1.20": version "7.1.28" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.28.tgz#30a44303c7daceb6ede9cfb4aaf72e64f1dde4de" @@ -2400,11 +2922,40 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.9" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" + integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== + dependencies: + "@types/jest" "*" + +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + "@types/warning@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.2.tgz#264f1f93a68f5dcb598db9764e40f14e13b0e630" integrity sha512-S/2+OjBIcBl8Kur23YLe0hG1e7J5m2bHfB4UuMNoLZjIFhQWhTf1FeS+WFoXHUC6QsCEfk4pftj4J1KIKC1glA== +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + "@typescript-eslint/eslint-plugin@^5.28.0": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" @@ -2654,6 +3205,14 @@ accepts@~1.3.4, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + acorn-import-assertions@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" @@ -2669,6 +3228,11 @@ acorn-walk@^8.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== +acorn-walk@^8.0.2: + version "8.3.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" + integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== + acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" @@ -2679,6 +3243,11 @@ acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +acorn@^8.1.0, acorn@^8.8.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + add-asset-html-webpack-plugin@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/add-asset-html-webpack-plugin/-/add-asset-html-webpack-plugin-5.0.2.tgz#84b33492f5ecd8458b3926f0e308a61f0aca2569" @@ -2821,7 +3390,7 @@ ansis@1.5.2: resolved "https://registry.yarnpkg.com/ansis/-/ansis-1.5.2.tgz#c9bada6ff5dd88b0b979ab8df0b51096b9dda4bb" integrity sha512-T3vUABrcgSj/HXv27P+A/JxGk5b/ydx0JjN3lgjBTC2iZUFxQGjh43zCzLSbU4C1QTgmx9oaPeWNJFM+auI8qw== -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2868,6 +3437,13 @@ aria-query@^4.2.2: "@babel/runtime" "^7.10.2" "@babel/runtime-corejs3" "^7.10.2" +aria-query@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -2975,6 +3551,11 @@ async@^3.2.2: resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + author-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" @@ -3012,6 +3593,19 @@ b4a@^1.6.4: resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9" integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== +babel-jest@^29.5.0, babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-loader@^9.1.3: version "9.1.3" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" @@ -3020,7 +3614,7 @@ babel-loader@^9.1.3: find-cache-dir "^4.0.0" schema-utils "^4.0.0" -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -3031,6 +3625,27 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-module-resolver@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.0.tgz#2b7fc176bd55da25f516abf96015617b4f70fc73" + integrity sha512-g0u+/ChLSJ5+PzYwLwP8Rp8Rcfowz58TJNCe+L/ui4rpzE/mg//JVX0EWBUYoxaextqnwuGHzfGp2hh0PPV25Q== + dependencies: + find-babel-config "^2.0.0" + glob "^8.0.3" + pkg-up "^3.1.0" + reselect "^4.1.7" + resolve "^1.22.1" + babel-plugin-polyfill-corejs2@^0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" @@ -3060,6 +3675,32 @@ babel-plugin-remove-jsx-attributes@^0.0.2: resolved "https://registry.yarnpkg.com/babel-plugin-remove-jsx-attributes/-/babel-plugin-remove-jsx-attributes-0.0.2.tgz#5174749800da5c3392ce7a61bdfa1a89120a0e9d" integrity sha512-h1Q9mbEAgcHnxsjke4foGPPDJOP3ioK1ODrorP2JW3zJdw2cxPqr2vB+AvV4xp+wx3cnOmbvRPPts3l3ywItPA== +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + balanced-match@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.1.0.tgz#b504bd05869b39259dd0c5efc35d843176dccc4a" @@ -3291,6 +3932,16 @@ browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.9, browserslist@ node-releases "^2.0.13" update-browserslist-db "^1.0.13" +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + browserstack-local@^1.3.7: version "1.5.5" resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.5.5.tgz#f36b625f3b8bfd053f673d85fd1082f2d0759693" @@ -3309,6 +3960,13 @@ browserstack@~1.5.1: dependencies: https-proxy-agent "^2.2.1" +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3410,6 +4068,11 @@ caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001541: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001558.tgz#d2c6e21fdbfe83817f70feab902421a19b7983ee" integrity sha512-/Et7DwLqpjS47JPEcz6VnxU9PwcIdVi0ciLXRWBQdj1XFye68pSQYpV0QtPTfUKWuOaEig+/Vez2l74eDc1tPQ== +caniuse-lite@^1.0.30001565: + version "1.0.30001576" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz#893be772cf8ee6056d6c1e2d07df365b9ec0a5c4" + integrity sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg== + capital-case@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" @@ -3441,6 +4104,14 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3472,6 +4143,11 @@ change-case@^4.1.1: snake-case "^3.0.4" tslib "^2.0.3" +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3522,6 +4198,11 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + classnames@^2.2.5, classnames@^2.2.6: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" @@ -3607,6 +4288,16 @@ clone@^2.1.1: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -3626,7 +4317,7 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@^1.0.0, color-name@~1.1.4: +color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -3668,6 +4359,13 @@ colorette@^2.0.10: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@8, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -3873,6 +4571,19 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + create-react-class@^15.6.0: version "15.7.0" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.7.0.tgz#7499d7ca2e69bb51d13faf59bd04f0c65a1d6c1e" @@ -3993,11 +4704,21 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssfontparser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3" + integrity sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg== + csso@^5.0.5: version "5.0.5" resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" @@ -4005,6 +4726,30 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +cssstyle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== + dependencies: + rrweb-cssom "^0.6.0" + csstype@^3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" @@ -4056,6 +4801,24 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +data-urls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.0" + date-fns@^2.16.1: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -4075,7 +4838,7 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: +debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4099,6 +4862,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.2, 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.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" @@ -4116,6 +4884,11 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + deep-diff@^0.3.5: version "0.3.8" resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" @@ -4174,7 +4947,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.3.1: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -4216,6 +4989,11 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4254,6 +5032,11 @@ detect-libc@^2.0.0, detect-libc@^2.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + detect-node@^2.0.4, detect-node@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" @@ -4264,6 +5047,16 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + diff@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -4304,7 +5097,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== @@ -4364,6 +5157,13 @@ domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" @@ -4451,6 +5251,11 @@ electron-to-chromium@^1.4.535: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz#1298b67727187ffbaac005a7425490d157f3ad03" integrity sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg== +electron-to-chromium@^1.4.601: + version "1.4.626" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.626.tgz#c20e1706354a31721b65e81496800534dd04b222" + integrity sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg== + element-is-visible@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/element-is-visible/-/element-is-visible-1.0.0.tgz#c58f3e7e747615c5528a9594ab3b948067bd5a42" @@ -4469,6 +5274,11 @@ elliptic@^6.5.3, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4774,6 +5584,22 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +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" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + eslint-config-airbnb-base@^14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" @@ -5011,7 +5837,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5086,11 +5912,42 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + express@^4.14.0, express@^4.17.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -5185,7 +6042,7 @@ fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5234,6 +6091,13 @@ favicons@^7.1.2: sharp "^0.32.4" xml2js "^0.6.1" +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5308,6 +6172,14 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +find-babel-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.0.0.tgz#a8216f825415a839d0f23f4d18338a1cc966f701" + integrity sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw== + dependencies: + json5 "^2.1.1" + path-exists "^4.0.0" + find-cache-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -5433,6 +6305,15 @@ form-data-encoder@^2.1.2: resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -5507,7 +6388,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -5572,7 +6453,7 @@ get-stdin@^6.0.0: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== -get-stream@^6.0.1: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -5633,6 +6514,17 @@ glob@^7.0.5, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -5758,6 +6650,11 @@ handlebars@^4.7.7: optionalDependencies: uglify-js "^3.1.4" +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -5890,6 +6787,13 @@ hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react- dependencies: react-is "^16.7.0" +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + html-entities@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" @@ -5950,6 +6854,15 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -5983,6 +6896,11 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5990,7 +6908,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -6002,6 +6920,13 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== + dependencies: + harmony-reflect "^1.4.6" + ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -6040,6 +6965,14 @@ import-lazy@^4.0.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== +import-local@^3.0.2: + 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" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6230,6 +7163,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6316,6 +7254,11 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" @@ -6482,6 +7425,17 @@ istanbul-lib-instrument@^5.0.4: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-processinfo@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" @@ -6523,7 +7477,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2, istanbul-reports@^3.1.4: +istanbul-reports@^3.0.2, istanbul-reports@^3.1.3, istanbul-reports@^3.1.4: version "3.1.6" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== @@ -6531,6 +7485,406 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.1.4: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jest-canvas-mock@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz#7e21ebd75e05ab41c890497f6ba8a77f915d2ad6" + integrity sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A== + dependencies: + cssfontparser "^1.2.1" + moo-color "^1.0.2" + +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" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-css-modules@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/jest-css-modules/-/jest-css-modules-2.1.0.tgz#9c25ebe9d0214d8f55861a442268fdd4b01b4781" + integrity sha512-my3Scnt6l2tOll/eGwNZeh1KLAFkNzdl4MyZRdpl46GO6/93JcKKdTjNqK6Nokg8A8rT84MFLOpY1pzqKBEqMw== + dependencies: + identity-obj-proxy "3.0.0" + +jest-diff@^27.0.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-jsdom@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jsdom "^20.0.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-junit@^16.0.0: + version "16.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-16.0.0.tgz#d838e8c561cf9fdd7eb54f63020777eee4136785" + integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== + dependencies: + mkdirp "^1.0.4" + strip-ansi "^6.0.1" + uuid "^8.3.2" + xml "^1.0.1" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-location-mock@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/jest-location-mock/-/jest-location-mock-1.0.10.tgz#c6744e5a4bd88524c0a02ee989bc141fa7e2cdc7" + integrity sha512-g5u0rDOaj1I/lWuPOOP6xfpY+O958IcOanwPKnHdfWm0l4Y2sdVmwXMPY9fT5s8D9nX44Zl/Ypmk6B88mDoqZQ== + dependencies: + "@jedmao/location" "^3.0.0" + jest-diff "^27.0.1" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -6540,6 +7894,26 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + jiti@^1.18.2: version "1.20.0" resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.20.0.tgz#2d823b5852ee8963585c8dd8b7992ffc1ae83b42" @@ -6570,6 +7944,67 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + +jsdom@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" + integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== + dependencies: + abab "^2.0.6" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.4" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -6628,7 +8063,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.3: +json5@^2.1.1, json5@^2.1.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -6799,6 +8234,11 @@ kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + kopy@^9.4.2: version "9.4.2" resolved "https://registry.yarnpkg.com/kopy/-/kopy-9.4.2.tgz#643dc142b915c65204b95fa9424a48ad523f4557" @@ -6833,6 +8273,11 @@ latest-version@^7.0.0: dependencies: package-json "^8.1.0" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -7093,6 +8538,13 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" @@ -7203,7 +8655,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -7240,6 +8692,11 @@ mimic-response@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + mini-css-extract-plugin@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" @@ -7273,6 +8730,13 @@ minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1" @@ -7405,6 +8869,13 @@ moment@^2.29.4: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moo-color@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/moo-color/-/moo-color-1.0.3.tgz#d56435f8359c8284d83ac58016df7427febece74" + integrity sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ== + dependencies: + color-name "^1.1.4" + morgan@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" @@ -7515,6 +8986,11 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + node-object-hash@^1.2.0: version "1.4.2" resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-1.4.2.tgz#385833d85b229902b75826224f6077be969a9e94" @@ -7532,6 +9008,11 @@ node-releases@^2.0.13: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -7557,6 +9038,13 @@ normalize.css@^8.0.1: resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -7574,6 +9062,11 @@ null-check@^1.0.0: resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" integrity sha512-j8ZNHg19TyIQOWCGeeQJBuu6xZYIEurf8M1Qsfd8mFrGEfIZytbw18YjKWg+LcO25NowXGZXZpKAx+Ui3TFfDw== +nwsapi@^2.2.2, nwsapi@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + nyc@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" @@ -7706,7 +9199,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7778,7 +9271,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -7917,7 +9410,7 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@^7.1.1: +parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== @@ -7970,7 +9463,7 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== -path-key@^3.1.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -8025,7 +9518,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8045,7 +9538,7 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.5: +pirates@^4.0.4, pirates@^4.0.5: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== @@ -8057,7 +9550,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -8071,6 +9564,13 @@ pkg-dir@^7.0.0: dependencies: find-up "^6.3.0" +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + popper.js@^1.14.6, popper.js@^1.16.1: version "1.16.1" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -8084,7 +9584,7 @@ postcss-calc@^9.0.1: postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" -"postcss-color-function@github:folio-org/postcss-color-function": +postcss-color-function@folio-org/postcss-color-function: version "4.1.0" resolved "https://codeload.github.com/folio-org/postcss-color-function/tar.gz/c128aad740ae740fb571c4b6493f467dd51efe85" dependencies: @@ -8244,7 +9744,7 @@ pretty-error@^4.0.0: lodash "^4.17.20" renderkid "^3.0.0" -pretty-format@^27.0.2: +pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -8253,6 +9753,15 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + process-on-spawn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" @@ -8270,6 +9779,14 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + prop-types-extra@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" @@ -8337,6 +9854,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +punycode@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + pupa@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" @@ -8344,6 +9866,11 @@ pupa@^3.1.0: dependencies: escape-goat "^4.0.0" +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + q@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -8575,6 +10102,11 @@ react-is@^17.0.1, react-is@^17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -8732,6 +10264,14 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redux-form@^8.3.0: version "8.3.10" resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-8.3.10.tgz#335657fafd4b26b91b4ce65371cd9dabe3648158" @@ -8899,11 +10439,23 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +reselect@^4.1.7: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" @@ -8936,7 +10488,12 @@ resolve-pkg@^1.0.0: dependencies: resolve-from "^2.0.0" -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.22.0, resolve@^1.22.4: +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.1.7, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -9023,6 +10580,11 @@ route-recognizer@^0.3.3: resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3" integrity sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g== +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + rtl-detect@^1.0.2: version "1.1.2" resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.1.2.tgz#ca7f0330af5c6bb626c15675c642ba85ad6273c6" @@ -9093,6 +10655,13 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -9281,7 +10850,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -9325,6 +10894,11 @@ sirv@^2.0.3: mrmime "^1.0.0" totalist "^3.0.0" +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -9394,6 +10968,14 @@ source-map-loader@^4.0.0: iconv-lite "^0.6.3" source-map-js "^1.0.2" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@^0.5.16, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -9453,6 +11035,13 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + stackframe@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" @@ -9512,6 +11101,14 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9610,6 +11207,18 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -9685,6 +11294,11 @@ symbol-observable@^4.0.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + table@^6.0.9: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" @@ -9826,6 +11440,11 @@ tmp@^0.2.1: dependencies: rimraf "^3.0.0" +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -9853,7 +11472,7 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tough-cookie@^4.1.3: +tough-cookie@^4.1.2, tough-cookie@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -9863,6 +11482,20 @@ tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -9927,7 +11560,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-detect@^4.0.0, type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -10256,6 +11889,15 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -10271,6 +11913,20 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + warning@^4.0.0, warning@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" @@ -10298,6 +11954,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + webpack-bundle-analyzer@^4.4.2: version "4.9.1" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d" @@ -10403,6 +12064,34 @@ webpack@^5.80.0: watchpack "^2.4.0" webpack-sources "^3.2.3" +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^12.0.0, whatwg-url@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -10530,11 +12219,24 @@ write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + ws@^7.3.1: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.11.0, ws@^8.13.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + ws@~8.11.0: version "8.11.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" @@ -10550,6 +12252,11 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xml2js@^0.6.1: version "0.6.2" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" @@ -10573,6 +12280,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" From a309cc4425b6b0886778f2462cc1909e07baa899 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 15:22:29 +0530 Subject: [PATCH 04/11] UIPFU-77 - update test script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3bf728a..a2e8d72 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "build-mod-descriptor": "stripes mod descriptor --full --strict | jq '.[]' > module-descriptor.json ", "formatjs-compile": "formatjs compile-folder --ast --format simple ./translations/ui-plugin-find-user ./translations/ui-plugin-find-user/compiled", "test": "stripes test karma", - "test:jest": "yarn run jest" + "test:jest": "jest --ci --coverage --colors" }, "okapiInterfaces": { "users": "16.0", From e5287a2e641c413e129cbdeabbb9b5fc731a5541 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 17:56:30 +0530 Subject: [PATCH 05/11] UIPFU-77 - refine complexity --- src/utils.js | 98 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 34 deletions(-) diff --git a/src/utils.js b/src/utils.js index e352d8c..423657e 100644 --- a/src/utils.js +++ b/src/utils.js @@ -41,47 +41,77 @@ export const updateResourceData = (rData) => { return newRData; }; +const filterUsersList = (filterString, initialSelectedUsers, users, filterCheck) => { + let usersList; + if (filterString === `${ASSIGNED}`) { + const assignedUsers = Object.values(initialSelectedUsers); + if (filterCheck) { + usersList = assignedUsers.filter(u => filterCheck(u)); + } else { + usersList = assignedUsers; + } + } else if (filterString === `${UNASSIGNED}`) { + const assignedUserIds = Object.keys(initialSelectedUsers); + if (filterCheck) { + usersList = users.filter(u => !assignedUserIds.includes(u.id) && (filterCheck(u))); + } else { + usersList = users.filter(u => !assignedUserIds.includes(u.id)); + } + } + return usersList; +}; + // eslint-disable-next-line consistent-return export const getUsersBasedOnAssignmentStatus = (activeFilterState, uasFilterValue, initialSelectedUsers, users) => { const condForOneOfTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) || activeFilterState?.pg?.includes(u.patronGroup); const condForBothTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) && activeFilterState?.pg?.includes(u.patronGroup); - if (uasFilterValue[0] === `${ASSIGNED}`) { - // when ONLY "Assigned" filter is selected - const assignedUsers = Object.values(initialSelectedUsers); - if (Object.keys(activeFilterState).length === 1) { - return assignedUsers; - } - // several filters are selected - // filter users based on the filter group values in place + // if (uasFilterValue[0] === `${ASSIGNED}`) { + // // when ONLY "Assigned" filter is selected + // const assignedUsers = Object.values(initialSelectedUsers); + // if (Object.keys(activeFilterState).length === 1) { + // return assignedUsers; + // } + // // several filters are selected + // // filter users based on the filter group values in place - // when "Assigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups - if (Object.keys(activeFilterState).length === 2) { - const filteredAssignedUsers = assignedUsers.filter(u => condForOneOfTheFilters(u)); - return filteredAssignedUsers; - } + // // when "Assigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups + // if (Object.keys(activeFilterState).length === 2) { + // const filteredAssignedUsers = assignedUsers.filter(u => condForOneOfTheFilters(u)); + // return filteredAssignedUsers; + // } - // when filters from all the filter groups are selected - const filteredAssignedUsers = assignedUsers.filter(u => condForBothTheFilters(u)); - return filteredAssignedUsers; - } - if (uasFilterValue[0] === `${UNASSIGNED}`) { - // when ONLY "Unassigned" filter is selected - const assignedUserIds = Object.keys(initialSelectedUsers); - if (Object.keys(activeFilterState).length === 1) { - const filteredUsers = users.filter(u => !assignedUserIds.includes(u.id)); - return filteredUsers; - } - // several filters are selected - // filter users based on the filter group values in place + // // when filters from all the filter groups are selected + // const filteredAssignedUsers = assignedUsers.filter(u => condForBothTheFilters(u)); + // return filteredAssignedUsers; + // } + // if (uasFilterValue[0] === `${UNASSIGNED}`) { + // // when ONLY "Unassigned" filter is selected + // const assignedUserIds = Object.keys(initialSelectedUsers); + // if (Object.keys(activeFilterState).length === 1) { + // const filteredUsers = users.filter(u => !assignedUserIds.includes(u.id)); + // return filteredUsers; + // } + // // several filters are selected + // // filter users based on the filter group values in place - // when "UnAssigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups - if (Object.keys(activeFilterState).length === 2) { - const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForOneOfTheFilters(u))); - return filteredAssignedUsers; - } + // // when "UnAssigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups + // if (Object.keys(activeFilterState).length === 2) { + // const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForOneOfTheFilters(u))); + // return filteredAssignedUsers; + // } + + // // when filters from all the filter groups are selected + // const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForBothTheFilters(u))); + // return filteredAssignedUsers; + // } - // when filters from all the filter groups are selected - const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForBothTheFilters(u))); - return filteredAssignedUsers; + let usersList; + if (Object.keys(activeFilterState).length === 1) { + usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users); + } else if (Object.keys(activeFilterState).length === 2) { + usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users, condForOneOfTheFilters); + } else { + usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users, condForBothTheFilters); } + return usersList; }; From a7bba68b39e9f892b6d2f35014d5eeb0a7f88f08 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 18:04:28 +0530 Subject: [PATCH 06/11] UIPFU-77 - cleanup --- src/UserSearchView.js | 2 +- src/utils.js | 39 --------------------------------------- 2 files changed, 1 insertion(+), 40 deletions(-) diff --git a/src/UserSearchView.js b/src/UserSearchView.js index 4792963..522cf19 100644 --- a/src/UserSearchView.js +++ b/src/UserSearchView.js @@ -297,7 +297,7 @@ class UserSearchView extends React.Component { const getContentData = () => { const activeFilterState = activeFilters?.state; - const isUasFilterGroupActive = {}.hasOwnProperty.call(activeFilterState, UAS); + const isUasFilterGroupActive = Object.hasOwn(activeFilterState, UAS); const uasFilterValue = activeFilterState.uas; if (isUasFilterGroupActive && uasFilterValue.length === 1) { diff --git a/src/utils.js b/src/utils.js index 423657e..c745e9c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -65,45 +65,6 @@ const filterUsersList = (filterString, initialSelectedUsers, users, filterCheck) export const getUsersBasedOnAssignmentStatus = (activeFilterState, uasFilterValue, initialSelectedUsers, users) => { const condForOneOfTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) || activeFilterState?.pg?.includes(u.patronGroup); const condForBothTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) && activeFilterState?.pg?.includes(u.patronGroup); - // if (uasFilterValue[0] === `${ASSIGNED}`) { - // // when ONLY "Assigned" filter is selected - // const assignedUsers = Object.values(initialSelectedUsers); - // if (Object.keys(activeFilterState).length === 1) { - // return assignedUsers; - // } - // // several filters are selected - // // filter users based on the filter group values in place - - // // when "Assigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups - // if (Object.keys(activeFilterState).length === 2) { - // const filteredAssignedUsers = assignedUsers.filter(u => condForOneOfTheFilters(u)); - // return filteredAssignedUsers; - // } - - // // when filters from all the filter groups are selected - // const filteredAssignedUsers = assignedUsers.filter(u => condForBothTheFilters(u)); - // return filteredAssignedUsers; - // } - // if (uasFilterValue[0] === `${UNASSIGNED}`) { - // // when ONLY "Unassigned" filter is selected - // const assignedUserIds = Object.keys(initialSelectedUsers); - // if (Object.keys(activeFilterState).length === 1) { - // const filteredUsers = users.filter(u => !assignedUserIds.includes(u.id)); - // return filteredUsers; - // } - // // several filters are selected - // // filter users based on the filter group values in place - - // // when "UnAssigned" from "User Assignment Status" filter group along with some other filter in one of the other filter groups - // if (Object.keys(activeFilterState).length === 2) { - // const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForOneOfTheFilters(u))); - // return filteredAssignedUsers; - // } - - // // when filters from all the filter groups are selected - // const filteredAssignedUsers = users.filter(u => !assignedUserIds.includes(u.id) && (condForBothTheFilters(u))); - // return filteredAssignedUsers; - // } let usersList; if (Object.keys(activeFilterState).length === 1) { From 5ad35b64736552e92ad5de103ea9c4a0e2dd4846 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Wed, 10 Jan 2024 18:23:14 +0530 Subject: [PATCH 07/11] UIPFU-77 - add comments --- src/utils.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/utils.js b/src/utils.js index c745e9c..3220450 100644 --- a/src/utils.js +++ b/src/utils.js @@ -46,15 +46,20 @@ const filterUsersList = (filterString, initialSelectedUsers, users, filterCheck) if (filterString === `${ASSIGNED}`) { const assignedUsers = Object.values(initialSelectedUsers); if (filterCheck) { + // "Assigned" filter along with one or more other filters from other filter groups are selected usersList = assignedUsers.filter(u => filterCheck(u)); } else { + // when ONLY "Assigned" filter is selected usersList = assignedUsers; } } else if (filterString === `${UNASSIGNED}`) { + // when ONLY "Unassigned" filter is selected const assignedUserIds = Object.keys(initialSelectedUsers); if (filterCheck) { + // "Unassigned" filter along with one or more other filters from other filter groups are selected usersList = users.filter(u => !assignedUserIds.includes(u.id) && (filterCheck(u))); } else { + // when ONLY "Unassigned" filter is selected usersList = users.filter(u => !assignedUserIds.includes(u.id)); } } From a016d97a022441f6c65f5f5de535febf956d23ec Mon Sep 17 00:00:00 2001 From: Priyanka Date: Thu, 11 Jan 2024 17:42:33 +0530 Subject: [PATCH 08/11] UIPFU-77 - fix review comments --- src/UserSearchContainer.js | 51 +++- src/UserSearchView.js | 18 +- src/constants.js | 8 +- src/utils.js | 55 +--- src/utils.test.js | 566 +------------------------------------ 5 files changed, 61 insertions(+), 637 deletions(-) diff --git a/src/UserSearchContainer.js b/src/UserSearchContainer.js index f3abd26..af49c96 100644 --- a/src/UserSearchContainer.js +++ b/src/UserSearchContainer.js @@ -10,7 +10,11 @@ import { import filterConfig, { filterConfigWithUserAssignedStatus } from './filterConfig'; import { updateResourceData } from './utils'; -import { UAS } from './constants'; +import { + ASSIGNED_FILTER_KEY, + UNASSIGNED_FILTER_KEY, + UAS, +} from './constants'; const INITIAL_RESULT_COUNT = 30; const RESULT_COUNT_INCREMENT = 30; @@ -36,7 +40,7 @@ const compileQuery = template( export function buildQuery(queryParams, pathComponents, resourceData, logger, props) { const filters = props.initialSelectedUsers ? filterConfigWithUserAssignedStatus : filterConfig; - const updatedResourceData = props.initialSelectedUsers && resourceData?.query?.filters?.substring(`${UAS}`) ? updateResourceData(resourceData) : resourceData; + const updatedResourceData = props.initialSelectedUsers && resourceData?.query?.filters?.includes(`${UAS}`) ? updateResourceData(resourceData) : resourceData; return makeQueryFunction( 'cql.allRecords=1', @@ -120,6 +124,7 @@ class UserSearchContainer extends React.Component { */ // eslint-disable-next-line react/no-unused-prop-types tenantId: PropTypes.string.isRequired, + initialSelectedUsers: PropTypes.object, } constructor(props) { @@ -175,6 +180,46 @@ class UserSearchContainer extends React.Component { return get(this.props.resources, 'query', {}); } + getUsers = () => { + const { + resources, + initialSelectedUsers, + } = this.props; + const fetchedUsers = get(resources, 'records.records', []); + const activeFilters = get(resources, 'query.filters', ''); + + if (activeFilters.includes(`${UAS}`)) { + const assignedUsers = Object.values(initialSelectedUsers); + const assignedUserIds = Object.keys(initialSelectedUsers); + const hasBothUASFilters = activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); + const hasNoneOfUASFilters = !activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && !activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); + + if (hasBothUASFilters || hasNoneOfUASFilters) { + return fetchedUsers; + } + const uasFilterValue = activeFilters.split(',').filter(f => f.includes(`${UAS}`))[0].split('.')[1]; + + let otherFilterGroups = activeFilters.split(',').filter(f => !f.includes(`${UAS}`)).map(f => f.split('.')[0]); + if (otherFilterGroups.indexOf('pg') !== -1) { + otherFilterGroups = otherFilterGroups.with(otherFilterGroups.indexOf('pg'), 'patronGroup'); + } + + let otherFilterValues = activeFilters.split(',').filter(f => !f.includes(`${UAS}`)).map(f => f.split('.')[1]); + if (otherFilterValues.indexOf('active') !== -1) { + otherFilterValues = otherFilterValues.with(otherFilterValues.indexOf('active'), true); + } + + if (uasFilterValue === 'Assigned') { + if (!otherFilterGroups.length) return assignedUsers; + return assignedUsers.filter(u => otherFilterGroups.every((g, i) => u[g] === otherFilterValues[i])); + } + const unAssignedUsers = fetchedUsers.filter(u => !assignedUserIds.includes(u.id)); + if (!otherFilterGroups.length) return unAssignedUsers; + return unAssignedUsers.filter(u => otherFilterGroups.every((g, i) => u[g] === otherFilterValues[i])); + } + return fetchedUsers; + } + render() { const { resources, @@ -195,7 +240,7 @@ class UserSearchContainer extends React.Component { resultOffset, data: { patronGroups: (resources.patronGroups || {}).records || [], - users: get(resources, 'records.records', []), + users: this.getUsers(), }, }); } diff --git a/src/UserSearchView.js b/src/UserSearchView.js index 522cf19..8f21bdd 100644 --- a/src/UserSearchView.js +++ b/src/UserSearchView.js @@ -24,8 +24,6 @@ import { SearchAndSortSearchButton as FilterPaneToggle, } from '@folio/stripes/smart-components'; -import { UAS } from './constants'; -import { getUsersBasedOnAssignmentStatus } from './utils'; import filterConfig, { filterConfigWithUserAssignedStatus } from './filterConfig'; import Filters from './Filters'; @@ -295,19 +293,6 @@ class UserSearchView extends React.Component { return true; }; - const getContentData = () => { - const activeFilterState = activeFilters?.state; - const isUasFilterGroupActive = Object.hasOwn(activeFilterState, UAS); - const uasFilterValue = activeFilterState.uas; - - if (isUasFilterGroupActive && uasFilterValue.length === 1) { - const filteredUsers = getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users); - return filteredUsers; - } - // when both 'Assigned' and 'Unassigned' filters are applied or both are not applied - return users; - }; - return ( {intl => ( @@ -377,7 +362,8 @@ class UserSearchView extends React.Component { { const newRData = cloneDeep(rData); if (filterString === `${UNASSIGNED_FILTER_KEY}` || filterString === `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}` || filterString === `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`) { /* - * When Unassigned filter is selected on 'User assigbment Status' filter group, with no other filter from other groups, + * When Unassigned filter is selected on 'User assignment Status' filter group, with no other filter from other groups, * fetch all the user records. The filter string is adjusted to include both active and inactive status filters. This will result in (cql.allRecords=1) * * The same applies when both Assigned and Unassigned are selected in any sequential order. @@ -24,60 +20,19 @@ export const updateResourceData = (rData) => { newRData.query.filters = alteredfilters; } else if (filterString.includes(`${UNASSIGNED_FILTER_KEY}`)) { /* - * When UnAssigned filter is selected incombination with any other filters(in other filter groups), - * filter astring for Unassigned is removed and th erest of the filter string is propagated to makeQueryFunction. + * When UnAssigned filter is selected in combination with any other filters, + * filter a string for Unassigned is removed and the rest of the filter string is propagated to makeQueryFunction. */ const alteredfilters = newRData.query.filters.split(',').filter(str => !str.startsWith(`${UAS}`)).join(','); newRData.query.filters = alteredfilters; } else if (filterString.includes(`${ASSIGNED_FILTER_KEY}`)) { /* - * When Assigned filter is selected on 'User assigbment Status' filter group, in any combination of filters in other filter groups, + * When Assigned filter is selected on 'User assignment Status' filter group, in any combination of filters in other filter groups, * cql formation is not needed. - * hence remove aus filter before propagating it further to makeQueryFunction + * hence remove uas filter before propagating it further to makeQueryFunction */ const alteredfilters = ''; newRData.query.filters = alteredfilters; } return newRData; }; - -const filterUsersList = (filterString, initialSelectedUsers, users, filterCheck) => { - let usersList; - if (filterString === `${ASSIGNED}`) { - const assignedUsers = Object.values(initialSelectedUsers); - if (filterCheck) { - // "Assigned" filter along with one or more other filters from other filter groups are selected - usersList = assignedUsers.filter(u => filterCheck(u)); - } else { - // when ONLY "Assigned" filter is selected - usersList = assignedUsers; - } - } else if (filterString === `${UNASSIGNED}`) { - // when ONLY "Unassigned" filter is selected - const assignedUserIds = Object.keys(initialSelectedUsers); - if (filterCheck) { - // "Unassigned" filter along with one or more other filters from other filter groups are selected - usersList = users.filter(u => !assignedUserIds.includes(u.id) && (filterCheck(u))); - } else { - // when ONLY "Unassigned" filter is selected - usersList = users.filter(u => !assignedUserIds.includes(u.id)); - } - } - return usersList; -}; - -// eslint-disable-next-line consistent-return -export const getUsersBasedOnAssignmentStatus = (activeFilterState, uasFilterValue, initialSelectedUsers, users) => { - const condForOneOfTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) || activeFilterState?.pg?.includes(u.patronGroup); - const condForBothTheFilters = (u) => activeFilterState?.active?.includes(u.active ? `${ACTIVE}` : `${INACTIVE}`) && activeFilterState?.pg?.includes(u.patronGroup); - - let usersList; - if (Object.keys(activeFilterState).length === 1) { - usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users); - } else if (Object.keys(activeFilterState).length === 2) { - usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users, condForOneOfTheFilters); - } else { - usersList = filterUsersList(uasFilterValue[0], initialSelectedUsers, users, condForBothTheFilters); - } - return usersList; -}; diff --git a/src/utils.test.js b/src/utils.test.js index c1c6dd3..3db5bd7 100644 --- a/src/utils.test.js +++ b/src/utils.test.js @@ -1,4 +1,4 @@ -import { updateResourceData, getUsersBasedOnAssignmentStatus } from './utils'; +import { updateResourceData } from './utils'; import { UNASSIGNED_FILTER_KEY, ASSIGNED_FILTER_KEY } from './constants'; describe('updatedResourceData', () => { @@ -38,7 +38,7 @@ describe('updatedResourceData', () => { }); }); - describe('when Assigned filter is selected with or without combonation of filters from other filter groups', () => { + describe('when Assigned filter is selected with or without combination of filters from other filter groups', () => { it('should remove filter string', () => { const resourceData = { query: { @@ -55,565 +55,3 @@ describe('updatedResourceData', () => { }); }); }); - -describe('getUsersBasedOnAssignmentStatus', () => { - describe('when ONLY Assigned filter is selected', () => { - it('should return assigned users', () => { - const activeFilterState = { uas: ['Assigned'] }; - const uasFilterValue = ['Assigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = []; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(initialSelectedUsers)); - }); - }); - - describe('when Assigned filter is selected along with other filters from one of the other filter groups', () => { - it('should filter active filters from assigned users', () => { - const activeFilterState = { uas: ['Assigned'], active: ['active'] }; - const uasFilterValue = ['Assigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = []; - const expectedAssignedUsers = [initialSelectedUsers['7daa365a-d8c1-4e5d-90ac-ab38f8230827']]; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedAssignedUsers)); - }); - }); - - describe('when Assigned filter is selected along with filters from other filter groups', () => { - it('should filter assigned user based on the filters from other filter groups - status and patrongroup', () => { - const activeFilterState = { uas: ['Assigned'], active: ['active'], pg: ['3684a786-6671-4268-8ed0-9db82ebca60b'] }; - const uasFilterValue = ['Assigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = []; - const expectedAssignedUsers = [initialSelectedUsers['7daa365a-d8c1-4e5d-90ac-ab38f8230827']]; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedAssignedUsers)); - }); - }); - - describe('when ONLY Unassigned filter is selected', () => { - it('should filter unassigned users from the list of users and return the rest', () => { - const activeFilterState = { uas: ['Unassigned'] }; - const uasFilterValue = ['Unassigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = [ - { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - }, - { - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - } - ]; - const expectedUnAssignedUsers = [{ - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - }]; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); - }); - }); - - describe('when Unassigned filter is selected along with one of the filrers from other filter groups', () => { - it('should filter unassigned users based on the the filter', () => { - const activeFilterState = { uas: ['Unassigned'], active: ['active'] }; - const uasFilterValue = ['Unassigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = [ - { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - }, - { - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - } - ]; - const expectedUnAssignedUsers = [{ - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - }]; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); - }); - }); - - describe('when Unassigned filter is selected along with filters from other filter groups', () => { - it('should filter assigned user based on the filters from other filter groups - status and patrongroup', () => { - const activeFilterState = { uas: ['Unassigned'], active: ['active'], pg: ['ad0bc554-d5bc-463c-85d1-5562127ae91b'] }; - const uasFilterValue = ['Unassigned']; - const initialSelectedUsers = { - '7daa365a-d8c1-4e5d-90ac-ab38f8230827': { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - } - }; - const users = [ - { - 'username': 'acq-admin', - 'id': '7daa365a-d8c1-4e5d-90ac-ab38f8230827', - 'barcode': '1704852123910366583', - 'active': true, - 'type': 'patron', - 'departments': [], - 'proxyFor': [], - 'createdDate': '2024-01-10T02:02:03.939+00:00', - 'updatedDate': '2024-01-10T02:02:03.939+00:00', - 'metadata': { - 'createdDate': '2024-01-10T02:02:03.936+00:00', - 'createdByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b', - 'updatedDate': '2024-01-10T02:02:03.936+00:00', - 'updatedByUserId': '4074b75e-5c13-5dde-b78c-b07a420c6e3b' - }, - 'personal': { - 'lastName': 'Admin', - 'firstName': 'acq-admin', - 'addresses': [] - }, - 'patronGroup': '3684a786-6671-4268-8ed0-9db82ebca60b', - 'fullName': 'Admin, acq-admin', - 'groupName': 'staff' - }, - { - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - } - ]; - const expectedUnAssignedUsers = [{ - 'username': 'devonte', - 'id': 'a208cf17-a7f0-452d-ae0e-64011232c86d', - 'barcode': '745758690367580', - 'active': true, - 'type': 'patron', - 'patronGroup': 'ad0bc554-d5bc-463c-85d1-5562127ae91b', - 'departments': [], - 'proxyFor': [], - 'personal': { - 'lastName': 'Abbott', - 'firstName': 'Candace', - 'middleName': 'Fanny', - 'email': 'guy@lemke-llc.ok.us', - 'phone': '(136)082-4680 x8231', - 'mobilePhone': '(436)763-7413', - 'dateOfBirth': '1986-06-26T00:00:00.000+00:00', - 'addresses': [ - { - 'countryId': 'US', - 'addressLine1': '43069 Lobby', - 'city': 'Seal Beach', - 'region': 'NC', - 'postalCode': '35848-5877', - 'addressTypeId': '93d3d88d-499b-45d0-9bc7-ac73c3a19880', - 'primaryAddress': true - } - ], - 'preferredContactTypeId': '002' - }, - 'enrollmentDate': '2015-08-28T00:00:00.000+00:00', - 'expirationDate': '2026-01-01T23:59:59.000+00:00', - 'createdDate': '2024-01-10T07:32:22.263+00:00', - 'updatedDate': '2024-01-10T07:32:22.263+00:00', - 'metadata': { - 'createdDate': '2024-01-10T01:51:44.010+00:00', - 'updatedDate': '2024-01-10T07:32:22.260+00:00', - 'updatedByUserId': '43470c3d-1823-4b99-a24f-143728fc894a' - }, - 'tags': { - 'tagList': [] - }, - 'customFields': {} - }]; - expect(getUsersBasedOnAssignmentStatus(activeFilterState, uasFilterValue, initialSelectedUsers, users)).toMatchObject(Object.values(expectedUnAssignedUsers)); - }); - }); -}); From a3adb922d8ae2357042b8b9cab0e45d31c764519 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Thu, 11 Jan 2024 21:30:24 +0530 Subject: [PATCH 09/11] UIPFU-77 - fix review comments --- src/UserSearchContainer.js | 26 ++++++++------------------ src/UserSearchView.js | 3 +-- src/constants.js | 5 +---- src/utils.js | 14 +------------- src/utils.test.js | 4 ++-- 5 files changed, 13 insertions(+), 39 deletions(-) diff --git a/src/UserSearchContainer.js b/src/UserSearchContainer.js index af49c96..fc0c450 100644 --- a/src/UserSearchContainer.js +++ b/src/UserSearchContainer.js @@ -14,6 +14,7 @@ import { ASSIGNED_FILTER_KEY, UNASSIGNED_FILTER_KEY, UAS, + ASSIGNED, } from './constants'; const INITIAL_RESULT_COUNT = 30; @@ -187,35 +188,24 @@ class UserSearchContainer extends React.Component { } = this.props; const fetchedUsers = get(resources, 'records.records', []); const activeFilters = get(resources, 'query.filters', ''); + const assignedUsers = Object.values(initialSelectedUsers); + + if (activeFilters === `${ASSIGNED_FILTER_KEY}`) return assignedUsers; if (activeFilters.includes(`${UAS}`)) { - const assignedUsers = Object.values(initialSelectedUsers); const assignedUserIds = Object.keys(initialSelectedUsers); const hasBothUASFilters = activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); const hasNoneOfUASFilters = !activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && !activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); + const uasFilterValue = activeFilters.split(',').filter(f => f.includes(`${UAS}`))[0].split('.')[1]; if (hasBothUASFilters || hasNoneOfUASFilters) { return fetchedUsers; } - const uasFilterValue = activeFilters.split(',').filter(f => f.includes(`${UAS}`))[0].split('.')[1]; - - let otherFilterGroups = activeFilters.split(',').filter(f => !f.includes(`${UAS}`)).map(f => f.split('.')[0]); - if (otherFilterGroups.indexOf('pg') !== -1) { - otherFilterGroups = otherFilterGroups.with(otherFilterGroups.indexOf('pg'), 'patronGroup'); - } - - let otherFilterValues = activeFilters.split(',').filter(f => !f.includes(`${UAS}`)).map(f => f.split('.')[1]); - if (otherFilterValues.indexOf('active') !== -1) { - otherFilterValues = otherFilterValues.with(otherFilterValues.indexOf('active'), true); - } - if (uasFilterValue === 'Assigned') { - if (!otherFilterGroups.length) return assignedUsers; - return assignedUsers.filter(u => otherFilterGroups.every((g, i) => u[g] === otherFilterValues[i])); + if (uasFilterValue === `${ASSIGNED}`) { + return fetchedUsers.filter(u => assignedUserIds.includes(u.id)); } - const unAssignedUsers = fetchedUsers.filter(u => !assignedUserIds.includes(u.id)); - if (!otherFilterGroups.length) return unAssignedUsers; - return unAssignedUsers.filter(u => otherFilterGroups.every((g, i) => u[g] === otherFilterValues[i])); + return fetchedUsers.filter(u => !assignedUserIds.includes(u.id)); } return fetchedUsers; } diff --git a/src/UserSearchView.js b/src/UserSearchView.js index 8f21bdd..ebbdc07 100644 --- a/src/UserSearchView.js +++ b/src/UserSearchView.js @@ -207,7 +207,7 @@ class UserSearchView extends React.Component { const builtVisibleColumns = isMultiSelect ? ['isChecked', ...visibleColumns] : visibleColumns; const query = queryGetter ? queryGetter() || {} : {}; - const count = source ? source.totalCount() : 0; + const count = users?.length; const sortOrder = query.sort || ''; const resultsStatusMessage = source ? (
@@ -362,7 +362,6 @@ class UserSearchView extends React.Component { { */ const alteredfilters = 'active.active,active.inactive'; newRData.query.filters = alteredfilters; - } else if (filterString.includes(`${UNASSIGNED_FILTER_KEY}`)) { - /* - * When UnAssigned filter is selected in combination with any other filters, - * filter a string for Unassigned is removed and the rest of the filter string is propagated to makeQueryFunction. - */ + } else { const alteredfilters = newRData.query.filters.split(',').filter(str => !str.startsWith(`${UAS}`)).join(','); newRData.query.filters = alteredfilters; - } else if (filterString.includes(`${ASSIGNED_FILTER_KEY}`)) { - /* - * When Assigned filter is selected on 'User assignment Status' filter group, in any combination of filters in other filter groups, - * cql formation is not needed. - * hence remove uas filter before propagating it further to makeQueryFunction - */ - const alteredfilters = ''; - newRData.query.filters = alteredfilters; } return newRData; }; diff --git a/src/utils.test.js b/src/utils.test.js index 3db5bd7..722a5d8 100644 --- a/src/utils.test.js +++ b/src/utils.test.js @@ -39,7 +39,7 @@ describe('updatedResourceData', () => { }); describe('when Assigned filter is selected with or without combination of filters from other filter groups', () => { - it('should remove filter string', () => { + it('should remove assigned filter string', () => { const resourceData = { query: { filters: `${ASSIGNED_FILTER_KEY},active.active`, @@ -48,7 +48,7 @@ describe('updatedResourceData', () => { const expectedResourceData = { query: { ...resourceData.query, - filters: '', + filters: 'active.active', }, }; expect(updateResourceData(resourceData)).toMatchObject(expectedResourceData); From 16e11ee25a102aaefc1b64df02e904ec4e854538 Mon Sep 17 00:00:00 2001 From: Priyanka Date: Fri, 12 Jan 2024 18:07:16 +0530 Subject: [PATCH 10/11] UIPFU-fix review comments --- src/UserSearchContainer.js | 14 +++++++------- src/utils.js | 4 ++-- src/utils.test.js | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/UserSearchContainer.js b/src/UserSearchContainer.js index fc0c450..2a799b3 100644 --- a/src/UserSearchContainer.js +++ b/src/UserSearchContainer.js @@ -41,7 +41,7 @@ const compileQuery = template( export function buildQuery(queryParams, pathComponents, resourceData, logger, props) { const filters = props.initialSelectedUsers ? filterConfigWithUserAssignedStatus : filterConfig; - const updatedResourceData = props.initialSelectedUsers && resourceData?.query?.filters?.includes(`${UAS}`) ? updateResourceData(resourceData) : resourceData; + const updatedResourceData = props.initialSelectedUsers && resourceData?.query?.filters?.includes(UAS) ? updateResourceData(resourceData) : resourceData; return makeQueryFunction( 'cql.allRecords=1', @@ -190,19 +190,19 @@ class UserSearchContainer extends React.Component { const activeFilters = get(resources, 'query.filters', ''); const assignedUsers = Object.values(initialSelectedUsers); - if (activeFilters === `${ASSIGNED_FILTER_KEY}`) return assignedUsers; + if (activeFilters === ASSIGNED_FILTER_KEY) return assignedUsers; - if (activeFilters.includes(`${UAS}`)) { + if (activeFilters.includes(UAS)) { const assignedUserIds = Object.keys(initialSelectedUsers); - const hasBothUASFilters = activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); - const hasNoneOfUASFilters = !activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && !activeFilters.includes(`${UNASSIGNED_FILTER_KEY}`); - const uasFilterValue = activeFilters.split(',').filter(f => f.includes(`${UAS}`))[0].split('.')[1]; + const hasBothUASFilters = activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && activeFilters.includes(UNASSIGNED_FILTER_KEY); + const hasNoneOfUASFilters = !activeFilters.includes(ASSIGNED_FILTER_KEY) && !activeFilters.includes(UNASSIGNED_FILTER_KEY); + const uasFilterValue = activeFilters.split(',').filter(f => f.includes(UAS))[0].split('.')[1]; if (hasBothUASFilters || hasNoneOfUASFilters) { return fetchedUsers; } - if (uasFilterValue === `${ASSIGNED}`) { + if (uasFilterValue === ASSIGNED) { return fetchedUsers.filter(u => assignedUserIds.includes(u.id)); } return fetchedUsers.filter(u => !assignedUserIds.includes(u.id)); diff --git a/src/utils.js b/src/utils.js index be258b3..6ebe5f2 100644 --- a/src/utils.js +++ b/src/utils.js @@ -9,7 +9,7 @@ import { export const updateResourceData = (rData) => { const filterString = rData?.query?.filters; const newRData = cloneDeep(rData); - if (filterString === `${UNASSIGNED_FILTER_KEY}` || filterString === `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}` || filterString === `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`) { + if (filterString === UNASSIGNED_FILTER_KEY || filterString === `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}` || filterString === `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`) { /* * When Unassigned filter is selected on 'User assignment Status' filter group, with no other filter from other groups, * fetch all the user records. The filter string is adjusted to include both active and inactive status filters. This will result in (cql.allRecords=1) @@ -19,7 +19,7 @@ export const updateResourceData = (rData) => { const alteredfilters = 'active.active,active.inactive'; newRData.query.filters = alteredfilters; } else { - const alteredfilters = newRData.query.filters.split(',').filter(str => !str.startsWith(`${UAS}`)).join(','); + const alteredfilters = newRData.query.filters.split(',').filter(str => !str.startsWith(UAS)).join(','); newRData.query.filters = alteredfilters; } return newRData; diff --git a/src/utils.test.js b/src/utils.test.js index 722a5d8..41d4574 100644 --- a/src/utils.test.js +++ b/src/utils.test.js @@ -3,7 +3,7 @@ import { UNASSIGNED_FILTER_KEY, ASSIGNED_FILTER_KEY } from './constants'; describe('updatedResourceData', () => { describe('when only UnAssigned filter is selected', () => { - [`${UNASSIGNED_FILTER_KEY}`, `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}`, `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`].forEach(filterStr => ( + [UNASSIGNED_FILTER_KEY, `${ASSIGNED_FILTER_KEY},${UNASSIGNED_FILTER_KEY}`, `${UNASSIGNED_FILTER_KEY},${ASSIGNED_FILTER_KEY}`].forEach(filterStr => ( it(`should remove ${filterStr} from filter string and add active and inactive filter strings`, () => { const resourceData = { query: { From 4bd8c31266f2c564031b1a81b5cf30c10f669df0 Mon Sep 17 00:00:00 2001 From: Priyanka Terala <104053200+Terala-Priyanka@users.noreply.github.com> Date: Fri, 12 Jan 2024 19:17:57 +0530 Subject: [PATCH 11/11] Update src/UserSearchContainer.js Co-authored-by: Artem Blazhko --- src/UserSearchContainer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UserSearchContainer.js b/src/UserSearchContainer.js index 2a799b3..07d1cbb 100644 --- a/src/UserSearchContainer.js +++ b/src/UserSearchContainer.js @@ -194,7 +194,7 @@ class UserSearchContainer extends React.Component { if (activeFilters.includes(UAS)) { const assignedUserIds = Object.keys(initialSelectedUsers); - const hasBothUASFilters = activeFilters.includes(`${ASSIGNED_FILTER_KEY}`) && activeFilters.includes(UNASSIGNED_FILTER_KEY); + const hasBothUASFilters = activeFilters.includes(ASSIGNED_FILTER_KEY) && activeFilters.includes(UNASSIGNED_FILTER_KEY); const hasNoneOfUASFilters = !activeFilters.includes(ASSIGNED_FILTER_KEY) && !activeFilters.includes(UNASSIGNED_FILTER_KEY); const uasFilterValue = activeFilters.split(',').filter(f => f.includes(UAS))[0].split('.')[1];