Merge branch 'main' into feature/private-s3-bucket

This commit is contained in:
Marc-Roig 2023-03-15 12:42:31 +01:00
commit 2f6afb9695
26 changed files with 1143 additions and 880 deletions

View File

@ -86,6 +86,27 @@ const sidebars = {
},
items: ['example'],
},
{
type: 'category',
label: 'Database',
link: {
type: 'doc',
id: 'core/database/intro',
},
items: [
{
type: 'category',
label: 'Relations',
items: [
{
type: 'doc',
label: 'Reordering',
id: 'core/database/relations/reordering',
},
],
},
],
},
{
type: 'category',
label: 'Helper Plugin',

View File

@ -2174,9 +2174,9 @@
"@hapi/hoek" "^9.0.0"
"@sideway/formula@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c"
integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==
version "3.0.1"
resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
"@sideway/pinpoint@^2.0.0":
version "2.0.0"
@ -7805,9 +7805,9 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3:
integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
webpack@^5.73.0:
version "5.74.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980"
integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==
version "5.76.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c"
integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^0.0.51"

View File

@ -216,6 +216,10 @@ const createYupSchemaAttribute = (type, validations, options) => {
schema = yup
.mixed(errorsTrads.json)
.test('isJSON', errorsTrads.json, (value) => {
if (!value || !value.length) {
return true;
}
try {
JSON.parse(value);
@ -226,7 +230,9 @@ const createYupSchemaAttribute = (type, validations, options) => {
})
.nullable()
.test('required', errorsTrads.required, (value) => {
if (validations.required && !value.length) return false;
if (validations.required && (!value || !value.length)) {
return false;
}
return true;
});

View File

@ -5,14 +5,6 @@ const createDefaultForm = (attributes, allComponentsSchema) => {
const attribute = get(attributes, [current], {});
const { default: defaultValue, component, type, required, min, repeatable } = attribute;
if (type === 'json') {
acc[current] = null;
}
if (type === 'json' && required === true) {
acc[current] = {};
}
if (defaultValue !== undefined) {
acc[current] = defaultValue;
}

View File

@ -11,11 +11,6 @@ describe('CONTENT MANAGER | utils | createDefaultForm', () => {
expect(createDefaultForm(attributes, {})).toEqual({});
});
it('should set the json type with the correct value', () => {
expect(createDefaultForm({ test: { type: 'json' } }, {})).toEqual({ test: null });
expect(createDefaultForm({ test: { type: 'json', required: true } }, {})).toEqual({ test: {} });
});
it('should init the requide dynamic zone type with an empty array', () => {
expect(createDefaultForm({ test: { type: 'dynamiczone', required: true } })).toEqual({
test: [],

View File

@ -69,6 +69,7 @@ const FormHead = ({
})}
</Link>
}
ellipsis
/>
);
};

View File

@ -63,8 +63,8 @@ const Table = ({
condition: canUpdate,
})}
>
<Td>
<Typography textColor="neutral800" fontWeight="bold">
<Td maxWidth={pxToRem(250)}>
<Typography textColor="neutral800" fontWeight="bold" ellipsis>
{token.name}
</Typography>
</Td>

View File

@ -275,6 +275,10 @@ exports[`ADMIN | Pages | API TOKENS | EditView renders and matches the snapshot
font-weight: 600;
font-size: 2rem;
line-height: 1.25;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #32324d;
}
@ -1824,6 +1828,10 @@ exports[`ADMIN | Pages | API TOKENS | EditView renders and matches the snapshot
font-weight: 600;
font-size: 2rem;
line-height: 1.25;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #32324d;
}

View File

@ -2,7 +2,7 @@ import * as yup from 'yup';
import { translatedErrors } from '@strapi/helper-plugin';
const schema = yup.object().shape({
name: yup.string(translatedErrors.string).required(translatedErrors.required),
name: yup.string(translatedErrors.string).max(100).required(translatedErrors.required),
type: yup
.string(translatedErrors.string)
.oneOf(['read-only', 'full-access', 'custom'])

View File

@ -158,7 +158,7 @@ describe('ADMIN | Pages | API TOKENS | ListPage', () => {
cursor: pointer;
}
.c36 {
.c35 {
max-width: 15.625rem;
}
@ -255,9 +255,13 @@ describe('ADMIN | Pages | API TOKENS | ListPage', () => {
color: #666687;
}
.c35 {
.c36 {
font-size: 0.875rem;
line-height: 1.43;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-weight: 600;
color: #32324d;
}
@ -919,19 +923,19 @@ describe('ADMIN | Pages | API TOKENS | ListPage', () => {
>
<td
aria-colindex="1"
class="c25"
class="c35 c25"
role="gridcell"
tabindex="-1"
>
<span
class="c5 c35"
class="c5 c36"
>
My super token
</span>
</td>
<td
aria-colindex="2"
class="c36 c25"
class="c35 c25"
role="gridcell"
tabindex="-1"
>

View File

@ -148,6 +148,10 @@ exports[`ADMIN | Pages | TRANSFER TOKENS | EditView renders and matches the snap
font-weight: 600;
font-size: 2rem;
line-height: 1.25;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #32324d;
}
@ -1121,6 +1125,10 @@ exports[`ADMIN | Pages | TRANSFER TOKENS | EditView renders and matches the snap
font-weight: 600;
font-size: 2rem;
line-height: 1.25;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #32324d;
}

View File

@ -2,7 +2,7 @@ import * as yup from 'yup';
import { translatedErrors } from '@strapi/helper-plugin';
const schema = yup.object().shape({
name: yup.string(translatedErrors.string).required(translatedErrors.required),
name: yup.string(translatedErrors.string).max(100).required(translatedErrors.required),
description: yup.string().nullable(),
lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required),
});

View File

@ -158,7 +158,7 @@ describe('ADMIN | Pages | TRANSFER TOKENS | ListPage', () => {
cursor: pointer;
}
.c36 {
.c35 {
max-width: 15.625rem;
}
@ -255,9 +255,13 @@ describe('ADMIN | Pages | TRANSFER TOKENS | ListPage', () => {
color: #666687;
}
.c35 {
.c36 {
font-size: 0.875rem;
line-height: 1.43;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-weight: 600;
color: #32324d;
}
@ -919,19 +923,19 @@ describe('ADMIN | Pages | TRANSFER TOKENS | ListPage', () => {
>
<td
aria-colindex="1"
class="c25"
class="c35 c25"
role="gridcell"
tabindex="-1"
>
<span
class="c5 c35"
class="c5 c36"
>
My super token
</span>
</td>
<td
aria-colindex="2"
class="c36 c25"
class="c35 c25"
role="gridcell"
tabindex="-1"
>

File diff suppressed because it is too large Load Diff

View File

@ -132,7 +132,7 @@
"style-loader": "3.3.1",
"styled-components": "5.3.3",
"typescript": "4.6.2",
"webpack": "^5.75.0",
"webpack": "^5.76.0",
"webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1",
"webpackbar": "^5.0.2",

View File

@ -48,6 +48,7 @@ const formatAttribute = (key, attribute) => {
multiple: !!attribute.multiple,
required: !!required,
configurable: configurable === false ? false : undefined,
private: !!attribute.private,
allowedTypes: attribute.allowedTypes,
pluginOptions,
};

View File

@ -303,15 +303,19 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider {
const startAssetsTransferOnce = this.#startStepOnce('assets');
const flush = async () => {
await this.#streamStep('assets', batch);
const streamError = await this.#streamStep('assets', batch);
batch = [];
return streamError;
};
const safePush = async (chunk: client.TransferAssetFlow) => {
batch.push(chunk);
if (batchLength() >= batchSize) {
await flush();
const streamError = await flush();
if (streamError) {
throw streamError;
}
}
};
@ -347,15 +351,25 @@ class RemoteStrapiDestinationProvider implements IDestinationProvider {
const assetID = v4();
const { filename, filepath, stats, stream } = asset;
await safePush({ action: 'start', assetID, data: { filename, filepath, stats } });
try {
await safePush({
action: 'start',
assetID,
data: { filename, filepath, stats },
});
for await (const chunk of stream) {
await safePush({ action: 'stream', assetID, data: chunk });
for await (const chunk of stream) {
await safePush({ action: 'stream', assetID, data: chunk });
}
await safePush({ action: 'end', assetID });
callback();
} catch (error) {
if (error instanceof Error) {
callback(error);
}
}
await safePush({ action: 'end', assetID });
callback();
},
});
}

View File

@ -4,20 +4,20 @@ import { useState } from 'react';
import { Meta, Story, Canvas } from '@storybook/addon-docs/blocks';
import DateTimePicker from './index';
<Meta
title="components/DateTimePicker"
<Meta
title="components/DateTimePicker"
component={DateTimePicker}
argTypes={{
label: {
control: {
type: 'text'
}
control: {
type: 'text',
},
},
value: {
control: {
type: 'date'
}
}
type: 'date',
},
},
}}
/>
@ -37,7 +37,7 @@ Description...
<DateTimePicker
onClear={() => setValue(undefined)}
value={value}
onChange={e => setValue(e)}
onChange={(e) => setValue(e)}
label="Date time picker"
hint="This is a super description"
/>
@ -53,6 +53,7 @@ Description...
<Canvas>
<Story name="error">
<DateTimePicker
label="Date time picker"
hint="This is a super description"
error="Very very very very very very very long error"
/>

View File

@ -4,6 +4,7 @@ import { useEffect, useState, useRef } from 'react';
import { Meta, ArgsTable, Canvas, Story } from '@storybook/addon-docs';
import { Button, Box, Main, Flex } from '@strapi/design-system';
import useQueryParams from '../../hooks/useQueryParams';
import useTracking from '../../hooks/useTracking';
import FilterListURLQuery from '../FilterListURLQuery';
import FilterPopoverURLQuery from './index';
@ -51,6 +52,7 @@ import { FilterListURLQuery } from '@strapi/helper-plugin';
metadatas: { label: 'city' },
},
];
const { trackUsage } = useTracking();
return (
<Main>
<Flex direction="column" alignItems="stretch" gap={6}>

View File

@ -142,11 +142,12 @@ const GenericInput = ({
labelAction={labelAction}
value={value}
error={errorMessage}
disabled={disabled}
hint={hint}
required={required}
onChange={(json) => {
// Default to null when the field is not required and there is no input value
const value = !attribute.required && !json.length ? 'null' : json;
const value = !attribute.required && !json.length ? null : json;
onChange({ target: { name, value } });
}}
minHeight={pxToRem(252)}

View File

@ -77,7 +77,7 @@
"rimraf": "3.0.2",
"styled-components": "5.3.3",
"typescript": "4.6.2",
"webpack": "^5.75.0",
"webpack": "^5.76.0",
"webpack-cli": "^5.0.1"
},
"peerDependencies": {

View File

@ -31,8 +31,8 @@ export const AssetGridList = ({
if (onReorderAsset) {
return (
<GridItem col={3} height="100%">
<Draggable key={asset.id} index={index} moveItem={onReorderAsset} id={asset.id}>
<GridItem key={asset.id} col={3} height="100%">
<Draggable index={index} moveItem={onReorderAsset} id={asset.id}>
<AssetCard
allowedTypes={allowedTypes}
asset={asset}

View File

@ -144,4 +144,27 @@ describe('Env helper', () => {
expect(envHelper.date('DATE_VAR')).toEqual(new Date(2010, 1, 21, 12, 34, 12));
});
});
describe('env with union cast', () => {
test('Throws if expectedValues is not provided', () => {
expect(() => envHelper.oneOf('NO_VAR')).toThrow();
});
test('Throws if defaultValue not included in expectedValues', () => {
expect(() => envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'], 'test')).toThrow();
});
test('Return undefined if value is missing in expectedValues and no defaultValue', () => {
expect(envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'])).toBeUndefined();
});
test('Return defaultValue if value does not exist in expectedValues', () => {
expect(envHelper.oneOf('NO_VAR', ['lorem', 'ipsum'], 'ipsum')).toBe('ipsum');
});
test('Return defaultValue if value exists and is missing in expectedValues', () => {
process.env.WITH_VAR = 'test';
expect(envHelper.oneOf('WITH_VAR', ['lorem', 'ipsum'], 'ipsum')).toBe('ipsum');
});
});
});

View File

@ -71,6 +71,26 @@ const utils = {
const value = process.env[key];
return new Date(value);
},
/**
* Gets a value from env that matches oneOf provided values
* @param {string} key
* @param {string[]} expectedValues
* @param {string|undefined} defaultValue
* @returns {string|undefined}
*/
oneOf(key, expectedValues, defaultValue) {
if (!expectedValues) {
throw new Error(`env.oneOf requires expectedValues`);
}
if (defaultValue && !expectedValues.includes(defaultValue)) {
throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
}
const rawValue = env(key, defaultValue);
return expectedValues.includes(rawValue) ? rawValue : defaultValue;
},
};
Object.assign(env, utils);

View File

@ -1,62 +1,82 @@
{
"BoundRoute.title": "绑定路由到",
"EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
"EditForm.inputSelect.label.role": "认证用户的默认角色",
"EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供者(绑定的相同的电子邮件地址)来创建多个帐户。",
"EditForm.inputToggle.description.email-confirmation": "启用ON新注册的用户会收到一封确认电子邮件。",
"EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
"EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的 URL",
"EditForm.inputToggle.description.sign-up": "当禁用OFF注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
"EditForm.inputToggle.label.email": "每个电子邮件地址一个帐户",
"EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
"EditForm.inputToggle.label.email-confirmation-redirection": "重定向 URL",
"EditForm.inputToggle.label.email-reset-password": "重置密码页面 URL",
"EditForm.inputToggle.label.sign-up": "启用注册",
"EditForm.inputToggle.placeholder.email-confirmation-redirection": "例如: https://yourfrontend.com/reset-password",
"EditForm.inputToggle.placeholder.email-reset-password": "例如: https://yourfrontend.com/reset-password",
"EditPage.form.roles": "角色详情",
"Email.template.email_confirmation": "邮箱地址确认",
"HeaderNav.link.advancedSettings": "高级设置",
"HeaderNav.link.emailTemplates": "电子邮件模板",
"HeaderNav.link.providers": "提供者",
"Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
"Plugins.header.description": "下面只列出路由绑定的操作。",
"Plugins.header.title": "权限",
"Policies.header.hint": "选择应用程序或插件的操作,然后点击 COG 图标显示绑定的路由",
"Policies.header.title": "高级设置",
"PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
"PopUpForm.Email.link.documentation": "查看我们的文档",
"PopUpForm.Email.options.from.email.label": "发件人地址",
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
"PopUpForm.Email.options.from.name.label": "发件人名称",
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
"PopUpForm.Email.options.message.label": "消息",
"PopUpForm.Email.options.object.label": "主题",
"PopUpForm.Email.options.object.placeholder": "请为%APP_NAME%确认邮箱地址",
"PopUpForm.Email.options.response_email.label": "回复邮件",
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
"PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
"PopUpForm.Providers.enabled.label": "启用",
"PopUpForm.Providers.key.label": "客户端 ID",
"PopUpForm.Providers.key.placeholder": "文本",
"PopUpForm.Providers.redirectURL.front-end.label": "重定向 URL",
"PopUpForm.Providers.redirectURL.label": "添加到{provider}应用配置的跳转URL",
"PopUpForm.Providers.secret.label": "客户端秘钥",
"PopUpForm.Providers.secret.placeholder": "文本",
"PopUpForm.Providers.subdomain.label": "Host URI (Subdomain)",
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
"PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
"PopUpForm.header.edit.providers": "编辑提供商",
"Settings.roles.deleted": "角色已被删除",
"Settings.roles.edited": "角色编辑完成",
"Settings.section-label": "用户及权限插件",
"notification.success.submit": "设置已被更新",
"page.title": "设置 - 角色",
"plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
"plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API",
"plugin.name": "角色及权限",
"popUpWarning.button.cancel": "取消",
"popUpWarning.button.confirm": "确认",
"popUpWarning.title": "请确认",
"popUpWarning.warning.cancel": "你确定你要取消你的修改?"
"BoundRoute.title": "绑定路由到",
"EditForm.inputSelect.description.role": "新验证身份的用户将被赋予所选角色。",
"EditForm.inputSelect.label.role": "认证用户的默认角色",
"EditForm.inputToggle.description.email": "不允许用户使用不同的认证提供者(绑定的相同的电子邮件地址)来创建多个帐户。",
"EditForm.inputToggle.description.email-confirmation": "启用ON新注册的用户会收到一封确认电子邮件。",
"EditForm.inputToggle.description.email-confirmation-redirection": "确认您的电子邮件后,选择将您重定向到的位置。",
"EditForm.inputToggle.description.email-reset-password": "应用程序的重置密码页面的 URL",
"EditForm.inputToggle.description.sign-up": "当禁用OFF注册过程将被禁止。任何人无论使用任何的供应商都不可以订阅。",
"EditForm.inputToggle.label.email": "每个电子邮件地址一个帐户",
"EditForm.inputToggle.label.email-confirmation": "启用电子邮件确认",
"EditForm.inputToggle.label.email-confirmation-redirection": "重定向 URL",
"EditForm.inputToggle.label.email-reset-password": "重置密码页面 URL",
"EditForm.inputToggle.label.sign-up": "启用注册",
"EditForm.inputToggle.placeholder.email-confirmation-redirection": "例如: https://yourfrontend.com/reset-password",
"EditForm.inputToggle.placeholder.email-reset-password": "例如: https://yourfrontend.com/reset-password",
"EditPage.form.roles": "角色详情",
"Email.template.data.loaded": "电子邮件模板已加载",
"Email.template.email_confirmation": "邮箱地址确认",
"Email.template.form.edit.label": "编辑模板",
"Email.template.table.action.label": "操作",
"Email.template.table.icon.label": "图标",
"Email.template.table.name.label": "名称",
"Form.advancedSettings.data.loaded": "高级设置数据已加载",
"HeaderNav.link.advancedSettings": "高级设置",
"HeaderNav.link.emailTemplates": "电子邮件模板",
"HeaderNav.link.providers": "提供者",
"Plugin.permissions.plugins.description": "定义 {name} 插件所有允许的操作。",
"Plugins.header.description": "下面只列出路由绑定的操作。",
"Plugins.header.title": "权限",
"Policies.header.hint": "选择应用程序或插件的操作,然后点击 COG 图标显示绑定的路由",
"Policies.header.title": "高级设置",
"PopUpForm.Email.email_templates.inputDescription": "如果你不确定如何使用变量, {link}",
"PopUpForm.Email.link.documentation": "查看我们的文档",
"PopUpForm.Email.options.from.email.label": "发件人地址",
"PopUpForm.Email.options.from.email.placeholder": "kai@doe.com",
"PopUpForm.Email.options.from.name.label": "发件人名称",
"PopUpForm.Email.options.from.name.placeholder": "Kai Doe",
"PopUpForm.Email.options.message.label": "消息",
"PopUpForm.Email.options.object.label": "主题",
"PopUpForm.Email.options.object.placeholder": "请为%APP_NAME%确认邮箱地址",
"PopUpForm.Email.options.response_email.label": "回复邮件",
"PopUpForm.Email.options.response_email.placeholder": "kai@doe.com",
"PopUpForm.Providers.enabled.description": "如果禁用,用户将无法使用此供应商。",
"PopUpForm.Providers.enabled.label": "启用",
"PopUpForm.Providers.key.label": "客户端 ID",
"PopUpForm.Providers.key.placeholder": "文本",
"PopUpForm.Providers.redirectURL.front-end.label": "重定向 URL",
"PopUpForm.Providers.redirectURL.label": "添加到{provider}应用配置的跳转URL",
"PopUpForm.Providers.secret.label": "客户端秘钥",
"PopUpForm.Providers.secret.placeholder": "文本",
"PopUpForm.Providers.subdomain.label": "主机URI子域名",
"PopUpForm.Providers.subdomain.placeholder": "my.subdomain.com",
"PopUpForm.header.edit.email-templates": "编辑电子邮件模版",
"PopUpForm.header.edit.providers": "编辑提供商",
"Providers.data.loaded": "提供商已加载",
"Providers.status": "状态",
"Roles.empty": "您还没有任何角色。",
"Roles.empty.search": "没有与搜索相匹配的角色。",
"Settings.roles.deleted": "角色已被删除",
"Settings.roles.edited": "角色编辑完成",
"Settings.section-label": "用户及权限插件",
"components.Input.error.validation.email": "这是一个无效的电子邮件",
"components.Input.error.validation.json": "这不符合JSON格式",
"components.Input.error.validation.max": "值过高。",
"components.Input.error.validation.maxLength": "值过长。",
"components.Input.error.validation.min": "值太低。",
"components.Input.error.validation.minLength": "值太短。",
"components.Input.error.validation.minSupMax": "不能超过上限",
"components.Input.error.validation.regex": "该值不符合正则表达式。",
"components.Input.error.validation.required": "该值为必填项。",
"components.Input.error.validation.unique": "该值已被使用。",
"notification.success.submit": "设置已被更新",
"page.title": "设置 - 角色",
"plugin.description.long": "使用基于 JWT 的完整身份验证过程来保护 API。这个插件还有一个 ACL 策略,允许你管理用户组之间的权限。",
"plugin.description.short": "使用基于 JWT 的完整身份验证过程保护 API",
"plugin.name": "角色及权限",
"popUpWarning.button.cancel": "取消",
"popUpWarning.button.confirm": "确认",
"popUpWarning.title": "请确认",
"popUpWarning.warning.cancel": "你确定你要取消你的修改?"
}

View File

@ -8467,18 +8467,7 @@ browserslist-to-esbuild@1.2.0:
dependencies:
browserslist "^4.17.3"
browserslist@^4.12.0, browserslist@^4.14.5:
version "4.20.2"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88"
integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==
dependencies:
caniuse-lite "^1.0.30001317"
electron-to-chromium "^1.4.84"
escalade "^3.1.1"
node-releases "^2.0.2"
picocolors "^1.0.0"
browserslist@^4.17.3, browserslist@^4.21.4:
browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.17.3, browserslist@^4.20.2, browserslist@^4.21.0, browserslist@^4.21.3, browserslist@^4.21.4:
version "4.21.4"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987"
integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==
@ -8488,26 +8477,6 @@ browserslist@^4.17.3, browserslist@^4.21.4:
node-releases "^2.0.6"
update-browserslist-db "^1.0.9"
browserslist@^4.20.2:
version "4.21.0"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.0.tgz#7ab19572361a140ecd1e023e2c1ed95edda0cefe"
integrity sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==
dependencies:
caniuse-lite "^1.0.30001358"
electron-to-chromium "^1.4.164"
node-releases "^2.0.5"
update-browserslist-db "^1.0.0"
browserslist@^4.21.0, browserslist@^4.21.3:
version "4.21.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a"
integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==
dependencies:
caniuse-lite "^1.0.30001370"
electron-to-chromium "^1.4.202"
node-releases "^2.0.6"
update-browserslist-db "^1.0.5"
bs-logger@0.x:
version "0.2.6"
resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
@ -8814,7 +8783,7 @@ camelize@^1.0.0:
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==
caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001358, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001400:
caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001400:
version "1.0.30001449"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz#a8d11f6a814c75c9ce9d851dc53eb1d1dfbcd657"
integrity sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==
@ -10698,26 +10667,11 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
electron-to-chromium@^1.4.164:
version "1.4.170"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz#0415fc489402e09bfbe1f0c99bbf4d73f31d48d4"
integrity sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==
electron-to-chromium@^1.4.202:
version "1.4.208"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.208.tgz#ecb5b47c8cc212a43172ffc5ce50178a638a5d74"
integrity sha512-diMr4t69FigAGUk2KovP0bygEtN/9AkqEVkzjEp0cu+zFFbZMVvwACpTTfuj1mAmFR5kNoSW8wGKDFWIvmThiQ==
electron-to-chromium@^1.4.251:
version "1.4.284"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592"
integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==
electron-to-chromium@^1.4.84:
version "1.4.106"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a"
integrity sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==
elliptic@^6.5.3, elliptic@^6.5.4:
version "6.5.4"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
@ -16827,7 +16781,7 @@ node-plop@0.26.3, node-plop@^0.26.3:
mkdirp "^0.5.1"
resolve "^1.12.0"
node-releases@^2.0.2, node-releases@^2.0.5, node-releases@^2.0.6:
node-releases@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503"
integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==
@ -21967,14 +21921,6 @@ upath@^2.0.1:
resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
update-browserslist-db@^1.0.0, update-browserslist-db@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38"
integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==
dependencies:
escalade "^3.1.1"
picocolors "^1.0.0"
update-browserslist-db@^1.0.9:
version "1.0.10"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3"
@ -22527,9 +22473,9 @@ webpack@4:
webpack-sources "^1.4.1"
"webpack@>=4.43.0 <6.0.0", webpack@^5.9.0:
version "5.74.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980"
integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==
version "5.76.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.1.tgz#7773de017e988bccb0f13c7d75ec245f377d295c"
integrity sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^0.0.51"
@ -22556,10 +22502,10 @@ webpack@4:
watchpack "^2.4.0"
webpack-sources "^3.2.3"
webpack@^5.75.0:
version "5.75.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152"
integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==
webpack@^5.76.0:
version "5.76.0"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.76.0.tgz#f9fb9fb8c4a7dbdcd0d56a98e56b8a942ee2692c"
integrity sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==
dependencies:
"@types/eslint-scope" "^3.7.3"
"@types/estree" "^0.0.51"