From 9fe0754ca8ba468a619fe8efb166b50cdfb27d9a Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:48:02 +0200 Subject: [PATCH 001/198] package.json: update sharetribe-scripts v7.0.0 Note: v7 is just a bug fix (changing unintended async loading to synchronous) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 82c330ef5..6ec830a41 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "remark-rehype": "^8.1.0", "seedrandom": "^3.0.5", "sharetribe-flex-sdk": "^1.21.1", - "sharetribe-scripts": "6.0.2", + "sharetribe-scripts": "7.0.0", "sitemap": "^7.1.1", "smoothscroll-polyfill": "^0.4.0", "source-map-support": "^0.5.21", diff --git a/yarn.lock b/yarn.lock index 2d4424fff..1b845c9b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11821,10 +11821,10 @@ sharetribe-flex-sdk@^1.21.1: lodash "^4.17.10" transit-js "^0.8.861" -sharetribe-scripts@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/sharetribe-scripts/-/sharetribe-scripts-6.0.2.tgz#7589afb43a3259252ff2a7de4b1260753ded7bed" - integrity sha512-bfFYj+qOqaxSVtPwf0Fh82BqurCEU6RzlmMc/9VDQSP/yinuP+ud4Sgml963K1AQQNU5oBA5v0CiMbwXWopqcw== +sharetribe-scripts@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/sharetribe-scripts/-/sharetribe-scripts-7.0.0.tgz#07963af5a2ccc97c3d57150a25a78f35134fa477" + integrity sha512-0VKjVG8ty5wZj69MKUEzurscmqvH7LG9qu9Yq1VtlQCmxiKgpJZDaeBT5BNHcUf3NYfbk85BbTufDFZIL3tn5Q== dependencies: "@babel/core" "^7.16.0" "@babel/plugin-transform-runtime" "7.12.1" From b2eb73210c74d45b9163a63a0584811da409d945 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:21:16 +0200 Subject: [PATCH 002/198] Update react-testing-library and tests --- package.json | 3 +- src/app.test.js | 12 ++- .../AuthenticationPage.test.js | 14 ++-- .../ContactDetailsPage.test.js | 55 ++++++------ .../EditListingPage/EditListingPage.test.js | 83 +++++++++++-------- .../EditListingDeliveryForm.test.js | 13 +-- .../EditListingLocationForm.test.js | 52 ++++++++---- .../NoAccessPage/NoAccessPage.test.js | 58 +++++++------ .../NotFoundPage/NotFoundPage.test.js | 4 +- .../PasswordChangePage.test.js | 28 ++++--- .../PasswordRecoveryPage.test.js | 23 ++--- src/containers/ProfilePage/ProfilePage.js | 8 +- .../ProfilePage/ProfilePage.test.js | 47 +++++++---- .../ProfileSettingsPage.test.js | 8 +- .../TransactionPage/TransactionPage.test.js | 39 +++++---- yarn.lock | 58 ++++++------- 16 files changed, 288 insertions(+), 217 deletions(-) diff --git a/package.json b/package.json index 6ec830a41..98089cc34 100644 --- a/package.json +++ b/package.json @@ -68,8 +68,9 @@ "url": "^0.11.0" }, "devDependencies": { + "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^5.16.2", - "@testing-library/react": "^12.1.2", + "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^13.5.0", "bfj": "^7.0.2", "chalk": "^v4.1.2", diff --git a/src/app.test.js b/src/app.test.js index 1ad14efc8..086e1819a 100644 --- a/src/app.test.js +++ b/src/app.test.js @@ -1,5 +1,5 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; +import React, { act } from 'react'; +import ReactDOMClient from 'react-dom/client'; import { getHostedConfiguration } from './util/testHelpers'; import { ClientApp } from './app'; import configureStore from './store'; @@ -15,7 +15,7 @@ afterAll(() => { }); describe('Application - JSDOM environment', () => { - it('renders the LandingPage without crashing', () => { + it('renders the LandingPage without crashing', async () => { window.google = { maps: {} }; // LandingPage gets rendered and it calls hostedAsset > fetchPageAssets > sdk.assetByVersion @@ -32,7 +32,11 @@ describe('Application - JSDOM environment', () => { const fakeSdk = { assetByVersion: resolvePageAssetCall, assetByAlias: resolvePageAssetCall }; const store = configureStore({}, fakeSdk); const div = document.createElement('div'); - ReactDOM.render(, div); + const root = ReactDOMClient.createRoot(div); + + await act(async () => { + root.render(); + }); delete window.google; }); }); diff --git a/src/containers/AuthenticationPage/AuthenticationPage.test.js b/src/containers/AuthenticationPage/AuthenticationPage.test.js index 62980cf9d..e33a17f30 100644 --- a/src/containers/AuthenticationPage/AuthenticationPage.test.js +++ b/src/containers/AuthenticationPage/AuthenticationPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { renderWithProviders as render, testingLibrary } from '../../util/testHelpers'; @@ -41,13 +41,15 @@ describe('AuthenticationPage', () => { jest.clearAllMocks(); }); - it('has just email and password inputs in login tab if social logins are not enabled', () => { + it('has just email and password inputs in login tab if social logins are not enabled', async () => { // We want to make sure that during the test the env variables // for social logins are as we expect them to be process.env = Object.assign(process.env, { REACT_APP_FACEBOOK_APP_ID: '' }); process.env = Object.assign(process.env, { REACT_APP_GOOGLE_CLIENT_ID: '' }); - render(); + await act(async () => { + render(); + }); expect(screen.getByRole('textbox', { name: 'LoginForm.emailLabel' })).toBeInTheDocument(); expect(screen.getByLabelText('LoginForm.passwordLabel')).toBeInTheDocument(); @@ -74,8 +76,10 @@ describe('AuthenticationPage', () => { // First we can check that login button is in the document expect(screen.getByRole('button', { name: 'LoginForm.logIn' })).toBeInTheDocument(); - // User event for changing the tab - userEvent.click(screen.getByRole('link', { name: 'AuthenticationPage.signupLinkText' })); + await act(async () => { + // User event for changing the tab + userEvent.click(screen.getByRole('link', { name: 'AuthenticationPage.signupLinkText' })); + }); // Then we can check that login sign up button is in the document waitFor(() => diff --git a/src/containers/ContactDetailsPage/ContactDetailsPage.test.js b/src/containers/ContactDetailsPage/ContactDetailsPage.test.js index f45467015..22bcfab60 100644 --- a/src/containers/ContactDetailsPage/ContactDetailsPage.test.js +++ b/src/containers/ContactDetailsPage/ContactDetailsPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { createCurrentUser, fakeIntl } from '../../util/testData'; @@ -6,34 +6,32 @@ import { renderWithProviders as render, testingLibrary } from '../../util/testHe import { ContactDetailsPageComponent } from './ContactDetailsPage'; -const { screen, act, userEvent } = testingLibrary; +const { screen, userEvent } = testingLibrary; const noop = () => null; describe('ContactDetailsPageComponent', () => { - it('Check that newPassword input shows error and submit is enabled if form is filled', () => { - act(() => { - const tree = render( - - ); - }); + it('Check that newPassword input shows error and submit is enabled if form is filled', async () => { + render( + + ); const emailLabel = 'ContactDetailsForm.emailLabel'; const emailInput = screen.getByText(emailLabel); @@ -44,8 +42,11 @@ describe('ContactDetailsPageComponent', () => { const phoneLabel = 'ContactDetailsForm.phoneLabel'; const phoneInput = screen.getByText(phoneLabel); - userEvent.type(phoneInput, '+358555555555'); - phoneInput.blur(); + + await act(async () => { + userEvent.type(phoneInput, '+358555555555'); + phoneInput.blur(); + }); // Save button is enabled expect(screen.getByRole('button', { name: 'ContactDetailsForm.saveChanges' })).toBeEnabled(); diff --git a/src/containers/EditListingPage/EditListingPage.test.js b/src/containers/EditListingPage/EditListingPage.test.js index 7db8efa24..da3e7e8ce 100644 --- a/src/containers/EditListingPage/EditListingPage.test.js +++ b/src/containers/EditListingPage/EditListingPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { types as sdkTypes } from '../../util/sdkLoader'; @@ -1565,17 +1565,20 @@ describe('EditListingPage', () => { // mode: available, not-available expect(getByText('EditListingAvailabilityExceptionForm.available')).toBeInTheDocument(); expect(getByText('EditListingAvailabilityExceptionForm.notAvailable')).toBeInTheDocument(); - // date range picker - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') - ).toBeInTheDocument(); - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') - ).toBeInTheDocument(); - // submit button - expect( - getByRole('button', { name: 'EditListingAvailabilityExceptionForm.addException' }) - ).toBeInTheDocument(); + + // date range picker (code-splitted) + await waitFor(async () => { + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') + ).toBeInTheDocument(); + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') + ).toBeInTheDocument(); + // submit button + expect( + getByRole('button', { name: 'EditListingAvailabilityExceptionForm.addException' }) + ).toBeInTheDocument(); + }); }, 10000); it('Booking (day): edit flow on availability tab with seats', async () => { @@ -1968,17 +1971,20 @@ describe('EditListingPage', () => { // mode: available, not-available expect(getByText('EditListingAvailabilityExceptionForm.available')).toBeInTheDocument(); expect(getByText('EditListingAvailabilityExceptionForm.notAvailable')).toBeInTheDocument(); - // date range picker - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') - ).toBeInTheDocument(); - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') - ).toBeInTheDocument(); - // submit button - expect( - getByRole('button', { name: 'EditListingAvailabilityExceptionForm.addException' }) - ).toBeInTheDocument(); + + // date range picker (code-splitted) + await waitFor(async () => { + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') + ).toBeInTheDocument(); + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') + ).toBeInTheDocument(); + // submit button + expect( + getByRole('button', { name: 'EditListingAvailabilityExceptionForm.addException' }) + ).toBeInTheDocument(); + }); }, 10000); it('Booking (hour): edit flow on availability tab', async () => { @@ -2137,15 +2143,18 @@ describe('EditListingPage', () => { // mode: available, not-available expect(getByText('EditListingAvailabilityExceptionForm.available')).toBeInTheDocument(); expect(getByText('EditListingAvailabilityExceptionForm.notAvailable')).toBeInTheDocument(); - // time range pickers - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') - ).toBeInTheDocument(); - expect( - getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') - ).toBeInTheDocument(); - // TODO Testing date pickers needs more work + // time range pickers (code-splitted) + await waitFor(async () => { + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionStartDateLabel') + ).toBeInTheDocument(); + expect( + getByText('EditListingAvailabilityExceptionForm.exceptionEndDateLabel') + ).toBeInTheDocument(); + + // TODO Testing date pickers needs more work + }); // submit button expect( @@ -2612,7 +2621,7 @@ describe('EditListingPage', () => { }); describe('EditListingPageComponent', () => { - it('Check that there is correct wizard tabs', () => { + it('Check that there is correct wizard tabs', async () => { render( { const tabLabelPhotos = 'EditListingWizard.tabLabelPhotos'; expect(screen.queryByText(tabLabelPhotos)).not.toBeInTheDocument(); - userEvent.selectOptions( - screen.getByLabelText('EditListingDetailsForm.listingTypeLabel'), - 'product-selling' - ); + await act(async () => { + userEvent.selectOptions( + screen.getByLabelText('EditListingDetailsForm.listingTypeLabel'), + 'product-selling' + ); + }); // Tabs not in use const tabLabelLocation = 'EditListingWizard.tabLabelLocation'; diff --git a/src/containers/EditListingPage/EditListingWizard/EditListingDeliveryPanel/EditListingDeliveryForm.test.js b/src/containers/EditListingPage/EditListingWizard/EditListingDeliveryPanel/EditListingDeliveryForm.test.js index 706c7718f..cd9d1224b 100644 --- a/src/containers/EditListingPage/EditListingWizard/EditListingDeliveryPanel/EditListingDeliveryForm.test.js +++ b/src/containers/EditListingPage/EditListingWizard/EditListingDeliveryPanel/EditListingDeliveryForm.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { fakeIntl } from '../../../../util/testData'; @@ -6,12 +6,12 @@ import { renderWithProviders as render, testingLibrary } from '../../../../util/ import EditListingDeliveryForm from './EditListingDeliveryForm'; -const { screen, userEvent, fireEvent } = testingLibrary; +const { screen, userEvent } = testingLibrary; const noop = () => null; describe('EditListingDeliveryForm', () => { - it('Check that shipping fees can be given and submit button activates', () => { + it('Check that shipping fees can be given and submit button activates', async () => { const saveActionMsg = 'Save location'; render( { // Test that save button is disabled at first expect(screen.getByRole('button', { name: saveActionMsg })).toBeDisabled(); - // Add shipping price - fireEvent.click(screen.getByLabelText(/EditListingDeliveryForm.shippingLabel/i)); - + await act(async () => { + // Add shipping price + userEvent.click(screen.getByLabelText(/EditListingDeliveryForm.shippingLabel/i)); + }); const shippingOneItemLabel = 'EditListingDeliveryForm.shippingOneItemLabel'; const shippingAdditionalItemsLabel = 'EditListingDeliveryForm.shippingAdditionalItemsLabel'; userEvent.type(screen.getByRole('textbox', { name: shippingOneItemLabel }), '10'); diff --git a/src/containers/EditListingPage/EditListingWizard/EditListingLocationPanel/EditListingLocationForm.test.js b/src/containers/EditListingPage/EditListingWizard/EditListingLocationPanel/EditListingLocationForm.test.js index 38bf68789..e340d3455 100644 --- a/src/containers/EditListingPage/EditListingWizard/EditListingLocationPanel/EditListingLocationForm.test.js +++ b/src/containers/EditListingPage/EditListingWizard/EditListingLocationPanel/EditListingLocationForm.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { fakeIntl } from '../../../../util/testData'; @@ -10,21 +10,38 @@ const { screen, userEvent, fireEvent } = testingLibrary; const noop = () => null; +beforeAll(() => { + // Mock window.scroll - otherwise, Jest/JSDOM will print a not-implemented error. + window.mapboxgl = { accessToken: 'test' }; + window.mapboxSdk = () => ({ + geocoding: { + forwardGeocode: () => ({ + send: () => + Promise.resolve({ + body: { features: [] }, + }), + }), + }, + }); +}); + describe('EditListingDeliveryForm', () => { - it('Check that shipping fees can be given and submit button activates', () => { + it('Check that shipping fees can be given and submit button activates', async () => { const saveActionMsg = 'Save location'; - render( - - ); + await act(async () => { + render( + + ); + }); // Pickup fields const address = 'EditListingLocationForm.address'; @@ -36,8 +53,9 @@ describe('EditListingDeliveryForm', () => { // Test that save button is disabled at first expect(screen.getByRole('button', { name: saveActionMsg })).toBeDisabled(); - // TODO: this should be tested some other way (address is actually a LocationAutocompleteInput, which is code-splitted) - // userEvent.type(screen.getByRole('textbox', { name: address }), 'Erottajankatu 19, Helsinki'); - userEvent.type(screen.getByRole('textbox', { name: building }), 'B'); + await act(async () => { + userEvent.type(screen.getByTestId('location-search'), 'Erottajankatu 19, Helsinki'); + userEvent.type(screen.getByRole('textbox', { name: building }), 'B'); + }); }); }); diff --git a/src/containers/NoAccessPage/NoAccessPage.test.js b/src/containers/NoAccessPage/NoAccessPage.test.js index ffb8a336b..f68c27dcf 100644 --- a/src/containers/NoAccessPage/NoAccessPage.test.js +++ b/src/containers/NoAccessPage/NoAccessPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { fakeIntl } from '../../util/testData'; @@ -11,15 +11,16 @@ const { screen, userEvent } = testingLibrary; const noop = () => null; describe('NoAccessPageComponent', () => { - it('Check that /no-posting-rights has heading and content', () => { - render( - - ); - + it('Check that /no-posting-rights has heading and content', async () => { + await act(async () => { + render( + + ); + }); const postListingsHeading = 'NoAccessPage.postListings.heading'; const found = screen.getByText(postListingsHeading); expect(found).toBeInTheDocument(); @@ -28,14 +29,16 @@ describe('NoAccessPageComponent', () => { expect(found2).toBeInTheDocument(); }); - it('Check that /no-transaction-rights has heading and content', () => { - render( - - ); + it('Check that /no-transaction-rights has heading and content', async () => { + await act(async () => { + render( + + ); + }); const initiateTransactionsHeading = 'NoAccessPage.initiateTransactions.heading'; const found = screen.getByText(initiateTransactionsHeading); @@ -45,15 +48,16 @@ describe('NoAccessPageComponent', () => { expect(found2).toBeInTheDocument(); }); - it('Check that /no-asdf renders 404', () => { - render( - - ); - + it('Check that /no-asdf renders 404', async () => { + await act(async () => { + render( + + ); + }); const theNotFoundHeading = '404'; const found = screen.queryByText(theNotFoundHeading); expect(found).toBeInTheDocument(); diff --git a/src/containers/NotFoundPage/NotFoundPage.test.js b/src/containers/NotFoundPage/NotFoundPage.test.js index 9cba26f61..1544bbffc 100644 --- a/src/containers/NotFoundPage/NotFoundPage.test.js +++ b/src/containers/NotFoundPage/NotFoundPage.test.js @@ -24,7 +24,7 @@ const routeConfiguration = [ ]; describe('NotFoundPage', () => { - it('has placeholder for SearchForm when isKeywordSearch=true', () => { + it('has placeholder for SearchForm when isKeywordSearch=true', async () => { render( { /> ); const placeholder = 'NotFoundPage.SearchForm.placeholder'; - expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument(); + expect(await screen.findByPlaceholderText(placeholder)).toBeInTheDocument(); // TODO: when isKeywordSearch = false, the form uses LocationAutocompleteInput, which is code-splitted }); diff --git a/src/containers/PasswordChangePage/PasswordChangePage.test.js b/src/containers/PasswordChangePage/PasswordChangePage.test.js index 1eda4b83e..6964550e2 100644 --- a/src/containers/PasswordChangePage/PasswordChangePage.test.js +++ b/src/containers/PasswordChangePage/PasswordChangePage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { createCurrentUser, fakeIntl } from '../../util/testData'; @@ -11,7 +11,7 @@ const { screen, userEvent } = testingLibrary; const noop = () => null; describe('PasswordChangePageComponent', () => { - it('Check that newPassword input shows error and submit is enabled if form is filled', () => { + it('Check that newPassword input shows error and submit is enabled if form is filled', async () => { render( { ); const newPasswordLabel = 'PasswordChangeForm.newPasswordLabel'; - expect(screen.getByText(newPasswordLabel)).toBeInTheDocument(); + expect(await screen.findByText(newPasswordLabel)).toBeInTheDocument(); // Save button is disabled expect(screen.getByRole('button', { name: 'PasswordChangeForm.saveChanges' })).toBeDisabled(); // There's a too short password, there is error text visible const newPasswordInput = screen.getByLabelText(newPasswordLabel); - userEvent.type(newPasswordInput, 'short'); - newPasswordInput.blur(); + + await act(async () => { + userEvent.type(newPasswordInput, 'short'); + newPasswordInput.blur(); + }); const passwordTooShort = 'PasswordChangeForm.passwordTooShort'; expect(screen.getByText(passwordTooShort)).toBeInTheDocument(); - // There's a long enough password => there is no error text visible - userEvent.type(newPasswordInput, 'morethan8characters'); - newPasswordInput.blur(); + await act(async () => { + // There's a long enough password => there is no error text visible + userEvent.type(newPasswordInput, 'morethan8characters'); + newPasswordInput.blur(); + }); expect(screen.queryByText(passwordTooShort)).not.toBeInTheDocument(); - const passwordLabel = 'PasswordChangeForm.passwordLabel'; const passwordInput = screen.getByText(passwordLabel); expect(passwordInput).toBeInTheDocument(); - // Save button is enabled - userEvent.type(passwordInput, 'somepasswordasoldpassword'); + await act(async () => { + // Save button is enabled + userEvent.type(passwordInput, 'somepasswordasoldpassword'); + }); expect(screen.queryByText(passwordTooShort)).not.toBeInTheDocument(); expect(screen.getByRole('button', { name: 'PasswordChangeForm.saveChanges' })).toBeEnabled(); }); diff --git a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.test.js b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.test.js index b63f9e5b9..12d1e549c 100644 --- a/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.test.js +++ b/src/containers/PasswordRecoveryPage/PasswordRecoveryPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { fakeIntl } from '../../util/testData'; @@ -6,12 +6,12 @@ import { renderWithProviders as render, testingLibrary } from '../../util/testHe import { PasswordRecoveryPageComponent } from './PasswordRecoveryPage'; -const { screen, userEvent } = testingLibrary; +const { screen, userEvent, waitFor } = testingLibrary; const noop = () => null; describe('PasswordRecoveryPageComponent', () => { - it('Check that email input shows error and submit is enabled if form is filled', () => { + it('Check that email input shows error and submit is enabled if form is filled', async () => { render( { screen.getByRole('button', { name: 'PasswordRecoveryForm.sendInstructions' }) ).toBeDisabled(); - // There's a too short password, there is error text visible - userEvent.type(emailInput, 'foobar'); - emailInput.blur(); - + await act(async () => { + // There's a too short password, there is error text visible + userEvent.type(emailInput, 'foobar'); + emailInput.blur(); + }); const emailInvalid = 'PasswordRecoveryForm.emailInvalid'; expect(screen.getByText(emailInvalid)).toBeInTheDocument(); - // There's a valid email written to input => there is no error text visible - userEvent.type(emailInput, 'foo@bar.com'); - emailInput.blur(); + await act(async () => { + // There's a valid email written to input => there is no error text visible + userEvent.type(emailInput, '@bar.com'); + emailInput.blur(); + }); expect(screen.queryByText(emailInvalid)).not.toBeInTheDocument(); // Save button is enabled diff --git a/src/containers/ProfilePage/ProfilePage.js b/src/containers/ProfilePage/ProfilePage.js index d4a1a976b..b7ad77f0c 100644 --- a/src/containers/ProfilePage/ProfilePage.js +++ b/src/containers/ProfilePage/ProfilePage.js @@ -180,13 +180,13 @@ export const CustomUserFields = props => { <> {propsForCustomFields.map(customFieldProps => { - const { schemaType, ...fieldProps } = customFieldProps; + const { schemaType, key, ...fieldProps } = customFieldProps; return schemaType === SCHEMA_TYPE_MULTI_ENUM ? ( - + ) : schemaType === SCHEMA_TYPE_TEXT ? ( - + ) : schemaType === SCHEMA_TYPE_YOUTUBE ? ( - + ) : null; })} diff --git a/src/containers/ProfilePage/ProfilePage.test.js b/src/containers/ProfilePage/ProfilePage.test.js index 6c9830538..41e9223da 100644 --- a/src/containers/ProfilePage/ProfilePage.test.js +++ b/src/containers/ProfilePage/ProfilePage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { types as sdkTypes } from '../../util/sdkLoader'; @@ -126,21 +126,26 @@ describe('ProfilePage', () => { params: {}, }; - it('Check that user name and bio is shown correctly', () => { - render(, { - initialState: getInitialState(), - config, + it('Check that user name and bio is shown correctly', async () => { + await act(async () => { + render(, { + initialState: getInitialState(), + config, + }); }); expect(screen.getByText('ProfilePage.desktopHeading')).toBeInTheDocument(); expect(screen.getByText('I am a great cook!')).toBeInTheDocument(); }); - it('Check that custom user information is shown correctly', () => { - const { getByRole } = render(, { - initialState: getInitialState(), - config, + it('Check that custom user information is shown correctly', async () => { + let rendered = {}; + await act(async () => { + rendered = render(, { + initialState: getInitialState(), + config, + }); }); - + const { getByRole } = rendered; // Show custom fields correctly expect(getByRole('heading', { name: 'ProfilePage.detailsTitle' })).toBeInTheDocument(); expect(getByRole('heading', { name: 'Dietary preferences' })).toBeInTheDocument(); @@ -158,10 +163,12 @@ describe('ProfilePage', () => { expect(screen.queryByText('Not shown in profile')).toBeNull(); }); - it('Check that listing information is shown correctly', () => { - render(, { - initialState: getInitialState(), - config, + it('Check that listing information is shown correctly', async () => { + await act(async () => { + render(, { + initialState: getInitialState(), + config, + }); }); expect(screen.getByText('ProfilePage.listingsTitle')).toBeInTheDocument(); @@ -169,11 +176,15 @@ describe('ProfilePage', () => { expect(screen.getByText('$55.00')).toBeInTheDocument(); }); - it('Check that review information is shown correctly', () => { - const { getByRole } = render(, { - initialState: getInitialState(), - config, + it('Check that review information is shown correctly', async () => { + let rendered = {}; + await act(async () => { + rendered = render(, { + initialState: getInitialState(), + config, + }); }); + const { getByRole } = rendered; expect( getByRole('heading', { name: 'ProfilePage.reviewsFromMyCustomersTitle' }) diff --git a/src/containers/ProfileSettingsPage/ProfileSettingsPage.test.js b/src/containers/ProfileSettingsPage/ProfileSettingsPage.test.js index 8e8a848b4..3464b0eb9 100644 --- a/src/containers/ProfileSettingsPage/ProfileSettingsPage.test.js +++ b/src/containers/ProfileSettingsPage/ProfileSettingsPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import { createCurrentUser, fakeIntl } from '../../util/testData'; @@ -11,7 +11,7 @@ const { screen } = testingLibrary; const noop = () => null; describe('ProfileSettingsPage', () => { - it('Check that there is a link to ProfilePage', () => { + it('Check that there is a link to ProfilePage', async () => { const props = { authInProgress: false, currentUser: createCurrentUser('userId'), @@ -32,7 +32,9 @@ describe('ProfileSettingsPage', () => { intl: fakeIntl, }; - render(); + await act(async () => { + render(); + }); const viewProfileLink = 'ProfileSettingsPage.viewProfileLink'; expect(screen.getByText(viewProfileLink)).toBeInTheDocument(); diff --git a/src/containers/TransactionPage/TransactionPage.test.js b/src/containers/TransactionPage/TransactionPage.test.js index 1968e1d06..cda822dee 100644 --- a/src/containers/TransactionPage/TransactionPage.test.js +++ b/src/containers/TransactionPage/TransactionPage.test.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { act } from 'react'; import '@testing-library/jest-dom'; import Decimal from 'decimal.js'; @@ -159,7 +159,7 @@ describe('TransactionPage', () => { }; }); - test.each(purchases)('check purchase: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(purchases)('check purchase: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_PROVIDER; const stateData = getStateData( @@ -186,8 +186,9 @@ describe('TransactionPage', () => { id: tx.id?.uuid, }, }; - - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const providerTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; @@ -298,7 +299,7 @@ describe('TransactionPage', () => { }; }); - test.each(purchases)('check purchase: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(purchases)('check purchase: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_CUSTOMER; const isInquiry = tr === 'transition/inquire'; @@ -327,7 +328,9 @@ describe('TransactionPage', () => { }, }; - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const providerTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; @@ -456,7 +459,7 @@ describe('TransactionPage', () => { }; }); - test.each(bookings)('check booking: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(bookings)('check booking: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_PROVIDER; const isInquiry = tr === 'transition/inquire'; @@ -485,7 +488,9 @@ describe('TransactionPage', () => { }, }; - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const txTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; @@ -624,7 +629,7 @@ describe('TransactionPage', () => { }; }); - test.each(bookings)('check booking: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(bookings)('check booking: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_CUSTOMER; const isInquiry = tr === 'transition/inquire'; @@ -653,7 +658,9 @@ describe('TransactionPage', () => { }, }; - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const txTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; @@ -788,7 +795,7 @@ describe('TransactionPage', () => { }; }); - test.each(bookings)('check booking: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(bookings)('check booking: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_PROVIDER; const isInquiry = tr === 'transition/inquire'; @@ -817,7 +824,9 @@ describe('TransactionPage', () => { }, }; - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const txTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; @@ -955,7 +964,7 @@ describe('TransactionPage', () => { }; }); - test.each(bookings)('check purchase: $tr', ({ tr, tx, isReversal, isReceived }) => { + test.each(bookings)('check purchase: $tr', async ({ tr, tx, isReversal, isReceived }) => { const transactionRole = TX_TRANSITION_ACTOR_CUSTOMER; const isInquiry = tr === 'transition/inquire'; @@ -984,7 +993,9 @@ describe('TransactionPage', () => { }, }; - render(); + await act(async () => { + render(); + }); const state = stateData.processState; const txTitle = `TransactionPage.${processName}.${transactionRole}.${state}.title`; diff --git a/yarn.lock b/yarn.lock index 1b845c9b3..b384254a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3299,18 +3299,18 @@ "@svgr/plugin-svgo" "^5.5.0" loader-utils "^2.0.0" -"@testing-library/dom@^8.0.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6" - integrity sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA== +"@testing-library/dom@^10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" + integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^5.0.1" - aria-query "^5.0.0" + aria-query "5.3.0" chalk "^4.1.0" dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" + lz-string "^1.5.0" pretty-format "^27.0.2" "@testing-library/jest-dom@^5.16.2": @@ -3328,14 +3328,12 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^12.1.2": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== +"@testing-library/react@^16.0.1": + version "16.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.0.1.tgz#29c0ee878d672703f5e7579f239005e4e0faa875" + integrity sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" "@testing-library/user-event@^13.5.0": version "13.5.0" @@ -3670,13 +3668,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@<18.0.0": - version "17.0.19" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.19.tgz#36feef3aa35d045cacd5ed60fe0eef5272f19492" - integrity sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ== - dependencies: - "@types/react" "^17" - "@types/react-redux@^7.1.20": version "7.1.20" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" @@ -3704,15 +3695,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^17": - version "17.0.53" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.53.tgz#10d4d5999b8af3d6bc6a9369d7eb953da82442ab" - integrity sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -4291,6 +4273,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -5739,6 +5728,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -8979,10 +8973,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== magic-string@^0.25.0, magic-string@^0.25.7: version "0.25.7" From 0c813150d6d95e51ae7fa973bb94410cb72103ae Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:22:32 +0200 Subject: [PATCH 003/198] react-final-form-arrays: update to v3.1.4 --- package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 98089cc34..40e6515c5 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "react-final-form": "6.5.9", - "react-final-form-arrays": "3.1.3", + "react-final-form-arrays": "3.1.4", "react-helmet-async": "^1.3.0", "react-image-gallery": "1.2.8", "react-intl": "^5.25.1", diff --git a/yarn.lock b/yarn.lock index b384254a8..67c7af4c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1986,13 +1986,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.12.1": - version "7.15.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" - integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.12.13", "@babel/runtime@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" @@ -2021,6 +2014,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.19.4": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.21.0": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" @@ -10964,12 +10964,12 @@ react-fast-compare@^3.2.0: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== -react-final-form-arrays@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/react-final-form-arrays/-/react-final-form-arrays-3.1.3.tgz#d3594c500495a4cf5e437070ada989da9624bba2" - integrity sha512-dzBiLfbr9l1YRExARBpJ8uA/djBenCvFrbrsXjd362joDl3vT+WhmMKKr6HDQMJffjA8T4gZ3n5+G9M59yZfuQ== +react-final-form-arrays@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/react-final-form-arrays/-/react-final-form-arrays-3.1.4.tgz#2744941d8fd200fc648481022e515588f60bbac3" + integrity sha512-siVFAolUAe29rMR6u8VwepoysUcUdh6MLV2OWnCtKpsPRUdT9VUgECjAPaVMAH2GROZNiVB9On1H9MMrm9gdpg== dependencies: - "@babel/runtime" "^7.12.1" + "@babel/runtime" "^7.19.4" react-final-form@6.5.9: version "6.5.9" From d061603beaafed1b5a16de635b4c3d9f32348a5a Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:25:01 +0200 Subject: [PATCH 004/198] Update final-form and final-form-arrays and patch for final-form The patch is related to bug in Safari. Bug: Cannot read property 'active' of undefined https://github.com/final-form/final-form/issues/186#issuecomment-1779109218 --- package.json | 4 ++-- ...rm+4.20.7.patch => final-form+4.20.10.patch} | 17 ++++++++--------- yarn.lock | 16 ++++++++-------- 3 files changed, 18 insertions(+), 19 deletions(-) rename patches/{final-form+4.20.7.patch => final-form+4.20.10.patch} (75%) diff --git a/package.json b/package.json index 40e6515c5..60e7a692d 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,8 @@ "dotenv-expand": "^5.1.0", "express": "^4.19.2", "express-enforces-ssl": "^1.1.0", - "final-form": "4.20.7", - "final-form-arrays": "3.0.2", + "final-form": "4.20.10", + "final-form-arrays": "3.1.0", "full-icu": "^1.4.0", "helmet": "^7.1.0", "jose": "5.2.0", diff --git a/patches/final-form+4.20.7.patch b/patches/final-form+4.20.10.patch similarity index 75% rename from patches/final-form+4.20.7.patch rename to patches/final-form+4.20.10.patch index 3cdb1fd9e..207037656 100644 --- a/patches/final-form+4.20.7.patch +++ b/patches/final-form+4.20.10.patch @@ -1,8 +1,8 @@ diff --git a/node_modules/final-form/dist/final-form.es.js b/node_modules/final-form/dist/final-form.es.js -index a1fa14f..72011ef 100644 +index e31d7f3..0757644 100644 --- a/node_modules/final-form/dist/final-form.es.js +++ b/node_modules/final-form/dist/final-form.es.js -@@ -1,6 +1,17 @@ +@@ -1,6 +1,16 @@ -import _extends from '@babel/runtime/helpers/esm/extends'; import _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose'; @@ -10,14 +10,13 @@ index a1fa14f..72011ef 100644 + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { -+ if (Object.prototype.hasOwnProperty.call(source, key)) { -+ target[key] = source[key]; -+ } -+ } ++ if (Object.prototype.hasOwnProperty.call(source, key)) { ++ target[key] = source[key]; ++ } ++ } + } + return target; -+}; -+ ++} // + var charCodeOfDot = ".".charCodeAt(0); - var reEscapeChar = /\\(\\)?/g; diff --git a/yarn.lock b/yarn.lock index 67c7af4c6..cc85d61a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6729,15 +6729,15 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= -final-form-arrays@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/final-form-arrays/-/final-form-arrays-3.0.2.tgz#9f3bef778dec61432357744eb6f3abef7e7f3847" - integrity sha512-TfO8aZNz3RrsZCDx8GHMQcyztDNpGxSSi9w4wpSNKlmv2PfFWVVM8P7Yj5tj4n0OWax+x5YwTLhT5BnqSlCi+w== +final-form-arrays@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/final-form-arrays/-/final-form-arrays-3.1.0.tgz#8bdace2fccedd61f3cbd032ae429813ae5ea37af" + integrity sha512-TWBvun+AopgBLw9zfTFHBllnKMVNEwCEyDawphPuBGGqNsuhGzhT7yewHys64KFFwzIs6KEteGLpKOwvTQEscQ== -final-form@4.20.7: - version "4.20.7" - resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.7.tgz#e7e2eb5fd952951d4fe6153d46043da2d68b207e" - integrity sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg== +final-form@4.20.10: + version "4.20.10" + resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.20.10.tgz#1a484be6e9a91989121c054dcbd6f48bad051ecc" + integrity sha512-TL48Pi1oNHeMOHrKv1bCJUrWZDcD3DIG6AGYVNOnyZPr7Bd/pStN0pL+lfzF5BNoj/FclaoiaLenk4XUIFVYng== dependencies: "@babel/runtime" "^7.10.0" From 5b84c8fe64766970d6a7757c42f9e891d0e9ca83 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:27:00 +0200 Subject: [PATCH 005/198] React Intl: update to v6.8.4 We did not update to the newest (v7.0.1), because there is a bug with fast-memoize: https://github.com/formatjs/formatjs/issues/4725 --- package.json | 2 +- yarn.lock | 224 ++++++++++++++++++++++++++------------------------- 2 files changed, 117 insertions(+), 109 deletions(-) diff --git a/package.json b/package.json index 60e7a692d..a425c714f 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "react-final-form-arrays": "3.1.4", "react-helmet-async": "^1.3.0", "react-image-gallery": "1.2.8", - "react-intl": "^5.25.1", + "react-intl": "6.8.4", "react-moment-proptypes": "^1.8.1", "react-redux": "^7.2.8", "react-router-dom": "^5.3.2", diff --git a/yarn.lock b/yarn.lock index cc85d61a0..55a684ce8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2257,75 +2257,76 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@formatjs/ecma402-abstract@1.11.4": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda" - integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== - dependencies: - "@formatjs/intl-localematcher" "0.2.25" - tslib "^2.1.0" - -"@formatjs/fast-memoize@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21" - integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg== - dependencies: - tslib "^2.1.0" - -"@formatjs/icu-messageformat-parser@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d" - integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/icu-skeleton-parser" "1.3.6" - tslib "^2.1.0" - -"@formatjs/icu-skeleton-parser@1.3.6": - version "1.3.6" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964" - integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - tslib "^2.1.0" - -"@formatjs/intl-displaynames@5.4.3": - version "5.4.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz#e468586694350c722c7efab1a31fcde68aeaed8b" - integrity sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/intl-localematcher" "0.2.25" - tslib "^2.1.0" - -"@formatjs/intl-listformat@6.5.3": - version "6.5.3" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz#f29da613a8062dc3e4e3d847ba890c3ea745f051" - integrity sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/intl-localematcher" "0.2.25" - tslib "^2.1.0" - -"@formatjs/intl-localematcher@0.2.25": - version "0.2.25" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a" - integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA== +"@formatjs/ecma402-abstract@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.1.tgz#2e62bc5c22b0e6a5e13bfec6aac15d3d403e1065" + integrity sha512-O4ywpkdJybrjFc9zyL8qK5aklleIAi5O4nYhBVJaOFtCkNrnU+lKFeJOFC48zpsZQmR8Aok2V79hGpHnzbmFpg== dependencies: - tslib "^2.1.0" + "@formatjs/fast-memoize" "2.2.2" + "@formatjs/intl-localematcher" "0.5.6" + tslib "2" -"@formatjs/intl@2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.2.1.tgz#6daf4dabed055b17f467f0aa1bc073a626bc9189" - integrity sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/fast-memoize" "1.2.1" - "@formatjs/icu-messageformat-parser" "2.1.0" - "@formatjs/intl-displaynames" "5.4.3" - "@formatjs/intl-listformat" "6.5.3" - intl-messageformat "9.13.0" - tslib "^2.1.0" +"@formatjs/fast-memoize@2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.2.tgz#2409ec10f5f7d6c65f4c04e6c2d6cc56fa1e4cef" + integrity sha512-mzxZcS0g1pOzwZTslJOBTmLzDXseMLLvnh25ymRilCm8QLMObsQ7x/rj9GNrH0iUhZMlFisVOD6J1n6WQqpKPQ== + dependencies: + tslib "2" + +"@formatjs/icu-messageformat-parser@2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.1.tgz#f127c6a8196446c7d842c08b1230f10cf27a3dc3" + integrity sha512-7AYk4tjnLi5wBkxst2w7qFj38JLMJoqzj7BhdEl7oTlsWMlqwgx4p9oMmmvpXWTSDGNwOKBRc1SfwMh5MOHeNg== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/icu-skeleton-parser" "1.8.5" + tslib "2" + +"@formatjs/icu-skeleton-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.5.tgz#c25355778b9ea49bb0dcd85af727a375b9fcea62" + integrity sha512-zRZ/e3B5qY2+JCLs7puTzWS1Jb+t/K+8Jur/gEZpA2EjWeLDE17nsx8thyo9P48Mno7UmafnPupV2NCJXX17Dg== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + tslib "2" + +"@formatjs/intl-displaynames@6.8.1": + version "6.8.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.8.1.tgz#9cb16ecdd08410c884f0edf9057abb23ef842a86" + integrity sha512-nyWfJk4BZ1+GzLq9a40BgVPSRpBkRAVzrSpql+92i0i+lX11m9eS1trSRf/h3j/XcQ+h1h+ntA4Ra4jETK7nNg== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/intl-localematcher" "0.5.6" + tslib "2" + +"@formatjs/intl-listformat@7.7.1": + version "7.7.1" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.7.1.tgz#267b7aff8ad3bf28d6608caab5dad26346a7b07c" + integrity sha512-bjBxWaUhYAbJFUlFSMWZGn3r2mglXwk+BLyGRu8dY8Q83ZPsqmmVQzjQKENHE3lV6eoQGHT2oZHxUaVndJlk6Q== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/intl-localematcher" "0.5.6" + tslib "2" + +"@formatjs/intl-localematcher@0.5.6": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.6.tgz#cd0cd99483673d3196a15b4e2c924cfda7f002f8" + integrity sha512-roz1+Ba5e23AHX6KUAWmLEyTRZegM5YDuxuvkHCyK3RJddf/UXB2f+s7pOMm9ktfPGla0g+mQXOn5vsuYirnaA== + dependencies: + tslib "2" + +"@formatjs/intl@2.10.11": + version "2.10.11" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.11.tgz#f63c62cc540709b35d080188838b3dbb262f47ca" + integrity sha512-FNLZjzE1QRlv1Wf0oinnM97AbvZU1zQnQMHI0Oza2F7PxzrPf6bYFRs0ugapq/O4FrvNwDt9F9nyRNwsMM118g== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/fast-memoize" "2.2.2" + "@formatjs/icu-messageformat-parser" "2.9.1" + "@formatjs/intl-displaynames" "6.8.1" + "@formatjs/intl-listformat" "7.7.1" + intl-messageformat "10.7.3" + tslib "2" "@humanwhocodes/config-array@^0.9.2": version "0.9.5" @@ -3507,7 +3508,15 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1": +"@types/hoist-non-react-statics@3": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/hoist-non-react-statics@^3.3.0": version "3.3.1" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== @@ -3686,13 +3695,12 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/react@16 || 17 || 18": - version "18.0.9" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.9.tgz#d6712a38bd6cd83469603e7359511126f122e878" - integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== +"@types/react@^18.3.11": + version "18.3.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" + integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -3714,11 +3722,6 @@ dependencies: "@types/node" "*" -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -7270,6 +7273,13 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^0.4.0" +hoist-non-react-statics@3, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" @@ -7277,13 +7287,6 @@ hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - hoopy@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" @@ -7597,15 +7600,15 @@ internal-slot@^1.0.4: has "^1.0.3" side-channel "^1.0.4" -intl-messageformat@9.13.0: - version "9.13.0" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468" - integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw== +intl-messageformat@10.7.3: + version "10.7.3" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.3.tgz#a5cbc886f1db4b6324e6bfc4fd8f91a3e3e37c31" + integrity sha512-AAo/3oyh7ROfPhDuh7DxTTydh97OC+lv7h1Eq5LuHWuLsUMKOhtzTYuyXlUReuwZ9vANDHo4CS1bGRrn7TZRtg== dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/fast-memoize" "1.2.1" - "@formatjs/icu-messageformat-parser" "2.1.0" - tslib "^2.1.0" + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/fast-memoize" "2.2.2" + "@formatjs/icu-messageformat-parser" "2.9.1" + tslib "2" invariant@^2.2.4: version "2.2.4" @@ -10994,21 +10997,21 @@ react-image-gallery@1.2.8: resolved "https://registry.yarnpkg.com/react-image-gallery/-/react-image-gallery-1.2.8.tgz#8f41b0ade1c115a4f34621771c182af33d2d9a62" integrity sha512-7KbWcWChUMHRGyJHA/eH3injWF9/2WTlQXjV6fym1DqwrINSVIh1hLiqmujh/XANstW+osqSu5WFKKPy2F2gbA== -react-intl@^5.25.1: - version "5.25.1" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-5.25.1.tgz#68a73aefc485c9bf70062381ae7f6f4791680879" - integrity sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg== - dependencies: - "@formatjs/ecma402-abstract" "1.11.4" - "@formatjs/icu-messageformat-parser" "2.1.0" - "@formatjs/intl" "2.2.1" - "@formatjs/intl-displaynames" "5.4.3" - "@formatjs/intl-listformat" "6.5.3" - "@types/hoist-non-react-statics" "^3.3.1" - "@types/react" "16 || 17 || 18" - hoist-non-react-statics "^3.3.2" - intl-messageformat "9.13.0" - tslib "^2.1.0" +react-intl@6.8.4: + version "6.8.4" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.8.4.tgz#e39b6a71bbce5db90460abba4869c9f58b38fc1e" + integrity sha512-UKYrCIztyvSiZCpvHjDwAHlXT735fDioABVP+uhRAOhDSBS9NQ2vVbxiUikvVEBdr2b0cTe1tUfOfvhbmSPi/A== + dependencies: + "@formatjs/ecma402-abstract" "2.2.1" + "@formatjs/icu-messageformat-parser" "2.9.1" + "@formatjs/intl" "2.10.11" + "@formatjs/intl-displaynames" "6.8.1" + "@formatjs/intl-listformat" "7.7.1" + "@types/hoist-non-react-statics" "3" + "@types/react" "^18.3.11" + hoist-non-react-statics "3" + intl-messageformat "10.7.3" + tslib "2" react-is@^16.12.0, react-is@^16.13.1: version "16.13.1" @@ -12706,6 +12709,11 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" From 2f6036a9c751ab832334a5a7effb19f6f0ae6130 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:28:18 +0200 Subject: [PATCH 006/198] Remove react-with-direction dep: that should have been removed with react-dates --- package.json | 1 - yarn.lock | 92 +--------------------------------------------------- 2 files changed, 1 insertion(+), 92 deletions(-) diff --git a/package.json b/package.json index a425c714f..10a1bef2d 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "react-moment-proptypes": "^1.8.1", "react-redux": "^7.2.8", "react-router-dom": "^5.3.2", - "react-with-direction": "^1.4.0", "redux": "^4.2.0", "redux-thunk": "^2.4.1", "rehype-react": "^6.2.1", diff --git a/yarn.lock b/yarn.lock index 55a684ce8..68738a574 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4128,21 +4128,6 @@ agent-base@6: dependencies: debug "4" -airbnb-prop-types@^2.16.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" - integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== - dependencies: - array.prototype.find "^2.1.1" - function.prototype.name "^1.1.2" - is-regex "^1.1.0" - object-is "^1.1.2" - object.assign "^4.1.0" - object.entries "^1.1.2" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.13.1" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -4333,15 +4318,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.find@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.2.tgz#6abbd0c2573925d8094f7d23112306af8c16d534" - integrity sha512-00S1O4ewO95OmmJW7EesWfQlrCrLEL8kZ40w3+GkLX2yTt0m2ggcePPa2uHPJ9KUmJvwRq+lCV9bD8Yim23x/Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - array.prototype.flat@^1.2.5: version "1.3.0" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" @@ -4720,11 +4696,6 @@ braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brcast@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-2.0.2.tgz#2db16de44140e418dc37fab10beec0369e78dcef" - integrity sha512-Tfn5JSE7hrUlFcOoaLzVvkbgIemIorMIyoMr3TgvszWW7jFt2C9PdeMLtysYD9RU0MmU17b69+XJG1eRY2OBRg== - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" @@ -5667,11 +5638,6 @@ deep-is@^0.1.3, deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -5790,11 +5756,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -direction@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" @@ -6946,15 +6907,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" - function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -6970,11 +6922,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" - integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== - functions-have-names@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" @@ -9462,7 +9409,7 @@ object-inspect@^1.8.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== -object-is@^1.1.2, object-is@^1.1.5: +object-is@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== @@ -9515,15 +9462,6 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" - object.entries@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" @@ -10751,15 +10689,6 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -11096,20 +11025,6 @@ react-router@5.3.2: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-with-direction@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/react-with-direction/-/react-with-direction-1.4.0.tgz#ebdf64d685d0650ce966e872e6431ad5a2485444" - integrity sha512-ybHNPiAmaJpoWwugwqry9Hd1Irl2hnNXlo/2SXQBwbLn/jGMauMS2y9jw+ydyX5V9ICryCqObNSthNt5R94xpg== - dependencies: - airbnb-prop-types "^2.16.0" - brcast "^2.0.2" - deepmerge "^1.5.2" - direction "^1.0.4" - hoist-non-react-statics "^3.3.2" - object.assign "^4.1.2" - object.values "^1.1.5" - prop-types "^15.7.2" - react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -11207,11 +11122,6 @@ redux@^4.2.0: dependencies: "@babel/runtime" "^7.9.2" -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - regenerate-unicode-properties@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" From a6edfdcdf984c14468d929c40583181a1f819f07 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:29:32 +0200 Subject: [PATCH 007/198] react-router-dom: update to v5.3.4 --- package.json | 2 +- yarn.lock | 39 +++++++++------------------------------ 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index 10a1bef2d..3d162a697 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "react-intl": "6.8.4", "react-moment-proptypes": "^1.8.1", "react-redux": "^7.2.8", - "react-router-dom": "^5.3.2", + "react-router-dom": "^5.3.4", "redux": "^4.2.0", "redux-thunk": "^2.4.1", "rehype-react": "^6.2.1", diff --git a/yarn.lock b/yarn.lock index 68738a574..9ff1e4721 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2028,13 +2028,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" - integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== - dependencies: - regenerator-runtime "^0.13.2" - "@babel/template@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" @@ -9145,14 +9138,6 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-create-react-context@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040" - integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA== - dependencies: - "@babel/runtime" "^7.5.5" - tiny-warning "^1.0.3" - mini-css-extract-plugin@^2.4.5: version "2.6.1" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" @@ -10996,29 +10981,28 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== -react-router-dom@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.2.tgz#93a82c95732963d137c02b3aee0505956baeb69e" - integrity sha512-j8sAq4YdWsrkM2DfDX26GnjtDKWUSd65LzHyBz8NcgFcK0ct7oTvYlwhOr532xpXsYP1HONq6QqUGA7GhbAY5w== +react-router-dom@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.3.2" + react-router "5.3.4" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.2.tgz#87614394781e75cc6aa3b61cdfd147a1361cd890" - integrity sha512-GlsSUckZ4JthgsW5lV9oSCs5CoQ7q0t0Ump/Y5YQ8qhiS+WjaAhaoJhc7otpZW9eVhO6N06vYPt40SpEzuuZeg== +react-router@5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" hoist-non-react-statics "^3.1.0" loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" path-to-regexp "^1.7.0" prop-types "^15.6.2" react-is "^16.6.0" @@ -12508,11 +12492,6 @@ tiny-warning@^1.0.0: resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.2.tgz#1dfae771ee1a04396bdfde27a3adcebc6b648b28" integrity sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q== -tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" From af85b9268e8ab85ae5c4d18d913e71d38afb3d58 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:31:29 +0200 Subject: [PATCH 008/198] react-redux: update from v7.2.8 to v8.1.2 --- package.json | 2 +- yarn.lock | 74 +++++++++++++++++++--------------------------------- 2 files changed, 28 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 3d162a697..823a480ac 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "react-image-gallery": "1.2.8", "react-intl": "6.8.4", "react-moment-proptypes": "^1.8.1", - "react-redux": "^7.2.8", + "react-redux": "^8.1.2", "react-router-dom": "^5.3.4", "redux": "^4.2.0", "redux-thunk": "^2.4.1", diff --git a/yarn.lock b/yarn.lock index 9ff1e4721..11fee9152 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1986,6 +1986,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.12.1", "@babel/runtime@^7.19.4": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.12.13", "@babel/runtime@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" @@ -2014,13 +2021,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.19.4": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.21.0": version "7.23.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.8.tgz#8ee6fe1ac47add7122902f257b8ddf55c898f650" @@ -3501,7 +3501,7 @@ dependencies: "@types/node" "*" -"@types/hoist-non-react-statics@3": +"@types/hoist-non-react-statics@3", "@types/hoist-non-react-statics@^3.3.1": version "3.3.5" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== @@ -3509,14 +3509,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -3670,16 +3662,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-redux@^7.1.20": - version "7.1.20" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df" - integrity sha512-q42es4c8iIeTgcnB+yJgRTTzftv3eYYvCZOh1Ckn2eX/3o5TdsQYKUWpLoLuGlcY/p+VAhV9IOEZJcWk/vfkXw== - dependencies: - "@types/hoist-non-react-statics" "^3.3.0" - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - redux "^4.0.0" - "@types/react@*": version "16.9.2" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" @@ -3764,6 +3746,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@types/ws@^8.5.1": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" @@ -10947,11 +10934,6 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-is@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" @@ -10964,17 +10946,17 @@ react-moment-proptypes@^1.8.1: dependencies: moment ">=1.6.0" -react-redux@^7.2.8: - version "7.2.8" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.8.tgz#a894068315e65de5b1b68899f9c6ee0923dd28de" - integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw== +react-redux@^8.1.2: + version "8.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" + integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== dependencies: - "@babel/runtime" "^7.15.4" - "@types/react-redux" "^7.1.20" + "@babel/runtime" "^7.12.1" + "@types/hoist-non-react-statics" "^3.3.1" + "@types/use-sync-external-store" "^0.0.3" hoist-non-react-statics "^3.3.2" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^17.0.2" + react-is "^18.0.0" + use-sync-external-store "^1.0.0" react-refresh@^0.11.0: version "0.11.0" @@ -11092,13 +11074,6 @@ redux-thunk@^2.4.1: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== -redux@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" - integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== - dependencies: - "@babel/runtime" "^7.9.2" - redux@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" @@ -12915,6 +12890,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-sync-external-store@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" From 2df65f32529ec08554c57d74f268e8ff8db5598c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:33:07 +0200 Subject: [PATCH 009/198] redux: update from v4.2.0 to v4.2.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 823a480ac..bb227d294 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "react-moment-proptypes": "^1.8.1", "react-redux": "^8.1.2", "react-router-dom": "^5.3.4", - "redux": "^4.2.0", + "redux": "^4.2.1", "redux-thunk": "^2.4.1", "rehype-react": "^6.2.1", "rehype-sanitize": "^4.0.0", diff --git a/yarn.lock b/yarn.lock index 11fee9152..126897fb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11074,10 +11074,10 @@ redux-thunk@^2.4.1: resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== -redux@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13" - integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA== +redux@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== dependencies: "@babel/runtime" "^7.9.2" From 90eccf83f7cadf1a54753bd963ec2e887d25cbbf Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:34:19 +0200 Subject: [PATCH 010/198] redux-thunk: update from v4.2.1 to v4.2.2 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index bb227d294..3c93cfe96 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "react-redux": "^8.1.2", "react-router-dom": "^5.3.4", "redux": "^4.2.1", - "redux-thunk": "^2.4.1", + "redux-thunk": "^2.4.2", "rehype-react": "^6.2.1", "rehype-sanitize": "^4.0.0", "remark-parse": "^9.0.0", diff --git a/yarn.lock b/yarn.lock index 126897fb9..560ec9e54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11069,10 +11069,10 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redux-thunk@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714" - integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q== +redux-thunk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" + integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== redux@^4.2.1: version "4.2.1" From 2d95aed34d62c07cce48f75da64b5a12ea61708b Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:35:23 +0200 Subject: [PATCH 011/198] react-image-gallery: update from v1.2.8 to v1.3.0 --- package.json | 2 +- .../ListingImageGallery/image-gallery.css | 352 ++++++++++-------- yarn.lock | 8 +- 3 files changed, 203 insertions(+), 159 deletions(-) diff --git a/package.json b/package.json index 3c93cfe96..c11b99f02 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "react-final-form": "6.5.9", "react-final-form-arrays": "3.1.4", "react-helmet-async": "^1.3.0", - "react-image-gallery": "1.2.8", + "react-image-gallery": "1.3.0", "react-intl": "6.8.4", "react-moment-proptypes": "^1.8.1", "react-redux": "^8.1.2", diff --git a/src/containers/ListingPage/ListingImageGallery/image-gallery.css b/src/containers/ListingPage/ListingImageGallery/image-gallery.css index 29bb08def..935d9c5ce 100644 --- a/src/containers/ListingPage/ListingImageGallery/image-gallery.css +++ b/src/containers/ListingPage/ListingImageGallery/image-gallery.css @@ -1,6 +1,7 @@ +/* This file is copied from node_modules/react-image-gallery/styles/css/image-gallery.css (v1.3.0) */ .image-gallery-icon { color: #fff; - transition: all 0.3s ease-out; + transition: all .3s ease-out; appearance: none; background-color: transparent; border: 0; @@ -8,97 +9,106 @@ outline: none; position: absolute; z-index: 4; - filter: drop-shadow(0 2px 2px #1a1a1a); + filter: drop-shadow(0 2px 2px #1a1a1a) } -@media (hover: hover) and (pointer: fine) { + +@media(hover: hover)and (pointer: fine) { .image-gallery-icon:hover { - color: #337ab7; + color: #337ab7 } + .image-gallery-icon:hover .image-gallery-svg { - transform: scale(1.1); + transform: scale(1.1) } } + .image-gallery-icon:focus { - outline: 2px solid #337ab7; + outline: 2px solid #337ab7 } + .image-gallery-using-mouse .image-gallery-icon:focus { - outline: none; + outline: none } -.image-gallery-fullscreen-button, -.image-gallery-play-button { + +.image-gallery-fullscreen-button, .image-gallery-play-button { bottom: 0; - padding: 20px; + padding: 20px } -.image-gallery-fullscreen-button .image-gallery-svg, -.image-gallery-play-button .image-gallery-svg { + +.image-gallery-fullscreen-button .image-gallery-svg, .image-gallery-play-button .image-gallery-svg { height: 28px; - width: 28px; + width: 28px } -@media (max-width: 768px) { - .image-gallery-fullscreen-button, - .image-gallery-play-button { - padding: 15px; + +@media(max-width: 768px) { + .image-gallery-fullscreen-button, .image-gallery-play-button { + padding: 15px } - .image-gallery-fullscreen-button .image-gallery-svg, - .image-gallery-play-button .image-gallery-svg { + + .image-gallery-fullscreen-button .image-gallery-svg, .image-gallery-play-button .image-gallery-svg { height: 24px; - width: 24px; + width: 24px } } -@media (max-width: 480px) { - .image-gallery-fullscreen-button, - .image-gallery-play-button { - padding: 10px; + +@media(max-width: 480px) { + .image-gallery-fullscreen-button, .image-gallery-play-button { + padding: 10px } - .image-gallery-fullscreen-button .image-gallery-svg, - .image-gallery-play-button .image-gallery-svg { + + .image-gallery-fullscreen-button .image-gallery-svg, .image-gallery-play-button .image-gallery-svg { height: 16px; - width: 16px; + width: 16px } } + .image-gallery-fullscreen-button { - right: 0; + right: 0 } + .image-gallery-play-button { - left: 0; + left: 0 } -.image-gallery-left-nav, -.image-gallery-right-nav { + +.image-gallery-left-nav, .image-gallery-right-nav { padding: 50px 10px; top: 50%; - transform: translateY(-50%); + transform: translateY(-50%) } -.image-gallery-left-nav .image-gallery-svg, -.image-gallery-right-nav .image-gallery-svg { + +.image-gallery-left-nav .image-gallery-svg, .image-gallery-right-nav .image-gallery-svg { height: 120px; - width: 60px; + width: 60px } -@media (max-width: 768px) { - .image-gallery-left-nav .image-gallery-svg, - .image-gallery-right-nav .image-gallery-svg { + +@media(max-width: 768px) { + .image-gallery-left-nav .image-gallery-svg, .image-gallery-right-nav .image-gallery-svg { height: 72px; - width: 36px; + width: 36px } } -@media (max-width: 480px) { - .image-gallery-left-nav .image-gallery-svg, - .image-gallery-right-nav .image-gallery-svg { + +@media(max-width: 480px) { + .image-gallery-left-nav .image-gallery-svg, .image-gallery-right-nav .image-gallery-svg { height: 48px; - width: 24px; + width: 24px } } -.image-gallery-left-nav[disabled], -.image-gallery-right-nav[disabled] { + +.image-gallery-left-nav[disabled], .image-gallery-right-nav[disabled] { cursor: disabled; - opacity: 0.6; - pointer-events: none; + opacity: .6; + pointer-events: none } + .image-gallery-left-nav { - left: 0; + left: 0 } + .image-gallery-right-nav { - right: 0; + right: 0 } + .image-gallery { -webkit-user-select: none; -moz-user-select: none; @@ -106,8 +116,9 @@ -o-user-select: none; user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - position: relative; + position: relative } + .image-gallery.fullscreen-modal { background: #000; bottom: 0; @@ -117,81 +128,94 @@ right: 0; top: 0; width: 100%; - z-index: 5; + z-index: 5 } + .image-gallery.fullscreen-modal .image-gallery-content { top: 50%; - transform: translateY(-50%); + transform: translateY(-50%) } + .image-gallery-content { position: relative; line-height: 0; - top: 0; + top: 0 } + .image-gallery-content.fullscreen { - background: #000; + background: #000 } + .image-gallery-content .image-gallery-slide .image-gallery-image { - max-height: calc(100vh - 80px); + max-height: calc(100vh - 80px) } -.image-gallery-content.left .image-gallery-slide .image-gallery-image, -.image-gallery-content.right .image-gallery-slide .image-gallery-image { - max-height: 100vh; + +.image-gallery-content.image-gallery-thumbnails-left .image-gallery-slide .image-gallery-image, .image-gallery-content.image-gallery-thumbnails-right .image-gallery-slide .image-gallery-image { + max-height: 100vh } + .image-gallery-slide-wrapper { - position: relative; + position: relative } -.image-gallery-slide-wrapper.left, -.image-gallery-slide-wrapper.right { + +.image-gallery-slide-wrapper.image-gallery-thumbnails-left, .image-gallery-slide-wrapper.image-gallery-thumbnails-right { display: inline-block; - width: calc(100% - 110px); + width: calc(100% - 110px) } -@media (max-width: 768px) { - .image-gallery-slide-wrapper.left, - .image-gallery-slide-wrapper.right { - width: calc(100% - 87px); + +@media(max-width: 768px) { + .image-gallery-slide-wrapper.image-gallery-thumbnails-left, .image-gallery-slide-wrapper.image-gallery-thumbnails-right { + width: calc(100% - 87px) } } + .image-gallery-slide-wrapper.image-gallery-rtl { - direction: rtl; + direction: rtl } + .image-gallery-slides { line-height: 0; overflow: hidden; position: relative; white-space: nowrap; - text-align: center; + text-align: center } + .image-gallery-slide { left: 0; position: absolute; top: 0; - width: 100%; + width: 100% } -.image-gallery-slide.center { - position: relative; + +.image-gallery-slide.image-gallery-center { + position: relative } + .image-gallery-slide .image-gallery-image { width: 100%; - object-fit: contain; + object-fit: contain } + .image-gallery-slide .image-gallery-description { - background: rgba(0, 0, 0, 0.4); + background: rgba(0, 0, 0, .4); bottom: 70px; color: #fff; left: 0; line-height: 1; padding: 10px 20px; position: absolute; - white-space: normal; + white-space: normal } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-slide .image-gallery-description { bottom: 45px; - font-size: 0.8em; - padding: 8px 15px; + font-size: .8em; + padding: 8px 15px } } + .image-gallery-bullets { bottom: 20px; left: 0; @@ -199,13 +223,15 @@ position: absolute; right: 0; width: 80%; - z-index: 4; + z-index: 4 } + .image-gallery-bullets .image-gallery-bullets-container { margin: 0; padding: 0; - text-align: center; + text-align: center } + .image-gallery-bullets .image-gallery-bullet { appearance: none; background-color: transparent; @@ -217,160 +243,175 @@ margin: 0 5px; outline: none; padding: 5px; - transition: all 0.2s ease-out; + transition: all .2s ease-out } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-bullets .image-gallery-bullet { margin: 0 3px; - padding: 3px; + padding: 3px } } -@media (max-width: 480px) { + +@media(max-width: 480px) { .image-gallery-bullets .image-gallery-bullet { - padding: 2.7px; + padding: 2.7px } } + .image-gallery-bullets .image-gallery-bullet:focus { transform: scale(1.2); background: #337ab7; - border: 1px solid #337ab7; + border: 1px solid #337ab7 } + .image-gallery-bullets .image-gallery-bullet.active { transform: scale(1.2); border: 1px solid #fff; - background: #fff; + background: #fff } -@media (hover: hover) and (pointer: fine) { + +@media(hover: hover)and (pointer: fine) { .image-gallery-bullets .image-gallery-bullet:hover { background: #337ab7; - border: 1px solid #337ab7; + border: 1px solid #337ab7 } + .image-gallery-bullets .image-gallery-bullet.active:hover { - background: #337ab7; + background: #337ab7 } } + .image-gallery-thumbnails-wrapper { - position: relative; + position: relative } + .image-gallery-thumbnails-wrapper.thumbnails-swipe-horizontal { - touch-action: pan-y; + touch-action: pan-y } + .image-gallery-thumbnails-wrapper.thumbnails-swipe-vertical { - touch-action: pan-x; + touch-action: pan-x } + .image-gallery-thumbnails-wrapper.thumbnails-wrapper-rtl { - direction: rtl; + direction: rtl } -.image-gallery-thumbnails-wrapper.left, -.image-gallery-thumbnails-wrapper.right { + +.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right { display: inline-block; vertical-align: top; - width: 100px; + width: 100px } -@media (max-width: 768px) { - .image-gallery-thumbnails-wrapper.left, - .image-gallery-thumbnails-wrapper.right { - width: 81px; + +@media(max-width: 768px) { + .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right { + width: 81px } } -.image-gallery-thumbnails-wrapper.left .image-gallery-thumbnails, -.image-gallery-thumbnails-wrapper.right .image-gallery-thumbnails { + +.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails { height: 100%; width: 100%; left: 0; padding: 0; position: absolute; - top: 0; + top: 0 } -.image-gallery-thumbnails-wrapper.left .image-gallery-thumbnails .image-gallery-thumbnail, -.image-gallery-thumbnails-wrapper.right .image-gallery-thumbnails .image-gallery-thumbnail { + +.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails .image-gallery-thumbnail, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails .image-gallery-thumbnail { display: block; margin-right: 0; - padding: 0; + padding: 0 } -.image-gallery-thumbnails-wrapper.left - .image-gallery-thumbnails - .image-gallery-thumbnail - + .image-gallery-thumbnail, -.image-gallery-thumbnails-wrapper.right - .image-gallery-thumbnails - .image-gallery-thumbnail - + .image-gallery-thumbnail { + +.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails .image-gallery-thumbnail+.image-gallery-thumbnail, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails .image-gallery-thumbnail+.image-gallery-thumbnail { margin-left: 0; - margin-top: 2px; + margin-top: 2px } -.image-gallery-thumbnails-wrapper.left, -.image-gallery-thumbnails-wrapper.right { - margin: 0 5px; + +.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right { + margin: 0 5px } -@media (max-width: 768px) { - .image-gallery-thumbnails-wrapper.left, - .image-gallery-thumbnails-wrapper.right { - margin: 0 3px; + +@media(max-width: 768px) { + .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left, .image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right { + margin: 0 3px } } + .image-gallery-thumbnails { overflow: hidden; - padding: 5px 0; + padding: 5px 0 } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-thumbnails { - padding: 3px 0; + padding: 3px 0 } } + .image-gallery-thumbnails .image-gallery-thumbnails-container { cursor: pointer; text-align: center; - white-space: nowrap; + white-space: nowrap } + .image-gallery-thumbnail { display: inline-block; border: 4px solid transparent; - transition: border 0.3s ease-out; + transition: border .3s ease-out; width: 100px; background: transparent; - padding: 0; + padding: 0 } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-thumbnail { border: 3px solid transparent; - width: 81px; + width: 81px } } -.image-gallery-thumbnail + .image-gallery-thumbnail { - margin-left: 2px; + +.image-gallery-thumbnail+.image-gallery-thumbnail { + margin-left: 2px } + .image-gallery-thumbnail .image-gallery-thumbnail-inner { display: block; - position: relative; + position: relative } + .image-gallery-thumbnail .image-gallery-thumbnail-image { vertical-align: middle; width: 100%; - line-height: 0; + line-height: 0 } -.image-gallery-thumbnail.active, -.image-gallery-thumbnail:focus { + +.image-gallery-thumbnail.active, .image-gallery-thumbnail:focus { outline: none; - border: 4px solid #337ab7; + border: 4px solid #337ab7 } -@media (max-width: 768px) { - .image-gallery-thumbnail.active, - .image-gallery-thumbnail:focus { - border: 3px solid #337ab7; + +@media(max-width: 768px) { + .image-gallery-thumbnail.active, .image-gallery-thumbnail:focus { + border: 3px solid #337ab7 } } -@media (hover: hover) and (pointer: fine) { + +@media(hover: hover)and (pointer: fine) { .image-gallery-thumbnail:hover { outline: none; - border: 4px solid #337ab7; + border: 4px solid #337ab7 } } -@media (hover: hover) and (pointer: fine) and (max-width: 768px) { + +@media(hover: hover)and (pointer: fine)and (max-width: 768px) { .image-gallery-thumbnail:hover { - border: 3px solid #337ab7; + border: 3px solid #337ab7 } } + .image-gallery-thumbnail-label { box-sizing: border-box; color: #fff; @@ -383,27 +424,30 @@ text-shadow: 0 2px 2px #1a1a1a; transform: translateY(-50%); white-space: normal; - width: 100%; + width: 100% } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-thumbnail-label { - font-size: 0.8em; - line-height: 0.8em; + font-size: .8em; + line-height: .8em } } + .image-gallery-index { - background: rgba(0, 0, 0, 0.4); + background: rgba(0, 0, 0, .4); color: #fff; line-height: 1; padding: 10px 20px; position: absolute; right: 0; top: 0; - z-index: 4; + z-index: 4 } -@media (max-width: 768px) { + +@media(max-width: 768px) { .image-gallery-index { - font-size: 0.8em; - padding: 5px 10px; + font-size: .8em; + padding: 5px 10px } } diff --git a/yarn.lock b/yarn.lock index 560ec9e54..01ab381f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10893,10 +10893,10 @@ react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" -react-image-gallery@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/react-image-gallery/-/react-image-gallery-1.2.8.tgz#8f41b0ade1c115a4f34621771c182af33d2d9a62" - integrity sha512-7KbWcWChUMHRGyJHA/eH3injWF9/2WTlQXjV6fym1DqwrINSVIh1hLiqmujh/XANstW+osqSu5WFKKPy2F2gbA== +react-image-gallery@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-image-gallery/-/react-image-gallery-1.3.0.tgz#789035b12d8149bdd2ab296c155f989205077ffb" + integrity sha512-lKnPaOzxqSdujPFyl+CkVw0j1aYoNCHk61cvr1h7aahf5aWqmPcR9YhUB4cYrt5Tn5KHDaPUzYm5/+cX9WxzaA== react-intl@6.8.4: version "6.8.4" From 86b148dcf1c26de0af99ad70202fcc52c2cda55c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:36:23 +0200 Subject: [PATCH 012/198] nodemon: update from v3.1.4 to v3.1.7 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c11b99f02..35c7b4ab0 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "concurrently": "^8.2.2", "cross-env": "^7.0.3", "inquirer": "^8.2.4", - "nodemon": "^3.1.4", + "nodemon": "^3.1.7", "prettier": "^1.18.2" }, "resolutions": { diff --git a/yarn.lock b/yarn.lock index 01ab381f2..f30384dd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9272,10 +9272,10 @@ node-releases@^2.0.5: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -nodemon@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.4.tgz#c34dcd8eb46a05723ccde60cbdd25addcc8725e4" - integrity sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ== +nodemon@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.7.tgz#07cb1f455f8bece6a499e0d72b5e029485521a54" + integrity sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ== dependencies: chokidar "^3.5.2" debug "^4" From 9dbf4b1efaa85458a39ca9655cd8e0928672b483 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:38:21 +0200 Subject: [PATCH 013/198] sitemap: update from v7.1.1 to v8.0.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 35c7b4ab0..33e7c0c0c 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "seedrandom": "^3.0.5", "sharetribe-flex-sdk": "^1.21.1", "sharetribe-scripts": "7.0.0", - "sitemap": "^7.1.1", + "sitemap": "^8.0.0", "smoothscroll-polyfill": "^0.4.0", "source-map-support": "^0.5.21", "unified": "^9.2.2", diff --git a/yarn.lock b/yarn.lock index f30384dd1..617347360 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11808,10 +11808,10 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -sitemap@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" - integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== +sitemap@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-8.0.0.tgz#eb6ea48f95787cd680b83683c555d6f6b5a903fd" + integrity sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A== dependencies: "@types/node" "^17.0.5" "@types/sax" "^1.2.1" From 5d001a6a9ab23e5bb7fbc71bfc4e3df6fabb1c12 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:39:39 +0200 Subject: [PATCH 014/198] Remove url pkg in favor of node:url. Remove deprecated url.parse in favor of WhatWG URL API --- package.json | 3 +-- server/dataLoader.js | 7 ++++--- yarn.lock | 18 ------------------ 3 files changed, 5 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 33e7c0c0c..dfb2f5d5c 100644 --- a/package.json +++ b/package.json @@ -63,8 +63,7 @@ "sitemap": "^8.0.0", "smoothscroll-polyfill": "^0.4.0", "source-map-support": "^0.5.21", - "unified": "^9.2.2", - "url": "^0.11.0" + "unified": "^9.2.2" }, "devDependencies": { "@testing-library/dom": "^10.4.0", diff --git a/server/dataLoader.js b/server/dataLoader.js index b02c314f7..b2c507e08 100644 --- a/server/dataLoader.js +++ b/server/dataLoader.js @@ -1,5 +1,6 @@ -const url = require('url'); +const { URL } = require('node:url'); const log = require('./log'); +const { getRootURL } = require('./api-util/rootURL'); const PREVENT_DATA_LOADING_IN_SSR = process.env.PREVENT_DATA_LOADING_IN_SSR === 'true'; @@ -19,7 +20,7 @@ exports.loadData = function(requestUrl, sdk, appInfo) { mergeConfig, fetchAppAssets, } = appInfo; - const { pathname, query } = url.parse(requestUrl); + const { pathname, search } = new URL(`${getRootURL()}${requestUrl}`); let translations = {}; let hostedConfig = {}; @@ -43,7 +44,7 @@ exports.loadData = function(requestUrl, sdk, appInfo) { return matchedRoutes.reduce((calls, match) => { const { route, params } = match; if (typeof route.loadData === 'function' && !route.auth) { - calls.push(store.dispatch(route.loadData(params, query, config))); + calls.push(store.dispatch(route.loadData(params, search, config))); } return calls; }, []); diff --git a/yarn.lock b/yarn.lock index 617347360..c218b72e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10709,11 +10709,6 @@ pstree.remy@^1.1.8: resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -10748,11 +10743,6 @@ query-string@^7.1.1: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - queue-microtask@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" @@ -12882,14 +12872,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - use-sync-external-store@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" From 59b981b8600db938b9562e6d64d77b02be5ebc9c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:41:19 +0200 Subject: [PATCH 015/198] jose: update from v5.2.0 to v5.9.6 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dfb2f5d5c..eaf5ddf44 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "final-form-arrays": "3.1.0", "full-icu": "^1.4.0", "helmet": "^7.1.0", - "jose": "5.2.0", + "jose": "5.9.6", "lodash": "^4.17.21", "mapbox-gl-multitouch": "^1.0.3", "moment": "^2.30.1", diff --git a/yarn.lock b/yarn.lock index c218b72e8..225a2be5e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8541,10 +8541,10 @@ jest@^27.4.3: import-local "^3.0.2" jest-cli "^27.5.1" -jose@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/jose/-/jose-5.2.0.tgz#d0ffd7f7e31253f633eefb190a930cd14a916995" - integrity sha512-oW3PCnvyrcm1HMvGTzqjxxfnEs9EoFOFWi2HsEGhlFVOXxTE3K9GKWVMFoFw06yPUqwpvEWic1BmtUZBI/tIjw== +jose@5.9.6: + version "5.9.6" + resolved "https://registry.yarnpkg.com/jose/-/jose-5.9.6.tgz#77f1f901d88ebdc405e57cce08d2a91f47521883" + integrity sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ== js-cookie@^2.1.3: version "2.2.1" From 1f091abaa43b0d35d4e9a3c5cde799b6d33c026f Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:42:33 +0200 Subject: [PATCH 016/198] react-helmet-async: update from v1.3.0 to v2.0.5 Note: this library does not have proper changelog nor release notes! --- package.json | 2 +- yarn.lock | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index eaf5ddf44..42f62c756 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "react-dom": "^17.0.2", "react-final-form": "6.5.9", "react-final-form-arrays": "3.1.4", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "^2.0.5", "react-image-gallery": "1.3.0", "react-intl": "6.8.4", "react-moment-proptypes": "^1.8.1", diff --git a/yarn.lock b/yarn.lock index 225a2be5e..f9e7ff2a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10661,7 +10661,7 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -10853,10 +10853,10 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== +react-fast-compare@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-final-form-arrays@3.1.4: version "3.1.4" @@ -10872,15 +10872,13 @@ react-final-form@6.5.9: dependencies: "@babel/runtime" "^7.15.4" -react-helmet-async@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== +react-helmet-async@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec" + integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg== dependencies: - "@babel/runtime" "^7.12.5" invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" + react-fast-compare "^3.2.2" shallowequal "^1.1.0" react-image-gallery@1.3.0: From 06ee761ba3c7be1e298350be813d4f4208008314 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 18:46:05 +0200 Subject: [PATCH 017/198] React: update from v17.0.2 to v18.2.0 --- package.json | 4 ++-- yarn.lock | 29 +++++++++++++---------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 42f62c756..06c7c31b5 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "prop-types": "^15.8.1", "query-string": "^7.1.1", "raf": "^3.4.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "react": "18.2.0", + "react-dom": "18.2.0", "react-final-form": "6.5.9", "react-final-form-arrays": "3.1.4", "react-helmet-async": "^2.0.5", diff --git a/yarn.lock b/yarn.lock index f9e7ff2a6..c03f75d83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10839,14 +10839,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -10979,13 +10978,12 @@ react-router@5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-cache@^1.0.0: version "1.0.0" @@ -11458,13 +11456,12 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@2.7.0: version "2.7.0" From b6cdef5ca8e3a7add630b6922f5828183db6fa57 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 19:42:09 +0200 Subject: [PATCH 018/198] query-string: update from v7.1.1 to v7.1.3 --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 06c7c31b5..aa9781949 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "path-to-regexp": "^6.2.1", "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", - "query-string": "^7.1.1", + "query-string": "^7.1.3", "raf": "^3.4.0", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/yarn.lock b/yarn.lock index c03f75d83..271b38423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5580,7 +5580,7 @@ decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-uri-component@^0.2.0: +decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== @@ -10733,12 +10733,12 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -query-string@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.1.tgz#754620669db978625a90f635f12617c271a088e1" - integrity sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w== +query-string@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== dependencies: - decode-uri-component "^0.2.0" + decode-uri-component "^0.2.2" filter-obj "^1.1.0" split-on-first "^1.0.0" strict-uri-encode "^2.0.0" From ada9a93f2b994e086c0e39a1dbb0d3f925a7351e Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 19:56:41 +0200 Subject: [PATCH 019/198] path-to-regexp: update from v6.2.1 to v8.2.0 Update tests related to path-to-regexp update - The path params need to be strings - Thrown errors have been changed --- package.json | 2 +- src/components/NamedLink/NamedLink.test.js | 4 ++-- src/util/routes.test.js | 6 +++--- yarn.lock | 8 ++++---- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index aa9781949..c0a0ae69a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "passport-facebook": "^3.0.0", "passport-google-oauth": "^2.0.0", "patch-package": "^8.0.0", - "path-to-regexp": "^6.2.1", + "path-to-regexp": "^8.2.0", "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", "query-string": "^7.1.3", diff --git a/src/components/NamedLink/NamedLink.test.js b/src/components/NamedLink/NamedLink.test.js index e61702846..13b99b7e6 100644 --- a/src/components/NamedLink/NamedLink.test.js +++ b/src/components/NamedLink/NamedLink.test.js @@ -35,8 +35,8 @@ describe('NamedLink', () => { }); it('should contain correct link', () => { - const id = 12; - const tree = render( + const id = '12'; + render( to ListingPage diff --git a/src/util/routes.test.js b/src/util/routes.test.js index 2ce2fd428..3a823cab9 100644 --- a/src/util/routes.test.js +++ b/src/util/routes.test.js @@ -26,14 +26,14 @@ describe('util/routes.js', () => { createResourceLocatorString('ListingPage', routes, { id: '1234', slug: 'nice-listing' }, {}) ).toEqual('/l/nice-listing/1234'); expect(() => createResourceLocatorString('ListingPage', routes, {}, {})).toThrowError( - TypeError('Expected "slug" to be a string') + TypeError('Missing parameters: slug, id') ); expect(() => createResourceLocatorString('ListingPage', routes, { id: '1234' }, {}) - ).toThrowError(TypeError('Expected "slug" to be a string')); + ).toThrowError(TypeError('Missing parameters: slug')); expect(() => createResourceLocatorString('ListingPage', routes, { slug: 'nice-listing' }, {}) - ).toThrowError(TypeError('Expected "id" to be a string')); + ).toThrowError(TypeError('Missing parameters: id')); }); it('should return meaningful strings with search parameters', () => { diff --git a/yarn.lock b/yarn.lock index 271b38423..be94aa817 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9847,10 +9847,10 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-to-regexp@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" - integrity sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw== +path-to-regexp@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" + integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== path-type@^4.0.0: version "4.0.0" From 36eb701605d03645a0bcd595d06d522769d506d0 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 20:02:14 +0200 Subject: [PATCH 020/198] inquirer: update from v8.2.4 to v8.2.6 --- package.json | 2 +- yarn.lock | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c0a0ae69a..440fde594 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "chalk": "^v4.1.2", "concurrently": "^8.2.2", "cross-env": "^7.0.3", - "inquirer": "^8.2.4", + "inquirer": "^8.2.6", "nodemon": "^3.1.7", "prettier": "^1.18.2" }, diff --git a/yarn.lock b/yarn.lock index be94aa817..da5929ad8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7488,10 +7488,10 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inquirer@^8.2.4: - version "8.2.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== +inquirer@^8.2.6: + version "8.2.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -7507,7 +7507,7 @@ inquirer@^8.2.4: string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" - wrap-ansi "^7.0.0" + wrap-ansi "^6.0.1" internal-slot@^1.0.3: version "1.0.3" @@ -13404,6 +13404,15 @@ workbox-window@6.5.3: "@types/trusted-types" "^2.0.2" workbox-core "6.5.3" +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" From 0287e7ffcf8241d9cb6e59c1d673f931cdb50c17 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 20:04:52 +0200 Subject: [PATCH 021/198] helmet: update from v7.1.0 to v8.0.0 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 440fde594..78042ea7e 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "final-form": "4.20.10", "final-form-arrays": "3.1.0", "full-icu": "^1.4.0", - "helmet": "^7.1.0", + "helmet": "^8.0.0", "jose": "5.9.6", "lodash": "^4.17.21", "mapbox-gl-multitouch": "^1.0.3", diff --git a/yarn.lock b/yarn.lock index da5929ad8..f570f60d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7183,10 +7183,10 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -helmet@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-7.1.0.tgz#287279e00f8a3763d5dccbaf1e5ee39b8c3784ca" - integrity sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg== +helmet@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-8.0.0.tgz#05370fb1953aa7b81bd0ddfa459221247be6ea5c" + integrity sha512-VyusHLEIIO5mjQPUI1wpOAEu+wl6Q0998jzTxqUYGE45xCIcAxy3MsbEK/yyJUJ3ADeMoB6MornPH6GMWAf+Pw== history@^4.9.0: version "4.9.0" From ca9bbd6cc05a81162aeb943396d2834d0c778ee7 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 20:25:18 +0200 Subject: [PATCH 022/198] express: update from v4.19.2 to v4.21.1 --- package.json | 2 +- yarn.lock | 204 ++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 186 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 78042ea7e..eacca7710 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "decimal.js": "^10.4.3", "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", - "express": "^4.19.2", + "express": "^4.21.1", "express-enforces-ssl": "^1.1.0", "final-form": "4.20.10", "final-form-arrays": "3.1.0", diff --git a/yarn.lock b/yarn.lock index f570f60d0..4d36d2d51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4621,7 +4621,25 @@ body-parser@1.20.0: type-is "~1.6.18" unpipe "1.0.0" -body-parser@1.20.2, body-parser@^1.20.2: +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@^1.20.2: version "1.20.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== @@ -4744,6 +4762,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -5182,10 +5211,10 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.23.3" @@ -5637,6 +5666,15 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -5919,6 +5957,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + enhanced-resolve@^5.15.0: version "5.15.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" @@ -6082,6 +6125,18 @@ es-abstract@^1.19.2, es-abstract@^1.19.5: string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" @@ -6517,37 +6572,37 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" -express@^4.19.2: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== +express@^4.21.1: + version "4.21.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" + integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.6.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.10" proxy-addr "~2.0.7" - qs "6.11.0" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -6698,6 +6753,19 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" @@ -6940,6 +7008,17 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: has "^1.0.3" has-symbols "^1.0.3" +get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -7122,6 +7201,20 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.1.0.tgz#deb10494cbbe8809bce168a3b961f42969f5ed43" + integrity sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q== + dependencies: + call-bind "^1.0.7" + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -7151,7 +7244,7 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hasown@^2.0.2: +hasown@^2.0.0, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -9035,6 +9128,11 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -9371,6 +9469,11 @@ object-inspect@^1.12.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.13.1: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" @@ -9835,6 +9938,11 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -10733,6 +10841,13 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + query-string@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" @@ -11602,6 +11717,25 @@ send@0.18.0: range-parser "~1.2.1" statuses "2.0.1" +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -11646,6 +11780,28 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -11771,6 +11927,16 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" From 14f169e27bee96e0bdbb9634a3004dd8a167f778 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 20:35:37 +0200 Subject: [PATCH 023/198] Remove React 16 related polyfills (Map, Set, raf) --- package.json | 2 -- src/index.js | 6 ------ yarn.lock | 7 +------ 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/package.json b/package.json index eacca7710..adc0cf71d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "classnames": "^2.5.1", "compression": "^1.7.4", "cookie-parser": "^1.4.6", - "core-js": "^3.22.5", "cors": "^2.8.5", "decimal.js": "^10.4.3", "dotenv": "^10.0.0", @@ -40,7 +39,6 @@ "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", "query-string": "^7.1.3", - "raf": "^3.4.0", "react": "18.2.0", "react-dom": "18.2.0", "react-final-form": "6.5.9", diff --git a/src/index.js b/src/index.js index 8bd56e4ad..df51e6ada 100644 --- a/src/index.js +++ b/src/index.js @@ -11,12 +11,6 @@ * Note that this file is required for the build process. */ -// React 16 depends on the collection types Map and Set, as well as requestAnimationFrame. -// https://reactjs.org/docs/javascript-environment-requirements.html -import 'core-js/features/map'; -import 'core-js/features/set'; -import 'raf/polyfill'; - // Dependency libs import React from 'react'; import ReactDOM from 'react-dom'; diff --git a/yarn.lock b/yarn.lock index 4d36d2d51..adde1857c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5247,11 +5247,6 @@ core-js@^3.19.2: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.3.tgz#3b977612b15da6da0c9cc4aec487e8d24f371112" integrity sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q== -core-js@^3.22.5: - version "3.22.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.22.5.tgz#a5f5a58e663d5c0ebb4e680cd7be37536fb2a9cf" - integrity sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA== - core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -10873,7 +10868,7 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -raf@^3.4.0, raf@^3.4.1: +raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== From 4e1226f40388a642c78db195c865ed4d2d7aa298 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:14:37 +0200 Subject: [PATCH 024/198] React: update to v18.3.1 --- package.json | 4 ++-- yarn.lock | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index adc0cf71d..6f5e725fb 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ "postinstall-postinstall": "^2.1.0", "prop-types": "^15.8.1", "query-string": "^7.1.3", - "react": "18.2.0", - "react-dom": "18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", "react-final-form": "6.5.9", "react-final-form-arrays": "3.1.4", "react-helmet-async": "^2.0.5", diff --git a/yarn.lock b/yarn.lock index adde1857c..7b66d7122 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10949,13 +10949,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-error-overlay@^6.0.11: version "6.0.11" @@ -11088,10 +11088,10 @@ react-router@5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -11566,7 +11566,7 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: +scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== From 92f6eb236110cf37d69f04afd918dd21a263e60a Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:16:43 +0200 Subject: [PATCH 025/198] React v18.3.1: avoid warning about key being among spread props --- .../AuthenticationPage/ConfirmSignupForm/ConfirmSignupForm.js | 4 ++-- src/containers/AuthenticationPage/SignupForm/SignupForm.js | 4 ++-- .../ProfileSettingsForm/ProfileSettingsForm.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/containers/AuthenticationPage/ConfirmSignupForm/ConfirmSignupForm.js b/src/containers/AuthenticationPage/ConfirmSignupForm/ConfirmSignupForm.js index bddfa8d15..c9a64e360 100644 --- a/src/containers/AuthenticationPage/ConfirmSignupForm/ConfirmSignupForm.js +++ b/src/containers/AuthenticationPage/ConfirmSignupForm/ConfirmSignupForm.js @@ -162,8 +162,8 @@ const ConfirmSignupFormComponent = props => ( {showCustomUserFields ? (
- {userFieldProps.map(fieldProps => ( - + {userFieldProps.map(({ key, ...fieldProps }) => ( + ))}
) : null} diff --git a/src/containers/AuthenticationPage/SignupForm/SignupForm.js b/src/containers/AuthenticationPage/SignupForm/SignupForm.js index bf70201e9..a0162d604 100644 --- a/src/containers/AuthenticationPage/SignupForm/SignupForm.js +++ b/src/containers/AuthenticationPage/SignupForm/SignupForm.js @@ -200,8 +200,8 @@ const SignupFormComponent = props => ( {showCustomUserFields ? (
- {userFieldProps.map(fieldProps => ( - + {userFieldProps.map(({ key, ...fieldProps}) => ( + ))}
) : null} diff --git a/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js b/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js index 7fa89f052..cbb010b9c 100644 --- a/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js +++ b/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js @@ -368,8 +368,8 @@ class ProfileSettingsFormComponent extends Component {

- {userFieldProps.map(fieldProps => ( - + {userFieldProps.map(({ key, ...fieldProps}) => ( + ))}
{submitError} From e60f857b5f527e3dd87a58b1f5bfff7e2c736d98 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:25:44 +0200 Subject: [PATCH 026/198] cookie-parser: update from v1.4.6 to v1.4.7 --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 6f5e725fb..9c6087aba 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "body-parser": "^1.20.2", "classnames": "^2.5.1", "compression": "^1.7.4", - "cookie-parser": "^1.4.6", + "cookie-parser": "^1.4.7", "cors": "^2.8.5", "decimal.js": "^10.4.3", "dotenv": "^10.0.0", diff --git a/yarn.lock b/yarn.lock index 7b66d7122..6ec0de268 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5188,12 +5188,12 @@ convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -cookie-parser@^1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" - integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== +cookie-parser@^1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.7.tgz#e2125635dfd766888ffe90d60c286404fa0e7b26" + integrity sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw== dependencies: - cookie "0.4.1" + cookie "0.7.2" cookie-signature "1.0.6" cookie-signature@1.0.6: @@ -5201,11 +5201,6 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - cookie@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" @@ -5216,6 +5211,11 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + core-js-compat@^3.21.0, core-js-compat@^3.22.1: version "3.23.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.23.3.tgz#7d8503185be76bb6d8d592c291a4457a8e440aa9" From 2b3ec1a2b435f00e68233925e91599dd8d11bb9c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:30:11 +0200 Subject: [PATCH 027/198] compression: update from v1.7.4 to v1.7.5 --- package.json | 2 +- yarn.lock | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9c6087aba..cfdca2601 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "basic-auth": "^2.0.1", "body-parser": "^1.20.2", "classnames": "^2.5.1", - "compression": "^1.7.4", + "compression": "^1.7.5", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "decimal.js": "^10.4.3", diff --git a/yarn.lock b/yarn.lock index 6ec0de268..602c4ebac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5114,6 +5114,13 @@ compressible@~2.0.16: dependencies: mime-db ">= 1.40.0 < 2" +compressible@~2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" @@ -5127,6 +5134,19 @@ compression@^1.7.4: safe-buffer "5.1.2" vary "~1.1.2" +compression@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93" + integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.0.2" + safe-buffer "5.2.1" + vary "~1.1.2" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -9182,6 +9202,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" @@ -9337,6 +9362,11 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" From 647f05b54c3742a8ba6af0bae0519f4b8eb30f26 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:31:54 +0200 Subject: [PATCH 028/198] body-parser: update from v1.20.2 to v1.20.3 --- package.json | 2 +- yarn.lock | 27 +-------------------------- 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index cfdca2601..bee06216c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "@sentry/node": "^8.26.0", "autosize": "^5.0.1", "basic-auth": "^2.0.1", - "body-parser": "^1.20.2", + "body-parser": "^1.20.3", "classnames": "^2.5.1", "compression": "^1.7.5", "cookie-parser": "^1.4.7", diff --git a/yarn.lock b/yarn.lock index 602c4ebac..626e9d9ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4621,7 +4621,7 @@ body-parser@1.20.0: type-is "~1.6.18" unpipe "1.0.0" -body-parser@1.20.3: +body-parser@1.20.3, body-parser@^1.20.3: version "1.20.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== @@ -4639,24 +4639,6 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" -body-parser@^1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - bonjour-service@^1.0.11: version "1.0.13" resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" @@ -10859,13 +10841,6 @@ qs@6.10.3: dependencies: side-channel "^1.0.4" -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - qs@6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" From 08cae43d860e08b1837110b3e945b75644fc785c Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:50:19 +0200 Subject: [PATCH 029/198] @babel-runtime: remove an old peer-dependency requirement --- package.json | 1 - yarn.lock | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index bee06216c..89afd6953 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "private": true, "license": "Apache-2.0", "dependencies": { - "@babel/runtime": "^7.17.9", "@loadable/component": "^5.16.4", "@loadable/server": "^5.16.5", "@mapbox/polyline": "^1.1.1", diff --git a/yarn.lock b/yarn.lock index 626e9d9ac..73e7c1313 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1993,7 +1993,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.12.13", "@babel/runtime@^7.17.9": +"@babel/runtime@^7.12.13": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== From 7004868858dc30279fb241c00e7b898f44f8c59d Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 21:58:18 +0200 Subject: [PATCH 030/198] @mapbox/polyline: update from v1.1.1 to v1.2.1 --- package.json | 2 +- yarn.lock | 80 +++++++++++++++++++++++++++++----------------------- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 89afd6953..11abc65b0 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dependencies": { "@loadable/component": "^5.16.4", "@loadable/server": "^5.16.5", - "@mapbox/polyline": "^1.1.1", + "@mapbox/polyline": "^1.2.1", "@sentry/browser": "^8.26.0", "@sentry/node": "^8.26.0", "autosize": "^5.0.1", diff --git a/yarn.lock b/yarn.lock index 73e7c1313..3cbcd4d20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2711,12 +2711,12 @@ dependencies: unist-util-visit "^1.4.1" -"@mapbox/polyline@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@mapbox/polyline/-/polyline-1.1.1.tgz#ab96e5e6936f4847a4894e14558daf43e40e3bd2" - integrity sha512-z9Sl7NYzsEIrAza658H92mc0OvpBjQwjp7Snv4xREKhsCMat7m1IKdWJMjQ5opiPYa0veMf7kCaSd1yx55AhmQ== +"@mapbox/polyline@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@mapbox/polyline/-/polyline-1.2.1.tgz#1eecce5e8c0d9e6dfc718b225e8e9f03591ea636" + integrity sha512-sn0V18O3OzW4RCcPoUIVDWvEGQaBNH9a0y5lgqrf5hUycyw1CzrhEoxV5irzrMNXKCkw1xRsZXcaVbsVZggHXA== dependencies: - meow "^6.1.1" + meow "^9.0.0" "@nodelib/fs.scandir@2.1.4": version "2.1.4" @@ -4782,7 +4782,7 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -7314,6 +7314,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + hpack.js@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" @@ -7738,7 +7745,7 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" -is-core-module@^2.13.0: +is-core-module@^2.13.0, is-core-module@^2.5.0: version "2.15.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== @@ -9103,22 +9110,23 @@ memfs@^3.1.2, memfs@^3.4.3: dependencies: fs-monkey "^1.0.3" -meow@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" - integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" + decamelize "^1.2.0" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" - minimist-options "^4.0.2" - normalize-package-data "^2.5.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" read-pkg-up "^7.0.1" redent "^3.0.0" trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" + type-fest "^0.18.0" + yargs-parser "^20.2.3" merge-descriptors@1.0.1: version "1.0.1" @@ -9258,7 +9266,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist-options@^4.0.2: +minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== @@ -9410,6 +9418,16 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -11672,6 +11690,11 @@ semver@^7.3.2: dependencies: lru-cache "^6.0.0" +semver@^7.3.4, semver@^7.5.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.3.5, semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -11686,11 +11709,6 @@ semver@^7.3.8: dependencies: lru-cache "^6.0.0" -semver@^7.5.2: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - semver@^7.5.3: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" @@ -12780,16 +12798,16 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - type-fest@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" @@ -13653,15 +13671,7 @@ yaml@^2.2.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== From a7b43c69daa9ea35dddeb034511af540cff0e01f Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 22:07:02 +0200 Subject: [PATCH 031/198] bfj: update from v7.0.2 to v9.1.1 --- package.json | 2 +- yarn.lock | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 11abc65b0..a3b23d8e9 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^16.0.1", "@testing-library/user-event": "^13.5.0", - "bfj": "^7.0.2", + "bfj": "^9.1.1", "chalk": "^v4.1.2", "concurrently": "^8.2.2", "cross-env": "^7.0.3", diff --git a/yarn.lock b/yarn.lock index 3cbcd4d20..4ef1cf58c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4579,6 +4579,16 @@ bfj@^7.0.2: hoopy "^0.1.4" tryer "^1.0.1" +bfj@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-9.1.1.tgz#913f7cbf87b14ac63975e89f21c64ad18e83c502" + integrity sha512-f3uU0MzqtuOvnB62ZUyzr2qqHVy5zFu3KV9H0MBVacdb7hsRxKSa18KtiwLZCF/5oRE3O4udraOxOC3F3A+kzA== + dependencies: + check-types "^11.2.3" + hoopy "^0.1.4" + jsonpath "^1.1.1" + tryer "^1.0.1" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4885,6 +4895,11 @@ check-types@^11.1.1: resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== +check-types@^11.2.3: + version "11.2.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.3.tgz#1ffdf68faae4e941fce252840b1787b8edc93b71" + integrity sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg== + chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -6195,6 +6210,18 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -6427,6 +6454,11 @@ espree@^9.3.2: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +esprima@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.2.tgz#76a0fd66fcfe154fd292667dc264019750b1657b" + integrity sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A== + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -6446,7 +6478,7 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -8774,6 +8806,15 @@ jsonify@^0.0.1: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== +jsonpath@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/jsonpath/-/jsonpath-1.1.1.tgz#0ca1ed8fb65bb3309248cc9d5466d12d5b0b9901" + integrity sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w== + dependencies: + esprima "1.2.2" + static-eval "2.0.2" + underscore "1.12.1" + jsonpointer@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.0.tgz#f802669a524ec4805fa7389eadbc9921d5dc8072" @@ -12156,6 +12197,13 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== +static-eval@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.2.tgz#2d1759306b1befa688938454c546b7871f806a42" + integrity sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg== + dependencies: + escodegen "^1.8.1" + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -12873,6 +12921,11 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" From 65f9f9a081e13455df43669f11a0380710283e6b Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 2 Dec 2024 15:55:20 +0200 Subject: [PATCH 032/198] ListingPageCarousel: do not render ActionBar before mounting (hydration issue) --- src/containers/ListingPage/ListingPageCarousel.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/containers/ListingPage/ListingPageCarousel.js b/src/containers/ListingPage/ListingPageCarousel.js index 378a630ae..7d466ebf5 100644 --- a/src/containers/ListingPage/ListingPageCarousel.js +++ b/src/containers/ListingPage/ListingPageCarousel.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { array, arrayOf, bool, func, shape, string, oneOf, object } from 'prop-types'; import { compose } from 'redux'; import { connect } from 'react-redux'; @@ -94,6 +94,11 @@ export const ListingPageComponent = props => { const [inquiryModalOpen, setInquiryModalOpen] = useState( props.inquiryModalOpenForListingId === props.params.id ); + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); const { isAuthenticated, @@ -313,7 +318,7 @@ export const ListingPageComponent = props => { }>
- {currentListing.id && noPayoutDetailsSetWithOwnListing ? ( + {mounted && currentListing.id && noPayoutDetailsSetWithOwnListing ? ( { currentUser={currentUser} /> ) : null} - {currentListing.id ? ( + {mounted && currentListing.id ? ( Date: Thu, 5 Dec 2024 15:06:09 +0200 Subject: [PATCH 033/198] Remove the new react-dom/server lib from the main code-chunk --- server/index.js | 7 +++--- server/renderer.js | 62 +++++++++++++++++++++++----------------------- src/app.js | 12 ++++++--- 3 files changed, 43 insertions(+), 38 deletions(-) diff --git a/server/index.js b/server/index.js index be46cb1bf..f9ede88cb 100644 --- a/server/index.js +++ b/server/index.js @@ -192,7 +192,7 @@ const noCacheHeaders = { 'Cache-control': 'no-cache, no-store, must-revalidate', }; -app.get('*', (req, res) => { +app.get('*', async (req, res) => { if (req.url.startsWith('/static/')) { // The express.static middleware only handles static resources // that it finds, otherwise passes them through. However, we don't @@ -226,8 +226,9 @@ app.get('*', (req, res) => { .loadData(req.url, sdk, appInfo) .then(data => { const cspNonce = cspEnabled ? res.locals.cspNonce : null; - const html = renderer.render(req.url, context, data, renderApp, webExtractor, cspNonce); - + return renderer.render(req.url, context, data, renderApp, webExtractor, cspNonce); + }) + .then(html => { if (dev) { const debugData = { url: req.url, diff --git a/server/renderer.js b/server/renderer.js index 14a6b2852..8fa31ce4c 100644 --- a/server/renderer.js +++ b/server/renderer.js @@ -97,44 +97,44 @@ exports.render = function(requestUrl, context, data, renderApp, webExtractor, no const collectWebChunks = webExtractor.collectChunks.bind(webExtractor); // Render the app with given route, preloaded state, hosted translations. - const { head, body } = renderApp( + return renderApp( requestUrl, context, preloadedState, translations, hostedConfig, collectWebChunks - ); + ).then(({ head, body }) => { + // Preloaded state needs to be passed for client side too. + // For security reasons we ensure that preloaded state is considered as a string + // by replacing '<' character with its unicode equivalent. + // http://redux.js.org/docs/recipes/ServerRendering.html#security-considerations + const serializedState = JSON.stringify(preloadedState, replacer).replace(/window.__PRELOADED_STATE__ = ${JSON.stringify( + serializedState + )}; + `; + // Add nonce to server-side rendered script tags + const nonceParamMaybe = nonce ? { nonce } : {}; - // At this point the serializedState is a string, the second - // JSON.stringify wraps it within double quotes and escapes the - // contents properly so the value can be injected in the script tag - // as a string. - const nonceMaybe = nonce ? `nonce="${nonce}"` : ''; - const preloadedStateScript = ` - - `; - // Add nonce to server-side rendered script tags - const nonceParamMaybe = nonce ? { nonce } : {}; - - return template({ - htmlAttributes: head.htmlAttributes.toString(), - title: head.title.toString(), - link: head.link.toString(), - meta: head.meta.toString(), - script: head.script.toString(), - preloadedStateScript, - ssrStyles: webExtractor.getStyleTags(), - ssrLinks: webExtractor.getLinkTags(), - ssrScripts: webExtractor.getScriptTags(nonceParamMaybe), - body, + return template({ + htmlAttributes: head.htmlAttributes.toString(), + title: head.title.toString(), + link: head.link.toString(), + meta: head.meta.toString(), + script: head.script.toString(), + preloadedStateScript, + ssrStyles: webExtractor.getStyleTags(), + ssrLinks: webExtractor.getLinkTags(), + ssrScripts: webExtractor.getScriptTags(nonceParamMaybe), + body, + }); }); }; diff --git a/src/app.js b/src/app.js index deca4eca4..7e972e7b6 100644 --- a/src/app.js +++ b/src/app.js @@ -1,6 +1,5 @@ import React from 'react'; import { any, string } from 'prop-types'; -import ReactDOMServer from 'react-dom/server'; import { HelmetProvider } from 'react-helmet-async'; import { BrowserRouter, StaticRouter } from 'react-router-dom'; @@ -340,7 +339,12 @@ export const renderApp = ( hostedConfig={hostedConfig} /> ); - const body = ReactDOMServer.renderToString(WithChunks); - const { helmet: head } = helmetContext; - return { head, body }; + + // Let's keep react-dom/server out of the main code-chunk. + return import('react-dom/server').then(mod => { + const { default: ReactDOMServer } = mod; + const body = ReactDOMServer.renderToString(WithChunks); + const { helmet: head } = helmetContext; + return { head, body }; + }); }; From 10ee0e0e890d9b4fb347a79dc693a488a94efa0d Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Thu, 5 Dec 2024 15:24:52 +0200 Subject: [PATCH 034/198] Component's key can't be spread from collection of props --- .../AuthenticationPage/SignupForm/SignupForm.js | 2 +- .../ProfileSettingsForm/ProfileSettingsForm.js | 2 +- .../SearchPage/SearchMap/SearchMapWithMapbox.js | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/containers/AuthenticationPage/SignupForm/SignupForm.js b/src/containers/AuthenticationPage/SignupForm/SignupForm.js index a0162d604..e078521a9 100644 --- a/src/containers/AuthenticationPage/SignupForm/SignupForm.js +++ b/src/containers/AuthenticationPage/SignupForm/SignupForm.js @@ -200,7 +200,7 @@ const SignupFormComponent = props => ( {showCustomUserFields ? (
- {userFieldProps.map(({ key, ...fieldProps}) => ( + {userFieldProps.map(({ key, ...fieldProps }) => ( ))}
diff --git a/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js b/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js index cbb010b9c..e91af4d88 100644 --- a/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js +++ b/src/containers/ProfileSettingsPage/ProfileSettingsForm/ProfileSettingsForm.js @@ -368,7 +368,7 @@ class ProfileSettingsFormComponent extends Component {

- {userFieldProps.map(({ key, ...fieldProps}) => ( + {userFieldProps.map(({ key, ...fieldProps }) => ( ))}
diff --git a/src/containers/SearchPage/SearchMap/SearchMapWithMapbox.js b/src/containers/SearchPage/SearchMap/SearchMapWithMapbox.js index ec07e6d51..a9f588e1b 100644 --- a/src/containers/SearchPage/SearchMap/SearchMapWithMapbox.js +++ b/src/containers/SearchPage/SearchMap/SearchMapWithMapbox.js @@ -461,9 +461,11 @@ class SearchMapWithMapbox extends Component { onClick={this.props.onClick} > {this.currentMarkers.map(m => { + const { key, ...compProps } = m.componentProps || {}; + // Remove existing activeLabel classes and add it only to the correct container m.markerContainer.classList.remove(css.activeLabel); - if (activeListingId && activeListingId.uuid === m.componentProps.key) { + if (activeListingId && activeListingId.uuid === key) { m.markerContainer.classList.add(css.activeLabel); } @@ -476,12 +478,12 @@ class SearchMapWithMapbox extends Component { // Create component portals for correct marker containers if (isMapReadyForMarkers && m.type === 'price') { return ReactDOM.createPortal( - , + , portalDOMContainer ); } else if (isMapReadyForMarkers && m.type === 'group') { return ReactDOM.createPortal( - , + , portalDOMContainer ); } From 92970384630332137c3b6404454938cecb5ae9e1 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 18:59:48 +0200 Subject: [PATCH 035/198] src/index.js: use react-dom/client and React v18 rendering --- src/index.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index df51e6ada..22d6ad2b3 100644 --- a/src/index.js +++ b/src/index.js @@ -13,7 +13,7 @@ // Dependency libs import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOMClient from 'react-dom/client'; import { loadableReady } from '@loadable/component'; // Import default styles before other CSS-related modules are imported @@ -52,6 +52,7 @@ const render = (store, shouldHydrate) => { const cdnAssetsVersion = state.hostedAssets.version; const authInfoLoaded = state.auth.authInfoLoaded; const info = authInfoLoaded ? Promise.resolve({}) : store.dispatch(authInfo()); + info .then(() => { // Ensure that Loadable Components is ready @@ -75,14 +76,17 @@ const render = (store, shouldHydrate) => { }, {}); if (shouldHydrate) { - ReactDOM.hydrate( - , - document.getElementById('root') + const container = document.getElementById('root'); + + ReactDOMClient.hydrateRoot( + container, + ); } else { - ReactDOM.render( - , - document.getElementById('root') + const container = document.getElementById('root'); + const root = ReactDOMClient.createRoot(container); + root.render( + ); } }) From 1d890428d03cf9c531f86e1003a9a2b78317e6be Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:00:43 +0200 Subject: [PATCH 036/198] src/index.js: add logging for onRecoverableError callback option The onRecoverableError cb is called with hydration errors. --- src/index.js | 3 ++- src/util/log.js | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 22d6ad2b3..4d69a72be 100644 --- a/src/index.js +++ b/src/index.js @@ -80,7 +80,8 @@ const render = (store, shouldHydrate) => { ReactDOMClient.hydrateRoot( container, - + , + { onRecoverableError: log.onRecoverableError } ); } else { const container = document.getElementById('root'); diff --git a/src/util/log.js b/src/util/log.js index 68e5e3f6e..4c9ed1661 100644 --- a/src/util/log.js +++ b/src/util/log.js @@ -103,3 +103,40 @@ export const error = (e, code, data) => { printAPIErrorsAsConsoleTable(apiErrors); } }; + +const setCause = (error, cause) => { + const seenErrors = new WeakSet(); + + const setCauseIfNoExistingCause = (error, cause) => { + if (seenErrors.has(error)) { + return; + } + if (error.cause) { + seenErrors.add(error); + return setCauseIfNoExistingCause(error.cause, cause); + } + error.cause = cause; + }; + + setCauseIfNoExistingCause(error, cause); +}; + +export const onRecoverableError = (error, componentStack) => { + let data = {}; + + if (componentStack) { + // Generating this synthetic error allows monitoring services to apply sourcemaps + // to unminify the stacktrace and make it readable. + const errorBoundaryError = new Error(error.message); + errorBoundaryError.name = `React ErrorBoundary ${errorBoundaryError.name}`; + errorBoundaryError.stack = componentStack; + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause + setCause(error, errorBoundaryError); + + data.componentStack = componentStack; + } + + // Replace with your error monitoring service. + error(error, 'recoverable-error', data); +}; From 6b037b1e5617c8da05f5950a1fff123a024d4343 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:03:03 +0200 Subject: [PATCH 037/198] Page: refactor attribute order This is a no-op: it just helped readability when checking attributes on DOM rendered by Chrome --- src/components/Page/Page.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Page/Page.js b/src/components/Page/Page.js index ba1fc2bed..15a85fd06 100644 --- a/src/components/Page/Page.js +++ b/src/components/Page/Page.js @@ -243,7 +243,7 @@ class PageComponent extends Component { const styles = getCustomCSSPropertiesFromConfig(config.branding); return ( -
+
Date: Mon, 9 Dec 2024 19:11:48 +0200 Subject: [PATCH 038/198] OrderPanel: hydration should not render the actual form. Reason: the visibility of those forms depends on the responsive layout and CSR must match SSR. --- src/components/OrderPanel/OrderPanel.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/components/OrderPanel/OrderPanel.js b/src/components/OrderPanel/OrderPanel.js index 66464c4fd..5ab499265 100644 --- a/src/components/OrderPanel/OrderPanel.js +++ b/src/components/OrderPanel/OrderPanel.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { compose } from 'redux'; import { withRouter } from 'react-router-dom'; import { @@ -164,6 +164,10 @@ const PriceMaybe = props => { }; const OrderPanel = props => { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); const { rootClassName, className, @@ -225,11 +229,11 @@ const OrderPanel = props => { const isBooking = isBookingProcess(processName); const shouldHaveBookingTime = isBooking && [LINE_ITEM_HOUR].includes(lineItemUnitType); - const showBookingTimeForm = shouldHaveBookingTime && !isClosed && timeZone; + const showBookingTimeForm = mounted && shouldHaveBookingTime && !isClosed && timeZone; const shouldHaveBookingDates = isBooking && [LINE_ITEM_DAY, LINE_ITEM_NIGHT].includes(lineItemUnitType); - const showBookingDatesForm = shouldHaveBookingDates && !isClosed && timeZone; + const showBookingDatesForm = mounted && shouldHaveBookingDates && !isClosed && timeZone; // The listing resource has a relationship: `currentStock`, // which you should include when making API calls. @@ -239,9 +243,9 @@ const OrderPanel = props => { // Show form only when stock is fully loaded. This avoids "Out of stock" UI by // default before all data has been downloaded. - const showProductOrderForm = isPurchase && typeof currentStock === 'number'; + const showProductOrderForm = mounted && isPurchase && typeof currentStock === 'number'; - const showInquiryForm = processName === INQUIRY_PROCESS_NAME; + const showInquiryForm = mounted && processName === INQUIRY_PROCESS_NAME; const supportedProcessesInfo = getSupportedProcessesInfo(); const isKnownProcess = supportedProcessesInfo.map(info => info.name).includes(processName); From a21166386c5e16bf19ccd38ffc829175c58455c9 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:15:26 +0200 Subject: [PATCH 039/198] ListingPage/SectionHero: hydration must produce the same HTML structure as SSR. The issue: ActionBars are currentUser-specific info. --- src/containers/ListingPage/SectionHero.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/containers/ListingPage/SectionHero.js b/src/containers/ListingPage/SectionHero.js index 5e5b256db..813685853 100644 --- a/src/containers/ListingPage/SectionHero.js +++ b/src/containers/ListingPage/SectionHero.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { FormattedMessage } from '../../util/reactIntl'; import { ResponsiveImage, Modal } from '../../components'; @@ -9,6 +9,11 @@ import ActionBarMaybe from './ActionBarMaybe'; import css from './ListingPage.module.css'; const SectionHero = props => { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + const { title, listing, @@ -40,7 +45,7 @@ const SectionHero = props => { return (
- {listing.id && isOwnListing ? ( + {mounted && listing.id && isOwnListing ? (
e.stopPropagation()} className={css.actionBarContainerForHeroLayout}> {noPayoutDetailsSetWithOwnListing ? ( Date: Mon, 9 Dec 2024 19:17:16 +0200 Subject: [PATCH 040/198] ListingPage/UserCard: hydration must produce the same HTML structure as SSR. The issue: contact link can't be rendered for the author of the listing. --- .../ListingPage/UserCard/UserCard.js | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/containers/ListingPage/UserCard/UserCard.js b/src/containers/ListingPage/UserCard/UserCard.js index b1b530547..ee8fbdb64 100644 --- a/src/containers/ListingPage/UserCard/UserCard.js +++ b/src/containers/ListingPage/UserCard/UserCard.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { bool, func, oneOfType, string } from 'prop-types'; import truncate from 'lodash/truncate'; import classNames from 'classnames'; @@ -71,6 +71,11 @@ ExpandableBio.propTypes = { }; const UserCard = props => { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + const { rootClassName, className, user, currentUser, onContactUser, showContact } = props; const userIsCurrentUser = user && user.type === 'currentUser'; @@ -92,7 +97,9 @@ const UserCard = props => { }); const separator = - isCurrentUser || !showContact ? null : •; + (mounted && isCurrentUser) || !showContact ? null : ( + • + ); const contact = showContact ? ( { ); - const editProfileDesktop = isCurrentUser ? ( - - - - ) : null; + const editProfileDesktop = + mounted && isCurrentUser ? ( + + + + ) : null; const links = ensuredUser.id ? (

@@ -125,7 +133,7 @@ const UserCard = props => { {separator} - {isCurrentUser ? editProfileMobile : contact} + {mounted && isCurrentUser ? editProfileMobile : contact}

) : null; From 4d8112911d521205d155fecba7f44e5c445e9c73 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:19:19 +0200 Subject: [PATCH 041/198] ProfilePage: hydration must produce the same HTML structure as SSR. The issue: window.matchMedia can't be used on the first pass after mounting. --- src/containers/ProfilePage/ProfilePage.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/containers/ProfilePage/ProfilePage.js b/src/containers/ProfilePage/ProfilePage.js index b7ad77f0c..2c54fa68e 100644 --- a/src/containers/ProfilePage/ProfilePage.js +++ b/src/containers/ProfilePage/ProfilePage.js @@ -194,6 +194,11 @@ export const CustomUserFields = props => { }; export const MainContent = props => { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + const { userShowError, bio, @@ -211,9 +216,10 @@ export const MainContent = props => { const hasListings = listings.length > 0; const hasMatchMedia = typeof window !== 'undefined' && window?.matchMedia; - const isMobileLayout = hasMatchMedia - ? window.matchMedia(`(max-width: ${MAX_MOBILE_SCREEN_WIDTH}px)`)?.matches - : true; + const isMobileLayout = + mounted && hasMatchMedia + ? window.matchMedia(`(max-width: ${MAX_MOBILE_SCREEN_WIDTH}px)`)?.matches + : true; const hasBio = !!bio; const bioWithLinks = richText(bio, { From 2ff014956806771db50c1f1055dfe885b5e8b79a Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:21:20 +0200 Subject: [PATCH 042/198] StyleguidePage: hydration must produce the same HTML structure as SSR. The issue: those example components might be CSR only. --- .../StyleguidePage/StyleguidePage.js | 62 +++++++++++-------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/src/containers/StyleguidePage/StyleguidePage.js b/src/containers/StyleguidePage/StyleguidePage.js index 9df4ecba2..10627da37 100644 --- a/src/containers/StyleguidePage/StyleguidePage.js +++ b/src/containers/StyleguidePage/StyleguidePage.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import isEmpty from 'lodash/isEmpty'; import classNames from 'classnames'; @@ -194,21 +194,21 @@ const examplesFor = (examples, group, componentName, exampleName) => { }); }; -const StyleguidePage = props => { - const { params, raw } = props; +const Examples = props => { + const [mounted, setMounted] = useState(false); + useEffect(() => { + setMounted(true); + }, []); + + if (!mounted) { + return null; + } + + const { flattened, params, raw } = props; const group = params.group ? decodeURIComponent(params.group) : ALL; const componentName = params.component || ALL; const exampleName = params.example || ALL; - const flattened = flatExamples(allExamples); - const groups = flattened.reduce((result, ex) => { - if (ex.group && !result.includes(ex.group)) { - return result.concat(ex.group); - } - return result; - }, []); - groups.sort(); - const selectedGroup = isEmpty(params) ? ALL : params.group; const examples = examplesFor(flattened, group, componentName, exampleName); // Raw examples are rendered without any wrapper @@ -225,18 +225,30 @@ const StyleguidePage = props => { ); } - const html = - examples.length > 0 ? ( -
    - {examples.map(ex => ( - - ))} -
- ) : ( -

- No examples with filter: {componentName}/{exampleName} -

- ); + return examples.length > 0 ? ( +
    + {examples.map(ex => ( + + ))} +
+ ) : ( +

+ No examples with filter: {componentName}/{exampleName} +

+ ); +}; + +const StyleguidePage = props => { + const { params, raw } = props; + const flattened = flatExamples(allExamples); + const groups = flattened.reduce((result, ex) => { + if (ex.group && !result.includes(ex.group)) { + return result.concat(ex.group); + } + return result; + }, []); + groups.sort(); + const selectedGroup = isEmpty(params) ? ALL : params.group; const prefixIndex = selectedGroup ? selectedGroup.indexOf(PREFIX_SEPARATOR) : -1; const selectedGroupWithoutPrefix = @@ -260,7 +272,7 @@ const StyleguidePage = props => { ? `Selected category: ${selectedGroupWithoutPrefix}` : `Component`} - {html} +
); From 461fcfe91bb840208dfef323ba6b17ed8430aefa Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:27:50 +0200 Subject: [PATCH 043/198] Topbar: refactor - turn the class component to functional component. --- .../TopbarContainer/Topbar/Topbar.js | 384 ++++++++---------- 1 file changed, 170 insertions(+), 214 deletions(-) diff --git a/src/containers/TopbarContainer/Topbar/Topbar.js b/src/containers/TopbarContainer/Topbar/Topbar.js index e70dbb3dd..e2e63bb0f 100644 --- a/src/containers/TopbarContainer/Topbar/Topbar.js +++ b/src/containers/TopbarContainer/Topbar/Topbar.js @@ -1,4 +1,4 @@ -import React, { Component } from 'react'; +import React, { Component, useEffect, useState } from 'react'; import { array, arrayOf, bool, func, number, object, shape, string } from 'prop-types'; import pickBy from 'lodash/pickBy'; import classNames from 'classnames'; @@ -30,15 +30,13 @@ import css from './Topbar.module.css'; const MAX_MOBILE_SCREEN_WIDTH = 1024; -const redirectToURLWithModalState = (props, modalStateParam) => { - const { history, location } = props; +const redirectToURLWithModalState = (history, location, modalStateParam) => { const { pathname, search, state } = location; const searchString = `?${stringify({ [modalStateParam]: 'open', ...parse(search) })}`; history.push(`${pathname}${searchString}`, state); }; -const redirectToURLWithoutModalState = (props, modalStateParam) => { - const { history, location } = props; +const redirectToURLWithoutModalState = (history, location, modalStateParam) => { const { pathname, search, state } = location; const queryParams = pickBy(parse(search), (v, k) => { return k !== modalStateParam; @@ -129,36 +127,36 @@ GenericError.propTypes = { show: bool.isRequired, }; -class TopbarComponent extends Component { - constructor(props) { - super(props); - this.handleMobileMenuOpen = this.handleMobileMenuOpen.bind(this); - this.handleMobileMenuClose = this.handleMobileMenuClose.bind(this); - this.handleMobileSearchOpen = this.handleMobileSearchOpen.bind(this); - this.handleMobileSearchClose = this.handleMobileSearchClose.bind(this); - this.handleSubmit = this.handleSubmit.bind(this); - this.handleLogout = this.handleLogout.bind(this); - } - - handleMobileMenuOpen() { - redirectToURLWithModalState(this.props, 'mobilemenu'); - } - - handleMobileMenuClose() { - redirectToURLWithoutModalState(this.props, 'mobilemenu'); - } - - handleMobileSearchOpen() { - redirectToURLWithModalState(this.props, 'mobilesearch'); - } - - handleMobileSearchClose() { - redirectToURLWithoutModalState(this.props, 'mobilesearch'); - } - - handleSubmit(values) { - const { currentSearchParams } = this.props; - const { history, config, routeConfiguration } = this.props; +const TopbarComponent = props => { + const { + className, + rootClassName, + desktopClassName, + mobileRootClassName, + mobileClassName, + isAuthenticated, + isLoggedInAs, + authScopes = [], + authInProgress, + currentUser, + currentUserHasListings, + currentUserHasOrders, + currentPage, + notificationCount = 0, + intl, + history, + location, + onManageDisableScrolling, + onResendVerificationEmail, + sendVerificationEmailInProgress, + sendVerificationEmailError, + showGenericError, + config, + routeConfiguration, + } = props; + + const handleSubmit = values => { + const { currentSearchParams, history, config, routeConfiguration } = props; const topbarSearchParams = () => { if (isMainSearchTypeKeywords(config)) { @@ -180,10 +178,10 @@ class TopbarComponent extends Component { ...topbarSearchParams(), }; history.push(createResourceLocatorString('SearchPage', routeConfiguration, {}, searchParams)); - } + }; - handleLogout() { - const { onLogout, history, routeConfiguration } = this.props; + const handleLogout = () => { + const { onLogout, history, routeConfiguration } = props; onLogout().then(() => { const path = pathByRouteName('LandingPage', routeConfiguration); @@ -197,197 +195,155 @@ class TopbarComponent extends Component { console.log('logged out'); // eslint-disable-line }); - } + }; - render() { - const { - className, - rootClassName, - desktopClassName, - mobileRootClassName, - mobileClassName, - isAuthenticated, - isLoggedInAs, - authScopes, - authInProgress, - currentUser, - currentUserHasListings, - currentUserHasOrders, - currentPage, - notificationCount, - intl, - location, - onManageDisableScrolling, - onResendVerificationEmail, - sendVerificationEmailInProgress, - sendVerificationEmailError, - showGenericError, - config, - routeConfiguration, - } = this.props; - - const { mobilemenu, mobilesearch, keywords, address, origin, bounds } = parse(location.search, { - latlng: ['origin'], - latlngBounds: ['bounds'], - }); + const { mobilemenu, mobilesearch, keywords, address, origin, bounds } = parse(location.search, { + latlng: ['origin'], + latlngBounds: ['bounds'], + }); - // Custom links are sorted so that group="primary" are always at the beginning of the list. - const sortedCustomLinks = sortCustomLinks(config.topbar?.customLinks); - const customLinks = getResolvedCustomLinks(sortedCustomLinks, routeConfiguration); - const resolvedCurrentPage = currentPage || getResolvedCurrentPage(location, routeConfiguration); + // Custom links are sorted so that group="primary" are always at the beginning of the list. + const sortedCustomLinks = sortCustomLinks(config.topbar?.customLinks); + const customLinks = getResolvedCustomLinks(sortedCustomLinks, routeConfiguration); + const resolvedCurrentPage = currentPage || getResolvedCurrentPage(location, routeConfiguration); + + const notificationDot = notificationCount > 0 ?
: null; + + const hasMatchMedia = typeof window !== 'undefined' && window?.matchMedia; + const isMobileLayout = hasMatchMedia + ? window.matchMedia(`(max-width: ${MAX_MOBILE_SCREEN_WIDTH}px)`)?.matches + : true; + const isMobileMenuOpen = isMobileLayout && mobilemenu === 'open'; + const isMobileSearchOpen = isMobileLayout && mobilesearch === 'open'; + + const mobileMenu = ( + + ); - const notificationDot = notificationCount > 0 ?
: null; + const topbarSearcInitialValues = () => { + if (isMainSearchTypeKeywords(config)) { + return { keywords }; + } - const hasMatchMedia = typeof window !== 'undefined' && window?.matchMedia; - const isMobileLayout = hasMatchMedia - ? window.matchMedia(`(max-width: ${MAX_MOBILE_SCREEN_WIDTH}px)`)?.matches - : true; - const isMobileMenuOpen = isMobileLayout && mobilemenu === 'open'; - const isMobileSearchOpen = isMobileLayout && mobilesearch === 'open'; + // Only render current search if full place object is available in the URL params + const locationFieldsPresent = isOriginInUse(config) + ? address && origin && bounds + : address && bounds; + return { + location: locationFieldsPresent + ? { + search: address, + selectedPlace: { address, origin, bounds }, + } + : null, + }; + }; + const initialSearchFormValues = topbarSearcInitialValues(); - const mobileMenu = ( - + - ); - - const topbarSearcInitialValues = () => { - if (isMainSearchTypeKeywords(config)) { - return { keywords }; - } - - // Only render current search if full place object is available in the URL params - const locationFieldsPresent = isOriginInUse(config) - ? address && origin && bounds - : address && bounds; - return { - location: locationFieldsPresent - ? { - search: address, - selectedPlace: { address, origin, bounds }, - } - : null, - }; - }; - const initialSearchFormValues = topbarSearcInitialValues(); - - const classes = classNames(rootClassName || css.root, className); - - return ( -
- + + + +
+
+ -
- - - -
-
- + redirectToURLWithoutModalState(history, location, 'mobilemenu')} + usePortal + onManageDisableScrolling={onManageDisableScrolling} + > + {authInProgress ? null : mobileMenu} + + redirectToURLWithoutModalState(history, location, 'mobilesearch')} + usePortal + onManageDisableScrolling={onManageDisableScrolling} + > +
+ +

+ +

- - {authInProgress ? null : mobileMenu} - - -
- -

- -

-
-
- +
+ - -
- ); - } -} - -TopbarComponent.defaultProps = { - className: null, - rootClassName: null, - desktopClassName: null, - mobileRootClassName: null, - mobileClassName: null, - notificationCount: 0, - currentUser: null, - currentUserHasOrders: null, - currentPage: null, - sendVerificationEmailError: null, - authScopes: [], + +
+ ); }; TopbarComponent.propTypes = { From 41a89d775138097be60268c1ceb818936615a4b3 Mon Sep 17 00:00:00 2001 From: Vesa Luusua Date: Mon, 9 Dec 2024 19:36:22 +0200 Subject: [PATCH 044/198] TopbarDesktop/CustomLinksMenu: hydration must produce the same HTML structure as SSR. The issue: LinksMenu should not be rendered on the first pass after mounting since it produces different HTML structure that SSR. --- .../CustomLinksMenu/CustomLinksMenu.js | 2 +- .../TopbarDesktop/CustomLinksMenu/LinksMenu.js | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/containers/TopbarContainer/Topbar/TopbarDesktop/CustomLinksMenu/CustomLinksMenu.js b/src/containers/TopbarContainer/Topbar/TopbarDesktop/CustomLinksMenu/CustomLinksMenu.js index b9387392f..9b9de037a 100644 --- a/src/containers/TopbarContainer/Topbar/TopbarDesktop/CustomLinksMenu/CustomLinksMenu.js +++ b/src/containers/TopbarContainer/Topbar/TopbarDesktop/CustomLinksMenu/CustomLinksMenu.js @@ -190,7 +190,7 @@ const CustomLinksMenu = ({ currentPage, customLinks = [], hasClientSideContentRe return (
- {hasMenuLinks ? ( + {mounted && hasMenuLinks ? ( { * @returns div with same styles as the real "More" label or null if width is known. */ const MeasureMoreMenu = props => { - const { width, setWidth, label } = props; const moreMenuRef = useRef(null); + const [mounted, setMounted] = useState(false); + const { width, setWidth, label } = props; + + useEffect(() => { + setMounted(true); + }, []); + useEffect(() => { - if (moreMenuRef.current && !width) { + if (mounted && moreMenuRef.current && !width) { setWidth(moreMenuRef.current.offsetWidth); } - }, [moreMenuRef, width]); + }, [mounted, moreMenuRef, width]); - const isServer = typeof window === 'undefined'; // Component is measured outside of the viewport const styleWrapper = !!width ? {} @@ -84,7 +89,7 @@ const MeasureMoreMenu = props => { }, }; - return !width && !isServer + return !width && mounted ? ReactDOM.createPortal(
Date: Mon, 9 Dec 2024 19:44:28 +0200 Subject: [PATCH 045/198] TopbarSearchForm: refactor - turn the class component to functional component. LocationAutocompleteInputImpl: update component to support useRef hook. --- .../LocationAutocompleteInputImpl.js | 29 +++- .../TopbarSearchForm/TopbarSearchForm.js | 155 ++++++++---------- 2 files changed, 90 insertions(+), 94 deletions(-) diff --git a/src/components/LocationAutocompleteInput/LocationAutocompleteInputImpl.js b/src/components/LocationAutocompleteInput/LocationAutocompleteInputImpl.js index f0abcb4e3..5bf188cc1 100644 --- a/src/components/LocationAutocompleteInput/LocationAutocompleteInputImpl.js +++ b/src/components/LocationAutocompleteInput/LocationAutocompleteInputImpl.js @@ -515,6 +515,21 @@ class LocationAutocompleteInputImplementation extends Component { const renderPredictions = this.state.inputHasFocus; const geocoderVariant = getGeocoderVariant(config.maps.mapProvider); const GeocoderAttribution = geocoderVariant.GeocoderAttribution; + // The first ref option in this optional chain is about callback ref, + // which was used in previous version of this Template. + const refMaybe = + typeof inputRef === 'function' + ? { + ref: node => { + this.input = node; + if (inputRef) { + inputRef(node); + } + }, + } + : inputRef + ? { ref: inputRef } + : {}; return (
@@ -538,12 +553,7 @@ class LocationAutocompleteInputImplementation extends Component { onBlur={this.handleOnBlur} onChange={this.onChange} onKeyDown={this.onKeyDown} - ref={node => { - this.input = node; - if (inputRef) { - inputRef(node); - } - }} + {...refMaybe} title={search} data-testid="location-search" /> @@ -619,7 +629,12 @@ LocationAutocompleteInputImpl.propTypes = { valid: bool.isRequired, touched: bool.isRequired, }), - inputRef: func, + inputRef: oneOfType([ + func, + shape({ + current: any, + }), + ]), }; export default LocationAutocompleteInputImpl; diff --git a/src/containers/TopbarContainer/Topbar/TopbarSearchForm/TopbarSearchForm.js b/src/containers/TopbarContainer/Topbar/TopbarSearchForm/TopbarSearchForm.js index 36cbbcb2c..c013fcd0b 100644 --- a/src/containers/TopbarContainer/Topbar/TopbarSearchForm/TopbarSearchForm.js +++ b/src/containers/TopbarContainer/Topbar/TopbarSearchForm/TopbarSearchForm.js @@ -1,9 +1,9 @@ -import React, { Component } from 'react'; +import React, { useRef } from 'react'; import { bool, func, object, string } from 'prop-types'; import { Form as FinalForm, Field } from 'react-final-form'; import classNames from 'classnames'; -import { intlShape, injectIntl } from '../../../../util/reactIntl'; +import { useIntl } from '../../../../util/reactIntl'; import { isMainSearchTypeKeywords } from '../../../../util/search'; import { Form, LocationAutocompleteInput } from '../../../../components'; @@ -14,7 +14,7 @@ import css from './TopbarSearchForm.module.css'; const identity = v => v; const KeywordSearchField = props => { - const { keywordSearchWrapperClasses, iconClass, intl, isMobile, inputRef } = props; + const { keywordSearchWrapperClasses, iconClass, intl, isMobile = false, inputRef } = props; return (