Merge branch 'main' into feature/custom-field-default-options

This commit is contained in:
markkaylor 2022-10-24 11:29:17 +02:00 committed by GitHub
commit efb2f1920b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
66 changed files with 574 additions and 180 deletions

View File

@ -1,6 +1,6 @@
{
"name": "check-pr-status",
"version": "4.4.3",
"version": "4.4.5",
"main": "dist/index.js",
"license": "MIT",
"private": true,

View File

@ -1,7 +1,7 @@
{
"name": "getstarted",
"private": true,
"version": "4.4.3",
"version": "4.4.5",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -12,16 +12,16 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/plugin-color-picker": "4.4.3",
"@strapi/plugin-documentation": "4.4.3",
"@strapi/plugin-graphql": "4.4.3",
"@strapi/plugin-i18n": "4.4.3",
"@strapi/plugin-sentry": "4.4.3",
"@strapi/plugin-users-permissions": "4.4.3",
"@strapi/provider-email-mailgun": "4.4.3",
"@strapi/provider-upload-aws-s3": "4.4.3",
"@strapi/provider-upload-cloudinary": "4.4.3",
"@strapi/strapi": "4.4.3",
"@strapi/plugin-color-picker": "4.4.5",
"@strapi/plugin-documentation": "4.4.5",
"@strapi/plugin-graphql": "4.4.5",
"@strapi/plugin-i18n": "4.4.5",
"@strapi/plugin-sentry": "4.4.5",
"@strapi/plugin-users-permissions": "4.4.5",
"@strapi/provider-email-mailgun": "4.4.5",
"@strapi/provider-upload-aws-s3": "4.4.5",
"@strapi/provider-upload-cloudinary": "4.4.5",
"@strapi/strapi": "4.4.5",
"@vscode/sqlite3": "5.0.8",
"better-sqlite3": "7.4.6",
"lodash": "4.17.21",

View File

@ -1,7 +1,7 @@
{
"name": "kitchensink-ts",
"private": true,
"version": "4.4.3",
"version": "4.4.5",
"description": "A Strapi application",
"scripts": {
"develop": "strapi develop",
@ -10,9 +10,9 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/plugin-i18n": "4.4.3",
"@strapi/plugin-users-permissions": "4.4.3",
"@strapi/strapi": "4.4.3",
"@strapi/plugin-i18n": "4.4.5",
"@strapi/plugin-users-permissions": "4.4.5",
"@strapi/strapi": "4.4.5",
"better-sqlite3": "7.4.6"
},
"author": {

View File

@ -1,7 +1,7 @@
{
"name": "kitchensink",
"private": true,
"version": "4.4.3",
"version": "4.4.5",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -12,10 +12,10 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/provider-email-mailgun": "4.4.3",
"@strapi/provider-upload-aws-s3": "4.4.3",
"@strapi/provider-upload-cloudinary": "4.4.3",
"@strapi/strapi": "4.4.3",
"@strapi/provider-email-mailgun": "4.4.5",
"@strapi/provider-upload-aws-s3": "4.4.5",
"@strapi/provider-upload-cloudinary": "4.4.5",
"@strapi/strapi": "4.4.5",
"lodash": "4.17.21",
"mysql": "2.18.1",
"passport-google-oauth2": "0.2.0",

View File

@ -1,5 +1,5 @@
{
"version": "4.4.3",
"version": "4.4.5",
"packages": [
"packages/*",
"examples/*"

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin-test-utils",
"version": "4.4.3",
"version": "4.4.5",
"private": true,
"description": "Test utilities for the Strapi administration panel",
"license": "MIT",

View File

@ -1,9 +1,9 @@
{
"name": "create-strapi-app",
"version": "4.4.3",
"version": "4.4.5",
"description": "Generate a new Strapi application.",
"dependencies": {
"@strapi/generate-new": "4.4.3",
"@strapi/generate-new": "4.4.5",
"commander": "6.1.0",
"inquirer": "8.2.4"
},

View File

@ -1,6 +1,6 @@
{
"name": "create-strapi-starter",
"version": "4.4.3",
"version": "4.4.5",
"description": "Generate a new Strapi application.",
"keywords": [
"create-strapi-starter",
@ -38,7 +38,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/generate-new": "4.4.3",
"@strapi/generate-new": "4.4.5",
"chalk": "4.1.1",
"ci-info": "3.3.2",
"commander": "7.1.0",

View File

@ -32,7 +32,7 @@ const CellValue = ({ type, value }) => {
formattedValue = formatNumber(value, {
// Should be kept in sync with the corresponding value
// in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53
maximumFractionDigits: 21,
maximumFractionDigits: 20,
});
}

View File

@ -9,6 +9,7 @@ import appReducers from './reducers';
window.strapi = {
backendURL: process.env.STRAPI_ADMIN_BACKEND_URL,
isEE: false,
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED ?? false,
features: {
SSO: 'sso',
},

View File

@ -2,8 +2,12 @@ import React from 'react';
import { render, screen, fireEvent } from '@testing-library/react';
import { IntlProvider } from 'react-intl';
import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { library } from '@fortawesome/fontawesome-svg-core';
import { faFile, faBook } from '@fortawesome/free-solid-svg-icons';
import Onboarding from '../index';
library.add(faFile, faBook);
jest.mock('../../../../hooks', () => ({
useConfigurations: jest.fn(() => {
return { showTutorials: true };

View File

@ -111,7 +111,7 @@ const FormApiTokenContainer = ({
id: 'Settings.apiTokens.form.duration',
defaultMessage: 'Token duration',
})}
value={values.lifespan}
value={values.lifespan !== null ? values.lifespan : '0'}
error={
errors.lifespan
? formatMessage(
@ -146,7 +146,7 @@ const FormApiTokenContainer = ({
defaultMessage: '90 days',
})}
</Option>
<Option value={null}>
<Option value="0">
{formatMessage({
id: 'Settings.apiTokens.duration.unlimited',
defaultMessage: 'Unlimited',
@ -234,7 +234,7 @@ FormApiTokenContainer.propTypes = {
}).isRequired,
isCreating: PropTypes.bool.isRequired,
apiToken: PropTypes.shape({
id: PropTypes.string,
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
type: PropTypes.string,
lifespan: PropTypes.number,
name: PropTypes.string,
@ -242,13 +242,14 @@ FormApiTokenContainer.propTypes = {
permissions: PropTypes.array,
description: PropTypes.string,
createdAt: PropTypes.string,
}).isRequired,
}),
onDispatch: PropTypes.func.isRequired,
setHasChangedPermissions: PropTypes.func.isRequired,
};
FormApiTokenContainer.defaultProps = {
errors: {},
apiToken: {},
};
export default FormApiTokenContainer;

View File

@ -19,7 +19,7 @@ const FormBody = ({
return (
<ContentLayout>
<Stack spacing={6}>
{Boolean(apiToken?.name) && <HeaderContentBox apiToken={apiToken.accessKey} />}
{Boolean(apiToken?.name) && <HeaderContentBox apiToken={apiToken?.accessKey} />}
<FormApiTokenContainer
errors={errors}
onChange={onChange}
@ -48,7 +48,7 @@ FormBody.propTypes = {
type: PropTypes.string,
}),
apiToken: PropTypes.shape({
id: PropTypes.string,
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
type: PropTypes.string,
lifespan: PropTypes.number,
name: PropTypes.string,
@ -56,7 +56,7 @@ FormBody.propTypes = {
permissions: PropTypes.array,
description: PropTypes.string,
createdAt: PropTypes.string,
}).isRequired,
}),
onChange: PropTypes.func.isRequired,
canEditInputs: PropTypes.bool.isRequired,
isCreating: PropTypes.bool.isRequired,
@ -72,6 +72,7 @@ FormBody.propTypes = {
FormBody.defaultProps = {
errors: {},
apiToken: {},
};
export default FormBody;

View File

@ -67,7 +67,7 @@ const FormHead = ({ apiToken, setApiToken, canEditInputs, canRegenerate, isSubmi
FormHead.propTypes = {
apiToken: PropTypes.shape({
id: PropTypes.string,
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
type: PropTypes.string,
lifespan: PropTypes.number,
name: PropTypes.string,
@ -75,11 +75,15 @@ FormHead.propTypes = {
permissions: PropTypes.array,
description: PropTypes.string,
createdAt: PropTypes.string,
}).isRequired,
}),
canEditInputs: PropTypes.bool.isRequired,
canRegenerate: PropTypes.bool.isRequired,
setApiToken: PropTypes.func.isRequired,
isSubmitting: PropTypes.bool.isRequired,
};
FormHead.defaultProps = {
apiToken: undefined,
};
export default FormHead;

View File

@ -62,7 +62,7 @@ Regenerate.defaultProps = { onRegenerate() {} };
Regenerate.propTypes = {
onRegenerate: PropTypes.func,
idToRegenerate: PropTypes.string.isRequired,
idToRegenerate: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
};
export default Regenerate;

View File

@ -152,6 +152,10 @@ const ApiTokenCreateView = () => {
const handleSubmit = async (body, actions) => {
trackUsageRef.current(isCreating ? 'willCreateToken' : 'willEditToken');
lockApp();
const lifespanVal =
body.lifespan && parseInt(body.lifespan, 10) && body.lifespan !== '0'
? parseInt(body.lifespan, 10)
: null;
try {
const {
@ -159,10 +163,7 @@ const ApiTokenCreateView = () => {
} = isCreating
? await axiosInstance.post(`/admin/api-tokens`, {
...body,
lifespan:
body.lifespan && parseInt(body.lifespan, 10)
? parseInt(body.lifespan, 10)
: body.lifespan,
lifespan: lifespanVal,
permissions: body.type === 'custom' ? state.selectedActions : null,
})
: await axiosInstance.put(`/admin/api-tokens/${id}`, {

View File

@ -8,7 +8,7 @@ const schema = yup.object().shape({
.oneOf(['read-only', 'full-access', 'custom'])
.required(translatedErrors.required),
description: yup.string().nullable(),
lifespan: yup.number().integer().min(1).nullable().defined(translatedErrors.required),
lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),
});
export default schema;

View File

@ -114,7 +114,7 @@ const EventInput = ({ isDraftAndPublish }) => {
if (header === 'app.utils.publish' || header === 'app.utils.unpublish') {
return (
<td
key={header}
key={header.id}
title={formatMessage({
id: 'Settings.webhooks.event.publish-tooltip',
defaultMessage:
@ -129,7 +129,7 @@ const EventInput = ({ isDraftAndPublish }) => {
}
return (
<td key={header}>
<td key={header.id}>
<Typography variant="sigma" textColor="neutral600">
{formatMessage(header)}
</Typography>

View File

@ -39,6 +39,9 @@ describe('Create Webhook', () => {
isTriggerIdle={false}
isDraftAndPublishEvents={false}
triggerWebhook={triggerWebhook}
data={{
name: '',
}}
/>
);
@ -59,6 +62,9 @@ describe('Create Webhook', () => {
isTriggerIdle={false}
isDraftAndPublishEvents={false}
triggerWebhook={triggerWebhook}
data={{
name: '',
}}
/>
);

View File

@ -13,45 +13,7 @@ describe('ADMIN | StrapiApp', () => {
const app = StrapiApp({ middlewares, reducers, library });
const { container } = render(app.render());
expect(container.firstChild).toMatchInlineSnapshot(`
.c0 {
margin-left: -250px;
position: fixed;
left: 50%;
top: 2.875rem;
z-index: 10;
width: 31.25rem;
}
.c1 {
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.c2 > * {
margin-top: 0;
margin-bottom: 0;
}
.c2 > * + * {
margin-top: 8px;
}
<div
class="c0 c1 c2"
spacing="2"
width="31.25rem"
/>
`);
expect(container.firstChild).toMatchSnapshot();
});
it('should create a valid store', () => {
@ -495,7 +457,33 @@ describe('ADMIN | StrapiApp', () => {
expect(app.configurations.head.favicon).toBe('fr');
});
it('should override the theme', () => {
it('should override the light theme', () => {
const adminConfig = {
config: { theme: { light: { colors: { red: 'black' } } } },
};
const app = StrapiApp({ middlewares, reducers, library, adminConfig });
app.createCustomConfigurations();
expect(app.configurations.themes.light.colors.red).toBe('black');
});
it('should override the dark theme', () => {
const adminConfig = {
config: { theme: { dark: { colors: { red: 'black' } } } },
};
const app = StrapiApp({ middlewares, reducers, library, adminConfig });
app.createCustomConfigurations();
expect(app.configurations.themes.dark.colors.red).toBe('black');
});
it('should override the light theme with a legacy syntax (without light or dark keys) and log a warning', () => {
const origalConsoleWarning = console.warn;
console.warn = jest.fn();
const adminConfig = {
config: { theme: { colors: { red: 'black' } } },
};
@ -504,6 +492,9 @@ describe('ADMIN | StrapiApp', () => {
app.createCustomConfigurations();
expect(app.configurations.themes.light.colors.red).toBe('black');
expect(console.warn).toBeCalledTimes(1);
console.warn = origalConsoleWarning;
});
it('should override the tutorials', () => {

View File

@ -0,0 +1,41 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`ADMIN | StrapiApp should render the app without plugins 1`] = `
.c0 {
margin-left: -250px;
position: fixed;
left: 50%;
top: 2.875rem;
z-index: 10;
width: 31.25rem;
}
.c1 {
-webkit-align-items: stretch;
-webkit-box-align: stretch;
-ms-flex-align: stretch;
align-items: stretch;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
}
.c2 > * {
margin-top: 0;
margin-bottom: 0;
}
.c2 > * + * {
margin-top: 8px;
}
<div
class="c0 c1 c2"
spacing="2"
width="31.25rem"
/>
`;

View File

@ -25,6 +25,7 @@ const getClientEnvironment = (options) => {
ADMIN_PATH: options.adminPath,
NODE_ENV: options.env || 'development',
STRAPI_ADMIN_BACKEND_URL: options.backend,
STRAPI_TELEMETRY_DISABLED: options.telemetryDisabled,
}
);

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi Admin",
"repository": {
"type": "git",
@ -51,13 +51,13 @@
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.2.0",
"@pmmmwh/react-refresh-webpack-plugin": "0.5.7",
"@strapi/babel-plugin-switch-ee-ce": "4.4.3",
"@strapi/babel-plugin-switch-ee-ce": "4.4.5",
"@strapi/design-system": "1.2.5",
"@strapi/helper-plugin": "4.4.3",
"@strapi/helper-plugin": "4.4.5",
"@strapi/icons": "1.2.5",
"@strapi/permissions": "4.4.3",
"@strapi/typescript-utils": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/permissions": "4.4.5",
"@strapi/typescript-utils": "4.4.5",
"@strapi/utils": "4.4.5",
"axios": "0.27.2",
"babel-loader": "8.2.5",
"babel-plugin-styled-components": "2.0.2",
@ -164,4 +164,4 @@
}
}
}
}
}

View File

@ -41,6 +41,17 @@ const buildAdmin = async () => {
options: {
backend: 'http://localhost:1337',
adminPath: '/admin/',
/**
* Ideally this would take more scenarios into account, such
* as the `telemetryDisabled` property in the package.json
* of the users project. For builds based on an app we are
* passing this information throgh, but here we do not have access
* to the app's package.json. By using at least an environment variable
* we can make sure developers can actually test this functionality.
*/
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true' ?? false,
},
tsConfigFilePath,
};

View File

@ -20,6 +20,18 @@ module.exports = () => {
const options = {
backend: 'http://localhost:1337',
adminPath: '/admin/',
/**
* Ideally this would take more scenarios into account, such
* as the `telemetryDisabled` property in the package.json
* of the users project. For builds based on an app we are
* passing this information throgh, but here we do not have access
* to the app's package.json. By using at least an environment variable
* we can make sure developers can actually test this functionality in
* dev-mode.
*/
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',
};
const pluginsPath = getPluginsPath();

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-content-manager",
"version": "4.4.3",
"version": "4.4.5",
"description": "A powerful UI to easily manage your data.",
"repository": {
"type": "git",
@ -24,7 +24,7 @@
},
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"lodash": "4.17.21"
},
"engines": {

View File

@ -0,0 +1,197 @@
{
"ComponentIconPicker.search.placeholder": "Sök för en ikon",
"attribute.boolean": "Booleskt värde",
"attribute.boolean.description": "Ja eller nej, 1 eller 0, sant eller falskt",
"attribute.component": "Komponent",
"attribute.component.description": "Grupp av fält du kan återanvända och repetera",
"attribute.customField": "Anpassat fält",
"attribute.date": "Datum",
"attribute.date.description": "En datumväljare med sekunder, minuter och timmar",
"attribute.datetime": "Datum och tid",
"attribute.dynamiczone": "Dynamisk zon",
"attribute.dynamiczone.description": "Dynamiskt välj mellan förutbestämda komponenter när du skapar innehåll",
"attribute.email": "E-post",
"attribute.email.description": "E-postadressfält med validering",
"attribute.enumeration": "Enumeration",
"attribute.enumeration.description": "Förutbestämda värden som man kan välja mellan",
"attribute.json": "JSON",
"attribute.json.description": "Data i JSON-format",
"attribute.media": "Media",
"attribute.media.description": "Filer såsom bilder, videos, m.m",
"attribute.null": " ",
"attribute.number": "Nummer",
"attribute.number.description": "Nummer (heltal och decimaltal)",
"attribute.password": "Lösenord",
"attribute.password.description": "Lösenordsfält med kryptering",
"attribute.relation": "Relation",
"attribute.relation.description": "Refererar till en samlingstyp",
"attribute.richtext": "Formaterad text",
"attribute.richtext.description": "En textredigerare med formatalternativ",
"attribute.text": "Text",
"attribute.text.description": "Kort och lång text såsom titel eller beskrivning",
"attribute.time": "Tid",
"attribute.timestamp": "Tidstämpel",
"attribute.uid": "UID",
"attribute.uid.description": "Unik identifierare",
"button.attributes.add.another": "Lägg till nytt fält",
"button.component.add": "Lägg till en komponent",
"button.component.create": "Skapa komponent",
"button.model.create": "Skapa samlingstyp",
"button.single-types.create": "Skapa engångstyp",
"component.repeatable": "(repeterbar)",
"components.SelectComponents.displayed-value": "{number, plural, =0 {# komponenter} one {# komponent} other {# komponenter}} valda",
"components.componentSelect.no-component-available": "Du har redan lagt till alla dina komponenter",
"components.componentSelect.no-component-available.with-search": "Det finns inga komponenter matchande sökningen",
"components.componentSelect.value-component": "{number} komponenter valda (skriv för att söka efter en komponent)",
"components.componentSelect.value-components": "{number} komponenter valda",
"configurations": "Konfigurationer",
"contentType.apiId-plural.description": "Pluraliserat API-ID",
"contentType.apiId-plural.label": "API ID (Plural)",
"contentType.apiId-singular.description": "UID:t används för att generera API-rutterna och databastabellerna",
"contentType.apiId-singular.label": "API ID (Singular)",
"contentType.collectionName.description": "Användbart när namnet på din innehållstyp och din tabell är olika",
"contentType.collectionName.label": "Samlingsnamn",
"contentType.displayName.label": "Visningsnamn",
"contentType.draftAndPublish.description": "Skapa ett utkast av varje inlägg innan det publiceras",
"contentType.draftAndPublish.label": "Utkast/publiceringssystem",
"contentType.kind.change.warning": "Du ändrade typen på en innehållstyp: API:n kommer återskapas (rutter, kontroller, och tjänster kommer bli överskrivna).",
"error.attributeName.reserved-name": "Namnet kan inte användas för att det kan påverka annan funktionalitet",
"error.contentType.pluralName-used": "Värdet kan inte vara samma som namnet i singular",
"error.contentType.singularName-used": "Värdet kan inte vara samma som det pluraliserade namnet",
"error.contentTypeName.reserved-name": "Namnet kan inte användas i ditt projekt för att det kan påverka annan funktionalitet",
"error.validation.enum-duplicate": "Dubblettvärden är inte tillåtna (endast alfanumeriska tecken kontrolleras).",
"error.validation.enum-empty-string": "Tomma strängar är inte tillåtna",
"error.validation.enum-regex": "Minst ett värde är ogiltigt. Värden ska ha minst ett alfabetiskt tecken före det första talet.",
"error.validation.minSupMax": "Can't be superior",
"error.validation.positive": "Måste vara ett positivt tal",
"error.validation.regex": "Regex-mönstret är ogiltigt",
"error.validation.relation.targetAttribute-taken": "Detta namn existerar i målet",
"form.attribute.component.option.add": "Lägg till en komponent",
"form.attribute.component.option.create": "Skapa en komponent",
"form.attribute.component.option.create.description": "En komponent delas mellan innehållstyper och komponenter, och är tillgänglig överallt.",
"form.attribute.component.option.repeatable": "Repeterbar komponent",
"form.attribute.component.option.repeatable.description": "Bäst för flera t.ex ingredienser, metataggar m.m. (listor)",
"form.attribute.component.option.reuse-existing": "Använd en befintlig komponent",
"form.attribute.component.option.reuse-existing.description": "Återanvänd en komponent som redan har skapats för att hålla datastrukturen samma över flera innehållstyper.",
"form.attribute.component.option.single": "Engångskomponent",
"form.attribute.component.option.single.description": "Bäst för att gruppera fält som adress, huvudinnehåll, etc...",
"form.attribute.item.customColumnName": "Anpassade kolumnnamn",
"form.attribute.item.customColumnName.description": "Kan användas för att anpassa hur datan ser ut i API-svar",
"form.attribute.item.date.type.date": "datum (t.ex: 01/01/{currentYear})",
"form.attribute.item.date.type.datetime": "datum och tid (t.ex: 01/01/{currentYear} 00:00)",
"form.attribute.item.date.type.time": "tid (t.ex: 00:00)",
"form.attribute.item.defineRelation.fieldName": "Fältnamn",
"form.attribute.item.enumeration.graphql": "Namnändring för GraphQL",
"form.attribute.item.enumeration.graphql.description": "Låter dig ändra det genererade namnet i GraphQL",
"form.attribute.item.enumeration.placeholder": "Ex:\nmorgon\nmiddag\nkväll",
"form.attribute.item.enumeration.rules": "Värden (ett värde per rad)",
"form.attribute.item.maximum": "Största värde",
"form.attribute.item.maximumLength": "Längsta längd",
"form.attribute.item.minimum": "Minsta värde",
"form.attribute.item.minimumLength": "Kortaste längd",
"form.attribute.item.number.type": "Nummerformat",
"form.attribute.item.number.type.biginteger": "stort heltal (t.ex: 123456789)",
"form.attribute.item.number.type.decimal": "decimaltal (t.ex: 2.22)",
"form.attribute.item.number.type.float": "flyttal (t.ex: 3.33333333)",
"form.attribute.item.number.type.integer": "heltal (t.ex: 10)",
"form.attribute.item.privateField": "Privat fält",
"form.attribute.item.privateField.description": "Detta fält kommer inte att visas i API-svar",
"form.attribute.item.requiredField": "Obligatoriskt fält",
"form.attribute.item.requiredField.description": "Du kommer inte kunna skapa posten om detta fältet är tomt",
"form.attribute.item.text.regex": "RegEx-mönster",
"form.attribute.item.text.regex.description": "Texten för RegEx-mönstret",
"form.attribute.item.uniqueField": "Unikt fält",
"form.attribute.item.uniqueField.description": "Du kommer inte kunna skapa posten om det redan finns en annan post med samma värde",
"form.attribute.media.allowed-types": "Välj tillåtna typer av medier",
"form.attribute.media.allowed-types.option-files": "Filer",
"form.attribute.media.allowed-types.option-images": "Bilder",
"form.attribute.media.allowed-types.option-videos": "Videos",
"form.attribute.media.option.multiple": "Flera medier",
"form.attribute.media.option.multiple.description": "Tillåter flera medier att väljas i samma fält, passar bra för t.ex bildgallerier",
"form.attribute.media.option.single": "En media",
"form.attribute.media.option.single.description": "Bäst för profilbilder eller andra bilder som bara förekommer en gång per post",
"form.attribute.settings.default": "Standardvärde",
"form.attribute.text.option.long-text": "Lång text",
"form.attribute.text.option.long-text.description": "Bäst för beskrivningar eller andra längre texter. Fulltextsökning är inaktiverat.",
"form.attribute.text.option.short-text": "Kort text",
"form.attribute.text.option.short-text.description": "Bäst för titlar, namn, länkar (URL:er). Aktiverar fulltextsökning sökning för fältet.",
"form.button.add-components-to-dynamiczone": "Lägg till komponenter till dynamiska zonen",
"form.button.add-field": "Lägg till nytt fält",
"form.button.add-first-field-to-created-component": "Lägg till första fältet i komponenten",
"form.button.add.field.to.collectionType": "Lägg till ett nytt fält i samlingstypen",
"form.button.add.field.to.component": "Lägg till ett nytt fält i komponenten",
"form.button.add.field.to.contentType": "Lägg till ett nytt fält i innehållstypen",
"form.button.add.field.to.singleType": "Lägg till ett nytt fält i engångstypen",
"form.button.cancel": "Avbryt",
"form.button.collection-type.description": "Bäst för flera poster såsom artiklar, produkter och kommentarer.",
"form.button.collection-type.name": "Samlingstyper",
"form.button.configure-component": "Konfigurera komponenten",
"form.button.configure-view": "Konfigurera visningen",
"form.button.select-component": "Välj en komponent",
"form.button.single-type.description": "Bäst för poster som bara förekommer en gång såsom startsida, om oss, m.m.",
"form.button.single-type.name": "Engångstyper",
"form.contentType.divider.draft-publish": "Utkast/Publicera",
"from": "från",
"listView.headerLayout.description": "Skapa datastrukturen för ditt innehåll",
"menu.section.components.name": "Komponenter",
"menu.section.models.name": "Samlingstyper",
"menu.section.single-types.name": "Engångstyper",
"modalForm.attribute.form.base.name.description": "Mellanslag tillåts inte i namnet på attributet",
"modalForm.attribute.form.base.name.placeholder": "t.ex Titel, Slug, Canonical URL",
"modalForm.attribute.target-field": "Kopplat fält",
"modalForm.attributes.select-component": "Välj komponent",
"modalForm.attributes.select-components": "Välj komponenter",
"modalForm.collectionType.header-create": "Skapa samlingstyp",
"modalForm.component.header-create": "Skapa komponent",
"modalForm.components.create-component.category.label": "Välj kategori eller ange namn på ny kategori",
"modalForm.components.icon.label": "Ikon",
"modalForm.empty.button": "Lägg till anpassade fält",
"modalForm.empty.heading": "Inget här ännu.",
"modalForm.empty.sub-heading": "Hitta det du letar efter genom ett brett utbud av tillägg.",
"modalForm.editCategory.base.name.description": "Inget mellanslag får finnas i namnet på kategorin",
"modalForm.header-edit": "Redigera {name}",
"modalForm.header.categories": "Kategorier",
"modalForm.singleType.header-create": "Skapa engångstyp",
"modalForm.sub-header.addComponentToDynamicZone": "Lägg till ny komponent till dynamisk zon",
"modalForm.sub-header.attribute.create": "Lägg till {type}-fält",
"modalForm.sub-header.attribute.create.step": "Lägg till ny komponent ({step}/2)",
"modalForm.sub-header.attribute.edit": "Redigera {name}",
"modalForm.sub-header.chooseAttribute.collectionType": "Välj ett fält för samlingstypen",
"modalForm.sub-header.chooseAttribute.component": "Välj ett fält för komponenten",
"modalForm.sub-header.chooseAttribute.singleType": "Välj ett fält för engångstypen",
"modalForm.custom-fields.advanced.settings.extended": "Utökade inställningar",
"modalForm.tabs.custom": "Anpassat",
"modalForm.tabs.custom.howToLink": "Hur du lägger till anpassade fält",
"modalForm.tabs.default": "Standard",
"modalForm.tabs.label": "Standard/anpassade-flikar",
"modelPage.attribute.relation-polymorphic": "Relation (polymorfisk)",
"modelPage.attribute.relationWith": "Relation med",
"notification.error.dynamiczone-min.validation": "Minst en komponent måste vara vald för en dynamisk zon för att kunna spara innehållstypen",
"notification.info.autoreaload-disable": "autoReload-funktionen krävs för att använda detta plugin. Starta servern med `strapi develop`",
"notification.info.creating.notSaved": "Spara ditt arbete innan du skapar en ny samlingstyp eller komponent",
"plugin.description.long": "Modellera datastrukturen för ditt API. Skapa nya fält och relationer på bara en minut. Filerna skapas och uppdateras automatiskt i ditt projekt.",
"plugin.description.short": "Modellera datastrukturen för ditt API.",
"plugin.name": "Innehållstyps-skapare",
"popUpForm.navContainer.advanced": "Avancerade inställningar",
"popUpForm.navContainer.base": "Grundläggande inställningar",
"popUpWarning.bodyMessage.cancel-modifications": "Är du säker på att du vill avbryta dina ändringar?",
"popUpWarning.bodyMessage.cancel-modifications.with-components": "Är du säker på att du vill avbryta dina ändringar? Vissa komponenter har skapats eller modifierats...",
"popUpWarning.bodyMessage.category.delete": "Är du säker på att du vill ta bort den här kategorin? Alla komponenter i den kommer också att raderas.",
"popUpWarning.bodyMessage.component.delete": "Är du säker på att du vill ta bort den här komponenten?",
"popUpWarning.bodyMessage.contentType.delete": "Är du säker på att du vill ta bort den här samlingstypen?",
"popUpWarning.draft-publish.button.confirm": "Ja, inaktiverar",
"popUpWarning.draft-publish.message": "Om du inaktiverar Utkast/Publicera-systemet kommer dina utkast att raderas.",
"popUpWarning.draft-publish.second-message": "Är du säker på att du vill inaktivera det?",
"prompt.unsaved": "Är du säker på att du vill lämna? Dina ändringar kommer att försvinna.",
"relation.attributeName.placeholder": "Ex: författare, kategori, tagg",
"relation.manyToMany": "har och tillhör många",
"relation.manyToOne": "har många",
"relation.manyWay": "har många",
"relation.oneToMany": "tillhör många",
"relation.oneToOne": "har och tillhör en",
"relation.oneWay": "har en",
"table.button.no-fields": "Lägg till nytt fält",
"table.content.create-first-content-type": "Skapa din första samlingstyp",
"table.content.no-fields.collection-type": "Lägg till ett första fält till samlingstypen",
"table.content.no-fields.component": "Lägg till ett första fält i komponenten"
}

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-content-type-builder",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi plugin to create content type",
"repository": {
"type": "git",
@ -28,9 +28,9 @@
},
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/generators": "4.4.3",
"@strapi/helper-plugin": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/generators": "4.4.5",
"@strapi/helper-plugin": "4.4.5",
"@strapi/utils": "4.4.5",
"fs-extra": "10.0.0",
"lodash": "4.17.21",
"pluralize": "^8.0.0",

View File

@ -83,7 +83,13 @@ const processPopulate = (populate, ctx) => {
continue;
}
// make sure id is present for future populate queries
// Make sure to query the join column value if needed,
// so that we can apply the populate later on
if (attribute.joinColumn) {
qb.addSelect(attribute.joinColumn.name);
}
// Make sure id is present for future populate queries
if (_.has('id', meta.attributes)) {
qb.addSelect('id');
}

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/database",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi's database layer",
"homepage": "https://strapi.io",
"bugs": {

View File

@ -62,7 +62,7 @@ const Configuration = ({ config }) => {
})}
placeholder={formatMessage({
id: getTrad('Settings.email.plugin.placeholder.defaultFrom'),
defaultMessage: `ex: Strapi No-Reply \<no-reply@strapi.io\>`,
defaultMessage: "ex: Strapi No-Reply '<'no-reply@strapi.io'>'",
})}
disabled
onChange={() => {}}
@ -78,7 +78,7 @@ const Configuration = ({ config }) => {
})}
placeholder={formatMessage({
id: getTrad('Settings.email.plugin.placeholder.defaultReplyTo'),
defaultMessage: `ex: Strapi \<example@strapi.io\>`,
defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,
})}
disabled
onChange={() => {}}

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-email",
"version": "4.4.3",
"version": "4.4.5",
"description": "Easily configure your Strapi application to send emails.",
"repository": {
"type": "git",
@ -26,12 +26,12 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/provider-email-sendmail": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/provider-email-sendmail": "4.4.5",
"@strapi/utils": "4.4.5",
"lodash": "4.17.21"
},
"devDependencies": {
"@strapi/helper-plugin": "4.4.3",
"@strapi/helper-plugin": "4.4.5",
"@testing-library/react": "12.1.4"
},
"engines": {

View File

@ -0,0 +1,3 @@
const useAppInfosMock = jest.fn().mockReturnValue({});
export default useAppInfosMock;

View File

@ -9,14 +9,14 @@ const useTracking = () => {
const appInfo = useAppInfos();
trackRef.current = async (event, properties) => {
if (uuid) {
if (uuid && !window.strapi.telemetryDisabled) {
try {
await axios.post('https://analytics.strapi.io/track', {
event,
properties: {
...telemetryProperties,
...properties,
projectType: strapi.projectType,
projectType: window.strapi.projectType,
environment: appInfo.currentEnvironment,
},
uuid,

View File

@ -0,0 +1,96 @@
import React from 'react';
import { renderHook, act } from '@testing-library/react-hooks';
import axios from 'axios';
import TrackingContext from '../../../contexts/TrackingContext';
import useTracking from '..';
import useAppInfos from '../../useAppInfos';
jest.mock('../../useAppInfos');
jest.mock('axios', () => ({
...jest.requireActual('axios'),
post: jest.fn(),
}));
function setup(props) {
return new Promise((resolve) => {
act(() => {
resolve(
renderHook(() => useTracking(), {
wrapper: ({ children }) => (
<TrackingContext.Provider
value={{
uuid: 1,
telemetryProperties: {
nestedProperty: true,
},
...props,
}}
>
{children}
</TrackingContext.Provider>
),
})
);
});
});
}
describe('useTracking', () => {
afterEach(() => {
jest.clearAllMocks();
});
test('Call trackUsage() with all attributes', async () => {
useAppInfos.mockReturnValue({
currentEnvironment: 'testing',
});
const { result } = await setup();
result.current.trackUsage('event', { trackingProperty: true });
expect(axios.post).toBeCalledWith(expect.any(String), {
event: 'event',
uuid: 1,
properties: expect.objectContaining({
environment: 'testing',
nestedProperty: true,
trackingProperty: true,
}),
});
});
test('Do not track if it has been disabled', async () => {
window.strapi.telemetryDisabled = true;
const { result } = await setup();
result.current.trackUsage();
expect(axios.post).not.toBeCalled();
});
test('Do not track if no uuid was set', async () => {
window.strapi.telemetryDisabled = true;
const { result } = await setup({
uuid: null,
});
result.current.trackUsage();
expect(axios.post).not.toBeCalled();
window.strapi.telemetryDisabled = false;
});
test('Should fail gracefully if the request does not work', async () => {
axios.post = jest.fn().mockRejectedValueOnce({});
const { result } = await setup();
expect(result.current.trackUsage).not.toThrow();
});
});

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/helper-plugin",
"version": "4.4.3",
"version": "4.4.5",
"description": "Helper for Strapi plugins development",
"repository": {
"type": "git",
@ -44,7 +44,6 @@
"@fortawesome/free-brands-svg-icons": "^5.15.2",
"@fortawesome/free-solid-svg-icons": "^5.15.3",
"@fortawesome/react-fontawesome": "^0.2.0",
"@strapi/design-system": "1.2.5",
"axios": "0.27.2",
"date-fns": "2.29.2",
"formik": "^2.2.6",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/permissions",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi's permission layer.",
"repository": {
"type": "git",
@ -25,7 +25,7 @@
},
"dependencies": {
"@casl/ability": "5.4.4",
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"lodash": "4.17.21",
"sift": "16.0.0"
},

View File

@ -44,6 +44,7 @@ module.exports = async ({ buildDestDir, forceBuild = true, optimization, srcDir
options: {
backend: serverUrl,
adminPath: addSlash(adminPath),
telemetryIsDisabled: strapiInstance.telemetry.isDisabled,
},
})
.then(() => {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/strapi",
"version": "4.4.3",
"version": "4.4.5",
"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",
@ -78,20 +78,20 @@
"test:unit": "jest --verbose"
},
"dependencies": {
"@koa/cors": "3.4.2",
"@koa/cors": "3.4.3",
"@koa/router": "10.1.1",
"@strapi/admin": "4.4.3",
"@strapi/database": "4.4.3",
"@strapi/generate-new": "4.4.3",
"@strapi/generators": "4.4.3",
"@strapi/logger": "4.4.3",
"@strapi/permissions": "4.4.3",
"@strapi/plugin-content-manager": "4.4.3",
"@strapi/plugin-content-type-builder": "4.4.3",
"@strapi/plugin-email": "4.4.3",
"@strapi/plugin-upload": "4.4.3",
"@strapi/typescript-utils": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/admin": "4.4.5",
"@strapi/database": "4.4.5",
"@strapi/generate-new": "4.4.5",
"@strapi/generators": "4.4.5",
"@strapi/logger": "4.4.5",
"@strapi/permissions": "4.4.5",
"@strapi/plugin-content-manager": "4.4.5",
"@strapi/plugin-content-type-builder": "4.4.5",
"@strapi/plugin-email": "4.4.5",
"@strapi/plugin-upload": "4.4.5",
"@strapi/typescript-utils": "4.4.5",
"@strapi/utils": "4.4.5",
"bcryptjs": "2.4.3",
"boxen": "5.1.2",
"chalk": "4.1.2",

View File

@ -3,20 +3,17 @@ import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { render as renderRTL, fireEvent, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import en from '../../../translations/en.json';
import { IntlProvider } from 'react-intl';
import { AssetCardBase } from '../AssetCardBase';
jest.mock('react-intl', () => ({
useIntl: () => ({ formatMessage: jest.fn(({ id }) => en[id]) }),
}));
describe('AssetCardBase', () => {
const render = (props) =>
renderRTL(
<ThemeProvider theme={lightTheme}>
<AssetCardBase name="Card" extension="png" {...props} />
</ThemeProvider>
<IntlProvider locale="en" messages={{}} defaultLocale="en">
<ThemeProvider theme={lightTheme}>
<AssetCardBase name="Card" extension="png" {...props} />
</ThemeProvider>
</IntlProvider>
);
describe('Interaction', () => {

View File

@ -37,7 +37,7 @@ ContextInfo.propTypes = {
blocks: PropTypes.arrayOf(
PropTypes.shape({
label: PropTypes.string,
value: PropTypes.string,
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
})
).isRequired,
};

View File

@ -21,7 +21,7 @@ const messageForPlugin = Object.keys(en).reduce((acc, curr) => {
const asset = {
id: 8,
name: 'Screenshot 2.png',
alternativeText: null,
alternativeText: '',
caption: null,
width: 1476,
height: 780,

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-upload",
"version": "4.4.3",
"version": "4.4.5",
"description": "Makes it easy to upload images and files to your Strapi Application.",
"license": "SEE LICENSE IN LICENSE",
"author": {
@ -23,9 +23,9 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/helper-plugin": "4.4.3",
"@strapi/provider-upload-local": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/helper-plugin": "4.4.5",
"@strapi/provider-upload-local": "4.4.5",
"@strapi/utils": "4.4.5",
"byte-size": "7.0.1",
"cropperjs": "1.5.12",
"date-fns": "2.29.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/utils",
"version": "4.4.3",
"version": "4.4.5",
"description": "Shared utilities for the Strapi packages",
"keywords": [
"strapi",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/generate-new",
"version": "4.4.3",
"version": "4.4.5",
"description": "Generate a new Strapi application.",
"keywords": [
"generate",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/generators",
"version": "4.4.3",
"version": "4.4.5",
"description": "Interactive API generator.",
"keywords": [
"strapi",
@ -30,8 +30,8 @@
"main": "lib/index.js",
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/typescript-utils": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/typescript-utils": "4.4.5",
"@strapi/utils": "4.4.5",
"chalk": "4.1.2",
"fs-extra": "10.0.0",
"node-plop": "0.26.3",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-color-picker",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi maintained Custom Fields",
"strapi": {
"name": "color-picker",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-documentation",
"version": "4.4.3",
"version": "4.4.5",
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
"repository": {
"type": "git",
@ -24,8 +24,8 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/helper-plugin": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/helper-plugin": "4.4.5",
"@strapi/utils": "4.4.5",
"bcryptjs": "2.4.3",
"cheerio": "^1.0.0-rc.12",
"fs-extra": "10.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-graphql",
"version": "4.4.3",
"version": "4.4.5",
"description": "Adds GraphQL endpoint with default API methods.",
"repository": {
"type": "git",
@ -29,7 +29,7 @@
"dependencies": {
"@graphql-tools/schema": "8.1.2",
"@graphql-tools/utils": "^8.12.0",
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"apollo-server-core": "3.1.2",
"apollo-server-koa": "3.10.0",
"glob": "^7.1.7",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-i18n",
"version": "4.4.3",
"version": "4.4.5",
"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",
@ -24,7 +24,7 @@
"test:unit": "jest --verbose"
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"lodash": "4.17.21"
},
"devDependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-sentry",
"version": "4.4.3",
"version": "4.4.5",
"description": "Send Strapi error events to Sentry",
"repository": {
"type": "git",

View File

@ -4,8 +4,13 @@ import { IntlProvider } from 'react-intl';
import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { QueryClient, QueryClientProvider } from 'react-query';
import { useRBAC } from '@strapi/helper-plugin';
import { ProvidersPage } from '../index';
import { library } from '@fortawesome/fontawesome-svg-core';
import { faDiscord } from '@fortawesome/free-brands-svg-icons';
import { faEnvelope } from '@fortawesome/free-solid-svg-icons';
import server from './server';
import { ProvidersPage } from '../index';
library.add(faDiscord, faEnvelope);
jest.mock('@strapi/helper-plugin', () => ({
...jest.requireActual('@strapi/helper-plugin'),

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-users-permissions",
"version": "4.4.3",
"version": "4.4.5",
"description": "Protect your API with a full-authentication process based on JWT",
"repository": {
"type": "git",
@ -27,8 +27,8 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/helper-plugin": "4.4.3",
"@strapi/utils": "4.4.3",
"@strapi/helper-plugin": "4.4.5",
"@strapi/utils": "4.4.5",
"bcryptjs": "2.4.3",
"grant-koa": "5.4.8",
"jsonwebtoken": "^8.1.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-amazon-ses",
"version": "4.4.3",
"version": "4.4.5",
"description": "Amazon SES provider for strapi email",
"keywords": [
"email",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"node-ses": "^3.0.3"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-mailgun",
"version": "4.4.3",
"version": "4.4.5",
"description": "Mailgun provider for strapi email plugin",
"keywords": [
"email",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"form-data": "^4.0.0",
"mailgun.js": "5.2.2"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-nodemailer",
"version": "4.4.3",
"version": "4.4.5",
"description": "Nodemailer provider for Strapi 3",
"keywords": [
"strapi",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendgrid",
"version": "4.4.3",
"version": "4.4.5",
"description": "Sendgrid provider for strapi email",
"keywords": [
"email",
@ -37,7 +37,7 @@
},
"dependencies": {
"@sendgrid/mail": "7.7.0",
"@strapi/utils": "4.4.3"
"@strapi/utils": "4.4.5"
},
"engines": {
"node": ">=14.19.1 <=18.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendmail",
"version": "4.4.3",
"version": "4.4.5",
"description": "Sendmail provider for strapi email",
"keywords": [
"email",
@ -35,7 +35,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"sendmail": "^1.6.1"
},
"engines": {

View File

@ -124,6 +124,22 @@ module.exports = [
If you use dots in your bucket name, the url of the ressource is in directory style (`s3.yourRegion.amazonaws.com/your.bucket.name/image.jpg`) instead of `yourBucketName.s3.yourRegion.amazonaws.com/image.jpg`. Then only add `s3.yourRegion.amazonaws.com` to img-src and media-src directives.
## Bucket CORS Configuration
If you are planning on uploading content like GIFs and videos to your S3 bucket, you will want to edit its CORS configuration so that thumbnails are properly shown in Strapi. To do so, open your Bucket on the AWS console and locate the _Cross-origin resource sharing (CORS)_ field under the _Permissions_ tab, then amend the policies by writing your own JSON configuration, or copying and pasting the following one:
```json
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET"],
"AllowedOrigins": ["YOUR STRAPI URL"],
"ExposeHeaders": [],
"MaxAgeSeconds": 3000
}
]
```
## Required AWS Policy Actions
These are the minimum amount of permissions needed for this provider to work.

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-aws-s3",
"version": "4.4.3",
"version": "4.4.5",
"description": "AWS S3 provider for strapi upload",
"keywords": [
"upload",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-cloudinary",
"version": "4.4.3",
"version": "4.4.5",
"description": "Cloudinary provider for strapi upload",
"keywords": [
"upload",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"cloudinary": "^1.30.1",
"into-stream": "^5.1.0"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-local",
"version": "4.4.3",
"version": "4.4.5",
"description": "Local provider for strapi upload",
"keywords": [
"upload",
@ -35,7 +35,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.4.3",
"@strapi/utils": "4.4.5",
"fs-extra": "10.0.0"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/babel-plugin-switch-ee-ce",
"version": "4.4.3",
"version": "4.4.5",
"private": false,
"description": "Babel plugin to switch from CE to EE at runtime",
"repository": "git://github.com/strapi/strapi.git",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/logger",
"version": "4.4.3",
"version": "4.4.5",
"description": "Strapi's logger",
"homepage": "https://strapi.io",
"bugs": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/typescript-utils",
"version": "4.4.3",
"version": "4.4.5",
"description": "Typescript support for Strapi",
"keywords": [
"strapi",

View File

@ -2478,10 +2478,10 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@koa/cors@3.4.2":
version "3.4.2"
resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.4.2.tgz#70c13e5843d1762ce78fd8767162cd916132c946"
integrity sha512-NJU7/+h9XAfw/W/dLadDg8JYrQ5EDxstBl9a9G0A++EqvrQpabWcZ4tBxOdW57QjketX66zkOcXE+5V7IjLWYA==
"@koa/cors@3.4.3":
version "3.4.3"
resolved "https://registry.yarnpkg.com/@koa/cors/-/cors-3.4.3.tgz#d669ee6e8d6e4f0ec4a7a7b0a17e7a3ed3752ebb"
integrity sha512-WPXQUaAeAMVaLTEFpoq3T2O1C+FstkjJnDQqy95Ck1UdILajsRhu6mhJ8H2f4NFPRBoCNN+qywTJfq/gGki5mw==
dependencies:
vary "^1.1.2"