From 2d38a9394a368b5a249d3b80e11996f5fec96aad Mon Sep 17 00:00:00 2001 From: Bassel Date: Fri, 19 May 2023 15:30:29 +0300 Subject: [PATCH 01/22] push retry sending messages if no response was recieved --- .../src/strapi/providers/utils.ts | 19 +++++++++++++++++++ .../src/strapi/remote/handlers/abstract.ts | 6 ++++++ .../src/strapi/remote/handlers/push.ts | 7 ++++++- .../src/strapi/remote/handlers/utils.ts | 9 +++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index 7fa744c2c8..7be7157c50 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -30,6 +30,8 @@ export const createDispatcher = (ws: WebSocket) => { return new Promise((resolve, reject) => { const uuid = randomUUID(); const payload = { ...message, uuid }; + let numberOfTimesMessageWasSent = 0; + let responseWasReceived = false; if (options.attachTransfer) { Object.assign(payload, { transferID: state.transfer?.id }); @@ -43,7 +45,23 @@ export const createDispatcher = (ws: WebSocket) => { } }); + const sendPeriodically = () => { + setTimeout(() => { + if (!responseWasReceived) { + if (numberOfTimesMessageWasSent < 5) { + numberOfTimesMessageWasSent += 1; + ws.send(stringifiedPayload); + sendPeriodically(); + } else { + reject(new ProviderError('error', 'Request timed out')); + } + } + }, 50000); + }; + const onResponse = (raw: RawData) => { + responseWasReceived = true; + numberOfTimesMessageWasSent = 0; const response: server.Message = JSON.parse(raw.toString()); if (response.uuid === uuid) { if (response.error) { @@ -57,6 +75,7 @@ export const createDispatcher = (ws: WebSocket) => { }; ws.once('message', onResponse); + sendPeriodically(); }); }; diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts index 14a8e910ed..b85ce85f4e 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts @@ -19,6 +19,12 @@ export interface Handler { get startedAt(): TransferState['startedAt']; set startedAt(id: TransferState['startedAt']); + // Add message UUIDs + addUUID(uuid: string): void; + + // Check if a message UUID exists + hasUUID(uuid: string): boolean; + /** * Returns whether a transfer is currently in progress or not */ diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/push.ts b/packages/core/data-transfer/src/strapi/remote/handlers/push.ts index 2f54b0ef01..efc1df9dfd 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/push.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/push.ts @@ -205,8 +205,13 @@ export const createPushController = handlerControllerFactory { handleWSUpgrade(wss, ctx, (ws) => { const state: TransferState = { id: undefined }; + const messageuuids = new Set(); const prototype: Handler = { // Transfer ID @@ -99,6 +100,14 @@ export const handlerControllerFactory = state.startedAt = timestamp; }, + addUUID(uuid) { + messageuuids.add(uuid); + }, + + hasUUID(uuid) { + return messageuuids.has(uuid); + }, + isTransferStarted() { return this.transferID !== undefined && this.startedAt !== undefined; }, From 6058822ad024bdee6c72f8844c8393c48a49f37b Mon Sep 17 00:00:00 2001 From: Bassel Date: Tue, 23 May 2023 03:49:04 +0300 Subject: [PATCH 02/22] refactoring and adding check to pull as well --- .../src/strapi/providers/utils.ts | 27 ++++++++----------- .../src/strapi/remote/handlers/abstract.ts | 12 +++++---- .../src/strapi/remote/handlers/pull.ts | 6 +++++ .../src/strapi/remote/handlers/push.ts | 6 ++--- .../src/strapi/remote/handlers/utils.ts | 16 ++++++----- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index 37e4975f10..c421a94d96 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -35,14 +35,12 @@ export const createDispatcher = (ws: WebSocket) => { const uuid = randomUUID(); const payload = { ...message, uuid }; let numberOfTimesMessageWasSent = 0; - let responseWasReceived = false; if (options.attachTransfer) { Object.assign(payload, { transferID: state.transfer?.id }); } const stringifiedPayload = JSON.stringify(payload); - ws.send(stringifiedPayload, (error) => { if (error) { reject(error); @@ -50,28 +48,26 @@ export const createDispatcher = (ws: WebSocket) => { }); const sendPeriodically = () => { - setTimeout(() => { - if (!responseWasReceived) { - if (numberOfTimesMessageWasSent < 5) { - numberOfTimesMessageWasSent += 1; - ws.send(stringifiedPayload); - sendPeriodically(); - } else { - reject(new ProviderError('error', 'Request timed out')); + if (numberOfTimesMessageWasSent < 5) { + numberOfTimesMessageWasSent += 1; + ws.send(stringifiedPayload, (error) => { + if (error) { + reject(error); } - } - }, 50000); + }); + } else { + reject(new ProviderError('error', 'Request timed out')); + } }; + const interval = setInterval(sendPeriodically, 30000); const onResponse = (raw: RawData) => { - responseWasReceived = true; - numberOfTimesMessageWasSent = 0; const response: server.Message = JSON.parse(raw.toString()); if (response.uuid === uuid) { + clearInterval(interval); if (response.error) { return reject(new ProviderError('error', response.error.message)); } - resolve(response.data ?? null); } else { ws.once('message', onResponse); @@ -79,7 +75,6 @@ export const createDispatcher = (ws: WebSocket) => { }; ws.once('message', onResponse); - sendPeriodically(); }); }; diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts index b85ce85f4e..59f5b1e8d0 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts @@ -8,6 +8,11 @@ type BufferLike = Parameters[0]; export interface TransferState { id?: string; startedAt?: number; + response?: { + uuid?: string; + e?: Error | null; + data?: unknown; + }; } export interface Handler { @@ -19,11 +24,8 @@ export interface Handler { get startedAt(): TransferState['startedAt']; set startedAt(id: TransferState['startedAt']); - // Add message UUIDs - addUUID(uuid: string): void; - - // Check if a message UUID exists - hasUUID(uuid: string): boolean; + get response(): TransferState['response']; + set response(response: TransferState['response']); /** * Returns whether a transfer is currently in progress or not diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts index ce1a2ce3b7..cb95283caf 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts @@ -70,6 +70,12 @@ export const createPullController = handlerControllerFactory { handleWSUpgrade(wss, ctx, (ws) => { const state: TransferState = { id: undefined }; - const messageuuids = new Set(); const prototype: Handler = { // Transfer ID @@ -100,12 +99,12 @@ export const handlerControllerFactory = state.startedAt = timestamp; }, - addUUID(uuid) { - messageuuids.add(uuid); + get response() { + return state.response; }, - hasUUID(uuid) { - return messageuuids.has(uuid); + set response(response) { + state.response = response; }, isTransferStarted() { @@ -135,7 +134,11 @@ export const handlerControllerFactory = reject(new Error('Missing uuid for this message')); return; } - + this.response = { + uuid, + data, + e, + }; const payload = JSON.stringify({ uuid, data: data ?? null, @@ -208,6 +211,7 @@ export const handlerControllerFactory = cleanup() { this.transferID = undefined; this.startedAt = undefined; + this.response = undefined; }, teardown() { From 066258b3fb229a9b46a2c72fc9e67a901ffcda7d Mon Sep 17 00:00:00 2001 From: Bassel Date: Tue, 23 May 2023 13:28:52 +0300 Subject: [PATCH 03/22] fix unit test --- .../strapi/providers/remote-destination/__tests__/utils.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts index ac31b0f872..25c8c53992 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts @@ -3,6 +3,7 @@ import { TRANSFER_PATH } from '../../../remote/constants'; import { CommandMessage } from '../../../../../types/remote/protocol/client'; import { createDispatcher } from '../../utils'; +jest.useFakeTimers(); jest.mock('ws', () => ({ WebSocket: jest.fn().mockImplementation(() => { return { From 69e63dd00d7b3f9dd61a4ab13ad6409a633db2a5 Mon Sep 17 00:00:00 2001 From: ammi1378 Date: Mon, 22 May 2023 07:07:36 +0330 Subject: [PATCH 04/22] Fix: Avoid replacing entire generatedDocumentation components --- .../plugins/documentation/server/services/documentation.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/plugins/documentation/server/services/documentation.js b/packages/plugins/documentation/server/services/documentation.js index b0cc279f84..24108b89fe 100755 --- a/packages/plugins/documentation/server/services/documentation.js +++ b/packages/plugins/documentation/server/services/documentation.js @@ -182,9 +182,7 @@ module.exports = ({ strapi }) => { generatedDocumentation = produce(generatedDocumentation, (draft) => { if (generatedSchemas) { - draft.components = { - schemas: { ...draft.components.schemas, ...generatedSchemas }, - }; + draft.components.schemas = { ...draft.components.schemas, ...generatedSchemas }; } if (newApiPath) { From f5115403d1401da3ed0d91b5f886c9c8c01dcd05 Mon Sep 17 00:00:00 2001 From: Josh <37798644+joshuaellis@users.noreply.github.com> Date: Tue, 23 May 2023 08:43:35 +0100 Subject: [PATCH 05/22] feat: introduce useClipboard hook to remove dependency (#16751) --- .../helper-plugin/hooks/use-callback-ref.mdx | 2 +- .../helper-plugin/hooks/use-clipboard.mdx | 37 +++++++++++++ packages/admin-test-utils/src/environment.ts | 13 +++++ .../NpmPackageCard/InstallPluginButton.js | 20 ++++--- .../components/Tokens/TokenBox/index.js | 54 ++++++++++--------- .../components/MagicLink/MagicLinkWrapper.js | 20 +++---- packages/core/admin/package.json | 1 - packages/core/admin/webpack.alias.js | 1 - .../src/hooks/tests/useClipboard.test.js | 23 ++++++++ .../helper-plugin/src/hooks/useClipboard.js | 33 ++++++++++++ packages/core/helper-plugin/src/index.js | 1 + .../src/components/CopyLinkButton/index.js | 46 ++++++++-------- .../tests/EditAssetDialog.test.js | 24 ++++----- .../EditAssetDialog/tests/index.test.js | 8 +-- packages/core/upload/package.json | 1 - packages/plugins/documentation/package.json | 1 - yarn.lock | 31 ----------- 17 files changed, 200 insertions(+), 116 deletions(-) create mode 100644 docs/docs/docs/01-core/helper-plugin/hooks/use-clipboard.mdx create mode 100644 packages/core/helper-plugin/src/hooks/tests/useClipboard.test.js create mode 100644 packages/core/helper-plugin/src/hooks/useClipboard.js diff --git a/docs/docs/docs/01-core/helper-plugin/hooks/use-callback-ref.mdx b/docs/docs/docs/01-core/helper-plugin/hooks/use-callback-ref.mdx index a468cbe06d..9caa02681d 100644 --- a/docs/docs/docs/01-core/helper-plugin/hooks/use-callback-ref.mdx +++ b/docs/docs/docs/01-core/helper-plugin/hooks/use-callback-ref.mdx @@ -17,7 +17,7 @@ Borrowed from [`@radix-ui/react-use-callback-ref`](https://www.npmjs.com/package ## Usage ```jsx -import { useCallbackRef } from 'path/to/hooks'; +import { useCallbackRef } from '@strapi/helper-plugin'; const MyComponent = ({ callbackFromSomewhere }) => { const mySafeCallback = useCallbackRef(callbackFromSomewhere); diff --git a/docs/docs/docs/01-core/helper-plugin/hooks/use-clipboard.mdx b/docs/docs/docs/01-core/helper-plugin/hooks/use-clipboard.mdx new file mode 100644 index 0000000000..e873b84b9d --- /dev/null +++ b/docs/docs/docs/01-core/helper-plugin/hooks/use-clipboard.mdx @@ -0,0 +1,37 @@ +--- +title: useClipboard +description: API reference for the useClipboard hook in Strapi +tags: + - hooks + - helper-plugin +--- + +A small abstraction around the [`navigation.clipboard`](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard) API. +Currently we only expose a `copy` method which abstracts the `writeText` method of the clipboard API. + +## Usage + +```jsx +import { useClipboard } from '@strapi/helper-plugin'; + +const MyComponent = () => { + const { copy } = useClipboard(); + const handleClick = async () => { + const didCopy = await copy('hello world'); + + if (didCopy) { + alert('copied!'); + } + }; + + return ; +}; +``` + +## Typescript + +```ts +function useClipboard(): { + copy: (text: string) => Promise; +}; +``` diff --git a/packages/admin-test-utils/src/environment.ts b/packages/admin-test-utils/src/environment.ts index 43ab46155a..b7371934db 100644 --- a/packages/admin-test-utils/src/environment.ts +++ b/packages/admin-test-utils/src/environment.ts @@ -201,3 +201,16 @@ Object.defineProperty(window, 'PointerEvent', { window.HTMLElement.prototype.scrollIntoView = jest.fn(); window.HTMLElement.prototype.releasePointerCapture = jest.fn(); window.HTMLElement.prototype.hasPointerCapture = jest.fn(); + +/* ------------------------------------------------------------------------------------------------- + * Navigator + * -----------------------------------------------------------------------------------------------*/ + +/** + * Navigator is a large object so we only mock the properties we need. + */ +Object.assign(navigator, { + clipboard: { + writeText: jest.fn(), + }, +}); diff --git a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js index 5586d727ca..6450c627fe 100644 --- a/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js +++ b/packages/core/admin/admin/src/pages/MarketplacePage/components/NpmPackageCard/InstallPluginButton.js @@ -1,7 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; -import { useNotification, useTracking } from '@strapi/helper-plugin'; +import { useNotification, useTracking, useClipboard } from '@strapi/helper-plugin'; import { Box, Icon, Typography } from '@strapi/design-system'; import { Check } from '@strapi/icons'; import CardButton from './CardButton'; @@ -17,14 +17,18 @@ const InstallPluginButton = ({ const toggleNotification = useNotification(); const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); + const { copy } = useClipboard(); - const handleCopy = () => { - navigator.clipboard.writeText(commandToCopy); - trackUsage('willInstallPlugin'); - toggleNotification({ - type: 'success', - message: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' }, - }); + const handleCopy = async () => { + const didCopy = await copy(commandToCopy); + + if (didCopy) { + trackUsage('willInstallPlugin'); + toggleNotification({ + type: 'success', + message: { id: 'admin.pages.MarketPlacePage.plugin.copy.success' }, + }); + } }; // Already installed diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js index 96ac5571aa..62b24d4ff2 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/Tokens/TokenBox/index.js @@ -1,44 +1,46 @@ -import React, { useRef } from 'react'; +import React from 'react'; import { useIntl } from 'react-intl'; -import { ContentBox, useNotification, useTracking } from '@strapi/helper-plugin'; +import { ContentBox, useNotification, useTracking, useClipboard } from '@strapi/helper-plugin'; import { IconButton } from '@strapi/design-system'; import { Duplicate, Key } from '@strapi/icons'; import PropTypes from 'prop-types'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; const TokenBox = ({ token, tokenType }) => { const { formatMessage } = useIntl(); const toggleNotification = useNotification(); const { trackUsage } = useTracking(); - const trackUsageRef = useRef(trackUsage); + + const { copy } = useClipboard(); + + const handleClick = (token) => async () => { + const didCopy = await copy(token); + + if (didCopy) { + trackUsage.current('didCopyTokenKey', { + tokenType, + }); + toggleNotification({ + type: 'success', + message: { id: 'Settings.tokens.notification.copied' }, + }); + } + }; return ( - { - trackUsageRef.current('didCopyTokenKey', { - tokenType, - }); - toggleNotification({ - type: 'success', - message: { id: 'Settings.tokens.notification.copied' }, - }); - }} - text={token} - > - } - style={{ padding: 0, height: '1rem' }} - /> - + } + style={{ padding: 0, height: '1rem' }} + /> ) } diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js index 1804db476c..3e9d3667df 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Users/components/MagicLink/MagicLinkWrapper.js @@ -1,30 +1,32 @@ import React from 'react'; import PropTypes from 'prop-types'; import { IconButton } from '@strapi/design-system'; -import { useNotification, ContentBox } from '@strapi/helper-plugin'; +import { useNotification, ContentBox, useClipboard } from '@strapi/helper-plugin'; import { Duplicate } from '@strapi/icons'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; import { useIntl } from 'react-intl'; const MagicLinkWrapper = ({ children, target }) => { const toggleNotification = useNotification(); const { formatMessage } = useIntl(); - - const handleCopy = () => { - toggleNotification({ type: 'info', message: { id: 'notification.link-copied' } }); - }; + const { copy } = useClipboard(); const copyLabel = formatMessage({ id: 'app.component.CopyToClipboard.label', defaultMessage: 'Copy to clipboard', }); + const handleClick = async () => { + const didCopy = await copy(target); + + if (didCopy) { + toggleNotification({ type: 'info', message: { id: 'notification.link-copied' } }); + } + }; + return ( - } /> - + } onClick={handleClick} /> } title={target} titleEllipsis diff --git a/packages/core/admin/package.json b/packages/core/admin/package.json index fb9dac2844..5c820e4deb 100644 --- a/packages/core/admin/package.json +++ b/packages/core/admin/package.json @@ -110,7 +110,6 @@ "prop-types": "^15.7.2", "qs": "6.11.1", "react": "^17.0.2", - "react-copy-to-clipboard": "^5.1.0", "react-dnd": "15.1.2", "react-dnd-html5-backend": "15.1.3", "react-dom": "^17.0.2", diff --git a/packages/core/admin/webpack.alias.js b/packages/core/admin/webpack.alias.js index 0df0edff41..072f5285e2 100644 --- a/packages/core/admin/webpack.alias.js +++ b/packages/core/admin/webpack.alias.js @@ -14,7 +14,6 @@ const aliasExactMatch = [ 'qs', 'lodash', 'react', - 'react-copy-to-clipboard', 'react-dnd', 'react-dnd-html5-backend', 'react-dom', diff --git a/packages/core/helper-plugin/src/hooks/tests/useClipboard.test.js b/packages/core/helper-plugin/src/hooks/tests/useClipboard.test.js new file mode 100644 index 0000000000..21220205fc --- /dev/null +++ b/packages/core/helper-plugin/src/hooks/tests/useClipboard.test.js @@ -0,0 +1,23 @@ +import { renderHook } from '@testing-library/react-hooks'; + +import { useClipboard } from '../useClipboard'; + +describe('useClipboard', () => { + it('should return false if the value passed to the function is not a string or number', async () => { + const { result } = renderHook(() => useClipboard()); + + expect(await result.current.copy({})).toBe(false); + }); + + it('should return false if the value passed to copy is an empty string', async () => { + const { result } = renderHook(() => useClipboard()); + + expect(await result.current.copy('')).toBe(false); + }); + + it('should return true if the copy was successful', async () => { + const { result } = renderHook(() => useClipboard()); + + expect(await result.current.copy('test')).toBe(true); + }); +}); diff --git a/packages/core/helper-plugin/src/hooks/useClipboard.js b/packages/core/helper-plugin/src/hooks/useClipboard.js new file mode 100644 index 0000000000..086d76bf39 --- /dev/null +++ b/packages/core/helper-plugin/src/hooks/useClipboard.js @@ -0,0 +1,33 @@ +import { useCallback } from 'react'; + +export const useClipboard = () => { + const copy = useCallback(async (value) => { + try { + // only strings and numbers casted to strings can be copied to clipboard + if (typeof value !== 'string' && typeof value !== 'number') { + throw new Error(`Cannot copy typeof ${typeof value} to clipboard, must be a string`); + } + // empty strings are also considered invalid + else if (value === '') { + throw new Error(`Cannot copy empty string to clipboard.`); + } + + const stringifiedValue = value.toString(); + + await navigator.clipboard.writeText(stringifiedValue); + + return true; + } catch (error) { + /** + * Realistically this isn't useful in production as there's nothing the user can do. + */ + if (process.env.NODE_ENV === 'development') { + console.warn('Copy failed', error); + } + + return false; + } + }, []); + + return { copy }; +}; diff --git a/packages/core/helper-plugin/src/index.js b/packages/core/helper-plugin/src/index.js index 5e0bb5f9e4..d8042ac0c0 100644 --- a/packages/core/helper-plugin/src/index.js +++ b/packages/core/helper-plugin/src/index.js @@ -67,6 +67,7 @@ export * from './hooks/useAPIErrorHandler'; export { useFilter } from './hooks/useFilter'; export { useCollator } from './hooks/useCollator'; export { useCallbackRef } from './hooks/useCallbackRef'; +export { useClipboard } from './hooks/useClipboard'; export { default as useQueryParams } from './hooks/useQueryParams'; export { default as useRBAC } from './hooks/useRBAC'; diff --git a/packages/core/upload/admin/src/components/CopyLinkButton/index.js b/packages/core/upload/admin/src/components/CopyLinkButton/index.js index d4f6a2e2e5..49f5758297 100644 --- a/packages/core/upload/admin/src/components/CopyLinkButton/index.js +++ b/packages/core/upload/admin/src/components/CopyLinkButton/index.js @@ -2,37 +2,39 @@ import React from 'react'; import PropTypes from 'prop-types'; import { useIntl } from 'react-intl'; import { IconButton } from '@strapi/design-system'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; -import { useNotification } from '@strapi/helper-plugin'; +import { useNotification, useClipboard } from '@strapi/helper-plugin'; import { Link as LinkIcon } from '@strapi/icons'; import getTrad from '../../utils/getTrad'; export const CopyLinkButton = ({ url }) => { const toggleNotification = useNotification(); const { formatMessage } = useIntl(); + const { copy } = useClipboard(); + + const handleClick = async () => { + const didCopy = await copy(url); + + if (didCopy) { + toggleNotification({ + type: 'success', + message: { + id: 'notification.link-copied', + defaultMessage: 'Link copied into the clipboard', + }, + }); + } + }; return ( - { - toggleNotification({ - type: 'success', - message: { - id: 'notification.link-copied', - defaultMessage: 'Link copied into the clipboard', - }, - }); - }} + - - - - + + ); }; diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js index db8ad2d8bd..88fd903df1 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/EditAssetDialog.test.js @@ -3,7 +3,7 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { NotificationsProvider, TrackingProvider } from '@strapi/helper-plugin'; +import { NotificationsProvider } from '@strapi/helper-plugin'; import { EditAssetDialog } from '../index'; import en from '../../../translations/en.json'; import { downloadFile } from '../../../utils/downloadFile'; @@ -93,15 +93,13 @@ const queryClient = new QueryClient({ const renderCompo = (props = { canUpdate: true, canCopyLink: true, canDownload: true }) => render( - - - - - - - - - + + + + + + + , { container: document.getElementById('app') } ); @@ -183,12 +181,14 @@ describe('', () => { expect(screen.queryByLabelText('Delete')).not.toBeInTheDocument(); }); - it('copies the link and shows a notification when pressing "Copy link" and the user has permission to copy', () => { + it('copies the link and shows a notification when pressing "Copy link" and the user has permission to copy', async () => { renderCompo({ canUpdate: false, canCopyLink: true, canDownload: false }); fireEvent.click(screen.getByLabelText('Copy link')); - expect(screen.getByText('Link copied into the clipboard')).toBeInTheDocument(); + await waitFor(() => + expect(screen.getByText('Link copied into the clipboard')).toBeInTheDocument() + ); }); it('hides the copy link button when the user is not allowed to see it', () => { diff --git a/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js b/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js index 8911893275..1b80e2edce 100644 --- a/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js +++ b/packages/core/upload/admin/src/components/EditAssetDialog/tests/index.test.js @@ -5,7 +5,7 @@ */ import React from 'react'; -import { render, screen, fireEvent } from '@testing-library/react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import { ThemeProvider, lightTheme } from '@strapi/design-system'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; @@ -145,12 +145,14 @@ describe('', () => { expect(screen.getByText('Are you sure you want to delete this?')).toBeVisible(); }); - it('copies the link and shows a notification when pressing "Copy link"', () => { + it('copies the link and shows a notification when pressing "Copy link"', async () => { renderCompo(); fireEvent.click(screen.getByLabelText('Copy link')); - expect(screen.getByText('Link copied into the clipboard')).toBeInTheDocument(); + await waitFor(() => + expect(screen.getByText('Link copied into the clipboard')).toBeInTheDocument() + ); }); it('downloads the file when pressing "Download"', () => { diff --git a/packages/core/upload/package.json b/packages/core/upload/package.json index 0cf3d9b96c..ae0032ed7d 100644 --- a/packages/core/upload/package.json +++ b/packages/core/upload/package.json @@ -43,7 +43,6 @@ "mime-types": "2.1.35", "prop-types": "^15.7.2", "qs": "6.11.1", - "react-copy-to-clipboard": "^5.1.0", "react-dnd": "15.1.2", "react-helmet": "^6.1.0", "react-intl": "6.4.1", diff --git a/packages/plugins/documentation/package.json b/packages/plugins/documentation/package.json index 1d755e32f4..f23680755b 100644 --- a/packages/plugins/documentation/package.json +++ b/packages/plugins/documentation/package.json @@ -43,7 +43,6 @@ "lodash": "4.17.21", "path-to-regexp": "6.2.1", "pluralize": "8.0.0", - "react-copy-to-clipboard": "^5.1.0", "react-helmet": "^6.1.0", "react-intl": "6.4.1", "react-query": "3.24.3", diff --git a/yarn.lock b/yarn.lock index 9197099629..b81e07885d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7825,7 +7825,6 @@ __metadata: prop-types: ^15.7.2 qs: 6.11.1 react: ^17.0.2 - react-copy-to-clipboard: ^5.1.0 react-dnd: 15.1.2 react-dnd-html5-backend: 15.1.3 react-dom: ^17.0.2 @@ -8187,7 +8186,6 @@ __metadata: path-to-regexp: 6.2.1 pluralize: 8.0.0 react: ^17.0.2 - react-copy-to-clipboard: ^5.1.0 react-dom: ^17.0.2 react-helmet: ^6.1.0 react-intl: 6.4.1 @@ -8354,7 +8352,6 @@ __metadata: prop-types: ^15.7.2 qs: 6.11.1 react: ^17.0.2 - react-copy-to-clipboard: ^5.1.0 react-dnd: 15.1.2 react-dom: ^17.0.2 react-helmet: ^6.1.0 @@ -14412,15 +14409,6 @@ __metadata: languageName: node linkType: hard -"copy-to-clipboard@npm:^3.3.1": - version: 3.3.1 - resolution: "copy-to-clipboard@npm:3.3.1" - dependencies: - toggle-selection: ^1.0.6 - checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 - languageName: node - linkType: hard - "copy-to@npm:^2.0.1": version: 2.0.1 resolution: "copy-to@npm:2.0.1" @@ -27844,18 +27832,6 @@ __metadata: languageName: node linkType: hard -"react-copy-to-clipboard@npm:^5.1.0": - version: 5.1.0 - resolution: "react-copy-to-clipboard@npm:5.1.0" - dependencies: - copy-to-clipboard: ^3.3.1 - prop-types: ^15.8.1 - peerDependencies: - react: ^15.3.0 || 16 || 17 || 18 - checksum: f00a4551b9b63c944a041a6ab46af5ef20ba1106b3bc25173e7ef9bffbfba17a613368682ab8820cfe8d4b3acc5335cd9ce20229145bcc1e6aa8d1db04c512e5 - languageName: node - linkType: hard - "react-dnd-html5-backend@npm:15.1.3": version: 15.1.3 resolution: "react-dnd-html5-backend@npm:15.1.3" @@ -31702,13 +31678,6 @@ __metadata: languageName: node linkType: hard -"toggle-selection@npm:^1.0.6": - version: 1.0.6 - resolution: "toggle-selection@npm:1.0.6" - checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" From 7ac19b76f5326a136330536f49a36a163e84af6c Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Mon, 22 May 2023 12:20:52 +0200 Subject: [PATCH 06/22] Chore: Refactor useModels to use react-query rather than useReducer --- packages/core/admin/admin/src/hooks/index.js | 2 +- .../admin/src/hooks/useContentTypes/index.js | 1 + .../tests/useContentTypes.test.js | 142 ++++++++++++++++++ .../hooks/useContentTypes/useContentTypes.js | 45 ++++++ .../admin/admin/src/hooks/useModels/index.js | 58 ------- .../admin/src/hooks/useModels/reducer.js | 45 ------ .../src/hooks/useModels/tests/reducer.test.js | 132 ---------------- .../admin/admin/src/pages/HomePage/index.js | 4 +- .../src/pages/HomePage/tests/index.test.js | 14 +- .../pages/Webhooks/EditView/index.js | 4 +- 10 files changed, 199 insertions(+), 248 deletions(-) create mode 100644 packages/core/admin/admin/src/hooks/useContentTypes/index.js create mode 100644 packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js create mode 100644 packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js delete mode 100644 packages/core/admin/admin/src/hooks/useModels/index.js delete mode 100644 packages/core/admin/admin/src/hooks/useModels/reducer.js delete mode 100644 packages/core/admin/admin/src/hooks/useModels/tests/reducer.test.js diff --git a/packages/core/admin/admin/src/hooks/index.js b/packages/core/admin/admin/src/hooks/index.js index b71c0840ad..c740cd9d75 100644 --- a/packages/core/admin/admin/src/hooks/index.js +++ b/packages/core/admin/admin/src/hooks/index.js @@ -1,5 +1,5 @@ export { default as useConfigurations } from './useConfigurations'; -export { default as useModels } from './useModels'; +export { useContentTypes } from './useContentTypes'; export { default as useFetchPermissionsLayout } from './useFetchPermissionsLayout'; export { default as useFetchRole } from './useFetchRole'; export { default as useMenu } from './useMenu'; diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/index.js b/packages/core/admin/admin/src/hooks/useContentTypes/index.js new file mode 100644 index 0000000000..c550533769 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useContentTypes/index.js @@ -0,0 +1 @@ +export * from './useContentTypes'; diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js b/packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js new file mode 100644 index 0000000000..5ad751afa3 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js @@ -0,0 +1,142 @@ +import * as React from 'react'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; +import { renderHook } from '@testing-library/react-hooks'; +import { IntlProvider } from 'react-intl'; +import { QueryClient, QueryClientProvider } from 'react-query'; + +import { useContentTypes } from '../useContentTypes'; + +jest.mock('@strapi/helper-plugin', () => ({ + ...jest.requireActual('@strapi/helper-plugin'), + useNotification: jest.fn().mockReturnValue(jest.fn), +})); + +const server = setupServer( + rest.get('*/content-manager/content-types', (req, res, ctx) => + res( + ctx.json({ + data: [ + { + uid: 'admin::collectionType', + isDisplayed: true, + apiID: 'permission', + kind: 'collectionType', + }, + + { + uid: 'admin::collectionTypeNotDispalyed', + isDisplayed: false, + apiID: 'permission', + kind: 'collectionType', + }, + + { + uid: 'admin::singleType', + isDisplayed: true, + kind: 'singleType', + }, + + { + uid: 'admin::singleTypeNotDispalyed', + isDisplayed: false, + kind: 'singleType', + }, + ], + }) + ) + ), + rest.get('*/content-manager/components', (req, res, ctx) => + res( + ctx.json({ + data: [ + { + uid: 'basic.relation', + isDisplayed: true, + apiID: 'relation', + category: 'basic', + info: { + displayName: 'Relation', + }, + options: {}, + attributes: { + id: { + type: 'integer', + }, + categories: { + type: 'relation', + relation: 'oneToMany', + target: 'api::category.category', + targetModel: 'api::category.category', + relationType: 'oneToMany', + }, + }, + }, + ], + }) + ) + ) +); + +const setup = () => + renderHook(() => useContentTypes(), { + wrapper({ children }) { + const client = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, + }); + + return ( + + + {children} + + + ); + }, + }); + +describe('useContentTypes', () => { + beforeAll(() => { + server.listen(); + }); + + afterAll(() => { + server.close(); + }); + + test('fetches models and content-types', async () => { + const { result, waitFor } = setup(); + + expect(result.current.isLoading).toBe(true); + + expect(result.current.components).toStrictEqual([]); + expect(result.current.singleTypes).toStrictEqual([]); + expect(result.current.collectionTypes).toStrictEqual([]); + + await waitFor(() => expect(result.current.isLoading).toBe(false)); + + expect(result.current.components).toStrictEqual( + expect.arrayContaining([ + expect.objectContaining({ + uid: 'basic.relation', + }), + ]) + ); + + expect(result.current.collectionTypes).toStrictEqual([ + expect.objectContaining({ + uid: 'admin::collectionType', + }), + ]); + + expect(result.current.singleTypes).toStrictEqual([ + expect.objectContaining({ + uid: 'admin::singleType', + }), + ]); + }); +}); diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js b/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js new file mode 100644 index 0000000000..52ba5fe4fb --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js @@ -0,0 +1,45 @@ +import { useAPIErrorHandler, useFetchClient, useNotification } from '@strapi/helper-plugin'; +import { useQueries } from 'react-query'; + +export function useContentTypes() { + const { get } = useFetchClient(); + const { formatAPIError } = useAPIErrorHandler(); + const toggleNotification = useNotification(); + const queries = useQueries( + ['components', 'content-types'].map((type) => { + return { + queryKey: ['content-manager', type], + async queryFn() { + const { + data: { data }, + } = await get(`/content-manager/${type}`); + + return data; + }, + onError(error) { + toggleNotification({ + type: 'warning', + message: formatAPIError(error), + }); + }, + }; + }) + ); + + const [components, contentTypes] = queries; + const isLoading = components.isLoading || contentTypes.isLoading; + + const collectionTypes = (contentTypes?.data ?? []).filter( + (contentType) => contentType.kind === 'collectionType' && contentType.isDisplayed + ); + const singleTypes = (contentTypes?.data ?? []).filter( + (contentType) => contentType.kind !== 'collectionType' && contentType.isDisplayed + ); + + return { + isLoading, + components: components?.data ?? [], + collectionTypes, + singleTypes, + }; +} diff --git a/packages/core/admin/admin/src/hooks/useModels/index.js b/packages/core/admin/admin/src/hooks/useModels/index.js deleted file mode 100644 index 7d631ac661..0000000000 --- a/packages/core/admin/admin/src/hooks/useModels/index.js +++ /dev/null @@ -1,58 +0,0 @@ -import { useReducer, useEffect, useCallback } from 'react'; -import { useFetchClient, useNotification } from '@strapi/helper-plugin'; -import reducer, { initialState } from './reducer'; - -/** - * TODO: refactor this to not use the `useReducer` hook, - * it's not really necessary. Also use `useQuery`? - */ -const useModels = () => { - const toggleNotification = useNotification(); - const [state, dispatch] = useReducer(reducer, initialState); - - const { get } = useFetchClient(); - - const fetchModels = useCallback(async () => { - dispatch({ - type: 'GET_MODELS', - }); - - try { - const [ - { - data: { data: components }, - }, - { - data: { data: contentTypes }, - }, - ] = await Promise.all( - ['components', 'content-types'].map((endPoint) => get(`/content-manager/${endPoint}`)) - ); - - dispatch({ - type: 'GET_MODELS_SUCCEDED', - contentTypes, - components, - }); - } catch (err) { - dispatch({ - type: 'GET_MODELS_ERROR', - }); - toggleNotification({ - type: 'warning', - message: { id: 'notification.error' }, - }); - } - }, [toggleNotification, get]); - - useEffect(() => { - fetchModels(); - }, [fetchModels]); - - return { - ...state, - getData: fetchModels, - }; -}; - -export default useModels; diff --git a/packages/core/admin/admin/src/hooks/useModels/reducer.js b/packages/core/admin/admin/src/hooks/useModels/reducer.js deleted file mode 100644 index 4c1aac530a..0000000000 --- a/packages/core/admin/admin/src/hooks/useModels/reducer.js +++ /dev/null @@ -1,45 +0,0 @@ -/* eslint-disable consistent-return */ -import produce from 'immer'; - -export const initialState = { - collectionTypes: [], - components: [], - isLoading: true, - singleTypes: [], -}; - -const reducer = (state, action) => - produce(state, (draftState) => { - switch (action.type) { - case 'GET_MODELS': { - draftState.collectionTypes = initialState.collectionTypes; - draftState.singleTypes = initialState.singleTypes; - draftState.components = initialState.components; - draftState.isLoading = true; - break; - } - case 'GET_MODELS_ERROR': { - draftState.collectionTypes = initialState.collectionTypes; - draftState.singleTypes = initialState.singleTypes; - draftState.components = initialState.components; - draftState.isLoading = false; - break; - } - case 'GET_MODELS_SUCCEDED': { - const getContentTypeByKind = (kind) => - action.contentTypes.filter( - (contentType) => contentType.isDisplayed && contentType.kind === kind - ); - - draftState.isLoading = false; - draftState.collectionTypes = getContentTypeByKind('collectionType'); - draftState.singleTypes = getContentTypeByKind('singleType'); - draftState.components = action.components; - break; - } - default: - return draftState; - } - }); - -export default reducer; diff --git a/packages/core/admin/admin/src/hooks/useModels/tests/reducer.test.js b/packages/core/admin/admin/src/hooks/useModels/tests/reducer.test.js deleted file mode 100644 index 22a4f5005a..0000000000 --- a/packages/core/admin/admin/src/hooks/useModels/tests/reducer.test.js +++ /dev/null @@ -1,132 +0,0 @@ -import reducer from '../reducer'; - -describe('ADMIN | HOOKS | useModels | reducer', () => { - describe('DEFAULT_ACTION', () => { - it('should return the initialState', () => { - const state = { - test: true, - }; - - expect(reducer(state, {})).toEqual(state); - }); - }); - - describe('GET_MODELS_ERROR', () => { - it('should set isLoading to false is an error occured', () => { - const action = { - type: 'GET_MODELS_ERROR', - }; - const initialState = { - collectionTypes: [], - components: [], - singleTypes: [ - { - uid: 'app.homepage', - isDisplayed: true, - kind: 'singleType', - }, - ], - isLoading: true, - }; - const expected = { - collectionTypes: [], - components: [], - singleTypes: [], - isLoading: false, - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); - - describe('GET_MODELS', () => { - it('should set isLoading to true to start getting the data', () => { - const action = { - type: 'GET_MODELS', - }; - const initialState = { - collectionTypes: [ - { - uid: 'app.category', - isDisplayed: true, - kind: 'collectionType', - }, - { - uid: 'app.category', - isDisplayed: true, - kind: 'collectionType', - }, - ], - singleTypes: [ - { - uid: 'app.homepage', - isDisplayed: true, - kind: 'singleType', - }, - ], - components: [{}], - isLoading: false, - }; - const expected = { - collectionTypes: [], - components: [], - singleTypes: [], - isLoading: true, - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); - - describe('GET_MODELS_SUCCEDED', () => { - it('should return the state with the collectionTypes and singleTypes', () => { - const action = { - type: 'GET_MODELS_SUCCEDED', - contentTypes: [ - { - uid: 'app.homepage', - isDisplayed: true, - kind: 'singleType', - }, - { - uid: 'permissions.role', - isDisplayed: false, - kind: 'collectionType', - }, - { - uid: 'app.category', - isDisplayed: true, - kind: 'collectionType', - }, - ], - components: [], - }; - const initialState = { - collectionTypes: [], - components: [], - singleTypes: [], - isLoading: true, - }; - const expected = { - collectionTypes: [ - { - uid: 'app.category', - isDisplayed: true, - kind: 'collectionType', - }, - ], - singleTypes: [ - { - uid: 'app.homepage', - isDisplayed: true, - kind: 'singleType', - }, - ], - components: [], - isLoading: false, - }; - - expect(reducer(initialState, action)).toEqual(expected); - }); - }); -}); diff --git a/packages/core/admin/admin/src/pages/HomePage/index.js b/packages/core/admin/admin/src/pages/HomePage/index.js index 72836a42a6..125efe811f 100644 --- a/packages/core/admin/admin/src/pages/HomePage/index.js +++ b/packages/core/admin/admin/src/pages/HomePage/index.js @@ -12,7 +12,7 @@ import { LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin'; import { Layout, Main, Box, Grid, GridItem } from '@strapi/design-system'; import useLicenseLimitNotification from 'ee_else_ce/hooks/useLicenseLimitNotification'; import cornerOrnamentPath from './assets/corner-ornament.svg'; -import { useModels } from '../../hooks'; +import { useContentTypes } from '../../hooks/useContentTypes'; import isGuidedTourCompleted from '../../components/GuidedTour/utils/isGuidedTourCompleted'; import GuidedTourHomepage from '../../components/GuidedTour/Homepage'; import SocialLinks from './SocialLinks'; @@ -31,7 +31,7 @@ const LogoContainer = styled(Box)` const HomePage = () => { // Temporary until we develop the menu API - const { collectionTypes, singleTypes, isLoading: isLoadingForModels } = useModels(); + const { collectionTypes, singleTypes, isLoading: isLoadingForModels } = useContentTypes(); const { guidedTourState, isGuidedTourVisible, isSkipped } = useGuidedTour(); useLicenseLimitNotification(); diff --git a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js index 40ff2e2a4d..54d8e495ac 100644 --- a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js @@ -6,7 +6,7 @@ import { IntlProvider } from 'react-intl'; import { useAppInfo } from '@strapi/helper-plugin'; import { ThemeProvider, lightTheme } from '@strapi/design-system'; import HomePage from '../index'; -import { useModels } from '../../../hooks'; +import { useContentTypes } from '../../../hooks/useContentTypes'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), @@ -30,9 +30,7 @@ jest.mock('@strapi/helper-plugin', () => ({ })), })); -jest.mock('../../../hooks', () => ({ - useModels: jest.fn(), -})); +jest.mock('../../../hooks/useContentTypes'); jest.mock('ee_else_ce/hooks/useLicenseLimitNotification', () => ({ __esModule: true, @@ -52,11 +50,11 @@ const App = ( ); describe('Homepage', () => { - useModels.mockImplementation(() => ({ + useContentTypes.mockReturnValue({ isLoading: false, collectionTypes: [], singleTypes: [], - })); + }); test('should render all homepage links', () => { const { getByRole } = render(App); @@ -113,11 +111,11 @@ describe('Homepage', () => { }); it('should display particular text and action when there are collectionTypes and singletypes', () => { - useModels.mockImplementation(() => ({ + useContentTypes.mockReturnValue({ isLoading: false, collectionTypes: [{ uuid: 102 }], singleTypes: [{ isDisplayed: true }], - })); + }); const { getByText, getByRole } = render(App); diff --git a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js index 0153c6a883..1b03a04e15 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js @@ -14,7 +14,7 @@ import { import { Main } from '@strapi/design-system'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { useHistory, useRouteMatch } from 'react-router-dom'; -import { useModels } from '../../../../../hooks'; +import { useContentTypes } from '../../../../../hooks/useContentTypes'; import WebhookForm from './components/WebhookForm'; import cleanData from './utils/formatData'; @@ -27,7 +27,7 @@ const EditView = () => { const { lockApp, unlockApp } = useOverlayBlocker(); const toggleNotification = useNotification(); const queryClient = useQueryClient(); - const { isLoading: isLoadingForModels, collectionTypes } = useModels(); + const { isLoading: isLoadingForModels, collectionTypes } = useContentTypes(); const { put, get, post } = useFetchClient(); const isCreating = id === 'create'; From bd934f448418a429a3cf58246c40cac35150af3e Mon Sep 17 00:00:00 2001 From: Josh <37798644+joshuaellis@users.noreply.github.com> Date: Tue, 23 May 2023 12:56:42 +0100 Subject: [PATCH 07/22] chore: add file extension to remove-dist-tag workflow (#16808) --- .github/workflows/remove-dist-tag.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/remove-dist-tag.yml b/.github/workflows/remove-dist-tag.yml index 4afe14fa67..1c504c5135 100644 --- a/.github/workflows/remove-dist-tag.yml +++ b/.github/workflows/remove-dist-tag.yml @@ -23,6 +23,6 @@ jobs: with: node-version: 16 - run: yarn - - run: ./scripts/remove-dist-tag + - run: ./scripts/remove-dist-tag.sh env: DIST_TAG: ${{ github.event.inputs.dist-tag }} From 6524692bc0c89c0d02e934e94880e3c2563b0292 Mon Sep 17 00:00:00 2001 From: Bassel Date: Tue, 23 May 2023 16:12:18 +0300 Subject: [PATCH 08/22] save schemas in memory and use them instead of calling destination provider --- packages/core/data-transfer/src/engine/index.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/core/data-transfer/src/engine/index.ts b/packages/core/data-transfer/src/engine/index.ts index cfdc52a2a2..e0bf6f700c 100644 --- a/packages/core/data-transfer/src/engine/index.ts +++ b/packages/core/data-transfer/src/engine/index.ts @@ -95,6 +95,8 @@ class TransferEngine< #metadata: { source?: IMetadata; destination?: IMetadata } = {}; + #schema: { source?: SchemaMap; destination?: SchemaMap } = {}; + // Progress of the current stage progress: { // metrics on the progress such as size and record count @@ -623,12 +625,12 @@ class TransferEngine< ); } - const sourceSchemas = (await this.sourceProvider.getSchemas?.()) as SchemaMap; - const destinationSchemas = (await this.destinationProvider.getSchemas?.()) as SchemaMap; + this.#schema.source = (await this.sourceProvider.getSchemas?.()) as SchemaMap; + this.#schema.destination = (await this.destinationProvider.getSchemas?.()) as SchemaMap; try { - if (sourceSchemas && destinationSchemas) { - this.#assertSchemasMatching(sourceSchemas, destinationSchemas); + if (this.#schema.source && this.#schema.destination) { + this.#assertSchemasMatching(this.#schema.source, this.#schema.destination); } } catch (error) { // if this is a schema matching error, allow handlers to resolve it @@ -760,7 +762,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (entity: IEntity, _encoding, callback) => { - const schemas = await this.destinationProvider.getSchemas?.(); + const schemas = this.#schema.destination; if (!schemas) { return callback(null, entity); @@ -801,7 +803,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (link: ILink, _encoding, callback) => { - const schemas = await this.destinationProvider.getSchemas?.(); + const schemas = this.#schema.destination; if (!schemas) { return callback(null, link); From e10a524e2647183203dea1a6a01ec1f524a4fb69 Mon Sep 17 00:00:00 2001 From: Bassel Date: Tue, 23 May 2023 16:45:27 +0300 Subject: [PATCH 09/22] creating getSchemas in the engine to manage caching schemas --- .../core/data-transfer/src/engine/index.ts | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/core/data-transfer/src/engine/index.ts b/packages/core/data-transfer/src/engine/index.ts index e0bf6f700c..6bc2898110 100644 --- a/packages/core/data-transfer/src/engine/index.ts +++ b/packages/core/data-transfer/src/engine/index.ts @@ -614,6 +614,21 @@ class TransferEngine< } } + async #getSchemas() { + if (this.#schema.source) { + this.#schema.source = (await this.sourceProvider.getSchemas?.()) as SchemaMap; + } + + if (this.#schema.destination) { + this.#schema.destination = (await this.destinationProvider.getSchemas?.()) as SchemaMap; + } + + return { + sourceSchema: this.#schema.source, + destinationSchema: this.#schema.destination, + }; + } + async integrityCheck() { const sourceMetadata = await this.sourceProvider.getMetadata(); const destinationMetadata = await this.destinationProvider.getMetadata(); @@ -625,12 +640,11 @@ class TransferEngine< ); } - this.#schema.source = (await this.sourceProvider.getSchemas?.()) as SchemaMap; - this.#schema.destination = (await this.destinationProvider.getSchemas?.()) as SchemaMap; + const { sourceSchema, destinationSchema } = await this.#getSchemas(); try { - if (this.#schema.source && this.#schema.destination) { - this.#assertSchemasMatching(this.#schema.source, this.#schema.destination); + if (sourceSchema && destinationSchema) { + this.#assertSchemasMatching(sourceSchema, destinationSchema); } } catch (error) { // if this is a schema matching error, allow handlers to resolve it @@ -762,7 +776,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (entity: IEntity, _encoding, callback) => { - const schemas = this.#schema.destination; + const { destinationSchema: schemas } = await this.#getSchemas(); if (!schemas) { return callback(null, entity); @@ -803,7 +817,7 @@ class TransferEngine< new Transform({ objectMode: true, transform: async (link: ILink, _encoding, callback) => { - const schemas = this.#schema.destination; + const { destinationSchema: schemas } = await this.#getSchemas(); if (!schemas) { return callback(null, link); From fead30ef5ce462796035e8e49b4a583830f4f9c7 Mon Sep 17 00:00:00 2001 From: Bassel Kanso Date: Tue, 23 May 2023 16:56:33 +0300 Subject: [PATCH 10/22] Update packages/core/data-transfer/src/engine/index.ts Co-authored-by: Ben Irvin --- packages/core/data-transfer/src/engine/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/data-transfer/src/engine/index.ts b/packages/core/data-transfer/src/engine/index.ts index 6bc2898110..73f8b599c8 100644 --- a/packages/core/data-transfer/src/engine/index.ts +++ b/packages/core/data-transfer/src/engine/index.ts @@ -615,11 +615,11 @@ class TransferEngine< } async #getSchemas() { - if (this.#schema.source) { + if (!this.#schema.source) { this.#schema.source = (await this.sourceProvider.getSchemas?.()) as SchemaMap; } - if (this.#schema.destination) { + if (!this.#schema.destination) { this.#schema.destination = (await this.destinationProvider.getSchemas?.()) as SchemaMap; } From ed873b91613b7cae5d6c97531c1b99b0b272c408 Mon Sep 17 00:00:00 2001 From: Boegie19 Date: Fri, 19 May 2023 19:09:22 +0200 Subject: [PATCH 11/22] fix template data.db location --- .../resources/templates/database-templates/js/database.template | 2 +- .../resources/templates/database-templates/ts/database.template | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/generators/app/src/resources/templates/database-templates/js/database.template b/packages/generators/app/src/resources/templates/database-templates/js/database.template index 08cfc683e0..63a17c3f5a 100644 --- a/packages/generators/app/src/resources/templates/database-templates/js/database.template +++ b/packages/generators/app/src/resources/templates/database-templates/js/database.template @@ -75,7 +75,7 @@ module.exports = ({ env }) => { filename: path.join( __dirname, '..', - env('DATABASE_FILENAME', 'data.db') + env('DATABASE_FILENAME', '.tmp/data.db') ), }, useNullAsDefault: true, diff --git a/packages/generators/app/src/resources/templates/database-templates/ts/database.template b/packages/generators/app/src/resources/templates/database-templates/ts/database.template index 638492157e..baa13b193c 100644 --- a/packages/generators/app/src/resources/templates/database-templates/ts/database.template +++ b/packages/generators/app/src/resources/templates/database-templates/ts/database.template @@ -76,7 +76,7 @@ export default ({ env }) => { __dirname, '..', '..', - env('DATABASE_FILENAME', 'data.db') + env('DATABASE_FILENAME', '.tmp/data.db') ), }, useNullAsDefault: true, From cb8a34d4270710763f2c2c331b2c4c8593d33a54 Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Tue, 23 May 2023 14:02:20 +0200 Subject: [PATCH 12/22] Chore: Add auto-mock for useContentTypes --- .../admin/src/hooks/useContentTypes/__mocks__/index.js | 6 ++++++ .../tests/{useContentTypes.test.js => index.test.js} | 2 +- .../admin/src/hooks/useContentTypes/useContentTypes.js | 2 ++ packages/core/admin/admin/src/pages/HomePage/index.js | 1 + .../core/admin/admin/src/pages/HomePage/tests/index.test.js | 6 ------ 5 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 packages/core/admin/admin/src/hooks/useContentTypes/__mocks__/index.js rename packages/core/admin/admin/src/hooks/useContentTypes/tests/{useContentTypes.test.js => index.test.js} (98%) diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/__mocks__/index.js b/packages/core/admin/admin/src/hooks/useContentTypes/__mocks__/index.js new file mode 100644 index 0000000000..3154ccf4a9 --- /dev/null +++ b/packages/core/admin/admin/src/hooks/useContentTypes/__mocks__/index.js @@ -0,0 +1,6 @@ +export const useContentTypes = jest.fn().mockReturnValue({ + isLoading: false, + components: [], + collectionTypes: [], + singleTypes: [], +}); diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js b/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js similarity index 98% rename from packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js rename to packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js index 5ad751afa3..2918a38fd8 100644 --- a/packages/core/admin/admin/src/hooks/useContentTypes/tests/useContentTypes.test.js +++ b/packages/core/admin/admin/src/hooks/useContentTypes/tests/index.test.js @@ -5,7 +5,7 @@ import { renderHook } from '@testing-library/react-hooks'; import { IntlProvider } from 'react-intl'; import { QueryClient, QueryClientProvider } from 'react-query'; -import { useContentTypes } from '../useContentTypes'; +import { useContentTypes } from '..'; jest.mock('@strapi/helper-plugin', () => ({ ...jest.requireActual('@strapi/helper-plugin'), diff --git a/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js b/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js index 52ba5fe4fb..c39607e027 100644 --- a/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js +++ b/packages/core/admin/admin/src/hooks/useContentTypes/useContentTypes.js @@ -2,6 +2,8 @@ import { useAPIErrorHandler, useFetchClient, useNotification } from '@strapi/hel import { useQueries } from 'react-query'; export function useContentTypes() { + console.log('----> read'); + const { get } = useFetchClient(); const { formatAPIError } = useAPIErrorHandler(); const toggleNotification = useNotification(); diff --git a/packages/core/admin/admin/src/pages/HomePage/index.js b/packages/core/admin/admin/src/pages/HomePage/index.js index 125efe811f..af0b084c04 100644 --- a/packages/core/admin/admin/src/pages/HomePage/index.js +++ b/packages/core/admin/admin/src/pages/HomePage/index.js @@ -11,6 +11,7 @@ import { useHistory } from 'react-router-dom'; import { LoadingIndicatorPage, useGuidedTour } from '@strapi/helper-plugin'; import { Layout, Main, Box, Grid, GridItem } from '@strapi/design-system'; import useLicenseLimitNotification from 'ee_else_ce/hooks/useLicenseLimitNotification'; + import cornerOrnamentPath from './assets/corner-ornament.svg'; import { useContentTypes } from '../../hooks/useContentTypes'; import isGuidedTourCompleted from '../../components/GuidedTour/utils/isGuidedTourCompleted'; diff --git a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js index 54d8e495ac..d7628fa989 100644 --- a/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js +++ b/packages/core/admin/admin/src/pages/HomePage/tests/index.test.js @@ -50,12 +50,6 @@ const App = ( ); describe('Homepage', () => { - useContentTypes.mockReturnValue({ - isLoading: false, - collectionTypes: [], - singleTypes: [], - }); - test('should render all homepage links', () => { const { getByRole } = render(App); expect(getByRole('link', { name: /we are hiring/i })).toBeInTheDocument(); From 55999b5cdab08ac77f365f83efa2a34e3146d13e Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Tue, 23 May 2023 14:04:48 +0200 Subject: [PATCH 13/22] Chore: Add docs for useContentTypes hook --- .../hooks/use-content-types.mdx | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 docs/docs/docs/01-core/content-manager/hooks/use-content-types.mdx diff --git a/docs/docs/docs/01-core/content-manager/hooks/use-content-types.mdx b/docs/docs/docs/01-core/content-manager/hooks/use-content-types.mdx new file mode 100644 index 0000000000..ec0f64a28d --- /dev/null +++ b/docs/docs/docs/01-core/content-manager/hooks/use-content-types.mdx @@ -0,0 +1,25 @@ +--- +title: useContentTypes +description: API reference for the useContentTypes hook in Strapi's Content Manager +tags: + - content-manager + - hooks + - fetch + - content-types + - components +--- + +An abstraction around `react-query` to fetch content-types and components. It returns the raw API response +for components. `collectionTypes` and `singleTypes` are filtered by `isDisplayed=true`. + +## Usage + +```jsx +import { useContentTypes } from 'path/to/hooks'; + +const MyComponent = () => { + const { isLoading, collectionTypes, singleTypes, components } = useContentTypes(); + + return (/* ... */); +}; +``` From f08e4c28e1a2b97238caba66aeefba745b5318db Mon Sep 17 00:00:00 2001 From: Gustav Hansen Date: Tue, 23 May 2023 21:17:13 +0200 Subject: [PATCH 14/22] Chore: Make jest ignore __mocks__ folders --- jest-preset.front.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jest-preset.front.js b/jest-preset.front.js index ecd061c335..85f4dcdb09 100644 --- a/jest-preset.front.js +++ b/jest-preset.front.js @@ -30,6 +30,8 @@ const moduleNameMapper = { module.exports = { rootDir: __dirname, moduleNameMapper, + /* Tells jest to ignore duplicated manual mock files, such as index.js */ + modulePathIgnorePatterns: ['.*__mocks__.*'], testPathIgnorePatterns: ['node_modules/', '__tests__'], globalSetup: '@strapi/admin-test-utils/global-setup', setupFiles: ['@strapi/admin-test-utils/environment'], From 17b464408e5ca9de236249413a6ba4272865d9b7 Mon Sep 17 00:00:00 2001 From: Convly Date: Wed, 24 May 2023 16:54:28 +0200 Subject: [PATCH 15/22] v4.10.6 --- .github/actions/check-pr-status/package.json | 2 +- examples/getstarted/package.json | 22 +++++++-------- examples/kitchensink-ts/package.json | 8 +++--- examples/kitchensink/package.json | 10 +++---- lerna.json | 2 +- packages/admin-test-utils/package.json | 6 ++-- packages/cli/create-strapi-app/package.json | 8 +++--- .../cli/create-strapi-starter/package.json | 8 +++--- packages/core/admin/package.json | 16 +++++------ packages/core/content-manager/package.json | 4 +-- .../core/content-type-builder/package.json | 10 +++---- packages/core/data-transfer/package.json | 6 ++-- packages/core/database/package.json | 2 +- packages/core/email/package.json | 8 +++--- packages/core/helper-plugin/package.json | 2 +- packages/core/permissions/package.json | 4 +-- packages/core/strapi/package.json | 28 +++++++++---------- packages/core/upload/package.json | 8 +++--- packages/core/utils/package.json | 2 +- packages/generators/app/package.json | 2 +- packages/generators/generators/package.json | 10 +++---- packages/plugins/color-picker/package.json | 4 +-- packages/plugins/documentation/package.json | 6 ++-- packages/plugins/graphql/package.json | 6 ++-- packages/plugins/i18n/package.json | 6 ++-- packages/plugins/sentry/package.json | 4 +-- .../plugins/users-permissions/package.json | 6 ++-- .../providers/audit-logs-local/package.json | 6 ++-- .../providers/email-amazon-ses/package.json | 8 +++--- packages/providers/email-mailgun/package.json | 8 +++--- .../providers/email-nodemailer/package.json | 6 ++-- .../providers/email-sendgrid/package.json | 8 +++--- .../providers/email-sendmail/package.json | 8 +++--- packages/providers/upload-aws-s3/package.json | 6 ++-- .../providers/upload-cloudinary/package.json | 8 +++--- packages/providers/upload-local/package.json | 8 +++--- packages/utils/api-tests/package.json | 2 +- .../babel-plugin-switch-ee-ce/package.json | 2 +- .../utils/eslint-config-custom/package.json | 2 +- packages/utils/logger/package.json | 6 ++-- packages/utils/tsconfig/package.json | 2 +- packages/utils/typescript/package.json | 2 +- scripts/front/package.json | 2 +- 43 files changed, 142 insertions(+), 142 deletions(-) diff --git a/.github/actions/check-pr-status/package.json b/.github/actions/check-pr-status/package.json index 38ac8703b1..c69100db87 100644 --- a/.github/actions/check-pr-status/package.json +++ b/.github/actions/check-pr-status/package.json @@ -1,6 +1,6 @@ { "name": "check-pr-status", - "version": "4.10.5", + "version": "4.10.6", "main": "dist/index.js", "license": "MIT", "private": true, diff --git a/examples/getstarted/package.json b/examples/getstarted/package.json index 79081fb371..b706ebfaf6 100644 --- a/examples/getstarted/package.json +++ b/examples/getstarted/package.json @@ -1,7 +1,7 @@ { "name": "getstarted", "private": true, - "version": "4.10.5", + "version": "4.10.6", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -13,16 +13,16 @@ }, "dependencies": { "@strapi/icons": "1.7.7", - "@strapi/plugin-color-picker": "4.10.5", - "@strapi/plugin-documentation": "4.10.5", - "@strapi/plugin-graphql": "4.10.5", - "@strapi/plugin-i18n": "4.10.5", - "@strapi/plugin-sentry": "4.10.5", - "@strapi/plugin-users-permissions": "4.10.5", - "@strapi/provider-email-mailgun": "4.10.5", - "@strapi/provider-upload-aws-s3": "4.10.5", - "@strapi/provider-upload-cloudinary": "4.10.5", - "@strapi/strapi": "4.10.5", + "@strapi/plugin-color-picker": "4.10.6", + "@strapi/plugin-documentation": "4.10.6", + "@strapi/plugin-graphql": "4.10.6", + "@strapi/plugin-i18n": "4.10.6", + "@strapi/plugin-sentry": "4.10.6", + "@strapi/plugin-users-permissions": "4.10.6", + "@strapi/provider-email-mailgun": "4.10.6", + "@strapi/provider-upload-aws-s3": "4.10.6", + "@strapi/provider-upload-cloudinary": "4.10.6", + "@strapi/strapi": "4.10.6", "better-sqlite3": "8.3.0", "lodash": "4.17.21", "mysql": "2.18.1", diff --git a/examples/kitchensink-ts/package.json b/examples/kitchensink-ts/package.json index bcb34091a6..3cb2e8702d 100644 --- a/examples/kitchensink-ts/package.json +++ b/examples/kitchensink-ts/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink-ts", "private": true, - "version": "4.10.5", + "version": "4.10.6", "description": "A Strapi application", "scripts": { "develop": "strapi develop", @@ -10,9 +10,9 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/plugin-i18n": "4.10.5", - "@strapi/plugin-users-permissions": "4.10.5", - "@strapi/strapi": "4.10.5", + "@strapi/plugin-i18n": "4.10.6", + "@strapi/plugin-users-permissions": "4.10.6", + "@strapi/strapi": "4.10.6", "better-sqlite3": "8.3.0" }, "author": { diff --git a/examples/kitchensink/package.json b/examples/kitchensink/package.json index cfe0fc89a8..1c659f9afb 100644 --- a/examples/kitchensink/package.json +++ b/examples/kitchensink/package.json @@ -1,7 +1,7 @@ { "name": "kitchensink", "private": true, - "version": "4.10.5", + "version": "4.10.6", "description": "A Strapi application.", "scripts": { "develop": "strapi develop", @@ -12,10 +12,10 @@ "strapi": "strapi" }, "dependencies": { - "@strapi/provider-email-mailgun": "4.10.5", - "@strapi/provider-upload-aws-s3": "4.10.5", - "@strapi/provider-upload-cloudinary": "4.10.5", - "@strapi/strapi": "4.10.5", + "@strapi/provider-email-mailgun": "4.10.6", + "@strapi/provider-upload-aws-s3": "4.10.6", + "@strapi/provider-upload-cloudinary": "4.10.6", + "@strapi/strapi": "4.10.6", "lodash": "4.17.21", "mysql": "2.18.1", "passport-google-oauth2": "0.2.0", diff --git a/lerna.json b/lerna.json index 6c7c8ff7bd..2bcaf6dd44 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "4.10.5", + "version": "4.10.6", "packages": ["packages/*", "examples/*"], "npmClient": "yarn", "useWorkspaces": true, diff --git a/packages/admin-test-utils/package.json b/packages/admin-test-utils/package.json index 0f5a30088c..5a9221d6b9 100644 --- a/packages/admin-test-utils/package.json +++ b/packages/admin-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/admin-test-utils", - "version": "4.10.5", + "version": "4.10.6", "private": true, "description": "Test utilities for the Strapi administration panel", "license": "MIT", @@ -42,9 +42,9 @@ "whatwg-fetch": "3.6.2" }, "devDependencies": { - "eslint-config-custom": "4.10.5", + "eslint-config-custom": "4.10.6", "redux": "^4.2.1", - "tsconfig": "4.10.5" + "tsconfig": "4.10.6" }, "peerDependencies": { "redux": "^4.2.1" diff --git a/packages/cli/create-strapi-app/package.json b/packages/cli/create-strapi-app/package.json index 060b56f469..858ddbcce5 100644 --- a/packages/cli/create-strapi-app/package.json +++ b/packages/cli/create-strapi-app/package.json @@ -1,9 +1,9 @@ { "name": "create-strapi-app", - "version": "4.10.5", + "version": "4.10.6", "description": "Generate a new Strapi application.", "dependencies": { - "@strapi/generate-new": "4.10.5", + "@strapi/generate-new": "4.10.6", "commander": "8.3.0", "inquirer": "8.2.5" }, @@ -49,8 +49,8 @@ "lint": "run -T eslint ." }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/cli/create-strapi-starter/package.json b/packages/cli/create-strapi-starter/package.json index 253a936feb..169c5313d5 100644 --- a/packages/cli/create-strapi-starter/package.json +++ b/packages/cli/create-strapi-starter/package.json @@ -1,6 +1,6 @@ { "name": "create-strapi-starter", - "version": "4.10.5", + "version": "4.10.6", "description": "Generate a new Strapi application.", "keywords": [ "create-strapi-starter", @@ -44,7 +44,7 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/generate-new": "4.10.5", + "@strapi/generate-new": "4.10.6", "chalk": "4.1.2", "ci-info": "3.8.0", "commander": "8.3.0", @@ -54,8 +54,8 @@ "ora": "5.4.1" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/core/admin/package.json b/packages/core/admin/package.json index 5c820e4deb..9dd9428fea 100644 --- a/packages/core/admin/package.json +++ b/packages/core/admin/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/admin", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi Admin", "repository": { "type": "git", @@ -48,15 +48,15 @@ "@casl/ability": "^5.4.3", "@fingerprintjs/fingerprintjs": "3.4.1", "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", - "@strapi/babel-plugin-switch-ee-ce": "4.10.5", - "@strapi/data-transfer": "4.10.5", + "@strapi/babel-plugin-switch-ee-ce": "4.10.6", + "@strapi/data-transfer": "4.10.6", "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/permissions": "4.10.5", - "@strapi/provider-audit-logs-local": "4.10.5", - "@strapi/typescript-utils": "4.10.5", - "@strapi/utils": "4.10.5", + "@strapi/permissions": "4.10.6", + "@strapi/provider-audit-logs-local": "4.10.6", + "@strapi/typescript-utils": "4.10.6", + "@strapi/utils": "4.10.6", "axios": "1.3.4", "babel-loader": "^9.1.2", "babel-plugin-styled-components": "2.1.1", diff --git a/packages/core/content-manager/package.json b/packages/core/content-manager/package.json index b5208f4ac9..29202d7572 100644 --- a/packages/core/content-manager/package.json +++ b/packages/core/content-manager/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-content-manager", - "version": "4.10.5", + "version": "4.10.6", "description": "A powerful UI to easily manage your data.", "repository": { "type": "git", @@ -26,7 +26,7 @@ }, "dependencies": { "@sindresorhus/slugify": "1.1.0", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "lodash": "4.17.21" }, "engines": { diff --git a/packages/core/content-type-builder/package.json b/packages/core/content-type-builder/package.json index 551e0c892b..de0aab1dee 100644 --- a/packages/core/content-type-builder/package.json +++ b/packages/core/content-type-builder/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-content-type-builder", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi plugin to create content type", "repository": { "type": "git", @@ -31,10 +31,10 @@ "dependencies": { "@sindresorhus/slugify": "1.1.0", "@strapi/design-system": "1.7.7", - "@strapi/generators": "4.10.5", - "@strapi/helper-plugin": "4.10.5", + "@strapi/generators": "4.10.6", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "fs-extra": "10.0.0", "immer": "9.0.19", "lodash": "4.17.21", @@ -49,7 +49,7 @@ "yup": "^0.32.9" }, "devDependencies": { - "@strapi/admin": "4.10.5", + "@strapi/admin": "4.10.6", "@testing-library/react": "12.1.4", "@testing-library/react-hooks": "8.0.1", "history": "^4.9.0", diff --git a/packages/core/data-transfer/package.json b/packages/core/data-transfer/package.json index 5e8389110a..e493077320 100644 --- a/packages/core/data-transfer/package.json +++ b/packages/core/data-transfer/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/data-transfer", - "version": "4.10.5", + "version": "4.10.6", "description": "Data transfer capabilities for Strapi", "keywords": [ "strapi", @@ -40,8 +40,8 @@ "./dist" ], "dependencies": { - "@strapi/logger": "4.10.5", - "@strapi/strapi": "4.10.5", + "@strapi/logger": "4.10.6", + "@strapi/strapi": "4.10.6", "chalk": "4.1.2", "fs-extra": "10.0.0", "lodash": "4.17.21", diff --git a/packages/core/database/package.json b/packages/core/database/package.json index b118f249af..a33b7be852 100644 --- a/packages/core/database/package.json +++ b/packages/core/database/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/database", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi's database layer", "homepage": "https://strapi.io", "bugs": { diff --git a/packages/core/email/package.json b/packages/core/email/package.json index 2bc13e46d8..e575615735 100644 --- a/packages/core/email/package.json +++ b/packages/core/email/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-email", - "version": "4.10.5", + "version": "4.10.6", "description": "Easily configure your Strapi application to send emails.", "repository": { "type": "git", @@ -29,15 +29,15 @@ "dependencies": { "@strapi/design-system": "1.7.7", "@strapi/icons": "1.7.7", - "@strapi/provider-email-sendmail": "4.10.5", - "@strapi/utils": "4.10.5", + "@strapi/provider-email-sendmail": "4.10.6", + "@strapi/utils": "4.10.6", "lodash": "4.17.21", "prop-types": "^15.7.2", "react-intl": "6.4.1", "yup": "^0.32.9" }, "devDependencies": { - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@testing-library/react": "12.1.4", "msw": "1.2.1", "react": "^17.0.2", diff --git a/packages/core/helper-plugin/package.json b/packages/core/helper-plugin/package.json index 4ecfc824ef..f02fc08470 100644 --- a/packages/core/helper-plugin/package.json +++ b/packages/core/helper-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/helper-plugin", - "version": "4.10.5", + "version": "4.10.6", "description": "Helper for Strapi plugins development", "repository": { "type": "git", diff --git a/packages/core/permissions/package.json b/packages/core/permissions/package.json index 573ba2902f..88f3829eb5 100644 --- a/packages/core/permissions/package.json +++ b/packages/core/permissions/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/permissions", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi's permission layer.", "repository": { "type": "git", @@ -27,7 +27,7 @@ }, "dependencies": { "@casl/ability": "5.4.4", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "lodash": "4.17.21", "sift": "16.0.1" }, diff --git a/packages/core/strapi/package.json b/packages/core/strapi/package.json index 137047d48a..9b66fbc09d 100644 --- a/packages/core/strapi/package.json +++ b/packages/core/strapi/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/strapi", - "version": "4.10.5", + "version": "4.10.6", "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite", "keywords": [ "strapi", @@ -81,19 +81,19 @@ "dependencies": { "@koa/cors": "3.4.3", "@koa/router": "10.1.1", - "@strapi/admin": "4.10.5", - "@strapi/data-transfer": "4.10.5", - "@strapi/database": "4.10.5", - "@strapi/generate-new": "4.10.5", - "@strapi/generators": "4.10.5", - "@strapi/logger": "4.10.5", - "@strapi/permissions": "4.10.5", - "@strapi/plugin-content-manager": "4.10.5", - "@strapi/plugin-content-type-builder": "4.10.5", - "@strapi/plugin-email": "4.10.5", - "@strapi/plugin-upload": "4.10.5", - "@strapi/typescript-utils": "4.10.5", - "@strapi/utils": "4.10.5", + "@strapi/admin": "4.10.6", + "@strapi/data-transfer": "4.10.6", + "@strapi/database": "4.10.6", + "@strapi/generate-new": "4.10.6", + "@strapi/generators": "4.10.6", + "@strapi/logger": "4.10.6", + "@strapi/permissions": "4.10.6", + "@strapi/plugin-content-manager": "4.10.6", + "@strapi/plugin-content-type-builder": "4.10.6", + "@strapi/plugin-email": "4.10.6", + "@strapi/plugin-upload": "4.10.6", + "@strapi/typescript-utils": "4.10.6", + "@strapi/utils": "4.10.6", "bcryptjs": "2.4.3", "boxen": "5.1.2", "chalk": "4.1.2", diff --git a/packages/core/upload/package.json b/packages/core/upload/package.json index ae0032ed7d..016542a6a9 100644 --- a/packages/core/upload/package.json +++ b/packages/core/upload/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-upload", - "version": "4.10.5", + "version": "4.10.6", "description": "Makes it easy to upload images and files to your Strapi Application.", "license": "SEE LICENSE IN LICENSE", "author": { @@ -26,10 +26,10 @@ }, "dependencies": { "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/provider-upload-local": "4.10.5", - "@strapi/utils": "4.10.5", + "@strapi/provider-upload-local": "4.10.6", + "@strapi/utils": "4.10.6", "axios": "1.3.4", "byte-size": "7.0.1", "cropperjs": "1.5.12", diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index 75f0628128..b11ab608e4 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/utils", - "version": "4.10.5", + "version": "4.10.6", "description": "Shared utilities for the Strapi packages", "keywords": [ "strapi", diff --git a/packages/generators/app/package.json b/packages/generators/app/package.json index 61f6f96bc0..1b530a09f6 100644 --- a/packages/generators/app/package.json +++ b/packages/generators/app/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/generate-new", - "version": "4.10.5", + "version": "4.10.6", "description": "Generate a new Strapi application.", "keywords": [ "generate", diff --git a/packages/generators/generators/package.json b/packages/generators/generators/package.json index d2a507abd0..1061d4ba2c 100644 --- a/packages/generators/generators/package.json +++ b/packages/generators/generators/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/generators", - "version": "4.10.5", + "version": "4.10.6", "description": "Interactive API generator.", "keywords": [ "strapi", @@ -45,8 +45,8 @@ }, "dependencies": { "@sindresorhus/slugify": "1.1.0", - "@strapi/typescript-utils": "4.10.5", - "@strapi/utils": "4.10.5", + "@strapi/typescript-utils": "4.10.6", + "@strapi/utils": "4.10.6", "chalk": "4.1.2", "copyfiles": "2.4.1", "fs-extra": "10.0.0", @@ -55,8 +55,8 @@ "pluralize": "8.0.0" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/plugins/color-picker/package.json b/packages/plugins/color-picker/package.json index 5626514eaa..d016dfdafa 100644 --- a/packages/plugins/color-picker/package.json +++ b/packages/plugins/color-picker/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-color-picker", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi maintained Custom Fields", "strapi": { "name": "color-picker", @@ -10,7 +10,7 @@ }, "dependencies": { "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", "prop-types": "^15.8.1", "react-colorful": "5.6.1", diff --git a/packages/plugins/documentation/package.json b/packages/plugins/documentation/package.json index f23680755b..219762100b 100644 --- a/packages/plugins/documentation/package.json +++ b/packages/plugins/documentation/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-documentation", - "version": "4.10.5", + "version": "4.10.6", "description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.", "repository": { "type": "git", @@ -31,9 +31,9 @@ }, "dependencies": { "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "bcryptjs": "2.4.3", "cheerio": "^1.0.0-rc.12", "formik": "2.2.9", diff --git a/packages/plugins/graphql/package.json b/packages/plugins/graphql/package.json index cb721db212..eb73c41283 100644 --- a/packages/plugins/graphql/package.json +++ b/packages/plugins/graphql/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-graphql", - "version": "4.10.5", + "version": "4.10.6", "description": "Adds GraphQL endpoint with default API methods.", "repository": { "type": "git", @@ -27,9 +27,9 @@ "@graphql-tools/schema": "8.5.1", "@graphql-tools/utils": "^8.13.1", "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "apollo-server-core": "3.11.1", "apollo-server-koa": "3.10.0", "glob": "^7.1.7", diff --git a/packages/plugins/i18n/package.json b/packages/plugins/i18n/package.json index 9f9f1d0c06..ba28e0e2fd 100644 --- a/packages/plugins/i18n/package.json +++ b/packages/plugins/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-i18n", - "version": "4.10.5", + "version": "4.10.6", "description": "This plugin enables to create, to read and to update content in different languages, both from the Admin Panel and from the API", "repository": { "type": "git", @@ -31,9 +31,9 @@ }, "dependencies": { "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "formik": "2.2.9", "immer": "9.0.19", "lodash": "4.17.21", diff --git a/packages/plugins/sentry/package.json b/packages/plugins/sentry/package.json index a37aad90db..936adc8ada 100644 --- a/packages/plugins/sentry/package.json +++ b/packages/plugins/sentry/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-sentry", - "version": "4.10.5", + "version": "4.10.6", "description": "Send Strapi error events to Sentry", "repository": { "type": "git", @@ -28,7 +28,7 @@ "dependencies": { "@sentry/node": "6.19.7", "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7" }, "devDependencies": { diff --git a/packages/plugins/users-permissions/package.json b/packages/plugins/users-permissions/package.json index c6686d9a92..57aa690e5c 100644 --- a/packages/plugins/users-permissions/package.json +++ b/packages/plugins/users-permissions/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/plugin-users-permissions", - "version": "4.10.5", + "version": "4.10.6", "description": "Protect your API with a full-authentication process based on JWT", "repository": { "type": "git", @@ -30,9 +30,9 @@ }, "dependencies": { "@strapi/design-system": "1.7.7", - "@strapi/helper-plugin": "4.10.5", + "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "bcryptjs": "2.4.3", "formik": "2.2.9", "grant-koa": "5.4.8", diff --git a/packages/providers/audit-logs-local/package.json b/packages/providers/audit-logs-local/package.json index 36347666c1..9143daaf62 100644 --- a/packages/providers/audit-logs-local/package.json +++ b/packages/providers/audit-logs-local/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-audit-logs-local", - "version": "4.10.5", + "version": "4.10.6", "description": "Local provider for strapi audit logs", "keywords": [ "audit-logs", @@ -41,8 +41,8 @@ "lint": "run -T eslint ." }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "peerDependencies": { "@strapi/strapi": "^4.9.0" diff --git a/packages/providers/email-amazon-ses/package.json b/packages/providers/email-amazon-ses/package.json index b02fe966ae..13694834a6 100644 --- a/packages/providers/email-amazon-ses/package.json +++ b/packages/providers/email-amazon-ses/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-amazon-ses", - "version": "4.10.5", + "version": "4.10.6", "description": "Amazon SES provider for strapi email", "keywords": [ "email", @@ -42,12 +42,12 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "node-ses": "^3.0.3" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-mailgun/package.json b/packages/providers/email-mailgun/package.json index 605f2e9a45..95aa4e630b 100644 --- a/packages/providers/email-mailgun/package.json +++ b/packages/providers/email-mailgun/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-mailgun", - "version": "4.10.5", + "version": "4.10.6", "description": "Mailgun provider for strapi email plugin", "keywords": [ "email", @@ -44,13 +44,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "form-data": "^4.0.0", "mailgun.js": "8.2.1" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-nodemailer/package.json b/packages/providers/email-nodemailer/package.json index c4d76be88f..6423b84a57 100644 --- a/packages/providers/email-nodemailer/package.json +++ b/packages/providers/email-nodemailer/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-nodemailer", - "version": "4.10.5", + "version": "4.10.6", "description": "Nodemailer provider for Strapi 3", "keywords": [ "strapi", @@ -60,8 +60,8 @@ }, "devDependencies": { "@types/nodemailer": "6.4.7", - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-sendgrid/package.json b/packages/providers/email-sendgrid/package.json index a9e7e2426c..8a56771b7e 100644 --- a/packages/providers/email-sendgrid/package.json +++ b/packages/providers/email-sendgrid/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-sendgrid", - "version": "4.10.5", + "version": "4.10.6", "description": "Sendgrid provider for strapi email", "keywords": [ "email", @@ -43,11 +43,11 @@ }, "dependencies": { "@sendgrid/mail": "7.7.0", - "@strapi/utils": "4.10.5" + "@strapi/utils": "4.10.6" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/email-sendmail/package.json b/packages/providers/email-sendmail/package.json index 67b28ad800..ec922e13dc 100644 --- a/packages/providers/email-sendmail/package.json +++ b/packages/providers/email-sendmail/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-email-sendmail", - "version": "4.10.5", + "version": "4.10.6", "description": "Sendmail provider for strapi email", "keywords": [ "email", @@ -41,13 +41,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "sendmail": "^1.6.1" }, "devDependencies": { "@types/sendmail": "1.4.4", - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-aws-s3/package.json b/packages/providers/upload-aws-s3/package.json index cbd914b7fb..f1abee7d89 100644 --- a/packages/providers/upload-aws-s3/package.json +++ b/packages/providers/upload-aws-s3/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-aws-s3", - "version": "4.10.5", + "version": "4.10.6", "description": "AWS S3 provider for strapi upload", "keywords": [ "upload", @@ -50,8 +50,8 @@ }, "devDependencies": { "@types/jest": "29.2.0", - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-cloudinary/package.json b/packages/providers/upload-cloudinary/package.json index a37e967eb9..30675fc639 100644 --- a/packages/providers/upload-cloudinary/package.json +++ b/packages/providers/upload-cloudinary/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-cloudinary", - "version": "4.10.5", + "version": "4.10.6", "description": "Cloudinary provider for strapi upload", "keywords": [ "upload", @@ -42,13 +42,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "cloudinary": "^1.37.0", "into-stream": "^5.1.0" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/providers/upload-local/package.json b/packages/providers/upload-local/package.json index 0d72f38011..527c813391 100644 --- a/packages/providers/upload-local/package.json +++ b/packages/providers/upload-local/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/provider-upload-local", - "version": "4.10.5", + "version": "4.10.6", "description": "Local provider for strapi upload", "keywords": [ "upload", @@ -43,13 +43,13 @@ "lint": "run -T eslint ." }, "dependencies": { - "@strapi/utils": "4.10.5", + "@strapi/utils": "4.10.6", "fs-extra": "10.0.0" }, "devDependencies": { "@types/jest": "29.2.0", - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/utils/api-tests/package.json b/packages/utils/api-tests/package.json index aae4a1ef8c..1ecad6624c 100644 --- a/packages/utils/api-tests/package.json +++ b/packages/utils/api-tests/package.json @@ -1,6 +1,6 @@ { "name": "api-tests", - "version": "4.10.5", + "version": "4.10.6", "private": true, "dependencies": { "dotenv": "14.2.0", diff --git a/packages/utils/babel-plugin-switch-ee-ce/package.json b/packages/utils/babel-plugin-switch-ee-ce/package.json index 7ffec3db77..9b460d6907 100644 --- a/packages/utils/babel-plugin-switch-ee-ce/package.json +++ b/packages/utils/babel-plugin-switch-ee-ce/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/babel-plugin-switch-ee-ce", - "version": "4.10.5", + "version": "4.10.6", "description": "Babel plugin to switch from CE to EE at runtime", "repository": "git://github.com/strapi/strapi.git", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/utils/eslint-config-custom/package.json b/packages/utils/eslint-config-custom/package.json index 963244d2d8..d4a2534b8f 100644 --- a/packages/utils/eslint-config-custom/package.json +++ b/packages/utils/eslint-config-custom/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-custom", "main": "index.js", - "version": "4.10.5", + "version": "4.10.6", "private": true } diff --git a/packages/utils/logger/package.json b/packages/utils/logger/package.json index 911eb64fb5..c2daa02891 100644 --- a/packages/utils/logger/package.json +++ b/packages/utils/logger/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/logger", - "version": "4.10.5", + "version": "4.10.6", "description": "Strapi's logger", "homepage": "https://strapi.io", "bugs": { @@ -41,8 +41,8 @@ "winston": "3.3.3" }, "devDependencies": { - "eslint-config-custom": "4.10.5", - "tsconfig": "4.10.5" + "eslint-config-custom": "4.10.6", + "tsconfig": "4.10.6" }, "engines": { "node": ">=14.19.1 <=18.x.x", diff --git a/packages/utils/tsconfig/package.json b/packages/utils/tsconfig/package.json index ba70a46b9d..bb957beae0 100644 --- a/packages/utils/tsconfig/package.json +++ b/packages/utils/tsconfig/package.json @@ -1,5 +1,5 @@ { "name": "tsconfig", - "version": "4.10.5", + "version": "4.10.6", "private": true } diff --git a/packages/utils/typescript/package.json b/packages/utils/typescript/package.json index 6f443e2ba8..96a8d48518 100644 --- a/packages/utils/typescript/package.json +++ b/packages/utils/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@strapi/typescript-utils", - "version": "4.10.5", + "version": "4.10.6", "description": "Typescript support for Strapi", "keywords": [ "strapi", diff --git a/scripts/front/package.json b/scripts/front/package.json index 5e06aafc3c..7e55f1579b 100644 --- a/scripts/front/package.json +++ b/scripts/front/package.json @@ -1,7 +1,7 @@ { "name": "scripts-front", "private": true, - "version": "4.10.5", + "version": "4.10.6", "scripts": { "test:front": "jest --config jest.config.front.js" } From 1283c27bc080309a15b06779f0160ac529fd26bb Mon Sep 17 00:00:00 2001 From: Convly Date: Wed, 24 May 2023 16:58:13 +0200 Subject: [PATCH 16/22] Update yarn.lock --- yarn.lock | 258 +++++++++++++++++++++++++++--------------------------- 1 file changed, 129 insertions(+), 129 deletions(-) diff --git a/yarn.lock b/yarn.lock index b81e07885d..6e53a274be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7734,17 +7734,17 @@ __metadata: dependencies: "@juggle/resize-observer": 3.4.0 "@testing-library/jest-dom": 5.16.5 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 jest-styled-components: 7.1.1 redux: ^4.2.1 - tsconfig: 4.10.5 + tsconfig: 4.10.6 whatwg-fetch: 3.6.2 peerDependencies: redux: ^4.2.1 languageName: unknown linkType: soft -"@strapi/admin@4.10.5, @strapi/admin@workspace:packages/core/admin": +"@strapi/admin@4.10.6, @strapi/admin@workspace:packages/core/admin": version: 0.0.0-use.local resolution: "@strapi/admin@workspace:packages/core/admin" dependencies: @@ -7756,15 +7756,15 @@ __metadata: "@casl/ability": ^5.4.3 "@fingerprintjs/fingerprintjs": 3.4.1 "@pmmmwh/react-refresh-webpack-plugin": 0.5.10 - "@strapi/babel-plugin-switch-ee-ce": 4.10.5 - "@strapi/data-transfer": 4.10.5 + "@strapi/babel-plugin-switch-ee-ce": 4.10.6 + "@strapi/data-transfer": 4.10.6 "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/permissions": 4.10.5 - "@strapi/provider-audit-logs-local": 4.10.5 - "@strapi/typescript-utils": 4.10.5 - "@strapi/utils": 4.10.5 + "@strapi/permissions": 4.10.6 + "@strapi/provider-audit-logs-local": 4.10.6 + "@strapi/typescript-utils": 4.10.6 + "@strapi/utils": 4.10.6 "@testing-library/dom": 8.19.0 "@testing-library/react": 12.1.4 "@testing-library/react-hooks": 8.0.1 @@ -7859,7 +7859,7 @@ __metadata: languageName: unknown linkType: soft -"@strapi/babel-plugin-switch-ee-ce@4.10.5, @strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce": +"@strapi/babel-plugin-switch-ee-ce@4.10.6, @strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce": version: 0.0.0-use.local resolution: "@strapi/babel-plugin-switch-ee-ce@workspace:packages/utils/babel-plugin-switch-ee-ce" dependencies: @@ -7877,12 +7877,12 @@ __metadata: languageName: unknown linkType: soft -"@strapi/data-transfer@4.10.5, @strapi/data-transfer@workspace:packages/core/data-transfer": +"@strapi/data-transfer@4.10.6, @strapi/data-transfer@workspace:packages/core/data-transfer": version: 0.0.0-use.local resolution: "@strapi/data-transfer@workspace:packages/core/data-transfer" dependencies: - "@strapi/logger": 4.10.5 - "@strapi/strapi": 4.10.5 + "@strapi/logger": 4.10.6 + "@strapi/strapi": 4.10.6 "@tsconfig/node16": 1.0.3 "@types/fs-extra": 9.0.13 "@types/jest": 29.2.0 @@ -7910,7 +7910,7 @@ __metadata: languageName: unknown linkType: soft -"@strapi/database@4.10.5, @strapi/database@workspace:packages/core/database": +"@strapi/database@4.10.6, @strapi/database@workspace:packages/core/database": version: 0.0.0-use.local resolution: "@strapi/database@workspace:packages/core/database" dependencies: @@ -7976,7 +7976,7 @@ __metadata: languageName: node linkType: hard -"@strapi/generate-new@4.10.5, @strapi/generate-new@workspace:packages/generators/app": +"@strapi/generate-new@4.10.6, @strapi/generate-new@workspace:packages/generators/app": version: 0.0.0-use.local resolution: "@strapi/generate-new@workspace:packages/generators/app" dependencies: @@ -7995,25 +7995,25 @@ __metadata: languageName: unknown linkType: soft -"@strapi/generators@4.10.5, @strapi/generators@workspace:packages/generators/generators": +"@strapi/generators@4.10.6, @strapi/generators@workspace:packages/generators/generators": version: 0.0.0-use.local resolution: "@strapi/generators@workspace:packages/generators/generators" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/typescript-utils": 4.10.5 - "@strapi/utils": 4.10.5 + "@strapi/typescript-utils": 4.10.6 + "@strapi/utils": 4.10.6 chalk: 4.1.2 copyfiles: 2.4.1 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 fs-extra: 10.0.0 node-plop: 0.26.3 plop: 2.7.6 pluralize: 8.0.0 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/helper-plugin@4.10.5, @strapi/helper-plugin@workspace:packages/core/helper-plugin": +"@strapi/helper-plugin@4.10.6, @strapi/helper-plugin@workspace:packages/core/helper-plugin": version: 0.0.0-use.local resolution: "@strapi/helper-plugin@workspace:packages/core/helper-plugin" dependencies: @@ -8070,34 +8070,34 @@ __metadata: languageName: node linkType: hard -"@strapi/logger@4.10.5, @strapi/logger@workspace:packages/utils/logger": +"@strapi/logger@4.10.6, @strapi/logger@workspace:packages/utils/logger": version: 0.0.0-use.local resolution: "@strapi/logger@workspace:packages/utils/logger" dependencies: - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 lodash: 4.17.21 - tsconfig: 4.10.5 + tsconfig: 4.10.6 winston: 3.3.3 languageName: unknown linkType: soft -"@strapi/permissions@4.10.5, @strapi/permissions@workspace:packages/core/permissions": +"@strapi/permissions@4.10.6, @strapi/permissions@workspace:packages/core/permissions": version: 0.0.0-use.local resolution: "@strapi/permissions@workspace:packages/core/permissions" dependencies: "@casl/ability": 5.4.4 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 lodash: 4.17.21 sift: 16.0.1 languageName: unknown linkType: soft -"@strapi/plugin-color-picker@4.10.5, @strapi/plugin-color-picker@workspace:packages/plugins/color-picker": +"@strapi/plugin-color-picker@4.10.6, @strapi/plugin-color-picker@workspace:packages/plugins/color-picker": version: 0.0.0-use.local resolution: "@strapi/plugin-color-picker@workspace:packages/plugins/color-picker" dependencies: "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 "@testing-library/react": 12.1.4 prop-types: ^15.8.1 @@ -8116,27 +8116,27 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-content-manager@4.10.5, @strapi/plugin-content-manager@workspace:packages/core/content-manager": +"@strapi/plugin-content-manager@4.10.6, @strapi/plugin-content-manager@workspace:packages/core/content-manager": version: 0.0.0-use.local resolution: "@strapi/plugin-content-manager@workspace:packages/core/content-manager" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 lodash: 4.17.21 languageName: unknown linkType: soft -"@strapi/plugin-content-type-builder@4.10.5, @strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder": +"@strapi/plugin-content-type-builder@4.10.6, @strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder": version: 0.0.0-use.local resolution: "@strapi/plugin-content-type-builder@workspace:packages/core/content-type-builder" dependencies: "@sindresorhus/slugify": 1.1.0 - "@strapi/admin": 4.10.5 + "@strapi/admin": 4.10.6 "@strapi/design-system": 1.7.7 - "@strapi/generators": 4.10.5 - "@strapi/helper-plugin": 4.10.5 + "@strapi/generators": 4.10.6 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@testing-library/react": 12.1.4 "@testing-library/react-hooks": 8.0.1 fs-extra: 10.0.0 @@ -8164,15 +8164,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-documentation@4.10.5, @strapi/plugin-documentation@workspace:packages/plugins/documentation": +"@strapi/plugin-documentation@4.10.6, @strapi/plugin-documentation@workspace:packages/plugins/documentation": version: 0.0.0-use.local resolution: "@strapi/plugin-documentation@workspace:packages/plugins/documentation" dependencies: "@apidevtools/swagger-parser": ^10.1.0 "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@testing-library/react": 12.1.4 bcryptjs: 2.4.3 cheerio: ^1.0.0-rc.12 @@ -8207,15 +8207,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-email@4.10.5, @strapi/plugin-email@workspace:packages/core/email": +"@strapi/plugin-email@4.10.6, @strapi/plugin-email@workspace:packages/core/email": version: 0.0.0-use.local resolution: "@strapi/plugin-email@workspace:packages/core/email" dependencies: "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/provider-email-sendmail": 4.10.5 - "@strapi/utils": 4.10.5 + "@strapi/provider-email-sendmail": 4.10.6 + "@strapi/utils": 4.10.6 "@testing-library/react": 12.1.4 lodash: 4.17.21 msw: 1.2.1 @@ -8234,16 +8234,16 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-graphql@4.10.5, @strapi/plugin-graphql@workspace:packages/plugins/graphql": +"@strapi/plugin-graphql@4.10.6, @strapi/plugin-graphql@workspace:packages/plugins/graphql": version: 0.0.0-use.local resolution: "@strapi/plugin-graphql@workspace:packages/plugins/graphql" dependencies: "@graphql-tools/schema": 8.5.1 "@graphql-tools/utils": ^8.13.1 "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 apollo-server-core: 3.11.1 apollo-server-koa: 3.10.0 cross-env: ^7.0.3 @@ -8271,14 +8271,14 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-i18n@4.10.5, @strapi/plugin-i18n@workspace:packages/plugins/i18n": +"@strapi/plugin-i18n@4.10.6, @strapi/plugin-i18n@workspace:packages/plugins/i18n": version: 0.0.0-use.local resolution: "@strapi/plugin-i18n@workspace:packages/plugins/i18n" dependencies: "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@testing-library/react": 12.1.4 formik: 2.2.9 immer: 9.0.19 @@ -8303,13 +8303,13 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-sentry@4.10.5, @strapi/plugin-sentry@workspace:packages/plugins/sentry": +"@strapi/plugin-sentry@4.10.6, @strapi/plugin-sentry@workspace:packages/plugins/sentry": version: 0.0.0-use.local resolution: "@strapi/plugin-sentry@workspace:packages/plugins/sentry" dependencies: "@sentry/node": 6.19.7 "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 react: ^17.0.2 react-dom: ^17.0.2 @@ -8324,15 +8324,15 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-upload@4.10.5, @strapi/plugin-upload@workspace:packages/core/upload": +"@strapi/plugin-upload@4.10.6, @strapi/plugin-upload@workspace:packages/core/upload": version: 0.0.0-use.local resolution: "@strapi/plugin-upload@workspace:packages/core/upload" dependencies: "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/provider-upload-local": 4.10.5 - "@strapi/utils": 4.10.5 + "@strapi/provider-upload-local": 4.10.6 + "@strapi/utils": 4.10.6 "@testing-library/dom": 8.19.0 "@testing-library/react": 12.1.4 "@testing-library/react-hooks": 8.0.1 @@ -8371,14 +8371,14 @@ __metadata: languageName: unknown linkType: soft -"@strapi/plugin-users-permissions@4.10.5, @strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions": +"@strapi/plugin-users-permissions@4.10.6, @strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions": version: 0.0.0-use.local resolution: "@strapi/plugin-users-permissions@workspace:packages/plugins/users-permissions" dependencies: "@strapi/design-system": 1.7.7 - "@strapi/helper-plugin": 4.10.5 + "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@testing-library/dom": 8.19.0 "@testing-library/react": 12.1.4 "@testing-library/react-hooks": 8.0.1 @@ -8413,12 +8413,12 @@ __metadata: languageName: unknown linkType: soft -"@strapi/provider-audit-logs-local@4.10.5, @strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local": +"@strapi/provider-audit-logs-local@4.10.6, @strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local": version: 0.0.0-use.local resolution: "@strapi/provider-audit-logs-local@workspace:packages/providers/audit-logs-local" dependencies: - eslint-config-custom: 4.10.5 - tsconfig: 4.10.5 + eslint-config-custom: 4.10.6 + tsconfig: 4.10.6 peerDependencies: "@strapi/strapi": ^4.9.0 languageName: unknown @@ -8428,22 +8428,22 @@ __metadata: version: 0.0.0-use.local resolution: "@strapi/provider-email-amazon-ses@workspace:packages/providers/email-amazon-ses" dependencies: - "@strapi/utils": 4.10.5 - eslint-config-custom: 4.10.5 + "@strapi/utils": 4.10.6 + eslint-config-custom: 4.10.6 node-ses: ^3.0.3 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/provider-email-mailgun@4.10.5, @strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun": +"@strapi/provider-email-mailgun@4.10.6, @strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun": version: 0.0.0-use.local resolution: "@strapi/provider-email-mailgun@workspace:packages/providers/email-mailgun" dependencies: - "@strapi/utils": 4.10.5 - eslint-config-custom: 4.10.5 + "@strapi/utils": 4.10.6 + eslint-config-custom: 4.10.6 form-data: ^4.0.0 mailgun.js: 8.2.1 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft @@ -8452,10 +8452,10 @@ __metadata: resolution: "@strapi/provider-email-nodemailer@workspace:packages/providers/email-nodemailer" dependencies: "@types/nodemailer": 6.4.7 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 lodash: 4.17.21 nodemailer: 6.9.1 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft @@ -8464,79 +8464,79 @@ __metadata: resolution: "@strapi/provider-email-sendgrid@workspace:packages/providers/email-sendgrid" dependencies: "@sendgrid/mail": 7.7.0 - "@strapi/utils": 4.10.5 - eslint-config-custom: 4.10.5 - tsconfig: 4.10.5 + "@strapi/utils": 4.10.6 + eslint-config-custom: 4.10.6 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/provider-email-sendmail@4.10.5, @strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail": +"@strapi/provider-email-sendmail@4.10.6, @strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail": version: 0.0.0-use.local resolution: "@strapi/provider-email-sendmail@workspace:packages/providers/email-sendmail" dependencies: - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@types/sendmail": 1.4.4 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 sendmail: ^1.6.1 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/provider-upload-aws-s3@4.10.5, @strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3": +"@strapi/provider-upload-aws-s3@4.10.6, @strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3": version: 0.0.0-use.local resolution: "@strapi/provider-upload-aws-s3@workspace:packages/providers/upload-aws-s3" dependencies: "@types/jest": 29.2.0 aws-sdk: 2.1372.0 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 lodash: 4.17.21 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/provider-upload-cloudinary@4.10.5, @strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary": +"@strapi/provider-upload-cloudinary@4.10.6, @strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary": version: 0.0.0-use.local resolution: "@strapi/provider-upload-cloudinary@workspace:packages/providers/upload-cloudinary" dependencies: - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 cloudinary: ^1.37.0 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 into-stream: ^5.1.0 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/provider-upload-local@4.10.5, @strapi/provider-upload-local@workspace:packages/providers/upload-local": +"@strapi/provider-upload-local@4.10.6, @strapi/provider-upload-local@workspace:packages/providers/upload-local": version: 0.0.0-use.local resolution: "@strapi/provider-upload-local@workspace:packages/providers/upload-local" dependencies: - "@strapi/utils": 4.10.5 + "@strapi/utils": 4.10.6 "@types/jest": 29.2.0 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 fs-extra: 10.0.0 - tsconfig: 4.10.5 + tsconfig: 4.10.6 languageName: unknown linkType: soft -"@strapi/strapi@4.10.5, @strapi/strapi@workspace:packages/core/strapi": +"@strapi/strapi@4.10.6, @strapi/strapi@workspace:packages/core/strapi": version: 0.0.0-use.local resolution: "@strapi/strapi@workspace:packages/core/strapi" dependencies: "@koa/cors": 3.4.3 "@koa/router": 10.1.1 - "@strapi/admin": 4.10.5 - "@strapi/data-transfer": 4.10.5 - "@strapi/database": 4.10.5 - "@strapi/generate-new": 4.10.5 - "@strapi/generators": 4.10.5 - "@strapi/logger": 4.10.5 - "@strapi/permissions": 4.10.5 - "@strapi/plugin-content-manager": 4.10.5 - "@strapi/plugin-content-type-builder": 4.10.5 - "@strapi/plugin-email": 4.10.5 - "@strapi/plugin-upload": 4.10.5 - "@strapi/typescript-utils": 4.10.5 - "@strapi/utils": 4.10.5 + "@strapi/admin": 4.10.6 + "@strapi/data-transfer": 4.10.6 + "@strapi/database": 4.10.6 + "@strapi/generate-new": 4.10.6 + "@strapi/generators": 4.10.6 + "@strapi/logger": 4.10.6 + "@strapi/permissions": 4.10.6 + "@strapi/plugin-content-manager": 4.10.6 + "@strapi/plugin-content-type-builder": 4.10.6 + "@strapi/plugin-email": 4.10.6 + "@strapi/plugin-upload": 4.10.6 + "@strapi/typescript-utils": 4.10.6 + "@strapi/utils": 4.10.6 bcryptjs: 2.4.3 boxen: 5.1.2 chalk: 4.1.2 @@ -8583,7 +8583,7 @@ __metadata: languageName: unknown linkType: soft -"@strapi/typescript-utils@4.10.5, @strapi/typescript-utils@workspace:packages/utils/typescript": +"@strapi/typescript-utils@4.10.6, @strapi/typescript-utils@workspace:packages/utils/typescript": version: 0.0.0-use.local resolution: "@strapi/typescript-utils@workspace:packages/utils/typescript" dependencies: @@ -8628,7 +8628,7 @@ __metadata: languageName: node linkType: hard -"@strapi/utils@4.10.5, @strapi/utils@workspace:packages/core/utils": +"@strapi/utils@4.10.6, @strapi/utils@workspace:packages/core/utils": version: 0.0.0-use.local resolution: "@strapi/utils@workspace:packages/core/utils" dependencies: @@ -14615,11 +14615,11 @@ __metadata: version: 0.0.0-use.local resolution: "create-strapi-app@workspace:packages/cli/create-strapi-app" dependencies: - "@strapi/generate-new": 4.10.5 + "@strapi/generate-new": 4.10.6 commander: 8.3.0 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 inquirer: 8.2.5 - tsconfig: 4.10.5 + tsconfig: 4.10.6 bin: create-strapi-app: ./bin/index.js languageName: unknown @@ -14629,16 +14629,16 @@ __metadata: version: 0.0.0-use.local resolution: "create-strapi-starter@workspace:packages/cli/create-strapi-starter" dependencies: - "@strapi/generate-new": 4.10.5 + "@strapi/generate-new": 4.10.6 chalk: 4.1.2 ci-info: 3.8.0 commander: 8.3.0 - eslint-config-custom: 4.10.5 + eslint-config-custom: 4.10.6 execa: 5.1.1 fs-extra: 10.0.0 inquirer: 8.2.5 ora: 5.4.1 - tsconfig: 4.10.5 + tsconfig: 4.10.6 bin: create-strapi-starter: ./bin/index.js languageName: unknown @@ -16454,7 +16454,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-custom@4.10.5, eslint-config-custom@workspace:packages/utils/eslint-config-custom": +"eslint-config-custom@4.10.6, eslint-config-custom@workspace:packages/utils/eslint-config-custom": version: 0.0.0-use.local resolution: "eslint-config-custom@workspace:packages/utils/eslint-config-custom" languageName: unknown @@ -18458,16 +18458,16 @@ __metadata: resolution: "getstarted@workspace:examples/getstarted" dependencies: "@strapi/icons": 1.7.7 - "@strapi/plugin-color-picker": 4.10.5 - "@strapi/plugin-documentation": 4.10.5 - "@strapi/plugin-graphql": 4.10.5 - "@strapi/plugin-i18n": 4.10.5 - "@strapi/plugin-sentry": 4.10.5 - "@strapi/plugin-users-permissions": 4.10.5 - "@strapi/provider-email-mailgun": 4.10.5 - "@strapi/provider-upload-aws-s3": 4.10.5 - "@strapi/provider-upload-cloudinary": 4.10.5 - "@strapi/strapi": 4.10.5 + "@strapi/plugin-color-picker": 4.10.6 + "@strapi/plugin-documentation": 4.10.6 + "@strapi/plugin-graphql": 4.10.6 + "@strapi/plugin-i18n": 4.10.6 + "@strapi/plugin-sentry": 4.10.6 + "@strapi/plugin-users-permissions": 4.10.6 + "@strapi/provider-email-mailgun": 4.10.6 + "@strapi/provider-upload-aws-s3": 4.10.6 + "@strapi/provider-upload-cloudinary": 4.10.6 + "@strapi/strapi": 4.10.6 better-sqlite3: 8.3.0 lodash: 4.17.21 mysql: 2.18.1 @@ -22593,9 +22593,9 @@ __metadata: version: 0.0.0-use.local resolution: "kitchensink-ts@workspace:examples/kitchensink-ts" dependencies: - "@strapi/plugin-i18n": 4.10.5 - "@strapi/plugin-users-permissions": 4.10.5 - "@strapi/strapi": 4.10.5 + "@strapi/plugin-i18n": 4.10.6 + "@strapi/plugin-users-permissions": 4.10.6 + "@strapi/strapi": 4.10.6 better-sqlite3: 8.3.0 languageName: unknown linkType: soft @@ -22604,10 +22604,10 @@ __metadata: version: 0.0.0-use.local resolution: "kitchensink@workspace:examples/kitchensink" dependencies: - "@strapi/provider-email-mailgun": 4.10.5 - "@strapi/provider-upload-aws-s3": 4.10.5 - "@strapi/provider-upload-cloudinary": 4.10.5 - "@strapi/strapi": 4.10.5 + "@strapi/provider-email-mailgun": 4.10.6 + "@strapi/provider-upload-aws-s3": 4.10.6 + "@strapi/provider-upload-cloudinary": 4.10.6 + "@strapi/strapi": 4.10.6 lodash: 4.17.21 mysql: 2.18.1 passport-google-oauth2: 0.2.0 @@ -31877,7 +31877,7 @@ __metadata: languageName: node linkType: hard -"tsconfig@4.10.5, tsconfig@workspace:packages/utils/tsconfig": +"tsconfig@4.10.6, tsconfig@workspace:packages/utils/tsconfig": version: 0.0.0-use.local resolution: "tsconfig@workspace:packages/utils/tsconfig" languageName: unknown From 7c0379cb2a56c4c66f42b5082362f9cb175a9320 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 May 2023 15:02:08 +0000 Subject: [PATCH 17/22] chore(deps): bump apollo-server-core from 3.11.1 to 3.12.0 Bumps [apollo-server-core](https://github.com/apollographql/apollo-server/tree/HEAD/packages/apollo-server-core) from 3.11.1 to 3.12.0. - [Release notes](https://github.com/apollographql/apollo-server/releases) - [Changelog](https://github.com/apollographql/apollo-server/blob/apollo-server-core@3.12.0/CHANGELOG.md) - [Commits](https://github.com/apollographql/apollo-server/commits/apollo-server-core@3.12.0/packages/apollo-server-core) --- updated-dependencies: - dependency-name: apollo-server-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/plugins/graphql/package.json | 2 +- yarn.lock | 71 ++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/packages/plugins/graphql/package.json b/packages/plugins/graphql/package.json index eb73c41283..41cf8313dd 100644 --- a/packages/plugins/graphql/package.json +++ b/packages/plugins/graphql/package.json @@ -30,7 +30,7 @@ "@strapi/helper-plugin": "4.10.6", "@strapi/icons": "1.7.7", "@strapi/utils": "4.10.6", - "apollo-server-core": "3.11.1", + "apollo-server-core": "3.12.0", "apollo-server-koa": "3.10.0", "glob": "^7.1.7", "graphql": "^15.5.1", diff --git a/yarn.lock b/yarn.lock index 6e53a274be..d46f94b42b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8244,7 +8244,7 @@ __metadata: "@strapi/helper-plugin": 4.10.6 "@strapi/icons": 1.7.7 "@strapi/utils": 4.10.6 - apollo-server-core: 3.11.1 + apollo-server-core: 3.12.0 apollo-server-koa: 3.10.0 cross-env: ^7.0.3 glob: ^7.1.7 @@ -11310,7 +11310,49 @@ __metadata: languageName: node linkType: hard -"apollo-server-core@npm:3.11.1, apollo-server-core@npm:^3.10.0": +"apollo-reporting-protobuf@npm:^3.4.0": + version: 3.4.0 + resolution: "apollo-reporting-protobuf@npm:3.4.0" + dependencies: + "@apollo/protobufjs": 1.2.6 + checksum: 5bf50e9cecd3c2334cd12e0ebe59be6c4d7b1b9ee443c7d913011ea1b84513f57561fb6c3ceb66083321acb6d1c56f72e2ab0edf378cf742693409eb8dcdc46b + languageName: node + linkType: hard + +"apollo-server-core@npm:3.12.0": + version: 3.12.0 + resolution: "apollo-server-core@npm:3.12.0" + dependencies: + "@apollo/utils.keyvaluecache": ^1.0.1 + "@apollo/utils.logger": ^1.0.0 + "@apollo/utils.usagereporting": ^1.0.0 + "@apollographql/apollo-tools": ^0.5.3 + "@apollographql/graphql-playground-html": 1.6.29 + "@graphql-tools/mock": ^8.1.2 + "@graphql-tools/schema": ^8.0.0 + "@josephg/resolvable": ^1.0.0 + apollo-datasource: ^3.3.2 + apollo-reporting-protobuf: ^3.4.0 + apollo-server-env: ^4.2.1 + apollo-server-errors: ^3.3.1 + apollo-server-plugin-base: ^3.7.2 + apollo-server-types: ^3.8.0 + async-retry: ^1.2.1 + fast-json-stable-stringify: ^2.1.0 + graphql-tag: ^2.11.0 + loglevel: ^1.6.8 + lru-cache: ^6.0.0 + node-abort-controller: ^3.0.1 + sha.js: ^2.4.11 + uuid: ^9.0.0 + whatwg-mimetype: ^3.0.0 + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + checksum: b7a37a78901d38a330c9df8fe870da3dcf512f43ab60fdf9ab0ba37be03977db5d4b72eabf51a830d2a9dcfb2974d7bfbc5aa8719e3afac113c8bd7222740b8f + languageName: node + linkType: hard + +"apollo-server-core@npm:^3.10.0": version: 3.11.1 resolution: "apollo-server-core@npm:3.11.1" dependencies: @@ -11394,6 +11436,17 @@ __metadata: languageName: node linkType: hard +"apollo-server-plugin-base@npm:^3.7.2": + version: 3.7.2 + resolution: "apollo-server-plugin-base@npm:3.7.2" + dependencies: + apollo-server-types: ^3.8.0 + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + checksum: d6ea6dbfad8bb82959286eae89878ccccbd09743c3df2b76bf790f470cbf5441ba06dcb6835a25f0bf32f4df05722cce157ae983ce32db4b69de8a72c9949e2e + languageName: node + linkType: hard + "apollo-server-types@npm:^3.6.2, apollo-server-types@npm:^3.7.1": version: 3.7.1 resolution: "apollo-server-types@npm:3.7.1" @@ -11408,6 +11461,20 @@ __metadata: languageName: node linkType: hard +"apollo-server-types@npm:^3.8.0": + version: 3.8.0 + resolution: "apollo-server-types@npm:3.8.0" + dependencies: + "@apollo/utils.keyvaluecache": ^1.0.1 + "@apollo/utils.logger": ^1.0.0 + apollo-reporting-protobuf: ^3.4.0 + apollo-server-env: ^4.2.1 + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + checksum: 20accd42b65ceb95819a1610c410488fbe548ee309227d7fa22fd17dd1205e557091ba9c9a20efa532192098a4193e34eb58fc91d762b55fdf31229ac9fc7133 + languageName: node + linkType: hard + "app-root-dir@npm:^1.0.2": version: 1.0.2 resolution: "app-root-dir@npm:1.0.2" From 5ce621adc7d3330e488dc46f2152369f7b7af94e Mon Sep 17 00:00:00 2001 From: Bassel Date: Thu, 25 May 2023 15:08:45 +0300 Subject: [PATCH 18/22] add extra check for messages and new configs for remote providers --- .../strapi/providers/remote-destination/index.ts | 5 ++++- .../src/strapi/providers/remote-source/index.ts | 5 ++++- .../data-transfer/src/strapi/providers/utils.ts | 13 ++++++++++--- .../src/strapi/remote/handlers/abstract.ts | 6 ++++++ .../src/strapi/remote/handlers/pull.ts | 8 +++++--- .../src/strapi/remote/handlers/push.ts | 7 +++++-- .../src/strapi/remote/handlers/utils.ts | 9 +++++++++ .../strapi/lib/commands/actions/transfer/action.js | 4 ++++ 8 files changed, 47 insertions(+), 10 deletions(-) diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts index 13fef83cde..dc3b5c8bda 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts @@ -20,6 +20,8 @@ export interface IRemoteStrapiDestinationProviderOptions extends Pick { url: URL; auth?: ITransferTokenAuth; + retryMessageTimeout?: number; + retryMessageMaxRetries?: number; } const jsonLength = (obj: object) => Buffer.byteLength(JSON.stringify(obj)); @@ -213,7 +215,8 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { } this.ws = ws; - this.dispatcher = createDispatcher(this.ws); + const { retryMessageMaxRetries, retryMessageTimeout } = this.options; + this.dispatcher = createDispatcher(this.ws, { retryMessageMaxRetries, retryMessageTimeout }); this.transferID = await this.initTransfer(); diff --git a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts index 96667aafdc..15f331b2f7 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts @@ -24,6 +24,8 @@ interface ITransferTokenAuth { export interface IRemoteStrapiSourceProviderOptions extends ILocalStrapiSourceProviderOptions { url: URL; auth?: ITransferTokenAuth; + retryMessageTimeout?: number; + retryMessageMaxRetries?: number; } class RemoteStrapiSourceProvider implements ISourceProvider { @@ -210,7 +212,8 @@ class RemoteStrapiSourceProvider implements ISourceProvider { } this.ws = ws; - this.dispatcher = createDispatcher(this.ws); + const { retryMessageMaxRetries, retryMessageTimeout } = this.options; + this.dispatcher = createDispatcher(this.ws, { retryMessageMaxRetries, retryMessageTimeout }); const transferID = await this.initTransfer(); this.dispatcher.setTransferProperties({ id: transferID, kind: 'pull' }); diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index c421a94d96..a037935d7a 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -18,7 +18,13 @@ interface IDispatchOptions { type Dispatch = Omit; -export const createDispatcher = (ws: WebSocket) => { +export const createDispatcher = ( + ws: WebSocket, + { + retryMessageMaxRetries = 5, + retryMessageTimeout = 10000, + }: { retryMessageMaxRetries?: number; retryMessageTimeout?: number } +) => { const state: IDispatcherState = {}; type DispatchMessage = Dispatch; @@ -48,7 +54,8 @@ export const createDispatcher = (ws: WebSocket) => { }); const sendPeriodically = () => { - if (numberOfTimesMessageWasSent < 5) { + if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) { + console.log('Retrying message', payload, numberOfTimesMessageWasSent); numberOfTimesMessageWasSent += 1; ws.send(stringifiedPayload, (error) => { if (error) { @@ -59,7 +66,7 @@ export const createDispatcher = (ws: WebSocket) => { reject(new ProviderError('error', 'Request timed out')); } }; - const interval = setInterval(sendPeriodically, 30000); + const interval = setInterval(sendPeriodically, retryMessageTimeout); const onResponse = (raw: RawData) => { const response: server.Message = JSON.parse(raw.toString()); diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts index 59f5b1e8d0..05244fce08 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/abstract.ts @@ -27,6 +27,12 @@ export interface Handler { get response(): TransferState['response']; set response(response: TransferState['response']); + // Add message UUIDs + addUUID(uuid: string): void; + + // Check if a message UUID exists + hasUUID(uuid: string): boolean; + /** * Returns whether a transfer is currently in progress or not */ diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts index cb95283caf..0ab84dd657 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts @@ -71,13 +71,15 @@ export const createPullController = handlerControllerFactory { handleWSUpgrade(wss, ctx, (ws) => { const state: TransferState = { id: undefined }; + const messageuuids = new Set(); const prototype: Handler = { // Transfer ID @@ -107,6 +108,14 @@ export const handlerControllerFactory = state.response = response; }, + addUUID(uuid) { + messageuuids.add(uuid); + }, + + hasUUID(uuid) { + return messageuuids.has(uuid); + }, + isTransferStarted() { return this.transferID !== undefined && this.startedAt !== undefined; }, diff --git a/packages/core/strapi/lib/commands/actions/transfer/action.js b/packages/core/strapi/lib/commands/actions/transfer/action.js index a238878e69..fe62b9ec18 100644 --- a/packages/core/strapi/lib/commands/actions/transfer/action.js +++ b/packages/core/strapi/lib/commands/actions/transfer/action.js @@ -79,6 +79,8 @@ module.exports = async (opts) => { type: 'token', token: opts.fromToken, }, + retryMessageMaxRetries: 5, + retryMessageTimeout: 15000, }); } @@ -108,6 +110,8 @@ module.exports = async (opts) => { restore: { entities: { exclude: DEFAULT_IGNORED_CONTENT_TYPES }, }, + retryMessageMaxRetries: 5, + retryMessageTimeout: 15000, }); } From d1c6d6612575303c32c42863842413642bb7fe6b Mon Sep 17 00:00:00 2001 From: Bassel Date: Thu, 25 May 2023 15:09:35 +0300 Subject: [PATCH 19/22] remove console.log --- packages/core/data-transfer/src/strapi/providers/utils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index a037935d7a..276542b06e 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -55,7 +55,6 @@ export const createDispatcher = ( const sendPeriodically = () => { if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) { - console.log('Retrying message', payload, numberOfTimesMessageWasSent); numberOfTimesMessageWasSent += 1; ws.send(stringifiedPayload, (error) => { if (error) { From 013e9b5cd3eb6c7b400ae263650a7fe4b378b76e Mon Sep 17 00:00:00 2001 From: Bassel Date: Thu, 25 May 2023 15:32:50 +0300 Subject: [PATCH 20/22] update test --- .../providers/remote-destination/__tests__/utils.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts index 25c8c53992..9f3bc10239 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts @@ -26,7 +26,9 @@ describe('Remote Strapi Destination Utils', () => { command: 'status', }; - createDispatcher(ws).dispatch(message); + createDispatcher(ws, { retryMessageMaxRetries: 5, retryMessageTimeout: 15000 }).dispatch( + message + ); expect.extend({ toContain(receivedString, expected) { From a862150325e13e8eeef854567b617a159cc6bcf7 Mon Sep 17 00:00:00 2001 From: Bassel Date: Fri, 26 May 2023 15:42:03 +0300 Subject: [PATCH 21/22] refactoring using default message retry options --- .../remote-destination/__tests__/utils.test.ts | 4 +--- .../src/strapi/providers/remote-destination/index.ts | 7 +++---- .../src/strapi/providers/remote-source/index.ts | 7 +++---- .../core/data-transfer/src/strapi/providers/utils.ts | 10 +++++----- .../data-transfer/src/strapi/remote/handlers/pull.ts | 2 +- .../data-transfer/src/strapi/remote/handlers/push.ts | 2 +- .../data-transfer/src/strapi/remote/handlers/utils.ts | 6 +++--- .../strapi/lib/commands/actions/transfer/action.js | 4 ---- 8 files changed, 17 insertions(+), 25 deletions(-) diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts index 9f3bc10239..25c8c53992 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/__tests__/utils.test.ts @@ -26,9 +26,7 @@ describe('Remote Strapi Destination Utils', () => { command: 'status', }; - createDispatcher(ws, { retryMessageMaxRetries: 5, retryMessageTimeout: 15000 }).dispatch( - message - ); + createDispatcher(ws).dispatch(message); expect.extend({ toContain(receivedString, expected) { diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts index dc3b5c8bda..6f8c2e25e9 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts @@ -20,8 +20,7 @@ export interface IRemoteStrapiDestinationProviderOptions extends Pick { url: URL; auth?: ITransferTokenAuth; - retryMessageTimeout?: number; - retryMessageMaxRetries?: number; + retryMessageOptions?: { retryMessageTimeout: number; retryMessageMaxRetries: number }; } const jsonLength = (obj: object) => Buffer.byteLength(JSON.stringify(obj)); @@ -215,8 +214,8 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { } this.ws = ws; - const { retryMessageMaxRetries, retryMessageTimeout } = this.options; - this.dispatcher = createDispatcher(this.ws, { retryMessageMaxRetries, retryMessageTimeout }); + const { retryMessageOptions } = this.options; + this.dispatcher = createDispatcher(this.ws, retryMessageOptions); this.transferID = await this.initTransfer(); diff --git a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts index 15f331b2f7..9c515dca0b 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-source/index.ts @@ -24,8 +24,7 @@ interface ITransferTokenAuth { export interface IRemoteStrapiSourceProviderOptions extends ILocalStrapiSourceProviderOptions { url: URL; auth?: ITransferTokenAuth; - retryMessageTimeout?: number; - retryMessageMaxRetries?: number; + retryMessageOptions?: { retryMessageTimeout: number; retryMessageMaxRetries: number }; } class RemoteStrapiSourceProvider implements ISourceProvider { @@ -212,8 +211,8 @@ class RemoteStrapiSourceProvider implements ISourceProvider { } this.ws = ws; - const { retryMessageMaxRetries, retryMessageTimeout } = this.options; - this.dispatcher = createDispatcher(this.ws, { retryMessageMaxRetries, retryMessageTimeout }); + const { retryMessageOptions } = this.options; + this.dispatcher = createDispatcher(this.ws, retryMessageOptions); const transferID = await this.initTransfer(); this.dispatcher.setTransferProperties({ id: transferID, kind: 'pull' }); diff --git a/packages/core/data-transfer/src/strapi/providers/utils.ts b/packages/core/data-transfer/src/strapi/providers/utils.ts index 276542b06e..fbec438fed 100644 --- a/packages/core/data-transfer/src/strapi/providers/utils.ts +++ b/packages/core/data-transfer/src/strapi/providers/utils.ts @@ -20,10 +20,10 @@ type Dispatch = Omit; export const createDispatcher = ( ws: WebSocket, - { - retryMessageMaxRetries = 5, - retryMessageTimeout = 10000, - }: { retryMessageMaxRetries?: number; retryMessageTimeout?: number } + retryMessageOptions = { + retryMessageMaxRetries: 5, + retryMessageTimeout: 15000, + } ) => { const state: IDispatcherState = {}; @@ -52,7 +52,7 @@ export const createDispatcher = ( reject(error); } }); - + const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions; const sendPeriodically = () => { if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) { numberOfTimesMessageWasSent += 1; diff --git a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts index 0ab84dd657..e7d26a4671 100644 --- a/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts +++ b/packages/core/data-transfer/src/strapi/remote/handlers/pull.ts @@ -70,8 +70,8 @@ export const createPullController = handlerControllerFactory { handleWSUpgrade(wss, ctx, (ws) => { const state: TransferState = { id: undefined }; - const messageuuids = new Set(); + const messageUUIDs = new Set(); const prototype: Handler = { // Transfer ID @@ -109,11 +109,11 @@ export const handlerControllerFactory = }, addUUID(uuid) { - messageuuids.add(uuid); + messageUUIDs.add(uuid); }, hasUUID(uuid) { - return messageuuids.has(uuid); + return messageUUIDs.has(uuid); }, isTransferStarted() { diff --git a/packages/core/strapi/lib/commands/actions/transfer/action.js b/packages/core/strapi/lib/commands/actions/transfer/action.js index fe62b9ec18..a238878e69 100644 --- a/packages/core/strapi/lib/commands/actions/transfer/action.js +++ b/packages/core/strapi/lib/commands/actions/transfer/action.js @@ -79,8 +79,6 @@ module.exports = async (opts) => { type: 'token', token: opts.fromToken, }, - retryMessageMaxRetries: 5, - retryMessageTimeout: 15000, }); } @@ -110,8 +108,6 @@ module.exports = async (opts) => { restore: { entities: { exclude: DEFAULT_IGNORED_CONTENT_TYPES }, }, - retryMessageMaxRetries: 5, - retryMessageTimeout: 15000, }); } From 37ec6abc3c4d32cce6c4df150a7333bb76aaa70a Mon Sep 17 00:00:00 2001 From: Christian Capeans Date: Fri, 9 Jun 2023 15:03:54 +0200 Subject: [PATCH 22/22] Delete sending null in the assets transfer --- .../src/strapi/providers/remote-destination/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts index 6f8c2e25e9..374bf09c5f 100644 --- a/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts +++ b/packages/core/data-transfer/src/strapi/providers/remote-destination/index.ts @@ -317,8 +317,6 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider { } if (hasStarted) { - await this.#streamStep('assets', null); - const endStepError = await this.#endStep('assets'); if (endStepError) {