From d101d4121a3b62b02ff7df617f49e828659c777e Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 25 Sep 2024 10:14:16 +0530 Subject: [PATCH 01/33] added function to initially load 20 users and then load more users as we scroll, changed data fetching structure to fetch last user id --- users/discord/App.js | 29 +++++++++++++ users/discord/components/UsersSection.js | 53 +++++++++++++++--------- users/discord/style.css | 3 +- users/discord/utils/util.js | 9 +++- 4 files changed, 72 insertions(+), 22 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 87fa873d..404a5a54 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -19,8 +19,34 @@ const urlParams = new URLSearchParams(window.location.search); let activeTab = urlParams.get('tab') ?? 'in_discord'; let showUser = 0; +let isLoading = false; +const USERS_PER_FETCH = 20; + usersData[activeTab] = await getUsers(activeTab); +const fetchMoreUsers = async () => { + if (isLoading || !usersData[activeTab]) { + return; + } + isLoading = true; + const lastUserId = usersData[activeTab][usersData[activeTab].length - 1]?.id; + try { + const newUsers = await getUsers(activeTab, lastUserId, USERS_PER_FETCH); + usersData[activeTab] = [...usersData[activeTab], ...newUsers]; + isLoading = false; + rerender(App(), window['root']); + } catch (error) { + console.error('Error fetching users', error); + isLoading = false; + } +}; +const handleScroll = (e) => { + const { scrollTop, clientHeight, scrollHeight } = e.target; + if (scrollHeight - scrollTop <= clientHeight + 100) { + fetchMoreUsers(); + } +}; + const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -60,6 +86,8 @@ export const App = () => { users, showUser, handleUserSelected, + handleScroll, + isLoading, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -69,3 +97,4 @@ export const App = () => { NoUserFound(), ]); }; +fetchMoreUsers(); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index bc07cdaa..b55cd28e 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -1,26 +1,39 @@ const { createElement } = react; -export const UsersSection = ({ users, showUser, handleUserSelected }) => { +export const UsersSection = ({ + users, + showUser, + handleUserSelected, + handleScroll, + isLoading, +}) => { return createElement( 'aside', - { class: 'users_section', onclick: handleUserSelected }, - users?.map((user) => { - return createElement( - 'div', - { - class: `user_card ${ - users[showUser].id === user.id ? 'active_tab' : '' - }`, - data_key: user.id, - }, - [ - createElement('img', { - src: user?.picture?.url ?? dummyPicture, - class: 'user_image', - }), - createElement('span', {}, [user.first_name + ' ' + user.last_name]), - ], - ); - }), + { + class: 'users_section', + onclick: handleUserSelected, + onscroll: handleScroll, + }, + [ + ...users?.map((user) => { + return createElement( + 'div', + { + class: `user_card ${ + users[showUser].id === user.id ? 'active_tab' : '' + }`, + data_key: user.id, + }, + [ + createElement('img', { + src: user?.picture?.url ?? dummyPicture, + class: 'user_image', + }), + createElement('span', {}, [user.first_name + ' ' + user.last_name]), + ], + ); + }), + isLoading && createElement('div', 'Load more users...'), + ], ); }; diff --git a/users/discord/style.css b/users/discord/style.css index 23058547..f71d7a51 100644 --- a/users/discord/style.css +++ b/users/discord/style.css @@ -19,8 +19,9 @@ main { .users_section { grid-area: aside; - overflow: scroll; + overflow: auto; padding-inline: 1rem; + max-height: 80vh; } .tabs_section { diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 83cd40e5..649162f5 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -1,8 +1,12 @@ -export const getUsers = async (tab) => { +export const getUsers = async (tab, lastUserId = null, limit = 20) => { let URL = { in_discord: `${API_BASE_URL}/users/search/?role=in_discord`, verified: `${API_BASE_URL}/users/search/?verified=true`, }; + if (lastUserId) { + URL[tab] += `&last_id=${lastUserId}`; + } + URL[tab] += `&limit=${limit}`; try { const response = await fetch(URL[tab], { @@ -12,6 +16,9 @@ export const getUsers = async (tab) => { 'Content-type': 'application/json', }, }); + if (!response.ok) { + console.error('Failed to fetch:', response.status, response.statusText); + } const data = await response.json(); return data.users ?? []; From efd2e8806611e0ab20e83b3b4f7afdaaaad6794a Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 8 Oct 2024 21:30:38 +0530 Subject: [PATCH 02/33] fetching mock users and handling fetch more users --- users/discord/App.js | 562 +++++++++++++++++++++-- users/discord/components/UsersSection.js | 58 ++- users/discord/utils/util.js | 9 +- 3 files changed, 572 insertions(+), 57 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 404a5a54..22a928fc 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -5,6 +5,518 @@ import { getUsers } from './utils/util.js'; import { NoUserFound } from './components/NoUserFound.js'; const { createElement, rerender } = react; +const mockUsersData = { + in_discord: [ + { + id: 'user_1', + discordId: '123456789', + username: 'Alice', + avatar: 'https://placekitten.com/50/50?image=1', + }, + { + id: 'user_2', + username: 'Bob', + avatar: 'https://placekitten.com/50/50?image=2', + }, + { + id: 'user_3', + username: 'Charlie', + avatar: 'https://placekitten.com/50/50?image=3', + }, + { + id: 'user_4', + username: 'David', + avatar: 'https://placekitten.com/50/50?image=4', + }, + { + id: 'user_5', + username: 'Eve', + avatar: 'https://placekitten.com/50/50?image=5', + }, + { + id: 'user_6', + username: 'Fay', + avatar: 'https://placekitten.com/50/50?image=6', + }, + { + id: 'user_7', + username: 'George', + avatar: 'https://placekitten.com/50/50?image=7', + }, + { + id: 'user_8', + username: 'Hannah', + avatar: 'https://placekitten.com/50/50?image=8', + }, + { + id: 'user_9', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=9', + }, + { + id: 'user_10', + username: 'Jill', + avatar: 'https://placekitten.com/50/50?image=10', + }, + { + id: 'user_11', + username: 'Karl', + avatar: 'https://placekitten.com/50/50?image=11', + }, + { + id: 'user_12', + username: 'Lily', + avatar: 'https://placekitten.com/50/50?image=12', + }, + { + id: 'user_13', + username: 'Max', + avatar: 'https://placekitten.com/50/50?image=13', + }, + { + id: 'user_14', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=14', + }, + { + id: 'user_15', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=15', + }, + { + id: 'user_16', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=16', + }, + { + id: 'user_17', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=17', + }, + { + id: 'user_18', + username: 'Rachel', + avatar: 'https://placekitten.com/50/50?image=18', + }, + { + id: 'user_19', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=19', + }, + { + id: 'user_20', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=20', + }, + { + id: 'user_21', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=21', + }, + { + id: 'user_22', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=22', + }, + { + id: 'user_23', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=23', + }, + { + id: 'user_24', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=24', + }, + { + id: 'user_25', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=25', + }, + { + id: 'user_26', + username: 'Zack', + avatar: 'https://placekitten.com/50/50?image=26', + }, + { + id: 'user_27', + username: 'Aaron', + avatar: 'https://placekitten.com/50/50?image=27', + }, + { + id: 'user_28', + username: 'Bianca', + avatar: 'https://placekitten.com/50/50?image=28', + }, + { + id: 'user_29', + username: 'Carlos', + avatar: 'https://placekitten.com/50/50?image=29', + }, + { + id: 'user_30', + username: 'Diana', + avatar: 'https://placekitten.com/50/50?image=30', + }, + { + id: 'user_31', + username: 'Eli', + avatar: 'https://placekitten.com/50/50?image=31', + }, + { + id: 'user_32', + username: 'Fiona', + avatar: 'https://placekitten.com/50/50?image=32', + }, + { + id: 'user_33', + username: 'Gus', + avatar: 'https://placekitten.com/50/50?image=33', + }, + { + id: 'user_34', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=34', + }, + { + id: 'user_35', + username: 'Ian', + avatar: 'https://placekitten.com/50/50?image=35', + }, + { + id: 'user_36', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=36', + }, + { + id: 'user_37', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=37', + }, + { + id: 'user_38', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=38', + }, + { + id: 'user_39', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=39', + }, + { + id: 'user_40', + username: 'Nora', + avatar: 'https://placekitten.com/50/50?image=40', + }, + { + id: 'user_41', + username: 'Oliver', + avatar: 'https://placekitten.com/50/50?image=41', + }, + { + id: 'user_42', + username: 'Paula', + avatar: 'https://placekitten.com/50/50?image=42', + }, + { + id: 'user_43', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=43', + }, + { + id: 'user_44', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=44', + }, + { + id: 'user_45', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=45', + }, + { + id: 'user_46', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=46', + }, + { + id: 'user_47', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=47', + }, + { + id: 'user_48', + username: 'Violet', + avatar: 'https://placekitten.com/50/50?image=48', + }, + { + id: 'user_49', + username: 'Wes', + avatar: 'https://placekitten.com/50/50?image=49', + }, + { + id: 'user_50', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=50', + }, + ], + verified: [ + { + id: 'user_51', + username: 'Frank', + avatar: 'https://placekitten.com/50/50?image=51', + }, + { + id: 'user_52', + username: 'Grace', + avatar: 'https://placekitten.com/50/50?image=52', + }, + { + id: 'user_53', + username: 'Henry', + avatar: 'https://placekitten.com/50/50?image=53', + }, + { + id: 'user_54', + username: 'Ivy', + avatar: 'https://placekitten.com/50/50?image=54', + }, + { + id: 'user_55', + username: 'Jack', + avatar: 'https://placekitten.com/50/50?image=55', + }, + { + id: 'user_56', + username: 'Kim', + avatar: 'https://placekitten.com/50/50?image=56', + }, + { + id: 'user_57', + username: 'Leo', + avatar: 'https://placekitten.com/50/50?image=57', + }, + { + id: 'user_58', + username: 'Mila', + avatar: 'https://placekitten.com/50/50?image=58', + }, + { + id: 'user_59', + username: 'Nate', + avatar: 'https://placekitten.com/50/50?image=59', + }, + { + id: 'user_60', + username: 'Olivia', + avatar: 'https://placekitten.com/50/50?image=60', + }, + { + id: 'user_61', + username: 'Paul', + avatar: 'https://placekitten.com/50/50?image=61', + }, + { + id: 'user_62', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=62', + }, + { + id: 'user_63', + username: 'Ruby', + avatar: 'https://placekitten.com/50/50?image=63', + }, + { + id: 'user_64', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=64', + }, + { + id: 'user_65', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=65', + }, + { + id: 'user_66', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=66', + }, + { + id: 'user_67', + username: 'Vera', + avatar: 'https://placekitten.com/50/50?image=67', + }, + { + id: 'user_68', + username: 'Walter', + avatar: 'https://placekitten.com/50/50?image=68', + }, + { + id: 'user_69', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=69', + }, + { + id: 'user_70', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=70', + }, + { + id: 'user_71', + username: 'Zane', + avatar: 'https://placekitten.com/50/50?image=71', + }, + { + id: 'user_72', + username: 'Alan', + avatar: 'https://placekitten.com/50/50?image=72', + }, + { + id: 'user_73', + username: 'Bella', + avatar: 'https://placekitten.com/50/50?image=73', + }, + { + id: 'user_74', + username: 'Chris', + avatar: 'https://placekitten.com/50/50?image=74', + }, + { + id: 'user_75', + username: 'Daisy', + avatar: 'https://placekitten.com/50/50?image=75', + }, + { + id: 'user_76', + username: 'Ethan', + avatar: 'https://placekitten.com/50/50?image=76', + }, + { + id: 'user_77', + username: 'Faye', + avatar: 'https://placekitten.com/50/50?image=77', + }, + { + id: 'user_78', + username: 'Gavin', + avatar: 'https://placekitten.com/50/50?image=78', + }, + { + id: 'user_79', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=79', + }, + { + id: 'user_80', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=80', + }, + { + id: 'user_81', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=81', + }, + { + id: 'user_82', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=82', + }, + { + id: 'user_83', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=83', + }, + { + id: 'user_84', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=84', + }, + { + id: 'user_85', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=85', + }, + { + id: 'user_86', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=86', + }, + { + id: 'user_87', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=87', + }, + { + id: 'user_88', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=88', + }, + { + id: 'user_89', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=89', + }, + { + id: 'user_90', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=90', + }, + { + id: 'user_91', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=91', + }, + { + id: 'user_92', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=92', + }, + { + id: 'user_93', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=93', + }, + { + id: 'user_94', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=94', + }, + { + id: 'user_95', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=95', + }, + { + id: 'user_96', + username: 'Yara', + avatar: 'https://placekitten.com/50/50?image=96', + }, + { + id: 'user_97', + username: 'Zeke', + avatar: 'https://placekitten.com/50/50?image=97', + }, + { + id: 'user_98', + username: 'Ava', + avatar: 'https://placekitten.com/50/50?image=98', + }, + { + id: 'user_99', + username: 'Blake', + avatar: 'https://placekitten.com/50/50?image=99', + }, + { + id: 'user_100', + username: 'Chloe', + avatar: 'https://placekitten.com/50/50?image=100', + }, + ], +}; +/* work on pagination with array index for now, forget about last user id. +You should call the API every time the user reaches the end of the page. +Let's say initially you load 10 users- that's index 0,9 then when the user, +reaches bottom of the page you fetch the data again to get the next 10 users- that's index 10,19 +*/ const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -17,34 +529,34 @@ export const usersData = { const urlParams = new URLSearchParams(window.location.search); let activeTab = urlParams.get('tab') ?? 'in_discord'; - -let showUser = 0; +const INITIAL_USERS = 10; let isLoading = false; -const USERS_PER_FETCH = 20; +let currentPage = 1; +let showUser = 0; +// get mock users +const getMockUser = (tabId, page = 1) => { + const start = (page - 1) * INITIAL_USERS; + const end = start + INITIAL_USERS; + console.log('fetched initial users'); + // currentPage++; + return mockUsersData[tabId].slice(start, end); +}; + +// usersData[activeTab] = await getUsers(activeTab); + +usersData[activeTab] = await getMockUser(activeTab); -usersData[activeTab] = await getUsers(activeTab); +/* create a function to fetch more users (for eg. we initially have 6 users, +we fetch users everytime the user reaches the end of the page.) */ const fetchMoreUsers = async () => { - if (isLoading || !usersData[activeTab]) { - return; - } isLoading = true; - const lastUserId = usersData[activeTab][usersData[activeTab].length - 1]?.id; - try { - const newUsers = await getUsers(activeTab, lastUserId, USERS_PER_FETCH); - usersData[activeTab] = [...usersData[activeTab], ...newUsers]; - isLoading = false; - rerender(App(), window['root']); - } catch (error) { - console.error('Error fetching users', error); - isLoading = false; - } -}; -const handleScroll = (e) => { - const { scrollTop, clientHeight, scrollHeight } = e.target; - if (scrollHeight - scrollTop <= clientHeight + 100) { - fetchMoreUsers(); - } + currentPage++; + const newUsers = await getMockUser(activeTab, currentPage); + usersData[activeTab] = [...usersData[activeTab], ...newUsers]; + console.log(newUsers, 'fetched new users'); + + isLoading = false; }; const handleTabNavigation = async (e) => { @@ -86,8 +598,7 @@ export const App = () => { users, showUser, handleUserSelected, - handleScroll, - isLoading, + fetchMoreUsers, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -97,4 +608,3 @@ export const App = () => { NoUserFound(), ]); }; -fetchMoreUsers(); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index b55cd28e..70f7d8bd 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -4,9 +4,21 @@ export const UsersSection = ({ users, showUser, handleUserSelected, - handleScroll, - isLoading, + fetchMoreUsers, }) => { + const handleScroll = (e) => { + console.log('scroll triggered'); + + const container = e.target; + const { scrollTop, scrollHeight, clientHeight } = container; + if (scrollTop + clientHeight >= scrollHeight - 5) { + isLoading = true; + console.log('user scrolling'); + fetchMoreUsers(); + } + }; + + // handle scroll is not working - add event listener on every scroll element return createElement( 'aside', { @@ -14,26 +26,26 @@ export const UsersSection = ({ onclick: handleUserSelected, onscroll: handleScroll, }, - [ - ...users?.map((user) => { - return createElement( - 'div', - { - class: `user_card ${ - users[showUser].id === user.id ? 'active_tab' : '' - }`, - data_key: user.id, - }, - [ - createElement('img', { - src: user?.picture?.url ?? dummyPicture, - class: 'user_image', - }), - createElement('span', {}, [user.first_name + ' ' + user.last_name]), - ], - ); - }), - isLoading && createElement('div', 'Load more users...'), - ], + users?.map((user) => { + return createElement( + 'div', + { + class: `user_card ${ + users[showUser].id === user.id ? 'active_tab' : '' + }`, + data_key: user.id, + }, + [ + createElement('img', { + src: user?.picture?.url ?? dummyPicture, + class: 'user_image', + }), + // createElement('span', {}, [ + // user.first_name + ' ' + user.last_name + user.username, + // ]), + createElement('span', {}, [user.username]), + ], + ); + }), ); }; diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 649162f5..83cd40e5 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -1,12 +1,8 @@ -export const getUsers = async (tab, lastUserId = null, limit = 20) => { +export const getUsers = async (tab) => { let URL = { in_discord: `${API_BASE_URL}/users/search/?role=in_discord`, verified: `${API_BASE_URL}/users/search/?verified=true`, }; - if (lastUserId) { - URL[tab] += `&last_id=${lastUserId}`; - } - URL[tab] += `&limit=${limit}`; try { const response = await fetch(URL[tab], { @@ -16,9 +12,6 @@ export const getUsers = async (tab, lastUserId = null, limit = 20) => { 'Content-type': 'application/json', }, }); - if (!response.ok) { - console.error('Failed to fetch:', response.status, response.statusText); - } const data = await response.json(); return data.users ?? []; From b8f8a20310b00cdc19299ff997a25947ecc85faa Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 10 Oct 2024 20:29:04 +0530 Subject: [PATCH 03/33] users are getting fetched with scroll but the next set of users are not visible in screen --- users/discord/App.js | 67 +++++++++++++++--------- users/discord/components/UsersSection.js | 33 +++++++----- 2 files changed, 64 insertions(+), 36 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 22a928fc..438f89b8 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -512,11 +512,6 @@ const mockUsersData = { }, ], }; -/* work on pagination with array index for now, forget about last user id. -You should call the API every time the user reaches the end of the page. -Let's say initially you load 10 users- that's index 0,9 then when the user, -reaches bottom of the page you fetch the data again to get the next 10 users- that's index 10,19 -*/ const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -533,32 +528,52 @@ const INITIAL_USERS = 10; let isLoading = false; let currentPage = 1; let showUser = 0; -// get mock users -const getMockUser = (tabId, page = 1) => { - const start = (page - 1) * INITIAL_USERS; - const end = start + INITIAL_USERS; - console.log('fetched initial users'); - // currentPage++; - return mockUsersData[tabId].slice(start, end); -}; // usersData[activeTab] = await getUsers(activeTab); -usersData[activeTab] = await getMockUser(activeTab); - -/* create a function to fetch more users (for eg. we initially have 6 users, -we fetch users everytime the user reaches the end of the page.) */ +const fetchUsers = async (tabId, page = 1) => { + if (isLoading) return; -const fetchMoreUsers = async () => { isLoading = true; - currentPage++; - const newUsers = await getMockUser(activeTab, currentPage); - usersData[activeTab] = [...usersData[activeTab], ...newUsers]; - console.log(newUsers, 'fetched new users'); + try { + const start = (page - 1) * INITIAL_USERS; + const end = start + INITIAL_USERS; + + const newUsers = mockUsersData[tabId].slice(start, end); - isLoading = false; + if (newUsers.length > 0) { + if (page === 1) { + usersData[tabId] = newUsers; // Initial load + console.log('Fetched initial users'); + } else { + usersData[tabId] = [...usersData[tabId], ...newUsers]; // Append new users + console.log('Fetched more users'); + console.log(usersData[tabId]); + } + currentPage = page; + rerender(App(), window[root]); // Re-render the app with the new users + } else { + console.log('No more users to fetch'); + } + } catch (error) { + console.error('Error fetching users', error); + } finally { + isLoading = false; + } }; +const handleScroll = () => { + const scrollPosition = window.innerHeight + window.scrollY; + const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom + + if (scrollPosition >= bottomPosition) { + // Fetch more users when the user is near the bottom + fetchUsers(activeTab, currentPage + 1); + } +}; + +window.addEventListener('scroll', handleScroll); + const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -598,7 +613,9 @@ export const App = () => { users, showUser, handleUserSelected, - fetchMoreUsers, + fetchUsers, + activeTab, + currentPage, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -608,3 +625,5 @@ export const App = () => { NoUserFound(), ]); }; + +fetchUsers(activeTab, 1); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 70f7d8bd..8812d193 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -4,27 +4,36 @@ export const UsersSection = ({ users, showUser, handleUserSelected, - fetchMoreUsers, + fetchUsers, + activeTab, + currentPage, }) => { - const handleScroll = (e) => { - console.log('scroll triggered'); - - const container = e.target; - const { scrollTop, scrollHeight, clientHeight } = container; - if (scrollTop + clientHeight >= scrollHeight - 5) { - isLoading = true; - console.log('user scrolling'); - fetchMoreUsers(); - } + const debounce = (func, delay) => { + let timeoutId; + return function (...args) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + func.apply(this, args); + }, delay); + }; }; + window.addEventListener( + 'scroll', + debounce(() => { + console.log('scroll triggered'); + if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { + fetchUsers(activeTab, currentPage + 1); // Fetch next page + } + }, 200), + ); + // handle scroll is not working - add event listener on every scroll element return createElement( 'aside', { class: 'users_section', onclick: handleUserSelected, - onscroll: handleScroll, }, users?.map((user) => { return createElement( From 4e8b4bf4dc0ef982a3a24bd28ada7308baaf0b63 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 07:08:38 +0530 Subject: [PATCH 04/33] user list is getting updated --- users/discord/App.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 438f89b8..2f3100a4 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -551,7 +551,7 @@ const fetchUsers = async (tabId, page = 1) => { console.log(usersData[tabId]); } currentPage = page; - rerender(App(), window[root]); // Re-render the app with the new users + rerender(App(), document.getElementById('root')); // Re-render the app with the new users } else { console.log('No more users to fetch'); } @@ -562,17 +562,17 @@ const fetchUsers = async (tabId, page = 1) => { } }; -const handleScroll = () => { - const scrollPosition = window.innerHeight + window.scrollY; - const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom +// const handleScroll = () => { +// const scrollPosition = window.innerHeight + window.scrollY; +// const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom - if (scrollPosition >= bottomPosition) { - // Fetch more users when the user is near the bottom - fetchUsers(activeTab, currentPage + 1); - } -}; +// if (scrollPosition >= bottomPosition) { +// // Fetch more users when the user is near the bottom +// fetchUsers(activeTab, currentPage + 1); +// } +// }; -window.addEventListener('scroll', handleScroll); +// window.addEventListener('scroll', handleScroll); const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); From f7883ebed46873f1555ec2ff5f0b6395f266b60e Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 07:23:44 +0530 Subject: [PATCH 05/33] fixed duplicated fetching --- users/discord/App.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/users/discord/App.js b/users/discord/App.js index 2f3100a4..2293ccf4 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -546,7 +546,11 @@ const fetchUsers = async (tabId, page = 1) => { usersData[tabId] = newUsers; // Initial load console.log('Fetched initial users'); } else { - usersData[tabId] = [...usersData[tabId], ...newUsers]; // Append new users + const existingIds = new Set(usersData[tabId].map((user) => user.id)); + const uniqueNewUsers = newUsers.filter( + (user) => !existingIds.has(user.id), + ); + usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; console.log('Fetched more users'); console.log(usersData[tabId]); } From e4e28f08e8bbab5edfd9aca4f9ad4f432650ddc6 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 19:31:36 +0530 Subject: [PATCH 06/33] moved mock data to utils, addded loading state --- users/discord/App.js | 531 +---------------------- users/discord/components/UsersSection.js | 10 +- users/discord/utils/util.js | 508 ++++++++++++++++++++++ 3 files changed, 524 insertions(+), 525 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 2293ccf4..73aeda96 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -1,517 +1,10 @@ import { TabsSection } from './components/TabsSection.js'; import { UsersSection } from './components/UsersSection.js'; import { UserDetailsSection } from './components/UserDetailsSection.js'; -import { getUsers } from './utils/util.js'; +import { getUsers, mockUsersData } from './utils/util.js'; import { NoUserFound } from './components/NoUserFound.js'; const { createElement, rerender } = react; -const mockUsersData = { - in_discord: [ - { - id: 'user_1', - discordId: '123456789', - username: 'Alice', - avatar: 'https://placekitten.com/50/50?image=1', - }, - { - id: 'user_2', - username: 'Bob', - avatar: 'https://placekitten.com/50/50?image=2', - }, - { - id: 'user_3', - username: 'Charlie', - avatar: 'https://placekitten.com/50/50?image=3', - }, - { - id: 'user_4', - username: 'David', - avatar: 'https://placekitten.com/50/50?image=4', - }, - { - id: 'user_5', - username: 'Eve', - avatar: 'https://placekitten.com/50/50?image=5', - }, - { - id: 'user_6', - username: 'Fay', - avatar: 'https://placekitten.com/50/50?image=6', - }, - { - id: 'user_7', - username: 'George', - avatar: 'https://placekitten.com/50/50?image=7', - }, - { - id: 'user_8', - username: 'Hannah', - avatar: 'https://placekitten.com/50/50?image=8', - }, - { - id: 'user_9', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=9', - }, - { - id: 'user_10', - username: 'Jill', - avatar: 'https://placekitten.com/50/50?image=10', - }, - { - id: 'user_11', - username: 'Karl', - avatar: 'https://placekitten.com/50/50?image=11', - }, - { - id: 'user_12', - username: 'Lily', - avatar: 'https://placekitten.com/50/50?image=12', - }, - { - id: 'user_13', - username: 'Max', - avatar: 'https://placekitten.com/50/50?image=13', - }, - { - id: 'user_14', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=14', - }, - { - id: 'user_15', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=15', - }, - { - id: 'user_16', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=16', - }, - { - id: 'user_17', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=17', - }, - { - id: 'user_18', - username: 'Rachel', - avatar: 'https://placekitten.com/50/50?image=18', - }, - { - id: 'user_19', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=19', - }, - { - id: 'user_20', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=20', - }, - { - id: 'user_21', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=21', - }, - { - id: 'user_22', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=22', - }, - { - id: 'user_23', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=23', - }, - { - id: 'user_24', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=24', - }, - { - id: 'user_25', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=25', - }, - { - id: 'user_26', - username: 'Zack', - avatar: 'https://placekitten.com/50/50?image=26', - }, - { - id: 'user_27', - username: 'Aaron', - avatar: 'https://placekitten.com/50/50?image=27', - }, - { - id: 'user_28', - username: 'Bianca', - avatar: 'https://placekitten.com/50/50?image=28', - }, - { - id: 'user_29', - username: 'Carlos', - avatar: 'https://placekitten.com/50/50?image=29', - }, - { - id: 'user_30', - username: 'Diana', - avatar: 'https://placekitten.com/50/50?image=30', - }, - { - id: 'user_31', - username: 'Eli', - avatar: 'https://placekitten.com/50/50?image=31', - }, - { - id: 'user_32', - username: 'Fiona', - avatar: 'https://placekitten.com/50/50?image=32', - }, - { - id: 'user_33', - username: 'Gus', - avatar: 'https://placekitten.com/50/50?image=33', - }, - { - id: 'user_34', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=34', - }, - { - id: 'user_35', - username: 'Ian', - avatar: 'https://placekitten.com/50/50?image=35', - }, - { - id: 'user_36', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=36', - }, - { - id: 'user_37', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=37', - }, - { - id: 'user_38', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=38', - }, - { - id: 'user_39', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=39', - }, - { - id: 'user_40', - username: 'Nora', - avatar: 'https://placekitten.com/50/50?image=40', - }, - { - id: 'user_41', - username: 'Oliver', - avatar: 'https://placekitten.com/50/50?image=41', - }, - { - id: 'user_42', - username: 'Paula', - avatar: 'https://placekitten.com/50/50?image=42', - }, - { - id: 'user_43', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=43', - }, - { - id: 'user_44', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=44', - }, - { - id: 'user_45', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=45', - }, - { - id: 'user_46', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=46', - }, - { - id: 'user_47', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=47', - }, - { - id: 'user_48', - username: 'Violet', - avatar: 'https://placekitten.com/50/50?image=48', - }, - { - id: 'user_49', - username: 'Wes', - avatar: 'https://placekitten.com/50/50?image=49', - }, - { - id: 'user_50', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=50', - }, - ], - verified: [ - { - id: 'user_51', - username: 'Frank', - avatar: 'https://placekitten.com/50/50?image=51', - }, - { - id: 'user_52', - username: 'Grace', - avatar: 'https://placekitten.com/50/50?image=52', - }, - { - id: 'user_53', - username: 'Henry', - avatar: 'https://placekitten.com/50/50?image=53', - }, - { - id: 'user_54', - username: 'Ivy', - avatar: 'https://placekitten.com/50/50?image=54', - }, - { - id: 'user_55', - username: 'Jack', - avatar: 'https://placekitten.com/50/50?image=55', - }, - { - id: 'user_56', - username: 'Kim', - avatar: 'https://placekitten.com/50/50?image=56', - }, - { - id: 'user_57', - username: 'Leo', - avatar: 'https://placekitten.com/50/50?image=57', - }, - { - id: 'user_58', - username: 'Mila', - avatar: 'https://placekitten.com/50/50?image=58', - }, - { - id: 'user_59', - username: 'Nate', - avatar: 'https://placekitten.com/50/50?image=59', - }, - { - id: 'user_60', - username: 'Olivia', - avatar: 'https://placekitten.com/50/50?image=60', - }, - { - id: 'user_61', - username: 'Paul', - avatar: 'https://placekitten.com/50/50?image=61', - }, - { - id: 'user_62', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=62', - }, - { - id: 'user_63', - username: 'Ruby', - avatar: 'https://placekitten.com/50/50?image=63', - }, - { - id: 'user_64', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=64', - }, - { - id: 'user_65', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=65', - }, - { - id: 'user_66', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=66', - }, - { - id: 'user_67', - username: 'Vera', - avatar: 'https://placekitten.com/50/50?image=67', - }, - { - id: 'user_68', - username: 'Walter', - avatar: 'https://placekitten.com/50/50?image=68', - }, - { - id: 'user_69', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=69', - }, - { - id: 'user_70', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=70', - }, - { - id: 'user_71', - username: 'Zane', - avatar: 'https://placekitten.com/50/50?image=71', - }, - { - id: 'user_72', - username: 'Alan', - avatar: 'https://placekitten.com/50/50?image=72', - }, - { - id: 'user_73', - username: 'Bella', - avatar: 'https://placekitten.com/50/50?image=73', - }, - { - id: 'user_74', - username: 'Chris', - avatar: 'https://placekitten.com/50/50?image=74', - }, - { - id: 'user_75', - username: 'Daisy', - avatar: 'https://placekitten.com/50/50?image=75', - }, - { - id: 'user_76', - username: 'Ethan', - avatar: 'https://placekitten.com/50/50?image=76', - }, - { - id: 'user_77', - username: 'Faye', - avatar: 'https://placekitten.com/50/50?image=77', - }, - { - id: 'user_78', - username: 'Gavin', - avatar: 'https://placekitten.com/50/50?image=78', - }, - { - id: 'user_79', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=79', - }, - { - id: 'user_80', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=80', - }, - { - id: 'user_81', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=81', - }, - { - id: 'user_82', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=82', - }, - { - id: 'user_83', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=83', - }, - { - id: 'user_84', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=84', - }, - { - id: 'user_85', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=85', - }, - { - id: 'user_86', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=86', - }, - { - id: 'user_87', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=87', - }, - { - id: 'user_88', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=88', - }, - { - id: 'user_89', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=89', - }, - { - id: 'user_90', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=90', - }, - { - id: 'user_91', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=91', - }, - { - id: 'user_92', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=92', - }, - { - id: 'user_93', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=93', - }, - { - id: 'user_94', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=94', - }, - { - id: 'user_95', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=95', - }, - { - id: 'user_96', - username: 'Yara', - avatar: 'https://placekitten.com/50/50?image=96', - }, - { - id: 'user_97', - username: 'Zeke', - avatar: 'https://placekitten.com/50/50?image=97', - }, - { - id: 'user_98', - username: 'Ava', - avatar: 'https://placekitten.com/50/50?image=98', - }, - { - id: 'user_99', - username: 'Blake', - avatar: 'https://placekitten.com/50/50?image=99', - }, - { - id: 'user_100', - username: 'Chloe', - avatar: 'https://placekitten.com/50/50?image=100', - }, - ], -}; const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -531,10 +24,13 @@ let showUser = 0; // usersData[activeTab] = await getUsers(activeTab); -const fetchUsers = async (tabId, page = 1) => { - if (isLoading) return; +export const fetchUsers = async (tabId, page = 1) => { + if (isLoading) { + return; + } isLoading = true; + try { const start = (page - 1) * INITIAL_USERS; const end = start + INITIAL_USERS; @@ -555,7 +51,7 @@ const fetchUsers = async (tabId, page = 1) => { console.log(usersData[tabId]); } currentPage = page; - rerender(App(), document.getElementById('root')); // Re-render the app with the new users + rerender(App(), document.getElementById('root')); } else { console.log('No more users to fetch'); } @@ -566,18 +62,6 @@ const fetchUsers = async (tabId, page = 1) => { } }; -// const handleScroll = () => { -// const scrollPosition = window.innerHeight + window.scrollY; -// const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom - -// if (scrollPosition >= bottomPosition) { -// // Fetch more users when the user is near the bottom -// fetchUsers(activeTab, currentPage + 1); -// } -// }; - -// window.addEventListener('scroll', handleScroll); - const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -620,6 +104,7 @@ export const App = () => { fetchUsers, activeTab, currentPage, + isLoading, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 8812d193..46cfc404 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -7,6 +7,7 @@ export const UsersSection = ({ fetchUsers, activeTab, currentPage, + isLoading, }) => { const debounce = (func, delay) => { let timeoutId; @@ -23,12 +24,17 @@ export const UsersSection = ({ debounce(() => { console.log('scroll triggered'); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { - fetchUsers(activeTab, currentPage + 1); // Fetch next page + fetchUsers(activeTab, currentPage + 1); } }, 200), ); - // handle scroll is not working - add event listener on every scroll element + if (isLoading) { + return createElement('aside', { class: 'users_section' }, [ + createElement('div', { class: 'loading' }, ['Loading...']), + ]); + } + return createElement( 'aside', { diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 83cd40e5..6124faea 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -19,3 +19,511 @@ export const getUsers = async (tab) => { console.error(err); } }; +// mock user data +export const mockUsersData = { + in_discord: [ + { + id: 'user_1', + discordId: '123456789', + username: 'Alice', + avatar: 'https://placekitten.com/50/50?image=1', + }, + { + id: 'user_2', + username: 'Bob', + avatar: 'https://placekitten.com/50/50?image=2', + }, + { + id: 'user_3', + username: 'Charlie', + avatar: 'https://placekitten.com/50/50?image=3', + }, + { + id: 'user_4', + username: 'David', + avatar: 'https://placekitten.com/50/50?image=4', + }, + { + id: 'user_5', + username: 'Eve', + avatar: 'https://placekitten.com/50/50?image=5', + }, + { + id: 'user_6', + username: 'Fay', + avatar: 'https://placekitten.com/50/50?image=6', + }, + { + id: 'user_7', + username: 'George', + avatar: 'https://placekitten.com/50/50?image=7', + }, + { + id: 'user_8', + username: 'Hannah', + avatar: 'https://placekitten.com/50/50?image=8', + }, + { + id: 'user_9', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=9', + }, + { + id: 'user_10', + username: 'Jill', + avatar: 'https://placekitten.com/50/50?image=10', + }, + { + id: 'user_11', + username: 'Karl', + avatar: 'https://placekitten.com/50/50?image=11', + }, + { + id: 'user_12', + username: 'Lily', + avatar: 'https://placekitten.com/50/50?image=12', + }, + { + id: 'user_13', + username: 'Max', + avatar: 'https://placekitten.com/50/50?image=13', + }, + { + id: 'user_14', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=14', + }, + { + id: 'user_15', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=15', + }, + { + id: 'user_16', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=16', + }, + { + id: 'user_17', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=17', + }, + { + id: 'user_18', + username: 'Rachel', + avatar: 'https://placekitten.com/50/50?image=18', + }, + { + id: 'user_19', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=19', + }, + { + id: 'user_20', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=20', + }, + { + id: 'user_21', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=21', + }, + { + id: 'user_22', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=22', + }, + { + id: 'user_23', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=23', + }, + { + id: 'user_24', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=24', + }, + { + id: 'user_25', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=25', + }, + { + id: 'user_26', + username: 'Zack', + avatar: 'https://placekitten.com/50/50?image=26', + }, + { + id: 'user_27', + username: 'Aaron', + avatar: 'https://placekitten.com/50/50?image=27', + }, + { + id: 'user_28', + username: 'Bianca', + avatar: 'https://placekitten.com/50/50?image=28', + }, + { + id: 'user_29', + username: 'Carlos', + avatar: 'https://placekitten.com/50/50?image=29', + }, + { + id: 'user_30', + username: 'Diana', + avatar: 'https://placekitten.com/50/50?image=30', + }, + { + id: 'user_31', + username: 'Eli', + avatar: 'https://placekitten.com/50/50?image=31', + }, + { + id: 'user_32', + username: 'Fiona', + avatar: 'https://placekitten.com/50/50?image=32', + }, + { + id: 'user_33', + username: 'Gus', + avatar: 'https://placekitten.com/50/50?image=33', + }, + { + id: 'user_34', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=34', + }, + { + id: 'user_35', + username: 'Ian', + avatar: 'https://placekitten.com/50/50?image=35', + }, + { + id: 'user_36', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=36', + }, + { + id: 'user_37', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=37', + }, + { + id: 'user_38', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=38', + }, + { + id: 'user_39', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=39', + }, + { + id: 'user_40', + username: 'Nora', + avatar: 'https://placekitten.com/50/50?image=40', + }, + { + id: 'user_41', + username: 'Oliver', + avatar: 'https://placekitten.com/50/50?image=41', + }, + { + id: 'user_42', + username: 'Paula', + avatar: 'https://placekitten.com/50/50?image=42', + }, + { + id: 'user_43', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=43', + }, + { + id: 'user_44', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=44', + }, + { + id: 'user_45', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=45', + }, + { + id: 'user_46', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=46', + }, + { + id: 'user_47', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=47', + }, + { + id: 'user_48', + username: 'Violet', + avatar: 'https://placekitten.com/50/50?image=48', + }, + { + id: 'user_49', + username: 'Wes', + avatar: 'https://placekitten.com/50/50?image=49', + }, + { + id: 'user_50', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=50', + }, + ], + verified: [ + { + id: 'user_51', + username: 'Frank', + avatar: 'https://placekitten.com/50/50?image=51', + }, + { + id: 'user_52', + username: 'Grace', + avatar: 'https://placekitten.com/50/50?image=52', + }, + { + id: 'user_53', + username: 'Henry', + avatar: 'https://placekitten.com/50/50?image=53', + }, + { + id: 'user_54', + username: 'Ivy', + avatar: 'https://placekitten.com/50/50?image=54', + }, + { + id: 'user_55', + username: 'Jack', + avatar: 'https://placekitten.com/50/50?image=55', + }, + { + id: 'user_56', + username: 'Kim', + avatar: 'https://placekitten.com/50/50?image=56', + }, + { + id: 'user_57', + username: 'Leo', + avatar: 'https://placekitten.com/50/50?image=57', + }, + { + id: 'user_58', + username: 'Mila', + avatar: 'https://placekitten.com/50/50?image=58', + }, + { + id: 'user_59', + username: 'Nate', + avatar: 'https://placekitten.com/50/50?image=59', + }, + { + id: 'user_60', + username: 'Olivia', + avatar: 'https://placekitten.com/50/50?image=60', + }, + { + id: 'user_61', + username: 'Paul', + avatar: 'https://placekitten.com/50/50?image=61', + }, + { + id: 'user_62', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=62', + }, + { + id: 'user_63', + username: 'Ruby', + avatar: 'https://placekitten.com/50/50?image=63', + }, + { + id: 'user_64', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=64', + }, + { + id: 'user_65', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=65', + }, + { + id: 'user_66', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=66', + }, + { + id: 'user_67', + username: 'Vera', + avatar: 'https://placekitten.com/50/50?image=67', + }, + { + id: 'user_68', + username: 'Walter', + avatar: 'https://placekitten.com/50/50?image=68', + }, + { + id: 'user_69', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=69', + }, + { + id: 'user_70', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=70', + }, + { + id: 'user_71', + username: 'Zane', + avatar: 'https://placekitten.com/50/50?image=71', + }, + { + id: 'user_72', + username: 'Alan', + avatar: 'https://placekitten.com/50/50?image=72', + }, + { + id: 'user_73', + username: 'Bella', + avatar: 'https://placekitten.com/50/50?image=73', + }, + { + id: 'user_74', + username: 'Chris', + avatar: 'https://placekitten.com/50/50?image=74', + }, + { + id: 'user_75', + username: 'Daisy', + avatar: 'https://placekitten.com/50/50?image=75', + }, + { + id: 'user_76', + username: 'Ethan', + avatar: 'https://placekitten.com/50/50?image=76', + }, + { + id: 'user_77', + username: 'Faye', + avatar: 'https://placekitten.com/50/50?image=77', + }, + { + id: 'user_78', + username: 'Gavin', + avatar: 'https://placekitten.com/50/50?image=78', + }, + { + id: 'user_79', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=79', + }, + { + id: 'user_80', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=80', + }, + { + id: 'user_81', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=81', + }, + { + id: 'user_82', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=82', + }, + { + id: 'user_83', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=83', + }, + { + id: 'user_84', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=84', + }, + { + id: 'user_85', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=85', + }, + { + id: 'user_86', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=86', + }, + { + id: 'user_87', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=87', + }, + { + id: 'user_88', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=88', + }, + { + id: 'user_89', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=89', + }, + { + id: 'user_90', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=90', + }, + { + id: 'user_91', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=91', + }, + { + id: 'user_92', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=92', + }, + { + id: 'user_93', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=93', + }, + { + id: 'user_94', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=94', + }, + { + id: 'user_95', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=95', + }, + { + id: 'user_96', + username: 'Yara', + avatar: 'https://placekitten.com/50/50?image=96', + }, + { + id: 'user_97', + username: 'Zeke', + avatar: 'https://placekitten.com/50/50?image=97', + }, + { + id: 'user_98', + username: 'Ava', + avatar: 'https://placekitten.com/50/50?image=98', + }, + { + id: 'user_99', + username: 'Blake', + avatar: 'https://placekitten.com/50/50?image=99', + }, + { + id: 'user_100', + username: 'Chloe', + avatar: 'https://placekitten.com/50/50?image=100', + }, + ], +}; From 1bbfce5c179e6b4c6195e53b589be361d6dda97f Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 25 Sep 2024 10:14:16 +0530 Subject: [PATCH 07/33] added function to initially load 20 users and then load more users as we scroll, changed data fetching structure to fetch last user id --- users/discord/App.js | 29 +++++++++++++ users/discord/components/UsersSection.js | 53 +++++++++++++++--------- users/discord/style.css | 3 +- users/discord/utils/util.js | 9 +++- 4 files changed, 72 insertions(+), 22 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 87fa873d..404a5a54 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -19,8 +19,34 @@ const urlParams = new URLSearchParams(window.location.search); let activeTab = urlParams.get('tab') ?? 'in_discord'; let showUser = 0; +let isLoading = false; +const USERS_PER_FETCH = 20; + usersData[activeTab] = await getUsers(activeTab); +const fetchMoreUsers = async () => { + if (isLoading || !usersData[activeTab]) { + return; + } + isLoading = true; + const lastUserId = usersData[activeTab][usersData[activeTab].length - 1]?.id; + try { + const newUsers = await getUsers(activeTab, lastUserId, USERS_PER_FETCH); + usersData[activeTab] = [...usersData[activeTab], ...newUsers]; + isLoading = false; + rerender(App(), window['root']); + } catch (error) { + console.error('Error fetching users', error); + isLoading = false; + } +}; +const handleScroll = (e) => { + const { scrollTop, clientHeight, scrollHeight } = e.target; + if (scrollHeight - scrollTop <= clientHeight + 100) { + fetchMoreUsers(); + } +}; + const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -60,6 +86,8 @@ export const App = () => { users, showUser, handleUserSelected, + handleScroll, + isLoading, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -69,3 +97,4 @@ export const App = () => { NoUserFound(), ]); }; +fetchMoreUsers(); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index bc07cdaa..b55cd28e 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -1,26 +1,39 @@ const { createElement } = react; -export const UsersSection = ({ users, showUser, handleUserSelected }) => { +export const UsersSection = ({ + users, + showUser, + handleUserSelected, + handleScroll, + isLoading, +}) => { return createElement( 'aside', - { class: 'users_section', onclick: handleUserSelected }, - users?.map((user) => { - return createElement( - 'div', - { - class: `user_card ${ - users[showUser].id === user.id ? 'active_tab' : '' - }`, - data_key: user.id, - }, - [ - createElement('img', { - src: user?.picture?.url ?? dummyPicture, - class: 'user_image', - }), - createElement('span', {}, [user.first_name + ' ' + user.last_name]), - ], - ); - }), + { + class: 'users_section', + onclick: handleUserSelected, + onscroll: handleScroll, + }, + [ + ...users?.map((user) => { + return createElement( + 'div', + { + class: `user_card ${ + users[showUser].id === user.id ? 'active_tab' : '' + }`, + data_key: user.id, + }, + [ + createElement('img', { + src: user?.picture?.url ?? dummyPicture, + class: 'user_image', + }), + createElement('span', {}, [user.first_name + ' ' + user.last_name]), + ], + ); + }), + isLoading && createElement('div', 'Load more users...'), + ], ); }; diff --git a/users/discord/style.css b/users/discord/style.css index 23058547..f71d7a51 100644 --- a/users/discord/style.css +++ b/users/discord/style.css @@ -19,8 +19,9 @@ main { .users_section { grid-area: aside; - overflow: scroll; + overflow: auto; padding-inline: 1rem; + max-height: 80vh; } .tabs_section { diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 83cd40e5..649162f5 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -1,8 +1,12 @@ -export const getUsers = async (tab) => { +export const getUsers = async (tab, lastUserId = null, limit = 20) => { let URL = { in_discord: `${API_BASE_URL}/users/search/?role=in_discord`, verified: `${API_BASE_URL}/users/search/?verified=true`, }; + if (lastUserId) { + URL[tab] += `&last_id=${lastUserId}`; + } + URL[tab] += `&limit=${limit}`; try { const response = await fetch(URL[tab], { @@ -12,6 +16,9 @@ export const getUsers = async (tab) => { 'Content-type': 'application/json', }, }); + if (!response.ok) { + console.error('Failed to fetch:', response.status, response.statusText); + } const data = await response.json(); return data.users ?? []; From e9ffa537ade28480d6d9afb7dafe9579891d23ec Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 8 Oct 2024 21:30:38 +0530 Subject: [PATCH 08/33] fetching mock users and handling fetch more users --- users/discord/App.js | 562 +++++++++++++++++++++-- users/discord/components/UsersSection.js | 58 ++- users/discord/utils/util.js | 9 +- 3 files changed, 572 insertions(+), 57 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 404a5a54..22a928fc 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -5,6 +5,518 @@ import { getUsers } from './utils/util.js'; import { NoUserFound } from './components/NoUserFound.js'; const { createElement, rerender } = react; +const mockUsersData = { + in_discord: [ + { + id: 'user_1', + discordId: '123456789', + username: 'Alice', + avatar: 'https://placekitten.com/50/50?image=1', + }, + { + id: 'user_2', + username: 'Bob', + avatar: 'https://placekitten.com/50/50?image=2', + }, + { + id: 'user_3', + username: 'Charlie', + avatar: 'https://placekitten.com/50/50?image=3', + }, + { + id: 'user_4', + username: 'David', + avatar: 'https://placekitten.com/50/50?image=4', + }, + { + id: 'user_5', + username: 'Eve', + avatar: 'https://placekitten.com/50/50?image=5', + }, + { + id: 'user_6', + username: 'Fay', + avatar: 'https://placekitten.com/50/50?image=6', + }, + { + id: 'user_7', + username: 'George', + avatar: 'https://placekitten.com/50/50?image=7', + }, + { + id: 'user_8', + username: 'Hannah', + avatar: 'https://placekitten.com/50/50?image=8', + }, + { + id: 'user_9', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=9', + }, + { + id: 'user_10', + username: 'Jill', + avatar: 'https://placekitten.com/50/50?image=10', + }, + { + id: 'user_11', + username: 'Karl', + avatar: 'https://placekitten.com/50/50?image=11', + }, + { + id: 'user_12', + username: 'Lily', + avatar: 'https://placekitten.com/50/50?image=12', + }, + { + id: 'user_13', + username: 'Max', + avatar: 'https://placekitten.com/50/50?image=13', + }, + { + id: 'user_14', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=14', + }, + { + id: 'user_15', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=15', + }, + { + id: 'user_16', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=16', + }, + { + id: 'user_17', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=17', + }, + { + id: 'user_18', + username: 'Rachel', + avatar: 'https://placekitten.com/50/50?image=18', + }, + { + id: 'user_19', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=19', + }, + { + id: 'user_20', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=20', + }, + { + id: 'user_21', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=21', + }, + { + id: 'user_22', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=22', + }, + { + id: 'user_23', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=23', + }, + { + id: 'user_24', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=24', + }, + { + id: 'user_25', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=25', + }, + { + id: 'user_26', + username: 'Zack', + avatar: 'https://placekitten.com/50/50?image=26', + }, + { + id: 'user_27', + username: 'Aaron', + avatar: 'https://placekitten.com/50/50?image=27', + }, + { + id: 'user_28', + username: 'Bianca', + avatar: 'https://placekitten.com/50/50?image=28', + }, + { + id: 'user_29', + username: 'Carlos', + avatar: 'https://placekitten.com/50/50?image=29', + }, + { + id: 'user_30', + username: 'Diana', + avatar: 'https://placekitten.com/50/50?image=30', + }, + { + id: 'user_31', + username: 'Eli', + avatar: 'https://placekitten.com/50/50?image=31', + }, + { + id: 'user_32', + username: 'Fiona', + avatar: 'https://placekitten.com/50/50?image=32', + }, + { + id: 'user_33', + username: 'Gus', + avatar: 'https://placekitten.com/50/50?image=33', + }, + { + id: 'user_34', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=34', + }, + { + id: 'user_35', + username: 'Ian', + avatar: 'https://placekitten.com/50/50?image=35', + }, + { + id: 'user_36', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=36', + }, + { + id: 'user_37', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=37', + }, + { + id: 'user_38', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=38', + }, + { + id: 'user_39', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=39', + }, + { + id: 'user_40', + username: 'Nora', + avatar: 'https://placekitten.com/50/50?image=40', + }, + { + id: 'user_41', + username: 'Oliver', + avatar: 'https://placekitten.com/50/50?image=41', + }, + { + id: 'user_42', + username: 'Paula', + avatar: 'https://placekitten.com/50/50?image=42', + }, + { + id: 'user_43', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=43', + }, + { + id: 'user_44', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=44', + }, + { + id: 'user_45', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=45', + }, + { + id: 'user_46', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=46', + }, + { + id: 'user_47', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=47', + }, + { + id: 'user_48', + username: 'Violet', + avatar: 'https://placekitten.com/50/50?image=48', + }, + { + id: 'user_49', + username: 'Wes', + avatar: 'https://placekitten.com/50/50?image=49', + }, + { + id: 'user_50', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=50', + }, + ], + verified: [ + { + id: 'user_51', + username: 'Frank', + avatar: 'https://placekitten.com/50/50?image=51', + }, + { + id: 'user_52', + username: 'Grace', + avatar: 'https://placekitten.com/50/50?image=52', + }, + { + id: 'user_53', + username: 'Henry', + avatar: 'https://placekitten.com/50/50?image=53', + }, + { + id: 'user_54', + username: 'Ivy', + avatar: 'https://placekitten.com/50/50?image=54', + }, + { + id: 'user_55', + username: 'Jack', + avatar: 'https://placekitten.com/50/50?image=55', + }, + { + id: 'user_56', + username: 'Kim', + avatar: 'https://placekitten.com/50/50?image=56', + }, + { + id: 'user_57', + username: 'Leo', + avatar: 'https://placekitten.com/50/50?image=57', + }, + { + id: 'user_58', + username: 'Mila', + avatar: 'https://placekitten.com/50/50?image=58', + }, + { + id: 'user_59', + username: 'Nate', + avatar: 'https://placekitten.com/50/50?image=59', + }, + { + id: 'user_60', + username: 'Olivia', + avatar: 'https://placekitten.com/50/50?image=60', + }, + { + id: 'user_61', + username: 'Paul', + avatar: 'https://placekitten.com/50/50?image=61', + }, + { + id: 'user_62', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=62', + }, + { + id: 'user_63', + username: 'Ruby', + avatar: 'https://placekitten.com/50/50?image=63', + }, + { + id: 'user_64', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=64', + }, + { + id: 'user_65', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=65', + }, + { + id: 'user_66', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=66', + }, + { + id: 'user_67', + username: 'Vera', + avatar: 'https://placekitten.com/50/50?image=67', + }, + { + id: 'user_68', + username: 'Walter', + avatar: 'https://placekitten.com/50/50?image=68', + }, + { + id: 'user_69', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=69', + }, + { + id: 'user_70', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=70', + }, + { + id: 'user_71', + username: 'Zane', + avatar: 'https://placekitten.com/50/50?image=71', + }, + { + id: 'user_72', + username: 'Alan', + avatar: 'https://placekitten.com/50/50?image=72', + }, + { + id: 'user_73', + username: 'Bella', + avatar: 'https://placekitten.com/50/50?image=73', + }, + { + id: 'user_74', + username: 'Chris', + avatar: 'https://placekitten.com/50/50?image=74', + }, + { + id: 'user_75', + username: 'Daisy', + avatar: 'https://placekitten.com/50/50?image=75', + }, + { + id: 'user_76', + username: 'Ethan', + avatar: 'https://placekitten.com/50/50?image=76', + }, + { + id: 'user_77', + username: 'Faye', + avatar: 'https://placekitten.com/50/50?image=77', + }, + { + id: 'user_78', + username: 'Gavin', + avatar: 'https://placekitten.com/50/50?image=78', + }, + { + id: 'user_79', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=79', + }, + { + id: 'user_80', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=80', + }, + { + id: 'user_81', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=81', + }, + { + id: 'user_82', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=82', + }, + { + id: 'user_83', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=83', + }, + { + id: 'user_84', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=84', + }, + { + id: 'user_85', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=85', + }, + { + id: 'user_86', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=86', + }, + { + id: 'user_87', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=87', + }, + { + id: 'user_88', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=88', + }, + { + id: 'user_89', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=89', + }, + { + id: 'user_90', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=90', + }, + { + id: 'user_91', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=91', + }, + { + id: 'user_92', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=92', + }, + { + id: 'user_93', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=93', + }, + { + id: 'user_94', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=94', + }, + { + id: 'user_95', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=95', + }, + { + id: 'user_96', + username: 'Yara', + avatar: 'https://placekitten.com/50/50?image=96', + }, + { + id: 'user_97', + username: 'Zeke', + avatar: 'https://placekitten.com/50/50?image=97', + }, + { + id: 'user_98', + username: 'Ava', + avatar: 'https://placekitten.com/50/50?image=98', + }, + { + id: 'user_99', + username: 'Blake', + avatar: 'https://placekitten.com/50/50?image=99', + }, + { + id: 'user_100', + username: 'Chloe', + avatar: 'https://placekitten.com/50/50?image=100', + }, + ], +}; +/* work on pagination with array index for now, forget about last user id. +You should call the API every time the user reaches the end of the page. +Let's say initially you load 10 users- that's index 0,9 then when the user, +reaches bottom of the page you fetch the data again to get the next 10 users- that's index 10,19 +*/ const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -17,34 +529,34 @@ export const usersData = { const urlParams = new URLSearchParams(window.location.search); let activeTab = urlParams.get('tab') ?? 'in_discord'; - -let showUser = 0; +const INITIAL_USERS = 10; let isLoading = false; -const USERS_PER_FETCH = 20; +let currentPage = 1; +let showUser = 0; +// get mock users +const getMockUser = (tabId, page = 1) => { + const start = (page - 1) * INITIAL_USERS; + const end = start + INITIAL_USERS; + console.log('fetched initial users'); + // currentPage++; + return mockUsersData[tabId].slice(start, end); +}; + +// usersData[activeTab] = await getUsers(activeTab); + +usersData[activeTab] = await getMockUser(activeTab); -usersData[activeTab] = await getUsers(activeTab); +/* create a function to fetch more users (for eg. we initially have 6 users, +we fetch users everytime the user reaches the end of the page.) */ const fetchMoreUsers = async () => { - if (isLoading || !usersData[activeTab]) { - return; - } isLoading = true; - const lastUserId = usersData[activeTab][usersData[activeTab].length - 1]?.id; - try { - const newUsers = await getUsers(activeTab, lastUserId, USERS_PER_FETCH); - usersData[activeTab] = [...usersData[activeTab], ...newUsers]; - isLoading = false; - rerender(App(), window['root']); - } catch (error) { - console.error('Error fetching users', error); - isLoading = false; - } -}; -const handleScroll = (e) => { - const { scrollTop, clientHeight, scrollHeight } = e.target; - if (scrollHeight - scrollTop <= clientHeight + 100) { - fetchMoreUsers(); - } + currentPage++; + const newUsers = await getMockUser(activeTab, currentPage); + usersData[activeTab] = [...usersData[activeTab], ...newUsers]; + console.log(newUsers, 'fetched new users'); + + isLoading = false; }; const handleTabNavigation = async (e) => { @@ -86,8 +598,7 @@ export const App = () => { users, showUser, handleUserSelected, - handleScroll, - isLoading, + fetchMoreUsers, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -97,4 +608,3 @@ export const App = () => { NoUserFound(), ]); }; -fetchMoreUsers(); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index b55cd28e..70f7d8bd 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -4,9 +4,21 @@ export const UsersSection = ({ users, showUser, handleUserSelected, - handleScroll, - isLoading, + fetchMoreUsers, }) => { + const handleScroll = (e) => { + console.log('scroll triggered'); + + const container = e.target; + const { scrollTop, scrollHeight, clientHeight } = container; + if (scrollTop + clientHeight >= scrollHeight - 5) { + isLoading = true; + console.log('user scrolling'); + fetchMoreUsers(); + } + }; + + // handle scroll is not working - add event listener on every scroll element return createElement( 'aside', { @@ -14,26 +26,26 @@ export const UsersSection = ({ onclick: handleUserSelected, onscroll: handleScroll, }, - [ - ...users?.map((user) => { - return createElement( - 'div', - { - class: `user_card ${ - users[showUser].id === user.id ? 'active_tab' : '' - }`, - data_key: user.id, - }, - [ - createElement('img', { - src: user?.picture?.url ?? dummyPicture, - class: 'user_image', - }), - createElement('span', {}, [user.first_name + ' ' + user.last_name]), - ], - ); - }), - isLoading && createElement('div', 'Load more users...'), - ], + users?.map((user) => { + return createElement( + 'div', + { + class: `user_card ${ + users[showUser].id === user.id ? 'active_tab' : '' + }`, + data_key: user.id, + }, + [ + createElement('img', { + src: user?.picture?.url ?? dummyPicture, + class: 'user_image', + }), + // createElement('span', {}, [ + // user.first_name + ' ' + user.last_name + user.username, + // ]), + createElement('span', {}, [user.username]), + ], + ); + }), ); }; diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 649162f5..83cd40e5 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -1,12 +1,8 @@ -export const getUsers = async (tab, lastUserId = null, limit = 20) => { +export const getUsers = async (tab) => { let URL = { in_discord: `${API_BASE_URL}/users/search/?role=in_discord`, verified: `${API_BASE_URL}/users/search/?verified=true`, }; - if (lastUserId) { - URL[tab] += `&last_id=${lastUserId}`; - } - URL[tab] += `&limit=${limit}`; try { const response = await fetch(URL[tab], { @@ -16,9 +12,6 @@ export const getUsers = async (tab, lastUserId = null, limit = 20) => { 'Content-type': 'application/json', }, }); - if (!response.ok) { - console.error('Failed to fetch:', response.status, response.statusText); - } const data = await response.json(); return data.users ?? []; From eb8e8fa47a2ce41f26bf88386d5af9e061015a7c Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 10 Oct 2024 20:29:04 +0530 Subject: [PATCH 09/33] users are getting fetched with scroll but the next set of users are not visible in screen --- users/discord/App.js | 67 +++++++++++++++--------- users/discord/components/UsersSection.js | 33 +++++++----- 2 files changed, 64 insertions(+), 36 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 22a928fc..438f89b8 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -512,11 +512,6 @@ const mockUsersData = { }, ], }; -/* work on pagination with array index for now, forget about last user id. -You should call the API every time the user reaches the end of the page. -Let's say initially you load 10 users- that's index 0,9 then when the user, -reaches bottom of the page you fetch the data again to get the next 10 users- that's index 10,19 -*/ const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -533,32 +528,52 @@ const INITIAL_USERS = 10; let isLoading = false; let currentPage = 1; let showUser = 0; -// get mock users -const getMockUser = (tabId, page = 1) => { - const start = (page - 1) * INITIAL_USERS; - const end = start + INITIAL_USERS; - console.log('fetched initial users'); - // currentPage++; - return mockUsersData[tabId].slice(start, end); -}; // usersData[activeTab] = await getUsers(activeTab); -usersData[activeTab] = await getMockUser(activeTab); - -/* create a function to fetch more users (for eg. we initially have 6 users, -we fetch users everytime the user reaches the end of the page.) */ +const fetchUsers = async (tabId, page = 1) => { + if (isLoading) return; -const fetchMoreUsers = async () => { isLoading = true; - currentPage++; - const newUsers = await getMockUser(activeTab, currentPage); - usersData[activeTab] = [...usersData[activeTab], ...newUsers]; - console.log(newUsers, 'fetched new users'); + try { + const start = (page - 1) * INITIAL_USERS; + const end = start + INITIAL_USERS; + + const newUsers = mockUsersData[tabId].slice(start, end); - isLoading = false; + if (newUsers.length > 0) { + if (page === 1) { + usersData[tabId] = newUsers; // Initial load + console.log('Fetched initial users'); + } else { + usersData[tabId] = [...usersData[tabId], ...newUsers]; // Append new users + console.log('Fetched more users'); + console.log(usersData[tabId]); + } + currentPage = page; + rerender(App(), window[root]); // Re-render the app with the new users + } else { + console.log('No more users to fetch'); + } + } catch (error) { + console.error('Error fetching users', error); + } finally { + isLoading = false; + } }; +const handleScroll = () => { + const scrollPosition = window.innerHeight + window.scrollY; + const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom + + if (scrollPosition >= bottomPosition) { + // Fetch more users when the user is near the bottom + fetchUsers(activeTab, currentPage + 1); + } +}; + +window.addEventListener('scroll', handleScroll); + const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -598,7 +613,9 @@ export const App = () => { users, showUser, handleUserSelected, - fetchMoreUsers, + fetchUsers, + activeTab, + currentPage, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); @@ -608,3 +625,5 @@ export const App = () => { NoUserFound(), ]); }; + +fetchUsers(activeTab, 1); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 70f7d8bd..8812d193 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -4,27 +4,36 @@ export const UsersSection = ({ users, showUser, handleUserSelected, - fetchMoreUsers, + fetchUsers, + activeTab, + currentPage, }) => { - const handleScroll = (e) => { - console.log('scroll triggered'); - - const container = e.target; - const { scrollTop, scrollHeight, clientHeight } = container; - if (scrollTop + clientHeight >= scrollHeight - 5) { - isLoading = true; - console.log('user scrolling'); - fetchMoreUsers(); - } + const debounce = (func, delay) => { + let timeoutId; + return function (...args) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + func.apply(this, args); + }, delay); + }; }; + window.addEventListener( + 'scroll', + debounce(() => { + console.log('scroll triggered'); + if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { + fetchUsers(activeTab, currentPage + 1); // Fetch next page + } + }, 200), + ); + // handle scroll is not working - add event listener on every scroll element return createElement( 'aside', { class: 'users_section', onclick: handleUserSelected, - onscroll: handleScroll, }, users?.map((user) => { return createElement( From 87ec1d99f75e8e68715bd97b7482da1459429db4 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 07:08:38 +0530 Subject: [PATCH 10/33] user list is getting updated --- users/discord/App.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 438f89b8..2f3100a4 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -551,7 +551,7 @@ const fetchUsers = async (tabId, page = 1) => { console.log(usersData[tabId]); } currentPage = page; - rerender(App(), window[root]); // Re-render the app with the new users + rerender(App(), document.getElementById('root')); // Re-render the app with the new users } else { console.log('No more users to fetch'); } @@ -562,17 +562,17 @@ const fetchUsers = async (tabId, page = 1) => { } }; -const handleScroll = () => { - const scrollPosition = window.innerHeight + window.scrollY; - const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom +// const handleScroll = () => { +// const scrollPosition = window.innerHeight + window.scrollY; +// const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom - if (scrollPosition >= bottomPosition) { - // Fetch more users when the user is near the bottom - fetchUsers(activeTab, currentPage + 1); - } -}; +// if (scrollPosition >= bottomPosition) { +// // Fetch more users when the user is near the bottom +// fetchUsers(activeTab, currentPage + 1); +// } +// }; -window.addEventListener('scroll', handleScroll); +// window.addEventListener('scroll', handleScroll); const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); From 458cb095c3babf264737ef680333fc295a3d85bb Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 07:23:44 +0530 Subject: [PATCH 11/33] fixed duplicated fetching --- users/discord/App.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/users/discord/App.js b/users/discord/App.js index 2f3100a4..2293ccf4 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -546,7 +546,11 @@ const fetchUsers = async (tabId, page = 1) => { usersData[tabId] = newUsers; // Initial load console.log('Fetched initial users'); } else { - usersData[tabId] = [...usersData[tabId], ...newUsers]; // Append new users + const existingIds = new Set(usersData[tabId].map((user) => user.id)); + const uniqueNewUsers = newUsers.filter( + (user) => !existingIds.has(user.id), + ); + usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; console.log('Fetched more users'); console.log(usersData[tabId]); } From de294ea6bb62ddb7f0473dfcf44f5d716f8a0637 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 19:31:36 +0530 Subject: [PATCH 12/33] moved mock data to utils, addded loading state --- users/discord/App.js | 531 +---------------------- users/discord/components/UsersSection.js | 10 +- users/discord/utils/util.js | 508 ++++++++++++++++++++++ 3 files changed, 524 insertions(+), 525 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 2293ccf4..73aeda96 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -1,517 +1,10 @@ import { TabsSection } from './components/TabsSection.js'; import { UsersSection } from './components/UsersSection.js'; import { UserDetailsSection } from './components/UserDetailsSection.js'; -import { getUsers } from './utils/util.js'; +import { getUsers, mockUsersData } from './utils/util.js'; import { NoUserFound } from './components/NoUserFound.js'; const { createElement, rerender } = react; -const mockUsersData = { - in_discord: [ - { - id: 'user_1', - discordId: '123456789', - username: 'Alice', - avatar: 'https://placekitten.com/50/50?image=1', - }, - { - id: 'user_2', - username: 'Bob', - avatar: 'https://placekitten.com/50/50?image=2', - }, - { - id: 'user_3', - username: 'Charlie', - avatar: 'https://placekitten.com/50/50?image=3', - }, - { - id: 'user_4', - username: 'David', - avatar: 'https://placekitten.com/50/50?image=4', - }, - { - id: 'user_5', - username: 'Eve', - avatar: 'https://placekitten.com/50/50?image=5', - }, - { - id: 'user_6', - username: 'Fay', - avatar: 'https://placekitten.com/50/50?image=6', - }, - { - id: 'user_7', - username: 'George', - avatar: 'https://placekitten.com/50/50?image=7', - }, - { - id: 'user_8', - username: 'Hannah', - avatar: 'https://placekitten.com/50/50?image=8', - }, - { - id: 'user_9', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=9', - }, - { - id: 'user_10', - username: 'Jill', - avatar: 'https://placekitten.com/50/50?image=10', - }, - { - id: 'user_11', - username: 'Karl', - avatar: 'https://placekitten.com/50/50?image=11', - }, - { - id: 'user_12', - username: 'Lily', - avatar: 'https://placekitten.com/50/50?image=12', - }, - { - id: 'user_13', - username: 'Max', - avatar: 'https://placekitten.com/50/50?image=13', - }, - { - id: 'user_14', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=14', - }, - { - id: 'user_15', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=15', - }, - { - id: 'user_16', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=16', - }, - { - id: 'user_17', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=17', - }, - { - id: 'user_18', - username: 'Rachel', - avatar: 'https://placekitten.com/50/50?image=18', - }, - { - id: 'user_19', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=19', - }, - { - id: 'user_20', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=20', - }, - { - id: 'user_21', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=21', - }, - { - id: 'user_22', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=22', - }, - { - id: 'user_23', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=23', - }, - { - id: 'user_24', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=24', - }, - { - id: 'user_25', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=25', - }, - { - id: 'user_26', - username: 'Zack', - avatar: 'https://placekitten.com/50/50?image=26', - }, - { - id: 'user_27', - username: 'Aaron', - avatar: 'https://placekitten.com/50/50?image=27', - }, - { - id: 'user_28', - username: 'Bianca', - avatar: 'https://placekitten.com/50/50?image=28', - }, - { - id: 'user_29', - username: 'Carlos', - avatar: 'https://placekitten.com/50/50?image=29', - }, - { - id: 'user_30', - username: 'Diana', - avatar: 'https://placekitten.com/50/50?image=30', - }, - { - id: 'user_31', - username: 'Eli', - avatar: 'https://placekitten.com/50/50?image=31', - }, - { - id: 'user_32', - username: 'Fiona', - avatar: 'https://placekitten.com/50/50?image=32', - }, - { - id: 'user_33', - username: 'Gus', - avatar: 'https://placekitten.com/50/50?image=33', - }, - { - id: 'user_34', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=34', - }, - { - id: 'user_35', - username: 'Ian', - avatar: 'https://placekitten.com/50/50?image=35', - }, - { - id: 'user_36', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=36', - }, - { - id: 'user_37', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=37', - }, - { - id: 'user_38', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=38', - }, - { - id: 'user_39', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=39', - }, - { - id: 'user_40', - username: 'Nora', - avatar: 'https://placekitten.com/50/50?image=40', - }, - { - id: 'user_41', - username: 'Oliver', - avatar: 'https://placekitten.com/50/50?image=41', - }, - { - id: 'user_42', - username: 'Paula', - avatar: 'https://placekitten.com/50/50?image=42', - }, - { - id: 'user_43', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=43', - }, - { - id: 'user_44', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=44', - }, - { - id: 'user_45', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=45', - }, - { - id: 'user_46', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=46', - }, - { - id: 'user_47', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=47', - }, - { - id: 'user_48', - username: 'Violet', - avatar: 'https://placekitten.com/50/50?image=48', - }, - { - id: 'user_49', - username: 'Wes', - avatar: 'https://placekitten.com/50/50?image=49', - }, - { - id: 'user_50', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=50', - }, - ], - verified: [ - { - id: 'user_51', - username: 'Frank', - avatar: 'https://placekitten.com/50/50?image=51', - }, - { - id: 'user_52', - username: 'Grace', - avatar: 'https://placekitten.com/50/50?image=52', - }, - { - id: 'user_53', - username: 'Henry', - avatar: 'https://placekitten.com/50/50?image=53', - }, - { - id: 'user_54', - username: 'Ivy', - avatar: 'https://placekitten.com/50/50?image=54', - }, - { - id: 'user_55', - username: 'Jack', - avatar: 'https://placekitten.com/50/50?image=55', - }, - { - id: 'user_56', - username: 'Kim', - avatar: 'https://placekitten.com/50/50?image=56', - }, - { - id: 'user_57', - username: 'Leo', - avatar: 'https://placekitten.com/50/50?image=57', - }, - { - id: 'user_58', - username: 'Mila', - avatar: 'https://placekitten.com/50/50?image=58', - }, - { - id: 'user_59', - username: 'Nate', - avatar: 'https://placekitten.com/50/50?image=59', - }, - { - id: 'user_60', - username: 'Olivia', - avatar: 'https://placekitten.com/50/50?image=60', - }, - { - id: 'user_61', - username: 'Paul', - avatar: 'https://placekitten.com/50/50?image=61', - }, - { - id: 'user_62', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=62', - }, - { - id: 'user_63', - username: 'Ruby', - avatar: 'https://placekitten.com/50/50?image=63', - }, - { - id: 'user_64', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=64', - }, - { - id: 'user_65', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=65', - }, - { - id: 'user_66', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=66', - }, - { - id: 'user_67', - username: 'Vera', - avatar: 'https://placekitten.com/50/50?image=67', - }, - { - id: 'user_68', - username: 'Walter', - avatar: 'https://placekitten.com/50/50?image=68', - }, - { - id: 'user_69', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=69', - }, - { - id: 'user_70', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=70', - }, - { - id: 'user_71', - username: 'Zane', - avatar: 'https://placekitten.com/50/50?image=71', - }, - { - id: 'user_72', - username: 'Alan', - avatar: 'https://placekitten.com/50/50?image=72', - }, - { - id: 'user_73', - username: 'Bella', - avatar: 'https://placekitten.com/50/50?image=73', - }, - { - id: 'user_74', - username: 'Chris', - avatar: 'https://placekitten.com/50/50?image=74', - }, - { - id: 'user_75', - username: 'Daisy', - avatar: 'https://placekitten.com/50/50?image=75', - }, - { - id: 'user_76', - username: 'Ethan', - avatar: 'https://placekitten.com/50/50?image=76', - }, - { - id: 'user_77', - username: 'Faye', - avatar: 'https://placekitten.com/50/50?image=77', - }, - { - id: 'user_78', - username: 'Gavin', - avatar: 'https://placekitten.com/50/50?image=78', - }, - { - id: 'user_79', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=79', - }, - { - id: 'user_80', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=80', - }, - { - id: 'user_81', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=81', - }, - { - id: 'user_82', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=82', - }, - { - id: 'user_83', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=83', - }, - { - id: 'user_84', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=84', - }, - { - id: 'user_85', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=85', - }, - { - id: 'user_86', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=86', - }, - { - id: 'user_87', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=87', - }, - { - id: 'user_88', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=88', - }, - { - id: 'user_89', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=89', - }, - { - id: 'user_90', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=90', - }, - { - id: 'user_91', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=91', - }, - { - id: 'user_92', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=92', - }, - { - id: 'user_93', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=93', - }, - { - id: 'user_94', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=94', - }, - { - id: 'user_95', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=95', - }, - { - id: 'user_96', - username: 'Yara', - avatar: 'https://placekitten.com/50/50?image=96', - }, - { - id: 'user_97', - username: 'Zeke', - avatar: 'https://placekitten.com/50/50?image=97', - }, - { - id: 'user_98', - username: 'Ava', - avatar: 'https://placekitten.com/50/50?image=98', - }, - { - id: 'user_99', - username: 'Blake', - avatar: 'https://placekitten.com/50/50?image=99', - }, - { - id: 'user_100', - username: 'Chloe', - avatar: 'https://placekitten.com/50/50?image=100', - }, - ], -}; const tabs = [ { display_name: 'In Discord', id: 'in_discord' }, @@ -531,10 +24,13 @@ let showUser = 0; // usersData[activeTab] = await getUsers(activeTab); -const fetchUsers = async (tabId, page = 1) => { - if (isLoading) return; +export const fetchUsers = async (tabId, page = 1) => { + if (isLoading) { + return; + } isLoading = true; + try { const start = (page - 1) * INITIAL_USERS; const end = start + INITIAL_USERS; @@ -555,7 +51,7 @@ const fetchUsers = async (tabId, page = 1) => { console.log(usersData[tabId]); } currentPage = page; - rerender(App(), document.getElementById('root')); // Re-render the app with the new users + rerender(App(), document.getElementById('root')); } else { console.log('No more users to fetch'); } @@ -566,18 +62,6 @@ const fetchUsers = async (tabId, page = 1) => { } }; -// const handleScroll = () => { -// const scrollPosition = window.innerHeight + window.scrollY; -// const bottomPosition = document.body.offsetHeight - 100; // Trigger fetch 100px from bottom - -// if (scrollPosition >= bottomPosition) { -// // Fetch more users when the user is near the bottom -// fetchUsers(activeTab, currentPage + 1); -// } -// }; - -// window.addEventListener('scroll', handleScroll); - const handleTabNavigation = async (e) => { const selectedTabId = e.target.getAttribute('data_key'); if (selectedTabId) { @@ -620,6 +104,7 @@ export const App = () => { fetchUsers, activeTab, currentPage, + isLoading, }), UserDetailsSection({ user: users[showUser] ?? {} }), ]); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 8812d193..46cfc404 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -7,6 +7,7 @@ export const UsersSection = ({ fetchUsers, activeTab, currentPage, + isLoading, }) => { const debounce = (func, delay) => { let timeoutId; @@ -23,12 +24,17 @@ export const UsersSection = ({ debounce(() => { console.log('scroll triggered'); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { - fetchUsers(activeTab, currentPage + 1); // Fetch next page + fetchUsers(activeTab, currentPage + 1); } }, 200), ); - // handle scroll is not working - add event listener on every scroll element + if (isLoading) { + return createElement('aside', { class: 'users_section' }, [ + createElement('div', { class: 'loading' }, ['Loading...']), + ]); + } + return createElement( 'aside', { diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 83cd40e5..6124faea 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -19,3 +19,511 @@ export const getUsers = async (tab) => { console.error(err); } }; +// mock user data +export const mockUsersData = { + in_discord: [ + { + id: 'user_1', + discordId: '123456789', + username: 'Alice', + avatar: 'https://placekitten.com/50/50?image=1', + }, + { + id: 'user_2', + username: 'Bob', + avatar: 'https://placekitten.com/50/50?image=2', + }, + { + id: 'user_3', + username: 'Charlie', + avatar: 'https://placekitten.com/50/50?image=3', + }, + { + id: 'user_4', + username: 'David', + avatar: 'https://placekitten.com/50/50?image=4', + }, + { + id: 'user_5', + username: 'Eve', + avatar: 'https://placekitten.com/50/50?image=5', + }, + { + id: 'user_6', + username: 'Fay', + avatar: 'https://placekitten.com/50/50?image=6', + }, + { + id: 'user_7', + username: 'George', + avatar: 'https://placekitten.com/50/50?image=7', + }, + { + id: 'user_8', + username: 'Hannah', + avatar: 'https://placekitten.com/50/50?image=8', + }, + { + id: 'user_9', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=9', + }, + { + id: 'user_10', + username: 'Jill', + avatar: 'https://placekitten.com/50/50?image=10', + }, + { + id: 'user_11', + username: 'Karl', + avatar: 'https://placekitten.com/50/50?image=11', + }, + { + id: 'user_12', + username: 'Lily', + avatar: 'https://placekitten.com/50/50?image=12', + }, + { + id: 'user_13', + username: 'Max', + avatar: 'https://placekitten.com/50/50?image=13', + }, + { + id: 'user_14', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=14', + }, + { + id: 'user_15', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=15', + }, + { + id: 'user_16', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=16', + }, + { + id: 'user_17', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=17', + }, + { + id: 'user_18', + username: 'Rachel', + avatar: 'https://placekitten.com/50/50?image=18', + }, + { + id: 'user_19', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=19', + }, + { + id: 'user_20', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=20', + }, + { + id: 'user_21', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=21', + }, + { + id: 'user_22', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=22', + }, + { + id: 'user_23', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=23', + }, + { + id: 'user_24', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=24', + }, + { + id: 'user_25', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=25', + }, + { + id: 'user_26', + username: 'Zack', + avatar: 'https://placekitten.com/50/50?image=26', + }, + { + id: 'user_27', + username: 'Aaron', + avatar: 'https://placekitten.com/50/50?image=27', + }, + { + id: 'user_28', + username: 'Bianca', + avatar: 'https://placekitten.com/50/50?image=28', + }, + { + id: 'user_29', + username: 'Carlos', + avatar: 'https://placekitten.com/50/50?image=29', + }, + { + id: 'user_30', + username: 'Diana', + avatar: 'https://placekitten.com/50/50?image=30', + }, + { + id: 'user_31', + username: 'Eli', + avatar: 'https://placekitten.com/50/50?image=31', + }, + { + id: 'user_32', + username: 'Fiona', + avatar: 'https://placekitten.com/50/50?image=32', + }, + { + id: 'user_33', + username: 'Gus', + avatar: 'https://placekitten.com/50/50?image=33', + }, + { + id: 'user_34', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=34', + }, + { + id: 'user_35', + username: 'Ian', + avatar: 'https://placekitten.com/50/50?image=35', + }, + { + id: 'user_36', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=36', + }, + { + id: 'user_37', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=37', + }, + { + id: 'user_38', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=38', + }, + { + id: 'user_39', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=39', + }, + { + id: 'user_40', + username: 'Nora', + avatar: 'https://placekitten.com/50/50?image=40', + }, + { + id: 'user_41', + username: 'Oliver', + avatar: 'https://placekitten.com/50/50?image=41', + }, + { + id: 'user_42', + username: 'Paula', + avatar: 'https://placekitten.com/50/50?image=42', + }, + { + id: 'user_43', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=43', + }, + { + id: 'user_44', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=44', + }, + { + id: 'user_45', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=45', + }, + { + id: 'user_46', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=46', + }, + { + id: 'user_47', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=47', + }, + { + id: 'user_48', + username: 'Violet', + avatar: 'https://placekitten.com/50/50?image=48', + }, + { + id: 'user_49', + username: 'Wes', + avatar: 'https://placekitten.com/50/50?image=49', + }, + { + id: 'user_50', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=50', + }, + ], + verified: [ + { + id: 'user_51', + username: 'Frank', + avatar: 'https://placekitten.com/50/50?image=51', + }, + { + id: 'user_52', + username: 'Grace', + avatar: 'https://placekitten.com/50/50?image=52', + }, + { + id: 'user_53', + username: 'Henry', + avatar: 'https://placekitten.com/50/50?image=53', + }, + { + id: 'user_54', + username: 'Ivy', + avatar: 'https://placekitten.com/50/50?image=54', + }, + { + id: 'user_55', + username: 'Jack', + avatar: 'https://placekitten.com/50/50?image=55', + }, + { + id: 'user_56', + username: 'Kim', + avatar: 'https://placekitten.com/50/50?image=56', + }, + { + id: 'user_57', + username: 'Leo', + avatar: 'https://placekitten.com/50/50?image=57', + }, + { + id: 'user_58', + username: 'Mila', + avatar: 'https://placekitten.com/50/50?image=58', + }, + { + id: 'user_59', + username: 'Nate', + avatar: 'https://placekitten.com/50/50?image=59', + }, + { + id: 'user_60', + username: 'Olivia', + avatar: 'https://placekitten.com/50/50?image=60', + }, + { + id: 'user_61', + username: 'Paul', + avatar: 'https://placekitten.com/50/50?image=61', + }, + { + id: 'user_62', + username: 'Quinn', + avatar: 'https://placekitten.com/50/50?image=62', + }, + { + id: 'user_63', + username: 'Ruby', + avatar: 'https://placekitten.com/50/50?image=63', + }, + { + id: 'user_64', + username: 'Steve', + avatar: 'https://placekitten.com/50/50?image=64', + }, + { + id: 'user_65', + username: 'Tina', + avatar: 'https://placekitten.com/50/50?image=65', + }, + { + id: 'user_66', + username: 'Ulysses', + avatar: 'https://placekitten.com/50/50?image=66', + }, + { + id: 'user_67', + username: 'Vera', + avatar: 'https://placekitten.com/50/50?image=67', + }, + { + id: 'user_68', + username: 'Walter', + avatar: 'https://placekitten.com/50/50?image=68', + }, + { + id: 'user_69', + username: 'Xena', + avatar: 'https://placekitten.com/50/50?image=69', + }, + { + id: 'user_70', + username: 'Yvonne', + avatar: 'https://placekitten.com/50/50?image=70', + }, + { + id: 'user_71', + username: 'Zane', + avatar: 'https://placekitten.com/50/50?image=71', + }, + { + id: 'user_72', + username: 'Alan', + avatar: 'https://placekitten.com/50/50?image=72', + }, + { + id: 'user_73', + username: 'Bella', + avatar: 'https://placekitten.com/50/50?image=73', + }, + { + id: 'user_74', + username: 'Chris', + avatar: 'https://placekitten.com/50/50?image=74', + }, + { + id: 'user_75', + username: 'Daisy', + avatar: 'https://placekitten.com/50/50?image=75', + }, + { + id: 'user_76', + username: 'Ethan', + avatar: 'https://placekitten.com/50/50?image=76', + }, + { + id: 'user_77', + username: 'Faye', + avatar: 'https://placekitten.com/50/50?image=77', + }, + { + id: 'user_78', + username: 'Gavin', + avatar: 'https://placekitten.com/50/50?image=78', + }, + { + id: 'user_79', + username: 'Holly', + avatar: 'https://placekitten.com/50/50?image=79', + }, + { + id: 'user_80', + username: 'Isaac', + avatar: 'https://placekitten.com/50/50?image=80', + }, + { + id: 'user_81', + username: 'Julia', + avatar: 'https://placekitten.com/50/50?image=81', + }, + { + id: 'user_82', + username: 'Kevin', + avatar: 'https://placekitten.com/50/50?image=82', + }, + { + id: 'user_83', + username: 'Laura', + avatar: 'https://placekitten.com/50/50?image=83', + }, + { + id: 'user_84', + username: 'Mike', + avatar: 'https://placekitten.com/50/50?image=84', + }, + { + id: 'user_85', + username: 'Nina', + avatar: 'https://placekitten.com/50/50?image=85', + }, + { + id: 'user_86', + username: 'Oscar', + avatar: 'https://placekitten.com/50/50?image=86', + }, + { + id: 'user_87', + username: 'Pam', + avatar: 'https://placekitten.com/50/50?image=87', + }, + { + id: 'user_88', + username: 'Quincy', + avatar: 'https://placekitten.com/50/50?image=88', + }, + { + id: 'user_89', + username: 'Rose', + avatar: 'https://placekitten.com/50/50?image=89', + }, + { + id: 'user_90', + username: 'Sam', + avatar: 'https://placekitten.com/50/50?image=90', + }, + { + id: 'user_91', + username: 'Tara', + avatar: 'https://placekitten.com/50/50?image=91', + }, + { + id: 'user_92', + username: 'Uma', + avatar: 'https://placekitten.com/50/50?image=92', + }, + { + id: 'user_93', + username: 'Victor', + avatar: 'https://placekitten.com/50/50?image=93', + }, + { + id: 'user_94', + username: 'Wendy', + avatar: 'https://placekitten.com/50/50?image=94', + }, + { + id: 'user_95', + username: 'Xander', + avatar: 'https://placekitten.com/50/50?image=95', + }, + { + id: 'user_96', + username: 'Yara', + avatar: 'https://placekitten.com/50/50?image=96', + }, + { + id: 'user_97', + username: 'Zeke', + avatar: 'https://placekitten.com/50/50?image=97', + }, + { + id: 'user_98', + username: 'Ava', + avatar: 'https://placekitten.com/50/50?image=98', + }, + { + id: 'user_99', + username: 'Blake', + avatar: 'https://placekitten.com/50/50?image=99', + }, + { + id: 'user_100', + username: 'Chloe', + avatar: 'https://placekitten.com/50/50?image=100', + }, + ], +}; From 31a8a1b3a3476685fbdea454aea99af5f8fcd10b Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 15 Oct 2024 19:59:06 +0530 Subject: [PATCH 13/33] fixed loading psinner issue --- users/discord/App.js | 6 +----- users/discord/components/UsersSection.js | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 73aeda96..ae98bd1e 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -40,25 +40,21 @@ export const fetchUsers = async (tabId, page = 1) => { if (newUsers.length > 0) { if (page === 1) { usersData[tabId] = newUsers; // Initial load - console.log('Fetched initial users'); } else { const existingIds = new Set(usersData[tabId].map((user) => user.id)); const uniqueNewUsers = newUsers.filter( (user) => !existingIds.has(user.id), ); usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; - console.log('Fetched more users'); - console.log(usersData[tabId]); } currentPage = page; - rerender(App(), document.getElementById('root')); } else { - console.log('No more users to fetch'); } } catch (error) { console.error('Error fetching users', error); } finally { isLoading = false; + rerender(App(), document.getElementById('root')); } }; diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 46cfc404..28617444 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -22,7 +22,6 @@ export const UsersSection = ({ window.addEventListener( 'scroll', debounce(() => { - console.log('scroll triggered'); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { fetchUsers(activeTab, currentPage + 1); } From b3c7664c3c5500f37b540357022bcdb64a321d99 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 16 Oct 2024 21:11:54 +0530 Subject: [PATCH 14/33] removed empty else block --- users/discord/App.js | 1 - 1 file changed, 1 deletion(-) diff --git a/users/discord/App.js b/users/discord/App.js index ae98bd1e..5bbb1858 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -48,7 +48,6 @@ export const fetchUsers = async (tabId, page = 1) => { usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; } currentPage = page; - } else { } } catch (error) { console.error('Error fetching users', error); From 2155129b87717191df9c2ed02549b8f1b498723c Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 17 Oct 2024 18:56:34 +0530 Subject: [PATCH 15/33] removed debounce function as it is already defined globally --- users/discord/components/UsersSection.js | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 28617444..a4e569ec 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -9,19 +9,10 @@ export const UsersSection = ({ currentPage, isLoading, }) => { - const debounce = (func, delay) => { - let timeoutId; - return function (...args) { - clearTimeout(timeoutId); - timeoutId = setTimeout(() => { - func.apply(this, args); - }, delay); - }; - }; - window.addEventListener( 'scroll', debounce(() => { + console.log('scroll triggered'); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { fetchUsers(activeTab, currentPage + 1); } From 3c7dde32ad271627e2d817e76ac715e1038e95e7 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 17 Oct 2024 19:04:58 +0530 Subject: [PATCH 16/33] Added comments for a few fucntions --- users/discord/App.js | 3 +++ users/discord/components/UsersSection.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/users/discord/App.js b/users/discord/App.js index 5bbb1858..dab87577 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -22,6 +22,9 @@ let isLoading = false; let currentPage = 1; let showUser = 0; +/* this is the original function for fetching user data from the API, will remove it once +the API pagination issue is resolved. Currently testing pagination using mock data. + */ // usersData[activeTab] = await getUsers(activeTab); export const fetchUsers = async (tabId, page = 1) => { diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index a4e569ec..0e42bf29 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -45,9 +45,13 @@ export const UsersSection = ({ src: user?.picture?.url ?? dummyPicture, class: 'user_image', }), + /* will uncomment this once we have actual paginated data from the API */ + // createElement('span', {}, [ // user.first_name + ' ' + user.last_name + user.username, // ]), + + /* will remove this once we have actual paginated data from the API */ createElement('span', {}, [user.username]), ], ); From db348a99a58868d3c9c05e7d4e94f1c81e9ac380 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 22 Oct 2024 19:11:54 +0530 Subject: [PATCH 17/33] created a separate component for loading spinner --- users/discord/components/LoadingSpinner.js | 7 +++++++ users/discord/components/UsersSection.js | 12 ++---------- 2 files changed, 9 insertions(+), 10 deletions(-) create mode 100644 users/discord/components/LoadingSpinner.js diff --git a/users/discord/components/LoadingSpinner.js b/users/discord/components/LoadingSpinner.js new file mode 100644 index 00000000..ea8d84f5 --- /dev/null +++ b/users/discord/components/LoadingSpinner.js @@ -0,0 +1,7 @@ +const { createElement } = react; + +export const LoadingSpinner = () => { + return createElement('aside', { class: 'users_section' }, [ + createElement('div', { class: 'loading' }, ['Loading...']), + ]); +}; diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 0e42bf29..e6b796d9 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -1,4 +1,5 @@ const { createElement } = react; +import { LoadingSpinner } from './LoadingSpinner.js'; export const UsersSection = ({ users, @@ -20,9 +21,7 @@ export const UsersSection = ({ ); if (isLoading) { - return createElement('aside', { class: 'users_section' }, [ - createElement('div', { class: 'loading' }, ['Loading...']), - ]); + return LoadingSpinner(); } return createElement( @@ -45,13 +44,6 @@ export const UsersSection = ({ src: user?.picture?.url ?? dummyPicture, class: 'user_image', }), - /* will uncomment this once we have actual paginated data from the API */ - - // createElement('span', {}, [ - // user.first_name + ' ' + user.last_name + user.username, - // ]), - - /* will remove this once we have actual paginated data from the API */ createElement('span', {}, [user.username]), ], ); From eb3bd0fd06c952dc0661b19bbeefb6e99b794491 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 30 Oct 2024 16:17:10 +0530 Subject: [PATCH 18/33] updated pagination function to get data from api and then paginate them on frontend --- users/discord/App.js | 12 +- users/discord/components/UsersSection.js | 7 +- users/discord/utils/util.js | 508 ----------------------- 3 files changed, 10 insertions(+), 517 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index dab87577..b22bd6bc 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -1,7 +1,7 @@ import { TabsSection } from './components/TabsSection.js'; import { UsersSection } from './components/UsersSection.js'; import { UserDetailsSection } from './components/UserDetailsSection.js'; -import { getUsers, mockUsersData } from './utils/util.js'; +import { getUsers } from './utils/util.js'; import { NoUserFound } from './components/NoUserFound.js'; const { createElement, rerender } = react; @@ -26,11 +26,13 @@ let showUser = 0; the API pagination issue is resolved. Currently testing pagination using mock data. */ // usersData[activeTab] = await getUsers(activeTab); +// add feature flag(feature should be only visible when query params dev=true) -export const fetchUsers = async (tabId, page = 1) => { +export const paginateFetchedUsers = async (tabId, page = 1) => { if (isLoading) { return; } + usersData[activeTab] = await getUsers(activeTab); isLoading = true; @@ -38,7 +40,7 @@ export const fetchUsers = async (tabId, page = 1) => { const start = (page - 1) * INITIAL_USERS; const end = start + INITIAL_USERS; - const newUsers = mockUsersData[tabId].slice(start, end); + const newUsers = usersData[tabId].slice(start, end); if (newUsers.length > 0) { if (page === 1) { @@ -99,7 +101,7 @@ export const App = () => { users, showUser, handleUserSelected, - fetchUsers, + paginateFetchedUsers, activeTab, currentPage, isLoading, @@ -113,4 +115,4 @@ export const App = () => { ]); }; -fetchUsers(activeTab, 1); +paginateFetchedUsers(activeTab, 1); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index e6b796d9..736af471 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -5,7 +5,7 @@ export const UsersSection = ({ users, showUser, handleUserSelected, - fetchUsers, + paginateFetchedUsers, activeTab, currentPage, isLoading, @@ -13,9 +13,8 @@ export const UsersSection = ({ window.addEventListener( 'scroll', debounce(() => { - console.log('scroll triggered'); if (window.innerHeight + window.scrollY >= document.body.offsetHeight) { - fetchUsers(activeTab, currentPage + 1); + paginateFetchedUsers(activeTab, currentPage + 1); } }, 200), ); @@ -44,7 +43,7 @@ export const UsersSection = ({ src: user?.picture?.url ?? dummyPicture, class: 'user_image', }), - createElement('span', {}, [user.username]), + createElement('span', {}, [user.first_name + ' ' + user.last_name]), ], ); }), diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js index 6124faea..83cd40e5 100644 --- a/users/discord/utils/util.js +++ b/users/discord/utils/util.js @@ -19,511 +19,3 @@ export const getUsers = async (tab) => { console.error(err); } }; -// mock user data -export const mockUsersData = { - in_discord: [ - { - id: 'user_1', - discordId: '123456789', - username: 'Alice', - avatar: 'https://placekitten.com/50/50?image=1', - }, - { - id: 'user_2', - username: 'Bob', - avatar: 'https://placekitten.com/50/50?image=2', - }, - { - id: 'user_3', - username: 'Charlie', - avatar: 'https://placekitten.com/50/50?image=3', - }, - { - id: 'user_4', - username: 'David', - avatar: 'https://placekitten.com/50/50?image=4', - }, - { - id: 'user_5', - username: 'Eve', - avatar: 'https://placekitten.com/50/50?image=5', - }, - { - id: 'user_6', - username: 'Fay', - avatar: 'https://placekitten.com/50/50?image=6', - }, - { - id: 'user_7', - username: 'George', - avatar: 'https://placekitten.com/50/50?image=7', - }, - { - id: 'user_8', - username: 'Hannah', - avatar: 'https://placekitten.com/50/50?image=8', - }, - { - id: 'user_9', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=9', - }, - { - id: 'user_10', - username: 'Jill', - avatar: 'https://placekitten.com/50/50?image=10', - }, - { - id: 'user_11', - username: 'Karl', - avatar: 'https://placekitten.com/50/50?image=11', - }, - { - id: 'user_12', - username: 'Lily', - avatar: 'https://placekitten.com/50/50?image=12', - }, - { - id: 'user_13', - username: 'Max', - avatar: 'https://placekitten.com/50/50?image=13', - }, - { - id: 'user_14', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=14', - }, - { - id: 'user_15', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=15', - }, - { - id: 'user_16', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=16', - }, - { - id: 'user_17', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=17', - }, - { - id: 'user_18', - username: 'Rachel', - avatar: 'https://placekitten.com/50/50?image=18', - }, - { - id: 'user_19', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=19', - }, - { - id: 'user_20', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=20', - }, - { - id: 'user_21', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=21', - }, - { - id: 'user_22', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=22', - }, - { - id: 'user_23', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=23', - }, - { - id: 'user_24', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=24', - }, - { - id: 'user_25', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=25', - }, - { - id: 'user_26', - username: 'Zack', - avatar: 'https://placekitten.com/50/50?image=26', - }, - { - id: 'user_27', - username: 'Aaron', - avatar: 'https://placekitten.com/50/50?image=27', - }, - { - id: 'user_28', - username: 'Bianca', - avatar: 'https://placekitten.com/50/50?image=28', - }, - { - id: 'user_29', - username: 'Carlos', - avatar: 'https://placekitten.com/50/50?image=29', - }, - { - id: 'user_30', - username: 'Diana', - avatar: 'https://placekitten.com/50/50?image=30', - }, - { - id: 'user_31', - username: 'Eli', - avatar: 'https://placekitten.com/50/50?image=31', - }, - { - id: 'user_32', - username: 'Fiona', - avatar: 'https://placekitten.com/50/50?image=32', - }, - { - id: 'user_33', - username: 'Gus', - avatar: 'https://placekitten.com/50/50?image=33', - }, - { - id: 'user_34', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=34', - }, - { - id: 'user_35', - username: 'Ian', - avatar: 'https://placekitten.com/50/50?image=35', - }, - { - id: 'user_36', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=36', - }, - { - id: 'user_37', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=37', - }, - { - id: 'user_38', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=38', - }, - { - id: 'user_39', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=39', - }, - { - id: 'user_40', - username: 'Nora', - avatar: 'https://placekitten.com/50/50?image=40', - }, - { - id: 'user_41', - username: 'Oliver', - avatar: 'https://placekitten.com/50/50?image=41', - }, - { - id: 'user_42', - username: 'Paula', - avatar: 'https://placekitten.com/50/50?image=42', - }, - { - id: 'user_43', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=43', - }, - { - id: 'user_44', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=44', - }, - { - id: 'user_45', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=45', - }, - { - id: 'user_46', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=46', - }, - { - id: 'user_47', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=47', - }, - { - id: 'user_48', - username: 'Violet', - avatar: 'https://placekitten.com/50/50?image=48', - }, - { - id: 'user_49', - username: 'Wes', - avatar: 'https://placekitten.com/50/50?image=49', - }, - { - id: 'user_50', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=50', - }, - ], - verified: [ - { - id: 'user_51', - username: 'Frank', - avatar: 'https://placekitten.com/50/50?image=51', - }, - { - id: 'user_52', - username: 'Grace', - avatar: 'https://placekitten.com/50/50?image=52', - }, - { - id: 'user_53', - username: 'Henry', - avatar: 'https://placekitten.com/50/50?image=53', - }, - { - id: 'user_54', - username: 'Ivy', - avatar: 'https://placekitten.com/50/50?image=54', - }, - { - id: 'user_55', - username: 'Jack', - avatar: 'https://placekitten.com/50/50?image=55', - }, - { - id: 'user_56', - username: 'Kim', - avatar: 'https://placekitten.com/50/50?image=56', - }, - { - id: 'user_57', - username: 'Leo', - avatar: 'https://placekitten.com/50/50?image=57', - }, - { - id: 'user_58', - username: 'Mila', - avatar: 'https://placekitten.com/50/50?image=58', - }, - { - id: 'user_59', - username: 'Nate', - avatar: 'https://placekitten.com/50/50?image=59', - }, - { - id: 'user_60', - username: 'Olivia', - avatar: 'https://placekitten.com/50/50?image=60', - }, - { - id: 'user_61', - username: 'Paul', - avatar: 'https://placekitten.com/50/50?image=61', - }, - { - id: 'user_62', - username: 'Quinn', - avatar: 'https://placekitten.com/50/50?image=62', - }, - { - id: 'user_63', - username: 'Ruby', - avatar: 'https://placekitten.com/50/50?image=63', - }, - { - id: 'user_64', - username: 'Steve', - avatar: 'https://placekitten.com/50/50?image=64', - }, - { - id: 'user_65', - username: 'Tina', - avatar: 'https://placekitten.com/50/50?image=65', - }, - { - id: 'user_66', - username: 'Ulysses', - avatar: 'https://placekitten.com/50/50?image=66', - }, - { - id: 'user_67', - username: 'Vera', - avatar: 'https://placekitten.com/50/50?image=67', - }, - { - id: 'user_68', - username: 'Walter', - avatar: 'https://placekitten.com/50/50?image=68', - }, - { - id: 'user_69', - username: 'Xena', - avatar: 'https://placekitten.com/50/50?image=69', - }, - { - id: 'user_70', - username: 'Yvonne', - avatar: 'https://placekitten.com/50/50?image=70', - }, - { - id: 'user_71', - username: 'Zane', - avatar: 'https://placekitten.com/50/50?image=71', - }, - { - id: 'user_72', - username: 'Alan', - avatar: 'https://placekitten.com/50/50?image=72', - }, - { - id: 'user_73', - username: 'Bella', - avatar: 'https://placekitten.com/50/50?image=73', - }, - { - id: 'user_74', - username: 'Chris', - avatar: 'https://placekitten.com/50/50?image=74', - }, - { - id: 'user_75', - username: 'Daisy', - avatar: 'https://placekitten.com/50/50?image=75', - }, - { - id: 'user_76', - username: 'Ethan', - avatar: 'https://placekitten.com/50/50?image=76', - }, - { - id: 'user_77', - username: 'Faye', - avatar: 'https://placekitten.com/50/50?image=77', - }, - { - id: 'user_78', - username: 'Gavin', - avatar: 'https://placekitten.com/50/50?image=78', - }, - { - id: 'user_79', - username: 'Holly', - avatar: 'https://placekitten.com/50/50?image=79', - }, - { - id: 'user_80', - username: 'Isaac', - avatar: 'https://placekitten.com/50/50?image=80', - }, - { - id: 'user_81', - username: 'Julia', - avatar: 'https://placekitten.com/50/50?image=81', - }, - { - id: 'user_82', - username: 'Kevin', - avatar: 'https://placekitten.com/50/50?image=82', - }, - { - id: 'user_83', - username: 'Laura', - avatar: 'https://placekitten.com/50/50?image=83', - }, - { - id: 'user_84', - username: 'Mike', - avatar: 'https://placekitten.com/50/50?image=84', - }, - { - id: 'user_85', - username: 'Nina', - avatar: 'https://placekitten.com/50/50?image=85', - }, - { - id: 'user_86', - username: 'Oscar', - avatar: 'https://placekitten.com/50/50?image=86', - }, - { - id: 'user_87', - username: 'Pam', - avatar: 'https://placekitten.com/50/50?image=87', - }, - { - id: 'user_88', - username: 'Quincy', - avatar: 'https://placekitten.com/50/50?image=88', - }, - { - id: 'user_89', - username: 'Rose', - avatar: 'https://placekitten.com/50/50?image=89', - }, - { - id: 'user_90', - username: 'Sam', - avatar: 'https://placekitten.com/50/50?image=90', - }, - { - id: 'user_91', - username: 'Tara', - avatar: 'https://placekitten.com/50/50?image=91', - }, - { - id: 'user_92', - username: 'Uma', - avatar: 'https://placekitten.com/50/50?image=92', - }, - { - id: 'user_93', - username: 'Victor', - avatar: 'https://placekitten.com/50/50?image=93', - }, - { - id: 'user_94', - username: 'Wendy', - avatar: 'https://placekitten.com/50/50?image=94', - }, - { - id: 'user_95', - username: 'Xander', - avatar: 'https://placekitten.com/50/50?image=95', - }, - { - id: 'user_96', - username: 'Yara', - avatar: 'https://placekitten.com/50/50?image=96', - }, - { - id: 'user_97', - username: 'Zeke', - avatar: 'https://placekitten.com/50/50?image=97', - }, - { - id: 'user_98', - username: 'Ava', - avatar: 'https://placekitten.com/50/50?image=98', - }, - { - id: 'user_99', - username: 'Blake', - avatar: 'https://placekitten.com/50/50?image=99', - }, - { - id: 'user_100', - username: 'Chloe', - avatar: 'https://placekitten.com/50/50?image=100', - }, - ], -}; From d52882f1643560bd140fd775b8dec5532ebc0196 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 30 Oct 2024 23:22:29 +0530 Subject: [PATCH 19/33] added feature flag to pagination function --- users/discord/App.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index b22bd6bc..511fb4c4 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -15,6 +15,7 @@ export const usersData = { verified: null, }; const urlParams = new URLSearchParams(window.location.search); +const isDev = urlParams.get('dev') === 'true'; let activeTab = urlParams.get('tab') ?? 'in_discord'; const INITIAL_USERS = 10; @@ -25,7 +26,9 @@ let showUser = 0; /* this is the original function for fetching user data from the API, will remove it once the API pagination issue is resolved. Currently testing pagination using mock data. */ + // usersData[activeTab] = await getUsers(activeTab); + // add feature flag(feature should be only visible when query params dev=true) export const paginateFetchedUsers = async (tabId, page = 1) => { @@ -53,6 +56,7 @@ export const paginateFetchedUsers = async (tabId, page = 1) => { usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; } currentPage = page; + console.log(usersData[tabId]); } } catch (error) { console.error('Error fetching users', error); @@ -114,5 +118,6 @@ export const App = () => { NoUserFound(), ]); }; - -paginateFetchedUsers(activeTab, 1); +if (isDev) { + paginateFetchedUsers(activeTab, 1); +} From b68987ac86efb8fff720f5e8d18896b9cf2d50b9 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Sat, 2 Nov 2024 14:32:50 +0530 Subject: [PATCH 20/33] Added tests and feature flag --- __tests__/users/App.test.js | 24 + babel.config.js | 10 + jest.config.js | 8 + package.json | 3 + yarn.lock | 1147 ++++++++++++++++++++++++++++++++++- 5 files changed, 1191 insertions(+), 1 deletion(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index b612408f..fbbcf75e 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -1,6 +1,8 @@ const puppeteer = require('puppeteer'); const { filteredUsersData } = require('../../mock-data/users'); const { mockUserData } = require('../../mock-data/users/mockdata'); +const { getUsers } = require('../../users/discord/utils/util'); +const { paginateFetchedUsers } = require('../../users/discord/App'); const API_BASE_URL = 'https://staging-api.realdevsquad.com'; describe('App Component', () => { @@ -89,4 +91,26 @@ describe('App Component', () => { const url = await page.url(); expect(url).toContain('?tab=verified'); }); + it('should fetch and append new users on subsequent pages for both tabs', async () => { + // Mock the getUsers function to return full set of user data. + jest.spyOn(global, getUsers).mockResolveValue([mockUserData]); + + // test in_discord tab + await paginateFetchedUsers('in_discord', 1); + expect(usersData['in_discord'].length).toBe(10); + expect(currentPage).toBe(1); + + await paginateFetchedUsers('in_discord', 2); + expect(usersData['in_discord'].length).toBe(20); + expect(currentPage).toBe(2); + + // test verified tab + await paginateFetchedUsers('verified', 1); + expect(usersData['verified'].length).toBe(10); + expect(currentPage).toBe(1); + + await paginateFetchedUsers('verified', 2); + expect(usersData['verified'].length).toBe(20); + expect(currentPage).toBe(2); + }); }); diff --git a/babel.config.js b/babel.config.js index 553717f3..e0dcc930 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,15 @@ const plugins = ['istanbul']; module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: 'current', + }, + }, + ], + ], plugins: plugins, }; diff --git a/jest.config.js b/jest.config.js index b9d5bdc9..a24c9d1e 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,8 +1,16 @@ const config = { preset: 'jest-puppeteer', + transform: { + '^.+\\.jsx?$': 'babel-jest', // Add transform for ES Modules + }, + transformIgnorePatterns: [ + 'node_modules/(?!(module-that-needs-transpiling)/)', + ], collectCoverage: true, collectCoverageFrom: ['src/**/*'], reporters: ['default'], coverageDirectory: 'coverage', + moduleFileExtensions: ['js', 'jsx', 'json', 'node'], + testEnvironment: 'node', }; module.exports = config; diff --git a/package.json b/package.json index 1b5a5a3d..7b19140f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,9 @@ "pre-commit": "check", "homepage": "https://github.com/Real-Dev-Squad/website-dashboard#readme", "devDependencies": { + "@babel/core": "^7.26.0", + "@babel/preset-env": "^7.26.0", + "babel-jest": "^29.7.0", "jest": "^29.5.0", "jest-puppeteer": "^8.0.6", "jest-puppeteer-istanbul": "^0.5.3", diff --git a/yarn.lock b/yarn.lock index 24141a85..23b401b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,11 +17,25 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" + integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== + "@babel/core@^7.11.6", "@babel/core@^7.12.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" @@ -43,6 +57,27 @@ json5 "^2.2.2" semver "^6.3.0" +"@babel/core@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + 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/generator@^7.21.4", "@babel/generator@^7.7.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" @@ -53,6 +88,32 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.25.9", "@babel/generator@^7.26.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" + integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== + dependencies: + "@babel/parser" "^7.26.2" + "@babel/types" "^7.26.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9" + integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-compilation-targets@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" @@ -64,6 +125,50 @@ lru-cache "^5.1.1" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz#3e8999db94728ad2b2458d7a470e7770b7764e26" + integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.1.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" @@ -84,6 +189,14 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-imports@^7.18.6": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" @@ -91,6 +204,14 @@ dependencies: "@babel/types" "^7.21.4" +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-module-transforms@^7.21.2": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" @@ -105,11 +226,50 @@ "@babel/traverse" "^7.21.2" "@babel/types" "^7.21.2" +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/helper-simple-access@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" @@ -117,6 +277,22 @@ dependencies: "@babel/types" "^7.20.2" +"@babel/helper-simple-access@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739" + integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -129,16 +305,40 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/helpers@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" @@ -148,6 +348,14 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== + dependencies: + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -162,6 +370,57 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== +"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" + integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== + dependencies: + "@babel/types" "^7.26.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -183,6 +442,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@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" @@ -260,6 +533,494 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" +"@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" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f" + integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686" + integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-simple-access" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -269,6 +1030,15 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" +"@babel/template@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" @@ -285,6 +1055,19 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" + integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/template" "^7.25.9" + "@babel/types" "^7.25.9" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" @@ -294,6 +1077,14 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.4.4": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" + integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@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" @@ -457,6 +1248,13 @@ dependencies: "@sinclair/typebox" "^0.25.16" +"@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.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" @@ -507,6 +1305,27 @@ slash "^3.0.0" write-file-atomic "^4.0.2" +"@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.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" @@ -519,6 +1338,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@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" @@ -528,16 +1359,35 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -548,6 +1398,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" @@ -556,6 +1411,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@puppeteer/browsers@0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-0.4.1.tgz#fae81939adb743420cc2466f3aa37481f7081712" @@ -607,6 +1470,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@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== + "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -831,6 +1699,19 @@ babel-jest@^29.5.0: graceful-fs "^4.2.9" slash "^3.0.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-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" @@ -852,6 +1733,40 @@ babel-plugin-jest-hoist@^29.5.0: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" +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-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + 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" @@ -878,6 +1793,14 @@ babel-preset-jest@^29.5.0: babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" +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@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -922,6 +1845,16 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" +browserslist@^4.24.0, browserslist@^4.24.2: + version "4.24.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" + integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== + dependencies: + caniuse-lite "^1.0.30001669" + electron-to-chromium "^1.5.41" + node-releases "^2.0.18" + update-browserslist-db "^1.1.1" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -967,6 +1900,11 @@ caniuse-lite@^1.0.30001449: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== +caniuse-lite@^1.0.30001669: + version "1.0.30001676" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz#fe133d41fe74af8f7cc93b8a714c3e86a86e6f04" + integrity sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1103,6 +2041,13 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== + dependencies: + browserslist "^4.24.2" + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -1174,6 +2119,13 @@ debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@^4.3.1: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -1231,6 +2183,11 @@ electron-to-chromium@^1.4.284: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.361.tgz#010ddd5e623470ab9d1bf776b009d11c3669a4e3" integrity sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA== +electron-to-chromium@^1.5.41: + version "1.5.50" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz#d9ba818da7b2b5ef1f3dd32bce7046feb7e93234" + integrity sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw== + emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -1265,6 +2222,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1468,6 +2430,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1552,6 +2519,13 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -1665,6 +2639,13 @@ is-core-module@^2.11.0: dependencies: has "^1.0.3" +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -1915,6 +2896,25 @@ jest-haste-map@^29.5.0: optionalDependencies: fsevents "^2.3.2" +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-leak-detector@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" @@ -1980,6 +2980,11 @@ jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +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.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" @@ -2099,6 +3104,18 @@ jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.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.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" @@ -2135,6 +3152,16 @@ jest-worker@^29.5.0: 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.5.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" @@ -2213,12 +3240,17 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2, jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json5@^2.2.2: +json5@^2.2.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== @@ -2262,6 +3294,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -2360,6 +3397,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2377,6 +3419,11 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + node-releases@^2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" @@ -2525,6 +3572,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -2691,6 +3743,54 @@ readable-stream@^3.1.1, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" + integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.11.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.11.0: + version "0.11.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" + integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== + dependencies: + jsesc "~3.0.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2731,6 +3831,15 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== +resolve@^1.14.2: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^1.20.0: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -2779,6 +3888,11 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.3.5: version "7.4.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" @@ -3064,6 +4178,29 @@ unbzip2-stream@1.4.3: buffer "^5.2.1" through "^2.3.8" +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -3077,6 +4214,14 @@ update-browserslist-db@^1.0.10: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" From 308f6c953e377943c145bdf4f9c429ab82b57650 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 6 Nov 2024 15:39:31 +0530 Subject: [PATCH 21/33] reverted jest.config --- jest.config.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/jest.config.js b/jest.config.js index a24c9d1e..b9d5bdc9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,16 +1,8 @@ const config = { preset: 'jest-puppeteer', - transform: { - '^.+\\.jsx?$': 'babel-jest', // Add transform for ES Modules - }, - transformIgnorePatterns: [ - 'node_modules/(?!(module-that-needs-transpiling)/)', - ], collectCoverage: true, collectCoverageFrom: ['src/**/*'], reporters: ['default'], coverageDirectory: 'coverage', - moduleFileExtensions: ['js', 'jsx', 'json', 'node'], - testEnvironment: 'node', }; module.exports = config; From 61e4e4f634b69eefc409194af1cfde5f9ef3aace Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 6 Nov 2024 20:16:16 +0530 Subject: [PATCH 22/33] reverted babel config file --- babel.config.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/babel.config.js b/babel.config.js index e0dcc930..553717f3 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,15 +1,5 @@ const plugins = ['istanbul']; module.exports = { - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - }, - ], - ], plugins: plugins, }; From 82ce5650d76011af988e86ade27f5af40f4628ff Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Wed, 6 Nov 2024 21:33:55 +0530 Subject: [PATCH 23/33] reverted test file --- __tests__/users/App.test.js | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index 662dd92d..54cbbeeb 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -1,8 +1,6 @@ const puppeteer = require('puppeteer'); const { filteredUsersData } = require('../../mock-data/users'); const { mockUserData } = require('../../mock-data/users/mockdata'); -const { getUsers } = require('../../users/discord/utils/util'); -const { paginateFetchedUsers } = require('../../users/discord/App'); const API_BASE_URL = 'https://staging-api.realdevsquad.com'; describe('App Component', () => { @@ -104,28 +102,6 @@ describe('App Component', () => { const url = await page.url(); expect(url).toContain('?tab=verified'); }); - it('should fetch and append new users on subsequent pages for both tabs', async () => { - // Mock the getUsers function to return full set of user data. - jest.spyOn(global, getUsers).mockResolveValue([mockUserData]); - - // test in_discord tab - await paginateFetchedUsers('in_discord', 1); - expect(usersData['in_discord'].length).toBe(10); - expect(currentPage).toBe(1); - - await paginateFetchedUsers('in_discord', 2); - expect(usersData['in_discord'].length).toBe(20); - expect(currentPage).toBe(2); - - // test verified tab - await paginateFetchedUsers('verified', 1); - expect(usersData['verified'].length).toBe(10); - expect(currentPage).toBe(1); - - await paginateFetchedUsers('verified', 2); - expect(usersData['verified'].length).toBe(20); - expect(currentPage).toBe(2); - }); it('should handle user card clicks and apply active_tab class to clicked card only in discord tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`); From bad72940607ab924c79a625c1253f92b97abf5b0 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 7 Nov 2024 12:34:25 +0530 Subject: [PATCH 24/33] updated tests --- __tests__/users/App.test.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index 54cbbeeb..63e86179 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -72,6 +72,17 @@ describe('App Component', () => { afterAll(async () => { await browser.close(); }); + it('should fetch and append new users on subsequent pages for both tabs', async () => { + await page.goto(`${BASE_URL}/users/discord/?tab=in_discord&dev=true`); + await page.waitForNetworkIdle(); + + const userCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + console.log(userCardTestIds.length); + expect(userCardTestIds.length).toBe(10); + }); it('should render all sections', async () => { await page.waitForSelector('.tabs_section'); From 8ebf8e0e80dda2cbf04883de83627a9b618c4c72 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 7 Nov 2024 21:11:30 +0530 Subject: [PATCH 25/33] pushed test for 2 mock users --- __tests__/users/App.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index 63e86179..e8497eac 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -80,8 +80,8 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - console.log(userCardTestIds.length); - expect(userCardTestIds.length).toBe(10); + console.log(userCardTestIds.length, 'user length'); + expect(userCardTestIds.length).toBe(2); }); it('should render all sections', async () => { From 2f09079468246087722edee2ea04853c653082a4 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 7 Nov 2024 21:30:06 +0530 Subject: [PATCH 26/33] fixed dev flag --- users/discord/App.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/users/discord/App.js b/users/discord/App.js index 69a3423e..b8e27db9 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -27,7 +27,9 @@ let showUser = 0; the API pagination issue is resolved. Currently testing pagination using mock data. */ -// usersData[activeTab] = await getUsers(activeTab); +if (!isDev) { + usersData[activeTab] = await getUsers(activeTab); +} // add feature flag(feature should be only visible when query params dev=true) From d9d24dd3de02ab99d58ea03d16618e261ccdc3aa Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Thu, 7 Nov 2024 22:57:32 +0530 Subject: [PATCH 27/33] removed unnecessary dependencies --- package.json | 3 - yarn.lock | 1147 +------------------------------------------------- 2 files changed, 1 insertion(+), 1149 deletions(-) diff --git a/package.json b/package.json index 7b19140f..1b5a5a3d 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,6 @@ "pre-commit": "check", "homepage": "https://github.com/Real-Dev-Squad/website-dashboard#readme", "devDependencies": { - "@babel/core": "^7.26.0", - "@babel/preset-env": "^7.26.0", - "babel-jest": "^29.7.0", "jest": "^29.5.0", "jest-puppeteer": "^8.0.6", "jest-puppeteer-istanbul": "^0.5.3", diff --git a/yarn.lock b/yarn.lock index 23b401b7..24141a85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,25 +17,11 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/compat-data@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" - integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== - "@babel/core@^7.11.6", "@babel/core@^7.12.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" @@ -57,27 +43,6 @@ json5 "^2.2.2" semver "^6.3.0" -"@babel/core@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - 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/generator@^7.21.4", "@babel/generator@^7.7.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" @@ -88,32 +53,6 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/generator@^7.25.9", "@babel/generator@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" - integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== - dependencies: - "@babel/parser" "^7.26.2" - "@babel/types" "^7.26.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" - integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== - dependencies: - "@babel/types" "^7.25.9" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz#f41752fe772a578e67286e6779a68a5a92de1ee9" - integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-compilation-targets@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" @@ -125,50 +64,6 @@ lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== - dependencies: - "@babel/compat-data" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" - integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/traverse" "^7.25.9" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz#3e8999db94728ad2b2458d7a470e7770b7764e26" - integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - regexpu-core "^6.1.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - "@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" @@ -189,14 +84,6 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-member-expression-to-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" - integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-module-imports@^7.18.6": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" @@ -204,14 +91,6 @@ dependencies: "@babel/types" "^7.21.4" -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-module-transforms@^7.21.2": version "7.21.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" @@ -226,50 +105,11 @@ "@babel/traverse" "^7.21.2" "@babel/types" "^7.21.2" -"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" - integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== - dependencies: - "@babel/types" "^7.25.9" - "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" - integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== - -"@babel/helper-remap-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" - integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-wrap-function" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-replace-supers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" - integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.25.9" - "@babel/helper-optimise-call-expression" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/helper-simple-access@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" @@ -277,22 +117,6 @@ dependencies: "@babel/types" "^7.20.2" -"@babel/helper-simple-access@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz#6d51783299884a2c74618d6ef0f86820ec2e7739" - integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" - integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -305,40 +129,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" - integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== - dependencies: - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/helpers@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" @@ -348,14 +148,6 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -370,57 +162,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== -"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" - integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== - dependencies: - "@babel/types" "^7.26.0" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" - integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" - integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" - integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" - integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" - integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -442,20 +183,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-import-assertions@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" - integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-attributes@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@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" @@ -533,494 +260,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@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" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" - integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-async-generator-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" - integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-async-to-generator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" - integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-remap-async-to-generator" "^7.25.9" - -"@babel/plugin-transform-block-scoped-functions@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" - integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-block-scoping@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" - integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" - integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-class-static-block@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" - integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-classes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" - integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - "@babel/traverse" "^7.25.9" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" - integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/template" "^7.25.9" - -"@babel/plugin-transform-destructuring@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" - integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dotall-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" - integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-keys@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" - integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" - integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-dynamic-import@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" - integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-exponentiation-operator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz#ece47b70d236c1d99c263a1e22b62dc20a4c8b0f" - integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-export-namespace-from@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" - integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-for-of@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" - integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-function-name@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" - integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-json-strings@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" - integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" - integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-logical-assignment-operators@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" - integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-member-expression-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" - integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-amd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" - integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-modules-commonjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz#d165c8c569a080baf5467bda88df6425fc060686" - integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-simple-access" "^7.25.9" - -"@babel/plugin-transform-modules-systemjs@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" - integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/plugin-transform-modules-umd@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" - integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== - dependencies: - "@babel/helper-module-transforms" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" - integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-new-target@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" - integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" - integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-numeric-separator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" - integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-object-rest-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" - integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== - dependencies: - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - -"@babel/plugin-transform-object-super@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" - integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-replace-supers" "^7.25.9" - -"@babel/plugin-transform-optional-catch-binding@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" - integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-optional-chaining@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" - integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-parameters@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" - integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-methods@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" - integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-private-property-in-object@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" - integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.25.9" - "@babel/helper-create-class-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-property-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" - integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-regenerator@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" - integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regexp-modifiers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" - integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-reserved-words@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" - integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-shorthand-properties@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" - integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-spread@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" - integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" - -"@babel/plugin-transform-sticky-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" - integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-template-literals@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" - integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-typeof-symbol@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" - integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-escapes@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" - integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-property-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" - integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" - integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-transform-unicode-sets-regex@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" - integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/preset-env@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" - integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== - dependencies: - "@babel/compat-data" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-plugin-utils" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.26.0" - "@babel/plugin-syntax-import-attributes" "^7.26.0" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.25.9" - "@babel/plugin-transform-async-generator-functions" "^7.25.9" - "@babel/plugin-transform-async-to-generator" "^7.25.9" - "@babel/plugin-transform-block-scoped-functions" "^7.25.9" - "@babel/plugin-transform-block-scoping" "^7.25.9" - "@babel/plugin-transform-class-properties" "^7.25.9" - "@babel/plugin-transform-class-static-block" "^7.26.0" - "@babel/plugin-transform-classes" "^7.25.9" - "@babel/plugin-transform-computed-properties" "^7.25.9" - "@babel/plugin-transform-destructuring" "^7.25.9" - "@babel/plugin-transform-dotall-regex" "^7.25.9" - "@babel/plugin-transform-duplicate-keys" "^7.25.9" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-dynamic-import" "^7.25.9" - "@babel/plugin-transform-exponentiation-operator" "^7.25.9" - "@babel/plugin-transform-export-namespace-from" "^7.25.9" - "@babel/plugin-transform-for-of" "^7.25.9" - "@babel/plugin-transform-function-name" "^7.25.9" - "@babel/plugin-transform-json-strings" "^7.25.9" - "@babel/plugin-transform-literals" "^7.25.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" - "@babel/plugin-transform-member-expression-literals" "^7.25.9" - "@babel/plugin-transform-modules-amd" "^7.25.9" - "@babel/plugin-transform-modules-commonjs" "^7.25.9" - "@babel/plugin-transform-modules-systemjs" "^7.25.9" - "@babel/plugin-transform-modules-umd" "^7.25.9" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" - "@babel/plugin-transform-new-target" "^7.25.9" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" - "@babel/plugin-transform-numeric-separator" "^7.25.9" - "@babel/plugin-transform-object-rest-spread" "^7.25.9" - "@babel/plugin-transform-object-super" "^7.25.9" - "@babel/plugin-transform-optional-catch-binding" "^7.25.9" - "@babel/plugin-transform-optional-chaining" "^7.25.9" - "@babel/plugin-transform-parameters" "^7.25.9" - "@babel/plugin-transform-private-methods" "^7.25.9" - "@babel/plugin-transform-private-property-in-object" "^7.25.9" - "@babel/plugin-transform-property-literals" "^7.25.9" - "@babel/plugin-transform-regenerator" "^7.25.9" - "@babel/plugin-transform-regexp-modifiers" "^7.26.0" - "@babel/plugin-transform-reserved-words" "^7.25.9" - "@babel/plugin-transform-shorthand-properties" "^7.25.9" - "@babel/plugin-transform-spread" "^7.25.9" - "@babel/plugin-transform-sticky-regex" "^7.25.9" - "@babel/plugin-transform-template-literals" "^7.25.9" - "@babel/plugin-transform-typeof-symbol" "^7.25.9" - "@babel/plugin-transform-unicode-escapes" "^7.25.9" - "@babel/plugin-transform-unicode-property-regex" "^7.25.9" - "@babel/plugin-transform-unicode-regex" "^7.25.9" - "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.38.1" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.20.7", "@babel/template@^7.3.3": version "7.20.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" @@ -1030,15 +269,6 @@ "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" -"@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4", "@babel/traverse@^7.7.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" @@ -1055,19 +285,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" - integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/generator" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/template" "^7.25.9" - "@babel/types" "^7.25.9" - debug "^4.3.1" - globals "^11.1.0" - "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" @@ -1077,14 +294,6 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.4.4": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" - integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@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" @@ -1248,13 +457,6 @@ dependencies: "@sinclair/typebox" "^0.25.16" -"@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.4.3": version "29.4.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.4.3.tgz#ff8d05cbfff875d4a791ab679b4333df47951d20" @@ -1305,27 +507,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@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.5.0": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" @@ -1338,18 +519,6 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@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" @@ -1359,35 +528,16 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - "@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" @@ -1398,11 +548,6 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" @@ -1411,14 +556,6 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@puppeteer/browsers@0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-0.4.1.tgz#fae81939adb743420cc2466f3aa37481f7081712" @@ -1470,11 +607,6 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== -"@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== - "@sinonjs/commons@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" @@ -1699,19 +831,6 @@ babel-jest@^29.5.0: graceful-fs "^4.2.9" slash "^3.0.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-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" @@ -1733,40 +852,6 @@ babel-plugin-jest-hoist@^29.5.0: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -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-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - 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" @@ -1793,14 +878,6 @@ babel-preset-jest@^29.5.0: babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" -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@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1845,16 +922,6 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" -browserslist@^4.24.0, browserslist@^4.24.2: - version "4.24.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" - integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== - dependencies: - caniuse-lite "^1.0.30001669" - electron-to-chromium "^1.5.41" - node-releases "^2.0.18" - update-browserslist-db "^1.1.1" - bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -1900,11 +967,6 @@ caniuse-lite@^1.0.30001449: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== -caniuse-lite@^1.0.30001669: - version "1.0.30001676" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz#fe133d41fe74af8f7cc93b8a714c3e86a86e6f04" - integrity sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw== - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2041,13 +1103,6 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.38.0, core-js-compat@^3.38.1: - version "3.39.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" - integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== - dependencies: - browserslist "^4.24.2" - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -2119,13 +1174,6 @@ debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -debug@^4.3.1: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -2183,11 +1231,6 @@ electron-to-chromium@^1.4.284: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.361.tgz#010ddd5e623470ab9d1bf776b009d11c3669a4e3" integrity sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA== -electron-to-chromium@^1.5.41: - version "1.5.50" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz#d9ba818da7b2b5ef1f3dd32bce7046feb7e93234" - integrity sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw== - emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" @@ -2222,11 +1265,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2430,11 +1468,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -2519,13 +1552,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -2639,13 +1665,6 @@ is-core-module@^2.11.0: dependencies: has "^1.0.3" -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -2896,25 +1915,6 @@ jest-haste-map@^29.5.0: optionalDependencies: fsevents "^2.3.2" -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-leak-detector@^29.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz#cf4bdea9615c72bac4a3a7ba7e7930f9c0610c8c" @@ -2980,11 +1980,6 @@ jest-regex-util@^29.4.3: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== -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.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz#f0ea29955996f49788bf70996052aa98e7befee4" @@ -3104,18 +2099,6 @@ jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.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.5.0: version "29.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.5.0.tgz#8e5a8f36178d40e47138dc00866a5f3bd9916ffc" @@ -3152,16 +2135,6 @@ jest-worker@^29.5.0: 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.5.0" resolved "https://registry.yarnpkg.com/jest/-/jest-29.5.0.tgz#f75157622f5ce7ad53028f2f8888ab53e1f1f24e" @@ -3240,17 +2213,12 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@^3.0.2, jsesc@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json5@^2.2.2, json5@^2.2.3: +json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -3294,11 +2262,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -3397,11 +2360,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -3419,11 +2377,6 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - node-releases@^2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" @@ -3572,11 +2525,6 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -3743,54 +2691,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -regenerate-unicode-properties@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" - integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac" - integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.0" - regjsgen "^0.8.0" - regjsparser "^0.11.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.11.0: - version "0.11.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.2.tgz#7404ad42be00226d72bcf1f003f1f441861913d8" - integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== - dependencies: - jsesc "~3.0.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3831,15 +2731,6 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.14.2: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^1.20.0: version "1.22.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" @@ -3888,11 +2779,6 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - semver@^7.3.5: version "7.4.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" @@ -4178,29 +3064,6 @@ unbzip2-stream@1.4.3: buffer "^5.2.1" through "^2.3.8" -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" - integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - universalify@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" @@ -4214,14 +3077,6 @@ update-browserslist-db@^1.0.10: escalade "^3.1.1" picocolors "^1.0.0" -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.0" - url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" From d270d0ddc8efbb41362c4241b92f2d78350de73a Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Sun, 10 Nov 2024 10:03:23 +0530 Subject: [PATCH 28/33] added tests for discord and verified tabs --- __tests__/users/App.test.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index e8497eac..feb35c1e 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -72,7 +72,7 @@ describe('App Component', () => { afterAll(async () => { await browser.close(); }); - it('should fetch and append new users on subsequent pages for both tabs', async () => { + it('should fetch and append new users on subsequent pages for discord users tab when feature flag is on', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=in_discord&dev=true`); await page.waitForNetworkIdle(); @@ -80,9 +80,38 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - console.log(userCardTestIds.length, 'user length'); expect(userCardTestIds.length).toBe(2); }); + it('should fetch and append new users on subsequent pages for discord users tab', async () => { + await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`); + await page.waitForNetworkIdle(); + + const userCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(userCardTestIds.length).toBe(10); + }); + it('should fetch and append new users on subsequent pages for verified users tab when feature flag is on', async () => { + await page.goto(`${BASE_URL}/users/discord/?tab=verified&dev=true`); + await page.waitForNetworkIdle(); + + const userCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(userCardTestIds.length).toBe(2); + }); + it('should fetch and append new users on subsequent pages for verified users tab', async () => { + await page.goto(`${BASE_URL}/users/discord/?tab=verified`); + await page.waitForNetworkIdle(); + + const userCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(userCardTestIds.length).toBe(10); + }); it('should render all sections', async () => { await page.waitForSelector('.tabs_section'); From 31fe563191c0ea187e133606d8a22c25c0ad99b4 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Sun, 10 Nov 2024 10:22:40 +0530 Subject: [PATCH 29/33] updated verified users test in feature flag --- __tests__/users/App.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index feb35c1e..0dd91759 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -100,7 +100,7 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(2); + expect(userCardTestIds.length).toBe(3); }); it('should fetch and append new users on subsequent pages for verified users tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified`); From 49a6fa17c99bd96c5e43b7942a3fd50d3714b781 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Sun, 10 Nov 2024 10:49:02 +0530 Subject: [PATCH 30/33] updated tests --- __tests__/users/App.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index 0dd91759..c661a66f 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -90,7 +90,7 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(10); + expect(userCardTestIds.length).toBe(2); }); it('should fetch and append new users on subsequent pages for verified users tab when feature flag is on', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified&dev=true`); @@ -110,7 +110,7 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(10); + expect(userCardTestIds.length).toBe(3); }); it('should render all sections', async () => { From f2920d69671bcb083835473eb0e7213420d79f57 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Sun, 10 Nov 2024 14:52:04 +0530 Subject: [PATCH 31/33] removed console logs and updated test --- __tests__/users/App.test.js | 12 ++++++++---- users/discord/App.js | 1 - users/discord/components/UsersSection.js | 1 - 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index c661a66f..a2044406 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -80,7 +80,8 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(2); + expect(userCardTestIds.length).toBeLessThanOrEqual(10); + expect(userCardTestIds.length).toBeGreaterThan(0); }); it('should fetch and append new users on subsequent pages for discord users tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`); @@ -90,7 +91,8 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(2); + expect(userCardTestIds.length).toBeLessThanOrEqual(10); + expect(userCardTestIds.length).toBeGreaterThan(0); }); it('should fetch and append new users on subsequent pages for verified users tab when feature flag is on', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified&dev=true`); @@ -100,7 +102,8 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(3); + expect(userCardTestIds.length).toBeLessThanOrEqual(10); + expect(userCardTestIds.length).toBeGreaterThan(0); }); it('should fetch and append new users on subsequent pages for verified users tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified`); @@ -110,7 +113,8 @@ describe('App Component', () => { '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBe(3); + expect(userCardTestIds.length).toBeLessThanOrEqual(10); + expect(userCardTestIds.length).toBeGreaterThan(0); }); it('should render all sections', async () => { diff --git a/users/discord/App.js b/users/discord/App.js index b8e27db9..76bd4fa6 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -58,7 +58,6 @@ export const paginateFetchedUsers = async (tabId, page = 1) => { usersData[tabId] = [...usersData[tabId], ...uniqueNewUsers]; } currentPage = page; - console.log(usersData[tabId]); } } catch (error) { console.error('Error fetching users', error); diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js index 741534d4..e6462c12 100644 --- a/users/discord/components/UsersSection.js +++ b/users/discord/components/UsersSection.js @@ -28,7 +28,6 @@ export const UsersSection = ({ { class: 'users_section', 'data-testid': 'users-section', - onclick: handleUserSelected, }, users?.map((user) => { return createElement( From c5435ebc5fc26b73435393b0a53ed34367ecb2b1 Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Mon, 11 Nov 2024 20:53:52 +0530 Subject: [PATCH 32/33] added test for scroll function --- __tests__/users/App.test.js | 80 +++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js index a2044406..70fc431e 100644 --- a/__tests__/users/App.test.js +++ b/__tests__/users/App.test.js @@ -76,45 +76,101 @@ describe('App Component', () => { await page.goto(`${BASE_URL}/users/discord/?tab=in_discord&dev=true`); await page.waitForNetworkIdle(); - const userCardTestIds = await page.$$eval( + const initialUserCardTestIds = await page.$$eval( '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBeLessThanOrEqual(10); - expect(userCardTestIds.length).toBeGreaterThan(0); + expect(initialUserCardTestIds.length).toBeLessThanOrEqual(10); + expect(initialUserCardTestIds.length).toBeGreaterThan(0); + + await page.evaluate(() => { + window.scrollTo(0, document.body.scrollHeight); + }); + await page.waitForNetworkIdle(); + + const updatedUserCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(updatedUserCardTestIds.length).toBeLessThanOrEqual(20); + expect(updatedUserCardTestIds.length).toBeGreaterThanOrEqual( + initialUserCardTestIds.length, + ); }); it('should fetch and append new users on subsequent pages for discord users tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`); await page.waitForNetworkIdle(); - const userCardTestIds = await page.$$eval( + const initialUserCardTestIds = await page.$$eval( '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBeLessThanOrEqual(10); - expect(userCardTestIds.length).toBeGreaterThan(0); + expect(initialUserCardTestIds.length).toBeLessThanOrEqual(10); + expect(initialUserCardTestIds.length).toBeGreaterThan(0); + + await page.evaluate(() => { + window.scrollTo(0, document.body.scrollHeight); + }); + await page.waitForNetworkIdle(); + + const updatedUserCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(updatedUserCardTestIds.length).toBeLessThanOrEqual(20); + expect(updatedUserCardTestIds.length).toBeGreaterThanOrEqual( + initialUserCardTestIds.length, + ); }); it('should fetch and append new users on subsequent pages for verified users tab when feature flag is on', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified&dev=true`); await page.waitForNetworkIdle(); - const userCardTestIds = await page.$$eval( + const initialUserCardTestIds = await page.$$eval( '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBeLessThanOrEqual(10); - expect(userCardTestIds.length).toBeGreaterThan(0); + expect(initialUserCardTestIds.length).toBeLessThanOrEqual(10); + expect(initialUserCardTestIds.length).toBeGreaterThan(0); + + await page.evaluate(() => { + window.scrollTo(0, document.body.scrollHeight); + }); + await page.waitForNetworkIdle(); + + const updatedUserCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(updatedUserCardTestIds.length).toBeLessThanOrEqual(20); + expect(updatedUserCardTestIds.length).toBeGreaterThanOrEqual( + initialUserCardTestIds.length, + ); }); it('should fetch and append new users on subsequent pages for verified users tab', async () => { await page.goto(`${BASE_URL}/users/discord/?tab=verified`); await page.waitForNetworkIdle(); - const userCardTestIds = await page.$$eval( + const initialUserCardTestIds = await page.$$eval( '[data-testid^="user-card-"]', (cards) => cards.map((card) => card.getAttribute('data-testid')), ); - expect(userCardTestIds.length).toBeLessThanOrEqual(10); - expect(userCardTestIds.length).toBeGreaterThan(0); + expect(initialUserCardTestIds.length).toBeLessThanOrEqual(10); + expect(initialUserCardTestIds.length).toBeGreaterThan(0); + + await page.evaluate(() => { + window.scrollTo(0, document.body.scrollHeight); + }); + await page.waitForNetworkIdle(); + + const updatedUserCardTestIds = await page.$$eval( + '[data-testid^="user-card-"]', + (cards) => cards.map((card) => card.getAttribute('data-testid')), + ); + expect(updatedUserCardTestIds.length).toBeLessThanOrEqual(20); + expect(updatedUserCardTestIds.length).toBeGreaterThanOrEqual( + initialUserCardTestIds.length, + ); }); it('should render all sections', async () => { From 696e05f2630612a064b144b57dc0749a4685e77e Mon Sep 17 00:00:00 2001 From: Ishan Veer Date: Tue, 12 Nov 2024 15:00:58 +0530 Subject: [PATCH 33/33] removed comments --- users/discord/App.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/users/discord/App.js b/users/discord/App.js index 76bd4fa6..61180816 100644 --- a/users/discord/App.js +++ b/users/discord/App.js @@ -23,16 +23,10 @@ let isLoading = false; let currentPage = 1; let showUser = 0; -/* this is the original function for fetching user data from the API, will remove it once -the API pagination issue is resolved. Currently testing pagination using mock data. - */ - if (!isDev) { usersData[activeTab] = await getUsers(activeTab); } -// add feature flag(feature should be only visible when query params dev=true) - export const paginateFetchedUsers = async (tabId, page = 1) => { if (isLoading) { return;