From 228c2316eea83b3fb44289fa45a6334be8afefea Mon Sep 17 00:00:00 2001 From: Sem Bauke Date: Fri, 8 Nov 2024 14:20:13 +0100 Subject: [PATCH] chore: update react-instancesearch to v7 (#57020) Co-authored-by: Huyen Nguyen <25715018+huyenltnguyen@users.noreply.github.com> Co-authored-by: Oliver Eyton-Williams --- client/i18n/locales/english/translations.json | 2 +- client/package.json | 7 +- .../search/searchBar/search-bar.tsx | 42 +- .../search/searchBar/search-hits.tsx | 169 ++++---- .../search/searchBar/search-suggestion.tsx | 6 +- .../components/search/searchBar/searchbar.css | 7 +- .../src/components/search/searchBar/types.ts | 6 + .../components/search/with-instant-search.tsx | 37 +- e2e/fixtures/algolia-eight-hits.json | 310 ++++++++++++-- e2e/fixtures/algolia-five-hits.json | 202 ++++++++- e2e/fixtures/algolia-no-hits.json | 29 ++ e2e/search-bar.spec.ts | 31 +- pnpm-lock.yaml | 385 +++++++++++------- 13 files changed, 872 insertions(+), 361 deletions(-) create mode 100644 client/src/components/search/searchBar/types.ts create mode 100644 e2e/fixtures/algolia-no-hits.json diff --git a/client/i18n/locales/english/translations.json b/client/i18n/locales/english/translations.json index 538c89d1067..f086b5ea650 100644 --- a/client/i18n/locales/english/translations.json +++ b/client/i18n/locales/english/translations.json @@ -160,7 +160,6 @@ ], "cta": "Start Learning Now (it's free)" }, - "certification-heading": "Earn free verified certifications in:", "core-certs-heading": "Earn free verified certifications with freeCodeCamp's core curriculum:", "learn-english-heading": "Learn English for Developers:", @@ -781,6 +780,7 @@ "heart": "Heart", "initial": "Initial", "input-reset": "Clear search terms", + "input-search": "Submit search terms", "info": "Intro Information", "spacer": "Spacer", "toggle": "Toggle Checkmark", diff --git a/client/package.json b/client/package.json index 226eb94738f..fca929974ae 100644 --- a/client/package.json +++ b/client/package.json @@ -84,6 +84,7 @@ "micromark": "4.0.0", "monaco-editor": "0.28.1", "nanoid": "3.3.7", + "instantsearch.js": "4.75.3", "normalize-url": "4.5.1", "path-browserify": "1.0.1", "postcss": "8.4.35", @@ -99,8 +100,8 @@ "react-helmet": "6.1.0", "react-hotkeys": "2.0.0", "react-i18next": "12.3.1", - "react-instantsearch-core": "6.40.4", - "react-instantsearch-dom": "6.40.4", + "react-instantsearch-core": "7.13.6", + "react-instantsearch": "7.13.6", "react-monaco-editor": "0.40.0", "react-redux": "7.2.9", "react-reflex": "4.1.0", @@ -143,8 +144,6 @@ "@types/react-dom": "16.9.24", "@types/react-gtm-module": "2.0.3", "@types/react-helmet": "6.1.11", - "@types/react-instantsearch-core": "6.26.10", - "@types/react-instantsearch-dom": "6.12.8", "@types/react-redux": "7.1.33", "@types/react-responsive": "8.0.8", "@types/react-scrollable-anchor": "0.6.4", diff --git a/client/src/components/search/searchBar/search-bar.tsx b/client/src/components/search/searchBar/search-bar.tsx index 5e94c6dc1fc..47fc09b5118 100644 --- a/client/src/components/search/searchBar/search-bar.tsx +++ b/client/src/components/search/searchBar/search-bar.tsx @@ -3,8 +3,7 @@ import React, { Component } from 'react'; import { HotKeys, ObserveKeys } from 'react-hotkeys'; import type { TFunction } from 'i18next'; import { withTranslation } from 'react-i18next'; -import { Hit } from 'react-instantsearch-core'; -import { SearchBox } from 'react-instantsearch-dom'; +import { SearchBox } from 'react-instantsearch'; import { connect } from 'react-redux'; import { AnyAction, bindActionCreators, Dispatch } from 'redux'; import { createSelector } from 'reselect'; @@ -14,15 +13,14 @@ import { isSearchDropdownEnabledSelector, isSearchBarFocusedSelector, toggleSearchDropdown, - toggleSearchFocused, - updateSearchQuery + toggleSearchFocused } from '../redux'; import WithInstantSearch from '../with-instant-search'; - -import SearchHits from './search-hits'; +import type { Hit } from './types'; import './searchbar-base.css'; import './searchbar.css'; +import SearchHits from './search-hits'; const searchUrl = searchPageUrl; const mapStateToProps = createSelector( @@ -35,16 +33,12 @@ const mapStateToProps = createSelector( ); const mapDispatchToProps = (dispatch: Dispatch) => - bindActionCreators( - { toggleSearchDropdown, toggleSearchFocused, updateSearchQuery }, - dispatch - ); + bindActionCreators({ toggleSearchDropdown, toggleSearchFocused }, dispatch); export type SearchBarProps = { innerRef?: React.RefObject; toggleSearchDropdown: typeof toggleSearchDropdown; toggleSearchFocused: typeof toggleSearchFocused; - updateSearchQuery: typeof updateSearchQuery; isDropdownEnabled?: boolean; isSearchFocused?: boolean; t: TFunction; @@ -115,7 +109,7 @@ export class SearchBar extends Component { query?: string ): boolean | void => { e.preventDefault(); - const { toggleSearchDropdown, updateSearchQuery } = this.props; + const { toggleSearchDropdown } = this.props; const { index, hits } = this.state; const selectedHit = hits[index]; @@ -128,7 +122,6 @@ export class SearchBar extends Component { // Set query to value in search bar if enter is pressed query = (e.currentTarget?.children?.[0] as HTMLInputElement).value; } - updateSearchQuery(query); //clear input value const searchInput = e.currentTarget?.children?.[0] as HTMLInputElement; @@ -151,13 +144,18 @@ export class SearchBar extends Component { handleMouseEnter = (e: React.SyntheticEvent): void => { e.persist(); - const hoveredText = e.currentTarget.innerText; this.setState(({ hits }) => { const hitsTitles = hits.map(hit => hit.title); - const hoveredIndex = hitsTitles.indexOf(hoveredText); - return { index: hoveredIndex }; + if (e.target instanceof HTMLElement) { + const targetText = e.target.textContent; + const hoveredIndex = targetText ? hitsTitles.indexOf(targetText) : -1; + + return { index: hoveredIndex }; + } + + return { index: -1 }; }); }; @@ -220,25 +218,23 @@ export class SearchBar extends Component { { this.handleSearch(e); }} - showLoadingIndicator={false} + onInput={this.handleChange} translations={{ - submitTitle: t('icons.magnifier'), - resetTitle: t('icons.input-reset'), - placeholder: searchPlaceholder + submitButtonTitle: t('icons.input-search'), + resetButtonTitle: t('icons.input-reset') }} + placeholder={searchPlaceholder} onFocus={this.handleFocus} /> {isDropdownEnabled && isSearchFocused && ( )} diff --git a/client/src/components/search/searchBar/search-hits.tsx b/client/src/components/search/searchBar/search-hits.tsx index bbf1fe8e4af..58ed02c73b9 100644 --- a/client/src/components/search/searchBar/search-hits.tsx +++ b/client/src/components/search/searchBar/search-hits.tsx @@ -1,118 +1,87 @@ import { isEmpty } from 'lodash-es'; import React, { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; -import { SearchState, Hit } from 'react-instantsearch-core'; -import { connectStateResults, connectHits } from 'react-instantsearch-dom'; +import { useHits } from 'react-instantsearch'; import { searchPageUrl } from '../../../utils/algolia-locale-setup'; -import NoHitsSuggestion from './no-hits-suggestion'; import Suggestion from './search-suggestion'; +import NoHitsSuggestion from './no-hits-suggestion'; +import type { Hit } from './types'; const searchUrl = searchPageUrl; -interface CustomHitsProps { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - hits: Array; - searchQuery: string; - handleMouseEnter: (e: React.SyntheticEvent) => void; - handleMouseLeave: (e: React.SyntheticEvent) => void; - selectedIndex: number; - handleHits: (currHits: Array) => void; -} + interface SearchHitsProps { - searchState: SearchState; handleMouseEnter: (e: React.SyntheticEvent) => void; handleMouseLeave: (e: React.SyntheticEvent) => void; + handleHits: (hits: Hit[]) => void; selectedIndex: number; - handleHits: (currHits: Array) => void; } -const CustomHits = connectHits( - ({ - hits, - searchQuery, - handleMouseEnter, - handleMouseLeave, - selectedIndex, - handleHits - }: CustomHitsProps) => { - const { t } = useTranslation(); - const noHits = isEmpty(hits); - const noHitsTitle = t('search.no-tutorials'); - const footer = [ - { - objectID: `footer-${searchQuery}`, - query: searchQuery, - url: noHits - ? null - : `${searchUrl}?query=${encodeURIComponent(searchQuery)}`, - title: t('search.see-results', { searchQuery: searchQuery }), - _highlightResult: { - query: { - value: ` - - ${t('search.see-results', { searchQuery: searchQuery })} - - ` - } + +function SearchHits({ + handleMouseEnter, + handleMouseLeave, + handleHits, + selectedIndex +}: SearchHitsProps) { + const { results } = useHits(); + const query = results ? results.query : ''; + const { t } = useTranslation(); + + const noHits = isEmpty(results?.hits); + const noHitsTitle = t('search.no-tutorials'); + + const footer = [ + { + __position: 8, + objectID: `footer-${query}`, + query: query, + url: noHits ? '' : `${searchUrl}?query=${encodeURIComponent(query)}`, + _highlightResult: { + query: { + value: `${t('search.see-results', { searchQuery: query })}`, + matchLevel: 'none' as const, + matchedWords: [] } } - ]; - const allHits = hits.slice(0, 8).concat(footer); - useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - handleHits(allHits); - }); + } + ]; + const allHits: Hit[] = + results?.hits && results?.query ? [...results.hits, ...footer] : []; - return ( -
-
    - {allHits.map((hit: Hit, i: number) => ( -
  • - {noHits ? ( - - ) : ( - - )} -
  • - ))} -
-
- ); - } -); + useEffect(() => { + handleHits(allHits); + }); -const SearchHits = connectStateResults( - ({ - searchState, - handleMouseEnter, - handleMouseLeave, - selectedIndex, - handleHits - }: SearchHitsProps) => { - return isEmpty(searchState) || !searchState.query ? null : ( - - ); - } -); + return ( +
+
    + {allHits.map((hit: Hit, i: number) => ( +
  • + {noHits ? ( + + ) : ( + + )} +
  • + ))} +
+
+ ); +} export default SearchHits; diff --git a/client/src/components/search/searchBar/search-suggestion.tsx b/client/src/components/search/searchBar/search-suggestion.tsx index 2cc5cb9570c..741c4bd6e68 100644 --- a/client/src/components/search/searchBar/search-suggestion.tsx +++ b/client/src/components/search/searchBar/search-suggestion.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Hit } from 'react-instantsearch-core'; -import { Highlight } from 'react-instantsearch-dom'; +import { Highlight } from 'react-instantsearch'; +import type { Hit } from './types'; interface SuggestionProps { hit: Hit; @@ -29,7 +29,7 @@ const Suggestion = ({ > {dropdownFooter ? ( - + ) : ( )} diff --git a/client/src/components/search/searchBar/searchbar.css b/client/src/components/search/searchBar/searchbar.css index 36466404d03..883d60f49e8 100644 --- a/client/src/components/search/searchBar/searchbar.css +++ b/client/src/components/search/searchBar/searchbar.css @@ -88,6 +88,7 @@ .fcc_searchBar .ais-Highlight-highlighted { background-color: transparent; font-style: normal; + color: white; font-weight: bold; } @@ -134,6 +135,10 @@ background-color: var(--gray-75); } +.ais-Hits-item:hover { + background-color: var(--blue-dark); +} + /* Hit selected with arrow keys or mouse */ .selected { background-color: var(--blue-dark); @@ -152,7 +157,7 @@ and arrow keys */ padding: 6.5px 8px 8px; } -.fcc_suggestion_footer .hit-name .ais-Highlight { +.fcc_suggestion_footer span[class='ais-Highlight-nonHighlighted'] { font-weight: bold; } diff --git a/client/src/components/search/searchBar/types.ts b/client/src/components/search/searchBar/types.ts new file mode 100644 index 00000000000..1d228080fd4 --- /dev/null +++ b/client/src/components/search/searchBar/types.ts @@ -0,0 +1,6 @@ +import type { Hit as InstantSearchHit } from 'instantsearch.js'; + +export interface Hit extends InstantSearchHit { + url: string; + title?: string; +} diff --git a/client/src/components/search/with-instant-search.tsx b/client/src/components/search/with-instant-search.tsx index d3a0c74158e..45ed9abddc9 100644 --- a/client/src/components/search/with-instant-search.tsx +++ b/client/src/components/search/with-instant-search.tsx @@ -1,12 +1,13 @@ import { Location } from '@reach/router'; import type { WindowLocation } from '@reach/router'; +import type { SearchOptions } from 'instantsearch.js'; import algoliasearch from 'algoliasearch/lite'; import React, { useEffect, useRef } from 'react'; import type { ReactNode } from 'react'; -import { InstantSearch, Configure } from 'react-instantsearch-dom'; import { connect } from 'react-redux'; import { useMediaQuery } from 'react-responsive'; import { createSelector } from 'reselect'; +import { Configure, InstantSearch } from 'react-instantsearch'; import { algoliaAppId, algoliaAPIKey } from '../../../config/env.json'; import { newsIndex } from '../../utils/algolia-locale-setup'; @@ -22,8 +23,25 @@ const searchClient = algoliaAppId && algoliaAPIKey ? algoliasearch(algoliaAppId, algoliaAPIKey) : { - // eslint-disable-next-line @typescript-eslint/no-empty-function - search: () => {} + // When Algolia is not configured, the client will still render, + // the result query is returned to the search component as a mock + //(mainly for testing without relying on Playwright fuffill route as + // there is no request made without a key). + search: ( + request: Array<{ indexName: string; params: SearchOptions }> + ) => { + return Promise.resolve({ + results: [ + { + hits: [], + query: request[0].params?.query === 'test' ? 'test' : '', + params: + 'highlightPostTag=__%2Fais-highlight__&highlightPreTag=__ais-highlight__&hitsPerPage=5&query=sdefpuhsdfpiouhdsfgp', + index: 'news' + } + ] + }); + } }; const mapStateToProps = createSelector( @@ -81,22 +99,23 @@ function InstantSearchRoot({ }, []); const propsQuery = query; - function onSearchStateChange({ query }: { query: string | undefined }): void { - if (propsQuery === query || typeof query === 'undefined') { + function onSearchStateChange(query: string | undefined): void { + if (propsQuery === query) { return; } - updateSearchQuery(query); + updateSearchQuery(query ?? ''); } const hitsPerPage = isSmallHeight ? 8 : 5; return ( { + onSearchStateChange(uiState.news?.query); + }} searchClient={searchClient} - searchState={{ query }} > - + {children} ); diff --git a/e2e/fixtures/algolia-eight-hits.json b/e2e/fixtures/algolia-eight-hits.json index b40c1f0f686..ae35ead93ef 100644 --- a/e2e/fixtures/algolia-eight-hits.json +++ b/e2e/fixtures/algolia-eight-hits.json @@ -3,86 +3,330 @@ { "hits": [ { - "title": "Article 1", - "objectID": "Article 1", + "title": "How to Scrape Wikipedia Articles with Python", + "author": { + "name": "Dirk Hoekstra", + "url": "https://www.freecodecamp.org/news/author/dirk/", + "profileImage": "https://www.gravatar.com/avatar/70c37f72ed7bd4bde1524f41f385ee46?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Web Scraping", + "url": "https://www.freecodecamp.org/news/tag/web-scraping/" + }, + { + "name": "Python", + "url": "https://www.freecodecamp.org/news/tag/python/" + } + ], + "url": "https://www.freecodecamp.org/news/scraping-wikipedia-articles-with-python/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2020/08/artem-maltsev-vgQFlPq8tVQ-unsplash-1.jpg", + "publishedAt": "2020-08-24T17:24:24.000Z", + "publishedAtTimestamp": 1598289864, + "filterTerms": [], + "objectID": "5f9c9913740569d1a4ca1db1", "_highlightResult": { "title": { - "value": "Article 1", - "matchLevel": "full" + "value": "How to Scrape Wikipedia __ais-highlight__Article__/ais-highlight__s with Python", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 2", - "objectID": "Article 2", + "title": "How to Give Feedback on a freeCodeCamp Article", + "author": { + "name": "freeCodeCamp.org", + "url": "https://www.freecodecamp.org/news/author/freecodecamp/", + "profileImage": "https://www.gravatar.com/avatar/fcda43852608626fe46d7fd43145766e?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Community", + "url": "https://www.freecodecamp.org/news/tag/community/" + } + ], + "url": "https://www.freecodecamp.org/news/how-to-give-feedback-on-a-freecodecamp-article/", + "featureImage": "https://images.unsplash.com/photo-1504618223053-559bdef9dd5a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ", + "publishedAt": "2020-04-08T17:16:00.000Z", + "publishedAtTimestamp": 1586366160, + "filterTerms": [], + "objectID": "5f9c9bb8740569d1a4ca2d7f", "_highlightResult": { "title": { - "value": "Article 2", - "matchLevel": "full" + "value": "How to Give Feedback on a freeCodeCamp __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 3", - "objectID": "Article 3", + "title": "How To Embed Multiple Choice Quiz Questions into Your Article", + "author": { + "name": "Alexander Arobelidze", + "url": "https://www.freecodecamp.org/news/author/alex-arobelidze/", + "profileImage": "https://www.freecodecamp.org/news/content/images/2020/02/fcc-1.JPG" + }, + "tags": [ + { + "name": "Blog", + "url": "https://www.freecodecamp.org/news/tag/blog/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/multiple-choice-quiz-template/", + "featureImage": "https://images.unsplash.com/photo-1501504905252-473c47e087f8?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ", + "publishedAt": "2020-04-06T08:30:53.000Z", + "publishedAtTimestamp": 1586161853, + "filterTerms": [], + "objectID": "5f9c9bc5740569d1a4ca2dcf", "_highlightResult": { "title": { - "value": "Article 3", - "matchLevel": "full" + "value": "How To Embed Multiple Choice Quiz Questions into Your __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 4", - "objectID": "Article 4", + "title": "How to Add a Table of Contents to Your Blog Post or Article", + "author": { + "name": "Colby Fayock", + "url": "https://www.freecodecamp.org/news/author/colbyfayock/", + "profileImage": "https://www.freecodecamp.org/news/content/images/2020/03/star-wars-hug-yellow-cropped.png" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Writing Tips", + "url": "https://www.freecodecamp.org/news/tag/writing-tips/" + }, + { + "name": "Blog", + "url": "https://www.freecodecamp.org/news/tag/blog/" + }, + { + "name": "Blogger", + "url": "https://www.freecodecamp.org/news/tag/blogger/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + }, + { + "name": "Publishing", + "url": "https://www.freecodecamp.org/news/tag/publishing/" + } + ], + "url": "https://www.freecodecamp.org/news/how-to-add-a-table-of-contents-to-your-blog-post-or-article/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2020/02/table-of-contents.jpg", + "publishedAt": "2020-02-12T15:45:00.000Z", + "publishedAtTimestamp": 1581522300, + "filterTerms": [], + "objectID": "5f9c9c9d740569d1a4ca332b", "_highlightResult": { "title": { - "value": "Article 4", - "matchLevel": "full" + "value": "How to Add a Table of Contents to Your Blog Post or __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 5", - "objectID": "Article 5", + "title": "What 500+ blog posts taught me about writing great articles", + "author": { + "name": "Burke Holland", + "url": "https://www.freecodecamp.org/news/author/burkeholland/", + "profileImage": "https://www.gravatar.com/avatar/59247a80fdf2632dfea43b8824e07cdb?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/what-500-blog-posts-taught-me-about-writing-great-articles/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2019/07/writing-technical-articles-banner.png", + "publishedAt": "2019-07-31T15:00:00.000Z", + "publishedAtTimestamp": 1564585200, + "filterTerms": [], + "objectID": "5f9ca121740569d1a4ca4cde", "_highlightResult": { "title": { - "value": "Article 5", - "matchLevel": "full" + "value": "What 500+ blog posts taught me about writing great __ais-highlight__article__/ais-highlight__s", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 6", - "objectID": "Article 6", + "title": "What 500+ blog posts taught me about writing great articles", + "author": { + "name": "Burke Holland", + "url": "https://www.freecodecamp.org/news/author/burkeholland/", + "profileImage": "https://www.gravatar.com/avatar/59247a80fdf2632dfea43b8824e07cdb?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/what-500-blog-posts-taught-me-about-writing-great-articles/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2019/07/writing-technical-articles-banner.png", + "publishedAt": "2019-07-31T15:00:00.000Z", + "publishedAtTimestamp": 1564585200, + "filterTerms": [], + "objectID": "5f9ca121740569d1a4ca4cde", "_highlightResult": { "title": { - "value": "Article 6", - "matchLevel": "full" + "value": "What 500+ blog posts taught me about writing great __ais-highlight__article__/ais-highlight__s", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 7", - "objectID": "Article 7", + "title": "What 500+ blog posts taught me about writing great articles", + "author": { + "name": "Burke Holland", + "url": "https://www.freecodecamp.org/news/author/burkeholland/", + "profileImage": "https://www.gravatar.com/avatar/59247a80fdf2632dfea43b8824e07cdb?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/what-500-blog-posts-taught-me-about-writing-great-articles/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2019/07/writing-technical-articles-banner.png", + "publishedAt": "2019-07-31T15:00:00.000Z", + "publishedAtTimestamp": 1564585200, + "filterTerms": [], + "objectID": "5f9ca121740569d1a4ca4cde", "_highlightResult": { "title": { - "value": "Article 7", - "matchLevel": "full" + "value": "What 500+ blog posts taught me about writing great __ais-highlight__article__/ais-highlight__s", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 8", - "objectID": "Article 8", + "title": "What 500+ blog posts taught me about writing great articles", + "author": { + "name": "Burke Holland", + "url": "https://www.freecodecamp.org/news/author/burkeholland/", + "profileImage": "https://www.gravatar.com/avatar/59247a80fdf2632dfea43b8824e07cdb?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/what-500-blog-posts-taught-me-about-writing-great-articles/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2019/07/writing-technical-articles-banner.png", + "publishedAt": "2019-07-31T15:00:00.000Z", + "publishedAtTimestamp": 1564585200, + "filterTerms": [], + "objectID": "5f9ca121740569d1a4ca4cde", "_highlightResult": { "title": { - "value": "Article 8", - "matchLevel": "full" + "value": "What 500+ blog posts taught me about writing great __ais-highlight__article__/ais-highlight__s", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } } - ] + ], + "nbHits": 30, + "page": 0, + "nbPages": 6, + "hitsPerPage": 5, + "exhaustiveNbHits": true, + "exhaustiveTypo": true, + "exhaustive": { + "nbHits": true, + "typo": true + }, + "query": "article", + "params": "highlightPostTag=__%2Fais-highlight__&highlightPreTag=__ais-highlight__&hitsPerPage=5&query=article", + "index": "news", + "renderingContent": {}, + "processingTimeMS": 1, + "processingTimingsMS": { + "_request": { + "roundTrip": 90 + } + } } ] } \ No newline at end of file diff --git a/e2e/fixtures/algolia-five-hits.json b/e2e/fixtures/algolia-five-hits.json index ef3f7ea5d5f..af67560ed16 100644 --- a/e2e/fixtures/algolia-five-hits.json +++ b/e2e/fixtures/algolia-five-hits.json @@ -3,56 +3,216 @@ { "hits": [ { - "title": "Article 1", - "objectID": "Article 1", + "title": "How to Scrape Wikipedia Articles with Python", + "author": { + "name": "Dirk Hoekstra", + "url": "https://www.freecodecamp.org/news/author/dirk/", + "profileImage": "https://www.gravatar.com/avatar/70c37f72ed7bd4bde1524f41f385ee46?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Web Scraping", + "url": "https://www.freecodecamp.org/news/tag/web-scraping/" + }, + { + "name": "Python", + "url": "https://www.freecodecamp.org/news/tag/python/" + } + ], + "url": "https://www.freecodecamp.org/news/scraping-wikipedia-articles-with-python/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2020/08/artem-maltsev-vgQFlPq8tVQ-unsplash-1.jpg", + "publishedAt": "2020-08-24T17:24:24.000Z", + "publishedAtTimestamp": 1598289864, + "filterTerms": [], + "objectID": "5f9c9913740569d1a4ca1db1", "_highlightResult": { "title": { - "value": "Article 1", - "matchLevel": "full" + "value": "How to Scrape Wikipedia __ais-highlight__Article__/ais-highlight__s with Python", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 2", - "objectID": "Article 2", + "title": "How to Give Feedback on a freeCodeCamp Article", + "author": { + "name": "freeCodeCamp.org", + "url": "https://www.freecodecamp.org/news/author/freecodecamp/", + "profileImage": "https://www.gravatar.com/avatar/fcda43852608626fe46d7fd43145766e?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Community", + "url": "https://www.freecodecamp.org/news/tag/community/" + } + ], + "url": "https://www.freecodecamp.org/news/how-to-give-feedback-on-a-freecodecamp-article/", + "featureImage": "https://images.unsplash.com/photo-1504618223053-559bdef9dd5a?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ", + "publishedAt": "2020-04-08T17:16:00.000Z", + "publishedAtTimestamp": 1586366160, + "filterTerms": [], + "objectID": "5f9c9bb8740569d1a4ca2d7f", "_highlightResult": { "title": { - "value": "Article 2", - "matchLevel": "full" + "value": "How to Give Feedback on a freeCodeCamp __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 3", - "objectID": "Article 3", + "title": "How To Embed Multiple Choice Quiz Questions into Your Article", + "author": { + "name": "Alexander Arobelidze", + "url": "https://www.freecodecamp.org/news/author/alex-arobelidze/", + "profileImage": "https://www.freecodecamp.org/news/content/images/2020/02/fcc-1.JPG" + }, + "tags": [ + { + "name": "Blog", + "url": "https://www.freecodecamp.org/news/tag/blog/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/multiple-choice-quiz-template/", + "featureImage": "https://images.unsplash.com/photo-1501504905252-473c47e087f8?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ", + "publishedAt": "2020-04-06T08:30:53.000Z", + "publishedAtTimestamp": 1586161853, + "filterTerms": [], + "objectID": "5f9c9bc5740569d1a4ca2dcf", "_highlightResult": { "title": { - "value": "Article 3", - "matchLevel": "full" + "value": "How To Embed Multiple Choice Quiz Questions into Your __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 4", - "objectID": "Article 4", + "title": "How to Add a Table of Contents to Your Blog Post or Article", + "author": { + "name": "Colby Fayock", + "url": "https://www.freecodecamp.org/news/author/colbyfayock/", + "profileImage": "https://www.freecodecamp.org/news/content/images/2020/03/star-wars-hug-yellow-cropped.png" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Writing Tips", + "url": "https://www.freecodecamp.org/news/tag/writing-tips/" + }, + { + "name": "Blog", + "url": "https://www.freecodecamp.org/news/tag/blog/" + }, + { + "name": "Blogger", + "url": "https://www.freecodecamp.org/news/tag/blogger/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + }, + { + "name": "Publishing", + "url": "https://www.freecodecamp.org/news/tag/publishing/" + } + ], + "url": "https://www.freecodecamp.org/news/how-to-add-a-table-of-contents-to-your-blog-post-or-article/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2020/02/table-of-contents.jpg", + "publishedAt": "2020-02-12T15:45:00.000Z", + "publishedAtTimestamp": 1581522300, + "filterTerms": [], + "objectID": "5f9c9c9d740569d1a4ca332b", "_highlightResult": { "title": { - "value": "Article 4", - "matchLevel": "full" + "value": "How to Add a Table of Contents to Your Blog Post or __ais-highlight__Article__/ais-highlight__", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } }, { - "title": "Article 5", - "objectID": "Article 5", + "title": "What 500+ blog posts taught me about writing great articles", + "author": { + "name": "Burke Holland", + "url": "https://www.freecodecamp.org/news/author/burkeholland/", + "profileImage": "https://www.gravatar.com/avatar/59247a80fdf2632dfea43b8824e07cdb?s=250&d=mm&r=x" + }, + "tags": [ + { + "name": "Writing", + "url": "https://www.freecodecamp.org/news/tag/writing/" + }, + { + "name": "Technical Writing", + "url": "https://www.freecodecamp.org/news/tag/technical-writing/" + }, + { + "name": "Blogging", + "url": "https://www.freecodecamp.org/news/tag/blogging/" + } + ], + "url": "https://www.freecodecamp.org/news/what-500-blog-posts-taught-me-about-writing-great-articles/", + "featureImage": "https://www.freecodecamp.org/news/content/images/2019/07/writing-technical-articles-banner.png", + "publishedAt": "2019-07-31T15:00:00.000Z", + "publishedAtTimestamp": 1564585200, + "filterTerms": [], + "objectID": "5f9ca121740569d1a4ca4cde", "_highlightResult": { "title": { - "value": "Article 5", - "matchLevel": "full" + "value": "What 500+ blog posts taught me about writing great __ais-highlight__article__/ais-highlight__s", + "matchLevel": "full", + "fullyHighlighted": false, + "matchedWords": [ + "article" + ] } } } - ] + ], + "nbHits": 30, + "page": 0, + "nbPages": 6, + "hitsPerPage": 5, + "exhaustiveNbHits": true, + "exhaustiveTypo": true, + "exhaustive": { + "nbHits": true, + "typo": true + }, + "query": "article", + "params": "highlightPostTag=__%2Fais-highlight__&highlightPreTag=__ais-highlight__&hitsPerPage=5&query=article", + "index": "news", + "renderingContent": {}, + "processingTimeMS": 1, + "processingTimingsMS": { + "_request": { + "roundTrip": 90 + } + } } ] } \ No newline at end of file diff --git a/e2e/fixtures/algolia-no-hits.json b/e2e/fixtures/algolia-no-hits.json new file mode 100644 index 00000000000..af3e773d70f --- /dev/null +++ b/e2e/fixtures/algolia-no-hits.json @@ -0,0 +1,29 @@ +{ + "results": [ + { + "hits": [], + "nbHits": 0, + "page": 0, + "nbPages": 0, + "hitsPerPage": 5, + "exhaustiveNbHits": true, + "exhaustiveTypo": true, + "exhaustive": { + "nbHits": true, + "typo": true + }, + "query": "sdefpuhsdfpiouhdsfgp", + "params": "highlightPostTag=__%2Fais-highlight__&highlightPreTag=__ais-highlight__&hitsPerPage=5&query=sdefpuhsdfpiouhdsfgp", + "index": "news", + "renderingContent": {}, + "processingTimeMS": 1, + "processingTimingsMS": { + "_request": { + "roundTrip": 94 + }, + "total": 1 + }, + "serverTimeMS": 1 + } + ] +} \ No newline at end of file diff --git a/e2e/search-bar.spec.ts b/e2e/search-bar.spec.ts index 7efab8417fc..59b07590525 100644 --- a/e2e/search-bar.spec.ts +++ b/e2e/search-bar.spec.ts @@ -2,6 +2,7 @@ import { test, expect, type Page } from '@playwright/test'; import translations from '../client/i18n/locales/english/translations.json'; import algoliaEightHits from './fixtures/algolia-eight-hits.json'; import algoliaFiveHits from './fixtures/algolia-five-hits.json'; +import algoliaNoHits from './fixtures/algolia-no-hits.json'; const haveApiKeys = process.env.ALGOLIA_APP_ID !== 'app_id_from_algolia_dashboard' && @@ -22,7 +23,7 @@ const getSearchInput = async ({ await menuButton.click(); } - return page.getByLabel('Search'); + return page.getByLabel('Search', { exact: true }); }; const search = async ({ @@ -38,6 +39,8 @@ const search = async ({ await searchInput.fill(query); }; +// Mock Algolia requests to prevent hitting Algolia server unnecessarily. +// Comment out the function call if you want to test against the real server. const mockAlgolia = async ({ page, hitsPerPage @@ -46,16 +49,16 @@ const mockAlgolia = async ({ hitsPerPage: number; }) => { if (hitsPerPage === 8) { - await page.route(/\w+(\.algolia\.net|\.algolianet\.com)/, async route => { + await page.route(/dsn.algolia.net/, async route => { await route.fulfill({ json: algoliaEightHits }); }); } else if (hitsPerPage === 5) { - await page.route(/\w+(\.algolia\.net|\.algolianet\.com)/, async route => { + await page.route(/dsn.algolia.net/, async route => { await route.fulfill({ json: algoliaFiveHits }); }); } else if (hitsPerPage === 0) { - await page.route(/\w+(\.algolia\.net|\.algolianet\.com)/, async route => { - await route.fulfill({ json: {} }); + await page.route(/dsn.algolia.net/, async route => { + await route.fulfill({ json: algoliaNoHits }); }); } }; @@ -63,22 +66,14 @@ const mockAlgolia = async ({ test.describe('Search bar', () => { test.beforeEach(async ({ page }) => { await page.goto('/learn'); - - // Mock Algolia requests to prevent hitting Algolia server unnecessarily. - // Comment out this line if you want to test against the real server. - await mockAlgolia({ page, hitsPerPage: 8 }); }); test('should display correctly', async ({ page, isMobile }) => { const searchInput = await getSearchInput({ page, isMobile }); await expect(searchInput).toBeVisible(); - // Because we're mocking Algolia requests, the placeholder - // should be the default one. - await expect(searchInput).toHaveAttribute( - 'placeholder', - translations.search.placeholder.default - ); + + await expect(searchInput).toHaveAttribute('placeholder', /Search/i); await expect( page.getByRole('button', { name: 'Submit search terms' }) ).toBeVisible(); @@ -89,7 +84,7 @@ test.describe('Search bar', () => { isMobile }) => { test.skip(!haveApiKeys, 'This test requires Algolia API keys'); - + await mockAlgolia({ page, hitsPerPage: 8 }); await search({ page, isMobile, query: 'article' }); // Wait for the search results to show up @@ -114,7 +109,7 @@ test.describe('Search bar', () => { isMobile }) => { test.skip(!haveApiKeys, 'This test requires Algolia API keys'); - + await mockAlgolia({ page, hitsPerPage: 8 }); await search({ page, isMobile, query: 'article' }); // Wait for the search results to show up @@ -139,7 +134,7 @@ test.describe('Search bar', () => { isMobile }) => { await mockAlgolia({ page, hitsPerPage: 0 }); - await search({ page, isMobile, query: '!@#$%^' }); + await search({ page, isMobile, query: 'test' }); const resultList = page.getByRole('list', { name: 'Search results' }); await expect(resultList.getByRole('listitem')).toHaveCount(1); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6bd9a5e67e..b3b3c7c9379 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -526,37 +526,40 @@ importers: version: 4.20.10 gatsby: specifier: 3.15.0 - version: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + version: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-cli: specifier: 3.15.0 version: 3.15.0 gatsby-plugin-create-client-paths: specifier: 3.15.0 - version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) gatsby-plugin-manifest: specifier: 3.15.0 - version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) + version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) gatsby-plugin-pnpm: specifier: ^1.2.10 - version: 1.2.10(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + version: 1.2.10(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) gatsby-plugin-postcss: specifier: 4.15.0 - version: 4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(postcss@8.4.35)(webpack@5.90.3) + version: 4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(postcss@8.4.35)(webpack@5.90.3) gatsby-plugin-react-helmet: specifier: 4.15.0 - version: 4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(react-helmet@6.1.0(react@16.14.0)) + version: 4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(react-helmet@6.1.0(react@16.14.0)) gatsby-plugin-remove-serviceworker: specifier: 1.0.0 version: 1.0.0 gatsby-source-filesystem: specifier: 3.15.0 - version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + version: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) gatsby-transformer-remark: specifier: 5.25.1 - version: 5.25.1(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + version: 5.25.1(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) i18next: specifier: 22.5.1 version: 22.5.1 + instantsearch.js: + specifier: 4.75.3 + version: 4.75.3(algoliasearch@4.22.1) lodash: specifier: 4.17.21 version: 4.17.21 @@ -617,12 +620,12 @@ importers: react-i18next: specifier: 12.3.1 version: 12.3.1(i18next@22.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + react-instantsearch: + specifier: 7.13.6 + version: 7.13.6(algoliasearch@4.22.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) react-instantsearch-core: - specifier: 6.40.4 - version: 6.40.4(algoliasearch@4.22.1)(react@16.14.0) - react-instantsearch-dom: - specifier: 6.40.4 - version: 6.40.4(algoliasearch@4.22.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0) + specifier: 7.13.6 + version: 7.13.6(algoliasearch@4.22.1)(react@16.14.0) react-monaco-editor: specifier: 0.40.0 version: 0.40.0(@types/react@16.14.56)(react@16.14.0) @@ -744,12 +747,6 @@ importers: '@types/react-helmet': specifier: 6.1.11 version: 6.1.11 - '@types/react-instantsearch-core': - specifier: 6.26.10 - version: 6.26.10 - '@types/react-instantsearch-dom': - specifier: 6.12.8 - version: 6.12.8 '@types/react-redux': specifier: 7.1.33 version: 7.1.33 @@ -794,7 +791,7 @@ importers: version: 16.4.5 gatsby-plugin-webpack-bundle-analyser-v2: specifier: 1.1.32 - version: 1.1.32(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + version: 1.1.32(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) i18next-fs-backend: specifier: 2.3.2 version: 2.3.2 @@ -827,7 +824,7 @@ importers: version: 10.9.2(@types/node@20.12.8)(typescript@5.2.2) webpack: specifier: 5.90.3 - version: 5.90.3(webpack-cli@4.10.0) + version: 5.90.3 curriculum: devDependencies: @@ -1116,7 +1113,7 @@ importers: version: 4.3.12 '@types/copy-webpack-plugin': specifier: ^8.0.1 - version: 8.0.1(webpack-cli@4.10.0) + version: 8.0.1(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3)) '@types/enzyme': specifier: 3.10.16 version: 3.10.16 @@ -1134,13 +1131,13 @@ importers: version: 1.6.0(typescript@5.4.5) babel-loader: specifier: 8.3.0 - version: 8.3.0(@babel/core@7.23.7)(webpack@5.90.3) + version: 8.3.0(@babel/core@7.23.7)(webpack@5.90.3(webpack-cli@4.10.0)) chai: specifier: 4.4.1 version: 4.4.1 copy-webpack-plugin: specifier: 9.1.0 - version: 9.1.0(webpack@5.90.3) + version: 9.1.0(webpack@5.90.3(webpack-cli@4.10.0)) enzyme: specifier: 3.11.0 version: 3.11.0 @@ -4124,6 +4121,9 @@ packages: '@types/debug@4.1.9': resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==} + '@types/dom-speech-recognition@0.0.1': + resolution: {integrity: sha512-udCxb8DvjcDKfk1WTBzDsxFbLgYxmQGKrE/ricoMqHRNjSlSUCcamVTA5lIQqzY10mY5qCY0QDwBfFEwhfoDPw==} + '@types/enzyme-adapter-react-16@1.0.9': resolution: {integrity: sha512-z24MMxGtUL8HhXdye3tWzjp+19QTsABqLaX2oOZpxMPHRJgLfahQmOeTTrEBQd9ogW20+UmPBXD9j+XOasFHvw==} @@ -4175,12 +4175,18 @@ packages: '@types/glob@8.1.0': resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + '@types/google.maps@3.58.1': + resolution: {integrity: sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==} + '@types/graceful-fs@4.1.7': resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} '@types/hast@2.3.6': resolution: {integrity: sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==} + '@types/hogan.js@3.0.5': + resolution: {integrity: sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA==} + '@types/hoist-non-react-statics@3.3.2': resolution: {integrity: sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw==} @@ -4334,12 +4340,6 @@ packages: '@types/react-helmet@6.1.11': resolution: {integrity: sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==} - '@types/react-instantsearch-core@6.26.10': - resolution: {integrity: sha512-izn21BqXtO3GA5Tx3x7SP6kfk1GJppkVdowuenKIOUj1sCJ3VHwoggsqVWv1DYVcsS8wydjR8Ra91XtI2a12rw==} - - '@types/react-instantsearch-dom@6.12.8': - resolution: {integrity: sha512-LKrV3yqtar29TqkG76sfw7k6s95BXRvESKIarNiniXdC+6pioZ23KOx71WJNnwiWbHfeyeSILsKStwDpVWry4A==} - '@types/react-redux@7.1.33': resolution: {integrity: sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==} @@ -4821,13 +4821,8 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - algoliasearch-helper@3.14.0: - resolution: {integrity: sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ==} - peerDependencies: - algoliasearch: '>= 3.1 < 6' - - algoliasearch-helper@3.14.2: - resolution: {integrity: sha512-FjDSrjvQvJT/SKMW74nPgFpsoPUwZCzGbCqbp8HhBFfSk/OvNFxzCaCmuO0p7AWeLy1gD+muFwQEkBwcl5H4pg==} + algoliasearch-helper@3.22.5: + resolution: {integrity: sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==} peerDependencies: algoliasearch: '>= 3.1 < 6' @@ -7987,6 +7982,10 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hogan.js@3.0.2: + resolution: {integrity: sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg==} + hasBin: true + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -8008,6 +8007,9 @@ packages: resolution: {integrity: sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==} engines: {node: '>=4.0.0'} + htm@3.1.1: + resolution: {integrity: sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==} + html-element-map@1.3.1: resolution: {integrity: sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==} @@ -8263,6 +8265,14 @@ packages: resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} hasBin: true + instantsearch-ui-components@0.9.0: + resolution: {integrity: sha512-ugQ+XdPx3i3Sxu+woRo6tPE0Fz/kWd4KblTUfZD1TZZBsm/8qFvcbg5dVBDvXX9v7ntoyugXCzC/XCZMzrSkig==} + + instantsearch.js@4.75.3: + resolution: {integrity: sha512-WVVWlqR3XDqJjrEt4+kQXudrdxWIhkxzUhwxFnccB/RdsMvVHp+N6bIcVSIMGyRo/rGfGZ5Rki2E++iGwOljtA==} + peerDependencies: + algoliasearch: '>= 3.1 < 6' + internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} @@ -9892,6 +9902,10 @@ packages: mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@0.3.0: + resolution: {integrity: sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -10935,6 +10949,9 @@ packages: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} + preact@10.24.3: + resolution: {integrity: sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==} + prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} @@ -11260,19 +11277,18 @@ packages: react-native: optional: true - react-instantsearch-core@6.40.4: - resolution: {integrity: sha512-sEOgRU2MKL8edO85sNHvKlZ5yq9OFw++CDsEqYpHJvbWLE/2J2N49XAUY90kior09I2kBkbgowBbov+Py1AubQ==} + react-instantsearch-core@7.13.6: + resolution: {integrity: sha512-ZFSGnhbqI8OF7Pi1MYkSFBJxd9A5qFJkb7y6Xd6sUm98xu6D4U4P6uvxPucihPwgTTj8YwTGe/lwcDIYPGqXNw==} peerDependencies: - algoliasearch: '>= 3.1 < 5' - react: '>= 16.3.0 < 19' + algoliasearch: '>= 3.1 < 6' + react: '>= 16.8.0 < 19' - react-instantsearch-dom@6.40.4: - resolution: {integrity: sha512-Oy8EKEOg/dfTE8tHc7GZRlzUdbZY4Mxas1x2OtvSNui+YAbIWafIf1g98iOGyVTB2qI5WH91YyUJTLPNfLrs6Q==} - deprecated: package has moved to react-instantsearch + react-instantsearch@7.13.6: + resolution: {integrity: sha512-uEnNPbasXTDHMpmH6/P0EszrSPCzKyLgxHxj7+z8J3+RYsG2Ed7gG25mD5HlNLnH4ca8p9W+ZQE2f/R3M8GK6w==} peerDependencies: - algoliasearch: '>= 3.1 < 5' - react: '>= 16.3.0 < 19' - react-dom: '>= 16.3.0 < 19' + algoliasearch: '>= 3.1 < 6' + react: '>= 16.8.0 < 19' + react-dom: '>= 16.8.0 < 19' react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -11804,6 +11820,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} + search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -13109,6 +13128,11 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -17551,7 +17575,7 @@ snapshots: react-refresh: 0.9.0 schema-utils: 2.7.1 source-map: 0.7.4 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 '@polka/url@1.0.0-next.23': {} @@ -18291,7 +18315,7 @@ snapshots: '@types/cookiejar@2.1.2': {} - '@types/copy-webpack-plugin@8.0.1(webpack-cli@4.10.0)': + '@types/copy-webpack-plugin@8.0.1(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3))': dependencies: '@types/node': 20.8.0 tapable: 2.2.1 @@ -18312,6 +18336,8 @@ snapshots: dependencies: '@types/ms': 0.7.32 + '@types/dom-speech-recognition@0.0.1': {} + '@types/enzyme-adapter-react-16@1.0.9': dependencies: '@types/enzyme': 3.10.18 @@ -18392,6 +18418,8 @@ snapshots: '@types/minimatch': 5.1.2 '@types/node': 20.12.8 + '@types/google.maps@3.58.1': {} + '@types/graceful-fs@4.1.7': dependencies: '@types/node': 20.12.8 @@ -18400,6 +18428,8 @@ snapshots: dependencies: '@types/unist': 2.0.8 + '@types/hogan.js@3.0.5': {} + '@types/hoist-non-react-statics@3.3.2': dependencies: '@types/react': 16.14.56 @@ -18556,17 +18586,6 @@ snapshots: dependencies: '@types/react': 16.14.56 - '@types/react-instantsearch-core@6.26.10': - dependencies: - '@types/react': 16.14.56 - algoliasearch: 4.22.1 - algoliasearch-helper: 3.14.2(algoliasearch@4.22.1) - - '@types/react-instantsearch-dom@6.12.8': - dependencies: - '@types/react': 16.14.56 - '@types/react-instantsearch-core': 6.26.10 - '@types/react-redux@7.1.33': dependencies: '@types/hoist-non-react-statics': 3.3.2 @@ -19045,17 +19064,17 @@ snapshots: '@webassemblyjs/ast': 1.11.6 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.90.3)': + '@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3))(webpack@5.90.3(webpack-cli@4.10.0))': dependencies: webpack: 5.90.3(webpack-cli@4.10.0) webpack-cli: 4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3) - '@webpack-cli/info@1.5.0(webpack-cli@4.10.0)': + '@webpack-cli/info@1.5.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3))': dependencies: envinfo: 7.10.0 webpack-cli: 4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3) - '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)': + '@webpack-cli/serve@1.7.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3))': dependencies: webpack-cli: 4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3) @@ -19182,12 +19201,7 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - algoliasearch-helper@3.14.0(algoliasearch@4.22.1): - dependencies: - '@algolia/events': 4.0.1 - algoliasearch: 4.22.1 - - algoliasearch-helper@3.14.2(algoliasearch@4.22.1): + algoliasearch-helper@3.22.5(algoliasearch@4.22.1): dependencies: '@algolia/events': 4.0.1 algoliasearch: 4.22.1 @@ -19544,9 +19558,9 @@ snapshots: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 - babel-loader@8.3.0(@babel/core@7.23.7)(webpack@5.90.3): + babel-loader@8.3.0(@babel/core@7.23.7)(webpack@5.90.3(webpack-cli@4.10.0)): dependencies: '@babel/core': 7.23.7 find-cache-dir: 3.3.2 @@ -19707,20 +19721,20 @@ snapshots: dependencies: prismjs: 1.29.0 - babel-plugin-remove-graphql-queries@3.15.0(@babel/core@7.23.0)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + babel-plugin-remove-graphql-queries@3.15.0(@babel/core@7.23.0)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/core': 7.23.0 '@babel/runtime': 7.23.9 '@babel/types': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 2.15.0 - babel-plugin-remove-graphql-queries@3.15.0(@babel/core@7.23.7)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + babel-plugin-remove-graphql-queries@3.15.0(@babel/core@7.23.7)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/core': 7.23.7 '@babel/runtime': 7.23.9 '@babel/types': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 2.15.0 babel-plugin-transform-react-remove-prop-types@0.4.24: {} @@ -20667,7 +20681,7 @@ snapshots: copy-descriptor@0.1.1: {} - copy-webpack-plugin@9.1.0(webpack@5.90.3): + copy-webpack-plugin@9.1.0(webpack@5.90.3(webpack-cli@4.10.0)): dependencies: fast-glob: 3.3.1 glob-parent: 6.0.2 @@ -20848,7 +20862,7 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.6.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 css-mediaquery@0.1.2: {} @@ -20861,7 +20875,7 @@ snapshots: schema-utils: 3.3.0 serialize-javascript: 5.0.1 source-map: 0.6.1 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 css-select@4.3.0: dependencies: @@ -21762,7 +21776,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@7.32.0))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.7.1(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.33.2(eslint@7.32.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2): + eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@7.32.0))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.7.1(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.33.2(eslint@7.32.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2): dependencies: '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2) '@typescript-eslint/parser': 4.33.0(eslint@7.32.0)(typescript@5.2.2) @@ -21770,7 +21784,7 @@ snapshots: confusing-browser-globals: 1.0.11 eslint: 7.32.0 eslint-plugin-flowtype: 5.10.0(eslint@7.32.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@7.32.0) eslint-plugin-react: 7.33.2(eslint@7.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@7.32.0) @@ -21791,7 +21805,7 @@ snapshots: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) get-tsconfig: 4.7.2 globby: 13.2.2 @@ -21804,7 +21818,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0): dependencies: debug: 3.2.7(supports-color@5.5.0) optionalDependencies: @@ -21815,7 +21829,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@5.5.0) optionalDependencies: @@ -21851,7 +21865,7 @@ snapshots: - typescript - utf-8-validate - eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0): + eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0): dependencies: array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 @@ -21861,7 +21875,7 @@ snapshots: doctrine: 2.1.0 eslint: 7.32.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0) has: 1.0.3 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -21888,7 +21902,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.0 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -22069,7 +22083,7 @@ snapshots: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 eslint@7.32.0: dependencies: @@ -22548,7 +22562,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 file-type@16.5.4: dependencies: @@ -22674,7 +22688,7 @@ snapshots: semver: 5.7.2 tapable: 1.1.3 typescript: 5.2.2 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 worker-rpc: 0.1.1 optionalDependencies: eslint: 7.32.0 @@ -22870,23 +22884,23 @@ snapshots: lodash: 4.17.21 micromatch: 4.0.5 - gatsby-plugin-create-client-paths@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-plugin-create-client-paths@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) - gatsby-plugin-manifest@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): + gatsby-plugin-manifest@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 2.15.0 - gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) + gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) semver: 7.5.4 sharp: 0.29.3 transitivePeerDependencies: - graphql - gatsby-plugin-page-creator@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): + gatsby-plugin-page-creator@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): dependencies: '@babel/runtime': 7.23.9 '@babel/traverse': 7.23.7 @@ -22894,10 +22908,10 @@ snapshots: chokidar: 3.6.0 fs-exists-cached: 1.0.0 fs-extra: 10.1.0 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 2.15.0 gatsby-page-utils: 1.15.0 - gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) + gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) gatsby-telemetry: 2.15.0 globby: 11.1.0 lodash: 4.17.21 @@ -22906,30 +22920,30 @@ snapshots: - graphql - supports-color - gatsby-plugin-pnpm@1.2.10(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-plugin-pnpm@1.2.10(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) lodash.get: 4.4.2 lodash.uniq: 4.5.0 - gatsby-plugin-postcss@4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(postcss@8.4.35)(webpack@5.90.3): + gatsby-plugin-postcss@4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(postcss@8.4.35)(webpack@5.90.3): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) postcss: 8.4.35 postcss-loader: 4.3.0(postcss@8.4.35)(webpack@5.90.3) transitivePeerDependencies: - webpack - gatsby-plugin-react-helmet@4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(react-helmet@6.1.0(react@16.14.0)): + gatsby-plugin-react-helmet@4.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(react-helmet@6.1.0(react@16.14.0)): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) react-helmet: 6.1.0(react@16.14.0) gatsby-plugin-remove-serviceworker@1.0.0: {} - gatsby-plugin-typescript@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-plugin-typescript@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/core': 7.23.7 '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.7) @@ -22937,23 +22951,23 @@ snapshots: '@babel/plugin-proposal-optional-chaining': 7.17.12(@babel/core@7.23.7) '@babel/preset-typescript': 7.23.3(@babel/core@7.23.7) '@babel/runtime': 7.23.9 - babel-plugin-remove-graphql-queries: 3.15.0(@babel/core@7.23.7)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + babel-plugin-remove-graphql-queries: 3.15.0(@babel/core@7.23.7)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) transitivePeerDependencies: - supports-color - gatsby-plugin-utils@1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): + gatsby-plugin-utils@1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0): dependencies: '@babel/runtime': 7.23.9 fastq: 1.15.0 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) graphql: 15.8.0 joi: 17.12.2 - gatsby-plugin-webpack-bundle-analyser-v2@1.1.32(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-plugin-webpack-bundle-analyser-v2@1.1.32(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) webpack-bundle-analyzer: 4.10.1 transitivePeerDependencies: - bufferutil @@ -23034,14 +23048,14 @@ snapshots: - supports-color - utf-8-validate - gatsby-source-filesystem@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-source-filesystem@3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/runtime': 7.23.9 chokidar: 3.6.0 fastq: 1.15.0 file-type: 16.5.4 fs-extra: 10.1.0 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 2.15.0 got: 9.6.0 md5-file: 5.0.0 @@ -23070,10 +23084,10 @@ snapshots: transitivePeerDependencies: - encoding - gatsby-transformer-remark@5.25.1(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): + gatsby-transformer-remark@5.25.1(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)): dependencies: '@babel/runtime': 7.23.9 - gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) + gatsby: 3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2) gatsby-core-utils: 3.25.0 gray-matter: 4.0.3 hast-util-raw: 6.1.0 @@ -23105,7 +23119,7 @@ snapshots: transitivePeerDependencies: - supports-color - gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2): + gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2): dependencies: '@babel/code-frame': 7.22.13 '@babel/core': 7.23.0 @@ -23131,7 +23145,7 @@ snapshots: babel-plugin-add-module-exports: 1.0.4 babel-plugin-dynamic-import-node: 2.3.3 babel-plugin-lodash: 3.3.4 - babel-plugin-remove-graphql-queries: 3.15.0(@babel/core@7.23.0)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + babel-plugin-remove-graphql-queries: 3.15.0(@babel/core@7.23.0)(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) babel-preset-gatsby: 1.15.0(@babel/core@7.23.0)(core-js@3.33.0) better-opn: 2.1.1 bluebird: 3.7.2 @@ -23156,10 +23170,10 @@ snapshots: devcert: 1.2.2 dotenv: 8.6.0 eslint: 7.32.0 - eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@7.32.0))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.7.1(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.33.2(eslint@7.32.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2) + eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2))(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(babel-eslint@10.1.0(eslint@7.32.0))(eslint-plugin-flowtype@5.10.0(eslint@7.32.0))(eslint-plugin-import@2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0))(eslint-plugin-jsx-a11y@6.7.1(eslint@7.32.0))(eslint-plugin-react-hooks@4.6.0(eslint@7.32.0))(eslint-plugin-react@7.33.2(eslint@7.32.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(eslint@7.32.0)(typescript@5.2.2) eslint-plugin-flowtype: 5.10.0(eslint@7.32.0) eslint-plugin-graphql: 4.0.0(@types/node@20.12.8)(graphql@15.8.0)(typescript@5.2.2) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5)(eslint@7.32.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@4.33.0(eslint@7.32.0)(typescript@5.2.2))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@7.32.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@7.32.0) eslint-plugin-react: 7.33.2(eslint@7.32.0) eslint-plugin-react-hooks: 4.6.0(eslint@7.32.0) @@ -23179,9 +23193,9 @@ snapshots: gatsby-graphiql-explorer: 1.15.0 gatsby-legacy-polyfills: 1.15.0 gatsby-link: 3.15.0(@gatsbyjs/reach-router@1.3.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0))(react-dom@16.14.0(react@16.14.0))(react@16.14.0) - gatsby-plugin-page-creator: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) - gatsby-plugin-typescript: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) - gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5)(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) + gatsby-plugin-page-creator: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) + gatsby-plugin-typescript: 3.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2)) + gatsby-plugin-utils: 1.15.0(gatsby@3.15.0(@types/node@20.12.8)(babel-eslint@10.1.0(eslint@7.32.0))(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.4.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint-plugin-testing-library@3.9.0(eslint@7.32.0)(typescript@5.2.2))(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(typescript@5.2.2))(graphql@15.8.0) gatsby-react-router-scroll: 4.15.0(@gatsbyjs/reach-router@1.3.9(react-dom@16.14.0(react@16.14.0))(react@16.14.0))(react-dom@16.14.0(react@16.14.0))(react@16.14.0) gatsby-telemetry: 2.15.0 gatsby-worker: 0.6.0 @@ -23249,7 +23263,7 @@ snapshots: url-loader: 4.1.1(file-loader@6.2.0(webpack@5.90.3))(webpack@5.90.3) uuid: 3.4.0 v8-compile-cache: 2.4.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 webpack-dev-middleware: 4.3.0(webpack@5.90.3) webpack-merge: 5.9.0 webpack-stats-plugin: 1.1.3 @@ -23760,6 +23774,11 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + hogan.js@3.0.2: + dependencies: + mkdirp: 0.3.0 + nopt: 1.0.10 + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 @@ -23780,6 +23799,8 @@ snapshots: dependencies: depd: 2.0.0 + htm@3.1.1: {} + html-element-map@1.3.1: dependencies: array.prototype.filter: 1.0.3 @@ -24077,6 +24098,26 @@ snapshots: undeclared-identifiers: 1.1.3 xtend: 4.0.2 + instantsearch-ui-components@0.9.0: + dependencies: + '@babel/runtime': 7.23.9 + + instantsearch.js@4.75.3(algoliasearch@4.22.1): + dependencies: + '@algolia/events': 4.0.1 + '@types/dom-speech-recognition': 0.0.1 + '@types/google.maps': 3.58.1 + '@types/hogan.js': 3.0.5 + '@types/qs': 6.9.8 + algoliasearch: 4.22.1 + algoliasearch-helper: 3.22.5(algoliasearch@4.22.1) + hogan.js: 3.0.2 + htm: 3.1.1 + instantsearch-ui-components: 0.9.0 + preact: 10.24.3 + qs: 6.5.3 + search-insights: 2.17.2 + internal-slot@1.0.5: dependencies: get-intrinsic: 1.2.4 @@ -26315,7 +26356,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 webpack-sources: 1.4.3 minimalistic-assert@1.0.1: {} @@ -26355,6 +26396,8 @@ snapshots: mkdirp-classic@0.5.3: {} + mkdirp@0.3.0: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -26417,7 +26460,7 @@ snapshots: dependencies: loader-utils: 2.0.4 monaco-editor: 0.28.1 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 monaco-editor@0.28.1: {} @@ -26719,7 +26762,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 nwsapi@2.2.7: {} @@ -27298,7 +27341,7 @@ snapshots: postcss: 8.4.35 schema-utils: 3.3.0 semver: 7.6.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 postcss-loader@5.3.0(postcss@8.4.35)(webpack@5.90.3): dependencies: @@ -27306,7 +27349,7 @@ snapshots: klona: 2.0.6 postcss: 8.4.35 semver: 7.6.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 postcss-merge-longhand@5.1.7(postcss@8.4.35): dependencies: @@ -27459,6 +27502,8 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 + preact@10.24.3: {} + prebuild-install@7.1.1: dependencies: detect-libc: 2.0.2 @@ -27768,7 +27813,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 rc@1.2.8: dependencies: @@ -27803,7 +27848,7 @@ snapshots: shell-quote: 1.7.2 strip-ansi: 6.0.0 text-table: 0.2.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -27853,26 +27898,24 @@ snapshots: optionalDependencies: react-dom: 16.14.0(react@16.14.0) - react-instantsearch-core@6.40.4(algoliasearch@4.22.1)(react@16.14.0): + react-instantsearch-core@7.13.6(algoliasearch@4.22.1)(react@16.14.0): dependencies: '@babel/runtime': 7.23.9 algoliasearch: 4.22.1 - algoliasearch-helper: 3.14.0(algoliasearch@4.22.1) - prop-types: 15.8.1 + algoliasearch-helper: 3.22.5(algoliasearch@4.22.1) + instantsearch.js: 4.75.3(algoliasearch@4.22.1) react: 16.14.0 - react-fast-compare: 3.2.2 + use-sync-external-store: 1.2.2(react@16.14.0) - react-instantsearch-dom@6.40.4(algoliasearch@4.22.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0): + react-instantsearch@7.13.6(algoliasearch@4.22.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0): dependencies: '@babel/runtime': 7.23.9 algoliasearch: 4.22.1 - algoliasearch-helper: 3.14.0(algoliasearch@4.22.1) - classnames: 2.3.2 - prop-types: 15.8.1 + instantsearch-ui-components: 0.9.0 + instantsearch.js: 4.75.3(algoliasearch@4.22.1) react: 16.14.0 react-dom: 16.14.0(react@16.14.0) - react-fast-compare: 3.2.2 - react-instantsearch-core: 6.40.4(algoliasearch@4.22.1)(react@16.14.0) + react-instantsearch-core: 7.13.6(algoliasearch@4.22.1)(react@16.14.0) react-is@16.13.1: {} @@ -28530,6 +28573,8 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + search-insights@2.17.2: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -29309,7 +29354,7 @@ snapshots: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 style-to-object@0.3.0: dependencies: @@ -29450,7 +29495,7 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(webpack@5.90.3): + terser-webpack-plugin@5.3.10(webpack@5.90.3(webpack-cli@4.10.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 @@ -29459,6 +29504,15 @@ snapshots: terser: 5.28.1 webpack: 5.90.3(webpack-cli@4.10.0) + terser-webpack-plugin@5.3.10(webpack@5.90.3): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.28.1 + webpack: 5.90.3 + terser-webpack-plugin@5.3.9(webpack@5.90.3): dependencies: '@jridgewell/trace-mapping': 0.3.22 @@ -29466,7 +29520,7 @@ snapshots: schema-utils: 3.3.0 serialize-javascript: 6.0.1 terser: 5.20.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 terser@5.20.0: dependencies: @@ -30116,7 +30170,7 @@ snapshots: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 optionalDependencies: file-loader: 6.2.0(webpack@5.90.3) @@ -30141,6 +30195,10 @@ snapshots: urlpattern-polyfill@10.0.0: {} + use-sync-external-store@1.2.2(react@16.14.0): + dependencies: + react: 16.14.0 + use@3.1.1: {} util-deprecate@1.0.2: {} @@ -30327,9 +30385,9 @@ snapshots: webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0)(webpack@5.90.3) - '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0) - '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0) + '@webpack-cli/configtest': 1.2.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3))(webpack@5.90.3(webpack-cli@4.10.0)) + '@webpack-cli/info': 1.5.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3)) + '@webpack-cli/serve': 1.7.0(webpack-cli@4.10.0(webpack-bundle-analyzer@4.10.1)(webpack@5.90.3)) colorette: 2.0.20 commander: 7.2.0 cross-spawn: 7.0.3 @@ -30350,7 +30408,7 @@ snapshots: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.3.0 - webpack: 5.90.3(webpack-cli@4.10.0) + webpack: 5.90.3 webpack-merge@5.9.0: dependencies: @@ -30372,6 +30430,37 @@ snapshots: transitivePeerDependencies: - supports-color + webpack@5.90.3: + dependencies: + '@types/eslint-scope': 3.7.5 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(webpack@5.90.3) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + webpack@5.90.3(webpack-cli@4.10.0): dependencies: '@types/eslint-scope': 3.7.5 @@ -30395,7 +30484,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(webpack@5.90.3(webpack-cli@4.10.0)) watchpack: 2.4.0 webpack-sources: 3.2.3 optionalDependencies: